seasons: update before submission

This commit is contained in:
Vince Weaver 2020-05-19 12:19:50 -04:00
parent a3fb3a16f7
commit 7db01990ea
10 changed files with 110 additions and 112 deletions

View File

@ -1,34 +0,0 @@
include ../Makefile.inc
DOS33 = ../dos33fs-utils/dos33
PNG_TO_40x96 = ../gr-utils/png_to_40x96
PNG_TO_40x48D = ../gr-utils/png_to_40x48d
PNG2RLE = ../gr-utils/png2rle
B2D = ../bmp2dhr/b2d
all: autumn.dsk
autumn.dsk: HELLO AUTUMN
cp empty.dsk autumn.dsk
$(DOS33) -y autumn.dsk SAVE A HELLO
$(DOS33) -y autumn.dsk BSAVE -a 0x1000 AUTUMN
AUTUMN: autumn.o
ld65 -o AUTUMN autumn.o -C ../linker_scripts/apple2_1000.inc
autumn.o: autumn.s
ca65 -o autumn.o autumn.s -l autumn.lst
###
HELLO: hello.bas
../asoft_basic-utils/tokenize_asoft < hello.bas > HELLO
####
clean:
rm -f *~ *.o *.lst HELLO AUTUMN

View File

@ -1,4 +0,0 @@
5 HOME
100 PRINT "SOME DEMOS BASED ON"
110 PRINT "HELLMOOD'S AUTUMN"
120 PRINT CHR$(4);"CATALOG"

35
seasons/Makefile Normal file
View File

@ -0,0 +1,35 @@
include ../Makefile.inc
DOS33 = ../dos33fs-utils/dos33
PNG_TO_40x96 = ../gr-utils/png_to_40x96
PNG_TO_40x48D = ../gr-utils/png_to_40x48d
PNG2RLE = ../gr-utils/png2rle
B2D = ../bmp2dhr/b2d
all: seasons.dsk
seasons.dsk: HELLO SEASONS
cp empty.dsk seasons.dsk
$(DOS33) -y seasons.dsk SAVE A HELLO
$(DOS33) -y seasons.dsk BSAVE -a 0x50 SEASONS
SEASONS: seasons.o
# ld65 -o SEASONS seasons.o -C ../linker_scripts/apple2_1000.inc
ld65 -o SEASONS seasons.o -C ../linker_scripts/apple2_50_zp.inc
seasons.o: seasons.s
ca65 -o seasons.o seasons.s -l seasons.lst
###
HELLO: hello.bas
../asoft_basic-utils/tokenize_asoft < hello.bas > HELLO
####
clean:
rm -f *~ *.o *.lst HELLO SEASONS

6
seasons/hello.bas Normal file
View File

@ -0,0 +1,6 @@
5 HOME
100 PRINT " APPLE II SEASONS 128B DEMO"
110 PRINT " -=DESIRE=- / OUTLINE 2020"
115 PRINT
117 PRINT "TO RUN, TYPE: BRUN SEASONS":PRINT
120 PRINT CHR$(4);"CATALOG"

View File

