Skip to content

Commit a09a408

Browse files
direct boot fix
1 parent dfe0e6c commit a09a408

File tree

2 files changed

+9
-11
lines changed

2 files changed

+9
-11
lines changed

src/DSi.cpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -655,6 +655,8 @@ void DSi::SetupDirectBoot()
655655

656656
SPI.GetFirmwareMem()->SetupDirectBoot();
657657

658+
I2S.WriteSndExCnt(0x8008, 0xFFFF);
659+
658660
ARM9.CP15Write(0x100, 0x00056078);
659661
ARM9.CP15Write(0x200, 0x0000004A);
660662
ARM9.CP15Write(0x201, 0x0000004A);
@@ -2725,10 +2727,10 @@ u8 DSi::ARM7IORead8(u32 addr)
27252727
case 0x4004601: if (!(SCFG_EXT[1] & (1 << 20))) return 0; return I2S.ReadMicCnt() >> 8;
27262728
case 0x4004602: return 0;
27272729
case 0x4004603: return 0;
2728-
case 0x4004604: if (!(SCFG_EXT[1] & (1 << 20))) return 0; Log(LogLevel::Debug, "Mic data 8 bit read???\n"); return I2S.ReadMicData() & 0xFF;
2729-
case 0x4004605: if (!(SCFG_EXT[1] & (1 << 20))) return 0; Log(LogLevel::Debug, "Mic data 8 bit read???\n"); return (I2S.ReadMicData() >> 8) & 0xFF;
2730-
case 0x4004606: if (!(SCFG_EXT[1] & (1 << 20))) return 0; Log(LogLevel::Debug, "Mic data 8 bit read???\n"); return (I2S.ReadMicData() >> 16) & 0xFF;
2731-
case 0x4004607: if (!(SCFG_EXT[1] & (1 << 20))) return 0; Log(LogLevel::Debug, "Mic data 8 bit read???\n"); return I2S.ReadMicData() >> 24;
2730+
case 0x4004604: if (!(SCFG_EXT[1] & (1 << 20))) return 0; return I2S.ReadMicData() & 0xFF;
2731+
case 0x4004605: if (!(SCFG_EXT[1] & (1 << 20))) return 0; return (I2S.ReadMicData() >> 8) & 0xFF;
2732+
case 0x4004606: if (!(SCFG_EXT[1] & (1 << 20))) return 0; return (I2S.ReadMicData() >> 16) & 0xFF;
2733+
case 0x4004607: if (!(SCFG_EXT[1] & (1 << 20))) return 0; return I2S.ReadMicData() >> 24;
27322734
case 0x4004700: if (!(SCFG_EXT[1] & (1 << 21))) return 0; return I2S.ReadSndExCnt() & 0xFF;
27332735
case 0x4004701: if (!(SCFG_EXT[1] & (1 << 21))) return 0; return I2S.ReadSndExCnt() >> 8;
27342736

@@ -2775,8 +2777,8 @@ u16 DSi::ARM7IORead16(u32 addr)
27752777

27762778
case 0x4004600: if (!(SCFG_EXT[1] & (1 << 20))) return 0; return I2S.ReadMicCnt();
27772779
case 0x4004602: return 0;
2778-
case 0x4004604: if (!(SCFG_EXT[1] & (1 << 20))) return 0; Log(LogLevel::Debug, "Mic data 16 bit read???\n"); return I2S.ReadMicData() >> 16;
2779-
case 0x4004606: if (!(SCFG_EXT[1] & (1 << 20))) return 0; Log(LogLevel::Debug, "Mic data 16 bit read???\n"); return I2S.ReadMicData() & 0xFFFF;
2780+
case 0x4004604: if (!(SCFG_EXT[1] & (1 << 20))) return 0; return I2S.ReadMicData() >> 16;
2781+
case 0x4004606: if (!(SCFG_EXT[1] & (1 << 20))) return 0; return I2S.ReadMicData() & 0xFFFF;
27802782
case 0x4004700: if (!(SCFG_EXT[1] & (1 << 21))) return 0; return I2S.ReadSndExCnt();
27812783

27822784
case 0x04004C00: return GPIO_Data | ((u16)GPIO_Dir << 8);
@@ -3030,13 +3032,11 @@ void DSi::ARM7IOWrite16(u32 addr, u16 val)
30303032
case 0x4004600:
30313033
if (!(SCFG_EXT[1] & (1 << 20)))
30323034
return;
3033-
Log(LogLevel::Debug, "MIC_CNT Write %04X\n", val);
30343035
I2S.WriteMicCnt(val, 0xFFFF);
30353036
return;
30363037
case 0x4004700:
30373038
if (!(SCFG_EXT[1] & (1 << 21)))
30383039
return;
3039-
Log(LogLevel::Debug, "SNDEXCNT Write %04X\n", val);
30403040
I2S.WriteSndExCnt(val, 0xFFFF);
30413041
return;
30423042

src/DSi_I2S.cpp

+1-3
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,6 @@ void DSi_I2S::WriteMicCnt(u16 val, u16 mask)
105105

106106
u32 DSi_I2S::ReadMicData()
107107
{
108-
Log(LogLevel::Debug, "MIC_DATA read, FIFO level = %d\n", MicFifo.Level());
109108
// CHECKME: This is a complete guess on how mic data reads work
110109
// gbatek states the FIFO is 16 words large, with 1 word having 2 samples
111110
u32 ret = MicFifo.IsEmpty() ? 0 : (u16)MicFifo.Read();
@@ -193,13 +192,12 @@ void DSi_I2S::Clock(u32 freq)
193192
// if bit 13 is set, an IRQ is generated when the mic FIFO is half full
194193
if (MicCnt & (1 << 13))
195194
{
196-
Log(LogLevel::Debug, "Do half full mic IRQ\n");
195+
Log(LogLevel::Debug, "Do half full mic IRQ, %d / %d\n", oldLevel, MicFifo.Level());
197196
if (oldLevel < 16 && MicFifo.Level() >= 16) DSi.SetIRQ2(IRQ2_DSi_MicExt);
198197
}
199198
// if bit 13 is not set and bit 14 is set, an IRQ is generated when the mic FIFO is full
200199
else if (MicCnt & (1 << 14))
201200
{
202-
Log(LogLevel::Debug, "Do full mic IRQ\n");
203201
if (oldLevel < 32 && MicFifo.Level() >= 32) DSi.SetIRQ2(IRQ2_DSi_MicExt);
204202
}
205203
}

0 commit comments

Comments
 (0)