add command system, add V and I commands

This commit is contained in:
Nico 2022-01-20 22:35:35 +00:00
parent a6e6364a7e
commit fd5afe422a
3 changed files with 47 additions and 31 deletions

View File

@ -1,5 +1,10 @@
( TODO
commmands )
* 0x03 (A) - set attack to argument 1-0f
* 0x04 (D) - set decay to argument 1-0f
* 0x05 (S) - set sustain to argument 1-0f
* 0x06 (R) - set release to argument 1-0f
* 0x07 (T) - set song speed to argument 1-0f
* 0x08 (L) - set sample loop 00: off, otherwise: on )
@k-tick
&run
@ -16,7 +21,7 @@ commmands )
( don't play if song pos is ffff aka song is stopped or over )
#ffff EQU2 ;&no-play JCN2 ( songpos* )
#0005 ADD2 .kalama/module LDZ2 ADD2 ( songposinmod* )
DUP2 LDA ;k-get-pattern/run JSR2 ;&lineaddr LDA2 ADD2 #00 ;k-play-line/run JSR2
DUP2 LDA ;k-get-pattern/run JSR2 ;&lineaddr LDA2 ADD2 #00 ;k-play-line/run JSR2
DUP2 #0001 ADD2 LDA ;k-get-pattern/run JSR2 ;&lineaddr LDA2 ADD2 #01 ;k-play-line/run JSR2
DUP2 #0002 ADD2 LDA ;k-get-pattern/run JSR2 ;&lineaddr LDA2 ADD2 #02 ;k-play-line/run JSR2
#0003 ADD2 LDA ;k-get-pattern/run JSR2 ;&lineaddr LDA2 ADD2 #03 ;k-play-line/run JSR2
@ -91,9 +96,10 @@ RTN
&chan $1
&run
,&chan STR
DUP2 #0001 ADD2 LDA2 ,&chan LDR ;k-run-command/run JSR2
LDA DUP
#00 EQU ,&rest JCN
.kalama/loopflags LDZ ,&chan LDR #01 SWP SFT AND
.kalama/loopflags LDZ ,&chan LDR #10 MUL #01 SWP SFT AND
#00 NEQ ,&noloop JCN
#80 ORA
&noloop
@ -103,6 +109,19 @@ LDA DUP
POP
RTN
@k-run-command ( c arg channel )
&chan $1
&run
,&chan STR
SWP ( get command )
DUP #01 EQU ,&vol JCN ( set instrument )
DUP #02 EQU ,&instr JCN ( set instrument )
POP2 RTN
&vol POP ,&chan LDR #10 MUL .Audio0/volume ADD DEO
RTN
&instr POP ,&chan LDR ;k-load-instrument JSR2
RTN
( loads instrument with number into specified audio channel, 0-indexed )
@k-load-instrument ( number channel -- )
&run
@ -113,16 +132,16 @@ RTN
#0002 ADD2 ( move to volume value )
DUP2 LDA STHrk .Audio0/volume ADD DEO ( copy volume value )
#0001 ADD2 DUP2 ( move to flags value )
LDA #07 SFT ( MSB is set for looping sample, turn it into 0/1 )
DUP ( set or clear loop bit )
LDA #07 SFT ( MSB is set for looping sample, turn it into 0/1 )
( set or clear loop bit )
#00 EQU ,&clear JCN
STHrk SFT .kalama/loopflags LDZ ORA .kalama/loopflags STZ ( set bit on )
#01 STHrk SFT .kalama/loopflags LDZ ORA .kalama/loopflags STZ ( set bit on )
,&end JMP
&clear
STHrk SFT #ff EOR .kalama/loopflags LDZ AND .kalama/loopflags STZ ( set bit off )
#01 STHrk SFT #ff EOR .kalama/loopflags LDZ AND .kalama/loopflags STZ ( set bit off )
&end
#0001 ADD2 LDA2k STHrk .Audio0/adsr ADD DEO2 ( copy ADSR value )
#0002 ADD2 STHrk .Audio0/addr ADD DEO2

View File

@ -65,6 +65,7 @@ More soon probably
* 0x06 (R) - set release to argument (1-0f)
* 0x07 (T) - set song speed to argument (1-0f)
* 0x08 (L) - set sample loop ( 00: off, otherwise: on )
## Instruments
Instruments contain a sample and some default parameters for that sample. Everything is in the same format expected by the audio device.

View File

@ -1,4 +1,3 @@
( a blank file )
%DEBUG { ;print-hex/byte JSR2 #0a18 DEO }
@ -43,9 +42,6 @@
#0f25 .System/b DEO2
;module ;k-init-module JSR2
#00 #00 ;k-load-instrument JSR2
#01 #01 ;k-load-instrument JSR2
;on-frame/run .Screen/vector DEO2
BRK
@ -98,13 +94,13 @@ ff 02 ff ff ( song table, 2 rows )
@DEBUG-patterns
( pattern 00 )
54 02 00 ( C-3 I00 )
52 00 00
54 00 00
4f 00 00
4b 00 00
4f 00 00
48 00 00
ff 00 00
52 01 80
54 01 08
4f 01 80
4b 01 08
4f 01 22
48 01 cc
ff 01 88
54 02 00
52 00 00
54 00 00
@ -114,34 +110,34 @@ ff 00 00
48 00 00
ff 00 00
( pattern 01 )
54 00 00
56 02 00 ( C-3 I00 )
54 02 01
56 00 00
57 00 00
56 00 00
57 00 00
54 00 00
56 00 00
56 02 00
54 00 00
56 00 00
52 00 00
54 00 00
54 02 01
52 00 00
54 00 00
50 00 00
54 00 00
54 02 00
ff 00 00
( pattern 02 )
3c 02 01
00 01 f0
3c 00 00
00 00 00
3c 00 00
3c 01 0f
00 00 00
3c 00 00
3c 01 ff
00 00 00
3c 00 00
3c 01 44
00 00 00
3c 00 00
00 00 00
3c 00 00
3c 01 ff
00 00 00
3c 00 00
00 00 00