Skip to content

Commit

Permalink
BIOS: Map the entire ROM1 file to PS2 memory
Browse files Browse the repository at this point in the history
EROM is part of ROM1, its exact location vary and can't be predicted
  • Loading branch information
Florin9doi authored and refractionpcsx2 committed Oct 18, 2022
1 parent 149a089 commit 8fbb1e5
Show file tree
Hide file tree
Showing 8 changed files with 27 additions and 36 deletions.
4 changes: 2 additions & 2 deletions pcsx2/IopMem.cpp
Expand Up @@ -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];
}
Expand Down
7 changes: 3 additions & 4 deletions pcsx2/Memory.cpp
Expand Up @@ -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
Expand Down
25 changes: 8 additions & 17 deletions pcsx2/Memory.h
Expand Up @@ -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])
Expand All @@ -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])
Expand Down
8 changes: 3 additions & 5 deletions pcsx2/MemoryTypes.h
Expand Up @@ -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;

Expand All @@ -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
Expand Down
8 changes: 6 additions & 2 deletions pcsx2/R5900OpcodeImpl.cpp
Expand Up @@ -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]);
Expand Down
7 changes: 3 additions & 4 deletions pcsx2/ps2/BiosTools.cpp
Expand Up @@ -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])
Expand All @@ -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 );
}

Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion pcsx2/x86/iR3000A.cpp
Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion pcsx2/x86/ix86-32/iR5900-32.cpp
Expand Up @@ -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);
Expand Down

0 comments on commit 8fbb1e5

Please sign in to comment.