diff --git a/configure.py b/configure.py index 931adc5c..7c680628 100644 --- a/configure.py +++ b/configure.py @@ -818,7 +818,7 @@ config.libs = [ Object(Matching, "jaudio_NES/internal/rate.c"), Object(NonMatching, "jaudio_NES/internal/rspsim.c"), Object(Matching, "jaudio_NES/internal/seqsetup.c"), - Object(Equivalent, "jaudio_NES/internal/system.c", extra_cflags=["-vector on"]), + Object(Matching, "jaudio_NES/internal/system.c", extra_cflags=["-vector on"]), Object(Matching, "jaudio_NES/internal/tables.c"), Object(Matching, "jaudio_NES/internal/waveread.c"), ], diff --git a/include/jaudio_NES/audiostruct.h b/include/jaudio_NES/audiostruct.h index a8de0d20..ed5a0494 100644 --- a/include/jaudio_NES/audiostruct.h +++ b/include/jaudio_NES/audiostruct.h @@ -568,9 +568,9 @@ struct note_ { /* 0x00 */ u8 finished : 1; /* 0x00 */ u8 muted : 1; /* 0x00 */ u8 continuous : 1; - /* 0x00 */ u8 _00bit3 : 1; + /* 0x00 */ u8 channel_attached : 1; /* 0x00 */ u8 ignore_drum_pan : 1; - /* 0x00 */ u8 _00bit1 : 1; + /* 0x00 */ u8 continuous_channel_released : 1; /* 0x00 */ u8 note_properties_need_init : 1; /* 0x01 */ phase stereo_phase; /* 0x02 */ u8 inst_or_wave; diff --git a/src/static/jaudio_NES/game/staff.c b/src/static/jaudio_NES/game/staff.c index 33b4ad07..0c1cc239 100644 --- a/src/static/jaudio_NES/game/staff.c +++ b/src/static/jaudio_NES/game/staff.c @@ -60,7 +60,7 @@ extern void Na_GetStaffRollInfo(StaffRollInfo_c* info) { subtrack = group->subtracks[i]; if (subtrack != nullptr) { note = subtrack->note_layers[0]; - if (note != nullptr && note->_00bit3) { + if (note != nullptr && note->channel_attached) { channel = note->channel; if (channel != nullptr && channel->common_ch.enabled) { /* Found our enabled note channel, get mouth type */ diff --git a/src/static/jaudio_NES/internal/channel.c b/src/static/jaudio_NES/internal/channel.c index 930b30d8..b883830d 100644 --- a/src/static/jaudio_NES/internal/channel.c +++ b/src/static/jaudio_NES/internal/channel.c @@ -251,7 +251,7 @@ extern void Nas_UpdateChannel(void) { } } else { if (playback_chan->current_parent_note != NA_NO_NOTE) { - playback_chan->current_parent_note->_00bit1 = TRUE; + playback_chan->current_parent_note->continuous_channel_released = TRUE; } Nas_StopVoice(chan); @@ -262,7 +262,7 @@ extern void Nas_UpdateChannel(void) { } } else if (playback_chan->adsr_envp.state.flags.status == ADSR_STATUS_DISABLED) { if (playback_chan->current_parent_note != NA_NO_NOTE) { - playback_chan->current_parent_note->_00bit1 = TRUE; + playback_chan->current_parent_note->continuous_channel_released = TRUE; } Nas_StopVoice(chan); @@ -501,7 +501,7 @@ static void __Nas_Release_Channel_Main(note* n, int target) { return; } - n->_00bit3 = FALSE; + n->channel_attached = FALSE; if (n->channel == NULL) { return; @@ -777,7 +777,7 @@ extern void Nas_EntryTrack(channel* chan, note* n) { playback->current_parent_note = n; playback->priority = subtrack->note_priority; n->note_properties_need_init = TRUE; - n->_00bit3 = TRUE; + n->channel_attached = TRUE; n->channel = chan; subtrack->channel = chan; subtrack->note = n; @@ -949,7 +949,7 @@ extern channel* Nas_AllocationOnRequest(note* n) { return chan; null_return: - n->_00bit3 = TRUE; + n->channel_attached = TRUE; return NULL; } diff --git a/src/static/jaudio_NES/internal/system.c b/src/static/jaudio_NES/internal/system.c index 43f1c9e9..400c32d7 100644 --- a/src/static/jaudio_NES/internal/system.c +++ b/src/static/jaudio_NES/internal/system.c @@ -1731,24 +1731,22 @@ static void __WaveTouch(wtstr* wavetouch_str, u32 ram_addr, WaveMedia* wave_medi } } -// @non-matching - regswaps caused by AG not being loaded into r28 s32 Nas_BankOfsToAddr(s32 bank_id, u8* ctrl_p, WaveMedia* wave_media, s32 async) { Bgloadreq* preload; Bgloadreq* top_preload; smzwavetable* wavetable; - s32 size; - s32 n_chunks; - u8* wave_ram_p; - s32 i; - s32 preloading; + s32 size = 0; + s32 n_chunks = 1; + u8* wave_ram_p = NULL; + s32 preloading = FALSE; static ALHeap awheap; - u8 medium; + s32 i; + s8 medium = 0; - u8 __stack_pad[12]; - s32* i_p = &i; // this feels wrong but w/e + // u8 __stack_pad[12]; + // s32* i_p = &i; // this feels wrong but w/e - preloading = FALSE; if (AG.num_requested_samples != 0) { preloading = TRUE; } else { @@ -1760,7 +1758,7 @@ s32 Nas_BankOfsToAddr(s32 bank_id, u8* ctrl_p, WaveMedia* wave_media, s32 async) size = 0; for (i = 0; i < AG.num_used_samples; i++) { - size += ALIGN_NEXT(AG.used_samples[i]->size, 16); + size += ALIGN_NEXT(AG.used_samples[i]->size & 0xFFFFFF, 16); } for (i = 0; i < AG.num_used_samples; i++) { @@ -1772,32 +1770,33 @@ s32 Nas_BankOfsToAddr(s32 bank_id, u8* ctrl_p, WaveMedia* wave_media, s32 async) wave_ram_p = NULL; switch (async) { - case FALSE: - medium = wavetable->medium; - if (medium == wave_media->wave0_media) { + case FALSE: { + u8 medium = wavetable->medium; + if (wavetable->medium == wave_media->wave0_media) { wave_ram_p = (u8*)Nas_Alloc_Single(wavetable->size, wave_media->wave0_bank_id, wavetable->sample, - (s8)medium, CACHE_PERSISTENT); - } else if (medium == wave_media->wave1_media) { + (s8)(wavetable->medium & 0xFF), CACHE_PERSISTENT); + } else if (wavetable->medium == wave_media->wave1_media) { wave_ram_p = (u8*)Nas_Alloc_Single(wavetable->size, wave_media->wave1_bank_id, wavetable->sample, - (s8)wavetable->medium, CACHE_PERSISTENT); - } else if (medium == MEDIUM_DISK_DRIVE) { - wave_ram_p = (u8*)Nas_Alloc_Single(wavetable->size, 0xFE, wavetable->sample, (s8)wavetable->medium, + (s8)(wavetable->medium & 0xFF), CACHE_PERSISTENT); + } else if (wavetable->medium == MEDIUM_DISK_DRIVE) { + wave_ram_p = (u8*)Nas_Alloc_Single(wavetable->size, 0xFE, wavetable->sample, (s8)(wavetable->medium & 0xFF), CACHE_PERSISTENT); } - break; - case TRUE: - medium = wavetable->medium; - if (medium == wave_media->wave0_media) { - wave_ram_p = (u8*)Nas_Alloc_Single(wavetable->size, wave_media->wave0_bank_id, wavetable->sample, - (s8)wavetable->medium, CACHE_TEMPORARY); - } else if (medium == wave_media->wave1_media) { + } break; + case TRUE: { + u8 medium = wavetable->medium; + if ((u8)wavetable->medium == wave_media->wave0_media) { + // the size & 0xFFFFFF is necessary... but only once... + wave_ram_p = (u8*)Nas_Alloc_Single(wavetable->size & 0xFFFFFF, wave_media->wave0_bank_id, wavetable->sample, + (u8)wavetable->medium, CACHE_TEMPORARY); + } else if ((u8)wavetable->medium == wave_media->wave1_media) { wave_ram_p = (u8*)Nas_Alloc_Single(wavetable->size, wave_media->wave1_bank_id, wavetable->sample, - (s8)wavetable->medium, CACHE_TEMPORARY); - } else if (medium == MEDIUM_DISK_DRIVE) { - wave_ram_p = (u8*)Nas_Alloc_Single(wavetable->size, 0xFE, wavetable->sample, (s8)wavetable->medium, - CACHE_TEMPORARY); + (u8)wavetable->medium, CACHE_TEMPORARY); + } else if ((u8)wavetable->medium == MEDIUM_DISK_DRIVE) { + wave_ram_p = (u8*)Nas_Alloc_Single(wavetable->size, 0xFE, wavetable->sample, (u8)wavetable->medium, + CACHE_TEMPORARY); } - break; + } break; } if (wave_ram_p == NULL) { @@ -1830,9 +1829,10 @@ s32 Nas_BankOfsToAddr(s32 bank_id, u8* ctrl_p, WaveMedia* wave_media, s32 async) AG.num_used_samples = 0; if (AG.num_requested_samples != 0 && !preloading) { - top_preload = &AG.requested_samples[AG.num_requested_samples - 1]; + i = AG.num_requested_samples - 1; + top_preload = &AG.requested_samples[i]; wavetable = top_preload->sample; - n_chunks = 1; + // n_chunks = 1; n_chunks += (wavetable->size / 0x1000); Nas_BgCopyReq(wavetable->sample, top_preload->ram_addr, wavetable->size, wavetable->medium, n_chunks, &AG.preload_sample_queue, top_preload->encoded_info); diff --git a/src/static/jaudio_NES/internal/track.c b/src/static/jaudio_NES/internal/track.c index 33935b30..2f8a0025 100644 --- a/src/static/jaudio_NES/internal/track.c +++ b/src/static/jaudio_NES/internal/track.c @@ -320,9 +320,9 @@ static s32 Nas_EntryNoteTrack(sub* subtrack, int note_idx) { entry_note->finished = FALSE; entry_note->muted = FALSE; entry_note->continuous = FALSE; - entry_note->_00bit3 = FALSE; + entry_note->channel_attached = FALSE; entry_note->ignore_drum_pan = FALSE; - entry_note->_00bit1 = FALSE; + entry_note->continuous_channel_released = FALSE; entry_note->note_properties_need_init = FALSE; *(u8*)&entry_note->stereo_phase = 0; entry_note->portamento_sweep.mode = 0; @@ -601,11 +601,11 @@ static void __Stop_Note(note* n) { } static s32 __SetChannel(note* n, s32 same_sample) { - if (n->continuous == TRUE && n->_00bit1 == TRUE) { + if (n->continuous == TRUE && n->continuous_channel_released == TRUE) { return 0; } - if (n->continuous != TRUE || n->channel == nullptr || n->_00bit3 == FALSE || same_sample != TRUE || + if (n->continuous != TRUE || n->channel == nullptr || n->channel_attached == FALSE || same_sample != TRUE || n->channel->playback_ch.current_parent_note != n) { if (same_sample == FALSE) { Nas_Release_Channel(n); @@ -678,7 +678,7 @@ static s32 __Command_Seq(note* n) { case NOTE_CMD_CONTINUOUS_ON: case NOTE_CMD_CONTINUOUS_OFF: n->continuous = cmd == NOTE_CMD_CONTINUOUS_ON; - n->_00bit1 = FALSE; + n->continuous_channel_released = FALSE; Nas_Release_Channel(n); break; case NOTE_CMD_SET_SHORT_NOTE_DEFAULT_DELAY: @@ -774,6 +774,8 @@ static s32 __Command_Seq(note* n) { } } } + + return cmd; } static s32 __SetVoice(note* n, s32 arg) { @@ -1035,7 +1037,7 @@ static s32 __SetNote(note* n, s32 cmd) { if (cmd == 0xC0) { n->delay = Nas_ReadLengthData(m); n->muted = TRUE; - n->_00bit1 = FALSE; + n->continuous_channel_released = FALSE; return COMMON_SCRIPT_END; } @@ -1685,7 +1687,7 @@ static void Nas_SubSeq(sub* subtrack) { subtrack->note_layers[lo_bits]->macro_player.pc = &grp->seq_data[cmdArgU16]; } break; - // [0x90 - 0x93] + // [0x90 - 0x97] NOTE: 0x94-0x97 are invalid and will be changed to 0x90. case SUBTRACK_CMD_NOTE_STOP_MASK: // stop note layer Nas_CloseNoteTrack(subtrack, lo_bits); break;