mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-09-09 02:54:25 +00:00
tfv: more cycles annotations
This commit is contained in:
parent
91df570368
commit
aff3b25264
@ -85,6 +85,16 @@ static unsigned char water_map[32]={
|
|||||||
|
|
||||||
static int displayed=0;
|
static int displayed=0;
|
||||||
|
|
||||||
|
struct cycle_counts {
|
||||||
|
int flying;
|
||||||
|
int getkey;
|
||||||
|
int page_flip;
|
||||||
|
int mode7;
|
||||||
|
int multiply;
|
||||||
|
int lookup_map;
|
||||||
|
int put_sprite;
|
||||||
|
} cycles;
|
||||||
|
|
||||||
static int lookup_map(int xx, int yy) {
|
static int lookup_map(int xx, int yy) {
|
||||||
|
|
||||||
int color,offset;
|
int color,offset;
|
||||||
@ -122,7 +132,7 @@ static int lookup_map(int xx, int yy) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
cycles.lookup_map+=53;
|
||||||
return color;
|
return color;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,15 +193,7 @@ static unsigned char horizontal_lookup[7][16] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
struct cycle_counts {
|
|
||||||
int flying;
|
|
||||||
int getkey;
|
|
||||||
int page_flip;
|
|
||||||
int mode7;
|
|
||||||
int multiply;
|
|
||||||
int lookup_map;
|
|
||||||
int put_sprite;
|
|
||||||
} cycles;
|
|
||||||
|
|
||||||
|
|
||||||
static void fixed_add(unsigned char x_i,unsigned char x_f,
|
static void fixed_add(unsigned char x_i,unsigned char x_f,
|
||||||
@ -573,7 +575,7 @@ void draw_background_mode7(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// go through all points in this screen line
|
// go through all points in this screen line
|
||||||
for (ram[SCREEN_X] = 0; ram[SCREEN_X] < LOWRES_W-1; ram[SCREEN_X]++) {
|
for (ram[SCREEN_X] = 0; ram[SCREEN_X] < LOWRES_W; ram[SCREEN_X]++) {
|
||||||
// get a pixel from the tile and put it on the screen
|
// get a pixel from the tile and put it on the screen
|
||||||
|
|
||||||
map_color=lookup_map(ram[SPACEX_I],ram[SPACEY_I]);
|
map_color=lookup_map(ram[SPACEX_I],ram[SPACEY_I]);
|
||||||
@ -618,50 +620,43 @@ int flying(void) {
|
|||||||
/************************************************/
|
/************************************************/
|
||||||
|
|
||||||
gr();
|
gr();
|
||||||
clear_bottom(PAGE0); /* jsr clear_screens */
|
clear_bottom(PAGE0);
|
||||||
clear_bottom(PAGE1); /* jsr set_gr_page0 */
|
clear_bottom(PAGE1);
|
||||||
|
|
||||||
ram[SHIPY]=20; /* lda #20 */
|
ram[SHIPY]=20;
|
||||||
/* sta SHIPY */
|
ram[TURNING]=0;
|
||||||
/* lda #0 */
|
ram[SPACEX_I]=0;
|
||||||
ram[TURNING]=0; /* sta TURNING */
|
ram[SPACEY_I]=0;
|
||||||
ram[SPACEX_I]=0; /* sta SPACEX_I */
|
ram[CX_I]=0;
|
||||||
ram[SPACEY_I]=0; /* sta SPACEY_I */
|
ram[CX_F]=0;
|
||||||
ram[CX_I]=0; /* sta CX_I */
|
ram[CY_I]=0;
|
||||||
ram[CX_F]=0; /* sta CX_F */
|
ram[CY_F]=0;
|
||||||
ram[CY_I]=0; /* sta CY_I */
|
ram[DRAW_SPLASH]=0;
|
||||||
ram[CY_F]=0; /* sta CY_F */
|
ram[SPEED]=0;
|
||||||
ram[DRAW_SPLASH]=0; /* sta DRAW_SPLASH */
|
ram[SPLASH_COUNT]=0;
|
||||||
ram[SPEED]=0; /* sta SPEED */
|
ram[OVER_WATER]=0;
|
||||||
ram[SPLASH_COUNT]=0; /* sta SPLASH_COUNT */
|
|
||||||
ram[OVER_WATER]=0; /* sta OVER_WATER */
|
|
||||||
|
|
||||||
/* lda #1 */
|
ram[ANGLE]=1; /* 1 so you can see island */
|
||||||
ram[ANGLE]=1; /* sta ANGLE */
|
|
||||||
|
|
||||||
/* lda #4 */
|
ram[SPACEZ_I]=4;
|
||||||
ram[SPACEZ_I]=4; /* sta SPACEZ_I */
|
ram[SPACEZ_F]=0x80; /* Z=4.5 */
|
||||||
/* lda #$80 */
|
|
||||||
ram[SPACEZ_F]=0x80; /* sta SPACEZ_F */
|
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
memset(&cycles,0,sizeof(cycles));
|
memset(&cycles,0,sizeof(cycles));
|
||||||
|
cycles.flying+=6;
|
||||||
// lda SPLASH_COUNT 3
|
|
||||||
cycles.flying+=3;
|
|
||||||
// beq flying_keyboard nt2/3
|
|
||||||
cycles.flying+=3;
|
|
||||||
if (ram[SPLASH_COUNT]>0) {
|
if (ram[SPLASH_COUNT]>0) {
|
||||||
cycles.flying--;
|
cycles.flying--;
|
||||||
ram[SPLASH_COUNT]--; // dec SPLASH_COUNT 5
|
ram[SPLASH_COUNT]--;
|
||||||
cycles.flying+=5;
|
cycles.flying+=5;
|
||||||
}
|
}
|
||||||
|
|
||||||
ch=grsim_input(); // jsr get_key 6+40
|
ch=grsim_input();
|
||||||
cycles.getkey=46;
|
cycles.getkey=46;
|
||||||
|
|
||||||
if ((ch=='q') || (ch==27)) break;
|
cycles.flying+=3;
|
||||||
|
|
||||||
|
if ((ch=='q') || (ch==27)) break;
|
||||||
|
cycles.flying+=5;
|
||||||
if ((ch=='w') || (ch==APPLE_UP)) {
|
if ((ch=='w') || (ch==APPLE_UP)) {
|
||||||
if (ram[SHIPY]>16) {
|
if (ram[SHIPY]>16) {
|
||||||
ram[SHIPY]-=2;
|
ram[SHIPY]-=2;
|
||||||
@ -669,6 +664,7 @@ int flying(void) {
|
|||||||
}
|
}
|
||||||
ram[SPLASH_COUNT]=0;
|
ram[SPLASH_COUNT]=0;
|
||||||
}
|
}
|
||||||
|
cycles.flying+=5;
|
||||||
if ((ch=='s') || (ch==APPLE_DOWN)) {
|
if ((ch=='s') || (ch==APPLE_DOWN)) {
|
||||||
if (ram[SHIPY]<28) {
|
if (ram[SHIPY]<28) {
|
||||||
ram[SHIPY]+=2;
|
ram[SHIPY]+=2;
|
||||||
@ -678,6 +674,7 @@ int flying(void) {
|
|||||||
ram[SPLASH_COUNT]=10;
|
ram[SPLASH_COUNT]=10;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
cycles.flying+=5;
|
||||||
if ((ch=='a') || (ch==APPLE_LEFT)) {
|
if ((ch=='a') || (ch==APPLE_LEFT)) {
|
||||||
if ((ram[TURNING]>0) && (!(ram[TURNING]&0x80))) {
|
if ((ram[TURNING]>0) && (!(ram[TURNING]&0x80))) {
|
||||||
ram[TURNING]=0;
|
ram[TURNING]=0;
|
||||||
@ -689,6 +686,7 @@ int flying(void) {
|
|||||||
if (ram[ANGLE]<0) ram[ANGLE]+=ANGLE_STEPS;
|
if (ram[ANGLE]<0) ram[ANGLE]+=ANGLE_STEPS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
cycles.flying+=5;
|
||||||
if ((ch=='d') || (ch==APPLE_RIGHT)) {
|
if ((ch=='d') || (ch==APPLE_RIGHT)) {
|
||||||
if (ram[TURNING]>128) {
|
if (ram[TURNING]>128) {
|
||||||
ram[TURNING]=0;
|
ram[TURNING]=0;
|
||||||
@ -700,24 +698,24 @@ int flying(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
cycles.flying+=5;
|
||||||
/* Used to be able to go backwards */
|
/* Used to be able to go backwards */
|
||||||
if (ch=='z') {
|
if (ch=='z') {
|
||||||
if (ram[SPEED]<3) ram[SPEED]++;
|
if (ram[SPEED]<3) ram[SPEED]++;
|
||||||
}
|
}
|
||||||
|
cycles.flying+=5;
|
||||||
if (ch=='x') {
|
if (ch=='x') {
|
||||||
if (ram[SPEED]>0) ram[SPEED]--;
|
if (ram[SPEED]>0) ram[SPEED]--;
|
||||||
}
|
}
|
||||||
|
cycles.flying+=5;
|
||||||
if (ch==' ') {
|
if (ch==' ') {
|
||||||
ram[SPEED]=SPEED_STOPPED;
|
ram[SPEED]=SPEED_STOPPED;
|
||||||
}
|
}
|
||||||
|
cycles.flying+=5;
|
||||||
if (ch=='h') {
|
if (ch=='h') {
|
||||||
print_help();
|
print_help();
|
||||||
}
|
}
|
||||||
|
cycles.flying+=5;
|
||||||
/* Ending */
|
/* Ending */
|
||||||
if (ch==13) {
|
if (ch==13) {
|
||||||
int landing_color,tx,ty;
|
int landing_color,tx,ty;
|
||||||
@ -752,10 +750,12 @@ int flying(void) {
|
|||||||
print_both_pages("NEED TO LAND ON GRASS!");
|
print_both_pages("NEED TO LAND ON GRASS!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
cycles.flying+=5;
|
||||||
|
|
||||||
|
// check_done:
|
||||||
|
cycles.flying+=14;
|
||||||
if (ram[SPEED]!=SPEED_STOPPED) {
|
if (ram[SPEED]!=SPEED_STOPPED) {
|
||||||
|
cycles.flying--;
|
||||||
|
|
||||||
int ii;
|
int ii;
|
||||||
|
|
||||||
@ -763,7 +763,7 @@ int flying(void) {
|
|||||||
ram[DX_F] = fixed_sin_scale[(ram[ANGLE]+4)&0xf].f; // cos
|
ram[DX_F] = fixed_sin_scale[(ram[ANGLE]+4)&0xf].f; // cos
|
||||||
ram[DY_I] = fixed_sin_scale[ram[ANGLE]&0xf].i;
|
ram[DY_I] = fixed_sin_scale[ram[ANGLE]&0xf].i;
|
||||||
ram[DY_F] = fixed_sin_scale[ram[ANGLE]&0xf].f;
|
ram[DY_F] = fixed_sin_scale[ram[ANGLE]&0xf].f;
|
||||||
|
cycles.flying+=54;
|
||||||
for(ii=0;ii<ram[SPEED];ii++) {
|
for(ii=0;ii<ram[SPEED];ii++) {
|
||||||
fixed_add(ram[CX_I],ram[CX_F],
|
fixed_add(ram[CX_I],ram[CX_F],
|
||||||
ram[DX_I],ram[DX_F],
|
ram[DX_I],ram[DX_F],
|
||||||
@ -771,14 +771,16 @@ int flying(void) {
|
|||||||
fixed_add(ram[CY_I],ram[CY_F],
|
fixed_add(ram[CY_I],ram[CY_F],
|
||||||
ram[DY_I],ram[DY_F],
|
ram[DY_I],ram[DY_F],
|
||||||
&ram[CY_I],&ram[CY_F]);
|
&ram[CY_I],&ram[CY_F]);
|
||||||
|
cycles.flying+=45;
|
||||||
}
|
}
|
||||||
|
cycles.flying--;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
draw_background_mode7();
|
draw_background_mode7();
|
||||||
|
cycles.flying+=6;
|
||||||
ram[DRAW_SPLASH]=0;
|
ram[DRAW_SPLASH]=0;
|
||||||
|
cycles.flying+=11;
|
||||||
if (ram[SPEED]>0) {
|
if (ram[SPEED]>0) {
|
||||||
|
|
||||||
if ((ram[SHIPY]>25) && (ram[TURNING]!=0)) {
|
if ((ram[SHIPY]>25) && (ram[TURNING]!=0)) {
|
||||||
@ -794,32 +796,40 @@ int flying(void) {
|
|||||||
if (ram[DRAW_SPLASH]) {
|
if (ram[DRAW_SPLASH]) {
|
||||||
grsim_put_sprite(splash_forward,
|
grsim_put_sprite(splash_forward,
|
||||||
CONST_SHIPX+1,ram[SHIPY]+9);
|
CONST_SHIPX+1,ram[SHIPY]+9);
|
||||||
|
cycles.flying+=33;
|
||||||
}
|
}
|
||||||
grsim_put_sprite(shadow_forward,CONST_SHIPX+3,31+ram[SPACEZ_I]);
|
grsim_put_sprite(shadow_forward,CONST_SHIPX+3,31+ram[SPACEZ_I]);
|
||||||
grsim_put_sprite(ship_forward,CONST_SHIPX,ram[SHIPY]);
|
grsim_put_sprite(ship_forward,CONST_SHIPX,ram[SHIPY]);
|
||||||
|
cycles.flying+=46;
|
||||||
}
|
}
|
||||||
else if (ram[TURNING]>128) {
|
else if (ram[TURNING]>128) {
|
||||||
|
|
||||||
if (ram[DRAW_SPLASH]) {
|
if (ram[DRAW_SPLASH]) {
|
||||||
grsim_put_sprite(splash_left,
|
grsim_put_sprite(splash_left,
|
||||||
CONST_SHIPX+1,36);
|
CONST_SHIPX+1,36);
|
||||||
|
cycles.flying+=28;
|
||||||
}
|
}
|
||||||
grsim_put_sprite(shadow_left,CONST_SHIPX+3,31+ram[SPACEZ_I]);
|
grsim_put_sprite(shadow_left,CONST_SHIPX+3,31+ram[SPACEZ_I]);
|
||||||
grsim_put_sprite(ship_left,CONST_SHIPX,ram[SHIPY]);
|
grsim_put_sprite(ship_left,CONST_SHIPX,ram[SHIPY]);
|
||||||
ram[TURNING]++;
|
ram[TURNING]++;
|
||||||
|
cycles.flying+=48;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
if (ram[DRAW_SPLASH]) {
|
if (ram[DRAW_SPLASH]) {
|
||||||
grsim_put_sprite(splash_right,
|
grsim_put_sprite(splash_right,
|
||||||
CONST_SHIPX+1,36);
|
CONST_SHIPX+1,36);
|
||||||
|
cycles.flying+=28;
|
||||||
}
|
}
|
||||||
grsim_put_sprite(shadow_right,CONST_SHIPX+3,31+ram[SPACEZ_I]);
|
grsim_put_sprite(shadow_right,CONST_SHIPX+3,31+ram[SPACEZ_I]);
|
||||||
grsim_put_sprite(ship_right,CONST_SHIPX,ram[SHIPY]);
|
grsim_put_sprite(ship_right,CONST_SHIPX,ram[SHIPY]);
|
||||||
ram[TURNING]--;
|
ram[TURNING]--;
|
||||||
|
cycles.flying+=51;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cycles.flying+=17;
|
||||||
page_flip(); cycles.page_flip+=26;
|
page_flip(); cycles.page_flip+=26;
|
||||||
|
cycles.flying+=9;
|
||||||
|
|
||||||
iterations++;
|
iterations++;
|
||||||
if (iterations==100) {
|
if (iterations==100) {
|
||||||
|
2
tfv/TODO
2
tfv/TODO
@ -4,6 +4,8 @@ mode7 speed fixes:
|
|||||||
+ move multiply vars to zero page
|
+ move multiply vars to zero page
|
||||||
+ leave one of multiply results in accumulator at end?
|
+ leave one of multiply results in accumulator at end?
|
||||||
|
|
||||||
|
+ Skip key parsing if no key read
|
||||||
|
|
||||||
short term:
|
short term:
|
||||||
|
|
||||||
longer term:
|
longer term:
|
||||||
|
416
tfv/tfv_flying.s
416
tfv/tfv_flying.s
@ -83,16 +83,15 @@ flying_start:
|
|||||||
|
|
||||||
flying_loop:
|
flying_loop:
|
||||||
|
|
||||||
lda SPLASH_COUNT
|
lda SPLASH_COUNT ; 3
|
||||||
beq flying_keyboard
|
beq flying_keyboard ; 2nt/3
|
||||||
dec SPLASH_COUNT ; decrement splash count
|
dec SPLASH_COUNT ; decrement splash count ; 5
|
||||||
|
|
||||||
flying_keyboard:
|
flying_keyboard:
|
||||||
|
|
||||||
|
jsr get_key ; get keypress ; 6
|
||||||
|
|
||||||
jsr get_key ; get keypress
|
lda LASTKEY ; 3
|
||||||
|
|
||||||
lda LASTKEY
|
|
||||||
|
|
||||||
; cmp #('Q') ; if quit, then return
|
; cmp #('Q') ; if quit, then return
|
||||||
; bne skipskip
|
; bne skipskip
|
||||||
@ -100,8 +99,8 @@ flying_keyboard:
|
|||||||
|
|
||||||
;skipskip:
|
;skipskip:
|
||||||
|
|
||||||
cmp #('W')
|
cmp #('W') ; 2
|
||||||
bne check_down
|
bne check_down ; 3/2nt
|
||||||
|
|
||||||
;===========
|
;===========
|
||||||
; UP PRESSED
|
; UP PRESSED
|
||||||
@ -301,99 +300,98 @@ check_done:
|
|||||||
;================
|
;================
|
||||||
; Wrap the Angle
|
; Wrap the Angle
|
||||||
;================
|
;================
|
||||||
|
; FIXME: only do this in right/left routine?
|
||||||
lda ANGLE
|
lda ANGLE ; 3
|
||||||
and #$f
|
and #$f ; 2
|
||||||
sta ANGLE
|
sta ANGLE ; 3
|
||||||
|
|
||||||
;================
|
;================
|
||||||
; Handle Movement
|
; Handle Movement
|
||||||
;================
|
;================
|
||||||
|
|
||||||
speed_move:
|
speed_move:
|
||||||
ldx SPEED
|
ldx SPEED ; 3
|
||||||
beq draw_background
|
beq draw_background ; 2nt/3
|
||||||
|
;=============
|
||||||
lda ANGLE ; dx.i=fixed_sin[(angle+4)&0xf].i; // cos()
|
lda ANGLE ; dx.i=fixed_sin[(angle+4)&0xf].i; // cos() ; 3
|
||||||
clc
|
clc ; 2
|
||||||
adc #4
|
adc #4 ; 2
|
||||||
and #$f
|
and #$f ; 2
|
||||||
asl
|
asl ; 2
|
||||||
tay
|
tay ; 2
|
||||||
lda fixed_sin_scale,Y
|
lda fixed_sin_scale,Y ; 4
|
||||||
sta DX_I
|
sta DX_I ; 3
|
||||||
iny ; dx.f=fixed_sin[(angle+4)&0xf].f; // cos()
|
iny ; dx.f=fixed_sin[(angle+4)&0xf].f; // cos() ; 2
|
||||||
lda fixed_sin_scale,Y
|
lda fixed_sin_scale,Y ; 4
|
||||||
sta DX_F
|
sta DX_F ; 3
|
||||||
|
|
||||||
lda ANGLE ; dy.i=fixed_sin[angle&0xf].i; // sin()
|
|
||||||
and #$f
|
|
||||||
asl
|
|
||||||
tay
|
|
||||||
lda fixed_sin_scale,Y
|
|
||||||
sta DY_I
|
|
||||||
iny ; dx.f=fixed_sin[angle&0xf].f; // sin()
|
|
||||||
lda fixed_sin_scale,Y
|
|
||||||
sta DY_F
|
|
||||||
|
|
||||||
|
lda ANGLE ; dy.i=fixed_sin[angle&0xf].i; // sin() ; 3
|
||||||
|
and #$f ; 2
|
||||||
|
asl ; 2
|
||||||
|
tay ; 2
|
||||||
|
lda fixed_sin_scale,Y ; 4
|
||||||
|
sta DY_I ; 3
|
||||||
|
iny ; dx.f=fixed_sin[angle&0xf].f; // sin() ; 2
|
||||||
|
lda fixed_sin_scale,Y ; 4
|
||||||
|
sta DY_F ; 3
|
||||||
|
;============
|
||||||
|
; 54
|
||||||
speed_loop:
|
speed_loop:
|
||||||
|
|
||||||
clc ; fixed_add(&cx,&dx,&cx);
|
clc ; fixed_add(&cx,&dx,&cx); ; 2
|
||||||
lda CX_F
|
lda CX_F ; 3
|
||||||
adc DX_F
|
adc DX_F ; 3
|
||||||
sta CX_F
|
sta CX_F ; 3
|
||||||
lda CX_I
|
lda CX_I ; 3
|
||||||
adc DX_I
|
adc DX_I ; 3
|
||||||
sta CX_I
|
sta CX_I ; 3
|
||||||
|
|
||||||
clc ; fixed_add(&cy,&dy,&cy);
|
clc ; fixed_add(&cy,&dy,&cy); ; 2
|
||||||
lda CY_F
|
lda CY_F ; 3
|
||||||
adc DY_F
|
adc DY_F ; 3
|
||||||
sta CY_F
|
sta CY_F ; 3
|
||||||
lda CY_I
|
lda CY_I ; 3
|
||||||
adc DY_I
|
adc DY_I ; 3
|
||||||
sta CY_I
|
sta CY_I ; 3
|
||||||
|
|
||||||
dex
|
|
||||||
bne speed_loop
|
|
||||||
|
|
||||||
|
dex ; 2
|
||||||
|
bne speed_loop ; 2nt/3
|
||||||
|
;============
|
||||||
|
; 45
|
||||||
|
|
||||||
;====================
|
;====================
|
||||||
; Draw the background
|
; Draw the background
|
||||||
;====================
|
;====================
|
||||||
draw_background:
|
draw_background:
|
||||||
jsr draw_background_mode7
|
jsr draw_background_mode7 ; 6
|
||||||
|
|
||||||
; lda #1
|
|
||||||
; sta OVER_WATER
|
|
||||||
|
|
||||||
; Calculate whether to draw the splash
|
; Calculate whether to draw the splash
|
||||||
|
|
||||||
lda #0 ; set splash drawing to 0
|
lda #0 ; set splash drawing to 0 ; 2
|
||||||
sta DRAW_SPLASH
|
sta DRAW_SPLASH ; 3
|
||||||
|
|
||||||
lda SPEED ; if speed==0, no splash
|
lda SPEED ; if speed==0, no splash ; 3
|
||||||
beq no_splash
|
beq no_splash ; 2nt/3
|
||||||
|
|
||||||
lda TURNING
|
lda TURNING ; 3
|
||||||
beq no_turning_splash
|
beq no_turning_splash ; 2nt/3
|
||||||
|
|
||||||
lda SHIPY
|
lda SHIPY ; 3
|
||||||
cmp #27
|
cmp #27 ; 2
|
||||||
bcc no_turning_splash ; blt if shipy<25 skip
|
bcc no_turning_splash ; blt if shipy<25 skip ; 2nt/3
|
||||||
|
|
||||||
lda #1
|
lda #1 ; 2
|
||||||
sta SPLASH_COUNT
|
sta SPLASH_COUNT ; 3
|
||||||
|
|
||||||
no_turning_splash:
|
no_turning_splash:
|
||||||
lda OVER_WATER ; no splash if over land
|
lda OVER_WATER ; no splash if over land ; 3
|
||||||
beq no_splash
|
beq no_splash ; 2nt/3
|
||||||
|
|
||||||
lda SPLASH_COUNT ; no splash if splash_count expired
|
lda SPLASH_COUNT ; no splash if splash_count expired ; 3
|
||||||
beq no_splash
|
beq no_splash ; 2nt/3
|
||||||
|
|
||||||
lda #1
|
lda #1 ; 2
|
||||||
sta DRAW_SPLASH
|
sta DRAW_SPLASH ; 3
|
||||||
|
|
||||||
no_splash:
|
no_splash:
|
||||||
|
|
||||||
@ -401,146 +399,158 @@ no_splash:
|
|||||||
; Draw the ship
|
; Draw the ship
|
||||||
;==============
|
;==============
|
||||||
|
|
||||||
clv
|
clv ; 2
|
||||||
lda TURNING
|
lda TURNING ; 3
|
||||||
beq draw_ship_forward
|
beq draw_ship_forward ; 2nt/3
|
||||||
bpl draw_ship_right
|
bpl draw_ship_right ; 2nt/3
|
||||||
bmi draw_ship_left ;; FIXME: optimize order
|
bmi draw_ship_left ;; FIXME: optimize order ; 2nt/3
|
||||||
|
|
||||||
draw_ship_forward:
|
draw_ship_forward:
|
||||||
lda DRAW_SPLASH
|
lda DRAW_SPLASH ; 2
|
||||||
beq no_forward_splash
|
beq no_forward_splash ; 2nt/3
|
||||||
|
|
||||||
; Draw Splash
|
; Draw Splash
|
||||||
lda #>splash_forward
|
lda #>splash_forward ; 2
|
||||||
sta INH
|
sta INH ; 3
|
||||||
lda #<splash_forward
|
lda #<splash_forward ; 2
|
||||||
sta INL
|
sta INL ; 3
|
||||||
lda #(SHIPX+1)
|
lda #(SHIPX+1) ; 2
|
||||||
sta XPOS
|
sta XPOS ; 3
|
||||||
clc
|
clc ; 2
|
||||||
lda SHIPY
|
lda SHIPY ; 3
|
||||||
adc #9
|
adc #9 ; 2
|
||||||
and #$fe ; make sure it's even
|
and #$fe ; make sure it's even ; 2
|
||||||
sta YPOS
|
sta YPOS ; 3
|
||||||
jsr put_sprite
|
jsr put_sprite ; 6
|
||||||
|
;==========
|
||||||
|
; 33
|
||||||
no_forward_splash:
|
no_forward_splash:
|
||||||
; Draw Shadow
|
; Draw Shadow
|
||||||
lda #>shadow_forward
|
lda #>shadow_forward ; 2
|
||||||
sta INH
|
sta INH ; 3
|
||||||
lda #<shadow_forward
|
lda #<shadow_forward ; 2
|
||||||
sta INL
|
sta INL ; 3
|
||||||
lda #(SHIPX+3)
|
lda #(SHIPX+3) ; 2
|
||||||
sta XPOS
|
sta XPOS ; 3
|
||||||
clc
|
clc ; 2
|
||||||
lda SPACEZ_I
|
lda SPACEZ_I ; 3
|
||||||
adc #31
|
adc #31 ; 2
|
||||||
and #$fe ; make sure it's even
|
and #$fe ; make sure it's even ; 2
|
||||||
sta YPOS
|
sta YPOS ; 3
|
||||||
jsr put_sprite
|
jsr put_sprite ; 6
|
||||||
|
|
||||||
lda #>ship_forward
|
|
||||||
sta INH
|
|
||||||
lda #<ship_forward
|
|
||||||
sta INL
|
|
||||||
bvc draw_ship
|
|
||||||
|
|
||||||
|
lda #>ship_forward ; 2
|
||||||
|
sta INH ; 3
|
||||||
|
lda #<ship_forward ; 2
|
||||||
|
sta INL ; 3
|
||||||
|
bvc draw_ship ; 3
|
||||||
|
;===========
|
||||||
|
; 46
|
||||||
draw_ship_right:
|
draw_ship_right:
|
||||||
lda DRAW_SPLASH
|
lda DRAW_SPLASH ; 3
|
||||||
beq no_right_splash
|
beq no_right_splash ; 2nt/3
|
||||||
|
|
||||||
; Draw Splash
|
; Draw Splash
|
||||||
lda #>splash_right
|
lda #>splash_right ; 2
|
||||||
sta INH
|
sta INH ; 3
|
||||||
lda #<splash_right
|
lda #<splash_right ; 2
|
||||||
sta INL
|
sta INL ; 3
|
||||||
lda #(SHIPX+1)
|
lda #(SHIPX+1) ; 2
|
||||||
sta XPOS
|
sta XPOS ; 3
|
||||||
clc
|
clc ; 2
|
||||||
lda #36
|
lda #36 ; 2
|
||||||
sta YPOS
|
sta YPOS ; 3
|
||||||
jsr put_sprite
|
jsr put_sprite ; 6
|
||||||
|
;===========
|
||||||
|
; 28
|
||||||
no_right_splash:
|
no_right_splash:
|
||||||
|
|
||||||
; Draw Shadow
|
; Draw Shadow
|
||||||
lda #>shadow_right
|
lda #>shadow_right ; 2
|
||||||
sta INH
|
sta INH ; 3
|
||||||
lda #<shadow_right
|
lda #<shadow_right ; 2
|
||||||
sta INL
|
sta INL ; 3
|
||||||
lda #(SHIPX+3)
|
lda #(SHIPX+3) ; 2
|
||||||
sta XPOS
|
sta XPOS ; 3
|
||||||
clc
|
clc ; 2
|
||||||
lda SPACEZ_I
|
lda SPACEZ_I ; 3
|
||||||
adc #31
|
adc #31 ; 2
|
||||||
and #$fe ; make sure it's even
|
and #$fe ; make sure it's even ; 2
|
||||||
sta YPOS
|
sta YPOS ; 3
|
||||||
jsr put_sprite
|
jsr put_sprite ; 6
|
||||||
|
|
||||||
lda #>ship_right
|
lda #>ship_right ; 2
|
||||||
sta INH
|
sta INH ; 3
|
||||||
lda #<ship_right
|
lda #<ship_right ; 2
|
||||||
sta INL
|
sta INL ; 3
|
||||||
|
|
||||||
dec TURNING
|
dec TURNING ; 5
|
||||||
|
|
||||||
bvc draw_ship
|
|
||||||
|
|
||||||
|
bvc draw_ship ; 3
|
||||||
|
;==========
|
||||||
|
; 51
|
||||||
draw_ship_left:
|
draw_ship_left:
|
||||||
lda DRAW_SPLASH
|
lda DRAW_SPLASH ; 3
|
||||||
beq no_left_splash
|
beq no_left_splash ; 2nt/3
|
||||||
|
|
||||||
; Draw Splash
|
; Draw Splash
|
||||||
lda #>splash_left
|
lda #>splash_left ; 2
|
||||||
sta INH
|
sta INH ; 3
|
||||||
lda #<splash_left
|
lda #<splash_left ; 2
|
||||||
sta INL
|
sta INL ; 3
|
||||||
lda #(SHIPX+1)
|
lda #(SHIPX+1) ; 2
|
||||||
sta XPOS
|
sta XPOS ; 3
|
||||||
clc
|
clc ; 2
|
||||||
lda #36
|
lda #36 ; 2
|
||||||
sta YPOS
|
sta YPOS ; 3
|
||||||
jsr put_sprite
|
jsr put_sprite ; 6
|
||||||
|
;===========
|
||||||
|
; 28
|
||||||
no_left_splash:
|
no_left_splash:
|
||||||
|
|
||||||
; Draw Shadow
|
; Draw Shadow
|
||||||
lda #>shadow_left
|
lda #>shadow_left ; 2
|
||||||
sta INH
|
sta INH ; 3
|
||||||
lda #<shadow_left
|
lda #<shadow_left ; 2
|
||||||
sta INL
|
sta INL ; 3
|
||||||
lda #(SHIPX+3)
|
lda #(SHIPX+3) ; 2
|
||||||
sta XPOS
|
sta XPOS ; 3
|
||||||
clc
|
clc ; 2
|
||||||
lda SPACEZ_I
|
lda SPACEZ_I ; 3
|
||||||
adc #31
|
adc #31 ; 2
|
||||||
and #$fe ; make sure it's even
|
and #$fe ; make sure it's even ; 2
|
||||||
sta YPOS
|
sta YPOS ; 3
|
||||||
jsr put_sprite
|
jsr put_sprite ; 6
|
||||||
|
|
||||||
lda #>ship_left
|
lda #>ship_left ; 2
|
||||||
sta INH
|
sta INH ; 3
|
||||||
lda #<ship_left
|
lda #<ship_left ; 2
|
||||||
sta INL
|
sta INL ; 3
|
||||||
|
|
||||||
inc TURNING
|
inc TURNING ; 5
|
||||||
|
;==========
|
||||||
|
; 48
|
||||||
|
|
||||||
draw_ship:
|
draw_ship:
|
||||||
lda #SHIPX
|
lda #SHIPX ; 2
|
||||||
sta XPOS
|
sta XPOS ; 3
|
||||||
lda SHIPY
|
lda SHIPY ; 3
|
||||||
sta YPOS
|
sta YPOS ; 3
|
||||||
jsr put_sprite
|
jsr put_sprite ; 6
|
||||||
|
;===========
|
||||||
|
; 17
|
||||||
|
|
||||||
;==================
|
;==================
|
||||||
; flip pages
|
; flip pages
|
||||||
;==================
|
;==================
|
||||||
|
|
||||||
jsr page_flip
|
jsr page_flip ; 6
|
||||||
|
|
||||||
;==================
|
;==================
|
||||||
; loop forever
|
; loop forever
|
||||||
;==================
|
;==================
|
||||||
|
|
||||||
jmp flying_loop
|
jmp flying_loop ; 3
|
||||||
|
|
||||||
|
|
||||||
;===========================
|
;===========================
|
||||||
@ -969,41 +979,41 @@ done_screeny:
|
|||||||
; finds value in space_x.i,space_y.i
|
; finds value in space_x.i,space_y.i
|
||||||
; returns color in A
|
; returns color in A
|
||||||
lookup_map:
|
lookup_map:
|
||||||
lda SPACEX_I
|
lda SPACEX_I ; 3
|
||||||
and #MAP_MASK
|
and #MAP_MASK ; 2
|
||||||
sta TEMPY
|
sta TEMPY ; 3
|
||||||
|
|
||||||
lda SPACEY_I
|
lda SPACEY_I ; 3
|
||||||
and #MAP_MASK ; wrap to 64x64 grid
|
and #MAP_MASK ; wrap to 64x64 grid ; 2
|
||||||
|
|
||||||
|
|
||||||
asl
|
asl ; 2
|
||||||
asl
|
asl ; 2
|
||||||
asl ; multiply by 8
|
asl ; multiply by 8 ; 2
|
||||||
clc
|
clc ; 2
|
||||||
adc TEMPY ; add in X value
|
adc TEMPY ; add in X value ; 2
|
||||||
; (use OR instead?)
|
; (use OR instead?)
|
||||||
|
|
||||||
ldy SPACEX_I
|
ldy SPACEX_I ; 3
|
||||||
cpy #$8
|
cpy #$8 ; 2
|
||||||
beq ocean_color ; bgt
|
beq ocean_color ; bgt ; 2nt/3
|
||||||
bcs ocean_color
|
bcs ocean_color ; 2nt/3
|
||||||
ldy SPACEY_I
|
ldy SPACEY_I ; 3
|
||||||
cpy #$8
|
cpy #$8 ; 2
|
||||||
beq ocean_color ; bgt
|
beq ocean_color ; bgt ; 2nt/3
|
||||||
bcs ocean_color
|
bcs ocean_color ; 2nt/3
|
||||||
|
|
||||||
tay
|
tay ; 2
|
||||||
lda flying_map,Y ; load from array
|
lda flying_map,Y ; load from array ; 4
|
||||||
|
|
||||||
rts
|
rts ; 6
|
||||||
|
|
||||||
ocean_color:
|
ocean_color:
|
||||||
and #$1f
|
and #$1f ; 2
|
||||||
tay
|
tay ; 2
|
||||||
lda water_map,Y ; the color of the sea
|
lda water_map,Y ; the color of the sea ; 4
|
||||||
|
|
||||||
rts
|
rts ; 6
|
||||||
|
|
||||||
flying_map:
|
flying_map:
|
||||||
.byte $22,$ff,$ff,$ff, $ff,$ff,$ff,$22
|
.byte $22,$ff,$ff,$ff, $ff,$ff,$ff,$22
|
||||||
|
Loading…
Reference in New Issue
Block a user