hgr: update sample programs

This commit is contained in:
Vince Weaver 2021-01-25 20:39:16 -05:00
parent 446fb3b163
commit 2dfed8f5db
4 changed files with 41 additions and 339 deletions

View File

@ -2,17 +2,20 @@ include ../../Makefile.inc
DOS33 = ../../utils/dos33fs-utils/dos33
TOKENIZE = ../../utils/asoft_basic-utils/tokenize_asoft
B2D = ../../utils/bmp2dhr/b2d
LZSA = ~/research/lzsa/lzsa/lzsa
all: dhgr.dsk
dhgr.dsk: HELLO RASTER RASTER2 RASTER3 RASTER4 BITS LOTS
dhgr.dsk: HELLO RASTER RASTER2 RASTER3 RASTER4 BITS LOTS DHR_LOAD
cp empty.dsk dhgr.dsk
$(DOS33) -y plasma.dsk SAVE A HELLO
$(DOS33) -y dhgr.dsk SAVE A HELLO
$(DOS33) -y dhgr.dsk BSAVE -a 0x0300 RASTER
$(DOS33) -y dhgr.dsk BSAVE -a 0x0300 RASTER2
$(DOS33) -y dhgr.dsk BSAVE -a 0x0300 RASTER3
$(DOS33) -y dhgr.dsk BSAVE -a 0x0300 RASTER4
$(DOS33) -y dhgr.dsk BSAVE -a 0x1000 DHR_LOAD
$(DOS33) -y dhgr.dsk BSAVE -a 0x0300 BITS
$(DOS33) -y dhgr.dsk BSAVE -a 0x0300 LOTS
@ -21,6 +24,20 @@ dhgr.dsk: HELLO RASTER RASTER2 RASTER3 RASTER4 BITS LOTS
HELLO: hello.bas
$(TOKENIZE) < hello.bas > HELLO
###
C64.AUX.lzsa: C64.AUX
$(LZSA) -r -f2 C64.AUX C64.AUX.lzsa
C64.BIN.lzsa: C64.BIN
$(LZSA) -r -f2 C64.BIN C64.BIN.lzsa
###
C64.AUX: c64.bmp
$(B2D) c64.bmp A
###
RASTER: raster.o
@ -55,6 +72,15 @@ RASTER4: raster4.o
raster4.o: raster4.s
ca65 -o raster4.o raster4.s -l raster4.lst
###
DHR_LOAD: dhr_load.o
ld65 -o DHR_LOAD dhr_load.o -C ../../linker_scripts/apple2_1000.inc
dhr_load.o: dhr_load.s C64.AUX.lzsa C64.BIN.lzsa
ca65 -o dhr_load.o dhr_load.s -l dhr_load.lst
###

View File

@ -1,39 +1,21 @@
include ../../Makefile.inc
include ../../../Makefile.inc
DOS33 = ../../utils/dos33fs-utils/dos33
TOKENIZE = ../../utils/asoft_basic-utils/tokenize_asoft
DOS33 = ../../../utils/dos33fs-utils/dos33
TOKENIZE = ../../../utils/asoft_basic-utils/tokenize_asoft
LINKER_SCRIPTS = ../../../linker_scripts
all: hgr.dsk
all: snowflake.dsk
hgr.dsk: SNOW SNOW2 SNOW3 STARS FASTAR
cp empty.dsk hgr.dsk
$(DOS33) -y hgr.dsk BSAVE -a 0x0300 SNOW
$(DOS33) -y hgr.dsk BSAVE -a 0x0300 SNOW2
$(DOS33) -y hgr.dsk BSAVE -a 0x0367 SNOW3
$(DOS33) -y hgr.dsk BSAVE -a 0x0300 STARS
$(DOS33) -y hgr.dsk BSAVE -a 0x0C00 FASTAR
###
FASTAR: fastar.o
ld65 -o FASTAR fastar.o -C ../../linker_scripts/apple2_c00.inc
fastar.o: fastar.s
ca65 -o fastar.o fastar.s -l fastar.lst
###
STARS: stars.o
ld65 -o STARS stars.o -C ../../linker_scripts/apple2_300.inc
stars.o: stars.s
ca65 -o stars.o stars.s -l stars.lst
snowflake.dsk: SNOW SNOW2 SNOW3
cp empty.dsk snowflake.dsk
$(DOS33) -y snowflake.dsk BSAVE -a 0x0300 SNOW
$(DOS33) -y snowflake.dsk BSAVE -a 0x0300 SNOW2
$(DOS33) -y snowflake.dsk BSAVE -a 0x0367 SNOW3
###
SNOW: snow.o
ld65 -o SNOW snow.o -C ../../linker_scripts/apple2_300.inc
ld65 -o SNOW snow.o -C $(LINKER_SCRIPTS)/apple2_300.inc
snow.o: snow.s
ca65 -o snow.o snow.s -l snow.lst
@ -41,7 +23,7 @@ snow.o: snow.s
###
SNOW2: snow2.o
ld65 -o SNOW2 snow2.o -C ../../linker_scripts/apple2_300.inc
ld65 -o SNOW2 snow2.o -C $(LINKER_SCRIPTS)/apple2_300.inc
snow2.o: snow2.s
ca65 -o snow2.o snow2.s -l snow2.lst
@ -58,4 +40,4 @@ snow3.o: snow3.s
###
clean:
rm -f *~ *.o *.lst SNOW SNOW2 SNOW3 STARS
rm -f *~ *.o *.lst SNOW SNOW2 SNOW3

