main pita/uxn12 / etc / tests / audio.tal
  1( dev/audio )
  2
  3%GET-NOTE { #00 SWP ;melody ADD2 LDA }
  4%GET-HEXCHAR  { #00 SWP #30 SFT2 ;font-hex ADD2 .Screen/addr DEO2 }
  5
  6( devices )
  7
  8|00 @System     [ &vector $2 &pad      $6 &r      $2 &g     $2 &b      $2 ]
  9|20 @Screen     [ &vector $2 &width    $2 &height $2 &pad   $2 &x      $2 &y    $2 &addr  $2 &pixel $1 &sprite $1 ]
 10|30 @Audio0     [ &vector $2 &position $2 &output $1 &pad   $3 &adsr   $2 &length $2 &addr $2 &volume $1 &pitch $1 ]
 11|80 @Controller [ &vector $2 &button $1 &key    $1 ]
 12
 13( variables )
 14
 15|0000
 16
 17@timer     $1
 18@progress  $1
 19@selection $1
 20@offset
 21	&x $2 &y $2
 22
 23|0100 ( -> )
 24	
 25	( theme )
 26	#0f8f .System/r DEO2 
 27	#0f8f .System/g DEO2 
 28	#0f80 .System/b DEO2 
 29
 30	( vectors )
 31	;on-frame .Screen/vector DEO2
 32	;on-button .Controller/vector DEO2
 33
 34	( setup synth )
 35	#0208 .Audio0/adsr DEO2
 36	;saw .Audio0/addr DEO2
 37	#0100 .Audio0/length DEO2
 38	#dd .Audio0/volume DEO ( TODO: turn ON )
 39
 40	( center )
 41	.Screen/width DEI2 #01 SFT2 #0080 SUB2 .offset/x STZ2
 42	.Screen/height DEI2 #01 SFT2 #0040 SUB2 .offset/y STZ2
 43
 44	;draw JSR2
 45	#02 ;draw-selector JSR2
 46
 47BRK
 48
 49@on-button ( -> )
 50
 51	.Controller/button DEI #04 SFT
 52	[ #01 ] NEQk NIP ,&no-up JCN 
 53		.selection LDZ STHk 
 54		#00 ;draw-note JSR2
 55		[ STHkr GET-NOTE INC ] #00 STHkr ;melody ADD2 STA
 56		STHr #01 ;draw-note JSR2
 57		#02 ;draw-selector JSR2
 58		&no-up
 59	[ #02 ] NEQk NIP ,&no-down JCN 
 60		.selection LDZ STHk 
 61		#00 ;draw-note JSR2
 62		[ STHkr GET-NOTE #01 SUB ] #00 STHkr ;melody ADD2 STA
 63		STHr #01 ;draw-note JSR2
 64		#02 ;draw-selector JSR2
 65		&no-down
 66	[ #04 ] NEQk NIP ,&no-left JCN 
 67		#00 ;draw-selector JSR2
 68		.selection LDZ #01 SUB #1f AND .selection STZ
 69		#02 ;draw-selector JSR2
 70		&no-left
 71	[ #08 ] NEQk NIP ,&no-right JCN 
 72		#00 ;draw-selector JSR2
 73		.selection LDZ INC #1f AND .selection STZ
 74		#02 ;draw-selector JSR2
 75		&no-right
 76	POP
 77	
 78BRK
 79
 80@on-frame ( -> )
 81
 82	( incr ) .timer LDZ INC .timer STZ 
 83	( skip ) .timer LDZ #10 EQU #01 JCN [ BRK ]
 84	.progress LDZ 
 85	( play note )    DUP GET-NOTE .Audio0/pitch DEO
 86	( erase last )   DUP #01 SUB #1f AND #01 ,draw-note JSR
 87	( draw current ) #01 ,draw-note JSR
 88	( incr ) .progress LDZ INC #1f AND .progress STZ
 89	#00 .timer STZ
 90
 91BRK
 92
 93@draw ( -- )
 94
 95	#20 #00
 96	&loop
 97		DUP #01 ,draw-note JSR
 98		INC GTHk ,&loop JCN
 99	POP2
100
101JMP2r
102
103@draw-note ( id color -- )
104
105	STH STH
106	( set x ) [ #00 STHkr ] #30 SFT2 .offset/x LDZ2 ADD2 .Screen/x DEO2
107	( set y ) [ #00 #00 STHkr ;melody ADD2 LDA ] #20 SFT2 #0100 SWP2 SUB2 .offset/y LDZ2 ADD2 #0080 ADD2 .Screen/y DEO2
108	( set addr ) ;marker-icn [ #00 .progress LDZ STHr EQU #08 MUL ADD2 ] .Screen/addr DEO2
109	( draw ) STHr .Screen/sprite DEO
110
111JMP2r
112
113@draw-selector ( color -- )
114	
115	STH
116	[ #00 .selection LDZ ] #30 SFT2 .offset/x LDZ2 ADD2 .Screen/x DEO2
117	#0070 .offset/y LDZ2 ADD2 .Screen/y DEO2
118	;selector-icn .Screen/addr DEO2
119	STHkr .Screen/sprite DEO
120
121	.Screen/y DEI2k #0008 ADD2 ROT DEO2
122	.selection LDZ GET-NOTE STHr ,draw-byte JSR
123
124JMP2r
125
126@draw-byte ( byte color -- )
127	
128	STH 
129	DUP 
130		#04 SFT GET-HEXCHAR 
131		( draw ) STHkr .Screen/sprite DEO
132	.Screen/x DEI2 #0008 ADD2 .Screen/x DEO2
133		#0f AND GET-HEXCHAR 
134		( draw ) STHr .Screen/sprite DEO
135
136JMP2r
137
138@melody 
139	54 52 54 4f 4b 4f 48 ff
140	54 52 54 4f 4b 4f 48 ff
141	54 56 57 56 57 54 56 54 
142	56 52 54 52 54 50 54 ff 
143
144@selector-icn
145	0000 0010 387c 0000
146
147@marker-icn
148	3844 8282 8244 3800
149	387c fefe fe7c 3800
150
151@saw 
152	0003 0609 0c0f 1215 181b 1e21 2427 2a2d
153	3033 3639 3b3e 4143 4649 4b4e 5052 5557
154	595b 5e60 6264 6667 696b 6c6e 7071 7274
155	7576 7778 797a 7b7b 7c7d 7d7e 7e7e 7e7e
156	7f7e 7e7e 7e7e 7d7d 7c7b 7b7a 7978 7776
157	7574 7271 706e 6c6b 6967 6664 6260 5e5b
158	5957 5552 504e 4b49 4643 413e 3b39 3633
159	302d 2a27 2421 1e1b 1815 120f 0c09 0603
160	00fd faf7 f4f1 eeeb e8e5 e2df dcd9 d6d3
161	d0cd cac7 c5c2 bfbd bab7 b5b2 b0ae aba9
162	a7a5 a2a0 9e9c 9a99 9795 9492 908f 8e8c
163	8b8a 8988 8786 8585 8483 8382 8282 8282
164	8182 8282 8282 8383 8485 8586 8788 898a
165	8b8c 8e8f 9092 9495 9799 9a9c 9ea0 a2a5
166	a7a9 abae b0b2 b5b7 babd bfc2 c5c7 cacd
167	d0d3 d6d9 dcdf e2e5 e8eb eef1 f4f7 fafd 
168
169@font-hex ( 0-F )
170	007c 8282 8282 827c 0030 1010 1010 1010
171	007c 8202 7c80 80fe 007c 8202 1c02 827c
172	000c 1424 4484 fe04 00fe 8080 7c02 827c
173	007c 8280 fc82 827c 007c 8202 1e02 0202
174	007c 8282 7c82 827c 007c 8282 7e02 827c
175	007c 8202 7e82 827e 00fc 8282 fc82 82fc
176	007c 8280 8080 827c 00fc 8282 8282 82fc
177	007c 8280 f080 827c 007c 8280 f080 8080