BIOS: Map the entire ROM1 file to PS2 memory

EROM is part of ROM1, its exact location vary and can't be predicted
This commit is contained in:
Florin9doi 2022-07-26 16:05:36 +03:00 committed by refractionpcsx2
parent 149a08914e
commit 8fbb1e5565
8 changed files with 27 additions and 36 deletions

View File

@ -99,12 +99,12 @@ void iopMemoryReserve::Reset()
//psxMemWLUT[0xbf80] = (uptr)iopHw;
// Read-only memory areas, so don't map WLUT for these...
for (int i=0; i<0x0040; i++)
for (int i = 0; i < 0x0040; i++)
{
psxMemWLUT[i + 0x2000 + 0x1fc0] = (uptr)&eeMem->ROM[i << 16];
}
for (int i=0; i<0x0004; i++)
for (int i = 0; i < 0x0040; i++)
{
psxMemWLUT[i + 0x2000 + 0x1e00] = (uptr)&eeMem->ROM1[i << 16];
}

View File

@ -154,10 +154,9 @@ void memMapPhy()
vtlb_MapHandler(null_handler, Ps2MemSize::MainRam, 0x10000000 - Ps2MemSize::MainRam);
// Various ROMs (all read-only)
vtlb_MapBlock(eeMem->ROM, 0x1fc00000,Ps2MemSize::Rom);
vtlb_MapBlock(eeMem->ROM1, 0x1e000000,Ps2MemSize::Rom1);
vtlb_MapBlock(eeMem->ROM2, 0x1e400000,Ps2MemSize::Rom2);
vtlb_MapBlock(eeMem->EROM, 0x1e040000,Ps2MemSize::ERom);
vtlb_MapBlock(eeMem->ROM, 0x1fc00000, Ps2MemSize::Rom);
vtlb_MapBlock(eeMem->ROM1, 0x1e000000, Ps2MemSize::Rom1);
vtlb_MapBlock(eeMem->ROM2, 0x1e400000, Ps2MemSize::Rom2);
// IOP memory
// (used by the EE Bios Kernel during initial hardware initialization, Apps/Games

View File

@ -72,14 +72,14 @@ static __fi void ZeroQWC( u128& dest )
#define psRu32(mem) (*(u32*)&eeMem->ROM[(mem) & 0x3fffff])
#define psRu64(mem) (*(u64*)&eeMem->ROM[(mem) & 0x3fffff])
#define psR1s8(mem) (*(s8 *)&eeMem->ROM1[(mem) & 0x3ffff])
#define psR1s16(mem) (*(s16*)&eeMem->ROM1[(mem) & 0x3ffff])
#define psR1s32(mem) (*(s32*)&eeMem->ROM1[(mem) & 0x3ffff])
#define psR1s64(mem) (*(s64*)&eeMem->ROM1[(mem) & 0x3ffff])
#define psR1u8(mem) (*(u8 *)&eeMem->ROM1[(mem) & 0x3ffff])
#define psR1u16(mem) (*(u16*)&eeMem->ROM1[(mem) & 0x3ffff])
#define psR1u32(mem) (*(u32*)&eeMem->ROM1[(mem) & 0x3ffff])
#define psR1u64(mem) (*(u64*)&eeMem->ROM1[(mem) & 0x3ffff])
#define psR1s8(mem) (*(s8 *)&eeMem->ROM1[(mem) & 0x3fffff])
#define psR1s16(mem) (*(s16*)&eeMem->ROM1[(mem) & 0x3fffff])
#define psR1s32(mem) (*(s32*)&eeMem->ROM1[(mem) & 0x3fffff])
#define psR1s64(mem) (*(s64*)&eeMem->ROM1[(mem) & 0x3fffff])
#define psR1u8(mem) (*(u8 *)&eeMem->ROM1[(mem) & 0x3fffff])
#define psR1u16(mem) (*(u16*)&eeMem->ROM1[(mem) & 0x3fffff])
#define psR1u32(mem) (*(u32*)&eeMem->ROM1[(mem) & 0x3fffff])
#define psR1u64(mem) (*(u64*)&eeMem->ROM1[(mem) & 0x3fffff])
#define psR2s8(mem) (*(s8 *)&eeMem->ROM2[(mem) & 0x7ffff])
#define psR2s16(mem) (*(s16*)&eeMem->ROM2[(mem) & 0x7ffff])
@ -90,15 +90,6 @@ static __fi void ZeroQWC( u128& dest )
#define psR2u32(mem) (*(u32*)&eeMem->ROM2[(mem) & 0x7ffff])
#define psR2u64(mem) (*(u64*)&eeMem->ROM2[(mem) & 0x7ffff])
#define psERs8(mem) (*(s8 *)&eeMem->EROM[(mem) & 0x3ffff])
#define psERs16(mem) (*(s16*)&eeMem->EROM[(mem) & 0x3ffff])
#define psERs32(mem) (*(s32*)&eeMem->EROM[(mem) & 0x3ffff])
#define psERs64(mem) (*(s64*)&eeMem->EROM[(mem) & 0x3ffff])
#define psERu8(mem) (*(u8 *)&eeMem->EROM[(mem) & 0x3ffff])
#define psERu16(mem) (*(u16*)&eeMem->EROM[(mem) & 0x3ffff])
#define psERu32(mem) (*(u32*)&eeMem->EROM[(mem) & 0x3ffff])
#define psERu64(mem) (*(u64*)&eeMem->EROM[(mem) & 0x3ffff])
#define psSs32(mem) (*(s32 *)&eeMem->Scratch[(mem) & 0x3fff])
#define psSs64(mem) (*(s64 *)&eeMem->Scratch[(mem) & 0x3fff])
#define psSs128(mem) (*(s128*)&eeMem->Scratch[(mem) & 0x3fff])

