second: work on animation

This commit is contained in:
Vince Weaver 2023-09-17 01:10:45 -04:00
parent 8c4fd13ca3
commit ae595b8117
8 changed files with 382 additions and 7 deletions

View File

@ -13,14 +13,16 @@ all: second.dsk
# $(DOS33) -y second.dsk SAVE A HELLO
# $(DOS33) -y second.dsk BSAVE -a 0x6000 ZW
second.dsk: QBOOT QLOAD SECOND MUSIC
second.dsk: QBOOT QLOAD SECOND MUSIC \
./part18_3d/THREED
cp $(EMPTY_DISK) second.dsk
$(DOS33_RAW) second.dsk 0 0 QBOOT 0 1
$(DOS33_RAW) second.dsk 0 2 QBOOT 1 1
$(DOS33_RAW) second.dsk 0 4 QBOOT 2 1
$(DOS33_RAW) second.dsk 1 0 QLOAD 0 0
$(DOS33_RAW) second.dsk 3 0 MUSIC 0 0
$(DOS33_RAW) second.dsk 5 0 SECOND 0 0
# $(DOS33_RAW) second.dsk 5 0 SECOND 0 0
$(DOS33_RAW) second.dsk 5 0 ./part18_3d/THREED 0 0
####

View File

@ -0,0 +1,39 @@
;
;
; optional color, x1,y1 x2,y2
;
; HLIN x1,x2 at y1
; VLIN y1,y2 at X1
; PLOT x1,y1
; BOX x1,y1 to x2,y2
; CLEAR -
num_scenes=2
frame15:
.byte SET_COLOR | BLACK
.byte CLEAR
.byte SET_COLOR | WHITE
.byte BOX, 4, 6, 35,41
.byte END
frame16:
.byte SET_COLOR | BLACK
.byte CLEAR
.byte SET_COLOR | WHITE
.byte BOX, 4, 6, 27,41
.byte SET_COLOR | BROWN
.byte BOX, 28, 6, 35,34
.byte SET_COLOR | GREY1
.byte BOX, 28, 19, 33, 21
.byte BOX, 28, 35, 35, 38
.byte HLIN, 28, 31, 18
.byte HLIN, 28, 30, 34
.byte HLIN, 33, 35, 39
.byte SET_COLOR | RED
.byte HLIN, 28, 32, 21
.byte SET_COLOR | LIGHT_BLUE
.byte HLIN, 28, 33, 22
.byte HLIN, 28, 30, 23
.byte END

View File

@ -0,0 +1,22 @@
include ../../../Makefile.inc
DOS33 = ../../../utils/dos33fs-utils/dos33
DOS33_RAW = ../../../utils/dos33fs-utils/dos33_raw
EMPTY_DISK = ../../../empty_disk/empty.dsk
TOKENIZE = ../../../utils/asoft_basic-utils/tokenize_asoft
LINKER_SCRIPTS = ../../../linker_scripts/
all: THREED
####
THREED: threed.o
ld65 -o THREED threed.o -C $(LINKER_SCRIPTS)/apple2_6000.inc
threed.o: threed.s draw_boxes.s 3d.inc
ca65 -o threed.o threed.s -l threed.lst
####
clean:
rm -f *~ *.o *.lst HELLO THREED

View File

@ -0,0 +1,199 @@
;
;
; optional color, x1,y1 x2,y2
;
; HLIN x1,x2 at y1
; VLIN y1,y2 at X1
; PLOT x1,y1
; BOX x1,y1 to x2,y2
; CLEAR -
; data in INL/INH
SET_COLOR = $80
END = $00
CLEAR = $01
BOX = $02
HLIN = $03
VLIN = $04
BLACK = $00
RED = $01
DARK_BLUE = $02
MAGENTA = $03
GREEN = $04
GREY1 = $05
MEDIUM_BLUE = $06
LIGHT_BLUE = $07
BROWN = $08
ORANGE = $09
GREY2 = $0A
PINK = $0B
LIGHT_GREEN = $0C
YELLOW = $0D
AQUA = $0E
WHITE = $0f
draw_scene:
ldy #0
lda (INL),Y
bmi set_color
beq done_scene
; use jump table for rest
and #$7f
tax
dex ; types start at 1
lda draw_table_h,X
pha
lda draw_table_l,X
pha
rts ; jump to it
done_scene:
inc INL
bne really_done_scene
inc INH
really_done_scene:
rts
set_color:
; make top and bottom byte the same
and #$f
sta COLOR
asl
asl
asl
asl
adc COLOR
sta COLOR
lda #1 ; we were one byte long
bne update_pointer
; adds A to input pointer and continues
update_pointer:
clc
adc INL
sta INL
lda #0
adc INH
sta INH
jmp draw_scene
draw_table_l:
.byte <(clear_screen-1),<(draw_box-1),<(draw_hlin-1),<(draw_vlin-1)
draw_table_h:
.byte >(clear_screen-1),>(draw_box-1),>(draw_hlin-1),>(draw_vlin-1)
;=================================
;=================================
; clear screen
;=================================
;=================================
clear_screen:
jsr clear_fullgr
lda #1
jmp update_pointer
;=================================
;=================================
; draw box
;=================================
;=================================
draw_box:
iny
lda (INL),Y
sta X1
iny
lda (INL),Y
sta Y1
iny
lda (INL),Y
sta X2
iny
lda (INL),Y
sta Y2
lda Y2
lsr
sta draw_box_yend_smc+1
lda Y1
lsr
tay
draw_box_yloop:
lda gr_offsets_l,Y
sta draw_box_xloop_smc+1
lda gr_offsets_h,Y
clc
adc DRAW_PAGE
sta draw_box_xloop_smc+2
lda COLOR
ldx X2
draw_box_xloop:
draw_box_xloop_smc:
sta $400,X
dex
cpx X1
bcs draw_box_xloop ; bge
iny
draw_box_yend_smc:
cpy #0
bne draw_box_yloop
; done
lda #5
jmp update_pointer
;=================================
;=================================
; draw hlin
;=================================
;=================================
draw_hlin:
; done
lda #4
jmp update_pointer
;=================================
;=================================
; draw vlin
;=================================
;=================================
draw_vlin:
; done
lda #4
jmp update_pointer
.include "gr_fast_clear.s"
gr_offsets_l:
.byte <$400,<$480,<$500,<$580,<$600,<$680,<$700,<$780
.byte <$428,<$4a8,<$528,<$5a8,<$628,<$6a8,<$728,<$7a8
.byte <$450,<$4d0,<$550,<$5d0,<$650,<$6d0,<$750,<$7d0
gr_offsets_h:
.byte >$400,>$480,>$500,>$580,>$600,>$680,>$700,>$780
.byte >$428,>$4a8,>$528,>$5a8,>$628,>$6a8,>$728,>$7a8
.byte >$450,>$4d0,>$550,>$5d0,>$650,>$6d0,>$750,>$7d0

