firework: launching works!

This commit is contained in:
Vince Weaver 2018-09-11 22:01:51 -04:00
parent 12957e97da
commit 5813747080
4 changed files with 84 additions and 53 deletions

View File

@ -84,6 +84,8 @@ done_fireworks:
rts rts
.align $100
;=========================== ;===========================
; LAUNCH_FIREWORK ; LAUNCH_FIREWORK
;=========================== ;===========================
@ -196,10 +198,12 @@ done_hill:
; 11 ; 11
.align $100
;========================================================================== ;==========================================================================
; Move rocket ; Move rocket
;========================================================================== ;==========================================================================
; cycles=24+11+20+18+14+53 = 140+11 = 151 ; cycles=24+11+20+18+14+53 = 140+1096 = 1236
move_rocket: move_rocket:
@ -363,45 +367,46 @@ done_moving:
done_bounds_checking: done_bounds_checking:
lda #STATE_LAUNCH_ROCKET ; 2
sta STATE ; 3
rts ; 6
;======================================================================= ;=======================================================================
; draw rocket ; draw rocket
;======================================================================= ;=======================================================================
; ;
; cs!=mx 9+15+258+258+3+10+258+258+9+7+11 = 1096
; cs==mx 9+ + + + +10+258+258+9+7+11 = 562 (need 534)
draw_rocket: draw_rocket:
lda CURRENT_STEP ; 3 lda CURRENT_STEP ; 3
cmp MAX_STEPS ; 3 cmp MAX_STEPS ; 3
beq erase_rocket ; ? beq skip_drawing_rocket ; 3
;===========
; 9
; set hcolor to proper white (3 or 7) ; set hcolor to proper white (3 or 7)
;-1
clc ; 2 clc ; 2
lda COLOR_GROUP ; 3 lda COLOR_GROUP ; 3
adc #3 ; 2 adc #3 ; 2
tax ; 2 tax ; 2
lda colortbl,X ; get color from table ; 4+ lda colortbl,X ; get color from table ; 4+
sta HGR_COLOR ; 3 sta HGR_COLOR ; 3
;============
; 15
; HPLOT X,Y: X= (y,x), Y=a ; HPLOT X,Y: X= (y,x), Y=a
ldx X_OLD ; 3 ldx X_OLD ; 3
lda Y_OLD ; 3 lda Y_OLD ; 3
ldy #0 ; 2 ldy #0 ; 2
jsr hplot0 ; hplot(x_old,y_old); ;6+244 jsr hplot0 ; hplot(x_old,y_old); ;6+244
;=============
; 258
; HPLOT TO X,Y X=(x,a), y=Y ; HPLOT TO X,Y X=(x,a), y=Y
ldx XPOS_L ldx XPOS_L ; 3
ldy #0 ldy #0 ; 2
lda YPOS_H lda YPOS_H ; 3
jsr hplot0 jsr hplot0 ;6+244
;=============
; 258
; lda XPOS_L ; 3 ; lda XPOS_L ; 3
; ldx #0 ; 2 ; ldx #0 ; 2
@ -409,27 +414,42 @@ draw_rocket:
; jsr hglin ; hplot_to(xpos_l,ypos_h); ;????? ; jsr hglin ; hplot_to(xpos_l,ypos_h); ;?????
jmp erase_rocket ; 3
skip_drawing_rocket:
; Try X=7 Y=13 cycles=534
ldy #13 ; 2
sdloop1:ldx #7 ; 2
sdloop2:dex ; 2
bne sdloop2 ; 2nt/3
dey ; 2
bne sdloop1 ; 2nt/3
erase_rocket: erase_rocket:
; erase with proper color black (0 or 4) ; erase with proper color black (0 or 4)
ldx COLOR_GROUP ldx COLOR_GROUP ; 3
lda colortbl,X ; get color from table lda colortbl,X ; get color from table ; 4+
sta HGR_COLOR sta HGR_COLOR ; 3
;===========
; 10
; HPLOT X,Y: X= (y,x), Y=a ; HPLOT X,Y: X= (y,x), Y=a
ldx X_OLDER ldx X_OLDER ; 3
lda Y_OLDER lda Y_OLDER ; 3
ldy #0 ldy #0 ; 2
jsr hplot0 ; hplot(x_old,y_old); jsr hplot0 ; hplot(x_old,y_old); ; 6+244
;============
; 258
; HPLOT TO X,Y X=(x,a), y=Y ; HPLOT TO X,Y X=(x,a), y=Y
ldx X_OLD ldx X_OLD ; 3
ldy #0 ldy #0 ; 2
lda Y_OLD lda Y_OLD ; 3
jsr hplot0 jsr hplot0 ;6+244
;=============
; 258
; lda X_OLD ; lda X_OLD
; ldx #0 ; ldx #0
; ldy Y_OLD ; ldy Y_OLD
@ -437,25 +457,36 @@ erase_rocket:
done_with_loop: done_with_loop:
lda CURRENT_STEP lda CURRENT_STEP ; 3
cmp MAX_STEPS cmp MAX_STEPS ; 3
bne not_done_with_launch bne not_done_with_launch ; 3
;=============
; 9
;-1
; lda #STATE_START_EXPLOSION ; lda #STATE_START_EXPLOSION
lda #STATE_LAUNCH_ROCKET lda #STATE_LAUNCH_ROCKET ; 2
sta STATE sta STATE ; 3
jmp not_done_with_launch2 ; 3
;==========
; 7
not_done_with_launch: not_done_with_launch:
lda STATE ; nop ; 3
nop ; 2
nop ; 2
;==========
; 7
; lda #$c0
; jsr WAIT
not_done_with_launch2:
lda #$c0 inc CURRENT_STEP ; 5
jsr WAIT rts ; 6
;===========
inc CURRENT_STEP ; 11
rts
.align $100
;====================================================================== ;======================================================================
; Start explosion near x_old, y_old ; Start explosion near x_old, y_old
@ -627,6 +658,8 @@ explosion_done:
; 62 ; 62
.align $100
;=============================== ;===============================
; Draw explosion rays ; Draw explosion rays
;=============================== ;===============================

