Prev: 34188 Up: Map Next: 34436
34252: Display the title screen and play the theme tune
Used by the routines at 33792, 34574 and 35140.
The first thing this routine does is initialise some game status buffer variables in preparation for the next game.
34252 XOR A A=0
34253 LD (33799),A Initialise the current cavern number at 33799
34256 LD (33881),A Initialise the Kempston joystick indicator at 33881
34259 LD (33882),A Initialise the game mode indicator at 33882
34262 LD (33883),A Initialise the in-game music note index at 33883
34265 LD (33880),A Initialise the screen flash counter at 33880
34268 LD A,2 Initialise the number of lives remaining at 33879
34270 LD (33879),A
34273 LD HL,33884 Initialise the keypress flag in bit 0 at 33884
34276 SET 0,(HL)
Next, prepare the screen.
34278 LD HL,16384 Clear the entire display file
34281 LD DE,16385
34284 LD BC,6143
34287 LD (HL),0
34289 LDIR
34291 LD HL,40960 Copy the graphic data at 40960 to the top two-thirds of the display file
34294 LD DE,16384
34297 LD BC,4096
34300 LDIR
34302 LD HL,18493 Draw Willy at (9,29)
34305 LD DE,33344
34308 LD C,0
34310 CALL 36852
34313 LD HL,64512 Copy the attribute bytes from 64512 to the top third of the attribute file
34316 LD DE,22528
34319 LD BC,256
34322 LDIR
34324 LD HL,40448 Copy the attribute bytes from 40448 to the bottom two-thirds of the attribute file
34327 LD BC,512
34330 LDIR
Now check whether there is a joystick connected.
34332 LD BC,31 This is the joystick port
34335 DI Disable interrupts (which are already disabled)
34336 XOR A A=0
34337 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
34339 OR E
34340 DJNZ 34337
34342 AND 32 Is a joystick connected (bit 5 reset)?
34344 JR NZ,34351 Jump if not
34346 LD A,1 Set the Kempston joystick indicator at 33881 to 1
34348 LD (33881),A
And finally, play the theme tune and check for keypresses.
34351 LD IY,33902 Point IY at the theme tune data at 33902
34355 CALL 37596 Play the theme tune
34358 JP NZ,34436 Start the game if ENTER or the fire button was pressed
34361 XOR A Initialise the game status buffer variable at 32988; this will be used as an index for the message scrolled across the screen
34362 LD (32988),A
34365 LD A,(32988) Pick up the message index from 32988
34368 LD IX,40192 Point IX at the corresponding location in the message at 40192
34372 LD IXl,A
34374 LD DE,20576 Print 32 characters of the message at (19,0)
34377 LD C,32
34379 CALL 37562
34382 LD A,(32988) Pick up the message index from 32988
34385 AND 6 Keep only bits 1 and 2, and move them into bits 6 and 7, so that A holds 0, 64, 128 or 192; this value determines the animation frame to use for Willy
34387 RRCA
34388 RRCA
34389 RRCA
34390 LD E,A Point DE at the graphic data for Willy's sprite (33280+A)
34391 LD D,130
34393 LD HL,18493 Draw Willy at (9,29)
34396 LD C,0
34398 CALL 36852
34401 LD BC,100 Pause for about 0.1s
34404 DJNZ 34404
34406 DEC C
34407 JR NZ,34404
34409 LD BC,49150 Read keys H-J-K-L-ENTER
34412 IN A,(C)
34414 AND 1 Keep only bit 0 of the result (ENTER)
34416 CP 1 Is ENTER being pressed?
34418 JR NZ,34436 If so, start the game
34420 LD A,(32988) Pick up the message index from 32988
34423 INC A Increment it
34424 CP 224 Set the zero flag if we've reached the end of the message
34426 LD (32988),A Store the new message index at 32988
34429 JR NZ,34365 Jump back unless we've finished scrolling the message across the screen
34431 LD A,64 Initialise the game mode indicator at 33882 to 64: demo mode
34433 LD (33882),A
This routine continues into the one at 34436.
Prev: 34188 Up: Map Next: 34436