Routines 
Prev: 61689  Up: Map  Next: 61764 
Used by the routines at 61764 and 63437. Updates the play area graphics for the door being opened or closed, and updates the screen refresh buffer (SRB) accordingly.


61696  LD A,L  A=240249  
61697  SUB 58  A=182191  
61699  LD L,A  Point HL at the relevant entry in the door locations table at 65462  
61700  LD H,255  
61702  LD A,(HL)  Pick up the entry from the door locations table  
61703  AND 248  Discard bits 02 of the xcoordinate  
61705  LD E,A  Copy the result to E  
61706  RRCA  Now divide the result by 8  
61707  RRCA  
61708  RRCA  
61709  LD L,A  Point HL at the entry in the table of Z values at 48384 that corresponds to the door  
61710  LD H,189  
61712  LD A,(HL)  Flip bit 2 of the Z value for ycoordinates 3035 (set=closed, reset=open)  
61713  XOR 4  
61715  LD (HL),A  
61716  AND 3  Set the zero flag if this is a shop door  
61718  LD BC,8764  B=34 (ycoordinate of the base of a house door), C=60 (00111100)  
61721  JR NZ,61731  Jump unless this is a shop door  
61723  LD BC,9408  B=36 (ycoordinate of the base of a shop door), C=192 (11000000)  
61726  INC H  Point HL at the entry in the table of Z values at 48640 that corresponds to the door  
61727  LD A,(HL)  Flip bits 2, 3 and 4 of the Z value for ycoordinates 3641  
61728  XOR 28  
61730  LD (HL),A  
This entry point is used by the routine at 64549 with B=10 (ycoordinate of the rope), C=255 (11111111), and E=208 or 216.


61731  LD HL,32766  32766 holds X, the xcoordinate of the leftmost column of the play area on screen  
61734  LD A,E  A=xcoordinate of the door or rope (rounded down to the nearest multiple of 8)  
61735  SUB (HL)  Subtract X  
61736  RRCA  Divide the result by 8  
61737  RRCA  
61738  RRCA  
61739  CP 4  Is the door or rope offscreen to the left or right?  
61741  RET NC  Return if so  
61742  LD E,A  E=0, 1, 2 or 3, denoting the 8tile wide column of the screen that contains the door or rope  
61743  INC L  HL=32767, which holds Y, the ycoordinate of the topmost row of the play area on screen  
61744  LD A,B  A=10 (ycoordinate of the rope), 34 or 36 (ycoordinate of the base of the door)  
61745  LD B,6  Doors are at most 6 tiles high  
61747  SUB (HL)  Subtract Y from the ycoordinate of the rope or base of the door  
61748  ADD A,A  Multiply by 4  
61749  ADD A,A  
61750  ADD A,E  Add E (03)  
61751  LD L,A  Point HL at a byte of the screen refresh buffer (SRB)  
61752  CP 96  Is this part of the door below the visible portion of the play area?  
61754  RET NC  Return if so  
61755  LD A,(HL)  Set the appropriate bits in the SRB byte for the rope or door  
61756  OR C  
61757  LD (HL),A  
61758  LD A,L  Compute the LSB of the address of the next SRB byte  
61759  ADD A,4  
61761  DJNZ 61751  Jump back to check whether this SRB byte needs updating  
61763  RET 
Prev: 61689  Up: Map  Next: 61764 