Routines |
Prev: 7644 | Up: Map | Next: 76C6 |
|
||||||||
7646 | PUSH HL | |||||||
7647 | LD HL,$D91F | Blank out the 32-byte buffer at D900 | ||||||
764A | XOR A | |||||||
764B | LD B,$1F | |||||||
764D | LD (HL),A | |||||||
764E | DEC L | |||||||
764F | DJNZ $764D | |||||||
7651 | LD A,$30 | 0x30 is the ASCII code for '0' (zero) | ||||||
7653 | LD BC,$D8F0 | BC=-10000 | ||||||
7656 | EX DE,HL | HL=the number, DE=D900 | ||||||
7657 | ADD HL,BC | Subtract 10000 | ||||||
7658 | JR C,$7675 | Jump if the number is > 10000 | ||||||
765A | SBC HL,BC | Add the 10000 back on | ||||||
765C | LD BC,$FC18 | BC=-1000 | ||||||
765F | ADD HL,BC | Subtract 1000 | ||||||
7660 | JR C,$7682 | Jump if the number is > 1000 | ||||||
7662 | SBC HL,BC | Add the 1000 back on | ||||||
7664 | LD BC,$FF9C | BC=-100 | ||||||
7667 | ADD HL,BC | Subtract 100 | ||||||
7668 | JR C,$768F | Jump if the number is > 100 | ||||||
766A | SBC HL,BC | Add the 100 back on | ||||||
766C | LD C,$F6 | BC=-10 | ||||||
766E | ADD HL,BC | Subtract 10 | ||||||
766F | JR C,$769B | Jump if the number is > 10 | ||||||
7671 | SBC HL,BC | Add the 10 back on | ||||||
7673 | JR $76A3 | |||||||
We get here if the number is >= 10000.
|
||||||||
7675 | INC A | Perform trial subtractions of 10000 and get the ASCII code for the 10000s digit in A | ||||||
7676 | ADD HL,BC | |||||||
7677 | JR C,$7675 | |||||||
7679 | SBC HL,BC | Undo the last trial subtraction | ||||||
767B | LD BC,$FC18 | BC=-1000 | ||||||
767E | LD (DE),A | Store the ASCII code for the 10000s digit | ||||||
767F | LD A,$2F | |||||||
7681 | INC E | Move along in the buffer | ||||||
7682 | INC A | Perform trial subtractions of 1000 and get the ASCII code for the 1000s digit in A | ||||||
7683 | ADD HL,BC | |||||||
7684 | JR C,$7682 | |||||||
7686 | SBC HL,BC | Undo the last trial subtraction | ||||||
7688 | LD BC,$FF9C | BC=-100 | ||||||
768B | LD (DE),A | Store the ASCII code for the 1000s digit | ||||||
768C | LD A,$2F | |||||||
768E | INC E | Move along in the buffer | ||||||
768F | INC A | Perform trial subtractions of 100 and get the ASCII code for the 100s digit in A | ||||||
7690 | ADD HL,BC | |||||||
7691 | JR C,$768F | |||||||
7693 | SBC HL,BC | Undo the last trial subtraction | ||||||
7695 | LD (DE),A | Store the ASCII code for the 100s digit | ||||||
7696 | INC E | Move along in the buffer | ||||||
7697 | LD C,$F6 | BC=-10 | ||||||
7699 | LD A,$2F | |||||||
769B | INC A | Perform trial subtractions of 10 and get the ASCII code for the 10s digit in A | ||||||
769C | ADD HL,BC | |||||||
769D | JR C,$769B | |||||||
769F | SBC HL,BC | Undo the last trial subtraction | ||||||
76A1 | LD (DE),A | Store the ASCII code for the 10s digit | ||||||
76A2 | INC E | Move along in the buffer | ||||||
76A3 | LD A,L | Get the ASCII code for the units digit in A | ||||||
76A4 | ADD A,$30 | |||||||
76A6 | LD (DE),A | Store the ASCII code for the units digit | ||||||
76A7 | XOR A | |||||||
76A8 | INC E | Move along in the buffer | ||||||
76A9 | 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 D900, generate the corresponding graphic data.
|
||||||||
76AA | LD E,$00 | DE=D900 (first character in the number string) | ||||||
76AC | LD A,(DE) | Pick up a character from the number string | ||||||
76AD | AND A | Have we reached the end of the string? | ||||||
76AE | JR NZ,$76B2 | Jump if not | ||||||
76B0 | POP HL | |||||||
76B1 | RET | |||||||
76B2 | INC E | Move to the next character in the number string | ||||||
76B3 | EXX | |||||||
76B4 | LD L,A | L'=ASCII code for a digit of the number (0x30-0x39) | ||||||
76B5 | LD H,$D9 | Point HL' at the start of the font data for this digit | ||||||
76B7 | LD B,(HL) | Pick up the pixel width in B' | ||||||
76B8 | INC B | Add 1 for left padding | ||||||
76B9 | XOR A | An empty byte for left padding | ||||||
76BA | INC H | Point HL' at the next bitmap byte | ||||||
76BB | EXX | |||||||
76BC | CALL $7632 | Slide the bitmap byte into the buffer | ||||||
76BF | EXX | |||||||
76C0 | LD A,(HL) | Pick up the next bitmap byte | ||||||
76C1 | DJNZ $76BA | Jump back until all bitmap bytes are done | ||||||
76C3 | EXX | |||||||
76C4 | JR $76AC | Jump back to collect the next digit |
Prev: 7644 | Up: Map | Next: 76C6 |