Routines
 Prev: \$217D Up: Map Next: \$2241
\$217E: Generate the character codes of the digits of a number
Used by the routines at \$2241, \$2500 and \$2620.
Input
(\$A3,\$A4) The number
\$217E LDA #\$20 Prepare 5 space characters at \$8A-\$8E.
\$2180 STA \$8A
\$2182 STA \$8B
\$2184 STA \$8C
\$2186 STA \$8D
\$2188 STA \$8E
\$218A LDA \$A4 Pick up the MSB of the number.
\$218C CMP #\$28 Is it less than 40 (meaning the number is less than 10240)?
\$218E BCC \$21B6 Branch if so.
\$2190 LDA \$8A Increment the character code of the first digit at \$8A from space to '1', '1' to '2' etc.
\$2192 CLC
\$2195 ORA #\$10
\$2197 STA \$8A
\$2199 LDA #\$30 Set the character code of the second, third and fourth digits at \$8B, \$8C and \$8D to '0'.
\$219B STA \$8B
\$219D STA \$8C
\$219F STA \$8D
\$21A1 LDA \$A3 Subtract \$2774 (10100) from the number at \$A3. (This is a bug.)
\$21A3 SEC
\$21A4 SBC #\$74
\$21A6 STA \$A3
\$21A8 BCS \$21AC
\$21AA DEC \$A4
\$21AC LDA \$A4
\$21AE SEC
\$21AF SBC #\$27
\$21B1 STA \$A4
\$21B3 JMP \$218C Jump back to consider the 10000's digit again.
\$21B6 CMP #\$27 Is the MSB of the number 39 (meaning the number is at least 9984)?
\$21B8 BNE \$21C0 Branch if not.
\$21BA LDA \$A3 Pick up the LSB of the number.
\$21BC CMP #\$74 Is it 116 or more (meaning the number is 10100 or more)? (This is a bug.)
\$21BE BCS \$2190 Branch back to deal with the 10000s digit if so.
The 10000s digit has been computed. Now for the 1000s digit.
\$21C0 LDA \$A4 Pick up the MSB of what remains of the number.
\$21C2 CMP #\$04 Is it less than 4 (meaning the number is less than 1024)?
\$21C4 BCC \$21EA Branch if so.
\$21C6 LDA \$8B Increment the character code of the second digit at \$8B from space or '0' to '1', '1' to '2' etc.
\$21C8 CLC
\$21CB ORA #\$10
\$21CD STA \$8B
\$21CF LDA #\$30 Set the character code of the third and fourth digits at \$8C and \$8D to '0'.
\$21D1 STA \$8C
\$21D3 STA \$8D
\$21D5 LDA \$A3 Subtract \$03E8 (1000) from the number at \$A3.
\$21D7 SEC
\$21D8 SBC #\$E8
\$21DA STA \$A3
\$21DC BCS \$21E0
\$21DE DEC \$A4
\$21E0 LDA \$A4
\$21E2 SEC
\$21E3 SBC #\$03
\$21E5 STA \$A4
\$21E7 JMP \$21C2 Jump back to consider the 1000s digit again.
\$21EA CMP #\$03 Is the MSB of the number 3 (meaning the number is at least 768)?
\$21EC BNE \$21F4 Branch if not.
\$21EE LDA \$A3 Pick up the LSB of the number.
\$21F0 CMP #\$E8 Is it 232 or more (meaning the number is 1000 or more)?
\$21F2 BCS \$21C6 Branch back to deal with the 1000s digit if so.
The 1000s digit has been computed. Now for the 100s digit.
\$21F4 LDA \$A4 Pick up the MSB of what remains of the number.
\$21F6 BEQ \$2213 Branch if it's zero (meaning the number is less than 256).
\$21F8 LDA \$8C Increment the character code of the third digit at \$8C from space or '0' to '1', '1' to '2' etc.
\$21FA CLC
\$21FD ORA #\$10
\$21FF STA \$8C
\$2201 LDA \$A3 Subtract \$64 (100) from the number at \$A3.
\$2203 SEC
\$2204 SBC #\$64
\$2206 STA \$A3
\$2208 BCS \$220C
\$220A DEC \$A4
\$220C LDA #\$30 Set the character code of the fourth digit at \$8D to '0'.
\$220E STA \$8D
\$2210 JMP \$21F4 Jump back to consider the 100s digit again.
\$2213 LDA \$A3 Pick up the LSB of the number.
\$2215 CMP #\$64 Is it 100 or more?
\$2217 BCS \$21F8 Branch back to deal with the 100s digit if so.
\$2219 JMP \$2222 Otherwise jump forward to compute the 10s digit.
This entry point is used by the routines at \$1DB7 (to generate the character codes of the first two digits of a lines amount) and \$2241 (to generate the character codes of the digits in a number used in a question asked by MR WACKER).
\$221C LDA #\$20 Set the character codes of the last two digits at \$8D and \$8E to 32 (space).
\$221E STA \$8D
\$2220 STA \$8E
The 100s digit has been computed. Now for the 10s digit.
\$2222 LDA \$A3 Pick up the LSB of what remains of the number.
\$2224 CMP #\$0A Is it less than 10?
\$2226 BCC \$223B Branch if so.
\$2228 LDA \$8D Increment the character code of the fourth digit at \$8D from space or '0' to '1', '1' to '2' etc.
\$222A CLC