![]() |
Routines |
| Prev: 35563 | Up: Map | Next: 35841 |
|
Used by the routine at 35245. The main entry point is used when resuming the game after it has been paused.
|
||||
| 35591 | LD HL,39424 | Copy the attribute bytes from 39424 to the bottom third of the screen | ||
| 35594 | LD DE,23040 | |||
| 35597 | LD BC,256 | |||
| 35600 | LDIR | |||
| 35602 | LD A,(32990) | Pick up the border colour for the current room from 32990 | ||
| 35605 | OUT (254),A | Restore the border colour | ||
|
This entry point is used by the routine at 35245.
|
||||
| 35607 | LD A,(34257) | Pick up the airborne status indicator from 34257 | ||
| 35610 | CP 255 | Has Willy landed after falling from too great a height, or collided with a nasty, an arrow, a guardian, or Maria? | ||
| 35612 | JP Z,35841 | If so, lose a life | ||
|
Now read the keys H, J, K, L and ENTER (which toggle the in-game music).
|
||||
| 35615 | LD B,191 | Prepare B for reading keys H-J-K-L-ENTER | ||
| 35617 | LD HL,34274 | Point HL at the music flags at 34274 | ||
| 35620 | IN A,(C) | Read keys H-J-K-L-ENTER; note that if the game has just resumed after being paused, C holds 0 instead of 254, which is a bug | ||
| 35622 | AND 31 | Are any of these keys being pressed? | ||
| 35624 | CP 31 | |||
| 35626 | JR Z,35638 | Jump if not | ||
| 35628 | BIT 0,(HL) | Were any of these keys being pressed the last time we checked? | ||
| 35630 | JR NZ,35640 | Jump if so | ||
| 35632 | LD A,(HL) | Set bit 0 (the keypress flag) and flip bit 1 (the in-game music flag) at 34274 | ||
| 35633 | XOR 3 | |||
| 35635 | LD (HL),A | |||
| 35636 | JR 35640 | |||
| 35638 | RES 0,(HL) | Reset bit 0 (the keypress flag) at 34274 | ||
| 35640 | BIT 1,(HL) | Has the in-game music been switched off? | ||
| 35642 | JR NZ,35696 | Jump if so | ||
|
The next section of code plays a note of the in-game music.
|
||||
| 35644 | XOR A | Reset the inactivity timer at 34272 (the game does not automatically pause after a period of inactivity if the in-game music is playing) | ||
| 35645 | LD (34272),A | |||
| 35648 | LD A,(34273) | Increment the in-game music note index at 34273 | ||
| 35651 | INC A | |||
| 35652 | LD (34273),A | |||
| 35655 | AND 126 | Point HL at the appropriate entry in the tune data table at 34399 | ||
| 35657 | RRCA | |||
| 35658 | LD E,A | |||
| 35659 | LD D,0 | |||
| 35661 | LD HL,34399 | |||
| 35664 | ADD HL,DE | |||
| 35665 | LD A,(34252) | Pick up the number of lives remaining (0-7) from 34252 | ||
| 35668 | RLCA | A=28-4A; this value adjusts the pitch of the note that is played depending on how many lives are remaining (the more lives remaining, the higher the pitch) | ||
| 35669 | RLCA | |||
| 35670 | SUB 28 | |||
| 35672 | NEG | |||
| 35674 | ADD A,(HL) | Add the entry from the tune data table for the current note | ||
| 35675 | LD D,A | Copy this value to D (which determines the pitch of the note) | ||
| 35676 | LD A,(32990) | Pick up the border colour for the current room from 32990 | ||
| 35679 | LD E,D | Initialise the pitch delay counter in E | ||
| 35680 | LD BC,3 | Initialise the duration delay counters in B (0) and C (3) | ||
| 35683 | OUT (254),A | Produce a note of the in-game music | ||
| 35685 | DEC E | |||
| 35686 | JR NZ,35691 | |||
| 35688 | LD E,D | |||
| 35689 | XOR 24 | |||
| 35691 | DJNZ 35683 | |||
| 35693 | DEC C | |||
| 35694 | JR NZ,35683 | |||
|
Here we check the teleport keys.
|
||||
| 35696 | LD BC,61438 | Read keys 6-7-8-9-0 | ||
| 35699 | IN A,(C) | |||
| 35701 | BIT 1,A | Is '9' (the activator key) being pressed? | ||
| 35703 | JP NZ,35735 | Jump if not | ||
| 35706 | AND 16 | Keep only bit 4 (corresponding to the '6' key), flip it, and move it into bit 5 | ||
| 35708 | XOR 16 | |||
| 35710 | RLCA | |||
| 35711 | LD D,A | Now bit 5 of D is set if '6' is being pressed | ||
| 35712 | LD A,(34275) | Pick up the WRITETYPER key counter from 34275 | ||
| 35715 | CP 10 | Has WRITETYPER been keyed in yet? | ||
| 35717 | JP NZ,35735 | Jump if not | ||
| 35720 | LD BC,63486 | Read keys 1-2-3-4-5 | ||
| 35723 | IN A,(C) | |||
| 35725 | CPL | Keep only bits 0-4 and flip them | ||
| 35726 | AND 31 | |||
| 35728 | OR D | Copy bit 5 of D into A; now A holds the number of the room to teleport to | ||
| 35729 | LD (33824),A | Store the room number at 33824 | ||
| 35732 | JP 35090 | Teleport into the room | ||
|
Finally, check the WRITETYPER keys.
|
||||
| 35735 | LD A,(34275) | Pick up the WRITETYPER key counter from 34275 | ||
| 35738 | CP 10 | Has WRITETYPER been keyed in yet? | ||
| 35740 | JP Z,35245 | If so, jump back to the start of the main loop | ||
| 35743 | LD A,(33824) | Pick up the current room number from 33824 | ||
| 35746 | CP 28 | Are we in First Landing? | ||
| 35748 | JP NZ,35245 | If not, jump back to the start of the main loop | ||
| 35751 | LD A,(34255) | Pick up Willy's y-coordinate from 34255 | ||
| 35754 | CP 208 | Is Willy on the floor at the bottom of the staircase? | ||
| 35756 | JP NZ,35245 | If not, jump back to the start of the main loop | ||
| 35759 | LD A,(34275) | Pick up the WRITETYPER key counter (0-9) from 34275 | ||
| 35762 | RLCA | Point IX at the corresponding entry in the WRITETYPER table at 34279 | ||
| 35763 | LD E,A | |||
| 35764 | LD D,0 | |||
| 35766 | LD IX,34279 | |||
| 35770 | ADD IX,DE | |||
| 35772 | LD BC,64510 | Read keys Q-W-E-R-T | ||
| 35775 | IN A,(C) | |||
| 35777 | AND 31 | Keep only bits 0-4 | ||
| 35779 | CP (IX+0) | Does this match the first byte of the entry in the WRITETYPER table? | ||
| 35782 | JR Z,35802 | Jump if so | ||
| 35784 | CP 31 | Are any of the keys Q-W-E-R-T being pressed? | ||
| 35786 | JP Z,35245 | If not, jump back to the start of the main loop | ||
| 35789 | CP (IX-2) | Does the keyboard reading match the first byte of the previous entry in the WRITETYPER table? | ||
| 35792 | JP Z,35245 | If so, jump back to the start of the main loop | ||
| 35795 | XOR A | Reset the WRITETYPER key counter at 34275 to 0 (an incorrect key was pressed) | ||
| 35796 | LD (34275),A | |||
| 35799 | JP 35245 | Jump back to the start of the main loop | ||
| 35802 | LD B,223 | Read keys Y-U-I-O-P | ||
| 35804 | IN A,(C) | |||
| 35806 | AND 31 | Keep only bits 0-4 | ||
| 35808 | CP (IX+1) | Does this match the second byte of the entry in the WRITETYPER table? | ||
| 35811 | JR Z,35831 | If so, jump to increment the WRITETYPER key counter | ||
| 35813 | CP 31 | Are any of the keys Y-U-I-O-P being pressed? | ||
| 35815 | JP Z,35245 | If not, jump back to the start of the main loop | ||
| 35818 | CP (IX-1) | Does the keyboard reading match the second byte of the previous entry in the WRITETYPER table? | ||
| 35821 | JP Z,35245 | If so, jump back to the start of the main loop | ||
| 35824 | XOR A | Reset the WRITETYPER key counter at 34275 to 0 (an incorrect key was pressed) | ||
| 35825 | LD (34275),A | |||
| 35828 | JP 35245 | Jump back to the start of the main loop | ||
| 35831 | LD A,(34275) | Increment the WRITETYPER key counter at 34275 | ||
| 35834 | INC A | |||
| 35835 | LD (34275),A | |||
| 35838 | JP 35245 | Jump back to the start of the main loop | ||
| Prev: 35563 | Up: Map | Next: 35841 |