| Routines

27026: Update the display

Used by the routines at 25856, 26471, 32470 and 46312. Goes through the screen refresh buffer (SRB) and for every set bit found, updates the corresponding character square on-screen.
27026 | LD HL,32524 | Point HL at the first byte of the SRB
27029 | LD B,84 | B will count the bytes in the screen refresh buffer
27031 | LD A,(HL) | Pick up an SRB byte
27032 | AND A | Any character squares in this segment need refreshing?
27033 | JR Z,27078 | Jump if not
27035 | PUSH BC | Save the SRB byte counter
27036 | LD A,L | D=y-coordinate of the segment of 8 character squares to which this SRB byte corresponds
27037 | AND 124
27039 | RRCA
27040 | RRCA
27041 | ADD A,149
27043 | LD D,A
27044 | LD A,L | E=x-coordinate of the leftmost character square in the segment
27045 | AND 3
27047 | RLCA
27048 | RLCA
27049 | RLCA
27050 | LD E,A
27051 | LD A,(32512)
27054 | ADD A,E
27055 | LD E,A
27056 | DEC E |
Here we enter a loop to check each SRB byte for set bits.
27057 | PUSH HL | Save the pointer to the SRB byte
27058 | INC E | Set DE to the coordinates of the next character square in the current segment
27059 | RR (HL) | Push an SRB bit into the carry flag, and 0 into bit 7 of the SRB byte
27061 | JR C,27067 | Refresh the corresponding character square if the bit was set
27063 | JR NZ,27058 | Jump back until all set bits in the SRB byte have been checked
27065 | JR 27076 | Move to the next SRB byte
We have found a set bit in the current SRB byte. Refresh the corresponding tile on screen.
27067 | PUSH DE |
27068 | CALL 24843 | Print the character square at (E,D)
27071 | POP DE |
27072 | POP HL | Restore the pointer to the SRB byte
27073 | AND A | Clear the carry flag so that bit 7 of the SRB byte will be reset, and jump back to check the next bit
27074 | JR 27057
There are no set bits remaining in the current SRB byte. Move on to the next.
27076 | POP HL | Restore the pointer to the SRB byte
27077 | POP BC | Restore the SRB byte counter to B
27078 | INC L | Move to the next byte in the screen refresh buffer
27079 | DJNZ 27031 | Jump back until every byte in the SRB has been checked
27081 | RET |