diff options
| author | Henny022p <info@henny022.de> | 2021-03-22 07:08:24 +0100 |
|---|---|---|
| committer | Henny022p <info@henny022.de> | 2021-03-22 07:08:24 +0100 |
| commit | e0ee481eeb3fbe8c305dcea5f99f4f8ab5a3ccee (patch) | |
| tree | 59bc01fb37dfc2011515d22f84dd75bb0ae32b82 /src/gba | |
| parent | 34931c4eac8a39ea7029662c5f4a2e6a39a0b94f (diff) | |
matched 4 more functions
Diffstat (limited to 'src/gba')
| -rw-r--r-- | src/gba/m4a.c | 66 |
1 files changed, 39 insertions, 27 deletions
diff --git a/src/gba/m4a.c b/src/gba/m4a.c index 9fac2854..0fa6b184 100644 --- a/src/gba/m4a.c +++ b/src/gba/m4a.c @@ -46,6 +46,7 @@ typedef void (*CgbOscOffFunc)(u8); typedef u32 (*MidiKeyToCgbFreqFunc)(u8, u8, u8); typedef void (*ExtVolPitFunc)(void); typedef void (*MPlayMainFunc)(MusicPlayerInfo*); +typedef void (*XcmdFunc)(MusicPlayerInfo*, MusicPlayerTrack*); typedef struct WaveData { u16 type; @@ -309,19 +310,7 @@ extern char SoundMainRAM[]; extern void* gMPlayJumpTable[]; -typedef void (*XcmdFunc)(MusicPlayerInfo*, MusicPlayerTrack*); -extern const XcmdFunc gXcmdTable[]; - extern CgbChannel gCgbChans[]; -extern const u8 gCgb3Vol[]; - -extern const u8 gScaleTable[]; -extern const u32 gFreqTable[]; -extern const u16 gPcmSamplesPerVBlankTable[]; - -extern const u8 gCgbScaleTable[]; -extern const s16 gCgbFreqTable[]; -extern const u8 gNoiseTable[]; extern char gNumMusicPlayers[]; extern char gMaxLines[]; @@ -654,9 +643,16 @@ void m4aMPlayFadeIn(MusicPlayerInfo* mplayInfo, u16 speed) { } } -NONMATCH("asm/non_matching/m4a/m4aMPlayImmInit.inc", void m4aMPlayImmInit(MusicPlayerInfo* mplayInfo)) { - s32 trackCount = mplayInfo->trackCount; - MusicPlayerTrack* track = mplayInfo->tracks; +void m4aMPlayImmInit(MusicPlayerInfo* mplayInfo) { + s32 trackCount; + MusicPlayerTrack* track; + + if (mplayInfo->ident != ID_NUMBER) + return; + + mplayInfo->ident++; + trackCount = mplayInfo->trackCount; + track = mplayInfo->tracks; while (trackCount > 0) { if (track->flags & MPT_FLG_EXIST) { @@ -673,8 +669,8 @@ NONMATCH("asm/non_matching/m4a/m4aMPlayImmInit.inc", void m4aMPlayImmInit(MusicP trackCount--; track++; } + mplayInfo->ident = ID_NUMBER; } -END_NONMATCH void MPlayExtender(CgbChannel* cgbChans) { SoundInfo* soundInfo; @@ -885,27 +881,26 @@ void SoundClear(void) { soundInfo->ident = ID_NUMBER; } -NONMATCH("asm/non_matching/m4a/m4aSoundVSyncOff.inc", void m4aSoundVSyncOff(void)) { +void m4aSoundVSyncOff(void) { SoundInfo* soundInfo = SOUND_INFO_PTR; if (soundInfo->ident >= ID_NUMBER && soundInfo->ident <= ID_NUMBER + 1) { soundInfo->ident += 10; + REG_TM0CNT_H = 0; + if (REG_DMA1CNT & (DMA_REPEAT << 16)) REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; - if (REG_DMA2CNT & (DMA_REPEAT << 16)) - REG_DMA2CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; - REG_DMA1CNT_H = DMA_32BIT; - REG_DMA2CNT_H = DMA_32BIT; CpuFill32(0, soundInfo->pcmBuffer, sizeof(soundInfo->pcmBuffer)); } } -END_NONMATCH -NONMATCH("asm/non_matching/m4a/m4aSoundVSyncOn.inc", void m4aSoundVSyncOn(void)) { +#define REG_VCOUNT_8 (*(vu8*)REG_ADDR_VCOUNT) + +void m4aSoundVSyncOn(void) { SoundInfo* soundInfo = SOUND_INFO_PTR; u32 ident = soundInfo->ident; @@ -913,16 +908,33 @@ NONMATCH("asm/non_matching/m4a/m4aSoundVSyncOn.inc", void m4aSoundVSyncOn(void)) return; REG_DMA1CNT_H = DMA_ENABLE | DMA_START_SPECIAL | DMA_32BIT | DMA_REPEAT; - REG_DMA2CNT_H = DMA_ENABLE | DMA_START_SPECIAL | DMA_32BIT | DMA_REPEAT; soundInfo->pcmDmaCounter = 0; soundInfo->ident = ident - 10; + + while (REG_VCOUNT_8 == 0x9f) {} + while (REG_VCOUNT_8 != 0x9f) {} + + REG_TM0CNT_L = -(0x44940 / soundInfo->pcmSamplesPerVBlank); + REG_TM0CNT_H = 0x80; } -END_NONMATCH -NONMATCH("asm/non_matching/m4a/m4aSoundVSync.inc", void m4aSoundVSync(void)) { +void m4aSoundVSync(void) { + SoundInfo* soundInfo = SOUND_INFO_PTR; + + if (soundInfo->ident - ID_NUMBER > 1) + return; + + soundInfo->pcmDmaCounter--; + if ((s8)soundInfo->pcmDmaCounter > 0) + return; + soundInfo->pcmDmaCounter = soundInfo->pcmDmaPeriod; + if (REG_DMA1CNT & (DMA_REPEAT << 16)) { + REG_DMA1CNT = ((DMA_ENABLE | DMA_START_NOW | DMA_32BIT | DMA_SRC_INC | DMA_DEST_FIXED) << 16) | 4; + } + REG_DMA1CNT_H = DMA_32BIT; + REG_DMA1CNT_H = DMA_ENABLE | DMA_START_SPECIAL | DMA_32BIT | DMA_REPEAT; } -END_NONMATCH void MPlayOpen(MusicPlayerInfo* mplayInfo, MusicPlayerTrack* tracks, u8 trackCount) { SoundInfo* soundInfo; |
