Routines |
Prev: F401 | Up: Map | Next: F436 |
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 |
Prev: F401 | Up: Map | Next: F436 |