![]() |
Routines |
| Prev: 85CC | Up: Map | Next: 870E |
|
Used by the routine at 85CC.
|
||||
| 8684 | LD HL,$8425 | Initialise the score at 8425 | ||
| 8687 | LD DE,$8426 | |||
| 868A | LD BC,$0009 | |||
| 868D | LD (HL),$30 | |||
| 868F | LDIR | |||
|
This entry point is used by the routines at 870E (when teleporting into a cavern or reinitialising the current cavern after Willy has lost a life) and 9028.
|
||||
| 8691 | LD A,($8407) | Pick up the number of the current cavern from 8407 | ||
| 8694 | SLA A | Point HL at the first byte of the cavern definition | ||
| 8696 | SLA A | |||
| 8698 | ADD A,$B0 | |||
| 869A | LD H,A | |||
| 869B | LD L,$00 | |||
| 869D | LD DE,$5E00 | Copy the cavern's attribute bytes into the buffer at 5E00 | ||
| 86A0 | LD BC,$0200 | |||
| 86A3 | LDIR | |||
| 86A5 | LD DE,$8000 | Copy the rest of the cavern definition into the game status buffer at 8000 | ||
| 86A8 | LD BC,$0200 | |||
| 86AB | LDIR | |||
| 86AD | CALL $8A75 | Draw the current cavern to the screen buffer at 7000 | ||
| 86B0 | LD HL,$5000 | Clear the bottom third of the display file | ||
| 86B3 | LD DE,$5001 | |||
| 86B6 | LD BC,$07FF | |||
| 86B9 | LD (HL),$00 | |||
| 86BB | LDIR | |||
| 86BD | LD IX,$8000 | Print the cavern name (see 8000) at (16,0) | ||
| 86C1 | LD C,$20 | |||
| 86C3 | LD DE,$5000 | |||
| 86C6 | CALL $92BA | |||
| 86C9 | LD IX,$8418 | Print 'AIR' (see 8418) at (17,0) | ||
| 86CD | LD C,$03 | |||
| 86CF | LD DE,$5020 | |||
| 86D2 | CALL $92BA | |||
| 86D5 | LD A,$52 | Initialise A to 0x52; this is the MSB of the display file address at which to start drawing the bar that represents the air supply | ||
| 86D7 | LD H,A | Prepare HL and DE for drawing a row of pixels in the air bar | ||
| 86D8 | LD D,A | |||
| 86D9 | LD L,$24 | |||
| 86DB | LD E,$25 | |||
| 86DD | LD B,A | Save the display file address MSB in B briefly | ||
| 86DE | LD A,($80BC) | Pick up the value of the initial air supply from 80BC | ||
| 86E1 | SUB $24 | Now C determines the length of the air bar (in cell widths) | ||
| 86E3 | LD C,A | |||
| 86E4 | LD A,B | Restore the display file address MSB to A | ||
| 86E5 | LD B,$00 | Now BC determines the length of the air bar (in cell widths) | ||
| 86E7 | LD (HL),$FF | Draw a single row of pixels across C cells | ||
| 86E9 | LDIR | |||
| 86EB | INC A | Increment the display file address MSB in A (moving down to the next row of pixels) | ||
| 86EC | CP $56 | Have we drawn all four rows of pixels in the air bar yet? | ||
| 86EE | JR NZ,$86D7 | If not, jump back to draw the next one | ||
| 86F0 | LD IX,$842F | Print 'High Score 000000 Score 000000' (see 842F) at (19,0) | ||
| 86F4 | LD DE,$5060 | |||
| 86F7 | LD C,$20 | |||
| 86F9 | CALL $92BA | |||
| 86FC | LD A,($8073) | Pick up the border colour for the current cavern from 8073 | ||
| 86FF | LD C,$FE | Set the border colour | ||
| 8701 | OUT (C),A | |||
| 8703 | LD A,($845A) | Pick up the game mode indicator from 845A | ||
| 8706 | OR A | Are we in demo mode? | ||
| 8707 | JR Z,$870E | If not, enter the main loop now | ||
| 8709 | LD A,$40 | Reset the game mode indicator at 845A to 0x40 (we're in demo mode) | ||
| 870B | LD ($845A),A | |||
|
This routine continues into the main loop at 870E.
|
||||
| Prev: 85CC | Up: Map | Next: 870E |