more dse decomp

This commit is contained in:
Seth Barberee
2026-07-24 19:31:21 -07:00
parent 14bdd0ab84
commit 25a790db5e
7 changed files with 84 additions and 111 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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