---- star_blazer.asm0 2022-06-22 22:46:35.420152214 +1000
-+++ star_blazer.asm 2022-06-22 22:50:05.056154361 +1000
+--- star_blazer.asm0 2022-06-22 23:55:46.132013052 +1000
++++ star_blazer.asm 2022-06-23 00:05:26.060018993 +1000
@@ -1,3 +1,8 @@
+ALIGN = 0
+DHGR = 1
lda object1080_y0 - 0x10,x ; 1ab9 -> 1abb -> 1abe r x=14..77
cmp object1080_y1 - 0x10,x ; 1abb -> 1abe -> 1ac1 r a=11..d4 x=14..77
bcs rts_1aae ; 1abe -> 1ac1 -> 1ac3 r c=0
-@@ -2454,14 +2549,40 @@
+@@ -2442,7 +2537,12 @@
+ stx *x_save ; 1b32 -> 1b35 -> 1b37 r
+ lda *draw_y ; 1b35 -> 1b37 -> 1b39 r
+ cmp *clip_y0 ; 1b37 -> 1b39 -> 1b3b r a=11..d4
++.if DHGR
++ bcs . + 5
++ jmp 8$
++.else
+ bcc 8$ ; 1b39 -> 1b3b -> 1b3d,1b83 r c=0..1
++.endif
+ lda *clip_y1 ; 1b3b -> 1b3d -> 1b3f r
+ cmp *draw_y1 ; 1b3d -> 1b3f -> 1b41 r a=d0
+ bcc 8$ ; 1b3f -> 1b41 -> 1b43,1b83 r c=0..1
+@@ -2453,16 +2553,59 @@
+ cmp *draw_x1 ; 1b49 -> 1b4b -> 1b4d r a=94
bcc 8$ ; 1b4b -> 1b4d -> 1b4f,1b83 r c=0..1
lda object1080_onscreen_shape_ptr_lo - 0x10,x ; 1b4d -> 1b4f -> 1b52 r x=14..77
++.if DHGR
++ sta 92$
++.endif
sta 7$ ; 1b4f -> 1b52 -> 1b55 r
+.if DHGR
+ tay
+.endif
lda object1080_onscreen_shape_ptr_hi - 0x10,x ; 1b52 -> 1b55 -> 1b58 r x=14..77
++.if DHGR
++ sta 92$ + 1
++.endif
sta 7$ + 1 ; 1b55 -> 1b58 -> 1b5b r
+.if DHGR
+ sta hw_wrcardram
+ sta hw_wrmainram
+.endif
ldy *draw_x0 ; 1b67 -> 1b69 -> 1b6b r
++.if DHGR ; draw overflow pixel
++ dey
++ bmi 93$
++ .db 0xbd ; lda NNNN,x
++92$: .dw 0
++ lsr a
++ and #0x40
++ ora [*video_line_ptr],y
++ sta [*video_line_ptr],y
++93$: iny
++.endif
6$: .db 0xbd ; 1b69,1b76 -> 1b6b -> 1b6e r "lda shape_12_exhaust0 + 0x12,x" x=00..39
7$: .dw shape_12_exhaust0 + 0x12 ; 1b6c rw
-@@ -2480,13 +2601,22 @@
+ ora [*video_line_ptr],y ; 1b6b -> 1b6e -> 1b70 r y=6c..93
+@@ -2479,16 +2622,50 @@
+ rts ; 1b80 -> 1b82 -> 15cd r s=fb
8$: inc object1080_onscreen_clipped - 0x10,x ; 1b3b,1b41,1b47,1b4d -> 1b83 -> 1b86 r x=14..77
lda object1080_onscreen_shape_ptr_lo - 0x10,x ; 1b83 -> 1b86 -> 1b89 r x=14..77
++.if DHGR
++ sta 94$
++.endif
sta 11$ ; 1b86 -> 1b89 -> 1b8c r
+.if DHGR
+ tay
+.endif
lda object1080_onscreen_shape_ptr_hi - 0x10,x ; 1b89 -> 1b8c -> 1b8f r x=14..77
++.if DHGR
++ sta 94$ + 1
++.endif
sta 11$ + 1 ; 1b8c -> 1b8f -> 1b92 r
+.if DHGR
+ sta hw_wrcardram
-+ sty 92$
-+ sta 92$ + 1
++ sty 96$
++ sta 96$ + 1
+ sta hw_wrmainram
+.endif
ldx #0x00 ; 1b8f -> 1b92 -> 1b94 r
+ lda video_line_table_hi - 0x20,y ;0xaaa0,y ; 1b99 -> 1b9b -> 1b9e r y=11..d8
sta *video_line_ptr + 1 ; 1b9b -> 1b9e -> 1ba0 r
ldy *draw_x0 ; 1b9e -> 1ba0 -> 1ba2 r
++.if DHGR ; draw overflow pixel
++ lda *draw_y
++ cmp *clip_y0
++ bcc 12$
++ cmp *clip_y1
++ bcs 12$
++ dey
++ cpy *clip_x0
++ bcc 95$
++ cpy *clip_x1
++ bcs 95$
++ .db 0xbd ; lda NNNN,x
++94$: .dw 0
++ lsr a
++ and #0x40
++ ora [*video_line_ptr],y
++ sta [*video_line_ptr],y
++95$: iny
++.endif
10$: lda *draw_y ; 1ba0,1bbf -> 1ba2 -> 1ba4 r
-@@ -2498,6 +2628,16 @@
+ cmp *clip_y0 ; 1ba2 -> 1ba4 -> 1ba6 r a=11..d8
+ bcc 12$ ; 1ba4 -> 1ba6 -> 1ba8,1bbb r c=0..1
+@@ -2498,6 +2675,16 @@
bcc 12$ ; 1bac -> 1bae -> 1bb0,1bbb r c=0..1
cpy *clip_x1 ; 1bae -> 1bb0 -> 1bb2 r y=6c..a4
bcs 12$ ; 1bb0 -> 1bb2 -> 1bb4,1bbb r c=0..1
+ sta hw_rdcardram
+ sta hw_wrcardram
+ .db 0xbd ; lda NNNN,x
-+92$: .dw 0
++96$: .dw 0
+ ora [*video_line_ptr],y
+ sta [*video_line_ptr],y
+ sta hw_rdmainram
.db 0xbd ; 1bb2 -> 1bb4 -> 1bb7 r "lda shape_12_exhaust0 + 0x1e,x" x=00..39
11$: .dw shape_12_exhaust0 + 0x1e ; 1bb5 rw
ora [*video_line_ptr],y ; 1bb4 -> 1bb7 -> 1bb9 r y=6c..93
-@@ -2511,6 +2651,7 @@
+@@ -2511,6 +2698,7 @@
cpy *draw_y1 ; 1bc3 -> 1bc5 -> 1bc7 r y=12..d9
bcc 9$ ; 1bc5 -> 1bc7 -> 1b96,1bc9 r c=0..1
ldx *x_save ; 1bc7 -> 1bc9 -> 1bcb r
rts ; 1bc9 -> 1bcb -> 15cd r s=fb
erase_pixel_object:
lda #0x00 ; 1c12 -> 1bcc -> 1bce r
-@@ -2542,12 +2683,15 @@
+@@ -2542,12 +2730,15 @@
eor #0xff ; 1c03 -> 1c06 -> 1c08 r
and [*video_line_ptr],y ; 1c06 -> 1c08 -> 1c0a r y=6d..93,02
sta [*video_line_ptr],y ; 1c08 -> 1c0a -> 1c0c r y=6d..93,02
lda #0x00 ; 1c12 -> 1c14 -> 1c16 r
sta object1080_onscreen - 0x10,x ; 1c14 -> 1c16 -> 1c19 r x=14..77
lda object1080_onscreen_x0 - 0x10,x ; 1c16 -> 1c19 -> 1c1c r x=14..77
-@@ -2563,14 +2707,41 @@
+@@ -2562,16 +2753,61 @@
+ stx *x_save ; 1c2d -> 1c30 -> 1c32 r
bne 3$ ; 1c30 -> 1c32 -> 1c34,1c6a r z=0..1
lda object1080_onscreen_shape_ptr_lo - 0x10,x ; 1c32 -> 1c34 -> 1c37 r x=14..77
++.if DHGR
++ sta 92$
++.endif
sta 2$ ; 1c34 -> 1c37 -> 1c3a r
+.if DHGR
+ tay
+.endif
lda object1080_onscreen_shape_ptr_hi - 0x10,x ; 1c37 -> 1c3a -> 1c3d r x=14..77
++.if DHGR
++ sta 92$ + 1
++.endif
sta 2$ + 1 ; 1c3a -> 1c3d -> 1c40 r
+.if DHGR
+ sta hw_wrcardram
+ sta hw_wrmainram
+.endif
ldy *draw_x0 ; 1c4c -> 1c4e -> 1c50 r
++.if DHGR ; erase overflow pixel
++ dey
++ bmi 93$
++ .db 0xbd ; lda NNNN,x
++92$: .dw 0
++ lsr a
++ and #0x40
++ eor #0xff
++ and [*video_line_ptr],y
++ sta [*video_line_ptr],y
++93$: iny
++.endif
1$: .db 0xbd ; 1c4e,1c5d -> 1c50 -> 1c53 r "lda shape_12_exhaust0 + 6,x" x=00..39
2$: .dw shape_12_exhaust0 + 6 ; 1c51 rw
-@@ -2588,14 +2759,23 @@
+ eor #0xff ; 1c50 -> 1c53 -> 1c55 r
+@@ -2588,16 +2824,51 @@
ldx *x_save ; 1c65 -> 1c67 -> 1c69 r
rts ; 1c67 -> 1c69 -> 1076,16a8 r s=f3..f9,02
3$: lda object1080_onscreen_shape_ptr_lo - 0x10,x ; 1c32 -> 1c6a -> 1c6d r x=14..77
+.if DHGR
-+ tay
++ sta 94$
+.endif
sta 6$ ; 1c6a -> 1c6d -> 1c70 r
++.if DHGR
++ tay
++.endif
lda object1080_onscreen_shape_ptr_hi - 0x10,x ; 1c6d -> 1c70 -> 1c73 r x=14..77
+.if DHGR
++ sta 94$ + 1
++.endif
+ sta 6$ + 1 ; 1c70 -> 1c73 -> 1c76 r
++.if DHGR
+ sta hw_wrcardram
-+ sty 92$
-+ sta 92$ + 1
++ sty 96$
++ sta 96$ + 1
+ sta hw_wrmainram
+.endif
- sta 6$ + 1 ; 1c70 -> 1c73 -> 1c76 r
ldx #0x00 ; 1c73 -> 1c76 -> 1c78 r
ldy *draw_y ; 1c76 -> 1c78 -> 1c7a r
-4$: lda 0xa9e0,y ; 1c78,1cad -> 1c7a -> 1c7d r y=11..d8
+ lda video_line_table_hi - 0x20,y ;0xaaa0,y ; 1c7d -> 1c7f -> 1c82 r y=11..d8
sta *video_line_ptr + 1 ; 1c7f -> 1c82 -> 1c84 r
ldy *draw_x0 ; 1c82 -> 1c84 -> 1c86 r
++.if DHGR ; erase overflow pixel
++ lda *draw_y
++ cmp *clip_y0
++ bcc 7$
++ cmp *clip_y1
++ bcs 7$
++ dey
++ cpy *clip_x0
++ bcc 95$
++ cpy *clip_x1
++ bcs 95$
++ .db 0xbd ; lda NNNN,x
++94$: .dw 0
++ lsr a
++ and #0x40
++ eor #0xff
++ and [*video_line_ptr],y
++ sta [*video_line_ptr],y
++95$: iny
++.endif
5$: lda *draw_y ; 1c84,1ca5 -> 1c86 -> 1c88 r
-@@ -2607,6 +2787,17 @@
+ cmp *clip_y0 ; 1c86 -> 1c88 -> 1c8a r a=11..d8
+ bcc 7$ ; 1c88 -> 1c8a -> 1c8c,1ca1 r c=0..1
+@@ -2607,6 +2878,17 @@
bcc 7$ ; 1c90 -> 1c92 -> 1c94,1ca1 r c=0..1
cpy *clip_x1 ; 1c92 -> 1c94 -> 1c96 r y=6c..a4
bcs 7$ ; 1c94 -> 1c96 -> 1c98,1ca1 r c=0..1
+ sta hw_rdcardram
+ sta hw_wrcardram
+ .db 0xbd ; lda NNNN,x
-+92$: .dw 0
++96$: .dw 0
+ eor #0xff
+ and [*video_line_ptr],y
+ sta [*video_line_ptr],y
.db 0xbd ; 1c96 -> 1c98 -> 1c9b r "lda shape_12_exhaust0 + 0x1e,x" x=00..39
6$: .dw shape_12_exhaust0 + 0x1e ; 1c99 rw
eor #0xff ; 1c98 -> 1c9b -> 1c9d r
-@@ -2627,8 +2818,17 @@
+@@ -2626,9 +2908,24 @@
+ stx *x_save ; 1db0 -> 1cb2 -> 1cb4 r
tay ; 1cb2 -> 1cb4 -> 1cb5 r
lda shape_data_ptr_lo,y ; 1cb4 -> 1cb5 -> 1cb8 r y=16..ff
++.if DHGR
++ sta 93$
++.endif
sta 3$ ; 1cb5 -> 1cb8 -> 1cbb r
+.if DHGR
+ tax
+.endif
lda shape_data_ptr_hi,y ; 1cb8 -> 1cbb -> 1cbe r y=16..ff
++.if DHGR
++ sta 93$ + 1
++.endif
sta 3$ + 1 ; 1cbb -> 1cbe -> 1cc1 r
+.if DHGR
+ sta hw_wrcardram
lda shape_width_bytes,y ; 1cbe -> 1cc1 -> 1cc4 r y=16..ff
clc ; 1cc1 -> 1cc4 -> 1cc5 r
adc *draw_x0 ; 1cc4 -> 1cc5 -> 1cc7 r c=0 d=0
-@@ -2636,6 +2836,11 @@
+@@ -2636,6 +2933,11 @@
lda *draw_x0 ; 1cc7 -> 1cc9 -> 1ccb r
lsr a ; 1cc9 -> 1ccb -> 1ccc r
bcc 0$ ; 1ccb -> 1ccc -> 1cce,1cd4 r c=0..1
lda *draw_misc_mask ; 1ccc -> 1cce -> 1cd0 r
eor *draw_misc_mask_xor ; 1cce -> 1cd0 -> 1cd2 r
sta *draw_misc_mask ; 1cd0 -> 1cd2 -> 1cd4 r
-@@ -2651,6 +2856,33 @@
+@@ -2651,9 +2953,56 @@
lda video_line_table_hi,y ; 1ce5 -> 1ce7 -> 1cea r y=00..bc
adc #0x00 ; 1ce7 -> 1cea -> 1cec r c=0..1 d=0
sta *video_line_ptr + 1 ; 1cea -> 1cec -> 1cee r
lda *draw_misc_mask ; 1cec -> 1cee -> 1cf0 r
sta *draw_misc_mask_temp ; 1cee -> 1cf0 -> 1cf2 r
ldy *draw_x0 ; 1cf0 -> 1cf2 -> 1cf4 r
-@@ -2686,7 +2918,7 @@
++.if DHGR ; draw overflow pixel
++ lda *draw_y
++ cmp #0xc0
++ bcs 95$
++ dey
++ cpy #0x28
++ bcs 94$
++ .db 0xbd ; lda NNNN,x
++93$: .dw 0
++ lsr a
++ and *draw_misc_mask_temp
++ eor [*video_line_ptr],y
++ and #0x40
++ eor [*video_line_ptr],y
++ sta [*video_line_ptr],y
++94$: iny
++95$: lda *draw_misc_mask_temp
++ eor *draw_misc_mask_xor
++ sta *draw_misc_mask_temp
++.endif
+ 2$: lda *draw_y ; 1cf2,1d0f -> 1cf4 -> 1cf6 r
+ cmp #0xc0 ; 1cf4 -> 1cf6 -> 1cf8 r a=00..bc
+ bcs 4$ ; 1cf6 -> 1cf8 -> 1cfa r c=0
+@@ -2673,7 +3022,12 @@
+ inc *draw_y ; 1d0f -> 1d11 -> 1d13 r
+ ldy *draw_y ; 1d11 -> 1d13 -> 1d15 r
+ cpy *draw_y1 ; 1d13 -> 1d15 -> 1d17 r y=01..bd
++.if DHGR
++ bcs . + 5
++ jmp 1$
++.else
+ bcc 1$ ; 1d15 -> 1d17 -> 1ce0,1d19 r c=0..1
++.endif
+ ldx *x_save ; 1d17 -> 1d19 -> 1d1b r
+ rts ; 1d19 -> 1d1b -> 1db3 r s=ec..f5
+ draw_misc_from_table:
+@@ -2686,7 +3040,7 @@
asl a ; 1d23 -> 1d24 -> 1d25 r
sta *draw_misc_ptr ; 1d24 -> 1d25 -> 1d27 r
lda #0x00 ; 1d25 -> 1d27 -> 1d29 r
sta *draw_misc_ptr + 1 ; 1d29 -> 1d2b -> 1d2d r
lda *half_dimension ; 1d2b -> 1d2d -> 1d2f r
lsr a ; 1d2d -> 1d2f -> 1d30 r
-@@ -2695,6 +2927,12 @@
+@@ -2695,6 +3049,12 @@
lsr a ; 1d31 -> 1d32 -> 1d33 r
lsr a ; 1d32 -> 1d33 -> 1d34 r
tay ; 1d33 -> 1d34 -> 1d35 r
lda draw_misc_mask_table,y ; 1d34 -> 1d35 -> 1d38 r y=00..06
sta *draw_misc_mask ; 1d35 -> 1d38 -> 1d3a r
lda draw_misc_mask_xor_table,y ; 1d38 -> 1d3a -> 1d3d r y=00..06
-@@ -2771,6 +3009,62 @@
+@@ -2771,6 +3131,73 @@
ldy *draw_misc_y_save ; 1d1b -> 1db3 -> 1db5 r
rts_1db5:
rts ; 1da1,1db3 -> 1db5 -> 1076,1d61,1d7d,1d82,1d87 r s=ee..f7
+; bit 0 6 0 6 0 6 0 6 hex
+; 1111111 1111111 1111111 1111111 7f 7f 7f 7f
+; 0000000 0000000 0000000 0000000 00 00 00 00
++; 0110011 0011001 1001100 1100110 66 4c 19 33
++; 1001100 1100110 0110011 0011001 19 33 66 4c
++; 1111111 1111111 1111111 1111111 7f 7f 7f 7f
+; 0011001 1001100 1100110 0110011 4c 19 33 66
+; 1100110 0110011 0011001 1001100 33 66 4c 19
+; 1111111 1111111 1111111 1111111 7f 7f 7f 7f
-+; 1001100 1100110 0110011 0011001 19 33 66 4c
-+; 0110011 0011001 1001100 1100110 66 4c 19 33
-+; 1111111 1111111 1111111 1111111 7f 7f 7f 7f
+draw_misc_aux_mask_table:
+ .db 0x7f
+ .db 0x00
++ .db 0x66
++ .db 0x19
++ .db 0x7f
+ .db 0x4c
+ .db 0x33
+ .db 0x7f
-+ .db 0x19
-+ .db 0x66
-+ .db 0x7f
+draw_misc_mask_table:
++.if 1 ; swapped for overflow pixel
+ .db 0x7f
+ .db 0x00
-+ .db 0x19
++ .db 0x33
++ .db 0x4c
++ .db 0x7f
+ .db 0x66
++ .db 0x19
+ .db 0x7f
-+ .db 0x33
++.else
++ .db 0x7f
++ .db 0x00
+ .db 0x4c
++ .db 0x33
++ .db 0x7f
++ .db 0x19
++ .db 0x66
+ .db 0x7f
++.endif
+draw_misc_aux_mask_xor_table:
+ .db 0x7f ^ 0x7f
+ .db 0x00 ^ 0x00
++ .db 0x19 ^ 0x66
++ .db 0x66 ^ 0x19
++ .db 0x7f ^ 0x7f
+ .db 0x33 ^ 0x4c
+ .db 0x4c ^ 0x33
+ .db 0x7f ^ 0x7f
-+ .db 0x66 ^ 0x19
-+ .db 0x19 ^ 0x66
-+ .db 0x7f ^ 0x7f
+draw_misc_mask_xor_table:
+ .db 0x7f ^ 0x7f
+ .db 0x00 ^ 0x00
++ .db 0x33 ^ 0x4c
++ .db 0x4c ^ 0x33
++ .db 0x7f ^ 0x7f
+ .db 0x66 ^ 0x19
+ .db 0x19 ^ 0x66
+ .db 0x7f ^ 0x7f
-+ .db 0x4c ^ 0x33
-+ .db 0x33 ^ 0x4c
-+ .db 0x7f ^ 0x7f
+.else
+; bit 0 6 0 6 7 hex
+; 1111111 1111111 1 ff ff
draw_misc_mask_table:
.db 0xff ; 1db6 r
.db 0x00 ; 1db7 r
-@@ -2781,72 +3075,17 @@
+@@ -2781,72 +3208,17 @@
.db 0xd5 ; 1dbc r
.db 0xff ; 1dbd r
draw_misc_mask_xor_table:
sub_1e00:
jmp loc_1e2a ; 15dc -> 1e00 -> 1e2a r
test_player_fire:
-@@ -3005,77 +3244,7 @@
+@@ -3005,77 +3377,7 @@
adc #0x01 ; 1f32 -> 1f33 -> 1f35 r c=0 d=0
sta object1080_velocity_x_hi + 0x50 ; 1f33 -> 1f35 -> 1f38 r
rts ; 1f35 -> 1f38 -> 15df r s=f9
barr_1f80:
.db 0x43 ; 1f80 r
.db 0x02 ; 1f81 r
-@@ -3212,9 +3381,20 @@
+@@ -3212,9 +3514,20 @@
.db 0x00 ; 1ffd r
.db 0x00 ; 1ffe r
.db 0x00 ; 1fff r
shape_data_ptr_lo:
.db <shape_23_bomb3 + 0x28 ; 4000 r
.db <shape_23_bomb3 + 0x28 ; 4001 r
-@@ -4757,6 +4937,9 @@
+@@ -4757,6 +5070,9 @@
.db 0x01 ; 45fd r
.db 0x01 ; 45fe r
.db 0x04 ; 45ff r
draw_misc_table:
.db 0x01 ; 4600 r
.db 0x07 ; 4601 r
-@@ -9432,6 +9615,15 @@
+@@ -9432,6 +9748,15 @@
.dw 0x0000 ; 5bfa r
.dw 0x0000 ; 5bfc r
.dw 0x0000 ; 5bfe r
shape_20_bomb0:
.db 0x5c ; 5c00 r
.db 0x02 ; 5c01 r
-@@ -21852,510 +22044,12 @@
+@@ -21852,510 +22177,12 @@
.db 0xe0 ; 8c05 r
.db 0x83 ; 8c06 r
.db 0x9e ; 8c07 r
microcode_table_5560_data_8e00:
.db 0x30 ; 8e00 r
.db 0x0f ; 8e01
-@@ -26926,31 +26620,308 @@
+@@ -26926,31 +26753,308 @@
.db 0x7c ; 9dea
.db 0x98 ; 9deb
.db 0x00 ; 9dec
.area udata2
-@@ -27033,3 +27004,4 @@
+@@ -27033,3 +27137,4 @@
object6080_b560:
.ds 0x20 ; b560 rw