![]() |
Routines |
| Up: Map | Next: 6229 |
|
|
||||
| 6000 | DI | Disable interrupts. | ||
| 6001 | LD A,($5C78) | Initialise the pseudo-random number address. | ||
| 6004 | LD L,A | |||
| 6005 | AND $1F | |||
| 6007 | LD H,A | |||
| 6008 | LD A,(HL) | |||
| 6009 | LD L,A | |||
| 600A | AND $1F | |||
| 600C | LD H,A | |||
| 600D | LD ($7C67),HL | |||
| 6010 | LD HL,$7C6A | Initialise the 'T' pressed indicator to 'off' (bit 4 set). | ||
| 6013 | LD (HL),$10 | |||
| 6015 | LD HL,$7C69 | Initialise the sound indicator to 'on'. | ||
| 6018 | LD (HL),$1F | |||
|
This entry point is used by the routine at 673A when a game has ended.
|
||||
| 601A | LD HL,$5800 | INK 7: PAPER 7 | ||
| 601D | LD DE,$5801 | |||
| 6020 | LD BC,$02FF | |||
| 6023 | LD (HL),$3F | |||
| 6025 | LDIR | |||
| 6027 | LD HL,$4000 | Clear the display file. | ||
| 602A | LD DE,$4001 | |||
| 602D | LD BC,$17FF | |||
| 6030 | LD (HL),$00 | |||
| 6032 | LDIR | |||
| 6034 | LD HL,$5800 | INK 0: PAPER 7 | ||
| 6037 | LD DE,$5801 | |||
| 603A | LD BC,$02FF | |||
| 603D | LD (HL),$38 | |||
| 603F | LDIR | |||
| 6041 | LD A,$00 | Signal demo mode. | ||
| 6043 | LD ($6B0B),A | |||
| 6046 | LD HL,$008C | Initialise the title screen countdown timer. | ||
| 6049 | LD ($6B08),HL | |||
| 604C | LD DE,$40A0 | Print 'HUNGRY' in big letters. | ||
| 604F | LD HL,$6E8F | |||
| 6052 | LD BC,$00A0 | |||
| 6055 | CALL $6D4E | |||
| 6058 | LD DE,$4880 | Print 'HORACE' in big letters. | ||
| 605B | LD HL,$6F2F | |||
| 605E | LD BC,$00A0 | |||
| 6061 | CALL $6D4E | |||
| 6064 | LD A,($6B0B) | Pick up the game mode indicator. | ||
| 6067 | PUSH AF | Save it briefly. | ||
| 6068 | LD A,$01 | Signal game mode (to force the copyright message to be printed). | ||
| 606A | LD ($6B0B),A | |||
| 606D | LD HL,$50C0 | This is the display file address for the copyright message. | ||
| 6070 | CALL $6C0F | Set HL' to the corresponding attribute file address (unnecessarily). | ||
| 6073 | EX DE,HL | Transfer the display file address to DE. | ||
| 6074 | LD HL,$6AA7 | Print 'Copyright © 1982 Beam Software' and 'PRESS ANY KEY TO START PLAY'. | ||
| 6077 | LD A,(HL) | |||
| 6078 | CP $FF | |||
| 607A | JR Z,$6082 | |||
| 607C | INC HL | |||
| 607D | CALL $6B4F | |||
| 6080 | JR $6077 | |||
| 6082 | POP AF | Restore the game mode indicator. | ||
| 6083 | LD ($6B0B),A | |||
|
The following loop cycles the colour of the words 'HUNGRY HORACE' and plays a sound effect, either 140 times or until a key is pressed.
|
||||
| 6086 | LD HL,$58A0 | Change the colour of the words 'HUNGRY HORACE' on the title screen. | ||
| 6089 | LD DE,$58A1 | |||
| 608C | LD BC,$009F | |||
| 608F | LD A,(HL) | |||
| 6090 | INC A | |||
| 6091 | AND $3F | |||
| 6093 | OR $38 | |||
| 6095 | LD (HL),A | |||
| 6096 | LDIR | |||
| 6098 | LD HL,$5980 | |||
| 609B | LD DE,$5981 | |||
| 609E | LD BC,$009F | |||
| 60A1 | LD A,(HL) | |||
| 60A2 | INC A | |||
| 60A3 | AND $3F | |||
| 60A5 | OR $38 | |||
| 60A7 | LD (HL),A | |||
| 60A8 | LDIR | |||
| 60AA | CALL $6A77 | Make the title screen sound effect. | ||
| 60AD | LD HL,($6B08) | Decrement the title screen countdown timer. | ||
| 60B0 | DEC HL | |||
| 60B1 | LD ($6B08),HL | |||
| 60B4 | LD A,H | Is it zero now? | ||
| 60B5 | OR L | |||
| 60B6 | JR Z,$60C9 | Jump if so. | ||
| 60B8 | LD A,$00 | Read the keyboard. | ||
| 60BA | IN A,($FE) | |||
| 60BC | AND $1F | Is a key being pressed? | ||
| 60BE | CP $1F | |||
| 60C0 | JR Z,$6086 | Jump if not. | ||
| 60C2 | LD A,$01 | Signal that a game (not demo mode) has started. | ||
| 60C4 | LD ($6B0B),A | |||
| 60C7 | JR $60C9 | This instruction is redundant. | ||
| 60C9 | LD A,$FF | Initialise the maze number. | ||
| 60CB | LD ($7C63),A | |||
| 60CE | LD A,$08 | Initialise the game speed parameter. | ||
| 60D0 | LD ($7C62),A | |||
| 60D3 | LD A,$03 | Initialise the number of lives remaining. | ||
| 60D5 | LD ($7C78),A | |||
| 60D8 | LD HL,$0000 | Initialise the score. | ||
| 60DB | LD ($7C73),HL | |||
| 60DE | LD A,$00 | Initialise the active guard counter. | ||
| 60E0 | LD ($6B0A),A | |||
| 60E3 | LD ($7C77),A | Initialise the extra life indicator. | ||
| 60E6 | CALL $6A22 | Initialise the guard countdown timers. | ||
| 60E9 | LD A,($7C63) | Pick up the current maze number (0-3). | ||
| 60EC | INC A | Is it 0, 1 or 2? | ||
| 60ED | AND $FC | |||
| 60EF | JR Z,$60FC | Jump if so. | ||
| 60F1 | LD A,($7C62) | Decrement the game speed parameter (unless it's already 1). This increases the speed of the game. | ||
| 60F4 | DEC A | |||
| 60F5 | JR NZ,$60F9 | |||
| 60F7 | LD A,$01 | |||
| 60F9 | LD ($7C62),A | |||
| 60FC | LD A,($7C63) | Increment the maze number. | ||
| 60FF | INC A | |||
| 6100 | AND $03 | |||
| 6102 | LD ($7C63),A | |||
| 6105 | LD A,($7C63) | Pick up the current maze number. | ||
| 6108 | CP $00 | Is it maze 1? | ||
| 610A | JR NZ,$6117 | Jump if not. | ||
| 610C | LD HL,$6FD7 | Copy the tunnel offset and bell, initial guard and entrance locations for maze 1 to 6FCF. | ||
| 610F | CALL $6A9E | |||
| 6112 | LD HL,$72F7 | Point HL at the layout data for maze 1. | ||
| 6115 | JR $6140 | |||
| 6117 | CP $01 | Is it maze 2? | ||
| 6119 | JR NZ,$6126 | Jump if not. | ||
| 611B | LD HL,$6FDF | Copy the tunnel offset and bell, initial guard and entrance locations for maze 2 to 6FCF. | ||
| 611E | CALL $6A9E | |||
| 6121 | LD HL,$6FF7 | Point HL at the layout data for maze 2. | ||
| 6124 | JR $6140 | |||
| 6126 | CP $02 | Is it maze 3? | ||
| 6128 | JR NZ,$6135 | Jump if not. | ||
| 612A | LD HL,$6FE7 | Copy the tunnel offset and bell, initial guard and entrance locations for maze 3 to 6FCF. | ||
| 612D | CALL $6A9E | |||
| 6130 | LD HL,$75F7 | Point HL at the layout data for maze 3. | ||
| 6133 | JR $6140 | |||
| 6135 | LD HL,$6FEF | Copy the tunnel offset and bell, initial guard and entrance locations for maze 4 to 6FCF. | ||
| 6138 | CALL $6A9E | |||
| 613B | LD HL,$78F7 | Point HL at the layout data for maze 4. | ||
| 613E | JR $6140 | |||
| 6140 | LD DE,$4000 | Draw the current maze. | ||
| 6143 | LD BC,$0300 | |||
| 6146 | CALL $6B75 | |||
| 6149 | LD A,($6B0B) | Pick up the game mode indicator. | ||
| 614C | AND A | Is it demo mode? | ||
| 614D | JR Z,$6164 | Jump if so. | ||
| 614F | LD HL,$4000 | This is the display file address for 'PASSES SCORE BEST'. | ||
| 6152 | CALL $6C0F | Set HL' to the corresponding attribute file address (unnecessarily). | ||
| 6155 | EX DE,HL | Transfer the display file address to DE. | ||
| 6156 | LD HL,$7C47 | Print 'PASSES SCORE BEST'. | ||
| 6159 | LD A,(HL) | |||
| 615A | CP $FF | |||
| 615C | JR Z,$618F | |||
| 615E | INC HL | |||
| 615F | CALL $6B4F | |||
| 6162 | JR $6159 | |||
| 6164 | LD A,$01 | Signal game mode (to force the 'DEMO MODE' text to be printed). | ||
| 6166 | LD ($6B0B),A | |||
| 6169 | LD HL,$4000 | This is the display file address for 'DEMO MODE PRESS ANY KEY TO PLAY'. | ||
| 616C | CALL $6C0F | Set HL' to the corresponding attribute file address (unnecessarily). | ||
| 616F | EX DE,HL | Transfer the display file address to DE. | ||
| 6170 | LD HL,$6AE7 | Print 'DEMO MODE PRESS ANY KEY TO PLAY'. | ||
| 6173 | LD A,(HL) | |||
| 6174 | CP $FF | |||
| 6176 | JR Z,$617E | |||
| 6178 | INC HL | |||
| 6179 | CALL $6B4F | |||
| 617C | JR $6173 | |||
| 617E | LD A,$00 | Restore the game mode indicator to demo mode. | ||
| 6180 | LD ($6B0B),A | |||
| 6183 | LD HL,$5800 | Make 'DEMO MODE' flash. | ||
| 6186 | LD B,$09 | |||
| 6188 | LD A,(HL) | |||
| 6189 | ADD A,$80 | |||
| 618B | LD (HL),A | |||
| 618C | INC HL | |||
| 618D | DJNZ $6188 | |||
| 618F | LD HL,($6FD1) | Copy the bell location to 7CC4. | ||
| 6192 | LD ($7CC4),HL | |||
| 6195 | LD HL,$4007 | This is the display file address for the number of lives remaining. | ||
| 6198 | CALL $6C0F | Set HL' to the corresponding attribute file address (unnecessarily). | ||
| 619B | LD A,($7C78) | Pick up the number of lives remaining. | ||
| 619E | ADD A,"0" | Convert it to the ASCII code for the corresponding digit. | ||
| 61A0 | EX DE,HL | Transfer the display file address to DE. | ||
| 61A1 | CALL $6B4F | Print the number of lives remaining. | ||
| 61A4 | LD HL,$07D0 | Initialise the lunch-drop countdown timer. | ||
| 61A7 | LD ($7C65),HL | |||
|
This entry point is used by the routine at 673A after Horace has lost a life.
|
||||
| 61AA | LD HL,($7CC4) | Pick up the bell location. | ||
| 61AD | LD A,H | Has Horace sounded the alarm? | ||
| 61AE | OR L | |||
| 61AF | JR Z,$61B7 | Jump if so. | ||
| 61B1 | LD HL,($6FD1) | Reinitialise the bell location. | ||
| 61B4 | LD ($7CC4),HL | |||
| 61B7 | LD B,$04 | There are four guards. | ||
| 61B9 | PUSH BC | Copy the guard's buffer into the temporary location (6DB8). | ||
| 61BA | CALL $6A3F | |||
| 61BD | POP BC | |||
| 61BE | PUSH BC | Save the guard counter. | ||
| 61BF | SLA B | Point HL at one of the guard countdown timers at 6DA6. | ||
| 61C1 | LD C,B | |||
| 61C2 | LD B,$00 | |||
| 61C4 | XOR A | |||
| 61C5 | LD HL,$6DAE | |||
| 61C8 | SBC HL,BC | |||
| 61CA | LD A,(HL) | Is this guard in play? | ||
| 61CB | INC HL | |||
| 61CC | OR (HL) | |||
| 61CD | JR NZ,$61D4 | Jump if not. | ||
| 61CF | LD HL,($6FD3) | Pick up the initial guard location for the current maze. | ||
| 61D2 | JR $61D7 | |||
| 61D4 | LD HL,($6FD5) | Pick up the bell location for the current maze. | ||
| 61D7 | LD ($6DB8),HL | Initialise the guard's current and new locations. | ||
| 61DA | LD ($6DBC),HL | |||
| 61DD | LD HL,$6DBF | Clear the four maze background tiles in the temporary guard buffer. | ||
| 61E0 | LD C,$04 | |||
| 61E2 | LD (HL),$3E | |||
| 61E4 | INC HL | |||
| 61E5 | LD B,$08 | |||
| 61E7 | LD (HL),$00 | |||
| 61E9 | INC HL | |||
| 61EA | DJNZ $61E7 | |||
| 61EC | DEC C | |||
| 61ED | JR NZ,$61E2 | |||
| 61EF | CALL $6A6A | Copy the guard's buffer back to the original location. | ||
| 61F2 | POP BC | Restore the guard counter to B. | ||
| 61F3 | DJNZ $61B9 | Jump back to prepare the next guard. | ||
| 61F5 | LD HL,($6FD5) | Pick up Horace's initial location for the current maze. | ||
| 61F8 | LD ($7C6B),HL | Initialise Horace's current and new locations. | ||
| 61FB | LD ($7C6D),HL | |||
| 61FE | LD A,$01 | Initialise Horace's animation frame. | ||
| 6200 | LD ($7C70),A | |||
| 6203 | LD A,($7C62) | Initialise the sprite movement timer (using the value of the game speed parameter). | ||
| 6206 | LD ($7C61),A | |||
| 6209 | LD HL,($7C73) | Print the score and make a sound effect. | ||
| 620C | CALL $65C7 | |||
| 620F | LD HL,($7C75) | Pick up the high score. | ||
| 6212 | LD DE,$4000 | Set DE to the display file address for the high score (in a roundabout way). | ||
| 6215 | EX DE,HL | |||
| 6216 | LD BC,$001A | |||
| 6219 | ADD HL,BC | |||
| 621A | EX DE,HL | |||
| 621B | CALL $6B21 | Print the high score. | ||
| 621E | LD HL,$0000 | Initialise the guard panic timer. | ||
| 6221 | LD ($6DAE),HL | |||
| 6224 | LD A,$39 | Initialise Horace's attribute byte (INK 1: PAPER 7). | ||
| 6226 | LD ($7C71),A | |||
|
This routine continues into the main loop at 6229.
|
||||
| Up: Map | Next: 6229 |