![]() |
Routines |
Prev: 59861 | Up: Map |
|
||||||||
60032 | LD B,80 | 20 screen rows, 4 bytes (32 bits) per row | ||||||
60034 | LD HL,32528 | Point HL at the start of the portion of the screen refresh buffer that corresponds to the visible part of the play area | ||||||
60037 | LD A,(HL) | Pick up a byte from the screen refresh buffer | ||||||
60038 | AND A | Does anything need updating in this particular 8-tile segment? | ||||||
60039 | JR Z,60078 | Jump if not | ||||||
60041 | PUSH BC | Save the SRB byte counter | ||||||
60042 | LD A,L | For this particular byte of the SRB, compute the corresponding screen row number (0-19) in D | ||||||
60043 | SUB 16 | |||||||
60045 | AND 252 | |||||||
60047 | RRCA | |||||||
60048 | RRCA | |||||||
60049 | LD D,A | |||||||
60050 | LD A,L | Also for this particular SRB byte, compute the column of the screen (0, 8, 16 or 24) corresponding to bit 7 | ||||||
60051 | AND 3 | |||||||
60053 | ADD A,A | |||||||
60054 | ADD A,A | |||||||
60055 | ADD A,A | |||||||
60056 | DEC A | Initialise E, which will hold the screen column number of the character square to be checked | ||||||
60057 | LD E,A | |||||||
60058 | INC E | Set DE to the screen coordinates of the next character square to be checked | ||||||
60059 | SLA (HL) | Does this character square need updating? | ||||||
60061 | JR C,60067 | Jump if so | ||||||
60063 | JR NZ,60058 | Jump back if there are still non-zero bits left in this SRB byte | ||||||
60065 | JR 60077 | Jump forward to consider the next SRB byte | ||||||
We found a set bit in the current SRB byte. Print the corresponding character square.
|
||||||||
60067 | PUSH HL | Save the SRB pointer | ||||||
60068 | PUSH DE | Save the screen (row,column) pointer | ||||||
60069 | EX DE,HL | Switch the screen (row,column) pointer to HL | ||||||
60070 | CALL 59148 | Print the character square at this row and column | ||||||
60073 | POP DE | Restore the screen (row,column) pointer to DE | ||||||
60074 | POP HL | Restore the SRB pointer to HL | ||||||
60075 | JR 60058 | Examine the next bit of the current SRB byte | ||||||
There are no set bits remaining in the current SRB byte. Move to the next SRB byte.
|
||||||||
60077 | POP BC | Restore the SRB byte counter to B | ||||||
60078 | INC L | Point HL at the next SRB byte | ||||||
60079 | DJNZ 60037 | Jump back until all 80 SRB bytes have been dealt with | ||||||
60081 | RET |
Prev: 59861 | Up: Map |