![]() |
Routines |
Prev: 25233 | Up: Map |
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 |