![]() |
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 m,(HL) | Set the appropriate bit in the SRB byte | ||||
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 n,(HL) | Set the appropriate bit in the SRB byte | ||||
28879 | EX DE,HL | |||||
28880 | POP DE | Restore the skool coordinates to DE | ||||
28881 | RET |
Prev: 28802 | Up: Map | Next: 28882 |