Routines |
Prev: E9D5 | Up: Map | Next: EAB2 |
EA80 | LD B,$50 | 20 screen rows, 4 bytes (32 bits) per row | ||
EA82 | LD HL,$7F10 | Point HL at the start of the portion of the screen refresh buffer that corresponds to the visible part of the play area | ||
EA85 | LD A,(HL) | Pick up a byte from the screen refresh buffer | ||
EA86 | AND A | Does anything need updating in this particular 8-tile segment? | ||
EA87 | JR Z,$EAAE | Jump if not | ||
EA89 | PUSH BC | Save the SRB byte counter | ||
EA8A | LD A,L | For this particular byte of the SRB, compute the corresponding screen row number (0-19) in D | ||
EA8B | SUB $10 | |||
EA8D | AND $FC | |||
EA8F | RRCA | |||
EA90 | RRCA | |||
EA91 | LD D,A | |||
EA92 | LD A,L | Also for this particular SRB byte, compute the column of the screen (0, 8, 16 or 24) corresponding to bit 7 | ||
EA93 | AND $03 | |||
EA95 | ADD A,A | |||
EA96 | ADD A,A | |||
EA97 | ADD A,A | |||
EA98 | DEC A | Initialise E, which will hold the screen column number of the character square to be checked | ||
EA99 | LD E,A | |||
EA9A | INC E | Set DE to the screen coordinates of the next character square to be checked | ||
EA9B | SLA (HL) | Does this character square need updating? | ||
EA9D | JR C,$EAA3 | Jump if so | ||
EA9F | JR NZ,$EA9A | Jump back if there are still non-zero bits left in this SRB byte | ||
EAA1 | JR $EAAD | Jump forward to consider the next SRB byte | ||
We found a set bit in the current SRB byte. Print the corresponding character square.
|
||||
EAA3 | PUSH HL | Save the SRB pointer | ||
EAA4 | PUSH DE | Save the screen (row,column) pointer | ||
EAA5 | EX DE,HL | Switch the screen (row,column) pointer to HL | ||
EAA6 | CALL $E70C | Print the character square at this row and column | ||
EAA9 | POP DE | Restore the screen (row,column) pointer to DE | ||
EAAA | POP HL | Restore the SRB pointer to HL | ||
EAAB | JR $EA9A | 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.
|
||||
EAAD | POP BC | Restore the SRB byte counter to B | ||
EAAE | INC L | Point HL at the next SRB byte | ||
EAAF | DJNZ $EA85 | Jump back until all 80 SRB bytes have been dealt with | ||
EAB1 | RET |
Prev: E9D5 | Up: Map | Next: EAB2 |