mirror of
https://github.com/deater/dos33fsprogs.git
synced 2025-01-14 13:33:48 +00:00
starfield: Finally
just make the math inaccurate
This commit is contained in:
parent
bdf64d1d2d
commit
45094f7b9f
@ -16,7 +16,7 @@ appleiibot.dsk: E2.BAS FLAME.BAS FLAME2.BAS HELLO \
|
|||||||
C64.BAS SIERPINSKI.BAS FAKES.BAS SIER.BAS DROPS.BAS RR.BAS RR_HGR.BAS \
|
C64.BAS SIERPINSKI.BAS FAKES.BAS SIER.BAS DROPS.BAS RR.BAS RR_HGR.BAS \
|
||||||
COMBO.BAS WIRES.BAS PATTERN.BAS BALL.BAS LINES.BAS MOD9.BAS \
|
COMBO.BAS WIRES.BAS PATTERN.BAS BALL.BAS LINES.BAS MOD9.BAS \
|
||||||
XOR_ZOOM.BAS MOD9_HGR.BAS SIER_HGR.BAS MOVE.BAS SINE.BAS XDRAW128.BAS \
|
XOR_ZOOM.BAS MOD9_HGR.BAS SIER_HGR.BAS MOVE.BAS SINE.BAS XDRAW128.BAS \
|
||||||
GATOR.BAS CURSOR.BAS STARGATE.BAS TUNNEL.BAS
|
GATOR.BAS CURSOR.BAS STARGATE.BAS TUNNEL.BAS STARFIELD.BAS
|
||||||
|
|
||||||
# cp $(EMPTY_DISK)/empty.dsk appleiibot.dsk
|
# cp $(EMPTY_DISK)/empty.dsk appleiibot.dsk
|
||||||
cp empty.dsk appleiibot.dsk
|
cp empty.dsk appleiibot.dsk
|
||||||
@ -85,6 +85,7 @@ appleiibot.dsk: E2.BAS FLAME.BAS FLAME2.BAS HELLO \
|
|||||||
$(DOS33) -y appleiibot.dsk SAVE A CURSOR.BAS
|
$(DOS33) -y appleiibot.dsk SAVE A CURSOR.BAS
|
||||||
$(DOS33) -y appleiibot.dsk SAVE A STARGATE.BAS
|
$(DOS33) -y appleiibot.dsk SAVE A STARGATE.BAS
|
||||||
$(DOS33) -y appleiibot.dsk SAVE A TUNNEL.BAS
|
$(DOS33) -y appleiibot.dsk SAVE A TUNNEL.BAS
|
||||||
|
$(DOS33) -y appleiibot.dsk SAVE A STARFIELD.BAS
|
||||||
|
|
||||||
####
|
####
|
||||||
|
|
||||||
@ -268,6 +269,11 @@ STARGATE.BAS: stargate.bas
|
|||||||
TUNNEL.BAS: tunnel.bas
|
TUNNEL.BAS: tunnel.bas
|
||||||
$(TOKENIZE) < tunnel.bas > TUNNEL.BAS
|
$(TOKENIZE) < tunnel.bas > TUNNEL.BAS
|
||||||
|
|
||||||
|
####
|
||||||
|
|
||||||
|
STARFIELD.BAS: starfield.bas
|
||||||
|
$(TOKENIZE) < starfield.bas > STARFIELD.BAS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
####
|
####
|
||||||
|
2
basic/appleiibot/starfield.bas
Normal file
2
basic/appleiibot/starfield.bas
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
1FORI=0TO138:POKE877+I,4*PEEK(2125+I)-192+(PEEK(2264+I/3)-35)/4^(I-INT(I/3)*3):NEXT
|
||||||
|
2&",=nU38U.b*lX2ZD8ZoV/Q<]L]P8,m]L5f(::b:\0Oo]T8c0Z<7`:\6eHl3a<PJ\$5GnULSnUP80ba0)]0Z2_;]Yn^0kUTZ/lQW^,k::10MFioH2/0Bk5J$Uo^=m@2nV:4#?o5J5DBK0S1RK*#4#$3SF$I$2##%+-V#<#S_E'*'445:D&76T3C#Y'3&
|
@ -21,7 +21,7 @@ starfield.dsk: $(DOS33) HELLO STARFIELD_DEMO STARFIELD_1K STARFIELD.BAS \
|
|||||||
$(DOS33) -y starfield.dsk BSAVE -a 0x1000 STARFIELD_1K
|
$(DOS33) -y starfield.dsk BSAVE -a 0x1000 STARFIELD_1K
|
||||||
$(DOS33) -y starfield.dsk BSAVE -a 0xc00 STARSMALL
|
$(DOS33) -y starfield.dsk BSAVE -a 0xc00 STARSMALL
|
||||||
$(DOS33) -y starfield.dsk BSAVE -a 0xc00 STARBOT_LOOKUP
|
$(DOS33) -y starfield.dsk BSAVE -a 0xc00 STARBOT_LOOKUP
|
||||||
$(DOS33) -y starfield.dsk BSAVE -a 0xc00 STARBOT
|
$(DOS33) -y starfield.dsk BSAVE -a 0x36d STARBOT
|
||||||
|
|
||||||
###
|
###
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ starsmall.o: starsmall.s
|
|||||||
###
|
###
|
||||||
|
|
||||||
STARBOT: starbot.o
|
STARBOT: starbot.o
|
||||||
ld65 -o STARBOT starbot.o -C $(LINKERSCRIPTS)/apple2_c00.inc
|
ld65 -o STARBOT starbot.o -C $(LINKERSCRIPTS)/apple2_36d.inc
|
||||||
|
|
||||||
starbot.o: starbot.s
|
starbot.o: starbot.s
|
||||||
ca65 -o starbot.o starbot.s -l starbot.lst
|
ca65 -o starbot.o starbot.s -l starbot.lst
|
||||||
|
@ -15,6 +15,11 @@
|
|||||||
; 133 bytes -- undo opt, no lookup table, just raw divide
|
; 133 bytes -- undo opt, no lookup table, just raw divide
|
||||||
; 145 bytes -- init stars at beginning, so don't initially run bacward if Z=FF
|
; 145 bytes -- init stars at beginning, so don't initially run bacward if Z=FF
|
||||||
; 135 bytes -- optimize divide some more
|
; 135 bytes -- optimize divide some more
|
||||||
|
; 143 bytes -- add in different color star
|
||||||
|
; 142 bytes -- closer :(
|
||||||
|
; trying all kinds of stuff, including using BELL for WAIT
|
||||||
|
; 139 bytes -- just made math innacurate (remove sec in sign correction)
|
||||||
|
|
||||||
|
|
||||||
COLOR = $30
|
COLOR = $30
|
||||||
|
|
||||||
@ -77,7 +82,21 @@ make_orig_stars:
|
|||||||
;2FORP=0TO5
|
;2FORP=0TO5
|
||||||
big_loop:
|
big_loop:
|
||||||
ldx #15
|
ldx #15
|
||||||
|
|
||||||
|
|
||||||
|
; txa
|
||||||
|
; tay
|
||||||
|
; ldy #30
|
||||||
|
; jsr $FBE4 ; BEEP
|
||||||
|
|
||||||
|
lda #80
|
||||||
|
; txa
|
||||||
|
jsr WAIT
|
||||||
|
|
||||||
|
; A now 0
|
||||||
|
|
||||||
star_loop:
|
star_loop:
|
||||||
|
; X=FF
|
||||||
|
|
||||||
;===================
|
;===================
|
||||||
; erase old
|
; erase old
|
||||||
@ -111,12 +130,11 @@ star_loop:
|
|||||||
|
|
||||||
jsr do_divide
|
jsr do_divide
|
||||||
|
|
||||||
sta YY ; YY
|
|
||||||
|
|
||||||
bmi new_star ; if <0
|
bmi new_star ; if <0
|
||||||
cmp #40
|
cmp #40
|
||||||
bcs new_star ; bge >39
|
bcs new_star ; bge >39
|
||||||
|
|
||||||
|
sta YY ; YY
|
||||||
|
|
||||||
;==============================
|
;==============================
|
||||||
; get X/Z
|
; get X/Z
|
||||||
@ -181,11 +199,15 @@ done_star:
|
|||||||
dex
|
dex
|
||||||
bpl star_loop
|
bpl star_loop
|
||||||
|
|
||||||
lda #120
|
; lda #120
|
||||||
jsr WAIT ; A is 0 after
|
; jsr WAIT ; A is 0 after
|
||||||
|
|
||||||
|
; jsr $FBE2 ; BEEP
|
||||||
|
; jsr $FBE4 ; BEEP
|
||||||
|
|
||||||
; GOTO2
|
; GOTO2
|
||||||
beq big_loop ; bra
|
; beq big_loop ; bra
|
||||||
|
bmi big_loop ; bra
|
||||||
|
|
||||||
|
|
||||||
;===========================
|
;===========================
|
||||||
@ -246,8 +268,8 @@ div_loop:
|
|||||||
bpl pos_add
|
bpl pos_add
|
||||||
|
|
||||||
eor #$ff
|
eor #$ff
|
||||||
sec
|
; sec
|
||||||
bcs do_add
|
; bcs do_add
|
||||||
|
|
||||||
pos_add:
|
pos_add:
|
||||||
clc
|
clc
|
||||||
@ -261,5 +283,5 @@ early_out:
|
|||||||
; for BASIC bot load
|
; for BASIC bot load
|
||||||
|
|
||||||
; need this to be at $3F5
|
; need this to be at $3F5
|
||||||
; it's at 8A, so 6B
|
; it's at 8C, so 6D
|
||||||
jmp small_starfield
|
jmp small_starfield
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
|
; starfield
|
||||||
|
; actually too fast
|
||||||
|
; original 189 bytes
|
||||||
|
|
||||||
COLOR = $30
|
COLOR = $30
|
||||||
|
|
||||||
COUNT = $FA
|
QUOTIENT = $FA
|
||||||
DIVISOR = $FB
|
DIVISOR = $FB
|
||||||
DIVIDEND = $FC
|
DIVIDEND = $FC
|
||||||
XX = $FD
|
XX = $FD
|
||||||
@ -24,7 +26,7 @@ HGR2 = $F3D8
|
|||||||
HGR = $F3E2
|
HGR = $F3E2
|
||||||
PLOT = $F800 ; PLOT AT Y,A (A colors output, Y preserved)
|
PLOT = $F800 ; PLOT AT Y,A (A colors output, Y preserved)
|
||||||
SETGR = $FB40
|
SETGR = $FB40
|
||||||
|
WAIT = $FCA8 ; delay 1/2(26+27A+5A^2) us
|
||||||
|
|
||||||
small_starfield:
|
small_starfield:
|
||||||
|
|
||||||
@ -35,31 +37,49 @@ small_starfield:
|
|||||||
; init the X/Z tables
|
; init the X/Z tables
|
||||||
|
|
||||||
ldy #63 ; Y==z for(z=1;z<64;z++) {
|
ldy #63 ; Y==z for(z=1;z<64;z++) {
|
||||||
|
xloop:
|
||||||
ldx #0 ; X==x
|
ldx #0 ; X==x
|
||||||
zloop:
|
zloop:
|
||||||
lda #$ff
|
lda #$ff
|
||||||
sta COUNT
|
sta QUOTIENT
|
||||||
stx DIVIDEND
|
stx DIVIDEND
|
||||||
sty DIVISOR
|
sty DIVISOR
|
||||||
div_loop:
|
div_loop:
|
||||||
inc COUNT
|
inc QUOTIENT
|
||||||
sec
|
sec
|
||||||
lda DIVIDEND
|
lda DIVIDEND
|
||||||
sbc DIVISOR
|
sbc DIVISOR
|
||||||
sta DIVIDEND
|
sta DIVIDEND
|
||||||
bpl div_loop
|
bpl div_loop
|
||||||
|
|
||||||
lda COUNT
|
; write out quotient
|
||||||
|
|
||||||
|
lda QUOTIENT
|
||||||
|
pha
|
||||||
|
clc
|
||||||
|
adc #20
|
||||||
to_smc:
|
to_smc:
|
||||||
sta $5F00,X
|
sta $5F80,X
|
||||||
|
|
||||||
inx
|
inx
|
||||||
bne zloop
|
bpl zloop ; loop until 128
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
negative_loop:
|
||||||
|
pla
|
||||||
|
eor #$ff
|
||||||
|
sec
|
||||||
|
adc #20
|
||||||
|
to2_smc:
|
||||||
|
sta $5F00,X
|
||||||
|
inx
|
||||||
|
bpl negative_loop
|
||||||
|
|
||||||
dec to_smc+2
|
dec to_smc+2
|
||||||
|
dec to2_smc+2
|
||||||
|
|
||||||
dey
|
dey
|
||||||
bne zloop
|
bne xloop
|
||||||
|
|
||||||
|
|
||||||
;===================================
|
;===================================
|
||||||
@ -81,40 +101,41 @@ star_loop:
|
|||||||
; get X/Z
|
; get X/Z
|
||||||
; X=V(A(P),Z(P))
|
; X=V(A(P),Z(P))
|
||||||
|
|
||||||
|
; position Z
|
||||||
lda star_z,X
|
lda star_z,X
|
||||||
asl
|
clc
|
||||||
asl
|
adc #$20
|
||||||
asl
|
|
||||||
asl
|
|
||||||
ora #$20
|
|
||||||
sta xload_smc+2
|
sta xload_smc+2
|
||||||
sta xload2_smc+2
|
sta xload2_smc+2
|
||||||
|
|
||||||
|
; get XX
|
||||||
ldy star_x,X
|
ldy star_x,X
|
||||||
|
|
||||||
xload_smc:
|
xload_smc:
|
||||||
lda $5F00,Y
|
lda $5F00,Y
|
||||||
sta XX
|
sta XX
|
||||||
bmi new_star
|
|
||||||
cmp #39
|
bmi new_star ; if <0
|
||||||
bcs new_star
|
cmp #40
|
||||||
|
bcs new_star ; bge >40
|
||||||
|
|
||||||
;==============================
|
;==============================
|
||||||
; get Y/Z
|
; get Y/Z
|
||||||
; Y=V(B(P),Z(P))
|
; Y=V(B(P),Z(P))
|
||||||
|
|
||||||
ldy star_y,X
|
; get YY
|
||||||
|
|
||||||
|
ldy star_y,X
|
||||||
xload2_smc:
|
xload2_smc:
|
||||||
lda $5F00,Y
|
lda $5F00,Y
|
||||||
sta YY
|
sta YY
|
||||||
bmi new_star
|
|
||||||
cmp #39
|
bmi new_star ; if <0
|
||||||
bcs new_star
|
cmp #40
|
||||||
|
bcs new_star ; bge >39
|
||||||
|
|
||||||
;Z(P)=Z(P)-1
|
;Z(P)=Z(P)-1
|
||||||
dec star_z,X
|
dec star_z,X
|
||||||
bne draw_star
|
bne draw_star ; if Z!=0, draw star
|
||||||
|
|
||||||
new_star:
|
new_star:
|
||||||
;IFX<0ORX>39ORY<0ORY>39ORZ(P)<1THEN
|
;IFX<0ORX>39ORY<0ORY>39ORZ(P)<1THEN
|
||||||
@ -124,16 +145,17 @@ new_star:
|
|||||||
|
|
||||||
ldy FRAME
|
ldy FRAME
|
||||||
lda $F000,Y
|
lda $F000,Y
|
||||||
; and #$3f
|
sta star_x,X ; random XX
|
||||||
sta star_x,X
|
|
||||||
lda $F001,Y
|
lda $F001,Y
|
||||||
; and #$3f
|
sta star_y,X ; random YY
|
||||||
sta star_y,X
|
|
||||||
lda $F002,Y
|
lda $F002,Y
|
||||||
and #$3f
|
and #$3f ; random ZZ 0..63
|
||||||
ora #$1 ; avoid 0
|
ora #$1 ; avoid 0
|
||||||
sta star_z,X
|
sta star_z,X
|
||||||
iny
|
|
||||||
|
iny ; FIXME
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
sty FRAME
|
sty FRAME
|
||||||
@ -149,24 +171,22 @@ draw_star:
|
|||||||
;PLOT O(P),Q(P)
|
;PLOT O(P),Q(P)
|
||||||
|
|
||||||
ldy oldx,X
|
ldy oldx,X
|
||||||
lda oldy,Y
|
lda oldy,X
|
||||||
jsr PLOT ; PLOT AT Y,A
|
jsr PLOT ; PLOT AT Y,A
|
||||||
|
|
||||||
; COLOR=15
|
; COLOR=15
|
||||||
dec COLOR
|
dec COLOR
|
||||||
|
|
||||||
;PLOT X,Y
|
;PLOT X,Y
|
||||||
|
|
||||||
ldy XX
|
|
||||||
lda YY
|
|
||||||
jsr PLOT ; PLOT AT Y,A
|
|
||||||
|
|
||||||
; O(P)=X:Q(P)=Y
|
; O(P)=X:Q(P)=Y
|
||||||
|
|
||||||
lda XX
|
lda XX
|
||||||
sta oldx,X
|
sta oldx,X
|
||||||
|
tay
|
||||||
lda YY
|
lda YY
|
||||||
sta oldy,X
|
sta oldy,X
|
||||||
|
jsr PLOT ; PLOT AT Y,A
|
||||||
|
|
||||||
|
|
||||||
done_star:
|
done_star:
|
||||||
;7NEXT
|
;7NEXT
|
||||||
@ -174,6 +194,9 @@ done_star:
|
|||||||
dex
|
dex
|
||||||
bpl star_loop
|
bpl star_loop
|
||||||
|
|
||||||
|
lda #100
|
||||||
|
jsr WAIT
|
||||||
|
|
||||||
; GOTO2
|
; GOTO2
|
||||||
jmp big_loop
|
jmp big_loop
|
||||||
|
|
||||||
|
12
linker_scripts/apple2_36d.inc
Normal file
12
linker_scripts/apple2_36d.inc
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
MEMORY {
|
||||||
|
ZP: start = $00, size = $1A, type = rw;
|
||||||
|
RAM: start = $36d, size = $8E00, file = %O;
|
||||||
|
}
|
||||||
|
|
||||||
|
SEGMENTS {
|
||||||
|
CODE: load = RAM, type = ro;
|
||||||
|
RODATA: load = RAM, type = ro;
|
||||||
|
DATA: load = RAM, type = rw;
|
||||||
|
BSS: load = RAM, type = bss, define = yes;
|
||||||
|
ZEROPAGE: load = ZP, type = zp;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user