mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-07-24 22:59:58 -06:00
fake enough of WEP processing to make Inazuma Eleven work
This commit is contained in:
25
src/NDS.cpp
25
src/NDS.cpp
@ -1977,7 +1977,7 @@ void debug(u32 param)
|
|||||||
// printf("VRAM %c: %02X\n", 'A'+i, GPU::VRAMCNT[i]);
|
// printf("VRAM %c: %02X\n", 'A'+i, GPU::VRAMCNT[i]);
|
||||||
|
|
||||||
FILE*
|
FILE*
|
||||||
shit = fopen("debug/tetrisDS.bin", "wb");
|
shit = fopen("debug/inazuma.bin", "wb");
|
||||||
fwrite(ARM9->ITCM, 0x8000, 1, shit);
|
fwrite(ARM9->ITCM, 0x8000, 1, shit);
|
||||||
for (u32 i = 0x02000000; i < 0x02400000; i+=4)
|
for (u32 i = 0x02000000; i < 0x02400000; i+=4)
|
||||||
{
|
{
|
||||||
@ -1989,6 +1989,11 @@ void debug(u32 param)
|
|||||||
u32 val = ARM7Read32(i);
|
u32 val = ARM7Read32(i);
|
||||||
fwrite(&val, 4, 1, shit);
|
fwrite(&val, 4, 1, shit);
|
||||||
}
|
}
|
||||||
|
for (u32 i = 0x06000000; i < 0x06040000; i+=4)
|
||||||
|
{
|
||||||
|
u32 val = ARM7Read32(i);
|
||||||
|
fwrite(&val, 4, 1, shit);
|
||||||
|
}
|
||||||
fclose(shit);
|
fclose(shit);
|
||||||
|
|
||||||
/*FILE*
|
/*FILE*
|
||||||
@ -2974,7 +2979,8 @@ u8 ARM9IORead8(u32 addr)
|
|||||||
return (u8)(emuID[idx]);
|
return (u8)(emuID[idx]);
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("unknown ARM9 IO read8 %08X %08X\n", addr, ARM9->R[15]);
|
if ((addr & 0xFFFFF000) != 0x04004000)
|
||||||
|
printf("unknown ARM9 IO read8 %08X %08X\n", addr, ARM9->R[15]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3120,7 +3126,8 @@ u16 ARM9IORead16(u32 addr)
|
|||||||
return GPU3D::Read16(addr);
|
return GPU3D::Read16(addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("unknown ARM9 IO read16 %08X %08X\n", addr, ARM9->R[15]);
|
if ((addr & 0xFFFFF000) != 0x04004000)
|
||||||
|
printf("unknown ARM9 IO read16 %08X %08X\n", addr, ARM9->R[15]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3263,7 +3270,8 @@ u32 ARM9IORead32(u32 addr)
|
|||||||
return GPU3D::Read32(addr);
|
return GPU3D::Read32(addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("unknown ARM9 IO read32 %08X %08X\n", addr, ARM9->R[15]);
|
if ((addr & 0xFFFFF000) != 0x04004000)
|
||||||
|
printf("unknown ARM9 IO read32 %08X %08X\n", addr, ARM9->R[15]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3799,7 +3807,8 @@ u8 ARM7IORead8(u32 addr)
|
|||||||
return SPU::Read8(addr);
|
return SPU::Read8(addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("unknown ARM7 IO read8 %08X %08X\n", addr, ARM7->R[15]);
|
if ((addr & 0xFFFFF000) != 0x04004000)
|
||||||
|
printf("unknown ARM7 IO read8 %08X %08X\n", addr, ARM7->R[15]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3892,7 +3901,8 @@ u16 ARM7IORead16(u32 addr)
|
|||||||
return SPU::Read16(addr);
|
return SPU::Read16(addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("unknown ARM7 IO read16 %08X %08X\n", addr, ARM7->R[15]);
|
if ((addr & 0xFFFFF000) != 0x04004000)
|
||||||
|
printf("unknown ARM7 IO read16 %08X %08X\n", addr, ARM7->R[15]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3992,7 +4002,8 @@ u32 ARM7IORead32(u32 addr)
|
|||||||
return SPU::Read32(addr);
|
return SPU::Read32(addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("unknown ARM7 IO read32 %08X %08X\n", addr, ARM7->R[15]);
|
if ((addr & 0xFFFFF000) != 0x04004000)
|
||||||
|
printf("unknown ARM7 IO read32 %08X %08X\n", addr, ARM7->R[15]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
22
src/Wifi.cpp
22
src/Wifi.cpp
@ -839,6 +839,21 @@ bool ProcessTX(TXSlot* slot, int num)
|
|||||||
slot->CurPhase = 1;
|
slot->CurPhase = 1;
|
||||||
slot->CurPhaseTime = len;
|
slot->CurPhaseTime = len;
|
||||||
|
|
||||||
|
u16 framectl = *(u16*)&RAM[slot->Addr + 0xC];
|
||||||
|
if (framectl & (1<<14))
|
||||||
|
{
|
||||||
|
// WEP frame
|
||||||
|
// TODO: what happens when sending a WEP frame while WEP processing is off?
|
||||||
|
// TODO: some form of actual WEP processing?
|
||||||
|
// for now we just set the WEP FCS to a nonzero value, because some games require it
|
||||||
|
|
||||||
|
if (IOPORT(W_WEPCnt) & (1<<15))
|
||||||
|
{
|
||||||
|
u32 wep_fcs = (slot->Addr + 0xC + slot->Length - 7) & ~0x1;
|
||||||
|
*(u32*)&RAM[wep_fcs] = 0x22334466;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
u64 oldts;
|
u64 oldts;
|
||||||
if (num == 4)
|
if (num == 4)
|
||||||
{
|
{
|
||||||
@ -891,7 +906,6 @@ bool ProcessTX(TXSlot* slot, int num)
|
|||||||
// any packet sent via CMD/REPLY/BEACON isn't going to have much use outside of local MP
|
// any packet sent via CMD/REPLY/BEACON isn't going to have much use outside of local MP
|
||||||
if (num == 0 || num == 2 || num == 3)
|
if (num == 0 || num == 2 || num == 3)
|
||||||
{
|
{
|
||||||
u16 framectl = *(u16*)&RAM[slot->Addr + 0xC];
|
|
||||||
if ((framectl & 0x00FF) == 0x0010)
|
if ((framectl & 0x00FF) == 0x0010)
|
||||||
{
|
{
|
||||||
u16 aid = *(u16*)&RAM[slot->Addr + 0xC + 24 + 4];
|
u16 aid = *(u16*)&RAM[slot->Addr + 0xC + 24 + 4];
|
||||||
@ -1401,7 +1415,10 @@ void MPClientReplyRX(int client)
|
|||||||
// TODO: what are the maximum crop values?
|
// TODO: what are the maximum crop values?
|
||||||
u16 framectl = *(u16*)&reply[12];
|
u16 framectl = *(u16*)&reply[12];
|
||||||
if (framectl & (1<<14))
|
if (framectl & (1<<14))
|
||||||
|
{
|
||||||
framelen -= (IOPORT(W_RXLenCrop) >> 7) & 0x1FE;
|
framelen -= (IOPORT(W_RXLenCrop) >> 7) & 0x1FE;
|
||||||
|
if (framelen > 24) memmove(&RXBuffer[12+24], &RXBuffer[12+28], framelen);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
framelen -= (IOPORT(W_RXLenCrop) << 1) & 0x1FE;
|
framelen -= (IOPORT(W_RXLenCrop) << 1) & 0x1FE;
|
||||||
|
|
||||||
@ -1470,7 +1487,10 @@ bool CheckRX(int type) // 0=regular 1=MP replies 2=MP host frames
|
|||||||
|
|
||||||
// TODO: what are the maximum crop values?
|
// TODO: what are the maximum crop values?
|
||||||
if (framectl & (1<<14))
|
if (framectl & (1<<14))
|
||||||
|
{
|
||||||
framelen -= (IOPORT(W_RXLenCrop) >> 7) & 0x1FE;
|
framelen -= (IOPORT(W_RXLenCrop) >> 7) & 0x1FE;
|
||||||
|
if (framelen > 24) memmove(&RXBuffer[12+24], &RXBuffer[12+28], framelen);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
framelen -= (IOPORT(W_RXLenCrop) << 1) & 0x1FE;
|
framelen -= (IOPORT(W_RXLenCrop) << 1) & 0x1FE;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user