RSS Bot Posted March 3, 2019 Share Posted March 3, 2019 Bill Lange has been blogging about Atari Pascal since early February at https://insideataripascal.blogspot.com/, so here's my own small contribution after spending an afternoon poking around in APX Pascal and looking for the core interpreter. If we look at the PASCAL runtime on the APX Pascal disk, it's a simple enough image. It loads itself from disk to $3300-$59ff and then starts running from $3300. So what does that initial bootstrap code do? Here's the preamble: 33A7: 00 3A .WORD $3A00 ; source33A9: 00 A0 .WORD $A000 ; destination33AB: 00 20 .WORD $2000 ; count33AD: 00 1D .WORD $1D00And the subroutine looks like: 332B: AD AD 33 LDA $33AD332E: 85 80 STA $803330: AD AE 33 LDA $33AE3333: 85 81 STA $813335: A9 00 LDA #03337: 85 82 STA $823339: 85 83 STA $83333B: 20 00 A2 JSR $A200…A200: 4C 12 B8 JMP $B812This copies the word in $33AD ($1D00) to $80,$81 and zeros $82,$83 before invoking a routine at $A200, which vectors to $B812. That routine does several things, including:A278: 00 A0 .WORD $A000A27A: 78 02 .WORD $0278So we move the word at $80,$81 ($1D00) to $D0,D1, and set $CE,$CF to $A000 and $D2,D3 to $0278, before calling another block copier.1F00: 4C 12 B8 JMP $B8121F03: 4C B1 AB JMP $ABB11F06: 4C B6 AB JMP $ABB6…1F72: 4C 87 B8 JMP $B8871F75: 4C 5F BC JMP $BC5FAfter we return from this the code continues with:B9EB: A2 21 LDX #$21B9ED: A0 00 LDY #0B9EF: B9 CA B9 LDA $B9CA,YB9F2: 99 92 00 STA $0092,YB9F5: C8 INYB9F6: CA DEXB9F7: D0 F6 BNE $B9EFB9F9: A5 81 LDA $81B9FB: 85 AD STA $ADB9FD: 85 B2 STA $B2B9FF: E6 B2 INC $B2BA01: 60 RTSThis copies the code at $B9CA into page zero, and patches the value at $81 ($1D) into $AD and the $B2 and then increments $B2, so we end up with the following: Link to comment Share on other sites More sharing options...
Recommended Posts