diff --git a/lib/DSE/asm/main_02071AC0.s b/lib/DSE/asm/main_02071AC0.s index c1355086..589a7a4c 100644 --- a/lib/DSE/asm/main_02071AC0.s +++ b/lib/DSE/asm/main_02071AC0.s @@ -91,19 +91,3 @@ DseTrackEvent_SetBankMsb: ; 0x02071B8C add r0, r4, #1 ldmia sp!, {r4, pc} arm_func_end DseTrackEvent_SetBankMsb - - arm_func_start DseTrackEvent_SetBankLsb -DseTrackEvent_SetBankLsb: ; 0x02071BBC - stmdb sp!, {r4, lr} - mov r4, r0 - ldrh r2, [r3, #0xe] - ldrb r1, [r4] - mov r0, r3 - bic r2, r2, #0xff - add r1, r2, r1 - mov r1, r1, lsl #0x10 - mov r1, r1, lsr #0x10 - bl DseChannel_SetBank - add r0, r4, #1 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_SetBankLsb diff --git a/lib/DSE/asm/main_02071CC8.s b/lib/DSE/asm/main_02071CC8.s deleted file mode 100644 index 71c162f8..00000000 --- a/lib/DSE/asm/main_02071CC8.s +++ /dev/null @@ -1,56 +0,0 @@ - .include "asm/macros.inc" - .include "include/main_02071CC8.inc" - - .text - - arm_func_start DseTrackEvent_SetNoteDurationMultiplier -DseTrackEvent_SetNoteDurationMultiplier: ; 0x02071DB0 - ldrb r1, [r0], #1 - strb r1, [r2, #5] - bx lr - arm_func_end DseTrackEvent_SetNoteDurationMultiplier - - arm_func_start DseTrackEvent_ForceLfoEnvelopeLevel -DseTrackEvent_ForceLfoEnvelopeLevel: ; 0x02071DBC - stmdb sp!, {r4, lr} - mov r4, r0 - ldrsb r1, [r4] - mov r0, r3 - bl DseChannel_SetLfoConstEnvelopeLevel - add r0, r4, #1 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_ForceLfoEnvelopeLevel - - arm_func_start DseTrackEvent_SetHoldNotes -DseTrackEvent_SetHoldNotes: ; 0x02071DD8 - stmdb sp!, {r4, lr} - mov r4, r0 - ldrb r1, [r4] - ldr r0, [r2, #0x54] - cmp r1, #0x40 - ldrb r1, [r0, #4] - orrhs r1, r1, #1 - strhsb r1, [r0, #4] - bhs _02071E08 - bic r1, r1, #1 - strb r1, [r0, #4] - bl DseVoice_ReleaseHeld -_02071E08: - add r0, r4, #1 - ldmia sp!, {r4, pc} - arm_func_end DseTrackEvent_SetHoldNotes - - arm_func_start DseTrackEvent_SetFlagBit1Unknown -DseTrackEvent_SetFlagBit1Unknown: ; 0x02071E10 - ldrb r1, [r3, #4] - orr r1, r1, #2 - strb r1, [r3, #4] - bx lr - arm_func_end DseTrackEvent_SetFlagBit1Unknown - - arm_func_start DseTrackEvent_SetOptionalVolume -DseTrackEvent_SetOptionalVolume: ; 0x02071E20 - ldrb r1, [r0], #1 - strb r1, [r3, #0x58] - bx lr - arm_func_end DseTrackEvent_SetOptionalVolume diff --git a/lib/DSE/include/main_02071BF4.h b/lib/DSE/include/main_02071BF4.h index 2adaf5ce..6942343a 100644 --- a/lib/DSE/include/main_02071BF4.h +++ b/lib/DSE/include/main_02071BF4.h @@ -3,6 +3,7 @@ #include "dse.h" +u8* DseTrackEvent_SetBankLsb(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel); u8* DseTrackEvent_Dummy1Byte(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel); u8* DseTrackEvent_SetInstrument(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel); u8* DseTrackEvent_SongVolumeFade(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel); @@ -13,6 +14,13 @@ u8* DseTrackEvent_SetEnvelopeHoldTime(u8 *ptr_next_byte, struct dse_sequence *se u8* DseTrackEvent_SetEnvelopeDecayTimeAndSustainLevel(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel); u8* DseTrackEvent_SetEnvelopeSustainTime(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel); u8* DseTrackEvent_SetEnvelopeReleaseTime(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel); +u8* DseTrackEvent_SetNoteDurationMultiplier(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel); +u8* DseTrackEvent_ForceLfoEnvelopeLevel(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel); +u8* DseTrackEvent_SetHoldNotes(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel); +u8* DseTrackEvent_SetFlagBit1Unknown(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel); +u8* DseTrackEvent_SetOptionalVolume(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel); +u8* DseTrackEvent_Dummy2Bytes(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel); +u8* DseTrackEvent_SetTuning(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel); #endif //PMDSKY_MAIN_02071BF4_H diff --git a/lib/DSE/include/main_02071E34.h b/lib/DSE/include/main_02071E34.h deleted file mode 100644 index 83b3321b..00000000 --- a/lib/DSE/include/main_02071E34.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef PMDSKY_MAIN_02071E34_H -#define PMDSKY_MAIN_02071E34_H - -#include "dse.h" - -u8* DseTrackEvent_Dummy2Bytes(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel); -u8* DseTrackEvent_SetTuning(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel); - -#endif //PMDSKY_MAIN_02071E34_H diff --git a/lib/DSE/src/main_02071BF4.c b/lib/DSE/src/main_02071BF4.c index 462ffdf8..11434deb 100644 --- a/lib/DSE/src/main_02071BF4.c +++ b/lib/DSE/src/main_02071BF4.c @@ -1,12 +1,23 @@ #include "main_02071BF4.h" #include "dc_envelope.h" +#define IME (*(vu16*)0x4000208) + extern struct dse_driver_work DRIVER_WORK; extern u32 DseChannel_SetInstrument(struct dse_channel *channel, u16 instrument_index); +extern void DseChannel_SetLfoConstEnvelopeLevel(struct dse_channel *channel, s8 envelope_level); +void DseChannel_SetBank(struct dse_channel*, u16); +extern void DseVoice_ReleaseHeld(struct dse_channel *); extern u32 _u32_div_f(u32 dividend, u32 divisor); extern u32 _s32_div_f(s32 dividend, s32 divisor); +u8* DseTrackEvent_SetBankLsb(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel) +{ + DseChannel_SetBank(channel, (u16) ((channel->swd_id & ~0xFF) + *ptr_next_byte)); + return ptr_next_byte + 1; +} + u8* DseTrackEvent_Dummy1Byte(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel) { return ptr_next_byte + 1; @@ -108,3 +119,68 @@ u8* DseTrackEvent_SetEnvelopeReleaseTime(u8 *ptr_next_byte, struct dse_sequence SoundEnvelopeParameters_CheckValidity(&channel->envelope_override); return ptr_next_byte + 1; } + +u8* DseTrackEvent_SetNoteDurationMultiplier(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel) +{ + track->note_duration_multiplier = ptr_next_byte[0]; + return ptr_next_byte + 1; +} + +u8* DseTrackEvent_ForceLfoEnvelopeLevel(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel) +{ + DseChannel_SetLfoConstEnvelopeLevel(channel, (s8)ptr_next_byte[0]); + return ptr_next_byte + 1; +} + +u8* DseTrackEvent_SetHoldNotes(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel) +{ + + struct dse_channel* track_channel = track->channel; + + if ((u32) *ptr_next_byte >= 0x40) { + track_channel->channel_flags |= 1; + } else { + track_channel->channel_flags &= ~1; + DseVoice_ReleaseHeld(track_channel); + } + return ptr_next_byte + 1; +} + +u8* DseTrackEvent_SetFlagBit1Unknown(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel) +{ + channel->channel_flags |= 2; + return ptr_next_byte; + +} + +u8* DseTrackEvent_SetOptionalVolume(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel) +{ + + channel->optional_volume = ptr_next_byte[0]; + return ptr_next_byte + 1; +} + +u8* DseTrackEvent_Dummy2Bytes(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel) +{ + return ptr_next_byte + 2; +} + +u8* DseTrackEvent_SetTuning(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel) +{ + s16 tune = *(s8*)ptr_next_byte<<8; + channel->tuning = tune; + + channel->bend_final = tune + (s16)(channel->bend.current >> 0x10) + channel->container->bend; + u16 old_ime = IME; + IME = 0; + struct dse_voice *voice = channel->voice_list; + if(voice) { + do { + voice->update_flags = voice->update_flags | 0x10; + voice = voice->next_in_channel_allocation_list; + } while(voice); + } + u16 unused = IME; + IME = old_ime; + return ptr_next_byte + 1; +} diff --git a/lib/DSE/src/main_02071E34.c b/lib/DSE/src/main_02071E34.c deleted file mode 100644 index ba4ef7b7..00000000 --- a/lib/DSE/src/main_02071E34.c +++ /dev/null @@ -1,28 +0,0 @@ -#include "main_02071E34.h" - -#define IME (*(vu16*)0x4000208) - -u8* DseTrackEvent_Dummy2Bytes(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel) -{ - return ptr_next_byte + 2; -} - -u8* DseTrackEvent_SetTuning(u8 *ptr_next_byte, struct dse_sequence *sequence, struct dse_track *track, struct dse_channel *channel) -{ - s16 tune = *(s8*)ptr_next_byte<<8; - channel->tuning = tune; - - channel->bend_final = tune + (s16)(channel->bend.current >> 0x10) + channel->container->bend; - u16 old_ime = IME; - IME = 0; - struct dse_voice *voice = channel->voice_list; - if(voice) { - do { - voice->update_flags = voice->update_flags | 0x10; - voice = voice->next_in_channel_allocation_list; - } while(voice); - } - u16 unused = IME; - IME = old_ime; - return ptr_next_byte + 1; -} diff --git a/main.lsf b/main.lsf index cacd3729..09ef6d15 100644 --- a/main.lsf +++ b/main.lsf @@ -222,8 +222,6 @@ Static main Object lib/DSE/src/main_02071A98.o Object lib/DSE/asm/main_02071AC0.o Object lib/DSE/src/main_02071BF4.o - Object lib/DSE/asm/main_02071CC8.o - Object lib/DSE/src/main_02071E34.o Object lib/DSE/asm/main_02071EB4.o Object lib/DSE/src/dc_envelope.o Object lib/DSE/src/dc_lfo.o