Routines

27497: Print a number (score/lines/hi-score)


Used by routine at 29613

DE Display file address

27497 D5 PUSH DE
27498 211FE3 LD HL,58143
27501 0615 LD B,21 7 pixel lines × 3 bytes per line
27503 3600 LD (HL),0 Clear 58123 to 58143, which will hold the graphic data for the number to be printed
27505 2D DEC L
27506 10FB DJNZ 27503
27508 68 LD L,B HL=58112 (where character codes of digits are stored)
27509 7E LD A,(HL)
27510 A7 AND A Any digits left?
27511 2827 JR Z,27552 Jump if not
27513 5F LD E,A E=character code for digit (48-57)
27514 16D7 LD D,215
27516 23 INC HL
27517 E5 PUSH HL
27518 1A LD A,(DE) A=number of vertical pixel lines in digit
27519 4F LD C,A
27520 14 INC D
27521 1A LD A,(DE) A=vertical pixel line for this digit
27522 2E1F LD L,31 HL=58143 (last byte of buffer)
27524 0607 LD B,7
27526 0F RRCA
27527 0F RRCA Roll a vertical pixel line into the buffer
27528 CB16 RL (HL)
27530 2B DEC HL
27531 CB16 RL (HL)
27533 2B DEC HL
27534 CB16 RL (HL)
27536 2B DEC HL
27537 10F4 DJNZ 27527
27539 0D DEC C Next vertical pixel line
27540 FA9C6B JP M,27548 Jump if done them all (plus blank)
27543 20E7 JR NZ,27520 Jump back until all the vertical pixel lines are done
27545 AF XOR A Then add a blank vertical pixel line
27546 18E6 JR 27522
27548 E1 POP HL
27549 00 NOP
27550 18D5 JR 27509
27552 2E0B LD L,11 HL=58123 (start of buffer containing graphic data just prepared)
27554 01FF07 LD BC,2047 B=7 (horizontal pixel lines), C=255
27557 D1 POP DE DE=appropriate display file address
27558 7B LD A,E
27559 EDA0 LDI Copy three bytes (one horizontal pixel line) from the buffer to the screen
27561 EDA0 LDI
27563 EDA0 LDI
27565 5F LD E,A
27566 14 INC D
27567 10F6 DJNZ 27559 Jump back until 7 horizontal pixel lines are done
27569 C9 RET