ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
ay8910.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(__msx1__) || defined(__cpc__)
32
33#include "../ugbc.h"
34
35static unsigned int SOUND_FREQUENCIES[] = {
36// 6841, 6841, 6841, 6841, 6841, 6841, 6841, 6841, 6841, 6841, 6841, 6841,
37// 6841, 6841, 6841, 6841, 6841, 6841, 6841, 6841, 6841, 6841, 6841, 6841,
38// 6457, 6095, 5753, 5430, 5125, 4837, 4566, 4310, 4068,
39 3839, 3624, 3420,
40 3229, 3047, 2876, 2715, 2562, 2419, 2283, 2155, 2034, 1920, 1812, 1710,
41 1614, 1524, 1438, 1357, 1281, 1209, 1141, 1077, 1017, 960, 906, 855,
42 807, 762, 719, 679, 641, 605, 571, 539, 508, 480, 453, 428,
43 404, 381, 360, 339, 320, 302, 285, 269, 254, 240, 226, 214,
44 202, 190, 180, 170, 160, 151, 143, 135, 127, 120, 113, 107,
45 101, 95, 90, 85, 80, 76, 71, 67, 64, 60, 57, 53,
46 50, 48, 45, 42, 40, 38, 36, 34, 32, 30, 28
47};
48
49void ay8910_initialization( Environment * _environment ) {
50
51 variable_import( _environment, "AY8910MUSICREADY", VT_BYTE, 0 );
52 variable_global( _environment, "AY8910MUSICREADY" );
53 variable_import( _environment, "AY8910MUSICPAUSE", VT_BYTE, 0 );
54 variable_global( _environment, "AY8910MUSICPAUSE" );
55 variable_import( _environment, "AY8910MUSICLOOP", VT_BYTE, 0 );
56 variable_global( _environment, "AY8910MUSICLOOP" );
57 variable_import( _environment, "AY8910BLOCKS", VT_BYTE, 0 );
58 variable_global( _environment, "AY8910BLOCKS" );
59 variable_import( _environment, "AY8910LASTBLOCK", VT_BYTE, 0 );
60 variable_global( _environment, "AY8910LASTBLOCK" );
61 variable_import( _environment, "AY8910TMPPTR2", VT_ADDRESS, 0 );
62 variable_global( _environment, "AY8910TMPPTR2" );
63 variable_import( _environment, "AY8910TMPPTR", VT_ADDRESS, 0 );
64 variable_global( _environment, "AY8910TMPPTR" );
65 variable_import( _environment, "AY8910TMPOFS", VT_BYTE, 0 );
66 variable_global( _environment, "AY8910TMPOFS" );
67 variable_import( _environment, "AY8910TMPLEN", VT_BYTE, 0 );
68 variable_global( _environment, "AY8910TMPLEN" );
69 variable_import( _environment, "AY8910JIFFIES", VT_BYTE, 0 );
70 variable_global( _environment, "AY8910JIFFIES" );
71
72 variable_import( _environment, "AY8910BLOCKS_BACKUP", VT_BYTE, 0 );
73 variable_global( _environment, "AY8910BLOCKS_BACKUP" );
74 variable_import( _environment, "AY8910LASTBLOCK_BACKUP", VT_BYTE, 0 );
75 variable_global( _environment, "AY8910LASTBLOCK_BACKUP" );
76 variable_import( _environment, "AY8910TMPPTR_BACKUP", VT_ADDRESS, 0 );
77 variable_global( _environment, "AY8910TMPPTR_BACKUP" );
78
79 cpu_call( _environment, "AY8910STARTUP" );
80
81}
82
83void ay8910_finalization( Environment * _environment ) {
84
85 if ( ! _environment->deployed.ay8910startup ) {
86 cpu_label( _environment, "AY8910STARTUP" );
87 outline0( "RET" );
88 }
89
90}
91
92void ay8910_start( Environment * _environment, int _channels ) {
93
94 deploy( ay8910vars, src_hw_ay8910_vars_asm );
95 deploy( ay8910startup, src_hw_ay8910_startup_asm );
96
97 if ( _channels & 0x01 ) {
98 outline0("CALL AY8910START0");
99 }
100 if ( _channels & 0x02 ) {
101 outline0("CALL AY8910START1");
102 }
103 if ( _channels & 0x04 ) {
104 outline0("CALL AY8910START2");
105 }
106 if ( _channels & 0x08 ) {
107 outline0("CALL AY8910STARTN0");
108 }
109
110}
111
112void ay8910_set_volume( Environment * _environment, int _channels, int _volume ) {
113
114 deploy( ay8910vars, src_hw_ay8910_vars_asm );
115 deploy( ay8910startup, src_hw_ay8910_startup_asm );
116
117 outline1("LD A, $%2.2x", ( _volume & 0x0f ) );
118 outline0("LD E, A" );
119 outline1("LD A, $%2.2x", ( _channels & 0x07 ) );
120 outline0("CALL AY8910STARTVOL");
121
122}
123
124#define PROGRAM_FREQUENCY( c, f ) \
125 outline1("LD A, $%2.2x", ( f & 0xff ) ); \
126 outline0("LD E, A" ); \
127 outline1("LD A, $%2.2x", ( ( f >> 8 ) & 0xff ) ); \
128 outline0("LD D, A" ); \
129 if ( ( c & 0x01 ) ) \
130 outline0("CALL AY8910PROGFREQ0" ); \
131 if ( ( c & 0x02 ) ) \
132 outline0("CALL AY8910PROGFREQ1" ); \
133 if ( ( c & 0x04 ) ) \
134 outline0("CALL AY8910PROGFREQ2" ); \
135 if ( ( c & 0x08 ) ) \
136 outline0("CALL AY8910PROGFREQN0" );
137
138#define PROGRAM_FREQUENCY_V( c, f ) \
139 outline1("LD A, (%s)", f ); \
140 outline0("LD E, A" ); \
141 outline1("LD A, (%s)", address_displacement(_environment, f, "1") ); \
142 outline0("LD D, A" ); \
143 if ( c == NULL ) { \
144 outline0("LD A, $7"); \
145 } else { \
146 outline1("LD A, (%s)", c ); \
147 } \
148 outline0("CALL AY8910FREQ" );
149
150#define PROGRAM_FREQUENCY_SV( c, f ) \
151 outline1("LD A, $%2.2x", ( f & 0xff ) ); \
152 outline0("LD E, A" ); \
153 outline1("LD A, $%2.2x", ( ( f >> 8 ) & 0xff ) ); \
154 outline0("LD D, A" ); \
155 if ( c == NULL ) { \
156 outline0("LD A, $7"); \
157 } else { \
158 outline1("LD A, (%s)", c ); \
159 } \
160 outline0("CALL AY8910FREQ2" );
161
162#define PROGRAM_DURATION( c, d ) \
163 outline1("LD A, $%2.2x", ( d & 0xff ) ); \
164 outline0("LD E, A" ); \
165 outline1("LD A, $%2.2x", ( ( d >> 8 ) & 0xff ) ); \
166 outline0("LD D, A" ); \
167 if ( ( c & 0x01 ) ) \
168 outline0("CALL AY8910PROGDUR0" ); \
169 if ( ( c & 0x02 ) ) \
170 outline0("CALL AY8910PROGDUR1" ); \
171 if ( ( c & 0x04 ) ) \
172 outline0("CALL AY8910PROGDUR2" ); \
173 if ( ( c & 0x08 ) ) \
174 outline0("CALL AY8910PROGDURN0" );
175
176#define WAIT_DURATION( c ) \
177 if ( ( c & 0x01 ) ) \
178 outline0("CALL AY8910WAITDUR0" ); \
179 if ( ( c & 0x02 ) ) \
180 outline0("CALL AY8910WAITDUR1" ); \
181 if ( ( c & 0x04 ) ) \
182 outline0("CALL AY8910WAITDUR2" ); \
183 if ( ( c & 0x08 ) ) \
184 outline0("CALL AY8910WAITDURN0" );
185
186#define PROGRAM_PITCH( c, f ) \
187 outline1("LD A, $%2.2x", ( f & 0xff ) ); \
188 outline0("LD E, A" ); \
189 outline1("LD A, $%2.2x", ( ( f >> 8 ) & 0xff ) ); \
190 outline0("LD D, A" ); \
191 if ( ( c & 0x01 ) ) \
192 outline0("CALL AY8910PROGFREQ0" ); \
193 if ( ( c & 0x02 ) ) \
194 outline0("CALL AY8910PROGFREQ1" ); \
195 if ( ( c & 0x04 ) ) \
196 outline0("CALL AY8910PROGFREQ2" ); \
197 if ( ( c & 0x08 ) ) \
198 outline0("CALL AY8910PROGFREQN0" );
199
200#define PROGRAM_PITCH_V( c, f ) \
201 outline1("LD A, (%s)", f ); \
202 outline0("LD E, A" ); \
203 outline1("LD A, (%s)", address_displacement(_environment, f, "1") ); \
204 outline0("LD D, A" ); \
205 if ( c == NULL ) { \
206 outline0("LD A, $7"); \
207 } else { \
208 outline1("LD A, (%s)", c ); \
209 } \
210 outline0("CALL AY8910PROGFREQ" );
211
212#define PROGRAM_PITCH_SV( c, f ) \
213 outline1("LD A, $%2.2x", ( f & 0xff ) ); \
214 outline0("LD E, A" ); \
215 outline1("LD A, $%2.2x", ( ( f >> 8 ) & 0xff ) ); \
216 outline0("LD D, A" ); \
217 if ( c == NULL ) { \
218 outline0("LD A, $7"); \
219 } else { \
220 outline1("LD A, (%s)", c ); \
221 } \
222 outline0("CALL AY8910PROGFREQ" );
223
224#define PROGRAM_PULSE( c, p ) \
225 outline1("LD A, $%2.2x", ( p & 0xff ) ); \
226 outline0("LD E, A" ); \
227 outline1("LD A, $%2.2x", ( ( p >> 8 ) & 0xff ) ); \
228 outline0("LD D, A" ); \
229 if ( ( c & 0x01 ) ) \
230 outline0("CALL AY8910PROGPULSE0" ); \
231 if ( ( c & 0x02 ) ) \
232 outline0("CALL AY8910PROGPULSE1" ); \
233 if ( ( c & 0x04 ) ) \
234 outline0("CALL AY8910PROGPULSE2" );
235
236#define PROGRAM_PULSE_V( c, p ) \
237 outline1("LD A, (%s)", p ); \
238 outline0("LD E, A" ); \
239 outline1("LD A, (%s)", address_displacement(_environment, p, "1") ); \
240 outline0("LD D, A" ); \
241 if ( c == NULL ) { \
242 outline0("LD A, $7"); \
243 } else { \
244 outline1("LD A, (%s)", c ); \
245 } \
246 outline0("CALL AY8910PROGPULSE" );
247
248#define PROGRAM_PULSE_SV( c, p ) \
249 outline1("LD A, $%2.2x", ( p & 0xff ) ); \
250 outline0("LD E, A" ); \
251 outline1("LD A, $%2.2x", ( ( p >> 8 ) & 0xff ) ); \
252 outline0("LD D, A" ); \
253 if ( c == NULL ) { \
254 outline0("LD A, $7"); \
255 } else { \
256 outline1("LD A, (%s)", c ); \
257 } \
258 outline0("CALL AY8910PROGPULSE" );
259
260#define PROGRAM_NOISE( c ) \
261 outline0("LD A, $82" ); \
262 outline0("LD B, A" ); \
263 if ( ( c & 0x01 ) ) \
264 outline0("CALL AY8910PROGCTR0" ); \
265 if ( ( c & 0x02 ) ) \
266 outline0("CALL AY8910PROGCTR1" ); \
267 if ( ( c & 0x04 ) ) \
268 outline0("CALL AY8910PROGCTR2" );
269
270#define PROGRAM_NOISE_V( c, p ) \
271 outline0("LD A, $82" ); \
272 outline0("LD B, A" ); \
273 if ( c == NULL ) { \
274 outline0("LD A, $7"); \
275 } else { \
276 outline1("LD A, (%s)", c ); \
277 } \
278 outline0("CALL AY8910PROGCTR" );
279
280#define PROGRAM_NOISE_SV( c ) \
281 outline0("LD A, $82" ); \
282 outline0("LD B, A" ); \
283 if ( c == NULL ) { \
284 outline0("LD A, $7"); \
285 } else { \
286 outline1("LD A, (%s)", c ); \
287 } \
288 outline0("CALL AY8910PROGCTR" );
289
290#define PROGRAM_SAW( c ) \
291 outline0("LD A, $22" ); \
292 outline0("LD B, A" ); \
293 if ( ( c & 0x01 ) ) \
294 outline0("CALL AY8910PROGCTR0" ); \
295 if ( ( c & 0x02 ) ) \
296 outline0("CALL AY8910PROGCTR1" ); \
297 if ( ( c & 0x04 ) ) \
298 outline0("CALL AY8910PROGCTR2" );
299
300#define PROGRAM_SAW_V( c) \
301 outline0("LD A, $22" ); \
302 outline0("LD B, A" ); \
303 if ( c == NULL ) { \
304 outline0("LD A, $7"); \
305 } else { \
306 outline1("LD A, (%s)", c ); \
307 } \
308 outline0("CALL AY8910PROGCTR" );
309
310#define PROGRAM_SAW_SV( c ) \
311 outline0("LD A, $22" ); \
312 outline0("LD B, A" ); \
313 if ( c == NULL ) { \
314 outline0("LD A, $7"); \
315 } else { \
316 outline1("LD A, (%s)", c ); \
317 } \
318 outline0("CALL AY8910PROGCTR" );
319
320#define PROGRAM_TRIANGLE( c ) \
321 outline0("LD A, $12" ); \
322 outline0("LD B, A" ); \
323 if ( ( c & 0x01 ) ) \
324 outline0("CALL AY8910PROGCTR0" ); \
325 if ( ( c & 0x02 ) ) \
326 outline0("CALL AY8910PROGCTR1" ); \
327 if ( ( c & 0x04 ) ) \
328 outline0("CALL AY8910PROGCTR2" );
329
330#define PROGRAM_TRIANGLE_V( c ) \
331 outline0("LD A, $12" ); \
332 outline0("LD B, A" ); \
333 if ( c == NULL ) { \
334 outline0("LD A, $7"); \
335 } else { \
336 outline1("LD A, (%s)", c ); \
337 } \
338 outline0("CALL AY8910PROGCTR" );
339
340#define PROGRAM_TRIANGLE_SV( c ) \
341 outline0("LD A, $12" ); \
342 outline0("LD B, A" ); \
343 if ( c == NULL ) { \
344 outline0("LD A, $7"); \
345 } else { \
346 outline1("LD A, (%s)", c ); \
347 } \
348 outline0("CALL AY8910PROGCTR" );
349
350#define PROGRAM_SAW_TRIANGLE( c ) \
351 outline0("LD A, $32" ); \
352 outline0("LD B, A" ); \
353 if ( ( c & 0x01 ) ) \
354 outline0("CALL AY8910PROGCTR0" ); \
355 if ( ( c & 0x02 ) ) \
356 outline0("CALL AY8910PROGCTR1" ); \
357 if ( ( c & 0x04 ) ) \
358 outline0("CALL AY8910PROGCTR2" );
359
360#define PROGRAM_SAW_TRIANGLE_V( c ) \
361 outline0("LD A, $32" ); \
362 outline0("LD B, A" ); \
363 if ( c == NULL ) { \
364 outline0("LD A, $7"); \
365 } else { \
366 outline1("LD A, (%s)", c ); \
367 } \
368 outline0("CALL AY8910PROGCTR" );
369
370#define PROGRAM_SAW_TRIANGLE_SV( c ) \
371 outline0("LD A, $32" ); \
372 outline0("LD B, A" ); \
373 if ( c == NULL ) { \
374 outline0("LD A, $7"); \
375 } else { \
376 outline1("LD A, (%s)", c ); \
377 } \
378 outline0("CALL AY8910PROGCTR" );
379
380#define PROGRAM_ATTACK_DECAY( c, a, d ) \
381 outline1("LD A, $%2.2x", ( a & 0x0f ) ); \
382 outline0("LD E, A" ); \
383 outline1("LD A, $%2.2x", ( d & 0x0f ) ); \
384 outline0("LD D, A" ); \
385 if ( ( c & 0x01 ) ) \
386 outline0("CALL AY8910PROGAD0" ); \
387 if ( ( c & 0x02 ) ) \
388 outline0("CALL AY8910PROGAD1" ); \
389 if ( ( c & 0x04 ) ) \
390 outline0("CALL AY8910PROGAD2" );
391
392#define PROGRAM_ATTACK_DECAY_V( c, a, d ) \
393 outline1("LD A, %s", a ); \
394 outline0("LD E, A" ); \
395 outline1("LD A, %s", d ); \
396 outline0("LD D, A" ); \
397 if ( c == NULL ) { \
398 outline0("LD A, $7"); \
399 } else { \
400 outline1("LD A, (%s)", c ); \
401 } \
402 outline0("CALL AY8910PROGAD" );
403
404#define PROGRAM_ATTACK_DECAY_SV( c, a, d ) \
405 outline1("LD A, $%2.2x", ( a & 0x0f ) ); \
406 outline0("LD E, A" ); \
407 outline1("LD A, $%2.2x", ( d & 0x0f ) ); \
408 outline0("LD D, A" ); \
409 if ( c == NULL ) { \
410 outline0("LD A, $7"); \
411 } else { \
412 outline1("LD A, (%s)", c ); \
413 } \
414 outline0("CALL AY8910PROGAD" );
415
416#define PROGRAM_SUSTAIN_RELEASE( c, s, r ) \
417 outline1("LD A, $%2.2x", ( s & 0x0f ) ); \
418 outline0("LD E, A" ); \
419 outline1("LD A, $%2.2x", ( r & 0x0f ) ); \
420 outline0("LD D, A" ); \
421 if ( ( c & 0x01 ) ) \
422 outline0("CALL AY8910PROGSR0" ); \
423 if ( ( c & 0x02 ) ) \
424 outline0("CALL AY8910PROGSR1" ); \
425 if ( ( c & 0x04 ) ) \
426 outline0("CALL AY8910PROGSR2" );
427
428#define PROGRAM_SUSTAIN_RELEASE_V( c, s, r ) \
429 outline1("LD A, %s", s ); \
430 outline0("LD E, A" ); \
431 outline1("LD A, %s", r ); \
432 outline0("LD D, A" ); \
433 if ( c == NULL ) { \
434 outline0("LD A, $7"); \
435 } else { \
436 outline1("LD A, (%s)", c ); \
437 } \
438 outline0("CALL AY8910PROGSR" );
439
440#define PROGRAM_SUSTAIN_RELEASE_SV( c, s, r ) \
441 outline1("LD A, $%2.2x", ( s & 0x0f ) ); \
442 outline0("LD E, A" ); \
443 outline1("LD A, $%2.2x", ( r & 0x0f ) ); \
444 outline0("LD D, A" ); \
445 if ( c == NULL ) { \
446 outline0("LD A, $7"); \
447 } else { \
448 outline1("LD A, (%s)", c ); \
449 } \
450 outline0("CALL AY8910PROGSR" );
451
452#define STOP_FREQUENCY( c ) \
453 if ( ( c & 0x01 ) ) \
454 outline0("CALL AY8910STOP0" ); \
455 if ( ( c & 0x02 ) ) \
456 outline0("CALL AY8910STOP1" ); \
457 if ( ( c & 0x04 ) ) \
458 outline0("CALL AY8910STOP2" ); \
459 if ( ( c & 0x08 ) ) \
460 outline0("CALL AY8910STOPN0" );
461
462#define STOP_FREQUENCY_V( c ) \
463 if ( c == NULL ) { \
464 outline0("LD A, $7"); \
465 } else { \
466 outline1("LD A, (%s)", c ); \
467 } \
468 outline0("CALL AY8910STOP" );
469
470#define STOP_FREQUENCY_SV( c ) \
471 if ( c == NULL ) { \
472 outline0("LD A, $7"); \
473 } else { \
474 outline1("LD A, (%s)", c ); \
475 } \
476 outline0("CALL AY8910STOP" );
477
478void ay8910_set_program( Environment * _environment, int _channels, int _program ) {
479
480 deploy( ay8910vars, src_hw_ay8910_vars_asm );
481 deploy( ay8910startup, src_hw_ay8910_startup_asm );
482
483 switch (_program) {
485 PROGRAM_NOISE(_channels);
486 PROGRAM_ATTACK_DECAY(_channels, 2, 11);
487 PROGRAM_SUSTAIN_RELEASE(_channels, 0, 1);
488 break;
490 PROGRAM_NOISE(_channels);
491 PROGRAM_ATTACK_DECAY(_channels, 2, 4);
492 PROGRAM_SUSTAIN_RELEASE(_channels, 0, 1);
493 break;
504 PROGRAM_TRIANGLE(_channels);
505 PROGRAM_ATTACK_DECAY(_channels, 4, 2);
506 PROGRAM_SUSTAIN_RELEASE(_channels, 14, 10);
507 break;
508
512 PROGRAM_PULSE(_channels, 1024);
513 PROGRAM_ATTACK_DECAY(_channels, 3, 3);
514 PROGRAM_SUSTAIN_RELEASE(_channels, 14, 3);
515 break;
516
525 PROGRAM_TRIANGLE(_channels);
526 PROGRAM_ATTACK_DECAY(_channels, 2, 10);
527 PROGRAM_SUSTAIN_RELEASE(_channels, 12, 14);
528 break;
529
530 default:
540 PROGRAM_TRIANGLE(_channels);
541 PROGRAM_ATTACK_DECAY(_channels, 3, 3);
542 PROGRAM_SUSTAIN_RELEASE(_channels, 14, 14);
543 break;
544
552 PROGRAM_PULSE(_channels, 128);
553 PROGRAM_ATTACK_DECAY(_channels, 10, 10);
554 PROGRAM_SUSTAIN_RELEASE(_channels, 14, 10);
555 break;
556
558 PROGRAM_PULSE(_channels, 128);
559 PROGRAM_ATTACK_DECAY(_channels, 1, 2);
560 PROGRAM_SUSTAIN_RELEASE(_channels, 4, 3);
561 break;
562
572 PROGRAM_TRIANGLE(_channels);
573 PROGRAM_ATTACK_DECAY(_channels, 2, 10);
574 PROGRAM_SUSTAIN_RELEASE(_channels, 12, 14);
575 break;
576
589 PROGRAM_PULSE(_channels, 128);
590 PROGRAM_ATTACK_DECAY(_channels, 10, 10);
591 PROGRAM_SUSTAIN_RELEASE(_channels, 14, 10);
592 break;
593
613 PROGRAM_NOISE(_channels);
614 PROGRAM_ATTACK_DECAY(_channels, 1, 14);
615 PROGRAM_SUSTAIN_RELEASE(_channels, 14, 14);
616 break;
617
645 PROGRAM_SAW(_channels);
646 PROGRAM_ATTACK_DECAY(_channels, 3, 3);
647 PROGRAM_SUSTAIN_RELEASE(_channels, 14, 14);
648 break;
649
672 PROGRAM_SAW(_channels);
673 PROGRAM_ATTACK_DECAY(_channels, 3, 3);
674 PROGRAM_SUSTAIN_RELEASE(_channels, 14, 14);
675 break;
676 }
677
678}
679
680void ay8910_set_parameter( Environment * _environment, int _channels, int _parameter, int _value ) {
681
682}
683
684void ay8910_set_frequency( Environment * _environment, int _channels, int _frequency ) {
685
686 deploy( ay8910vars, src_hw_ay8910_vars_asm );
687 deploy( ay8910startup, src_hw_ay8910_startup_asm );
688
689 PROGRAM_FREQUENCY( _channels, _frequency );
690
691}
692
693void ay8910_set_pitch( Environment * _environment, int _channels, int _pitch ) {
694
695 deploy( ay8910vars, src_hw_ay8910_vars_asm );
696 deploy( ay8910startup, src_hw_ay8910_startup_asm );
697
698 PROGRAM_PITCH( _channels, _pitch );
699
700}
701
702void ay8910_set_note( Environment * _environment, int _channels, int _note ) {
703
704 ay8910_set_pitch( _environment, _channels, SOUND_FREQUENCIES[_note] );
705
706}
707
708void ay8910_stop( Environment * _environment, int _channels ) {
709
710 deploy( ay8910vars, src_hw_ay8910_vars_asm );
711 deploy( ay8910startup, src_hw_ay8910_startup_asm );
712
713 STOP_FREQUENCY( _channels );
714
715}
716
717void ay8910_start_var( Environment * _environment, char * _channels ) {
718
719 deploy( ay8910vars, src_hw_ay8910_vars_asm );
720 deploy( ay8910startup, src_hw_ay8910_startup_asm );
721
722 if ( _channels ) {
723 outline1("LD A, (%s)", _channels );
724 } else {
725 outline0("LD A, $7" );
726 }
727 outline0("CALL AY8910START");
728
729}
730
731void ay8910_set_volume_vars( Environment * _environment, char * _channels, char * _volume ) {
732
733 deploy( ay8910vars, src_hw_ay8910_vars_asm );
734 deploy( ay8910startup, src_hw_ay8910_startup_asm );
735
736 outline1("LD A, (%s)", _volume );
737 outline0("SRL A" );
738 outline0("SRL A" );
739 outline0("SRL A" );
740 outline0("SRL A" );
741 outline0("LD E, A" );
742 if ( _channels ) {
743 outline1("LD A, (%s)", _channels );
744 } else {
745 outline0("LD A, $7" );
746 }
747 outline0("CALL AY8910STARTVOL");
748
749}
750
751void ay8910_set_volume_semi_var( Environment * _environment, char * _channel, int _volume ) {
752
753 deploy( ay8910vars, src_hw_ay8910_vars_asm );
754 deploy( ay8910startup, src_hw_ay8910_startup_asm );
755
756 outline1("LD A, $%2.2x", _volume );
757 outline0("SRL A" );
758 outline0("SRL A" );
759 outline0("SRL A" );
760 outline0("SRL A" );
761 outline0("LD E, A" );
762 outline1("LD A, (%s)", _channel );
763 outline0("CALL AY8910STARTVOL");
764
765}
766
767void ay8910_set_program_semi_var( Environment * _environment, char * _channels, int _program ) {
768
769 deploy( ay8910vars, src_hw_ay8910_vars_asm );
770 deploy( ay8910startup, src_hw_ay8910_startup_asm );
771
772 switch (_program) {
774 PROGRAM_NOISE_SV(_channels);
775 PROGRAM_ATTACK_DECAY_SV(_channels, 2, 11);
776 PROGRAM_SUSTAIN_RELEASE_SV(_channels, 0, 1);
777 break;
779 PROGRAM_NOISE_SV(_channels);
780 PROGRAM_ATTACK_DECAY_SV(_channels, 2, 4);
781 PROGRAM_SUSTAIN_RELEASE_SV(_channels, 0, 1);
782 break;
793 PROGRAM_TRIANGLE_SV(_channels);
794 PROGRAM_ATTACK_DECAY_SV(_channels, 4, 2);
795 PROGRAM_SUSTAIN_RELEASE_SV(_channels, 14, 10);
796 break;
797
801 PROGRAM_PULSE_SV(_channels, 1024);
802 PROGRAM_ATTACK_DECAY_SV(_channels, 3, 3);
803 PROGRAM_SUSTAIN_RELEASE_SV(_channels, 14, 3);
804 break;
805
814 PROGRAM_TRIANGLE_SV(_channels);
815 PROGRAM_ATTACK_DECAY_SV(_channels, 2, 10);
816 PROGRAM_SUSTAIN_RELEASE_SV(_channels, 12, 14);
817 break;
818
819 default:
829 PROGRAM_TRIANGLE_SV(_channels);
830 PROGRAM_ATTACK_DECAY_SV(_channels, 3, 3);
831 PROGRAM_SUSTAIN_RELEASE_SV(_channels, 14, 14);
832 break;
833
841 PROGRAM_PULSE_SV(_channels, 128);
842 PROGRAM_ATTACK_DECAY_SV(_channels, 10, 10);
843 PROGRAM_SUSTAIN_RELEASE_SV(_channels, 14, 10);
844 break;
845
847 PROGRAM_PULSE_SV(_channels, 128);
848 PROGRAM_ATTACK_DECAY_SV(_channels, 1, 2);
849 PROGRAM_SUSTAIN_RELEASE_SV(_channels, 4, 3);
850 break;
851
861 PROGRAM_TRIANGLE_SV(_channels);
862 PROGRAM_ATTACK_DECAY_SV(_channels, 2, 10);
863 PROGRAM_SUSTAIN_RELEASE_SV(_channels, 12, 14);
864 break;
865
878 PROGRAM_PULSE_SV(_channels, 128);
879 PROGRAM_ATTACK_DECAY_SV(_channels, 10, 10);
880 PROGRAM_SUSTAIN_RELEASE_SV(_channels, 14, 10);
881 break;
882
902 PROGRAM_NOISE_SV(_channels);
903 PROGRAM_ATTACK_DECAY_SV(_channels, 1, 14);
904 PROGRAM_SUSTAIN_RELEASE_SV(_channels, 14, 14);
905 break;
906
934 PROGRAM_SAW_SV(_channels);
935 PROGRAM_ATTACK_DECAY_SV(_channels, 3, 3);
936 PROGRAM_SUSTAIN_RELEASE_SV(_channels, 14, 14);
937 break;
938
961 PROGRAM_SAW_SV(_channels);
962 PROGRAM_ATTACK_DECAY_SV(_channels, 3, 3);
963 PROGRAM_SUSTAIN_RELEASE_SV(_channels, 14, 14);
964 break;
965 }
966
967}
968
969void ay8910_set_frequency_vars( Environment * _environment, char * _channels, char * _frequency ) {
970
971 deploy( ay8910vars, src_hw_ay8910_vars_asm );
972 deploy( ay8910startup, src_hw_ay8910_startup_asm );
973
974 outline1("LD A, (%s)", _frequency );
975 outline0("LD E, A" );
976 outline1("LD A, (%s)", address_displacement(_environment, _frequency, "1") );
977 outline0("LD D, A" );
978 if ( _channels ) {
979 outline1("LD A, (%s)", _channels );
980 } else {
981 outline0("LD A, $7" );
982 }
983
984 outline0("CALL AY8910FREQ");
985
986}
987
988void ay8910_set_pitch_vars( Environment * _environment, char * _channels, char * _pitch ) {
989
990 deploy( ay8910vars, src_hw_ay8910_vars_asm );
991 deploy( ay8910startup, src_hw_ay8910_startup_asm );
992
993 outline1("LD A, (%s)", _pitch );
994 outline0("LD E, A" );
995 outline1("LD A, (%s)", address_displacement(_environment, _pitch, "1") );
996 outline0("LD D, A" );
997 if ( _channels ) {
998 outline1("LD A, (%s)", _channels );
999 } else {
1000 outline0("LD A, $7" );
1001 }
1002
1003 outline0("CALL AY8910PROGFREQ");
1004
1005}
1006
1007void ay8910_set_note_vars( Environment * _environment, char * _channels, char * _note ) {
1008
1009 deploy( ay8910vars, src_hw_ay8910_vars_asm );
1010 deploy( ay8910startup, src_hw_ay8910_startup_asm );
1011
1012 outline0("LD HL, AY8910FREQTABLE");
1013 outline1("LD A, (%s)", _note);
1014 outline0("LD E, A");
1015 outline0("LD A, 0");
1016 outline0("LD D, A");
1017 outline0("SLA E");
1018 outline0("RL D");
1019 outline0("ADD HL, DE");
1020 outline0("LD A, (HL)");
1021 outline0("LD E, A");
1022 outline0("INC HL");
1023 outline0("LD A, (HL)");
1024 outline0("LD D, A");
1025
1026 if ( _channels ) {
1027 outline1("LD A, (%s)", _channels );
1028 } else {
1029 outline0("LD A, $7" );
1030 }
1031
1032 outline0("CALL AY8910PROGFREQ");
1033
1034}
1035
1036void ay8910_stop_vars( Environment * _environment, char * _channels ) {
1037
1038 deploy( ay8910vars, src_hw_ay8910_vars_asm );
1039 deploy( ay8910startup, src_hw_ay8910_startup_asm );
1040
1041 outline1("LD A, (%s)", _channels );
1042 outline0("CALL AY8910STOP");
1043
1044}
1045
1046void ay8910_music( Environment * _environment, char * _music, int _size, int _loop ) {
1047
1048 deploy( ay8910vars, src_hw_ay8910_vars_asm );
1049 deploy( ay8910startup, src_hw_ay8910_startup_asm );
1050 deploy( music, src_hw_ay8910_music_asm );
1051
1052 // HL: music address, B: blocks, C: last block
1053 outline0("DI");
1054 outline1("LD HL, %s", _music);
1055 outline1("LD A, $%2.2x", ( _size>>8 ) & 0xff);
1056 outline0("LD B, A");
1057 outline1("LD A, $%2.2x", _size & 0xff );
1058 outline0("LD C, A");
1059 outline1("LD A, $%2.2x", _loop );
1060 outline0("LD (AY8910MUSICLOOP), A");
1061 outline0("CALL MUSICPLAYERRESET");
1062 outline0("EI");
1063
1064}
1065
1066void ay8910_set_duration( Environment * _environment, int _channel, int _duration ) {
1067
1068 deploy( ay8910vars, src_hw_ay8910_vars_asm );
1069 deploy( ay8910startup, src_hw_ay8910_startup_asm );
1070
1071 PROGRAM_DURATION( _channel, _duration );
1072
1073}
1074
1075void ay8910_wait_duration( Environment * _environment, int _channel ) {
1076
1077 deploy( ay8910vars, src_hw_ay8910_vars_asm );
1078 deploy( ay8910startup, src_hw_ay8910_startup_asm );
1079
1080 WAIT_DURATION( _channel );
1081
1082}
1083
1084void ay8910_set_duration_vars( Environment * _environment, char * _channel, char * _duration ) {
1085
1086 deploy( ay8910vars, src_hw_ay8910_vars_asm );
1087 deploy( ay8910startup, src_hw_ay8910_startup_asm );
1088
1089 if ( _duration ) {
1090 outline1("LD DE, (%s)", _duration );
1091 } else {
1092 outline0("LD DE, 50" );
1093 }
1094 if ( _channel ) {
1095 outline1("LD A, (%s)", _channel );
1096 } else {
1097 outline0("LD A, $7" );
1098 }
1099
1100 outline0("CALL AY8910PROGDUR" );
1101
1102}
1103
1104void ay8910_wait_duration_vars( Environment * _environment, char * _channel ) {
1105
1106 deploy( ay8910vars, src_hw_ay8910_vars_asm );
1107 deploy( ay8910startup, src_hw_ay8910_startup_asm );
1108
1109 if ( _channel ) {
1110 outline1("LD A, (%s)", _channel );
1111 } else {
1112 outline0("LD A, $7" );
1113 }
1114
1115 outline0("CALL AY8910WAITDUR" );
1116
1117}
1118
1119#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)
void ay8910_stop(Environment *_environment, int _channels)
Definition ay8910.c:708
#define PROGRAM_DURATION(c, d)
Definition ay8910.c:162
#define PROGRAM_TRIANGLE_SV(c)
Definition ay8910.c:340
#define PROGRAM_SAW_SV(c)
Definition ay8910.c:310
void ay8910_set_frequency_vars(Environment *_environment, char *_channels, char *_frequency)
Definition ay8910.c:969
#define PROGRAM_FREQUENCY(c, f)
Definition ay8910.c:124
void ay8910_set_parameter(Environment *_environment, int _channels, int _parameter, int _value)
Definition ay8910.c:680
void ay8910_finalization(Environment *_environment)
Definition ay8910.c:83
void ay8910_set_note_vars(Environment *_environment, char *_channels, char *_note)
Definition ay8910.c:1007
#define PROGRAM_SAW(c)
Definition ay8910.c:290
void ay8910_wait_duration_vars(Environment *_environment, char *_channel)
Definition ay8910.c:1104
#define PROGRAM_NOISE_SV(c)
Definition ay8910.c:280
#define WAIT_DURATION(c)
Definition ay8910.c:176
void ay8910_wait_duration(Environment *_environment, int _channel)
Definition ay8910.c:1075
void ay8910_set_frequency(Environment *_environment, int _channels, int _frequency)
Definition ay8910.c:684
void ay8910_set_pitch(Environment *_environment, int _channels, int _pitch)
Definition ay8910.c:693
void ay8910_set_pitch_vars(Environment *_environment, char *_channels, char *_pitch)
Definition ay8910.c:988
void ay8910_set_program_semi_var(Environment *_environment, char *_channels, int _program)
Definition ay8910.c:767
void ay8910_music(Environment *_environment, char *_music, int _size, int _loop)
Definition ay8910.c:1046
void ay8910_set_volume_semi_var(Environment *_environment, char *_channel, int _volume)
Definition ay8910.c:751
#define STOP_FREQUENCY(c)
Definition ay8910.c:452
void ay8910_set_duration_vars(Environment *_environment, char *_channel, char *_duration)
Definition ay8910.c:1084
#define PROGRAM_ATTACK_DECAY(c, a, d)
Definition ay8910.c:380
#define PROGRAM_SUSTAIN_RELEASE_SV(c, s, r)
Definition ay8910.c:440
void ay8910_set_volume(Environment *_environment, int _channels, int _volume)
Definition ay8910.c:112
void ay8910_set_volume_vars(Environment *_environment, char *_channels, char *_volume)
Definition ay8910.c:731
void ay8910_set_program(Environment *_environment, int _channels, int _program)
Definition ay8910.c:478
#define PROGRAM_SUSTAIN_RELEASE(c, s, r)
Definition ay8910.c:416
#define PROGRAM_NOISE(c)
Definition ay8910.c:260
#define PROGRAM_PULSE_SV(c, p)
Definition ay8910.c:248
void ay8910_initialization(Environment *_environment)
Definition ay8910.c:49
void ay8910_start_var(Environment *_environment, char *_channels)
Definition ay8910.c:717
#define PROGRAM_PITCH(c, f)
Definition ay8910.c:186
void ay8910_start(Environment *_environment, int _channels)
Definition ay8910.c:92
void ay8910_set_duration(Environment *_environment, int _channel, int _duration)
Definition ay8910.c:1066
void ay8910_stop_vars(Environment *_environment, char *_channels)
Definition ay8910.c:1036
#define PROGRAM_PULSE(c, p)
Definition ay8910.c:224
void ay8910_set_note(Environment *_environment, int _channels, int _note)
Definition ay8910.c:702
#define PROGRAM_TRIANGLE(c)
Definition ay8910.c:320
#define PROGRAM_ATTACK_DECAY_SV(c, a, d)
Definition ay8910.c:404
int ay8910startup
Definition ugbc.h:1833
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 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