Prev: 36147 Up: Map Next: 36288
36203: Fill the buffer at 24064 with attribute bytes for the current room
Used by the routine at 36147. Fills the buffer at 24064 with attribute bytes for the background, floor, wall, nasty, conveyor and ramp tiles in the current room.
Input
Output
36203 LD HL,32768 Point HL at the first room layout byte at 32768
36206 LD IX,24064 Point IX at the first byte of the attribute buffer at 24064
The following loop copies the attribute bytes for the background, floor, wall and nasty tiles into the buffer at 24064.
36210 LD A,(HL) Pick up a room layout byte
36211 RLCA Move bits 6 and 7 into bits 0 and 1
36212 RLCA
36213 CALL 36288 Copy the attribute byte for this tile into the buffer at 24064
36216 LD A,(HL) Pick up the room layout byte again
36217 RRCA Move bits 4 and 5 into bits 0 and 1
36218 RRCA
36219 RRCA
36220 RRCA
36221 CALL 36288 Copy the attribute byte for this tile into the buffer at 24064
36224 LD A,(HL) Pick up the room layout byte again
36225 RRCA Move bits 2 and 3 into bits 0 and 1
36226 RRCA
36227 CALL 36288 Copy the attribute byte for this tile into the buffer at 24064
36230 LD A,(HL) Pick up the room layout byte again; this time the required bit-pair is already in bits 0 and 1
36231 CALL 36288 Copy the attribute byte for this tile into the buffer at 24064
36234 INC HL Point HL at the next room layout byte
36235 LD A,L Have we processed all 128 room layout bytes yet?
36236 AND 128
36238 JR Z,36210 If not, jump back to process the next one
Next consider the conveyor tiles (if any).
36240 LD A,(32985) Pick up the length of the conveyor from 32985
36243 OR A Is there a conveyor in the room?
36244 JR Z,36257 Jump if not
36246 LD HL,(32983) Pick up the address of the conveyor's location in the attribute buffer at 24064 from 32983
36249 LD B,A B will count the conveyor tiles
36250 LD A,(32973) Pick up the attribute byte for the conveyor tile from 32973
36253 LD (HL),A Copy the attribute bytes for the conveyor tiles into the buffer at 24064
36254 INC HL
36255 DJNZ 36253
And finally consider the ramp tiles (if any).
36257 LD A,(32989) Pick up the length of the ramp from 32989
36260 OR A Is there a ramp in the room?
36261 RET Z Return if not
36262 LD HL,(32987) Pick up the address of the ramp's location in the attribute buffer at 24064 from 32987
36265 LD A,(32986) Pick up the ramp direction from 32986; A=0 (ramp goes up to the left) or 1 (ramp goes up to the right)
36268 AND 1
36270 RLCA Now DE=-33 (ramp goes up to the left) or -31 (ramp goes up to the right)
36271 ADD A,223
36273 LD E,A
36274 LD D,255
36276 LD A,(32989) Pick up the length of the ramp from 32989
36279 LD B,A B will count the ramp tiles
36280 LD A,(32964) Pick up the attribute byte for the ramp tile from 32964
36283 LD (HL),A Copy the attribute bytes for the ramp tiles into the buffer at 24064
36284 ADD HL,DE
36285 DJNZ 36283
36287 RET
Prev: 36147 Up: Map Next: 36288