uxn

Varvara Ordinator, written in ANSI C(SDL2)
git clone https://git.eamoncaddigan.net/uxn.git
Log | Files | Refs | README | LICENSE

commit da338aade1a4c71c98c6f77017184e0fab6944ff
parent 77e2f0eea9ab7bd5054a77abd8d183e7cc8a775e
Author: neauoire <aliceffekt@gmail.com>
Date:   Sat,  3 Apr 2021 09:52:56 -0700

Added channel selection to dev.audio

Diffstat:
Mbuild.sh | 2+-
Mprojects/examples/dev.audio.usm | 194++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------------
2 files changed, 124 insertions(+), 72 deletions(-)

diff --git a/build.sh b/build.sh @@ -28,7 +28,7 @@ else fi echo "Assembling.." -./bin/assembler projects/software/noodle.usm bin/boot.rom +./bin/assembler projects/examples/dev.audio.usm bin/boot.rom echo "Running.." if [ "${2}" = '--cli' ]; diff --git a/projects/examples/dev.audio.usm b/projects/examples/dev.audio.usm @@ -10,11 +10,13 @@ ;pointer { x 2 y 2 } ;color { byte 1 } ;rect { x1 2 y1 2 x2 2 y2 2 } -;frame { x1 2 y1 2 x2 2 y2 2 } +;trkframe { x1 2 y1 2 x2 2 y2 2 } +;chnframe { x1 2 y1 2 x2 2 y2 2 } +;ctlframe { x1 2 y1 2 x2 2 y2 2 } ;label { x 2 y 2 color 1 addr 2 } ;knob { x 2 y 2 value 1 } ;head { pos 1 } -;track { ch1 20 ch2 20 ch3 20 ch4 20 } +;track { active 1 ch1 20 ch2 20 ch3 20 ch4 20 } ( devices ) @@ -38,21 +40,25 @@ ( theme ) #e0fa =System.r #30fa =System.g #30fa =System.b - ~Screen.width #0002 DIV2 #0080 SUB2 =frame.x1 - ~Screen.height #0002 DIV2 #0038 SUB2 =frame.y1 - ~Screen.width #0002 DIV2 #0080 ADD2 =frame.x2 - ~Screen.height #0002 DIV2 #0038 ADD2 =frame.y2 + ~Screen.width #0002 DIV2 #0080 SUB2 =trkframe.x1 + ~Screen.height #0002 DIV2 #0038 SUB2 #0010 SUB2 =trkframe.y1 + ~Screen.width #0002 DIV2 #0080 ADD2 =trkframe.x2 + ~Screen.height #0002 DIV2 #0038 ADD2 #0010 SUB2 =trkframe.y2 - #0438 =Audio.ch1adsr + ~trkframe.x1 =chnframe.x1 ~trkframe.y2 =chnframe.y1 + ~chnframe.x1 #0030 ADD2 =chnframe.x2 ~chnframe.y1 #0030 ADD2 =chnframe.y2 - ,draw-timeline JSR2 - ,draw-controls JSR2 + ~chnframe.x2 =ctlframe.x1 ~chnframe.y1 =ctlframe.y1 + ~trkframe.x2 =ctlframe.x2 ~chnframe.y2 =ctlframe.y2 + #048c =Audio.ch1adsr + #159d =Audio.ch2adsr + #26ae =Audio.ch3adsr + #37bf =Audio.ch4adsr - ~frame.x1 #0028 SUB2 ~frame.y2 #0010 ADD2 #06 ,ch1_txt ,draw-label JSR2 - ~frame.x1 #0028 SUB2 ~frame.y2 #0018 ADD2 #01 ,ch2_txt ,draw-label JSR2 - ~frame.x1 #0028 SUB2 ~frame.y2 #0020 ADD2 #01 ,ch3_txt ,draw-label JSR2 - ~frame.x1 #0028 SUB2 ~frame.y2 #0028 ADD2 #01 ,ch4_txt ,draw-label JSR2 + ,draw-timeline JSR2 + ,draw-controls JSR2 + ,draw-channels JSR2 BRK @@ -63,28 +69,36 @@ BRK ~head.pos #08 MOD #00 NEQ ^$skip JNZ ,bang JSR2 - ,draw-position JSR2 $skip ~Mouse.state #00 EQU ,$click-end JNZ2 - ~Mouse.x ~frame.x1 GTH2 ~Mouse.x ~frame.x2 LTH2 #0101 EQU2 - ~Mouse.y ~frame.y1 GTH2 ~Mouse.y ~frame.y2 LTH2 #0101 EQU2 + ~Mouse.x ~trkframe.x1 GTH2 ~Mouse.x ~trkframe.x2 LTH2 #0101 EQU2 + ~Mouse.y ~trkframe.y1 GTH2 ~Mouse.y ~trkframe.y2 LTH2 #0101 EQU2 #0101 NEQ2 ,$no-track-click JNZ2 ,clear-notes JSR2 ( get note ) - #0e ~Mouse.y ~frame.y1 SUB2 SWP POP #08 DIV SUB + #0e ~Mouse.y ~trkframe.y1 SUB2 SWP POP #08 DIV SUB ~Mouse.state #10 NEQ ^$no-erase JNZ POP #00 $no-erase ( get track ) - ,track.ch1 #00 ~Mouse.x ~frame.x1 SUB2 SWP POP #08 DIV ADD2 + ,get-track JSR2 #00 ~Mouse.x ~trkframe.x1 SUB2 SWP POP #08 DIV ADD2 POK2 ( release ) #00 =Mouse.state ,draw-notes JSR2 - ,draw-bars JSR2 $no-track-click + ~Mouse.x ~chnframe.x1 GTH2 ~Mouse.x ~chnframe.x2 LTH2 #0101 EQU2 + ~Mouse.y ~chnframe.y1 #0008 ADD2 GTH2 ~Mouse.y ~chnframe.y2 #0008 SUB2 LTH2 #0101 EQU2 + #0101 NEQ2 ,$no-channel-click JNZ2 + ,clear-notes JSR2 + ~Mouse.y ~chnframe.y1 SUB2 SWP POP #08 DIV #01 SUB =track.active + ( release ) #00 =Mouse.state + ,draw-channels JSR2 + ,draw-notes JSR2 + $no-channel-click + $click-end BRK @@ -93,41 +107,62 @@ BRK BRK +@get-track ( -- track-addr ) + + ,track.ch1 #00 ~track.active #0020 MUL2 ADD2 + +RTN + @bang ( -- ) - ( load ) ,track.ch1 #00 ~head.pos #08 DIV ADD2 PEK2 #01 SUB - DUP #ff NEQ ^$skip JNZ - POP RTN - $skip + DUP #ff NEQ ^$skip1 JNZ + POP ^$listen2 JMP + $skip1 #00 SWP ,notes ADD2 PEK2 #0c #03 MUL SUB =Audio.ch1pitch #11 =Audio.ch1vol + $listen2 + ,track.ch2 #00 ~head.pos #08 DIV ADD2 PEK2 + #01 SUB + DUP #ff NEQ ^$skip2 JNZ + POP ^$listen3 JMP + $skip2 + #00 SWP ,notes ADD2 PEK2 + #0c #03 MUL SUB =Audio.ch2pitch + #11 =Audio.ch2vol + + $listen3 + ,track.ch3 #00 ~head.pos #08 DIV ADD2 PEK2 + #01 SUB + DUP #ff NEQ ^$skip3 JNZ + POP ^$end JMP + $skip3 + #00 SWP ,notes ADD2 PEK2 + #0c #03 MUL SUB =Audio.ch3pitch + #11 =Audio.ch3vol + + $end + RTN @move-head ( -- ) ( clear ) - ~frame.y1 #0008 SUB2 =Sprite.y - ~frame.x1 #00 ~head.pos ADD2 =Sprite.x + ~trkframe.y1 #0008 SUB2 =Sprite.y + ~trkframe.x1 #00 ~head.pos ADD2 =Sprite.x ,head_icn =Sprite.addr #00 =Sprite.color ( incr ) ~head.pos #01 ADD =head.pos ( draw ) - ~frame.x1 #00 ~head.pos ADD2 =Sprite.x + ~trkframe.x1 #00 ~head.pos ADD2 =Sprite.x ,head_icn =Sprite.addr - #01 =Sprite.color - -RTN -@draw-position ( -- ) - - ~frame.x2 #0008 SUB2 =Sprite.x - ~frame.y1 #0010 SUB2 =Sprite.y - ,font_hex #00 ~head.pos #10 DIV #0008 MUL2 ADD2 =Sprite.addr - #01 =Sprite.color + #01 + ( if note ) ,get-track JSR2 #00 ~head.pos #08 DIV ADD2 PEK2 #00 NEQ ADD + =Sprite.color RTN @@ -135,10 +170,12 @@ RTN #00 #20 $loop - ( load ) OVR #00 SWP ,track.ch1 ADD2 PEK2 - #00 SWP #0e SWP SUB #0008 MUL2 ~frame.y1 ADD2 =Sprite.y - OVR #00 SWP #0008 MUL2 ~frame.x1 ADD2 =Sprite.x - #00 =Sprite.color + ( load ) OVR #00 SWP ,get-track JSR2 ADD2 PEK2 + DUP STH #00 SWP #0e SWP SUB #0008 MUL2 ~trkframe.y1 ADD2 =Sprite.y + OVR #00 SWP #0008 MUL2 ~trkframe.x1 ADD2 =Sprite.x + STHr #00 EQU ^$skip JNZ + #00 =Sprite.color + $skip ( incr ) SWP #01 ADD SWP DUP2 LTH ^$loop JNZ POP2 @@ -149,41 +186,42 @@ RTN #00 #20 $notes-loop - ( load ) OVR #00 SWP ,track.ch1 ADD2 PEK2 - DUP STH #00 SWP #0e SWP SUB #0008 MUL2 ~frame.y1 ADD2 =Sprite.y - OVR #00 SWP #0008 MUL2 ~frame.x1 ADD2 =Sprite.x + ( load ) OVR #00 SWP ,get-track JSR2 ADD2 PEK2 + DUP STH #00 SWP #0e SWP SUB #0008 MUL2 ~trkframe.y1 ADD2 =Sprite.y + OVR #00 SWP #0008 MUL2 ~trkframe.x1 ADD2 =Sprite.x ,note2_icn =Sprite.addr - #02 STHr #00 EQU SUB =Sprite.color + STHr #00 EQU ^$skip JNZ + #05 =Sprite.color + $skip ( incr ) SWP #01 ADD SWP DUP2 LTH ^$notes-loop JNZ POP2 + ,draw-bars JSR2 RTN @draw-bars ( -- ) - - ( draw notes ) - ~frame.x1 ~frame.y1 ~frame.x2 ~frame.y2 #01 ,line-rect JSR2 + ~trkframe.x1 ~trkframe.y1 ~trkframe.x2 ~trkframe.y2 #01 ,line-rect JSR2 ( grid ) - ~frame.y1 #0010 SUB2 =Sprite.y + ~trkframe.y1 #0010 SUB2 =Sprite.y ,font_hex =Sprite.addr #0000 #0100 $loop OVR2 SWP POP #02 DIV #0f AND #00 NEQ ^$skip JNZ - OVR2 ~frame.x1 ADD2 =Sprite.x + OVR2 ~trkframe.x1 ADD2 =Sprite.x #01 =Sprite.color ~Sprite.addr 8+ =Sprite.addr - OVR2 ~frame.x1 ADD2 ~frame.y1 #0001 ADD2 ~frame.y2 #01 ,line-vertical-dotted JSR2 + OVR2 ~trkframe.x1 ADD2 ~trkframe.y1 #0001 ADD2 ~trkframe.y2 #01 ,line-vertical-dotted JSR2 $skip - OVR2 ~frame.x1 ADD2 ~frame.y1 ~frame.y2 #01 ,line-vertical-dotted JSR2 + OVR2 ~trkframe.x1 ADD2 ~trkframe.y1 ~trkframe.y2 #01 ,line-vertical-dotted JSR2 SWP2 #0008 ADD2 SWP2 OVR2 OVR2 LTH2 ^$loop JNZ POP2 POP2 - ~frame.x1 ~frame.x2 ~frame.y1 #0008 SUB2 #0040 ADD2 #01 ,line-horizontal-dotted JSR2 + ~trkframe.x1 ~trkframe.x2 ~trkframe.y1 #0008 SUB2 #0040 ADD2 #01 ,line-horizontal-dotted JSR2 RTN @@ -211,20 +249,20 @@ RTN @draw-octaves ( -- ) - ~frame.x1 #0018 SUB2 ~frame.y1 ,draw-octave JSR2 - ~frame.x1 #0018 SUB2 ~frame.y1 #0038 ADD2 ,draw-octave JSR2 - ~frame.x1 #0028 SUB2 =Sprite.x - ~frame.y1 =Sprite.y + ~trkframe.x1 #0018 SUB2 ~trkframe.y1 ,draw-octave JSR2 + ~trkframe.x1 #0018 SUB2 ~trkframe.y1 #0038 ADD2 ,draw-octave JSR2 + ~trkframe.x1 #0028 SUB2 =Sprite.x + ~trkframe.y1 =Sprite.y ,font_hex #0060 ADD2 =Sprite.addr #01 =Sprite.color - ~frame.x1 #0030 SUB2 =Sprite.x + ~trkframe.x1 #0030 SUB2 =Sprite.x ,font_hex #0020 ADD2 =Sprite.addr #01 =Sprite.color - ~frame.x1 #0028 SUB2 =Sprite.x - ~frame.y1 #0038 ADD2 =Sprite.y + ~trkframe.x1 #0028 SUB2 =Sprite.x + ~trkframe.y1 #0038 ADD2 =Sprite.y ,font_hex #0060 ADD2 =Sprite.addr #01 =Sprite.color - ~frame.x1 #0030 SUB2 =Sprite.x + ~trkframe.x1 #0030 SUB2 =Sprite.x ,font_hex #0018 ADD2 =Sprite.addr #01 =Sprite.color @@ -274,17 +312,31 @@ RTN @draw-controls ( -- ) - ~frame.x1 #0000 ADD2 ~frame.y2 #0010 ADD2 #01 ,env_txt ,draw-label JSR2 + ~ctlframe.x1 ~ctlframe.y1 ~ctlframe.x2 ~ctlframe.y2 #01 ,line-rect JSR2 + + ~ctlframe.x1 #0008 ADD2 ~ctlframe.y1 #0008 ADD2 #01 ,env_txt ,draw-label JSR2 + + ~ctlframe.x1 #0008 ADD2 ~ctlframe.y1 #0010 ADD2 #00 ,draw-knob JSR2 + ~ctlframe.x1 #0018 ADD2 ~ctlframe.y1 #0010 ADD2 #02 ,draw-knob JSR2 + ~ctlframe.x1 #0028 ADD2 ~ctlframe.y1 #0010 ADD2 #0a ,draw-knob JSR2 + ~ctlframe.x1 #0038 ADD2 ~ctlframe.y1 #0010 ADD2 #0c ,draw-knob JSR2 - ~frame.x1 #0000 ADD2 ~frame.y2 #0020 ADD2 #00 ,draw-knob JSR2 - ~frame.x1 #0010 ADD2 ~frame.y2 #0020 ADD2 #02 ,draw-knob JSR2 - ~frame.x1 #0020 ADD2 ~frame.y2 #0020 ADD2 #0a ,draw-knob JSR2 - ~frame.x1 #0030 ADD2 ~frame.y2 #0020 ADD2 #0c ,draw-knob JSR2 + ~ctlframe.x1 #0050 ADD2 ~ctlframe.y1 #0008 ADD2 #01 ,vol_txt ,draw-label JSR2 - ~frame.x1 #0050 ADD2 ~frame.y2 #0010 ADD2 #01 ,vol_txt ,draw-label JSR2 + ~ctlframe.x1 #0050 ADD2 ~ctlframe.y1 #0010 ADD2 #00 ,draw-knob JSR2 + ~ctlframe.x1 #0060 ADD2 ~ctlframe.y1 #0010 ADD2 #0f ,draw-knob JSR2 + +RTN + +@draw-channels + + ~chnframe.x1 ~chnframe.y1 ~chnframe.x2 ~chnframe.y2 #01 ,line-rect JSR2 - ~frame.x1 #0050 ADD2 ~frame.y2 #0020 ADD2 #00 ,draw-knob JSR2 - ~frame.x1 #0060 ADD2 ~frame.y2 #0020 ADD2 #0f ,draw-knob JSR2 + ~track.active =Console.byte + ~chnframe.x1 #0008 ADD2 ~chnframe.y1 #0008 ADD2 #01 ~track.active #00 EQU #07 MUL ADD ,ch1_txt ,draw-label JSR2 + ~chnframe.x1 #0008 ADD2 ~chnframe.y1 #0010 ADD2 #01 ~track.active #01 EQU #07 MUL ADD ,ch2_txt ,draw-label JSR2 + ~chnframe.x1 #0008 ADD2 ~chnframe.y1 #0018 ADD2 #01 ~track.active #02 EQU #07 MUL ADD ,ch3_txt ,draw-label JSR2 + ~chnframe.x1 #0008 ADD2 ~chnframe.y1 #0020 ADD2 #01 ~track.active #03 EQU #07 MUL ADD ,ch4_txt ,draw-label JSR2 RTN @@ -368,10 +420,10 @@ RTN @note2_icn [ 0000 1c3e 3e3e 1c00 ] @head_icn [ 0018 1818 7e3c 1800 ] -@ch1_txt [ SQR1 00 ] -@ch2_txt [ SQR2 00 ] -@ch3_txt [ TRI3 00 ] -@ch4_txt [ WAV4 00 ] +@ch1_txt [ CHN0 00 ] +@ch2_txt [ CHN1 00 ] +@ch3_txt [ CHN2 00 ] +@ch4_txt [ CHN3 00 ] @env_txt [ Envelope 00 ] @vol_txt [ Volume 00 ]