| Routines

F404: Decrement and check the blown fuse delay counters

Used by the routine at F000. Checks each fuse to see whether it was recently blown and should now be fixed, and updates the SRB for the windows affected by the fuse accordingly.
F404 | LD HL,$7FA2 | Point HL at the first of the blown fuse delay counters at 7FA2
F407 | LD A,(HL) | Pick up a delay counter
F408 | AND A | Is it 0?
F409 | JR Z,$F40E | Jump if so to examine the next fuse
F40B | DEC (HL) | Otherwise decrement the delay counter (this fuse was recently blown)
F40C | JR Z,$F414 | Jump if it's time to fix this fuse
F40E | INC L | Move to the next fuse
F40F | BIT 3,L | Have we examined all the fuses yet?
F411 | JR Z,$F407 | Jump back if not
F413 | RET |
If we're entering here from the loop above, it's time to fix a fuse that was recently blown. This entry point is also used by the routine at 74AA to blow a fuse.
F414 | LD A,L | A=0xA2-0xA7, corresponding to the fuse
F415 | LD HL,$FFBF | Prepare HL to scan the table at FFC0
F418 | INC L | Point HL at the next byte in the table
F419 | BIT 5,L | Have we reached the end of the table yet?
F41B | RET NZ | Return if so
F41C | CP (HL) | Does this byte correspond to a segment that is affected by the fuse?
F41D | JR NZ,$F418 | Jump back to check the next byte if not
F41F | PUSH AF | Save the LSB of the address of the blown fuse delay counter
F420 | PUSH HL | Save the table pointer
F421 | LD A,L | A=x/8 (where x is the x-coordinate of the leftmost column of the 8-tile wide segment that is affected by the fuse)
F422 | AND $1F
F424 | LD L,A | Point HL at the Z value for the 5th floor in this segment
F425 | LD H,$B9
F427 | PUSH HL | Save the Z value pointer
F428 | CALL $F3A0 | Update the SRB for any windows on this floor
F42B | POP HL | Restore the Z value pointer to HL
F42C | INC H | Point HL at the Z value for the next floor down in this segment
F42D | LD A,H | Have we done every floor down to the first yet?
F42E | CP $BE
F430 | JR NZ,$F427 | Jump back if not
F432 | POP HL | Restore the table pointer to HL
F433 | POP AF | Restore the LSB of the address of the blown fuse delay counter to A
F434 | JR $F418 | Check the next byte in the table