C64 ROM | Routines |
Prev: BCE9 | Up: Map | Next: BD67 |
BCF3 | A0 00 | LDY #$00 | clear Y | |
BCF5 | A2 0A | LDX #$0A | set index | |
BCF7 | 94 5D | STY $5D,X | clear byte | |
BCF9 | CA | DEX | decrement index | |
BCFA | 10 FB | BPL $BCF7 | loop until numexp to negnum (and FAC1) = $00 | |
BCFC | 90 0F | BCC $BD0D | branch if first character is numeric | |
BCFE | C9 2D | CMP #"-" | else compare with "-" | |
BD00 | D0 04 | BNE $BD06 | branch if not "-" | |
BD02 | 86 67 | STX $67 | set flag for -ve n (negnum = $FF) | |
BD04 | F0 04 | BEQ $BD0A | branch always | |
BD06 | C9 2B | CMP #"+" | else compare with "+" | |
BD08 | D0 05 | BNE $BD0F | branch if not "+" | |
This entry point is used by the routine at BD6A.
|
||||
BD0A | 20 73 00 | JSR $0073 | increment and scan memory | |
BD0D | 90 5B | BCC $BD6A | branch if numeric character | |
BD0F | C9 2E | CMP #"." | else compare with "." | |
BD11 | F0 2E | BEQ $BD41 | branch if "." | |
BD13 | C9 45 | CMP #"E" | else compare with "E" | |
BD15 | D0 30 | BNE $BD47 | branch if not "E" | |
was "E" so evaluate exponential part
|
||||
BD17 | 20 73 00 | JSR $0073 | increment and scan memory | |
BD1A | 90 17 | BCC $BD33 | branch if numeric character | |
BD1C | C9 AB | CMP #$AB | else compare with token for - | |
BD1E | F0 0E | BEQ $BD2E | branch if token for - | |
BD20 | C9 2D | CMP #"-" | else compare with "-" | |
BD22 | F0 0A | BEQ $BD2E | branch if "-" | |
BD24 | C9 AA | CMP #$AA | else compare with token for + | |
BD26 | F0 08 | BEQ $BD30 | branch if token for + | |
BD28 | C9 2B | CMP #"+" | else compare with "+" | |
BD2A | F0 04 | BEQ $BD30 | branch if "+" | |
BD2C | D0 07 | BNE $BD35 | branch always | |
BD2E | 66 60 | ROR $60 | set exponent -ve flag (C, which=1, into b7) | |
This entry point is used by the routine at BD91.
|
||||
BD30 | 20 73 00 | JSR $0073 | increment and scan memory | |
BD33 | 90 5C | BCC $BD91 | branch if numeric character | |
BD35 | 24 60 | BIT $60 | test exponent -ve flag | |
BD37 | 10 0E | BPL $BD47 | if +ve go evaluate exponent | |
else do exponent = -exponent
|
||||
BD39 | A9 00 | LDA #$00 | clear result | |
BD3B | 38 | SEC | set carry for subtract | |
BD3C | E5 5E | SBC $5E | subtract exponent byte | |
BD3E | 4C 49 BD | JMP $BD49 | go evaluate exponent | |
BD41 | 66 5F | ROR $5F | set decimal point flag | |
BD43 | 24 5F | BIT $5F | test decimal point flag | |
BD45 | 50 C3 | BVC $BD0A | branch if only one decimal point so far | |
evaluate exponent
|
||||
BD47 | A5 5E | LDA $5E | get exponent count byte | |
BD49 | 38 | SEC | set carry for subtract | |
BD4A | E5 5D | SBC $5D | subtract numerator exponent | |
BD4C | 85 5E | STA $5E | save exponent count byte | |
BD4E | F0 12 | BEQ $BD62 | branch if no adjustment | |
BD50 | 10 09 | BPL $BD5B | else if +ve go do FAC1*10^expcnt | |
else go do FAC1/10^(0-expcnt)
|
||||
BD52 | 20 FE BA | JSR $BAFE | divide FAC1 by 10 | |
BD55 | E6 5E | INC $5E | increment exponent count byte | |
BD57 | D0 F9 | BNE $BD52 | loop until all done | |
BD59 | F0 07 | BEQ $BD62 | branch always | |
BD5B | 20 E2 BA | JSR $BAE2 | multiply FAC1 by 10 | |
BD5E | C6 5E | DEC $5E | decrement exponent count byte | |
BD60 | D0 F9 | BNE $BD5B | loop until all done | |
BD62 | A5 67 | LDA $67 | get -ve flag | |
BD64 | 30 01 | BMI $BD67 | if -ve do - FAC1 and return | |
BD66 | 60 | RTS |
Prev: BCE9 | Up: Map | Next: BD67 |