| C64 ROM | Routines | 
| Prev: AE83 | Up: Map | Next: AF14 | 
| 
 
the get arithmetic element vector is initialised to point here
 
 | 
||||
| AE86 | A9 00 | LDA #$00 | clear byte | |
| AE88 | 85 0D | STA $0D | clear data type flag, $FF = string, $00 = numeric | |
| AE8A | 20 73 00 | JSR $0073 | increment and scan memory | |
| AE8D | B0 03 | BCS $AE92 | branch if not numeric character | |
| 
 
else numeric string found (e.g. 123)
 
 | 
||||
| AE8F | 4C F3 BC | JMP $BCF3 | get FAC1 from string and return | |
| 
 
wasn't a number so ...
 
 | 
||||
| AE92 | 20 13 B1 | JSR $B113 | check byte, return Cb = 0 if<"A" or >"Z" | |
| AE95 | 90 03 | BCC $AE9A | branch if not variable name | |
| AE97 | 4C 28 AF | JMP $AF28 | variable name set-up and return | |
| AE9A | C9 FF | CMP #$FF | compare with token for PI | |
| AE9C | D0 0F | BNE $AEAD | branch if not PI | |
| AE9E | A9 A8 | LDA #$A8 | get PI pointer low byte | |
| AEA0 | A0 AE | LDY #$AE | get PI pointer high byte | |
| AEA2 | 20 A2 BB | JSR $BBA2 | unpack memory (AY) into FAC1 | |
| AEA5 | 4C 73 00 | JMP $0073 | increment and scan memory and return | |
| AEA8 | .BYTE $82,$49,$0F,$DA,$A1 | 3.141592653 (PI as floating number) | ||
| 
 
wasn't variable name so ...
 
 | 
||||
| AEAD | C9 2E | CMP #"." | compare with "." | |
| AEAF | F0 DE | BEQ $AE8F | if so get FAC1 from string and return, e.g. was .123 | |
| 
 
wasn't .123 so ...
 
 | 
||||
| AEB1 | C9 AB | CMP #$AB | compare with token for - | |
| AEB3 | F0 58 | BEQ $AF0D | branch if - token, do set-up for functions | |
| 
 
wasn't -123 so ...
 
 | 
||||
| AEB5 | C9 AA | CMP #$AA | compare with token for + | |
| AEB7 | F0 D1 | BEQ $AE8A | branch if + token, +1 = 1 so ignore leading + | |
| 
 
it wasn't any sort of number so ...
 
 | 
||||
| AEB9 | C9 22 | CMP #$22 | compare with " | |
| AEBB | D0 0F | BNE $AECC | branch if not open quote | |
| 
 
This entry point is used by the routine at ABBF.
 
was open quote so get the enclosed string
 
print "..." string to string utility area
 
 | 
||||
| AEBD | A5 7A | LDA $7A | get BASIC execute pointer low byte | |
| AEBF | A4 7B | LDY $7B | get BASIC execute pointer high byte | |
| AEC1 | 69 00 | ADC #$00 | add carry to low byte | |
| AEC3 | 90 01 | BCC $AEC6 | branch if no overflow | |
| AEC5 | C8 | INY | increment high byte | |
| AEC6 | 20 87 B4 | JSR $B487 | print " terminated string to utility pointer | |
| AEC9 | 4C E2 B7 | JMP $B7E2 | restore BASIC execute pointer from temp and return | |
| 
 
wasn't a string so ...
 
 | 
||||
| AECC | C9 A8 | CMP #$A8 | compare with token for NOT | |
| AECE | D0 13 | BNE $AEE3 | branch if not token for NOT | |
| 
 
was NOT token
 
 | 
||||
| AED0 | A0 18 | LDY #$18 | offset to NOT function | |
| AED2 | D0 3B | BNE $AF0F | do set-up for function then execute, branch always | |
| 
 
do = compare
 
 | 
||||
| AED4 | 20 BF B1 | JSR $B1BF | evaluate integer expression, no sign check | |
| AED7 | A5 65 | LDA $65 | get FAC1 mantissa 4 | |
| AED9 | 49 FF | EOR #$FF | invert it | |
| AEDB | A8 | TAY | copy it | |
| AEDC | A5 64 | LDA $64 | get FAC1 mantissa 3 | |
| AEDE | 49 FF | EOR #$FF | invert it | |
| AEE0 | 4C 91 B3 | JMP $B391 | convert fixed integer AY to float FAC1 and return | |
| 
 
wasn't a string or NOT so ...
 
 | 
||||
| AEE3 | C9 A5 | CMP #$A5 | compare with token for FN | |
| AEE5 | D0 03 | BNE $AEEA | branch if not token for FN | |
| AEE7 | 4C F4 B3 | JMP $B3F4 | else go evaluate FNx | |
| 
 
wasn't a string, NOT or FN so ...
 
 | 
||||
| AEEA | C9 B4 | CMP #$B4 | compare with token for SGN | |
| AEEC | 90 03 | BCC $AEF1 | if less than SGN token evaluate expression in parentheses | |
| 
 
else was a function token
 
 | 
||||
| AEEE | 4C A7 AF | JMP $AFA7 | go set up function references, branch always | |
| AEF1 | 20 FA AE | JSR $AEFA | scan for "(", else do syntax error then warm start | |
| AEF4 | 20 9E AD | JSR $AD9E | evaluate expression | |
| AEF7 | A9 29 | LDA #")" | load A with ")" | |
| AEF9 | .BYTE $2C | makes next line BIT $28A9 | ||
| AEFA | A9 28 | LDA #"(" | load A with "(" | |
| AEFC | .BYTE $2C | makes next line BIT $2CA9 | ||
| AEFD | A9 2C | LDA #"," | load A with "," | |
| AEFF | A0 00 | LDY #$00 | clear index | |
| AF01 | D1 7A | CMP ($7A),Y | compare with BASIC byte | |
| AF03 | D0 03 | BNE $AF08 | if not expected byte do syntax error then warm start | |
| AF05 | 4C 73 00 | JMP $0073 | else increment and scan memory and return | |
| AF08 | A2 0B | LDX #$0B | error code $0B, syntax error | |
| AF0A | 4C 37 A4 | JMP $A437 | do error #X then warm start | |
| AF0D | A0 15 | LDY #$15 | set offset from base to > operator | |
| AF0F | 68 | PLA | dump return address low byte | |
| AF10 | 68 | PLA | dump return address high byte | |
| AF11 | 4C FA AD | JMP $ADFA | execute function then continue evaluation | |
| Prev: AE83 | Up: Map | Next: AF14 |