Routines 
Prev: F0F9  Up: Map  Next: F144 
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=0xF00xF9  
F101  SUB $3A  A=0xB60xBF  
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 02 of the xcoordinate  
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 ycoordinates 3035 (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 (ycoordinate 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 (ycoordinate 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 ycoordinates 3641  
F120  XOR $1C  
F122  LD (HL),A  
This entry point is used by the routine at FC25 with B=10 (ycoordinate of the rope), C=0xFF (11111111), and E=0xD0 or 0xD8.


F123  LD HL,$7FFE  7FFE holds X, the xcoordinate of the leftmost column of the play area on screen  
F126  LD A,E  A=xcoordinate 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 offscreen to the left or right?  
F12D  RET NC  Return if so  
F12E  LD E,A  E=0, 1, 2 or 3, denoting the 8tile wide column of the screen that contains the door or rope  
F12F  INC L  HL=7FFF, which holds Y, the ycoordinate of the topmost row of the play area on screen  
F130  LD A,B  A=10 (ycoordinate of the rope), 34 or 36 (ycoordinate of the base of the door)  
F131  LD B,$06  Doors are at most 6 tiles high  
F133  SUB (HL)  Subtract Y from the ycoordinate 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 (03)  
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  Next: F144 