![]() |
Routines |
Prev: 6980 | Up: Map |
Used by the routines at 6500, 6767, 7ED6 and B4E8. Goes through the screen refresh buffer (SRB) and for every set bit found, updates the corresponding character square on-screen.
|
||||||||
6992 | LD HL,$7F0C | Point HL at the first byte of the SRB | ||||||
6995 | LD B,$54 | B will count the bytes in the screen refresh buffer | ||||||
6997 | LD A,(HL) | Pick up an SRB byte | ||||||
6998 | AND A | Any character squares in this segment need refreshing? | ||||||
6999 | JR Z,$69C6 | Jump if not | ||||||
699B | PUSH BC | Save the SRB byte counter | ||||||
699C | LD A,L | D=y-coordinate of the segment of 8 character squares to which this SRB byte corresponds | ||||||
699D | AND $7C | |||||||
699F | RRCA | |||||||
69A0 | RRCA | |||||||
69A1 | ADD A,$95 | |||||||
69A3 | LD D,A | |||||||
69A4 | LD A,L | E=x-coordinate of the leftmost character square in the segment | ||||||
69A5 | AND $03 | |||||||
69A7 | RLCA | |||||||
69A8 | RLCA | |||||||
69A9 | RLCA | |||||||
69AA | LD E,A | |||||||
69AB | LD A,($7F00) | |||||||
69AE | ADD A,E | |||||||
69AF | LD E,A | |||||||
69B0 | DEC E | |||||||
Here we enter a loop to check each SRB byte for set bits.
|
||||||||
69B1 | PUSH HL | Save the pointer to the SRB byte | ||||||
69B2 | INC E | Set DE to the coordinates of the next character square in the current segment | ||||||
69B3 | RR (HL) | Push an SRB bit into the carry flag, and 0 into bit 7 of the SRB byte | ||||||
69B5 | JR C,$69BB | Refresh the corresponding character square if the bit was set | ||||||
69B7 | JR NZ,$69B2 | Jump back until all set bits in the SRB byte have been checked | ||||||
69B9 | JR $69C4 | Move to the next SRB byte | ||||||
We have found a set bit in the current SRB byte. Refresh the corresponding tile on screen.
|
||||||||
69BB | PUSH DE | |||||||
69BC | CALL $610B | Print the character square at (E,D) | ||||||
69BF | POP DE | |||||||
69C0 | POP HL | Restore the pointer to the SRB byte | ||||||
69C1 | 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 | ||||||
69C2 | JR $69B1 | |||||||
There are no set bits remaining in the current SRB byte. Move on to the next.
|
||||||||
69C4 | POP HL | Restore the pointer to the SRB byte | ||||||
69C5 | POP BC | Restore the SRB byte counter to B | ||||||
69C6 | INC L | Move to the next byte in the screen refresh buffer | ||||||
69C7 | DJNZ $6997 | Jump back until every byte in the SRB has been checked | ||||||
69C9 | RET |
Prev: 6980 | Up: Map |