mirror of
https://github.com/BluestormDNA/ProjectPSX.git
synced 2025-04-02 10:52:34 -04:00
DMA range tests
This commit is contained in:
parent
d0799d0059
commit
da04103fdc
1 changed files with 48 additions and 52 deletions
|
@ -7,47 +7,68 @@ namespace ProjectPSX {
|
|||
private byte[] RAM = new byte[2048 * 1024];
|
||||
private byte[] EX1 = new byte[512 * 1024];
|
||||
private byte[] SCRATHPAD = new byte[1024];
|
||||
private byte[] REGISTERS = new byte[8 * 1024];
|
||||
private byte[] REGISTERS = new byte[4 * 1024];
|
||||
private byte[] BIOS = new byte[512 * 1024];
|
||||
private byte[] IO = new byte[512];
|
||||
|
||||
private const uint GPUSTAT = 0x1f801814;
|
||||
private const uint GP0 = 0x1f801810;
|
||||
|
||||
internal uint read32(uint addr) {
|
||||
//Console.WriteLine("READ ADDR: " + addr.ToString("x4"));
|
||||
switch (addr) {
|
||||
case uint KUSEG when addr >= 0x0000_0000 && addr < 0x1F00_0000:
|
||||
case uint KSEG0 when addr >= 0x8000_0000 && addr < 0x9F00_0000:
|
||||
case uint KSEG1 when addr >= 0xA000_0000 && addr < 0xBF00_0000:
|
||||
//if (addr == 0xa000_b9b0) return 1; Force Debug TTY
|
||||
addr &= 0x1F_FFFF;
|
||||
return (uint)((RAM[addr + 3] << 24) | (RAM[addr + 2] << 16) | (RAM[addr + 1] << 8) | RAM[addr]);
|
||||
|
||||
case uint KUSEG when addr >= 0x1F00_0000 && addr < 0x1F08_0000:
|
||||
case uint KSEG0 when addr >= 0x9F00_0000 && addr < 0x9F08_0000:
|
||||
case uint KSEG1 when addr >= 0xBF00_0000 && addr < 0xBF08_0000:
|
||||
if (addr == 0x1f00_0084) { Console.WriteLine("EX1 IO PORT READ RETURNING FF"); return 0xFFFF_FFFF; } //todo look if this is needed EX1 IO port
|
||||
addr &= 0x7_FFFF;
|
||||
return (uint)((EX1[addr + 3] << 24) | (EX1[addr + 2] << 16) | (EX1[addr + 1] << 8) | EX1[addr]);
|
||||
|
||||
case uint KUSEG when addr >= 0x1F80_0000 && addr < 0x1F80_0400:
|
||||
case uint KSEG0 when addr >= 0x9F80_0000 && addr < 0x9F80_0400:
|
||||
case uint KSEG1 when addr >= 0xBF80_0000 && addr < 0xBF80_0400:
|
||||
addr &= 0xFFF;
|
||||
return (uint)((SCRATHPAD[addr + 3] << 24) | (SCRATHPAD[addr + 2] << 16) | (SCRATHPAD[addr + 1] << 8) | SCRATHPAD[addr]);
|
||||
case uint KUSEG when addr >= 0x1F80_1000 && addr < 0x1F80_3000:
|
||||
case uint KSEG0 when addr >= 0x9F80_1000 && addr < 0x9F80_3000:
|
||||
case uint KSEG1 when addr >= 0xBF80_1000 && addr < 0xBF80_3000:
|
||||
if (0x1f8010f0 == addr) {
|
||||
|
||||
case uint KUSEG when addr >= 0x1F80_1000 && addr < 0x1F80_2000:
|
||||
case uint KSEG0 when addr >= 0x9F80_1000 && addr < 0x9F80_2000:
|
||||
case uint KSEG1 when addr >= 0xBF80_1000 && addr < 0xBF80_2000:
|
||||
if (addr >= 0x1f801080 && addr <= 0x1f8010FF) {
|
||||
Console.WriteLine("DMA ACCESS");
|
||||
return 0;
|
||||
}
|
||||
addr &= 0x1FFF;
|
||||
} else if (addr == GPUSTAT) { Console.WriteLine("GPUSTAT ACCESS"); return 0x1000_0000; }
|
||||
else if (addr == GP0) { Console.WriteLine("GP0 ACCESS"); return 0; }
|
||||
else if (addr == 0x1f801104) { Console.WriteLine("Timer 1104 ACCESS"); return 0; }
|
||||
else if (addr == 0x1f801114) { Console.WriteLine("Timer 1114 ACCESS"); return 0; }
|
||||
else if (addr == 0x1f801118) { Console.WriteLine("Timer 1118 ACCESS"); return 0; }
|
||||
else if (addr == 0x1f801070) { Console.WriteLine("Interrupt Mask ACCESS"); return 0; }
|
||||
else if (addr == 0x1f801074) { Console.WriteLine("Interrupt Status ACCESS"); return 0; }
|
||||
else if (addr == 0x1f801dae) { Console.WriteLine("SPU ACCESS"); return 0; }
|
||||
|
||||
addr &= 0xFFF;
|
||||
return (uint)((REGISTERS[addr + 3] << 24) | (REGISTERS[addr + 2] << 16) | (REGISTERS[addr + 1] << 8) | REGISTERS[addr]);
|
||||
|
||||
case uint KUSEG when addr >= 0x1FC0_0000 && addr < 0x1FC8_0000:
|
||||
case uint KSEG0 when addr >= 0x9FC0_0000 && addr < 0x9FC8_0000:
|
||||
case uint KSEG1 when addr >= 0xBFC0_0000 && addr < 0xBFC8_0000: //BIOS mem map
|
||||
if (0xbfc04190 == addr) {
|
||||
Console.WriteLine("DMA LOOP");
|
||||
return 0;
|
||||
}
|
||||
|
||||
addr &= 0x7_FFFF;
|
||||
return (uint)((BIOS[addr + 3] << 24) | (BIOS[addr + 2] << 16) | (BIOS[addr + 1] << 8) | BIOS[addr]);
|
||||
|
||||
case uint KSEG2 when addr >= 0xFFFE_0000 && addr < 0xFFFE_0200:
|
||||
addr &= 0x1FF;
|
||||
return (uint)((IO[addr + 3] << 24) | (IO[addr + 2] << 16) | (IO[addr + 1] << 8) | IO[addr]);
|
||||
|
||||
default:
|
||||
Console.WriteLine("Unsupported READ AREA: " + addr.ToString("x4"));
|
||||
return 0xFFFF_FFFF;
|
||||
|
@ -83,10 +104,10 @@ namespace ProjectPSX {
|
|||
SCRATHPAD[addr + 2] = (byte)(value >> 16);
|
||||
SCRATHPAD[addr + 3] = (byte)(value >> 24);
|
||||
break;
|
||||
case uint KUSEG when addr >= 0x1F80_1000 && addr < 0x1F80_3000:
|
||||
case uint KSEG0 when addr >= 0x9F80_1000 && addr < 0x9F80_3000:
|
||||
case uint KSEG1 when addr >= 0xBF80_1000 && addr < 0xBF80_3000:
|
||||
addr &= 0x1FFF;
|
||||
case uint KUSEG when addr >= 0x1F80_1000 && addr < 0x1F80_2000:
|
||||
case uint KSEG0 when addr >= 0x9F80_1000 && addr < 0x9F80_2000:
|
||||
case uint KSEG1 when addr >= 0xBF80_1000 && addr < 0xBF80_2000:
|
||||
addr &= 0xFFF;
|
||||
REGISTERS[addr] = (byte)(value);
|
||||
REGISTERS[addr + 1] = (byte)(value >> 8);
|
||||
REGISTERS[addr + 2] = (byte)(value >> 16);
|
||||
|
@ -95,11 +116,6 @@ namespace ProjectPSX {
|
|||
case uint KUSEG when addr >= 0x1FC0_0000 && addr < 0x1FC8_0000:
|
||||
case uint KSEG0 when addr >= 0x9FC0_0000 && addr < 0x9FC8_0000:
|
||||
case uint KSEG1 when addr >= 0xBFC0_0000 && addr < 0xBFC8_0000: //BIOS mem map
|
||||
//addr &= 0x7_FFFF;
|
||||
//BIOS[addr] = (byte)(value);
|
||||
//BIOS[addr + 1] = (byte)(value >> 8);
|
||||
//BIOS[addr + 2] = (byte)(value >> 16);
|
||||
//BIOS[addr + 3] = (byte)(value >> 24);
|
||||
Console.WriteLine("WARNING WRITE 32 on BIOS RANGE" + addr.ToString("x8"));
|
||||
Console.ReadLine();
|
||||
break;
|
||||
|
@ -114,21 +130,6 @@ namespace ProjectPSX {
|
|||
Console.WriteLine("Unsupported WRITE AREA: " + addr.ToString("x4") + ": " + value.ToString("x4"));
|
||||
break;
|
||||
}
|
||||
/*
|
||||
switch (addr) {
|
||||
case uint r when addr == 0x1f80_1000: //BIOS mem map
|
||||
if (value != 0x1f00_0000) Console.WriteLine("WARNING NON VALID MEM MAP");
|
||||
// array = tal
|
||||
break;
|
||||
case uint r when addr == 0x1f80_1004: //BIOS mem map
|
||||
if (value != 0x1f80_2000) Console.WriteLine("WARNING NON VALID MEM MAP");
|
||||
// array = tal
|
||||
break;
|
||||
default:
|
||||
Console.WriteLine("Unsupported WRITE AREA: " + addr.ToString("x4") + ": " + value.ToString("x4"));
|
||||
break;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
internal void write8(uint addr, byte value) {
|
||||
|
@ -145,23 +146,21 @@ namespace ProjectPSX {
|
|||
addr &= 0x7_FFFF;
|
||||
EX1[addr] = (byte)(value);
|
||||
break;
|
||||
case uint KUSEG when addr >= 0x1F80_0000 && addr < 0x1F80_0400: //Warning: _1000
|
||||
case uint KSEG0 when addr >= 0x9F80_0000 && addr < 0x9F80_0400: //Warning: _1000
|
||||
case uint KSEG1 when addr >= 0xBF80_0000 && addr < 0xBF80_0400: //Warning: _1000
|
||||
case uint KUSEG when addr >= 0x1F80_0000 && addr < 0x1F80_0400:
|
||||
case uint KSEG0 when addr >= 0x9F80_0000 && addr < 0x9F80_0400:
|
||||
case uint KSEG1 when addr >= 0xBF80_0000 && addr < 0xBF80_0400:
|
||||
addr &= 0xFFF;
|
||||
SCRATHPAD[addr] = (byte)(value);
|
||||
break;
|
||||
case uint KUSEG when addr >= 0x1F80_1000 && addr < 0x1F80_3000:
|
||||
case uint KSEG0 when addr >= 0x9F80_1000 && addr < 0x9F80_3000:
|
||||
case uint KSEG1 when addr >= 0xBF80_1000 && addr < 0xBF80_3000:
|
||||
addr &= 0x1FFF;
|
||||
case uint KUSEG when addr >= 0x1F80_1000 && addr < 0x1F80_2000:
|
||||
case uint KSEG0 when addr >= 0x9F80_1000 && addr < 0x9F80_2000:
|
||||
case uint KSEG1 when addr >= 0xBF80_1000 && addr < 0xBF80_2000:
|
||||
addr &= 0xFFF;
|
||||
REGISTERS[addr] = (byte)(value);
|
||||
break;
|
||||
case uint KUSEG when addr >= 0x1FC0_0000 && addr < 0x1FC8_0000:
|
||||
case uint KSEG0 when addr >= 0x9FC0_0000 && addr < 0x9FC8_0000:
|
||||
case uint KSEG1 when addr >= 0xBFC0_0000 && addr < 0xBFC8_0000: //BIOS mem map
|
||||
//addr &= 0x7_FFFF;
|
||||
//BIOS[addr] = (byte)(value);
|
||||
Console.WriteLine("WARNING WRITE 32 on BIOS RANGE" + addr.ToString("x8"));
|
||||
Console.ReadLine();
|
||||
break;
|
||||
|
@ -191,26 +190,23 @@ namespace ProjectPSX {
|
|||
EX1[addr] = (byte)(value);
|
||||
EX1[addr + 1] = (byte)(value >> 8);
|
||||
break;
|
||||
case uint KUSEG when addr >= 0x1F80_0000 && addr < 0x1F80_0400: //Warning: _1000
|
||||
case uint KSEG0 when addr >= 0x9F80_0000 && addr < 0x9F80_0400: //Warning: _1000
|
||||
case uint KSEG1 when addr >= 0xBF80_0000 && addr < 0xBF80_0400: //Warning: _1000
|
||||
case uint KUSEG when addr >= 0x1F80_0000 && addr < 0x1F80_0400:
|
||||
case uint KSEG0 when addr >= 0x9F80_0000 && addr < 0x9F80_0400:
|
||||
case uint KSEG1 when addr >= 0xBF80_0000 && addr < 0xBF80_0400:
|
||||
addr &= 0xFFF;
|
||||
SCRATHPAD[addr] = (byte)(value);
|
||||
SCRATHPAD[addr + 1] = (byte)(value >> 8);
|
||||
break;
|
||||
case uint KUSEG when addr >= 0x1F80_1000 && addr < 0x1F80_3000:
|
||||
case uint KSEG0 when addr >= 0x9F80_1000 && addr < 0x9F80_3000:
|
||||
case uint KSEG1 when addr >= 0xBF80_1000 && addr < 0xBF80_3000:
|
||||
addr &= 0x1FFF;
|
||||
case uint KUSEG when addr >= 0x1F80_1000 && addr < 0x1F80_2000:
|
||||
case uint KSEG0 when addr >= 0x9F80_1000 && addr < 0x9F80_2000:
|
||||
case uint KSEG1 when addr >= 0xBF80_1000 && addr < 0xBF80_2000:
|
||||
addr &= 0xFFF;
|
||||
REGISTERS[addr] = (byte)(value);
|
||||
REGISTERS[addr + 1] = (byte)(value >> 8);
|
||||
break;
|
||||
case uint KUSEG when addr >= 0x1FC0_0000 && addr < 0x1FC8_0000:
|
||||
case uint KSEG0 when addr >= 0x9FC0_0000 && addr < 0x9FC8_0000:
|
||||
case uint KSEG1 when addr >= 0xBFC0_0000 && addr < 0xBFC8_0000: //BIOS mem map
|
||||
//addr &= 0x7_FFFF;
|
||||
//BIOS[addr] = (byte)(value);
|
||||
//BIOS[addr + 1] = (byte)(value >> 8);
|
||||
case uint KSEG1 when addr >= 0xBFC0_0000 && addr < 0xBFC8_0000:
|
||||
Console.WriteLine("WARNING WRITE 32 on BIOS RANGE" + addr.ToString("x8"));
|
||||
Console.ReadLine();
|
||||
break;
|
||||
|
|
Loading…
Add table
Reference in a new issue