Improve DHGR drawing slightly, temporarily revert DHGR to original shape data
authorNick Downing <nick@ndcode.org>
Wed, 22 Jun 2022 12:48:21 +0000 (22:48 +1000)
committerNick Downing <nick@ndcode.org>
Wed, 22 Jun 2022 16:59:26 +0000 (02:59 +1000)
disasm/Makefile
disasm/star_blazer.asm.patch

index 160eede..99548a5 100644 (file)
@@ -63,17 +63,17 @@ star_blazer.asm.patch
        cp $@ $@0
        patch $@ <$@.patch
 
-dhgr_pixel_shape_index.inc: pixel.txt shape.txt shape0c.png
+dhgr_pixel_shape_index.inc: pixel.txt shape.txt shape0a.png
        cat pixel.txt shape.txt \
-|./shape_compile.py --dhgr --index shape0c.png >$@
+|./shape_compile.py --dhgr --index shape0a.png >$@
 
-dhgr_pixel_shape_data_aux.inc: pixel.txt shape.txt shape0c.png
+dhgr_pixel_shape_data_aux.inc: pixel.txt shape.txt shape0a.png
        cat pixel.txt shape.txt \
-|./shape_compile.py --dhgr --aux --data shape0c.png >$@
+|./shape_compile.py --dhgr --aux --data shape0a.png >$@
 
-dhgr_pixel_shape_data_main.inc: pixel.txt shape.txt shape0c.png
+dhgr_pixel_shape_data_main.inc: pixel.txt shape.txt shape0a.png
        cat pixel.txt shape.txt \
-|./shape_compile.py --dhgr --main --data shape0c.png >$@
+|./shape_compile.py --dhgr --main --data shape0a.png >$@
 
 pixel_shape_index.inc: pixel.txt shape.txt shape0a.png
        cat pixel.txt shape.txt \
index c42b483..76b821a 100644 (file)
@@ -1,5 +1,5 @@
---- star_blazer.asm0   2022-06-22 21:31:20.640105963 +1000
-+++ star_blazer.asm    2022-06-22 21:31:20.640105963 +1000
+--- star_blazer.asm0   2022-06-22 22:46:35.420152214 +1000
++++ star_blazer.asm    2022-06-22 22:50:05.056154361 +1000
 @@ -1,3 +1,8 @@
 +ALIGN = 0
 +DHGR = 1
        .ds     0x30                    ; 0050
  half_dimension:
        .ds     1                       ; 0080 rw
-@@ -48,6 +83,14 @@
+@@ -48,6 +83,12 @@
  draw_y:       .ds     1                       ; 008a rw
  video_line_ptr:
        .ds     2                       ; 008b rw
 +.if DHGR
 +draw_misc_aux_mask:
 +      .ds     1
-+draw_misc_aux_mask_temp:
-+      .ds     1
 +draw_misc_aux_mask_xor:
 +      .ds     1
 +.endif
  draw_misc_mask:
        .ds     1                       ; 008d rw
  draw_misc_mask_temp:
-@@ -159,7 +202,7 @@
+@@ -159,7 +200,7 @@
        .area   udata0
  
  vec_restart:
@@ -87,7 +85,7 @@
  
        .area   udata1
  
-@@ -188,8 +231,8 @@
+@@ -188,8 +229,8 @@
        .ds     0x70                    ; 0780 rw
  
        .area   text
@@ -97,7 +95,7 @@
  sign_extend_a_to_ya:
        cmp     #0x80                   ; 0abc,0adc,133f,1366,1382,145b,1485 -> 0a00 -> 0a02 r a=00..ff
        ldy     #0x00                   ; 0a00 -> 0a02 -> 0a04 r
-@@ -1072,7 +1115,7 @@
+@@ -1072,7 +1113,7 @@
        tsx                             ; 1095 -> 1097 -> 1098 r
        stx     *microcode_sp           ; 1097 -> 1098 -> 109a r
        ldx     *microcode_object_c9    ; 1098 -> 109a -> 109c r
        sta     *microcode_object_cc    ; 109c -> 109f -> 10a1 r
  loc_10a1:
        ldy     #0x00                   ; 1090,109f -> 10a1 -> 10a3 r
