From 024d38ce3605a581328524ef33bac5159c083375 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Sun, 26 Nov 2017 01:02:02 -0500 Subject: [PATCH] tfv: update with over_water optimization --- gr-sim/tfv_flying_6502.c | 37 +++++++++++++----------- tfv/OPTIMIZATION | 13 +++++++++ tfv/TODO | 16 +++-------- tfv/tfv.dsk | Bin 143360 -> 143360 bytes tfv/tfv_flying.s | 50 ++++++++++++++++++++------------ tfv/tfv_zp.inc | 60 +++++++++++++++++++-------------------- 6 files changed, 100 insertions(+), 76 deletions(-) diff --git a/gr-sim/tfv_flying_6502.c b/gr-sim/tfv_flying_6502.c index d28cbfcf..dbf0a913 100644 --- a/gr-sim/tfv_flying_6502.c +++ b/gr-sim/tfv_flying_6502.c @@ -42,7 +42,7 @@ #define DRAW_SPLASH 0x7a #define SPEED 0x7b #define SPLASH_COUNT 0x7c -#define OVER_WATER 0x7d +#define OVER_LAND 0x7d #define NUM1L 0x7E #define NUM1H 0x7F #define NUM2L 0x80 @@ -799,13 +799,14 @@ shift_output: #endif -void draw_background_mode7(void) { + + +static void draw_background_mode7(void) { int map_color; - ram[OVER_WATER]=0; - cycles.mode7+=11; + cycles.mode7+=6; if (ram[DRAW_SKY]) { ram[DRAW_SKY]--; @@ -828,6 +829,7 @@ void draw_background_mode7(void) { cycles.mode7+=30; + /* FIXME: only do this if SPACEZ changes? */ // mul1 fixed_mul(ram[SPACEZ_I],ram[SPACEZ_F], @@ -841,10 +843,6 @@ void draw_background_mode7(void) { ram[FACTOR_I],ram[FACTOR_F]); } -// printf("spacez=%lf beta=%lf factor=%lf\n", -// fixed_to_double(ram[SPACEZ_I],ram[SPACEZ_F],), -// fixed_to_double(&BETA), -// fixed_to_double(ram[FACTOR_I],ram[FACTOR_F])); cycles.mode7+=12; for (ram[SCREEN_Y] = 8; ram[SCREEN_Y] < LOWRES_H; ram[SCREEN_Y]+=2) { @@ -977,12 +975,12 @@ void draw_background_mode7(void) { ram[COLOR]=map_color; ram[COLOR]|=map_color<<4; - if ((ram[SCREEN_X]==20) && (ram[SCREEN_Y]==38)) { - if (map_color==COLOR_DARKBLUE) ram[OVER_WATER]=1; - } +// if ((ram[SCREEN_X]==20) && (ram[SCREEN_Y]==38)) { +// if (map_color==COLOR_DARKBLUE) ram[OVER_WATER]=1; +// } hlin_double_continue(1); - cycles.mode7+=42; + cycles.mode7+=19; // advance to the next position in space fixed_add(ram[SPACEX_I],ram[SPACEX_F], @@ -1043,7 +1041,6 @@ int flying(void) { ram[DRAW_SPLASH]=0; ram[SPEED]=0; ram[SPLASH_COUNT]=0; - ram[OVER_WATER]=0; ram[ANGLE]=1; /* 1 so you can see island */ @@ -1140,7 +1137,6 @@ int flying(void) { /* Land the ship */ for(loop=ram[SPACEZ_I];loop>0;loop--) { - draw_background_mode7(); cycles.put_sprite+=grsim_put_sprite(shadow_forward,CONST_SHIPX+3,31+ram[SPACEZ_I]); cycles.put_sprite+=grsim_put_sprite(ship_forward,CONST_SHIPX,ram[SHIPY]); @@ -1189,7 +1185,16 @@ int flying(void) { } draw_background_mode7(); - cycles.flying+=6; + + { int landing_color,tx,ty; + tx=ram[CX_I]; ty=ram[CY_I]; + + landing_color=lookup_map(tx,ty); + if (landing_color==2) ram[OVER_LAND]=0; + else ram[OVER_LAND]=1; + } + cycles.flying+=31; + ram[DRAW_SPLASH]=0; cycles.flying+=11; if (ram[SPEED]>0) { @@ -1198,7 +1203,7 @@ int flying(void) { ram[SPLASH_COUNT]=1; } - if ((ram[OVER_WATER]) && (ram[SPLASH_COUNT])) { + if ((!ram[OVER_LAND]) && (ram[SPLASH_COUNT])) { ram[DRAW_SPLASH]=1; } } diff --git a/tfv/OPTIMIZATION b/tfv/OPTIMIZATION index 35aeb721..ba32c857 100644 --- a/tfv/OPTIMIZATION +++ b/tfv/OPTIMIZATION @@ -84,3 +84,16 @@ Don't draw sky every frame Total = 121,478 Frame Rate = 8.23 fps +Move checking if over water out of critical section + + Cycles: flying= 187 + Cycles: getkey= 46 + Cycles: page_flip= 26 + Cycles: multiply= 24,935 + Cycles: mode7= 54,374 + Cycles: lookup_map= 24,712 + Cycles: put_sprite= 2,561 + ================================= + Total = 106,841 + Frame Rate = 9.36 fps + diff --git a/tfv/TODO b/tfv/TODO index fcc7b78e..23176148 100644 --- a/tfv/TODO +++ b/tfv/TODO @@ -1,18 +1,10 @@ mode7 speed fixes: - + Don't draw sky every frame, only if needed - + faster multiply routine - + If result is AABBCCDD we only need BBCC for fixed point - result - + Pass NUM1H in A? no because used multiple places - + inline hlin_setup? (save 12 cycles) + - If result is AABBCCDD we only need BBCC for fixed point + result + - Pass NUM1H in A? no because used multiple places - + re-arrange variables to better take advantage of self-modifying code - + only doing the spacez calculation if it has changed - + update the constants to be constants - + move the screen width constant to own set of varaibles - (instead of temp) - + leave one of multiply results in accumulator at end? + + inline hlin_setup? (save 12 cycles) + Skip key parsing if no key read diff --git a/tfv/tfv.dsk b/tfv/tfv.dsk index 5622ae6d71278f691edbcffe7ccee050ca473c42..c09d89fa09fc37861851533cc71dbd6cd85373cc 100644 GIT binary patch delta 13484 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