Prev: A742 Up: Map Next: A81D
A7AE: interpreter inner loop
Used by the routines at A883 and AD1E.
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