View File

@ -1,257 +0,0 @@
DRAW_PAGE = $E6
ZL = $06
ZH = $07
SEEDLO = $4E
SEEDHI = $4F
NUM1 = $F0
NUM1L = $F1
NUM2 = $F2
NUM2L = $F3
RESULT = $F4
RESULT2 = $F5
RESULT3 = $F6
RESULT4 = $F7
XL = $F8
XH = $F9
YL = $FA
YH = $FB
MINUS = $FC
Z = $FD
HGR2 = $F3D8
HPLOT0 = $F457 ; plot (Y,X), (A)
HGLIN = $F53A ; plot to (A,X), (Y)
HCLEAR0 = $F3F2 ; clear current hgr page to blackh
HCOLOR = $F6F0 ; color in X (must be 0..7)
lda #$ff
sta XH
ldx #0
jmp check_bounds
populate_loop:
; Z = XXYY YYYY
; C=Z*.125
; A=A+(A-64)*C
; B=B+(B-64)*C
; X is in NUM1 for this
lda #0
sta MINUS
sec
lda XH
sbc #64
bpl no_minus
set_minus:
inc MINUS
sec
lda #0
sbc XL
sta NUM1
lda #0
sbc XH
sta NUM1+1
jmp do_mult
no_minus:
sta NUM1+1
lda XL
sta NUM1
do_mult:
lda #0
sta NUM2+1
lda Z
sta NUM2
txa
pha
jsr mult16
pla
tax
; result has result but due to our fixed point
; we want to shift the whole thing left by 2
; then grab RESULT+2 as high and RESULT+1 as low
rol RESULT+1
rol RESULT+2
ror RESULT+1
lda RESULT+2
lda RESULT+1 ; low
sta NUM1
lda RESULT+2 ; hight
sta NUM1+1
; add to X; subtract if minus
lda MINUS
beq not_minus
sec
lda #00
sbc NUM1
sta NUM1
lda #00
sbc NUM1+1
sta NUM1+1
not_minus:
clc
lda XL
adc NUM1
sta XL
lda XH
adc NUM1+1
sta XH
; Z=Z+.125
clc
lda Z
adc #$8
sta Z
; check to see if out of bounds
check_bounds:
lda XH
bmi redo_point
lda YH
bpl all_good
redo_point:
; store a break in the lines
lda #0
sta $1000,X
sta $1100,X
sta Z ; needed?
inx
jsr rand16
sta XH
jsr rand16
sta YH
all_good:
; write out
lda XH
sta $1000,X
lda YH
sta $1100,X
inx
beq done_pop
jmp populate_loop
done_pop:
;=========================
;=========================
;=========================
jsr HGR2
ldx #3
jsr HCOLOR
ldx #0
star_loop:
txa
and #$1
beq page2
page1: ; draw page1, show page2
bit $C055
lda #$20
bne adjust_page
page2:
bit $C054
lda #$40
adjust_page:
sta DRAW_PAGE
; clear background
jsr HCLEAR0
txa
pha
lda $1100,X ; ycoord
beq skip_draw
pha
ldy $1000,X ; xcoord
tya
tax
ldy #0
pla
jsr HPLOT0 ; plot (Y,X), (A)
skip_draw:
pla
tax
inx
jmp star_loop
; make sure seed isn't 0000
rand16:
; batari rand16
lda SEEDHI
lsr
rol SEEDLO
bcc noeor
eor #$B4
noeor:
sta SEEDHI
eor SEEDLO
; we only want 127 bits
and #$7f
rts
;=====================
;=====================
; 16x16 -> 32 multiply
;=====================
;=====================
; destroys NUM2
mult16:
lda #0 ; Initialize RESULT to 0
sta RESULT+2
ldx #16 ; There are 16 bits in NUM2
L1:
lsr NUM2+1 ; top part of 16 bit shift right
ror NUM2
bcc L2 ; 0 or 1?
tay ; If 1, add NUM1 (hi byte of RESULT is in A)
clc
lda NUM1
adc RESULT+2
sta RESULT+2
tya
adc NUM1+1
L2:
ror ; "Stairstep" shift
ror RESULT+2
ror RESULT+1
ror RESULT
dex
bne L1
sta RESULT+3
rts

View File

@ -1,49 +0,0 @@
GBASL = $26
GBASH = $27
HGRPAGE = $E6
PAGE0 = $C054
PAGE1 = $C055
HGR = $F3E2
HGR2 = $F3D8
HCLR = $F3F2
HPOSN = $F411
WAIT = $FCA8 ;; delay 1/2(26+27A+5A^2) us
stars:
jsr HGR
jsr HGR2
; lda #0
; sta ybase
lda #$20
sta HGRPAGE
move_stars:
lda HGRPAGE
cmp #$20
beq show_page1
show_page2:
bit PAGE1
lsr HGRPAGE
bne doit
show_page1:
bit PAGE0
asl HGRPAGE
doit:
jsr HCLR
; FORI=1TO10
; A=X(I)
; B=Y(I)
; C=Z(I)*.1
; X(I)=A+(A-140)*C
; Y(I)=B+(B-96)*C
; Z(I)=Z(I)+.1
; IFX(I)<0ORX(I)>279ORY(I)<0ORY(I)>191THENX(I)=RND(1)*280:Y(I)=RND(1)*192:Z(I)=0:GOTO7
;HPLOTA,BTOX(I),Y(I)
;NEXTI
jmp move_stars