quick attempt at supercard emulation. really ugly

This commit is contained in:
StapleButter 2018-04-27 20:00:53 +02:00
parent 81e98b5e12
commit 20050fb668
1 changed files with 41 additions and 3 deletions

View File

@ -1098,8 +1098,10 @@ void ROMPrepareData(u32 param)
NDS::CheckDMAs(0, 0x05);
}
u32 sc_addr = 0;
void WriteROMCnt(u32 val)
{printf("ROMCNT %08X %08X %04X\n", val, ROMCnt, SPICnt);
{
ROMCnt = (val & 0xFF7F7FFF) | (ROMCnt & 0x00800000);
if (!(SPICnt & (1<<15))) return;
@ -1153,11 +1155,11 @@ void WriteROMCnt(u32 val)
*(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,
cmd[0], cmd[1], cmd[2], cmd[3],
cmd[4], cmd[5], cmd[6], cmd[7],
datasize);
datasize);*/
switch (cmd[0])
{
@ -1203,6 +1205,42 @@ void WriteROMCnt(u32 val)
}
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:
switch (cmd[0] & 0xF0)
{