ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
sn76489z.c
Go to the documentation of this file.
1/*****************************************************************************
2 * ugBASIC - an isomorphic BASIC language compiler for retrocomputers *
3 *****************************************************************************
4 * Copyright 2021-2026 Marco Spedaletti (asimov@mclink.it)
5 *
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 *----------------------------------------------------------------------------
18 * Concesso in licenza secondo i termini della Licenza Apache, versione 2.0
19 * (la "Licenza"); è proibito usare questo file se non in conformità alla
20 * Licenza. Una copia della Licenza è disponibile all'indirizzo:
21 *
22 * http://www.apache.org/licenses/LICENSE-2.0
23 *
24 * Se non richiesto dalla legislazione vigente o concordato per iscritto,
25 * il software distribuito nei termini della Licenza è distribuito
26 * "COSì COM'è", SENZA GARANZIE O CONDIZIONI DI ALCUN TIPO, esplicite o
27 * implicite. Consultare la Licenza per il testo specifico che regola le
28 * autorizzazioni e le limitazioni previste dalla medesima.
29 ****************************************************************************/
30
31#if defined(__coleco__) || defined(__sc3000__) || defined(__sg1000__)
32
33#include "../ugbc.h"
34
35static unsigned int SOUND_FREQUENCIES[] = {
36 // 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
37 // 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
38 255, 255, 255, 255, 255, 255, 255,
39 255, 255, 255,
40 255, 240, 227, 214, 202, 191, 180, 170, 160, 151,
41 143, 135, 127, 120, 113, 107, 101, 95, 90, 85,
42 80, 75, 71, 67, 63, 60, 56, 53, 50, 47,
43 45, 42, 40, 37, 35, 33, 31, 30, 28, 26,
44 25, 23, 22, 21, 20, 18, 17, 16, 15, 15,
45 14, 13, 12, 11, 11, 10, 10, 9, 8, 8,
46 7, 7, 7, 6, 6, 5, 5, 5, 5, 4,
47 4, 4, 3, 3, 3, 3, 3, 2, 2, 2,
48 2, 2, 2, 2, 1, 1, 1, 1, 1
49};
50
51void sn76489z_initialization( Environment * _environment ) {
52
53 variable_import( _environment, "SN76489MUSICTYPE", VT_BYTE, 0 );
54 variable_global( _environment, "SN76489MUSICTYPE" );
55 variable_import( _environment, "SN76489MUSICREADY", VT_BYTE, 0 );
56 variable_global( _environment, "SN76489MUSICREADY" );
57 variable_import( _environment, "SN76489MUSICPAUSE", VT_BYTE, 0 );
58 variable_global( _environment, "SN76489MUSICPAUSE" );
59 variable_import( _environment, "SN76489MUSICLOOP", VT_BYTE, 0 );
60 variable_global( _environment, "SN76489MUSICLOOP" );
61 variable_import( _environment, "SN76489BLOCKS", VT_BYTE, 0 );
62 variable_global( _environment, "SN76489BLOCKS" );
63 variable_import( _environment, "SN76489LASTBLOCK", VT_BYTE, 0 );
64 variable_global( _environment, "SN76489LASTBLOCK" );
65 variable_import( _environment, "SN76489TMPPTR2", VT_ADDRESS, 0 );
66 variable_global( _environment, "SN76489TMPPTR2" );
67 variable_import( _environment, "SN76489TMPPTR", VT_ADDRESS, 0 );
68 variable_global( _environment, "SN76489TMPPTR" );
69 variable_import( _environment, "SN76489TMPOFS", VT_BYTE, 0 );
70 variable_global( _environment, "SN76489TMPOFS" );
71 variable_import( _environment, "SN76489TMPLEN", VT_BYTE, 0 );
72 variable_global( _environment, "SN76489TMPLEN" );
73 variable_import( _environment, "SN76489JIFFIES", VT_BYTE, 0 );
74 variable_global( _environment, "SN76489JIFFIES" );
75
76 variable_import( _environment, "SN76489BLOCKS_BACKUP", VT_BYTE, 0 );
77 variable_global( _environment, "SN76489BLOCKS_BACKUP" );
78 variable_import( _environment, "SN76489LASTBLOCK_BACKUP", VT_BYTE, 0 );
79 variable_global( _environment, "SN76489LASTBLOCK_BACKUP" );
80 variable_import( _environment, "SN76489TMPPTR_BACKUP", VT_ADDRESS, 0 );
81 variable_global( _environment, "SN76489TMPPTR_BACKUP" );
82
83 cpu_call( _environment, "SN76489STARTUP" );
84
85}
86
87void sn76489z_finalization( Environment * _environment ) {
88
89 if ( ! _environment->deployed.sn76489startup ) {
90 cpu_label( _environment, "SN76489STARTUP" );
91 outline0( "RET" );
92 cpu_label( _environment, "MUSICPLAYER" );
93 outline0( "RET" );
94 }
95
96}
97
98void sn76489z_start( Environment * _environment, int _channels ) {
99
100 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
101 deploy_preferred( sn76489startup, src_hw_sn76489z_startup_asm );
102
103 if ( _channels & 0x01 ) {
104 outline0("CALL SN76489START0");
105 }
106 if ( _channels & 0x02 ) {
107 outline0("CALL SN76489START1");
108 }
109 if ( _channels & 0x04 ) {
110 outline0("CALL SN76489START2");
111 }
112
113}
114
115void sn76489z_set_volume( Environment * _environment, int _channels, int _volume ) {
116
117 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
118 deploy_preferred( sn76489startup, src_hw_sn76489z_startup_asm );
119
120 outline1("LD A, $%2.2x", ( _volume & 0x0f ) );
121 outline0("LD B, A" );
122 outline1("LD A, $%2.2x", ( _channels ) );
123 outline0("CALL SN76489STARTVOL");
124
125}
126
127#define PROGRAM_FREQUENCY( c, f ) \
128 outline1("LD A, $%2.2x", ( f & 0xff ) ); \
129 outline0("LD E, A" ); \
130 outline1("LD A, $%2.2x", ( ( f >> 8 ) & 0xff ) ); \
131 outline0("LD D, A" ); \
132 if ( ( c & 0x01 ) ) \
133 outline0("CALL SN76489PROGFREQ0" ); \
134 if ( ( c & 0x02 ) ) \
135 outline0("CALL SN76489PROGFREQ1" ); \
136 if ( ( c & 0x04 ) ) \
137 outline0("CALL SN76489PROGFREQ2" );
138
139#define PROGRAM_FREQUENCY_V( c, f ) \
140 outline1("LD A, (%s)", f ); \
141 outline0("LD E, A" ); \
142 outline1("LD A, (%s)", address_displacement(_environment, f, "1") ); \
143 outline0("LD D, A" ); \
144 if ( c == NULL ) { \
145 outline0("LD A, $7"); \
146 } else { \
147 outline1("LD A, (%s)", c ); \
148 } \
149 outline0("CALL SN76489FREQ" );
150
151#define PROGRAM_FREQUENCY_SV( c, f ) \
152 outline1("LD A, $%2.2x", ( f & 0xff ) ); \
153 outline0("LD E, A" ); \
154 outline1("LD A, $%2.2x", ( ( f >> 8 ) & 0xff ) ); \
155 outline0("LD D, A" ); \
156 if ( c == NULL ) { \
157 outline0("LD A, $7"); \
158 } else { \
159 outline1("LD A, (%s)", c ); \
160 } \
161 outline0("CALL SN76489FREQ" );
162
163#define PROGRAM_DURATION( c, d ) \
164 outline1("LD A, $%2.2x", ( d & 0xff ) ); \
165 outline0("LD E, A" ); \
166 outline1("LD A, $%2.2x", ( ( d >> 8 ) & 0xff ) ); \
167 outline0("LD D, A" ); \
168 if ( ( c & 0x01 ) ) \
169 outline0("CALL SN76489PROGDUR0" ); \
170 if ( ( c & 0x02 ) ) \
171 outline0("CALL SN76489PROGDUR1" ); \
172 if ( ( c & 0x04 ) ) \
173 outline0("CALL SN76489PROGDUR2" );
174
175#define WAIT_DURATION( c ) \
176 if ( ( c & 0x01 ) ) \
177 outline0("CALL SN76489WAITDUR0" ); \
178 if ( ( c & 0x02 ) ) \
179 outline0("CALL SN76489WAITDUR1" ); \
180 if ( ( c & 0x04 ) ) \
181 outline0("CALL SN76489WAITDUR2" );
182
183#define PROGRAM_PITCH( c, f ) \
184 outline1("LD A, $%2.2x", ( f & 0xff ) ); \
185 outline0("LD E, A" ); \
186 outline1("LD A, $%2.2x", ( ( f >> 8 ) & 0xff ) ); \
187 outline0("LD D, A" ); \
188 if ( ( c & 0x01 ) ) \
189 outline0("CALL SN76489PROGFREQ0" ); \
190 if ( ( c & 0x02 ) ) \
191 outline0("CALL SN76489PROGFREQ1" ); \
192 if ( ( c & 0x04 ) ) \
193 outline0("CALL SN76489PROGFREQ2" );
194
195#define PROGRAM_PITCH_V( c, f ) \
196 outline1("LD A, (%s)", f ); \
197 outline0("LD E, A" ); \
198 outline1("LD A, (%s)", address_displacement(_environment, f, "1") ); \
199 outline0("LD D, A" ); \
200 if ( c == NULL ) { \
201 outline0("LD A, $7"); \
202 } else { \
203 outline1("LD A, (%s)", c ); \
204 } \
205 outline0("CALL SN76489PROGFREQ" );
206
207#define PROGRAM_PITCH_SV( c, f ) \
208 outline1("LD A, $%2.2x", ( f & 0xff ) ); \
209 outline0("LD E, A" ); \
210 outline1("LD A, $%2.2x", ( ( f >> 8 ) & 0xff ) ); \
211 outline0("LD D, A" ); \
212 if ( c == NULL ) { \
213 outline0("LD A, $7"); \
214 } else { \
215 outline1("LD A, (%s)", c ); \
216 } \
217 outline0("CALL SN76489PROGFREQ" );
218
219#define PROGRAM_PULSE( c, p ) \
220 outline1("LD A, $%2.2x", ( p & 0xff ) ); \
221 outline0("LD E, A" ); \
222 outline1("LD A, $%2.2x", ( ( p >> 8 ) & 0xff ) ); \
223 outline0("LD D, A" ); \
224 if ( ( c & 0x01 ) ) \
225 outline0("CALL SN76489PROGPULSE0" ); \
226 if ( ( c & 0x02 ) ) \
227 outline0("CALL SN76489PROGPULSE1" ); \
228 if ( ( c & 0x04 ) ) \
229 outline0("CALL SN76489PROGPULSE2" );
230
231#define PROGRAM_PULSE_V( c, p ) \
232 outline1("LD A, (%s)", p ); \
233 outline0("LD E, A" ); \
234 outline1("LD A, (%s)", address_displacement(_environment, p, "1") ); \
235 outline0("LD D, A" ); \
236 if ( c == NULL ) { \
237 outline0("LD A, $7"); \
238 } else { \
239 outline1("LD A, (%s)", c ); \
240 } \
241 outline0("CALL SN76489PROGPULSE" );
242
243#define PROGRAM_PULSE_SV( c, p ) \
244 outline1("LD A, $%2.2x", ( p & 0xff ) ); \
245 outline0("LD E, A" ); \
246 outline1("LD A, $%2.2x", ( ( p >> 8 ) & 0xff ) ); \
247 outline0("LD D, A" ); \
248 if ( c == NULL ) { \
249 outline0("LD A, $7"); \
250 } else { \
251 outline1("LD A, (%s)", c ); \
252 } \
253 outline0("CALL SN76489PROGPULSE" );
254
255#define PROGRAM_NOISE( c ) \
256 outline0("LD A, $82" ); \
257 outline0("LD B, A" ); \
258 if ( ( c & 0x01 ) ) \
259 outline0("CALL SN76489PROGCTR0" ); \
260 if ( ( c & 0x02 ) ) \
261 outline0("CALL SN76489PROGCTR1" ); \
262 if ( ( c & 0x04 ) ) \
263 outline0("CALL SN76489PROGCTR2" );
264
265#define PROGRAM_NOISE_V( c, p ) \
266 outline0("LD A, $82" ); \
267 outline0("LD B, A" ); \
268 if ( c == NULL ) { \
269 outline0("LD A, $7"); \
270 } else { \
271 outline1("LD A, (%s)", c ); \
272 } \
273 outline0("CALL SN76489PROGCTR" );
274
275#define PROGRAM_NOISE_SV( c ) \
276 outline0("LD A, $82" ); \
277 outline0("LD B, A" ); \
278 if ( c == NULL ) { \
279 outline0("LD A, $7"); \
280 } else { \
281 outline1("LD A, (%s)", c ); \
282 } \
283 outline0("CALL SN76489PROGCTR" );
284
285#define PROGRAM_SAW( c ) \
286 outline0("LD A, $22" ); \
287 outline0("LD B, A" ); \
288 if ( ( c & 0x01 ) ) \
289 outline0("CALL SN76489PROGCTR0" ); \
290 if ( ( c & 0x02 ) ) \
291 outline0("CALL SN76489PROGCTR1" ); \
292 if ( ( c & 0x04 ) ) \
293 outline0("CALL SN76489PROGCTR2" );
294
295#define PROGRAM_SAW_V( c) \
296 outline0("LD A, $22" ); \
297 outline0("LD B, A" ); \
298 if ( c == NULL ) { \
299 outline0("LD A, $7"); \
300 } else { \
301 outline1("LD A, (%s)", c ); \
302 } \
303 outline0("CALL SN76489PROGCTR" );
304
305#define PROGRAM_SAW_SV( c ) \
306 outline0("LD A, $22" ); \
307 outline0("LD B, A" ); \
308 if ( c == NULL ) { \
309 outline0("LD A, $7"); \
310 } else { \
311 outline1("LD A, (%s)", c ); \
312 } \
313 outline0("CALL SN76489PROGCTR" );
314
315#define PROGRAM_TRIANGLE( c ) \
316 outline0("LD A, $12" ); \
317 outline0("LD B, A" ); \
318 if ( ( c & 0x01 ) ) \
319 outline0("CALL SN76489PROGCTR0" ); \
320 if ( ( c & 0x02 ) ) \
321 outline0("CALL SN76489PROGCTR1" ); \
322 if ( ( c & 0x04 ) ) \
323 outline0("CALL SN76489PROGCTR2" );
324
325#define PROGRAM_TRIANGLE_V( c ) \
326 outline0("LD A, $12" ); \
327 outline0("LD B, A" ); \
328 if ( c == NULL ) { \
329 outline0("LD A, $7"); \
330 } else { \
331 outline1("LD A, (%s)", c ); \
332 } \
333 outline0("CALL SN76489PROGCTR" );
334
335#define PROGRAM_TRIANGLE_SV( c ) \
336 outline0("LD A, $12" ); \
337 outline0("LD B, A" ); \
338 if ( c == NULL ) { \
339 outline0("LD A, $7"); \
340 } else { \
341 outline1("LD A, (%s)", c ); \
342 } \
343 outline0("CALL SN76489PROGCTR" );
344
345#define PROGRAM_SAW_TRIANGLE( c ) \
346 outline0("LD A, $32" ); \
347 outline0("LD B, A" ); \
348 if ( ( c & 0x01 ) ) \
349 outline0("CALL SN76489PROGCTR0" ); \
350 if ( ( c & 0x02 ) ) \
351 outline0("CALL SN76489PROGCTR1" ); \
352 if ( ( c & 0x04 ) ) \
353 outline0("CALL SN76489PROGCTR2" );
354
355#define PROGRAM_SAW_TRIANGLE_V( c ) \
356 outline0("LD A, $32" ); \
357 outline0("LD B, A" ); \
358 if ( c == NULL ) { \
359 outline0("LD A, $7"); \
360 } else { \
361 outline1("LD A, (%s)", c ); \
362 } \
363 outline0("CALL SN76489PROGCTR" );
364
365#define PROGRAM_SAW_TRIANGLE_SV( c ) \
366 outline0("LD A, $32" ); \
367 outline0("LD B, A" ); \
368 if ( c == NULL ) { \
369 outline0("LD A, $7"); \
370 } else { \
371 outline1("LD A, (%s)", c ); \
372 } \
373 outline0("CALL SN76489PROGCTR" );
374
375#define PROGRAM_ATTACK_DECAY( c, a, d ) \
376 outline1("LD A, $%2.2x", ( a & 0x0f ) ); \
377 outline0("LD E, A" ); \
378 outline1("LD A, $%2.2x", ( d & 0x0f ) ); \
379 outline0("LD D, A" ); \
380 if ( ( c & 0x01 ) ) \
381 outline0("CALL SN76489PROGAD0" ); \
382 if ( ( c & 0x02 ) ) \
383 outline0("CALL SN76489PROGAD1" ); \
384 if ( ( c & 0x04 ) ) \
385 outline0("CALL SN76489PROGAD2" );
386
387#define PROGRAM_ATTACK_DECAY_V( c, a, d ) \
388 outline1("LD A, %s", a ); \
389 outline0("LD E, A" ); \
390 outline1("LD A, %s", d ); \
391 outline0("LD D, A" ); \
392 if ( c == NULL ) { \
393 outline0("LD A, $7"); \
394 } else { \
395 outline1("LD A, (%s)", c ); \
396 } \
397 outline0("CALL SN76489PROGAD" );
398
399#define PROGRAM_ATTACK_DECAY_SV( c, a, d ) \
400 outline1("LD A, $%2.2x", ( a & 0x0f ) ); \
401 outline0("LD E, A" ); \
402 outline1("LD A, $%2.2x", ( d & 0x0f ) ); \
403 outline0("LD D, A" ); \
404 if ( c == NULL ) { \
405 outline0("LD A, $7"); \
406 } else { \
407 outline1("LD A, (%s)", c ); \
408 } \
409 outline0("CALL SN76489PROGAD" );
410
411#define PROGRAM_SUSTAIN_RELEASE( c, s, r ) \
412 outline1("LD A, $%2.2x", ( s & 0x0f ) ); \
413 outline0("LD E, A" ); \
414 outline1("LD A, $%2.2x", ( r & 0x0f ) ); \
415 outline0("LD D, A" ); \
416 if ( ( c & 0x01 ) ) \
417 outline0("CALL SN76489PROGSR0" ); \
418 if ( ( c & 0x02 ) ) \
419 outline0("CALL SN76489PROGSR1" ); \
420 if ( ( c & 0x04 ) ) \
421 outline0("CALL SN76489PROGSR2" );
422
423#define PROGRAM_SUSTAIN_RELEASE_V( c, s, r ) \
424 outline1("LD A, %s", s ); \
425 outline0("LD E, A" ); \
426 outline1("LD A, %s", r ); \
427 outline0("LD D, A" ); \
428 if ( c == NULL ) { \
429 outline0("LD A, $7"); \
430 } else { \
431 outline1("LD A, (%s)", c ); \
432 } \
433 outline0("CALL SN76489PROGSR" );
434
435#define PROGRAM_SUSTAIN_RELEASE_SV( c, s, r ) \
436 outline1("LD A, $%2.2x", ( s & 0x0f ) ); \
437 outline0("LD E, A" ); \
438 outline1("LD A, $%2.2x", ( r & 0x0f ) ); \
439 outline0("LD D, A" ); \
440 if ( c == NULL ) { \
441 outline0("LD A, $7"); \
442 } else { \
443 outline1("LD A, (%s)", c ); \
444 } \
445 outline0("CALL SN76489PROGSR" );
446
447#define STOP_FREQUENCY( c ) \
448 if ( ( c & 0x01 ) ) \
449 outline0("CALL SN76489STOP0" ); \
450 if ( ( c & 0x02 ) ) \
451 outline0("CALL SN76489STOP1" ); \
452 if ( ( c & 0x04 ) ) \
453 outline0("CALL SN76489STOP2" );
454
455#define STOP_FREQUENCY_V( c ) \
456 if ( c == NULL ) { \
457 outline0("LD A, $7"); \
458 } else { \
459 outline1("LD A, (%s)", c ); \
460 } \
461 outline0("CALL SN76489STOP" );
462
463#define STOP_FREQUENCY_SV( c ) \
464 if ( c == NULL ) { \
465 outline0("LD A, $7"); \
466 } else { \
467 outline1("LD A, (%s)", c ); \
468 } \
469 outline0("CALL SN76489STOP" );
470
471void sn76489z_set_program( Environment * _environment, int _channels, int _program ) {
472
473 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
474 deploy_preferred( sn76489startup, src_hw_sn76489z_startup_asm );
475
476 switch (_program) {
478 PROGRAM_NOISE(_channels);
479 PROGRAM_ATTACK_DECAY(_channels, 2, 11);
480 PROGRAM_SUSTAIN_RELEASE(_channels, 0, 1);
481 break;
483 PROGRAM_NOISE(_channels);
484 PROGRAM_ATTACK_DECAY(_channels, 2, 4);
485 PROGRAM_SUSTAIN_RELEASE(_channels, 0, 1);
486 break;
497 PROGRAM_TRIANGLE(_channels);
498 PROGRAM_ATTACK_DECAY(_channels, 4, 2);
499 PROGRAM_SUSTAIN_RELEASE(_channels, 14, 10);
500 break;
501
505 PROGRAM_PULSE(_channels, 1024);
506 PROGRAM_ATTACK_DECAY(_channels, 3, 3);
507 PROGRAM_SUSTAIN_RELEASE(_channels, 14, 3);
508 break;
509
518 PROGRAM_TRIANGLE(_channels);
519 PROGRAM_ATTACK_DECAY(_channels, 2, 10);
520 PROGRAM_SUSTAIN_RELEASE(_channels, 12, 14);
521 break;
522
523 default:
533 PROGRAM_TRIANGLE(_channels);
534 PROGRAM_ATTACK_DECAY(_channels, 3, 3);
535 PROGRAM_SUSTAIN_RELEASE(_channels, 14, 14);
536 break;
537
545 PROGRAM_PULSE(_channels, 128);
546 PROGRAM_ATTACK_DECAY(_channels, 10, 10);
547 PROGRAM_SUSTAIN_RELEASE(_channels, 14, 10);
548 break;
549
551 PROGRAM_PULSE(_channels, 128);
552 PROGRAM_ATTACK_DECAY(_channels, 1, 2);
553 PROGRAM_SUSTAIN_RELEASE(_channels, 4, 3);
554 break;
555
565 PROGRAM_TRIANGLE(_channels);
566 PROGRAM_ATTACK_DECAY(_channels, 2, 10);
567 PROGRAM_SUSTAIN_RELEASE(_channels, 12, 14);
568 break;
569
582 PROGRAM_PULSE(_channels, 128);
583 PROGRAM_ATTACK_DECAY(_channels, 10, 10);
584 PROGRAM_SUSTAIN_RELEASE(_channels, 14, 10);
585 break;
586
606 PROGRAM_NOISE(_channels);
607 PROGRAM_ATTACK_DECAY(_channels, 1, 14);
608 PROGRAM_SUSTAIN_RELEASE(_channels, 14, 14);
609 break;
610
638 PROGRAM_SAW(_channels);
639 PROGRAM_ATTACK_DECAY(_channels, 3, 3);
640 PROGRAM_SUSTAIN_RELEASE(_channels, 14, 14);
641 break;
642
665 PROGRAM_SAW(_channels);
666 PROGRAM_ATTACK_DECAY(_channels, 3, 3);
667 PROGRAM_SUSTAIN_RELEASE(_channels, 14, 14);
668 break;
669 }
670
671}
672
673void sn76489z_set_parameter( Environment * _environment, int _channels, int _parameter, int _value ) {
674
675}
676
677void sn76489z_set_frequency( Environment * _environment, int _channels, int _frequency ) {
678
679 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
680 deploy_preferred( sn76489startup, src_hw_sn76489z_startup_asm );
681
682 PROGRAM_FREQUENCY( _channels, _frequency );
683
684}
685
686void sn76489z_set_pitch( Environment * _environment, int _channels, int _pitch ) {
687
688 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
689 deploy_preferred( sn76489startup, src_hw_sn76489z_startup_asm );
690
691 PROGRAM_PITCH( _channels, _pitch );
692
693}
694
695void sn76489z_set_note( Environment * _environment, int _channels, int _note ) {
696
697 sn76489z_set_pitch( _environment, _channels, SOUND_FREQUENCIES[_note] );
698
699}
700
701void sn76489z_stop( Environment * _environment, int _channels ) {
702
703 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
704 deploy_preferred( sn76489startup, src_hw_sn76489z_startup_asm );
705
706 STOP_FREQUENCY( _channels );
707
708}
709
710void sn76489z_start_var( Environment * _environment, char * _channels ) {
711
712 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
713 deploy_preferred( sn76489startup, src_hw_sn76489z_startup_asm );
714
715 if ( _channels ) {
716 outline1("LD A, (%s)", _channels );
717 } else {
718 outline0("LD A, $7" );
719 }
720 outline0("CALL SN76489START");
721
722}
723
724void sn76489z_set_volume_vars( Environment * _environment, char * _channels, char * _volume ) {
725
726 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
727 deploy_preferred( sn76489startup, src_hw_sn76489z_startup_asm );
728
729 outline1("LD A, (%s)", _volume );
730 outline0("SRL A" );
731 outline0("SRL A" );
732 outline0("SRL A" );
733 outline0("SRL A" );
734 outline0("LD B, A" );
735 if ( _channels ) {
736 outline1("LD A, (%s)", _channels );
737 } else {
738 outline0("LD A, $7" );
739 }
740 outline0("CALL SN76489STARTVOL");
741
742}
743
744void sn76489z_set_volume_semi_var( Environment * _environment, char * _channel, int _volume ) {
745
746 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
747 deploy_preferred( sn76489startup, src_hw_sn76489z_startup_asm );
748
749 outline1("LD A, $%2.2x", _volume );
750 outline0("LD B, A" );
751 if ( _channel ) {
752 outline1("LD A, (%s)", _channel );
753 } else {
754 outline0("LD A, $7" );
755 }
756 outline0("CALL SN76489STARTVOL");
757
758}
759
760void sn76489z_set_program_semi_var( Environment * _environment, char * _channels, int _program ) {
761
762 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
763 deploy_preferred( sn76489startup, src_hw_sn76489z_startup_asm );
764
765 switch (_program) {
767 PROGRAM_NOISE_SV(_channels);
768 PROGRAM_ATTACK_DECAY_SV(_channels, 2, 11);
769 PROGRAM_SUSTAIN_RELEASE_SV(_channels, 0, 1);
770 break;
772 PROGRAM_NOISE_SV(_channels);
773 PROGRAM_ATTACK_DECAY_SV(_channels, 2, 4);
774 PROGRAM_SUSTAIN_RELEASE_SV(_channels, 0, 1);
775 break;
786 PROGRAM_TRIANGLE_SV(_channels);
787 PROGRAM_ATTACK_DECAY_SV(_channels, 4, 2);
788 PROGRAM_SUSTAIN_RELEASE_SV(_channels, 14, 10);
789 break;
790
794 PROGRAM_PULSE_SV(_channels, 1024);
795 PROGRAM_ATTACK_DECAY_SV(_channels, 3, 3);
796 PROGRAM_SUSTAIN_RELEASE_SV(_channels, 14, 3);
797 break;
798
807 PROGRAM_TRIANGLE_SV(_channels);
808 PROGRAM_ATTACK_DECAY_SV(_channels, 2, 10);
809 PROGRAM_SUSTAIN_RELEASE_SV(_channels, 12, 14);
810 break;
811
812 default:
822 PROGRAM_TRIANGLE_SV(_channels);
823 PROGRAM_ATTACK_DECAY_SV(_channels, 3, 3);
824 PROGRAM_SUSTAIN_RELEASE_SV(_channels, 14, 14);
825 break;
826
834 PROGRAM_PULSE_SV(_channels, 128);
835 PROGRAM_ATTACK_DECAY_SV(_channels, 10, 10);
836 PROGRAM_SUSTAIN_RELEASE_SV(_channels, 14, 10);
837 break;
838
840 PROGRAM_PULSE_SV(_channels, 128);
841 PROGRAM_ATTACK_DECAY_SV(_channels, 1, 2);
842 PROGRAM_SUSTAIN_RELEASE_SV(_channels, 4, 3);
843 break;
844
854 PROGRAM_TRIANGLE_SV(_channels);
855 PROGRAM_ATTACK_DECAY_SV(_channels, 2, 10);
856 PROGRAM_SUSTAIN_RELEASE_SV(_channels, 12, 14);
857 break;
858
871 PROGRAM_PULSE_SV(_channels, 128);
872 PROGRAM_ATTACK_DECAY_SV(_channels, 10, 10);
873 PROGRAM_SUSTAIN_RELEASE_SV(_channels, 14, 10);
874 break;
875
895 PROGRAM_NOISE_SV(_channels);
896 PROGRAM_ATTACK_DECAY_SV(_channels, 1, 14);
897 PROGRAM_SUSTAIN_RELEASE_SV(_channels, 14, 14);
898 break;
899
927 PROGRAM_SAW_SV(_channels);
928 PROGRAM_ATTACK_DECAY_SV(_channels, 3, 3);
929 PROGRAM_SUSTAIN_RELEASE_SV(_channels, 14, 14);
930 break;
931
954 PROGRAM_SAW_SV(_channels);
955 PROGRAM_ATTACK_DECAY_SV(_channels, 3, 3);
956 PROGRAM_SUSTAIN_RELEASE_SV(_channels, 14, 14);
957 break;
958 }
959
960}
961
962void sn76489z_set_frequency_vars( Environment * _environment, char * _channels, char * _frequency ) {
963
964 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
965 deploy_preferred( sn76489startup, src_hw_sn76489z_startup_asm );
966
967 outline1("LD A, (%s)", _frequency );
968 outline0("LD E, A" );
969 outline1("LD A, (%s)", address_displacement(_environment, _frequency, "1") );
970 outline0("LD D, A" );
971 if ( _channels ) {
972 outline1("LD A, (%s)", _channels );
973 } else {
974 outline0("LD A, $7" );
975 }
976
977 outline0("CALL SN76489FREQ");
978
979}
980
981void sn76489z_set_pitch_vars( Environment * _environment, char * _channels, char * _pitch ) {
982
983 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
984 deploy_preferred( sn76489startup, src_hw_sn76489z_startup_asm );
985
986 outline1("LD A, (%s)", _pitch );
987 outline0("LD E, A" );
988 outline1("LD A, (%s)", address_displacement(_environment, _pitch, "1") );
989 outline0("LD D, A" );
990 if ( _channels ) {
991 outline1("LD A, (%s)", _channels );
992 } else {
993 outline0("LD A, $7" );
994 }
995
996 outline0("CALL SN76489PROGFREQ");
997
998}
999
1000void sn76489z_set_note_vars( Environment * _environment, char * _channels, char * _note ) {
1001
1002 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
1003 deploy_preferred( sn76489startup, src_hw_sn76489z_startup_asm );
1004
1005 outline0("LD HL, SN76489FREQTABLE");
1006 outline1("LD A, (%s)", _note);
1007 outline0("LD E, A");
1008 outline0("LD A, 0");
1009 outline0("LD D, A");
1010 outline0("SLA E");
1011 outline0("RL D");
1012 outline0("ADD HL, DE");
1013 outline0("LD A, (HL)");
1014 outline0("LD E, A");
1015 outline0("INC HL");
1016 outline0("LD A, (HL)");
1017 outline0("LD D, A");
1018
1019 if ( _channels ) {
1020 outline1("LD A, (%s)", _channels );
1021 } else {
1022 outline0("LD A,$7" );
1023 }
1024
1025 outline0("CALL SN76489PROGFREQ");
1026
1027}
1028
1029void sn76489z_stop_vars( Environment * _environment, char * _channels ) {
1030
1031 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
1032 deploy_preferred( sn76489startup, src_hw_sn76489z_startup_asm );
1033
1034 if ( _channels ) {
1035 outline1("LD A, (%s)", _channels );
1036 } else {
1037 outline0("LD A, $7" );
1038 }
1039 outline0("CALL SN76489STOP");
1040
1041}
1042
1043void sn76489z_music( Environment * _environment, char * _music, int _size, int _loop, int _type ) {
1044
1045 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
1046 deploy_preferred( sn76489startup, src_hw_sn76489z_startup_asm );
1047 deploy( music, src_hw_sn76489z_music_asm );
1048
1049 outline0("DI");
1050 outline1("LD HL, %s", _music);
1051 outline1("LD A, $%2.2x", ( _size>>8 ) & 0xff);
1052 outline0("LD B, A");
1053 outline1("LD A, $%2.2x", _size & 0xff );
1054 outline0("LD C, A");
1055 outline1("LD A, $%2.2x", _loop );
1056 outline0("LD (SN76489MUSICLOOP), A");
1057 outline1("LD A, $%2.2x", _type );
1058 outline0("LD (SN76489MUSICTYPE), A");
1059 outline0("CALL MUSICPLAYERRESET");
1060 outline0("EI");
1061
1062}
1063
1064void sn76489z_set_duration( Environment * _environment, int _channel, int _duration ) {
1065
1066 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
1067 deploy_preferred( sn76489startup, src_hw_sn76489z_startup_asm );
1068
1069 PROGRAM_DURATION( _channel, _duration );
1070
1071}
1072
1073void sn76489z_wait_duration( Environment * _environment, int _channel ) {
1074
1075 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
1076 deploy_preferred( sn76489startup, src_hw_sn76489z_startup_asm );
1077
1078 WAIT_DURATION( _channel );
1079
1080}
1081
1082void sn76489z_set_duration_vars( Environment * _environment, char * _channel, char * _duration ) {
1083
1084 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
1085 deploy_preferred( sn76489startup, src_hw_sn76489z_startup_asm );
1086
1087 if ( _duration ) {
1088 outline1("LD HL, (%s)", _duration );
1089 } else {
1090 outline0("LD DE, 50" );
1091 }
1092 if ( _channel ) {
1093 outline1("LD A, (%s)", _channel );
1094 } else {
1095 outline0("LD A, $7" );
1096 }
1097
1098 outline0("CALL SN76489PROGDUR" );
1099
1100}
1101
1102void sn76489z_wait_duration_vars( Environment * _environment, char * _channel ) {
1103
1104 deploy( sn76489vars, src_hw_sn76489z_vars_asm );
1105 deploy_preferred( sn76489startup, src_hw_sn76489z_startup_asm );
1106
1107 if ( _channel ) {
1108 outline1("LD A, (%s)", _channel );
1109 } else {
1110 outline0("LD A, $7" );
1111 }
1112
1113 outline0("CALL SN76489WAITDUR" );
1114
1115}
1116
1117#endif
void cpu_label(Environment *_environment, char *_label)
Definition 6309.c:356
void cpu_call(Environment *_environment, char *_label)
Definition 6309.c:3755
Variable * variable_import(Environment *_environment, char *_name, VariableType _type, int _size_or_value)
void variable_global(Environment *_environment, char *_pattern)
char * address_displacement(Environment *_environment, char *_address, char *_displacement)
#define PROGRAM_DURATION(c, d)
Definition sn76489z.c:163
void sn76489z_start(Environment *_environment, int _channels)
Definition sn76489z.c:98
#define PROGRAM_TRIANGLE_SV(c)
Definition sn76489z.c:335
#define PROGRAM_SAW_SV(c)
Definition sn76489z.c:305
void sn76489z_set_frequency_vars(Environment *_environment, char *_channels, char *_frequency)
Definition sn76489z.c:962
void sn76489z_wait_duration(Environment *_environment, int _channel)
Definition sn76489z.c:1073
#define PROGRAM_FREQUENCY(c, f)
Definition sn76489z.c:127
#define PROGRAM_SAW(c)
Definition sn76489z.c:285
#define PROGRAM_NOISE_SV(c)
Definition sn76489z.c:275
void sn76489z_set_pitch_vars(Environment *_environment, char *_channels, char *_pitch)
Definition sn76489z.c:981
void sn76489z_set_note(Environment *_environment, int _channels, int _note)
Definition sn76489z.c:695
#define WAIT_DURATION(c)
Definition sn76489z.c:175
void sn76489z_set_volume_semi_var(Environment *_environment, char *_channel, int _volume)
Definition sn76489z.c:744
void sn76489z_set_parameter(Environment *_environment, int _channels, int _parameter, int _value)
Definition sn76489z.c:673
void sn76489z_stop_vars(Environment *_environment, char *_channels)
Definition sn76489z.c:1029
void sn76489z_set_note_vars(Environment *_environment, char *_channels, char *_note)
Definition sn76489z.c:1000
void sn76489z_set_duration(Environment *_environment, int _channel, int _duration)
Definition sn76489z.c:1064
#define STOP_FREQUENCY(c)
Definition sn76489z.c:447
#define PROGRAM_ATTACK_DECAY(c, a, d)
Definition sn76489z.c:375
#define PROGRAM_SUSTAIN_RELEASE_SV(c, s, r)
Definition sn76489z.c:435
void sn76489z_set_pitch(Environment *_environment, int _channels, int _pitch)
Definition sn76489z.c:686
void sn76489z_initialization(Environment *_environment)
Definition sn76489z.c:51
#define PROGRAM_SUSTAIN_RELEASE(c, s, r)
Definition sn76489z.c:411
#define PROGRAM_NOISE(c)
Definition sn76489z.c:255
void sn76489z_set_volume(Environment *_environment, int _channels, int _volume)
Definition sn76489z.c:115
#define PROGRAM_PULSE_SV(c, p)
Definition sn76489z.c:243
#define PROGRAM_PITCH(c, f)
Definition sn76489z.c:183
void sn76489z_finalization(Environment *_environment)
Definition sn76489z.c:87
void sn76489z_music(Environment *_environment, char *_music, int _size, int _loop, int _type)
Definition sn76489z.c:1043
void sn76489z_wait_duration_vars(Environment *_environment, char *_channel)
Definition sn76489z.c:1102
void sn76489z_stop(Environment *_environment, int _channels)
Definition sn76489z.c:701
#define PROGRAM_PULSE(c, p)
Definition sn76489z.c:219
void sn76489z_start_var(Environment *_environment, char *_channels)
Definition sn76489z.c:710
void sn76489z_set_frequency(Environment *_environment, int _channels, int _frequency)
Definition sn76489z.c:677
void sn76489z_set_program_semi_var(Environment *_environment, char *_channels, int _program)
Definition sn76489z.c:760
#define PROGRAM_TRIANGLE(c)
Definition sn76489z.c:315
void sn76489z_set_duration_vars(Environment *_environment, char *_channel, char *_duration)
Definition sn76489z.c:1082
void sn76489z_set_program(Environment *_environment, int _channels, int _program)
Definition sn76489z.c:471
#define PROGRAM_ATTACK_DECAY_SV(c, a, d)
Definition sn76489z.c:399
void sn76489z_set_volume_vars(Environment *_environment, char *_channels, char *_volume)
Definition sn76489z.c:724
int sn76489startup
Definition ugbc.h:1835
Deployed deployed
Definition ugbc.h:2921
#define IMF_INSTRUMENT_LEAD_8_BASS_LEAD
Definition ugbc.h:4661
#define IMF_INSTRUMENT_MARIMBA
Definition ugbc.h:4586
#define IMF_INSTRUMENT_LEAD_6_VOICE
Definition ugbc.h:4659
#define IMF_INSTRUMENT_DRAWBAR_ORGAN
Definition ugbc.h:4590
#define IMF_INSTRUMENT_FRETLESS_BASS
Definition ugbc.h:4609
#define IMF_INSTRUMENT_PAD_1_NEW_AGE
Definition ugbc.h:4662
#define IMF_INSTRUMENT_VIOLIN
Definition ugbc.h:4614
#define IMF_INSTRUMENT_SYNTH_BASS_1
Definition ugbc.h:4612
#define IMF_INSTRUMENT_MELODIC_TOM
Definition ugbc.h:4691
#define IMF_INSTRUMENT_REVERSE_CYMBAL
Definition ugbc.h:4693
#define IMF_INSTRUMENT_ELECTRIC_BASS_FINGER
Definition ugbc.h:4607
#define IMF_INSTRUMENT_HARMONICA
Definition ugbc.h:4596
#define IMF_INSTRUMENT_BLOWN_BOTTLE
Definition ugbc.h:4650
#define IMF_INSTRUMENT_PAD_3_POLYSYNTH
Definition ugbc.h:4664
#define IMF_INSTRUMENT_FX_8_SCI_FI
Definition ugbc.h:4677
#define IMF_INSTRUMENT_RECORDER
Definition ugbc.h:4648
#define IMF_INSTRUMENT_FX_6_GOBLINS
Definition ugbc.h:4675
#define IMF_INSTRUMENT_FX_1_RAIN
Definition ugbc.h:4670
#define IMF_INSTRUMENT_SYNTH_VOICE
Definition ugbc.h:4628
#define IMF_INSTRUMENT_TENOR_SAX
Definition ugbc.h:4640
#define IMF_INSTRUMENT_PICCOLO
Definition ugbc.h:4646
#define IMF_INSTRUMENT_LEAD_7_FIFTHS
Definition ugbc.h:4660
#define IMF_INSTRUMENT_SLAP_BASS_1
Definition ugbc.h:4610
#define IMF_INSTRUMENT_MUSIC_BOX
Definition ugbc.h:4584
#define IMF_INSTRUMENT_SOPRANO_SAX
Definition ugbc.h:4638
#define IMF_INSTRUMENT_TRUMPET
Definition ugbc.h:4630
#define IMF_INSTRUMENT_BIRD_TWEET
Definition ugbc.h:4697
#define IMF_INSTRUMENT_PAD_8_SWEEP
Definition ugbc.h:4669
#define IMF_INSTRUMENT_CHURCH_ORGAN
Definition ugbc.h:4593
#define IMF_INSTRUMENT_HELICOPTER
Definition ugbc.h:4699
#define IMF_INSTRUMENT_BRIGHT_ACOUSTIC_PIANO
Definition ugbc.h:4575
#define IMF_INSTRUMENT_CELESTA
Definition ugbc.h:4582
#define IMF_INSTRUMENT_ACOUSTIC_GUITAR_NYLON
Definition ugbc.h:4598
#define IMF_INSTRUMENT_GLOCKENSPIEL
Definition ugbc.h:4583
#define IMF_INSTRUMENT_ORCHESTRAL_HARP
Definition ugbc.h:4620
#define IMF_INSTRUMENT_BREATH_NOISE
Definition ugbc.h:4695
#define IMF_INSTRUMENT_BAG_PIPE
Definition ugbc.h:4683
#define IMF_INSTRUMENT_ELECTRIC_GUITAR_JAZZ
Definition ugbc.h:4600
#define IMF_INSTRUMENT_ELECTRIC_GRAND_PIANO
Definition ugbc.h:4576
#define IMF_INSTRUMENT_SITAR
Definition ugbc.h:4678
#define IMF_INSTRUMENT_APPLAUSE
Definition ugbc.h:4700
#define IMF_INSTRUMENT_WHISTLE
Definition ugbc.h:4652
#define IMF_INSTRUMENT_PERCUSSIVE_ORGAN
Definition ugbc.h:4591
#define IMF_INSTRUMENT_HONKY_TONK_PIANO
Definition ugbc.h:4577
#define IMF_INSTRUMENT_CHOIR_AAHS
Definition ugbc.h:4626
#define IMF_INSTRUMENT_SHANAI
Definition ugbc.h:4685
#define IMF_INSTRUMENT_CELLO
Definition ugbc.h:4616
#define IMF_INSTRUMENT_FX_3_CRYSTAL
Definition ugbc.h:4672
#define IMF_INSTRUMENT_ELECTRIC_GUITAR_MUTED
Definition ugbc.h:4602
#define IMF_INSTRUMENT_HARPSICHORD
Definition ugbc.h:4580
#define IMF_INSTRUMENT_BRASS_SECTION
Definition ugbc.h:4635
#define IMF_INSTRUMENT_ELECTRIC_BASS_PICK
Definition ugbc.h:4608
#define IMF_INSTRUMENT_FX_5_BRIGHTNESS
Definition ugbc.h:4674
#define IMF_INSTRUMENT_FLUTE
Definition ugbc.h:4647
struct _Environment Environment
Structure of compilation environment.
@ VT_BYTE
Definition ugbc.h:450
@ VT_ADDRESS
Definition ugbc.h:465
#define IMF_INSTRUMENT_ELECTRIC_GUITAR_CLEAN
Definition ugbc.h:4601
#define IMF_INSTRUMENT_ACOUSTIC_BASS
Definition ugbc.h:4606
#define IMF_INSTRUMENT_GUITAR_FRET_NOISE
Definition ugbc.h:4694
#define IMF_INSTRUMENT_SYNTHSTRINGS_2
Definition ugbc.h:4625
#define IMF_INSTRUMENT_PAD_4_CHOIR
Definition ugbc.h:4665
#define IMF_INSTRUMENT_LEAD_2_SAWTOOTH
Definition ugbc.h:4655
#define deploy_preferred(s, e)
Definition ugbc.h:4299
#define IMF_INSTRUMENT_DULCIMER
Definition ugbc.h:4589
#define IMF_INSTRUMENT_KOTO
Definition ugbc.h:4681
#define IMF_INSTRUMENT_TUBA
Definition ugbc.h:4632
#define IMF_INSTRUMENT_GUITAR_HARMONICS
Definition ugbc.h:4605
#define IMF_INSTRUMENT_CLAVI
Definition ugbc.h:4581
#define IMF_INSTRUMENT_BANJO
Definition ugbc.h:4679
#define IMF_INSTRUMENT_SYNTHBRASS_2
Definition ugbc.h:4637
#define IMF_INSTRUMENT_LEAD_4_CHIFF
Definition ugbc.h:4657
#define IMF_INSTRUMENT_VOICE_OOHS
Definition ugbc.h:4627
#define IMF_INSTRUMENT_TANGO_ACCORDION
Definition ugbc.h:4597
#define IMF_INSTRUMENT_FX_7_ECHOES
Definition ugbc.h:4676
#define IMF_INSTRUMENT_PAD_6_METALLIC
Definition ugbc.h:4667
#define IMF_INSTRUMENT_PAD_5_BOWED
Definition ugbc.h:4666
#define IMF_INSTRUMENT_GUNSHOT
Definition ugbc.h:4701
#define IMF_INSTRUMENT_REED_ORGAN
Definition ugbc.h:4594
#define IMF_INSTRUMENT_ORCHESTRA_HIT
Definition ugbc.h:4629
#define IMF_INSTRUMENT_SYNTH_DRUM
Definition ugbc.h:4692
#define IMF_INSTRUMENT_SEASHORE
Definition ugbc.h:4696
#define IMF_INSTRUMENT_OCARINA
Definition ugbc.h:4653
#define IMF_INSTRUMENT_TELEPHONE_RING
Definition ugbc.h:4698
#define IMF_INSTRUMENT_FX_2_SOUNDTRACK
Definition ugbc.h:4671
#define IMF_INSTRUMENT_ACOUSTIC_GUITAR_STEEL
Definition ugbc.h:4599
#define IMF_INSTRUMENT_SYNTHSTRINGS_1
Definition ugbc.h:4624
#define IMF_INSTRUMENT_MUTED_TRUMPET
Definition ugbc.h:4633
#define IMF_INSTRUMENT_PAN_FLUTE
Definition ugbc.h:4649
#define IMF_INSTRUMENT_TINKLE_BELL
Definition ugbc.h:4686
#define IMF_INSTRUMENT_VIBRAPHONE
Definition ugbc.h:4585
#define IMF_INSTRUMENT_KALIMBA
Definition ugbc.h:4682
#define IMF_INSTRUMENT_FIDDLE
Definition ugbc.h:4684
#define IMF_INSTRUMENT_PAD_7_HALO
Definition ugbc.h:4668
#define IMF_INSTRUMENT_TUBULAR_BELLS
Definition ugbc.h:4588
#define IMF_INSTRUMENT_LEAD_1_SQUARE
Definition ugbc.h:4654
#define IMF_INSTRUMENT_STRING_ENSEMBLE_1
Definition ugbc.h:4622
#define outline0(s)
Definition ugbc.h:4252
#define IMF_INSTRUMENT_DISTORTION_GUITAR
Definition ugbc.h:4604
#define IMF_INSTRUMENT_PAD_2_WARM
Definition ugbc.h:4663
#define IMF_INSTRUMENT_ACCORDION
Definition ugbc.h:4595
#define IMF_INSTRUMENT_SLAP_BASS_2
Definition ugbc.h:4611
#define IMF_INSTRUMENT_LEAD_5_CHARANG
Definition ugbc.h:4658
#define IMF_INSTRUMENT_OBOE
Definition ugbc.h:4642
#define IMF_INSTRUMENT_STEEL_DRUMS
Definition ugbc.h:4688
#define IMF_INSTRUMENT_BASSOON
Definition ugbc.h:4644
#define IMF_INSTRUMENT_TIMPANI
Definition ugbc.h:4621
#define IMF_INSTRUMENT_ROCK_ORGAN
Definition ugbc.h:4592
#define IMF_INSTRUMENT_SHAMISEN
Definition ugbc.h:4680
#define IMF_INSTRUMENT_CLARINET
Definition ugbc.h:4645
#define IMF_INSTRUMENT_ACOUSTIC_GRAND_PIANO
Definition ugbc.h:4574
#define IMF_INSTRUMENT_ALTO_SAX
Definition ugbc.h:4639
#define IMF_INSTRUMENT_EXPLOSION
Definition ugbc.h:4573
#define IMF_INSTRUMENT_PIZZICATO_STRINGS
Definition ugbc.h:4619
#define IMF_INSTRUMENT_WOODBLOCK
Definition ugbc.h:4689
#define IMF_INSTRUMENT_XYLOPHONE
Definition ugbc.h:4587
#define IMF_INSTRUMENT_AGOGO
Definition ugbc.h:4687
#define IMF_INSTRUMENT_SYNTHBRASS_1
Definition ugbc.h:4636
#define outline1(s, a)
Definition ugbc.h:4253
#define IMF_INSTRUMENT_LEAD_3_CALLIOPE
Definition ugbc.h:4656
#define IMF_INSTRUMENT_STRING_ENSEMBLE_2
Definition ugbc.h:4623
#define IMF_INSTRUMENT_SYNTH_BASS_2
Definition ugbc.h:4613
#define IMF_INSTRUMENT_ELECTRIC_PIANO2
Definition ugbc.h:4579
#define IMF_INSTRUMENT_FRENCH_HORN
Definition ugbc.h:4634
#define IMF_INSTRUMENT_TREMOLO_STRINGS
Definition ugbc.h:4618
#define IMF_INSTRUMENT_FX_4_ATMOSPHERE
Definition ugbc.h:4673
#define IMF_INSTRUMENT_ENGLISH_HORN
Definition ugbc.h:4643
#define IMF_INSTRUMENT_BARITONE_SAX
Definition ugbc.h:4641
#define IMF_INSTRUMENT_SHAKUHACHI
Definition ugbc.h:4651
#define IMF_INSTRUMENT_CONTRABASS
Definition ugbc.h:4617
#define IMF_INSTRUMENT_VIOLA
Definition ugbc.h:4615
#define deploy(s, e)
Definition ugbc.h:4288
#define IMF_INSTRUMENT_TROMBONE
Definition ugbc.h:4631
#define IMF_INSTRUMENT_OVERDRIVEN_GUITAR
Definition ugbc.h:4603
#define IMF_INSTRUMENT_ELECTRIC_PIANO1
Definition ugbc.h:4578
#define IMF_INSTRUMENT_TAIKO_DRUM
Definition ugbc.h:4690