mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2025-01-29 14:53:55 +01:00
Merge pull request #1144 from PokeCodec/libgbasyscall
Cleanup and fix mistakes in libraries
This commit is contained in:
commit
cdc19a0b07
@ -109,7 +109,7 @@ _1a0:
|
|||||||
strh r1, [r0, 0xa] @ SIOMLT_SEND
|
strh r1, [r0, 0xa] @ SIOMLT_SEND
|
||||||
ldr r0, =_data_2f0
|
ldr r0, =_data_2f0
|
||||||
ldr r1, =gCode
|
ldr r1, =gCode
|
||||||
swi 0x11 << 16
|
svc 0x11 << 16
|
||||||
ldr lr, =gCode
|
ldr lr, =gCode
|
||||||
bx lr
|
bx lr
|
||||||
.pool
|
.pool
|
||||||
|
@ -100,12 +100,12 @@ struct CgbChannel
|
|||||||
u8 le;
|
u8 le;
|
||||||
u8 sw;
|
u8 sw;
|
||||||
u32 fr;
|
u32 fr;
|
||||||
u32 wp;
|
u32 *wp;
|
||||||
u32 cp;
|
u32 *cp;
|
||||||
u32 tp;
|
void *tp;
|
||||||
u32 pp;
|
void *pp;
|
||||||
u32 np;
|
void *np;
|
||||||
u8 d4[8];
|
u32 d4[2];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MusicPlayerTrack;
|
struct MusicPlayerTrack;
|
||||||
@ -138,10 +138,10 @@ struct SoundChannel
|
|||||||
u32 fw;
|
u32 fw;
|
||||||
u32 freq;
|
u32 freq;
|
||||||
struct WaveData *wav;
|
struct WaveData *wav;
|
||||||
u32 cp;
|
s8 *cp;
|
||||||
struct MusicPlayerTrack *track;
|
struct MusicPlayerTrack *track;
|
||||||
u32 pp;
|
void *pp;
|
||||||
u32 np;
|
void *np;
|
||||||
u32 d4;
|
u32 d4;
|
||||||
u16 xpi;
|
u16 xpi;
|
||||||
u16 xpc;
|
u16 xpc;
|
||||||
@ -172,11 +172,11 @@ struct SoundInfo
|
|||||||
u8 pcmDmaPeriod; // number of V-blanks per PCM DMA
|
u8 pcmDmaPeriod; // number of V-blanks per PCM DMA
|
||||||
u8 maxLines;
|
u8 maxLines;
|
||||||
u8 gap[3];
|
u8 gap[3];
|
||||||
s32 pcmSamplesPerVBlank;
|
u32 pcmSamplesPerVBlank;
|
||||||
s32 pcmFreq;
|
u32 pcmFreq;
|
||||||
s32 divFreq;
|
u32 divFreq;
|
||||||
struct CgbChannel *cgbChans;
|
struct CgbChannel *cgbChans;
|
||||||
u32 func;
|
void (*func)();
|
||||||
u32 intp;
|
u32 intp;
|
||||||
void (*CgbSound)(void);
|
void (*CgbSound)(void);
|
||||||
void (*CgbOscOff)(u8);
|
void (*CgbOscOff)(u8);
|
||||||
@ -184,7 +184,7 @@ struct SoundInfo
|
|||||||
u32 MPlayJumpTable;
|
u32 MPlayJumpTable;
|
||||||
u32 plynote;
|
u32 plynote;
|
||||||
u32 ExtVolPit;
|
u32 ExtVolPit;
|
||||||
u8 gap2[16];
|
u32 gap2[4];
|
||||||
struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS];
|
struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS];
|
||||||
s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2];
|
s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2];
|
||||||
};
|
};
|
||||||
@ -248,7 +248,7 @@ struct MusicPlayerTrack
|
|||||||
u8 key;
|
u8 key;
|
||||||
u8 velocity;
|
u8 velocity;
|
||||||
u8 runningStatus;
|
u8 runningStatus;
|
||||||
u8 keyM;
|
s8 keyM;
|
||||||
u8 pitM;
|
u8 pitM;
|
||||||
s8 keyShift;
|
s8 keyShift;
|
||||||
s8 keyShiftX;
|
s8 keyShiftX;
|
||||||
@ -312,7 +312,7 @@ struct MusicPlayerInfo
|
|||||||
struct MusicPlayerTrack *tracks;
|
struct MusicPlayerTrack *tracks;
|
||||||
struct ToneData *tone;
|
struct ToneData *tone;
|
||||||
u32 ident;
|
u32 ident;
|
||||||
u32 func;
|
void (*func)();
|
||||||
u32 intp;
|
u32 intp;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -447,7 +447,7 @@ void ply_tune(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
|
|||||||
void ply_port(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
|
void ply_port(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
|
||||||
void ply_xcmd(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
|
void ply_xcmd(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
|
||||||
void ply_endtie(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
|
void ply_endtie(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
|
||||||
void ply_note(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
|
void ply_note(u8, struct MusicPlayerInfo *, struct MusicPlayerTrack *);
|
||||||
|
|
||||||
// extended sound command handler functions
|
// extended sound command handler functions
|
||||||
void ply_xxx(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
|
void ply_xxx(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
|
||||||
|
@ -26,9 +26,9 @@
|
|||||||
|
|
||||||
.set OAM, 0x7000000
|
.set OAM, 0x7000000
|
||||||
|
|
||||||
.set SOUND_INFO_PTR, 0x3007FF0
|
.set SOUND_INFO_PTR, IWRAM_END - 0x10
|
||||||
.set INTR_CHECK, 0x3007FF8
|
.set INTR_CHECK, IWRAM_END - 0x8
|
||||||
.set INTR_VECTOR, 0x3007FFC
|
.set INTR_VECTOR, IWRAM_END - 0x4
|
||||||
|
|
||||||
.set INTR_FLAG_VBLANK, 1 << 0
|
.set INTR_FLAG_VBLANK, 1 << 0
|
||||||
.set INTR_FLAG_HBLANK, 1 << 1
|
.set INTR_FLAG_HBLANK, 1 << 1
|
||||||
|
@ -140,55 +140,13 @@ struct SoundChannel
|
|||||||
struct WaveData *wav;
|
struct WaveData *wav;
|
||||||
u32 cp;
|
u32 cp;
|
||||||
struct MusicPlayerTrack *track;
|
struct MusicPlayerTrack *track;
|
||||||
u32 pp;
|
void *pp;
|
||||||
u32 np;
|
void *np;
|
||||||
u32 d4;
|
void *d4;
|
||||||
u16 xpi;
|
u16 xpi;
|
||||||
u16 xpc;
|
u16 xpc;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MAX_DIRECTSOUND_CHANNELS 12
|
|
||||||
|
|
||||||
#define PCM_DMA_BUF_SIZE 1584 // size of Direct Sound buffer
|
|
||||||
|
|
||||||
struct SoundInfo
|
|
||||||
{
|
|
||||||
// This field is normally equal to ID_NUMBER but it is set to other
|
|
||||||
// values during sensitive operations for locking purposes.
|
|
||||||
// This field should be volatile but isn't. This could potentially cause
|
|
||||||
// race conditions.
|
|
||||||
u32 ident;
|
|
||||||
|
|
||||||
vu8 pcmDmaCounter;
|
|
||||||
|
|
||||||
// Direct Sound
|
|
||||||
u8 reverb;
|
|
||||||
u8 maxChans;
|
|
||||||
u8 masterVolume;
|
|
||||||
u8 freq;
|
|
||||||
|
|
||||||
u8 mode;
|
|
||||||
u8 c15;
|
|
||||||
u8 pcmDmaPeriod; // number of V-blanks per PCM DMA
|
|
||||||
u8 maxLines;
|
|
||||||
u8 gap[3];
|
|
||||||
s32 pcmSamplesPerVBlank;
|
|
||||||
s32 pcmFreq;
|
|
||||||
s32 divFreq;
|
|
||||||
struct CgbChannel *cgbChans;
|
|
||||||
u32 func;
|
|
||||||
u32 intp;
|
|
||||||
void (*CgbSound)(void);
|
|
||||||
void (*CgbOscOff)(u8);
|
|
||||||
u32 (*MidiKeyToCgbFreq)(u8, u8, u8);
|
|
||||||
u32 MPlayJumpTable;
|
|
||||||
u32 plynote;
|
|
||||||
u32 ExtVolPit;
|
|
||||||
u8 gap2[16];
|
|
||||||
struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS];
|
|
||||||
s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct SongHeader
|
struct SongHeader
|
||||||
{
|
{
|
||||||
u8 trackCount;
|
u8 trackCount;
|
||||||
@ -312,7 +270,7 @@ struct MusicPlayerInfo
|
|||||||
struct MusicPlayerTrack *tracks;
|
struct MusicPlayerTrack *tracks;
|
||||||
struct ToneData *tone;
|
struct ToneData *tone;
|
||||||
u32 ident;
|
u32 ident;
|
||||||
u32 func;
|
void (*func)();
|
||||||
u32 intp;
|
u32 intp;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -334,7 +292,47 @@ struct Song
|
|||||||
extern const struct MusicPlayer gMPlayTable[];
|
extern const struct MusicPlayer gMPlayTable[];
|
||||||
extern const struct Song gSongTable[];
|
extern const struct Song gSongTable[];
|
||||||
|
|
||||||
|
#define MAX_DIRECTSOUND_CHANNELS 12
|
||||||
|
|
||||||
|
#define PCM_DMA_BUF_SIZE 1584 // size of Direct Sound buffer
|
||||||
|
|
||||||
|
struct SoundInfo
|
||||||
|
{
|
||||||
|
// This field is normally equal to ID_NUMBER but it is set to other
|
||||||
|
// values during sensitive operations for locking purposes.
|
||||||
|
// This field should be volatile but isn't. This could potentially cause
|
||||||
|
// race conditions.
|
||||||
|
u32 ident;
|
||||||
|
|
||||||
|
vu8 pcmDmaCounter;
|
||||||
|
|
||||||
|
// Direct Sound
|
||||||
|
u8 reverb;
|
||||||
|
u8 maxChans;
|
||||||
|
u8 masterVolume;
|
||||||
|
u8 freq;
|
||||||
|
|
||||||
|
u8 mode;
|
||||||
|
u8 c15;
|
||||||
|
u8 pcmDmaPeriod; // number of V-blanks per PCM DMA
|
||||||
|
u8 maxLines;
|
||||||
|
u8 gap[3];
|
||||||
|
s32 pcmSamplesPerVBlank;
|
||||||
|
s32 pcmFreq;
|
||||||
|
s32 divFreq;
|
||||||
|
struct CgbChannel *cgbChans;
|
||||||
|
void (*func)();
|
||||||
|
u32 intp;
|
||||||
|
void (*CgbSound)();
|
||||||
|
void (*CgbOscOff)(u8);
|
||||||
|
u32 (*MidiKeyToCgbFreq)(u8, u8, u8);
|
||||||
|
void (**MPlayJumpTable)();
|
||||||
|
void (*plynote)(u8, struct MusicPlayerInfo *, struct MusicPlayerTrack *);
|
||||||
|
void (*ExtVolPit)(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
|
||||||
|
u32 gap2[4];
|
||||||
|
struct SoundChannel chans[MAX_DIRECTSOUND_CHANNELS];
|
||||||
|
s8 pcmBuffer[PCM_DMA_BUF_SIZE * 2];
|
||||||
|
};
|
||||||
|
|
||||||
extern u8 gMPlayMemAccArea[];
|
extern u8 gMPlayMemAccArea[];
|
||||||
|
|
||||||
@ -448,7 +446,7 @@ void ply_tune(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
|
|||||||
void ply_port(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
|
void ply_port(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
|
||||||
void ply_xcmd(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
|
void ply_xcmd(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
|
||||||
void ply_endtie(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
|
void ply_endtie(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
|
||||||
void ply_note(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
|
void ply_note(u8, struct MusicPlayerInfo *, struct MusicPlayerTrack *);
|
||||||
|
|
||||||
// extended sound command handler functions
|
// extended sound command handler functions
|
||||||
void ply_xxx(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
|
void ply_xxx(struct MusicPlayerInfo *, struct MusicPlayerTrack *);
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
.include "../constants/gba_constants.inc"
|
.include "../constants/gba_constants.inc"
|
||||||
.include "../asm/macros/function.inc"
|
.include "../asm/macros/function.inc"
|
||||||
|
|
||||||
|
.syntax unified
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
.set SOFT_RESET_DIRECT_BUF, 0x03007FFA
|
.set SOFT_RESET_DIRECT_BUF, 0x03007FFA
|
||||||
|
.set USER_STACK, 0x03007F00
|
||||||
.set RESET_EX_WRAM_FLAG, 0x1
|
.set RESET_EX_WRAM_FLAG, 0x1
|
||||||
|
|
||||||
.ifdef NO_GRANULAR_AGBSYSCALL
|
.ifdef NO_GRANULAR_AGBSYSCALL
|
||||||
@ -106,7 +109,7 @@ SoundDriverVSyncOn:
|
|||||||
thumb_func_start Mod
|
thumb_func_start Mod
|
||||||
Mod:
|
Mod:
|
||||||
svc #6
|
svc #6
|
||||||
mov r0, r1
|
adds r0, r1, #0
|
||||||
bx lr
|
bx lr
|
||||||
thumb_func_end Mod
|
thumb_func_end Mod
|
||||||
.endif
|
.endif
|
||||||
@ -145,7 +148,7 @@ HuffUnComp:
|
|||||||
.endif
|
.endif
|
||||||
|
|
||||||
.ifdef L_SoftResetExram
|
.ifdef L_SoftResetExram
|
||||||
arm_func_start SoftResetExram
|
thumb_func_start SoftResetExram
|
||||||
SoftResetExram:
|
SoftResetExram:
|
||||||
ldr r3, =REG_IME
|
ldr r3, =REG_IME
|
||||||
movs r2, #0
|
movs r2, #0
|
||||||
@ -153,14 +156,14 @@ SoftResetExram:
|
|||||||
ldr r3, =SOFT_RESET_DIRECT_BUF
|
ldr r3, =SOFT_RESET_DIRECT_BUF
|
||||||
movs r2, #1
|
movs r2, #1
|
||||||
strb r2, [r3, #0]
|
strb r2, [r3, #0]
|
||||||
subs r3, #SOFT_RESET_DIRECT_BUF - 0x3007f00
|
subs r3, #SOFT_RESET_DIRECT_BUF - USER_STACK
|
||||||
mov sp, r3
|
mov sp, r3
|
||||||
movs r2, #RESET_EX_WRAM_FLAG
|
movs r2, #RESET_EX_WRAM_FLAG
|
||||||
bics r0, r2
|
bics r0, r2
|
||||||
svc #1
|
svc #1
|
||||||
svc #0
|
svc #0
|
||||||
.pool
|
.pool
|
||||||
arm_func_end SoftResetExram
|
thumb_func_end SoftResetExram
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
.ifdef L_MusicPlayerFadeOut
|
.ifdef L_MusicPlayerFadeOut
|
||||||
@ -231,7 +234,7 @@ DivArm:
|
|||||||
thumb_func_start ModArm
|
thumb_func_start ModArm
|
||||||
ModArm:
|
ModArm:
|
||||||
svc #7
|
svc #7
|
||||||
mov r0, r1
|
adds r0, r1, #0
|
||||||
bx lr
|
bx lr
|
||||||
thumb_func_end ModArm
|
thumb_func_end ModArm
|
||||||
.endif
|
.endif
|
||||||
@ -271,7 +274,7 @@ Diff8bitUnFilterWram:
|
|||||||
.ifdef L_MultiBoot
|
.ifdef L_MultiBoot
|
||||||
thumb_func_start MultiBoot
|
thumb_func_start MultiBoot
|
||||||
MultiBoot:
|
MultiBoot:
|
||||||
mov r1, #1
|
movs r1, #1
|
||||||
svc #37
|
svc #37
|
||||||
bx lr
|
bx lr
|
||||||
thumb_func_end MultiBoot
|
thumb_func_end MultiBoot
|
||||||
@ -326,7 +329,7 @@ SoftResetRom:
|
|||||||
ldr r3, =SOFT_RESET_DIRECT_BUF
|
ldr r3, =SOFT_RESET_DIRECT_BUF
|
||||||
movs r2, #0
|
movs r2, #0
|
||||||
strb r2, [r3, #0]
|
strb r2, [r3, #0]
|
||||||
sub r3, #SOFT_RESET_DIRECT_BUF - 0x3007f00
|
subs r3, #SOFT_RESET_DIRECT_BUF - USER_STACK
|
||||||
mov sp, r3
|
mov sp, r3
|
||||||
svc #1
|
svc #1
|
||||||
svc #0
|
svc #0
|
||||||
@ -413,7 +416,7 @@ SoftReset:
|
|||||||
ldr r3, =REG_IME
|
ldr r3, =REG_IME
|
||||||
movs r2, #0
|
movs r2, #0
|
||||||
strb r2, [r3, #0]
|
strb r2, [r3, #0]
|
||||||
ldr r1, =0x3007f00
|
ldr r1, =USER_STACK
|
||||||
mov sp, r1
|
mov sp, r1
|
||||||
svc #1
|
svc #1
|
||||||
svc #0
|
svc #0
|
||||||
|
@ -352,7 +352,7 @@ static bool8 rfu_LMAN_linkWatcher(u16 REQ_commandID)
|
|||||||
{
|
{
|
||||||
for (i = 0; i < RFU_CHILD_MAX; i++)
|
for (i = 0; i < RFU_CHILD_MAX; i++)
|
||||||
{
|
{
|
||||||
if ((bm_linkLossSlot >> i) & 1)
|
if (bm_linkLossSlot & (1 << i))
|
||||||
{
|
{
|
||||||
lman.linkRecoveryTimer.active |= (1 << i);
|
lman.linkRecoveryTimer.active |= (1 << i);
|
||||||
lman.linkRecoveryTimer.count[i] = lman.linkRecoveryTimer.count_max;
|
lman.linkRecoveryTimer.count[i] = lman.linkRecoveryTimer.count_max;
|
||||||
@ -396,7 +396,7 @@ static bool8 rfu_LMAN_linkWatcher(u16 REQ_commandID)
|
|||||||
bm_disconnectSlot = 0;
|
bm_disconnectSlot = 0;
|
||||||
for (i = 0; i < RFU_CHILD_MAX; i++)
|
for (i = 0; i < RFU_CHILD_MAX; i++)
|
||||||
{
|
{
|
||||||
if ((lman.linkRecoveryTimer.active >> i) & 1 && lman.linkRecoveryTimer.count[i] && --lman.linkRecoveryTimer.count[i] == 0)
|
if ((lman.linkRecoveryTimer.active) & (1 << i) && lman.linkRecoveryTimer.count[i] && --lman.linkRecoveryTimer.count[i] == 0)
|
||||||
{
|
{
|
||||||
lman.linkRecoveryTimer.active &= ~(1 << i);
|
lman.linkRecoveryTimer.active &= ~(1 << i);
|
||||||
bm_disconnectSlot |= (1 << i);
|
bm_disconnectSlot |= (1 << i);
|
||||||
|
95
src/m4a.c
95
src/m4a.c
@ -22,8 +22,7 @@ u8 gMPlayMemAccArea[0x10];
|
|||||||
|
|
||||||
u32 MidiKeyToFreq(struct WaveData *wav, u8 key, u8 fineAdjust)
|
u32 MidiKeyToFreq(struct WaveData *wav, u8 key, u8 fineAdjust)
|
||||||
{
|
{
|
||||||
u32 val1;
|
u32 val1, val2;
|
||||||
u32 val2;
|
|
||||||
u32 fineAdjustShifted = fineAdjust << 24;
|
u32 fineAdjustShifted = fineAdjust << 24;
|
||||||
|
|
||||||
if (key > 178)
|
if (key > 178)
|
||||||
@ -315,7 +314,7 @@ void MPlayExtender(struct CgbChannel *cgbChans)
|
|||||||
|
|
||||||
void MusicPlayerJumpTableCopy(void)
|
void MusicPlayerJumpTableCopy(void)
|
||||||
{
|
{
|
||||||
asm("swi 0x2A");
|
asm("svc 0x2A");
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClearChain(void *x)
|
void ClearChain(void *x)
|
||||||
@ -352,25 +351,25 @@ void SoundInit(struct SoundInfo *soundInfo)
|
|||||||
| SOUND_ALL_MIX_FULL;
|
| SOUND_ALL_MIX_FULL;
|
||||||
REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | 0x40;
|
REG_SOUNDBIAS_H = (REG_SOUNDBIAS_H & 0x3F) | 0x40;
|
||||||
|
|
||||||
REG_DMA1SAD = (s32)soundInfo->pcmBuffer;
|
REG_DMA1SAD = (u32)soundInfo->pcmBuffer;
|
||||||
REG_DMA1DAD = (s32)®_FIFO_A;
|
REG_DMA1DAD = (u32)®_FIFO_A;
|
||||||
REG_DMA2SAD = (s32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE;
|
REG_DMA2SAD = (u32)soundInfo->pcmBuffer + PCM_DMA_BUF_SIZE;
|
||||||
REG_DMA2DAD = (s32)®_FIFO_B;
|
REG_DMA2DAD = (u32)®_FIFO_B;
|
||||||
|
|
||||||
SOUND_INFO_PTR = soundInfo;
|
SOUND_INFO_PTR = soundInfo;
|
||||||
CpuFill32(0, soundInfo, sizeof(struct SoundInfo));
|
CpuFill32(0, soundInfo, sizeof(struct SoundInfo));
|
||||||
|
|
||||||
soundInfo->maxChans = 8;
|
soundInfo->maxChans = 8;
|
||||||
soundInfo->masterVolume = 15;
|
soundInfo->masterVolume = 15;
|
||||||
soundInfo->plynote = (u32)ply_note;
|
soundInfo->plynote = ply_note;
|
||||||
soundInfo->CgbSound = DummyFunc;
|
soundInfo->CgbSound = DummyFunc;
|
||||||
soundInfo->CgbOscOff = (void (*)(u8))DummyFunc;
|
soundInfo->CgbOscOff = (void (*)(u8))DummyFunc;
|
||||||
soundInfo->MidiKeyToCgbFreq = (u32 (*)(u8, u8, u8))DummyFunc;
|
soundInfo->MidiKeyToCgbFreq = (u32 (*)(u8, u8, u8))DummyFunc;
|
||||||
soundInfo->ExtVolPit = (u32)DummyFunc;
|
soundInfo->ExtVolPit = (void (*)(struct MusicPlayerInfo *, struct MusicPlayerTrack *))DummyFunc;
|
||||||
|
|
||||||
MPlayJumpTableCopy(gMPlayJumpTable);
|
MPlayJumpTableCopy(gMPlayJumpTable);
|
||||||
|
|
||||||
soundInfo->MPlayJumpTable = (u32)gMPlayJumpTable;
|
soundInfo->MPlayJumpTable = (void (**)())gMPlayJumpTable;
|
||||||
|
|
||||||
SampleFreqSet(SOUND_MODE_FREQ_13379);
|
SampleFreqSet(SOUND_MODE_FREQ_13379);
|
||||||
|
|
||||||
@ -381,7 +380,7 @@ void SampleFreqSet(u32 freq)
|
|||||||
{
|
{
|
||||||
struct SoundInfo *soundInfo = SOUND_INFO_PTR;
|
struct SoundInfo *soundInfo = SOUND_INFO_PTR;
|
||||||
|
|
||||||
freq = (freq & 0xF0000) >> 16;
|
freq = (freq & SOUND_MODE_FREQ) >> SOUND_MODE_FREQ_SHIFT;
|
||||||
soundInfo->freq = freq;
|
soundInfo->freq = freq;
|
||||||
soundInfo->pcmSamplesPerVBlank = gPcmSamplesPerVBlankTable[freq - 1];
|
soundInfo->pcmSamplesPerVBlank = gPcmSamplesPerVBlankTable[freq - 1];
|
||||||
soundInfo->pcmDmaPeriod = PCM_DMA_BUF_SIZE / soundInfo->pcmSamplesPerVBlank;
|
soundInfo->pcmDmaPeriod = PCM_DMA_BUF_SIZE / soundInfo->pcmSamplesPerVBlank;
|
||||||
@ -432,14 +431,9 @@ void m4aSoundMode(u32 mode)
|
|||||||
|
|
||||||
soundInfo->maxChans = temp >> SOUND_MODE_MAXCHN_SHIFT;
|
soundInfo->maxChans = temp >> SOUND_MODE_MAXCHN_SHIFT;
|
||||||
|
|
||||||
temp = MAX_DIRECTSOUND_CHANNELS;
|
for (temp = MAX_DIRECTSOUND_CHANNELS, chan = soundInfo->chans; temp != 0; temp--,chan++)
|
||||||
chan = &soundInfo->chans[0];
|
|
||||||
|
|
||||||
while (temp != 0)
|
|
||||||
{
|
{
|
||||||
chan->status = 0;
|
chan->status = 0;
|
||||||
temp--;
|
|
||||||
chan++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -469,37 +463,28 @@ void m4aSoundMode(u32 mode)
|
|||||||
|
|
||||||
void SoundClear(void)
|
void SoundClear(void)
|
||||||
{
|
{
|
||||||
struct SoundInfo *soundInfo = SOUND_INFO_PTR;
|
|
||||||
s32 i;
|
s32 i;
|
||||||
void *chan;
|
struct SoundInfo *soundInfo = SOUND_INFO_PTR;
|
||||||
|
struct SoundChannel *chan;
|
||||||
|
|
||||||
if (soundInfo->ident != ID_NUMBER)
|
if (soundInfo->ident != ID_NUMBER)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
soundInfo->ident++;
|
soundInfo->ident++;
|
||||||
|
|
||||||
i = MAX_DIRECTSOUND_CHANNELS;
|
for (i = MAX_DIRECTSOUND_CHANNELS, chan = soundInfo->chans; i > 0; i--,chan++)
|
||||||
chan = &soundInfo->chans[0];
|
|
||||||
|
|
||||||
while (i > 0)
|
|
||||||
{
|
{
|
||||||
((struct SoundChannel *)chan)->status = 0;
|
chan->status = 0;
|
||||||
i--;
|
|
||||||
chan = (void *)((s32)chan + sizeof(struct SoundChannel));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
chan = soundInfo->cgbChans;
|
chan = (struct SoundChannel *)soundInfo->cgbChans;
|
||||||
|
|
||||||
if (chan)
|
if (chan)
|
||||||
{
|
{
|
||||||
i = 1;
|
for (i=1; i<=4; i++,chan++)
|
||||||
|
|
||||||
while (i <= 4)
|
|
||||||
{
|
{
|
||||||
soundInfo->CgbOscOff(i);
|
soundInfo->CgbOscOff(i);
|
||||||
((struct CgbChannel *)chan)->sf = 0;
|
chan->status = 0;
|
||||||
i++;
|
|
||||||
chan = (void *)((s32)chan + sizeof(struct CgbChannel));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -510,8 +495,8 @@ void m4aSoundVSyncOff(void)
|
|||||||
{
|
{
|
||||||
struct SoundInfo *soundInfo = SOUND_INFO_PTR;
|
struct SoundInfo *soundInfo = SOUND_INFO_PTR;
|
||||||
|
|
||||||
if (soundInfo->ident >= ID_NUMBER && soundInfo->ident <= ID_NUMBER + 1)
|
if (soundInfo->ident < ID_NUMBER || soundInfo->ident > ID_NUMBER + 1)
|
||||||
{
|
return;
|
||||||
soundInfo->ident += 10;
|
soundInfo->ident += 10;
|
||||||
|
|
||||||
if (REG_DMA1CNT & (DMA_REPEAT << 16))
|
if (REG_DMA1CNT & (DMA_REPEAT << 16))
|
||||||
@ -524,7 +509,6 @@ void m4aSoundVSyncOff(void)
|
|||||||
REG_DMA2CNT_H = DMA_32BIT;
|
REG_DMA2CNT_H = DMA_32BIT;
|
||||||
|
|
||||||
CpuFill32(0, soundInfo->pcmBuffer, sizeof(soundInfo->pcmBuffer));
|
CpuFill32(0, soundInfo->pcmBuffer, sizeof(soundInfo->pcmBuffer));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void m4aSoundVSyncOn(void)
|
void m4aSoundVSyncOn(void)
|
||||||
@ -580,7 +564,7 @@ void MPlayOpen(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track
|
|||||||
}
|
}
|
||||||
|
|
||||||
soundInfo->intp = (u32)mplayInfo;
|
soundInfo->intp = (u32)mplayInfo;
|
||||||
soundInfo->func = (u32)MPlayMain;
|
soundInfo->func = MPlayMain;
|
||||||
soundInfo->ident = ID_NUMBER;
|
soundInfo->ident = ID_NUMBER;
|
||||||
mplayInfo->ident = ID_NUMBER;
|
mplayInfo->ident = ID_NUMBER;
|
||||||
}
|
}
|
||||||
@ -614,28 +598,21 @@ void MPlayStart(struct MusicPlayerInfo *mplayInfo, struct SongHeader *songHeader
|
|||||||
mplayInfo->tempoC = 0;
|
mplayInfo->tempoC = 0;
|
||||||
mplayInfo->fadeOI = 0;
|
mplayInfo->fadeOI = 0;
|
||||||
|
|
||||||
i = 0;
|
for (i = 0, track = mplayInfo->tracks; i < songHeader->trackCount && i < mplayInfo->trackCount; i++, track++)
|
||||||
track = mplayInfo->tracks;
|
|
||||||
|
|
||||||
while (i < songHeader->trackCount && i < mplayInfo->trackCount)
|
|
||||||
{
|
{
|
||||||
TrackStop(mplayInfo, track);
|
TrackStop(mplayInfo, track);
|
||||||
track->flags = MPT_FLG_EXIST | MPT_FLG_START;
|
track->flags = MPT_FLG_EXIST | MPT_FLG_START;
|
||||||
track->chan = 0;
|
track->chan = 0;
|
||||||
track->cmdPtr = songHeader->part[i];
|
track->cmdPtr = songHeader->part[i];
|
||||||
i++;
|
|
||||||
track++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
while (i < mplayInfo->trackCount)
|
for (; i < mplayInfo->trackCount; i++, track++)
|
||||||
{
|
{
|
||||||
TrackStop(mplayInfo, track);
|
TrackStop(mplayInfo, track);
|
||||||
track->flags = 0;
|
track->flags = 0;
|
||||||
i++;
|
|
||||||
track++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (songHeader->reverb & 0x80)
|
if (songHeader->reverb & SOUND_MODE_REVERB_SET)
|
||||||
m4aSoundMode(songHeader->reverb);
|
m4aSoundMode(songHeader->reverb);
|
||||||
|
|
||||||
mplayInfo->ident = ID_NUMBER;
|
mplayInfo->ident = ID_NUMBER;
|
||||||
@ -653,14 +630,9 @@ void m4aMPlayStop(struct MusicPlayerInfo *mplayInfo)
|
|||||||
mplayInfo->ident++;
|
mplayInfo->ident++;
|
||||||
mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE;
|
mplayInfo->status |= MUSICPLAYER_STATUS_PAUSE;
|
||||||
|
|
||||||
i = mplayInfo->trackCount;
|
for (i = mplayInfo->trackCount, track = mplayInfo->tracks; i > 0; i--, track++)
|
||||||
track = mplayInfo->tracks;
|
|
||||||
|
|
||||||
while (i > 0)
|
|
||||||
{
|
{
|
||||||
TrackStop(mplayInfo, track);
|
TrackStop(mplayInfo, track);
|
||||||
i--;
|
|
||||||
track++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mplayInfo->ident = ID_NUMBER;
|
mplayInfo->ident = ID_NUMBER;
|
||||||
@ -704,10 +676,8 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo)
|
|||||||
|
|
||||||
if ((s16)(mplayInfo->fadeOV & mask) <= 0)
|
if ((s16)(mplayInfo->fadeOV & mask) <= 0)
|
||||||
{
|
{
|
||||||
i = mplayInfo->trackCount;
|
|
||||||
track = mplayInfo->tracks;
|
|
||||||
|
|
||||||
while (i > 0)
|
for (i = mplayInfo->trackCount, track = mplayInfo->tracks; i > 0; i--, track++)
|
||||||
{
|
{
|
||||||
u32 val;
|
u32 val;
|
||||||
|
|
||||||
@ -719,9 +689,6 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo)
|
|||||||
|
|
||||||
if (!val)
|
if (!val)
|
||||||
track->flags = 0;
|
track->flags = 0;
|
||||||
|
|
||||||
i--;
|
|
||||||
track++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mplayInfo->fadeOV & TEMPORARY_FADE)
|
if (mplayInfo->fadeOV & TEMPORARY_FADE)
|
||||||
@ -734,10 +701,7 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
i = mplayInfo->trackCount;
|
for (i = mplayInfo->trackCount, track = mplayInfo->tracks; i > 0; i--, track++)
|
||||||
track = mplayInfo->tracks;
|
|
||||||
|
|
||||||
while (i > 0)
|
|
||||||
{
|
{
|
||||||
if (track->flags & MPT_FLG_EXIST)
|
if (track->flags & MPT_FLG_EXIST)
|
||||||
{
|
{
|
||||||
@ -746,9 +710,6 @@ void FadeOutBody(struct MusicPlayerInfo *mplayInfo)
|
|||||||
track->volX = (fadeOV >> FADE_VOL_SHIFT);
|
track->volX = (fadeOV >> FADE_VOL_SHIFT);
|
||||||
track->flags |= MPT_FLG_VOLCHG;
|
track->flags |= MPT_FLG_VOLCHG;
|
||||||
}
|
}
|
||||||
|
|
||||||
i--;
|
|
||||||
track++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -756,7 +717,7 @@ void TrkVolPitSet(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *tr
|
|||||||
{
|
{
|
||||||
if (track->flags & MPT_FLG_VOLSET)
|
if (track->flags & MPT_FLG_VOLSET)
|
||||||
{
|
{
|
||||||
s32 x;
|
u32 x;
|
||||||
s32 y;
|
s32 y;
|
||||||
|
|
||||||
x = (u32)(track->vol * track->volX) >> 5;
|
x = (u32)(track->vol * track->volX) >> 5;
|
||||||
|
456
src/m4a_1.s
456
src/m4a_1.s
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user