aboutsummaryrefslogtreecommitdiff
path: root/jumpmanjr.dasm
diff options
context:
space:
mode:
Diffstat (limited to 'jumpmanjr.dasm')
-rw-r--r--jumpmanjr.dasm7360
1 files changed, 7360 insertions, 0 deletions
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 ..<Z<...
+ .byte $18,$3C,$1C,$1A,$3C,$58,$38,$18 ; 9D08 18 3C 1C 1A 3C 58 38 18 .<..<X8.
+ .byte $3C,$24,$14,$14,$38,$58,$3C,$1A ; 9D10 3C 24 14 14 38 58 3C 1A <$..8X<.
+ .byte $1C,$18,$3C,$24,$28,$28,$99,$5A ; 9D18 1C 18 3C 24 28 28 99 5A ..<$((.Z
+ .byte $3C,$18,$18,$18,$3C,$24,$42,$C3 ; 9D20 3C 18 18 18 3C 24 42 C3 <...<$B.
+ .byte $19,$12,$3C,$58,$98,$18,$7C,$C4 ; 9D28 19 12 3C 58 98 18 7C C4 ..<X..|.
+ .byte $04,$06,$00,$18,$3C,$5A,$99,$18 ; 9D30 04 06 00 18 3C 5A 99 18 ....<Z..
+ .byte $3C,$24,$42,$C3,$98,$48,$3C,$1A ; 9D38 3C 24 42 C3 98 48 3C 1A <$B..H<.
+ .byte $19,$18,$3E,$23,$20,$60,$18,$10 ; 9D40 19 18 3E 23 20 60 18 10 ..># `..
+ .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 ..<Z....
+ .byte $61,$42,$44,$7F,$7F,$44,$42,$61 ; 9DC8 61 42 44 7F 7F 44 42 61 aBD..DBa
+ .byte $00,$00,$08,$22,$80,$01,$58,$18 ; 9DD0 00 00 08 22 80 01 58 18 ..."..X.
+ .byte $3C,$5A,$99,$FF,$10,$44,$01,$80 ; 9DD8 3C 5A 99 FF 10 44 01 80 <Z...D..
+ .byte $1A,$18,$3C,$5A,$99,$FF,$00,$00 ; 9DE0 1A 18 3C 5A 99 FF 00 00 ..<Z....
+ .byte $3C,$3C,$3C,$E7,$06,$C3,$60,$E3 ; 9DE8 3C 3C 3C E7 06 C3 60 E3 <<<...`.
+ .byte $76,$E3,$76,$CE,$67,$CE,$67,$83 ; 9DF0 76 E3 76 CE 67 CE 67 83 v.v.g.g.
+ .byte $C1,$00,$00,$00,$00,$00,$00,$00 ; 9DF8 C1 00 00 00 00 00 00 00 ........
+; GR.1/2 font, 512 bytes
+charset:.byte $00,$00,$00,$00,$00,$00,$00,$00 ; 9E00 00 00 00 00 00 00 00 00 ........
+ .byte $00,$0C,$19,$3E,$58,$1E,$22 ; 9E08 00 0C 19 3E 58 1E 22 ...>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 ..<fffff
+ .byte $3C,$00,$18,$38,$18,$18,$18,$18 ; 9E87 3C 00 18 38 18 18 18 18 <..8....
+ .byte $7E,$00,$3C,$66,$06,$0C,$18,$30 ; 9E8F 7E 00 3C 66 06 0C 18 30 ~.<f...0
+ .byte $7E,$00,$3C,$66,$06,$1C,$06,$66 ; 9E97 7E 00 3C 66 06 1C 06 66 ~.<f...f
+ .byte $3C,$00,$0C,$1C,$3C,$6C,$7E,$0C ; 9E9F 3C 00 0C 1C 3C 6C 7E 0C <...<l~.
+ .byte $0C,$00,$7E,$60,$60,$7C,$06,$06 ; 9EA7 0C 00 7E 60 60 7C 06 06 ..~``|..
+ .byte $7C,$00,$3C,$66,$60,$7C,$66,$66 ; 9EAF 7C 00 3C 66 60 7C 66 66 |.<f`|ff
+ .byte $3C,$00,$7E,$06,$0C,$18,$30,$30 ; 9EB7 3C 00 7E 06 0C 18 30 30 <.~...00
+ .byte $30,$00,$3C,$66,$66,$3C,$66,$66 ; 9EBF 30 00 3C 66 66 3C 66 66 0.<ff<ff
+ .byte $3C,$00,$3C,$66,$66,$3E,$06,$66 ; 9EC7 3C 00 3C 66 66 3E 06 66 <.<ff>.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 |.<ff...
+ .byte $18,$00,$3C,$66,$6E,$6E,$60,$3E ; 9EFF 18 00 3C 66 6E 6E 60 3E ..<fnn`>
+ .byte $00,$00,$18,$3C,$66,$66,$7E,$66 ; 9F07 00 00 18 3C 66 66 7E 66 ...<ff~f
+ .byte $66,$00,$7C,$66,$66,$7C,$66,$66 ; 9F0F 66 00 7C 66 66 7C 66 66 f.|ff|ff
+ .byte $7C,$00,$3C,$66,$60,$60,$60,$66 ; 9F17 7C 00 3C 66 60 60 60 66 |.<f```f
+ .byte $3C,$00,$7C,$66,$66,$66,$66,$66 ; 9F1F 3C 00 7C 66 66 66 66 66 <.|fffff
+ .byte $7C,$00,$7E,$60,$60,$78,$60,$60 ; 9F27 7C 00 7E 60 60 78 60 60 |.~``x``
+ .byte $7E,$00,$7E,$60,$60,$78,$60,$60 ; 9F2F 7E 00 7E 60 60 78 60 60 ~.~``x``
+ .byte $60,$00,$3C,$66,$60,$60,$6E,$66 ; 9F37 60 00 3C 66 60 60 6E 66 `.<f``nf
+ .byte $3C,$00,$66,$66,$66,$7E,$66,$66 ; 9F3F 3C 00 66 66 66 7E 66 66 <.fff~ff
+ .byte $66,$00,$3C,$18,$18,$18,$18,$18 ; 9F47 66 00 3C 18 18 18 18 18 f.<.....
+ .byte $3C,$00,$06,$06,$06,$06,$66,$66 ; 9F4F 3C 00 06 06 06 06 66 66 <.....ff
+ .byte $3C,$00,$66,$6C,$78,$70,$78,$6C ; 9F57 3C 00 66 6C 78 70 78 6C <.flxpxl
+ .byte $66,$00,$60,$60,$60,$60,$60,$60 ; 9F5F 66 00 60 60 60 60 60 60 f.``````
+ .byte $7E,$00,$63,$77,$7F,$6B,$63,$63 ; 9F67 7E 00 63 77 7F 6B 63 63 ~.cw.kcc
+ .byte $63,$00,$66,$66,$76,$7E,$6E,$66 ; 9F6F 63 00 66 66 76 7E 6E 66 c.ffv~nf
+ .byte $66,$00,$3C,$66,$66,$66,$66,$66 ; 9F77 66 00 3C 66 66 66 66 66 f.<fffff
+ .byte $3C,$00,$7C,$66,$66,$7C,$60,$60 ; 9F7F 3C 00 7C 66 66 7C 60 60 <.|ff|``
+ .byte $60,$00,$3C,$66,$66,$66,$66,$6C ; 9F87 60 00 3C 66 66 66 66 6C `.<ffffl
+ .byte $36,$00,$7C,$66,$66,$7C,$6C,$66 ; 9F8F 36 00 7C 66 66 7C 6C 66 6.|ff|lf
+ .byte $66,$00,$3C,$66,$60,$3C,$06,$66 ; 9F97 66 00 3C 66 60 3C 06 66 f.<f`<.f
+ .byte $3C,$00,$7E,$18,$18,$18,$18,$18 ; 9F9F 3C 00 7E 18 18 18 18 18 <.~.....
+ .byte $18,$00,$66,$66,$66,$66,$66,$66 ; 9FA7 18 00 66 66 66 66 66 66 ..ffffff
+ .byte $3C,$00,$66,$66,$66,$66,$66,$3C ; 9FAF 3C 00 66 66 66 66 66 3C <.fffff<
+ .byte $18,$00,$63,$63,$63,$6B,$7F,$77 ; 9FB7 18 00 63 63 63 6B 7F 77 ..ccck.w
+ .byte $63,$00,$66,$66,$3C,$3C,$3C,$66 ; 9FBF 63 00 66 66 3C 3C 3C 66 c.ff<<<f
+ .byte $66,$00,$66,$66,$66,$3C,$18,$18 ; 9FC7 66 00 66 66 66 3C 18 18 f.fff<..
+ .byte $18,$00,$7E,$06,$0C,$18,$30,$60 ; 9FCF 18 00 7E 06 0C 18 30 60 ..~...0`
+ .byte $7E,$00,$00,$00,$00,$00,$00,$00 ; 9FD7 7E 00 00 00 00 00 00 00 ~.......
+ .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 9FDF 00 00 00 00 00 00 00 00 ........
+ .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 9FE7 00 00 00 00 00 00 00 00 ........
+ .byte $00,$00,$00,$00,$00,$00,$00,$00 ; 9FEF 00 00 00 00 00 00 00 00 ........
+ .byte $00,$00,$00 ; 9FF7 00 00 00 ...
+; ----------------------------------------------------------------------------
+; main entry point, note cartstart_left and cartstart_right point to the same address
+cartstart_right:
+ .addr cart_entry_point ; 9FFA C0 8A ..
+; ----------------------------------------------------------------------------
+; 0 here means 'cartridge present'
+cartpresent_right:
+ .byte $00 ; 9FFC 00 .
+; 4 here means init & start the cart, no disk boot, non-diagnostic
+cartoptions_right:
+ .byte $04 ; 9FFD 04 .
+; ----------------------------------------------------------------------------
+; points to a CLC/RTS do-nothing routine (same as cartinit_left)
+cartinit_right:
+ .addr cart_start_stub ; 9FFE FE 8A ..
+; ----------------------------------------------------------------------------
+; 64-byte level descriptors, 12 of them (1 per level). first 2 bytes are level number in screencodes
+level00_desc:
+ .byte $10,$11 ; A000 10 11 ..
+; ----------------------------------------------------------------------------
+; a subroutine
+level00_sub0:
+ .addr L0000 ; A002 00 00 ..
+; a subroutine
+level00_sub1:
+ .addr L0000 ; A004 00 00 ..
+; a subroutine
+level00_sub2:
+ .addr L0000 ; A006 00 00 ..
+; a subroutine
+level00_sub3:
+ .addr check_collisions_1 ; A008 73 8F s.
+; ----------------------------------------------------------------------------
+; number of bombs to pick up on this level
+level00_num_bombs:
+ .byte $0C ; A00A 0C .
+; 0 = no bullets
+level00_bullet_chance:
+ .byte $01 ; A00B 01 .
+; jumpman starting Y position
+level00_y_start:
+ .byte $A0 ; A00C A0 .
+; jumpman starting X position
+level00_x_start:
+ .byte $7C ; A00D 7C |
+; points to $0600
+level00_offs_14:
+ .byte $00,$06 ; A00E 00 06 ..
+; points awarded per bomb pickup (always $64 aka 100)
+level00_points_per_bomb:
+ .byte $64 ; A010 64 d
+; ----------------------------------------------------------------------------
+; amount of time bonus at start of level
+level00_time_bonus:
+ .word $03E8 ; A011 E8 03 ..
+; ----------------------------------------------------------------------------
+; always $00
+level00_offs_19:
+ .byte $00 ; A013 00 .
+; ----------------------------------------------------------------------------
+; pointer to ROM table or $06xx
+level00_unkn_table0:
+ .addr L06DF ; A014 DF 06 ..
+; map data
+level00_map0:
+ .addr level00_map ; A016 00 A3 ..
+; map data
+level00_map1:
+ .addr LA366 ; A018 66 A3 f.
+; map data
+level00_map2:
+ .addr LA38B ; A01A 8B A3 ..
+; unknown, pointer to a ROM table or $0000
+level00_unkn_table1:
+ .addr LA3A4 ; A01C A4 A3 ..
+; ----------------------------------------------------------------------------
+; always $0000
+level00_offs_30:
+ .byte $00,$00 ; A01E 00 00 ..
+; ----------------------------------------------------------------------------
+; $06E6 for most levels, or else a ROM subroutine
+level00_sub4:
+ .addr L06E6 ; A020 E6 06 ..
+; $06E6 for some levels, or else a ROM subroutine
+level00_sub5:
+ .addr L06E6 ; A022 E6 06 ..
+; always $9740 aka game_main_loop
+level00_sub6:
+ .addr game_main_loop ; A024 40 97 @.
+; called at end of level (all bombs picked up). $06E6 for all but level07
+level00_sub_eol:
+ .addr L06E6 ; A026 E6 06 ..
+; ----------------------------------------------------------------------------
+; all zeroes
+level00_offs_40:
+ .byte $00,$00,$00,$00,$00,$00 ; A028 00 00 00 00 00 00 ......
+; unknown
+level00_offs_46:
+ .byte $CA,$96,$18,$5A,$0C,$24,$4C,$74 ; A02E CA 96 18 5A 0C 24 4C 74 ...Z.$Lt
+ .byte $8C ; A036 8C .
+; unknown, always $00 $00 $00
+level00_offs_55:
+ .byte $00,$00,$00 ; A037 00 00 00 ...
+; unknown, not a ROM address
+level00_offs_58:
+ .byte $1A,$7E ; A03A 1A 7E .~
+; unknown, level05 (walls) has $ff $ff $ff $ff, all others $00 $00 $00 $00
+level00_offs_60:
+ .byte $00,$00,$00,$00 ; A03C 00 00 00 00 ....
+; first 2 bytes are level number in screencodes
+level01_desc:
+ .byte $10,$12 ; A040 10 12 ..
+; ----------------------------------------------------------------------------
+; a subroutine
+level01_sub0:
+ .addr LA4DD ; A042 DD A4 ..
+; a subroutine
+level01_sub1:
+ .addr LA509 ; A044 09 A5 ..
+; a subroutine
+level01_sub2:
+ .addr L0000 ; A046 00 00 ..
+; a subroutine
+level01_sub3:
+ .addr LA53D ; A048 3D A5 =.
+; ----------------------------------------------------------------------------
+; number of bombs to pick up on this level
+level01_num_bombs:
+ .byte $10 ; A04A 10 .
+; 0 = no bullets
+level01_bullet_chance:
+ .byte $02 ; A04B 02 .
+; jumpman starting Y position
+level01_y_start:
+ .byte $20 ; A04C 20
+; jumpman starting X position
+level01_x_start:
+ .byte $7C ; A04D 7C |
+; points to $0600
+level01_offs_14:
+ .byte $00,$06 ; A04E 00 06 ..
+; points awarded per bomb pickup (always $64 aka 100)
+level01_points_per_bomb:
+ .byte $64 ; A050 64 d
+; ----------------------------------------------------------------------------
+; amount of time bonus at start of level
+level01_time_bonus:
+ .word $07D0 ; A051 D0 07 ..
+; ----------------------------------------------------------------------------
+; always $00
+level01_offs_19:
+ .byte $00 ; A053 00 .
+; ----------------------------------------------------------------------------
+; pointer to ROM table or $06xx
+level01_unkn_table0:
+ .addr LA5C2 ; A054 C2 A5 ..
+; map data
+level01_map0:
+ .addr LA3E0 ; A056 E0 A3 ..
+; map data
+level01_map1:
+ .addr LA446 ; A058 46 A4 F.
+; map data
+level01_map2:
+ .addr LA477 ; A05A 77 A4 w.
+; unknown, pointer to a ROM table or $0000
+level01_unkn_table1:
+ .addr L0000 ; A05C 00 00 ..
+; ----------------------------------------------------------------------------
+; always $0000
+level01_offs_30:
+ .byte $00,$00 ; A05E 00 00 ..
+; ----------------------------------------------------------------------------
+; $06E6 for most levels, or else a ROM subroutine
+level01_sub4:
+ .addr LA498 ; A060 98 A4 ..
+; $06E6 for some levels, or else a ROM subroutine
+level01_sub5:
+ .addr L8036 ; A062 36 80 6.
+; always $9740 aka game_main_loop
+level01_sub6:
+ .addr game_main_loop ; A064 40 97 @.
+; called at end of level (all bombs picked up). $06E6 for all but level07
+level01_sub_eol:
+ .addr L06E6 ; A066 E6 06 ..
+; ----------------------------------------------------------------------------
+; all zeroes
+level01_offs_40:
+ .byte $00,$00,$00,$00,$00,$00 ; A068 00 00 00 00 00 00 ......
+; unknown
+level01_offs_46:
+ .byte $6A,$08,$C6,$1A,$18,$4C,$80,$00 ; A06E 6A 08 C6 1A 18 4C 80 00 j....L..
+ .byte $00 ; A076 00 .
+; unknown, always $00 $00 $00
+level01_offs_55:
+ .byte $00,$00,$00 ; A077 00 00 00 ...
+; unknown, not a ROM address
+level01_offs_58:
+ .byte $02,$94 ; A07A 02 94 ..
+; unknown, level05 (walls) has $ff $ff $ff $ff, all others $00 $00 $00 $00
+level01_offs_60:
+ .byte $00,$00,$00,$00 ; A07C 00 00 00 00 ....
+; first 2 bytes are level number in screencodes
+level02_desc:
+ .byte $10,$13 ; A080 10 13 ..
+; ----------------------------------------------------------------------------
+; a subroutine
+level02_sub0:
+ .addr LA6BD ; A082 BD A6 ..
+; a subroutine
+level02_sub1:
+ .addr L0000 ; A084 00 00 ..
+; a subroutine
+level02_sub2:
+ .addr L0000 ; A086 00 00 ..
+; a subroutine
+level02_sub3:
+ .addr LA724 ; A088 24 A7 $.
+; ----------------------------------------------------------------------------
+; number of bombs to pick up on this level
+level02_num_bombs:
+ .byte $0C ; A08A 0C .
+; 0 = no bullets
+level02_bullet_chance:
+ .byte $00 ; A08B 00 .
+; jumpman starting Y position
+level02_y_start:
+ .byte $40 ; A08C 40 @
+; jumpman starting X position
+level02_x_start:
+ .byte $B4 ; A08D B4 .
+; points to $0600
+level02_offs_14:
+ .byte $00,$06 ; A08E 00 06 ..
+; points awarded per bomb pickup (always $64 aka 100)
+level02_points_per_bomb:
+ .byte $64 ; A090 64 d
+; ----------------------------------------------------------------------------
+; amount of time bonus at start of level
+level02_time_bonus:
+ .word $09C4 ; A091 C4 09 ..
+; ----------------------------------------------------------------------------
+; always $00
+level02_offs_19:
+ .byte $00 ; A093 00 .
+; ----------------------------------------------------------------------------
+; pointer to ROM table or $06xx
+level02_unkn_table0:
+ .addr LA66D ; A094 6D A6 m.
+; map data
+level02_map0:
+ .addr LA5F0 ; A096 F0 A5 ..
+; map data
+level02_map1:
+ .addr LA62F ; A098 2F A6 /.
+; map data
+level02_map2:
+ .addr LA654 ; A09A 54 A6 T.
+; unknown, pointer to a ROM table or $0000
+level02_unkn_table1:
+ .addr L0000 ; A09C 00 00 ..
+; ----------------------------------------------------------------------------
+; always $0000
+level02_offs_30:
+ .byte $00,$00 ; A09E 00 00 ..
+; ----------------------------------------------------------------------------
+; $06E6 for most levels, or else a ROM subroutine
+level02_sub4:
+ .addr L06E6 ; A0A0 E6 06 ..
+; $06E6 for some levels, or else a ROM subroutine
+level02_sub5:
+ .addr LA68C ; A0A2 8C A6 ..
+; always $9740 aka game_main_loop
+level02_sub6:
+ .addr game_main_loop ; A0A4 40 97 @.
+; called at end of level (all bombs picked up). $06E6 for all but level07
+level02_sub_eol:
+ .addr L06E6 ; A0A6 E6 06 ..
+; ----------------------------------------------------------------------------
+; all zeroes
+level02_offs_40:
+ .byte $00,$00,$00,$00,$00,$00 ; A0A8 00 00 00 00 00 00 ......
+; unknown
+level02_offs_46:
+ .byte $1A,$C6,$96,$1A,$0C,$8C,$00,$00 ; A0AE 1A C6 96 1A 0C 8C 00 00 ........
+ .byte $00 ; A0B6 00 .
+; unknown, always $00 $00 $00
+level02_offs_55:
+ .byte $00,$00,$00 ; A0B7 00 00 00 ...
+; unknown, not a ROM address
+level02_offs_58:
+ .byte $00,$00 ; A0BA 00 00 ..
+; unknown, level05 (walls) has $ff $ff $ff $ff, all others $00 $00 $00 $00
+level02_offs_60:
+ .byte $00,$00,$00,$00 ; A0BC 00 00 00 00 ....
+; first 2 bytes are level number in screencodes
+level03_desc:
+ .byte $10,$14 ; A0C0 10 14 ..
+; ----------------------------------------------------------------------------
+; a subroutine
+level03_sub0:
+ .addr LA836 ; A0C2 36 A8 6.
+; a subroutine
+level03_sub1:
+ .addr L0000 ; A0C4 00 00 ..
+; a subroutine
+level03_sub2:
+ .addr L0000 ; A0C6 00 00 ..
+; a subroutine
+level03_sub3:
+ .addr LA827 ; A0C8 27 A8 '.
+; ----------------------------------------------------------------------------
+; number of bombs to pick up on this level
+level03_num_bombs:
+ .byte $10 ; A0CA 10 .
+; 0 = no bullets
+level03_bullet_chance:
+ .byte $00 ; A0CB 00 .
+; jumpman starting Y position
+level03_y_start:
+ .byte $C0 ; A0CC C0 .
+; jumpman starting X position
+level03_x_start:
+ .byte $7C ; A0CD 7C |
+; points to $0600
+level03_offs_14:
+ .byte $00,$06 ; A0CE 00 06 ..
+; points awarded per bomb pickup (always $64 aka 100)
+level03_points_per_bomb:
+ .byte $64 ; A0D0 64 d
+; ----------------------------------------------------------------------------
+; amount of time bonus at start of level
+level03_time_bonus:
+ .word $07D0 ; A0D1 D0 07 ..
+; ----------------------------------------------------------------------------
+; always $00
+level03_offs_19:
+ .byte $00 ; A0D3 00 .
+; ----------------------------------------------------------------------------
+; pointer to ROM table or $06xx
+level03_unkn_table0:
+ .addr L06DF ; A0D4 DF 06 ..
+; map data
+level03_map0:
+ .addr LA790 ; A0D6 90 A7 ..
+; map data
+level03_map1:
+ .addr LA7D5 ; A0D8 D5 A7 ..
+; map data
+level03_map2:
+ .addr LA806 ; A0DA 06 A8 ..
+; unknown, pointer to a ROM table or $0000
+level03_unkn_table1:
+ .addr L0000 ; A0DC 00 00 ..
+; ----------------------------------------------------------------------------
+; always $0000
+level03_offs_30:
+ .byte $00,$00 ; A0DE 00 00 ..
+; ----------------------------------------------------------------------------
+; $06E6 for most levels, or else a ROM subroutine
+level03_sub4:
+ .addr L06E6 ; A0E0 E6 06 ..
+; $06E6 for some levels, or else a ROM subroutine
+level03_sub5:
+ .addr L8036 ; A0E2 36 80 6.
+; always $9740 aka game_main_loop
+level03_sub6:
+ .addr game_main_loop ; A0E4 40 97 @.
+; called at end of level (all bombs picked up). $06E6 for all but level07
+level03_sub_eol:
+ .addr L06E6 ; A0E6 E6 06 ..
+; ----------------------------------------------------------------------------
+; all zeroes
+level03_offs_40:
+ .byte $00,$00,$00,$00,$00,$00 ; A0E8 00 00 00 00 00 00 ......
+; unknown
+level03_offs_46:
+ .byte $CA,$96,$18,$5A,$4C,$18,$2C,$80 ; A0EE CA 96 18 5A 4C 18 2C 80 ...ZL.,.
+ .byte $6C ; A0F6 6C l
+; unknown, always $00 $00 $00
+level03_offs_55:
+ .byte $00,$00,$00 ; A0F7 00 00 00 ...
+; unknown, not a ROM address
+level03_offs_58:
+ .byte $00,$00 ; A0FA 00 00 ..
+; unknown, level05 (walls) has $ff $ff $ff $ff, all others $00 $00 $00 $00
+level03_offs_60:
+ .byte $00,$00,$00,$00 ; A0FC 00 00 00 00 ....
+; first 2 bytes are level number in screencodes
+level04_desc:
+ .byte $10,$15 ; A100 10 15 ..
+; ----------------------------------------------------------------------------
+; a subroutine
+level04_sub0:
+ .addr L0000 ; A102 00 00 ..
+; a subroutine
+level04_sub1:
+ .addr L0000 ; A104 00 00 ..
+; a subroutine
+level04_sub2:
+ .addr L0000 ; A106 00 00 ..
+; a subroutine
+level04_sub3:
+ .addr check_collisions_1 ; A108 73 8F s.
+; ----------------------------------------------------------------------------
+; number of bombs to pick up on this level
+level04_num_bombs:
+ .byte $0E ; A10A 0E .
+; 0 = no bullets
+level04_bullet_chance:
+ .byte $02 ; A10B 02 .
+; jumpman starting Y position
+level04_y_start:
+ .byte $C0 ; A10C C0 .
+; jumpman starting X position
+level04_x_start:
+ .byte $34 ; A10D 34 4
+; points to $0600
+level04_offs_14:
+ .byte $00,$06 ; A10E 00 06 ..
+; points awarded per bomb pickup (always $64 aka 100)
+level04_points_per_bomb:
+ .byte $64 ; A110 64 d
+; ----------------------------------------------------------------------------
+; amount of time bonus at start of level
+level04_time_bonus:
+ .word $07D0 ; A111 D0 07 ..
+; ----------------------------------------------------------------------------
+; always $00
+level04_offs_19:
+ .byte $00 ; A113 00 .
+; ----------------------------------------------------------------------------
+; pointer to ROM table or $06xx
+level04_unkn_table0:
+ .addr L06DF ; A114 DF 06 ..
+; map data
+level04_map0:
+ .addr LAAD0 ; A116 D0 AA ..
+; map data
+level04_map1:
+ .addr LAB42 ; A118 42 AB B.
+; map data
+level04_map2:
+ .addr LAB6D ; A11A 6D AB m.
+; unknown, pointer to a ROM table or $0000
+level04_unkn_table1:
+ .addr LAB8A ; A11C 8A AB ..
+; ----------------------------------------------------------------------------
+; always $0000
+level04_offs_30:
+ .byte $00,$00 ; A11E 00 00 ..
+; ----------------------------------------------------------------------------
+; $06E6 for most levels, or else a ROM subroutine
+level04_sub4:
+ .addr L06E6 ; A120 E6 06 ..
+; $06E6 for some levels, or else a ROM subroutine
+level04_sub5:
+ .addr L06E6 ; A122 E6 06 ..
+; always $9740 aka game_main_loop
+level04_sub6:
+ .addr game_main_loop ; A124 40 97 @.
+; called at end of level (all bombs picked up). $06E6 for all but level07
+level04_sub_eol:
+ .addr L06E6 ; A126 E6 06 ..
+; ----------------------------------------------------------------------------
+; all zeroes
+level04_offs_40:
+ .byte $00,$00,$00,$00,$00,$00 ; A128 00 00 00 00 00 00 ......
+; unknown
+level04_offs_46:
+ .byte $6A,$08,$C6,$1A,$0C,$22,$84,$8E ; A12E 6A 08 C6 1A 0C 22 84 8E j...."..
+ .byte $00 ; A136 00 .
+; unknown, always $00 $00 $00
+level04_offs_55:
+ .byte $00,$00,$00 ; A137 00 00 00 ...
+; unknown, not a ROM address
+level04_offs_58:
+ .byte $96,$00 ; A13A 96 00 ..
+; unknown, level05 (walls) has $ff $ff $ff $ff, all others $00 $00 $00 $00
+level04_offs_60:
+ .byte $00,$00,$00,$00 ; A13C 00 00 00 00 ....
+; first 2 bytes are level number in screencodes
+level05_desc:
+ .byte $10,$16 ; A140 10 16 ..
+; ----------------------------------------------------------------------------
+; a subroutine
+level05_sub0:
+ .addr LAA3A ; A142 3A AA :.
+; a subroutine
+level05_sub1:
+ .addr LAA35 ; A144 35 AA 5.
+; a subroutine
+level05_sub2:
+ .addr LAA55 ; A146 55 AA U.
+; a subroutine
+level05_sub3:
+ .addr LAABC ; A148 BC AA ..
+; ----------------------------------------------------------------------------
+; number of bombs to pick up on this level
+level05_num_bombs:
+ .byte $10 ; A14A 10 .
+; 0 = no bullets
+level05_bullet_chance:
+ .byte $00 ; A14B 00 .
+; jumpman starting Y position
+level05_y_start:
+ .byte $80 ; A14C 80 .
+; jumpman starting X position
+level05_x_start:
+ .byte $34 ; A14D 34 4
+; points to $0600
+level05_offs_14:
+ .byte $00,$06 ; A14E 00 06 ..
+; points awarded per bomb pickup (always $64 aka 100)
+level05_points_per_bomb:
+ .byte $64 ; A150 64 d
+; ----------------------------------------------------------------------------
+; amount of time bonus at start of level
+level05_time_bonus:
+ .word $05DC ; A151 DC 05 ..
+; ----------------------------------------------------------------------------
+; always $00
+level05_offs_19:
+ .byte $00 ; A153 00 .
+; ----------------------------------------------------------------------------
+; pointer to ROM table or $06xx
+level05_unkn_table0:
+ .addr L06DF ; A154 DF 06 ..
+; map data
+level05_map0:
+ .addr LA920 ; A156 20 A9 .
+; map data
+level05_map1:
+ .addr LA974 ; A158 74 A9 t.
+; map data
+level05_map2:
+ .addr LA9A5 ; A15A A5 A9 ..
+; unknown, pointer to a ROM table or $0000
+level05_unkn_table1:
+ .addr L0000 ; A15C 00 00 ..
+; ----------------------------------------------------------------------------
+; always $0000
+level05_offs_30:
+ .byte $00,$00 ; A15E 00 00 ..
+; ----------------------------------------------------------------------------
+; $06E6 for most levels, or else a ROM subroutine
+level05_sub4:
+ .addr LAA73 ; A160 73 AA s.
+; $06E6 for some levels, or else a ROM subroutine
+level05_sub5:
+ .addr LA9C6 ; A162 C6 A9 ..
+; always $9740 aka game_main_loop
+level05_sub6:
+ .addr game_main_loop ; A164 40 97 @.
+; called at end of level (all bombs picked up). $06E6 for all but level07
+level05_sub_eol:
+ .addr L06E6 ; A166 E6 06 ..
+; ----------------------------------------------------------------------------
+; all zeroes
+level05_offs_40:
+ .byte $00,$00,$00,$00,$00,$00 ; A168 00 00 00 00 00 00 ......
+; unknown
+level05_offs_46:
+ .byte $56,$C6,$96,$28,$04,$30,$68,$94 ; A16E 56 C6 96 28 04 30 68 94 V..(.0h.
+ .byte $00 ; A176 00 .
+; unknown, always $00 $00 $00
+level05_offs_55:
+ .byte $00,$00,$00 ; A177 00 00 00 ...
+; unknown, not a ROM address
+level05_offs_58:
+ .byte $4C,$FF ; A17A 4C FF L.
+; unknown, level05 (walls) has $ff $ff $ff $ff, all others $00 $00 $00 $00
+level05_offs_60:
+ .byte $FF,$FF,$FF,$FF ; A17C FF FF FF FF ....
+; first 2 bytes are level number in screencodes
+level06_desc:
+ .byte $10,$17 ; A180 10 17 ..
+; ----------------------------------------------------------------------------
+; a subroutine
+level06_sub0:
+ .addr LAD68 ; A182 68 AD h.
+; a subroutine
+level06_sub1:
+ .addr L0000 ; A184 00 00 ..
+; a subroutine
+level06_sub2:
+ .addr L0000 ; A186 00 00 ..
+; a subroutine
+level06_sub3:
+ .addr check_collisions_1 ; A188 73 8F s.
+; ----------------------------------------------------------------------------
+; number of bombs to pick up on this level
+level06_num_bombs:
+ .byte $0E ; A18A 0E .
+; 0 = no bullets
+level06_bullet_chance:
+ .byte $03 ; A18B 03 .
+; jumpman starting Y position
+level06_y_start:
+ .byte $C0 ; A18C C0 .
+; jumpman starting X position
+level06_x_start:
+ .byte $7C ; A18D 7C |
+; points to $0600
+level06_offs_14:
+ .byte $00,$06 ; A18E 00 06 ..
+; points awarded per bomb pickup (always $64 aka 100)
+level06_points_per_bomb:
+ .byte $64 ; A190 64 d
+; ----------------------------------------------------------------------------
+; amount of time bonus at start of level
+level06_time_bonus:
+ .word $05DC ; A191 DC 05 ..
+; ----------------------------------------------------------------------------
+; always $00
+level06_offs_19:
+ .byte $00 ; A193 00 .
+; ----------------------------------------------------------------------------
+; pointer to ROM table or $06xx
+level06_unkn_table0:
+ .addr L06DF ; A194 DF 06 ..
+; map data
+level06_map0:
+ .addr LAC60 ; A196 60 AC `.
+; map data
+level06_map1:
+ .addr LACBA ; A198 BA AC ..
+; map data
+level06_map2:
+ .addr LACE5 ; A19A E5 AC ..
+; unknown, pointer to a ROM table or $0000
+level06_unkn_table1:
+ .addr LAD02 ; A19C 02 AD ..
+; ----------------------------------------------------------------------------
+; always $0000
+level06_offs_30:
+ .byte $00,$00 ; A19E 00 00 ..
+; ----------------------------------------------------------------------------
+; $06E6 for most levels, or else a ROM subroutine
+level06_sub4:
+ .addr L06E6 ; A1A0 E6 06 ..
+; $06E6 for some levels, or else a ROM subroutine
+level06_sub5:
+ .addr L8036 ; A1A2 36 80 6.
+; always $9740 aka game_main_loop
+level06_sub6:
+ .addr game_main_loop ; A1A4 40 97 @.
+; called at end of level (all bombs picked up). $06E6 for all but level07
+level06_sub_eol:
+ .addr L06E6 ; A1A6 E6 06 ..
+; ----------------------------------------------------------------------------
+; all zeroes
+level06_offs_40:
+ .byte $00,$00,$00,$00,$00,$00 ; A1A8 00 00 00 00 00 00 ......
+; unknown
+level06_offs_46:
+ .byte $CA,$96,$18,$5A,$0C,$4C,$8C,$00 ; A1AE CA 96 18 5A 0C 4C 8C 00 ...Z.L..
+ .byte $00 ; A1B6 00 .
+; unknown, always $00 $00 $00
+level06_offs_55:
+ .byte $00,$00,$00 ; A1B7 00 00 00 ...
+; unknown, not a ROM address
+level06_offs_58:
+ .byte $1C,$7E ; A1BA 1C 7E .~
+; unknown, level05 (walls) has $ff $ff $ff $ff, all others $00 $00 $00 $00
+level06_offs_60:
+ .byte $00,$00,$00,$00 ; A1BC 00 00 00 00 ....
+; first 2 bytes are level number in screencodes
+level07_desc:
+ .byte $10,$18 ; A1C0 10 18 ..
+; ----------------------------------------------------------------------------
+; a subroutine
+level07_sub0:
+ .addr LAF1C ; A1C2 1C AF ..
+; a subroutine
+level07_sub1:
+ .addr L0000 ; A1C4 00 00 ..
+; a subroutine
+level07_sub2:
+ .addr L0000 ; A1C6 00 00 ..
+; a subroutine
+level07_sub3:
+ .addr check_collisions_1 ; A1C8 73 8F s.
+; ----------------------------------------------------------------------------
+; number of bombs to pick up on this level
+level07_num_bombs:
+ .byte $0C ; A1CA 0C .
+; 0 = no bullets
+level07_bullet_chance:
+ .byte $02 ; A1CB 02 .
+; jumpman starting Y position
+level07_y_start:
+ .byte $20 ; A1CC 20
+; jumpman starting X position
+level07_x_start:
+ .byte $7C ; A1CD 7C |
+; points to $0600
+level07_offs_14:
+ .byte $00,$06 ; A1CE 00 06 ..
+; points awarded per bomb pickup (always $64 aka 100)
+level07_points_per_bomb:
+ .byte $64 ; A1D0 64 d
+; ----------------------------------------------------------------------------
+; amount of time bonus at start of level
+level07_time_bonus:
+ .word $05DC ; A1D1 DC 05 ..
+; ----------------------------------------------------------------------------
+; always $00
+level07_offs_19:
+ .byte $00 ; A1D3 00 .
+; ----------------------------------------------------------------------------
+; pointer to ROM table or $06xx
+level07_unkn_table0:
+ .addr LAE8A ; A1D4 8A AE ..
+; map data
+level07_map0:
+ .addr LADE0 ; A1D6 E0 AD ..
+; map data
+level07_map1:
+ .addr LAE4C ; A1D8 4C AE L.
+; map data
+level07_map2:
+ .addr LAE71 ; A1DA 71 AE q.
+; unknown, pointer to a ROM table or $0000
+level07_unkn_table1:
+ .addr L0000 ; A1DC 00 00 ..
+; ----------------------------------------------------------------------------
+; always $0000
+level07_offs_30:
+ .byte $00,$00 ; A1DE 00 00 ..
+; ----------------------------------------------------------------------------
+; $06E6 for most levels, or else a ROM subroutine
+level07_sub4:
+ .addr LAF23 ; A1E0 23 AF #.
+; $06E6 for some levels, or else a ROM subroutine
+level07_sub5:
+ .addr LAE9B ; A1E2 9B AE ..
+; always $9740 aka game_main_loop
+level07_sub6:
+ .addr game_main_loop ; A1E4 40 97 @.
+; called at end of level (all bombs picked up). $06E6 for all but level07
+level07_sub_eol:
+ .addr LAF58 ; A1E6 58 AF X.
+; ----------------------------------------------------------------------------
+; all zeroes
+level07_offs_40:
+ .byte $00,$00,$00,$00,$00,$00 ; A1E8 00 00 00 00 00 00 ......
+; unknown
+level07_offs_46:
+ .byte $6A,$08,$C6,$1A,$0C,$30,$68,$8C ; A1EE 6A 08 C6 1A 0C 30 68 8C j....0h.
+ .byte $00 ; A1F6 00 .
+; unknown, always $00 $00 $00
+level07_offs_55:
+ .byte $00,$00,$00 ; A1F7 00 00 00 ...
+; unknown, not a ROM address
+level07_offs_58:
+ .byte $40,$56 ; A1FA 40 56 @V
+; unknown, level05 (walls) has $ff $ff $ff $ff, all others $00 $00 $00 $00
+level07_offs_60:
+ .byte $00,$00,$00,$00 ; A1FC 00 00 00 00 ....
+; first 2 bytes are level number in screencodes
+level08_desc:
+ .byte $10,$19 ; A200 10 19 ..
+; ----------------------------------------------------------------------------
+; a subroutine
+level08_sub0:
+ .addr LB140 ; A202 40 B1 @.
+; a subroutine
+level08_sub1:
+ .addr L0000 ; A204 00 00 ..
+; a subroutine
+level08_sub2:
+ .addr L0000 ; A206 00 00 ..
+; a subroutine
+level08_sub3:
+ .addr L0000 ; A208 00 00 ..
+; ----------------------------------------------------------------------------
+; number of bombs to pick up on this level
+level08_num_bombs:
+ .byte $08 ; A20A 08 .
+; 0 = no bullets
+level08_bullet_chance:
+ .byte $00 ; A20B 00 .
+; jumpman starting Y position
+level08_y_start:
+ .byte $C0 ; A20C C0 .
+; jumpman starting X position
+level08_x_start:
+ .byte $9E ; A20D 9E .
+; points to $0600
+level08_offs_14:
+ .byte $00,$06 ; A20E 00 06 ..
+; points awarded per bomb pickup (always $64 aka 100)
+level08_points_per_bomb:
+ .byte $64 ; A210 64 d
+; ----------------------------------------------------------------------------
+; amount of time bonus at start of level
+level08_time_bonus:
+ .word $07D0 ; A211 D0 07 ..
+; ----------------------------------------------------------------------------
+; always $00
+level08_offs_19:
+ .byte $00 ; A213 00 .
+; ----------------------------------------------------------------------------
+; pointer to ROM table or $06xx
+level08_unkn_table0:
+ .addr L06DF ; A214 DF 06 ..
+; map data
+level08_map0:
+ .addr LB0A2 ; A216 A2 B0 ..
+; map data
+level08_map1:
+ .addr LB072 ; A218 72 B0 r.
+; map data
+level08_map2:
+ .addr LB0A3 ; A21A A3 B0 ..
+; unknown, pointer to a ROM table or $0000
+level08_unkn_table1:
+ .addr L0000 ; A21C 00 00 ..
+; ----------------------------------------------------------------------------
+; always $0000
+level08_offs_30:
+ .byte $00,$00 ; A21E 00 00 ..
+; ----------------------------------------------------------------------------
+; $06E6 for most levels, or else a ROM subroutine
+level08_sub4:
+ .addr LB121 ; A220 21 B1 !.
+; $06E6 for some levels, or else a ROM subroutine
+level08_sub5:
+ .addr LB0C4 ; A222 C4 B0 ..
+; always $9740 aka game_main_loop
+level08_sub6:
+ .addr game_main_loop ; A224 40 97 @.
+; called at end of level (all bombs picked up). $06E6 for all but level07
+level08_sub_eol:
+ .addr L06E6 ; A226 E6 06 ..
+; ----------------------------------------------------------------------------
+; all zeroes
+level08_offs_40:
+ .byte $00,$00,$00,$00,$00,$00 ; A228 00 00 00 00 00 00 ......
+; unknown
+level08_offs_46:
+ .byte $1A,$C6,$96,$28,$0C,$3C,$00,$00 ; A22E 1A C6 96 28 0C 3C 00 00 ...(.<..
+ .byte $8C ; A236 8C .
+; unknown, always $00 $00 $00
+level08_offs_55:
+ .byte $00,$00,$00 ; A237 00 00 00 ...
+; unknown, not a ROM address
+level08_offs_58:
+ .byte $80,$00 ; A23A 80 00 ..
+; unknown, level05 (walls) has $ff $ff $ff $ff, all others $00 $00 $00 $00
+level08_offs_60:
+ .byte $00,$00,$00,$00 ; A23C 00 00 00 00 ....
+; first 2 bytes are level number in screencodes
+level09_desc:
+ .byte $11,$10 ; A240 11 10 ..
+; ----------------------------------------------------------------------------
+; a subroutine
+level09_sub0:
+ .addr LB27E ; A242 7E B2 ~.
+; a subroutine
+level09_sub1:
+ .addr L0000 ; A244 00 00 ..
+; a subroutine
+level09_sub2:
+ .addr L0000 ; A246 00 00 ..
+; a subroutine
+level09_sub3:
+ .addr LB2E0 ; A248 E0 B2 ..
+; ----------------------------------------------------------------------------
+; number of bombs to pick up on this level
+level09_num_bombs:
+ .byte $0C ; A24A 0C .
+; 0 = no bullets
+level09_bullet_chance:
+ .byte $02 ; A24B 02 .
+; jumpman starting Y position
+level09_y_start:
+ .byte $C0 ; A24C C0 .
+; jumpman starting X position
+level09_x_start:
+ .byte $3C ; A24D 3C <
+; points to $0600
+level09_offs_14:
+ .byte $00,$06 ; A24E 00 06 ..
+; points awarded per bomb pickup (always $64 aka 100)
+level09_points_per_bomb:
+ .byte $64 ; A250 64 d
+; ----------------------------------------------------------------------------
+; amount of time bonus at start of level
+level09_time_bonus:
+ .word $05DC ; A251 DC 05 ..
+; ----------------------------------------------------------------------------
+; always $00
+level09_offs_19:
+ .byte $00 ; A253 00 .
+; ----------------------------------------------------------------------------
+; pointer to ROM table or $06xx
+level09_unkn_table0:
+ .addr LB275 ; A254 75 B2 u.
+; map data
+level09_map0:
+ .addr LB1E0 ; A256 E0 B1 ..
+; map data
+level09_map1:
+ .addr LB237 ; A258 37 B2 7.
+; map data
+level09_map2:
+ .addr LB25C ; A25A 5C B2 \.
+; unknown, pointer to a ROM table or $0000
+level09_unkn_table1:
+ .addr L0000 ; A25C 00 00 ..
+; ----------------------------------------------------------------------------
+; always $0000
+level09_offs_30:
+ .byte $00,$00 ; A25E 00 00 ..
+; ----------------------------------------------------------------------------
+; $06E6 for most levels, or else a ROM subroutine
+level09_sub4:
+ .addr LB2FD ; A260 FD B2 ..
+; $06E6 for some levels, or else a ROM subroutine
+level09_sub5:
+ .addr L8036 ; A262 36 80 6.
+; always $9740 aka game_main_loop
+level09_sub6:
+ .addr game_main_loop ; A264 40 97 @.
+; called at end of level (all bombs picked up). $06E6 for all but level07
+level09_sub_eol:
+ .addr L06E6 ; A266 E6 06 ..
+; ----------------------------------------------------------------------------
+; all zeroes
+level09_offs_40:
+ .byte $00,$00,$00,$00,$00,$00 ; A268 00 00 00 00 00 00 ......
+; unknown
+level09_offs_46:
+ .byte $CA,$96,$18,$5A,$0C,$40,$8C,$00 ; A26E CA 96 18 5A 0C 40 8C 00 ...Z.@..
+ .byte $00 ; A276 00 .
+; unknown, always $00 $00 $00
+level09_offs_55:
+ .byte $00,$00,$00 ; A277 00 00 00 ...
+; unknown, not a ROM address
+level09_offs_58:
+ .byte $62,$00 ; A27A 62 00 b.
+; unknown, level05 (walls) has $ff $ff $ff $ff, all others $00 $00 $00 $00
+level09_offs_60:
+ .byte $00,$00,$00,$00 ; A27C 00 00 00 00 ....
+; first 2 bytes are level number in screencodes
+level10_desc:
+ .byte $11,$11 ; A280 11 11 ..
+; ----------------------------------------------------------------------------
+; a subroutine
+level10_sub0:
+ .addr LB457 ; A282 57 B4 W.
+; a subroutine
+level10_sub1:
+ .addr LB581 ; A284 81 B5 ..
+; a subroutine
+level10_sub2:
+ .addr L0000 ; A286 00 00 ..
+; a subroutine
+level10_sub3:
+ .addr LB57C ; A288 7C B5 |.
+; ----------------------------------------------------------------------------
+; number of bombs to pick up on this level
+level10_num_bombs:
+ .byte $0F ; A28A 0F .
+; 0 = no bullets
+level10_bullet_chance:
+ .byte $00 ; A28B 00 .
+; jumpman starting Y position
+level10_y_start:
+ .byte $B6 ; A28C B6 .
+; jumpman starting X position
+level10_x_start:
+ .byte $C4 ; A28D C4 .
+; points to $0600
+level10_offs_14:
+ .byte $00,$06 ; A28E 00 06 ..
+; points awarded per bomb pickup (always $64 aka 100)
+level10_points_per_bomb:
+ .byte $64 ; A290 64 d
+; ----------------------------------------------------------------------------
+; amount of time bonus at start of level
+level10_time_bonus:
+ .word $03E8 ; A291 E8 03 ..
+; ----------------------------------------------------------------------------
+; always $00
+level10_offs_19:
+ .byte $00 ; A293 00 .
+; ----------------------------------------------------------------------------
+; pointer to ROM table or $06xx
+level10_unkn_table0:
+ .addr data_table_b50b ; A294 0B B5 ..
+; map data
+level10_map0:
+ .addr LB320 ; A296 20 B3 .
+; map data
+level10_map1:
+ .addr LB38F ; A298 8F B3 ..
+; map data
+level10_map2:
+ .addr LB3BD ; A29A BD B3 ..
+; unknown, pointer to a ROM table or $0000
+level10_unkn_table1:
+ .addr LB3DC ; A29C DC B3 ..
+; ----------------------------------------------------------------------------
+; always $0000
+level10_offs_30:
+ .byte $00,$00 ; A29E 00 00 ..
+; ----------------------------------------------------------------------------
+; $06E6 for most levels, or else a ROM subroutine
+level10_sub4:
+ .addr LB44C ; A2A0 4C B4 L.
+; $06E6 for some levels, or else a ROM subroutine
+level10_sub5:
+ .addr L8036 ; A2A2 36 80 6.
+; always $9740 aka game_main_loop
+level10_sub6:
+ .addr game_main_loop ; A2A4 40 97 @.
+; called at end of level (all bombs picked up). $06E6 for all but level07
+level10_sub_eol:
+ .addr L06E6 ; A2A6 E6 06 ..
+; ----------------------------------------------------------------------------
+; all zeroes
+level10_offs_40:
+ .byte $00,$00,$00,$00,$00,$00 ; A2A8 00 00 00 00 00 00 ......
+; unknown
+level10_offs_46:
+ .byte $6A,$08,$C6,$1A,$0C,$30,$54,$8C ; A2AE 6A 08 C6 1A 0C 30 54 8C j....0T.
+ .byte $00 ; A2B6 00 .
+; unknown, always $00 $00 $00
+level10_offs_55:
+ .byte $00,$00,$00 ; A2B7 00 00 00 ...
+; unknown, not a ROM address
+level10_offs_58:
+ .byte $00,$66 ; A2BA 00 66 .f
+; unknown, level05 (walls) has $ff $ff $ff $ff, all others $00 $00 $00 $00
+level10_offs_60:
+ .byte $00,$00,$00,$00 ; A2BC 00 00 00 00 ....
+; first 2 bytes are level number in screencodes
+level11_desc:
+ .byte $11,$12 ; A2C0 11 12 ..
+; ----------------------------------------------------------------------------
+; a subroutine
+level11_sub0:
+ .addr LB691 ; A2C2 91 B6 ..
+; a subroutine
+level11_sub1:
+ .addr LB69B ; A2C4 9B B6 ..
+; a subroutine
+level11_sub2:
+ .addr LB709 ; A2C6 09 B7 ..
+; a subroutine
+level11_sub3:
+ .addr check_collisions_1 ; A2C8 73 8F s.
+; ----------------------------------------------------------------------------
+; number of bombs to pick up on this level
+level11_num_bombs:
+ .byte $0E ; A2CA 0E .
+; 0 = no bullets
+level11_bullet_chance:
+ .byte $00 ; A2CB 00 .
+; jumpman starting Y position
+level11_y_start:
+ .byte $C0 ; A2CC C0 .
+; jumpman starting X position
+level11_x_start:
+ .byte $7C ; A2CD 7C |
+; points to $0600
+level11_offs_14:
+ .byte $00,$06 ; A2CE 00 06 ..
+; points awarded per bomb pickup (always $64 aka 100)
+level11_points_per_bomb:
+ .byte $64 ; A2D0 64 d
+; ----------------------------------------------------------------------------
+; amount of time bonus at start of level
+level11_time_bonus:
+ .word $09C4 ; A2D1 C4 09 ..
+; ----------------------------------------------------------------------------
+; always $00
+level11_offs_19:
+ .byte $00 ; A2D3 00 .
+; ----------------------------------------------------------------------------
+; pointer to ROM table or $06xx
+level11_unkn_table0:
+ .addr LB658 ; A2D4 58 B6 X.
+; map data
+level11_map0:
+ .addr LB590 ; A2D6 90 B5 ..
+; map data
+level11_map1:
+ .addr LB5D2 ; A2D8 D2 B5 ..
+; map data
+level11_map2:
+ .addr LB5FD ; A2DA FD B5 ..
+; unknown, pointer to a ROM table or $0000
+level11_unkn_table1:
+ .addr LB61A ; A2DC 1A B6 ..
+; ----------------------------------------------------------------------------
+; always $0000
+level11_offs_30:
+ .byte $00,$00 ; A2DE 00 00 ..
+; ----------------------------------------------------------------------------
+; $06E6 for most levels, or else a ROM subroutine
+level11_sub4:
+ .addr L06E6 ; A2E0 E6 06 ..
+; $06E6 for some levels, or else a ROM subroutine
+level11_sub5:
+ .addr L8036 ; A2E2 36 80 6.
+; always $9740 aka game_main_loop
+level11_sub6:
+ .addr game_main_loop ; A2E4 40 97 @.
+; called at end of level (all bombs picked up). $06E6 for all but level07
+level11_sub_eol:
+ .addr L06E6 ; A2E6 E6 06 ..
+; ----------------------------------------------------------------------------
+; all zeroes
+level11_offs_40:
+ .byte $00,$00,$00,$00,$00,$00 ; A2E8 00 00 00 00 00 00 ......
+; unknown
+level11_offs_46:
+ .byte $08,$C6,$96,$28,$0C,$2A,$4C,$6A ; A2EE 08 C6 96 28 0C 2A 4C 6A ...(.*Lj
+ .byte $8C ; A2F6 8C .
+; unknown, always $00 $00 $00
+level11_offs_55:
+ .byte $00,$00,$00 ; A2F7 00 00 00 ...
+; unknown, not a ROM address
+level11_offs_58:
+ .byte $00,$00 ; A2FA 00 00 ..
+; unknown, level05 (walls) has $ff $ff $ff $ff, all others $00 $00 $00 $00
+level11_offs_60:
+ .byte $00,$00,$00,$00 ; A2FC 00 00 00 00 ....
+; level map data starts here
+level00_map:
+ .byte $FE,$33,$9C,$FD,$04,$00,$44,$05 ; A300 FE 33 9C FD 04 00 44 05 .3....D.
+ .byte $06,$04,$15,$0A,$74,$15,$0A,$24 ; A308 06 04 15 0A 74 15 0A 24 ....t..$
+ .byte $22,$02,$74,$22,$02,$24,$25,$16 ; A310 22 02 74 22 02 24 25 16 ".t".$%.
+ .byte $04,$45,$04,$44,$45,$06,$8C,$45 ; A318 04 45 04 44 45 06 8C 45 .E.DE..E
+ .byte $04,$04,$55,$08,$34,$55,$0E,$7C ; A320 04 04 55 08 34 55 0E 7C ..U.4U.|
+ .byte $55,$08,$FD,$04,$FF,$34,$09,$04 ; A328 55 08 FD 04 FF 34 09 04 U....4..
+ .byte $5C,$44,$0A,$FD,$04,$01,$5C,$06 ; A330 5C 44 0A FD 04 01 5C 06 \D....\.
+ .byte $04,$1C,$3B,$0A,$FE,$5F,$9C,$FD ; A338 04 1C 3B 0A FE 5F 9C FD ..;.._..
+ .byte $00,$04,$0C,$41,$05,$8C,$41,$05 ; A340 00 04 0C 41 05 8C 41 05 ...A..A.
+ .byte $24,$01,$05,$74,$01,$05,$4C,$01 ; A348 24 01 05 74 01 05 4C 01 $..t..L.
+ .byte $15,$FE,$C9,$9C,$06,$18,$0A,$99 ; A350 15 FE C9 9C 06 18 0A 99 ........
+ .byte $18,$0A,$FE,$DA,$9C,$1D,$38,$06 ; A358 18 0A FE DA 9C 1D 38 06 ......8.
+ .byte $81,$38,$06,$FE,$B3,$9C ; A360 81 38 06 FE B3 9C .8....
+LA366: .byte $04,$12,$01,$38,$02,$01,$64,$02 ; A366 04 12 01 38 02 01 64 02 ...8..d.
+ .byte $01,$98,$12,$01,$44,$22,$01,$58 ; A36E 01 98 12 01 44 22 01 58 ....D".X
+ .byte $22,$01,$04,$42,$01,$98,$42,$01 ; A376 22 01 04 42 01 98 42 01 "..B..B.
+ .byte $04,$52,$01,$38,$52,$01,$64,$52 ; A37E 04 52 01 38 52 01 64 52 .R.8R.dR
+ .byte $01,$98,$52,$01,$FF ; A386 01 98 52 01 FF ..R..
+LA38B: .byte $24,$00,$62,$10,$82,$20,$C4,$00 ; A38B 24 00 62 10 82 20 C4 00 $.b.. ..
+ .byte $66,$30,$86,$40,$2A,$00,$CA,$00 ; A393 66 30 86 40 2A 00 CA 00 f0.@*...
+ .byte $2C,$00,$6C,$00,$8C,$00,$CC,$00 ; A39B 2C 00 6C 00 8C 00 CC 00 ,.l.....
+ .byte $FF ; A3A3 FF .
+LA3A4: .byte $00,$00,$AE,$A3,$B8,$A3,$C2,$A3 ; A3A4 00 00 AE A3 B8 A3 C2 A3 ........
+ .byte $CC,$A3,$FE,$49,$9C,$FD,$04,$01 ; A3AC CC A3 FE 49 9C FD 04 01 ...I....
+ .byte $64,$08,$02,$FF,$FE,$49,$9C,$FD ; A3B4 64 08 02 FF FE 49 9C FD d....I..
+ .byte $04,$FF,$34,$09,$02,$FF,$FE,$49 ; A3BC 04 FF 34 09 02 FF FE 49 ..4....I
+ .byte $9C,$FD,$04,$00,$2C,$25,$05,$FF ; A3C4 9C FD 04 00 2C 25 05 FF ....,%..
+ .byte $FE,$49,$9C,$FD,$04,$00,$60,$25 ; A3CC FE 49 9C FD 04 00 60 25 .I....`%
+ .byte $05,$FF,$00,$00,$00,$00,$00,$00 ; A3D4 05 FF 00 00 00 00 00 00 ........
+ .byte $00,$00,$00,$00 ; A3DC 00 00 00 00 ....
+LA3E0: .byte $FE,$33,$9C,$FD,$04,$00,$04,$05 ; A3E0 FE 33 9C FD 04 00 04 05 .3......
+ .byte $08,$34,$05,$0E,$7C,$05,$08,$14 ; A3E8 08 34 05 0E 7C 05 08 14 .4..|...
+ .byte $15,$04,$34,$15,$04,$5C,$15,$04 ; A3F0 15 04 34 15 04 5C 15 04 ..4..\..
+ .byte $7C,$15,$04,$04,$25,$10,$5C,$25 ; A3F8 7C 15 04 04 25 10 5C 25 |...%.\%
+ .byte $10,$20,$3C,$07,$64,$3C,$07,$04 ; A400 10 20 3C 07 64 3C 07 04 . <.d<..
+ .byte $55,$09,$38,$55,$0C,$78,$55,$09 ; A408 55 09 38 55 0C 78 55 09 U.8U.xU.
+ .byte $FD,$04,$FF,$04,$19,$04,$80,$3B ; A410 FD 04 FF 04 19 04 80 3B .......;
+ .byte $07,$FD,$04,$01,$8C,$16,$04,$04 ; A418 07 FD 04 01 8C 16 04 04 ........
+ .byte $35,$07,$FE,$5F,$9C,$FD,$00,$04 ; A420 35 07 FE 5F 9C FD 00 04 5.._....
+ .byte $18,$01,$05,$4C,$01,$15,$80,$01 ; A428 18 01 05 4C 01 15 80 01 ...L....
+ .byte $05,$FE,$C9,$9C,$19,$3C,$05,$85 ; A430 05 FE C9 9C 19 3C 05 85 .....<..
+ .byte $3C,$05,$FE,$DA,$9C,$05,$30,$08 ; A438 3C 05 FE DA 9C 05 30 08 <.....0.
+ .byte $99,$30,$08,$FE,$B3,$9C ; A440 99 30 08 FE B3 9C .0....
+LA446: .byte $04,$02,$01,$38,$02,$01,$64,$02 ; A446 04 02 01 38 02 01 64 02 ...8..d.
+ .byte $01,$98,$02,$01,$04,$12,$01,$38 ; A44E 01 98 02 01 04 12 01 38 .......8
+ .byte $12,$01,$64,$12,$01,$98,$12,$01 ; A456 12 01 64 12 01 98 12 01 ..d.....
+ .byte $20,$22,$01,$7C,$22,$01,$38,$32 ; A45E 20 22 01 7C 22 01 38 32 ".|".82
+ .byte $01,$64,$32,$01,$04,$52,$01,$38 ; A466 01 64 32 01 04 52 01 38 .d2..R.8
+ .byte $52,$01,$64,$52,$01,$98,$52,$01 ; A46E 52 01 64 52 01 98 52 01 R.dR..R.
+ .byte $FF ; A476 FF .
+LA477: .byte $22,$00,$62,$00,$82,$00,$C2,$00 ; A477 22 00 62 00 82 00 C2 00 ".b.....
+ .byte $24,$00,$64,$00,$84,$00,$C4,$00 ; A47F 24 00 64 00 84 00 C4 00 $.d.....
+ .byte $46,$00,$A6,$00,$68,$00,$88,$00 ; A487 46 00 A6 00 68 00 88 00 F...h...
+ .byte $2C,$00,$6C,$00,$8C,$00,$CC,$00 ; A48F 2C 00 6C 00 8C 00 CC 00 ,.l.....
+ .byte $FF ; A497 FF .
+; ----------------------------------------------------------------------------
+LA498: ldy $B2 ; A498 A4 B2 ..
+ lda data_table_a542,y ; A49A B9 42 A5 .B.
+ clc ; A49D 18 .
+ adc #$30 ; A49E 69 30 i0
+ sta $0680 ; A4A0 8D 80 06 ...
+ lda LA543,y ; A4A3 B9 43 A5 .C.
+ asl a ; A4A6 0A .
+ adc #$20 ; A4A7 69 20 i
+ sta $0685 ; A4A9 8D 85 06 ...
+ lda LA582,y ; A4AC B9 82 A5 ...
+ sta $068A ; A4AF 8D 8A 06 ...
+ lda LA583,y ; A4B2 B9 83 A5 ...
+ sta PCOLR2 ; A4B5 8D C2 02 ...
+ lda LA562,y ; A4B8 B9 62 A5 .b.
+ clc ; A4BB 18 .
+ adc #$30 ; A4BC 69 30 i0
+ sta $0681 ; A4BE 8D 81 06 ...
+ lda LA563,y ; A4C1 B9 63 A5 .c.
+ asl a ; A4C4 0A .
+ adc #$20 ; A4C5 69 20 i
+ sta $0686 ; A4C7 8D 86 06 ...
+ lda LA5A2,y ; A4CA B9 A2 A5 ...
+ sta $068B ; A4CD 8D 8B 06 ...
+ lda LA5A3,y ; A4D0 B9 A3 A5 ...
+ sta PCOLR3 ; A4D3 8D C3 02 ...
+ sta $066C ; A4D6 8D 6C 06 .l.
+ sta $066D ; A4D9 8D 6D 06 .m.
+ rts ; A4DC 60 `
+
+; ----------------------------------------------------------------------------
+LA4DD: lda $0623 ; A4DD AD 23 06 .#.
+ bne LA4FF ; A4E0 D0 1D ..
+ lda $0621 ; A4E2 AD 21 06 .!.
+ bne LA4E8 ; A4E5 D0 01 ..
+ rts ; A4E7 60 `
+
+; ----------------------------------------------------------------------------
+LA4E8: ldx #$01 ; A4E8 A2 01 ..
+ lda collision_save+14 ; A4EA AD BE 06 ...
+ and #$03 ; A4ED 29 03 ).
+ bne LA505 ; A4EF D0 14 ..
+ inx ; A4F1 E8 .
+ lda collision_save+15 ; A4F2 AD BF 06 ...
+ and #$03 ; A4F5 29 03 ).
+ bne LA505 ; A4F7 D0 0C ..
+ lda initial_speed ; A4F9 AD 25 06 .%.
+ sta player_speed ; A4FC 8D 24 06 .$.
+LA4FF: lda #$00 ; A4FF A9 00 ..
+ sta $0770 ; A501 8D 70 07 .p.
+ rts ; A504 60 `
+
+; ----------------------------------------------------------------------------
+LA505: stx $0770 ; A505 8E 70 07 .p.
+ rts ; A508 60 `
+
+; ----------------------------------------------------------------------------
+LA509: ldx $0770 ; A509 AE 70 07 .p.
+ bne LA50F ; A50C D0 01 ..
+ rts ; A50E 60 `
+
+; ----------------------------------------------------------------------------
+LA50F: lda RANDOM ; A50F AD 0A D2 ...
+ sta COLPM1,x ; A512 9D 13 D0 ...
+ sta COLPM0 ; A515 8D 12 D0 ...
+ lda #$08 ; A518 A9 08 ..
+ sta player_speed ; A51A 8D 24 06 .$.
+ lda #$2D ; A51D A9 2D .-
+ sta sfx_slot_tempo ; A51F 8D 3E 06 .>.
+ 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%,<LE.
+ .byte $55,$20,$55,$4C,$4D,$8C,$55 ; A55B 55 20 55 4C 4D 8C 55 U ULM.U
+LA562: .byte $18 ; A562 18 .
+LA563: .byte $15,$40,$05,$80,$09,$8C,$05,$18 ; A563 15 40 05 80 09 8C 05 18 .@......
+ .byte $09,$4C,$0D,$70,$25,$80,$09,$28 ; A56B 09 4C 0D 70 25 80 09 28 .L.p%..(
+ .byte $25,$80,$15,$4C,$35,$6C,$3C,$0C ; A573 25 80 15 4C 35 6C 3C 0C %..L5l<.
+ .byte $55,$4C,$4D,$78,$55,$8C,$55 ; A57B 55 4C 4D 78 55 8C 55 ULMxU.U
+LA582: .byte $01 ; A582 01 .
+LA583: .byte $08,$02,$C6,$01,$08,$01,$08,$02 ; A583 08 02 C6 01 08 01 08 02 ........
+ .byte $C6,$01,$08,$02,$C6,$02,$C6,$01 ; A58B C6 01 08 02 C6 02 C6 01 ........
+ .byte $08,$01,$08,$01,$08,$02,$C6,$01 ; A593 08 01 08 01 08 02 C6 01 ........
+ .byte $08,$01,$08,$02,$C6,$01,$08 ; A59B 08 01 08 02 C6 01 08 .......
+LA5A2: .byte $01 ; A5A2 01 .
+LA5A3: .byte $08,$01,$08,$02,$C6,$01,$08,$02 ; A5A3 08 01 08 02 C6 01 08 02 ........
+ .byte $C6,$02,$C6,$01,$08,$02,$C6,$01 ; A5AB C6 02 C6 01 08 02 C6 01 ........
+ .byte $08,$01,$08,$02,$C6,$01,$08,$01 ; A5B3 08 01 08 02 C6 01 08 01 ........
+ .byte $08,$02,$C6,$01,$08,$01,$08 ; A5BB 08 02 C6 01 08 01 08 .......
+LA5C2: .byte $03,$D3,$A5,$08,$00,$00,$01,$00 ; A5C2 03 D3 A5 08 00 00 01 00 ........
+ .byte $04,$D3,$A5,$08,$00,$00,$01,$00 ; A5CA 04 D3 A5 08 00 00 01 00 ........
+ .byte $FF,$FF,$FF,$AA,$AA,$FF,$FF,$00 ; A5D2 FF FF FF AA AA FF FF 00 ........
+ .byte $00,$C3,$C3,$C3,$C3,$FF,$FF,$C3 ; A5DA 00 C3 C3 C3 C3 FF FF C3 ........
+ .byte $C3,$00,$00,$00,$00,$00,$00,$00 ; A5E2 C3 00 00 00 00 00 00 00 ........
+ .byte $00,$00,$00,$00,$00,$00 ; A5EA 00 00 00 00 00 00 ......
+LA5F0: .byte $FE,$33,$9C,$FD,$04,$00,$04,$05 ; A5F0 FE 33 9C FD 04 00 04 05 .3......
+ .byte $06,$84,$05,$06,$04,$15,$06,$84 ; A5F8 06 84 05 06 04 15 06 84 ........
+ .byte $15,$06,$04,$25,$0C,$6C,$25,$0C ; A600 15 06 04 25 0C 6C 25 0C ...%.l%.
+ .byte $04,$35,$0C,$6C,$35,$0C,$04,$45 ; A608 04 35 0C 6C 35 0C 04 45 .5.l5..E
+ .byte $04,$24,$45,$04,$6C,$45,$04,$8C ; A610 04 24 45 04 6C 45 04 8C .$E.lE..
+ .byte $45,$04,$04,$55,$06,$84,$55,$06 ; A618 45 04 04 55 06 84 55 06 E..U..U.
+ .byte $FE,$5F,$9C,$FD,$00,$04,$0C,$01 ; A620 FE 5F 9C FD 00 04 0C 01 ._......
+ .byte $05,$8C,$01,$05,$FE,$B3,$9C ; A628 05 8C 01 05 FE B3 9C .......
+LA62F: .byte $04,$02,$01,$04,$12,$01,$04,$22 ; A62F 04 02 01 04 12 01 04 22 ......."
+ .byte $01,$04,$32,$01,$04,$42,$01,$04 ; A637 01 04 32 01 04 42 01 04 ..2..B..
+ .byte $52,$01,$98,$02,$01,$98,$12,$01 ; A63F 52 01 98 02 01 98 12 01 R.......
+ .byte $98,$22,$01,$98,$32,$01,$98,$42 ; A647 98 22 01 98 32 01 98 42 ."..2..B
+ .byte $01,$98,$52,$01,$FF ; A64F 01 98 52 01 FF ..R..
+LA654: .byte $22,$00,$24,$00,$26,$00,$28,$00 ; A654 22 00 24 00 26 00 28 00 ".$.&.(.
+ .byte $2A,$00,$2C,$00,$C2,$00,$C4,$00 ; A65C 2A 00 2C 00 C2 00 C4 00 *.,.....
+ .byte $C6,$00,$C8,$00,$CA,$00,$CC,$00 ; A664 C6 00 C8 00 CA 00 CC 00 ........
+ .byte $FF ; A66C FF .
+LA66D: .byte $00,$00,$00,$01,$7A,$01,$01,$66 ; A66D 00 00 00 01 7A 01 01 66 ....z..f
+ .byte $03,$86,$A6,$06,$4C,$4A,$01,$66 ; A675 03 86 A6 06 4C 4A 01 66 ....LJ.f
+ .byte $04,$86,$A6,$06,$A4,$CA,$01,$66 ; A67D 04 86 A6 06 A4 CA 01 66 .......f
+; horizontally moving platforms from level02
+dw_platform_player:
+ .byte $FF,$FF,$FF,$AA,$55,$FF,$FF ; A685 FF FF FF AA 55 FF FF ....U..
+; ----------------------------------------------------------------------------
+LA68C: jsr L8036 ; A68C 20 36 80 6.
+ lda #$06 ; A68F A9 06 ..
+ sta $0760 ; A691 8D 60 07 .`.
+ ldy #$2A ; A694 A0 2A .*
+LA696: ldx #$06 ; A696 A2 06 ..
+LA698: lda LA781,x ; A698 BD 81 A7 ...
+ sta $2B00,y ; A69B 99 00 2B ..+
+ iny ; A69E C8 .
+ dex ; A69F CA .
+ bne LA698 ; A6A0 D0 F6 ..
+ tya ; A6A2 98 .
+ clc ; A6A3 18 .
+ adc #$1A ; A6A4 69 1A i.
+ tay ; A6A6 A8 .
+ dec $0760 ; A6A7 CE 60 07 .`.
+ bne LA696 ; A6AA D0 EA ..
+ lda #$FF ; A6AC A9 FF ..
+ sta SIZEM ; A6AE 8D 0C D0 ...
+ stx $068C ; A6B1 8E 8C 06 ...
+ lda #$01 ; A6B4 A9 01 ..
+ sta SIZEP2 ; A6B6 8D 0A D0 ...
+ sta SIZEP3 ; A6B9 8D 0B D0 ...
+LA6BC: rts ; A6BC 60 `
+
+; ----------------------------------------------------------------------------
+LA6BD: lda $06F5 ; A6BD AD F5 06 ...
+ beq LA6BC ; A6C0 F0 FA ..
+ cmp #$01 ; A6C2 C9 01 ..
+ bne LA6DC ; A6C4 D0 16 ..
+ inc $06F5 ; A6C6 EE F5 06 ...
+ inc $0669 ; A6C9 EE 69 06 .i.
+ inc $066C ; A6CC EE 6C 06 .l.
+ inc $066D ; A6CF EE 6D 06 .m.
+ lda #$01 ; A6D2 A9 01 ..
+ sta $0770 ; A6D4 8D 70 07 .p.
+ lda #$FF ; A6D7 A9 FF ..
+ sta $0771 ; A6D9 8D 71 07 .q.
+LA6DC: lda $0623 ; A6DC AD 23 06 .#.
+ cmp #$02 ; A6DF C9 02 ..
+ beq LA6BC ; A6E1 F0 D9 ..
+ lda $0622 ; A6E3 AD 22 06 .".
+ beq LA6BC ; A6E6 F0 D4 ..
+ ldx #$02 ; A6E8 A2 02 ..
+LA6EA: inx ; A6EA E8 .
+ cpx #$05 ; A6EB E0 05 ..
+ beq LA70F ; A6ED F0 20 .
+ clc ; A6EF 18 .
+ lda $067D,x ; A6F0 BD 7D 06 .}.
+ adc $076D,x ; A6F3 7D 6D 07 }m.
+ sta $067D,x ; A6F6 9D 7D 06 .}.
+ cmp #$4B ; A6F9 C9 4B .K
+ beq LA701 ; A6FB F0 04 ..
+ cmp #$A4 ; A6FD C9 A4 ..
+ bne LA6EA ; A6FF D0 E9 ..
+LA701: lda $076D,x ; A701 BD 6D 07 .m.
+ eor #$FF ; A704 49 FF I.
+ sta $076D,x ; A706 9D 6D 07 .m.
+ inc $076D,x ; A709 FE 6D 07 .m.
+ jmp LA6EA ; A70C 4C EA A6 L..
+
+; ----------------------------------------------------------------------------
+LA70F: lda $2BCF ; A70F AD CF 2B ..+
+ sta $2B0E ; A712 8D 0E 2B ..+
+ ldy #$CF ; A715 A0 CF ..
+ ldx #$CE ; A717 A2 CE ..
+LA719: lda $2B00,x ; A719 BD 00 2B ..+
+ sta $2B00,y ; A71C 99 00 2B ..+
+ dex ; A71F CA .
+ dey ; A720 88 .
+ bne LA719 ; A721 D0 F6 ..
+ rts ; A723 60 `
+
+; ----------------------------------------------------------------------------
+LA724: lda $0623 ; A724 AD 23 06 .#.
+ cmp #$02 ; A727 C9 02 ..
+ beq LA778 ; A729 F0 4D .M
+ lda $0622 ; A72B AD 22 06 .".
+ beq LA778 ; A72E F0 48 .H
+ lda $0778 ; A730 AD 78 07 .x.
+ beq LA73D ; A733 F0 08 ..
+ lda #$00 ; A735 A9 00 ..
+ sta $06ED ; A737 8D ED 06 ...
+ sta $0778 ; A73A 8D 78 07 .x.
+LA73D: lda collision_save+8 ; A73D AD B8 06 ...
+ ora collision_save+9 ; A740 0D B9 06 ...
+ ora collision_save+10 ; A743 0D BA 06 ...
+ ora collision_save+11 ; A746 0D BB 06 ...
+ tax ; A749 AA .
+ ora collision_save+14 ; A74A 0D BE 06 ...
+ ora collision_save+15 ; A74D 0D BF 06 ...
+ tay ; A750 A8 .
+ and #$01 ; A751 29 01 ).
+ beq LA760 ; A753 F0 0B ..
+ lda collision_save+4 ; A755 AD B4 06 ...
+ ora #$01 ; A758 09 01 ..
+ sta collision_save+4 ; A75A 8D B4 06 ...
+ inc $0683 ; A75D EE 83 06 ...
+LA760: tya ; A760 98 .
+ and #$02 ; A761 29 02 ).
+ beq LA779 ; A763 F0 14 ..
+ lda collision_save+5 ; A765 AD B5 06 ...
+ ora #$01 ; A768 09 01 ..
+ sta collision_save+5 ; A76A 8D B5 06 ...
+ txa ; A76D 8A .
+ and #$02 ; A76E 29 02 ).
+ beq LA778 ; A770 F0 06 ..
+ inc $0683 ; A772 EE 83 06 ...
+ sta $0778 ; A775 8D 78 07 .x.
+LA778: rts ; A778 60 `
+
+; ----------------------------------------------------------------------------
+LA779: lda $0683 ; A779 AD 83 06 ...
+ and #$FE ; A77C 29 FE ).
+ sta $0683 ; A77E 8D 83 06 ...
+LA781: rts ; A781 60 `
+
+; ----------------------------------------------------------------------------
+; the dumbwaiters from level02. stored upside-down.
+dumbwaiter_player:
+ .byte $18,$3C,$7E,$FF,$FF,$FF,$00,$00 ; A782 18 3C 7E FF FF FF 00 00 .<~.....
+ .byte $00,$00,$00,$00,$00,$00 ; A78A 00 00 00 00 00 00 ......
+LA790: .byte $FE,$33,$9C,$FD,$04,$00,$40,$05 ; A790 FE 33 9C FD 04 00 40 05 .3....@.
+ .byte $08,$18,$15,$0A,$04,$25,$14,$18 ; A798 08 18 15 0A 04 25 14 18 .....%..
+ .byte $35,$0A,$2C,$45,$0A,$04,$55,$0F ; A7A0 35 0A 2C 45 0A 04 55 0F 5.,E..U.
+ .byte $60,$55,$0F,$4C,$15,$0F,$60,$25 ; A7A8 60 55 0F 4C 15 0F 60 25 `U.L..`%
+ .byte $0F,$4C,$35,$0F,$60,$45,$05,$FE ; A7B0 0F 4C 35 0F 60 45 05 FE .L5.`E..
+ .byte $5F,$9C,$FD,$00,$04,$4C,$01,$05 ; A7B8 5F 9C FD 00 04 4C 01 05 _....L..
+ .byte $4C,$21,$05,$4C,$41,$05,$18,$11 ; A7C0 4C 21 05 4C 41 05 18 11 L!.LA...
+ .byte $05,$80,$11,$05,$2C,$31,$05,$6C ; A7C8 05 80 11 05 2C 31 05 6C ....,1.l
+ .byte $31,$05,$FE,$B3,$9C ; A7D0 31 05 FE B3 9C 1....
+LA7D5: .byte $40,$02,$01,$5C,$02,$01,$24,$12 ; A7D5 40 02 01 5C 02 01 24 12 @..\..$.
+ .byte $01,$3C,$12,$01,$60,$12,$01,$78 ; A7DD 01 3C 12 01 60 12 01 78 .<..`..x
+ .byte $12,$01,$04,$22,$01,$3C,$22,$01 ; A7E5 12 01 04 22 01 3C 22 01 ...".<".
+ .byte $60,$22,$01,$98,$22,$01,$18,$32 ; A7ED 60 22 01 98 22 01 18 32 `".."..2
+ .byte $01,$84,$32,$01,$3C,$42,$01,$60 ; A7F5 01 84 32 01 3C 42 01 60 ..2.<B.`
+ .byte $42,$01,$04,$52,$01,$98,$52,$01 ; A7FD 42 01 04 52 01 98 52 01 B..R..R.
+ .byte $FF ; A805 FF .
+LA806: .byte $62,$00,$82,$00,$44,$00,$64,$00 ; A806 62 00 82 00 44 00 64 00 b...D.d.
+ .byte $84,$00,$A4,$00,$26,$00,$66,$00 ; A80E 84 00 A4 00 26 00 66 00 ....&.f.
+ .byte $86,$00,$C6,$00,$48,$00,$A8,$00 ; A816 86 00 C6 00 48 00 A8 00 ....H...
+ .byte $6A,$00,$8A,$00,$2C,$00,$CC,$00 ; A81E 6A 00 8A 00 2C 00 CC 00 j...,...
+ .byte $FF ; A826 FF .
+; ----------------------------------------------------------------------------
+LA827: lda $0619 ; A827 AD 19 06 ...
+ asl a ; A82A 0A .
+ asl a ; A82B 0A .
+ asl a ; A82C 0A .
+ asl a ; A82D 0A .
+ ora #$08 ; A82E 09 08 ..
+ sta COLOR3 ; A830 8D C7 02 ...
+ jmp check_collisions_1 ; A833 4C 73 8F Ls.
+
+; ----------------------------------------------------------------------------
+LA836: lda $0623 ; A836 AD 23 06 .#.
+ cmp #$02 ; A839 C9 02 ..
+ beq LA842 ; A83B F0 05 ..
+ lda $0622 ; A83D AD 22 06 .".
+ bne LA843 ; A840 D0 01 ..
+LA842: rts ; A842 60 `
+
+; ----------------------------------------------------------------------------
+LA843: ldx #$05 ; A843 A2 05 ..
+LA845: dex ; A845 CA .
+ beq LA842 ; A846 F0 FA ..
+ lda $075F,x ; A848 BD 5F 07 ._.
+ bne LA865 ; A84B D0 18 ..
+ lda RANDOM ; A84D AD 0A D2 ...
+ and #$1F ; A850 29 1F ).
+ bne LA845 ; A852 D0 F1 ..
+ inc $075F,x ; A854 FE 5F 07 ._.
+ lda #$00 ; A857 A9 00 ..
+ sta $069E,x ; A859 9D 9E 06 ...
+ lda $067E ; A85C AD 7E 06 .~.
+ clc ; A85F 18 .
+ adc #$03 ; A860 69 03 i.
+ sta $069A,x ; A862 9D 9A 06 ...
+LA865: lda $0763,x ; A865 BD 63 07 .c.
+ bne LA89E ; A868 D0 34 .4
+ lda dli_vec_shadow_hi,x ; A86A BD AF 06 ...
+ and #$01 ; A86D 29 01 ).
+ beq LA89E ; A86F F0 2D .-
+ lda $067E ; A871 AD 7E 06 .~.
+ clc ; A874 18 .
+ adc #$03 ; A875 69 03 i.
+ ldy #$01 ; A877 A0 01 ..
+ cmp $069A,x ; A879 DD 9A 06 ...
+ beq LA882 ; A87C F0 04 ..
+ iny ; A87E C8 .
+ bcc LA882 ; A87F 90 01 ..
+ iny ; A881 C8 .
+LA882: tya ; A882 98 .
+ sta $0763,x ; A883 9D 63 07 .c.
+ lda #$00 ; A886 A9 00 ..
+ sta $0767,x ; A888 9D 67 07 .g.
+ txa ; A88B 8A .
+ pha ; A88C 48 H
+ lda #$0D ; A88D A9 0D ..
+ sta sfx_slot_tempo ; A88F 8D 3E 06 .>.
+ 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 .<R.`R..
+ .byte $52,$01,$FF ; ACE2 52 01 FF R..
+LACE5: .byte $22,$10,$62,$20,$82,$30,$C2,$40 ; ACE5 22 10 62 20 82 30 C2 40 ".b .0.@
+ .byte $46,$50,$A6,$50,$48,$60,$A8,$60 ; ACED 46 50 A6 50 48 60 A8 60 FP.PH`.`
+ .byte $4A,$70,$AA,$70,$2C,$80,$6C,$00 ; ACF5 4A 70 AA 70 2C 80 6C 00 Jp.p,.l.
+ .byte $8C,$00,$CC,$90,$FF ; ACFD 8C 00 CC 90 FF .....
+LAD02: .byte $00,$00,$16,$AD,$16,$AD,$20,$AD ; AD02 00 00 16 AD 16 AD 20 AD ...... .
+ .byte $20,$AD,$2A,$AD,$34,$AD,$3E,$AD ; AD0A 20 AD 2A AD 34 AD 3E AD .*.4.>.
+ .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 .<f.....
+ .byte $C3,$C3,$E3,$F3,$DB,$CF,$C7,$C3 ; AEE4 C3 C3 E3 F3 DB CF C7 C3 ........
+ .byte $FF,$C0,$C0,$C0,$F8,$C0,$C0,$FF ; AEEC FF C0 C0 C0 F8 C0 C0 FF ........
+ .byte $C3,$66,$3C,$18,$18,$18,$18,$18 ; AEF4 C3 66 3C 18 18 18 18 18 .f<.....
+ .byte $C3,$C3,$66,$3C,$3C,$66,$C3,$C3 ; AEFC C3 C3 66 3C 3C 66 C3 C3 ..f<<f..
+ .byte $00,$00,$00,$00,$00,$00,$00,$00 ; AF04 00 00 00 00 00 00 00 00 ........
+ .byte $40 ; AF0C 40 @
+; ----------------------------------------------------------------------------
+ ldy #$20 ; AF0D A0 20 .
+ rti ; AF0F 40 @
+
+; ----------------------------------------------------------------------------
+ cpx #$00 ; AF10 E0 00 ..
+ sec ; AF12 38 8
+ jsr L0830 ; AF13 20 30 08 0.
+ bmi LAF1C ; AF16 30 04 0.
+ asl a ; AF18 0A .
+ asl a ; AF19 0A .
+ asl a ; AF1A 0A .
+; NMOS 6502 illegal opcode, NOP zp
+illegal_nop:
+ .byte $04 ; AF1B 04 .
+LAF1C: lda $062A ; AF1C AD 2A 06 .*.
+ sta PCOLR2 ; AF1F 8D C2 02 ...
+ rts ; AF22 60 `
+
+; ----------------------------------------------------------------------------
+LAF23: lda $B2 ; AF23 A5 B2 ..
+ lsr a ; AF25 4A J
+ tax ; AF26 AA .
+ ldy LAEA4,x ; AF27 BC A4 AE ...
+ iny ; AF2A C8 .
+ ldx $0771 ; AF2B AE 71 07 .q.
+ tya ; AF2E 98 .
+ sta $0773,x ; AF2F 9D 73 07 .s.
+ dey ; AF32 88 .
+ ldx $0770 ; AF33 AE 70 07 .p.
+ lda #$08 ; AF36 A9 08 ..
+ sta $0772 ; AF38 8D 72 07 .r.
+LAF3B: lda LAEBC,y ; AF3B B9 BC AE ...
+ sta $2E00,x ; AF3E 9D 00 2E ...
+ inx ; AF41 E8 .
+ iny ; AF42 C8 .
+ dec $0772 ; AF43 CE 72 07 .r.
+ bne LAF3B ; AF46 D0 F3 ..
+ inc $0771 ; AF48 EE 71 07 .q.
+ sec ; AF4B 38 8
+ lda $0770 ; AF4C AD 70 07 .p.
+ sbc #$0A ; AF4F E9 0A ..
+ sta $0770 ; AF51 8D 70 07 .p.
+ inc $066C ; AF54 EE 6C 06 .l.
+ rts ; AF57 60 `
+
+; ----------------------------------------------------------------------------
+LAF58: lda work_level_num_bombs ; AF58 AD 8A 07 ...
+ beq LAF5E ; AF5B F0 01 ..
+ rts ; AF5D 60 `
+
+; ----------------------------------------------------------------------------
+LAF5E: lda #$09 ; AF5E A9 09 ..
+ sta player_speed ; AF60 8D 24 06 .$.
+ lda #$00 ; AF63 A9 00 ..
+ sta playing_level ; AF65 8D 27 06 .'.
+ ldx #$0C ; AF68 A2 0C ..
+ stx $066D ; AF6A 8E 6D 06 .m.
+LAF6D: lda $0770 ; AF6D AD 70 07 .p.
+ clc ; AF70 18 .
+ adc #$0A ; AF71 69 0A i.
+ sta $0770 ; AF73 8D 70 07 .p.
+ lda $0772,x ; AF76 BD 72 07 .r.
+ cmp LAEAF,x ; AF79 DD AF AE ...
+ beq LAF96 ; AF7C F0 18 ..
+ lda #$00 ; AF7E A9 00 ..
+ sta $0681 ; AF80 8D 81 06 ...
+ jmp LAF92 ; AF83 4C 92 AF L..
+
+; ----------------------------------------------------------------------------
+LAF86: lda #$00 ; AF86 A9 00 ..
+ sta jiffy_timer_1 ; AF88 8D 1A 06 ...
+LAF8B: lda jiffy_timer_1 ; AF8B AD 1A 06 ...
+ cmp #$20 ; AF8E C9 20 .
+ bne LAF8B ; AF90 D0 F9 ..
+LAF92: dex ; AF92 CA .
+ bne LAF6D ; AF93 D0 D8 ..
+ rts ; AF95 60 `
+
+; ----------------------------------------------------------------------------
+LAF96: lda $0770 ; AF96 AD 70 07 .p.
+ sta $0686 ; AF99 8D 86 06 ...
+ lda #$86 ; AF9C A9 86 ..
+ sta $0681 ; AF9E 8D 81 06 ...
+ clc ; AFA1 18 .
+ lda score ; AFA2 AD 00 07 ...
+ adc #$FA ; AFA5 69 FA i.
+ sta score ; AFA7 8D 00 07 ...
+ bcc LAFB4 ; AFAA 90 08 ..
+ inc score+1 ; AFAC EE 01 07 ...
+ bne LAFB4 ; AFAF D0 03 ..
+ inc score+2 ; AFB1 EE 02 07 ...
+LAFB4: txa ; AFB4 8A .
+ pha ; AFB5 48 H
+ jsr L800C ; AFB6 20 0C 80 ..
+ lda #$CB ; AFB9 A9 CB ..
+ sta sfx_ptr ; AFBB 8D 3C 06 .<.
+ lda #$AF ; AFBE A9 AF ..
+ sta sfx_ptr+1 ; AFC0 8D 3D 06 .=.
+ jsr cue_sfx_jv ; AFC3 20 06 80 ..
+ pla ; AFC6 68 h
+ tax ; AFC7 AA .
+ jmp LAF86 ; AFC8 4C 86 AF L..
+
+; ----------------------------------------------------------------------------
+; referenced by routine at $AF96
+sfx_afcb:
+ .byte $01,$A5,$00,$18,$04,$F3,$04,$00 ; AFCB 01 A5 00 18 04 F3 04 00 ........
+ .byte $00,$00,$00,$00,$00,$00,$00,$00 ; AFD3 00 00 00 00 00 00 00 00 ........
+ .byte $00,$00,$00,$00,$00,$00,$00,$00 ; AFDB 00 00 00 00 00 00 00 00 ........
+ .byte $00,$00,$00,$00,$00,$00,$00,$00 ; AFE3 00 00 00 00 00 00 00 00 ........
+ .byte $00,$00,$00,$00,$00,$00,$00,$00 ; AFEB 00 00 00 00 00 00 00 00 ........
+ .byte $00,$00,$00,$00,$00,$00,$00,$00 ; AFF3 00 00 00 00 00 00 00 00 ........
+ .byte $00,$00,$00,$00,$00 ; AFFB 00 00 00 00 00 .....
+; referenced by routine at $B0C4
+map_b000:
+ .byte $FE,$33,$9C,$FD,$04,$00,$04,$07 ; B000 FE 33 9C FD 04 00 04 07 .3......
+ .byte $06,$24,$07,$02,$6C,$05,$04,$8C ; B008 06 24 07 02 6C 05 04 8C .$..l...
+ .byte $05,$04,$28,$18,$04,$48,$15,$06 ; B010 05 04 28 18 04 48 15 06 ..(..H..
+ .byte $7C,$15,$04,$20,$25,$07,$68,$25 ; B018 7C 15 04 20 25 07 68 25 |.. %.h%
+ .byte $04,$04,$3B,$05,$28,$3B,$01,$34 ; B020 04 04 3B 05 28 3B 01 34 ..;.(;.4
+ .byte $3B,$04,$5C,$45,$08,$8C,$4B,$02 ; B028 3B 04 5C 45 08 8C 4B 02 ;.\E..K.
+ .byte $04,$55,$06,$38,$4D,$04,$04,$55 ; B030 04 55 06 38 4D 04 04 55 .U.8M..U
+ .byte $06,$54,$55,$12,$FD,$04,$FF,$58 ; B038 06 54 55 12 FD 04 FF 58 .TU....X
+ .byte $0A,$05,$1C,$54,$07,$FD,$04,$01 ; B040 0A 05 1C 54 07 FD 04 01 ...T....
+ .byte $2C,$08,$06,$3C,$26,$04,$FE,$5F ; B048 2C 08 06 3C 26 04 FE 5F ,..<&.._
+ .byte $9C,$FD,$00,$04,$0C,$03,$0E,$3C ; B050 9C FD 00 04 0C 03 0E 3C .......<
+ .byte $37,$05,$8C,$35,$05,$FE,$C9,$9C ; B058 37 05 8C 35 05 FE C9 9C 7..5....
+ .byte $1A,$0A,$06,$5E,$18,$09,$9A,$08 ; B060 1A 0A 06 5E 18 09 9A 08 ...^....
+ .byte $0B,$FE,$DA,$9C,$83,$04,$13,$FE ; B068 0B FE DA 9C 83 04 13 FE ........
+ .byte $49,$9C ; B070 49 9C I.
+LB072: .byte $04 ; B072 04 .
+LB073: .byte $02,$01,$24,$02,$01,$44,$02,$01 ; B073 02 01 24 02 01 44 02 01 ..$..D..
+ .byte $78,$02,$01,$98,$02,$01,$3C,$12 ; B07B 78 02 01 98 02 01 3C 12 x.....<.
+ .byte $01,$5C,$12,$01,$7C,$12,$01,$24 ; B083 01 5C 12 01 7C 12 01 24 .\..|..$
+ .byte $22,$01,$78,$22,$01,$04,$38,$01 ; B08B 22 01 78 22 01 04 38 01 ".x"..8.
+ .byte $1C,$46,$01,$78,$42,$01,$04,$52 ; B093 1C 46 01 78 42 01 04 52 .F.xB..R
+ .byte $01,$58,$52,$01,$98,$52,$01 ; B09B 01 58 52 01 98 52 01 .XR..R.
+LB0A2: .byte $FF ; B0A2 FF .
+LB0A3: .byte $22,$00,$42,$00,$62,$00,$A2,$00 ; B0A3 22 00 42 00 62 00 A2 00 ".B.b...
+ .byte $C2,$00,$64,$00,$84,$00,$A4,$00 ; B0AB C2 00 64 00 84 00 A4 00 ..d.....
+ .byte $46,$00,$A6,$00,$28,$00,$4A,$00 ; B0B3 46 00 A6 00 28 00 4A 00 F...(.J.
+ .byte $AA,$00,$2C,$00,$8C,$00,$CC,$00 ; B0BB AA 00 2C 00 8C 00 CC 00 ..,.....
+ .byte $FF ; B0C3 FF .
+; ----------------------------------------------------------------------------
+LB0C4: jsr L8036 ; B0C4 20 36 80 6.
+ lda #$10 ; B0C7 A9 10 ..
+ sta SAVMSC+1 ; B0C9 85 59 .Y
+ jsr clear_screen_mem_jv ; B0CB 20 1E 80 ..
+ lda #$00 ; B0CE A9 00 ..
+ sta dm_progctr ; B0D0 85 C0 ..
+ lda #$B0 ; B0D2 A9 B0 ..
+ sta dm_progctr+1 ; B0D4 85 C1 ..
+ jsr draw_map_jv ; B0D6 20 00 80 ..
+ ldx #$07 ; B0D9 A2 07 ..
+LB0DB: lda LB119,x ; B0DB BD 19 B1 ...
+ sta $08FF,x ; B0DE 9D FF 08 ...
+ dex ; B0E1 CA .
+ bne LB0DB ; B0E2 D0 F7 ..
+ lda #$08 ; B0E4 A9 08 ..
+ sta $AA ; B0E6 85 AA ..
+LB0E8: lda RANDOM ; B0E8 AD 0A D2 ...
+ and #$0F ; B0EB 29 0F ).
+ sta $AB ; B0ED 85 AB ..
+ tax ; B0EF AA .
+ lda $0770,x ; B0F0 BD 70 07 .p.
+ bne LB0E8 ; B0F3 D0 F3 ..
+ inc $0770,x ; B0F5 FE 70 07 .p.
+ txa ; B0F8 8A .
+ asl a ; B0F9 0A .
+ clc ; B0FA 18 .
+ adc $AB ; B0FB 65 AB e.
+ tay ; B0FD A8 .
+ lda LB072,y ; B0FE B9 72 B0 .r.
+ sta $0903 ; B101 8D 03 09 ...
+ lda LB073,y ; B104 B9 73 B0 .s.
+ sta $0904 ; B107 8D 04 09 ...
+ lda #$00 ; B10A A9 00 ..
+ sta dm_progctr ; B10C 85 C0 ..
+ lda #$09 ; B10E A9 09 ..
+ sta dm_progctr+1 ; B110 85 C1 ..
+ jsr draw_map_jv ; B112 20 00 80 ..
+ dec $AA ; B115 C6 AA ..
+ bne LB0E8 ; B117 D0 CF ..
+LB119: rts ; B119 60 `
+
+; ----------------------------------------------------------------------------
+; dunno what this is for yet
+map_b11a:
+ .byte $FE,$B3,$9C,$00,$00,$01,$FF ; B11A FE B3 9C 00 00 01 FF .......
+; ----------------------------------------------------------------------------
+LB121: lda #$10 ; B121 A9 10 ..
+ sta SAVMSC+1 ; B123 85 59 .Y
+ lda #$D9 ; B125 A9 D9 ..
+ sta dm_progctr ; B127 85 C0 ..
+ lda #$06 ; B129 A9 06 ..
+ sta dm_progctr+1 ; B12B 85 C1 ..
+ jsr draw_map_jv ; B12D 20 00 80 ..
+ lda #$30 ; B130 A9 30 .0
+ sta SAVMSC+1 ; B132 85 59 .Y
+ lda #$D9 ; B134 A9 D9 ..
+ sta dm_progctr ; B136 85 C0 ..
+ jsr draw_map_jv ; B138 20 00 80 ..
+ lda #$D9 ; B13B A9 D9 ..
+ sta dm_progctr ; B13D 85 C0 ..
+ rts ; B13F 60 `
+
+; ----------------------------------------------------------------------------
+LB140: lda $0621 ; B140 AD 21 06 .!.
+ bne LB146 ; B143 D0 01 ..
+LB145: rts ; B145 60 `
+
+; ----------------------------------------------------------------------------
+LB146: lda $067E ; B146 AD 7E 06 .~.
+ cmp #$34 ; B149 C9 34 .4
+ bcc LB145 ; B14B 90 F8 ..
+ cmp #$C9 ; B14D C9 C9 ..
+ bcs LB145 ; B14F B0 F4 ..
+ lda #$0B ; B151 A9 0B ..
+ sta $97 ; B153 85 97 ..
+ lda $067E ; B155 AD 7E 06 .~.
+ sec ; B158 38 8
+ sbc #$33 ; B159 E9 33 .3
+ lsr a ; B15B 4A J
+ lsr a ; B15C 4A J
+ sta $91 ; B15D 85 91 ..
+ lda $0683 ; B15F AD 83 06 ...
+ cmp #$C3 ; B162 C9 C3 ..
+ bcs LB145 ; B164 B0 DF ..
+ jsr LB1D2 ; B166 20 D2 B1 ..
+ sec ; B169 38 8
+ sbc #$26 ; B16A E9 26 .&
+ lsr a ; B16C 4A J
+ sta $92 ; B16D 85 92 ..
+ lda #$28 ; B16F A9 28 .(
+ sta $90 ; B171 85 90 ..
+ lda #$00 ; B173 A9 00 ..
+ sta $93 ; B175 85 93 ..
+ ldx #$08 ; B177 A2 08 ..
+LB179: lsr $90 ; B179 46 90 F.
+ bcc LB180 ; B17B 90 03 ..
+ clc ; B17D 18 .
+ adc $92 ; B17E 65 92 e.
+LB180: ror a ; B180 6A j
+ ror $93 ; B181 66 93 f.
+ dex ; B183 CA .
+ bne LB179 ; B184 D0 F3 ..
+ sta $94 ; B186 85 94 ..
+ clc ; B188 18 .
+ lda $93 ; B189 A5 93 ..
+ adc $91 ; B18B 65 91 e.
+ sta $93 ; B18D 85 93 ..
+ sta $95 ; B18F 85 95 ..
+ lda $94 ; B191 A5 94 ..
+ adc #$10 ; B193 69 10 i.
+ sta $94 ; B195 85 94 ..
+ clc ; B197 18 .
+ lda $94 ; B198 A5 94 ..
+ adc #$20 ; B19A 69 20 i
+ sta $96 ; B19C 85 96 ..
+LB19E: ldx #$04 ; B19E A2 04 ..
+ ldy #$00 ; B1A0 A0 00 ..
+LB1A2: lda ($93),y ; B1A2 B1 93 ..
+ sta ($95),y ; B1A4 91 95 ..
+ iny ; B1A6 C8 .
+ dex ; B1A7 CA .
+ bne LB1A2 ; B1A8 D0 F8 ..
+ clc ; B1AA 18 .
+ lda $93 ; B1AB A5 93 ..
+ adc #$28 ; B1AD 69 28 i(
+ sta $93 ; B1AF 85 93 ..
+ bcc LB1B5 ; B1B1 90 02 ..
+ inc $94 ; B1B3 E6 94 ..
+LB1B5: clc ; B1B5 18 .
+ lda $95 ; B1B6 A5 95 ..
+ adc #$28 ; B1B8 69 28 i(
+ sta $95 ; B1BA 85 95 ..
+ bcc LB1C0 ; B1BC 90 02 ..
+ inc $96 ; B1BE E6 96 ..
+LB1C0: lda $93 ; B1C0 A5 93 ..
+ cmp #$C0 ; B1C2 C9 C0 ..
+ bne LB1CD ; B1C4 D0 07 ..
+ lda $94 ; B1C6 A5 94 ..
+ cmp #$1D ; B1C8 C9 1D ..
+ bne LB1CD ; B1CA D0 01 ..
+ rts ; B1CC 60 `
+
+; ----------------------------------------------------------------------------
+LB1CD: dec $97 ; B1CD C6 97 ..
+ bne LB19E ; B1CF D0 CD ..
+ rts ; B1D1 60 `
+
+; ----------------------------------------------------------------------------
+LB1D2: cmp #$26 ; B1D2 C9 26 .&
+ bcs LB1DE ; B1D4 B0 08 ..
+ clc ; B1D6 18 .
+ adc #$02 ; B1D7 69 02 i.
+ dec $97 ; B1D9 C6 97 ..
+ jmp LB1D2 ; B1DB 4C D2 B1 L..
+
+; ----------------------------------------------------------------------------
+LB1DE: rts ; B1DE 60 `
+
+; ----------------------------------------------------------------------------
+; dunno what this is for yet
+data_table_b1df:
+ .byte $00 ; B1DF 00 .
+LB1E0: .byte $FE,$33,$9C,$FD,$04,$00,$04,$05 ; B1E0 FE 33 9C FD 04 00 04 05 .3......
+ .byte $06,$38,$05,$08,$7C,$05,$06,$24 ; B1E8 06 38 05 08 7C 05 06 24 .8..|..$
+ .byte $15,$06,$64,$15,$0E,$04,$2D,$06 ; B1F0 15 06 64 15 0E 04 2D 06 ..d...-.
+ .byte $38,$35,$0C,$04,$45,$06,$30,$45 ; B1F8 38 35 0C 04 45 06 30 45 85..E.0E
+ .byte $08,$88,$3C,$05,$04,$55,$08,$38 ; B200 08 88 3C 05 04 55 08 38 ..<..U.8
+ .byte $55,$06,$68,$55,$0D,$FD,$04,$01 ; B208 55 06 68 55 0D FD 04 01 U.hU....
+ .byte $1C,$2E,$07,$FD,$04,$FF,$64,$45 ; B210 1C 2E 07 FD 04 FF 64 45 ......dE
+ .byte $09,$FE,$5F,$9C,$FD,$00,$04,$0C ; B218 09 FE 5F 9C FD 00 04 0C .._.....
+ .byte $01,$0B,$0C,$41,$05,$40,$01,$05 ; B220 01 0B 0C 41 05 40 01 05 ...A.@..
+ .byte $40,$31,$05,$8C,$01,$15,$FE,$DA ; B228 40 31 05 8C 01 15 FE DA @1......
+ .byte $9C,$66,$30,$04,$FE,$B3,$9C ; B230 9C 66 30 04 FE B3 9C .f0....
+LB237: .byte $04,$02,$01,$38,$02,$01,$7C,$02 ; B237 04 02 01 38 02 01 7C 02 ...8..|.
+ .byte $01,$38,$12,$01,$64,$12,$01,$98 ; B23F 01 38 12 01 64 12 01 98 .8..d...
+ .byte $12,$01,$04,$22,$01,$98,$39,$01 ; B247 12 01 04 22 01 98 39 01 ..."..9.
+ .byte $58,$47,$01,$04,$52,$01,$38,$52 ; B24F 58 47 01 04 52 01 38 52 XG..R.8R
+ .byte $01,$98,$52,$01,$FF ; B257 01 98 52 01 FF ..R..
+LB25C: .byte $22,$00,$62,$00,$A2,$00,$64,$00 ; B25C 22 00 62 00 A2 00 64 00 ".b...d.
+ .byte $84,$00,$C4,$00,$26,$00,$C8,$00 ; B264 84 00 C4 00 26 00 C8 00 ....&...
+ .byte $8A,$00,$2C,$00,$6C,$00,$CC,$00 ; B26C 8A 00 2C 00 6C 00 CC 00 ..,.l...
+ .byte $FF ; B274 FF .
+LB275: .byte $03,$A8,$B2,$0A,$A4,$20,$01,$56 ; B275 03 A8 B2 0A A4 20 01 56 ..... .V
+ .byte $FF ; B27D FF .
+; ----------------------------------------------------------------------------
+LB27E: lda $06F5 ; B27E AD F5 06 ...
+ sta $066C ; B281 8D 6C 06 .l.
+ bne LB287 ; B284 D0 01 ..
+ rts ; B286 60 `
+
+; ----------------------------------------------------------------------------
+LB287: inc $0760 ; B287 EE 60 07 .`.
+ lda $0760 ; B28A AD 60 07 .`.
+ and #$7F ; B28D 29 7F ).
+ beq LB292 ; B28F F0 01 ..
+ rts ; B291 60 `
+
+; ----------------------------------------------------------------------------
+LB292: inc $0761 ; B292 EE 61 07 .a.
+ lda $0761 ; B295 AD 61 07 .a.
+ and #$07 ; B298 29 07 ).
+ tax ; B29A AA .
+ lda LB2D0,x ; B29B BD D0 B2 ...
+ sta $0680 ; B29E 8D 80 06 ...
+ lda LB2D8,x ; B2A1 BD D8 B2 ...
+ sta $0685 ; B2A4 8D 85 06 ...
+ rts ; B2A7 60 `
+
+; ----------------------------------------------------------------------------
+; dunno what this is for yet
+data_table_b2a8:
+ .byte $00,$00,$00,$18,$18,$18,$18,$00 ; B2A8 00 00 00 18 18 18 18 00 ........
+ .byte $00,$00,$00,$00,$3C,$24,$24,$24 ; B2B0 00 00 00 00 3C 24 24 24 ....<$$$
+ .byte $24,$3C,$00,$00,$00,$7E,$42,$42 ; B2B8 24 3C 00 00 00 7E 42 42 $<...~BB
+ .byte $42,$42,$42,$42,$7E,$00,$FF,$81 ; B2C0 42 42 42 42 7E 00 FF 81 BBBB~...
+ .byte $81,$81,$81,$81,$81,$81,$81,$FF ; B2C8 81 81 81 81 81 81 81 FF ........
+LB2D0: .byte $A4,$4C,$52,$70,$86,$86,$A4,$82 ; B2D0 A4 4C 52 70 86 86 A4 82 .LRp....
+LB2D8: .byte $20,$20,$98,$C0,$B4,$80,$68,$40 ; B2D8 20 20 98 C0 B4 80 68 40 ....h@
+; ----------------------------------------------------------------------------
+LB2E0: lda $0619 ; B2E0 AD 19 06 ...
+ and #$0F ; B2E3 29 0F ).
+ bne LB2F2 ; B2E5 D0 0B ..
+ lda $068A ; B2E7 AD 8A 06 ...
+ and #$03 ; B2EA 29 03 ).
+ sta $068A ; B2EC 8D 8A 06 ...
+ inc $068A ; B2EF EE 8A 06 ...
+LB2F2: lda $062A ; B2F2 AD 2A 06 .*.
+ sta PCOLR2 ; B2F5 8D C2 02 ...
+ lda #$00 ; B2F8 A9 00 ..
+ jmp L8F79 ; B2FA 4C 79 8F Ly.
+
+; ----------------------------------------------------------------------------
+LB2FD: lda $0680 ; B2FD AD 80 06 ...
+ sta $067E ; B300 8D 7E 06 .~.
+ lda $0685 ; B303 AD 85 06 ...
+ sta $0683 ; B306 8D 83 06 ...
+ lda #$19 ; B309 A9 19 ..
+ sta sfx_ptr ; B30B 8D 3C 06 .<.
+ lda #$B3 ; B30E A9 B3 ..
+ sta sfx_ptr+1 ; B310 8D 3D 06 .=.
+ lda #$07 ; B313 A9 07 ..
+ jsr cue_sfx_jv ; B315 20 06 80 ..
+ rts ; B318 60 `
+
+; ----------------------------------------------------------------------------
+; referenced by routine at $B2FD
+sxf_b319:
+ .byte $01,$86,$00,$0A,$20,$00,$00 ; B319 01 86 00 0A 20 00 00 .... ..
+LB320: .byte $FE,$33,$9C,$FD,$04,$00,$04,$05 ; B320 FE 33 9C FD 04 00 04 05 .3......
+ .byte $08,$2C,$07,$15,$84,$05,$06,$1C ; B328 08 2C 07 15 84 05 06 1C .,......
+ .byte $15,$03,$48,$15,$0D,$04,$25,$07 ; B330 15 03 48 15 0D 04 25 07 ..H...%.
+ .byte $30,$2F,$0D,$04,$35,$06,$74,$35 ; B338 30 2F 0D 04 35 06 74 35 0/..5.t5
+ .byte $0A,$04,$45,$06,$04,$55,$06,$28 ; B340 0A 04 45 06 04 55 06 28 ..E..U.(
+ .byte $55,$06,$4C,$55,$06,$84,$50,$06 ; B348 55 06 4C 55 06 84 50 06 U.LU..P.
+ .byte $FD,$04,$FF,$1C,$34,$05,$70,$55 ; B350 FD 04 FF 1C 34 05 70 55 ....4.pU
+ .byte $05,$80,$06,$02,$FD,$04,$01,$24 ; B358 05 80 06 02 FD 04 01 24 .......$
+ .byte $06,$02,$FE,$5F,$9C,$FD,$00,$04 ; B360 06 02 FE 5F 9C FD 00 04 ..._....
+ .byte $0C,$01,$09,$0C,$41,$05,$30,$03 ; B368 0C 01 09 0C 41 05 30 03 ....A.0.
+ .byte $0B,$54,$2B,$0A,$8C,$01,$0D,$FE ; B370 0B 54 2B 0A 8C 01 0D FE .T+.....
+ .byte $C9,$9C,$04,$38,$02,$1A,$38,$02 ; B378 C9 9C 04 38 02 1A 38 02 ...8..8.
+ .byte $33,$32,$07,$74,$38,$05,$FE,$DA ; B380 33 32 07 74 38 05 FE DA 32.t8...
+ .byte $9C,$6A,$12,$0F,$FE,$B3,$9C ; B388 9C 6A 12 0F FE B3 9C .j.....
+LB38F: .byte $04,$02,$01,$3A,$02,$01,$5A,$02 ; B38F 04 02 01 3A 02 01 5A 02 ...:..Z.
+ .byte $01,$7A,$02,$01,$98,$02,$01,$20 ; B397 01 7A 02 01 98 02 01 20 .z.....
+ .byte $12,$01,$5A,$12,$01,$04,$22,$01 ; B39F 12 01 5A 12 01 04 22 01 ..Z...".
+ .byte $3A,$22,$01,$04,$32,$01,$78,$32 ; B3A7 3A 22 01 04 32 01 78 32 :"..2.x2
+ .byte $01,$98,$32,$01,$04,$52,$01,$38 ; B3AF 01 98 32 01 04 52 01 38 ..2..R.8
+ .byte $52,$01,$60,$52,$01,$FF ; B3B7 52 01 60 52 01 FF R.`R..
+LB3BD: .byte $22,$10,$62,$20,$82,$30,$A2,$40 ; B3BD 22 10 62 20 82 30 A2 40 ".b .0.@
+ .byte $C2,$50,$44,$60,$84,$70,$26,$80 ; B3C5 C2 50 44 60 84 70 26 80 .PD`.p&.
+ .byte $66,$90,$28,$A0,$A8,$B0,$C8,$C0 ; B3CD 66 90 28 A0 A8 B0 C8 C0 f.(.....
+ .byte $2C,$D0,$6C,$E0,$8C,$F0,$FF ; B3D5 2C D0 6C E0 8C F0 FF ,.l....
+LB3DC: .byte $00,$00,$FC,$B3,$06,$B4,$10,$B4 ; B3DC 00 00 FC B3 06 B4 10 B4 ........
+ .byte $06,$B4,$10,$B4,$1A,$B4,$24,$B4 ; B3E4 06 B4 10 B4 1A B4 24 B4 ......$.
+ .byte $2E,$B4,$38,$B4,$2E,$B4,$38,$B4 ; B3EC 2E B4 38 B4 2E B4 38 B4 ..8...8.
+ .byte $FC,$B3,$24,$B4,$1A,$B4,$42,$B4 ; B3F4 FC B3 24 B4 1A B4 42 B4 ..$...B.
+ .byte $FE,$49,$9C,$FD,$04,$00,$48,$15 ; B3FC FE 49 9C FD 04 00 48 15 .I....H.
+ .byte $03,$FF,$FE,$49,$9C,$FD,$04,$00 ; B404 03 FF FE 49 9C FD 04 00 ...I....
+ .byte $46,$07,$03,$FF,$FE,$49,$9C,$FD ; B40C 46 07 03 FF FE 49 9C FD F....I..
+ .byte $04,$00,$6A,$07,$03,$FF,$FE,$49 ; B414 04 00 6A 07 03 FF FE 49 ..j....I
+ .byte $9C,$FD,$04,$00,$0A,$35,$03,$FF ; B41C 9C FD 04 00 0A 35 03 FF .....5..
+ .byte $FE,$49,$9C,$FD,$04,$00,$3E,$2F ; B424 FE 49 9C FD 04 00 3E 2F .I....>/
+ .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 <U..U..C
+ .byte $06,$FE,$5F,$9C,$FD,$00,$04,$0C ; B5B0 06 FE 5F 9C FD 00 04 0C .._.....
+ .byte $01,$09,$4C,$01,$09,$8C,$01,$09 ; B5B8 01 09 4C 01 09 8C 01 09 ..L.....
+ .byte $2A,$1F,$09,$6A,$1F,$09,$0C,$3F ; B5C0 2A 1F 09 6A 1F 09 0C 3F *..j...?
+ .byte $05,$4C,$3F,$05,$8C,$3F,$05,$FE ; B5C8 05 4C 3F 05 8C 3F 05 FE .L?..?..
+ .byte $B3,$9C ; B5D0 B3 9C ..
+LB5D2: .byte $04,$02,$01,$20,$02,$01,$3C,$02 ; B5D2 04 02 01 20 02 01 3C 02 ... ..<.
+ .byte $01,$60,$02,$01,$7C,$02,$01,$98 ; B5DA 01 60 02 01 7C 02 01 98 .`..|...
+ .byte $02,$01,$04,$22,$01,$98,$22,$01 ; B5E2 02 01 04 22 01 98 22 01 ..."..".
+ .byte $3C,$36,$01,$60,$36,$01,$04,$52 ; B5EA 3C 36 01 60 36 01 04 52 <6.`6..R
+ .byte $01,$3C,$52,$01,$60,$52,$01,$98 ; B5F2 01 3C 52 01 60 52 01 98 .<R.`R..
+ .byte $52,$01,$FF ; B5FA 52 01 FF R..
+LB5FD: .byte $22,$10,$42,$20,$62,$00,$82,$00 ; B5FD 22 10 42 20 62 00 82 00 ".B b...
+ .byte $A2,$30,$C2,$40,$26,$00,$C6,$00 ; B605 A2 30 C2 40 26 00 C6 00 .0.@&...
+ .byte $68,$00,$88,$00,$2C,$00,$6C,$00 ; B60D 68 00 88 00 2C 00 6C 00 h...,.l.
+ .byte $8C,$00,$CC,$00,$FF ; B615 8C 00 CC 00 FF .....
+LB61A: .byte $00,$00,$24,$B6,$2E,$B6,$3E,$B6 ; B61A 00 00 24 B6 2E B6 3E B6 ..$...>.
+ .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 ..