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 |