Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
MorsGames
GitHub Repository: MorsGames/sm64plus
Path: blob/master/src/audio/port_sh.c
7857 views
1
#ifdef VERSION_SH
2
// TODO: merge this with port_eu.c?
3
4
#include <ultra64.h>
5
6
#include "data.h"
7
#include "heap.h"
8
#include "load.h"
9
#include "synthesis.h"
10
#include "internal.h"
11
#include "seqplayer.h"
12
13
#define EXTRA_BUFFERED_AI_SAMPLES_TARGET 0x80
14
#define SAMPLES_TO_OVERPRODUCE 0x10
15
16
extern s32 D_SH_80314FC8;
17
extern struct SPTask *D_SH_80314FCC;
18
extern u8 D_SH_80315098;
19
extern u8 D_SH_8031509C;
20
extern OSMesgQueue *D_SH_80350F68;
21
22
void func_8031D690(s32 playerIndex, s32 numFrames);
23
void seq_player_fade_to_zero_volume(s32 arg0, s32 numFrames);
24
void func_802ad7ec(u32 arg0);
25
26
#ifdef TARGET_N64
27
struct SPTask *create_next_audio_frame_task(void) {
28
u32 samplesRemainingInAI;
29
s32 writtenCmds;
30
s32 index;
31
OSTask_t *task;
32
s32 flags;
33
s16 *currAiBuffer;
34
s32 oldDmaCount;
35
s32 sp38;
36
s32 sp34;
37
s32 writtenCmdsCopy;
38
39
gAudioFrameCount++;
40
if (gAudioFrameCount % gAudioBufferParameters.presetUnk4 != 0) {
41
if ((gAudioFrameCount % gAudioBufferParameters.presetUnk4) + 1 == gAudioBufferParameters.presetUnk4) {
42
return D_SH_80314FCC;
43
}
44
return NULL;
45
}
46
osSendMesg(D_SH_80350F38, (OSMesg) gAudioFrameCount, OS_MESG_NOBLOCK);
47
48
gAudioTaskIndex ^= 1;
49
gCurrAiBufferIndex++;
50
gCurrAiBufferIndex %= NUMAIBUFFERS;
51
index = (gCurrAiBufferIndex - 2 + NUMAIBUFFERS) % NUMAIBUFFERS;
52
samplesRemainingInAI = osAiGetLength() / 4;
53
54
if (gAudioLoadLockSH < 0x10U) {
55
if (gAiBufferLengths[index] != 0) {
56
osAiSetNextBuffer(gAiBuffers[index], gAiBufferLengths[index] * 4);
57
}
58
}
59
60
oldDmaCount = gCurrAudioFrameDmaCount;
61
if (oldDmaCount > AUDIO_FRAME_DMA_QUEUE_SIZE) {
62
}
63
gCurrAudioFrameDmaCount = 0;
64
65
decrease_sample_dma_ttls();
66
func_sh_802f41e4(gAudioResetStatus);
67
if (osRecvMesg(D_SH_80350F88, (OSMesg *) &sp38, OS_MESG_NOBLOCK) != -1) {
68
if (gAudioResetStatus == 0) {
69
gAudioResetStatus = 5;
70
}
71
gAudioResetPresetIdToLoad = (u8) sp38;
72
}
73
74
if (gAudioResetStatus != 0) {
75
if (audio_shut_down_and_reset_step() == 0) {
76
if (gAudioResetStatus == 0) {
77
osSendMesg(D_SH_80350FA8, (OSMesg) (s32) gAudioResetPresetIdToLoad, OS_MESG_NOBLOCK);
78
}
79
D_SH_80314FCC = 0;
80
return NULL;
81
}
82
}
83
if (gAudioLoadLockSH >= 0x11U) {
84
return NULL;
85
}
86
if (gAudioLoadLockSH != 0) {
87
gAudioLoadLockSH++;
88
}
89
90
gAudioTask = &gAudioTasks[gAudioTaskIndex];
91
gAudioCmd = (u64 *) gAudioCmdBuffers[gAudioTaskIndex];
92
index = gCurrAiBufferIndex;
93
currAiBuffer = gAiBuffers[index];
94
95
gAiBufferLengths[index] = (s16) ((((gAudioBufferParameters.samplesPerFrameTarget - samplesRemainingInAI) +
96
EXTRA_BUFFERED_AI_SAMPLES_TARGET) & ~0xf) + SAMPLES_TO_OVERPRODUCE);
97
if (gAiBufferLengths[index] < gAudioBufferParameters.minAiBufferLength) {
98
gAiBufferLengths[index] = gAudioBufferParameters.minAiBufferLength;
99
}
100
if (gAiBufferLengths[index] > gAudioBufferParameters.maxAiBufferLength) {
101
gAiBufferLengths[index] = gAudioBufferParameters.maxAiBufferLength;
102
}
103
104
if (osRecvMesg(D_SH_80350F68, (OSMesg *) &sp34, 0) != -1) {
105
do {
106
func_802ad7ec(sp34);
107
} while (osRecvMesg(D_SH_80350F68, (OSMesg *) &sp34, 0) != -1);
108
}
109
110
flags = 0;
111
gAudioCmd = synthesis_execute(gAudioCmd, &writtenCmds, currAiBuffer, gAiBufferLengths[index]);
112
gAudioRandom = (u32) (osGetCount() * (gAudioRandom + gAudioFrameCount));
113
gAudioRandom = (u32) (gAiBuffers[index][gAudioFrameCount & 0xFF] + gAudioRandom);
114
115
index = gAudioTaskIndex;
116
gAudioTask->msgqueue = NULL;
117
gAudioTask->msg = NULL;
118
119
task = &gAudioTask->task.t;
120
task->type = M_AUDTASK;
121
task->flags = flags;
122
task->ucode_boot = rspF3DBootStart;
123
task->ucode_boot_size = (u8 *) rspF3DStart - (u8 *) rspF3DBootStart;
124
task->ucode = rspAspMainStart;
125
task->ucode_data = rspAspMainDataStart;
126
task->ucode_size = 0x1000;
127
task->ucode_data_size = (rspAspMainDataEnd - rspAspMainDataStart) * sizeof(u64);
128
task->dram_stack = NULL;
129
task->dram_stack_size = 0;
130
task->output_buff = NULL;
131
task->output_buff_size = NULL;
132
task->data_ptr = gAudioCmdBuffers[index];
133
task->data_size = writtenCmds * sizeof(u64);
134
task->yield_data_ptr = NULL;
135
task->yield_data_size = 0;
136
137
writtenCmdsCopy = writtenCmds;
138
if (D_SH_80314FC8 < writtenCmdsCopy) {
139
D_SH_80314FC8 = writtenCmdsCopy;
140
}
141
142
if (gAudioBufferParameters.presetUnk4 == 1) {
143
return gAudioTask;
144
} else {
145
D_SH_80314FCC = gAudioTask;
146
return NULL;
147
}
148
}
149
#else
150
struct SPTask *create_next_audio_frame_task(void) {
151
return NULL;
152
}
153
void create_next_audio_buffer(s16 *samples, u32 num_samples) {
154
s32 writtenCmds;
155
OSMesg msg;
156
gAudioFrameCount++;
157
decrease_sample_dma_ttls();
158
if (osRecvMesg(D_SH_80350F88, &msg, 0) != -1) {
159
gAudioResetPresetIdToLoad = (u8) (intptr_t) msg;
160
if (gAudioResetStatus == 0) {
161
gAudioResetStatus = 5;
162
}
163
}
164
165
if (gAudioResetStatus != 0) {
166
audio_reset_session();
167
gAudioResetStatus = 0;
168
}
169
while (osRecvMesg(D_SH_80350F68, &msg, OS_MESG_NOBLOCK) != -1) {
170
func_802ad7ec((u32) msg);
171
}
172
synthesis_execute(gAudioCmdBuffers[0], &writtenCmds, samples, num_samples);
173
gAudioRandom = ((gAudioRandom + gAudioFrameCount) * gAudioFrameCount);
174
gAudioRandom = gAudioRandom + writtenCmds / 8;
175
gCurrAudioFrameDmaCount = 0;
176
}
177
#endif
178
179
void eu_process_audio_cmd(struct EuAudioCmd *cmd) {
180
s32 i;
181
struct Note *note;
182
struct NoteSubEu *sub;
183
184
switch (cmd->u.s.op) {
185
case 0x81:
186
preload_sequence(cmd->u.s.arg2, 3);
187
break;
188
189
case 0x82:
190
case 0x88:
191
load_sequence(cmd->u.s.arg1, cmd->u.s.arg2, cmd->u.s.arg3);
192
func_8031D690(cmd->u.s.arg1, cmd->u2.as_s32);
193
break;
194
195
case 0x83:
196
if (gSequencePlayers[cmd->u.s.arg1].enabled != FALSE) {
197
if (cmd->u2.as_s32 == 0) {
198
sequence_player_disable(&gSequencePlayers[cmd->u.s.arg1]);
199
}
200
else {
201
seq_player_fade_to_zero_volume(cmd->u.s.arg1, cmd->u2.as_s32);
202
}
203
}
204
break;
205
206
case 0x84:
207
break;
208
209
case 0xf0:
210
gSoundMode = cmd->u2.as_s32;
211
break;
212
213
case 0xf1:
214
for (i = 0; i < 4; i++) {
215
gSequencePlayers[i].muted = TRUE;
216
gSequencePlayers[i].recalculateVolume = TRUE;
217
}
218
break;
219
220
case 0xf2:
221
if (cmd->u2.as_s32 == 1) {
222
for (i = 0; i < gMaxSimultaneousNotes; i++) {
223
note = &gNotes[i];
224
sub = &note->noteSubEu;
225
if (note->noteSubEu.enabled && note->unkSH34 == 0) {
226
if ((note->parentLayer->seqChannel->muteBehavior & 8) != 0) {
227
sub->finished = TRUE;
228
}
229
}
230
}
231
}
232
for (i = 0; i < 4; i++) {
233
gSequencePlayers[i].muted = FALSE;
234
gSequencePlayers[i].recalculateVolume = TRUE;
235
}
236
break;
237
238
case 0xf3:
239
func_sh_802f3024(cmd->u.s.arg1, cmd->u.s.arg2, cmd->u.s.arg3);
240
break;
241
242
case 0xf4:
243
func_sh_802f30f4(cmd->u.s.arg1, cmd->u.s.arg2, cmd->u.s.arg3, &gUnkQueue1);
244
break;
245
246
case 0xf5:
247
func_sh_802f3158(cmd->u.s.arg1, cmd->u.s.arg2, cmd->u.s.arg3, &gUnkQueue1);
248
break;
249
250
case 0xf6:
251
func_sh_802f3288(cmd->u.s.arg2);
252
break;
253
}
254
}
255
256
void seq_player_fade_to_zero_volume(s32 arg0, s32 fadeOutTime) {
257
struct SequencePlayer *player;
258
259
if (fadeOutTime == 0) {
260
fadeOutTime = 1;
261
}
262
player = &gSequencePlayers[arg0];
263
player->state = 2;
264
player->fadeRemainingFrames = fadeOutTime;
265
player->fadeVelocity = -(player->fadeVolume / (f32) fadeOutTime);
266
}
267
268
void func_8031D690(s32 playerIndex, s32 fadeInTime) {
269
struct SequencePlayer *player;
270
271
if (fadeInTime != 0) {
272
player = &gSequencePlayers[playerIndex];
273
player->state = 1;
274
player->fadeTimerUnkEu = fadeInTime;
275
player->fadeRemainingFrames = fadeInTime;
276
player->fadeVolume = 0.0f;
277
player->fadeVelocity = 0.0f;
278
}
279
}
280
281
void port_eu_init_queues(void) {
282
D_SH_80350F18 = 0;
283
D_SH_80350F19 = 0;
284
D_SH_80350F38 = &D_SH_80350F20;
285
D_SH_80350F68 = &D_SH_80350F50;
286
D_SH_80350F88 = &D_SH_80350F70;
287
D_SH_80350FA8 = &D_SH_80350F90;
288
osCreateMesgQueue(D_SH_80350F38, D_SH_80350F1C, 1);
289
osCreateMesgQueue(D_SH_80350F68, D_SH_80350F40, 4);
290
osCreateMesgQueue(D_SH_80350F88, D_SH_80350F6C, 1);
291
osCreateMesgQueue(D_SH_80350FA8, D_SH_80350F8C, 1);
292
}
293
294
extern struct EuAudioCmd sAudioCmd[0x100];
295
void func_802ad6f0(s32 arg0, s32 *arg1) {
296
struct EuAudioCmd *cmd = &sAudioCmd[D_SH_80350F18 & 0xff];
297
cmd->u.first = arg0;
298
cmd->u2.as_u32 = *arg1;
299
D_SH_80350F18++;
300
if (D_SH_80350F18 == D_SH_80350F19) {
301
D_SH_80350F18--;
302
}
303
}
304
305
void func_802ad728(u32 arg0, f32 arg1) {
306
func_802ad6f0(arg0, (s32 *) &arg1);
307
}
308
309
void func_802ad74c(u32 arg0, u32 arg1) {
310
func_802ad6f0(arg0, (s32 *) &arg1);
311
}
312
313
void func_802ad770(u32 arg0, s8 arg1) {
314
s32 sp1C = arg1 << 24;
315
func_802ad6f0(arg0, &sp1C);
316
}
317
318
char shindouDebugPrint133[] = "AudioSend: %d -> %d (%d)\n";
319
320
void func_sh_802F64C8(void) {
321
static s32 D_SH_8031503C = 0;
322
s32 mesg;
323
324
if (((D_SH_80350F18 - D_SH_80350F19 + 0x100) & 0xff) > D_SH_8031503C) {
325
D_SH_8031503C = (D_SH_80350F18 - D_SH_80350F19 + 0x100) & 0xff;
326
}
327
mesg = ((D_SH_80350F19 & 0xff) << 8) | (D_SH_80350F18 & 0xff);
328
osSendMesg(D_SH_80350F68, (OSMesg)mesg, OS_MESG_NOBLOCK);
329
D_SH_80350F19 = D_SH_80350F18;
330
}
331
332
void func_sh_802f6540(void) {
333
D_SH_80350F19 = D_SH_80350F18;
334
}
335
336
void func_802ad7ec(u32 arg0) {
337
struct EuAudioCmd *cmd;
338
struct SequencePlayer *seqPlayer;
339
struct SequenceChannel *chan;
340
u8 end;
341
342
UNUSED static char shindouDebugPrint134[] = "Continue Port\n";
343
UNUSED static char shindouDebugPrint135[] = "%d -> %d\n";
344
UNUSED static char shindouDebugPrint136[] = "Sync-Frame Break. (Remain %d)\n";
345
UNUSED static char shindouDebugPrint137[] = "Undefined Port Command %d\n";
346
347
static u8 D_SH_80315098 = 0;
348
static u8 D_SH_8031509C = 0;
349
350
if (D_SH_8031509C == 0) {
351
D_SH_80315098 = (arg0 >> 8) & 0xff;
352
}
353
354
end = arg0 & 0xff;
355
356
for (;;) {
357
if (D_SH_80315098 == end) {
358
D_SH_8031509C = 0;
359
break;
360
}
361
cmd = &sAudioCmd[D_SH_80315098 & 0xff];
362
D_SH_80315098++;
363
if (cmd->u.s.op == 0xf8) {
364
D_SH_8031509C = 1;
365
break;
366
}
367
else if ((cmd->u.s.op & 0xf0) == 0xf0) {
368
eu_process_audio_cmd(cmd);
369
}
370
else if (cmd->u.s.arg1 < SEQUENCE_PLAYERS) {
371
seqPlayer = &gSequencePlayers[cmd->u.s.arg1];
372
if ((cmd->u.s.op & 0x80) != 0) {
373
eu_process_audio_cmd(cmd);
374
}
375
else if ((cmd->u.s.op & 0x40) != 0) {
376
switch (cmd->u.s.op) {
377
case 0x41:
378
if (seqPlayer->fadeVolumeScale != cmd->u2.as_f32) {
379
seqPlayer->fadeVolumeScale = cmd->u2.as_f32;
380
seqPlayer->recalculateVolume = TRUE;
381
}
382
break;
383
384
case 0x47:
385
seqPlayer->tempo = cmd->u2.as_s32 * TATUMS_PER_BEAT;
386
break;
387
388
case 0x49:
389
seqPlayer->tempoAdd = cmd->u2.as_s32 * TEMPO_SCALE;
390
break;
391
392
case 0x48:
393
seqPlayer->transposition = cmd->u2.as_s8;
394
break;
395
396
case 0x46:
397
seqPlayer->seqVariationEu[cmd->u.s.arg3] = cmd->u2.as_s8;
398
break;
399
}
400
}
401
else if (seqPlayer->enabled != FALSE && cmd->u.s.arg2 < 0x10) {
402
chan = seqPlayer->channels[cmd->u.s.arg2];
403
if (IS_SEQUENCE_CHANNEL_VALID(chan))
404
{
405
switch (cmd->u.s.op) {
406
case 1:
407
if (chan->volumeScale != cmd->u2.as_f32) {
408
chan->volumeScale = cmd->u2.as_f32;
409
chan->changes.as_bitfields.volume = TRUE;
410
}
411
break;
412
case 2:
413
if (chan->volume != cmd->u2.as_f32) {
414
chan->volume = cmd->u2.as_f32;
415
chan->changes.as_bitfields.volume = TRUE;
416
}
417
break;
418
case 3:
419
if (chan->newPan != cmd->u2.as_s8) {
420
chan->newPan = cmd->u2.as_s8;
421
chan->changes.as_bitfields.pan = TRUE;
422
}
423
break;
424
case 4:
425
if (chan->freqScale != cmd->u2.as_f32) {
426
chan->freqScale = cmd->u2.as_f32;
427
chan->changes.as_bitfields.freqScale = TRUE;
428
}
429
break;
430
case 5:
431
//! @bug u8 s8 comparison (but harmless)
432
if (chan->reverbVol != cmd->u2.as_s8) {
433
chan->reverbVol = cmd->u2.as_s8;
434
}
435
break;
436
case 6:
437
if (cmd->u.s.arg3 < 8) {
438
chan->soundScriptIO[cmd->u.s.arg3] = cmd->u2.as_s8;
439
}
440
break;
441
case 8:
442
chan->stopSomething2 = cmd->u2.as_s8;
443
break;
444
case 9:
445
chan->muteBehavior = cmd->u2.as_s8;
446
}
447
}
448
}
449
}
450
451
cmd->u.s.op = 0;
452
}
453
}
454
455
u32 func_sh_802f6878(s32 *arg0) {
456
u32 sp1C;
457
458
if (osRecvMesg(&gUnkQueue1, (OSMesg *) &sp1C, 0) == -1) {
459
*arg0 = 0;
460
return 0U;
461
}
462
*arg0 = (s32) (sp1C & 0xFFFFFF);
463
return sp1C >> 0x18;
464
}
465
466
u8 *func_sh_802f68e0(u32 index, u32 *a1) {
467
return func_sh_802f3220(index, a1);
468
}
469
470
s32 func_sh_802f6900(void) {
471
s32 ret;
472
s32 sp18;
473
474
ret = osRecvMesg(D_SH_80350FA8, (OSMesg *) &sp18, 0);
475
476
if (ret == -1) {
477
return 0;
478
}
479
if (sp18 != gAudioResetPresetIdToLoad) {
480
return 0;
481
} else {
482
return 1;
483
}
484
}
485
486
// TODO: (Scrub C)
487
void func_sh_802f6958(OSMesg mesg) {
488
s32 a;
489
OSMesg recvMesg;
490
491
do {
492
a = -1;
493
} while (osRecvMesg(D_SH_80350FA8, &recvMesg, OS_MESG_NOBLOCK) != a);
494
func_sh_802f6540();
495
osSendMesg(D_SH_80350F88, mesg, OS_MESG_NOBLOCK);
496
}
497
498
void func_sh_802f69cc(void) {
499
gAudioLoadLockSH = 1;
500
func_sh_802f6958(0);
501
gAudioResetStatus = 0;
502
}
503
504
s32 func_sh_802f6a08(s32 playerIndex, s32 channelIndex, s32 soundScriptIOIndex) {
505
struct SequenceChannel *seqChannel;
506
struct SequencePlayer *player;
507
508
player = &gSequencePlayers[playerIndex];
509
if (player->enabled) {
510
seqChannel = player->channels[channelIndex];
511
if (IS_SEQUENCE_CHANNEL_VALID(seqChannel)) {
512
return seqChannel->soundScriptIO[soundScriptIOIndex];
513
}
514
}
515
return -1;
516
}
517
518
s8 func_sh_802f6a6c(s32 playerIndex, s32 index) {
519
return gSequencePlayers[playerIndex].seqVariationEu[index];
520
}
521
522
void port_eu_init(void) {
523
port_eu_init_queues();
524
}
525
526
char shindouDebugPrint138[] = "specchg conjunction error (Msg:%d Cur:%d)\n";
527
char shindouDebugPrint139[] = "Error : Queue is not empty ( %x ) \n";
528
char shindouDebugPrint140[] = "Audio: setvol: volume minus %f\n";
529
char shindouDebugPrint141[] = "Audio: setvol: volume overflow %f\n";
530
char shindouDebugPrint142[] = "Audio: setpitch: pitch zero or minus %f\n";
531
char shindouDebugPrint143[] = "----------------------Double-Error CH: %x %f\n";
532
char shindouDebugPrint144[] = "----------------------Double-Error NT: %x\n";
533
char shindouDebugPrint145[] = "CAUTION:SUB IS SEPARATED FROM GROUP\n";
534
char shindouDebugPrint146[] = "CAUTION:PAUSE EMERGENCY\n";
535
char shindouDebugPrint147[] = "Error:Wait Track disappear\n";
536
char shindouDebugPrint148[] = "Audio: voiceman: No bank error %d\n";
537
char shindouDebugPrint149[] = "Audio: voiceman: progNo. overflow %d,%d\n";
538
char shindouDebugPrint150[] = "ptr2 %x\n";
539
char shindouDebugPrint151[] = "Audio: voiceman: progNo. undefined %d,%d\n";
540
char shindouDebugPrint152[] = "Audio: voiceman: No bank error %d\n";
541
char shindouDebugPrint153[] = "Audio: voiceman: Percussion Overflow %d,%d\n";
542
char shindouDebugPrint154[] = "Audio: voiceman: Percussion table pointer (bank %d) is irregular %x.\n";
543
char shindouDebugPrint155[] = "Audio: voiceman: Percpointer NULL %d,%d\n";
544
char shindouDebugPrint156[] = "--4 %x\n";
545
char shindouDebugPrint157[] = "NoteOff Comes during wait release %x (note %x)\n";
546
char shindouDebugPrint158[] = "Slow Release Batting\n";
547
u8 euUnknownData_8030194c[4] = { 0x40, 0x20, 0x10, 0x08 };
548
char shindouDebugPrint159[] = "Audio:Wavemem: Bad voiceno (%d)\n";
549
char shindouDebugPrint160[] = "Audio: C-Alloc : Dealloc voice is NULL\n";
550
char shindouDebugPrint161[] = "Alloc Error:Dim voice-Alloc %d";
551
char shindouDebugPrint162[] = "Error:Same List Add\n";
552
char shindouDebugPrint163[] = "Already Cut\n";
553
char shindouDebugPrint164[] = "Audio: C-Alloc : lowerPrio is NULL\n";
554
char shindouDebugPrint165[] = "Intterupt UseStop %d (Kill %d)\n";
555
char shindouDebugPrint166[] = "Intterupt RelWait %d (Kill %d)\n";
556
char shindouDebugPrint167[] = "Drop Voice (Prio %x)\n";
557
s32 D_SH_803154CC = 0; // file boundary
558
559
// effects.c
560
char shindouDebugPrint168[] = "Audio:Envp: overflow %f\n";
561
s32 D_SH_803154EC = 0; // file boundary
562
563
// seqplayer.c
564
char shindouDebugPrint169[] = "Audio:Track:Warning: No Free Notetrack\n";
565
char shindouDebugPrint170[] = "SUBTRACK DIM\n";
566
char shindouDebugPrint171[] = "Audio:Track: Warning :SUBTRACK had been stolen by other Group.\n";
567
char shindouDebugPrint172[] = "SEQID %d,BANKID %d\n";
568
char shindouDebugPrint173[] = "ERR:SUBTRACK %d NOT ALLOCATED\n";
569
char shindouDebugPrint174[] = "Stop Release\n";
570
char shindouDebugPrint175[] = "Error:Same List Add\n";
571
char shindouDebugPrint176[] = "Wait Time out!\n";
572
char shindouDebugPrint177[] = "Macro Level Over Error!\n";
573
char shindouDebugPrint178[] = "Macro Level Over Error!\n"; // Again
574
char shindouDebugPrint179[] = "WARNING: NPRG: cannot change %d\n";
575
char shindouDebugPrint180[] = "Audio:Track:NOTE:UNDEFINED NOTE COM. %x\n";
576
char shindouDebugPrint181[] = "Error: Subtrack no prg.\n";
577
char shindouDebugPrint182[] = "ERR %x\n";
578
char shindouDebugPrint183[] = "Note OverFlow %d\n";
579
char shindouDebugPrint184[] = "trs %d , %d, %d\n";
580
char shindouDebugPrint185[] = "Audio: Note:Velocity Error %d\n";
581
char shindouDebugPrint186[] = "Audio:Track :Call Macro Level Over Error!\n";
582
char shindouDebugPrint187[] = "Audio:Track :Loops Macro Level Over Error!\n";
583
char shindouDebugPrint188[] = "SUB:ERR:BANK %d NOT CACHED.\n";
584
char shindouDebugPrint189[] = "SUB:ERR:BANK %d NOT CACHED.\n";
585
char shindouDebugPrint190[] = "Audio:Track: CTBLCALL Macro Level Over Error!\n";
586
char shindouDebugPrint191[] = "Set Noise %d\n";
587
char shindouDebugPrint192[] = "[%2x] \n";
588
char shindouDebugPrint193[] = "Err :Sub %x ,address %x:Undefined SubTrack Function %x";
589
char shindouDebugPrint194[] = "VoiceLoad Error Bank:%d,Prog:%d\n";
590
char shindouDebugPrint195[] = "Disappear Sequence or Bank %d\n";
591
char shindouDebugPrint196[] = "[FIN] group.\n";
592
char shindouDebugPrint197[] = "Macro Level Over Error!\n";
593
char shindouDebugPrint198[] = "Macro Level Over Error!\n";
594
char shindouDebugPrint199[] = "Group:Undefine upper C0h command (%x)\n";
595
char shindouDebugPrint200[] = "Group:Undefined Command\n";
596
597
#endif
598
599