![]()  | 
Routines | 
| Prev: C37D | Up: Map | Next: C415 | 
  | 
||||||||||
| PrintCharacter | C388 | PUSH AF | Stash AF, BC, DE and HL on the stack. | |||||||
| C389 | PUSH BC | |||||||||
| C38A | PUSH DE | |||||||||
| C38B | PUSH HL | |||||||||
| C38C | LD L,A | Load the character into HL. | ||||||||
| C38D | LD H,$00 | |||||||||
| C38F | ADD HL,HL | Multiply by 08 (each font character is 08 bytes of data). | ||||||||
| C390 | ADD HL,HL | |||||||||
| C391 | ADD HL,HL | |||||||||
| C392 | LD DE,$3C00 | DE+=3C00 (CHARSET-0100). | ||||||||
| C395 | ADD HL,DE | |||||||||
| C396 | EX DE,HL | |||||||||
| C397 | POP HL | Restore the screen buffer address from the stack. | ||||||||
| C398 | PUSH HL | But stash a copy of it back on the stack. | ||||||||
| C399 | LD B,$08 | Set a counter in B for 08 bytes of the font data. | ||||||||
| PrintCharacter_0 | C39B | LD A,(DE) | A=*DE. | |||||||
| C39C | PUSH BC | Stash BC and AF on the stack. | ||||||||
| C39D | PUSH AF | |||||||||
| C39E | DEC C | Decrease C by one. | ||||||||
| C39F | INC C | Increment C by one. | ||||||||
| C3A0 | LD B,$FF | B=FF. | ||||||||
| C3A2 | JR Z,PrintCharacter_2 | Jump to PrintCharacter_2 if C is zero. | ||||||||
| PrintCharacter_1 | C3A4 | SRL A | Shift A right. | |||||||
| C3A6 | SRL B | Shift B right. | ||||||||
| C3A8 | DEC C | Decrease C by one. | ||||||||
| C3A9 | JR NZ,PrintCharacter_1 | Jump to PrintCharacter_1 if C is not zero. | ||||||||
| PrintCharacter_2 | C3AB | LD C,A | C=A. | |||||||
| C3AC | LD A,B | A=B. | ||||||||
| C3AD | CPL | Invert the bits in A. | ||||||||
| C3AE | AND (HL) | Merge the bits from *HL. | ||||||||
| C3AF | OR C | Set the bits from C. | ||||||||
| C3B0 | LD (HL),A | Write A to *HL. | ||||||||
| C3B1 | POP AF | Restore AF and BC from the stack. | ||||||||
| C3B2 | POP BC | |||||||||
| C3B3 | DEC C | Decrease C by one. | ||||||||
| C3B4 | INC C | Increment C by one. | ||||||||
| C3B5 | JR Z,PrintCharacter_4 | Jump to PrintCharacter_4 if C is equal to C. | ||||||||
| C3B7 | PUSH BC | Stash BC and AF on the stack. | ||||||||
| C3B8 | PUSH AF | |||||||||
| C3B9 | LD A,$08 | A=08. | ||||||||
| C3BB | SUB C | A-=C. | ||||||||
| C3BC | LD C,A | C=A. | ||||||||
| C3BD | POP AF | Restore AF from the stack. | ||||||||
| C3BE | LD B,$FF | B=FF. | ||||||||
| PrintCharacter_3 | C3C0 | SLA A | Shift A left (with carry). | |||||||
| C3C2 | SLA B | Shift B left (with carry). | ||||||||
| C3C4 | DEC C | Decrease C by one. | ||||||||
| C3C5 | JR NZ,PrintCharacter_3 | Jump to PrintCharacter_3 if C is not equal to C. | ||||||||
| C3C7 | LD C,A | C=A. | ||||||||
| C3C8 | LD A,B | A=B. | ||||||||
| C3C9 | CPL | Invert the bits in A. | ||||||||
| C3CA | INC HL | Increment HL by one. | ||||||||
| C3CB | AND (HL) | Merge the bits from *HL. | ||||||||
| C3CC | OR C | Set the bits from C. | ||||||||
| C3CD | LD (HL),A | Write A to *HL. | ||||||||
| C3CE | DEC HL | Decrease HL by one. | ||||||||
| C3CF | POP BC | Restore BC from the stack. | ||||||||
| PrintCharacter_4 | C3D0 | INC DE | Increment DE by one. | |||||||
| C3D1 | INC H | Increment H by one. | ||||||||
| C3D2 | DJNZ PrintCharacter_0 | Decrease counter by one and loop back to PrintCharacter_0 until counter is zero. | ||||||||
| C3D4 | POP HL | Restore HL, DE and BC from the stack. | ||||||||
| C3D5 | POP DE | |||||||||
| C3D6 | POP BC | |||||||||
| C3D7 | LD A,C | A=C. | ||||||||
| C3D8 | ADD A,$07 | A+=07. | ||||||||
| C3DA | CP $08 | Compare A with 08. | ||||||||
| C3DC | JR C,PrintCharacter_5 | Jump to PrintCharacter_5 if A is less than 08. | ||||||||
| C3DE | SUB $08 | A-=08. | ||||||||
| C3E0 | INC L | Increment L by one. | ||||||||
| PrintCharacter_5 | C3E1 | LD C,A | C=A. | |||||||
| C3E2 | POP AF | Restore AF from the stack. | ||||||||
| C3E3 | RET | Return. | ||||||||
| 
 
