mirror of
https://github.com/deater/dos33fsprogs.git
synced 2025-03-04 04:30:18 +00:00
star_horiz: quick attempt at some BASIC
This commit is contained in:
parent
576c2d7bc9
commit
9c5af5412f
197
graphics/gr/plasmagoria/plasmag_hgr.s
Normal file
197
graphics/gr/plasmagoria/plasmag_hgr.s
Normal file
@ -0,0 +1,197 @@
|
||||
; PLASMAGORIA, Tiny version
|
||||
|
||||
; original code by French Touch
|
||||
|
||||
; trying to see how small I can get it
|
||||
|
||||
|
||||
; note can use $F000 (or similar) for color lookup to get passable
|
||||
; effect on fewer bytes
|
||||
|
||||
; 347 bytes -- initial with FAC
|
||||
; 343 bytes -- optimize init
|
||||
; 340 bytes -- move Table1 + Table2 to zero page
|
||||
; 331 bytes -- init not necessary
|
||||
; 319 bytes -- inline precalc + display + init lores colors
|
||||
; 316 bytes -- fallthrough in make_tiny
|
||||
|
||||
.include "hardware.inc"
|
||||
|
||||
|
||||
;Table1 = $8000
|
||||
;Table2 = $8000+64
|
||||
|
||||
; Page Zero
|
||||
|
||||
GBASL = $26
|
||||
GBASH = $27
|
||||
|
||||
COMPT1 = $30
|
||||
COMPT2 = $31
|
||||
|
||||
PARAM1 = $60
|
||||
PARAM2 = $61
|
||||
PARAM3 = $62
|
||||
PARAM4 = $63
|
||||
|
||||
Table1 = $A0 ; 40 bytes
|
||||
Table2 = $D0 ; 40 bytes
|
||||
|
||||
|
||||
; =============================================================================
|
||||
; ROUTINE MAIN
|
||||
; =============================================================================
|
||||
|
||||
plasma_debut:
|
||||
jsr HGR ; have table gen appear on hgr page1
|
||||
bit FULLGR
|
||||
|
||||
jsr make_tables
|
||||
|
||||
bit LORES ; set lo-res
|
||||
|
||||
|
||||
lores_colors_fine=$8100
|
||||
|
||||
; ============================================================================
|
||||
; init lores colors (inline)
|
||||
; ============================================================================
|
||||
|
||||
init_lores_colors:
|
||||
ldx #0
|
||||
ldy #0
|
||||
; 347
|
||||
|
||||
init_lores_colors_loop:
|
||||
lda lores_colors_lookup,X
|
||||
sta lores_colors_fine,Y
|
||||
iny
|
||||
sta lores_colors_fine,Y
|
||||
iny
|
||||
sta lores_colors_fine,Y
|
||||
iny
|
||||
sta lores_colors_fine,Y
|
||||
iny
|
||||
beq done_init_lores_colors
|
||||
|
||||
inx
|
||||
txa
|
||||
and #$f
|
||||
tax
|
||||
jmp init_lores_colors_loop
|
||||
|
||||
done_init_lores_colors:
|
||||
|
||||
; ============================================================================
|
||||
|
||||
do_plasma:
|
||||
; init
|
||||
|
||||
; lda #02
|
||||
; ldx #5
|
||||
;init_loop:
|
||||
; sta COMPT1,X
|
||||
; dex
|
||||
; bne init_loop
|
||||
|
||||
BP3:
|
||||
|
||||
; ============================================================================
|
||||
; Precalculate some values (inlined)
|
||||
; ROUTINES PRE CALCUL
|
||||
; ============================================================================
|
||||
precalc:
|
||||
lda PARAM1 ; self modify various parts
|
||||
sta pc_off1+1
|
||||
lda PARAM2
|
||||
sta pc_off2+1
|
||||
lda PARAM3
|
||||
sta pc_off3+1
|
||||
lda PARAM4
|
||||
sta pc_off4+1
|
||||
|
||||
; Table1(X) = sin1(PARAM1+X)+sin2(PARAM1+X)
|
||||
; Table2(X) = sin3(PARAM3+X)+sin1(PARAM4+X)
|
||||
|
||||
ldx #$28 ; 40
|
||||
pc_b1:
|
||||
pc_off1:
|
||||
lda sin1
|
||||
pc_off2:
|
||||
adc sin2
|
||||
sta Table1,X
|
||||
pc_off3:
|
||||
lda sin3
|
||||
pc_off4:
|
||||
adc sin1
|
||||
sta Table2,X
|
||||
|
||||
inc pc_off1+1
|
||||
inc pc_off2+1
|
||||
inc pc_off3+1
|
||||
inc pc_off4+1
|
||||
|
||||
dex
|
||||
bpl pc_b1
|
||||
|
||||
inc PARAM1
|
||||
inc PARAM1
|
||||
dec PARAM2
|
||||
inc PARAM3
|
||||
dec PARAM4
|
||||
|
||||
; ============================================================================
|
||||
; Display Routines
|
||||
; ROUTINES AFFICHAGES
|
||||
; ============================================================================
|
||||
|
||||
; Display "Normal"
|
||||
; AFFICHAGE "NORMAL"
|
||||
|
||||
display_normal:
|
||||
|
||||
ldx #23 ; lines 0-23 lignes 0-23
|
||||
|
||||
display_line_loop:
|
||||
|
||||
txa
|
||||
jsr GBASCALC
|
||||
|
||||
ldy #39 ; col 0-39
|
||||
|
||||
lda Table2,X ; setup base sine value for row
|
||||
sta display_row_sin_smc+1
|
||||
display_col_loop:
|
||||
lda Table1,Y ; load in column sine value
|
||||
display_row_sin_smc:
|
||||
adc #00 ; add in row value
|
||||
sta display_lookup_smc+1 ; patch in low byte of lookup
|
||||
display_lookup_smc:
|
||||
lda lores_colors_fine ; attention: must be aligned
|
||||
sta (GBASL),Y
|
||||
dey
|
||||
bpl display_col_loop
|
||||
dex
|
||||
bpl display_line_loop
|
||||
|
||||
; ============================================================================
|
||||
|
||||
inc COMPT1
|
||||
bne BP3
|
||||
|
||||
dec COMPT2
|
||||
bne BP3
|
||||
|
||||
beq do_plasma ; bra
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
lores_colors_lookup:
|
||||
.byte $00,$88,$55,$99,$ff,$bb,$33,$22,$66,$77,$44,$cc,$ee,$dd,$99,$11
|
||||
|
||||
|
||||
.include "make_tables.s"
|
||||
|
||||
|
202
graphics/gr/plasmagoria/plasmag_outline.s
Normal file
202
graphics/gr/plasmagoria/plasmag_outline.s
Normal file
@ -0,0 +1,202 @@
|
||||
; PLASMAGORIA, hi-res version
|
||||
|
||||
; original code by French Touch
|
||||
|
||||
|
||||
.include "hardware.inc"
|
||||
|
||||
hposn_high=$6000
|
||||
hposn_low =$6100
|
||||
|
||||
;Table1 = $8000
|
||||
;Table2 = $8000+64
|
||||
|
||||
HGR = $F3E2
|
||||
|
||||
; Page Zero
|
||||
|
||||
GBASL = $26
|
||||
GBASH = $27
|
||||
|
||||
COMPT1 = $30
|
||||
COMPT2 = $31
|
||||
|
||||
PARAM1 = $60
|
||||
PARAM2 = $61
|
||||
PARAM3 = $62
|
||||
PARAM4 = $63
|
||||
|
||||
Table1 = $A0 ; 40 bytes
|
||||
Table2 = $D0 ; 40 bytes
|
||||
|
||||
|
||||
; =============================================================================
|
||||
; ROUTINE MAIN
|
||||
; =============================================================================
|
||||
|
||||
plasma_debut:
|
||||
jsr HGR ; have table gen appear on hgr page1
|
||||
bit FULLGR
|
||||
|
||||
jsr build_tables
|
||||
|
||||
lores_colors_fine=$8100
|
||||
|
||||
; ============================================================================
|
||||
; init lores colors (inline)
|
||||
; ============================================================================
|
||||
|
||||
init_lores_colors:
|
||||
ldx #0
|
||||
ldy #0
|
||||
; 347
|
||||
|
||||
init_lores_colors_loop:
|
||||
lda lores_colors_lookup,X
|
||||
sta lores_colors_fine,Y
|
||||
iny
|
||||
sta lores_colors_fine,Y
|
||||
iny
|
||||
sta lores_colors_fine,Y
|
||||
iny
|
||||
sta lores_colors_fine,Y
|
||||
iny
|
||||
beq done_init_lores_colors
|
||||
|
||||
inx
|
||||
txa
|
||||
and #$f
|
||||
tax
|
||||
jmp init_lores_colors_loop
|
||||
|
||||
done_init_lores_colors:
|
||||
|
||||
; ============================================================================
|
||||
|
||||
do_plasma:
|
||||
; init
|
||||
|
||||
; lda #02
|
||||
; ldx #5
|
||||
;init_loop:
|
||||
; sta COMPT1,X
|
||||
; dex
|
||||
; bne init_loop
|
||||
|
||||
BP3:
|
||||
|
||||
; ============================================================================
|
||||
; Precalculate some values (inlined)
|
||||
; ROUTINES PRE CALCUL
|
||||
; ============================================================================
|
||||
precalc:
|
||||
lda PARAM1 ; self modify various parts
|
||||
sta pc_off1+1
|
||||
lda PARAM2
|
||||
sta pc_off2+1
|
||||
lda PARAM3
|
||||
sta pc_off3+1
|
||||
lda PARAM4
|
||||
sta pc_off4+1
|
||||
|
||||
; Table1(X) = sin1(PARAM1+X)+sin2(PARAM1+X)
|
||||
; Table2(X) = sin3(PARAM3+X)+sin1(PARAM4+X)
|
||||
|
||||
ldx #$28 ; 40
|
||||
pc_b1:
|
||||
pc_off1:
|
||||
lda sin1
|
||||
pc_off2:
|
||||
adc sin2
|
||||
sta Table1,X
|
||||
pc_off3:
|
||||
lda sin3
|
||||
pc_off4:
|
||||
adc sin1
|
||||
sta Table2,X
|
||||
|
||||
inc pc_off1+1
|
||||
inc pc_off2+1
|
||||
inc pc_off3+1
|
||||
inc pc_off4+1
|
||||
|
||||
dex
|
||||
bpl pc_b1
|
||||
|
||||
inc PARAM1
|
||||
inc PARAM1
|
||||
dec PARAM2
|
||||
inc PARAM3
|
||||
dec PARAM4
|
||||
|
||||
; ============================================================================
|
||||
; Display Routines
|
||||
; ROUTINES AFFICHAGES
|
||||
; ============================================================================
|
||||
|
||||
; Display "Normal"
|
||||
; AFFICHAGE "NORMAL"
|
||||
|
||||
display_normal:
|
||||
|
||||
ldx #23 ; lines 0-23 lignes 0-23
|
||||
|
||||
display_line_loop:
|
||||
|
||||
txa
|
||||
pha
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
tax
|
||||
lda hposn_high,X
|
||||
sta output_smc+2
|
||||
lda hposn_low,X
|
||||
sta output_smc+1
|
||||
pla
|
||||
tax
|
||||
|
||||
ldy #39 ; col 0-39
|
||||
|
||||
lda Table2,X ; setup base sine value for row
|
||||
sta display_row_sin_smc+1
|
||||
display_col_loop:
|
||||
lda Table1,Y ; load in column sine value
|
||||
display_row_sin_smc:
|
||||
adc #00 ; add in row value
|
||||
sta display_lookup_smc+1 ; patch in low byte of lookup
|
||||
display_lookup_smc:
|
||||
lda lores_colors_fine ; attention: must be aligned
|
||||
|
||||
output_smc:
|
||||
sta $2000,Y
|
||||
|
||||
dey
|
||||
bpl display_col_loop
|
||||
dex
|
||||
bpl display_line_loop
|
||||
|
||||
; ============================================================================
|
||||
|
||||
inc COMPT1
|
||||
bne BP3
|
||||
|
||||
dec COMPT2
|
||||
bne BP3
|
||||
|
||||
beq do_plasma ; bra
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
lores_colors_lookup:
|
||||
.byte $00,$88,$55,$99,$ff,$bb,$33,$22,$66,$77,$44,$cc,$ee,$dd,$99,$11
|
||||
|
||||
.include "hgr_table.s"
|
||||
|
||||
.align 256
|
||||
sin1:
|
||||
.incbin "tables"
|
||||
sin2=sin1+256
|
||||
sin3=sin2+256
|
@ -13,9 +13,10 @@ $(DOS33):
|
||||
cd ../../../utils/dos33fs-utils && make
|
||||
|
||||
starfield.dsk: $(DOS33) HELLO STARFIELD_DEMO STARFIELD_1K STARFIELD.BAS \
|
||||
STARSMALL STARBOT STARBOT_LOOKUP
|
||||
STARSMALL STARBOT STARBOT_LOOKUP STAR_HORIZ.BAS
|
||||
cp $(EMPTY_DISK)/empty.dsk starfield.dsk
|
||||
$(DOS33) -y starfield.dsk SAVE A HELLO
|
||||
$(DOS33) -y starfield.dsk SAVE A STAR_HORIZ.BAS
|
||||
$(DOS33) -y starfield.dsk SAVE A STARFIELD.BAS
|
||||
$(DOS33) -y starfield.dsk BSAVE -a 0x1000 STARFIELD_DEMO
|
||||
$(DOS33) -y starfield.dsk BSAVE -a 0x1000 STARFIELD_1K
|
||||
@ -33,6 +34,11 @@ HELLO: hello.bas
|
||||
STARFIELD.BAS: starfield.bas
|
||||
$(TOKENIZE) < starfield.bas > STARFIELD.BAS
|
||||
|
||||
###
|
||||
|
||||
STAR_HORIZ.BAS: star_horiz.bas
|
||||
$(TOKENIZE) < star_horiz.bas > STAR_HORIZ.BAS
|
||||
|
||||
|
||||
###
|
||||
|
||||
|
13
graphics/gr/starfield/star_horiz.bas
Normal file
13
graphics/gr/starfield/star_horiz.bas
Normal file
@ -0,0 +1,13 @@
|
||||
0 REM RYAN NORSE STARFIELD
|
||||
1 GR:DIM X(32),Y(32),V(32),Z(32)
|
||||
2FOR S=1 TO 32:X(S)=RND(1)*39:GOSUB100:NEXT
|
||||
3FORS=1TO32
|
||||
4COLOR=0:PLOTX(S),Y(S):X(S)=X(S)-V(S)
|
||||
5IFX(S)<0THENX(S)=39:GOSUB100
|
||||
8COLOR=Z(S):PLOT X(S),Y(S):NEXT
|
||||
9GOTO3
|
||||
100 Y(S)=RND(1)*39:V(S)=RND(1)
|
||||
110 Z=5:IFV(S)>0.3THENZ=7
|
||||
120IFV(S)>0.7THENZ=15
|
||||
130Z(S)=Z
|
||||
140 RETURN
|
15
graphics/gr/starfield/star_horiz_orig.bas
Normal file
15
graphics/gr/starfield/star_horiz_orig.bas
Normal file
@ -0,0 +1,15 @@
|
||||
0 REM RYAN NORSE STARFIELD
|
||||
1 GR:DIM X(32),Y(32),V(32)
|
||||
'2FOR I=1 TO 32:X(I)=INT(RND(1)*39)+1:Y(I)=INT(RND(1)*39)+1:V(I)=RND(1):NEXT
|
||||
100 FOR S=1 TO 32
|
||||
110 X(S)=X(S)-V(S)
|
||||
120 IF X(S)<1 THEN X(S)=39:Y(S)=INT(RND(1)*39):V(S)=RND(1)
|
||||
130 NEXT S
|
||||
140 FOR S=1 TO 32
|
||||
150 Z=5
|
||||
160 IF V(S)>0.3 THEN Z=7
|
||||
160 IF V(S)>0.7 THEN Z=15
|
||||
170 COLOR=Z
|
||||
180 PLOT X(S),Y(S)
|
||||
190 NEXT S
|
||||
200 GOTO 100
|
Loading…
x
Reference in New Issue
Block a user