aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--jumpmanjr.dasm174
-rw-r--r--jumpmanjr.info35
-rw-r--r--main.info35
3 files changed, 162 insertions, 82 deletions
diff --git a/jumpmanjr.dasm b/jumpmanjr.dasm
index b7b5d22..9ab269d 100644
--- a/jumpmanjr.dasm
+++ b/jumpmanjr.dasm
@@ -1,5 +1,5 @@
; da65 V2.15 - Git 104f898
-; Created: 2016-09-04 04:07:57
+; Created: 2016-09-04 17:23:00
; Input file: jumpmanjr.rom
; Page: 1
@@ -77,6 +77,7 @@ num_tmp := $0665 ; temp used by print_number
player_x_pos := $067E ; stored in HPOSP0
player_y_pos := $0683 ; $C6 is the bottom of the level (where you end up when you die)
bullet_x_pos := $069B ; 4 bytes, meaning we can never have >4 bullets on screen at once (makes sense, GTIA only has 4 missiles)
+bullet_y_pos_minus_one:= $069E
bullet_y_pos := $069F ; another 4 bytes
dlist_shadow_lo := $06AC ; stored in DLISTL if dlist_shadow_hi nonzero
dlist_shadow_hi := $06AD ; stored in DLISTH if nonzero
@@ -481,10 +482,11 @@ calc_screen_addr:
ldx #$08 ; 80D8 A2 08 ..
mul40_loop:
lsr sa_tmp_1 ; 80DA 46 BD F.
- bcc L80E1 ; 80DC 90 03 ..
+ bcc mul40_no_add ; 80DC 90 03 ..
clc ; 80DE 18 .
adc dm_y_with_offset ; 80DF 65 C7 e.
-L80E1: ror a ; 80E1 6A j
+mul40_no_add:
+ ror a ; 80E1 6A j
ror dm_screen_addr ; 80E2 66 C4 f.
dex ; 80E4 CA .
bne mul40_loop ; 80E5 D0 F3 ..
@@ -508,7 +510,8 @@ sa_hi_ok_1:
rol a ; 8102 2A *
and #$03 ; 8103 29 03 ).
sta sa_tmp_2 ; 8105 85 C8 ..
-L8107: lda (dm_objptr),y ; 8107 B1 C2 ..
+calc_pixels:
+ lda (dm_objptr),y ; 8107 B1 C2 ..
sta sa_tmp_1 ; 8109 85 BD ..
lda sa_tmp_2 ; 810B A5 C8 ..
lsr sa_tmp_1 ; 810D 46 BD F.
@@ -531,15 +534,15 @@ L8107: lda (dm_objptr),y ; 8107 B1 C2
inc sa_tmp_2 ; 812A E6 C8 ..
lda sa_tmp_2 ; 812C A5 C8 ..
cmp #$04 ; 812E C9 04 ..
- bcc L813C ; 8130 90 0A ..
+ bcc sa_hi_ok_2 ; 8130 90 0A ..
lda #$00 ; 8132 A9 00 ..
sta sa_tmp_2 ; 8134 85 C8 ..
inc dm_screen_addr ; 8136 E6 C4 ..
-sa_hi_ok_2:
- bne L813C ; 8138 D0 02 ..
+ bne sa_hi_ok_2 ; 8138 D0 02 ..
inc dm_screen_addr+1 ; 813A E6 C5 ..
-L813C: dec dm_count ; 813C C6 BE ..
- bne L8107 ; 813E D0 C7 ..
+sa_hi_ok_2:
+ dec dm_count ; 813C C6 BE ..
+ bne calc_pixels ; 813E D0 C7 ..
jmp dm_draw_obj_loop ; 8140 4C B6 80 L..
; ----------------------------------------------------------------------------
@@ -562,11 +565,11 @@ 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 .?.
+; skip it, if slot is inactive
+is_slot_active:
+ 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.
@@ -602,7 +605,7 @@ sfx_play_rest:
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.
+ jmp is_slot_active ; 81AB 4C 68 81 Lh.
; ----------------------------------------------------------------------------
; y==0 on entry
@@ -615,9 +618,9 @@ sfx_change_tempo:
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 ..
+ bne is_slot_active ; 81C0 D0 A6 ..
inc sfx_slot_curpos+1,x ; 81C2 FE 4F 06 .O.
- jmp L8168 ; 81C5 4C 68 81 Lh.
+ jmp is_slot_active ; 81C5 4C 68 81 Lh.
; ----------------------------------------------------------------------------
; I *think* this jumps to a different sfx address...
@@ -665,9 +668,10 @@ sfx_play_note:
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 ..
+ bcc cpos_hi_ok ; 821E 90 03 ..
inc sfx_slot_curpos+1,x ; 8220 FE 4F 06 .O.
-L8223: jmp L8168 ; 8223 4C 68 81 Lh.
+cpos_hi_ok:
+ jmp is_slot_active ; 8223 4C 68 81 Lh.
; ----------------------------------------------------------------------------
; done playing this sfx, free up the slot, X-indexed
@@ -694,12 +698,13 @@ inc_done:
cue_sfx_lowprior:
pha ; 8240 48 H
lda sfx_ptr+1 ; 8241 AD 3D 06 .=.
-cue_ok: beq L8248 ; 8244 F0 02 ..
+cue_ok: beq lp_ok ; 8244 F0 02 ..
pla ; 8246 68 h
rts ; 8247 60 `
; ----------------------------------------------------------------------------
-L8248: lda sfx_slot_tempo ; 8248 AD 3E 06 .>.
+; copy to sfx_ptr, fall thru to cue_sfx
+lp_ok: 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 .=.
@@ -708,12 +713,15 @@ L8248: lda sfx_slot_tempo ; 8248 AD 3E 06
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 .
+next_slot:
+ dex ; 825D CA .
dex ; 825E CA .
- beq L8281 ; 825F F0 20 .
+ beq bump_slot ; 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 .<.
+ bne next_slot ; 8264 D0 F7 ..
+; found a free slot, use it
+load_slot:
+ 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.
@@ -726,56 +734,66 @@ cue_done:
rts ; 8280 60 `
; ----------------------------------------------------------------------------
-L8281: ldx #$0A ; 8281 A2 0A ..
-L8283: dex ; 8283 CA .
+; couldn't find a free slot, look for a used slot with lower priority than this sfx has
+bump_slot:
+ ldx #$0A ; 8281 A2 0A ..
+; until we find one, or ran out of slots to look at
+bump_try_next:
+ dex ; 8283 CA .
dex ; 8284 CA .
+; branch to cue_done (give up) if all slots are in use with higher priority than this sfx (which means it won't be heard)
+bump_fail:
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..
+ bcc load_slot ; 828D 90 D7 ..
+ jmp bump_try_next ; 828F 4C 83 82 L..
; ----------------------------------------------------------------------------
.byte $82 ; 8292 82 .
position_missiles:
ldx #$05 ; 8293 A2 05 ..
-L8295: dex ; 8295 CA .
+pm_next:dex ; 8295 CA .
beq missiles_done ; 8296 F0 45 .E
lda $069A,x ; 8298 BD 9A 06 ...
cmp bullet_y_pos+3,x ; 829B DD A2 06 ...
- beq L82A6 ; 829E F0 06 ..
+ beq skip_pos ; 829E F0 06 ..
sta bullet_y_pos+3,x ; 82A0 9D A2 06 ...
sta HPOSP3,x ; 82A3 9D 03 D0 ...
-L82A6: lda $06A6,x ; 82A6 BD A6 06 ...
- cmp bullet_x_pos+3,x ; 82A9 DD 9E 06 ...
- beq L8295 ; 82AC F0 E7 ..
+skip_pos:
+ lda $06A6,x ; 82A6 BD A6 06 ...
+ cmp bullet_y_pos_minus_one,x ; 82A9 DD 9E 06 ...
+ beq pm_next ; 82AC F0 E7 ..
tay ; 82AE A8 .
lda $2B00,y ; 82AF B9 00 2B ..+
- and missiles_mask_table_minus_one,x ; 82B2 3D DF 82 =..
+ and missiles_and_masks_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 =..
+ and missiles_and_masks_minus_one,x ; 82BB 3D DF 82 =..
sta $2B01,y ; 82BE 99 01 2B ..+
- lda bullet_x_pos+3,x ; 82C1 BD 9E 06 ...
+ lda bullet_y_pos_minus_one,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 ...
+ ora missiles_or_masks_minus_one,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 ...
+ ora missiles_or_masks_minus_one,x ; 82D4 1D E3 82 ...
sta $2B01,y ; 82D7 99 01 2B ..+
- jmp L8295 ; 82DA 4C 95 82 L..
+ jmp pm_next ; 82DA 4C 95 82 L..
; ----------------------------------------------------------------------------
missiles_done:
-missiles_mask_table_minus_one:= * + 2
+missiles_and_masks_minus_one:= * + 2
jmp position_players ; 82DD 4C E9 82 L..
; ----------------------------------------------------------------------------
-missiles_mask_table:
+missiles_and_masks:
.byte $FC,$F3,$CF ; 82E0 FC F3 CF ...
-L82E3: .byte $3F,$03,$0C,$30,$C0 ; 82E3 3F 03 0C 30 C0 ?..0.
+missiles_or_masks_minus_one:
+ .byte $3F ; 82E3 3F ?
+missiles_or_masks:
+ .byte $03,$0C,$30,$C0 ; 82E4 03 0C 30 C0 ..0.
; ----------------------------------------------------------------------------
position_done:
rts ; 82E8 60 `
@@ -788,11 +806,12 @@ position_players:
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 ..
+next_plr:
+ 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 ..
+ beq next_plr ; 82FB F0 F6 ..
lda $067C,x ; 82FD BD 7C 06 .|.
cmp $068B,x ; 8300 DD 8B 06 ...
beq position_pm_vert ; 8303 F0 1D ..
@@ -816,13 +835,14 @@ position_player_5:
position_pm_vert:
lda $0690,x ; 8322 BD 90 06 ...
cmp $0681,x ; 8325 DD 81 06 ...
- bne L8338 ; 8328 D0 0E ..
+ bne skip_vert ; 8328 D0 0E ..
lda $0686,x ; 832A BD 86 06 ...
cmp $0695,x ; 832D DD 95 06 ...
- beq L82F3 ; 8330 F0 C1 ..
+ beq next_plr ; 8330 F0 C1 ..
sta $0695,x ; 8332 9D 95 06 ...
lda $0690,x ; 8335 BD 90 06 ...
-L8338: sta zp_temp1 ; 8338 85 CB ..
+skip_vert:
+ sta zp_temp1 ; 8338 85 CB ..
lda $0677,x ; 833A BD 77 06 .w.
sta $CF ; 833D 85 CF ..
lda #$00 ; 833F A9 00 ..
@@ -858,7 +878,7 @@ L8370: lda ($CD),y ; 8370 B1 CD
iny ; 8374 C8 .
dec $CF ; 8375 C6 CF ..
bne L8370 ; 8377 D0 F7 ..
- jmp L82F3 ; 8379 4C F3 82 L..
+ jmp next_plr ; 8379 4C F3 82 L..
; ----------------------------------------------------------------------------
init_hardware:
@@ -924,10 +944,11 @@ set_vkeybd:
; stub => map_draw_1_blank-1
copy_blank_1_map:
ldx #$07 ; 83F0 A2 07 ..
-L83F2: lda stub,x ; 83F2 BD 05 84 ...
+cb1_loop:
+ lda stub,x ; 83F2 BD 05 84 ...
sta $06D8,x ; 83F5 9D D8 06 ...
dex ; 83F8 CA .
- bne L83F2 ; 83F9 D0 F7 ..
+ bne cb1_loop ; 83F9 D0 F7 ..
ldy #$0D ; 83FB A0 0D ..
ldx #$84 ; 83FD A2 84 ..
lda #$06 ; 83FF A9 06 ..
@@ -969,10 +990,10 @@ no_wrap:inc jiffy_timer_1 ; 841F EE 1A 06
inc speed_jiffy_timer ; 843E EE 1E 06 ...
lda current_speed ; 8441 AD 24 06 .$.
cmp #$09 ; 8444 C9 09 ..
- bcs L847E ; 8446 B0 36 .6
+ bcs check_time_bonus ; 8446 B0 36 .6
lda $061D ; 8448 AD 1D 06 ...
cmp current_speed ; 844B CD 24 06 .$.
- bcc L846E ; 844E 90 1E ..
+ bcc check_speed_timer ; 844E 90 1E ..
lda #$00 ; 8450 A9 00 ..
sta $061D ; 8452 8D 1D 06 ...
inc falling_flag ; 8455 EE 21 06 .!.
@@ -984,13 +1005,15 @@ no_wrap:inc jiffy_timer_1 ; 841F EE 1A 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 ...
+check_speed_timer:
+ lda speed_jiffy_timer ; 846E AD 1E 06 ...
cmp initial_speed ; 8471 CD 25 06 .%.
- bcc L847E ; 8474 90 08 ..
+ bcc check_time_bonus ; 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 .'.
+check_time_bonus:
+ 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 ..
@@ -1034,24 +1057,28 @@ store_joystick_state:
; ??
fake_read_trigger:
sta trigger_state ; 84CD 8D 35 06 .5.
- jmp L84D9 ; 84D0 4C D9 84 L..
+ jmp copy_level_vecs ; 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 ..
+; copy work_level vectors to page 6
+copy_level_vecs:
+ ldx #$08 ; 84D9 A2 08 ..
+next_vec:
+ lda work_level_desc+1,x ; 84DB BD 81 07 ...
+ beq skip_vec ; 84DE F0 0E ..
sta page6_vectors+3,x ; 84E0 9D 03 06 ...
lda work_level_desc,x ; 84E3 BD 80 07 ...
sta page6_vectors+2,x ; 84E6 9D 02 06 ...
lda #$00 ; 84E9 A9 00 ..
sta work_level_desc+1,x ; 84EB 9D 81 07 ...
-L84EE: dex ; 84EE CA .
+skip_vec:
+ dex ; 84EE CA .
dex ; 84EF CA .
- bne L84DB ; 84F0 D0 E9 ..
+ bne next_vec ; 84F0 D0 E9 ..
lda $0640 ; 84F2 AD 40 06 .@.
ora $0642 ; 84F5 0D 42 06 .B.
ora $0644 ; 84F8 0D 44 06 .D.
@@ -1081,7 +1108,7 @@ clear_dlist_shadow:
; 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 ..
+ beq skip_dli ; 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 ...
@@ -1093,7 +1120,8 @@ clear_dli_shadow:
enable_dli:
lda #$C0 ; 8536 A9 C0 ..
sta NMIEN ; 8538 8D 0E D4 ...
-L853B: lda $06FC ; 853B AD FC 06 ...
+skip_dli:
+ lda $06FC ; 853B AD FC 06 ...
cmp $0888 ; 853E CD 88 08 ...
bcc L8551 ; 8541 90 0E ..
inc $06FD ; 8543 EE FD 06 ...
@@ -1139,14 +1167,16 @@ check_select_key:
; carry set = not pressed, clear = pressed
check_option_key:
lsr zp_temp1 ; 8580 46 CB F.
- bcs L858D ; 8582 B0 09 ..
+ bcs no_consol_pressed ; 8582 B0 09 ..
lda option_key_enabled ; 8584 AD C6 06 ...
- beq L858D ; 8587 F0 04 ..
+ beq no_consol_pressed ; 8587 F0 04 ..
txs ; 8589 9A .
jmp (option_key_vec) ; 858A 6C C0 06 l..
; ----------------------------------------------------------------------------
-L858D: ldx $0618 ; 858D AE 18 06 ...
+; this probably is what rotates the PLAYER SPEED prompt colors. not sure what it's doing with the page 6 vectors.
+no_consol_pressed:
+ ldx $0618 ; 858D AE 18 06 ...
cpx #$18 ; 8590 E0 18 ..
bne L859C ; 8592 D0 08 ..
lda #$00 ; 8594 A9 00 ..
@@ -1157,12 +1187,12 @@ L858D: ldx $0618 ; 858D AE 18 06
L859C: inc $0618 ; 859C EE 18 06 ...
inc $0618 ; 859F EE 18 06 ...
lda page6_vectors+1,x ; 85A2 BD 01 06 ...
- beq L858D ; 85A5 F0 E6 ..
+ beq no_consol_pressed ; 85A5 F0 E6 ..
sta $06E5 ; 85A7 8D E5 06 ...
lda page6_vectors,x ; 85AA BD 00 06 ...
sta $06E4 ; 85AD 8D E4 06 ...
jsr L06E3 ; 85B0 20 E3 06 ..
- jmp L858D ; 85B3 4C 8D 85 L..
+ jmp no_consol_pressed ; 85B3 4C 8D 85 L..
; ----------------------------------------------------------------------------
; used in vblank_imm_isr, not sure for what yet
@@ -5993,7 +6023,7 @@ LA845: dex ; A845 CA
bne LA845 ; A852 D0 F1 ..
inc bullet_y_delta+1,x ; A854 FE 5F 07 ._.
lda #$00 ; A857 A9 00 ..
- sta bullet_x_pos+3,x ; A859 9D 9E 06 ...
+ sta bullet_y_pos_minus_one,x ; A859 9D 9E 06 ...
lda player_x_pos ; A85C AD 7E 06 .~.
clc ; A85F 18 .
adc #$03 ; A860 69 03 i.
@@ -6030,11 +6060,11 @@ play_hellstone_sfx:
LA89E: lda $0763,x ; A89E BD 63 07 .c.
bne LA8C1 ; A8A1 D0 1E ..
LA8A3: clc ; A8A3 18 .
- lda bullet_x_pos+3,x ; A8A4 BD 9E 06 ...
+ lda bullet_y_pos_minus_one,x ; A8A4 BD 9E 06 ...
adc #$02 ; A8A7 69 02 i.
cmp #$CE ; A8A9 C9 CE ..
bcs LA8B3 ; A8AB B0 06 ..
- sta bullet_x_pos+3,x ; A8AD 9D 9E 06 ...
+ sta bullet_y_pos_minus_one,x ; A8AD 9D 9E 06 ...
jmp LA845 ; A8B0 4C 45 A8 LE.
; ----------------------------------------------------------------------------
@@ -6057,9 +6087,9 @@ LA8C1: lda $0767,x ; A8C1 BD 67 07
; ----------------------------------------------------------------------------
LA8D4: tay ; A8D4 A8 .
clc ; A8D5 18 .
- lda bullet_x_pos+3,x ; A8D6 BD 9E 06 ...
+ lda bullet_y_pos_minus_one,x ; A8D6 BD 9E 06 ...
adc hellstone_deltas_2,y ; A8D9 79 05 A9 y..
- sta bullet_x_pos+3,x ; A8DC 9D 9E 06 ...
+ sta bullet_y_pos_minus_one,x ; A8DC 9D 9E 06 ...
lda hellstone_deltas_1,y ; A8DF B9 FD A8 ...
tay ; A8E2 A8 .
beq LA8EF ; A8E3 F0 0A ..
diff --git a/jumpmanjr.info b/jumpmanjr.info
index 94cef68..46e83c7 100644
--- a/jumpmanjr.info
+++ b/jumpmanjr.info
@@ -96,14 +96,29 @@ label { name "number_names_2"; addr $95e5; size 4; comment "N W R O"
label { name "number_names_3"; addr $95e9; size 4; comment "E O E U"; };
label { name "number_names_4"; addr $95ed; size 4; comment "space space E R"; };
label { name "sfx_select_key"; addr $95f1; comment "played when select key pressed, 4 notes, descending"; };
-label { name "missiles_mask_table_minus_one"; addr $82df; };
label { name "set_dma_ctl"; addr $838F; comment "std playfield, enable players + missiles, single-line p/m res, DMA enabled"; };
range { name "level_names"; start $BB00; end $bbef; type bytetable; };
range { name "pm_memory"; start $2800; end $2fff; type bytetable; };
-range { name "missiles_mask_table"; start $82e0; end $82E7; type bytetable; };
+range { name "missiles_and_masks"; start $82e0; end $82E7; type bytetable; };
+label { name "missiles_and_masks_minus_one"; addr $82df; };
+label { name "missiles_or_masks"; addr $82e4; };
+label { name "missiles_or_masks_minus_one"; addr $82e3; };
range { name "missiles_done"; start $82DD; end $82df; type code; };
range { name "position_missiles"; start $8293; end $82DA; type code; };
+label { name "pm_next"; addr $8295; };
+label { name "skip_pos"; addr $82A6; };
+label { name "next_plr"; addr $82F3; };
+label { name "skip_vert"; addr $8338; };
+label { name "cb1_loop"; addr $83F2; };
+label { name "check_speed_timer"; addr $846E; };
+label { name "check_time_bonus"; addr $847E; };
+label { name "copy_level_vecs"; addr $84D9; comment "copy work_level vectors to page 6"; };
+label { name "next_vec"; addr $84DB; };
+label { name "skip_vec"; addr $84EE; };
+label { name "skip_dli"; addr $853B; };
+label { name "no_consol_pressed"; addr $858D; comment "this probably is what rotates the PLAYER SPEED prompt colors. not sure what it's doing with the page 6 vectors."; };
+
range { name "charset"; start $9e00; end $9ff9; type bytetable; comment "GR.1/2 font, 512 bytes"; };
range { name "game_display_list"; start $0881; end $08e3; type bytetable; comment "display list for game board"; };
range { name "title_display_list"; start $91B3; end $91ce; type bytetable; comment "display list for title screen"; };
@@ -191,7 +206,8 @@ label { name "set_bullet_dir"; addr $8EA7; size 1; comment "initial direction (b
label { name "fire_bullet"; addr $8EEF; size 1; comment "fire! Y reg indexes table of directions"; };
label { name "player_y_pos"; addr $0683; size 1; comment "$C6 is the bottom of the level (where you end up when you die)"; };
label { name "player_x_pos"; addr $067E; size 1; comment "stored in HPOSP0"; };
-label { name "bullet_x_pos"; addr $069B; size 4; comment "4 bytes, meaning we can never have >4 bullets on screen at once (makes sense, GTIA only has 4 missiles)"; };
+label { name "bullet_x_pos"; addr $069B; size 1; comment "4 bytes, meaning we can never have >4 bullets on screen at once (makes sense, GTIA only has 4 missiles)"; };
+label { name "bullet_y_pos_minus_one"; addr $069E; };
label { name "bullet_y_pos"; addr $069F; size 4; comment "another 4 bytes"; };
label { name "bullet_flags"; addr $0756; size 4; comment "4 bytes, 0 = bullet slot not in use, non-0 = bullet active"; };
label { name "bullet_x_delta"; addr $075A; size 4; comment "4 bytes"; };
@@ -262,7 +278,14 @@ label { name "sfx_next_note"; addr $817D; size 1; };
label { name "sfx_player_entry"; addr $8157; size 1; comment "we have 4 slots (because POKEY has 4 voices), X counts down by 2 from 10 to 2 (at 0, the loop exits)"; };
label { name "next_sfx_slot"; addr $815F; size 1; };
label { name "sfx_exit"; addr $815E; size 1; };
-label { name "is_slot_active"; addr $8163; size 1; comment "skip it, if slot is inactive"; };
+label { name "is_slot_active"; addr $8168; size 1; comment "skip it, if slot is inactive"; };
+label { name "cpos_hi_ok"; addr $8223; };
+label { name "lp_ok"; addr $8248; comment "copy to sfx_ptr, fall thru to cue_sfx"; };
+label { name "next_slot"; addr $825D; };
+label { name "load_slot"; addr $8266; comment "found a free slot, use it"; };
+label { name "bump_slot"; addr $8281; comment "couldn't find a free slot, look for a used slot with lower priority than this sfx has"; };
+label { name "bump_try_next"; addr $8283; comment "until we find one, or ran out of slots to look at"; };
+label { name "bump_fail"; addr $8285; comment "branch to cue_done (give up) if all slots are in use with higher priority than this sfx (which means it won't be heard)"; };
label { name "sfx_slot_timer"; addr $063F; size 1; };
label { name "sfx_slot_duration"; addr $0646; size 1; };
label { name "sfx_play_note"; addr $8206; size 1; comment "y==0, a>=4 on entry"; };
@@ -817,7 +840,9 @@ label { name "dm_screen_addr"; addr $C4; size 2; comment "points to byte to writ
label { name "calc_screen_addr"; addr $80D0; size 1; comment "calculate 40 * dm_y_with_offset + dm_x_with_offset + screen mem address, store in dm_screen_addr"; };
label { name "sa_hi_ok_1"; addr $80FD; size 1; };
label { name "mul40_loop"; addr $80DA; size 1; };
-label { name "sa_hi_ok_2"; addr $8138; size 1; };
+label { name "mul40_no_add"; addr $80E1; size 1; };
+label { name "calc_pixels"; addr $8107; size 1; };
+label { name "sa_hi_ok_2"; addr $813C; size 1; };
label { name "sa_tmp_1"; addr $BD; size 1; comment "used by calc_screen_addr"; };
label { name "sa_tmp_2"; addr $C8; size 1; comment "used by calc_screen_addr"; };
label { name "store_rts"; addr $83B6; comment "store an RTS at $06E6, which will get JSR'ed to by unused level subroutines"; };
diff --git a/main.info b/main.info
index ba30b68..507f535 100644
--- a/main.info
+++ b/main.info
@@ -94,14 +94,29 @@ label { name "number_names_2"; addr $95e5; size 4; comment "N W R O"
label { name "number_names_3"; addr $95e9; size 4; comment "E O E U"; };
label { name "number_names_4"; addr $95ed; size 4; comment "space space E R"; };
label { name "sfx_select_key"; addr $95f1; comment "played when select key pressed, 4 notes, descending"; };
-label { name "missiles_mask_table_minus_one"; addr $82df; };
label { name "set_dma_ctl"; addr $838F; comment "std playfield, enable players + missiles, single-line p/m res, DMA enabled"; };
range { name "level_names"; start $BB00; end $bbef; type bytetable; };
range { name "pm_memory"; start $2800; end $2fff; type bytetable; };
-range { name "missiles_mask_table"; start $82e0; end $82E7; type bytetable; };
+range { name "missiles_and_masks"; start $82e0; end $82E7; type bytetable; };
+label { name "missiles_and_masks_minus_one"; addr $82df; };
+label { name "missiles_or_masks"; addr $82e4; };
+label { name "missiles_or_masks_minus_one"; addr $82e3; };
range { name "missiles_done"; start $82DD; end $82df; type code; };
range { name "position_missiles"; start $8293; end $82DA; type code; };
+label { name "pm_next"; addr $8295; };
+label { name "skip_pos"; addr $82A6; };
+label { name "next_plr"; addr $82F3; };
+label { name "skip_vert"; addr $8338; };
+label { name "cb1_loop"; addr $83F2; };
+label { name "check_speed_timer"; addr $846E; };
+label { name "check_time_bonus"; addr $847E; };
+label { name "copy_level_vecs"; addr $84D9; comment "copy work_level vectors to page 6"; };
+label { name "next_vec"; addr $84DB; };
+label { name "skip_vec"; addr $84EE; };
+label { name "skip_dli"; addr $853B; };
+label { name "no_consol_pressed"; addr $858D; comment "this probably is what rotates the PLAYER SPEED prompt colors. not sure what it's doing with the page 6 vectors."; };
+
range { name "charset"; start $9e00; end $9ff9; type bytetable; comment "GR.1/2 font, 512 bytes"; };
range { name "game_display_list"; start $0881; end $08e3; type bytetable; comment "display list for game board"; };
range { name "title_display_list"; start $91B3; end $91ce; type bytetable; comment "display list for title screen"; };
@@ -189,7 +204,8 @@ label { name "set_bullet_dir"; addr $8EA7; size 1; comment "initial direction (b
label { name "fire_bullet"; addr $8EEF; size 1; comment "fire! Y reg indexes table of directions"; };
label { name "player_y_pos"; addr $0683; size 1; comment "$C6 is the bottom of the level (where you end up when you die)"; };
label { name "player_x_pos"; addr $067E; size 1; comment "stored in HPOSP0"; };
-label { name "bullet_x_pos"; addr $069B; size 4; comment "4 bytes, meaning we can never have >4 bullets on screen at once (makes sense, GTIA only has 4 missiles)"; };
+label { name "bullet_x_pos"; addr $069B; size 1; comment "4 bytes, meaning we can never have >4 bullets on screen at once (makes sense, GTIA only has 4 missiles)"; };
+label { name "bullet_y_pos_minus_one"; addr $069E; };
label { name "bullet_y_pos"; addr $069F; size 4; comment "another 4 bytes"; };
label { name "bullet_flags"; addr $0756; size 4; comment "4 bytes, 0 = bullet slot not in use, non-0 = bullet active"; };
label { name "bullet_x_delta"; addr $075A; size 4; comment "4 bytes"; };
@@ -260,7 +276,14 @@ label { name "sfx_next_note"; addr $817D; size 1; };
label { name "sfx_player_entry"; addr $8157; size 1; comment "we have 4 slots (because POKEY has 4 voices), X counts down by 2 from 10 to 2 (at 0, the loop exits)"; };
label { name "next_sfx_slot"; addr $815F; size 1; };
label { name "sfx_exit"; addr $815E; size 1; };
-label { name "is_slot_active"; addr $8163; size 1; comment "skip it, if slot is inactive"; };
+label { name "is_slot_active"; addr $8168; size 1; comment "skip it, if slot is inactive"; };
+label { name "cpos_hi_ok"; addr $8223; };
+label { name "lp_ok"; addr $8248; comment "copy to sfx_ptr, fall thru to cue_sfx"; };
+label { name "next_slot"; addr $825D; };
+label { name "load_slot"; addr $8266; comment "found a free slot, use it"; };
+label { name "bump_slot"; addr $8281; comment "couldn't find a free slot, look for a used slot with lower priority than this sfx has"; };
+label { name "bump_try_next"; addr $8283; comment "until we find one, or ran out of slots to look at"; };
+label { name "bump_fail"; addr $8285; comment "branch to cue_done (give up) if all slots are in use with higher priority than this sfx (which means it won't be heard)"; };
label { name "sfx_slot_timer"; addr $063F; size 1; };
label { name "sfx_slot_duration"; addr $0646; size 1; };
label { name "sfx_play_note"; addr $8206; size 1; comment "y==0, a>=4 on entry"; };
@@ -815,7 +838,9 @@ label { name "dm_screen_addr"; addr $C4; size 2; comment "points to byte to writ
label { name "calc_screen_addr"; addr $80D0; size 1; comment "calculate 40 * dm_y_with_offset + dm_x_with_offset + screen mem address, store in dm_screen_addr"; };
label { name "sa_hi_ok_1"; addr $80FD; size 1; };
label { name "mul40_loop"; addr $80DA; size 1; };
-label { name "sa_hi_ok_2"; addr $8138; size 1; };
+label { name "mul40_no_add"; addr $80E1; size 1; };
+label { name "calc_pixels"; addr $8107; size 1; };
+label { name "sa_hi_ok_2"; addr $813C; size 1; };
label { name "sa_tmp_1"; addr $BD; size 1; comment "used by calc_screen_addr"; };
label { name "sa_tmp_2"; addr $C8; size 1; comment "used by calc_screen_addr"; };
label { name "store_rts"; addr $83B6; comment "store an RTS at $06E6, which will get JSR'ed to by unused level subroutines"; };