-@@ -1099,7 +1142,7 @@
+@@ -1099,7 +1140,7 @@
        jsr     do_microcode_test1      ; 10c6 -> 10c8 -> 106a r s=f7..f9,02
        bne     3$                      ; 107b -> 10cb -> 10c0 r z=0
  loc_10cd:
        rts                             ; 10cd -> 10d0 -> 123e,143a,1615,1629,1633,1649,165b,1759 r s=f7..fd,02
  sub_10d1:
        beq     rts_10ec                ; 1216,123b,1260,1285 -> 10d1 -> 10d3,10ec r z=0..1
-@@ -1981,10 +2024,35 @@
+@@ -1981,10 +2022,35 @@
        sta     *button_state           ; 17ce r
  rts_17d0:
        rts                             ; 17ab,17ca -> 17d0 -> 1768,176f r s=fd
        bit     *vec_draw_misc_from_table ; 17d1 -> 17d4 -> 17d6 r
        ora     hw_pb1                  ; 17d4 -> 17d6 -> 17d9 r
        bpl     1$                      ; 17d6 -> 17d9 -> 17f2 r n=0
-+.if DHGR ; language card
++.if 0 ;DHGR ; language card
 +      sta     hw_lc_bank2_rom_we
 +.endif
        ldx     #0x01                   ; 17db r
  0$:   jsr     rom_pread               ; 17dd r
        cpy     #0xff                   ; 17e0 r
-@@ -1995,18 +2063,15 @@
+@@ -1995,18 +2061,15 @@
        sta     bvar_179e               ; 17e9 r
        sta     bvar_17a3               ; 17ec r
        sta     bvar_1e0e               ; 17ef r
 -      .db     0x00                    ; 17fe
 -      .db     0x00                    ; 17ff
 +1$:
-+.if DHGR ; language card
++.if 0 ;DHGR ; language card
 +      sta     hw_lc_bank2_ram_we
 +      sta     hw_lc_bank2_ram_we
 +.endif
  divide_a_by_y:
        sta     *accumulator + 1        ; 0a90,0aa0,0ab5,0ad5 -> 1800 -> 1802 r
        lda     #0x00                   ; 1800 -> 1802 -> 1804 r
-@@ -2071,10 +2136,12 @@
+@@ -2071,10 +2134,12 @@
        lda     *result + 1             ; 186e r
        ldy     *result + 2             ; 1870 r
        rts                             ; 1872 r
  random_init:
        lda     *random_seed            ; 16ae -> 187a -> 187c r
        ora     #0x01                   ; 187a -> 187c -> 187e r
-@@ -2233,16 +2300,30 @@
+@@ -2233,16 +2298,30 @@
        ldx     #>hires_screen          ; 199b -> 199d -> 199f r
        stx     *video_line_ptr + 1     ; 199d -> 199f -> 19a1 r
        tay                             ; 199f -> 19a1 -> 19a2 r
        rts                             ; 19b5 -> 19b8 -> 1713 r s=fd
  video_clear_rectangle:
        ldx     *clip_y0                ; 1064 -> 19b9 -> 19bb r
-@@ -2252,7 +2333,13 @@
+@@ -2250,8 +2329,20 @@
+       sta     *video_line_ptr         ; 19bb -> 19be -> 19c0 r
+       lda     video_line_table_hi - 0x20,x ; 19be -> 19c0 -> 19c3 r x=28..cf
        sta     *video_line_ptr + 1     ; 19c0 -> 19c3 -> 19c5 r
-       ldy     *clip_x0                ; 19c3 -> 19c5 -> 19c7 r
-       lda     #0x00                   ; 19c5 -> 19c7 -> 19c9 r
--1$:   sta     [*video_line_ptr],y     ; 19c7,19ce -> 19c9 -> 19cb r y=6c..93
-+1$:
 +.if DHGR
++      lda     #0
 +      sta     hw_wrcardram
-+      sta     [*video_line_ptr],y
++      ldy     *clip_x0
++90$:  sta     [*video_line_ptr],y     ; 19c7,19ce -> 19c9 -> 19cb r y=6c..93
++      iny                             ; 19c9 -> 19cb -> 19cc r
++      cpy     *clip_x1                ; 19cb -> 19cc -> 19ce r y=6d..94
++      bcc     90$                     ; 19cc -> 19ce -> 19c9,19d0 r c=0..1
 +      sta     hw_wrmainram