@ -1,26 +1,31 @@
; Autumn, based on the code in Hellmood's Autumn ; Apple II Seasons -=DESiRE=- 128B Demo for Outline 2020
; based on the code in Hellmood's 64B x86 demo "Autumn"
; by deater (Vince Weaver) <vince@deater.net> ; by deater (Vince Weaver) <vince@deater.net>
; DOS version is 64 bytes ; DOS version is 64 bytes
; original Apple II 6502 port was 167 bytes ; original Apple II 6502 port was 167 bytes
; I got it down to 126 bytes ; I got it down to 126 bytes
; qkumba got it down to 116 ; qkumba got it down to 116
; color-cycling brought it back up to 127 bytes
; To save space, runs from the zero page starting at $50
; need to avoid $E0-$E5 used by the hgr/hplot routines
; Zero Page Addresses ; Zero Page Addresses
XCOORDL = $F0 XCOORDL = $F3
XCOORDH = $F1 XCOORDH = $F4
YCOORDL = $F2 YCOORDL = $F5
YCOORDH = $F3 YCOORDH = $F6
EBP1 = $F4 EBP1 = $F7
EBP2 = $F5 EBP2 = $F8
EBP3 = $F6 EBP3 = $F9
EBP4 = $F7 EBP4 = $FA
COLORL = $F8 COLORL = $FB
COLORH = $F9 COLORH = $FC
SOUND = $FA SOUND = $FD
FRAMEL = $FB FRAMEL = $FE
FRAMEH = $FC FRAMEH = $FF
; Soft Switches ; Soft Switches
KEYPRESS= $C000 KEYPRESS= $C000
@ -37,9 +42,10 @@ HGR2 = $F3D8 ; Set full-screen hi-res mode using page 2 ($4000)
HPLOT0 = $F457 ; Plot point, (Y,X) = Horizontal, (A=Vertical) HPLOT0 = $F457 ; Plot point, (Y,X) = Horizontal, (A=Vertical)
HCOLOR = $F6EC ; Set color in X, must be 0..7 HCOLOR = $F6EC ; Set color in X, must be 0..7
XDRAW1 = $F661 ; use zero-page addressing to save space
.zeropage
autumn: seasons:
;=================== ;===================
; init screen ; Instruction Length ; init screen ; Instruction Length
@ -61,7 +67,7 @@ autumn:
; stx COLORH ; 2 ; stx COLORH ; 2
autumn_forever: seasons_forever:
; save old Xcoord value to X/Y for later ; save old Xcoord value to X/Y for later
; push/pop is 1 byte each but have to get ; push/pop is 1 byte each but have to get
@ -156,7 +162,7 @@ label_11f:
and #$7 ; 2 and #$7 ; 2
smc: smc:
ora #$1 ; 2 ora #$2 ; 2
tax ; 1 tax ; 1
; if using color lookup table ; if using color lookup table
@ -165,46 +171,62 @@ smc:
; if ycoord negative, loop ; if ycoord negative, loop
lda YCOORDH ; 2 lda YCOORDH ; 2
bmi autumn_forever ; 2 bmi seasons_forever ; 2
; if top bits of xcoord, loop ; if top bits of xcoord, loop
lda XCOORDH ; 2 lda XCOORDH ; 2
and #$f0 ; 2 and #$f0 ; 2
bne autumn_forever ; 2 bne seasons_forever ; 2
put_pixel: put_pixel:
; actually set the color ; actually set the color
jsr HCOLOR ; 3 jsr HCOLOR ; 3 ; color is in X
; set up paramaters for HPLOT call ; set up paramaters for HPLOT ROM call
ldx XCOORDL ; 2 ldx XCOORDL ; 2 ; x coord in (y:x)
ldy XCOORDH ; 2 ldy XCOORDH ; 2
lda YCOORDL ; 2 lda YCOORDL ; 2 ; y coord in A
jsr HPLOT0 ; 3 jsr HPLOT0 ; 3
; inc FRAMEL ; 2 ; flip palettes when color at $4200 (roughly 0,32 on screen)
; bne no_frame ; 2 ; changes. This is sort of arbitrary, but having a 16-bit counter
; inc FRAMEH ; 2 ; takes too many instructions and Apple II doesn't have a
;no_frame: ; programmable timer
; lda smc
; eor #$3
; sta smc
lda $4200 ; 3 ; check colors at 0,32
bmi seasons_forever ; 2
; flip between blue/purple and orange/green palettes
; with self-modifying code. 2 bytes are saved when
; we execute in the zero page
lda smc+1 ; 2
eor #$3 ; 2
sta smc+1 ; 2
; the adc/sbc in HPLOT0 leave the V flag clear
; so we can save a byte (over jump) by using bvc
bvc seasons_forever ; 2
; Thankfully not necessary for a 128B demo?
; lda KEYPRESS ; 3 ; see if key pressed ; lda KEYPRESS ; 3 ; see if key pressed
; bpl autumn_forever ; 2 ; loop if not ; bpl seasons_forever ; 2 ; loop if not
; bit KEYRESET
bvc autumn_forever ; 2 ; smaller than jump
; V flag clear because
; the adc/sbc in HPOSN
; never overflows?
exit_to_prompt: exit_to_prompt:
; jsr TEXT ; 3 ; return to text mode ; jsr TEXT ; 3 ; return to text mode
; jmp $3D0 ; 3 ; return to Applesoft prompt ; jmp $3D0 ; 3 ; return to Applesoft prompt
;========================================================
;========================================================
; color lookup tables used when testing
; some of them look better, but make the executable bigger
; than the AND/OR version of setting colors
; Apple II Hi-Res Colors ; Apple II Hi-Res Colors
; It's all NTSC artifacting and complex ; It's all NTSC artifacting and complex
; There can be color-clash at a 3.5 pixel level ; There can be color-clash at a 3.5 pixel level
@ -221,54 +243,27 @@ exit_to_prompt:
color_lookup: color_lookup:
; my default, colorful palette ; colorful palette
; .byte $01,$01,$02,$03, $05,$05,$06,$07 ; .byte $01,$01,$02,$03, $05,$05,$06,$07
; or 10
; 0000 0010 2 2
; 0001 0011 3 2
; 0010 0010 2 3
; 0011 0011 3 6
; 0100 0110 6 6
; 0101 0111 7 6
; 0110 0110 6 2
; 0111 0111 7 7
; want eor1
; 0000 0010 0001
; 0001 0010 0000
; 0010 0011 0011
; 0011 0110 0010
; 0100 0110 0101
; 0101 0110 0100
; 0110 0010 0111
; 0111 0111 0110
; blue and purple palette ; blue and purple palette
; .byte $02,$02,$03,$06, $06,$06,$02,$07 ; .byte $02,$02,$03,$06, $06,$06,$02,$07
; qkumba ora2 white/blue/purple ; qkumba ora2 white/blue/purple
; .byte $02,$03,$02,$03, $06,$07,$06,$07 ; .byte $02,$03,$02,$03, $06,$07,$06,$07
; ora1 white/orange/green
; .byte $01,$01,$03,$03, $05,$05,$07,$07
; better mixed orange/green/white
; .byte $01,$03,$03,$03, $05,$05,$07,$07
; orange and green palette ; orange and green palette
; .byte $01,$01,$03,$05, $05,$05,$01,$07 ; .byte $01,$01,$03,$05, $05,$05,$01,$07
; .byte $01,$03,$01,$03, $05,$07,$05,$07 ; .byte $01,$00,$01,$00, $05,$00,$05,$00
; .byte $01,$01,$03,$03, $05,$05,$07,$07
; "Leaf" Locations ; "Leaf" Locations
; TOP-LEFT ?? CENTER-TOP TOP-RIGHT LEFT ?? CENTER-BOTTOM ?? ; TOP-LEFT ?? CENTER-TOP TOP-RIGHT LEFT ?? CENTER-BOTTOM ??
; FANCY OPENER
; SET ADDRESS in 1a/Ab
; lda #xx ; 2
; sta 1a ; 2
; lda #xx ; 2
; sta 1b ; 2
; lda angle ; 2
; jsr xdraw1 ; 3