From 26b42926816662ce878e814938a1ebc0aa1847c2 Mon Sep 17 00:00:00 2001 From: "B. Watson" Date: Mon, 29 Aug 2016 15:00:13 -0400 Subject: finally made a git repo for this --- jumpmanjr.dasm | 7360 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 7360 insertions(+) create mode 100644 jumpmanjr.dasm (limited to 'jumpmanjr.dasm') diff --git a/jumpmanjr.dasm b/jumpmanjr.dasm new file mode 100644 index 0000000..b856ad9 --- /dev/null +++ b/jumpmanjr.dasm @@ -0,0 +1,7360 @@ +; da65 V2.15 - Git 104f898 +; Created: 2016-08-29 14:55:43 +; Input file: jumpmanjr.rom +; Page: 1 + + + .setcpu "6502" + +; ---------------------------------------------------------------------------- +L0000 := $0000 +dm_ypos := $0054 ; see draw_map and level_maps.txt +dm_xpos := $0055 ; see draw_map and level_maps.txt +SAVMSC := $0058 ; OS's idea of the start of screen memory [redundant to set here?] +dm_count := $00BE ; graphics object definition is this long +dm_length := $00BF ; see draw_map and level_maps.txt +dm_progctr := $00C0 ; see draw_map and level_maps.txt +dm_objptr := $00C2 ; see draw_map and level_maps.txt +dm_screen_addr := $00C4 ; points to byte to write gfx data to +dm_x_with_offset:= $00C6 ; graphics object X offset, plus dm_xpos +dm_y_with_offset:= $00C7 ; graphics object Y offset, plus dm_xpos +dm_delta_x := $00C9 ; see draw_map and level_maps.txt +dm_delta_y := $00CA ; see draw_map and level_maps.txt +zp_temp1 := $00CB ; used for (zp,y) addressing, also for checking console keys in vblank_imm_isr +FR1 := $00E0 +VDSLST := $0200 +VKEYBD := $0208 +VKEYBD_hi := $0209 +SDMCTL := $022F +GPRIOR := $026F +PCOLR0 := $02C0 +PCOLR1 := $02C1 +PCOLR2 := $02C2 +PCOLR3 := $02C3 +COLOR0 := $02C4 +COLOR1 := $02C5 +COLOR2 := $02C6 +COLOR3 := $02C7 +COLOR4 := $02C8 +CHBAS := $02F4 +jiffy_timer_1 := $061A ; gets incremented every frame +jiffy_timer_2 := $061B ; gets incremented every frame +speed_jiffy_timer:= $061E ; counts 0..initial_speed +player_speed := $0624 +initial_speed := $0625 +bonus_jiffy_timer:= $0626 ; gets incremented every frame when playing a level, bonus-=100 when this reaches 0 +playing_level := $0627 ; 0 = not playing, non-0 = playing +sfx_lock := $062F ; lets other code know cue_sfx is still running? not 100% sure +player_delta_x := $0630 ; amount to move jumpman this frame (1 or $FF aka -1) +player_delta_y := $0631 ; amount to move jumpman this frame (1 or $FF aka -1) +joystick_disabled:= $0632 ; nonzero = jumpman can't move (title screen or materialization, etc) +joystick_state := $0633 ; last PORTA read (bottom 4 bits), or 0 if joystick_disabled +trigger_disabled:= $0634 ; nonzero = jumpman can't jump (he's already jumping, or title screen or materialization, etc) +trigger_state := $0635 ; last TRIG0 read (0 = pressed) +sfx_ptr := $063C +sfx_slot_tempo := $063E ; tempo of this sfx +sfx_slot_timer := $063F +sfx_slot_duration:= $0646 +sfx_slot_freq := $0647 +sfx_slot_curpos := $064E ; address we've got to so far, playing this sfx +sfx_tempo_tmp := $0661 ; ?? +dlist_shadow_lo := $06AC ; stored in DLISTL if dlist_shadow_hi nonzero +dlist_shadow_hi := $06AD ; stored in DLISTH if nonzero +dli_vec_shadow_lo:= $06AE ; stored in VDSLST if dli_vec_shadow_hi nonzero +dli_vec_shadow_hi:= $06AF ; stored in VDSLST if nonzero +collision_save := $06B0 ; save_collisions copies GTIA collision regs $D000-$d00f here +option_key_vec := $06C0 ; vblank_imm_isr jumps thru here if option key pressed +select_key_vec := $06C2 ; vblank_imm_isr jumps thru here if select key pressed +start_key_vec := $06C4 ; vblank_imm_isr jumps thru here if start key pressed +option_key_enabled:= $06C6 ; non-zero = jump through start_key_vec if start key pressed (checked by vblank_imm_isr) +select_key_enabled:= $06C7 ; non-zero = jump through start_key_vec if start key pressed (checked by vblank_imm_isr) +start_key_enabled:= $06C8 ; non-zero = jump through start_key_vec if start key pressed (checked by vblank_imm_isr) +L06DF := $06DF +L06E0 := $06E0 +L06E3 := $06E3 +L06E6 := $06E6 +randomizer_mode := $06F3 ; only after beating levels 1-12 in order +number_of_players:= $06F4 ; 0 for single-player game, otherwise range 1-3 (2 to 4 players) +level := $06F6 +speed_value := $06F9 ; decoded speed (1-8) +current_player := $06FE ; *think* this ranges 1-4, not 0-3 +score := $0700 +lives := $070A +work_level_desc := $0780 ; first 2 bytes are level number in screencodes +work_level_sub0 := $0782 ; a subroutine +work_level_sub1 := $0784 ; a subroutine +work_level_sub2 := $0786 ; a subroutine +work_level_sub3 := $0788 ; a subroutine +work_level_num_bombs:= $078A ; number of bombs to pick up on this level +work_level_bullet_chance:= $078B ; 0 = no bullets +work_level_y_start:= $078C ; jumpman starting Y position +work_level_x_start:= $078D ; jumpman starting X position +work_level_offs_14:= $078E ; points to $0600 +work_level_points_per_bomb:= $0790 ; points awarded per bomb pickup (always $64 aka 100) +work_level_time_bonus:= $0791 ; amount of time bonus at start of level +work_level_offs_19:= $0793 ; always $00 +work_level_unkn_table0:= $0794 ; pointer to ROM table or $06xx +work_level_map0 := $0796 ; map data +work_level_map1 := $0798 ; map data +work_level_map2 := $079A ; map data +work_level_unkn_table1:= $079C ; unknown, pointer to a ROM table or $0000 +work_level_offs_30:= $079E ; always $0000 +work_level_sub4 := $07A0 ; $06E6 for most levels, or else a ROM subroutine +work_level_sub5 := $07A2 ; $06E6 for some levels, or else a ROM subroutine +work_level_sub6 := $07A4 ; always $9740 aka game_main_loop +work_level_sub_eol:= $07A6 ; called at end of level (all bombs picked up). $06E6 for all but level07 +work_level_offs_40:= $07A8 ; all zeroes +work_level_offs_46:= $07AE ; unknown +work_level_offs_55:= $07B7 ; unknown, always $00 $00 $00 +work_level_offs_58:= $07BA ; unknown, not a ROM address +work_level_offs_60:= $07BC ; unknown, level05 (walls) has $ff $ff $ff $ff, all others $00 $00 $00 $00 +cur_level_desc := $07C0 ; first 2 bytes are level number in screencodes +cur_level_sub0 := $07C2 ; a subroutine +cur_level_sub1 := $07C4 ; a subroutine +cur_level_sub2 := $07C6 ; a subroutine +cur_level_sub3 := $07C8 ; a subroutine +cur_level_num_bombs:= $07CA ; number of bombs to pick up on this level +cur_level_bullet_chance:= $07CB ; 0 = no bullets +cur_level_y_start:= $07CC ; jumpman starting Y position +cur_level_x_start:= $07CD ; jumpman starting X position +cur_level_offs_14:= $07CE ; points to $0600 +cur_level_points_per_bomb:= $07D0 ; points awarded per bomb pickup (always $64 aka 100) +cur_level_time_bonus:= $07D1 ; amount of time bonus at start of level +cur_level_offs_19:= $07D3 ; always $00 +cur_level_unkn_table0:= $07D4 ; pointer to ROM table or $06xx +cur_level_map0 := $07D6 ; map data +cur_level_map1 := $07D8 ; map data +cur_level_map2 := $07DA ; map data +cur_level_unkn_table1:= $07DC ; unknown, pointer to a ROM table or $0000 +cur_level_offs_30:= $07DE ; always $0000 +cur_level_sub4 := $07E0 ; $06E6 for most levels, or else a ROM subroutine +cur_level_sub5 := $07E2 ; $06E6 for some levels, or else a ROM subroutine +cur_level_sub6 := $07E4 ; always $9740 aka game_main_loop +cur_level_sub_eol:= $07E6 ; called at end of level (all bombs picked up). $06E6 for all but level07 +cur_level_offs_40:= $07E8 ; all zeroes +cur_level_offs_46:= $07EE ; unknown +cur_level_offs_55:= $07F7 ; unknown, always $00 $00 $00 +cur_level_offs_58:= $07FA ; unknown, not a ROM address +cur_level_offs_60:= $07FC ; unknown, level05 (walls) has $ff $ff $ff $ff, all others $00 $00 $00 $00 +L0830 := $0830 +game_display_list:= $0881 ; display list for game board +pm_memory := $2800 +HPOSP0_minus_two:= $CFFE +HPOSP3 := $D003 +HPOSM0 := $D004 +HPOSM1 := $D005 +HPOSM2 := $D006 +HPOSM3 := $D007 +SIZEP2 := $D00A +SIZEP3 := $D00B +SIZEM := $D00C +TRIG0 := $D010 +GRAFM := $D011 +COLPM0 := $D012 +COLPM1 := $D013 +COLPF0 := $D016 +COLPF1 := $D017 +COLPF2 := $D018 +COLPF3 := $D019 +COLBK := $D01A +PRIOR := $D01B +GRACTL := $D01D +HITCLR := $D01E +CONSOL := $D01F +AUDF1_minus_two := $D1FE +AUDF1_minus_one := $D1FF +AUDF1 := $D200 +AUDC1 := $D201 +AUDF2 := $D202 +AUDC2 := $D203 +AUDF3 := $D204 +AUDC3 := $D205 +AUDF4 := $D206 +AUDC4 := $D207 +AUDCTL := $D208 +KBCODE := $D209 +RANDOM := $D20A +IRQEN := $D20E +SKCTL := $D20F +PORTA := $D300 +DMACTL := $D400 +DLISTL := $D402 +DLISTH := $D403 +HSCROL := $D404 +PMBASE := $D407 +CHBASE := $D409 +WSYNC := $D40A +NMIEN := $D40E +SETVBV := $E45C +XITVBV := $E462 +; ---------------------------------------------------------------------------- +; the entry point for parsing the level map and drawing graphics from it. see level_maps.txt. +draw_map_jv: + jmp draw_map ; 8000 4C 49 80 LI. + +; ---------------------------------------------------------------------------- +L8003: jmp cue_sfx_lowprior ; 8003 4C 40 82 L@. + +; ---------------------------------------------------------------------------- +; setup to play sfx +cue_sfx_jv: + jmp cue_sfx ; 8006 4C 55 82 LU. + +; ---------------------------------------------------------------------------- +; gets called after the level is drawn & the intro music stops, and also during the level (?) +xxx_level_something_jv: + jmp xxx_level_something ; 8009 4C 00 86 L.. + +; ---------------------------------------------------------------------------- +L800C: jmp L8CBC ; 800C 4C BC 8C L.. + +; ---------------------------------------------------------------------------- +L800F: jmp L867E ; 800F 4C 7E 86 L~. + +; ---------------------------------------------------------------------------- +; bottom 2 GR.1 lines on the game board +update_status_window_jv: + jmp update_status_window ; 8012 4C 94 86 L.. + +; ---------------------------------------------------------------------------- +; for some reason there are 2 copies of the display list, at $0800 and $0881 +setup_gameboard_dlist_jv: + jmp setup_gameboard_dlist ; 8015 4C 00 9B L.. + +; ---------------------------------------------------------------------------- +; setup to play whichever music is in A reg, using 5-byte sfx stuct +cue_music_jv: + jmp cue_music ; 8018 4C 92 8F L.. + +; ---------------------------------------------------------------------------- +; called after level-intro music is finished playing +enable_joystick_jv: + jmp enable_joystick ; 801B 4C 75 87 Lu. + +; ---------------------------------------------------------------------------- +; clear the gameboard screen memory (called before drawing a level, natch) +clear_screen_mem_jv: + jmp clear_screen_mem ; 801E 4C 14 87 L.. + +; ---------------------------------------------------------------------------- +; bonus -= 100; +decrement_time_bonus_jv: + jmp decrement_time_bonus ; 8021 4C CE 8D L.. + +; ---------------------------------------------------------------------------- +init_page_7_jv: + jmp init_page_7 ; 8024 4C 5C 9A L\. + +; ---------------------------------------------------------------------------- +L8027: jmp L9AAA ; 8027 4C AA 9A L.. + +; ---------------------------------------------------------------------------- +L802A: jmp LBA00 ; 802A 4C 00 BA L.. + +; ---------------------------------------------------------------------------- +level_finished_jv: + jmp level_finished ; 802D 4C 00 8E L.. + +; ---------------------------------------------------------------------------- +; just lost your last life +crumble_gameboard_jv: + jmp crumble_gameboard ; 8030 4C 00 8D L.. + +; ---------------------------------------------------------------------------- +L8033: jmp L87A0 ; 8033 4C A0 87 L.. + +; ---------------------------------------------------------------------------- +L8036: jmp L8B23 ; 8036 4C 23 8B L#. + +; ---------------------------------------------------------------------------- + jmp L8B2D ; 8039 4C 2D 8B L-. + +; ---------------------------------------------------------------------------- +L803C: jmp L8AE0 ; 803C 4C E0 8A L.. + +; ---------------------------------------------------------------------------- +; 3 unused jump vectors, all pointed to the same RTS +unused_vecs: + jmp unused_vec_rts ; 803F 4C 48 80 LH. + +; ---------------------------------------------------------------------------- + jmp unused_vec_rts ; 8042 4C 48 80 LH. + +; ---------------------------------------------------------------------------- + jmp unused_vec_rts ; 8045 4C 48 80 LH. + +; ---------------------------------------------------------------------------- +; unused jump vectors point here +unused_vec_rts: + rts ; 8048 60 ` + +; ---------------------------------------------------------------------------- +; the entry point for parsing the level map and drawing graphics from it. see level_maps.txt. caller must set $C0/$C1 to the address of the map data. modders beware: bogus map data can & will cause infinite loops. +draw_map: + ldy #$00 ; 8049 A0 00 .. +; $C0/$C1 points to $A300 (level00_desc) on the first call +dm_get_opcode: + lda (dm_progctr),y ; 804B B1 C0 .. +; map opcodes: $FC = jump, $FF = end, $FD = set drawing direction, $FE = select graphics object +dm_switch_opcode: + cmp #$FC ; 804D C9 FC .. + bcc dm_draw_gfx ; 804F 90 3F .? + beq dm_jump ; 8051 F0 09 .. + cmp #$FD ; 8053 C9 FD .. + beq dm_delta ; 8055 F0 14 .. + cmp #$FE ; 8057 C9 FE .. + beq dm_obj ; 8059 F0 28 .( +; handle gfx_end opcode +dm_fallthru: + rts ; 805B 60 ` + +; ---------------------------------------------------------------------------- +; handle gfx_jump opcode +dm_jump:iny ; 805C C8 . + lda (dm_progctr),y ; 805D B1 C0 .. + pha ; 805F 48 H + iny ; 8060 C8 . + lda (dm_progctr),y ; 8061 B1 C0 .. + sta dm_progctr+1 ; 8063 85 C1 .. + pla ; 8065 68 h + sta dm_progctr ; 8066 85 C0 .. + jmp draw_map ; 8068 4C 49 80 LI. + +; ---------------------------------------------------------------------------- +; handle gfx_delta opcode +dm_delta: + iny ; 806B C8 . + lda (dm_progctr),y ; 806C B1 C0 .. + sta dm_delta_x ; 806E 85 C9 .. + iny ; 8070 C8 . + lda (dm_progctr),y ; 8071 B1 C0 .. + sta dm_delta_y ; 8073 85 CA .. +; all the other opcode handlers jump here +dm_next_opcode: + lda dm_progctr ; 8075 A5 C0 .. + clc ; 8077 18 . + adc #$03 ; 8078 69 03 i. + sta dm_progctr ; 807A 85 C0 .. + bcc draw_map ; 807C 90 CB .. + inc dm_progctr+1 ; 807E E6 C1 .. + jmp draw_map ; 8080 4C 49 80 LI. + +; ---------------------------------------------------------------------------- +; handle gfx_object opcode +dm_obj: iny ; 8083 C8 . + lda (dm_progctr),y ; 8084 B1 C0 .. + sta dm_objptr ; 8086 85 C2 .. + iny ; 8088 C8 . + lda (dm_progctr),y ; 8089 B1 C0 .. + sta dm_objptr+1 ; 808B 85 C3 .. + jmp dm_next_opcode ; 808D 4C 75 80 Lu. + +; ---------------------------------------------------------------------------- +; handle gfx_draw opcode +dm_draw_gfx: + sta dm_xpos ; 8090 85 55 .U + iny ; 8092 C8 . + lda (dm_progctr),y ; 8093 B1 C0 .. + sta dm_ypos ; 8095 85 54 .T + iny ; 8097 C8 . + lda (dm_progctr),y ; 8098 B1 C0 .. + sta dm_length ; 809A 85 BF .. +; loop 'dm_length' times +dm_draw_loop: + jsr dm_draw_obj ; 809C 20 B4 80 .. + dec dm_length ; 809F C6 BF .. + beq dm_next_opcode ; 80A1 F0 D2 .. + lda dm_delta_x ; 80A3 A5 C9 .. + clc ; 80A5 18 . + adc dm_xpos ; 80A6 65 55 eU + sta dm_xpos ; 80A8 85 55 .U + lda dm_delta_y ; 80AA A5 CA .. + clc ; 80AC 18 . + adc dm_ypos ; 80AD 65 54 eT + sta dm_ypos ; 80AF 85 54 .T + jmp dm_draw_loop ; 80B1 4C 9C 80 L.. + +; ---------------------------------------------------------------------------- +; draw current object at current x/y position +dm_draw_obj: + ldy #$00 ; 80B4 A0 00 .. +; object definition ends with $FF +dm_draw_obj_loop: + lda (dm_objptr),y ; 80B6 B1 C2 .. + cmp #$FF ; 80B8 C9 FF .. + bne dm_obj_to_screen ; 80BA D0 01 .. + rts ; 80BC 60 ` + +; ---------------------------------------------------------------------------- +; actually write the object's pixels to screen memory. quite hairy. +dm_obj_to_screen: + sta dm_count ; 80BD 85 BE .. + iny ; 80BF C8 . + clc ; 80C0 18 . + lda (dm_objptr),y ; 80C1 B1 C2 .. + adc dm_xpos ; 80C3 65 55 eU + sta dm_x_with_offset ; 80C5 85 C6 .. + iny ; 80C7 C8 . + clc ; 80C8 18 . + lda (dm_objptr),y ; 80C9 B1 C2 .. + adc dm_ypos ; 80CB 65 54 eT + sta dm_y_with_offset ; 80CD 85 C7 .. + iny ; 80CF C8 . +; calculate 40 * dm_y_with_offset + dm_x_with_offset + screen mem address, store in dm_screen_addr +calc_screen_addr: + lda #$28 ; 80D0 A9 28 .( + sta $BD ; 80D2 85 BD .. + lda #$00 ; 80D4 A9 00 .. + sta dm_screen_addr ; 80D6 85 C4 .. + ldx #$08 ; 80D8 A2 08 .. +L80DA: lsr $BD ; 80DA 46 BD F. + bcc L80E1 ; 80DC 90 03 .. + clc ; 80DE 18 . + adc dm_y_with_offset ; 80DF 65 C7 e. +L80E1: ror a ; 80E1 6A j + ror dm_screen_addr ; 80E2 66 C4 f. + dex ; 80E4 CA . + bne L80DA ; 80E5 D0 F3 .. + clc ; 80E7 18 . + adc SAVMSC+1 ; 80E8 65 59 eY + sta dm_screen_addr+1 ; 80EA 85 C5 .. + lda dm_x_with_offset ; 80EC A5 C6 .. + lsr a ; 80EE 4A J + ror $C8 ; 80EF 66 C8 f. + lsr a ; 80F1 4A J + ror $C8 ; 80F2 66 C8 f. + clc ; 80F4 18 . + adc dm_screen_addr ; 80F5 65 C4 e. + sta dm_screen_addr ; 80F7 85 C4 .. + bcc L80FD ; 80F9 90 02 .. + inc dm_screen_addr+1 ; 80FB E6 C5 .. +L80FD: asl $C8 ; 80FD 06 C8 .. + rol a ; 80FF 2A * + asl $C8 ; 8100 06 C8 .. + rol a ; 8102 2A * + and #$03 ; 8103 29 03 ). + sta $C8 ; 8105 85 C8 .. +L8107: lda (dm_objptr),y ; 8107 B1 C2 .. + sta $BD ; 8109 85 BD .. + lda $C8 ; 810B A5 C8 .. + lsr $BD ; 810D 46 BD F. + rol a ; 810F 2A * + lsr $BD ; 8110 46 BD F. + rol a ; 8112 2A * + sta $BD ; 8113 85 BD .. + iny ; 8115 C8 . + tya ; 8116 98 . + pha ; 8117 48 H + ldy #$00 ; 8118 A0 00 .. + ldx $C8 ; 811A A6 C8 .. + lda (dm_screen_addr),y ; 811C B1 C4 .. + and gr7_and_masks,x ; 811E 3D 53 81 =S. + ldx $BD ; 8121 A6 BD .. + ora gr7_or_masks,x ; 8123 1D 43 81 .C. + sta (dm_screen_addr),y ; 8126 91 C4 .. + pla ; 8128 68 h + tay ; 8129 A8 . + inc $C8 ; 812A E6 C8 .. + lda $C8 ; 812C A5 C8 .. + cmp #$04 ; 812E C9 04 .. + bcc L813C ; 8130 90 0A .. + lda #$00 ; 8132 A9 00 .. + sta $C8 ; 8134 85 C8 .. + inc dm_screen_addr ; 8136 E6 C4 .. + bne L813C ; 8138 D0 02 .. + inc dm_screen_addr+1 ; 813A E6 C5 .. +L813C: dec dm_count ; 813C C6 BE .. + bne L8107 ; 813E D0 C7 .. + jmp dm_draw_obj_loop ; 8140 4C B6 80 L.. + +; ---------------------------------------------------------------------------- +gr7_or_masks: + .byte $00,$80,$40,$C0,$00,$20,$10,$30 ; 8143 00 80 40 C0 00 20 10 30 ..@.. .0 + .byte $00,$08,$04,$0C,$00,$02,$01,$03 ; 814B 00 08 04 0C 00 02 01 03 ........ +gr7_and_masks: + .byte $3F,$CF,$F3,$FC ; 8153 3F CF F3 FC ?... +; ---------------------------------------------------------------------------- +; we have 4 slots (because POKEY has 4 voices), X counts down by 2 from 10 to 2 (at 0, the loop exits) +sfx_player_entry: + ldx #$0A ; 8157 A2 0A .. + lda sfx_lock ; 8159 AD 2F 06 ./. + beq next_sfx_slot ; 815C F0 01 .. +sfx_exit: + rts ; 815E 60 ` + +; ---------------------------------------------------------------------------- +next_sfx_slot: + dex ; 815F CA . + dex ; 8160 CA . + beq sfx_exit ; 8161 F0 FB .. +; skip it, if slot is inactive +is_slot_active: + lda sfx_slot_tempo,x ; 8163 BD 3E 06 .>. + beq next_sfx_slot ; 8166 F0 F7 .. +L8168: lda sfx_slot_timer,x ; 8168 BD 3F 06 .?. + beq sfx_next_note ; 816B F0 10 .. + dec sfx_slot_timer,x ; 816D DE 3F 06 .?. + cmp sfx_slot_duration,x ; 8170 DD 46 06 .F. + bne next_sfx_slot ; 8173 D0 EA .. + lda #$00 ; 8175 A9 00 .. + sta AUDF1_minus_one,x ; 8177 9D FF D1 ... + jmp next_sfx_slot ; 817A 4C 5F 81 L_. + +; ---------------------------------------------------------------------------- +sfx_next_note: + lda sfx_slot_curpos,x ; 817D BD 4E 06 .N. + sta zp_temp1 ; 8180 85 CB .. + lda sfx_slot_curpos+1,x ; 8182 BD 4F 06 .O. + sta zp_temp1+1 ; 8185 85 CC .. + ldy #$00 ; 8187 A0 00 .. + lda (zp_temp1),y ; 8189 B1 CB .. + cmp #$04 ; 818B C9 04 .. + bcs sfx_play_note ; 818D B0 77 .w + cmp #$01 ; 818F C9 01 .. + beq sfx_change_tempo ; 8191 F0 1B .. + cmp #$02 ; 8193 C9 02 .. + beq sfx_jump ; 8195 F0 31 .1 + cmp #$03 ; 8197 C9 03 .. + beq sfx_play_rest ; 8199 F0 03 .. + jmp sfx_finished ; 819B 4C 26 82 L&. + +; ---------------------------------------------------------------------------- +; y==0 on entry +sfx_play_rest: + tya ; 819E 98 . + sta AUDF1_minus_one,x ; 819F 9D FF D1 ... + iny ; 81A2 C8 . + lda (zp_temp1),y ; 81A3 B1 CB .. + sta sfx_slot_timer,x ; 81A5 9D 3F 06 .?. + jsr inc_sfx_pos ; 81A8 20 31 82 1. + jmp L8168 ; 81AB 4C 68 81 Lh. + +; ---------------------------------------------------------------------------- +; y==0 on entry +sfx_change_tempo: + iny ; 81AE C8 . + lda (zp_temp1),y ; 81AF B1 CB .. + sta sfx_slot_freq,x ; 81B1 9D 47 06 .G. + iny ; 81B4 C8 . + lda (zp_temp1),y ; 81B5 B1 CB .. + sta sfx_slot_duration,x ; 81B7 9D 46 06 .F. + jsr inc_sfx_pos ; 81BA 20 31 82 1. + inc sfx_slot_curpos,x ; 81BD FE 4E 06 .N. + bne L8168 ; 81C0 D0 A6 .. + inc sfx_slot_curpos+1,x ; 81C2 FE 4F 06 .O. + jmp L8168 ; 81C5 4C 68 81 Lh. + +; ---------------------------------------------------------------------------- +; I *think* this jumps to a different sfx address... +sfx_jump: + iny ; 81C8 C8 . + lda (zp_temp1),y ; 81C9 B1 CB .. + sta sfx_slot_curpos,x ; 81CB 9D 4E 06 .N. + iny ; 81CE C8 . + lda (zp_temp1),y ; 81CF B1 CB .. + sta sfx_slot_curpos+1,x ; 81D1 9D 4F 06 .O. + iny ; 81D4 C8 . + lda $065E,x ; 81D5 BD 5E 06 .^. + beq L81EE ; 81D8 F0 14 .. + dec $065E,x ; 81DA DE 5E 06 .^. + bne sfx_next_note ; 81DD D0 9E .. + lda $0656,x ; 81DF BD 56 06 .V. + sta sfx_slot_curpos,x ; 81E2 9D 4E 06 .N. + lda $0657,x ; 81E5 BD 57 06 .W. + sta sfx_slot_curpos+1,x ; 81E8 9D 4F 06 .O. + jmp sfx_next_note ; 81EB 4C 7D 81 L}. + +; ---------------------------------------------------------------------------- +L81EE: nop ; 81EE EA . + lda (zp_temp1),y ; 81EF B1 CB .. + sta $065E,x ; 81F1 9D 5E 06 .^. + lda zp_temp1 ; 81F4 A5 CB .. + clc ; 81F6 18 . + adc #$04 ; 81F7 69 04 i. + sta $0656,x ; 81F9 9D 56 06 .V. + lda zp_temp1+1 ; 81FC A5 CC .. + adc #$00 ; 81FE 69 00 i. + sta $0657,x ; 8200 9D 57 06 .W. + jmp sfx_next_note ; 8203 4C 7D 81 L}. + +; ---------------------------------------------------------------------------- +; y==0, a>=4 on entry +sfx_play_note: + sta AUDF1_minus_two,x ; 8206 9D FE D1 ... + iny ; 8209 C8 . + lda (zp_temp1),y ; 820A B1 CB .. + sta sfx_slot_timer,x ; 820C 9D 3F 06 .?. + lda sfx_slot_freq,x ; 820F BD 47 06 .G. + sta AUDF1_minus_one,x ; 8212 9D FF D1 ... + clc ; 8215 18 . + lda sfx_slot_curpos,x ; 8216 BD 4E 06 .N. + adc #$02 ; 8219 69 02 i. + sta sfx_slot_curpos,x ; 821B 9D 4E 06 .N. + bcc L8223 ; 821E 90 03 .. + inc sfx_slot_curpos+1,x ; 8220 FE 4F 06 .O. +L8223: jmp L8168 ; 8223 4C 68 81 Lh. + +; ---------------------------------------------------------------------------- +; done playing this sfx, free up the slot, X-indexed +sfx_finished: + lda #$00 ; 8226 A9 00 .. + sta sfx_slot_tempo,x ; 8228 9D 3E 06 .>. + sta AUDF1_minus_one,x ; 822B 9D FF D1 ... + jmp next_sfx_slot ; 822E 4C 5F 81 L_. + +; ---------------------------------------------------------------------------- +; point to next byte in current sfx slot indexed by X +inc_sfx_pos: + clc ; 8231 18 . + lda sfx_slot_curpos,x ; 8232 BD 4E 06 .N. + adc #$02 ; 8235 69 02 i. + sta sfx_slot_curpos,x ; 8237 9D 4E 06 .N. + bcc inc_done ; 823A 90 03 .. + inc sfx_slot_curpos+1,x ; 823C FE 4F 06 .O. +inc_done: + rts ; 823F 60 ` + +; ---------------------------------------------------------------------------- +; if cue_sfx not already in progress, setup to play sfx at (sfx_slot_tempo, sfx_lock) tempo (?) A +cue_sfx_lowprior: + pha ; 8240 48 H + lda sfx_ptr+1 ; 8241 AD 3D 06 .=. +cue_ok: beq L8248 ; 8244 F0 02 .. + pla ; 8246 68 h + rts ; 8247 60 ` + +; ---------------------------------------------------------------------------- +L8248: lda sfx_slot_tempo ; 8248 AD 3E 06 .>. + sta sfx_ptr ; 824B 8D 3C 06 .<. + lda sfx_slot_timer ; 824E AD 3F 06 .?. + sta sfx_ptr+1 ; 8251 8D 3D 06 .=. + pla ; 8254 68 h +; setup to play sfx at *sfx_ptr, tempo (?) A +cue_sfx:sta sfx_tempo_tmp ; 8255 8D 61 06 .a. + inc sfx_lock ; 8258 EE 2F 06 ./. + ldx #$0A ; 825B A2 0A .. +L825D: dex ; 825D CA . + dex ; 825E CA . + beq L8281 ; 825F F0 20 . + lda sfx_slot_tempo,x ; 8261 BD 3E 06 .>. + bne L825D ; 8264 D0 F7 .. +L8266: lda sfx_ptr ; 8266 AD 3C 06 .<. + sta sfx_slot_curpos,x ; 8269 9D 4E 06 .N. + lda sfx_ptr+1 ; 826C AD 3D 06 .=. + sta sfx_slot_curpos+1,x ; 826F 9D 4F 06 .O. + lda sfx_tempo_tmp ; 8272 AD 61 06 .a. + sta sfx_slot_tempo,x ; 8275 9D 3E 06 .>. +cue_done: + lda #$00 ; 8278 A9 00 .. + sta sfx_ptr+1 ; 827A 8D 3D 06 .=. + dec sfx_lock ; 827D CE 2F 06 ./. + rts ; 8280 60 ` + +; ---------------------------------------------------------------------------- +L8281: ldx #$0A ; 8281 A2 0A .. +L8283: dex ; 8283 CA . + dex ; 8284 CA . + beq cue_done ; 8285 F0 F1 .. + lda sfx_slot_tempo,x ; 8287 BD 3E 06 .>. + cmp sfx_tempo_tmp ; 828A CD 61 06 .a. + bcc L8266 ; 828D 90 D7 .. + jmp L8283 ; 828F 4C 83 82 L.. + +; ---------------------------------------------------------------------------- + .byte $82 ; 8292 82 . +position_missiles: + ldx #$05 ; 8293 A2 05 .. +L8295: dex ; 8295 CA . + beq missiles_done ; 8296 F0 45 .E + lda $069A,x ; 8298 BD 9A 06 ... + cmp $06A2,x ; 829B DD A2 06 ... + beq L82A6 ; 829E F0 06 .. + sta $06A2,x ; 82A0 9D A2 06 ... + sta HPOSP3,x ; 82A3 9D 03 D0 ... +L82A6: lda $06A6,x ; 82A6 BD A6 06 ... + cmp $069E,x ; 82A9 DD 9E 06 ... + beq L8295 ; 82AC F0 E7 .. + tay ; 82AE A8 . + lda $2B00,y ; 82AF B9 00 2B ..+ + and missiles_mask_table_minus_one,x ; 82B2 3D DF 82 =.. + sta $2B00,y ; 82B5 99 00 2B ..+ + lda $2B01,y ; 82B8 B9 01 2B ..+ + and missiles_mask_table_minus_one,x ; 82BB 3D DF 82 =.. + sta $2B01,y ; 82BE 99 01 2B ..+ + lda $069E,x ; 82C1 BD 9E 06 ... + sta $06A6,x ; 82C4 9D A6 06 ... + tay ; 82C7 A8 . + lda $2B00,y ; 82C8 B9 00 2B ..+ + ora L82E3,x ; 82CB 1D E3 82 ... + sta $2B00,y ; 82CE 99 00 2B ..+ + lda $2B01,y ; 82D1 B9 01 2B ..+ + ora L82E3,x ; 82D4 1D E3 82 ... + sta $2B01,y ; 82D7 99 01 2B ..+ + jmp L8295 ; 82DA 4C 95 82 L.. + +; ---------------------------------------------------------------------------- +missiles_done: +missiles_mask_table_minus_one:= * + 2 + jmp position_players ; 82DD 4C E9 82 L.. + +; ---------------------------------------------------------------------------- +missiles_mask_table: + .byte $FC,$F3,$CF ; 82E0 FC F3 CF ... +L82E3: .byte $3F,$03,$0C,$30,$C0 ; 82E3 3F 03 0C 30 C0 ?..0. +; ---------------------------------------------------------------------------- +position_done: + rts ; 82E8 60 ` + +; ---------------------------------------------------------------------------- +; X counts down 5..1 (starts at 6, immediately decremented, and loop is done with 0). zp_temp1 is ZP pointer to the current player or missile being written to ($2f00..$2b00, or p3/p2/p1/p0/missiles). +position_players: + lda #$00 ; 82E9 A9 00 .. + sta zp_temp1 ; 82EB 85 CB .. + lda #$30 ; 82ED A9 30 .0 + sta zp_temp1+1 ; 82EF 85 CC .. + ldx #$06 ; 82F1 A2 06 .. +L82F3: dec zp_temp1+1 ; 82F3 C6 CC .. + dex ; 82F5 CA . + beq position_done ; 82F6 F0 F0 .. + lda $0668,x ; 82F8 BD 68 06 .h. + beq L82F3 ; 82FB F0 F6 .. + lda $067C,x ; 82FD BD 7C 06 .|. + cmp $068B,x ; 8300 DD 8B 06 ... + beq position_pm_vert ; 8303 F0 1D .. + sta $068B,x ; 8305 9D 8B 06 ... + sta HPOSP0_minus_two,x ; 8308 9D FE CF ... + cpx #$01 ; 830B E0 01 .. + bne position_pm_vert ; 830D D0 13 .. + tay ; 830F A8 . +; position the 4 missiles side-by-side +position_player_5: + sty HPOSM3 ; 8310 8C 07 D0 ... + iny ; 8313 C8 . + iny ; 8314 C8 . + sty HPOSM2 ; 8315 8C 06 D0 ... + iny ; 8318 C8 . + iny ; 8319 C8 . + sty HPOSM1 ; 831A 8C 05 D0 ... + iny ; 831D C8 . + iny ; 831E C8 . + sty HPOSM0 ; 831F 8C 04 D0 ... +position_pm_vert: + lda $0690,x ; 8322 BD 90 06 ... + cmp $0681,x ; 8325 DD 81 06 ... + bne L8338 ; 8328 D0 0E .. + lda $0686,x ; 832A BD 86 06 ... + cmp $0695,x ; 832D DD 95 06 ... + beq L82F3 ; 8330 F0 C1 .. + sta $0695,x ; 8332 9D 95 06 ... + lda $0690,x ; 8335 BD 90 06 ... +L8338: sta zp_temp1 ; 8338 85 CB .. + lda $0677,x ; 833A BD 77 06 .w. + sta $CF ; 833D 85 CF .. + lda #$00 ; 833F A9 00 .. + tay ; 8341 A8 . +; write zeroes to unused portion of this player/missile +clear_pm: + sta (zp_temp1),y ; 8342 91 CB .. + iny ; 8344 C8 . + cpy $CF ; 8345 C4 CF .. + bne clear_pm ; 8347 D0 F9 .. + lda $0681,x ; 8349 BD 81 06 ... + sta $0690,x ; 834C 9D 90 06 ... + sta zp_temp1 ; 834F 85 CB .. + lda $066D,x ; 8351 BD 6D 06 .m. + sta $CD ; 8354 85 CD .. + lda $0672,x ; 8356 BD 72 06 .r. + sta $CE ; 8359 85 CE .. + ldy $0686,x ; 835B BC 86 06 ... + clc ; 835E 18 . +L835F: dey ; 835F 88 . + beq L8370 ; 8360 F0 0E .. + lda $CF ; 8362 A5 CF .. + adc $CD ; 8364 65 CD e. + sta $CD ; 8366 85 CD .. + bcc L835F ; 8368 90 F5 .. + inc $CE ; 836A E6 CE .. + clc ; 836C 18 . + jmp L835F ; 836D 4C 5F 83 L_. + +; ---------------------------------------------------------------------------- +L8370: lda ($CD),y ; 8370 B1 CD .. + sta (zp_temp1),y ; 8372 91 CB .. + iny ; 8374 C8 . + dec $CF ; 8375 C6 CF .. + bne L8370 ; 8377 D0 F7 .. + jmp L82F3 ; 8379 4C F3 82 L.. + +; ---------------------------------------------------------------------------- +init_hardware: + ldx #$18 ; 837C A2 18 .. +; movement_direction_table+31 should read data_table_85de-1, da65 isn't perfect yet +init_page6_loop: + lda movement_direction_table+31,x ; 837E BD DD 85 ... + sta $05FF,x ; 8381 9D FF 05 ... + dex ; 8384 CA . + bne init_page6_loop ; 8385 D0 F7 .. + stx AUDCTL ; 8387 8E 08 D2 ... + lda #$28 ; 838A A9 28 .( + sta PMBASE ; 838C 8D 07 D4 ... +; std playfield, enable players + missiles, single-line p/m res, DMA enabled +set_dma_ctl: + lda #$3E ; 838F A9 3E .> + sta SDMCTL ; 8391 8D 2F 02 ./. + sta DMACTL ; 8394 8D 00 D4 ... + lda #$11 ; 8397 A9 11 .. +; priority $11: pl0-3, pf0-3, bak (and enable 5th player from the missiles) +init_set_prior: + sta GPRIOR ; 8399 8D 6F 02 .o. + sta PRIOR ; 839C 8D 1B D0 ... + lda #$03 ; 839F A9 03 .. + sta SKCTL ; 83A1 8D 0F D2 ... + sta GRACTL ; 83A4 8D 1D D0 ... + lda #$09 ; 83A7 A9 09 .. + sta player_speed ; 83A9 8D 24 06 .$. + lda #$4C ; 83AC A9 4C .L + sta L06E0 ; 83AE 8D E0 06 ... + lda #$20 ; 83B1 A9 20 . + sta L06E3 ; 83B3 8D E3 06 ... +; store an RTS at $06E6, which will get JSR'ed to by unused level subroutines +store_rts: + lda #$60 ; 83B6 A9 60 .` + sta L06E6 ; 83B8 8D E6 06 ... +; use character set at $9e00 aka charset +set_char_base: + lda #$9E ; 83BB A9 9E .. + sta CHBAS ; 83BD 8D F4 02 ... + sta CHBASE ; 83C0 8D 09 D4 ... + lda #$9D ; 83C3 A9 9D .. + sta $0674 ; 83C5 8D 74 06 .t. + sta $0675 ; 83C8 8D 75 06 .u. + lda #$E8 ; 83CB A9 E8 .. + sta $0670 ; 83CD 8D 70 06 .p. + sta $066A ; 83D0 8D 6A 06 .j. + sta $066B ; 83D3 8D 6B 06 .k. + lda #$0A ; 83D6 A9 0A .. + sta $0679 ; 83D8 8D 79 06 .y. + inc $067A ; 83DB EE 7A 06 .z. + lda #$00 ; 83DE A9 00 .. + sta VKEYBD ; 83E0 8D 08 02 ... + sta SAVMSC ; 83E3 85 58 .X + sta $D5 ; 83E5 85 D5 .. + lda #$30 ; 83E7 A9 30 .0 +; tell OS that screen memory starts at $3000 +set_savmsc: + sta SAVMSC+1 ; 83E9 85 59 .Y + lda #$9C ; 83EB A9 9C .. +; VKEYBD now points to $9c00 aka keyboard_isr +set_vkeybd: + sta VKEYBD_hi ; 83ED 8D 09 02 ... + ldx #$07 ; 83F0 A2 07 .. +L83F2: lda L8405,x ; 83F2 BD 05 84 ... + sta $06D8,x ; 83F5 9D D8 06 ... + dex ; 83F8 CA . + bne L83F2 ; 83F9 D0 F7 .. + ldy #$0D ; 83FB A0 0D .. + ldx #$84 ; 83FD A2 84 .. + lda #$06 ; 83FF A9 06 .. +; VVBLKI now points to $840d aka vblank_imm_isr +set_vvblki: + jsr SETVBV ; 8401 20 5C E4 \. + cld ; 8404 D8 . +L8405: rts ; 8405 60 ` + +; ---------------------------------------------------------------------------- +data_8406: + .byte $FE,$49,$9C,$00,$00,$01,$FF ; 8406 FE 49 9C 00 00 01 FF .I..... +; ---------------------------------------------------------------------------- +; service immediate vblank interrupt +vblank_imm_isr: + ldx #$09 ; 840D A2 09 .. +; update color regs from shadow regs (X ranges 1 to 9, GRAFM+1 is COLPM0, $2bf+1 is PCOLR0) +update_color_regs: + lda $02BF,x ; 840F BD BF 02 ... + sta GRAFM,x ; 8412 9D 11 D0 ... + dex ; 8415 CA . + bne update_color_regs ; 8416 D0 F7 .. + inc $0619 ; 8418 EE 19 06 ... + bne L841F ; 841B D0 02 .. + inc $A2 ; 841D E6 A2 .. +L841F: inc jiffy_timer_1 ; 841F EE 1A 06 ... + inc jiffy_timer_2 ; 8422 EE 1B 06 ... + inc $061C ; 8425 EE 1C 06 ... + lda $061C ; 8428 AD 1C 06 ... + and #$01 ; 842B 29 01 ). + sta $061C ; 842D 8D 1C 06 ... + lda #$00 ; 8430 A9 00 .. + sta $0621 ; 8432 8D 21 06 .!. + sta $0622 ; 8435 8D 22 06 .". + sta $06FD ; 8438 8D FD 06 ... + inc $061D ; 843B EE 1D 06 ... + inc speed_jiffy_timer ; 843E EE 1E 06 ... + lda player_speed ; 8441 AD 24 06 .$. + cmp #$09 ; 8444 C9 09 .. + bcs L847E ; 8446 B0 36 .6 + lda $061D ; 8448 AD 1D 06 ... + cmp player_speed ; 844B CD 24 06 .$. + bcc L846E ; 844E 90 1E .. + lda #$00 ; 8450 A9 00 .. + sta $061D ; 8452 8D 1D 06 ... + inc $0621 ; 8455 EE 21 06 .!. + inc $061F ; 8458 EE 1F 06 ... + inc $0620 ; 845B EE 20 06 . . + lda $061F ; 845E AD 1F 06 ... + and #$01 ; 8461 29 01 ). + sta $061F ; 8463 8D 1F 06 ... + lda $0620 ; 8466 AD 20 06 . . + and #$03 ; 8469 29 03 ). + sta $0620 ; 846B 8D 20 06 . . +L846E: lda speed_jiffy_timer ; 846E AD 1E 06 ... + cmp initial_speed ; 8471 CD 25 06 .%. + bcc L847E ; 8474 90 08 .. + lda #$00 ; 8476 A9 00 .. + sta speed_jiffy_timer ; 8478 8D 1E 06 ... + inc $0622 ; 847B EE 22 06 .". +L847E: lda playing_level ; 847E AD 27 06 .'. + beq no_dec_bonus ; 8481 F0 08 .. + inc bonus_jiffy_timer ; 8483 EE 26 06 .&. + bne no_dec_bonus ; 8486 D0 03 .. + jsr decrement_time_bonus_jv ; 8488 20 21 80 !. +no_dec_bonus: + lda $0619 ; 848B AD 19 06 ... + and #$07 ; 848E 29 07 ). + bne check_joystick_enabled ; 8490 D0 12 .. + inc $0628 ; 8492 EE 28 06 .(. + lda $0628 ; 8495 AD 28 06 .(. + and #$07 ; 8498 29 07 ). + sta $0628 ; 849A 8D 28 06 .(. + tax ; 849D AA . + lda data_table_85b6,x ; 849E BD B6 85 ... + sta $062A ; 84A1 8D 2A 06 .*. +; read the joystick if not disabled +check_joystick_enabled: + lda joystick_disabled ; 84A4 AD 32 06 .2. + beq read_joystick ; 84A7 F0 03 .. + jmp store_joystick_state ; 84A9 4C B1 84 L.. + +; ---------------------------------------------------------------------------- +; always joystick #1 (all players use the same joystick and pass it around) +read_joystick: + lda PORTA ; 84AC AD 00 D3 ... + and #$0F ; 84AF 29 0F ). +; store bottom 4 bits of PORTA, or 0 if joystick_disabled +store_joystick_state: + sta joystick_state ; 84B1 8D 33 06 .3. + asl a ; 84B4 0A . + tax ; 84B5 AA . + lda movement_direction_table,x ; 84B6 BD BE 85 ... + sta player_delta_x ; 84B9 8D 30 06 .0. + lda movement_direction_table+1,x ; 84BC BD BF 85 ... + sta player_delta_y ; 84BF 8D 31 06 .1. + lda trigger_disabled ; 84C2 AD 34 06 .4. + beq read_trigger ; 84C5 F0 0C .. + cmp #$01 ; 84C7 C9 01 .. + beq fake_read_trigger ; 84C9 F0 02 .. + lda #$00 ; 84CB A9 00 .. +; ?? +fake_read_trigger: + sta trigger_state ; 84CD 8D 35 06 .5. + jmp L84D9 ; 84D0 4C D9 84 L.. + +; ---------------------------------------------------------------------------- +; always joystick #1 +read_trigger: + lda TRIG0 ; 84D3 AD 10 D0 ... + sta trigger_state ; 84D6 8D 35 06 .5. +L84D9: ldx #$08 ; 84D9 A2 08 .. +L84DB: lda work_level_desc+1,x ; 84DB BD 81 07 ... + beq L84EE ; 84DE F0 0E .. + sta $0603,x ; 84E0 9D 03 06 ... + lda work_level_desc,x ; 84E3 BD 80 07 ... + sta $0602,x ; 84E6 9D 02 06 ... + lda #$00 ; 84E9 A9 00 .. + sta work_level_desc+1,x ; 84EB 9D 81 07 ... +L84EE: dex ; 84EE CA . + dex ; 84EF CA . + bne L84DB ; 84F0 D0 E9 .. + lda $0640 ; 84F2 AD 40 06 .@. + ora $0642 ; 84F5 0D 42 06 .B. + ora $0644 ; 84F8 0D 44 06 .D. + ora sfx_slot_duration ; 84FB 0D 46 06 .F. + sta $0663 ; 84FE 8D 63 06 .c. + ldx #$10 ; 8501 A2 10 .. +; save contents of GTIA collision regs (X ranges 1 to $10, dli_vec_shadow_hi should read collision_save-1) +save_collisions: + lda $CFFF,x ; 8503 BD FF CF ... + sta dli_vec_shadow_hi,x ; 8506 9D AF 06 ... + dex ; 8509 CA . + bne save_collisions ; 850A D0 F7 .. + inx ; 850C E8 . +clear_collisions: + stx HITCLR ; 850D 8E 1E D0 ... +; update display list, if there's a new one in the shadow reg +update_dlist: + lda dlist_shadow_hi ; 8510 AD AD 06 ... + beq update_dli_vector ; 8513 F0 0E .. + sta DLISTH ; 8515 8D 03 D4 ... + lda dlist_shadow_lo ; 8518 AD AC 06 ... + sta DLISTL ; 851B 8D 02 D4 ... +; clear the shadow now that we've updated the HW +clear_dlist_shadow: + lda #$00 ; 851E A9 00 .. + sta dlist_shadow_hi ; 8520 8D AD 06 ... +; update DLI vector, if there's a new one in the shadow reg +update_dli_vector: + lda dli_vec_shadow_hi ; 8523 AD AF 06 ... + beq L853B ; 8526 F0 13 .. + sta VDSLST+1 ; 8528 8D 01 02 ... + lda dli_vec_shadow_lo ; 852B AD AE 06 ... + sta VDSLST ; 852E 8D 00 02 ... +; clear the shadow now that we've updated the HW +clear_dli_shadow: + lda #$00 ; 8531 A9 00 .. + sta dli_vec_shadow_hi ; 8533 8D AF 06 ... +; enable DLI now that we've set up the vector +enable_dli: + lda #$C0 ; 8536 A9 C0 .. + sta NMIEN ; 8538 8D 0E D4 ... +L853B: lda $06FC ; 853B AD FC 06 ... + cmp $0888 ; 853E CD 88 08 ... + bcc L8551 ; 8541 90 0E .. + inc $06FD ; 8543 EE FD 06 ... + inc $06FB ; 8546 EE FB 06 ... + lda #$00 ; 8549 A9 00 .. + sta $06FC ; 854B 8D FC 06 ... + jmp enable_keyboard_irq ; 854E 4C 54 85 LT. + +; ---------------------------------------------------------------------------- +L8551: inc $06FC ; 8551 EE FC 06 ... +; $C0 = regular keypress, break keypress +enable_keyboard_irq: + lda #$C0 ; 8554 A9 C0 .. + sta IRQEN ; 8556 8D 0E D2 ... + cli ; 8559 58 X +; 8 = silent (0 would be a click) +silence_console_speaker: + lda #$08 ; 855A A9 08 .. + sta CONSOL ; 855C 8D 1F D0 ... + ldx #$FF ; 855F A2 FF .. +; carry set = not pressed, clear = pressed +check_start_key: + lda CONSOL ; 8561 AD 1F D0 ... + sta zp_temp1 ; 8564 85 CB .. + lsr zp_temp1 ; 8566 46 CB F. + bcs check_select_key ; 8568 B0 09 .. + lda start_key_enabled ; 856A AD C8 06 ... + beq check_select_key ; 856D F0 04 .. + txs ; 856F 9A . + jmp (start_key_vec) ; 8570 6C C4 06 l.. + +; ---------------------------------------------------------------------------- +; carry set = not pressed, clear = pressed +check_select_key: + lsr zp_temp1 ; 8573 46 CB F. + bcs check_option_key ; 8575 B0 09 .. + lda select_key_enabled ; 8577 AD C7 06 ... + beq check_option_key ; 857A F0 04 .. + txs ; 857C 9A . + jmp (select_key_vec) ; 857D 6C C2 06 l.. + +; ---------------------------------------------------------------------------- +; carry set = not pressed, clear = pressed +check_option_key: + lsr zp_temp1 ; 8580 46 CB F. + bcs L858D ; 8582 B0 09 .. + lda option_key_enabled ; 8584 AD C6 06 ... + beq L858D ; 8587 F0 04 .. + txs ; 8589 9A . + jmp (option_key_vec) ; 858A 6C C0 06 l.. + +; ---------------------------------------------------------------------------- +L858D: ldx $0618 ; 858D AE 18 06 ... + cpx #$18 ; 8590 E0 18 .. + bne L859C ; 8592 D0 08 .. + lda #$00 ; 8594 A9 00 .. + sta $0618 ; 8596 8D 18 06 ... + jmp XITVBV ; 8599 4C 62 E4 Lb. + +; ---------------------------------------------------------------------------- +L859C: inc $0618 ; 859C EE 18 06 ... + inc $0618 ; 859F EE 18 06 ... + lda $0601,x ; 85A2 BD 01 06 ... + beq L858D ; 85A5 F0 E6 .. + sta $06E5 ; 85A7 8D E5 06 ... + lda $0600,x ; 85AA BD 00 06 ... + sta $06E4 ; 85AD 8D E4 06 ... + jsr L06E3 ; 85B0 20 E3 06 .. + jmp L858D ; 85B3 4C 8D 85 L.. + +; ---------------------------------------------------------------------------- +; used in vblank_imm_isr, not sure for what yet +data_table_85b6: + .byte $1A,$96,$28,$66,$C6,$56,$0E,$F6 ; 85B6 1A 96 28 66 C6 56 0E F6 ..(f.V.. +; ---------------------------------------------------------------------------- +; X/Y movement, indexed by joystick_state << 1, each entry is XXYY, $FF is -1 +movement_direction_table: + .word $0000,$0000,$0000,$0000 ; 85BE 00 00 00 00 00 00 00 00 ........ + .word $0000,$0101,$FF01,$0001 ; 85C6 00 00 01 01 01 FF 01 00 ........ + .word $0000,$01FF,$FFFF,$00FF ; 85CE 00 00 FF 01 FF FF FF 00 ........ + .word $0000,$0100,$FF00,$0000 ; 85D6 00 00 00 01 00 FF 00 00 ........ +; ---------------------------------------------------------------------------- +; dunno what this is for yet, but it's copied into page 6 by init_hardware +data_table_85de: + .byte $C8,$88,$05,$84,$05,$84,$05,$84 ; 85DE C8 88 05 84 05 84 05 84 ........ + .byte $05,$84,$05,$84,$05,$84,$00,$98 ; 85E6 05 84 05 84 05 84 00 98 ........ + .byte $93,$82,$69,$8E,$00,$89,$57,$81 ; 85EE 93 82 69 8E 00 89 57 81 ..i...W. +; probably just filler +zero_filler_85f6: + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 85F6 00 00 00 00 00 00 00 00 ........ + .byte $00,$00 ; 85FE 00 00 .. +; ---------------------------------------------------------------------------- +; gets called after the level is drawn & the intro music stops, and also during the level (?) +xxx_level_something: + ldx #$00 ; 8600 A2 00 .. + ldy #$00 ; 8602 A0 00 .. + stx $0665 ; 8604 8E 65 06 .e. +L8607: lda #$10 ; 8607 A9 10 .. + clc ; 8609 18 . + adc $D5 ; 860A 65 D5 e. + sta ($D3),y ; 860C 91 D3 .. +L860E: sec ; 860E 38 8 + lda $D0 ; 860F A5 D0 .. + sbc L8702,x ; 8611 FD 02 87 ... + sta $D0 ; 8614 85 D0 .. + lda $D1 ; 8616 A5 D1 .. + sbc L8703,x ; 8618 FD 03 87 ... + sta $D1 ; 861B 85 D1 .. + lda $D2 ; 861D A5 D2 .. + sbc L8704,x ; 861F FD 04 87 ... + sta $D2 ; 8622 85 D2 .. + bcc L8633 ; 8624 90 0D .. + lda ($D3),y ; 8626 B1 D3 .. + clc ; 8628 18 . + adc #$01 ; 8629 69 01 i. + sta ($D3),y ; 862B 91 D3 .. + sta $0665 ; 862D 8D 65 06 .e. + jmp L860E ; 8630 4C 0E 86 L.. + +; ---------------------------------------------------------------------------- +L8633: clc ; 8633 18 . + lda L8702,x ; 8634 BD 02 87 ... + adc $D0 ; 8637 65 D0 e. + sta $D0 ; 8639 85 D0 .. + lda L8703,x ; 863B BD 03 87 ... + adc $D1 ; 863E 65 D1 e. + sta $D1 ; 8640 85 D1 .. + lda L8704,x ; 8642 BD 04 87 ... + adc $D2 ; 8645 65 D2 e. + sta $D2 ; 8647 85 D2 .. + lda $0665 ; 8649 AD 65 06 .e. + bne L865C ; 864C D0 0E .. + lda ($D3),y ; 864E B1 D3 .. + and #$0F ; 8650 29 0F ). + bne L865C ; 8652 D0 08 .. + cpy #$05 ; 8654 C0 05 .. + beq L8667 ; 8656 F0 0F .. + lda #$00 ; 8658 A9 00 .. + sta ($D3),y ; 865A 91 D3 .. +L865C: cpx #$0F ; 865C E0 0F .. + beq L8667 ; 865E F0 07 .. + inx ; 8660 E8 . + inx ; 8661 E8 . + inx ; 8662 E8 . + iny ; 8663 C8 . + jmp L8607 ; 8664 4C 07 86 L.. + +; ---------------------------------------------------------------------------- +L8667: rts ; 8667 60 ` + +; ---------------------------------------------------------------------------- +L8668: lda #$F5 ; 8668 A9 F5 .. + sta $D3 ; 866A 85 D3 .. + lda #$3D ; 866C A9 3D .= + sta $D4 ; 866E 85 D4 .. + ldx #$03 ; 8670 A2 03 .. +L8672: lda $06FF,x ; 8672 BD FF 06 ... + sta $CF,x ; 8675 95 CF .. + dex ; 8677 CA . + bne L8672 ; 8678 D0 F8 .. + jsr xxx_level_something ; 867A 20 00 86 .. + rts ; 867D 60 ` + +; ---------------------------------------------------------------------------- +L867E: lda #$09 ; 867E A9 09 .. + sta $D3 ; 8680 85 D3 .. + lda #$3E ; 8682 A9 3E .> + sta $D4 ; 8684 85 D4 .. + ldx #$03 ; 8686 A2 03 .. +L8688: lda work_level_points_per_bomb,x ; 8688 BD 90 07 ... + sta $CF,x ; 868B 95 CF .. + dex ; 868D CA . + bne L8688 ; 868E D0 F8 .. + jsr xxx_level_something ; 8690 20 00 86 .. + rts ; 8693 60 ` + +; ---------------------------------------------------------------------------- +; bottom 2 GR.1 lines on the game board +update_status_window: + lda #$00 ; 8694 A9 00 .. + sta HSCROL ; 8696 8D 04 D4 ... + ldx #$28 ; 8699 A2 28 .( +L869B: lda L86D9,x ; 869B BD D9 86 ... + sec ; 869E 38 8 + sbc #$20 ; 869F E9 20 . + sta $3DE7,x ; 86A1 9D E7 3D ..= + dex ; 86A4 CA . + bne L869B ; 86A5 D0 F4 .. +; 1 to 4 +show_current_player: + lda current_player ; 86A7 AD FE 06 ... + ora #$10 ; 86AA 09 10 .. + sta $3DE9 ; 86AC 8D E9 3D ..= + lda work_level_desc ; 86AF AD 80 07 ... + sta $3DED ; 86B2 8D ED 3D ..= + lda work_level_desc+1 ; 86B5 AD 81 07 ... + sta $3DEE ; 86B8 8D EE 3D ..= +; up to 6 jumpmen, and a + if lives > 6. char $C1 = jumpman icon, $CB = plus sign +show_lives_icons: + ldy #$00 ; 86BB A0 00 .. + lda #$C1 ; 86BD A9 C1 .. +L86BF: cpy #$07 ; 86BF C0 07 .. + bcs L86CE ; 86C1 B0 0B .. + cpy lives ; 86C3 CC 0A 07 ... + beq L86D3 ; 86C6 F0 0B .. + sta $3DFD,y ; 86C8 99 FD 3D ..= + iny ; 86CB C8 . + bne L86BF ; 86CC D0 F1 .. +L86CE: lda #$CB ; 86CE A9 CB .. + sta $3DFC,y ; 86D0 99 FC 3D ..= +L86D3: jsr L8668 ; 86D3 20 68 86 h. + jsr L867E ; 86D6 20 7E 86 ~. +L86D9: rts ; 86D9 60 ` + +; ---------------------------------------------------------------------------- +data_table_86da: + .byte $20,$30,$20,$8C,$7D,$30,$30,$20 ; 86DA 20 30 20 8C 7D 30 30 20 0 .}00 + .byte $D3,$C3,$CF,$D2,$C5,$20,$20,$20 ; 86E2 D3 C3 CF D2 C5 20 20 20 ..... + .byte $20,$20,$20,$20,$20,$20,$20,$20 ; 86EA 20 20 20 20 20 20 20 20 + .byte $20,$20,$20,$20,$C2,$CF,$CE,$D5 ; 86F2 20 20 20 20 C2 CF CE D5 .... + .byte $D3,$20,$20,$20,$20,$20,$20,$20 ; 86FA D3 20 20 20 20 20 20 20 . +L8702: .byte $A0 ; 8702 A0 . +L8703: .byte $86 ; 8703 86 . +L8704: .byte $01,$10,$27,$00,$E8,$03,$00,$64 ; 8704 01 10 27 00 E8 03 00 64 ..'....d + .byte $00,$00,$0A,$00,$00,$01,$00,$00 ; 870C 00 00 0A 00 00 01 00 00 ........ +; ---------------------------------------------------------------------------- +; clear the gameboard screen memory (called before drawing a level, natch) +clear_screen_mem: + ldx #$10 ; 8714 A2 10 .. + lda SAVMSC+1 ; 8716 A5 59 .Y + sta $AF ; 8718 85 AF .. + lda #$00 ; 871A A9 00 .. + sta $AE ; 871C 85 AE .. + tay ; 871E A8 . +csm_loop: + sta ($AE),y ; 871F 91 AE .. + iny ; 8721 C8 . + bne csm_loop ; 8722 D0 FB .. + inc $AF ; 8724 E6 AF .. + dex ; 8726 CA . + bne csm_loop ; 8727 D0 F6 .. + rts ; 8729 60 ` + +; ---------------------------------------------------------------------------- +; clear P/M mem +clear_pm_mem: + lda #$09 ; 872A A9 09 .. + sta player_speed ; 872C 8D 24 06 .$. + ldx #$05 ; 872F A2 05 .. + lda #$00 ; 8731 A9 00 .. + sta playing_level ; 8733 8D 27 06 .'. +L8736: sta $0681,x ; 8736 9D 81 06 ... + sta $0668,x ; 8739 9D 68 06 .h. + sta $069A,x ; 873C 9D 9A 06 ... + jsr hide_player ; 873F 20 B8 8D .. + dex ; 8742 CA . + bne L8736 ; 8743 D0 F1 .. + lda #$2B ; 8745 A9 2B .+ + sta $B8 ; 8747 85 B8 .. + lda #$00 ; 8749 A9 00 .. + sta $B7 ; 874B 85 B7 .. + tay ; 874D A8 . + ldx #$05 ; 874E A2 05 .. +L8750: sta ($B7),y ; 8750 91 B7 .. + iny ; 8752 C8 . + bne L8750 ; 8753 D0 FB .. + inc $B8 ; 8755 E6 B8 .. + dex ; 8757 CA . + bne L8750 ; 8758 D0 F6 .. + rts ; 875A 60 ` + +; ---------------------------------------------------------------------------- +; set all AUDFx to 0 +silence_audio: + ldx #$00 ; 875B A2 00 .. + lda #$00 ; 875D A9 00 .. +sa_loop:sta $0640,x ; 875F 9D 40 06 .@. + sta $0641,x ; 8762 9D 41 06 .A. + sta $0660,x ; 8765 9D 60 06 .`. + sta AUDF1,x ; 8768 9D 00 D2 ... + jsr store_audc ; 876B 20 C6 8D .. + inx ; 876E E8 . + inx ; 876F E8 . + cpx #$08 ; 8770 E0 08 .. + bne sa_loop ; 8772 D0 EB .. + rts ; 8774 60 ` + +; ---------------------------------------------------------------------------- +; called after level-intro music is finished playing +enable_joystick: + ldx #$08 ; 8775 A2 08 .. +ej_loop:lda #$E6 ; 8777 A9 E6 .. + sta work_level_desc,x ; 8779 9D 80 07 ... + lda #$06 ; 877C A9 06 .. + sta work_level_desc+1,x ; 877E 9D 81 07 ... + dex ; 8781 CA . + dex ; 8782 CA . + bne ej_loop ; 8783 D0 F2 .. + stx joystick_disabled ; 8785 8E 32 06 .2. + stx sfx_lock ; 8788 8E 2F 06 ./. + stx work_level_bullet_chance ; 878B 8E 8B 07 ... + jsr clear_pm_mem ; 878E 20 2A 87 *. + jsr silence_audio ; 8791 20 5B 87 [. + lda #$30 ; 8794 A9 30 .0 + sta SAVMSC+1 ; 8796 85 59 .Y +; priority $11: pl0-3, pf0-3, bak (and enable 5th player from the missiles) [redundant? init_set_prior sets this, nothing appears to change it] +set_prior: + lda #$11 ; 8798 A9 11 .. + sta PRIOR ; 879A 8D 1B D0 ... + jmp L88A8 ; 879D 4C A8 88 L.. + +; ---------------------------------------------------------------------------- +L87A0: lda collision_save+4 ; 87A0 AD B4 06 ... + and #$04 ; 87A3 29 04 ). + bne L87A8 ; 87A5 D0 01 .. + rts ; 87A7 60 ` + +; ---------------------------------------------------------------------------- +L87A8: lda $067E ; 87A8 AD 7E 06 .~. + clc ; 87AB 18 . + adc work_level_offs_14 ; 87AC 6D 8E 07 m.. + and #$E0 ; 87AF 29 E0 ). + sta $B6 ; 87B1 85 B6 .. + clc ; 87B3 18 . + lda $0683 ; 87B4 AD 83 06 ... + adc work_level_offs_14+1 ; 87B7 6D 8F 07 m.. + and #$E0 ; 87BA 29 E0 ). + lsr a ; 87BC 4A J + lsr a ; 87BD 4A J + lsr a ; 87BE 4A J + lsr a ; 87BF 4A J + ora $B6 ; 87C0 05 B6 .. + sta $B6 ; 87C2 85 B6 .. + lda work_level_map2 ; 87C4 AD 9A 07 ... + sta $B4 ; 87C7 85 B4 .. + lda work_level_map2+1 ; 87C9 AD 9B 07 ... + sta $B5 ; 87CC 85 B5 .. + ldy #$00 ; 87CE A0 00 .. +L87D0: lda ($B4),y ; 87D0 B1 B4 .. + cmp #$FF ; 87D2 C9 FF .. + bne L87D7 ; 87D4 D0 01 .. + rts ; 87D6 60 ` + +; ---------------------------------------------------------------------------- +L87D7: cmp $B6 ; 87D7 C5 B6 .. + beq L87E0 ; 87D9 F0 05 .. + iny ; 87DB C8 . + iny ; 87DC C8 . + jmp L87D0 ; 87DD 4C D0 87 L.. + +; ---------------------------------------------------------------------------- +L87E0: lda work_level_map1 ; 87E0 AD 98 07 ... + sta $B0 ; 87E3 85 B0 .. + lda work_level_map1+1 ; 87E5 AD 99 07 ... + sta $B1 ; 87E8 85 B1 .. + tya ; 87EA 98 . + sta $B2 ; 87EB 85 B2 .. + lsr a ; 87ED 4A J + clc ; 87EE 18 . + adc $B2 ; 87EF 65 B2 e. + tay ; 87F1 A8 . + lda ($B0),y ; 87F2 B1 B0 .. + sta $06DC ; 87F4 8D DC 06 ... + iny ; 87F7 C8 . + lda ($B0),y ; 87F8 B1 B0 .. + sta $06DD ; 87FA 8D DD 06 ... + lda #$92 ; 87FD A9 92 .. + sta sfx_ptr ; 87FF 8D 3C 06 .<. + lda #$88 ; 8802 A9 88 .. + sta sfx_ptr+1 ; 8804 8D 3D 06 .=. + lda #$08 ; 8807 A9 08 .. + jsr cue_sfx_jv ; 8809 20 06 80 .. + ldy $B2 ; 880C A4 B2 .. + iny ; 880E C8 . + lda ($B4),y ; 880F B1 B4 .. + beq L8856 ; 8811 F0 43 .C + and #$F0 ; 8813 29 F0 ). + beq L8831 ; 8815 F0 1A .. + lsr a ; 8817 4A J + lsr a ; 8818 4A J + lsr a ; 8819 4A J + tay ; 881A A8 . + lda work_level_unkn_table1 ; 881B AD 9C 07 ... + sta $B0 ; 881E 85 B0 .. + lda work_level_unkn_table1+1 ; 8820 AD 9D 07 ... + sta $B1 ; 8823 85 B1 .. + lda ($B0),y ; 8825 B1 B0 .. + sta dm_progctr ; 8827 85 C0 .. + iny ; 8829 C8 . + lda ($B0),y ; 882A B1 B0 .. + sta dm_progctr+1 ; 882C 85 C1 .. + jsr draw_map_jv ; 882E 20 00 80 .. +L8831: ldy $B2 ; 8831 A4 B2 .. + iny ; 8833 C8 . + lda ($B4),y ; 8834 B1 B4 .. + beq L8856 ; 8836 F0 1E .. + and #$0F ; 8838 29 0F ). + beq L8856 ; 883A F0 1A .. + asl a ; 883C 0A . + tay ; 883D A8 . + lda work_level_offs_30 ; 883E AD 9E 07 ... + sta $B0 ; 8841 85 B0 .. + lda work_level_offs_30+1 ; 8843 AD 9F 07 ... + sta $B1 ; 8846 85 B1 .. + lda ($B0),y ; 8848 B1 B0 .. + sta $06E4 ; 884A 8D E4 06 ... + iny ; 884D C8 . + lda ($B0),y ; 884E B1 B0 .. + sta $06E5 ; 8850 8D E5 06 ... + jsr L06E3 ; 8853 20 E3 06 .. +L8856: lda work_level_sub4 ; 8856 AD A0 07 ... + sta $06E4 ; 8859 8D E4 06 ... + lda work_level_sub4+1 ; 885C AD A1 07 ... + sta $06E5 ; 885F 8D E5 06 ... + jsr L06E3 ; 8862 20 E3 06 .. + clc ; 8865 18 . + lda score ; 8866 AD 00 07 ... + adc work_level_points_per_bomb ; 8869 6D 90 07 m.. + sta score ; 886C 8D 00 07 ... + bcc L8879 ; 886F 90 08 .. + inc score+1 ; 8871 EE 01 07 ... + bne L8879 ; 8874 D0 03 .. + inc score+2 ; 8876 EE 02 07 ... +L8879: lda #$D9 ; 8879 A9 D9 .. + sta dm_progctr ; 887B 85 C0 .. + lda #$06 ; 887D A9 06 .. + sta dm_progctr+1 ; 887F 85 C1 .. + jsr draw_map_jv ; 8881 20 00 80 .. + jsr L800C ; 8884 20 0C 80 .. + dec work_level_num_bombs ; 8887 CE 8A 07 ... +L888A: lda collision_save+4 ; 888A AD B4 06 ... + and #$04 ; 888D 29 04 ). + bne L888A ; 888F D0 F9 .. + rts ; 8891 60 ` + +; ---------------------------------------------------------------------------- +data_8892: + .byte $01,$A6,$00,$1E,$03,$28,$03,$1E ; 8892 01 A6 00 1E 03 28 03 1E .....(.. + .byte $03,$28,$03,$1E,$03,$28,$03,$1E ; 889A 03 28 03 1E 03 28 03 1E .(...(.. + .byte $03,$28,$03,$00,$00,$00 ; 88A2 03 28 03 00 00 00 .(.... +; ---------------------------------------------------------------------------- +L88A8: ldx #$00 ; 88A8 A2 00 .. + txa ; 88AA 8A . +L88AB: sta $2B00,x ; 88AB 9D 00 2B ..+ + sta $2C00,x ; 88AE 9D 00 2C .., + sta $2D00,x ; 88B1 9D 00 2D ..- + sta $2E00,x ; 88B4 9D 00 2E ... + sta $2F00,x ; 88B7 9D 00 2F ../ + dex ; 88BA CA . + bne L88AB ; 88BB D0 EE .. + rts ; 88BD 60 ` + +; ---------------------------------------------------------------------------- + brk ; 88BE 00 . + brk ; 88BF 00 . + brk ; 88C0 00 . + brk ; 88C1 00 . + brk ; 88C2 00 . + brk ; 88C3 00 . + brk ; 88C4 00 . + brk ; 88C5 00 . + brk ; 88C6 00 . + brk ; 88C7 00 . +check_consol: + lda player_delta_x ; 88C8 AD 30 06 .0. + ora player_delta_y ; 88CB 0D 31 06 .1. + bne L88DC ; 88CE D0 0C .. + lda CONSOL ; 88D0 AD 1F D0 ... + and #$07 ; 88D3 29 07 ). + cmp #$07 ; 88D5 C9 07 .. + bne L88DC ; 88D7 D0 03 .. + jmp L88E0 ; 88D9 4C E0 88 L.. + +; ---------------------------------------------------------------------------- +L88DC: lda #$00 ; 88DC A9 00 .. + sta $A2 ; 88DE 85 A2 .. +L88E0: lda $A0 ; 88E0 A5 A0 .. + bne L88E7 ; 88E2 D0 03 .. + sta $A2 ; 88E4 85 A2 .. +L88E6: rts ; 88E6 60 ` + +; ---------------------------------------------------------------------------- +L88E7: lda $A2 ; 88E7 A5 A2 .. + cmp #$28 ; 88E9 C9 28 .( + bcc L88E6 ; 88EB 90 F9 .. + lda #$00 ; 88ED A9 00 .. + sta $A0 ; 88EF 85 A0 .. + sta $A2 ; 88F1 85 A2 .. + ldx #$FF ; 88F3 A2 FF .. + txs ; 88F5 9A . + jmp init_game ; 88F6 4C 00 90 L.. + +; ---------------------------------------------------------------------------- + brk ; 88F9 00 . + brk ; 88FA 00 . + brk ; 88FB 00 . + brk ; 88FC 00 . + brk ; 88FD 00 . + brk ; 88FE 00 . + brk ; 88FF 00 . + lda $0621 ; 8900 AD 21 06 .!. + beq L890F ; 8903 F0 0A .. + lda $0623 ; 8905 AD 23 06 .#. + cmp #$01 ; 8908 C9 01 .. + beq L8910 ; 890A F0 04 .. + jmp L89F3 ; 890C 4C F3 89 L.. + +; ---------------------------------------------------------------------------- +L890F: rts ; 890F 60 ` + +; ---------------------------------------------------------------------------- +L8910: lda $06EE ; 8910 AD EE 06 ... + bne L8945 ; 8913 D0 30 .0 + inc $06EE ; 8915 EE EE 06 ... + lda #$02 ; 8918 A9 02 .. + sta player_speed ; 891A 8D 24 06 .$. + sta $067F ; 891D 8D 7F 06 ... + lda #$00 ; 8920 A9 00 .. + sta playing_level ; 8922 8D 27 06 .'. + sta $06E9 ; 8925 8D E9 06 ... + sta $06EA ; 8928 8D EA 06 ... + lda RANDOM ; 892B AD 0A D2 ... + and #$0F ; 892E 29 0F ). + sta $0688 ; 8930 8D 88 06 ... + inc $0688 ; 8933 EE 88 06 ... + lda #$60 ; 8936 A9 60 .` + sta sfx_slot_tempo ; 8938 8D 3E 06 .>. + lda #$8A ; 893B A9 8A .. + sta sfx_slot_timer ; 893D 8D 3F 06 .?. + lda #$07 ; 8940 A9 07 .. + jsr L8003 ; 8942 20 03 80 .. +L8945: lda $0683 ; 8945 AD 83 06 ... + cmp #$C6 ; 8948 C9 C6 .. + bcc L895D ; 894A 90 11 .. + lda #$00 ; 894C A9 00 .. + sta AUDF1 ; 894E 8D 00 D2 ... + sta AUDC1 ; 8951 8D 01 D2 ... + sta $06EF ; 8954 8D EF 06 ... + inc $0623 ; 8957 EE 23 06 .#. + jmp L89F3 ; 895A 4C F3 89 L.. + +; ---------------------------------------------------------------------------- +L895D: lda #$70 ; 895D A9 70 .p + sta $0801 ; 895F 8D 01 08 ... + sta game_display_list ; 8962 8D 81 08 ... + lda $06EA ; 8965 AD EA 06 ... + bne L89A9 ; 8968 D0 3F .? +L896A: inc $0683 ; 896A EE 83 06 ... + inc $0683 ; 896D EE 83 06 ... + lda $0683 ; 8970 AD 83 06 ... + sta AUDF1 ; 8973 8D 00 D2 ... + lda #$A3 ; 8976 A9 A3 .. + sta AUDC1 ; 8978 8D 01 D2 ... + lda collision_save+4 ; 897B AD B4 06 ... + and #$01 ; 897E 29 01 ). + bne falling_bounce ; 8980 D0 01 .. + rts ; 8982 60 ` + +; ---------------------------------------------------------------------------- +; this looks like it hurts... +falling_bounce: + lda RANDOM ; 8983 AD 0A D2 ... + and #$03 ; 8986 29 03 ). + beq falling_bounce ; 8988 F0 F9 .. + sta $06E9 ; 898A 8D E9 06 ... + lda #$00 ; 898D A9 00 .. + sta $06EA ; 898F 8D EA 06 ... + lda #$50 ; 8992 A9 50 .P + sta $0801 ; 8994 8D 01 08 ... + sta game_display_list ; 8997 8D 81 08 ... +play_sfx_bounce_1: + lda #$4B ; 899A A9 4B .K + sta sfx_slot_tempo ; 899C 8D 3E 06 .>. + lda #$8A ; 899F A9 8A .. + sta sfx_slot_timer ; 89A1 8D 3F 06 .?. + lda #$04 ; 89A4 A9 04 .. + jsr L8003 ; 89A6 20 03 80 .. +L89A9: ldx $06EA ; 89A9 AE EA 06 ... + cpx #$09 ; 89AC E0 09 .. + bne L89B8 ; 89AE D0 08 .. + lda #$00 ; 89B0 A9 00 .. + sta $06EA ; 89B2 8D EA 06 ... + jmp L896A ; 89B5 4C 6A 89 Lj. + +; ---------------------------------------------------------------------------- +L89B8: ldy data_table_8a39,x ; 89B8 BC 39 8A .9. + lda $06E9 ; 89BB AD E9 06 ... + cmp #$01 ; 89BE C9 01 .. + beq L89D1 ; 89C0 F0 0F .. + ldy #$00 ; 89C2 A0 00 .. + cmp #$02 ; 89C4 C9 02 .. + beq L89D1 ; 89C6 F0 09 .. + lda data_table_8a39,x ; 89C8 BD 39 8A .9. + eor #$FF ; 89CB 49 FF I. + clc ; 89CD 18 . + adc #$01 ; 89CE 69 01 i. + tay ; 89D0 A8 . +L89D1: clc ; 89D1 18 . + tya ; 89D2 98 . + adc $067E ; 89D3 6D 7E 06 m~. + sta $067E ; 89D6 8D 7E 06 .~. + lda L8A42,x ; 89D9 BD 42 8A .B. + clc ; 89DC 18 . + adc $0683 ; 89DD 6D 83 06 m.. + sta $0683 ; 89E0 8D 83 06 ... + sta AUDF1 ; 89E3 8D 00 D2 ... + inc $06EA ; 89E6 EE EA 06 ... + clc ; 89E9 18 . + lda $0620 ; 89EA AD 20 06 . . + adc #$12 ; 89ED 69 12 i. + sta $0688 ; 89EF 8D 88 06 ... + rts ; 89F2 60 ` + +; ---------------------------------------------------------------------------- +L89F3: lda $0623 ; 89F3 AD 23 06 .#. + cmp #$02 ; 89F6 C9 02 .. + beq L89FB ; 89F8 F0 01 .. + rts ; 89FA 60 ` + +; ---------------------------------------------------------------------------- +L89FB: lda $06EF ; 89FB AD EF 06 ... + bne L8A16 ; 89FE D0 16 .. + sta jiffy_timer_2 ; 8A00 8D 1B 06 ... + inc $06EF ; 8A03 EE EF 06 ... + lda #$00 ; 8A06 A9 00 .. + jsr cue_music_jv ; 8A08 20 18 80 .. + lda #$04 ; 8A0B A9 04 .. + sta player_speed ; 8A0D 8D 24 06 .$. + lda #$16 ; 8A10 A9 16 .. + sta $0688 ; 8A12 8D 88 06 ... + rts ; 8A15 60 ` + +; ---------------------------------------------------------------------------- +L8A16: lda $0663 ; 8A16 AD 63 06 .c. + beq L8A25 ; 8A19 F0 0A .. + lda #$16 ; 8A1B A9 16 .. + clc ; 8A1D 18 . + adc $061F ; 8A1E 6D 1F 06 m.. + sta $0688 ; 8A21 8D 88 06 ... + rts ; 8A24 60 ` + +; ---------------------------------------------------------------------------- +L8A25: lda #$09 ; 8A25 A9 09 .. + sta player_speed ; 8A27 8D 24 06 .$. + lda #$00 ; 8A2A A9 00 .. + sta $0623 ; 8A2C 8D 23 06 .#. + sta $067E ; 8A2F 8D 7E 06 .~. + dec lives ; 8A32 CE 0A 07 ... + sta $06EE ; 8A35 8D EE 06 ... + rts ; 8A38 60 ` + +; ---------------------------------------------------------------------------- +data_table_8a39: + .byte $02,$02,$02,$02,$02,$02,$00,$00 ; 8A39 02 02 02 02 02 02 00 00 ........ + .byte $00 ; 8A41 00 . +L8A42: .byte $FE,$FE,$00,$00,$02,$02,$02,$02 ; 8A42 FE FE 00 00 02 02 02 02 ........ + .byte $02 ; 8A4A 02 . +; used when jumpman is falling? +sfx_bounce_1: + .byte $01,$8E,$00,$30,$01,$01,$8B,$00 ; 8A4B 01 8E 00 30 01 01 8B 00 ...0.... + .byte $40,$01,$01,$88,$00,$50,$01,$01 ; 8A53 40 01 01 88 00 50 01 01 @....P.. + .byte $85,$00,$60,$01,$00 ; 8A5B 85 00 60 01 00 ..`.. +; jumpman hit by bullet or started falling +sfx_death: + .byte $01,$C8,$00,$0A,$02,$FA,$02,$14 ; 8A60 01 C8 00 0A 02 FA 02 14 ........ + .byte $02,$F0,$02,$1E,$02,$E8,$02,$28 ; 8A68 02 F0 02 1E 02 E8 02 28 .......( + .byte $02,$DC,$02,$32,$02,$D2,$02,$3C ; 8A70 02 DC 02 32 02 D2 02 3C ...2...< + .byte $02,$C8,$02,$00,$00,$00,$00,$00 ; 8A78 02 C8 02 00 00 00 00 00 ........ +; ---------------------------------------------------------------------------- +play_sfx_bounce_2: + lda $061F ; 8A80 AD 1F 06 ... + bne L8A94 ; 8A83 D0 0F .. + lda #$97 ; 8A85 A9 97 .. + sta sfx_slot_tempo ; 8A87 8D 3E 06 .>. + lda #$8A ; 8A8A A9 8A .. + sta sfx_slot_timer ; 8A8C 8D 3F 06 .?. + lda #$02 ; 8A8F A9 02 .. + jsr L8003 ; 8A91 20 03 80 .. +L8A94: jmp L9925 ; 8A94 4C 25 99 L%. + +; ---------------------------------------------------------------------------- +; used when jumpman is falling? +sfx_bounce_2: + .byte $01,$81,$00,$04,$01,$00,$00,$00 ; 8A97 01 81 00 04 01 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 8A9F 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 8AA7 00 00 00 00 00 00 00 00 ........ + .byte $00 ; 8AAF 00 . +sfx_option_pressed: + .byte $01,$A4,$00,$3C,$02,$00,$00,$00 ; 8AB0 01 A4 00 3C 02 00 00 00 ...<.... + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 8AB8 00 00 00 00 00 00 00 00 ........ +; ---------------------------------------------------------------------------- +cart_entry_point: + ldx #$00 ; 8AC0 A2 00 .. + lda #$00 ; 8AC2 A9 00 .. +; clear pages 6 and 7 +init_loop: + sta $0600,x ; 8AC4 9D 00 06 ... + sta score,x ; 8AC7 9D 00 07 ... + inx ; 8ACA E8 . + bne init_loop ; 8ACB D0 F7 .. + jsr init_hardware ; 8ACD 20 7C 83 |. + lda #$DD ; 8AD0 A9 DD .. + sta dlist_shadow_lo ; 8AD2 8D AC 06 ... + lda #$8A ; 8AD5 A9 8A .. + sta dlist_shadow_hi ; 8AD7 8D AD 06 ... + jmp init_game ; 8ADA 4C 00 90 L.. + +; ---------------------------------------------------------------------------- +; yet another jump-to-itself empty display list +blank_dlist_8add: + .byte $41,$DD,$8A ; 8ADD 41 DD 8A A.. +; ---------------------------------------------------------------------------- +L8AE0: lda #$EB ; 8AE0 A9 EB .. + sta dlist_shadow_lo ; 8AE2 8D AC 06 ... + lda #$8A ; 8AE5 A9 8A .. + sta dlist_shadow_hi ; 8AE7 8D AD 06 ... + rts ; 8AEA 60 ` + +; ---------------------------------------------------------------------------- +; another jump-to-itself empty display list +blank_dlist_8aeb: + .byte $41,$EB,$8A ; 8AEB 41 EB 8A A.. +; ---------------------------------------------------------------------------- + brk ; 8AEE 00 . + brk ; 8AEF 00 . + brk ; 8AF0 00 . + brk ; 8AF1 00 . + brk ; 8AF2 00 . + brk ; 8AF3 00 . + brk ; 8AF4 00 . + brk ; 8AF5 00 . + brk ; 8AF6 00 . + brk ; 8AF7 00 . + brk ; 8AF8 00 . + brk ; 8AF9 00 . + brk ; 8AFA 00 . + brk ; 8AFB 00 . + brk ; 8AFC 00 . + brk ; 8AFD 00 . +cart_start_stub: + clc ; 8AFE 18 . + rts ; 8AFF 60 ` + +; ---------------------------------------------------------------------------- + brk ; 8B00 00 . + brk ; 8B01 00 . + brk ; 8B02 00 . + brk ; 8B03 00 . + brk ; 8B04 00 . + brk ; 8B05 00 . + brk ; 8B06 00 . + brk ; 8B07 00 . + brk ; 8B08 00 . + brk ; 8B09 00 . + brk ; 8B0A 00 . + brk ; 8B0B 00 . + brk ; 8B0C 00 . + brk ; 8B0D 00 . + brk ; 8B0E 00 . + brk ; 8B0F 00 . + brk ; 8B10 00 . + brk ; 8B11 00 . + brk ; 8B12 00 . + brk ; 8B13 00 . + brk ; 8B14 00 . + brk ; 8B15 00 . + brk ; 8B16 00 . + brk ; 8B17 00 . + brk ; 8B18 00 . + brk ; 8B19 00 . + brk ; 8B1A 00 . + brk ; 8B1B 00 . + brk ; 8B1C 00 . + brk ; 8B1D 00 . + brk ; 8B1E 00 . + brk ; 8B1F 00 . + brk ; 8B20 00 . + brk ; 8B21 00 . + brk ; 8B22 00 . +L8B23: ldx #$20 ; 8B23 A2 20 . + lda #$00 ; 8B25 A9 00 .. +L8B27: sta $075F,x ; 8B27 9D 5F 07 ._. + dex ; 8B2A CA . + bne L8B27 ; 8B2B D0 FA .. +L8B2D: lda work_level_unkn_table0 ; 8B2D AD 94 07 ... + sta $AC ; 8B30 85 AC .. + lda work_level_unkn_table0+1 ; 8B32 AD 95 07 ... + sta $AD ; 8B35 85 AD .. + ldy #$00 ; 8B37 A0 00 .. +L8B39: lda ($AC),y ; 8B39 B1 AC .. + cmp #$FF ; 8B3B C9 FF .. + beq L8B7A ; 8B3D F0 3B .; + tax ; 8B3F AA . + iny ; 8B40 C8 . + lda ($AC),y ; 8B41 B1 AC .. + sta $066E,x ; 8B43 9D 6E 06 .n. + iny ; 8B46 C8 . + lda ($AC),y ; 8B47 B1 AC .. + sta $0673,x ; 8B49 9D 73 06 .s. + iny ; 8B4C C8 . + lda ($AC),y ; 8B4D B1 AC .. + sta $0678,x ; 8B4F 9D 78 06 .x. + iny ; 8B52 C8 . + lda ($AC),y ; 8B53 B1 AC .. + sta $067D,x ; 8B55 9D 7D 06 .}. + iny ; 8B58 C8 . + lda ($AC),y ; 8B59 B1 AC .. + sta $0682,x ; 8B5B 9D 82 06 ... + iny ; 8B5E C8 . + lda ($AC),y ; 8B5F B1 AC .. + sta $0687,x ; 8B61 9D 87 06 ... + iny ; 8B64 C8 . + tya ; 8B65 98 . + pha ; 8B66 48 H + lda ($AC),y ; 8B67 B1 AC .. + ldy pcolor0_table,x ; 8B69 BC 7B 8B .{. + sta PCOLR0,y ; 8B6C 99 C0 02 ... + pla ; 8B6F 68 h + tay ; 8B70 A8 . + iny ; 8B71 C8 . + lda #$00 ; 8B72 A9 00 .. + sta $0696,x ; 8B74 9D 96 06 ... + jmp L8B39 ; 8B77 4C 39 8B L9. + +; ---------------------------------------------------------------------------- +L8B7A: rts ; 8B7A 60 ` + +; ---------------------------------------------------------------------------- +pcolor0_table: + .byte $07,$00,$01,$02,$03 ; 8B7B 07 00 01 02 03 ..... +; ---------------------------------------------------------------------------- +; show scores, called at end of game, also called after beating level 12 (after WELL DONE). $40 in NMIEN = disable DLI, enable VBI +player_scores_screen: + lda #$40 ; 8B80 A9 40 .@ + sta NMIEN ; 8B82 8D 0E D4 ... + lda #$82 ; 8B85 A9 82 .. + sta dlist_shadow_lo ; 8B87 8D AC 06 ... + lda #$8C ; 8B8A A9 8C .. + sta dlist_shadow_hi ; 8B8C 8D AD 06 ... + ldx #$06 ; 8B8F A2 06 .. +L8B91: lda scores_msg,x ; 8B91 BD 7B 8C .{. + sta $3006,x ; 8B94 9D 06 30 ..0 + dex ; 8B97 CA . + bne L8B91 ; 8B98 D0 F7 .. + ldx current_player ; 8B9A AE FE 06 ... + ldy struct_player_lives_offsets_minus_one,x; 8B9D BC 88 8C ... + ldx #$03 ; 8BA0 A2 03 .. + lda lives ; 8BA2 AD 0A 07 ... + sta $0713,y ; 8BA5 99 13 07 ... +L8BA8: lda $06FF,x ; 8BA8 BD FF 06 ... + sta $070B,y ; 8BAB 99 0B 07 ... + dey ; 8BAE 88 . + dex ; 8BAF CA . + bne L8BA8 ; 8BB0 D0 F6 .. + lda #$00 ; 8BB2 A9 00 .. + sta $AA ; 8BB4 85 AA .. + sta $AB ; 8BB6 85 AB .. + tay ; 8BB8 A8 . + lda number_of_players ; 8BB9 AD F4 06 ... + sta $AE ; 8BBC 85 AE .. + inc $AE ; 8BBE E6 AE .. +; shows PLAYER (backwards loop) +show_reyalp_msg: + ldx #$14 ; 8BC0 A2 14 .. +reyalp_msg_loop: + lda reyalp_msg_minus_one,x ; 8BC2 BD 67 8C .g. + sta $3028,y ; 8BC5 99 28 30 .(0 +; replace 10th char with the ASCII player number +check_10th: + cpx #$0A ; 8BC8 E0 0A .. + bne continue_loop ; 8BCA D0 09 .. + inc $AA ; 8BCC E6 AA .. + lda $AA ; 8BCE A5 AA .. + ora #$10 ; 8BD0 09 10 .. + sta $3028,y ; 8BD2 99 28 30 .(0 +continue_loop: + iny ; 8BD5 C8 . + dex ; 8BD6 CA . + bne reyalp_msg_loop ; 8BD7 D0 E9 .. + sty $AD ; 8BD9 84 AD .. + ldx $AA ; 8BDB A6 AA .. + ldy struct_player_lives_offsets_minus_one,x; 8BDD BC 88 8C ... + lda #$00 ; 8BE0 A9 00 .. +; $AF is the character to show after the score (space for alive, cross for dead) +store_space: + sta $AF ; 8BE2 85 AF .. + lda $0713,y ; 8BE4 B9 13 07 ... + cmp #$FF ; 8BE7 C9 FF .. +; player still has lives left? +check_alive: + bne no_cross ; 8BE9 D0 04 .. +; no, show a cross instead of a space +not_alive: + lda #$5E ; 8BEB A9 5E .^ + sta $AF ; 8BED 85 AF .. +no_cross: + lda L8C84,x ; 8BEF BD 84 8C ... + sta $D3 ; 8BF2 85 D3 .. + lda #$30 ; 8BF4 A9 30 .0 + sta $D4 ; 8BF6 85 D4 .. + ldx #$03 ; 8BF8 A2 03 .. +L8BFA: lda $070B,y ; 8BFA B9 0B 07 ... + sta $CF,x ; 8BFD 95 CF .. + dey ; 8BFF 88 . + dex ; 8C00 CA . + bne L8BFA ; 8C01 D0 F7 .. + jsr xxx_level_something_jv ; 8C03 20 09 80 .. + lda $AF ; 8C06 A5 AF .. + iny ; 8C08 C8 . + sta ($D3),y ; 8C09 91 D3 .. + ldy $AD ; 8C0B A4 AD .. + dec $AE ; 8C0D C6 AE .. + bne show_reyalp_msg ; 8C0F D0 AF .. + lda #$96 ; 8C11 A9 96 .. + sta COLOR3 ; 8C13 8D C7 02 ... + lda #$C6 ; 8C16 A9 C6 .. + sta COLOR0 ; 8C18 8D C4 02 ... + lda #$08 ; 8C1B A9 08 .. + sta COLOR1 ; 8C1D 8D C5 02 ... + lda #$52 ; 8C20 A9 52 .R +; set dlist shadow to scores_screen_dlist +show_scores_screen: + sta dlist_shadow_lo ; 8C22 8D AC 06 ... + lda #$8C ; 8C25 A9 8C .. + sta dlist_shadow_hi ; 8C27 8D AD 06 ... + lda #$8D ; 8C2A A9 8D .. + sta dli_vec_shadow_lo ; 8C2C 8D AE 06 ... + lda #$8C ; 8C2F A9 8C .. +; dli = score_screen_dli_sr +set_score_screen_dli: + sta dli_vec_shadow_hi ; 8C31 8D AF 06 ... + lda #$02 ; 8C34 A9 02 .. + jsr cue_music_jv ; 8C36 20 18 80 .. +; I *think* we're waiting for the music to finish playing... +what_are_we_waiting_for: + lda $0640 ; 8C39 AD 40 06 .@. + ora $0642 ; 8C3C 0D 42 06 .B. + ora $0644 ; 8C3F 0D 44 06 .D. + ora sfx_slot_duration ; 8C42 0D 46 06 .F. + bne what_are_we_waiting_for ; 8C45 D0 F2 .. + sta jiffy_timer_1 ; 8C47 8D 1A 06 ... +; wait 192 jiffies: 3.2 sec (ntsc), 3.84 sec (pal) +wait_3_sec: + lda jiffy_timer_1 ; 8C4A AD 1A 06 ... + cmp #$C0 ; 8C4D C9 C0 .. + bne wait_3_sec ; 8C4F D0 F9 .. + rts ; 8C51 60 ` + +; ---------------------------------------------------------------------------- +; a GR.2-ish DL, with DLIs, screen mem at $3000, for player scores screen +scores_screen_dlist: + .byte $70,$70,$70,$30,$70,$70,$70,$70 ; 8C52 70 70 70 30 70 70 70 70 ppp0pppp + .byte $47,$00,$30,$87,$87,$10,$87,$10 ; 8C5A 47 00 30 87 87 10 87 10 G.0..... + .byte $87,$10,$07,$41,$52 ; 8C62 87 10 07 41 52 ...AR +reyalp_msg_minus_one: + .byte $8C ; 8C67 8C . +; player spelled backwards: ' 0 # REYALP ' +reyalp_msg: + .byte $80,$80,$10,$80,$80,$80,$80,$80 ; 8C68 80 80 10 80 80 80 80 80 ........ + .byte $80,$80,$03,$80,$32,$25,$39,$21 ; 8C70 80 80 03 80 32 25 39 21 ....2%9! + .byte $2C,$30,$80 ; 8C78 2C 30 80 ,0. +; ' SCORES' in color 3 +scores_msg: + .byte $80,$F3,$E3,$EF,$F2,$E5,$F3 ; 8C7B 80 F3 E3 EF F2 E5 F3 ....... +; looks like an empty jump-to-itself dlist +blank_dlist_8c82: + .byte $41,$82 ; 8C82 41 82 A. +L8C84: .byte $8C ; 8C84 8C . +; offsets into screen memory, column 12, rows 2 3 4 5, used by code at $8BEF, loaded in $d3, hi byte in $d4 is $30 +score_offsets: + .byte $34,$48,$5C ; 8C85 34 48 5C 4H\ +struct_player_lives_offsets_minus_one: + .byte $70 ; 8C88 70 p +; lookup table, offset from $713 to lives for indexed player +struct_player_lives_offsets: + .byte $02,$0D,$18,$23 ; 8C89 02 0D 18 23 ...# +; ---------------------------------------------------------------------------- +; used by score screen +score_screen_dli_sr: + pha ; 8C8D 48 H + lda current_player ; 8C8E AD FE 06 ... + sec ; 8C91 38 8 + sbc #$01 ; 8C92 E9 01 .. + sta WSYNC ; 8C94 8D 0A D4 ... + cmp $AB ; 8C97 C5 AB .. + bne L8CA4 ; 8C99 D0 09 .. + lda $062A ; 8C9B AD 2A 06 .*. + sta COLPF0 ; 8C9E 8D 16 D0 ... + jmp L8CAA ; 8CA1 4C AA 8C L.. + +; ---------------------------------------------------------------------------- +L8CA4: lda COLOR0 ; 8CA4 AD C4 02 ... + sta COLPF0 ; 8CA7 8D 16 D0 ... +L8CAA: inc $AB ; 8CAA E6 AB .. + lda $AB ; 8CAC A5 AB .. + and #$03 ; 8CAE 29 03 ). + sta $AB ; 8CB0 85 AB .. + pla ; 8CB2 68 h + rti ; 8CB3 40 @ + +; ---------------------------------------------------------------------------- + brk ; 8CB4 00 . + brk ; 8CB5 00 . + brk ; 8CB6 00 . + brk ; 8CB7 00 . + brk ; 8CB8 00 . + brk ; 8CB9 00 . + brk ; 8CBA 00 . + brk ; 8CBB 00 . +L8CBC: ldx #$03 ; 8CBC A2 03 .. +L8CBE: lda $06FF,x ; 8CBE BD FF 06 ... + cmp score+2,x ; 8CC1 DD 02 07 ... + bcc L8CFA ; 8CC4 90 34 .4 + beq L8CCB ; 8CC6 F0 03 .. + jmp show_l_equals ; 8CC8 4C CE 8C L.. + +; ---------------------------------------------------------------------------- +L8CCB: dex ; 8CCB CA . + bne L8CBE ; 8CCC D0 F0 .. +; L= (for lives display) +show_l_equals: + ldx #$00 ; 8CCE A2 00 .. + clc ; 8CD0 18 . +L8CD1: lda l_equals,x ; 8CD1 BD FD 8C ... + adc $0703,x ; 8CD4 7D 03 07 }.. + sta $0703,x ; 8CD7 9D 03 07 ... + inx ; 8CDA E8 . + php ; 8CDB 08 . + cpx #$03 ; 8CDC E0 03 .. + beq add_extra_life ; 8CDE F0 04 .. + plp ; 8CE0 28 ( + jmp L8CD1 ; 8CE1 4C D1 8C L.. + +; ---------------------------------------------------------------------------- +; plays sfx_extra_life +add_extra_life: + plp ; 8CE4 28 ( + inc lives ; 8CE5 EE 0A 07 ... + lda #$79 ; 8CE8 A9 79 .y + sta sfx_ptr ; 8CEA 8D 3C 06 .<. + lda #$BE ; 8CED A9 BE .. + sta sfx_ptr+1 ; 8CEF 8D 3D 06 .=. + lda #$0C ; 8CF2 A9 0C .. + jsr cue_sfx_jv ; 8CF4 20 06 80 .. + jsr show_lives_icons ; 8CF7 20 BB 86 .. +L8CFA: jmp LB7C0 ; 8CFA 4C C0 B7 L.. + +; ---------------------------------------------------------------------------- +; L= (for lives display) +l_equals: + .byte $4C,$1D,$00 ; 8CFD 4C 1D 00 L.. +; ---------------------------------------------------------------------------- +; just lost your last life +crumble_gameboard: + jsr enable_joystick_jv ; 8D00 20 1B 80 .. + lda #$86 ; 8D03 A9 86 .. + sta AUDC1 ; 8D05 8D 01 D2 ... +L8D08: lda RANDOM ; 8D08 AD 0A D2 ... + and #$70 ; 8D0B 29 70 )p + sta $0801 ; 8D0D 8D 01 08 ... + sta game_display_list ; 8D10 8D 81 08 ... + lda RANDOM ; 8D13 AD 0A D2 ... + sta AUDF1 ; 8D16 8D 00 D2 ... +L8D19: lda RANDOM ; 8D19 AD 0A D2 ... + and #$1F ; 8D1C 29 1F ). + cmp #$0D ; 8D1E C9 0D .. + bcs L8D19 ; 8D20 B0 F7 .. + sta $AA ; 8D22 85 AA .. + asl a ; 8D24 0A . + clc ; 8D25 18 . + adc $AA ; 8D26 65 AA e. + sta $AA ; 8D28 85 AA .. + jsr L8D60 ; 8D2A 20 60 8D `. + inc $AA ; 8D2D E6 AA .. + lda $AA ; 8D2F A5 AA .. + pha ; 8D31 48 H + jsr L8D60 ; 8D32 20 60 8D `. + pla ; 8D35 68 h + jsr L8D60 ; 8D36 20 60 8D `. + inc $AA ; 8D39 E6 AA .. + lda $AA ; 8D3B A5 AA .. + jsr L8D60 ; 8D3D 20 60 8D `. + ldy #$00 ; 8D40 A0 00 .. + tya ; 8D42 98 . +L8D43: ora $3370,y ; 8D43 19 70 33 .p3 + ora $3398,y ; 8D46 19 98 33 ..3 + iny ; 8D49 C8 . + cpy #$28 ; 8D4A C0 28 .( + bne L8D43 ; 8D4C D0 F5 .. + cmp #$00 ; 8D4E C9 00 .. + bne L8D08 ; 8D50 D0 B6 .. + lda #$00 ; 8D52 A9 00 .. + sta AUDF1 ; 8D54 8D 00 D2 ... + sta AUDC1 ; 8D57 8D 01 D2 ... + jsr player_scores_screen ; 8D5A 20 80 8B .. + jmp afterlife ; 8D5D 4C 00 96 L.. + +; ---------------------------------------------------------------------------- +L8D60: clc ; 8D60 18 . + adc #$70 ; 8D61 69 70 ip + sta $AC ; 8D63 85 AC .. + adc #$28 ; 8D65 69 28 i( + sta $AE ; 8D67 85 AE .. + lda #$3D ; 8D69 A9 3D .= + sta $AD ; 8D6B 85 AD .. + sta $AF ; 8D6D 85 AF .. + lda #$57 ; 8D6F A9 57 .W + sta $AB ; 8D71 85 AB .. + ldy #$00 ; 8D73 A0 00 .. +L8D75: lda ($AC),y ; 8D75 B1 AC .. + sta ($AE),y ; 8D77 91 AE .. + sec ; 8D79 38 8 + lda $AC ; 8D7A A5 AC .. + sbc #$28 ; 8D7C E9 28 .( + sta $AC ; 8D7E 85 AC .. + bcs L8D84 ; 8D80 B0 02 .. + dec $AD ; 8D82 C6 AD .. +L8D84: sec ; 8D84 38 8 + lda $AE ; 8D85 A5 AE .. + sbc #$28 ; 8D87 E9 28 .( + sta $AE ; 8D89 85 AE .. + bcs L8D8F ; 8D8B B0 02 .. + dec $AF ; 8D8D C6 AF .. +L8D8F: dec $AB ; 8D8F C6 AB .. + bne L8D75 ; 8D91 D0 E2 .. + tya ; 8D93 98 . + sta ($AE),y ; 8D94 91 AE .. + rts ; 8D96 60 ` + +; ---------------------------------------------------------------------------- + brk ; 8D97 00 . + brk ; 8D98 00 . + brk ; 8D99 00 . + brk ; 8D9A 00 . + brk ; 8D9B 00 . + brk ; 8D9C 00 . + brk ; 8D9D 00 . + brk ; 8D9E 00 . + brk ; 8D9F 00 . +L8DA0: lda level ; 8DA0 AD F6 06 ... + cmp #$0B ; 8DA3 C9 0B .. + beq L8DAA ; 8DA5 F0 03 .. + jmp afterlife ; 8DA7 4C 00 96 L.. + +; ---------------------------------------------------------------------------- +L8DAA: jsr well_done_screen ; 8DAA 20 00 BC .. + lda #$04 ; 8DAD A9 04 .. + sta $0688 ; 8DAF 8D 88 06 ... + jsr player_scores_screen ; 8DB2 20 80 8B .. + jmp afterlife ; 8DB5 4C 00 96 L.. + +; ---------------------------------------------------------------------------- +; move player selected by X reg minus one off the left edge of the screen +hide_player: + lda #$02 ; 8DB8 A9 02 .. + sta HPOSM3,x ; 8DBA 9D 07 D0 ... + sta $067C,x ; 8DBD 9D 7C 06 .|. + lda #$00 ; 8DC0 A9 00 .. + sta $06EA,x ; 8DC2 9D EA 06 ... + rts ; 8DC5 60 ` + +; ---------------------------------------------------------------------------- +; store A to AUDCx (and its ?shadow?) +store_audc: + sta AUDC1,x ; 8DC6 9D 01 D2 ... + sta $0649,x ; 8DC9 9D 49 06 .I. + rts ; 8DCC 60 ` + +; ---------------------------------------------------------------------------- + brk ; 8DCD 00 . +; bonus -= 100; +decrement_time_bonus: + lda work_level_time_bonus ; 8DCE AD 91 07 ... + ora work_level_time_bonus+1 ; 8DD1 0D 92 07 ... + ora work_level_offs_19 ; 8DD4 0D 93 07 ... +; don't decrement if bonus == 0 +check_bonus_0: + beq dec_done ; 8DD7 F0 20 . + lda work_level_time_bonus ; 8DD9 AD 91 07 ... + sec ; 8DDC 38 8 + sbc #$64 ; 8DDD E9 64 .d + sta work_level_time_bonus ; 8DDF 8D 91 07 ... + bcs bonus_lt_256 ; 8DE2 B0 03 .. + dec work_level_time_bonus+1 ; 8DE4 CE 92 07 ... +bonus_lt_256: + jsr L800F ; 8DE7 20 0F 80 .. + lda #$FA ; 8DEA A9 FA .. + sta sfx_slot_tempo ; 8DEC 8D 3E 06 .>. + lda #$8D ; 8DEF A9 8D .. + sta sfx_slot_timer ; 8DF1 8D 3F 06 .?. + lda #$07 ; 8DF4 A9 07 .. + jsr L8003 ; 8DF6 20 03 80 .. +dec_done: + rts ; 8DF9 60 ` + +; ---------------------------------------------------------------------------- +data_8dfa: + .byte $01,$A5,$00,$18,$03,$00 ; 8DFA 01 A5 00 18 03 00 ...... +; ---------------------------------------------------------------------------- +level_finished: + lda #$09 ; 8E00 A9 09 .. + sta player_speed ; 8E02 8D 24 06 .$. + sta $067F ; 8E05 8D 7F 06 ... + lda #$80 ; 8E08 A9 80 .. + sta $D5 ; 8E0A 85 D5 .. + jsr L800F ; 8E0C 20 0F 80 .. +; score += time_bonus; +add_time_bonus: + clc ; 8E0F 18 . + lda work_level_time_bonus ; 8E10 AD 91 07 ... + adc score ; 8E13 6D 00 07 m.. + sta score ; 8E16 8D 00 07 ... + lda work_level_time_bonus+1 ; 8E19 AD 92 07 ... + adc score+1 ; 8E1C 6D 01 07 m.. + sta score+1 ; 8E1F 8D 01 07 ... + bcc lt_64k ; 8E22 90 03 .. + inc score+2 ; 8E24 EE 02 07 ... +lt_64k: lda #$00 ; 8E27 A9 00 .. + sta AUDF1 ; 8E29 8D 00 D2 ... + sta $D5 ; 8E2C 85 D5 .. + sta AUDC1 ; 8E2E 8D 01 D2 ... + sta jiffy_timer_1 ; 8E31 8D 1A 06 ... + sta playing_level ; 8E34 8D 27 06 .'. + jsr L800C ; 8E37 20 0C 80 .. +; 533ms ntsc, 640ms pal +wait_32_jiffies: + lda jiffy_timer_1 ; 8E3A AD 1A 06 ... + cmp #$20 ; 8E3D C9 20 . + bne wait_32_jiffies ; 8E3F D0 F9 .. +; pick random sound effect between 4 and 7 +pick_random_music: + lda RANDOM ; 8E41 AD 0A D2 ... + and #$03 ; 8E44 29 03 ). + clc ; 8E46 18 . + adc #$04 ; 8E47 69 04 i. + jsr cue_music_jv ; 8E49 20 18 80 .. +L8E4C: lda $0640 ; 8E4C AD 40 06 .@. + ora $0642 ; 8E4F 0D 42 06 .B. + ora $0644 ; 8E52 0D 44 06 .D. + ora sfx_slot_duration ; 8E55 0D 46 06 .F. + bne L8E4C ; 8E58 D0 F2 .. + sta jiffy_timer_1 ; 8E5A 8D 1A 06 ... +L8E5D: lda jiffy_timer_1 ; 8E5D AD 1A 06 ... + cmp #$40 ; 8E60 C9 40 .@ + bne L8E5D ; 8E62 D0 F9 .. + jmp end_of_level_bonus ; 8E64 4C 00 B8 L.. + +; ---------------------------------------------------------------------------- + brk ; 8E67 00 . + brk ; 8E68 00 . + lda $0622 ; 8E69 AD 22 06 .". + beq L8E75 ; 8E6C F0 07 .. + lda $0623 ; 8E6E AD 23 06 .#. + cmp #$02 ; 8E71 C9 02 .. + bne L8E76 ; 8E73 D0 01 .. +L8E75: rts ; 8E75 60 ` + +; ---------------------------------------------------------------------------- +L8E76: ldx #$FF ; 8E76 A2 FF .. +L8E78: inx ; 8E78 E8 . + cpx work_level_bullet_chance ; 8E79 EC 8B 07 ... + beq L8E75 ; 8E7C F0 F7 .. + lda $0756,x ; 8E7E BD 56 07 .V. + bne L8EB9 ; 8E81 D0 36 .6 + inc $0756,x ; 8E83 FE 56 07 .V. +L8E86: lda RANDOM ; 8E86 AD 0A D2 ... + and #$03 ; 8E89 29 03 ). + beq L8E86 ; 8E8B F0 F9 .. + tay ; 8E8D A8 . + lda RANDOM ; 8E8E AD 0A D2 ... + sta $069B,x ; 8E91 9D 9B 06 ... + sta $069F,x ; 8E94 9D 9F 06 ... + lda L8F42,y ; 8E97 B9 42 8F .B. + beq L8E9F ; 8E9A F0 03 .. + sta $069B,x ; 8E9C 9D 9B 06 ... +L8E9F: lda L8F45,y ; 8E9F B9 45 8F .E. + beq L8EA7 ; 8EA2 F0 03 .. + sta $069F,x ; 8EA4 9D 9F 06 ... +L8EA7: lda RANDOM ; 8EA7 AD 0A D2 ... + and #$03 ; 8EAA 29 03 ). + tay ; 8EAC A8 . + lda L8F49,y ; 8EAD B9 49 8F .I. + sta $075A,x ; 8EB0 9D 5A 07 .Z. + lda L8F4D,y ; 8EB3 B9 4D 8F .M. + sta $075E,x ; 8EB6 9D 5E 07 .^. +L8EB9: cmp #$02 ; 8EB9 C9 02 .. + beq L8F11 ; 8EBB F0 54 .T + lda $069B,x ; 8EBD BD 9B 06 ... + sec ; 8EC0 38 8 + sbc #$03 ; 8EC1 E9 03 .. + cmp $067E ; 8EC3 CD 7E 06 .~. + beq L8ED6 ; 8EC6 F0 0E .. + lda $069F,x ; 8EC8 BD 9F 06 ... + sec ; 8ECB 38 8 + sbc #$04 ; 8ECC E9 04 .. + cmp $0683 ; 8ECE CD 83 06 ... + beq L8EE4 ; 8ED1 F0 11 .. + jmp L8F11 ; 8ED3 4C 11 8F L.. + +; ---------------------------------------------------------------------------- +L8ED6: ldy #$00 ; 8ED6 A0 00 .. + lda $069F,x ; 8ED8 BD 9F 06 ... + cmp $0683 ; 8EDB CD 83 06 ... + bcs L8EEF ; 8EDE B0 0F .. + iny ; 8EE0 C8 . + jmp L8EEF ; 8EE1 4C EF 8E L.. + +; ---------------------------------------------------------------------------- +L8EE4: ldy #$02 ; 8EE4 A0 02 .. + lda $069B,x ; 8EE6 BD 9B 06 ... + cmp $067E ; 8EE9 CD 7E 06 .~. + bcs L8EEF ; 8EEC B0 01 .. + iny ; 8EEE C8 . +L8EEF: lda L8F51,y ; 8EEF B9 51 8F .Q. + sta $075A,x ; 8EF2 9D 5A 07 .Z. + lda L8F55,y ; 8EF5 B9 55 8F .U. + sta $075E,x ; 8EF8 9D 5E 07 .^. + lda #$59 ; 8EFB A9 59 .Y + sta sfx_slot_tempo ; 8EFD 8D 3E 06 .>. + lda #$8F ; 8F00 A9 8F .. + sta sfx_slot_timer ; 8F02 8D 3F 06 .?. + txa ; 8F05 8A . + pha ; 8F06 48 H + lda #$02 ; 8F07 A9 02 .. + jsr L8003 ; 8F09 20 03 80 .. + pla ; 8F0C 68 h + tax ; 8F0D AA . + inc $0756,x ; 8F0E FE 56 07 .V. +L8F11: lda $069B,x ; 8F11 BD 9B 06 ... + clc ; 8F14 18 . + adc $075A,x ; 8F15 7D 5A 07 }Z. + cmp #$03 ; 8F18 C9 03 .. + bcc code_8f38 ; 8F1A 90 1C .. + cmp #$FD ; 8F1C C9 FD .. + bcs code_8f38 ; 8F1E B0 18 .. + sta $069B,x ; 8F20 9D 9B 06 ... + lda $069F,x ; 8F23 BD 9F 06 ... + clc ; 8F26 18 . + adc $075E,x ; 8F27 7D 5E 07 }^. + cmp #$03 ; 8F2A C9 03 .. + bcc code_8f38 ; 8F2C 90 0A .. + cmp #$CE ; 8F2E C9 CE .. + bcs code_8f38 ; 8F30 B0 06 .. + sta $069F,x ; 8F32 9D 9F 06 ... + jmp L8E78 ; 8F35 4C 78 8E Lx. + +; ---------------------------------------------------------------------------- +code_8f38: + lda #$00 ; 8F38 A9 00 .. + sta $0756,x ; 8F3A 9D 56 07 .V. + sta $069B,x ; 8F3D 9D 9B 06 ... +L8F42 := * + 2 + jmp L8E78 ; 8F40 4C 78 8E Lx. + +; ---------------------------------------------------------------------------- +data_8f43: + .byte $04,$FC ; 8F43 04 FC .. +L8F45: .byte $00,$00,$00,$04 ; 8F45 00 00 00 04 .... +L8F49: .byte $FF,$00,$01,$00 ; 8F49 FF 00 01 00 .... +L8F4D: .byte $00,$FF,$00,$01 ; 8F4D 00 FF 00 01 .... +L8F51: .byte $00,$00,$FD,$03 ; 8F51 00 00 FD 03 .... +L8F55: .byte $FD,$03,$00,$00,$01,$8E,$00,$14 ; 8F55 FD 03 00 00 01 8E 00 14 ........ + .byte $02,$01,$8B,$00,$14,$03,$01,$88 ; 8F5D 02 01 8B 00 14 03 01 88 ........ + .byte $00,$14,$05,$01,$85,$00,$14,$07 ; 8F65 00 14 05 01 85 00 14 07 ........ + .byte $01,$82,$00,$14,$09,$00 ; 8F6D 01 82 00 14 09 00 ...... +; ---------------------------------------------------------------------------- +; did any missile hit a player, or did players 2 or 3 hit a player... +check_collisions_1: + lda collision_save+14 ; 8F73 AD BE 06 ... +L8F76: ora collision_save+15 ; 8F76 0D BF 06 ... +L8F79: ora collision_save+8 ; 8F79 0D B8 06 ... + ora collision_save+9 ; 8F7C 0D B9 06 ... + ora collision_save+10 ; 8F7F 0D BA 06 ... + ora collision_save+11 ; 8F82 0D BB 06 ... + and #$01 ; 8F85 29 01 ). + beq L8F91 ; 8F87 F0 08 .. + lda $0623 ; 8F89 AD 23 06 .#. + bne L8F91 ; 8F8C D0 03 .. + inc $0623 ; 8F8E EE 23 06 .#. +L8F91: rts ; 8F91 60 ` + +; ---------------------------------------------------------------------------- +; setup to play whichever music is in A reg, using 5-byte sfx stuct (a music is a pair of sfx played simultaneously) +cue_music: + sta $D6 ; 8F92 85 D6 .. + asl a ; 8F94 0A . + asl a ; 8F95 0A . + clc ; 8F96 18 . + adc $D6 ; 8F97 65 D6 e. + sta $D6 ; 8F99 85 D6 .. +; y = a * 5; // offset into mus_struct_table +set_y: tay ; 8F9B A8 . + lda mus00_addr1,y ; 8F9C B9 C3 8F ... + sta sfx_ptr ; 8F9F 8D 3C 06 .<. + lda mus00_addr1+1,y ; 8FA2 B9 C4 8F ... + sta sfx_ptr+1 ; 8FA5 8D 3D 06 .=. + lda mus00_len_or_tempo,y ; 8FA8 B9 C7 8F ... + jsr cue_sfx_jv ; 8FAB 20 06 80 .. + ldy $D6 ; 8FAE A4 D6 .. + lda mus00_addr2,y ; 8FB0 B9 C5 8F ... + sta sfx_ptr ; 8FB3 8D 3C 06 .<. + lda mus00_addr2+1,y ; 8FB6 B9 C6 8F ... + sta sfx_ptr+1 ; 8FB9 8D 3D 06 .=. + lda mus00_len_or_tempo,y ; 8FBC B9 C7 8F ... + jsr cue_sfx_jv ; 8FBF 20 06 80 .. + rts ; 8FC2 60 ` + +; ---------------------------------------------------------------------------- +; aka mus_struct_table, 5 bytes per entry +mus00_addr1: + .addr sfx13 ; 8FC3 D0 BF .. +mus00_addr2: + .addr sfx14 ; 8FC5 EA BF .. +; ---------------------------------------------------------------------------- +mus00_len_or_tempo: + .byte $10 ; 8FC7 10 . +; ---------------------------------------------------------------------------- +mus01_addr1: + .addr sfx12 ; 8FC8 BE BF .. +mus01_addr2: + .addr empty_music_entry ; 8FCA FF 8F .. +; ---------------------------------------------------------------------------- +mus01_len_or_tempo: + .byte $07 ; 8FCC 07 . +; ---------------------------------------------------------------------------- +; end of game tune +mus02_addr1: + .addr sfx02 ; 8FCD 8D BE .. +mus02_addr2: + .addr sfx03 ; 8FCF AF BE .. +; ---------------------------------------------------------------------------- +mus02_len_or_tempo: + .byte $10 ; 8FD1 10 . +; ---------------------------------------------------------------------------- +mus03_addr1: + .addr sfx01 ; 8FD2 25 BE %. +mus03_addr2: + .addr sfx00 ; 8FD4 F2 BD .. +; ---------------------------------------------------------------------------- +mus03_len_or_tempo: + .byte $10 ; 8FD6 10 . +; ---------------------------------------------------------------------------- +mus04_addr1: + .addr sfx04 ; 8FD7 D5 BE .. +mus04_addr2: + .addr sfx05 ; 8FD9 ED BE .. +; ---------------------------------------------------------------------------- +mus04_len_or_tempo: + .byte $10 ; 8FDB 10 . +; ---------------------------------------------------------------------------- +mus05_addr1: + .addr sfx06 ; 8FDC 14 BF .. +mus05_addr2: + .addr sfx07 ; 8FDE 30 BF 0. +; ---------------------------------------------------------------------------- +mus05_len_or_tempo: + .byte $10 ; 8FE0 10 . +; ---------------------------------------------------------------------------- +mus06_addr1: + .addr sfx08 ; 8FE1 4A BF J. +mus06_addr2: + .addr sfx09 ; 8FE3 60 BF `. +; ---------------------------------------------------------------------------- +mus06_len_or_tempo: + .byte $10 ; 8FE5 10 . +; ---------------------------------------------------------------------------- +mus07_addr1: + .addr sfx10 ; 8FE6 84 BF .. +mus07_addr2: + .addr sfx11 ; 8FE8 A6 BF .. +; ---------------------------------------------------------------------------- +mus07_len_or_tempo: + .byte $10 ; 8FEA 10 . +; ---------------------------------------------------------------------------- +; tune that plays while level is being drawn +mus08_addr1: + .addr sfx15 ; 8FEB BC BA .. +mus08_addr2: + .addr sfx16 ; 8FED EA BA .. +; ---------------------------------------------------------------------------- +mus08_len_or_tempo: + .byte $10 ; 8FEF 10 . +; ---------------------------------------------------------------------------- +mus09_addr1: + .addr empty_music_entry ; 8FF0 FF 8F .. +mus09_addr2: + .addr empty_music_entry ; 8FF2 FF 8F .. +; ---------------------------------------------------------------------------- +mus09_len_or_tempo: + .byte $01 ; 8FF4 01 . +; ---------------------------------------------------------------------------- +mus10_addr1: + .addr empty_music_entry ; 8FF5 FF 8F .. +mus10_addr2: + .addr empty_music_entry ; 8FF7 FF 8F .. +; ---------------------------------------------------------------------------- +mus10_len_or_tempo: + .byte $01 ; 8FF9 01 . +; ---------------------------------------------------------------------------- +mus11_addr1: + .addr empty_music_entry ; 8FFA FF 8F .. +mus11_addr2: + .addr empty_music_entry ; 8FFC FF 8F .. +; ---------------------------------------------------------------------------- +mus11_len_or_tempo: + .byte $01 ; 8FFE 01 . +; empty music table entries point here +empty_music_entry: + .byte $00 ; 8FFF 00 . +; ---------------------------------------------------------------------------- +; called from cart_entry_point routine +init_game: + lda #$00 ; 9000 A9 00 .. + sta option_key_enabled ; 9002 8D C6 06 ... + sta start_key_enabled ; 9005 8D C8 06 ... + nop ; 9008 EA . + nop ; 9009 EA . + nop ; 900A EA . + nop ; 900B EA . +; this entry point doesn't disable start/option keys +reinit_game: + jsr enable_joystick_jv ; 900C 20 1B 80 .. + lda #$00 ; 900F A9 00 .. + sta $A0 ; 9011 85 A0 .. + sta select_key_vec ; 9013 8D C2 06 ... + lda #$94 ; 9016 A9 94 .. + sta select_key_vec+1 ; 9018 8D C3 06 ... +; set select key vector to ask_num_players at $9400, enable select key +setup_select_key_vec: + sta select_key_enabled ; 901B 8D C7 06 ... + ldx #$08 ; 901E A2 08 .. + lda #$FF ; 9020 A9 FF .. +; seems to try to write $FF bytes to ROM that already contains $FF's (it's the solid block character in the font). possibly left over from early development before conversion to cartridge +try_to_write_rom: + sta block_char_minus_one,x ; 9022 9D 0F 9E ... + dex ; 9025 CA . + bne try_to_write_rom ; 9026 D0 FA .. + ldx #$C0 ; 9028 A2 C0 .. +copy_title_screen: + lda title_screen_data_minus_one,x ; 902A BD CE 91 ... + sta $2FFF,x ; 902D 9D FF 2F ../ + dex ; 9030 CA . + bne copy_title_screen ; 9031 D0 F7 .. + lda #$46 ; 9033 A9 46 .F + sta COLOR1 ; 9035 8D C5 02 ... + lda #$C4 ; 9038 A9 C4 .. + sta COLOR2 ; 903A 8D C6 02 ... + lda #$00 ; 903D A9 00 .. + sta $9C ; 903F 85 9C .. + sta $9D ; 9041 85 9D .. + sta COLOR3 ; 9043 8D C7 02 ... + lda #$B3 ; 9046 A9 B3 .. + sta dlist_shadow_lo ; 9048 8D AC 06 ... + lda #$91 ; 904B A9 91 .. + sta dlist_shadow_hi ; 904D 8D AD 06 ... + lda #$00 ; 9050 A9 00 .. + sta HSCROL ; 9052 8D 04 D4 ... + lda #$A5 ; 9055 A9 A5 .. + sta AUDC1 ; 9057 8D 01 D2 ... + lda #$ED ; 905A A9 ED .. + sta dli_vec_shadow_lo ; 905C 8D AE 06 ... + lda #$92 ; 905F A9 92 .. + sta dli_vec_shadow_hi ; 9061 8D AF 06 ... + lda #$3C ; 9064 A9 3C .< + sta work_level_sub0 ; 9066 8D 82 07 ... + lda #$91 ; 9069 A9 91 .. + sta work_level_sub0+1 ; 906B 8D 83 07 ... +; some ISR is writing to $9c... +wait_until_9c_is_0e: + lda $9C ; 906E A5 9C .. + cmp #$0E ; 9070 C9 0E .. + bne wait_until_9c_is_0e ; 9072 D0 FA .. + lda #$E6 ; 9074 A9 E6 .. + sta work_level_sub0 ; 9076 8D 82 07 ... + lda #$06 ; 9079 A9 06 .. + sta work_level_sub0+1 ; 907B 8D 83 07 ... + lda #$00 ; 907E A9 00 .. + sta sfx_ptr ; 9080 8D 3C 06 .<. + lda #$93 ; 9083 A9 93 .. + sta sfx_ptr+1 ; 9085 8D 3D 06 .=. + jsr cue_sfx_jv ; 9088 20 06 80 .. + lda #$51 ; 908B A9 51 .Q + sta sfx_ptr ; 908D 8D 3C 06 .<. + lda #$93 ; 9090 A9 93 .. + sta sfx_ptr+1 ; 9092 8D 3D 06 .=. + jsr cue_sfx_jv ; 9095 20 06 80 .. + lda #$9C ; 9098 A9 9C .. + sta sfx_ptr ; 909A 8D 3C 06 .<. + lda #$93 ; 909D A9 93 .. + sta sfx_ptr+1 ; 909F 8D 3D 06 .=. + jsr cue_sfx_jv ; 90A2 20 06 80 .. + lda #$D7 ; 90A5 A9 D7 .. + sta sfx_ptr ; 90A7 8D 3C 06 .<. + lda #$93 ; 90AA A9 93 .. + sta sfx_ptr+1 ; 90AC 8D 3D 06 .=. + jsr cue_sfx_jv ; 90AF 20 06 80 .. + lda #$00 ; 90B2 A9 00 .. + sta $9C ; 90B4 85 9C .. + sta $9D ; 90B6 85 9D .. + lda #$07 ; 90B8 A9 07 .. + sta $B9 ; 90BA 85 B9 .. + lda #$72 ; 90BC A9 72 .r + sta work_level_sub0 ; 90BE 8D 82 07 ... + lda #$91 ; 90C1 A9 91 .. + sta work_level_sub0+1 ; 90C3 8D 83 07 ... + ldx #$FF ; 90C6 A2 FF .. +; lot going on here, not understood yet +funky_init_loop: + inx ; 90C8 E8 . + cpx #$02 ; 90C9 E0 02 .. + beq funky_init_loop ; 90CB F0 FB .. + cpx #$05 ; 90CD E0 05 .. + beq L910A ; 90CF F0 39 .9 + ldy L92A3,x ; 90D1 BC A3 92 ... +L90D4: lda $0649,y ; 90D4 B9 49 06 .I. + and #$0F ; 90D7 29 0F ). + beq L90D4 ; 90D9 F0 F9 .. + lda #$00 ; 90DB A9 00 .. + sta $066E,x ; 90DD 9D 6E 06 .n. + lda #$9D ; 90E0 A9 9D .. + sta $0673,x ; 90E2 9D 73 06 .s. + lda #$0A ; 90E5 A9 0A .. + sta $0678,x ; 90E7 9D 78 06 .x. + lda #$01 ; 90EA A9 01 .. + sta $0687,x ; 90EC 9D 87 06 ... + lda #$5C ; 90EF A9 5C .\ + sta $0682,x ; 90F1 9D 82 06 ... + lda L929E,x ; 90F4 BD 9E 92 ... + sta $067D,x ; 90F7 9D 7D 06 .}. + sta $0669,x ; 90FA 9D 69 06 .i. + ldy L92E8,x ; 90FD BC E8 92 ... + lda #$0F ; 9100 A9 0F .. + sta PCOLR0,y ; 9102 99 C0 02 ... + inc $9C ; 9105 E6 9C .. + jmp funky_init_loop ; 9107 4C C8 90 L.. + +; ---------------------------------------------------------------------------- +L910A: lda $9D ; 910A A5 9D .. + cmp #$1D ; 910C C9 1D .. + beq try_to_write_rom_again ; 910E F0 16 .. + cmp #$20 ; 9110 C9 20 . + bcc L910A ; 9112 90 F6 .. + lda #$E6 ; 9114 A9 E6 .. + sta work_level_sub0 ; 9116 8D 82 07 ... + lda #$06 ; 9119 A9 06 .. + sta work_level_sub0+1 ; 911B 8D 83 07 ... + lda #$08 ; 911E A9 08 .. + sta COLOR0 ; 9120 8D C4 02 ... + jmp LB96B ; 9123 4C 6B B9 Lk. + +; ---------------------------------------------------------------------------- +; see comment at try_to_write_rom +try_to_write_rom_again: + ldx #$08 ; 9126 A2 08 .. +L9128: lda L9133,x ; 9128 BD 33 91 .3. + sta block_char_minus_one,x ; 912B 9D 0F 9E ... + dex ; 912E CA . + bne L9128 ; 912F D0 F7 .. +L9133 := * + 2 + jmp L910A ; 9131 4C 0A 91 L.. + +; ---------------------------------------------------------------------------- +data_9134: + .byte $BF,$BF,$CF,$EF,$E7,$DB ; 9134 BF BF CF EF E7 DB ...... +; ---------------------------------------------------------------------------- +; this might be more data for the above table instead of code? +maybe_data: + cmp LADBF,y ; 913A D9 BF AD ... +; this probably really is code +probly_code: + rol a ; 913D 2A * + asl $8D ; 913E 06 8D .. + cpy $02 ; 9140 C4 02 .. + ldy $9C ; 9142 A4 9C .. + cpy #$07 ; 9144 C0 07 .. + beq L9164 ; 9146 F0 1C .. + clc ; 9148 18 . + lda $9D ; 9149 A5 9D .. + adc #$04 ; 914B 69 04 i. + sta $9D ; 914D 85 9D .. + beq L9164 ; 914F F0 13 .. + sta AUDF1 ; 9151 8D 00 D2 ... +L9154: lsr a ; 9154 4A J + lsr a ; 9155 4A J + lsr a ; 9156 4A J + lsr a ; 9157 4A J + ora #$60 ; 9158 09 60 .` + sta COLOR3 ; 915A 8D C7 02 ... + lda L928F,y ; 915D B9 8F 92 ... + sta $3045,y ; 9160 99 45 30 .E0 + rts ; 9163 60 ` + +; ---------------------------------------------------------------------------- +L9164: lda $3045,y ; 9164 B9 45 30 .E0 + and #$3F ; 9167 29 3F )? + sta $3045,y ; 9169 99 45 30 .E0 + inc $9C ; 916C E6 9C .. + iny ; 916E C8 . + jmp L9154 ; 916F 4C 54 91 LT. + +; ---------------------------------------------------------------------------- + lda $062A ; 9172 AD 2A 06 .*. + sta COLOR0 ; 9175 8D C4 02 ... + lda $9C ; 9178 A5 9C .. + cmp #$04 ; 917A C9 04 .. + beq L917F ; 917C F0 01 .. +L917E: rts ; 917E 60 ` + +; ---------------------------------------------------------------------------- +L917F: lda $0649 ; 917F AD 49 06 .I. + and #$0F ; 9182 29 0F ). + bne L917E ; 9184 D0 F8 .. + inc $B9 ; 9186 E6 B9 .. + lda $B9 ; 9188 A5 B9 .. + and #$0F ; 918A 29 0F ). + sta $B9 ; 918C 85 B9 .. + bne L917E ; 918E D0 EE .. + ldx $9D ; 9190 A6 9D .. + ldy #$FF ; 9192 A0 FF .. +L9194: iny ; 9194 C8 . + cpy #$02 ; 9195 C0 02 .. + beq L9194 ; 9197 F0 FB .. + cpy #$05 ; 9199 C0 05 .. + beq L91B0 ; 919B F0 13 .. + lda L92C8,x ; 919D BD C8 92 ... + sta $0687,y ; 91A0 99 87 06 ... + clc ; 91A3 18 . + lda L92A8,x ; 91A4 BD A8 92 ... + adc $067D,y ; 91A7 79 7D 06 y}. + sta $067D,y ; 91AA 99 7D 06 .}. + jmp L9194 ; 91AD 4C 94 91 L.. + +; ---------------------------------------------------------------------------- +L91B0: inc $9D ; 91B0 E6 9D .. + rts ; 91B2 60 ` + +; ---------------------------------------------------------------------------- +; display list for title screen +title_display_list: + .byte $70,$70,$70,$47,$00,$30,$06,$60 ; 91B3 70 70 70 47 00 30 06 60 pppG.0.` + .byte $60,$70,$70,$70,$70,$17,$17,$97 ; 91BB 60 70 70 70 70 17 17 97 `pppp... + .byte $70,$70,$70,$70,$70,$70,$70,$02 ; 91C3 70 70 70 70 70 70 70 02 ppppppp. + .byte $02,$41,$B3 ; 91CB 02 41 B3 .A. +title_screen_data_minus_one: + .byte $91 ; 91CE 91 . +; title screen data +title_screen_data: + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 91CF 00 00 00 00 00 00 00 00 ........ + .byte $65,$70,$79,$78,$00,$00,$00,$00 ; 91D7 65 70 79 78 00 00 00 00 epyx.... + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 91DF 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$70,$72,$65,$73,$65,$6E ; 91E7 00 00 70 72 65 73 65 6E ..presen + .byte $74,$73,$00,$00,$00,$00,$00,$00 ; 91EF 74 73 00 00 00 00 00 00 ts...... + .byte $00,$00,$00,$82,$82,$82,$82,$82 ; 91F7 00 00 00 82 82 82 82 82 ........ + .byte $82,$82,$82,$82,$82,$82,$82,$82 ; 91FF 82 82 82 82 82 82 82 82 ........ + .byte $82,$82,$82,$82,$82,$00,$00,$00 ; 9207 82 82 82 82 82 00 00 00 ........ + .byte $00,$00,$00,$82,$00,$00,$00,$00 ; 920F 00 00 00 82 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 9217 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$82,$00,$00,$00 ; 921F 00 00 00 00 82 00 00 00 ........ + .byte $00,$00,$00,$82,$82,$82,$82,$82 ; 9227 00 00 00 82 82 82 82 82 ........ + .byte $82,$82,$82,$82,$82,$82,$82,$82 ; 922F 82 82 82 82 82 82 82 82 ........ + .byte $82,$82,$82,$82,$82,$00,$00,$00 ; 9237 82 82 82 82 82 00 00 00 ........ + .byte $40,$40,$40,$40,$40,$40,$40,$40 ; 923F 40 40 40 40 40 40 40 40 @@@@@@@@ + .byte $40,$40,$40,$40,$48,$63,$49,$40 ; 9247 40 40 40 40 48 63 49 40 @@@@HcI@ + .byte $51,$59,$58,$53,$40,$62,$79,$40 ; 924F 51 59 58 53 40 62 79 40 QYXS@by@ + .byte $65,$70,$79,$78,$40,$40,$40,$40 ; 9257 65 70 79 78 40 40 40 40 epyx@@@@ + .byte $40,$40,$40,$40,$40,$40,$40,$40 ; 925F 40 40 40 40 40 40 40 40 @@@@@@@@ + .byte $40,$40,$40,$40,$40,$40,$40,$40 ; 9267 40 40 40 40 40 40 40 40 @@@@@@@@ + .byte $63,$72,$65,$61,$74,$65,$64,$40 ; 926F 63 72 65 61 74 65 64 40 created@ + .byte $62,$79,$5A,$40,$72,$61,$6E,$64 ; 9277 62 79 5A 40 72 61 6E 64 byZ@rand + .byte $79,$40,$67,$6C,$6F,$76,$65,$72 ; 927F 79 40 67 6C 6F 76 65 72 y@glover + .byte $40,$40,$40,$40,$40,$40,$40,$40 ; 9287 40 40 40 40 40 40 40 40 @@@@@@@@ +L928F: .byte $EA,$F5,$ED,$F0,$ED,$E1,$EE,$00 ; 928F EA F5 ED F0 ED E1 EE 00 ........ + .byte $EA,$F5,$EE,$E9,$EF,$F2,$00 ; 9297 EA F5 EE E9 EF F2 00 ....... +L929E: .byte $6A,$76,$00,$82,$8E ; 929E 6A 76 00 82 8E jv... +L92A3: .byte $00,$02,$00,$04,$06 ; 92A3 00 02 00 04 06 ..... +L92A8: .byte $02,$02,$FE,$FE,$FE,$FE,$02,$02 ; 92A8 02 02 FE FE FE FE 02 02 ........ + .byte $02,$02,$02,$02,$FE,$FE,$FE,$FE ; 92B0 02 02 02 02 FE FE FE FE ........ + .byte $FE,$FE,$FE,$FE,$02,$02,$02,$02 ; 92B8 FE FE FE FE 02 02 02 02 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 92C0 00 00 00 00 00 00 00 00 ........ +L92C8: .byte $08,$09,$08,$09,$0C,$0D,$0C,$0D ; 92C8 08 09 08 09 0C 0D 0C 0D ........ + .byte $08,$06,$09,$06,$08,$10,$09,$10 ; 92D0 08 06 09 06 08 10 09 10 ........ + .byte $0C,$06,$0D,$06,$0C,$11,$0D,$11 ; 92D8 0C 06 0D 06 0C 11 0D 11 ........ + .byte $12,$13,$14,$15,$04,$04,$04,$04 ; 92E0 12 13 14 15 04 04 04 04 ........ +L92E8: .byte $07,$00,$00,$02,$03,$48,$A9,$94 ; 92E8 07 00 00 02 03 48 A9 94 .....H.. + .byte $8D,$0A,$D4,$8D,$18,$D0,$A9,$CA ; 92F0 8D 0A D4 8D 18 D0 A9 CA ........ + .byte $8D,$17,$D0,$68,$40,$00,$00,$00 ; 92F8 8D 17 D0 68 40 00 00 00 ...h@... + .byte $01,$A0,$02,$0A,$80,$01,$A5,$02 ; 9300 01 A0 02 0A 80 01 A5 02 ........ + .byte $3C,$20,$79,$20,$51,$20,$5B,$08 ; 9308 3C 20 79 20 51 20 5B 08 < y Q [. + .byte $60,$08,$6C,$08,$5B,$08,$60,$10 ; 9310 60 08 6C 08 5B 08 60 10 `.l.[.`. + .byte $79,$10,$5B,$08,$60,$08,$6C,$08 ; 9318 79 10 5B 08 60 08 6C 08 y.[.`.l. + .byte $5B,$08,$60,$10,$79,$10,$79,$20 ; 9320 5B 08 60 10 79 10 79 20 [.`.y.y + .byte $79,$20,$79,$08,$6C,$08,$60,$08 ; 9328 79 20 79 08 6C 08 60 08 y y.l.`. + .byte $51,$08,$3C,$20,$3C,$08,$51,$08 ; 9330 51 08 3C 20 3C 08 51 08 Q.< <.Q. + .byte $60,$08,$51,$08,$79,$20,$79,$08 ; 9338 60 08 51 08 79 20 79 08 `.Q.y y. + .byte $6C,$08,$60,$08,$5B,$08,$51,$08 ; 9340 6C 08 60 08 5B 08 51 08 l.`.[.Q. + .byte $48,$08,$40,$08,$51,$08,$3C,$40 ; 9348 48 08 40 08 51 08 3C 40 H.@.Q.<@ + .byte $00,$01,$A0,$02,$0A,$60,$01,$A3 ; 9350 00 01 A0 02 0A 60 01 A3 .....`.. + .byte $02,$51,$40,$79,$10,$A2,$10,$79 ; 9358 02 51 40 79 10 A2 10 79 .Q@y...y + .byte $10,$6C,$10,$79,$08,$A2,$08,$F3 ; 9360 10 6C 10 79 08 A2 08 F3 .l.y.... + .byte $10,$F3,$20,$79,$08,$A2,$08,$F3 ; 9368 10 F3 20 79 08 A2 08 F3 .. y.... + .byte $10,$A2,$10,$79,$10,$A2,$20,$F3 ; 9370 10 A2 10 79 10 A2 20 F3 ...y.. . + .byte $20,$79,$10,$A2,$10,$79,$10,$A2 ; 9378 20 79 10 A2 10 79 10 A2 y...y.. + .byte $10,$79,$10,$A2,$10,$F3,$10,$F3 ; 9380 10 79 10 A2 10 F3 10 F3 .y...... + .byte $10,$F3,$08,$D9,$08,$C1,$08,$B6 ; 9388 10 F3 08 D9 08 C1 08 B6 ........ + .byte $08,$A2,$08,$90,$08,$80,$08,$A2 ; 9390 08 A2 08 90 08 80 08 A2 ........ + .byte $08,$79,$40,$00,$01,$A0,$02,$0A ; 9398 08 79 40 00 01 A0 02 0A .y@..... + .byte $40,$01,$A4,$02,$60,$60,$01,$A0 ; 93A0 40 01 A4 02 60 60 01 A0 @...``.. + .byte $02,$0A,$10,$01,$A3,$02,$F3,$20 ; 93A8 02 0A 10 01 A3 02 F3 20 ....... + .byte $A2,$30,$A2,$10,$C1,$10,$02,$A6 ; 93B0 A2 30 A2 10 C1 10 02 A6 .0...... + .byte $93,$01,$01,$A0,$02,$0A,$10,$01 ; 93B8 93 01 01 A0 02 0A 10 01 ........ + .byte $A3,$02,$A2,$20,$A2,$20,$F3,$30 ; 93C0 A3 02 A2 20 A2 20 F3 30 ... . .0 + .byte $01,$A0,$02,$0A,$40,$01,$A4,$02 ; 93C8 01 A0 02 0A 40 01 A4 02 ....@... + .byte $79,$10,$A2,$10,$F3,$20,$00,$01 ; 93D0 79 10 A2 10 F3 20 00 01 y.... .. + .byte $A0,$02,$0A,$20,$01,$A4,$02,$79 ; 93D8 A0 02 0A 20 01 A4 02 79 ... ...y + .byte $78,$01,$A0,$02,$0A,$FF,$0A,$FF ; 93E0 78 01 A0 02 0A FF 0A FF x....... + .byte $0A,$40,$00,$00,$00,$00,$00,$00 ; 93E8 0A 40 00 00 00 00 00 00 .@...... + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 93F0 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 93F8 00 00 00 00 00 00 00 00 ........ +; ---------------------------------------------------------------------------- +ask_num_players: + ldx #$FF ; 9400 A2 FF .. + lda #$00 ; 9402 A9 00 .. + sta select_key_enabled ; 9404 8D C7 06 ... + sta level ; 9407 8D F6 06 ... + dec level ; 940A CE F6 06 ... +; clear area where NUMBER OF PLAYERS? will be displayed +anp_clear_loop: + sta $37FF,x ; 940D 9D FF 37 ..7 + dex ; 9410 CA . + bne anp_clear_loop ; 9411 D0 FA .. + jsr enable_joystick_jv ; 9413 20 1B 80 .. + ldx #$2C ; 9416 A2 2C ., +; copy NUMBER OF PLAYERS to screen RAM +anp_copy_loop: + lda numplayer_screen_data_minus_one,x; 9418 BD 9A 95 ... + sta $37FF,x ; 941B 9D FF 37 ..7 + dex ; 941E CA . + bne anp_copy_loop ; 941F D0 F7 .. +; X is now 0 +anp_loop_done: + stx $B7 ; 9421 86 B7 .. + stx $B8 ; 9423 86 B8 .. + stx randomizer_mode ; 9425 8E F3 06 ... + stx COLOR4 ; 9428 8E C8 02 ... + lda #$04 ; 942B A9 04 .. + sta HSCROL ; 942D 8D 04 D4 ... + sta $A0 ; 9430 85 A0 .. + lda #$1A ; 9432 A9 1A .. + sta COLOR3 ; 9434 8D C7 02 ... + lda #$96 ; 9437 A9 96 .. + sta COLOR2 ; 9439 8D C6 02 ... + lda #$C6 ; 943C A9 C6 .. + sta COLOR1 ; 943E 8D C5 02 ... + jsr init_page_7_jv ; 9441 20 24 80 $. +; set dlist shadow to point to numplayer_display_list +setup_numplayer_dlist: + lda #$5F ; 9444 A9 5F ._ + sta dlist_shadow_lo ; 9446 8D AC 06 ... + lda #$95 ; 9449 A9 95 .. + sta dlist_shadow_hi ; 944B 8D AD 06 ... +; set dli vector to point to num_player_dli_service +setup_numplayer_dli_sr: + lda #$78 ; 944E A9 78 .x + sta dli_vec_shadow_lo ; 9450 8D AE 06 ... + lda #$95 ; 9453 A9 95 .. + sta dli_vec_shadow_hi ; 9455 8D AF 06 ... +; we'll jump to $9489 aka option_key_handler when option key is pressed +setup_option_key_vec: + lda #$89 ; 9458 A9 89 .. + sta option_key_vec ; 945A 8D C0 06 ... + lda #$94 ; 945D A9 94 .. + sta option_key_vec+1 ; 945F 8D C1 06 ... + sta option_key_enabled ; 9462 8D C6 06 ... +; we'll jump to $94de aka get_player_speeds when start key is pressed +setup_start_key_vec: + lda #$DE ; 9465 A9 DE .. + sta start_key_vec ; 9467 8D C4 06 ... + lda #$94 ; 946A A9 94 .. + sta start_key_vec+1 ; 946C 8D C5 06 ... +; play sfx_select_key at $95f1 +play_select_key_sfx: + lda #$F1 ; 946F A9 F1 .. + sta sfx_ptr ; 9471 8D 3C 06 .<. + lda #$95 ; 9474 A9 95 .. + sta sfx_ptr+1 ; 9476 8D 3D 06 .=. + jsr cue_sfx_jv ; 9479 20 06 80 .. +; wait for sound to finish playing +wait_sfx: + lda sfx_slot_duration ; 947C AD 46 06 .F. + bne wait_sfx ; 947F D0 FB .. + lda #$01 ; 9481 A9 01 .. + sta start_key_enabled ; 9483 8D C8 06 ... +; initialization done, everything's done in interrupts from here on out +hang_main_thread: + jmp hang_main_thread ; 9486 4C 86 94 L.. + +; ---------------------------------------------------------------------------- +; called via option_key_vec when someone presses option +option_key_handler: + lda #$00 ; 9489 A9 00 .. + sta option_key_enabled ; 948B 8D C6 06 ... + lda $B8 ; 948E A5 B8 .. + clc ; 9490 18 . + adc #$01 ; 9491 69 01 i. + and #$03 ; 9493 29 03 ). + sta $B8 ; 9495 85 B8 .. + tay ; 9497 A8 . + lda number_names_0,y ; 9498 B9 DD 95 ... + sta $381D ; 949B 8D 1D 38 ..8 + lda number_names_1,y ; 949E B9 E1 95 ... + sta $381E ; 94A1 8D 1E 38 ..8 + lda number_names_2,y ; 94A4 B9 E5 95 ... + sta $381F ; 94A7 8D 1F 38 ..8 + lda number_names_3,y ; 94AA B9 E9 95 ... + sta $3820 ; 94AD 8D 20 38 . 8 + lda number_names_4,y ; 94B0 B9 ED 95 ... + sta $3821 ; 94B3 8D 21 38 .!8 + lda num_name_hscrol_table,y ; 94B6 B9 D9 95 ... + sta HSCROL ; 94B9 8D 04 D4 ... +play_opt_key_sfx: + lda #$B0 ; 94BC A9 B0 .. + sta sfx_ptr ; 94BE 8D 3C 06 .<. + lda #$8A ; 94C1 A9 8A .. + sta sfx_ptr+1 ; 94C3 8D 3D 06 .=. + jsr cue_sfx_jv ; 94C6 20 06 80 .. + lda #$00 ; 94C9 A9 00 .. + sta jiffy_timer_1 ; 94CB 8D 1A 06 ... +; wait until it's done playing +wait_opt_key_sfx: + lda jiffy_timer_1 ; 94CE AD 1A 06 ... + cmp #$08 ; 94D1 C9 08 .. + bcc wait_opt_key_sfx ; 94D3 90 F9 .. + sta option_key_enabled ; 94D5 8D C6 06 ... + sta start_key_enabled ; 94D8 8D C8 06 ... + jmp hang_main_thread ; 94DB 4C 86 94 L.. + +; ---------------------------------------------------------------------------- +; loop up to 4 times, ask PLAYER #n SPEED? and wait for number key press +get_player_speeds: + lda $B8 ; 94DE A5 B8 .. + sta $B9 ; 94E0 85 B9 .. + sta $06FF ; 94E2 8D FF 06 ... + sta number_of_players ; 94E5 8D F4 06 ... + lda #$00 ; 94E8 A9 00 .. + sta $B8 ; 94EA 85 B8 .. +; disable start and option keys +disable_start_opt: + sta option_key_enabled ; 94EC 8D C6 06 ... + sta start_key_enabled ; 94EF 8D C8 06 ... + sta $BA ; 94F2 85 BA .. + inc $B9 ; 94F4 E6 B9 .. + inc $BA ; 94F6 E6 BA .. + tay ; 94F8 A8 . +; copy PLAYER #n SPEED? to screen RAM +show_player_speed_prompt: + ldx #$00 ; 94F9 A2 00 .. +psprompt_loop: + lda player_x_speed,x ; 94FB BD C5 95 ... + sta $382C,y ; 94FE 99 2C 38 .,8 + inx ; 9501 E8 . + iny ; 9502 C8 . + cpx #$14 ; 9503 E0 14 .. + bne psprompt_loop ; 9505 D0 F4 .. + lda $BA ; 9507 A5 BA .. + sta current_player ; 9509 8D FE 06 ... + ora #$90 ; 950C 09 90 .. + inc $BA ; 950E E6 BA .. + sta $3821,y ; 9510 99 21 38 .!8 + dec $B9 ; 9513 C6 B9 .. + bne show_player_speed_prompt ; 9515 D0 E2 .. +; set select key vector to ask_num_players at $9400, enable select key +setup_select_key_vec_again: + lda #$00 ; 9517 A9 00 .. + sta select_key_vec ; 9519 8D C2 06 ... + lda #$94 ; 951C A9 94 .. + sta select_key_vec+1 ; 951E 8D C3 06 ... + sta select_key_enabled ; 9521 8D C7 06 ... + dec $BA ; 9524 C6 BA .. + ldy #$12 ; 9526 A0 12 .. + ldx #$00 ; 9528 A2 00 .. +; initialize speed to -1 +init_speed: + lda #$FF ; 952A A9 FF .. + sta speed_value ; 952C 8D F9 06 ... +; wait for keyboard IRQ handler to set a speed <= 8 +wait_for_speed: + lda speed_value ; 952F AD F9 06 ... + cmp #$09 ; 9532 C9 09 .. + bcs wait_for_speed ; 9534 B0 F9 .. + sta $0714,x ; 9536 9D 14 07 ... + pha ; 9539 48 H + clc ; 953A 18 . +; 11-byte per-player struct? +add_11_to_x: + txa ; 953B 8A . + adc #$0B ; 953C 69 0B i. + tax ; 953E AA . + pla ; 953F 68 h +; convert to ASCII digit +speed_to_ascii: + ora #$90 ; 9540 09 90 .. +; show it to the user +display_speed: + sta $382C,y ; 9542 99 2C 38 .,8 + tya ; 9545 98 . + clc ; 9546 18 . + adc #$14 ; 9547 69 14 i. + tay ; 9549 A8 . + inc $B8 ; 954A E6 B8 .. + dec $BA ; 954C C6 BA .. + bne init_speed ; 954E D0 DA .. + inc $06FF ; 9550 EE FF 06 ... + lda $06FF ; 9553 AD FF 06 ... + sta current_player ; 9556 8D FE 06 ... + inc current_player ; 9559 EE FE 06 ... + jmp afterlife ; 955C 4C 00 96 L.. + +; ---------------------------------------------------------------------------- +; display list for 'number of players' screen +numplayer_display_list: + .byte $70,$70,$70,$70,$47,$00,$38,$70 ; 955F 70 70 70 70 47 00 38 70 ppppG.8p + .byte $70,$97,$70,$70,$87,$70,$70,$87 ; 9567 70 97 70 70 87 70 70 87 p.pp.pp. + .byte $70,$70,$87,$70,$70,$07,$41,$5F ; 956F 70 70 87 70 70 07 41 5F pp.pp.A_ + .byte $95 ; 9577 95 . +; ---------------------------------------------------------------------------- +; DLI service routine, changes COLPF2, address gets stored in $6ae/$6af by code at $944e +num_player_dli_service: + pha ; 9578 48 H + lda $B7 ; 9579 A5 B7 .. + cmp $B8 ; 957B C5 B8 .. + sta WSYNC ; 957D 8D 0A D4 ... + bne L9592 ; 9580 D0 10 .. + lda $062A ; 9582 AD 2A 06 .*. + sta COLPF2 ; 9585 8D 18 D0 ... +L9588: inc $B7 ; 9588 E6 B7 .. + lda $B7 ; 958A A5 B7 .. + and #$03 ; 958C 29 03 ). + sta $B7 ; 958E 85 B7 .. + pla ; 9590 68 h + rti ; 9591 40 @ + +; ---------------------------------------------------------------------------- +L9592: lda COLOR2 ; 9592 AD C6 02 ... + sta COLPF2 ; 9595 8D 18 D0 ... +numplayer_screen_data_minus_one:= * + 2 ; 1-indexed loop copies from here+1 + jmp L9588 ; 9598 4C 88 95 L.. + +; ---------------------------------------------------------------------------- +; 'number of players?', gets copied to $3800, see option_key_handler +numplayer_screen_data: + .byte $00,$6E,$75,$6D,$62,$65,$72,$00 ; 959B 00 6E 75 6D 62 65 72 00 .number. + .byte $6F,$66,$00,$70,$6C,$61,$79,$65 ; 95A3 6F 66 00 70 6C 61 79 65 of.playe + .byte $72,$73,$5F,$00,$00,$00,$00,$00 ; 95AB 72 73 5F 00 00 00 00 00 rs_..... + .byte $00,$00,$00,$00,$00,$00,$EF,$EE ; 95B3 00 00 00 00 00 00 EF EE ........ + .byte $E5,$00,$00,$00,$00,$00,$00,$00 ; 95BB E5 00 00 00 00 00 00 00 ........ + .byte $00,$00 ; 95C3 00 00 .. +; ' PLAYER # SPEED? ' in PF2 color +player_x_speed: + .byte $00,$B0,$AC,$A1,$B9,$A5,$B2,$00 ; 95C5 00 B0 AC A1 B9 A5 B2 00 ........ + .byte $83,$80,$80,$B3,$B0,$A5,$A5,$A4 ; 95CD 83 80 80 B3 B0 A5 A5 A4 ........ + .byte $9F,$00,$00,$00 ; 95D5 9F 00 00 00 .... +; used for centering ONE TWO THREE FOUR, see option_key_handler +num_name_hscrol_table: + .byte $04,$04,$04,$00 ; 95D9 04 04 04 00 .... +; space space T space (names ONE TWO THREE FOUR) +number_names_0: + .byte $00,$00,$F4,$00 ; 95DD 00 00 F4 00 .... +; O T H F +number_names_1: + .byte $EF,$F4,$E8,$E6 ; 95E1 EF F4 E8 E6 .... +; N W R O +number_names_2: + .byte $EE,$F7,$F2,$EF ; 95E5 EE F7 F2 EF .... +; E O E U +number_names_3: + .byte $E5,$EF,$E5,$F5 ; 95E9 E5 EF E5 F5 .... +; space space E R +number_names_4: + .byte $00,$00,$E5,$F2 ; 95ED 00 00 E5 F2 .... +; played when select key pressed, 4 notes, descending +sfx_select_key: + .byte $01,$A4,$00,$1D,$08,$3C,$08,$79 ; 95F1 01 A4 00 1D 08 3C 08 79 .....<.y + .byte $08,$F3,$08,$00,$3C,$02,$00 ; 95F9 08 F3 08 00 3C 02 00 ....<.. +; ---------------------------------------------------------------------------- +; multiple code paths jump here. replay level, load next level, or go back to ask_num_players +afterlife: + jsr enable_joystick_jv ; 9600 20 1B 80 .. + jsr L8027 ; 9603 20 27 80 '. + lda $06F8 ; 9606 AD F8 06 ... + beq L960E ; 9609 F0 03 .. + jmp ask_num_players ; 960B 4C 00 94 L.. + +; ---------------------------------------------------------------------------- +L960E: lda $06F7 ; 960E AD F7 06 ... + beq L9616 ; 9611 F0 03 .. + jsr init_next_level ; 9613 20 E8 9B .. +L9616: lda #$00 ; 9616 A9 00 .. + sta bonus_jiffy_timer ; 9618 8D 26 06 .&. + sta $06F5 ; 961B 8D F5 06 ... + sta COLOR4 ; 961E 8D C8 02 ... + jmp L9BD0 ; 9621 4C D0 9B L.. + +; ---------------------------------------------------------------------------- +; only in multiplayer games +show_get_ready_prompt: + ldx current_player ; 9624 AE FE 06 ... + lda color0_table_minus_one,x ; 9627 BD 27 97 .'. + sta COLOR4 ; 962A 8D C8 02 ... + sta COLOR0 ; 962D 8D C4 02 ... + ldy #$14 ; 9630 A0 14 .. +L9632: lda L9713,y ; 9632 B9 13 97 ... + sta $0741,y ; 9635 99 41 07 .A. + dey ; 9638 88 . + bne L9632 ; 9639 D0 F7 .. + lda current_player ; 963B AD FE 06 ... + ora #$10 ; 963E 09 10 .. + sta $074A ; 9640 8D 4A 07 .J. + lda #$00 ; 9643 A9 00 .. + sta $B9 ; 9645 85 B9 .. + sta jiffy_timer_2 ; 9647 8D 1B 06 ... +; 06ac/06ad gets address of get_ready_dlist (why not SDLSTL/H?) +setup_get_ready_dl: + lda #$2C ; 964A A9 2C ., + sta dlist_shadow_lo ; 964C 8D AC 06 ... + lda #$97 ; 964F A9 97 .. + sta dlist_shadow_hi ; 9651 8D AD 06 ... + lda #$E6 ; 9654 A9 E6 .. + sta work_level_sub0 ; 9656 8D 82 07 ... + lda #$96 ; 9659 A9 96 .. + sta work_level_sub0+1 ; 965B 8D 83 07 ... + jsr clear_screen_mem_jv ; 965E 20 1E 80 .. + lda cur_level_map0 ; 9661 AD D6 07 ... + sta dm_progctr ; 9664 85 C0 .. + lda cur_level_map0+1 ; 9666 AD D7 07 ... + sta dm_progctr+1 ; 9669 85 C1 .. + jsr draw_map_jv ; 966B 20 00 80 .. +L966E: lda jiffy_timer_2 ; 966E AD 1B 06 ... + cmp #$F2 ; 9671 C9 F2 .. + bne L966E ; 9673 D0 F9 .. +L9675: ldx #$00 ; 9675 A2 00 .. +; copy level descriptor to $0780 +copy_level_desc_2: + lda cur_level_desc,x ; 9677 BD C0 07 ... + sta work_level_desc,x ; 967A 9D 80 07 ... + inx ; 967D E8 . + cpx #$40 ; 967E E0 40 .@ + bne copy_level_desc_2 ; 9680 D0 F5 .. + lda work_level_sub5 ; 9682 AD A2 07 ... + sta $06E1 ; 9685 8D E1 06 ... + lda work_level_sub5+1 ; 9688 AD A3 07 ... + sta $06E2 ; 968B 8D E2 06 ... + jsr L06E0 ; 968E 20 E0 06 .. + lda #$00 ; 9691 A9 00 .. + sta COLOR4 ; 9693 8D C8 02 ... + sta $06AB ; 9696 8D AB 06 ... + lda work_level_offs_46+1 ; 9699 AD AF 07 ... + sta COLOR0 ; 969C 8D C4 02 ... + lda work_level_offs_46+2 ; 969F AD B0 07 ... + sta COLOR1 ; 96A2 8D C5 02 ... + lda work_level_offs_46+3 ; 96A5 AD B1 07 ... + sta COLOR2 ; 96A8 8D C6 02 ... + lda work_level_offs_46 ; 96AB AD AE 07 ... + sta COLOR3 ; 96AE 8D C7 02 ... + jsr setup_gameboard_dlist_jv ; 96B1 20 15 80 .. + inc $06F5 ; 96B4 EE F5 06 ... + jmp L9BDD ; 96B7 4C DD 9B L.. + +; ---------------------------------------------------------------------------- +; maybe this should be check_level or init_level? +enter_level: + lda #$00 ; 96BA A9 00 .. + tay ; 96BC A8 . + sta $D7 ; 96BD 85 D7 .. + sta $D8 ; 96BF 85 D8 .. + inc level ; 96C1 EE F6 06 ... + lda level ; 96C4 AD F6 06 ... + cmp #$0C ; 96C7 C9 0C .. + bne copy_level_desc ; 96C9 D0 03 .. + jmp ask_num_players ; 96CB 4C 00 94 L.. + +; ---------------------------------------------------------------------------- +; copy level descriptor from levelXX_desc at $A000+(level*$40) to $07c0-$07ff +copy_level_desc: + lsr a ; 96CE 4A J + ror $D7 ; 96CF 66 D7 f. + lsr a ; 96D1 4A J + ror $D7 ; 96D2 66 D7 f. + ora #$A0 ; 96D4 09 A0 .. + sta $D8 ; 96D6 85 D8 .. +sl_loop:lda ($D7),y ; 96D8 B1 D7 .. + sta cur_level_desc,y ; 96DA 99 C0 07 ... + iny ; 96DD C8 . + cpy #$40 ; 96DE C0 40 .@ + bne sl_loop ; 96E0 D0 F6 .. + jsr L802A ; 96E2 20 2A 80 *. + rts ; 96E5 60 ` + +; ---------------------------------------------------------------------------- + lda jiffy_timer_2 ; 96E6 AD 1B 06 ... + cmp #$F0 ; 96E9 C9 F0 .. + bcs L9709 ; 96EB B0 1C .. + and #$1F ; 96ED 29 1F ). + beq L96F2 ; 96EF F0 01 .. + rts ; 96F1 60 ` + +; ---------------------------------------------------------------------------- +L96F2: lda COLOR0 ; 96F2 AD C4 02 ... + cmp #$0F ; 96F5 C9 0F .. + beq L96FF ; 96F7 F0 06 .. + lda #$0F ; 96F9 A9 0F .. + sta COLOR0 ; 96FB 8D C4 02 ... + rts ; 96FE 60 ` + +; ---------------------------------------------------------------------------- +L96FF: ldx current_player ; 96FF AE FE 06 ... + lda color0_table_minus_one,x ; 9702 BD 27 97 .'. + sta COLOR0 ; 9705 8D C4 02 ... + rts ; 9708 60 ` + +; ---------------------------------------------------------------------------- +L9709: lda #$E6 ; 9709 A9 E6 .. + sta work_level_sub0 ; 970B 8D 82 07 ... + lda #$06 ; 970E A9 06 .. + sta work_level_sub0+1 ; 9710 8D 83 07 ... +L9713: rts ; 9713 60 ` + +; ---------------------------------------------------------------------------- +; PLAYER GET READY +get_ready_msg: + .byte $00,$30,$2C,$21,$39,$25,$32,$00 ; 9714 00 30 2C 21 39 25 32 00 .0,!9%2. + .byte $00,$00,$27,$25,$34,$00,$32,$25 ; 971C 00 00 27 25 34 00 32 25 ..'%4.2% + .byte $21,$24,$39 ; 9724 21 24 39 !$9 +color0_table_minus_one: + .byte $00 ; 9727 00 . +color0_table: + .byte $96,$24,$C6,$54 ; 9728 96 24 C6 54 .$.T +; 112 blank scanlines, then one GR.2 line, loaded from $0742 +get_ready_dlist: + .byte $70,$70,$70,$70,$70,$70,$70,$70 ; 972C 70 70 70 70 70 70 70 70 pppppppp + .byte $70,$70,$70,$70,$70,$70,$47,$42 ; 9734 70 70 70 70 70 70 47 42 ppppppGB + .byte $07,$41,$2C,$97 ; 973C 07 41 2C 97 .A,. +; ---------------------------------------------------------------------------- +game_main_loop: + jsr materialize_jumpman ; 9740 20 7B 97 {. +L9743: jsr L8033 ; 9743 20 33 80 3. + lda work_level_num_bombs ; 9746 AD 8A 07 ... + beq got_all_bombs ; 9749 F0 1B .. + lda $0623 ; 974B AD 23 06 .#. + cmp #$02 ; 974E C9 02 .. + bne L9743 ; 9750 D0 F1 .. +L9752: lda $0623 ; 9752 AD 23 06 .#. + cmp #$02 ; 9755 C9 02 .. + beq L9752 ; 9757 F0 F9 .. + lda lives ; 9759 AD 0A 07 ... + cmp #$FF ; 975C C9 FF .. + bne game_main_loop ; 975E D0 E0 .. + jsr call_eol_sub ; 9760 20 6C 97 l. + jmp crumble_gameboard_jv ; 9763 4C 30 80 L0. + +; ---------------------------------------------------------------------------- +got_all_bombs: + jsr call_eol_sub ; 9766 20 6C 97 l. + jmp level_finished_jv ; 9769 4C 2D 80 L-. + +; ---------------------------------------------------------------------------- +call_eol_sub: + lda work_level_sub_eol ; 976C AD A6 07 ... + sta $06E4 ; 976F 8D E4 06 ... + lda work_level_sub_eol+1 ; 9772 AD A7 07 ... + sta $06E5 ; 9775 8D E5 06 ... + jmp L06E3 ; 9778 4C E3 06 L.. + +; ---------------------------------------------------------------------------- +materialize_jumpman: + jsr update_status_window_jv ; 977B 20 12 80 .. + ldx #$04 ; 977E A2 04 .. + lda #$00 ; 9780 A9 00 .. +mj_clear_loop: + sta $0755,x ; 9782 9D 55 07 .U. + sta $069A,x ; 9785 9D 9A 06 ... + sta $06EA,x ; 9788 9D EA 06 ... + sta $06EB,x ; 978B 9D EB 06 ... + dex ; 978E CA . + bne mj_clear_loop ; 978F D0 F1 .. + sta $0697 ; 9791 8D 97 06 ... + sta $0698 ; 9794 8D 98 06 ... + sta PCOLR0 ; 9797 8D C0 02 ... + sta $BA ; 979A 85 BA .. + sta AUDF4 ; 979C 8D 06 D2 ... + lda work_level_y_start ; 979F AD 8C 07 ... + sta $0683 ; 97A2 8D 83 06 ... + lda work_level_x_start ; 97A5 AD 8D 07 ... + sta $067E ; 97A8 8D 7E 06 .~. + lda #$01 ; 97AB A9 01 .. + sta $0688 ; 97AD 8D 88 06 ... + lda #$A5 ; 97B0 A9 A5 .. + sta AUDC4 ; 97B2 8D 07 D2 ... + inc $066A ; 97B5 EE 6A 06 .j. + inc $066B ; 97B8 EE 6B 06 .k. +mj_set_freq_and_color: + inc $BA ; 97BB E6 BA .. + beq mj_done ; 97BD F0 1C .. + lda $BA ; 97BF A5 BA .. + sta AUDF4 ; 97C1 8D 06 D2 ... + lsr a ; 97C4 4A J + lsr a ; 97C5 4A J + lsr a ; 97C6 4A J + lsr a ; 97C7 4A J + sta PCOLR0 ; 97C8 8D C0 02 ... + ldx #$FF ; 97CB A2 FF .. +mj_delay: + dex ; 97CD CA . + nop ; 97CE EA . + nop ; 97CF EA . + nop ; 97D0 EA . + nop ; 97D1 EA . + nop ; 97D2 EA . + nop ; 97D3 EA . + nop ; 97D4 EA . + nop ; 97D5 EA . + bne mj_delay ; 97D6 D0 F5 .. + jmp mj_set_freq_and_color ; 97D8 4C BB 97 L.. + +; ---------------------------------------------------------------------------- +mj_done:lda #$00 ; 97DB A9 00 .. + sta AUDF4 ; 97DD 8D 06 D2 ... + sta AUDC4 ; 97E0 8D 07 D2 ... + sta $0623 ; 97E3 8D 23 06 .#. + lda initial_speed ; 97E6 AD 25 06 .%. + sta player_speed ; 97E9 8D 24 06 .$. + inc playing_level ; 97EC EE 27 06 .'. + rts ; 97EF 60 ` + +; ---------------------------------------------------------------------------- + brk ; 97F0 00 . + brk ; 97F1 00 . + brk ; 97F2 00 . + brk ; 97F3 00 . + brk ; 97F4 00 . + brk ; 97F5 00 . + brk ; 97F6 00 . + brk ; 97F7 00 . + brk ; 97F8 00 . + brk ; 97F9 00 . + brk ; 97FA 00 . + brk ; 97FB 00 . + brk ; 97FC 00 . + brk ; 97FD 00 . + brk ; 97FE 00 . + brk ; 97FF 00 . + lda $0621 ; 9800 AD 21 06 .!. + bne L9806 ; 9803 D0 01 .. +L9805: rts ; 9805 60 ` + +; ---------------------------------------------------------------------------- +L9806: lda $0623 ; 9806 AD 23 06 .#. + bne L9805 ; 9809 D0 FA .. + lda $0683 ; 980B AD 83 06 ... + cmp #$C6 ; 980E C9 C6 .. + bcs L982E ; 9810 B0 1C .. + lda $06EB ; 9812 AD EB 06 ... + beq check_collisions_2 ; 9815 F0 03 .. + jmp L99A8 ; 9817 4C A8 99 L.. + +; ---------------------------------------------------------------------------- +; did player 0 or 1 hit the playfield... +check_collisions_2: + lda #$01 ; 981A A9 01 .. + sta $0688 ; 981C 8D 88 06 ... + lda $06ED ; 981F AD ED 06 ... + beq check_collisions_3 ; 9822 F0 0E .. + lda collision_save+4 ; 9824 AD B4 06 ... + ora collision_save+5 ; 9827 0D B5 06 ... + and #$03 ; 982A 29 03 ). + bne check_collisions_3 ; 982C D0 04 .. +L982E: inc $0623 ; 982E EE 23 06 .#. + rts ; 9831 60 ` + +; ---------------------------------------------------------------------------- +; did player 0 or 1 hit the playfield... +check_collisions_3: + lda #$00 ; 9832 A9 00 .. + sta $06ED ; 9834 8D ED 06 ... + lda collision_save+4 ; 9837 AD B4 06 ... + ora collision_save+5 ; 983A 0D B5 06 ... + and #$03 ; 983D 29 03 ). + bne check_trigger_state ; 983F D0 0C .. + inc $06ED ; 9841 EE ED 06 ... + inc $0683 ; 9844 EE 83 06 ... + inc $0683 ; 9847 EE 83 06 ... + jmp L989F ; 984A 4C 9F 98 L.. + +; ---------------------------------------------------------------------------- +; did user press the trigger? +check_trigger_state: + lda trigger_state ; 984D AD 35 06 .5. + bne check_up_down ; 9850 D0 03 .. +; yes, jump to handler +trig_jmp: + jmp trigger_handler ; 9852 4C 85 99 L.. + +; ---------------------------------------------------------------------------- +; did user move joystick up/down? +check_up_down: + lda joystick_state ; 9855 AD 33 06 .3. + cmp #$0E ; 9858 C9 0E .. + beq L9863 ; 985A F0 07 .. + cmp #$0D ; 985C C9 0D .. + beq L9863 ; 985E F0 03 .. +; no, jump over handler +cud_jmp:jmp L9892 ; 9860 4C 92 98 L.. + +; ---------------------------------------------------------------------------- +L9863: lda collision_save+4 ; 9863 AD B4 06 ... + ora collision_save+5 ; 9866 0D B5 06 ... + and #$02 ; 9869 29 02 ). + bne L9870 ; 986B D0 03 .. + jmp L98D0 ; 986D 4C D0 98 L.. + +; ---------------------------------------------------------------------------- +L9870: jsr check_up_down_2 ; 9870 20 3B 99 ;. + bcs L9878 ; 9873 B0 03 .. + jmp L98D0 ; 9875 4C D0 98 L.. + +; ---------------------------------------------------------------------------- +L9878: sta $067E ; 9878 8D 7E 06 .~. + lda player_delta_y ; 987B AD 31 06 .1. + asl a ; 987E 0A . + clc ; 987F 18 . + adc $0683 ; 9880 6D 83 06 m.. + sta $0683 ; 9883 8D 83 06 ... + lda $0620 ; 9886 AD 20 06 . . + clc ; 9889 18 . + adc #$04 ; 988A 69 04 i. + sta $0688 ; 988C 8D 88 06 ... + jmp play_sfx_bounce_2 ; 988F 4C 80 8A L.. + +; ---------------------------------------------------------------------------- +L9892: lda collision_save+4 ; 9892 AD B4 06 ... + ora collision_save+5 ; 9895 0D B5 06 ... + and #$01 ; 9898 29 01 ). + bne L989F ; 989A D0 03 .. + jmp L98D0 ; 989C 4C D0 98 L.. + +; ---------------------------------------------------------------------------- +L989F: lda player_delta_x ; 989F AD 30 06 .0. + beq L98D0 ; 98A2 F0 2C ., + asl a ; 98A4 0A . + ldx #$08 ; 98A5 A2 08 .. + cmp #$02 ; 98A7 C9 02 .. + beq L98AD ; 98A9 F0 02 .. + ldx #$0C ; 98AB A2 0C .. +L98AD: clc ; 98AD 18 . + adc $067E ; 98AE 6D 7E 06 m~. + sta $067E ; 98B1 8D 7E 06 .~. + txa ; 98B4 8A . + clc ; 98B5 18 . + adc $0620 ; 98B6 6D 20 06 m . + sta $0688 ; 98B9 8D 88 06 ... + lda $061F ; 98BC AD 1F 06 ... + bne L98D0 ; 98BF D0 0F .. + lda #$73 ; 98C1 A9 73 .s + sta sfx_slot_tempo ; 98C3 8D 3E 06 .>. + lda #$BE ; 98C6 A9 BE .. + sta sfx_slot_timer ; 98C8 8D 3F 06 .?. + lda #$01 ; 98CB A9 01 .. + jsr L8003 ; 98CD 20 03 80 .. +L98D0: lda collision_save+4 ; 98D0 AD B4 06 ... + ora collision_save+5 ; 98D3 0D B5 06 ... + and #$02 ; 98D6 29 02 ). + beq L98F0 ; 98D8 F0 16 .. + jsr L9971 ; 98DA 20 71 99 q. + bcc L990F ; 98DD 90 30 .0 + inc $0683 ; 98DF EE 83 06 ... + inc $0683 ; 98E2 EE 83 06 ... + lda $061F ; 98E5 AD 1F 06 ... + ora #$02 ; 98E8 09 02 .. + sta $0688 ; 98EA 8D 88 06 ... + jmp L9925 ; 98ED 4C 25 99 L%. + +; ---------------------------------------------------------------------------- +L98F0: lda collision_save+4 ; 98F0 AD B4 06 ... + and #$01 ; 98F3 29 01 ). + beq L990F ; 98F5 F0 18 .. + dec $0683 ; 98F7 CE 83 06 ... + dec $0683 ; 98FA CE 83 06 ... + lda $0688 ; 98FD AD 88 06 ... + cmp #$01 ; 9900 C9 01 .. + bne L990F ; 9902 D0 0B .. + lda $061F ; 9904 AD 1F 06 ... + ora #$02 ; 9907 09 02 .. + sta $0688 ; 9909 8D 88 06 ... + jmp L9925 ; 990C 4C 25 99 L%. + +; ---------------------------------------------------------------------------- +L990F: lda $0688 ; 990F AD 88 06 ... + cmp #$01 ; 9912 C9 01 .. + bne L9925 ; 9914 D0 0F .. + lda collision_save+4 ; 9916 AD B4 06 ... + ora collision_save+5 ; 9919 0D B5 06 ... + and #$02 ; 991C 29 02 ). + beq L9925 ; 991E F0 05 .. + lda #$04 ; 9920 A9 04 .. + sta $0688 ; 9922 8D 88 06 ... +L9925: lda $0688 ; 9925 AD 88 06 ... + sta $0689 ; 9928 8D 89 06 ... + lda $067E ; 992B AD 7E 06 .~. + sta $067F ; 992E 8D 7F 06 ... + lda $0683 ; 9931 AD 83 06 ... + clc ; 9934 18 . + adc #$0A ; 9935 69 0A i. + sta $0684 ; 9937 8D 84 06 ... + rts ; 993A 60 ` + +; ---------------------------------------------------------------------------- +; did user move joystick up/down? +check_up_down_2: + lda joystick_state ; 993B AD 33 06 .3. + cmp #$0D ; 993E C9 0D .. + bne L9949 ; 9940 D0 07 .. + lda $0683 ; 9942 AD 83 06 ... + cmp #$C0 ; 9945 C9 C0 .. + bcs L9967 ; 9947 B0 1E .. +L9949: lda $067E ; 9949 AD 7E 06 .~. + sec ; 994C 38 8 + sbc #$30 ; 994D E9 30 .0 + sta zp_temp1 ; 994F 85 CB .. + ldx #$08 ; 9951 A2 08 .. +L9953: lda work_level_offs_46+3,x ; 9953 BD B1 07 ... + clc ; 9956 18 . + adc #$02 ; 9957 69 02 i. + cmp zp_temp1 ; 9959 C5 CB .. + bcc L9964 ; 995B 90 07 .. + sec ; 995D 38 8 + sbc #$05 ; 995E E9 05 .. + cmp zp_temp1 ; 9960 C5 CB .. + bcc L9969 ; 9962 90 05 .. +L9964: dex ; 9964 CA . + bne L9953 ; 9965 D0 EC .. +L9967: clc ; 9967 18 . + rts ; 9968 60 ` + +; ---------------------------------------------------------------------------- +L9969: lda work_level_offs_46+3,x ; 9969 BD B1 07 ... + clc ; 996C 18 . + adc #$30 ; 996D 69 30 i0 + sec ; 996F 38 8 + rts ; 9970 60 ` + +; ---------------------------------------------------------------------------- +L9971: lda $067E ; 9971 AD 7E 06 .~. + sec ; 9974 38 8 + sbc #$30 ; 9975 E9 30 .0 + ldx #$06 ; 9977 A2 06 .. +L9979: cmp work_level_offs_55+2,x ; 9979 DD B9 07 ... + beq L9983 ; 997C F0 05 .. + dex ; 997E CA . + bne L9979 ; 997F D0 F8 .. + clc ; 9981 18 . + rts ; 9982 60 ` + +; ---------------------------------------------------------------------------- +L9983: sec ; 9983 38 8 + rts ; 9984 60 ` + +; ---------------------------------------------------------------------------- +; handle trigger presses (maybe start a jump) +trigger_handler: + ldx #$04 ; 9985 A2 04 .. + lda joystick_state ; 9987 AD 33 06 .3. + cmp #$0E ; 998A C9 0E .. + beq L99A0 ; 998C F0 12 .. + ldx #$10 ; 998E A2 10 .. + lda player_delta_x ; 9990 AD 30 06 .0. + cmp #$01 ; 9993 C9 01 .. + beq L99A0 ; 9995 F0 09 .. + ldx #$11 ; 9997 A2 11 .. + cmp #$FF ; 9999 C9 FF .. + beq L99A0 ; 999B F0 03 .. + jmp check_up_down ; 999D 4C 55 98 LU. + +; ---------------------------------------------------------------------------- +L99A0: stx $0688 ; 99A0 8E 88 06 ... + lda #$01 ; 99A3 A9 01 .. + jsr cue_music_jv ; 99A5 20 18 80 .. +L99A8: inc $06EB ; 99A8 EE EB 06 ... + lda $06EB ; 99AB AD EB 06 ... + cmp #$16 ; 99AE C9 16 .. + bne L99BD ; 99B0 D0 0B .. +L99B2: lda #$00 ; 99B2 A9 00 .. + sta $06EB ; 99B4 8D EB 06 ... + sta $06ED ; 99B7 8D ED 06 ... + jmp check_collisions_2 ; 99BA 4C 1A 98 L.. + +; ---------------------------------------------------------------------------- +L99BD: ldx $06EB ; 99BD AE EB 06 ... + lda L9A1B,x ; 99C0 BD 1B 9A ... + tay ; 99C3 A8 . + lda $0688 ; 99C4 AD 88 06 ... + cmp #$10 ; 99C7 C9 10 .. + beq L99DD ; 99C9 F0 12 .. + cmp #$11 ; 99CB C9 11 .. + bne L99DB ; 99CD D0 0C .. + tya ; 99CF 98 . + sta zp_temp1+1 ; 99D0 85 CC .. + lda #$00 ; 99D2 A9 00 .. + sec ; 99D4 38 8 + sbc zp_temp1+1 ; 99D5 E5 CC .. + tay ; 99D7 A8 . + jmp L99DD ; 99D8 4C DD 99 L.. + +; ---------------------------------------------------------------------------- +L99DB: ldy #$00 ; 99DB A0 00 .. +L99DD: clc ; 99DD 18 . + tya ; 99DE 98 . + adc $067E ; 99DF 6D 7E 06 m~. + sta $067E ; 99E2 8D 7E 06 .~. + lda L9A31,x ; 99E5 BD 31 9A .1. + clc ; 99E8 18 . + adc $0683 ; 99E9 6D 83 06 m.. + sta $0683 ; 99EC 8D 83 06 ... + txa ; 99EF 8A . + cmp #$08 ; 99F0 C9 08 .. + bcs code_99f7 ; 99F2 B0 03 .. + jmp L9925 ; 99F4 4C 25 99 L%. + +; ---------------------------------------------------------------------------- +code_99f7: + lda collision_save+4 ; 99F7 AD B4 06 ... + ora collision_save+5 ; 99FA 0D B5 06 ... + lsr a ; 99FD 4A J + bcs L99B2 ; 99FE B0 B2 .. + lsr a ; 9A00 4A J + bcc L9A19 ; 9A01 90 16 .. + lda $0688 ; 9A03 AD 88 06 ... + cmp #$04 ; 9A06 C9 04 .. + beq L9A19 ; 9A08 F0 0F .. + jsr L9971 ; 9A0A 20 71 99 q. + bcs L99B2 ; 9A0D B0 A3 .. + jsr check_up_down_2 ; 9A0F 20 3B 99 ;. + bcc L9A19 ; 9A12 90 05 .. + cmp $067E ; 9A14 CD 7E 06 .~. + beq L99B2 ; 9A17 F0 99 .. +L9A19: +L9A1B := * + 2 + jmp L9925 ; 9A19 4C 25 99 L%. + +; ---------------------------------------------------------------------------- +data_9a1c: + .byte $02,$00,$02,$00,$02,$02,$02,$02 ; 9A1C 02 00 02 00 02 02 02 02 ........ + .byte $02,$02,$02,$00,$02,$00,$02,$00 ; 9A24 02 02 02 00 02 00 02 00 ........ + .byte $00,$02,$00,$00,$00 ; 9A2C 00 02 00 00 00 ..... +L9A31: .byte $02,$FE,$FE,$FE,$FE,$FE,$FE,$00 ; 9A31 02 FE FE FE FE FE FE 00 ........ + .byte $00,$00,$02,$02,$02,$02,$02,$02 ; 9A39 00 00 02 02 02 02 02 02 ........ + .byte $02,$02,$02,$02,$02,$02,$00,$00 ; 9A41 02 02 02 02 02 02 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 9A49 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 9A51 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00 ; 9A59 00 00 00 ... +; ---------------------------------------------------------------------------- +init_page_7: + ldy #$00 ; 9A5C A0 00 .. +L9A5E: ldx #$00 ; 9A5E A2 00 .. +L9A60: lda data_9a71,x ; 9A60 BD 71 9A .q. + sta score,y ; 9A63 99 00 07 ... + inx ; 9A66 E8 . + iny ; 9A67 C8 . + cpx #$0B ; 9A68 E0 0B .. + bne L9A60 ; 9A6A D0 F4 .. + cpy #$37 ; 9A6C C0 37 .7 + bne L9A5E ; 9A6E D0 EE .. + rts ; 9A70 60 ` + +; ---------------------------------------------------------------------------- +; used by code above +data_9a71: + .byte $00,$00,$00,$4C,$1D,$00,$00,$00 ; 9A71 00 00 00 4C 1D 00 00 00 ...L.... + .byte $00,$06,$03 ; 9A79 00 06 03 ... +; ---------------------------------------------------------------------------- +L9A7C: ldx current_player ; 9A7C AE FE 06 ... + lda #$00 ; 9A7F A9 00 .. + clc ; 9A81 18 . +L9A82: dex ; 9A82 CA . + beq L9A8A ; 9A83 F0 05 .. + adc #$0B ; 9A85 69 0B i. + jmp L9A82 ; 9A87 4C 82 9A L.. + +; ---------------------------------------------------------------------------- +L9A8A: tay ; 9A8A A8 . + rts ; 9A8B 60 ` + +; ---------------------------------------------------------------------------- +L9A8C: ldx #$00 ; 9A8C A2 00 .. +L9A8E: lda score,x ; 9A8E BD 00 07 ... + sta $070B,y ; 9A91 99 0B 07 ... + inx ; 9A94 E8 . + iny ; 9A95 C8 . + cpx #$0B ; 9A96 E0 0B .. + bne L9A8E ; 9A98 D0 F4 .. + rts ; 9A9A 60 ` + +; ---------------------------------------------------------------------------- +L9A9B: ldx #$00 ; 9A9B A2 00 .. +L9A9D: lda $070B,y ; 9A9D B9 0B 07 ... + sta score,x ; 9AA0 9D 00 07 ... + inx ; 9AA3 E8 . + iny ; 9AA4 C8 . + cpx #$0B ; 9AA5 E0 0B .. + bne L9A9D ; 9AA7 D0 F4 .. + rts ; 9AA9 60 ` + +; ---------------------------------------------------------------------------- +L9AAA: jsr L9A7C ; 9AAA 20 7C 9A |. + jsr L9A8C ; 9AAD 20 8C 9A .. + lda #$00 ; 9AB0 A9 00 .. + sta $06F7 ; 9AB2 8D F7 06 ... + sta $06F8 ; 9AB5 8D F8 06 ... +L9AB8: inc current_player ; 9AB8 EE FE 06 ... + lda $06FF ; 9ABB AD FF 06 ... + cmp current_player ; 9ABE CD FE 06 ... + bcs L9ACB ; 9AC1 B0 08 .. + lda #$01 ; 9AC3 A9 01 .. + sta current_player ; 9AC5 8D FE 06 ... + sta $06F7 ; 9AC8 8D F7 06 ... +L9ACB: ldx number_of_players ; 9ACB AE F4 06 ... + inx ; 9ACE E8 . + ldy L9AFB,x ; 9ACF BC FB 9A ... +L9AD2: lda $0715,y ; 9AD2 B9 15 07 ... + cmp #$FF ; 9AD5 C9 FF .. + bne L9AE5 ; 9AD7 D0 0C .. + tya ; 9AD9 98 . + sec ; 9ADA 38 8 + sbc #$0B ; 9ADB E9 0B .. + tay ; 9ADD A8 . + dex ; 9ADE CA . + bne L9AD2 ; 9ADF D0 F1 .. + inc $06F8 ; 9AE1 EE F8 06 ... + rts ; 9AE4 60 ` + +; ---------------------------------------------------------------------------- +L9AE5: stx $06FF ; 9AE5 8E FF 06 ... + jsr L9A7C ; 9AE8 20 7C 9A |. + jsr L9A9B ; 9AEB 20 9B 9A .. + lda lives ; 9AEE AD 0A 07 ... + cmp #$FF ; 9AF1 C9 FF .. + beq L9AB8 ; 9AF3 F0 C3 .. + lda $0709 ; 9AF5 AD 09 07 ... + sta initial_speed ; 9AF8 8D 25 06 .%. +L9AFB: rts ; 9AFB 60 ` + +; ---------------------------------------------------------------------------- +data_9afc: + .byte $00,$0B,$16,$21 ; 9AFC 00 0B 16 21 ...! +; ---------------------------------------------------------------------------- +; for some reason there are 2 copies of the display list, at $0800 and $0881 +setup_gameboard_dlist: + ldx #$00 ; 9B00 A2 00 .. + lda dlist_shadow_lo ; 9B02 AD AC 06 ... + bne L9B09 ; 9B05 D0 02 .. + ldx #$81 ; 9B07 A2 81 .. +L9B09: lda #$70 ; 9B09 A9 70 .p + stx $9F ; 9B0B 86 9F .. + ldy #$03 ; 9B0D A0 03 .. + sty $9D ; 9B0F 84 9D .. +L9B11: sta $0800,x ; 9B11 9D 00 08 ... + inx ; 9B14 E8 . + dey ; 9B15 88 . + bne L9B11 ; 9B16 D0 F9 .. + ldy $06AB ; 9B18 AC AB 06 ... +L9B1B: lda gameboard_dlist_data,y ; 9B1B B9 62 9B .b. + sta $0800,x ; 9B1E 9D 00 08 ... + iny ; 9B21 C8 . + inx ; 9B22 E8 . + dec $9D ; 9B23 C6 9D .. + bne L9B1B ; 9B25 D0 F4 .. +L9B27: lda gameboard_dlist_data,y ; 9B27 B9 62 9B .b. + beq L9B3E ; 9B2A F0 12 .. + sta $9D ; 9B2C 85 9D .. + iny ; 9B2E C8 . + lda gameboard_dlist_data,y ; 9B2F B9 62 9B .b. +L9B32: sta $0800,x ; 9B32 9D 00 08 ... + inx ; 9B35 E8 . + dec $9D ; 9B36 C6 9D .. + bne L9B32 ; 9B38 D0 F8 .. + iny ; 9B3A C8 . + jmp L9B27 ; 9B3B 4C 27 9B L'. + +; ---------------------------------------------------------------------------- +L9B3E: lda #$41 ; 9B3E A9 41 .A + sta $0800,x ; 9B40 9D 00 08 ... + inx ; 9B43 E8 . + lda $9F ; 9B44 A5 9F .. + sta $0800,x ; 9B46 9D 00 08 ... + sta dlist_shadow_lo ; 9B49 8D AC 06 ... + inx ; 9B4C E8 . + lda #$08 ; 9B4D A9 08 .. + sta $0800,x ; 9B4F 9D 00 08 ... + sta dlist_shadow_hi ; 9B52 8D AD 06 ... + lda L9B63,y ; 9B55 B9 63 9B .c. + sta dli_vec_shadow_lo ; 9B58 8D AE 06 ... + lda L9B64,y ; 9B5B B9 64 9B .d. + sta dli_vec_shadow_hi ; 9B5E 8D AF 06 ... + rts ; 9B61 60 ` + +; ---------------------------------------------------------------------------- +; this isn't used as-is for a display list, see setup_gameboard_dlist +gameboard_dlist_data: + .byte $4D ; 9B62 4D M +L9B63: .byte $00 ; 9B63 00 . +L9B64: .byte $30,$56,$0D,$01,$8D,$01,$8D,$01 ; 9B64 30 56 0D 01 8D 01 8D 01 0V...... + .byte $06,$01,$86,$00,$72,$9B ; 9B6C 06 01 86 00 72 9B ....r. +; ---------------------------------------------------------------------------- +; changes DLI vector to point to dli_chained_2 +dli_chained_1: + pha ; 9B72 48 H + lda #$54 ; 9B73 A9 54 .T + sta WSYNC ; 9B75 8D 0A D4 ... + sta COLBK ; 9B78 8D 1A D0 ... + lda #$87 ; 9B7B A9 87 .. + sta VDSLST ; 9B7D 8D 00 02 ... + lda #$9B ; 9B80 A9 9B .. + sta VDSLST+1 ; 9B82 8D 01 02 ... + pla ; 9B85 68 h + rti ; 9B86 40 @ + +; ---------------------------------------------------------------------------- +; changes DLI vector to point to dli_chained_3 +dli_chained_2: + pha ; 9B87 48 H + lda #$00 ; 9B88 A9 00 .. + sta WSYNC ; 9B8A 8D 0A D4 ... + sta COLBK ; 9B8D 8D 1A D0 ... + lda $062A ; 9B90 AD 2A 06 .*. + sta COLPF0 ; 9B93 8D 16 D0 ... + lda #$28 ; 9B96 A9 28 .( + sta COLPF1 ; 9B98 8D 17 D0 ... + lda #$AA ; 9B9B A9 AA .. + sta COLPF2 ; 9B9D 8D 18 D0 ... + lda #$0F ; 9BA0 A9 0F .. + sta COLPF3 ; 9BA2 8D 19 D0 ... + lda #$B1 ; 9BA5 A9 B1 .. + sta VDSLST ; 9BA7 8D 00 02 ... + lda #$9B ; 9BAA A9 9B .. + sta VDSLST+1 ; 9BAC 8D 01 02 ... + pla ; 9BAF 68 h + rti ; 9BB0 40 @ + +; ---------------------------------------------------------------------------- +; changes DLI vector to point to dli_chained_1 +dli_chained_3: + pha ; 9BB1 48 H + lda #$54 ; 9BB2 A9 54 .T + sta WSYNC ; 9BB4 8D 0A D4 ... + sta COLBK ; 9BB7 8D 1A D0 ... + lda #$72 ; 9BBA A9 72 .r + sta VDSLST ; 9BBC 8D 00 02 ... + lda #$9B ; 9BBF A9 9B .. + sta VDSLST+1 ; 9BC1 8D 01 02 ... + pla ; 9BC4 68 h + rti ; 9BC5 40 @ + +; ---------------------------------------------------------------------------- + .byte $9B ; 9BC6 9B . + sta VDSLST+1 ; 9BC7 8D 01 02 ... + pla ; 9BCA 68 h + rti ; 9BCB 40 @ + +; ---------------------------------------------------------------------------- + brk ; 9BCC 00 . + brk ; 9BCD 00 . + brk ; 9BCE 00 . + brk ; 9BCF 00 . +L9BD0: lda number_of_players ; 9BD0 AD F4 06 ... + cmp #$00 ; 9BD3 C9 00 .. + beq L9BDA ; 9BD5 F0 03 .. + jmp show_get_ready_prompt ; 9BD7 4C 24 96 L$. + +; ---------------------------------------------------------------------------- +L9BDA: jmp L9675 ; 9BDA 4C 75 96 Lu. + +; ---------------------------------------------------------------------------- +L9BDD: lda #$06 ; 9BDD A9 06 .. + sta $085E ; 9BDF 8D 5E 08 .^. + sta $08DF ; 9BE2 8D DF 08 ... + jmp (work_level_sub6) ; 9BE5 6C A4 07 l.. + +; ---------------------------------------------------------------------------- +; ... +init_next_level: + lda randomizer_mode ; 9BE8 AD F3 06 ... + beq L9BFC ; 9BEB F0 0F .. +; only after beating levels 1-12 in order +randomize_level: + lda RANDOM ; 9BED AD 0A D2 ... + and #$0F ; 9BF0 29 0F ). + cmp #$0C ; 9BF2 C9 0C .. + bcs randomize_level ; 9BF4 B0 F7 .. + sta level ; 9BF6 8D F6 06 ... + dec level ; 9BF9 CE F6 06 ... +L9BFC: jmp enter_level ; 9BFC 4C BA 96 L.. + +; ---------------------------------------------------------------------------- + brk ; 9BFF 00 . +; only use of keyboard is to enter player speed before starting game +keyboard_isr: + txa ; 9C00 8A . + pha ; 9C01 48 H + ldx #$08 ; 9C02 A2 08 .. + lda KBCODE ; 9C04 AD 09 D2 ... +check_keycode: + cmp keycode_table_minus_one,x ; 9C07 DD 18 9C ... + beq store_speed_value ; 9C0A F0 07 .. + dex ; 9C0C CA . + bne check_keycode ; 9C0D D0 F8 .. +keyboard_isr_exit: + pla ; 9C0F 68 h + tax ; 9C10 AA . + pla ; 9C11 68 h + rti ; 9C12 40 @ + +; ---------------------------------------------------------------------------- +store_speed_value: + stx speed_value ; 9C13 8E F9 06 ... +keycode_table_minus_one:= * + 2 + jmp keyboard_isr_exit ; 9C16 4C 0F 9C L.. + +; ---------------------------------------------------------------------------- +keycode_table: + .byte $1F,$1E,$1A,$18,$1D,$1B,$33,$35 ; 9C19 1F 1E 1A 18 1D 1B 33 35 ......35 +; definitions for level graphics objects aka shapes. (girder segment, ladder, rope, etc) +level_gfx: + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 9C21 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 9C29 00 00 00 00 00 00 00 00 ........ + .byte $00,$00 ; 9C31 00 00 .. +; 3 rows of pixels. 1st: 04 = 4 pixels wide, 00 00 = no X/Y offset, 01 01 01 01 = actual pixel data (4 color0 pixels). see level_maps.txt +sh_girder: + .byte $04,$00,$00,$01,$01,$01,$01,$04 ; 9C33 04 00 00 01 01 01 01 04 ........ + .byte $00,$01,$01,$00,$01,$00,$04,$00 ; 9C3B 00 01 01 00 01 00 04 00 ........ + .byte $02,$01,$01,$01,$01,$FF ; 9C43 02 01 01 01 01 FF ...... +sh_blank_4x4: + .byte $04,$00,$00,$00,$00,$00,$00,$04 ; 9C49 04 00 00 00 00 00 00 04 ........ + .byte $00,$01,$00,$00,$00,$00,$04,$00 ; 9C51 00 01 00 00 00 00 04 00 ........ + .byte $02,$00,$00,$00,$00,$FF ; 9C59 02 00 00 00 00 FF ...... +sh_ladder: + .byte $02,$00,$00,$02,$02,$02,$06,$00 ; 9C5F 02 00 00 02 02 02 06 00 ........ + .byte $02,$02,$02,$00,$01,$02,$02,$02 ; 9C67 02 02 02 00 01 02 02 02 ........ + .byte $06,$01,$02,$02,$08,$00,$02,$02 ; 9C6F 06 01 02 02 08 00 02 02 ........ + .byte $02,$02,$02,$02,$02,$02,$02,$02 ; 9C77 02 02 02 02 02 02 02 02 ........ + .byte $00,$03,$02,$02,$02,$06,$03,$02 ; 9C7F 00 03 02 02 02 06 03 02 ........ + .byte $02,$FF ; 9C87 02 FF .. +; dunno what this is yet +sh_9c89:.byte $02,$00,$00,$00,$00,$02,$06,$00 ; 9C89 02 00 00 00 00 02 06 00 ........ + .byte $00,$00,$02,$00,$01,$00,$00,$02 ; 9C91 00 00 02 00 01 00 00 02 ........ + .byte $06,$01,$00,$00,$08,$00,$02,$00 ; 9C99 06 01 00 00 08 00 02 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$02 ; 9CA1 00 00 00 00 00 00 00 02 ........ + .byte $00,$03,$00,$00,$02,$06,$03,$00 ; 9CA9 00 03 00 00 02 06 03 00 ........ + .byte $00,$FF ; 9CB1 00 FF .. +sh_bomb:.byte $04,$00,$00,$00,$03,$03,$00,$04 ; 9CB3 04 00 00 00 03 03 00 04 ........ + .byte $00,$01,$03,$00,$00,$03,$04,$00 ; 9CBB 00 01 03 00 00 03 04 00 ........ + .byte $02,$00,$03,$03,$00,$FF ; 9CC3 02 00 03 03 00 FF ...... +sh_up_rope: + .byte $01,$00,$00,$01,$01,$01,$01,$01 ; 9CC9 01 00 00 01 01 01 01 01 ........ + .byte $01,$00,$02,$01,$01,$01,$03,$01 ; 9CD1 01 00 02 01 01 01 03 01 ........ + .byte $FF ; 9CD9 FF . +sh_down_rope: + .byte $01,$00,$00,$02,$01,$00,$01,$02 ; 9CDA 01 00 00 02 01 00 01 02 ........ + .byte $01,$01,$02,$02,$01,$01,$03,$02 ; 9CE2 01 01 02 02 01 01 03 02 ........ + .byte $FF ; 9CEA FF . +; dunno what this is yet +sh_9ceb:.byte $02,$00,$00,$00,$00,$02,$00,$01 ; 9CEB 02 00 00 00 00 02 00 01 ........ + .byte $00,$00,$02,$00,$02,$00,$00,$02 ; 9CF3 00 00 02 00 02 00 00 02 ........ + .byte $00,$03,$00,$00,$FF ; 9CFB 00 03 00 00 FF ..... +; jumpman's animation frames and other sprites, seem to be 10 bytes per sprite +sprite_table: + .byte $18,$18,$3C,$5A,$3C,$18,$18,$18 ; 9D00 18 18 3C 5A 3C 18 18 18 ..# `.. + .byte $3D,$5A,$98,$18,$3C,$24,$22,$33 ; 9D48 3D 5A 98 18 3C 24 22 33 =Z..<$"3 + .byte $18,$10,$38,$5C,$38,$18,$3C,$24 ; 9D50 18 10 38 5C 38 18 3C 24 ..8\8.<$ + .byte $44,$66,$18,$10,$3D,$5A,$98,$18 ; 9D58 44 66 18 10 3D 5A 98 18 Df..=Z.. + .byte $3C,$24,$22,$33,$18,$10,$38,$5C ; 9D60 3C 24 22 33 18 10 38 5C <$"3..8\ + .byte $38,$18,$3C,$24,$44,$66,$18,$08 ; 9D68 38 18 3C 24 44 66 18 08 8.<$Df.. + .byte $BC,$5A,$19,$18,$3C,$24,$44,$CC ; 9D70 BC 5A 19 18 3C 24 44 CC .Z..<$D. + .byte $18,$08,$1C,$3A,$1C,$18,$3C,$24 ; 9D78 18 08 1C 3A 1C 18 3C 24 ...:..<$ + .byte $22,$66,$18,$08,$BC,$5A,$19,$18 ; 9D80 22 66 18 08 BC 5A 19 18 "f...Z.. + .byte $3C,$24,$44,$CC,$18,$08,$1C,$3A ; 9D88 3C 24 44 CC 18 08 1C 3A <$D....: + .byte $1C,$18,$3C,$24,$22,$66,$0C,$19 ; 9D90 1C 18 3C 24 22 66 0C 19 ..<$"f.. + .byte $3E,$58,$58,$18,$3E,$42,$83,$00 ; 9D98 3E 58 58 18 3E 42 83 00 >XX.>B.. + .byte $30,$98,$7C,$1A,$1A,$18,$7C,$42 ; 9DA0 30 98 7C 1A 1A 18 7C 42 0.|...|B + .byte $C1,$00,$99,$5A,$3C,$18,$18,$99 ; 9DA8 C1 00 99 5A 3C 18 18 99 ...Z<... + .byte $FF,$00,$00,$00,$86,$42,$22,$FE ; 9DB0 FF 00 00 00 86 42 22 FE .....B". + .byte $FE,$22,$42,$86,$00,$00,$FF,$99 ; 9DB8 FE 22 42 86 00 00 FF 99 ."B..... + .byte $18,$18,$3C,$5A,$99,$00,$00,$00 ; 9DC0 18 18 3C 5A 99 00 00 00 ..X." +; couple of places in the code try to write here +block_char_minus_one: + .byte $43,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; 9E0F 43 FF FF FF FF FF FF FF C....... + .byte $FF,$00,$66,$FF,$66,$66,$FF,$66 ; 9E17 FF 00 66 FF 66 66 FF 66 ..f.ff.f + .byte $00,$18,$3E,$60,$3C,$06,$7C,$18 ; 9E1F 00 18 3E 60 3C 06 7C 18 ..>`<.|. + .byte $00,$00,$7C,$82,$BA,$A2,$BA,$82 ; 9E27 00 00 7C 82 BA A2 BA 82 ..|..... + .byte $7C,$1C,$36,$1C,$38,$6F,$66,$3B ; 9E2F 7C 1C 36 1C 38 6F 66 3B |.6.8of; + .byte $00,$00,$30,$98,$7C,$1A,$78,$44 ; 9E37 00 00 30 98 7C 1A 78 44 ..0.|.xD + .byte $C2,$00,$0E,$1C,$18,$18,$18,$1C ; 9E3F C2 00 0E 1C 18 18 18 1C ........ + .byte $0E,$00,$70,$38,$18,$18,$18,$38 ; 9E47 0E 00 70 38 18 18 18 38 ..p8...8 + .byte $70,$00,$00,$00,$00,$00,$00,$00 ; 9E4F 70 00 00 00 00 00 00 00 p....... + .byte $7E,$00,$18,$18,$18,$7E,$18,$18 ; 9E57 7E 00 18 18 18 7E 18 18 ~....~.. + .byte $18,$00,$00,$00,$00,$00,$18,$18 ; 9E5F 18 00 00 00 00 00 18 18 ........ + .byte $30,$00,$00,$00,$00,$7E,$00,$00 ; 9E67 30 00 00 00 00 7E 00 00 0....~.. + .byte $00,$00,$00,$00,$00,$00,$00,$18 ; 9E6F 00 00 00 00 00 00 00 18 ........ + .byte $18,$00,$06,$0C,$18,$30,$60,$40 ; 9E77 18 00 06 0C 18 30 60 40 .....0`@ + .byte $00,$00,$3C,$66,$66,$66,$66,$66 ; 9E7F 00 00 3C 66 66 66 66 66 ...f + .byte $3C,$00,$00,$18,$18,$00,$18,$18 ; 9ECF 3C 00 00 18 18 00 18 18 <....... + .byte $00,$00,$00,$18,$18,$00,$18,$18 ; 9ED7 00 00 00 18 18 00 18 18 ........ + .byte $30,$06,$0C,$18,$30,$18,$0C,$06 ; 9EDF 30 06 0C 18 30 18 0C 06 0...0... + .byte $00,$00,$00,$00,$7E,$00,$7E,$00 ; 9EE7 00 00 00 00 7E 00 7E 00 ....~.~. + .byte $00,$00,$10,$7C,$10,$10,$10,$38 ; 9EEF 00 00 10 7C 10 10 10 38 ...|...8 + .byte $7C,$00,$3C,$66,$66,$0C,$18,$00 ; 9EF7 7C 00 3C 66 66 0C 18 00 |. + .byte $00,$00,$18,$3C,$66,$66,$7E,$66 ; 9F07 00 00 18 3C 66 66 7E 66 .... + lda #$A5 ; A522 A9 A5 .. + sta sfx_slot_timer ; A524 8D 3F 06 .?. + lda #$01 ; A527 A9 01 .. + jsr L8003 ; A529 20 03 80 .. + rts ; A52C 60 ` + +; ---------------------------------------------------------------------------- +; dunno, referenced by routine at $A50F +sfx_a52d: + .byte $01,$81,$00,$0A,$02,$01,$81,$00 ; A52D 01 81 00 0A 02 01 81 00 ........ + .byte $32,$02,$01,$81,$00,$1E,$02,$00 ; A535 32 02 01 81 00 1E 02 00 2....... +; ---------------------------------------------------------------------------- +LA53D: lda #$00 ; A53D A9 00 .. + jmp L8F79 ; A53F 4C 79 8F Ly. + +; ---------------------------------------------------------------------------- +; dunno, referenced by routine at $A498 +data_table_a542: + .byte $0C ; A542 0C . +LA543: .byte $05,$18,$09,$58,$05,$80,$15,$18 ; A543 05 18 09 58 05 80 15 18 ...X.... + .byte $09,$28,$25,$4C,$1D,$80,$09,$18 ; A54B 09 28 25 4C 1D 80 09 18 .(%L.... + .byte $15,$70,$25,$2C,$3C,$4C,$45,$0C ; A553 15 70 25 2C 3C 4C 45 0C .p%,. + lda #$A9 ; A892 A9 A9 .. + sta sfx_slot_timer ; A894 8D 3F 06 .?. + lda #$03 ; A897 A9 03 .. + jsr L8003 ; A899 20 03 80 .. + pla ; A89C 68 h + tax ; A89D AA . +LA89E: lda $0763,x ; A89E BD 63 07 .c. + bne LA8C1 ; A8A1 D0 1E .. +LA8A3: clc ; A8A3 18 . + lda $069E,x ; A8A4 BD 9E 06 ... + adc #$02 ; A8A7 69 02 i. + cmp #$CE ; A8A9 C9 CE .. + bcs LA8B3 ; A8AB B0 06 .. + sta $069E,x ; A8AD 9D 9E 06 ... + jmp LA845 ; A8B0 4C 45 A8 LE. + +; ---------------------------------------------------------------------------- +LA8B3: lda #$00 ; A8B3 A9 00 .. + sta $069A,x ; A8B5 9D 9A 06 ... + sta $075F,x ; A8B8 9D 5F 07 ._. + sta $0763,x ; A8BB 9D 63 07 .c. + jmp LA845 ; A8BE 4C 45 A8 LE. + +; ---------------------------------------------------------------------------- +LA8C1: lda $0767,x ; A8C1 BD 67 07 .g. + cmp #$08 ; A8C4 C9 08 .. + bne LA8D4 ; A8C6 D0 0C .. + lda #$00 ; A8C8 A9 00 .. + sta $0763,x ; A8CA 9D 63 07 .c. + cpx #$03 ; A8CD E0 03 .. + bcc LA8A3 ; A8CF 90 D2 .. + jmp LA865 ; A8D1 4C 65 A8 Le. + +; ---------------------------------------------------------------------------- +LA8D4: tay ; A8D4 A8 . + clc ; A8D5 18 . + lda $069E,x ; A8D6 BD 9E 06 ... + adc LA905,y ; A8D9 79 05 A9 y.. + sta $069E,x ; A8DC 9D 9E 06 ... + lda data_table_a8fd,y ; A8DF B9 FD A8 ... + tay ; A8E2 A8 . + beq LA8EF ; A8E3 F0 0A .. + tay ; A8E5 A8 . + lda $0763,x ; A8E6 BD 63 07 .c. + cmp #$03 ; A8E9 C9 03 .. + beq LA8EF ; A8EB F0 02 .. + ldy #$FE ; A8ED A0 FE .. +LA8EF: tya ; A8EF 98 . + clc ; A8F0 18 . + adc $069A,x ; A8F1 7D 9A 06 }.. + sta $069A,x ; A8F4 9D 9A 06 ... + inc $0767,x ; A8F7 FE 67 07 .g. + jmp LA845 ; A8FA 4C 45 A8 LE. + +; ---------------------------------------------------------------------------- +; dunno, referenced by routine at $A8D4 +data_table_a8fd: + .byte $00,$02,$02,$02,$02,$02,$02,$00 ; A8FD 00 02 02 02 02 02 02 00 ........ +LA905: .byte $FE,$FE,$FE,$00,$00,$02,$02,$02 ; A905 FE FE FE 00 00 02 02 02 ........ + .byte $01,$83,$00,$0A,$03,$00,$00,$00 ; A90D 01 83 00 0A 03 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; A915 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00 ; A91D 00 00 00 ... +LA920: .byte $FE,$33,$9C,$FD,$04,$00,$04,$05 ; A920 FE 33 9C FD 04 00 04 05 .3...... + .byte $04,$24,$05,$04,$44,$05,$06,$6C ; A928 04 24 05 04 44 05 06 6C .$..D..l + .byte $05,$04,$8C,$05,$04,$30,$16,$04 ; A930 05 04 8C 05 04 30 16 04 .....0.. + .byte $60,$16,$04,$04,$25,$09,$78,$25 ; A938 60 16 04 04 25 09 78 25 `...%.x% + .byte $09,$04,$35,$09,$40,$35,$08,$78 ; A940 09 04 35 09 40 35 08 78 ..5.@5.x + .byte $35,$09,$40,$45,$02,$58,$45,$02 ; A948 35 09 40 45 02 58 45 02 5.@E.XE. + .byte $04,$55,$05,$28,$55,$06,$4C,$55 ; A950 04 55 05 28 55 06 4C 55 .U.(U.LU + .byte $02,$60,$55,$06,$88,$55,$05,$FE ; A958 02 60 55 06 88 55 05 FE .`U..U.. + .byte $5F,$9C,$FD,$00,$04,$04,$01,$09 ; A960 5F 9C FD 00 04 04 01 09 _....... + .byte $94,$01,$09,$30,$19,$0F,$68,$19 ; A968 94 01 09 30 19 0F 68 19 ...0..h. + .byte $0F,$FE,$B3,$9C ; A970 0F FE B3 9C .... +LA974: .byte $24,$02,$01,$44,$02,$01,$58,$02 ; A974 24 02 01 44 02 01 58 02 $..D..X. + .byte $01,$78,$02,$01,$44,$12,$01,$58 ; A97C 01 78 02 01 44 12 01 58 .x..D..X + .byte $12,$01,$24,$22,$01,$78,$22,$01 ; A984 12 01 24 22 01 78 22 01 ..$".x". + .byte $40,$32,$01,$5C,$32,$01,$40,$42 ; A98C 40 32 01 5C 32 01 40 42 @2.\2.@B + .byte $01,$5C,$42,$01,$04,$52,$01,$3C ; A994 01 5C 42 01 04 52 01 3C .\B..R.< + .byte $52,$01,$60,$52,$01,$98,$52,$01 ; A99C 52 01 60 52 01 98 52 01 R.`R..R. + .byte $FF ; A9A4 FF . +LA9A5: .byte $42,$00,$62,$00,$82,$00,$A2,$00 ; A9A5 42 00 62 00 82 00 A2 00 B.b..... + .byte $64,$00,$84,$00,$46,$00,$A6,$00 ; A9AD 64 00 84 00 46 00 A6 00 d...F... + .byte $68,$00,$88,$00,$6A,$00,$8A,$00 ; A9B5 68 00 88 00 6A 00 8A 00 h...j... + .byte $2C,$00,$6C,$00,$8C,$00,$CC,$00 ; A9BD 2C 00 6C 00 8C 00 CC 00 ,.l..... + .byte $FF ; A9C5 FF . +LA9C6: .byte $20 ; A9C6 20 +; ---------------------------------------------------------------------------- + rol $80,x ; A9C7 36 80 6. + lda #$02 ; A9C9 A9 02 .. + sta $0770 ; A9CB 8D 70 07 .p. + sta $0772 ; A9CE 8D 72 07 .r. + lda #$FE ; A9D1 A9 FE .. + sta $0771 ; A9D3 8D 71 07 .q. + sta $0773 ; A9D6 8D 73 07 .s. + ldx #$05 ; A9D9 A2 05 .. + lda #$00 ; A9DB A9 00 .. +LA9DD: sta HPOSP3,x ; A9DD 9D 03 D0 ... + dex ; A9E0 CA . + bne LA9DD ; A9E1 D0 FA .. + lda #$C0 ; A9E3 A9 C0 .. + jsr LAA0C ; A9E5 20 0C AA .. + lda #$C0 ; A9E8 A9 C0 .. + jsr LAA0C ; A9EA 20 0C AA .. + lda #$30 ; A9ED A9 30 .0 + jsr LAA0C ; A9EF 20 0C AA .. + lda #$30 ; A9F2 A9 30 .0 + jsr LAA0C ; A9F4 20 0C AA .. + lda #$0C ; A9F7 A9 0C .. + jsr LAA0C ; A9F9 20 0C AA .. + lda #$0C ; A9FC A9 0C .. + jsr LAA0C ; A9FE 20 0C AA .. + lda #$03 ; AA01 A9 03 .. + jsr LAA0C ; AA03 20 0C AA .. + lda #$03 ; AA06 A9 03 .. + jsr LAA0C ; AA08 20 0C AA .. + rts ; AA0B 60 ` + +; ---------------------------------------------------------------------------- +LAA0C: sta dm_progctr ; AA0C 85 C0 .. +LAA0E: lda RANDOM ; AA0E AD 0A D2 ... + cmp #$AC ; AA11 C9 AC .. + bcs LAA0E ; AA13 B0 F9 .. + tay ; AA15 A8 . + ldx #$1E ; AA16 A2 1E .. +LAA18: lda $2B00,y ; AA18 B9 00 2B ..+ + ora dm_progctr ; AA1B 05 C0 .. + sta $2B00,y ; AA1D 99 00 2B ..+ + iny ; AA20 C8 . + dex ; AA21 CA . + bne LAA18 ; AA22 D0 F4 .. + rts ; AA24 60 ` + +; ---------------------------------------------------------------------------- +LAA25: lda $076F ; AA25 AD 6F 07 .o. + cmp #$04 ; AA28 C9 04 .. + bne LAA2D ; AA2A D0 01 .. + rts ; AA2C 60 ` + +; ---------------------------------------------------------------------------- +LAA2D: tax ; AA2D AA . + inc $0774,x ; AA2E FE 74 07 .t. + inc $076F ; AA31 EE 6F 07 .o. + rts ; AA34 60 ` + +; ---------------------------------------------------------------------------- +LAA35: lda $0622 ; AA35 AD 22 06 .". + bne LAA3B ; AA38 D0 01 .. +LAA3A: rts ; AA3A 60 ` + +; ---------------------------------------------------------------------------- +LAA3B: ldx #$05 ; AA3B A2 05 .. +LAA3D: dex ; AA3D CA . + beq LAA3A ; AA3E F0 FA .. + lda $0773,x ; AA40 BD 73 07 .s. + beq LAA3D ; AA43 F0 F8 .. + lda $0777,x ; AA45 BD 77 07 .w. + clc ; AA48 18 . + adc $076F,x ; AA49 7D 6F 07 }o. + sta $0777,x ; AA4C 9D 77 07 .w. + sta HPOSP3,x ; AA4F 9D 03 D0 ... + jmp LAA3D ; AA52 4C 3D AA L=. + +; ---------------------------------------------------------------------------- +LAA55: lda $0622 ; AA55 AD 22 06 .". + beq LAA3A ; AA58 F0 E0 .. + ldx #$05 ; AA5A A2 05 .. +LAA5C: dex ; AA5C CA . + beq LAA3A ; AA5D F0 DB .. + lda collision_save+7,x ; AA5F BD B7 06 ... + and #$01 ; AA62 29 01 ). + beq LAA5C ; AA64 F0 F6 .. + lda $067E ; AA66 AD 7E 06 .~. + clc ; AA69 18 . + adc $076F,x ; AA6A 7D 6F 07 }o. + sta $067E ; AA6D 8D 7E 06 .~. + jmp LAA5C ; AA70 4C 5C AA L\. + +; ---------------------------------------------------------------------------- +LAA73: inc $0764 ; AA73 EE 64 07 .d. + lda $0764 ; AA76 AD 64 07 .d. + and #$01 ; AA79 29 01 ). + beq LAA82 ; AA7B F0 05 .. + lda #$90 ; AA7D A9 90 .. + jmp LAA84 ; AA7F 4C 84 AA L.. + +; ---------------------------------------------------------------------------- +LAA82: lda #$A6 ; AA82 A9 A6 .. +LAA84: sta dm_progctr ; AA84 85 C0 .. + lda #$AA ; AA86 A9 AA .. + sta dm_progctr+1 ; AA88 85 C1 .. + jsr draw_map_jv ; AA8A 20 00 80 .. + jmp LAA25 ; AA8D 4C 25 AA L%. + +; ---------------------------------------------------------------------------- +; dunno what this is for yet +map_aa90: + .byte $FE,$EB,$9C,$FD,$00,$04,$50,$00 ; AA90 FE EB 9C FD 00 04 50 00 ......P. + .byte $0C,$FE,$33,$9C,$4E,$05,$01,$FE ; AA98 0C FE 33 9C 4E 05 01 FE ..3.N... + .byte $DA,$9C,$50,$00,$0C,$FF ; AAA0 DA 9C 50 00 0C FF ..P... +; referenced by routine at $AA82 +map_aaa6: + .byte $FE,$EB,$9C,$FD,$00,$04,$50,$00 ; AAA6 FE EB 9C FD 00 04 50 00 ......P. + .byte $0C,$FE,$33,$9C,$4E,$05,$01,$FE ; AAAE 0C FE 33 9C 4E 05 01 FE ..3.N... + .byte $C9,$9C,$50,$08,$0A,$FF ; AAB6 C9 9C 50 08 0A FF ..P... +LAABC: .byte $AD,$2A,$06,$8D,$C7,$02,$60,$00 ; AABC AD 2A 06 8D C7 02 60 00 .*....`. + .byte $8D,$C7,$02,$60,$00,$09,$40,$45 ; AAC4 8D C7 02 60 00 09 40 45 ...`..@E + .byte $02,$58,$45,$02 ; AACC 02 58 45 02 .XE. +LAAD0: .byte $FE,$33,$9C,$FD,$04,$00,$04,$05 ; AAD0 FE 33 9C FD 04 00 04 05 .3...... + .byte $02,$1A,$05,$0B,$50,$05,$07,$04 ; AAD8 02 1A 05 0B 50 05 07 04 ....P... + .byte $25,$26,$7C,$33,$08,$20,$3B,$03 ; AAE0 25 26 7C 33 08 20 3B 03 %&|3. ;. + .byte $40,$3B,$03,$60,$3B,$06,$04,$47 ; AAE8 40 3B 03 60 3B 06 04 47 @;.`;..G + .byte $04,$20,$4B,$03,$40,$4B,$03,$60 ; AAF0 04 20 4B 03 40 4B 03 60 . K.@K.` + .byte $4B,$03,$80,$4A,$03,$04,$55,$26 ; AAF8 4B 03 80 4A 03 04 55 26 K..J..U& + .byte $FD,$04,$FF,$2C,$4A,$03,$4C,$4A ; AB00 FD 04 FF 2C 4A 03 4C 4A ...,J.LJ + .byte $03,$6C,$4A,$03,$FD,$04,$01,$14 ; AB08 03 6C 4A 03 FD 04 01 14 .lJ..... + .byte $48,$03,$38,$49,$02,$58,$49,$02 ; AB10 48 03 38 49 02 58 49 02 H.8I.XI. + .byte $78,$49,$02,$FE,$5F,$9C,$FD,$00 ; AB18 78 49 02 FE 5F 9C FD 00 xI.._... + .byte $04,$0C,$21,$0D,$84,$01,$09,$84 ; AB20 04 0C 21 0D 84 01 09 84 ..!..... + .byte $2F,$06,$22,$01,$05,$FE,$C9,$9C ; AB28 2F 06 22 01 05 FE C9 9C /."..... + .byte $3C,$08,$06,$35,$28,$04,$55,$28 ; AB30 3C 08 06 35 28 04 55 28 <..5(.U( + .byte $04,$FE,$DA,$9C,$9A,$30,$08,$FE ; AB38 04 FE DA 9C 9A 30 08 FE .....0.. + .byte $B3,$9C ; AB40 B3 9C .. +LAB42: .byte $04,$02,$01,$44,$02,$01,$24,$16 ; AB42 04 02 01 44 02 01 24 16 ...D..$. + .byte $01,$44,$22,$01,$64,$22,$01,$98 ; AB4A 01 44 22 01 64 22 01 98 .D".d".. + .byte $22,$01,$24,$32,$01,$44,$32,$01 ; AB52 22 01 24 32 01 44 32 01 ".$2.D2. + .byte $64,$32,$01,$24,$52,$01,$44,$52 ; AB5A 64 32 01 24 52 01 44 52 d2.$R.DR + .byte $01,$64,$52,$01,$84,$52,$01,$98 ; AB62 01 64 52 01 84 52 01 98 .dR..R.. + .byte $52,$01,$FF ; AB6A 52 01 FF R.. +LAB6D: .byte $22,$10,$62,$20,$44,$30,$66,$40 ; AB6D 22 10 62 20 44 30 66 40 ".b D0f@ + .byte $86,$50,$C6,$60,$48,$70,$68,$80 ; AB75 86 50 C6 60 48 70 68 80 .P.`Hph. + .byte $88,$90,$4C,$A0,$6C,$B0,$8C,$C0 ; AB7D 88 90 4C A0 6C B0 8C C0 ..L.l... + .byte $AC,$00,$CC,$D0,$FF ; AB85 AC 00 CC D0 FF ..... +LAB8A: .byte $00,$00,$A6,$AB,$B6,$AB,$C0,$AB ; AB8A 00 00 A6 AB B6 AB C0 AB ........ + .byte $D3,$AB,$DD,$AB,$F0,$AB,$FA,$AB ; AB92 D3 AB DD AB F0 AB FA AB ........ + .byte $04,$AC,$0E,$AC,$18,$AC,$22,$AC ; AB9A 04 AC 0E AC 18 AC 22 AC ......". + .byte $2C,$AC,$36,$AC,$FE,$49,$9C,$FD ; ABA2 2C AC 36 AC FE 49 9C FD ,.6..I.. + .byte $04,$00,$04,$05,$02,$FE,$33,$9C ; ABAA 04 00 04 05 02 FE 33 9C ......3. + .byte $20,$22,$03,$FF,$FE,$49,$9C,$FD ; ABB2 20 22 03 FF FE 49 9C FD "...I.. + .byte $04,$00,$3E,$05,$02,$FF,$FE,$89 ; ABBA 04 00 3E 05 02 FF FE 89 ..>..... + .byte $9C,$FD,$00,$04,$22,$11,$01,$FE ; ABC2 9C FD 00 04 22 11 01 FE ...."... + .byte $49,$9C,$FD,$04,$FF,$2C,$4A,$03 ; ABCA 49 9C FD 04 FF 2C 4A 03 I....,J. + .byte $FF,$FE,$49,$9C,$FD,$04,$00,$44 ; ABD2 FF FE 49 9C FD 04 00 44 ..I....D + .byte $25,$03,$FF,$FE,$33,$9C,$FD,$04 ; ABDA 25 03 FF FE 33 9C FD 04 %...3... + .byte $00,$6C,$05,$04,$FE,$89,$9C,$FD ; ABE2 00 6C 05 04 FE 89 9C FD .l...... + .byte $00,$04,$84,$11,$02,$FF,$FE,$49 ; ABEA 00 04 84 11 02 FF FE 49 .......I + .byte $9C,$FD,$04,$00,$6C,$05,$04,$FF ; ABF2 9C FD 04 00 6C 05 04 FF ....l... + .byte $FE,$49,$9C,$FD,$04,$00,$60,$4B ; ABFA FE 49 9C FD 04 00 60 4B .I....`K + .byte $03,$FF,$FE,$49,$9C,$FD,$04,$00 ; AC02 03 FF FE 49 9C FD 04 00 ...I.... + .byte $40,$4B,$03,$FF,$FE,$49,$9C,$FD ; AC0A 40 4B 03 FF FE 49 9C FD @K...I.. + .byte $04,$00,$20,$4B,$03,$FF,$FE,$33 ; AC12 04 00 20 4B 03 FF FE 33 .. K...3 + .byte $9C,$FD,$04,$00,$28,$52,$01,$FF ; AC1A 9C FD 04 00 28 52 01 FF ....(R.. + .byte $FE,$33,$9C,$FD,$04,$00,$48,$52 ; AC22 FE 33 9C FD 04 00 48 52 .3....HR + .byte $01,$FF,$FE,$49,$9C,$FD,$04,$00 ; AC2A 01 FF FE 49 9C FD 04 00 ...I.... + .byte $54,$55,$09,$FF,$FE,$33,$9C,$FD ; AC32 54 55 09 FF FE 33 9C FD TU...3.. + .byte $04,$00,$04,$08,$02,$FE,$5F,$9C ; AC3A 04 00 04 08 02 FE 5F 9C ......_. + .byte $FD,$00,$04,$8E,$01,$09,$FF,$00 ; AC42 FD 00 04 8E 01 09 FF 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; AC4A 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; AC52 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00 ; AC5A 00 00 00 00 00 00 ...... +LAC60: .byte $FE,$33,$9C,$FD,$04,$00,$3C,$05 ; AC60 FE 33 9C FD 04 00 3C 05 .3....<. + .byte $0A,$04,$0C,$08,$7C,$0C,$08,$04 ; AC68 0A 04 0C 08 7C 0C 08 04 ....|... + .byte $15,$08,$7C,$15,$08,$38,$16,$01 ; AC70 15 08 7C 15 08 38 16 01 ..|..8.. + .byte $64,$16,$01,$2C,$2C,$04,$64,$2C ; AC78 64 16 01 2C 2C 04 64 2C d..,,.d, + .byte $04,$2C,$3C,$04,$64,$3C,$04,$04 ; AC80 04 2C 3C 04 64 3C 04 04 .,<.d<.. + .byte $55,$26,$FD,$04,$FF,$24,$0B,$06 ; AC88 55 26 FD 04 FF 24 0B 06 U&...$.. + .byte $FD,$04,$01,$64,$06,$06,$FE,$5F ; AC90 FD 04 01 64 06 06 FE 5F ...d..._ + .byte $9C,$FD,$00,$04,$0C,$01,$15,$4C ; AC98 9C FD 00 04 0C 01 15 4C .......L + .byte $01,$15,$8C,$01,$15,$FE,$C9,$9C ; ACA0 01 15 8C 01 15 FE C9 9C ........ + .byte $39,$19,$03,$65,$19,$03,$FE,$DA ; ACA8 39 19 03 65 19 03 FE DA 9..e.... + .byte $9C,$1F,$12,$0F,$80,$12,$0F,$FE ; ACB0 9C 1F 12 0F 80 12 0F FE ........ + .byte $B3,$9C ; ACB8 B3 9C .. +LACBA: .byte $04,$02,$01,$3C,$02,$01,$60,$02 ; ACBA 04 02 01 3C 02 01 60 02 ...<..`. + .byte $01,$98,$02,$01,$24,$22,$01,$78 ; ACC2 01 98 02 01 24 22 01 78 ....$".x + .byte $22,$01,$24,$32,$01,$78,$32,$01 ; ACCA 22 01 24 32 01 78 32 01 ".$2.x2. + .byte $24,$42,$01,$78,$42,$01,$04,$52 ; ACD2 24 42 01 78 42 01 04 52 $B.xB..R + .byte $01,$3C,$52,$01,$60,$52,$01,$98 ; ACDA 01 3C 52 01 60 52 01 98 .. + .byte $48,$AD,$58,$AD,$FE,$49,$9C,$FD ; AD12 48 AD 58 AD FE 49 9C FD H.X..I.. + .byte $04,$FF,$24,$0B,$06,$FF,$FE,$49 ; AD1A 04 FF 24 0B 06 FF FE 49 ..$....I + .byte $9C,$FD,$04,$01,$64,$06,$06,$FF ; AD22 9C FD 04 01 64 06 06 FF ....d... + .byte $FE,$89,$9C,$FD,$00,$04,$4C,$21 ; AD2A FE 89 9C FD 00 04 4C 21 ......L! + .byte $02,$FF,$FE,$89,$9C,$FD,$00,$04 ; AD32 02 FF FE 89 9C FD 00 04 ........ + .byte $4C,$29,$02,$FF,$FE,$89,$9C,$FD ; AD3A 4C 29 02 FF FE 89 9C FD L)...... + .byte $00,$04,$4C,$31,$02,$FF,$FE,$C9 ; AD42 00 04 4C 31 02 FF FE C9 ..L1.... + .byte $9C,$FD,$00,$04,$9A,$18,$0E,$FE ; AD4A 9C FD 00 04 9A 18 0E FE ........ + .byte $89,$9C,$0C,$31,$02,$FF,$FE,$C9 ; AD52 89 9C 0C 31 02 FF FE C9 ...1.... + .byte $9C,$FD,$00,$04,$04,$18,$0E,$FE ; AD5A 9C FD 00 04 04 18 0E FE ........ + .byte $89,$9C,$8C,$31,$02,$FF ; AD62 89 9C 8C 31 02 FF ...1.. +; ---------------------------------------------------------------------------- +LAD68: lda $0622 ; AD68 AD 22 06 .". + bne LAD6E ; AD6B D0 01 .. +LAD6D: rts ; AD6D 60 ` + +; ---------------------------------------------------------------------------- +LAD6E: ldx #$FF ; AD6E A2 FF .. +LAD70: inx ; AD70 E8 . + cpx work_level_bullet_chance ; AD71 EC 8B 07 ... + beq LAD6D ; AD74 F0 F7 .. + lda $0756,x ; AD76 BD 56 07 .V. + cmp #$02 ; AD79 C9 02 .. + beq LAD8B ; AD7B F0 0E .. + sta $076C,x ; AD7D 9D 6C 07 .l. + lda #$00 ; AD80 A9 00 .. + sta $0764,x ; AD82 9D 64 07 .d. + sta $0768,x ; AD85 9D 68 07 .h. + jmp LAD70 ; AD88 4C 70 AD Lp. + +; ---------------------------------------------------------------------------- +LAD8B: cmp $076C,x ; AD8B DD 6C 07 .l. + beq LADA1 ; AD8E F0 11 .. + sta $076C,x ; AD90 9D 6C 07 .l. + lda $075A,x ; AD93 BD 5A 07 .Z. + beq LAD9E ; AD96 F0 06 .. + inc $0768,x ; AD98 FE 68 07 .h. + jmp LADA1 ; AD9B 4C A1 AD L.. + +; ---------------------------------------------------------------------------- +LAD9E: inc $0764,x ; AD9E FE 64 07 .d. +LADA1: lda $0764,x ; ADA1 BD 64 07 .d. + beq code_adb5 ; ADA4 F0 0F .. + and #$0F ; ADA6 29 0F ). + tay ; ADA8 A8 . + lda data_table_adc7,y ; ADA9 B9 C7 AD ... + sta $075A,x ; ADAC 9D 5A 07 .Z. + inc $0764,x ; ADAF FE 64 07 .d. + jmp LAD70 ; ADB2 4C 70 AD Lp. + +; ---------------------------------------------------------------------------- +code_adb5: + lda $0768,x ; ADB5 BD 68 07 .h. + and #$0F ; ADB8 29 0F ). + tay ; ADBA A8 . + lda data_table_adc7,y ; ADBB B9 C7 AD ... +LADBF := * + 1 + sta $075E,x ; ADBE 9D 5E 07 .^. +code_adc1: + inc $0768,x ; ADC1 FE 68 07 .h. + jmp LAD70 ; ADC4 4C 70 AD Lp. + +; ---------------------------------------------------------------------------- +; dunno, referenced by routines at $AD9E and $ADB5 +data_table_adc7: + .byte $00,$01,$02,$03,$04,$03,$02,$01 ; ADC7 00 01 02 03 04 03 02 01 ........ + .byte $00,$FF,$FE,$FD,$FC,$FD,$FE,$FF ; ADCF 00 FF FE FD FC FD FE FF ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; ADD7 00 00 00 00 00 00 00 00 ........ + .byte $00 ; ADDF 00 . +LADE0: .byte $FE,$33,$9C,$FD,$04,$00,$04,$05 ; ADE0 FE 33 9C FD 04 00 04 05 .3...... + .byte $02,$44,$05,$06,$94,$05,$02,$30 ; ADE8 02 44 05 06 94 05 02 30 .D.....0 + .byte $0A,$02,$68,$0A,$02,$28,$21,$04 ; ADF0 0A 02 68 0A 02 28 21 04 ..h..(!. + .byte $68,$21,$04,$04,$25,$06,$84,$25 ; ADF8 68 21 04 04 25 06 84 25 h!..%..% + .byte $06,$04,$45,$10,$5C,$45,$10,$04 ; AE00 06 04 45 10 5C 45 10 04 ..E.\E.. + .byte $55,$06,$2C,$55,$04,$64,$55,$04 ; AE08 55 06 2C 55 04 64 55 04 U.,U.dU. + .byte $84,$55,$06,$FD,$04,$FF,$84,$09 ; AE10 84 55 06 FD 04 FF 84 09 .U...... + .byte $04,$1C,$24,$03,$FD,$04,$01,$0C ; AE18 04 1C 24 03 FD 04 01 0C ..$..... + .byte $06,$04,$78,$22,$03,$FE,$5F,$9C ; AE20 06 04 78 22 03 FE 5F 9C ..x".._. + .byte $FD,$00,$04,$0C,$21,$09,$8C,$21 ; AE28 FD 00 04 0C 21 09 8C 21 ....!..! + .byte $09,$30,$41,$05,$68,$41,$05,$FE ; AE30 09 30 41 05 68 41 05 FE .0A.hA.. + .byte $C9,$9C,$34,$0C,$04,$6B,$0C,$04 ; AE38 C9 9C 34 0C 04 6B 0C 04 ..4..k.. + .byte $FE,$DA,$9C,$44,$02,$10,$5A,$02 ; AE40 FE DA 9C 44 02 10 5A 02 ...D..Z. + .byte $10,$FE,$B3,$9C ; AE48 10 FE B3 9C .... +LAE4C: .byte $04,$02,$01,$98,$02,$01,$04,$22 ; AE4C 04 02 01 98 02 01 04 22 ......." + .byte $01,$98,$22,$01,$18,$34,$01,$84 ; AE54 01 98 22 01 18 34 01 84 .."..4.. + .byte $34,$01,$04,$42,$01,$98,$42,$01 ; AE5C 34 01 04 42 01 98 42 01 4..B..B. + .byte $04,$52,$01,$38,$52,$01,$64,$52 ; AE64 04 52 01 38 52 01 64 52 .R.8R.dR + .byte $01,$98,$52,$01,$FF ; AE6C 01 98 52 01 FF ..R.. +LAE71: .byte $22,$00,$C2,$00,$26,$00,$C6,$00 ; AE71 22 00 C2 00 26 00 C6 00 "...&... + .byte $48,$00,$A8,$00,$2A,$00,$CA,$00 ; AE79 48 00 A8 00 2A 00 CA 00 H...*... + .byte $2C,$00,$6C,$00,$8C,$00,$CC,$00 ; AE81 2C 00 6C 00 8C 00 CC 00 ,.l..... + .byte $FF ; AE89 FF . +LAE8A: .byte $03,$00,$00,$01,$7C,$01,$01,$00 ; AE8A 03 00 00 01 7C 01 01 00 ....|... + .byte $04,$0C,$AF,$10,$86,$00,$01,$0F ; AE92 04 0C AF 10 86 00 01 0F ........ + .byte $FF ; AE9A FF . +LAE9B: .byte $20,$36,$80,$A9,$C0,$8D,$70,$07 ; AE9B 20 36 80 A9 C0 8D 70 07 6....p. + .byte $60 ; AEA3 60 ` +LAEA4: .byte $18,$08,$38,$20,$00,$48,$30,$18 ; AEA4 18 08 38 20 00 48 30 18 ..8 .H0. + .byte $28,$10,$10 ; AEAC 28 10 10 (.. +LAEAF: .byte $40,$29,$21,$11,$19,$11,$09,$01 ; AEAF 40 29 21 11 19 11 09 01 @)!..... + .byte $49,$41,$39,$19,$31 ; AEB7 49 41 39 19 31 IA9.1 +LAEBC: .byte $03,$03,$03,$03,$03,$C3,$C3,$7E ; AEBC 03 03 03 03 03 C3 C3 7E .......~ + .byte $C3,$C3,$C3,$C3,$C3,$C3,$C3,$7E ; AEC4 C3 C3 C3 C3 C3 C3 C3 7E .......~ + .byte $C3,$C3,$E7,$FF,$DB,$C3,$C3,$C3 ; AECC C3 C3 E7 FF DB C3 C3 C3 ........ + .byte $FE,$C3,$C3,$C3,$FE,$C0,$C0,$C0 ; AED4 FE C3 C3 C3 FE C0 C0 C0 ........ + .byte $18,$3C,$66,$C3,$FF,$C3,$C3,$C3 ; AEDC 18 3C 66 C3 FF C3 C3 C3 ./ + .byte $04,$FF,$FE,$49,$9C,$FD,$04,$00 ; B42C 04 FF FE 49 9C FD 04 00 ...I.... + .byte $7C,$35,$04,$FF,$FE,$89,$9C,$FD ; B434 7C 35 04 FF FE 89 9C FD |5...... + .byte $00,$04,$54,$3F,$04,$FF,$FE,$89 ; B43C 00 04 54 3F 04 FF FE 89 ..T?.... + .byte $9C,$FD,$00,$04,$8C,$1D,$04,$FF ; B444 9C FD 00 04 8C 1D 04 FF ........ +; ---------------------------------------------------------------------------- +LB44C: lda #$01 ; B44C A9 01 .. + sta $0770 ; B44E 8D 70 07 .p. + lda #$00 ; B451 A9 00 .. + sta $0771 ; B453 8D 71 07 .q. + rts ; B456 60 ` + +; ---------------------------------------------------------------------------- +LB457: lda $0623 ; B457 AD 23 06 .#. + cmp #$02 ; B45A C9 02 .. + bne LB46A ; B45C D0 0C .. + lda #$00 ; B45E A9 00 .. + sta $0770 ; B460 8D 70 07 .p. + sta $0771 ; B463 8D 71 07 .q. + sta $0681 ; B466 8D 81 06 ... + rts ; B469 60 ` + +; ---------------------------------------------------------------------------- +LB46A: lda $0622 ; B46A AD 22 06 .". + bne LB470 ; B46D D0 01 .. +LB46F: rts ; B46F 60 ` + +; ---------------------------------------------------------------------------- +LB470: lda $0770 ; B470 AD 70 07 .p. + beq LB46F ; B473 F0 FA .. + cmp #$09 ; B475 C9 09 .. + beq LB49F ; B477 F0 26 .& + sta $066C ; B479 8D 6C 06 .l. + sta $068A ; B47C 8D 8A 06 ... + inc $0770 ; B47F EE 70 07 .p. + lda $06DC ; B482 AD DC 06 ... + clc ; B485 18 . + adc #$30 ; B486 69 30 i0 + sta $0680 ; B488 8D 80 06 ... + lda $06DD ; B48B AD DD 06 ... + asl a ; B48E 0A . + clc ; B48F 18 . + adc #$20 ; B490 69 20 i + sta $0685 ; B492 8D 85 06 ... + lda $0770 ; B495 AD 70 07 .p. + cmp #$09 ; B498 C9 09 .. + bcc LB46F ; B49A 90 D3 .. + inc $0771 ; B49C EE 71 07 .q. +LB49F: lda $0771 ; B49F AD 71 07 .q. + beq LB46F ; B4A2 F0 CB .. + cmp #$05 ; B4A4 C9 05 .. + beq LB4C1 ; B4A6 F0 19 .. + clc ; B4A8 18 . + adc #$04 ; B4A9 69 04 i. + sta $068B ; B4AB 8D 8B 06 ... + inc $0771 ; B4AE EE 71 07 .q. + lda $0680 ; B4B1 AD 80 06 ... + sta $0681 ; B4B4 8D 81 06 ... + lda $0685 ; B4B7 AD 85 06 ... + sta $0686 ; B4BA 8D 86 06 ... + sta $066D ; B4BD 8D 6D 06 .m. + rts ; B4C0 60 ` + +; ---------------------------------------------------------------------------- +LB4C1: lda $068B ; B4C1 AD 8B 06 ... + and #$03 ; B4C4 29 03 ). + clc ; B4C6 18 . + adc #$04 ; B4C7 69 04 i. + sta $068B ; B4C9 8D 8B 06 ... + inc $068B ; B4CC EE 8B 06 ... + cmp #$07 ; B4CF C9 07 .. + bne LB4E2 ; B4D1 D0 0F .. +cue_woop_sound: + lda #$64 ; B4D3 A9 64 .d + sta sfx_slot_tempo ; B4D5 8D 3E 06 .>. + lda #$B5 ; B4D8 A9 B5 .. + sta sfx_slot_timer ; B4DA 8D 3F 06 .?. + lda #$03 ; B4DD A9 03 .. + jsr L8003 ; B4DF 20 03 80 .. +LB4E2: ldy #$01 ; B4E2 A0 01 .. + lda $0681 ; B4E4 AD 81 06 ... + cmp $067E ; B4E7 CD 7E 06 .~. + bcc LB4EE ; B4EA 90 02 .. + ldy #$FF ; B4EC A0 FF .. +LB4EE: sty $A0 ; B4EE 84 A0 .. + clc ; B4F0 18 . + adc $A0 ; B4F1 65 A0 e. + sta $0681 ; B4F3 8D 81 06 ... + ldy #$01 ; B4F6 A0 01 .. + lda $0686 ; B4F8 AD 86 06 ... + cmp $0683 ; B4FB CD 83 06 ... + bcc LB502 ; B4FE 90 02 .. + ldy #$FF ; B500 A0 FF .. +LB502: sty $A0 ; B502 84 A0 .. + clc ; B504 18 . + adc $A0 ; B505 65 A0 e. + sta $0686 ; B507 8D 86 06 ... + rts ; B50A 60 ` + +; ---------------------------------------------------------------------------- +; dunno what this is for yet +data_table_b50b: + .byte $03,$1C,$B5,$08,$00,$00,$01,$56 ; B50B 03 1C B5 08 00 00 01 56 .......V + .byte $04,$1C,$B5,$08,$00,$00,$05,$1A ; B513 04 1C B5 08 00 00 05 1A ........ + .byte $FF,$00,$00,$18,$18,$24,$24,$18 ; B51B FF 00 00 18 18 24 24 18 .....$$. + .byte $18,$00,$00,$42,$42,$42,$24,$18 ; B523 18 00 00 42 42 42 24 18 ...BBB$. + .byte $18,$00,$00,$00,$00,$66,$A5,$18 ; B52B 18 00 00 00 00 66 A5 18 .....f.. + .byte $18,$00,$00,$00,$00,$00,$00,$3C ; B533 18 00 00 00 00 00 00 3C .......< + .byte $DB,$00,$00,$24,$18,$18,$24,$00 ; B53B DB 00 00 24 18 18 24 00 ...$..$. + .byte $00,$00,$08,$24,$58,$1A,$24,$10 ; B543 00 00 08 24 58 1A 24 10 ...$X.$. + .byte $00,$81,$42,$24,$18,$18,$24,$42 ; B54B 00 81 42 24 18 18 24 42 ..B$..$B + .byte $81,$04,$42,$A4,$18,$18,$25,$42 ; B553 81 04 42 A4 18 18 25 42 ..B...%B + .byte $20,$00,$00,$18,$18,$24,$24,$18 ; B55B 20 00 00 18 18 24 24 18 ....$$. + .byte $18 ; B563 18 . +sfx_woop: + .byte $01,$A2,$00,$F0,$01,$01,$A4,$00 ; B564 01 A2 00 F0 01 01 A4 00 ........ + .byte $DC,$01,$01,$A6,$00,$C8,$02,$01 ; B56C DC 01 01 A6 00 C8 02 01 ........ + .byte $A4,$DC,$01,$01,$A2,$F0,$01,$00 ; B574 A4 DC 01 01 A2 F0 01 00 ........ +; ---------------------------------------------------------------------------- +LB57C: lda #$00 ; B57C A9 00 .. + jmp L8F76 ; B57E 4C 76 8F Lv. + +; ---------------------------------------------------------------------------- +LB581: lda $062A ; B581 AD 2A 06 .*. + sta PCOLR3 ; B584 8D C3 02 ... + rts ; B587 60 ` + +; ---------------------------------------------------------------------------- +zero_filler_8588: + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B588 00 00 00 00 00 00 00 00 ........ +LB590: .byte $FE,$33,$9C,$FD,$04,$00,$04,$05 ; B590 FE 33 9C FD 04 00 04 05 .3...... + .byte $08,$3C,$05,$0A,$7C,$05,$08,$04 ; B598 08 3C 05 0A 7C 05 08 04 .<..|... + .byte $25,$26,$04,$43,$26,$04,$55,$06 ; B5A0 25 26 04 43 26 04 55 06 %&.C&.U. + .byte $3C,$55,$0A,$84,$55,$06,$04,$43 ; B5A8 3C 55 0A 84 55 06 04 43 . + .byte $4E,$B6,$FE,$49,$9C,$FD,$04,$00 ; B622 4E B6 FE 49 9C FD 04 00 N..I.... + .byte $78,$43,$02,$FF,$FE,$49,$9C,$FD ; B62A 78 43 02 FF FE 49 9C FD xC...I.. + .byte $04,$00,$3C,$25,$02,$FD,$04,$00 ; B632 04 00 3C 25 02 FD 04 00 ..<%.... + .byte $1C,$25,$02,$FF,$FE,$49,$9C,$FD ; B63A 1C 25 02 FF FE 49 9C FD .%...I.. + .byte $04,$00,$7C,$25,$02,$FD,$04,$00 ; B642 04 00 7C 25 02 FD 04 00 ..|%.... + .byte $5C,$25,$02,$FF,$FE,$49,$9C,$FD ; B64A 5C 25 02 FF FE 49 9C FD \%...I.. + .byte $04,$00,$5C,$43,$02,$FF ; B652 04 00 5C 43 02 FF ..\C.. +LB658: .byte $00,$71,$B6,$08,$40,$02,$01,$08 ; B658 00 71 B6 08 40 02 01 08 .q..@... + .byte $03,$71,$B6,$08,$14,$40,$02,$08 ; B660 03 71 B6 08 14 40 02 08 .q...@.. + .byte $04,$71,$B6,$08,$00,$80,$03,$08 ; B668 04 71 B6 08 00 80 03 08 .q...... + .byte $FF,$47,$EF,$3E,$1E,$1E,$0E,$02 ; B670 FF 47 EF 3E 1E 1E 0E 02 .G.>.... + .byte $05,$40,$EE,$3F,$1E,$1C,$0C,$02 ; B678 05 40 EE 3F 1E 1C 0C 02 .@.?.... + .byte $05,$40,$E0,$38,$1C,$1E,$0D,$02 ; B680 05 40 E0 38 1C 1E 0D 02 .@.8.... + .byte $05,$40,$EE,$3F,$1E,$1C,$0C,$02 ; B688 05 40 EE 3F 1E 1C 0C 02 .@.?.... + .byte $05 ; B690 05 . +LB691: .byte $AD,$21,$06,$D0,$01,$60 ; B691 AD 21 06 D0 01 60 .!...` +; ---------------------------------------------------------------------------- + inc $067E ; B697 EE 7E 06 .~. +LB69A: rts ; B69A 60 ` + +; ---------------------------------------------------------------------------- +LB69B: lda player_speed ; B69B AD 24 06 .$. + cmp #$09 ; B69E C9 09 .. + bcs LB6A9 ; B6A0 B0 07 .. + lda $0623 ; B6A2 AD 23 06 .#. + cmp #$02 ; B6A5 C9 02 .. + bne LB6BA ; B6A7 D0 11 .. +LB6A9: lda $0768 ; B6A9 AD 68 07 .h. + bne LB69A ; B6AC D0 EC .. + inc $0768 ; B6AE EE 68 07 .h. + lda #$00 ; B6B1 A9 00 .. + sta AUDC1 ; B6B3 8D 01 D2 ... + sta AUDF1 ; B6B6 8D 00 D2 ... + rts ; B6B9 60 ` + +; ---------------------------------------------------------------------------- +LB6BA: lda $076F ; B6BA AD 6F 07 .o. + bne LB6DC ; B6BD D0 1D .. + lda #$81 ; B6BF A9 81 .. + sta AUDC1 ; B6C1 8D 01 D2 ... + sta $076C ; B6C4 8D 6C 07 .l. + lda #$00 ; B6C7 A9 00 .. + sta jiffy_timer_2 ; B6C9 8D 1B 06 ... + lda #$04 ; B6CC A9 04 .. + sta $076E ; B6CE 8D 6E 07 .n. + sta $076F ; B6D1 8D 6F 07 .o. + lda RANDOM ; B6D4 AD 0A D2 ... + and #$3F ; B6D7 29 3F )? + sta $076D ; B6D9 8D 6D 07 .m. +LB6DC: lda #$10 ; B6DC A9 10 .. + sta AUDF1 ; B6DE 8D 00 D2 ... + lda jiffy_timer_2 ; B6E1 AD 1B 06 ... + cmp $076D ; B6E4 CD 6D 07 .m. + bne LB702 ; B6E7 D0 19 .. + lda $076E ; B6E9 AD 6E 07 .n. + beq LB6F7 ; B6EC F0 09 .. + inc $076C ; B6EE EE 6C 07 .l. + dec $076E ; B6F1 CE 6E 07 .n. + jmp LB6FD ; B6F4 4C FD B6 L.. + +; ---------------------------------------------------------------------------- +LB6F7: dec $076C ; B6F7 CE 6C 07 .l. + dec $076F ; B6FA CE 6F 07 .o. +LB6FD: lda #$00 ; B6FD A9 00 .. + sta jiffy_timer_2 ; B6FF 8D 1B 06 ... +LB702: lda $076C ; B702 AD 6C 07 .l. + sta AUDC1 ; B705 8D 01 D2 ... + rts ; B708 60 ` + +; ---------------------------------------------------------------------------- +LB709: lda $06F5 ; B709 AD F5 06 ... + cmp #$01 ; B70C C9 01 .. + bne LB71C ; B70E D0 0C .. + inc $0669 ; B710 EE 69 06 .i. + inc $066C ; B713 EE 6C 06 .l. + inc $066D ; B716 EE 6D 06 .m. + inc $06F5 ; B719 EE F5 06 ... +LB71C: lda $0622 ; B71C AD 22 06 .". + bne LB722 ; B71F D0 01 .. +LB721: rts ; B721 60 ` + +; ---------------------------------------------------------------------------- +LB722: ldx #$FF ; B722 A2 FF .. +LB724: inx ; B724 E8 . + cpx #$01 ; B725 E0 01 .. + beq LB724 ; B727 F0 FB .. + cpx #$02 ; B729 E0 02 .. + beq LB724 ; B72B F0 F7 .. + cpx #$05 ; B72D E0 05 .. + beq LB721 ; B72F F0 F0 .. + lda $076C ; B731 AD 6C 07 .l. + and #$0F ; B734 29 0F ). + tay ; B736 A8 . + clc ; B737 18 . + lda $067D,x ; B738 BD 7D 06 .}. + adc wind_table_1,y ; B73B 79 6B B7 yk. + sta $067D,x ; B73E 9D 7D 06 .}. + clc ; B741 18 . + lda $0682,x ; B742 BD 82 06 ... + adc wind_table_2,y ; B745 79 71 B7 yq. + cmp #$C6 ; B748 C9 C6 .. + bcs LB75D ; B74A B0 11 .. + sta $0682,x ; B74C 9D 82 06 ... + lda $0687,x ; B74F BD 87 06 ... + and #$03 ; B752 29 03 ). + sta $0687,x ; B754 9D 87 06 ... + inc $0687,x ; B757 FE 87 06 ... + jmp LB724 ; B75A 4C 24 B7 L$. + +; ---------------------------------------------------------------------------- +LB75D: lda #$02 ; B75D A9 02 .. + sta $067D,x ; B75F 9D 7D 06 .}. + lda RANDOM ; B762 AD 0A D2 ... + sta $0682,x ; B765 9D 82 06 ... + jmp LB724 ; B768 4C 24 B7 L$. + +; ---------------------------------------------------------------------------- +; used in level11 +wind_table_1: + .byte $01,$02,$03,$03,$03,$03 ; B76B 01 02 03 03 03 03 ...... +wind_table_2: + .byte $02,$01,$00,$00,$00,$00,$00,$00 ; B771 02 01 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B779 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B781 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B789 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B791 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B799 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B7A1 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B7A9 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B7B1 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00 ; B7B9 00 00 00 00 00 00 00 ....... +; ---------------------------------------------------------------------------- +LB7C0: lda score+2 ; B7C0 AD 02 07 ... + cmp #$0F ; B7C3 C9 0F .. + bcc LB7EE ; B7C5 90 27 .' + lda score+1 ; B7C7 AD 01 07 ... + cmp #$42 ; B7CA C9 42 .B + bcc LB7EE ; B7CC 90 20 . + lda score ; B7CE AD 00 07 ... + cmp #$40 ; B7D1 C9 40 .@ + bcc LB7EE ; B7D3 90 19 .. + sec ; B7D5 38 8 + lda score ; B7D6 AD 00 07 ... + sbc #$40 ; B7D9 E9 40 .@ + sta score ; B7DB 8D 00 07 ... + lda score+1 ; B7DE AD 01 07 ... + sbc #$42 ; B7E1 E9 42 .B + sta score+1 ; B7E3 8D 01 07 ... + lda score+2 ; B7E6 AD 02 07 ... + sbc #$0F ; B7E9 E9 0F .. + sta score+2 ; B7EB 8D 02 07 ... +LB7EE: jmp L8668 ; B7EE 4C 68 86 Lh. + +; ---------------------------------------------------------------------------- + brk ; B7F1 00 . + brk ; B7F2 00 . + brk ; B7F3 00 . + brk ; B7F4 00 . + brk ; B7F5 00 . + brk ; B7F6 00 . + brk ; B7F7 00 . + brk ; B7F8 00 . + brk ; B7F9 00 . + brk ; B7FA 00 . + brk ; B7FB 00 . + brk ; B7FC 00 . + brk ; B7FD 00 . + brk ; B7FE 00 . + brk ; B7FF 00 . +end_of_level_bonus: + lda level ; B800 AD F6 06 ... + asl a ; B803 0A . + tay ; B804 A8 . + lda mul_25_table,y ; B805 B9 A7 B8 ... + sta $A4 ; B808 85 A4 .. + lda mul_25_table+1,y ; B80A B9 A8 B8 ... + sta $A5 ; B80D 85 A5 .. + lda lives ; B80F AD 0A 07 ... + sta $A6 ; B812 85 A6 .. + inc $A6 ; B814 E6 A6 .. + lda $A4 ; B816 A5 A4 .. + sta $D0 ; B818 85 D0 .. + lda $A5 ; B81A A5 A5 .. + sta $D1 ; B81C 85 D1 .. + lda #$00 ; B81E A9 00 .. + sta work_level_time_bonus ; B820 8D 91 07 ... + sta $D2 ; B823 85 D2 .. + sta work_level_time_bonus+1 ; B825 8D 92 07 ... + lda #$E9 ; B828 A9 E9 .. + sta $D3 ; B82A 85 D3 .. + lda #$3D ; B82C A9 3D .= + sta $D4 ; B82E 85 D4 .. + jsr xxx_level_something_jv ; B830 20 09 80 .. + lda #$78 ; B833 A9 78 .x + sta $3DE9 ; B835 8D E9 3D ..= + jsr L800F ; B838 20 0F 80 .. +add_life_bonus: + clc ; B83B 18 . + lda score ; B83C AD 00 07 ... + adc $A4 ; B83F 65 A4 e. + sta score ; B841 8D 00 07 ... + lda score+1 ; B844 AD 01 07 ... + adc $A5 ; B847 65 A5 e. + sta score+1 ; B849 8D 01 07 ... + bcc LB851 ; B84C 90 03 .. + inc score+2 ; B84E EE 02 07 ... +LB851: clc ; B851 18 . + lda work_level_time_bonus ; B852 AD 91 07 ... + adc $A4 ; B855 65 A4 e. + sta work_level_time_bonus ; B857 8D 91 07 ... + lda work_level_time_bonus+1 ; B85A AD 92 07 ... + adc $A5 ; B85D 65 A5 e. + sta work_level_time_bonus+1 ; B85F 8D 92 07 ... + jsr L800C ; B862 20 0C 80 .. + jsr L800F ; B865 20 0F 80 .. +; play once per life +play_life_bonus_sfx: + lda #$96 ; B868 A9 96 .. + sta sfx_ptr ; B86A 8D 3C 06 .<. + lda #$B8 ; B86D A9 B8 .. + sta sfx_ptr+1 ; B86F 8D 3D 06 .=. + jsr cue_sfx_jv ; B872 20 06 80 .. +LB875: lda sfx_slot_duration ; B875 AD 46 06 .F. + ora $0644 ; B878 0D 44 06 .D. + bne LB875 ; B87B D0 F8 .. + dec $A6 ; B87D C6 A6 .. + bne add_life_bonus ; B87F D0 BA .. + sta jiffy_timer_1 ; B881 8D 1A 06 ... +LB884: lda jiffy_timer_1 ; B884 AD 1A 06 ... + cmp #$20 ; B887 C9 20 . + bne LB884 ; B889 D0 F9 .. + lda randomizer_mode ; B88B AD F3 06 ... + bne LB893 ; B88E D0 03 .. + jmp L8DA0 ; B890 4C A0 8D L.. + +; ---------------------------------------------------------------------------- +LB893: jmp afterlife ; B893 4C 00 96 L.. + +; ---------------------------------------------------------------------------- +; played when adding bonus per life at end of level +sfx_add_life_bonus: + .byte $01,$E4,$00,$18,$02,$3C,$02,$79 ; B896 01 E4 00 18 02 3C 02 79 .....<.y + .byte $02,$F3,$02,$01,$A0,$00,$0A,$14 ; B89E 02 F3 02 01 A0 00 0A 14 ........ + .byte $00 ; B8A6 00 . +; ---------------------------------------------------------------------------- +; multiply by 25 +mul_25_table: + .word $0019,$0032,$004B,$0064 ; B8A7 19 00 32 00 4B 00 64 00 ..2.K.d. + .word $007D,$0096,$00AF,$00C8 ; B8AF 7D 00 96 00 AF 00 C8 00 }....... + .word $00E1,$00FA,$0113,$012C ; B8B7 E1 00 FA 00 13 01 2C 01 ......,. +; ---------------------------------------------------------------------------- +; all zeroes, filler? +zero_filler_b8bf: + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B8BF 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B8C7 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B8CF 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B8D7 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B8DF 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B8E7 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B8EF 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B8F7 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B8FF 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B907 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B90F 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B917 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B91F 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B927 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B92F 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B937 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B93F 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B947 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B94F 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B957 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; B95F 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00 ; B967 00 00 00 00 .... +; ---------------------------------------------------------------------------- +LB96B: lda #$00 ; B96B A9 00 .. + sta jiffy_timer_1 ; B96D 8D 1A 06 ... +LB970: lda jiffy_timer_1 ; B970 AD 1A 06 ... + cmp #$60 ; B973 C9 60 .` + bne LB970 ; B975 D0 F9 .. + lda #$00 ; B977 A9 00 .. + sta FR1 ; B979 85 E0 .. + lda #$00 ; B97B A9 00 .. + sta $06AB ; B97D 8D AB 06 ... + sta $067D ; B980 8D 7D 06 .}. + sta $0681 ; B983 8D 81 06 ... + sta $067E ; B986 8D 7E 06 .~. + sta $0680 ; B989 8D 80 06 ... + lda #$A0 ; B98C A9 A0 .. + sta FR1+1 ; B98E 85 E1 .. + lda #$00 ; B990 A9 00 .. + sta FR1+2 ; B992 85 E2 .. + jsr clear_screen_mem_jv ; B994 20 1E 80 .. + jsr setup_gameboard_dlist_jv ; B997 20 15 80 .. + nop ; B99A EA . + nop ; B99B EA . + nop ; B99C EA . +LB99D: ldy #$16 ; B99D A0 16 .. + lda (FR1),y ; B99F B1 E0 .. + sta dm_progctr ; B9A1 85 C0 .. + iny ; B9A3 C8 . + lda (FR1),y ; B9A4 B1 E0 .. + sta dm_progctr+1 ; B9A6 85 C1 .. + ldy FR1+2 ; B9A8 A4 E2 .. + ldx #$00 ; B9AA A2 00 .. +LB9AC: lda level_names,y ; B9AC B9 00 BB ... + sec ; B9AF 38 8 + sbc #$20 ; B9B0 E9 20 . + sta $3DE8,x ; B9B2 9D E8 3D ..= + iny ; B9B5 C8 . + inx ; B9B6 E8 . + cpx #$14 ; B9B7 E0 14 .. + bne LB9AC ; B9B9 D0 F1 .. + jsr LB9EC ; B9BB 20 EC B9 .. + lda #$00 ; B9BE A9 00 .. + sta jiffy_timer_1 ; B9C0 8D 1A 06 ... + jsr draw_map_jv ; B9C3 20 00 80 .. +LB9C6: lda jiffy_timer_1 ; B9C6 AD 1A 06 ... + cmp #$40 ; B9C9 C9 40 .@ + bne LB9C6 ; B9CB D0 F9 .. + jsr clear_screen_mem_jv ; B9CD 20 1E 80 .. + clc ; B9D0 18 . + lda FR1+2 ; B9D1 A5 E2 .. + adc #$14 ; B9D3 69 14 i. + sta FR1+2 ; B9D5 85 E2 .. + cmp #$F0 ; B9D7 C9 F0 .. + bne LB9DE ; B9D9 D0 03 .. + jmp reinit_game ; B9DB 4C 0C 90 L.. + +; ---------------------------------------------------------------------------- +LB9DE: clc ; B9DE 18 . + lda FR1 ; B9DF A5 E0 .. + adc #$40 ; B9E1 69 40 i@ + sta FR1 ; B9E3 85 E0 .. + bcc LB99D ; B9E5 90 B6 .. + inc FR1+1 ; B9E7 E6 E1 .. + jmp LB99D ; B9E9 4C 9D B9 L.. + +; ---------------------------------------------------------------------------- +LB9EC: ldy #$2F ; B9EC A0 2F ./ + lda (FR1),y ; B9EE B1 E0 .. + sta COLOR0 ; B9F0 8D C4 02 ... + iny ; B9F3 C8 . + lda (FR1),y ; B9F4 B1 E0 .. + sta COLOR1 ; B9F6 8D C5 02 ... + iny ; B9F9 C8 . + lda (FR1),y ; B9FA B1 E0 .. + sta COLOR2 ; B9FC 8D C6 02 ... + rts ; B9FF 60 ` + +; ---------------------------------------------------------------------------- +LBA00: lda #$40 ; BA00 A9 40 .@ + sta NMIEN ; BA02 8D 0E D4 ... + lda #$00 ; BA05 A9 00 .. + sta COLOR3 ; BA07 8D C7 02 ... + sta COLOR0 ; BA0A 8D C4 02 ... + sta COLOR1 ; BA0D 8D C5 02 ... + sta COLOR2 ; BA10 8D C6 02 ... + lda #$30 ; BA13 A9 30 .0 + sta SAVMSC+1 ; BA15 85 59 .Y + jsr clear_screen_mem_jv ; BA17 20 1E 80 .. + lda cur_level_map0 ; BA1A AD D6 07 ... + sta dm_progctr ; BA1D 85 C0 .. + lda cur_level_map0+1 ; BA1F AD D7 07 ... + sta dm_progctr+1 ; BA22 85 C1 .. + jsr draw_map_jv ; BA24 20 00 80 .. + lda #$30 ; BA27 A9 30 .0 + sta SAVMSC+1 ; BA29 85 59 .Y + lda #$00 ; BA2B A9 00 .. + sta $AA ; BA2D 85 AA .. + sta $06AB ; BA2F 8D AB 06 ... + sta COLOR4 ; BA32 8D C8 02 ... + jsr setup_gameboard_dlist_jv ; BA35 20 15 80 .. + lda level ; BA38 AD F6 06 ... + tay ; BA3B A8 . + lda level_name_hscrol_table,y ; BA3C B9 F0 BB ... + sta HSCROL ; BA3F 8D 04 D4 ... + lda #$16 ; BA42 A9 16 .. + sta $085E ; BA44 8D 5E 08 .^. + sta $08DF ; BA47 8D DF 08 ... + lda level ; BA4A AD F6 06 ... + pha ; BA4D 48 H + asl a ; BA4E 0A . + asl a ; BA4F 0A . + asl a ; BA50 0A . + asl a ; BA51 0A . + sta dm_progctr ; BA52 85 C0 .. + pla ; BA54 68 h + asl a ; BA55 0A . + asl a ; BA56 0A . + clc ; BA57 18 . + adc dm_progctr ; BA58 65 C0 e. + tay ; BA5A A8 . + ldx #$00 ; BA5B A2 00 .. +; copy level name into screen RAM +show_level_name: + lda level_names,y ; BA5D B9 00 BB ... + sec ; BA60 38 8 + sbc #$20 ; BA61 E9 20 . + sta $3DEA,x ; BA63 9D EA 3D ..= + inx ; BA66 E8 . + iny ; BA67 C8 . + cpx #$14 ; BA68 E0 14 .. + bne show_level_name ; BA6A D0 F1 .. + lda #$08 ; BA6C A9 08 .. + jsr cue_music_jv ; BA6E 20 18 80 .. +; level is already drawn with all color regs set to black. for each color reg, wait 1 sec before turning it visible. this syncs up with the music because the music was written to sync with this actually +sync_to_music: + jsr wait_1_sec ; BA71 20 9E BA .. + lda cur_level_offs_46+3 ; BA74 AD F1 07 ... + sta COLOR2 ; BA77 8D C6 02 ... + jsr wait_1_sec ; BA7A 20 9E BA .. + lda cur_level_offs_46+2 ; BA7D AD F0 07 ... + sta COLOR1 ; BA80 8D C5 02 ... + jsr wait_1_sec ; BA83 20 9E BA .. + lda cur_level_offs_46+1 ; BA86 AD EF 07 ... + sta COLOR0 ; BA89 8D C4 02 ... + jsr wait_1_sec ; BA8C 20 9E BA .. + lda #$00 ; BA8F A9 00 .. + jsr wait_1_sec ; BA91 20 9E BA .. + jsr enable_joystick_jv ; BA94 20 1B 80 .. + lda #$00 ; BA97 A9 00 .. + tay ; BA99 A8 . + jsr wait_1_sec ; BA9A 20 9E BA .. + rts ; BA9D 60 ` + +; ---------------------------------------------------------------------------- +; actually 64 jiffies, 1.067S ntsc, 1.28s pal +wait_1_sec: + lda #$00 ; BA9E A9 00 .. + sta jiffy_timer_1 ; BAA0 8D 1A 06 ... +keep_waiting: + lda jiffy_timer_1 ; BAA3 AD 1A 06 ... + cmp #$40 ; BAA6 C9 40 .@ + bne keep_waiting ; BAA8 D0 F9 .. + rts ; BAAA 60 ` + +; ---------------------------------------------------------------------------- +; filler? +zero_filler_baab: + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; BAAB 00 00 00 00 00 00 00 00 ........ + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; BAB3 00 00 00 00 00 00 00 00 ........ + .byte $00 ; BABB 00 . +; level intro music, melody +sfx15: .byte $01,$A5,$02,$3C,$10,$2F,$10,$35 ; BABC 01 A5 02 3C 10 2F 10 35 ...<./.5 + .byte $10,$2D,$10,$2F,$08,$2D,$08,$28 ; BAC4 10 2D 10 2F 08 2D 08 28 .-./.-.( + .byte $08,$2F,$08,$35,$08,$2F,$08,$2D ; BACC 08 2F 08 35 08 2F 08 2D ./.5./.- + .byte $08,$35,$08,$3C,$10,$2F,$10,$35 ; BAD4 08 35 08 3C 10 2F 10 35 .5.<./.5 + .byte $10,$2D,$10,$28,$08,$2D,$08,$2F ; BADC 10 2D 10 28 08 2D 08 2F .-.(.-./ + .byte $08,$35,$08,$3C,$10,$00 ; BAE4 08 35 08 3C 10 00 .5.<.. +; level intro music, bass +sfx16: .byte $01,$A7,$02,$F3,$20,$A2,$20,$F3 ; BAEA 01 A7 02 F3 20 A2 20 F3 .... . . + .byte $20,$A2,$20,$F3,$20,$A2,$20,$79 ; BAF2 20 A2 20 F3 20 A2 20 79 . . . y + .byte $10,$A2,$10,$F3,$10,$00 ; BAFA 10 A2 10 F3 10 00 ...... +level_names: + .byte $20,$20,$20,$4E,$4F,$54,$48,$49 ; BB00 20 20 20 4E 4F 54 48 49 NOTHI + .byte $4E,$47,$20,$54,$4F,$20,$49,$54 ; BB08 4E 47 20 54 4F 20 49 54 NG TO IT + .byte $20,$20,$20,$20,$20,$20,$20,$45 ; BB10 20 20 20 20 20 20 20 45 E + .byte $4C,$45,$43,$54,$52,$4F,$43,$55 ; BB18 4C 45 43 54 52 4F 43 55 LECTROCU + .byte $54,$49,$4F,$4E,$20,$20,$20,$20 ; BB20 54 49 4F 4E 20 20 20 20 TION + .byte $20,$20,$20,$20,$20,$44,$55,$4D ; BB28 20 20 20 20 20 44 55 4D DUM + .byte $42,$57,$41,$49,$54,$45,$52,$20 ; BB30 42 57 41 49 54 45 52 20 BWAITER + .byte $20,$20,$20,$20,$20,$20,$20,$20 ; BB38 20 20 20 20 20 20 20 20 + .byte $20,$48,$45,$4C,$4C,$53,$54,$4F ; BB40 20 48 45 4C 4C 53 54 4F HELLSTO + .byte $4E,$45,$53,$20,$20,$20,$20,$20 ; BB48 4E 45 53 20 20 20 20 20 NES + .byte $20,$20,$46,$49,$47,$55,$52,$49 ; BB50 20 20 46 49 47 55 52 49 FIGURI + .byte $54,$53,$20,$52,$45,$56,$45,$4E ; BB58 54 53 20 52 45 56 45 4E TS REVEN + .byte $47,$45,$20,$20,$20,$20,$20,$20 ; BB60 47 45 20 20 20 20 20 20 GE + .byte $20,$20,$20,$57,$41,$4C,$4C,$53 ; BB68 20 20 20 57 41 4C 4C 53 WALLS + .byte $20,$20,$20,$20,$20,$20,$20,$20 ; BB70 20 20 20 20 20 20 20 20 + .byte $20,$20,$20,$20,$20,$20,$5A,$49 ; BB78 20 20 20 20 20 20 5A 49 ZI + .byte $47,$2D,$5A,$41,$47,$20,$20,$20 ; BB80 47 2D 5A 41 47 20 20 20 G-ZAG + .byte $20,$20,$20,$20,$20,$20,$20,$20 ; BB88 20 20 20 20 20 20 20 20 + .byte $20,$53,$50,$45,$4C,$4C,$42,$4F ; BB90 20 53 50 45 4C 4C 42 4F SPELLBO + .byte $55,$4E,$44,$20,$20,$20,$20,$20 ; BB98 55 4E 44 20 20 20 20 20 UND + .byte $20,$20,$20,$20,$20,$20,$42,$4C ; BBA0 20 20 20 20 20 20 42 4C BL + .byte $41,$43,$4B,$4F,$55,$54,$20,$20 ; BBA8 41 43 4B 4F 55 54 20 20 ACKOUT + .byte $20,$20,$20,$20,$48,$45,$52,$45 ; BBB0 20 20 20 20 48 45 52 45 HERE + .byte $54,$48,$45,$52,$45,$45,$56,$45 ; BBB8 54 48 45 52 45 45 56 45 THEREEVE + .byte $52,$59,$57,$48,$45,$52,$45,$20 ; BBC0 52 59 57 48 45 52 45 20 RYWHERE + .byte $20,$20,$20,$20,$20,$48,$41,$54 ; BBC8 20 20 20 20 20 48 41 54 HAT + .byte $43,$48,$4C,$49,$4E,$47,$53,$20 ; BBD0 43 48 4C 49 4E 47 53 20 CHLINGS + .byte $20,$20,$20,$20,$20,$20,$20,$20 ; BBD8 20 20 20 20 20 20 20 20 + .byte $20,$48,$55,$52,$52,$49,$43,$41 ; BBE0 20 48 55 52 52 49 43 41 HURRICA + .byte $4E,$45,$20,$20,$20,$20,$20,$20 ; BBE8 4E 45 20 20 20 20 20 20 NE +; used for centering level name on gameboard +level_name_hscrol_table: + .byte $04,$04,$00,$00,$00,$04,$04,$00 ; BBF0 04 04 00 00 00 04 04 00 ........ + .byte $00,$04,$00,$04,$00,$00,$00,$00 ; BBF8 00 04 00 04 00 00 00 00 ........ +; ---------------------------------------------------------------------------- +; the WELL DONE screen, when you beat all the levels. after this, the game plays random levels. +well_done_screen: + jsr L803C ; BC00 20 3C 80 <. + jsr enable_joystick_jv ; BC03 20 1B 80 .. + jsr clear_screen_mem_jv ; BC06 20 1E 80 .. + lda #$00 ; BC09 A9 00 .. + sta $06AB ; BC0B 8D AB 06 ... + jsr setup_gameboard_dlist_jv ; BC0E 20 15 80 .. + ldy dlist_shadow_lo ; BC11 AC AC 06 ... + lda #$41 ; BC14 A9 41 .A + sta $080A,y ; BC16 99 0A 08 ... + tya ; BC19 98 . + sta $080B,y ; BC1A 99 0B 08 ... + lda #$08 ; BC1D A9 08 .. + sta $080C,y ; BC1F 99 0C 08 ... + lda #$D9 ; BC22 A9 D9 .. + sta dm_progctr ; BC24 85 C0 .. + lda #$BC ; BC26 A9 BC .. + sta dm_progctr+1 ; BC28 85 C1 .. + jsr draw_map_jv ; BC2A 20 00 80 .. + lda #$04 ; BC2D A9 04 .. + sta $0688 ; BC2F 8D 88 06 ... + sta $066A ; BC32 8D 6A 06 .j. + lda #$7C ; BC35 A9 7C .| + sta $067E ; BC37 8D 7E 06 .~. + lda #$20 ; BC3A A9 20 . + sta $0683 ; BC3C 8D 83 06 ... +; load dli_service_2 address into dli shadow +setup_dli_2: + lda #$C7 ; BC3F A9 C7 .. + sta dli_vec_shadow_lo ; BC41 8D AE 06 ... + lda #$BD ; BC44 A9 BD .. + sta dli_vec_shadow_hi ; BC46 8D AF 06 ... + lda #$8D ; BC49 A9 8D .. + sta $0809 ; BC4B 8D 09 08 ... + sta $088A ; BC4E 8D 8A 08 ... +LBC51: lda dli_vec_shadow_hi ; BC51 AD AF 06 ... + bne LBC51 ; BC54 D0 FB .. + lda #$96 ; BC56 A9 96 .. + sta COLOR0 ; BC58 8D C4 02 ... + sta jiffy_timer_1 ; BC5B 8D 1A 06 ... +LBC5E: lda jiffy_timer_1 ; BC5E AD 1A 06 ... + cmp #$20 ; BC61 C9 20 . + bne LBC5E ; BC63 D0 F9 .. + lda #$03 ; BC65 A9 03 .. + jsr cue_music_jv ; BC67 20 18 80 .. + lda #$CD ; BC6A A9 CD .. + sta work_level_sub0 ; BC6C 8D 82 07 ... + lda #$BC ; BC6F A9 BC .. + sta work_level_sub0+1 ; BC71 8D 83 07 ... + lda #$05 ; BC74 A9 05 .. + sta player_speed ; BC76 8D 24 06 .$. + lda #$0D ; BC79 A9 0D .. + sta joystick_disabled ; BC7B 8D 32 06 .2. + lda #$00 ; BC7E A9 00 .. + sta $0623 ; BC80 8D 23 06 .#. + lda #$52 ; BC83 A9 52 .R + sta work_level_sub1 ; BC85 8D 84 07 ... + lda #$BD ; BC88 A9 BD .. + sta work_level_sub1+1 ; BC8A 8D 85 07 ... + lda #$4C ; BC8D A9 4C .L + sta work_level_offs_46+7 ; BC8F 8D B5 07 ... +LBC92: lda work_level_sub1 ; BC92 AD 84 07 ... + cmp #$E6 ; BC95 C9 E6 .. + bne LBC92 ; BC97 D0 F9 .. + lda #$00 ; BC99 A9 00 .. + sta $06AB ; BC9B 8D AB 06 ... + jsr setup_gameboard_dlist_jv ; BC9E 20 15 80 .. + ldx #$0B ; BCA1 A2 0B .. +LBCA3: lda LBDD1,x ; BCA3 BD D1 BD ... + sta $3DE8,x ; BCA6 9D E8 3D ..= + dex ; BCA9 CA . + bne LBCA3 ; BCAA D0 F7 .. + lda #$3D ; BCAC A9 3D .= + sta $D4 ; BCAE 85 D4 .. + lda #$F5 ; BCB0 A9 F5 .. + sta $D3 ; BCB2 85 D3 .. + ldx #$03 ; BCB4 A2 03 .. +LBCB6: lda $06FF,x ; BCB6 BD FF 06 ... + sta $CF,x ; BCB9 95 CF .. + dex ; BCBB CA . + bne LBCB6 ; BCBC D0 F8 .. + jsr xxx_level_something_jv ; BCBE 20 09 80 .. +LBCC1: lda $0663 ; BCC1 AD 63 06 .c. + bne LBCC1 ; BCC4 D0 FB .. + lda level ; BCC6 AD F6 06 ... + inc randomizer_mode ; BCC9 EE F3 06 ... + rts ; BCCC 60 ` + +; ---------------------------------------------------------------------------- +; dunno, but referenced by code at $BC6A +code_bccd: + lda $062A ; BCCD AD 2A 06 .*. + sta COLOR2 ; BCD0 8D C6 02 ... + lda #$02 ; BCD3 A9 02 .. + sta collision_save+4 ; BCD5 8D B4 06 ... + rts ; BCD8 60 ` + +; ---------------------------------------------------------------------------- +; level map used for the WELL DONE screen, when you beat level 12 +well_done_map: + .byte $FE,$A0,$BD,$FD,$00,$04,$0C,$06 ; BCD9 FE A0 BD FD 00 04 0C 06 ........ + .byte $07,$30,$06,$09,$54,$06,$09,$78 ; BCE1 07 30 06 09 54 06 09 78 .0..T..x + .byte $06,$09,$0C,$30,$09,$30,$38,$05 ; BCE9 06 09 0C 30 09 30 38 05 ...0.08. + .byte $54,$30,$09,$78,$30,$09,$FD,$04 ; BCF1 54 30 09 78 30 09 FD 04 T0.x0... + .byte $04,$10,$22,$02,$20,$34,$01,$34 ; BCF9 04 10 22 02 20 34 01 34 ..". 4.4 + .byte $4C,$01,$44,$34,$01,$58,$38,$05 ; BD01 4C 01 44 34 01 58 38 05 L.D4.X8. + .byte $FD,$04,$FC,$1C,$26,$02,$20,$4C ; BD09 FD 04 FC 1C 26 02 20 4C ....&. L + .byte $01,$34,$34,$01,$44,$4C,$01,$FD ; BD11 01 34 34 01 44 4C 01 FD .44.DL.. + .byte $04,$00,$34,$06,$06,$34,$16,$06 ; BD19 04 00 34 06 06 34 16 06 ..4..4.. + .byte $34,$26,$06,$54,$26,$07,$78,$26 ; BD21 34 26 06 54 26 07 78 26 4&.T&.x& + .byte $07,$10,$30,$04,$0C,$50,$05,$38 ; BD29 07 10 30 04 0C 50 05 38 ..0..P.8 + .byte $30,$03,$38,$50,$03,$7C,$30,$06 ; BD31 30 03 38 50 03 7C 30 06 0.8P.|0. + .byte $7C,$40,$06,$7C,$50,$06,$FD,$00 ; BD39 7C 40 06 7C 50 06 FD 00 |@.|P... + .byte $04,$24,$06,$07,$24,$38,$05,$48 ; BD41 04 24 06 07 24 38 05 48 .$..$8.H + .byte $38,$05,$6C,$30,$09,$18,$1A,$03 ; BD49 38 05 6C 30 09 18 1A 03 8.l0.... + .byte $FF ; BD51 FF . +; ---------------------------------------------------------------------------- +; referenced by code at $BC83 +code_bd52: + lda $0621 ; BD52 AD 21 06 .!. + bne LBD58 ; BD55 D0 01 .. + rts ; BD57 60 ` + +; ---------------------------------------------------------------------------- +LBD58: ldy dlist_shadow_lo ; BD58 AC AC 06 ... + lda #$0D ; BD5B A9 0D .. + sta $0809,y ; BD5D 99 09 08 ... + lda #$8D ; BD60 A9 8D .. + sta $080A,y ; BD62 99 0A 08 ... + lda $080B,y ; BD65 B9 0B 08 ... + sta $080C,y ; BD68 99 0C 08 ... + lda #$41 ; BD6B A9 41 .A + sta $080B,y ; BD6D 99 0B 08 ... + lda #$08 ; BD70 A9 08 .. + sta $080D,y ; BD72 99 0D 08 ... + inc dlist_shadow_lo ; BD75 EE AC 06 ... + cpy #$4E ; BD78 C0 4E .N + beq LBD81 ; BD7A F0 05 .. + cpy #$CE ; BD7C C0 CE .. + beq LBD81 ; BD7E F0 01 .. + rts ; BD80 60 ` + +; ---------------------------------------------------------------------------- +LBD81: lda #$E6 ; BD81 A9 E6 .. + sta work_level_sub1 ; BD83 8D 84 07 ... + lda #$06 ; BD86 A9 06 .. + sta work_level_sub1+1 ; BD88 8D 85 07 ... + lda #$09 ; BD8B A9 09 .. + sta player_speed ; BD8D 8D 24 06 .$. + lda #$C6 ; BD90 A9 C6 .. + sta $0683 ; BD92 8D 83 06 ... + lda #$00 ; BD95 A9 00 .. + sta $0621 ; BD97 8D 21 06 .!. + lda #$01 ; BD9A A9 01 .. + sta $0688 ; BD9C 8D 88 06 ... + rts ; BD9F 60 ` + +; ---------------------------------------------------------------------------- +; used to draw the large WELL DONE banner +well_done_shape: + .byte $04,$00,$00,$01,$01,$01,$01,$05 ; BDA0 04 00 00 01 01 01 01 05 ........ + .byte $00,$01,$01,$01,$01,$01,$03,$05 ; BDA8 00 01 01 01 01 01 03 05 ........ + .byte $00,$02,$01,$01,$01,$01,$03,$05 ; BDB0 00 02 01 01 01 01 03 05 ........ + .byte $00,$03,$01,$01,$01,$01,$03,$04 ; BDB8 00 03 01 01 01 01 03 04 ........ + .byte $01,$04,$03,$03,$03,$03,$FF ; BDC0 01 04 03 03 03 03 FF ....... +; ---------------------------------------------------------------------------- +; DLI service routine, changes COLBK, address gets stored in $6ae/$6af by code at $bc3c +dli_service_2: + pha ; BDC7 48 H + lda #$C4 ; BDC8 A9 C4 .. + sta WSYNC ; BDCA 8D 0A D4 ... + sta COLBK ; BDCD 8D 1A D0 ... + pla ; BDD0 68 h +LBDD1: rti ; BDD1 40 @ + +; ---------------------------------------------------------------------------- +; not sure what displays this, but it's screen codes +total_score_msg: + .byte $74,$6F,$74,$61,$6C,$00,$73,$63 ; BDD2 74 6F 74 61 6C 00 73 63 total.sc + .byte $6F,$72,$65,$33,$00,$26,$29,$2C ; BDDA 6F 72 65 33 00 26 29 2C ore3.&), + .byte $25,$33,$00,$00,$00,$00,$00,$00 ; BDE2 25 33 00 00 00 00 00 00 %3...... + .byte $00,$00,$00,$00,$00,$00,$00,$00 ; BDEA 00 00 00 00 00 00 00 00 ........ +sfx00: .byte $01,$A5,$02,$79,$08,$A2,$08,$79 ; BDF2 01 A5 02 79 08 A2 08 79 ...y...y + .byte $08,$A2,$08,$C1,$10,$C1,$10,$F3 ; BDFA 08 A2 08 C1 10 C1 10 F3 ........ + .byte $20,$F3,$20,$02,$F5,$BD,$02,$79 ; BE02 20 F3 20 02 F5 BD 02 79 . ....y + .byte $08,$6C,$08,$60,$08,$5B,$08,$51 ; BE0A 08 6C 08 60 08 5B 08 51 .l.`.[.Q + .byte $08,$5B,$08,$60,$08,$6C,$08,$79 ; BE12 08 5B 08 60 08 6C 08 79 .[.`.l.y + .byte $10,$A2,$10,$F3,$20,$01,$A0,$00 ; BE1A 10 A2 10 F3 20 01 A0 00 .... ... + .byte $0A,$80,$00 ; BE22 0A 80 00 ... +sfx01: .byte $01,$A6,$02,$3C,$20,$51,$20,$48 ; BE25 01 A6 02 3C 20 51 20 48 ...< Q H + .byte $08,$51,$08,$48,$08,$40,$08,$3C ; BE2D 08 51 08 48 08 40 08 3C .Q.H.@.< + .byte $10,$3C,$20,$3C,$10,$51,$10,$51 ; BE35 10 3C 20 3C 10 51 10 51 .< <.Q.Q + .byte $10,$48,$08,$51,$08,$48,$08,$40 ; BE3D 10 48 08 51 08 48 08 40 .H.Q.H.@ + .byte $08,$3C,$20,$3C,$20,$51,$20,$48 ; BE45 08 3C 20 3C 20 51 20 48 .< < Q H + .byte $08,$51,$08,$48,$08,$40,$08,$3C ; BE4D 08 51 08 48 08 40 08 3C .Q.H.@.< + .byte $10,$3C,$10,$3C,$08,$35,$08,$2F ; BE55 10 3C 10 3C 08 35 08 2F .<.<.5./ + .byte $08,$2D,$08,$28,$08,$2D,$08,$2F ; BE5D 08 2D 08 28 08 2D 08 2F .-.(.-./ + .byte $08,$35,$08,$3C,$08,$51,$08,$60 ; BE65 08 35 08 3C 08 51 08 60 .5.<.Q.` + .byte $08,$51,$08,$79,$20,$00,$01,$81 ; BE6D 08 51 08 79 20 00 01 81 .Q.y ... + .byte $00,$32,$01,$00 ; BE75 00 32 01 00 .2.. +sfx_extra_life: + .byte $01,$A8,$00,$05,$02,$0F,$02,$0A ; BE79 01 A8 00 05 02 0F 02 0A ........ + .byte $02,$14,$02,$0F,$02,$19,$02,$14 ; BE81 02 14 02 0F 02 19 02 14 ........ + .byte $02,$1E,$02,$00 ; BE89 02 1E 02 00 .... +; end of game tune, melody +sfx02: .byte $01,$A5,$02,$3C,$10,$51,$10,$3C ; BE8D 01 A5 02 3C 10 51 10 3C ...<.Q.< + .byte $10,$51,$10,$44,$08,$44,$08,$44 ; BE95 10 51 10 44 08 44 08 44 .Q.D.D.D + .byte $08,$44,$08,$44,$10,$5B,$10,$4C ; BE9D 08 44 08 44 10 5B 10 4C .D.D.[.L + .byte $10,$66,$10,$4C,$10,$66,$10,$51 ; BEA5 10 66 10 4C 10 66 10 51 .f.L.f.Q + .byte $40,$00 ; BEAD 40 00 @. +; end of game tune, bass +sfx03: .byte $01,$A4,$02,$79,$10,$A2,$10,$F3 ; BEAF 01 A4 02 79 10 A2 10 F3 ...y.... + .byte $10,$79,$10,$88,$10,$B6,$10,$D9 ; BEB7 10 79 10 88 10 B6 10 D9 .y...... + .byte $10,$88,$10,$99,$10,$CC,$10,$CC ; BEBF 10 88 10 99 10 CC 10 CC ........ + .byte $10,$99,$10,$A2,$08,$99,$08,$A2 ; BEC7 10 99 10 A2 08 99 08 A2 ........ + .byte $08,$99,$08,$A2,$20,$00 ; BECF 08 99 08 A2 20 00 .... . +; end level tune #1, bass +sfx04: .byte $01,$A5,$02,$79,$14,$A2,$14,$79 ; BED5 01 A5 02 79 14 A2 14 79 ...y...y + .byte $14,$A2,$14,$79,$14,$A2,$14,$F3 ; BEDD 14 A2 14 79 14 A2 14 F3 ...y.... + .byte $14,$A2,$14,$02,$D8,$BE,$01,$00 ; BEE5 14 A2 14 02 D8 BE 01 00 ........ +; end level tune #1, melody +sfx05: .byte $01,$A0,$00,$0A,$A0,$01,$A6,$02 ; BEED 01 A0 00 0A A0 01 A6 02 ........ + .byte $51,$0A,$55,$0A,$51,$0A,$4C,$0A ; BEF5 51 0A 55 0A 51 0A 4C 0A Q.U.Q.L. + .byte $51,$0A,$4C,$0A,$48,$0A,$4C,$0A ; BEFD 51 0A 4C 0A 48 0A 4C 0A Q.L.H.L. + .byte $48,$0A,$44,$0A,$48,$0A,$44,$0A ; BF05 48 0A 44 0A 48 0A 44 0A H.D.H.D. + .byte $3C,$0A,$51,$0A,$3C,$14,$00 ; BF0D 3C 0A 51 0A 3C 14 00 <.Q.<.. +; end level tune #2, melody +sfx06: .byte $01,$A6,$02,$79,$20,$60,$14,$51 ; BF14 01 A6 02 79 20 60 14 51 ...y `.Q + .byte $3C,$60,$0A,$5B,$14,$60,$08,$5B ; BF1C 3C 60 0A 5B 14 60 08 5B <`.[.`.[ + .byte $14,$60,$08,$5B,$14,$51,$08,$60 ; BF24 14 60 08 5B 14 51 08 60 .`.[.Q.` + .byte $14,$79,$20,$00 ; BF2C 14 79 20 00 .y . +; end level tune #2, bass +sfx07: .byte $01,$A6,$02,$F3,$0A,$D9,$0A,$C1 ; BF30 01 A6 02 F3 0A D9 0A C1 ........ + .byte $0A,$A2,$14,$79,$1E,$A2,$1E,$C1 ; BF38 0A A2 14 79 1E A2 1E C1 ...y.... + .byte $0A,$B6,$50,$C1,$08,$A2,$14,$F3 ; BF40 0A B6 50 C1 08 A2 14 F3 ..P..... + .byte $20,$00 ; BF48 20 00 . +; end level tune #3, bass +sfx08: .byte $01,$A8,$02,$79,$30,$A2,$20,$79 ; BF4A 01 A8 02 79 30 A2 20 79 ...y0. y + .byte $20,$51,$10,$A2,$30,$6C,$20,$A3 ; BF52 20 51 10 A2 30 6C 20 A3 Q..0l . + .byte $20,$6C,$10,$79,$70,$00 ; BF5A 20 6C 10 79 70 00 l.yp. +; end level tune #3, melody +sfx09: .byte $01,$A5,$02,$79,$10,$60,$10,$51 ; BF60 01 A5 02 79 10 60 10 51 ...y.`.Q + .byte $10,$3C,$20,$35,$10,$3C,$10,$44 ; BF68 10 3C 20 35 10 3C 10 44 .< 5.<.D + .byte $10,$40,$10,$51,$20,$5B,$20,$6C ; BF70 10 40 10 51 20 5B 20 6C .@.Q [ l + .byte $20,$80,$10,$79,$10,$60,$10,$51 ; BF78 20 80 10 79 10 60 10 51 ..y.`.Q + .byte $10,$3C,$40,$00 ; BF80 10 3C 40 00 .<@. +; end level tune #4, melody +sfx10: .byte $01,$A5,$02,$3C,$20,$2D,$12,$32 ; BF84 01 A5 02 3C 20 2D 12 32 ...< -.2 + .byte $20,$3C,$20,$4C,$08,$44,$14,$4C ; BF8C 20 3C 20 4C 08 44 14 4C < L.D.L + .byte $09,$40,$20,$32,$20,$40,$09,$44 ; BF94 09 40 20 32 20 40 09 44 .@ 2 @.D + .byte $09,$4C,$09,$5B,$09,$4C,$09,$5B ; BF9C 09 4C 09 5B 09 4C 09 5B .L.[.L.[ + .byte $48,$00 ; BFA4 48 00 H. +; end level tune #4, bass +sfx11: .byte $01,$A6,$02,$79,$20,$B6,$30,$99 ; BFA6 01 A6 02 79 20 B6 30 99 ...y .0. + .byte $20,$88,$09,$99,$20,$E6,$30,$99 ; BFAE 20 88 09 99 20 E6 30 99 ... .0. + .byte $20,$88,$09,$99,$20,$B6,$3A,$00 ; BFB6 20 88 09 99 20 B6 3A 00 ... .:. +; jumping sound +sfx12: .byte $01,$A5,$00,$79,$04,$60,$04,$51 ; BFBE 01 A5 00 79 04 60 04 51 ...y.`.Q + .byte $04,$3C,$04,$51,$04,$60,$04,$79 ; BFC6 04 3C 04 51 04 60 04 79 .<.Q.`.y + .byte $04,$00 ; BFCE 04 00 .. +; funeral march melody +sfx13: .byte $01,$A5,$01,$3C,$20,$3C,$10,$3C ; BFD0 01 A5 01 3C 20 3C 10 3C ...< <.< + .byte $10,$3C,$20,$32,$10,$35,$10,$35 ; BFD8 10 3C 20 32 10 35 10 35 .< 2.5.5 + .byte $10,$3C,$10,$3C,$10,$40,$10,$3C ; BFE0 10 3C 10 3C 10 40 10 3C .<.<.@.< + .byte $40,$00 ; BFE8 40 00 @. +; funeral march bass +sfx14: .byte $01,$A6,$00,$79,$10,$A2,$10,$02 ; BFEA 01 A6 00 79 10 A2 10 02 ...y.... + .byte $ED,$BF,$06,$F3,$10,$A2,$10,$00 ; BFF2 ED BF 06 F3 10 A2 10 00 ........ +; ---------------------------------------------------------------------------- +; main entry point, note cartstart_left and cartstart_right point to the same address +cartstart_left: + .addr cart_entry_point ; BFFA C0 8A .. +; ---------------------------------------------------------------------------- +; 0 here means 'cartridge present' +cartpresent_left: + .byte $00 ; BFFC 00 . +; 4 here means init & start the cart, no disk boot, non-diagnostic +cartoptions_left: + .byte $04 ; BFFD 04 . +; ---------------------------------------------------------------------------- +; points to a CLC/RTS do-nothing routine (same as cartinit_right) +cartinit_left: + .addr cart_start_stub ; BFFE FE 8A .. -- cgit v1.2.3