From 9c8b7e2638c2e9d0855e82a032edd001c04113f7 Mon Sep 17 00:00:00 2001 From: Nick Downing Date: Thu, 23 Jun 2022 01:05:47 +1000 Subject: [PATCH] Emulate HGR pixel shift so that title text colour cycling looks the same as the original game, temporarily overwrite shape_dhgr.png with mostly original graphics (keeps the revised projectiles and adds pixel-shifted version of title text) --- disasm/Makefile | 18 +++--- disasm/shape_dhgr.png | Bin 26027 -> 24073 bytes disasm/star_blazer.asm.patch | 120 ++++++++++++++++++++++++----------- 3 files changed, 91 insertions(+), 47 deletions(-) diff --git a/disasm/Makefile b/disasm/Makefile index 99548a5..05356b4 100644 --- a/disasm/Makefile +++ b/disasm/Makefile @@ -63,17 +63,17 @@ star_blazer.asm.patch cp $@ $@0 patch $@ <$@.patch -dhgr_pixel_shape_index.inc: pixel.txt shape.txt shape0a.png - cat pixel.txt shape.txt \ -|./shape_compile.py --dhgr --index shape0a.png >$@ +dhgr_pixel_shape_index.inc: pixel.txt shape.txt dhgr_shape.txt shape0c.png + cat pixel.txt shape.txt dhgr_shape.txt \ +|./shape_compile.py --dhgr --index 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 shape0a.png >$@ +dhgr_pixel_shape_data_aux.inc: pixel.txt shape.txt dhgr_shape.txt shape0c.png + cat pixel.txt shape.txt dhgr_shape.txt \ +|./shape_compile.py --dhgr --aux --data 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 shape0a.png >$@ +dhgr_pixel_shape_data_main.inc: pixel.txt shape.txt dhgr_shape.txt shape0c.png + cat pixel.txt shape.txt dhgr_shape.txt \ +|./shape_compile.py --dhgr --main --data shape0c.png >$@ pixel_shape_index.inc: pixel.txt shape.txt shape0a.png cat pixel.txt shape.txt \ diff --git a/disasm/shape_dhgr.png b/disasm/shape_dhgr.png index 1f93cc2baddaa81ad5afb83cb69ea1760762df5b..8f55b1df0c9ffdec6193cfd93bd019ae665c8a4f 100644 GIT binary patch literal 24073 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 RraSob;|(8`f51BO{{TDO-&p_v literal 26027 zcmeFZ2UJsCw=TSPLg)}WQY0uUN*5Fmgv1Jp0*VMW5(`D83eq7P8(2Y6M7n~4QWX%8 zk|-)FT|_#BBA`G3X@Qh|H}ChKbKf!Ux%Zy)opZ+bp8wo2Ajw`?d#|;Vx#oQ4GoO{~ zw$>J6!ivHG0I@xmI}ZXNh`tmAd|32}biDz6lGzb_$kFfM$pBUF3tlc~-JMnag1nto zodeIh01()jo8WLy$t+=4-^&|EFcn9{-QSO=JtU4?I&=NdgJG{-0SBJ!cfq8V@uzhl zOMRz#k+l0cn>Rj4IMxtHYd#Phg>}9u+!>ZWRRf|jXnZt~YTg}&Vr$
|KanI1!qXHBl4WeJ+UbYbv@%p>N$R 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 diff --git a/disasm/star_blazer.asm.patch b/disasm/star_blazer.asm.patch index 4485aa5..eb2da3e 100644 --- a/disasm/star_blazer.asm.patch +++ b/disasm/star_blazer.asm.patch @@ -1,5 +1,5 @@ ---- star_blazer.asm0 2022-06-22 23:55:46.132013052 +1000 -+++ star_blazer.asm 2022-06-23 00:05:26.060018993 +1000 +--- star_blazer.asm0 2022-06-23 00:53:17.740048411 +1000 ++++ star_blazer.asm 2022-06-23 00:59:38.852052316 +1000 @@ -1,3 +1,8 @@ +ALIGN = 0 +DHGR = 1 @@ -63,7 +63,7 @@ .ds 0x30 ; 0050 half_dimension: .ds 1 ; 0080 rw -@@ -48,6 +83,12 @@ +@@ -48,12 +83,22 @@ draw_y: .ds 1 ; 008a rw video_line_ptr: .ds 2 ; 008b rw @@ -76,7 +76,17 @@ draw_misc_mask: .ds 1 ; 008d rw draw_misc_mask_temp: -@@ -159,7 +200,7 @@ + .ds 1 ; 008e rw + draw_misc_mask_xor: + .ds 1 ; 008f rw ++.if DHGR ++draw_misc_shape_xor: ++ .ds 1 ++.endif + accumulator: + .ds 3 ; 0090 rw + .ds 1 ; 0093 +@@ -159,7 +204,7 @@ .area udata0 vec_restart: @@ -85,7 +95,7 @@ .area udata1 -@@ -188,8 +229,8 @@ +@@ -188,8 +233,8 @@ .ds 0x70 ; 0780 rw .area text @@ -95,7 +105,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 +1113,7 @@ +@@ -1072,7 +1117,7 @@ tsx ; 1095 -> 1097 -> 1098 r stx *microcode_sp ; 1097 -> 1098 -> 109a r ldx *microcode_object_c9 ; 1098 -> 109a -> 109c r @@ -104,7 +114,7 @@ sta *microcode_object_cc ; 109c -> 109f -> 10a1 r loc_10a1: ldy #0x00 ; 1090,109f -> 10a1 -> 10a3 r -@@ -1099,7 +1140,7 @@ +@@ -1099,7 +1144,7 @@ jsr do_microcode_test1 ; 10c6 -> 10c8 -> 106a r s=f7..f9,02 bne 3$ ; 107b -> 10cb -> 10c0 r z=0 loc_10cd: @@ -113,7 +123,7 @@ 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 +2022,35 @@ +@@ -1981,10 +2026,35 @@ sta *button_state ; 17ce r rts_17d0: rts ; 17ab,17ca -> 17d0 -> 1768,176f r s=fd @@ -150,7 +160,7 @@ ldx #0x01 ; 17db r 0$: jsr rom_pread ; 17dd r cpy #0xff ; 17e0 r -@@ -1995,18 +2061,15 @@ +@@ -1995,18 +2065,15 @@ sta bvar_179e ; 17e9 r sta bvar_17a3 ; 17ec r sta bvar_1e0e ; 17ef r @@ -178,7 +188,7 @@ divide_a_by_y: sta *accumulator + 1 ; 0a90,0aa0,0ab5,0ad5 -> 1800 -> 1802 r lda #0x00 ; 1800 -> 1802 -> 1804 r -@@ -2071,10 +2134,12 @@ +@@ -2071,10 +2138,12 @@ lda *result + 1 ; 186e r ldy *result + 2 ; 1870 r rts ; 1872 r @@ -191,7 +201,7 @@ random_init: lda *random_seed ; 16ae -> 187a -> 187c r ora #0x01 ; 187a -> 187c -> 187e r -@@ -2233,16 +2298,30 @@ +@@ -2233,16 +2302,30 @@ ldx #>hires_screen ; 199b -> 199d -> 199f r stx *video_line_ptr + 1 ; 199d -> 199f -> 19a1 r tay ; 199f -> 19a1 -> 19a2 r @@ -223,7 +233,7 @@ rts ; 19b5 -> 19b8 -> 1713 r s=fd video_clear_rectangle: ldx *clip_y0 ; 1064 -> 19b9 -> 19bb r -@@ -2250,8 +2329,20 @@ +@@ -2250,8 +2333,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 @@ -244,7 +254,7 @@ 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 -@@ -2300,6 +2391,7 @@ +@@ -2300,6 +2395,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 @@ -252,7 +262,7 @@ rts ; 1a23 -> 1a26 -> 1076,1179,1602 r s=f1..f9,02 pixel_data_table_left: .db 0x83 ; 1a27 r -@@ -2382,14 +2474,17 @@ +@@ -2382,14 +2478,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 @@ -270,7 +280,7 @@ 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 -@@ -2442,7 +2537,12 @@ +@@ -2442,7 +2541,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 @@ -283,7 +293,7 @@ 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 @@ +@@ -2453,16 +2557,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 @@ -343,7 +353,7 @@ 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 -@@ -2479,16 +2622,50 @@ +@@ -2479,16 +2626,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 @@ -396,7 +406,7 @@ 10$: lda *draw_y ; 1ba0,1bbf -> 1ba2 -> 1ba4 r cmp *clip_y0 ; 1ba2 -> 1ba4 -> 1ba6 r a=11..d8 bcc 12$ ; 1ba4 -> 1ba6 -> 1ba8,1bbb r c=0..1 -@@ -2498,6 +2675,16 @@ +@@ -2498,6 +2679,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 @@ -413,7 +423,7 @@ .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 +2698,7 @@ +@@ -2511,6 +2702,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 @@ -421,7 +431,7 @@ rts ; 1bc9 -> 1bcb -> 15cd r s=fb erase_pixel_object: lda #0x00 ; 1c12 -> 1bcc -> 1bce r -@@ -2542,12 +2730,15 @@ +@@ -2542,12 +2734,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 @@ -437,7 +447,7 @@ 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,16 +2753,61 @@ +@@ -2562,16 +2757,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 @@ -499,7 +509,7 @@ 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 -@@ -2588,16 +2824,51 @@ +@@ -2588,16 +2828,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 @@ -553,7 +563,7 @@ 5$: lda *draw_y ; 1c84,1ca5 -> 1c86 -> 1c88 r cmp *clip_y0 ; 1c86 -> 1c88 -> 1c8a r a=11..d8 bcc 7$ ; 1c88 -> 1c8a -> 1c8c,1ca1 r c=0..1 -@@ -2607,6 +2878,17 @@ +@@ -2607,6 +2882,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 @@ -571,7 +581,7 @@ .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,9 +2908,24 @@ +@@ -2626,9 +2912,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 @@ -596,7 +606,7 @@ 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 +2933,11 @@ +@@ -2636,6 +2937,11 @@ lda *draw_x0 ; 1cc7 -> 1cc9 -> 1ccb r lsr a ; 1cc9 -> 1ccb -> 1ccc r bcc 0$ ; 1ccb -> 1ccc -> 1cce,1cd4 r c=0..1 @@ -608,7 +618,7 @@ 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,9 +2953,56 @@ +@@ -2651,9 +2957,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 @@ -665,7 +675,7 @@ 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 @@ +@@ -2673,7 +3026,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 @@ -678,7 +688,7 @@ ldx *x_save ; 1d17 -> 1d19 -> 1d1b r rts ; 1d19 -> 1d1b -> 1db3 r s=ec..f5 draw_misc_from_table: -@@ -2686,7 +3040,7 @@ +@@ -2686,7 +3044,7 @@ asl a ; 1d23 -> 1d24 -> 1d25 r sta *draw_misc_ptr ; 1d24 -> 1d25 -> 1d27 r lda #0x00 ; 1d25 -> 1d27 -> 1d29 r @@ -687,7 +697,7 @@ sta *draw_misc_ptr + 1 ; 1d29 -> 1d2b -> 1d2d r lda *half_dimension ; 1d2b -> 1d2d -> 1d2f r lsr a ; 1d2d -> 1d2f -> 1d30 r -@@ -2695,6 +3049,12 @@ +@@ -2695,10 +3053,20 @@ lsr a ; 1d31 -> 1d32 -> 1d33 r lsr a ; 1d32 -> 1d33 -> 1d34 r tay ; 1d33 -> 1d34 -> 1d35 r @@ -700,7 +710,30 @@ 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 +3131,73 @@ + sta *draw_misc_mask_xor ; 1d3a -> 1d3d -> 1d3f r ++.if DHGR ++ lda draw_misc_shape_xor_table,y ++ sta *draw_misc_shape_xor ++.endif + lda *half_dimension ; 1d3d -> 1d3f -> 1d41 r + and #0x1f ; 1d3f -> 1d41 -> 1d43 r + cmp #0x08 ; 1d41 -> 1d43 -> 1d45 r a=00..1f +@@ -2716,6 +3084,14 @@ + iny ; 1d57 -> 1d59 -> 1d5a r + 1$: lda [*draw_misc_ptr],y ; 1d59,1d69 -> 1d5a -> 1d5c r y=03..0c + beq 2$ ; 1d5a -> 1d5c -> 1d5e,1d61 r z=0..1 ++.if DHGR ++ cmp #0xd0 ; star ++ bcc 90$ ++ cmp #0xd2 ; blazer + 1 ++ bcs 90$ ++ eor *draw_misc_shape_xor ++90$: ++.endif + jsr do_draw_misc ; 1d5c -> 1d5e -> 1da6 r s=f3..f9,02 + 2$: iny ; 1d5c,1db5 -> 1d61 -> 1d62 r + cpy #0x10 ; 1d61 -> 1d62 -> 1d64 r y=04..0d +@@ -2771,6 +3147,84 @@ ldy *draw_misc_y_save ; 1d1b -> 1db3 -> 1db5 r rts_1db5: rts ; 1da1,1db3 -> 1db5 -> 1076,1d61,1d7d,1d82,1d87 r s=ee..f7 @@ -761,6 +794,17 @@ + .db 0x66 ^ 0x19 + .db 0x19 ^ 0x66 + .db 0x7f ^ 0x7f ++; emulate the shifting of the star blazer text with hibit clear ++; done by XORing the value below onto the shape index (d0 or d1) ++draw_misc_shape_xor_table: ++ .db 0 ++ .db 0xc8 ^ 0xd0 ++ .db 0xc8 ^ 0xd0 ++ .db 0xc8 ^ 0xd0 ++ .db 0xc8 ^ 0xd0 ++ .db 0 ++ .db 0 ++ .db 0 +.else +; bit 0 6 0 6 7 hex +; 1111111 1111111 1 ff ff @@ -774,7 +818,7 @@ draw_misc_mask_table: .db 0xff ; 1db6 r .db 0x00 ; 1db7 r -@@ -2781,72 +3208,17 @@ +@@ -2781,72 +3235,17 @@ .db 0xd5 ; 1dbc r .db 0xff ; 1dbd r draw_misc_mask_xor_table: @@ -858,7 +902,7 @@ sub_1e00: jmp loc_1e2a ; 15dc -> 1e00 -> 1e2a r test_player_fire: -@@ -3005,77 +3377,7 @@ +@@ -3005,77 +3404,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 @@ -937,7 +981,7 @@ barr_1f80: .db 0x43 ; 1f80 r .db 0x02 ; 1f81 r -@@ -3212,9 +3514,20 @@ +@@ -3212,9 +3541,20 @@ .db 0x00 ; 1ffd r .db 0x00 ; 1ffe r .db 0x00 ; 1fff r @@ -959,7 +1003,7 @@ shape_data_ptr_lo: .db