mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-12-23 22:29:38 +00:00
mode7: update demo
This commit is contained in:
parent
e39c4f0e68
commit
423eb8f95c
@ -10,7 +10,8 @@ $(DOS33):
|
||||
cd ../dos33fs-utils && make
|
||||
|
||||
mode7.dsk: $(DOS33) MODE7_ISLAND MODE7_CHECKERBOARD MODE7_RAINBOW \
|
||||
PLOT_TEST SCROLL_DEMO SKY_DEMO STARFIELD_DEMO
|
||||
PLOT_TEST SCROLL_DEMO SKY_DEMO STARFIELD_DEMO \
|
||||
STARFIELD_1K
|
||||
$(DOS33) -y mode7.dsk BSAVE -a 0x1000 MODE7_ISLAND
|
||||
$(DOS33) -y mode7.dsk BSAVE -a 0x1000 MODE7_CHECKERBOARD
|
||||
$(DOS33) -y mode7.dsk BSAVE -a 0x1000 MODE7_RAINBOW
|
||||
@ -18,6 +19,7 @@ mode7.dsk: $(DOS33) MODE7_ISLAND MODE7_CHECKERBOARD MODE7_RAINBOW \
|
||||
$(DOS33) -y mode7.dsk BSAVE -a 0x1000 SCROLL_DEMO
|
||||
$(DOS33) -y mode7.dsk BSAVE -a 0x1000 SKY_DEMO
|
||||
$(DOS33) -y mode7.dsk BSAVE -a 0x1000 STARFIELD_DEMO
|
||||
$(DOS33) -y mode7.dsk BSAVE -a 0x1000 STARFIELD_1K
|
||||
|
||||
|
||||
|
||||
@ -111,6 +113,16 @@ starfield_demo.o: starfield_demo.s \
|
||||
../asm_routines/gr_fast_clear.s
|
||||
ca65 -o starfield_demo.o starfield_demo.s -l starfield_demo.lst
|
||||
|
||||
STARFIELD_1K: starfield_1k.o
|
||||
ld65 -o STARFIELD_1K starfield_demo.o -C ./apple2_1000.inc
|
||||
|
||||
starfield_1k.o: starfield_1k.s \
|
||||
../asm_routines/gr_scroll.s \
|
||||
../asm_routines/pageflip.s \
|
||||
../asm_routines/gr_setpage.s \
|
||||
../asm_routines/gr_fast_clear.s
|
||||
ca65 -o starfield_1k.o starfield_1k.s -l starfield_1k.lst
|
||||
|
||||
scroller: scroller.o
|
||||
$(CC) $(LFLAGS) -o scroller scroller.o
|
||||
|
||||
@ -126,5 +138,5 @@ background.o: background.c
|
||||
clean:
|
||||
rm -f *~ *.o scroller background \
|
||||
MODE7 MODE7_ISLAND MODE7_CHECKERBOARD MODE7_RAINBOW \
|
||||
PLOT_TEST SCROLL_DEMO *.lst
|
||||
PLOT_TEST SCROLL_DEMO STARFIELD_DEMO STARFIELD_1K *.lst
|
||||
|
||||
|
323
mode7/starfield_1k.s
Normal file
323
mode7/starfield_1k.s
Normal file
@ -0,0 +1,323 @@
|
||||
.include "zp.inc"
|
||||
|
||||
;===========
|
||||
; CONSTANTS
|
||||
;===========
|
||||
|
||||
NUMSTARS EQU 16
|
||||
|
||||
|
||||
;=====================
|
||||
; Starfield
|
||||
;=====================
|
||||
|
||||
;================================
|
||||
; Clear screen and setup graphics
|
||||
;================================
|
||||
|
||||
jsr clear_screens ; clear top/bottom of page 0/1
|
||||
jsr set_gr_page0
|
||||
|
||||
; Initialize the 2kB of multiply lookup tables
|
||||
jsr init_multiply_tables
|
||||
|
||||
|
||||
;===============
|
||||
; Init Variables
|
||||
;===============
|
||||
lda #0 ; 2
|
||||
sta DRAW_PAGE ; 3
|
||||
sta RANDOM_POINTER ; 3
|
||||
; always multiply with low byte as zero
|
||||
sta NUM2L ; 3
|
||||
|
||||
|
||||
ldy #(NUMSTARS-1) ; 2
|
||||
init_stars:
|
||||
jsr random_star ; 6
|
||||
dey ; 2
|
||||
bpl init_stars ; 2nt/3
|
||||
|
||||
;===========================
|
||||
;===========================
|
||||
; Main Loop
|
||||
;===========================
|
||||
;===========================
|
||||
|
||||
starfield_loop:
|
||||
|
||||
;===============
|
||||
; clear screen
|
||||
;===============
|
||||
jsr clear_top ; 6+
|
||||
; 6047
|
||||
;===============
|
||||
; draw stars
|
||||
;===============
|
||||
|
||||
|
||||
; start at 15 and count down (rather than 0 and count up)
|
||||
ldx #(NUMSTARS-1) ; 2
|
||||
|
||||
draw_stars:
|
||||
stx XX ; 3
|
||||
|
||||
;================
|
||||
; calculate color
|
||||
;================
|
||||
|
||||
lda #$ff ; want if z<16, color = 5 ; 2
|
||||
sta COLOR ; if 16<z<32 color = 13 ; 3
|
||||
; if 32<z<64 color = 15
|
||||
|
||||
lda star_z,X ; 4
|
||||
tay ; put star_z[i] in X for later ; 2
|
||||
|
||||
cmp #32 ; 2
|
||||
bpl done_color ; 2nt/3
|
||||
|
||||
cmp #16 ; 15 -1 16 0 17 1 ; 2
|
||||
bpl second_color ; 2nt/3
|
||||
|
||||
lda #$55 ; 2
|
||||
sta COLOR ; 3
|
||||
|
||||
jmp done_color ; 3
|
||||
second_color:
|
||||
lda #$dd ; 2
|
||||
sta COLOR ; 3
|
||||
|
||||
done_color:
|
||||
|
||||
|
||||
; calculate x value, stars[i].x/stars[i].z
|
||||
|
||||
; put 1/stars[i].z in NUM1H:NUM1L and multiply
|
||||
|
||||
lda z_table,Y ; 4
|
||||
sta NUM1L ; F ; 3
|
||||
|
||||
; adjust spacez for 58+
|
||||
; all this logic to avoid having a 128 byte table of mostly zero
|
||||
|
||||
lda #0 ; I ; 2
|
||||
clc ; 2
|
||||
cpy #60 ; 59 -1 60 0 61 1 ; 2
|
||||
bmi no_adjust ; 2nt/3
|
||||
adc #1 ; 60, 61 = 1 ; 2
|
||||
cpy #62 ; 61 -1 62 0 63 1 ; 2
|
||||
bmi no_adjust ; 2nt/3
|
||||
adc #1 ; 62 = 2 ; 2
|
||||
cpy #63 ; 62 = -1 63 = 0 64 = not possible ; 2
|
||||
bne no_adjust ; 2nt/3
|
||||
adc #2 ; 63 = 4 ; 2
|
||||
no_adjust:
|
||||
sta NUM1H ; store int part of spacez ; 3
|
||||
|
||||
; load stars[i].x into NUM2H:NUM2L
|
||||
; NUM2L is always zero
|
||||
ldy XX ; 3
|
||||
|
||||
lda star_x,Y ; 4
|
||||
sta NUM2H ; 3
|
||||
|
||||
|
||||
sec ; don't reuse old values ; 2
|
||||
jsr multiply ; 6+?
|
||||
|
||||
; integer result in X
|
||||
txa ; 2
|
||||
clc ; 2
|
||||
adc #20 ; center on screen ; 2
|
||||
|
||||
sta XPOS ; save for later ; 3
|
||||
|
||||
; calculate y value, stars[i].y/stars[i].z
|
||||
|
||||
; 1/stars[i].z is still in NUM1H:NUM1L
|
||||
|
||||
ldy XX ; reload index ; 3
|
||||
|
||||
lda star_y,Y ; load integer part of star_ ; 4
|
||||
sta NUM2H ; 3
|
||||
clc ; reuse old values ; 2
|
||||
jsr multiply ; 6+
|
||||
|
||||
; integer result in X
|
||||
txa ; 2
|
||||
clc ; 2
|
||||
adc #20 ; center the value ; 2
|
||||
|
||||
tay ; Y is YPOS ; 2
|
||||
sty YPOS ; put Y value in Y to plot ; 3
|
||||
|
||||
|
||||
;============================
|
||||
; Check Limits
|
||||
;============================
|
||||
|
||||
; ldy YPOS
|
||||
bmi new_star ; 2nt/3
|
||||
cpy #40 ; 2
|
||||
bpl new_star ; if < 0 or > 40 then done ; 2nt/3
|
||||
|
||||
lda XPOS ; 3
|
||||
bmi new_star ; 2nt/3
|
||||
cmp #40 ; 2
|
||||
bpl new_star ; if < 0 or > 40 then done ; 2nt/3
|
||||
|
||||
; FIXME: sort out all of these jumps to be more efficient
|
||||
bmi plot_star ; 2
|
||||
|
||||
new_star:
|
||||
ldy XX ; 3
|
||||
jsr random_star ; 6
|
||||
|
||||
jmp plot_star_continue ; 3
|
||||
|
||||
plot_star:
|
||||
jsr plot ; 6
|
||||
|
||||
plot_star_continue:
|
||||
|
||||
;==============================
|
||||
ldx XX ; 3
|
||||
|
||||
dex ; 2
|
||||
bmi move_stars ; 2nt/3
|
||||
bpl draw_stars ; 2nt/3
|
||||
; jmp draw_stars
|
||||
|
||||
|
||||
;=============================
|
||||
; Move stars
|
||||
move_stars:
|
||||
ldy #(NUMSTARS-1) ; 2
|
||||
move_stars_loop:
|
||||
; increment z
|
||||
clc ; if z >= 64 new star ; 2
|
||||
lda star_z,Y ; 4
|
||||
adc #1 ; 2
|
||||
sta star_z,Y ; 4
|
||||
and #64 ; 2
|
||||
beq move_loop_skip ; 2nt/3
|
||||
|
||||
jsr random_star ; new random star ; 6
|
||||
|
||||
move_loop_skip:
|
||||
dey ; 2
|
||||
bpl move_stars_loop ; 2nt/3
|
||||
|
||||
|
||||
|
||||
starfield_keyboard:
|
||||
|
||||
; jsr get_key ; get keypress ; 6
|
||||
|
||||
; lda LASTKEY ; 3
|
||||
|
||||
; beq starfield_keyboard
|
||||
|
||||
; cmp #('Q') ; if quit, then return
|
||||
; bne skipskip
|
||||
; rts
|
||||
|
||||
skipskip:
|
||||
|
||||
;==================
|
||||
; flip pages
|
||||
;==================
|
||||
|
||||
jsr page_flip ; 6
|
||||
|
||||
;==================
|
||||
; loop forever
|
||||
;==================
|
||||
|
||||
jmp starfield_loop ; 3
|
||||
|
||||
|
||||
; matches scroll_row1 - row3
|
||||
star_x EQU $8A00
|
||||
star_y EQU $8B00
|
||||
star_z EQU $8C00
|
||||
|
||||
;===================
|
||||
; star number in Y
|
||||
; FIXME: increment at end?
|
||||
; X trashed
|
||||
random_star:
|
||||
; random x location
|
||||
ldx RANDOM_POINTER ; 3
|
||||
|
||||
lda random_table,X ; 4
|
||||
sta star_x,Y ; 5
|
||||
inx ; 2
|
||||
|
||||
; random y location
|
||||
lda random_table,X ; 4
|
||||
sta star_y,Y ; 5
|
||||
inx ; 2
|
||||
|
||||
; random z location
|
||||
lda random_table,X ; 4
|
||||
and #$3f ; 2
|
||||
sta star_z,Y ; 5
|
||||
inx ; 2
|
||||
|
||||
bpl clear_x
|
||||
|
||||
txa
|
||||
and #$3
|
||||
tax
|
||||
|
||||
clear_x:
|
||||
stx RANDOM_POINTER ; 3
|
||||
|
||||
rts ; 6
|
||||
|
||||
;===============================================
|
||||
; External modules
|
||||
;===============================================
|
||||
|
||||
.include "../asm_routines/pageflip.s"
|
||||
.include "../asm_routines/gr_setpage.s"
|
||||
;.include "../asm_routines/keypress.s"
|
||||
;.include "../asm_routines/gr_putsprite.s"
|
||||
.include "../asm_routines/gr_offsets.s"
|
||||
.include "../asm_routines/gr_fast_clear.s"
|
||||
.include "../asm_routines/gr_plot.s"
|
||||
.include "../asm_routines/multiply_fast.s"
|
||||
|
||||
|
||||
;======================
|
||||
; some "random" numbers
|
||||
;======================
|
||||
random_table:
|
||||
.byte 103,198,105,115, 81,255, 74,236, 41,205,186,171,242,251,227, 70
|
||||
.byte 124,194, 84,248, 27,232,231,141,118, 90, 46 ,99, 51,159,201,154
|
||||
.byte 102, 50, 13,183, 49, 88,163, 90, 37, 93, 5, 23, 88,233, 94,212
|
||||
.byte 171,178,205,198,155,180, 84, 17, 14,130,116, 65, 33, 61,220,135
|
||||
.byte 112,233, 62,161, 65,225,252,103, 62, 1,126,151,234,220,107,150
|
||||
.byte 143, 56, 92, 42,236,176, 59,251, 50,175, 60, 84,236, 24,219, 92
|
||||
.byte 2, 26,254, 67,251,250,170, 58,251, 41,209,230, 5, 60,124,148
|
||||
.byte 117,216,190, 97,137,249, 92,187,168,153, 15,149,177,235,241,179
|
||||
.byte 5,239,247, 0,233,161; , 58,229,202, 11,203,208, 72, 71,100,189
|
||||
;.byte 31, 35, 30,168, 28,123,100,197, 20,115, 90,197, 94, 75,121, 99
|
||||
;.byte 59,112,100, 36, 17,158, 9,220,170,212,172,242, 27, 16,175, 59
|
||||
;.byte 51,205,227, 80, 72, 71, 21, 92,187,111, 34, 25,186,155,125,245
|
||||
;.byte 11,225, 26, 28,127, 35,248, 41,248,164, 27, 19,181,202, 78,232
|
||||
;.byte 152, 50, 56,224,121, 77, 61, 52,188, 95, 78,119,250,203,108, 5
|
||||
;.byte 172,134, 33, 43,170, 26, 85,162,190,112,181,115, 59, 4, 92,211
|
||||
;.byte 54,148,179,175,226,240,228,158, 79, 50, 21, 73,253,130, 78,169
|
||||
|
||||
z_table:
|
||||
; 1/16.0 - 1/12.25
|
||||
.byte $10,$10,$10,$10,$11,$11,$11,$11,$12,$12,$12,$13,$13,$14,$14,$14
|
||||
; 1/12.0 - 1/8.25
|
||||
.byte $15,$15,$16,$16,$17,$17,$18,$18,$19,$1A,$1A,$1B,$1C,$1D,$1E,$1F
|
||||
; 1/8.0 - 1/4.25
|
||||
.byte $20,$21,$22,$23,$24,$25,$27,$28,$2A,$2C,$2E,$30,$33,$35,$38,$3C
|
||||
; 1/4.0 - 1/0.25
|
||||
.byte $40,$44,$49,$4E,$55,$5D,$66,$71,$80,$92,$AA,$CC,$00,$55,$00,$00
|
||||
|
@ -180,34 +180,33 @@ plot_star:
|
||||
|
||||
plot_star_continue:
|
||||
|
||||
|
||||
;==============================
|
||||
ldx XX
|
||||
ldx XX ; 3
|
||||
|
||||
dex
|
||||
bmi move_stars
|
||||
; bpl draw_stars
|
||||
jmp draw_stars
|
||||
dex ; 2
|
||||
bmi move_stars ; 2nt/3
|
||||
bpl draw_stars ; 2nt/3
|
||||
; jmp draw_stars
|
||||
|
||||
|
||||
;=============================
|
||||
; Move stars
|
||||
move_stars:
|
||||
ldy #(NUMSTARS-1)
|
||||
ldy #(NUMSTARS-1) ; 2
|
||||
move_stars_loop:
|
||||
; increment z
|
||||
clc ; if z >= 64 new star ; 2
|
||||
lda star_z,Y ; 4
|
||||
adc #1 ; 2
|
||||
sta star_z,Y ; 4
|
||||
and #64 ; 2
|
||||
beq move_loop_skip ; 2nt/3
|
||||
|
||||
clc
|
||||
lda star_z,Y
|
||||
adc #1
|
||||
sta star_z,Y
|
||||
and #64
|
||||
beq move_loop_skip
|
||||
|
||||
jsr random_star
|
||||
jsr random_star ; new random star ; 6
|
||||
|
||||
move_loop_skip:
|
||||
dey
|
||||
bpl move_stars_loop
|
||||
dey ; 2
|
||||
bpl move_stars_loop ; 2nt/3
|
||||
|
||||
|
||||
|
||||
@ -217,6 +216,8 @@ starfield_keyboard:
|
||||
|
||||
; lda LASTKEY ; 3
|
||||
|
||||
; beq starfield_keyboard
|
||||
|
||||
; cmp #('Q') ; if quit, then return
|
||||
; bne skipskip
|
||||
; rts
|
||||
@ -247,25 +248,26 @@ star_z EQU $8C00
|
||||
; X trashed
|
||||
random_star:
|
||||
; random x location
|
||||
ldx RANDOM_POINTER
|
||||
lda random_table,X
|
||||
inc RANDOM_POINTER
|
||||
sta star_x,Y
|
||||
ldx RANDOM_POINTER ; 3
|
||||
|
||||
lda random_table,X ; 4
|
||||
sta star_x,Y ; 5
|
||||
inx ; 2
|
||||
|
||||
; random y location
|
||||
ldx RANDOM_POINTER
|
||||
lda random_table,X
|
||||
inc RANDOM_POINTER
|
||||
sta star_y,Y
|
||||
lda random_table,X ; 4
|
||||
sta star_y,Y ; 5
|
||||
inx ; 2
|
||||
|
||||
; random z location
|
||||
ldx RANDOM_POINTER
|
||||
lda random_table,X
|
||||
inc RANDOM_POINTER
|
||||
and #$3f
|
||||
sta star_z,Y
|
||||
lda random_table,X ; 4
|
||||
and #$3f ; 2
|
||||
sta star_z,Y ; 5
|
||||
inx ; 2
|
||||
|
||||
rts
|
||||
stx RANDOM_POINTER ; 3
|
||||
|
||||
rts ; 6
|
||||
|
||||
;===============================================
|
||||
; External modules
|
||||
@ -278,12 +280,6 @@ random_star:
|
||||
.include "../asm_routines/gr_offsets.s"
|
||||
.include "../asm_routines/gr_fast_clear.s"
|
||||
.include "../asm_routines/gr_plot.s"
|
||||
|
||||
;===============================================
|
||||
; Variables
|
||||
;===============================================
|
||||
|
||||
|
||||
.include "../asm_routines/multiply_fast.s"
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user