![]() |
Routines |
Prev: 8A3C | Up: Map |
Used by the routine at 8684.
|
||||||||
8A75 | LD IX,$5E00 | Point IX at the first byte of the attribute buffer at 5E00 | ||||||
8A79 | LD A,$70 | Set the operand of the 'LD D,n' instruction at 8A9B (below) to $70 | ||||||
8A7B | LD ($8A9C),A | |||||||
8A7E | CALL $8A8A | Draw the tiles for the top half of the cavern to the screen buffer at 7000 | ||||||
8A81 | LD IX,$5F00 | Point IX at the 256th byte of the attribute buffer at 5E00 in preparation for drawing the bottom half of the cavern; this instruction is redundant, since IX already holds 5F00 | ||||||
8A85 | LD A,$78 | Set the operand of the 'LD D,n' instruction at 8A9B (below) to $78 | ||||||
8A87 | LD ($8A9C),A | |||||||
8A8A | LD C,$00 | C will count 256 tiles | ||||||
The following loop draws 256 tiles (for either the top half or the bottom half of the cavern) to the screen buffer at 7000.
|
||||||||
8A8C | LD E,C | E holds the LSB of the screen buffer address | ||||||
8A8D | LD A,(IX+$00) | Pick up an attribute byte from the buffer at 5E00; this identifies the type of tile to draw | ||||||
8A90 | LD HL,$8020 | Move HL through the attribute bytes and graphic data of the background, floor, crumbling floor, wall, conveyor and nasty tiles starting at 8020 until we find a byte that matches the attribute byte of the tile to be drawn | ||||||
8A93 | LD BC,$0048 | |||||||
8A96 | CPIR | |||||||
8A98 | LD C,E | Restore the value of the tile counter in C | ||||||
8A99 | LD B,$08 | There are eight bytes in the tile | ||||||
8A9B | LD D,$00 | This instruction is set to either 'LD D,$70' or 'LD D,$78' above; now DE holds the appropriate address in the screen buffer at 7000 | ||||||
8A9D | LD A,(HL) | Copy the tile graphic data to the screen buffer at 7000 | ||||||
8A9E | LD (DE),A | |||||||
8A9F | INC HL | |||||||
8AA0 | INC D | |||||||
8AA1 | DJNZ $8A9D | |||||||
8AA3 | INC IX | Move IX along to the next byte in the attribute buffer | ||||||
8AA5 | INC C | Have we drawn 256 tiles yet? | ||||||
8AA6 | JP NZ,$8A8C | If not, jump back to draw the next one | ||||||
The empty cavern has been drawn to the screen buffer at 7000. If we're in The Final Barrier, however, there is further work to do.
|
||||||||
8AA9 | LD A,($8407) | Pick up the number of the current cavern from 8407 | ||||||
8AAC | CP $13 | Is it The Final Barrier? | ||||||
8AAE | RET NZ | Return if not | ||||||
8AAF | LD HL,$A000 | Copy the graphic data from A000 to the top half of the screen buffer at 7000 | ||||||
8AB2 | LD DE,$7000 | |||||||
8AB5 | LD BC,$0800 | |||||||
8AB8 | LDIR | |||||||
8ABA | RET |
Prev: 8A3C | Up: Map |