C64 ROM | Routines |
Prev: A742 | Up: Map | Next: A81D |
A7AE | 20 2C A8 | JSR $A82C | do CRTL-C check vector | |
A7B1 | A5 7A | LDA $7A | get the BASIC execute pointer low byte | |
A7B3 | A4 7B | LDY $7B | get the BASIC execute pointer high byte | |
A7B5 | C0 02 | CPY #$02 | compare the high byte with $02xx | |
A7B7 | EA | NOP | unused byte | |
A7B8 | F0 04 | BEQ $A7BE | if immediate mode skip the continue pointer save | |
A7BA | 85 3D | STA $3D | save the continue pointer low byte | |
A7BC | 84 3E | STY $3E | save the continue pointer high byte | |
A7BE | A0 00 | LDY #$00 | clear the index | |
A7C0 | B1 7A | LDA ($7A),Y | get a BASIC byte | |
A7C2 | D0 43 | BNE $A807 | if not [EOL] go test for ":" | |
A7C4 | A0 02 | LDY #$02 | else set the index | |
A7C6 | B1 7A | LDA ($7A),Y | get next line pointer high byte | |
A7C8 | 18 | CLC | clear carry for no "BREAK" message | |
A7C9 | D0 03 | BNE $A7CE | branch if not end of program | |
A7CB | 4C 4B A8 | JMP $A84B | else go to immediate mode,was immediate or [EOT] marker | |
A7CE | C8 | INY | increment index | |
A7CF | B1 7A | LDA ($7A),Y | get line number low byte | |
A7D1 | 85 39 | STA $39 | save current line number low byte | |
A7D3 | C8 | INY | increment index | |
A7D4 | B1 7A | LDA ($7A),Y | get line # high byte | |
A7D6 | 85 3A | STA $3A | save current line number high byte | |
A7D8 | 98 | TYA | A now = 4 | |
A7D9 | 65 7A | ADC $7A | add BASIC execute pointer low byte, now points to code | |
A7DB | 85 7A | STA $7A | save BASIC execute pointer low byte | |
A7DD | 90 02 | BCC $A7E1 | branch if no overflow | |
A7DF | E6 7B | INC $7B | else increment BASIC execute pointer high byte | |
This entry point is used by the routine at A483.
|
||||
A7E1 | 6C 08 03 | JMP ($0308) | do start new BASIC code | |
the start new BASIC code vector is initialised to point here
|
||||
A7E4 | 20 73 00 | JSR $0073 | increment and scan memory | |
A7E7 | 20 ED A7 | JSR $A7ED | go interpret BASIC code from BASIC execute pointer | |
A7EA | 4C AE A7 | JMP $A7AE | loop | |
This entry point is used by the routine at A93B.
interpret BASIC code from BASIC execute pointer
|
||||
A7ED | F0 3C | BEQ $A82B | if the first byte is null just exit | |
This entry point is used by the routine at A94B.
|
||||
A7EF | E9 80 | SBC #$80 | normalise the token | |
A7F1 | 90 11 | BCC $A804 | if wasn't token go do LET | |
A7F3 | C9 23 | CMP #$23 | compare with token for TAB(-$80 | |
A7F5 | B0 17 | BCS $A80E | branch if >= TAB( | |
A7F7 | 0A | ASL A | *2 bytes per vector | |
A7F8 | A8 | TAY | copy to index | |
A7F9 | B9 0D A0 | LDA $A00D,Y | get vector high byte | |
A7FC | 48 | PHA | push on stack | |
A7FD | B9 0C A0 | LDA $A00C,Y | get vector low byte | |
A800 | 48 | PHA | push on stack | |
A801 | 4C 73 00 | JMP $0073 | increment and scan memory and return. the return in this case calls the command code, the return from that will eventually return to the interpreter inner loop above | |
A804 | 4C A5 A9 | JMP $A9A5 | perform LET | |
was not [EOL]
|
||||
A807 | C9 3A | CMP #":" | compare with ":" | |
A809 | F0 D6 | BEQ $A7E1 | if ":" go execute new code | |
else ...
|
||||
A80B | 4C 08 AF | JMP $AF08 | do syntax error then warm start | |
token was >= TAB(
|
||||
A80E | C9 4B | CMP #$4B | compare with the token for GO | |
A810 | D0 F9 | BNE $A80B | if not "GO" do syntax error then warm start | |
else was "GO"
|
||||
A812 | 20 73 00 | JSR $0073 | increment and scan memory | |
A815 | A9 A4 | LDA #$A4 | set "TO" token | |
A817 | 20 FF AE | JSR $AEFF | scan for CHR$(A), else do syntax error then warm start | |
A81A | 4C A0 A8 | JMP $A8A0 | perform GOTO |
Prev: A742 | Up: Map | Next: A81D |