quick attempt at supercard emulation. really ugly
This commit is contained in:
parent
81e98b5e12
commit
20050fb668
|
@ -1098,8 +1098,10 @@ void ROMPrepareData(u32 param)
|
||||||
NDS::CheckDMAs(0, 0x05);
|
NDS::CheckDMAs(0, 0x05);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u32 sc_addr = 0;
|
||||||
|
|
||||||
void WriteROMCnt(u32 val)
|
void WriteROMCnt(u32 val)
|
||||||
{printf("ROMCNT %08X %08X %04X\n", val, ROMCnt, SPICnt);
|
{
|
||||||
ROMCnt = (val & 0xFF7F7FFF) | (ROMCnt & 0x00800000);
|
ROMCnt = (val & 0xFF7F7FFF) | (ROMCnt & 0x00800000);
|
||||||
|
|
||||||
if (!(SPICnt & (1<<15))) return;
|
if (!(SPICnt & (1<<15))) return;
|
||||||
|
@ -1153,11 +1155,11 @@ void WriteROMCnt(u32 val)
|
||||||
*(u32*)&cmd[4] = *(u32*)&ROMCommand[4];
|
*(u32*)&cmd[4] = *(u32*)&ROMCommand[4];
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("ROM COMMAND %04X %08X %02X%02X%02X%02X%02X%02X%02X%02X SIZE %04X\n",
|
/*printf("ROM COMMAND %04X %08X %02X%02X%02X%02X%02X%02X%02X%02X SIZE %04X\n",
|
||||||
SPICnt, ROMCnt,
|
SPICnt, ROMCnt,
|
||||||
cmd[0], cmd[1], cmd[2], cmd[3],
|
cmd[0], cmd[1], cmd[2], cmd[3],
|
||||||
cmd[4], cmd[5], cmd[6], cmd[7],
|
cmd[4], cmd[5], cmd[6], cmd[7],
|
||||||
datasize);
|
datasize);*/
|
||||||
|
|
||||||
switch (cmd[0])
|
switch (cmd[0])
|
||||||
{
|
{
|
||||||
|
@ -1203,6 +1205,42 @@ void WriteROMCnt(u32 val)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
// SUPERCARD EMULATION TEST
|
||||||
|
// TODO: INTEGRATE BETTER!!!!
|
||||||
|
|
||||||
|
case 0x70: // init??? returns whether SDHC addressing should be used
|
||||||
|
for (u32 pos = 0; pos < DataOutLen; pos += 4)
|
||||||
|
*(u32*)&DataOut[pos] = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x53: // set address for read
|
||||||
|
sc_addr = (cmd[1]<<24) | (cmd[2]<<16) | (cmd[3]<<8) | cmd[4];
|
||||||
|
printf("SUPERCARD: read %08X\n", sc_addr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x80: // read operation busy, I guess
|
||||||
|
// TODO: make it take some time
|
||||||
|
for (u32 pos = 0; pos < DataOutLen; pos += 4)
|
||||||
|
*(u32*)&DataOut[pos] = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x81: // read data
|
||||||
|
{
|
||||||
|
if (DataOutLen != 0x200)
|
||||||
|
printf("SUPERCARD: BOGUS READ %d\n", DataOutLen);
|
||||||
|
|
||||||
|
// TODO: this is really inefficient. just testing
|
||||||
|
FILE* f = fopen("scsd.bin", "rb");
|
||||||
|
fseek(f, sc_addr, SEEK_SET);
|
||||||
|
fread(DataOut, 1, 0x200, f);
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
// SUPERCARD EMULATION TEST END
|
||||||
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
switch (cmd[0] & 0xF0)
|
switch (cmd[0] & 0xF0)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue