Routines 
Prev: F39B  Up: Map  Next: F401 
Used by the routines at F404 and F485. Updates the screen refresh buffer (SRB) for a window (or windowpair) after a light switch has been flipped or a blind has been raised or lowered.


F3A0  RES 6,L  Now L=X'/8 (where X' is the xcoordinate of the left edge of the window), and HL points at the Z value corresponding to the window  
F3A2  LD BC,($7FFE)  The play area coordinates of the topleft corner of the screen are stored at 7FFE and 7FFF  
F3A6  LD A,C  A=X (the xcoordinate of the leftmost column of the play area on screen)  
F3A7  RRCA  A=X/8  
F3A8  RRCA  
F3A9  RRCA  
F3AA  LD E,A  E=X/8 (031)  
F3AB  LD A,L  A=X'/8 (031)  
F3AC  SUB E  A=X'/8X/8  
F3AD  CP $04  Is the window off screen to the right or left?  
F3AF  RET NC  Return if so  
F3B0  LD E,A  E=03 (index of the 8tile wide column containing the window)  
F3B1  LD A,H  A=1 (5th floor), 2, 3, 4 or 5 (1st floor)  
F3B2  SUB $B8  
F3B4  LD D,A  D=6 (5th floor), 12, 18, 24 or 30 (1st floor)  
F3B5  ADD A,A  
F3B6  ADD A,D  
F3B7  ADD A,A  
F3B8  LD D,A  
F3B9  SUB B  Subtract Y, the ycoordinate of the topmost row of the play area on screen (2, 8, 14 or 20)  
F3BA  ADD A,$04  Is the window off screen?  
F3BC  CP $15  
F3BE  RET NC  Return if so  
F3BF  ADD A,A  A=4*(DY+4)+E  
F3C0  ADD A,A  
F3C1  ADD A,E  
F3C2  LD E,A  Point DE at the SRB byte corresponding to the top row of the window  
F3C3  LD D,$7F  
F3C5  LD C,$80  C=0x80 (10000000)  
F3C7  LD A,(HL)  Pick up the Z value for the window  
F3C8  LD L,A  Point HL at the Z'' value for the leftmost column of tiles in the 8tile wide segment that contains the window  
F3C9  SET 7,L  
F3CB  LD H,$B8  
F3CD  EXX  
F3CE  LD L,A  Point HL' at the Z' value for the 8x6 block of tiles that contains the window  
F3CF  LD H,$BF  
F3D1  LD C,$01  C'=1 (00000001)  
F3D3  EXX  
The following loop examines the 8x6 block of tiles that contains the window and updates the relevant SRB bytes for the affected window tiles.


F3D4  EXX  
F3D5  RRC C  Rotate the set bit in C' one place to the right  
F3D7  LD A,(HL)  A=Z' value  
F3D8  AND C  Set the zero flag if we should use the T values in pages 0xA0, 0xA2, 0xA4, 0xA6, 0xA8 and 0xAA  
F3D9  EXX  
F3DA  PUSH HL  Save the pointer to the Z'' value  
F3DB  LD L,(HL)  L=Z'' value  
F3DC  LD H,$A0  Point HL at the T value in page 0xA0  
F3DE  JR Z,$F3E2  Jump unless we should use the T values in pages 0xAC, 0xAE, 0xB0, 0xB2, 0xB4 and 0xB6  
F3E0  LD H,$AC  Point HL at the T value in page 0xAC  
F3E2  LD B,$06  There are 6 rows of tiles to consider  
F3E4  LD A,(HL)  A=T  
F3E5  AND $C0  Keep only bits 6 and 7  
F3E7  CP $80  Is there a window tile here?  
F3E9  JR NZ,$F3EE  Jump if not  
F3EB  LD A,(DE)  Set the appropriate bit in the SRB byte  
F3EC  OR C  
F3ED  LD (DE),A  
F3EE  INC H  Point HL at the next T value (in page 0xA2, 0xA4, 0xA6, 0xA8, 0xAA, 0xAE, 0xB0, 0xB2, 0xB4 or 0xB6)  
F3EF  INC H  
F3F0  LD A,E  Point DE at the SRB byte for the next row down  
F3F1  ADD A,$04  
F3F3  LD E,A  
F3F4  DJNZ $F3E4  Jump back to consider the tile in the next row down  
F3F6  LD A,E  Point DE back at the SRB byte corresponding to the top row of the window  
F3F7  SUB $18  
F3F9  LD E,A  
F3FA  POP HL  Restore the Z'' value pointer to HL  
F3FB  INC H  Point HL at the Z'' value for the next column of tiles to the right (in page 0xB90xBF)  
F3FC  RRC C  Rotate the set bit in C one place to the right  
F3FE  JR NC,$F3D4  Jump back until 8 tile columns have been checked  
F400  RET 
Prev: F39B  Up: Map  Next: F401 