Dynamite Dan | Routines |
Prev: CA5A | Up: Map | Next: CB8D |
CA5B | CALL $E801 | Clear the screen. | ||
CA5E | LD HL,$EFBC | Print the intro screen UDGS. (EFBC) | ||
CA61 | CALL $ED06 | |||
CA64 | LD HL,$EC26 | Print the intro text. (EC26) | ||
CA67 | CALL $EEF1 | |||
CA6A | LD DE,$0A07 | Start at location 0A , 07. | ||
CA6D | LD A,$02 | Start by drawing red on black. | ||
CA6F | PUSH DE | Store DE and AF. | ||
CA70 | PUSH AF | |||
CA71 | LD BC,$0E01 | Fill 00E columns and 1 row with this attribute. | ||
CA74 | CALL $E8BA | |||
CA77 | POP AF | Restore AF and DE. | ||
CA78 | POP DE | |||
CA79 | INC E | Move forward two columns. | ||
CA7A | INC E | |||
CA7B | INC A | Move to the next ink colour? | ||
CA7C | CP $07 | Have we reached white yet? | ||
CA7E | JR NZ,$CA6F | No, so loop back and colour some more. | ||
CA80 | LD BC,$0012 | Copy the intro screen's attributes. | ||
CA83 | LD DE,$5867 | |||
CA86 | LD HL,$CA2B | |||
CA89 | LDIR | |||
CA8B | LD HL,$DA8A | Switch to playing a tune. | ||
CA8E | LD (HL),$00 | |||
CA90 | LD IY,$CA3D | Point IY at the moving object data for the intro screen. | ||
CA94 | CALL $E54D | Display moving objects, directly. | ||
CA97 | LD HL,$E6D9 | Set the laser tick count (E6D9) to 7F (fire next loop). | ||
CA9A | LD (HL),$7F | |||
CA9C | INC HL | Default to drawing the last bolt in black. | ||
CA9D | LD (HL),$00 | |||
CA9F | LD HL,$EA05 | Point HL at the theme tune. (EA05) | ||
CAA2 | LD ($CA57),HL | Store it as the current one. (CA57). | ||
CAA5 | LD A,$12 | Set 12 blocks in the tune. | ||
CAA7 | LD ($CA59),A | |||
Loop round the theme tune blocks and play them.
|
||||
CAAA | LD HL,($CA57) | Get the current theme tune block. | ||
CAAD | LD A,(HL) | Load the pointer to the tune block into HL. | ||
CAAE | INC HL | |||
CAAF | LD H,(HL) | |||
CAB0 | LD L,A | |||
CAB1 | CALL $DB0B | Play the tune. | ||
CAB4 | LD A,$FD | Scan for 'A' - 'G' on the keyboard. | ||
CAB6 | IN A,($FE) | |||
CAB8 | BIT 2,A | Was 'D' pressed? | ||
CABA | JP Z,$DB63 | If so, move forward to define the keys. | ||
Move the sprites on screen.
|
||||
CABD | LD IY,$CA43 | Point IY at the moving object data for the intro screen. | ||
CAC1 | CALL $E59F | Move the objects. | ||
CAC4 | CALL $EDA2 | Rotate the colours on the main message. | ||
CAC7 | CALL $DA8D | Play a note of the tune. | ||
CACA | CALL $DAFA | Pause for one second. | ||
CACD | LD HL,($DA88) | Have we reached the end of the tune block? | ||
CAD0 | LD A,(HL) | |||
CAD1 | CP $FF | |||
CAD3 | JR NZ,$CAEE | Jump forward if not. | ||
Reached the end of this tune block, move to the next one.
|
||||
CAD5 | LD HL,($CA57) | Move onto the next tune block. (CA57) | ||
CAD8 | INC HL | |||
CAD9 | INC HL | |||
CADA | LD A,($CA59) | Decrement the number of blocks left to play. | ||
CADD | DEC A | |||
CADE | AND A | Are there no blocks left? | ||
CADF | JR NZ,$CAE6 | If there are, then jump forward. | ||
Reached the end of all tune blocks, start the tune from the beginning.
|
||||
CAE1 | LD A,$12 | 12 blocks left to play. | ||
CAE3 | LD HL,$EA05 | Point back to the first block. | ||
CAE6 | LD ($CA57),HL | |||
CAE9 | LD ($CA59),A | Set the number of blocks. | ||
CAEC | JR $CAAA | Loop back to play more of the theme tune. | ||
Flash the selected row on the title screen.
|
||||
CAEE | LD A,($CA5A) | Put the current row in E. | ||
CAF1 | LD E,A | |||
CAF2 | LD D,$0A | Always starting at column 00A. | ||
CAF4 | CALL $E8E3 | Get the attribute at this location and put it in HL. | ||
CAF7 | EX DE,HL | |||
CAF8 | LD B,$0A | Loop for 0A columns. | ||
CAFA | SET 7,(HL) | Set the flash bit. | ||
CAFC | INC L | Move to the next column. | ||
CAFD | DJNZ $CAFA | Loop while there are more columns. | ||
Detect Sinclair joystick.
|
||||
CAFF | LD A,$FD | Scan for 'A' - 'G' on the keyboard. | ||
CB01 | IN A,($FE) | |||
CB03 | AND $02 | Was 'D' pressed? | ||
CB05 | JR NZ,$CB1E | Move forward if not. | ||
CB07 | LD A,($CA5A) | Get the currently selected row to flash. | ||
CB0A | CP $0B | Is it 00B? | ||
CB0C | JR Z,$CAB4 | Jump back if is. | ||
CB0E | CALL $CB8D | Otherwise change the option. | ||
CB11 | LD HL,$E9DB | Change input to Sinclair joystick. | ||
CB14 | LD ($E9BA),HL | |||
CB17 | LD A,$0B | Set 00B as the row to flash. | ||
CB19 | LD ($CA5A),A | |||
CB1C | JR $CAB4 | Jump back. | ||
Detect keyboard
|
||||
CB1E | LD A,$BF | Scan for 'ENTER' - 'H' on the keyboard. | ||
CB20 | IN A,($FE) | |||
CB22 | LD B,A | Remember this in B. | ||
CB23 | AND $04 | Was 'K' pressed? | ||
CB25 | JR NZ,$CB3B | Jump forward if not. | ||
CB27 | LD A,($CA5A) | Get the currently selected row to flash. | ||
CB2A | CP $07 | Is it 07? | ||
CB2C | JR Z,$CAB4 | Jump back if it is. | ||
CB2E | CALL $CB8D | Otherwise change the option. | ||
CB31 | LD HL,$F271 | Change input to keyboard. | ||
CB34 | LD ($E9BA),HL | |||
CB37 | LD A,$07 | Set 07 as the row to flash and jump back. | ||
CB39 | JR $CB19 | |||
Detect Kempston joystick
|
||||
CB3B | LD A,B | Get the keys pressed earlier. | ||
CB3C | AND $08 | Was 'J' pressed? | ||
CB3E | JR NZ,$CB55 | Jump forward if not. | ||
CB40 | LD A,($CA5A) | Get the currently selected row to flash. | ||
CB43 | CP $09 | Is it 09? | ||
CB45 | JP Z,$CAB4 | Jump back if it is. | ||
CB48 | CALL $CB8D | Otherwise change the option. | ||
CB4B | LD HL,$E9C0 | Change input to Kempston joystick. | ||
CB4E | LD ($E9BA),HL | |||
CB51 | LD A,$09 | Set 09 as the row to flash and jump back. | ||
CB53 | JR $CB19 | |||
No change in input routine, check for another option.
|
||||
CB55 | LD A,$DF | Scan 'P' - 'Y' on the keyboard. | ||
CB57 | IN A,($FE) | |||
CB59 | BIT 2,A | Was 'I' pressed? | ||
CB5B | JP Z,$DCF6 | If so, display the instructions. | ||
CB5E | CALL $CB9C | Check if ENTER or FIRE was pressed. | ||
CB61 | JP NZ,$CAB4 | Jump back if it it wasn't. | ||
ENTER or FIRE was pressed. Time to start the game.
|
||||
CB64 | LD HL,$DA8A | Stop the tune playing (DA8A). | ||
CB67 | RES 0,(HL) | |||
CB69 | LD IY,$CA53 | Point IY at the laser movement for the intro screen (CA53) | ||
CB6D | CALL $E6F6 | Update the laser. | ||
CB70 | CALL $DA8D | Play the laser sound effect. | ||
CB73 | CALL $DAFA | Pause for one second. | ||
CB76 | CALL $EDA2 | Rotate the colours for the main message / laser. | ||
CB79 | LD IY,$CA43 | Point IY at the moving object data for the intro screen. | ||
CB7D | CALL $E59F | Move all objects. | ||
CB80 | LD A,($E6DA) | Is the current laser colour 0? | ||
CB83 | AND A | If not, loop back to redraw it. | ||
CB84 | JR NZ,$CB69 | |||
CB86 | LD HL,$CA1E | Print "Good luck" (CA1E) on screen and return. | ||
CB89 | CALL $DDE0 | |||
CB8C | RET |
Prev: CA5A | Up: Map | Next: CB8D |