Prev: 59068 Up: Map Next: 59183
59100: Print Colour Character
Input
A Character to print
PrintColourCharacter 59100 EXX Switch to the shadow registers.
59101 LD E,A DE'=A*8.
59102 LD D,0
59104 SLA E
59106 RL D
59108 SLA E
59110 RL D
59112 SLA E
59114 RL D
59116 LD HL,(23606) HL'=*CHARS+DE'.
59119 ADD HL,DE
59120 LD DE,(23684) Increment *DF_CC by one.
59124 INC DE
59125 LD (23684),DE
59129 DEC DE Decrease DE' by one.
All character blocks are 1 x 8 bytes.
Copy the data from the current character set to the screen buffer.
59130 LD B,8 B'=8 (byte counter).
PrintColourCharacter_Loop 59132 LD A,(HL) Fetch the byte from the character set.
59133 LD (DE),A Write the byte to the screen buffer.
59134 INC HL Increment the character set data pointer in HL' by one.
59135 INC D Move down one line in the screen buffer.
59136 DJNZ PrintColourCharacter_Loop Decrease the byte counter by one and loop back to PrintColourCharacter_Loop until all lines of the letter have been written to the screen buffer.
Calculate the attribute buffer position.
59138 LD BC,(23688) BC'=*S_POSN.
59142 LD HL,22528 HL'=22528 (attribute buffer location).
59145 DEC C Decrease C' by one.
59146 LD (23688),BC Write BC' to *S_POSN.
59150 INC C Increment C' by one.
59151 LD A,33 E'=33-C'.
59153 SUB C
59154 LD E,A
59155 LD D,0 D'=0.
59157 ADD HL,DE HL'+=DE'.
59158 LD A,24 E'=24-B'.
59160 SUB B
59161 LD E,A
59162 SLA E Shift E' left four positions (with carry).
59164 SLA E
59166 SLA E
59168 SLA E
59170 RL D Rotate D' left.
59172 SLA E Shift E' left (with carry).
59174 RL D Rotate D' left.
59176 ADD HL,DE HL'+=DE'.
59177 LD A,(23695) A=*ATTR_T.
59180 LD (HL),A Write A to *HL'.
59181 EXX Switch back to the normal registers.
59182 RET Return.
Prev: 59068 Up: Map Next: 59183