![]() |
Routines |
| Prev: 858C | Up: Map | Next: 8684 |
| 85CC | XOR A | A=0 | ||
| 85CD | LD ($8407),A | Initialise the current cavern number at 8407 | ||
| 85D0 | LD ($8459),A | Initialise the Kempston joystick indicator at 8459 | ||
| 85D3 | LD ($845A),A | Initialise the game mode indicator at 845A | ||
| 85D6 | LD ($845B),A | Initialise the in-game music note index at 845B | ||
| 85D9 | LD ($8458),A | Initialise the screen flash counter at 8458 | ||
| 85DC | LD A,$02 | Initialise the number of lives remaining at 8457 | ||
| 85DE | LD ($8457),A | |||
| 85E1 | LD HL,$845C | Initialise the keypress flag in bit 0 at 845C | ||
| 85E4 | SET 0,(HL) | |||
|
Next, prepare the screen.
|
||||
| 85E6 | LD HL,$4000 | Clear the entire display file | ||
| 85E9 | LD DE,$4001 | |||
| 85EC | LD BC,$17FF | |||
| 85EF | LD (HL),$00 | |||
| 85F1 | LDIR | |||
| 85F3 | LD HL,$A000 | Copy the graphic data at A000 to the top two-thirds of the display file | ||
| 85F6 | LD DE,$4000 | |||
| 85F9 | LD BC,$1000 | |||
| 85FC | LDIR | |||
| 85FE | LD HL,$483D | Draw Willy at (9,29) | ||
| 8601 | LD DE,$8240 | |||
| 8604 | LD C,$00 | |||
| 8606 | CALL $8FF4 | |||
| 8609 | LD HL,$FC00 | Copy the attribute bytes from FC00 to the top third of the attribute file | ||
| 860C | LD DE,$5800 | |||
| 860F | LD BC,$0100 | |||
| 8612 | LDIR | |||
| 8614 | LD HL,$9E00 | Copy the attribute bytes from 9E00 to the bottom two-thirds of the attribute file | ||
| 8617 | LD BC,$0200 | |||
| 861A | LDIR | |||
|
Now check whether there is a joystick connected.
|
||||
| 861C | LD BC,$001F | This is the joystick port | ||
| 861F | DI | Disable interrupts (which are already disabled) | ||
| 8620 | XOR A | A=0 | ||
| 8621 | IN E,(C) | Combine 256 readings of the joystick port in A; if no joystick is connected, some of these readings will have bit 5 set | ||
| 8623 | OR E | |||
| 8624 | DJNZ $8621 | |||
| 8626 | AND $20 | Is a joystick connected (bit 5 reset)? | ||
| 8628 | JR NZ,$862F | Jump if not | ||
| 862A | LD A,$01 | Set the Kempston joystick indicator at 8459 to 1 | ||
| 862C | LD ($8459),A | |||
|
And finally, play the theme tune and check for keypresses.
|
||||
| 862F | LD IY,$846E | Point IY at the theme tune data at 846E | ||
| 8633 | CALL $92DC | Play the theme tune | ||
| 8636 | JP NZ,$8684 | Start the game if ENTER or the fire button was pressed | ||
| 8639 | XOR A | Initialise the game status buffer variable at 80DC; this will be used as an index for the message scrolled across the screen | ||
| 863A | LD ($80DC),A | |||
| 863D | LD A,($80DC) | Pick up the message index from 80DC | ||
| 8640 | LD IX,$9D00 | Point IX at the corresponding location in the message at 9D00 | ||
| 8644 | LD IXl,A | |||
| 8646 | LD DE,$5060 | Print 32 characters of the message at (19,0) | ||
| 8649 | LD C,$20 | |||
| 864B | CALL $92BA | |||
| 864E | LD A,($80DC) | Pick up the message index from 80DC | ||
| 8651 | AND $06 | Keep only bits 1 and 2, and move them into bits 6 and 7, so that A holds 0x00, 0x40, 0x80 or 0xC0; this value determines the animation frame to use for Willy | ||
| 8653 | RRCA | |||
| 8654 | RRCA | |||
| 8655 | RRCA | |||
| 8656 | LD E,A | Point DE at the graphic data for Willy's sprite (8200+A) | ||
| 8657 | LD D,$82 | |||
| 8659 | LD HL,$483D | Draw Willy at (9,29) | ||
| 865C | LD C,$00 | |||
| 865E | CALL $8FF4 | |||
| 8661 | LD BC,$0064 | Pause for about 0.1s | ||
| 8664 | DJNZ $8664 | |||
| 8666 | DEC C | |||
| 8667 | JR NZ,$8664 | |||
| 8669 | LD BC,$BFFE | Read keys H-J-K-L-ENTER | ||
| 866C | IN A,(C) | |||
| 866E | AND $01 | Keep only bit 0 of the result (ENTER) | ||
| 8670 | CP $01 | Is ENTER being pressed? | ||
| 8672 | JR NZ,$8684 | If so, start the game | ||
| 8674 | LD A,($80DC) | Pick up the message index from 80DC | ||
| 8677 | INC A | Increment it | ||
| 8678 | CP $E0 | Set the zero flag if we've reached the end of the message | ||
| 867A | LD ($80DC),A | Store the new message index at 80DC | ||
| 867D | JR NZ,$863D | Jump back unless we've finished scrolling the message across the screen | ||
| 867F | LD A,$40 | Initialise the game mode indicator at 845A to 0x40: demo mode | ||
| 8681 | LD ($845A),A | |||
|
This routine continues into the one at 8684.
|
||||
| Prev: 858C | Up: Map | Next: 8684 |