View File

@ -20,9 +20,8 @@ namespace Ps2MemSize
{
static const uint MainRam = _32mb; // 32 MB main memory!
static const uint Rom = _1mb * 4; // 4 MB main rom
static const uint Rom1 = 0x00040000; // DVD player
static const uint Rom2 = 0x00080000; // Chinese rom extension (?)
static const uint ERom = 0x001C0000; // DVD player extensions (?)
static const uint Rom1 = _1mb * 4; // DVD player
static const uint Rom2 = 0x00080000; // Chinese rom extension
static const uint Hardware = _64kb;
static const uint Scratch = _16kb;
@ -43,9 +42,8 @@ struct EEVM_MemoryAllocMess
u8 Main[Ps2MemSize::MainRam]; // Main memory (hard-wired to 32MB)
u8 Scratch[Ps2MemSize::Scratch]; // Scratchpad!
u8 ROM[Ps2MemSize::Rom]; // Boot rom (4MB)
u8 ROM1[Ps2MemSize::Rom1]; // DVD player
u8 ROM1[Ps2MemSize::Rom1]; // DVD player (4MB)
u8 ROM2[Ps2MemSize::Rom2]; // Chinese extensions
u8 EROM[Ps2MemSize::ERom]; // DVD player extensions
// Two 1 megabyte (max DMA) buffers for reading and writing to high memory (>32MB).
// Such accesses are not documented as causing bus errors but as the memory does

View File

@ -928,8 +928,12 @@ void SYSCALL()
case 0x53: mode = "SDTV 768x576 @ ??.???"; gsSetVideoMode(GS_VideoMode::SDTV_576P); break;
case 0x54: mode = "HDTV 1920x1080 @ ??.???"; gsSetVideoMode(GS_VideoMode::HDTV_1080P); break;
case 0x72: mode = "DVD NTSC 640x448 @ ??.???"; gsSetVideoMode(GS_VideoMode::DVD_NTSC); break;
case 0x73: mode = "DVD PAL 720x480 @ ??.???"; gsSetVideoMode(GS_VideoMode::DVD_PAL); break;
case 0x72:
case 0x82:
mode = "DVD NTSC 640x448 @ ??.???"; gsSetVideoMode(GS_VideoMode::DVD_NTSC); break;
case 0x73:
case 0x83:
mode = "DVD PAL 720x480 @ ??.???"; gsSetVideoMode(GS_VideoMode::DVD_PAL); break;
default:
DevCon.Error("Mode %x is not supported. Report me upstream", cpuRegs.GPR.n.a1.UC[0]);

View File

@ -161,7 +161,7 @@ void ChecksumIt(u32& result, const u8 (&srcdata)[_size])
// the base.
//
// Parameters:
// ext - extension of the sub-component to load. Valid options are rom1, rom2, AND erom.
// ext - extension of the sub-component to load. Valid options are rom1 and rom2.
//
template <size_t _size>
static void LoadExtraRom(const char* ext, u8 (&dest)[_size])
@ -187,7 +187,7 @@ static void LoadExtraRom(const char* ext, u8 (&dest)[_size])
Console.Warning("BIOS Warning: %s could not be read (permission denied?)", ext);
return;
}
// Checksum for ROM1, ROM2, EROM? Rama says no, Gigaherz says yes. I'm not sure either way. --air
// Checksum for ROM1, ROM2? Rama says no, Gigaherz says yes. I'm not sure either way. --air
//ChecksumIt( BiosChecksum, dest );
}
@ -236,7 +236,7 @@ static std::string FindBiosImage()
// this method being called.
//
// Remarks:
// This function does not fail if rom1, rom2, or erom files are missing, since none are
// This function does not fail if rom1 or rom2 files are missing, since none are
// explicitly required for most emulation tasks.
//
// Exceptions:
@ -296,7 +296,6 @@ bool LoadBIOS()
LoadExtraRom("rom1", eeMem->ROM1);
LoadExtraRom("rom2", eeMem->ROM2);
LoadExtraRom("erom", eeMem->EROM);
if (EmuConfig.CurrentIRX.length() > 3)
LoadIrx(EmuConfig.CurrentIRX, &eeMem->ROM[0x3C0000], sizeof(eeMem->ROM) - 0x3C0000);

View File

@ -772,7 +772,7 @@ void recResetIOP()
recLUT_SetPage(psxRecLUT, psxhwLUT, recROM, 0xa000, i, i - 0x1fc0);
}
for (int i = 0x1e00; i < 0x1e04; i++)
for (int i = 0x1e00; i < 0x1e40; i++)
{
recLUT_SetPage(psxRecLUT, psxhwLUT, recROM1, 0x0000, i, i - 0x1e00);
recLUT_SetPage(psxRecLUT, psxhwLUT, recROM1, 0x8000, i, i - 0x1e00);

View File

@ -593,7 +593,7 @@ static void recAlloc()
recLUT_SetPage(recLUT, hwLUT, recROM, 0xa000, i, i - 0x1fc0);
}
for (int i = 0x1e00; i < 0x1e04; i++)
for (int i = 0x1e00; i < 0x1e40; i++)
{
recLUT_SetPage(recLUT, hwLUT, recROM1, 0x0000, i, i - 0x1e00);
recLUT_SetPage(recLUT, hwLUT, recROM1, 0x8000, i, i - 0x1e00);