++      ldy     *clip_x0
++.else
+       ldy     *clip_x0                ; 19c3 -> 19c5 -> 19c7 r
+       lda     #0x00                   ; 19c5 -> 19c7 -> 19c9 r
 +.endif
-+      sta     [*video_line_ptr],y     ; 19c7,19ce -> 19c9 -> 19cb r y=6c..93
+ 1$:   sta     [*video_line_ptr],y     ; 19c7,19ce -> 19c9 -> 19cb r y=6c..93
        iny                             ; 19c9 -> 19cb -> 19cc r
        cpy     *clip_x1                ; 19cb -> 19cc -> 19ce r y=6d..94
-       bcc     1$                      ; 19cc -> 19ce -> 19c9,19d0 r c=0..1
-@@ -2300,6 +2387,7 @@
+@@ -2300,6 +2391,7 @@
        sta     object1080_y0 - 0x10,x  ; 1a1b -> 1a1e -> 1a21 r x=10..7f
        adc     #0x01                   ; 1a1e -> 1a21 -> 1a23 r c=0..1 d=0
        sta     object1080_y1 - 0x10,x  ; 1a21 -> 1a23 -> 1a26 r x=10..7f
        rts                             ; 1a23 -> 1a26 -> 1076,1179,1602 r s=f1..f9,02
  pixel_data_table_left:
        .db     0x83                    ; 1a27 r
-@@ -2382,14 +2470,17 @@
+@@ -2382,14 +2474,17 @@
        lda     object1080_onscreen_shape_ptr_hi - 0x10,x ; 1aa5 -> 1aa7 -> 1aaa r x=20..4f
        ora     [*video_line_ptr],y     ; 1aa7 -> 1aaa -> 1aac r y=6d..93,02
        sta     [*video_line_ptr],y     ; 1aaa -> 1aac -> 1aae r y=6d..93,02
        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
-@@ -2453,8 +2544,18 @@
-       cmp     *draw_x1                ; 1b49 -> 1b4b -> 1b4d r a=94
+@@ -2454,14 +2549,40 @@
        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
+       sta     7$                      ; 1b4f -> 1b52 -> 1b55 r
 +.if DHGR
-+      sta     hw_wrcardram
-+      sta     90$
-+      sta     hw_wrmainram
++      tay
 +.endif
-       sta     7$                      ; 1b4f -> 1b52 -> 1b55 r
        lda     object1080_onscreen_shape_ptr_hi - 0x10,x ; 1b52 -> 1b55 -> 1b58 r x=14..77
+       sta     7$ + 1                  ; 1b55 -> 1b58 -> 1b5b r
 +.if DHGR
 +      sta     hw_wrcardram
-+      sta     90$ + 1
-+      sta     hw_wrmainram
++      sty     91$
++      sta     91$ + 1
++      ;sta    hw_wrmainram
 +.endif
-       sta     7$ + 1                  ; 1b55 -> 1b58 -> 1b5b r
        ldx     #0x00                   ; 1b58 -> 1b5b -> 1b5d r
        ldy     *draw_y                 ; 1b5b -> 1b5d -> 1b5f r
-@@ -2463,7 +2564,18 @@
+ 5$:   lda     video_line_table_lo - 0x20,y ; 1b5d,1b7e -> 1b5f -> 1b62 r y=28..cf
+       sta     *video_line_ptr         ; 1b5f -> 1b62 -> 1b64 r
        lda     video_line_table_hi - 0x20,y ; 1b62 -> 1b64 -> 1b67 r y=28..cf
        sta     *video_line_ptr + 1     ; 1b64 -> 1b67 -> 1b69 r
-       ldy     *draw_x0                ; 1b67 -> 1b69 -> 1b6b r
--6$:   .db     0xbd                    ; 1b69,1b76 -> 1b6b -> 1b6e r "lda shape_12_exhaust0 + 0x12,x" x=00..39
-+6$:
 +.if DHGR
 +      sta     hw_rdcardram
 +      sta     hw_wrcardram
-+      .db     0xbd ; lda NNNN,x
-+90$:  .dw     0
++      ldy     *draw_x0
++      stx     *dimension
++90$:  .db     0xbd ; lda NNNN,x
++91$:  .dw     0
 +      ora     [*video_line_ptr],y
 +      sta     [*video_line_ptr],y
