![]() |
Routines |
| Prev: 8D33 | Up: Map |
|
||||||||
| 8D6B | LD HL,$8000 | Point HL at the first room layout byte at 8000 | ||||||
| 8D6E | LD IX,$5E00 | Point IX at the first byte of the attribute buffer at 5E00 | ||||||
|
The following loop copies the attribute bytes for the background, floor, wall and nasty tiles into the buffer at 5E00.
|
||||||||
| 8D72 | LD A,(HL) | Pick up a room layout byte | ||||||
| 8D73 | RLCA | Move bits 6 and 7 into bits 0 and 1 | ||||||
| 8D74 | RLCA | |||||||
| 8D75 | CALL $8DC0 | Copy the attribute byte for this tile into the buffer at 5E00 | ||||||
| 8D78 | LD A,(HL) | Pick up the room layout byte again | ||||||
| 8D79 | RRCA | Move bits 4 and 5 into bits 0 and 1 | ||||||
| 8D7A | RRCA | |||||||
| 8D7B | RRCA | |||||||
| 8D7C | RRCA | |||||||
| 8D7D | CALL $8DC0 | Copy the attribute byte for this tile into the buffer at 5E00 | ||||||
| 8D80 | LD A,(HL) | Pick up the room layout byte again | ||||||
| 8D81 | RRCA | Move bits 2 and 3 into bits 0 and 1 | ||||||
| 8D82 | RRCA | |||||||
| 8D83 | CALL $8DC0 | Copy the attribute byte for this tile into the buffer at 5E00 | ||||||
| 8D86 | LD A,(HL) | Pick up the room layout byte again; this time the required bit-pair is already in bits 0 and 1 | ||||||
| 8D87 | CALL $8DC0 | Copy the attribute byte for this tile into the buffer at 5E00 | ||||||
| 8D8A | INC HL | Point HL at the next room layout byte | ||||||
| 8D8B | LD A,L | Have we processed all 128 room layout bytes yet? | ||||||
| 8D8C | AND $80 | |||||||
| 8D8E | JR Z,$8D72 | If not, jump back to process the next one | ||||||
|
Next consider the conveyor tiles (if any).
|
||||||||
| 8D90 | LD A,($80D9) | Pick up the length of the conveyor from 80D9 | ||||||
| 8D93 | OR A | Is there a conveyor in the room? | ||||||
| 8D94 | JR Z,$8DA1 | Jump if not | ||||||
| 8D96 | LD HL,($80D7) | Pick up the address of the conveyor's location in the attribute buffer at 5E00 from 80D7 | ||||||
| 8D99 | LD B,A | B will count the conveyor tiles | ||||||
| 8D9A | LD A,($80CD) | Pick up the attribute byte for the conveyor tile from 80CD | ||||||
| 8D9D | LD (HL),A | Copy the attribute bytes for the conveyor tiles into the buffer at 5E00 | ||||||
| 8D9E | INC HL | |||||||
| 8D9F | DJNZ $8D9D | |||||||
|
And finally consider the ramp tiles (if any).
|
||||||||
| 8DA1 | LD A,($80DD) | Pick up the length of the ramp from 80DD | ||||||
| 8DA4 | OR A | Is there a ramp in the room? | ||||||
| 8DA5 | RET Z | Return if not | ||||||
| 8DA6 | LD HL,($80DB) | Pick up the address of the ramp's location in the attribute buffer at 5E00 from 80DB | ||||||
| 8DA9 | LD A,($80DA) | Pick up the ramp direction from 80DA; A=0 (ramp goes up to the left) or 1 (ramp goes up to the right) | ||||||
| 8DAC | AND $01 | |||||||
| 8DAE | RLCA | Now DE=-33 (ramp goes up to the left) or -31 (ramp goes up to the right) | ||||||
| 8DAF | ADD A,$DF | |||||||
| 8DB1 | LD E,A | |||||||
| 8DB2 | LD D,$FF | |||||||
| 8DB4 | LD A,($80DD) | Pick up the length of the ramp from 80DD | ||||||
| 8DB7 | LD B,A | B will count the ramp tiles | ||||||
| 8DB8 | LD A,($80C4) | Pick up the attribute byte for the ramp tile from 80C4 | ||||||
| 8DBB | LD (HL),A | Copy the attribute bytes for the ramp tiles into the buffer at 5E00 | ||||||
| 8DBC | ADD HL,DE | |||||||
| 8DBD | DJNZ $8DBB | |||||||
| 8DBF | RET | |||||||
| Prev: 8D33 | Up: Map |