Routines |
Prev: 28802 | Up: Map | Next: 28882 |
Used by the routines at 28994, 29160, 29518 and 29746. 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).
|
||||||||||
28807 | LD A,(32512) | A=X: leftmost column of the skool on screen (0-64) | ||||||||
28810 | SUB 2 | 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) | ||||||||
28812 | JR C,28816 | |||||||||
28814 | CP E | |||||||||
28815 | RET NC | |||||||||
28816 | ADD A,33 | |||||||||
28818 | CP E | |||||||||
28819 | RET C | |||||||||
28820 | PUSH DE | Store the skool coordinates | ||||||||
28821 | SUB 32 | A=E-X (-1, 0-31) | ||||||||
28823 | CPL | |||||||||
28824 | ADD A,E | |||||||||
28825 | BIT 7,A | Are the coordinates in DE on-screen? | ||||||||
28827 | JR Z,28830 | Jump if so | ||||||||
28829 | INC A | A=0 | ||||||||
28830 | RLCA | A=8x (x=0-31, the screen x-coordinate) | ||||||||
28831 | RLCA | |||||||||
28832 | RLCA | |||||||||
28833 | LD E,A | Save this value in E briefly | ||||||||
28834 | AND 56 | Modify the SET m,(HL) instruction at 28857 below | ||||||||
28836 | ADD A,198 | |||||||||
28838 | LD (28858),A | |||||||||
28841 | LD A,E | Point HL at the appropriate byte in the screen refresh buffer | ||||||||
28842 | RLCA | |||||||||
28843 | RLCA | |||||||||
28844 | AND 3 | |||||||||
28846 | LD E,A | |||||||||
28847 | LD A,D | |||||||||
28848 | SUB 149 | |||||||||
28850 | ADD A,A | |||||||||
28851 | ADD A,A | |||||||||
28852 | ADD A,E | |||||||||
28853 | LD E,A | |||||||||
28854 | LD D,127 | |||||||||
28856 | EX DE,HL | |||||||||
28857 | SET 0,(HL) | Set the appropriate bit in the SRB byte; this instruction is modified earlier in this routine to set the required bit | ||||||||
28859 | LD A,(28858) | |||||||||
28862 | ADD A,8 | Was m=7? | ||||||||
28864 | JR NC,28874 | Jump if not | ||||||||
28866 | INC L | Move to the next SRB byte | ||||||||
28867 | LD A,L | A will be 0 if we wrapped round to the next row of the screen | ||||||||
28868 | AND 3 | |||||||||
28870 | LD A,198 | 198 will set n=0 | ||||||||
28872 | JR Z,28879 | Jump if we wrapped round to the next row | ||||||||
28874 | LD (28878),A | Modify the SET n,(HL) instruction below so that n=m+1 mod 8 | ||||||||
28877 | SET 0,(HL) | Set the appropriate bit in the SRB byte; this instruction is modified immediately before execution to set the required bit | ||||||||
28879 | EX DE,HL | |||||||||
28880 | POP DE | Restore the skool coordinates to DE | ||||||||
28881 | RET |
Prev: 28802 | Up: Map | Next: 28882 |