++      inx
++      iny
++      cpy     *draw_x1
++      bcc     90$
++      ldx     *dimension
 +      sta     hw_rdmainram
 +      sta     hw_wrmainram
 +.endif
-+      .db     0xbd                    ; 1b69,1b76 -> 1b6b -> 1b6e r "lda shape_12_exhaust0 + 0x12,x" x=00..39
+       ldy     *draw_x0                ; 1b67 -> 1b69 -> 1b6b r
+ 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
-       ora     [*video_line_ptr],y     ; 1b6b -> 1b6e -> 1b70 r y=6c..93
-       sta     [*video_line_ptr],y     ; 1b6e -> 1b70 -> 1b72 r y=6c..93
-@@ -2479,14 +2591,24 @@
-       rts                             ; 1b80 -> 1b82 -> 15cd r s=fb
+@@ -2480,13 +2601,22 @@
  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
+       sta     11$                     ; 1b86 -> 1b89 -> 1b8c r
 +.if DHGR
-+      sta     hw_wrcardram
-+      sta     91$
-+      sta     hw_wrmainram
++      tay
 +.endif
-       sta     11$                     ; 1b86 -> 1b89 -> 1b8c r
        lda     object1080_onscreen_shape_ptr_hi - 0x10,x ; 1b89 -> 1b8c -> 1b8f r x=14..77
+       sta     11$ + 1                 ; 1b8c -> 1b8f -> 1b92 r
 +.if DHGR
 +      sta     hw_wrcardram
-+      sta     91$ + 1
++      sty     92$
++      sta     92$ + 1
 +      sta     hw_wrmainram
 +.endif
-       sta     11$ + 1                 ; 1b8c -> 1b8f -> 1b92 r
        ldx     #0x00                   ; 1b8f -> 1b92 -> 1b94 r
        ldy     *draw_y                 ; 1b92 -> 1b94 -> 1b96 r
 -9$:   lda     0xa9e0,y                ; 1b94,1bc7 -> 1b96 -> 1b99 r y=11..d8
        sta     *video_line_ptr + 1     ; 1b9b -> 1b9e -> 1ba0 r
        ldy     *draw_x0                ; 1b9e -> 1ba0 -> 1ba2 r
  10$:  lda     *draw_y                 ; 1ba0,1bbf -> 1ba2 -> 1ba4 r
-@@ -2498,6 +2620,16 @@
+@@ -2498,6 +2628,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
-+91$:  .dw     0
++92$:  .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 +2643,7 @@
+@@ -2511,6 +2651,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 +2675,15 @@
+@@ -2542,12 +2683,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
-@@ -2562,8 +2698,18 @@
-       stx     *x_save                 ; 1c2d -> 1c30 -> 1c32 r
+@@ -2563,14 +2707,41 @@
        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
+       sta     2$                      ; 1c34 -> 1c37 -> 1c3a r
 +.if DHGR
-+      sta     hw_wrcardram
-+      sta     90$
-+      sta     hw_wrmainram
++      tay
 +.endif
-       sta     2$                      ; 1c34 -> 1c37 -> 1c3a r
        lda     object1080_onscreen_shape_ptr_hi - 0x10,x ; 1c37 -> 1c3a -> 1c3d r x=14..77
+       sta     2$ + 1                  ; 1c3a -> 1c3d -> 1c40 r
 +.if DHGR
 +      sta     hw_wrcardram
-+      sta     90$ + 1
-+      sta     hw_wrmainram
++      sty     91$
++      sta     91$ + 1
++      ;sta    hw_wrmainram
 +.endif
-       sta     2$ + 1                  ; 1c3a -> 1c3d -> 1c40 r
        ldx     #0x00                   ; 1c3d -> 1c40 -> 1c42 r
        ldy     *draw_y                 ; 1c40 -> 1c42 -> 1c44 r
-@@ -2572,7 +2718,19 @@
+ 0$:   lda     video_line_table_lo - 0x20,y ; 1c42,1c65 -> 1c44 -> 1c47 r y=28..cf
+       sta     *video_line_ptr         ; 1c44 -> 1c47 -> 1c49 r
        lda     video_line_table_hi - 0x20,y ; 1c47 -> 1c49 -> 1c4c r y=28..cf
        sta     *video_line_ptr + 1     ; 1c49 -> 1c4c -> 1c4e r
