![]() |
Routines |
| Prev: 69C9 | Up: Map | Next: 6A12 |
|
This is called by setup_room to setup the interior_doors array. It walks through the doors array, extracting the indices of doors relevant to the current room and stores those indices into interior_doors.
Used by the routine at setup_room only.
|
||||
|
Clear the interior_doors[] array with door_NONE ($FF).
|
||||
| setup_doors | 69DC | LD A,$FF | Set A to door_NONE | |
| 69DE | LD DE,$81D9 | Set DE to the final byte of interior_doors[] (byte 4) | ||
| 69E1 | LD B,$04 | Set all four bytes to door_NONE | ||
| setup_doors_0 | 69E3 | LD (DE),A | ||
| 69E4 | DEC DE | |||
| 69E5 | DJNZ setup_doors_0 | |||
|
Setup to populate interior_doors[].
|
||||
| 69E7 | INC DE | Set DE to the first interior_doors[] byte | ||
| 69E8 | LD A,($68A0) | Fetch and shift the global current room index up by two bits, to match door_flags, then store it in B | ||
| 69EB | ADD A,A | |||
| 69EC | ADD A,A | |||
| 69ED | LD B,A | |||
| 69EE | LD C,$00 | Initialise the door index | ||
| 69F0 | EXX | Switch register banks for the iteration | ||
|
We're about to walk through doors[] and extract the indices of the doors relevant to the current room.
|
||||
| 69F1 | LD HL,$78D6 | Point HL' to the first byte of doors[] | ||
| 69F4 | LD B,$7C | Set B' to the number of entries in doors[] (124) | ||
| 69F6 | LD DE,$0004 | Set DE' to the stride of four bytes (each door is a room_and_direction byte followed by a 3-byte position) | ||
|
Start loop
Save any door index which matches the current room.
|
||||
| setup_doors_1 | 69F9 | LD A,(HL) | Fetch door's room_and_direction | |
| 69FA | EXX | Switch registers back to the set used on entry to the routine | ||
| 69FB | AND $FC | Clear room_and_direction's direction bits (door_FLAGS_MASK_DIRECTION) | ||
| 69FD | CP B | Is it the current room? | ||
| 69FE | JR NZ,setup_doors_2 | Jump if not | ||
|
This is the current room.
|
||||
| 6A00 | LD A,C | Write to DE register C toggled with door_REVERSE | ||
| 6A01 | XOR $80 | |||
| 6A03 | LD (DE),A | |||
| 6A04 | INC DE | |||
| setup_doors_2 | 6A05 | LD A,C | Toggle door_REVERSE in C for the next iteration | |
| 6A06 | XOR $80 | |||
| 6A08 | JP M,setup_doors_3 | Jump if (C >= door_REVERSE) | ||
| 6A0B | INC A | Increment the door index once every two steps through the array | ||
| setup_doors_3 | 6A0C | LD C,A | ||
| 6A0D | EXX | Switch registers again | ||
| 6A0E | ADD HL,DE | Step HL' to the next door | ||
| 6A0F | DJNZ setup_doors_1 | ...loop | ||
| 6A11 | RET | Return | ||
| Prev: 69C9 | Up: Map | Next: 6A12 |