Prev: 30276 Up: Map Next: 30406
30278: Generate graphic data for a number
Used by the routines at 30408 and 30432. Generates a 7x24-bit graphic for the digits of the number in DE, and stores it in the buffer at 55563.
Input
DE Number
30278 PUSH HL
30279 LD HL,55583 Blank out the 32-byte buffer at 55552
30282 XOR A
30283 LD B,31
30285 LD (HL),A
30286 DEC L
30287 DJNZ 30285
30289 LD A,48 48 is the ASCII code for '0' (zero)
30291 LD BC,55536 BC=-10000
30294 EX DE,HL HL=the number, DE=55552
30295 ADD HL,BC Subtract 10000
30296 JR C,30325 Jump if the number is > 10000
30298 SBC HL,BC Add the 10000 back on
30300 LD BC,64536 BC=-1000
30303 ADD HL,BC Subtract 1000
30304 JR C,30338 Jump if the number is > 1000
30306 SBC HL,BC Add the 1000 back on
30308 LD BC,65436 BC=-100
30311 ADD HL,BC Subtract 100
30312 JR C,30351 Jump if the number is > 100
30314 SBC HL,BC Add the 100 back on
30316 LD C,246 BC=-10
30318 ADD HL,BC Subtract 10
30319 JR C,30363 Jump if the number is > 10
30321 SBC HL,BC Add the 10 back on
30323 JR 30371
We get here if the number is >= 10000.
30325 INC A Perform trial subtractions of 10000 and get the ASCII code for the 10000s digit in A
30326 ADD HL,BC
30327 JR C,30325
30329 SBC HL,BC Undo the last trial subtraction
30331 LD BC,64536 BC=-1000
30334 LD (DE),A Store the ASCII code for the 10000s digit
30335 LD A,47
30337 INC E Move along in the buffer
30338 INC A Perform trial subtractions of 1000 and get the ASCII code for the 1000s digit in A
30339 ADD HL,BC
30340 JR C,30338
30342 SBC HL,BC Undo the last trial subtraction
30344 LD BC,65436 BC=-100
30347 LD (DE),A Store the ASCII code for the 1000s digit
30348 LD A,47
30350 INC E Move along in the buffer
30351 INC A Perform trial subtractions of 100 and get the ASCII code for the 100s digit in A
30352 ADD HL,BC
30353 JR C,30351
30355 SBC HL,BC Undo the last trial subtraction
30357 LD (DE),A Store the ASCII code for the 100s digit
30358 INC E Move along in the buffer
30359 LD C,246 BC=-10
30361 LD A,47
30363 INC A Perform trial subtractions of 10 and get the ASCII code for the 10s digit in A
30364 ADD HL,BC
30365 JR C,30363
30367 SBC HL,BC Undo the last trial subtraction
30369 LD (DE),A Store the ASCII code for the 10s digit
30370 INC E Move along in the buffer
30371 LD A,L Get the ASCII code for the units digit in A
30372 ADD A,48
30374 LD (DE),A Store the ASCII code for the units digit
30375 XOR A
30376 INC E Move along in the buffer
30377 LD (DE),A Mark the end of the number string with a 0 byte
Now that the ASCII codes for the digits of the number have been calculated and stored at 55552, generate the corresponding graphic data.
30378 LD E,0 DE=55552 (first character in the number string)
30380 LD A,(DE) Pick up a character from the number string
30381 AND A Have we reached the end of the string?
30382 JR NZ,30386 Jump if not
30384 POP HL
30385 RET
30386 INC E Move to the next character in the number string
30387 EXX
30388 LD L,A L'=ASCII code for a digit of the number (48-57)
30389 LD H,217 Point HL' at the start of the font data for this digit
30391 LD B,(HL) Pick up the pixel width in B'
30392 INC B Add 1 for left padding
30393 XOR A An empty byte for left padding
30394 INC H Point HL' at the next bitmap byte
30395 EXX
30396 CALL 30258 Slide the bitmap byte into the buffer
30399 EXX
30400 LD A,(HL) Pick up the next bitmap byte
30401 DJNZ 30394 Jump back until all bitmap bytes are done
30403 EXX
30404 JR 30380 Jump back to collect the next digit
Prev: 30276 Up: Map Next: 30406