![]() |
Routines |
| Prev: 25233 | Up: Map | Next: 25296 |
|
Used by the routines at 20956, 28160, 62094 and 63210. Goes through the screen refresh buffer (SRB) and for every set bit found, updates the corresponding character square on-screen.
|
||||
| 25248 | CALL 26849 | Update the SRB so that speech bubbles are not corrupted by moving characters | ||
| 25251 | LD B,84 | 21 screen rows, 4 bytes (32 bits) per row | ||
| 25253 | LD A,(HL) | Pick up a byte from the screen refresh buffer | ||
| 25254 | AND A | Anything need updating in this particular 8-tile segment? | ||
| 25255 | JR Z,25292 | Jump if not | ||
| 25257 | PUSH BC | Save the SRB byte counter | ||
| 25258 | LD A,L | For this particular byte of the SRB, compute the corresponding screen row number (0-20) in D | ||
| 25259 | AND 252 | |||
| 25261 | RRCA | |||
| 25262 | RRCA | |||
| 25263 | LD D,A | |||
| 25264 | LD A,L | Also for this particular SRB byte, compute the column of the screen (0, 8, 16 or 24) corresponding to bit 7 | ||
| 25265 | AND 3 | |||
| 25267 | ADD A,A | |||
| 25268 | ADD A,A | |||
| 25269 | ADD A,A | |||
| 25270 | DEC A | |||
| 25271 | LD E,A | |||
| 25272 | INC E | |||
| 25273 | SLA (HL) | Does a character square need printing? | ||
| 25275 | JR C,25281 | Jump if so | ||
| 25277 | JR NZ,25272 | Jump back if there are still non-zero bits left in this SRB byte | ||
| 25279 | JR 25291 | Jump forward to consider the next SRB byte | ||
|
We found a set bit in the current SRB byte. Print the corresponding character square.
|
||||
| 25281 | PUSH HL | Save the SRB pointer | ||
| 25282 | PUSH DE | Save the screen (row,column) pointer | ||
| 25283 | EX DE,HL | Switch the screen (row,column) pointer to HL | ||
| 25284 | CALL 24684 | Print the character square at this row and column | ||
| 25287 | POP DE | Restore the screen (row,column) pointer to DE | ||
| 25288 | POP HL | Restore the SRB pointer to HL | ||
| 25289 | JR 25272 | 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.
|
||||
| 25291 | POP BC | Restore the SRB byte counter to B | ||
| 25292 | INC L | Point HL at the next SRB byte | ||
| 25293 | DJNZ 25253 | Jump back until all 84 SRB bytes have been dealt with | ||
| 25295 | RET | |||
| Prev: 25233 | Up: Map | Next: 25296 |