![]() |
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 |