-       ldy     *draw_x0                ; 1c4c -> 1c4e -> 1c50 r
--1$:   .db     0xbd                    ; 1c4e,1c5d -> 1c50 -> 1c53 r "lda shape_12_exhaust0 + 6,x" x=00..39
-+1$:
 +.if DHGR
 +      sta     hw_rdcardram
 +      sta     hw_wrcardram
-+      .db     0xbd ; lda NNNN,x
-+90$:  .dw     0
++      ldy     *draw_x0
++      stx     *dimension
++90$:  .db     0xbd ; lda NNNN,x
++91$:  .dw     0
 +      eor     #0xff
 +      and     [*video_line_ptr],y
 +      sta     [*video_line_ptr],y
++      inx
++      iny
++      cpy     *draw_x1
++      bcc     90$
++      ldx     *dimension
 +      sta     hw_rdmainram
 +      sta     hw_wrmainram
 +.endif
-+      .db     0xbd                    ; 1c4e,1c5d -> 1c50 -> 1c53 r "lda shape_12_exhaust0 + 6,x" x=00..39
+       ldy     *draw_x0                ; 1c4c -> 1c4e -> 1c50 r
+ 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
-       eor     #0xff                   ; 1c50 -> 1c53 -> 1c55 r
-       and     [*video_line_ptr],y     ; 1c53 -> 1c55 -> 1c57 r y=6c..93
-@@ -2588,14 +2746,24 @@
+@@ -2588,14 +2759,23 @@
        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
-+      sta     hw_wrcardram
-+      sta     91$
-+      sta     hw_wrmainram
++      tay
 +.endif
        sta     6$                      ; 1c6a -> 1c6d -> 1c70 r
        lda     object1080_onscreen_shape_ptr_hi - 0x10,x ; 1c6d -> 1c70 -> 1c73 r x=14..77
 +.if DHGR
 +      sta     hw_wrcardram
-+      sta     91$ + 1
++      sty     92$
++      sta     92$ + 1
 +      sta     hw_wrmainram
 +.endif
        sta     6$ + 1                  ; 1c70 -> 1c73 -> 1c76 r
        sta     *video_line_ptr + 1     ; 1c7f -> 1c82 -> 1c84 r
        ldy     *draw_x0                ; 1c82 -> 1c84 -> 1c86 r
  5$:   lda     *draw_y                 ; 1c84,1ca5 -> 1c86 -> 1c88 r
-@@ -2607,6 +2775,17 @@
+@@ -2607,6 +2787,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
-+91$:  .dw     0
++92$:  .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
-@@ -2626,8 +2805,18 @@
-       stx     *x_save                 ; 1db0 -> 1cb2 -> 1cb4 r
+@@ -2627,8 +2818,17 @@
        tay                             ; 1cb2 -> 1cb4 -> 1cb5 r
        lda     shape_data_ptr_lo,y     ; 1cb4 -> 1cb5 -> 1cb8 r y=16..ff
+       sta     3$                      ; 1cb5 -> 1cb8 -> 1cbb r
 +.if DHGR
-+      sta     hw_wrcardram
-+      sta     90$
-+      sta     hw_wrmainram
++      tax
 +.endif
-       sta     3$                      ; 1cb5 -> 1cb8 -> 1cbb r
        lda     shape_data_ptr_hi,y     ; 1cb8 -> 1cbb -> 1cbe r y=16..ff
+       sta     3$ + 1                  ; 1cbb -> 1cbe -> 1cc1 r
 +.if DHGR
 +      sta     hw_wrcardram
-+      sta     90$ + 1
++      stx     91$
++      sta     91$ + 1
 +      sta     hw_wrmainram
 +.endif
-       sta     3$ + 1                  ; 1cbb -> 1cbe -> 1cc1 r
        lda     shape_width_bytes,y     ; 1cbe -> 1cc1 -> 1cc4 r y=16..ff
        clc                             ; 1cc1 -> 1cc4 -> 1cc5 r
-@@ -2636,6 +2825,11 @@
+       adc     *draw_x0                ; 1cc4 -> 1cc5 -> 1cc7 r c=0 d=0
+@@ -2636,6 +2836,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 +2845,10 @@
+@@ -2651,6 +2856,33 @@
        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
 +.if DHGR
