![]() |
Routines |
| Prev: 25233 | Up: Map | Next: 25296 |
| 25248 | CALL 26849 | Update 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 |