Submitted by Steve Fewell
Routine:ascnum
Name: Convert ASCII string to Binary numbers
Starting Address: &AB4E
Entry: &36 = Length of String in SWA. SWA = ASCII Number "String".
Exit: A and &27 contain the conversion type (&40 = Integer; &FF = Float).
Description:
The ASCII string in SWA is converted to either an Integer (IWA)
or a Float (FWA).
The routine places a binary zero at the end of the SWA, and steps &36 by 1).
Push the text pointer B position onto the Hardware stack (PHA).
Read the text at the text pointer B position (offset from &0600).
Skip any spaces at PTR B.
if a '-' is the first character (sign) in the string then:
Skip any Spaces.
Call &A2E1 to get the number (result).
Then complement the result (if the carry is set - non-zero)
Set &27 to the Result type and retore PTR B position from stack the return.
Otherwise; If a '+' is the first character found, then skip spaces and get next character
(and ignore the '+'-sign).
Call &A2E1 to get the numeric result.
Store the result type in &27.
restore the PTR B position and return with A=?&27.
AB3A | h | 104 | 68 | PLA |
AB3B | 133 027 | 85 1B | STA &1B | |
AB3D | h | 104 | 68 | PLA |
AB3E | 133 026 | 85 1A | STA &1A | |
AB40 | h | 104 | 68 | PLA |
AB41 | 133 025 | 85 19 | STA &19 | |
AB43 | ' | 165 039 | A5 27 | LDA &27 |
AB45 | ` | 096 | 60 | RTS |
AB46 | - | AB4D | ...[VAL routine]... | |
AB4E | 6 | 166 054 | A6 36 | LDX &36 |
AB50 | 158 000 006 | 9E 00 06 | STZ &0600,X | |
AB53 | 165 025 | A5 19 | LDA &19 | |
AB55 | H | 072 | 48 | PHA |
AB56 | 165 026 | A5 1A | LDA &1A | |
AB58 | H | 072 | 48 | PHA |
AB59 | 165 027 | A5 1B | LDA &1B | |
AB5B | H | 072 | 48 | PHA |
AB5C | d | 100 027 | 64 1B | STZ &1B |
AB5E | d | 100 025 | 64 19 | STZ &19 |
AB60 | 169 006 | A9 06 | LDA#&06 | |
AB62 | 133 026 | 85 1A | STA &1A | |
AB64 | 032 213 142 | 20 D5 8E | JSR &8ED5 Skip Spaces in PTRB | |
AB67 | - | 201 045 | C9 2D | CMP#&2D |
AB69 | 240 014 | F0 0E | BEQ 14 --> &AB79 | |
AB6B | + | 201 043 | C9 2B | CMP#&2B |
AB6D | 208 003 | D0 03 | BNE 3 --> &AB72 | |
AB6F | 032 213 142 | 20 D5 8E | JSR &8ED5 Skip Spaces in PTRB | |
AB72 | 198 027 | C6 1B | DEC &1B | |
AB74 | 032 225 162 | 20 E1 A2 | JSR &A2E1 ASCNUM: Extract Number at PTRB | |
AB77 | 128 013 | 80 0D | BRA 13 --> &AB86 | |
AB79 | 032 213 142 | 20 D5 8E | JSR &8ED5 Skip Spaces in PTRB | |
AB7C | 198 027 | C6 1B | DEC &1B | |
AB7E | 032 225 162 | 20 E1 A2 | JSR &A2E1 ASCNUM: Extract Number at PTRB | |
AB81 | 144 003 | 90 03 | BCC 3 --> &AB86 | |
AB83 | 032 218 172 | 20 DA AC | JSR &ACDA Complement Result | |
AB86 | ' | 133 039 | 85 27 | STA &27 |
AB88 | 128 176 | 80 B0 | BRA -80 --> &AB3A |