Routines |
Prev: 7082 | Up: Map | Next: 70D2 |
Used by the routines at 7142, 71E8, 734E and 7432. Updates the screen refresh buffer (SRB) so that the character squares at (E,D) and (E+1,D) are marked dirty. Two character squares in a row are marked dirty to ensure that blackboard contents are properly displayed (characters written on a blackboard may cross character square boundaries).
|
||||||||||
7087 | LD A,($7F00) | A=X: leftmost column of the skool on screen (0-64) | ||||||||
708A | SUB $02 | Return unless X-1<=E<=X+31 (i.e. unless the coordinates in DE correspond to a skool location that is currently on-screen or just off to the left) | ||||||||
708C | JR C,$7090 | |||||||||
708E | CP E | |||||||||
708F | RET NC | |||||||||
7090 | ADD A,$21 | |||||||||
7092 | CP E | |||||||||
7093 | RET C | |||||||||
7094 | PUSH DE | Store the skool coordinates | ||||||||
7095 | SUB $20 | A=E-X (-1, 0-31) | ||||||||
7097 | CPL | |||||||||
7098 | ADD A,E | |||||||||
7099 | BIT 7,A | Are the coordinates in DE on-screen? | ||||||||
709B | JR Z,$709E | Jump if so | ||||||||
709D | INC A | A=0 | ||||||||
709E | RLCA | A=8x (x=0-31, the screen x-coordinate) | ||||||||
709F | RLCA | |||||||||
70A0 | RLCA | |||||||||
70A1 | LD E,A | Save this value in E briefly | ||||||||
70A2 | AND $38 | Modify the SET m,(HL) instruction at 70B9 below | ||||||||
70A4 | ADD A,$C6 | |||||||||
70A6 | LD ($70BA),A | |||||||||
70A9 | LD A,E | Point HL at the appropriate byte in the screen refresh buffer | ||||||||
70AA | RLCA | |||||||||
70AB | RLCA | |||||||||
70AC | AND $03 | |||||||||
70AE | LD E,A | |||||||||
70AF | LD A,D | |||||||||
70B0 | SUB $95 | |||||||||
70B2 | ADD A,A | |||||||||
70B3 | ADD A,A | |||||||||
70B4 | ADD A,E | |||||||||
70B5 | LD E,A | |||||||||
70B6 | LD D,$7F | |||||||||
70B8 | EX DE,HL | |||||||||
70B9 | SET 0,(HL) | Set the appropriate bit in the SRB byte; this instruction is modified earlier in this routine to set the required bit | ||||||||
70BB | LD A,($70BA) | |||||||||
70BE | ADD A,$08 | Was m=7? | ||||||||
70C0 | JR NC,$70CA | Jump if not | ||||||||
70C2 | INC L | Move to the next SRB byte | ||||||||
70C3 | LD A,L | A will be 0 if we wrapped round to the next row of the screen | ||||||||
70C4 | AND $03 | |||||||||
70C6 | LD A,$C6 | 0xC6 will set n=0 | ||||||||
70C8 | JR Z,$70CF | Jump if we wrapped round to the next row | ||||||||
70CA | LD ($70CE),A | Modify the SET n,(HL) instruction below so that n=m+1 mod 8 | ||||||||
70CD | SET 0,(HL) | Set the appropriate bit in the SRB byte; this instruction is modified immediately before execution to set the required bit | ||||||||
70CF | EX DE,HL | |||||||||
70D0 | POP DE | Restore the skool coordinates to DE | ||||||||
70D1 | RET |
Prev: 7082 | Up: Map | Next: 70D2 |