improve jaguar system bus, add more jaguar memory domains

This commit is contained in:
CasualPokePlayer 2022-09-23 19:43:49 -07:00
parent d8825deb8d
commit ef18a76064
4 changed files with 66 additions and 12 deletions

Binary file not shown.

View File

@ -119,11 +119,55 @@ EXPORT void PutSaveRam(u8* src)
extern u8 gpu_ram_8[0x1000];
extern u8 dsp_ram_8[0x2000];
extern u8 cdRam[0x100];
extern u8 blitter_ram[0x100];
extern u8 jerry_ram_8[0x10000];
static u8 unmapped;
static inline u8* GetSysBusPtr(u64 address)
{
address &= 0xFFFFFF;
unmapped = 0xFF;
switch (address)
{
case 0x000000 ... 0x7FFFFF: return &jaguarMainRAM[address & 0x1FFFFF];
case 0x800000 ... 0xDFFEFF: return &jaguarMainROM[address - 0x800000];
case 0xDFFF00 ... 0xDFFFFF: return &cdRam[address & 0xFF];
case 0xE00000 ... 0xE3FFFF: return &jagMemSpace[address];
case 0xF00000 ... 0xF021FF: return &TOMGetRamPointer()[address & 0x3FFF];
case 0xF02200 ... 0xF0229F: return &blitter_ram[address & 0xFF];
case 0xF022A0 ... 0xF02FFF: return &TOMGetRamPointer()[address & 0x3FFF];
case 0xF03000 ... 0xF03FFF: return &gpu_ram_8[address & 0xFFF];
case 0xF04000 ... 0xF0FFFF: return &TOMGetRamPointer()[address & 0x3FFF];
case 0xF10000 ... 0xF1AFFF: return &jerry_ram_8[address & 0xFFFF];
case 0xF1B000 ... 0xF1CFFF: return &dsp_ram_8[address - 0xF1B000];
case 0xF1D000 ... 0xF1FFFF: return &jerry_ram_8[address & 0xFFFF];
case 0xF20000 ... 0xFFFFFF: return &unmapped;
}
}
static void SysBusAccess(u8* buffer, u64 address, u64 count, bool write)
{
if (write)
{
while (count--)
{
*GetSysBusPtr(address++) = *buffer++;
}
}
else
{
while (count--)
{
*buffer++ = *GetSysBusPtr(address++);
}
}
}
EXPORT void GetMemoryAreas(MemoryArea* m)
{
m[0].Data = jaguarMainRAM;
m[0].Name = "Main RAM";
m[0].Name = "DRAM";
m[0].Size = 0x200000;
m[0].Flags = MEMORYAREA_FLAGS_WORDSIZE2 | MEMORYAREA_FLAGS_WRITABLE | MEMORYAREA_FLAGS_YUGEENDIAN | MEMORYAREA_FLAGS_PRIMARY;
@ -147,20 +191,30 @@ EXPORT void GetMemoryAreas(MemoryArea* m)
m[4].Size = 0x4000;
m[4].Flags = MEMORYAREA_FLAGS_WORDSIZE2 | MEMORYAREA_FLAGS_WRITABLE | MEMORYAREA_FLAGS_YUGEENDIAN;
m[5].Data = jaguarMainROM;
m[5].Name = "ROM";
m[5].Size = jaguarROMSize;
m[5].Data = jerry_ram_8;
m[5].Name = "JERRY RAM";
m[5].Size = sizeof(jerry_ram_8);
m[5].Flags = MEMORYAREA_FLAGS_WORDSIZE2 | MEMORYAREA_FLAGS_WRITABLE | MEMORYAREA_FLAGS_YUGEENDIAN;
m[6].Data = jagMemSpace + 0xE00000;
m[6].Name = "BIOS";
m[6].Size = 0x20000;
m[6].Data = blitter_ram;
m[6].Name = "BLITTER RAM";
m[6].Size = sizeof(blitter_ram);
m[6].Flags = MEMORYAREA_FLAGS_WORDSIZE2 | MEMORYAREA_FLAGS_WRITABLE | MEMORYAREA_FLAGS_YUGEENDIAN;
m[7].Data = jagMemSpace;
m[7].Name = "System Bus";
m[7].Size = 0xF20000;
m[7].Data = jaguarMainROM;
m[7].Name = "ROM";
m[7].Size = jaguarROMSize;
m[7].Flags = MEMORYAREA_FLAGS_WORDSIZE2 | MEMORYAREA_FLAGS_WRITABLE | MEMORYAREA_FLAGS_YUGEENDIAN;
m[8].Data = jagMemSpace + 0xE00000;
m[8].Name = "BIOS";
m[8].Size = 0x20000;
m[8].Flags = MEMORYAREA_FLAGS_WORDSIZE2 | MEMORYAREA_FLAGS_WRITABLE | MEMORYAREA_FLAGS_YUGEENDIAN;
m[9].Data = (void*)SysBusAccess;
m[9].Name = "System Bus";
m[9].Size = 0x1000000;
m[9].Flags = MEMORYAREA_FLAGS_WORDSIZE2 | MEMORYAREA_FLAGS_WRITABLE | MEMORYAREA_FLAGS_YUGEENDIAN | MEMORYAREA_FLAGS_FUNCTIONHOOK;
}
struct MyFrameInfo : public FrameInfo

View File

@ -29,7 +29,7 @@
// Blitter register RAM (most of it is hidden from the user)
static uint8_t blitter_ram[0x100];
uint8_t blitter_ram[0x100];
void BlitterMidsummer2(void);

View File

@ -36,7 +36,7 @@ static uint16_t CDROMBusRead(void);
#define I2SDAT2 BUTCH + 0x28 // i2s FIFO data (old)
#define UNKNOWN BUTCH + 0x2C // Seems to be some sort of I2S interface
static uint8_t cdRam[0x100];
uint8_t cdRam[0x100];
static uint16_t cdCmd = 0, cdPtr = 0;
static bool haveCDGoodness;
static uint32_t min, sec, frm, block;