-+      lda     *draw_misc_aux_mask
-+      sta     *draw_misc_aux_mask_temp
-+.endif
-       lda     *draw_misc_mask         ; 1cec -> 1cee -> 1cf0 r
-       sta     *draw_misc_mask_temp    ; 1cee -> 1cf0 -> 1cf2 r
-       ldy     *draw_x0                ; 1cf0 -> 1cf2 -> 1cf4 r
-@@ -2659,11 +2857,27 @@
-       bcs     4$                      ; 1cf6 -> 1cf8 -> 1cfa r c=0
-       cpy     #0x28                   ; 1cf8 -> 1cfa -> 1cfc r y=00..2d
-       bcs     4$                      ; 1cfa -> 1cfc -> 1cfe,1d05 r c=0..1
-+.if DHGR
 +      sta     hw_rdcardram
 +      sta     hw_wrcardram
++      lda     *draw_misc_aux_mask
++      sta     *draw_misc_mask_temp
++      ldy     *draw_x0
++      stx     *dimension
++90$:  lda     *draw_y
++      cmp     #0xc0
++      bcs     92$
++      cpy     #0x28
++      bcs     92$
 +      .db     0xbd ; lda NNNN,x
-+90$:  .dw     0
-+      and     *draw_misc_aux_mask_temp
++91$:  .dw     0
++      and     *draw_misc_mask_temp
 +      sta     [*video_line_ptr],y
++92$:  lda     *draw_misc_mask_temp
++      eor     *draw_misc_aux_mask_xor
++      sta     *draw_misc_mask_temp
++      inx
++      iny
++      cpy     *draw_x1
++      bcc     90$
++      ldx     *dimension
 +      sta     hw_rdmainram
 +      sta     hw_wrmainram
 +.endif
-       .db     0xbd                    ; 1cfc -> 1cfe -> 1d01 r "lda shape_d4_text_suzuki,x" x=00..7d
- 3$:   .dw     shape_d4_text_suzuki    ; 1cff rw
-       and     *draw_misc_mask_temp    ; 1cfe -> 1d01 -> 1d03 r
-       sta     [*video_line_ptr],y     ; 1d01 -> 1d03 -> 1d05 r y=00..27
--4$:   lda     *draw_misc_mask_temp    ; 1cfc,1d03 -> 1d05 -> 1d07 r
-+4$:
-+.if DHGR
-+      lda     *draw_misc_aux_mask_temp
-+      eor     *draw_misc_aux_mask_xor
-+      sta     *draw_misc_aux_mask_temp
-+.endif
-+      lda     *draw_misc_mask_temp    ; 1cfc,1d03 -> 1d05 -> 1d07 r
-       eor     *draw_misc_mask_xor     ; 1d05 -> 1d07 -> 1d09 r
-       sta     *draw_misc_mask_temp    ; 1d07 -> 1d09 -> 1d0b r
-       inx                             ; 1d09 -> 1d0b -> 1d0c r
-@@ -2686,7 +2900,7 @@
+       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 @@
        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 +2909,12 @@
+@@ -2695,6 +2927,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 +2991,62 @@
+@@ -2771,6 +3009,62 @@
        ldy     *draw_misc_y_save       ; 1d1b -> 1db3 -> 1db5 r
  rts_1db5:
        rts                             ; 1da1,1db3 -> 1db5 -> 1076,1d61,1d7d,1d82,1d87 r s=ee..f7
  draw_misc_mask_table:
        .db     0xff                    ; 1db6 r
        .db     0x00                    ; 1db7 r
-@@ -2781,72 +3057,17 @@
+@@ -2781,72 +3075,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 +3226,7 @@
+@@ -3005,77 +3244,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 +3363,20 @@
+@@ -3212,9 +3381,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 +4919,9 @@
+@@ -4757,6 +4937,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 +9597,15 @@
+@@ -9432,6 +9615,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 +22026,12 @@
+@@ -21852,510 +22044,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 +26602,308 @@
+@@ -26926,31 +26620,308 @@
        .db     0x7c                    ; 9dea
        .db     0x98                    ; 9deb
        .db     0x00                    ; 9dec
  
        .area   udata2
  
-@@ -27033,3 +26986,4 @@
+@@ -27033,3 +27004,4 @@
  object6080_b560:
        .ds     0x20                    ; b560 rw