![]() |
Routines |
Prev: 28802 | Up: Map |
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 |