This entry point is used by the routine at C316.
 
 | 
||||||||||
| PrintCharacter_6 | C3E4 | LD A,($A008) | A=*A008. | |||||||
| C3E7 | AND A | Set flags. | ||||||||
| C3E8 | RET Z | Return if L is equal to A. | ||||||||
| C3E9 | PUSH HL | Stash HL, DE and BC on the stack. | ||||||||
| C3EA | PUSH DE | |||||||||
| C3EB | PUSH BC | |||||||||
| C3EC | LD HL,$4000 | HL=4000. | ||||||||
| C3EF | LD B,$08 | B=08. | ||||||||
| PrintCharacter_7 | C3F1 | PUSH BC | Stash BC and HL on the stack. | |||||||
| C3F2 | PUSH HL | |||||||||
| C3F3 | CALL PrintCharacter_8 | Call PrintCharacter_8. | ||||||||
| C3F6 | POP HL | Restore HL from the stack. | ||||||||
| C3F7 | INC H | Increment H by one. | ||||||||
| C3F8 | POP BC | Restore BC from the stack. | ||||||||
| C3F9 | DJNZ PrintCharacter_7 | Decrease counter by one and loop back to PrintCharacter_7 until counter is zero. | ||||||||
| C3FB | LD A,$04 | A=04. | ||||||||
| C3FD | OUT ($FB),A | OUT FB | ||||||||
| C3FF | POP BC | Restore BC, DE and HL from the stack. | ||||||||
| C400 | POP DE | |||||||||
| C401 | POP HL | |||||||||
| C402 | RET | Return. | ||||||||
| PrintCharacter_8 | C403 | LD A,B | A=B. | |||||||
| C404 | CP $03 | Compare A with 03. | ||||||||
| C406 | SBC A,A | A-=A. | ||||||||
| C407 | AND %00000010 | Keep only bits 1. | ||||||||
| C409 | OUT ($FB),A | OUT FB | ||||||||
| C40B | LD D,A | D=A. | ||||||||
| PrintCharacter_9 | C40C | IN A,($FB) | A=byte from port FB. | |||||||
| C40E | ADD A,A | A+=A. | ||||||||
| C40F | RET M | Return if A is lower than 03. | ||||||||
| C410 | JR NC,PrintCharacter_9 | Jump to PrintCharacter_9 if A is greater than or equal to 03. | ||||||||
| C412 | JP $0F12 | Jump to COPY_LINE#0F12. | ||||||||
| Prev: C37D | Up: Map | Next: C415 |