View File

@ -0,0 +1,42 @@
;=========================================================
; clear_all
;=========================================================
; clear 48 rows
clear_fullgr:
clc ; 2
lda DRAW_PAGE ; 3
adc #4 ; 2
sta __caf+2 ; 3
sta __caf+5 ; 3
adc #1 ; 2
sta __caf+8 ; 3
sta __caf+11 ; 3
adc #1 ; 2
sta __caf2+2 ; 3
sta __caf2+5 ; 3
adc #1 ; 2
sta __caf2+8 ; 3
sta __caf2+11 ; 3
ldy #120 ; 2
clear_all_color:
lda COLOR ; 2
clear_all_fast_loop:
__caf:
sta $400,Y ; 5
sta $480,Y ; 5
sta $500,Y ; 5
sta $580,Y ; 5
__caf2:
sta $600,Y ; 5
sta $680,Y ; 5
sta $700,Y ; 5
sta $780,Y ; 5
dey ; 2
bpl clear_all_fast_loop ; 2nt/3
rts ; 6

View File

@ -0,0 +1,64 @@
; Not actually 3D at all
; is really a lo-res shape plotter that can play movie-like things
; o/~ We went to Threed to see the Queen o/~
;
; by deater (Vince Weaver) <vince@deater.net>
.include "../zp.inc"
.include "../hardware.inc"
.include "../qload.inc"
;.include "music.inc"
threed_start:
;=======================
; wait for keypress
;=======================
; jsr wait_until_keypress
; lda #25
; jsr wait_a_bit
;===================
; Load graphics
;===================
load_loop:
bit SET_GR
bit LORES
bit FULLGR
bit PAGE0
lda #0
sta DRAW_PAGE
forever:
lda #num_scenes
sta SCENE_COUNT
lda #<frame15
sta INL
lda #>frame15
sta INH
scene_loop:
jsr draw_scene
jsr wait_until_keypress
dec SCENE_COUNT
bne scene_loop
jmp forever
.include "../wait_keypress.s"
.include "draw_boxes.s"
.include "3d.inc"

View File

@ -160,19 +160,19 @@ error_string:
.endif
which_disk_array:
.byte 1,1,1,1 ; ZW, MUSIC, ?, ?
.byte 1,1,1,1 ; SECOND, MUSIC, ?, ?
load_address_array:
.byte $60,$D0,$90,$90 ; ZW, MUSIC, ?, ?
.byte $60,$D0,$90,$90 ; SECOND, MUSIC, ?, ?
track_array:
.byte 5, 3, 9,12 ; ZW, MUSIC, ?, ?
.byte 5, 3, 9,12 ; SECOND, MUSIC, ?, ?
sector_array:
.byte 0, 0, 0, 0 ; ZW, MUSIC, ?, ?
.byte 0, 0, 0, 0 ; SECOND, MUSIC, ?, ?
length_array:
.byte 84, 32, 48, 48 ; ZW, MUSIC, ?, ?
.byte 84, 32, 48, 48 ; SECOND, MUSIC, ?, ?
.include "lc_detect.s"
.include "wait.s"

View File

@ -148,6 +148,13 @@ HGR_COLOR = $E4
;NAMEH = $EA
;NAMEX = $EB
;CHAR = $EC
X1 = $E8
X2 = $E9
Y1 = $EA
Y2 = $EB
SCENE_COUNT = $EC
STATE = $ED
OFFSET = $EF