Prev: 815B Up: Map Next: 81BA
8179: Menu text PRINT routine
Used by the routines at 8039, 811B and 812D.
Routine that prints a string of text for menu 1 (8039) and menu 2 (811B). The menu font used is the standard ZX Spectrum ROM character set, rather than the in-game text characters.
8179 LD DE,($8BC0) Get the address pointer for the address of the text to print (e.g. 8BC2/8C9A).
817D LD A,(DE) Get first byte = length of text string
817E INC DE Increment to start of text string, and store address
817F LD ($8BC0),DE
8183 LD ($8BBD),A Store the length of string (number of characters)
8186 LD ($8BBE),HL Store screen address position
Loop for printing the text characters on screen
8189 LD DE,($8BC0) Get the next text character to print
818D LD A,(DE)
818E INC DE Increment to next text character and store address for future printing
818F LD ($8BC0),DE
8193 LD HL,($5C36) Get pointer to the ZX Spectrum character set (CHARS)
8196 LD D,$00 Get the text character's ASCII value (store in DE register pair)
8198 LD E,A
8199 LD B,$08 8 pixel rows to print
819B ADD HL,DE Calculate the address of the character in the character set ready to print [CHARS address + (character ASCII value x 8)] and swap into DE
819C DJNZ $819B
819E EX DE,HL
819F LD HL,($8BBE) Get the screen address position
81A2 LD C,H Preserve screen address of top pixel row in C register
81A3 LD B,$08 8 pixel lines to print
Draw the 8 pixel row bytes of the text character
81A5 LD A,(DE) Get pixel row byte of character
81A6 INC DE (and move pointer along to the next one)
81A7 LD (HL),A Copy byte onto screen
81A8 INC H Move down 1 pixel line
81A9 DJNZ $81A5 Repeat for 8 pixel rows to print full text character
Move on to the next character in the string and next screen position
81AB INC L Move one horizontal character position to the right...
81AC LD H,C Retrieve vertical screen address of top pixel row from C register and put into high byte of H register
81AD LD ($8BBE),HL ...and store this screen address ready for next character
81B0 LD A,($8BBD) Decrement and re-store the text length counter
81B3 DEC A
81B4 LD ($8BBD),A
81B7 JR NZ,$8189 Repeat loop x number of characters in the text string
81B9 RET
Prev: 815B Up: Map Next: 81BA