new update-dev subroutine

This commit is contained in:
sejo 2021-07-11 12:45:39 -05:00
parent 98b81d45e4
commit d70f6a93ff
2 changed files with 68 additions and 9 deletions

Binary file not shown.

View File

@ -7,7 +7,11 @@
%dec-ptr-reg-nib { .ptr-register-nibbles LDZ #01 SUB #7f AND .ptr-register-nibbles STZ }
%dec-ptr-reg-byt { .ptr-register-nibbles LDZ #02 SUB #7f AND .ptr-register-nibbles STZ }
%PRINT-DIGIT { DUP #30 ADD .Console/write DEO }
%PRINT-NL { #0a .Console/write DEO }
%MOD { DIVk MUL SUB }
%MOD2 { DIV2k MUL2 SUB2 }
%ADD-OFFSET { .devoffset LDZ ADD }
( devices )
@ -45,17 +49,14 @@
|0000
( )
@ptr-register-nibbles $1
@framecount0 $1
@framecount1 $1
@framecount2 $1
@beat0 $1
@beat1 $1
@beat2 $1
@framecount $2
( temp variables )
@die-color $1
@high-nibble $1
@low-nibble $1
@devoffset $1
( registers )
@registers
@ -69,6 +70,12 @@
&period $1 &pattern $1 &beatcount $1 &adsr $2 &volume $1 &sample $2
&melody $8
@framecount0 $1
@framecount1 $1
@framecount2 $1
@beat0 $1
@beat1 $1
@beat2 $1
( program )
@ -80,9 +87,11 @@
#1c92 .System/g DEO2
#1c47 .System/b DEO2
#1f .dev0/period STZ
( #10 #08 DIV PRINT-DIGIT )
#10 .dev0/period STZ
#ff .dev0/pattern STZ
#70 .dev0/beatcount STZ
#17 .dev0/beatcount STZ
#1ff1 .dev0/adsr STZ2
#aa .dev0/volume STZ
#0100 .dev0/sample STZ2
@ -99,7 +108,8 @@
BRK
@on-frame ( -> )
;update-dev0 JSR2
#00 ;update-dev JSR2
( ;update-dev0 JSR2 )
&draw-registers
pos-x-dev0 pos-y-dev #00
@ -120,9 +130,58 @@ BRK
pos-x-dev2 col-sep ADD2 #0010 #28
;draw-bytes JSR2
( inc framecount )
.framecount LDZ #01 ADD .framecount STZ
BRK
@update-dev ( devnum -- )
( transform devnum to offset )
#10 MUL .devoffset STZ
.dev0/period ADD-OFFSET LDZ DUP ,&apply-period JCN
&no-period
POP
&done
RTN
&apply-period
.framecount LDZ SWP MOD ,&done JCN
&check-beatcount
.dev0/beatcount ADD-OFFSET LDZ #0f AND DUP ,&apply-beatcount JCN
&no-beatcount
POP RTN
&apply-beatcount
.framecount LDZ .dev0/period ADD-OFFSET LDZ DIV ( get framecount/period )
SWP MOD ( apply mod beatcount )
.dev0/beatcount ADD-OFFSET LDZ #04 SFT ( get beat offset )
ADD #07 AND ( apply offset and mask beat )
STHk ( stash + keep current beat ) ( PRINT-DIGIT )
( check pattern )
.dev0/pattern ADD-OFFSET LDZ
SWP SFT #01 AND ( shift pattern beat bits to the right, and mask bit )
,&play-sound JCN
&no-play
#00 STH ( didn't play )
,&draw-beat JMP
&play-sound
#00 .dev0/sample ADD-OFFSET LDZ #30 AND #03 SFT ;samples ADD2 LDA2 ( get sample offset to play )
.Audio0/addr ADD-OFFSET DEO2 ( set sample address )
.dev0/sample ADD-OFFSET LDZ2 #0fff AND2 .Audio0/length ADD-OFFSET DEO2 ( set sample length )
.dev0/volume ADD-OFFSET LDZ .Audio0/volume ADD-OFFSET DEO
.dev0/adsr ADD-OFFSET LDZ2 .Audio0/adsr ADD-OFFSET DEO2
.dev0/melody ADD-OFFSET STHkr ( get beat ) ADD LDZ .Audio0/pitch ADD-OFFSET DEO
#01 STH ( played )
&draw-beat
( draw beat )
pos-x-dev0 STHr ( get played ) STHr ( get beat ) SWP ;draw-beat JSR2
RTN
@update-dev0 ( -- )
#00 ,&played STR
.framecount0 LDZ #01 ADD DUP .framecount0 STZ ( inc frame counter )