![]() |
Routines |
| Prev: F0F9 | Up: Map |
|
Used by the routines at F144 and F7CD. Updates the play area graphics for the door being opened or closed, and updates the screen refresh buffer (SRB) accordingly.
|
||||||||||
| F100 | LD A,L | A=0xF0-0xF9 | ||||||||
| F101 | SUB $3A | A=0xB6-0xBF | ||||||||
| F103 | LD L,A | Point HL at the relevant entry in the door locations table at FFB6 | ||||||||
| F104 | LD H,$FF | |||||||||
| F106 | LD A,(HL) | Pick up the entry from the door locations table | ||||||||
| F107 | AND $F8 | Discard bits 0-2 of the x-coordinate | ||||||||
| F109 | LD E,A | Copy the result to E | ||||||||
| F10A | RRCA | Now divide the result by 8 | ||||||||
| F10B | RRCA | |||||||||
| F10C | RRCA | |||||||||
| F10D | LD L,A | Point HL at the entry in the table of Z values at BD00 that corresponds to the door | ||||||||
| F10E | LD H,$BD | |||||||||
| F110 | LD A,(HL) | Flip bit 2 of the Z value for y-coordinates 30-35 (set=closed, reset=open) | ||||||||
| F111 | XOR $04 | |||||||||
| F113 | LD (HL),A | |||||||||
| F114 | AND $03 | Set the zero flag if this is a shop door | ||||||||
| F116 | LD BC,$223C | B=34 (y-coordinate of the base of a house door), C=60 (00111100) | ||||||||
| F119 | JR NZ,$F123 | Jump unless this is a shop door | ||||||||
| F11B | LD BC,$24C0 | B=36 (y-coordinate of the base of a shop door), C=192 (11000000) | ||||||||
| F11E | INC H | Point HL at the entry in the table of Z values at BE00 that corresponds to the door | ||||||||
| F11F | LD A,(HL) | Flip bits 2, 3 and 4 of the Z value for y-coordinates 36-41 | ||||||||
| F120 | XOR $1C | |||||||||
| F122 | LD (HL),A | |||||||||
|
This entry point is used by the routine at FC25 with B=10 (y-coordinate of the rope), C=0xFF (11111111), and E=0xD0 or 0xD8.
|
||||||||||
| F123 | LD HL,$7FFE | 7FFE holds X, the x-coordinate of the leftmost column of the play area on screen | ||||||||
| F126 | LD A,E | A=x-coordinate of the door or rope (rounded down to the nearest multiple of 8) | ||||||||
| F127 | SUB (HL) | Subtract X | ||||||||
| F128 | RRCA | Divide the result by 8 | ||||||||
| F129 | RRCA | |||||||||
| F12A | RRCA | |||||||||
| F12B | CP $04 | Is the door or rope off-screen to the left or right? | ||||||||
| F12D | RET NC | Return if so | ||||||||
| F12E | LD E,A | E=0, 1, 2 or 3, denoting the 8-tile wide column of the screen that contains the door or rope | ||||||||
| F12F | INC L | HL=7FFF, which holds Y, the y-coordinate of the topmost row of the play area on screen | ||||||||
| F130 | LD A,B | A=10 (y-coordinate of the rope), 34 or 36 (y-coordinate of the base of the door) | ||||||||
| F131 | LD B,$06 | Doors are at most 6 tiles high | ||||||||
| F133 | SUB (HL) | Subtract Y from the y-coordinate of the rope or base of the door | ||||||||
| F134 | ADD A,A | Multiply by 4 | ||||||||
| F135 | ADD A,A | |||||||||
| F136 | ADD A,E | Add E (0-3) | ||||||||
| F137 | LD L,A | Point HL at a byte of the screen refresh buffer (SRB) | ||||||||
| F138 | CP $60 | Is this part of the door below the visible portion of the play area? | ||||||||
| F13A | RET NC | Return if so | ||||||||
| F13B | LD A,(HL) | Set the appropriate bits in the SRB byte for the rope or door | ||||||||
| F13C | OR C | |||||||||
| F13D | LD (HL),A | |||||||||
| F13E | LD A,L | Compute the LSB of the address of the next SRB byte | ||||||||
| F13F | ADD A,$04 | |||||||||
| F141 | DJNZ $F137 | Jump back to check whether this SRB byte needs updating | ||||||||
| F143 | RET | |||||||||
| Prev: F0F9 | Up: Map |