View File

@ -484,6 +484,7 @@ hplot_to:
rts22: rts22:
rts ; 6 rts ; 6
.align $100
;============================= ;=============================
; HCOLOR_EQUALS ; HCOLOR_EQUALS

View File

@ -40,19 +40,19 @@ Xloop2: dex ; 2
;================================= ;=================================
; and take 4504 cycles to do it ; and take 4504 cycles to do it
; we take 160 so waste 4344 ; we take 1245 so waste 3259
action_move_rocket: action_move_rocket:
; Try X=19 Y=43 cycles=4344 ; Try X=35 Y=18 cycles=3259
ldy #43 ; 2 ldy #18 ; 2
Yloop1: ldx #19 ; 2 Yloop1: ldx #35 ; 2
Yloop2: dex ; 2 Yloop2: dex ; 2
bne Yloop2 ; 2nt/3 bne Yloop2 ; 2nt/3
dey ; 2 dey ; 2
bne Yloop1 ; 2nt/3 bne Yloop1 ; 2nt/3
jsr move_rocket ; 6+151 = 157 jsr move_rocket ; 6+1236 = 1242
jmp check_keyboard ; 3 jmp check_keyboard ; 3

View File

@ -1,16 +1,13 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) { int main(int argc, char **argv) {
int x,y,cycles,desired,range=10; int x,y,cycles,desired,range=10;
// desired=3116; desired=3116;
// desired=4152;
// desired=5196;
// desired=4547;
// desired=9685;
desired=4680;
if (argc>1) desired=atoi(argv[1]);
printf("You want %d cycles\n",desired); printf("You want %d cycles\n",desired);
for(x=0;x<255;x++) { for(x=0;x<255;x++) {