Prev: A0B1 Up: Map Next: A115
A0DB: Print Wide Character
Prints one character of text at double width, using the table at 5C84 to double each nibble of the glyph into a byte. The character takes two cells across and two cells high of attributes.
Input
B' Attribute
DE Address of the character code
DE' Value of 20
HL Screen address
HL' Attribute address
Output
HL Screen address two cells to the right
HL' Attribute address two cells to the right
PrintWideCharacter A0DB LD A,$07 Set the number of rows to seven.
A0DD LD B,$5C Use the table of doubled nibbles.
PrintWideCharacter_Row A0DF EX AF,AF' Save the number of rows.
A0E0 LD A,(DE) Fetch a row of the glyph.
A0E1 SRL A Move the top nibble to the bottom.
A0E3 SRL A
A0E5 SRL A
A0E7 SRL A
A0E9 ADD A,$84 Add the offset of the table to the nibble.
A0EB LD C,A Put it in C.
A0EC LD A,(BC) Fetch the doubled nibble.
A0ED LD (HL),A Draw it on the left.
A0EE DEC H Move up a pixel row.
A0EF LD (HL),A Draw it again.
A0F0 INC H Move back down.
A0F1 INC HL Move on to the right cell.
A0F2 LD A,(DE) Fetch the row of the glyph again.
A0F3 AND %00001111 Keep the bottom nibble.
A0F5 ADD A,$84 Add the offset of the table.
A0F7 LD C,A Put it in C.
A0F8 LD A,(BC) Fetch the doubled nibble.
A0F9 LD (HL),A Draw it on the right.
A0FA DEC H Move up a pixel row.
A0FB LD (HL),A Draw it again.
A0FC DEC HL Move back to the left cell.
A0FD INC DE Move on to the next row of the glyph.
A0FE CALL MoveUpARow Move up a row of the screen.
A101 EX AF,AF' Restore the number of rows.
A102 DEC A Decrease it.
A103 JR NZ,PrintWideCharacter_Row Loop back to PrintWideCharacter_Row for each row.
A105 EXX Switch to the attribute registers.
A106 LD (HL),B Set the attribute of the cell at the left.
A107 SBC HL,DE Move up to the attribute cell above.
A109 LD (HL),B Set its attribute.
A10A INC HL Move on to the right.
A10B LD (HL),B Set the attribute of the cell above on the right.
A10C ADD HL,DE Move back down.
A10D LD (HL),B Set the attribute of the cell on the right.
A10E INC HL Move on to the next cell.
A10F EXX Switch back to the screen registers.
A110 POP HL Restore the screen address.
A111 INC HL Move on two cells.
A112 INC HL
A113 POP DE Restore the address of the character code.
A114 RET Return.
Prev: A0B1 Up: Map Next: A115