ugBASIC 1.18
An isomorphic BASIC language compiler for retrocomputers
Loading...
Searching...
No Matches
sn76489m.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(__pc128op__) || defined(__coco__) || defined(__coco3__) || defined(__cocob__) || defined(__coco3b__)
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, 255, 255, 255,
39 255, 240, 227, 214, 202, 191, 180, 170, 160, 151,
40 143, 135, 127, 120, 113, 107, 101, 95, 90, 85,
41 80, 75, 71, 67, 63, 60, 56, 53, 50, 47,
42 45, 42, 40, 37, 35, 33, 31, 30, 28, 26,
43 25, 23, 22, 21, 20, 18, 17, 16, 15, 15,
44 14, 13, 12, 11, 11, 10, 10, 9, 8, 8,
45 7, 7, 7, 6, 6, 5, 5, 5, 5, 4,
46 4, 4, 3, 3, 3, 3, 3, 2, 2, 2,
47 2, 2, 2, 2, 1, 1, 1, 1, 1
48};
49
50void sn76489m_initialization( Environment * _environment ) {
51
52 variable_import( _environment, "SN76489MUSICREADY", VT_BYTE, 0 );
53 variable_global( _environment, "SN76489MUSICREADY" );
54 variable_import( _environment, "SN76489MUSICPAUSE", VT_BYTE, 0 );
55 variable_global( _environment, "SN76489MUSICPAUSE" );
56 variable_import( _environment, "SN76489MUSICLOOP", VT_BYTE, 0 );
57 variable_global( _environment, "SN76489MUSICLOOP" );
58 variable_import( _environment, "SN76489BLOCKS", VT_BYTE, 0 );
59 variable_global( _environment, "SN76489BLOCKS" );
60 variable_import( _environment, "SN76489LASTBLOCK", VT_BYTE, 0 );
61 variable_global( _environment, "SN76489LASTBLOCK" );
62 variable_import( _environment, "SN76489TMPPTR2", VT_ADDRESS, 0 );
63 variable_global( _environment, "SN76489TMPPTR2" );
64 variable_import( _environment, "SN76489TMPPTR", VT_ADDRESS, 0 );
65 variable_global( _environment, "SN76489TMPPTR" );
66 variable_import( _environment, "SN76489TMPOFS", VT_BYTE, 0 );
67 variable_global( _environment, "SN76489TMPOFS" );
68 variable_import( _environment, "SN76489BANK", VT_BYTE, 0xff );
69 variable_global( _environment, "SN76489BANK" );
70 variable_import( _environment, "SN76489TMPLEN", VT_BYTE, 0 );
71 variable_global( _environment, "SN76489TMPLEN" );
72 variable_import( _environment, "SN76489JIFFIES", VT_BYTE, 0 );
73 variable_global( _environment, "SN76489JIFFIES" );
74
75 variable_import( _environment, "SN76489BLOCKS_BACKUP", VT_BYTE, 0 );
76 variable_global( _environment, "SN76489BLOCKS_BACKUP" );
77 variable_import( _environment, "SN76489LASTBLOCK_BACKUP", VT_BYTE, 0 );
78 variable_global( _environment, "SN76489LASTBLOCK_BACKUP" );
79 variable_import( _environment, "SN76489TMPPTR_BACKUP", VT_ADDRESS, 0 );
80 variable_global( _environment, "SN76489TMPPTR_BACKUP" );
81
82 cpu_call( _environment, "SN76489STARTUP" );
83
84}
85
86void sn76489m_finalization( Environment * _environment ) {
87
88 if ( ! _environment->deployed.sn76489startup ) {
89 cpu_label( _environment, "SN76489STARTUP" );
90 outline0( "RTS" );
91 cpu_label( _environment, "MUSICPLAYER" );
92 outline0( "RTS" );
93 } else {
94 deploy( sn76489startup2, src_hw_sn76489m_startup2_asm );
95 }
96
97}
98
99void sn76489m_start( Environment * _environment, int _channels ) {
100
101 deploy( sn76489vars, src_hw_sn76489m_vars_asm );
102 deploy( sn76489startup, src_hw_sn76489m_startup_asm );
103
104 if ( _channels & 0x01 ) {
105 outline0("JSR SN76489START0");
106 }
107 if ( _channels & 0x02 ) {
108 outline0("JSR SN76489START1");
109 }
110 if ( _channels & 0x04 ) {
111 outline0("JSR SN76489START2");
112 }
113
114}
115
116void sn76489m_set_volume( Environment * _environment, int _channels, int _volume ) {
117
118 deploy( sn76489vars, src_hw_sn76489m_vars_asm );
119 deploy( sn76489startup, src_hw_sn76489m_startup_asm );
120
121 outline1("LDB #$%2.2x", ( _volume & 0x0f ) );
122 outline1("LDA #$%2.2x", ( _channels ) );
123 outline0("JSR SN76489STARTVOL");
124
125}
126
127#define PROGRAM_FREQUENCY( c, f ) \
128 outline1("LDU #$%4.4x", ( f ) ); \
129 if ( ( c & 0x01 ) ) \
130 outline0("JSR SN76489PROGFREQ0" ); \
131 if ( ( c & 0x02 ) ) \
132 outline0("JSR SN76489PROGFREQ1" ); \
133 if ( ( c & 0x04 ) ) \
134 outline0("JSR SN76489PROGFREQ2" );
135
136#define PROGRAM_FREQUENCY_V( c, f ) \
137 outline1("LDU %s", f ); \
138 if ( c == NULL ) { \
139 outline0("LDA #$7"); \
140 } else { \
141 outline1("LDA %s", c ); \
142 } \
143 outline0("JSR SN76489FREQ" );
144
145#define PROGRAM_FREQUENCY_SV( c, f ) \
146 outline1("LD U #$%4.4x", f ); \
147 if ( c == NULL ) { \
148 outline0("LDA #$7"); \
149 } else { \
150 outline1("LDA %s", c ); \
151 } \
152 outline0("JSR SN76489FREQ" );
153
154#define PROGRAM_DURATION( c, d ) \
155 outline1("LDU #$%4.4x", ( d ) ); \
156 if ( ( c & 0x01 ) ) \
157 outline0("JSR SN76489PROGDUR0" ); \
158 if ( ( c & 0x02 ) ) \
159 outline0("JSR SN76489PROGDUR1" ); \
160 if ( ( c & 0x04 ) ) \
161 outline0("JSR SN76489PROGDUR2" );
162
163#define WAIT_DURATION( c ) \
164 if ( ( c & 0x01 ) ) \
165 outline0("JSR SN76489WAITDUR0" ); \
166 if ( ( c & 0x02 ) ) \
167 outline0("JSR SN76489WAITDUR1" ); \
168 if ( ( c & 0x04 ) ) \
169 outline0("JSR SN76489WAITDUR2" );
170
171#define PROGRAM_PITCH( c, f ) \
172 outline1("LDU $%4.4x", ( f & 0xff ) ); \
173 if ( ( c & 0x01 ) ) \
174 outline0("JSR SN76489PROGFREQ0" ); \
175 if ( ( c & 0x02 ) ) \
176 outline0("JSR SN76489PROGFREQ1" ); \
177 if ( ( c & 0x04 ) ) \
178 outline0("JSR SN76489PROGFREQ2" );
179
180#define PROGRAM_PITCH_V( c, f ) \
181 outline1("LDU %s", f ); \
182 if ( c == NULL ) { \
183 outline0("LDA #$7"); \
184 } else { \
185 outline1("LDA %s", c ); \
186 } \
187 outline0("JSR SN76489PROGFREQ" );
188
189#define PROGRAM_PITCH_SV( c, f ) \
190 outline1("LDU #$%4.4x", f); \
191 if ( c == NULL ) { \
192 outline0("LDA #$7"); \
193 } else { \
194 outline1("LDA %s", c ); \
195 } \
196 outline0("JSR SN76489PROGFREQ" );
197
198#define STOP_FREQUENCY( c ) \
199 if ( ( c & 0x01 ) ) \
200 outline0("JSR SN76489STOP0" ); \
201 if ( ( c & 0x02 ) ) \
202 outline0("JSR SN76489STOP1" ); \
203 if ( ( c & 0x04 ) ) \
204 outline0("JSR SN76489STOP2" );
205
206#define STOP_FREQUENCY_V( c ) \
207 if ( c == NULL ) { \
208 outline0("LDA #$7"); \
209 } else { \
210 outline1("LDA %s", c ); \
211 } \
212 outline0("JSR SN76489STOP" );
213
214#define STOP_FREQUENCY_SV( c ) \
215 if ( c == NULL ) { \
216 outline0("LDA #$7"); \
217 } else { \
218 outline1("LDA %s", c ); \
219 } \
220 outline0("JSR SN76489STOP" );
221
222void sn76489m_set_program( Environment * _environment, int _channels, int _program ) {
223
224 deploy( sn76489vars, src_hw_sn76489m_vars_asm );
225 deploy( sn76489startup, src_hw_sn76489m_startup_asm );
226
227 switch (_program) {
229 // PROGRAM_NOISE(_channels);
230 // PROGRAM_ATTACK_DECAY(_channels, 2, 11);
231 // PROGRAM_SUSTAIN_RELEASE(_channels, 0, 1);
232 break;
234 // PROGRAM_NOISE(_channels);
235 // PROGRAM_ATTACK_DECAY(_channels, 2, 4);
236 // PROGRAM_SUSTAIN_RELEASE(_channels, 0, 1);
237 break;
248 // PROGRAM_TRIANGLE(_channels);
249 // PROGRAM_ATTACK_DECAY(_channels, 4, 2);
250 // PROGRAM_SUSTAIN_RELEASE(_channels, 14, 10);
251 break;
252
256 // PROGRAM_PULSE(_channels, 1024);
257 // PROGRAM_ATTACK_DECAY(_channels, 3, 3);
258 // PROGRAM_SUSTAIN_RELEASE(_channels, 14, 3);
259 break;
260
269 // PROGRAM_TRIANGLE(_channels);
270 // PROGRAM_ATTACK_DECAY(_channels, 2, 10);
271 // PROGRAM_SUSTAIN_RELEASE(_channels, 12, 14);
272 break;
273
274 default:
284 // PROGRAM_TRIANGLE(_channels);
285 // PROGRAM_ATTACK_DECAY(_channels, 3, 3);
286 // PROGRAM_SUSTAIN_RELEASE(_channels, 14, 14);
287 break;
288
296 // PROGRAM_PULSE(_channels, 128);
297 // PROGRAM_ATTACK_DECAY(_channels, 10, 10);
298 // PROGRAM_SUSTAIN_RELEASE(_channels, 14, 10);
299 break;
300
302 // PROGRAM_PULSE(_channels, 128);
303 // PROGRAM_ATTACK_DECAY(_channels, 1, 2);
304 // PROGRAM_SUSTAIN_RELEASE(_channels, 4, 3);
305 break;
306
316 // PROGRAM_TRIANGLE(_channels);
317 // PROGRAM_ATTACK_DECAY(_channels, 2, 10);
318 // PROGRAM_SUSTAIN_RELEASE(_channels, 12, 14);
319 break;
320
321
334 // PROGRAM_PULSE(_channels, 128);
335 // PROGRAM_ATTACK_DECAY(_channels, 10, 10);
336 // PROGRAM_SUSTAIN_RELEASE(_channels, 14, 10);
337 break;
338
358 // PROGRAM_NOISE(_channels);
359 // PROGRAM_ATTACK_DECAY(_channels, 1, 14);
360 // PROGRAM_SUSTAIN_RELEASE(_channels, 14, 14);
361 break;
362
390 // PROGRAM_SAW(_channels);
391 // PROGRAM_ATTACK_DECAY(_channels, 3, 3);
392 // PROGRAM_SUSTAIN_RELEASE(_channels, 14, 14);
393 break;
394
417 // PROGRAM_SAW(_channels);
418 // PROGRAM_ATTACK_DECAY(_channels, 3, 3);
419 // PROGRAM_SUSTAIN_RELEASE(_channels, 14, 14);
420 break;
421 }
422
423}
424
425void sn76489m_set_parameter( Environment * _environment, int _channels, int _parameter, int _value ) {
426
427}
428
429void sn76489m_set_frequency( Environment * _environment, int _channels, int _frequency ) {
430
431 deploy( sn76489vars, src_hw_sn76489m_vars_asm );
432 deploy( sn76489startup, src_hw_sn76489m_startup_asm );
433
434 PROGRAM_FREQUENCY( _channels, _frequency );
435
436}
437
438void sn76489m_set_pitch( Environment * _environment, int _channels, int _pitch ) {
439
440 deploy( sn76489vars, src_hw_sn76489m_vars_asm );
441 deploy( sn76489startup, src_hw_sn76489m_startup_asm );
442
443 PROGRAM_PITCH( _channels, _pitch );
444
445}
446
447void sn76489m_set_note( Environment * _environment, int _channels, int _note ) {
448
449 sn76489m_set_pitch( _environment, _channels, SOUND_FREQUENCIES[_note] );
450
451}
452
453void sn76489m_stop( Environment * _environment, int _channels ) {
454
455 deploy( sn76489vars, src_hw_sn76489m_vars_asm );
456 deploy( sn76489startup, src_hw_sn76489m_startup_asm );
457
458 STOP_FREQUENCY( _channels );
459
460}
461
462void sn76489m_start_var( Environment * _environment, char * _channels ) {
463
464 deploy( sn76489vars, src_hw_sn76489m_vars_asm );
465 deploy( sn76489startup, src_hw_sn76489m_startup_asm );
466
467 if ( _channels ) {
468 outline1("LDA %s", _channels );
469 } else {
470 outline0("LDA #$7" );
471 }
472 outline0("JSR SN76489START");
473
474}
475
476void sn76489m_set_volume_vars( Environment * _environment, char * _channels, char * _volume ) {
477
478 deploy( sn76489vars, src_hw_sn76489m_vars_asm );
479 deploy( sn76489startup, src_hw_sn76489m_startup_asm );
480
481 outline1("LDB %s", _volume );
482 outline0("LSRB" );
483 outline0("LSRB" );
484 outline0("LSRB" );
485 outline0("LSRB" );
486 if ( _channels ) {
487 outline1("LDA %s", _channels );
488 } else {
489 outline0("LDA $%2.2x" );
490 }
491 outline0("JSR SN76489STARTVOL");
492
493}
494
495void sn76489m_set_volume_semi_var( Environment * _environment, char * _channel, int _volume ) {
496
497 deploy( sn76489vars, src_hw_sn76489m_vars_asm );
498 deploy( sn76489startup, src_hw_sn76489m_startup_asm );
499
500 outline1("LDB #$%2.2x", _volume );
501 if ( _channel ) {
502 outline1("LDA %s", _channel );
503 } else {
504 outline0("LDA $%2.2x" );
505 }
506 outline0("JSR SN76489STARTVOL");
507
508}
509
510void sn76489m_set_program_semi_var( Environment * _environment, char * _channels, int _program ) {
511
512 deploy( sn76489vars, src_hw_sn76489m_vars_asm );
513 deploy( sn76489startup, src_hw_sn76489m_startup_asm );
514
515 switch (_program) {
517 // PROGRAM_NOISE_SV(_channels);
518 // PROGRAM_ATTACK_DECAY_SV(_channels, 2, 11);
519 // PROGRAM_SUSTAIN_RELEASE_SV(_channels, 0, 1);
520 break;
522 // PROGRAM_NOISE_SV(_channels);
523 // PROGRAM_ATTACK_DECAY_SV(_channels, 2, 4);
524 // PROGRAM_SUSTAIN_RELEASE_SV(_channels, 0, 1);
525 break;
536 // PROGRAM_TRIANGLE_SV(_channels);
537 // PROGRAM_ATTACK_DECAY_SV(_channels, 4, 2);
538 // PROGRAM_SUSTAIN_RELEASE_SV(_channels, 14, 10);
539 break;
540
544 // PROGRAM_PULSE_SV(_channels, 1024);
545 // PROGRAM_ATTACK_DECAY_SV(_channels, 3, 3);
546 // PROGRAM_SUSTAIN_RELEASE_SV(_channels, 14, 3);
547 break;
548
557 // PROGRAM_TRIANGLE_SV(_channels);
558 // PROGRAM_ATTACK_DECAY_SV(_channels, 2, 10);
559 // PROGRAM_SUSTAIN_RELEASE_SV(_channels, 12, 14);
560 break;
561
562 default:
572 // PROGRAM_TRIANGLE_SV(_channels);
573 // PROGRAM_ATTACK_DECAY_SV(_channels, 3, 3);
574 // PROGRAM_SUSTAIN_RELEASE_SV(_channels, 14, 14);
575 break;
576
584 // PROGRAM_PULSE_SV(_channels, 128);
585 // PROGRAM_ATTACK_DECAY_SV(_channels, 10, 10);
586 // PROGRAM_SUSTAIN_RELEASE_SV(_channels, 14, 10);
587 break;
588
590 // PROGRAM_PULSE_SV(_channels, 128);
591 // PROGRAM_ATTACK_DECAY_SV(_channels, 1, 2);
592 // PROGRAM_SUSTAIN_RELEASE_SV(_channels, 4, 3);
593 break;
594
604 // PROGRAM_TRIANGLE_SV(_channels);
605 // PROGRAM_ATTACK_DECAY_SV(_channels, 2, 10);
606 // PROGRAM_SUSTAIN_RELEASE_SV(_channels, 12, 14);
607 break;
608
621 // PROGRAM_PULSE_SV(_channels, 128);
622 // PROGRAM_ATTACK_DECAY_SV(_channels, 10, 10);
623 // PROGRAM_SUSTAIN_RELEASE_SV(_channels, 14, 10);
624 break;
625
645 // PROGRAM_NOISE_SV(_channels);
646 // PROGRAM_ATTACK_DECAY_SV(_channels, 1, 14);
647 // PROGRAM_SUSTAIN_RELEASE_SV(_channels, 14, 14);
648 break;
649
677 // PROGRAM_SAW_SV(_channels);
678 // PROGRAM_ATTACK_DECAY_SV(_channels, 3, 3);
679 // PROGRAM_SUSTAIN_RELEASE_SV(_channels, 14, 14);
680 break;
681
682
705 // PROGRAM_SAW_SV(_channels);
706 // PROGRAM_ATTACK_DECAY_SV(_channels, 3, 3);
707 // PROGRAM_SUSTAIN_RELEASE_SV(_channels, 14, 14);
708 break;
709 }
710
711}
712
713void sn76489m_set_frequency_vars( Environment * _environment, char * _channels, char * _frequency ) {
714
715 deploy( sn76489vars, src_hw_sn76489m_vars_asm );
716 deploy( sn76489startup, src_hw_sn76489m_startup_asm );
717
718 outline1("LDU %s", _frequency );
719 if ( _channels ) {
720 outline1("LDA %s", _channels );
721 } else {
722 outline0("LDA #$7" );
723 }
724
725 outline0("JSR SN76489FREQ");
726
727}
728
729void sn76489m_set_pitch_vars( Environment * _environment, char * _channels, char * _pitch ) {
730
731 deploy( sn76489vars, src_hw_sn76489m_vars_asm );
732 deploy( sn76489startup, src_hw_sn76489m_startup_asm );
733
734 outline1("LDU %s", _pitch );
735 if ( _channels ) {
736 outline1("LDA %s", _channels );
737 } else {
738 outline0("LDA #$7" );
739 }
740
741 outline0("JSR SN76489PROGFREQ");
742
743}
744
745void sn76489m_set_note_vars( Environment * _environment, char * _channels, char * _note ) {
746
747 deploy( sn76489vars, src_hw_sn76489m_vars_asm );
748 deploy( sn76489startup, src_hw_sn76489m_startup_asm );
749
750 outline0("LDX SN76489FREQTABLE");
751 outline1("LDB %s", _note);
752 outline0("CLRA");
753 outline0("LSLB");
754 outline0("ROLA");
755 outline0("LDU D,X");
756 if ( _channels ) {
757 outline1("LDA %s", _channels );
758 } else {
759 outline0("LDA #$7" );
760 }
761
762 outline0("JSR SN76489PROGFREQ");
763
764}
765
766void sn76489m_stop_vars( Environment * _environment, char * _channels ) {
767
768 deploy( sn76489vars, src_hw_sn76489m_vars_asm );
769 deploy( sn76489startup, src_hw_sn76489m_startup_asm );
770
771 if ( _channels ) {
772 outline1("LDA %s", _channels );
773 } else {
774 outline0("LDA #$7" );
775 }
776 outline0("JSR SN76489STOP");
777
778}
779
780void sn76489m_music( Environment * _environment, char * _music, int _size, int _loop, int _type, int _bank ) {
781
782 deploy_deferred( sn76489vars, src_hw_sn76489m_vars_asm );
783 deploy_deferred( sn76489startup, src_hw_sn76489m_startup_asm );
784 deploy_deferred( music, src_hw_sn76489m_music_asm );
785
786 outline0("ORCC #$50");
787 outline1("LDA #$%2.2x", (unsigned char)(_bank & 0xff) );
788 outline0("STA SN76489BANK");
789 outline1("LDA #$%2.2x", _loop );
790 outline0("STA SN76489MUSICLOOP");
791 outline1("LDX %s", _music);
792 outline1("LDA #$%2.2x", ( _size>>7 ) & 0xff);
793 outline1("LDB #$%2.2x", _size - ( _size>>7 )*256 );
794 outline0("JSR MUSICPLAYERRESET");
795 outline1("LDA #$%2.2x", _type );
796 outline0("STA SN76489MUSICTYPE" );
797 outline0("ANDCC #$AF");
798
799}
800
801void sn76489m_set_duration( Environment * _environment, int _channel, int _duration ) {
802
803 deploy( sn76489vars, src_hw_sn76489m_vars_asm );
804 deploy( sn76489startup, src_hw_sn76489m_startup_asm );
805
806 PROGRAM_DURATION( _channel, _duration );
807
808}
809
810void sn76489m_wait_duration( Environment * _environment, int _channel ) {
811
812 deploy( sn76489vars, src_hw_sn76489m_vars_asm );
813 deploy( sn76489startup, src_hw_sn76489m_startup_asm );
814
815 WAIT_DURATION( _channel );
816
817}
818
819void sn76489m_set_duration_vars( Environment * _environment, char * _channel, char * _duration ) {
820
821 deploy( sn76489vars, src_hw_sn76489m_vars_asm );
822 deploy( sn76489startup, src_hw_sn76489m_startup_asm );
823
824 if ( _duration ) {
825 outline1("LDU %s", _duration );
826 } else {
827 outline0("LDU #50" );
828 }
829 if ( _channel ) {
830 outline1("LDA %s", _channel );
831 } else {
832 outline0("LDA #$7" );
833 }
834
835 outline0("JSR SN76489PROGDUR" );
836
837}
838
839void sn76489m_wait_duration_vars( Environment * _environment, char * _channel ) {
840
841 deploy( sn76489vars, src_hw_sn76489m_vars_asm );
842 deploy( sn76489startup, src_hw_sn76489m_startup_asm );
843
844 if ( _channel ) {
845 outline1("LDA %s", _channel );
846 } else {
847 outline0("LDA #$7" );
848 }
849
850 outline0("JSR SN76489WAITDUR" );
851
852}
853
854#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)
#define PROGRAM_DURATION(c, d)
Definition sn76489m.c:154
#define PROGRAM_FREQUENCY(c, f)
Definition sn76489m.c:127
void sn76489m_wait_duration_vars(Environment *_environment, char *_channel)
Definition sn76489m.c:839
#define WAIT_DURATION(c)
Definition sn76489m.c:163
void sn76489m_set_duration_vars(Environment *_environment, char *_channel, char *_duration)
Definition sn76489m.c:819
void sn76489m_set_pitch(Environment *_environment, int _channels, int _pitch)
Definition sn76489m.c:438
void sn76489m_music(Environment *_environment, char *_music, int _size, int _loop, int _type, int _bank)
Definition sn76489m.c:780
void sn76489m_set_program(Environment *_environment, int _channels, int _program)
Definition sn76489m.c:222
void sn76489m_stop_vars(Environment *_environment, char *_channels)
Definition sn76489m.c:766
void sn76489m_set_note(Environment *_environment, int _channels, int _note)
Definition sn76489m.c:447
void sn76489m_set_frequency_vars(Environment *_environment, char *_channels, char *_frequency)
Definition sn76489m.c:713
void sn76489m_set_parameter(Environment *_environment, int _channels, int _parameter, int _value)
Definition sn76489m.c:425
#define STOP_FREQUENCY(c)
Definition sn76489m.c:198
void sn76489m_set_program_semi_var(Environment *_environment, char *_channels, int _program)
Definition sn76489m.c:510
void sn76489m_set_volume(Environment *_environment, int _channels, int _volume)
Definition sn76489m.c:116
void sn76489m_set_note_vars(Environment *_environment, char *_channels, char *_note)
Definition sn76489m.c:745
void sn76489m_wait_duration(Environment *_environment, int _channel)
Definition sn76489m.c:810
void sn76489m_set_pitch_vars(Environment *_environment, char *_channels, char *_pitch)
Definition sn76489m.c:729
void sn76489m_start(Environment *_environment, int _channels)
Definition sn76489m.c:99
void sn76489m_initialization(Environment *_environment)
Definition sn76489m.c:50
#define PROGRAM_PITCH(c, f)
Definition sn76489m.c:171
void sn76489m_start_var(Environment *_environment, char *_channels)
Definition sn76489m.c:462
void sn76489m_stop(Environment *_environment, int _channels)
Definition sn76489m.c:453
void sn76489m_set_frequency(Environment *_environment, int _channels, int _frequency)
Definition sn76489m.c:429
void sn76489m_set_volume_vars(Environment *_environment, char *_channels, char *_volume)
Definition sn76489m.c:476
void sn76489m_finalization(Environment *_environment)
Definition sn76489m.c:86
void sn76489m_set_duration(Environment *_environment, int _channel, int _duration)
Definition sn76489m.c:801
void sn76489m_set_volume_semi_var(Environment *_environment, char *_channel, int _volume)
Definition sn76489m.c:495
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
#define deploy_deferred(s, e)
Definition ugbc.h:4302
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