mirror of https://github.com/PCSX2/pcsx2.git
Add rom2: support (Fix Chinese Bios) (#3439)
* Add rom2 support * Add rom2 support on IOP * Valid memory range for rom2 * Add rom2 support to IopMem.cpp
This commit is contained in:
parent
60e075d6c9
commit
6794bbbd6a
|
@ -96,6 +96,11 @@ void iopMemoryReserve::Reset()
|
||||||
psxMemWLUT[i + 0x2000 + 0x1e00] = (uptr)&eeMem->ROM1[i << 16];
|
psxMemWLUT[i + 0x2000 + 0x1e00] = (uptr)&eeMem->ROM1[i << 16];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < 0x0008; i++)
|
||||||
|
{
|
||||||
|
psxMemWLUT[i + 0x2000 + 0x1e40] = (uptr)&eeMem->ROM2[i << 16];
|
||||||
|
}
|
||||||
|
|
||||||
// sif!! (which is read only? (air))
|
// sif!! (which is read only? (air))
|
||||||
psxMemWLUT[0x2000 + 0x1d00] = (uptr)iopMem->Sif;
|
psxMemWLUT[0x2000 + 0x1d00] = (uptr)iopMem->Sif;
|
||||||
//psxMemWLUT[0x1bd00] = (uptr)iopMem->Sif;
|
//psxMemWLUT[0x1bd00] = (uptr)iopMem->Sif;
|
||||||
|
|
|
@ -81,14 +81,14 @@ static __fi void ZeroQWC( u128& dest )
|
||||||
#define psR1u32(mem) (*(u32*)&eeMem->ROM1[(mem) & 0x3ffff])
|
#define psR1u32(mem) (*(u32*)&eeMem->ROM1[(mem) & 0x3ffff])
|
||||||
#define psR1u64(mem) (*(u64*)&eeMem->ROM1[(mem) & 0x3ffff])
|
#define psR1u64(mem) (*(u64*)&eeMem->ROM1[(mem) & 0x3ffff])
|
||||||
|
|
||||||
#define psR2s8(mem) (*(s8 *)&eeMem->ROM2[(mem) & 0x3ffff])
|
#define psR2s8(mem) (*(s8 *)&eeMem->ROM2[(mem) & 0x7ffff])
|
||||||
#define psR2s16(mem) (*(s16*)&eeMem->ROM2[(mem) & 0x3ffff])
|
#define psR2s16(mem) (*(s16*)&eeMem->ROM2[(mem) & 0x7ffff])
|
||||||
#define psR2s32(mem) (*(s32*)&eeMem->ROM2[(mem) & 0x3ffff])
|
#define psR2s32(mem) (*(s32*)&eeMem->ROM2[(mem) & 0x7ffff])
|
||||||
#define psR2s64(mem) (*(s64*)&eeMem->ROM2[(mem) & 0x3ffff])
|
#define psR2s64(mem) (*(s64*)&eeMem->ROM2[(mem) & 0x7ffff])
|
||||||
#define psR2u8(mem) (*(u8 *)&eeMem->ROM2[(mem) & 0x3ffff])
|
#define psR2u8(mem) (*(u8 *)&eeMem->ROM2[(mem) & 0x7ffff])
|
||||||
#define psR2u16(mem) (*(u16*)&eeMem->ROM2[(mem) & 0x3ffff])
|
#define psR2u16(mem) (*(u16*)&eeMem->ROM2[(mem) & 0x7ffff])
|
||||||
#define psR2u32(mem) (*(u32*)&eeMem->ROM2[(mem) & 0x3ffff])
|
#define psR2u32(mem) (*(u32*)&eeMem->ROM2[(mem) & 0x7ffff])
|
||||||
#define psR2u64(mem) (*(u64*)&eeMem->ROM2[(mem) & 0x3ffff])
|
#define psR2u64(mem) (*(u64*)&eeMem->ROM2[(mem) & 0x7ffff])
|
||||||
|
|
||||||
#define psERs8(mem) (*(s8 *)&eeMem->EROM[(mem) & 0x3ffff])
|
#define psERs8(mem) (*(s8 *)&eeMem->EROM[(mem) & 0x3ffff])
|
||||||
#define psERs16(mem) (*(s16*)&eeMem->EROM[(mem) & 0x3ffff])
|
#define psERs16(mem) (*(s16*)&eeMem->EROM[(mem) & 0x3ffff])
|
||||||
|
|
|
@ -55,6 +55,7 @@ static RecompiledCodeReserve* recMem = NULL;
|
||||||
static BASEBLOCK *recRAM = NULL; // and the ptr to the blocks here
|
static BASEBLOCK *recRAM = NULL; // and the ptr to the blocks here
|
||||||
static BASEBLOCK *recROM = NULL; // and here
|
static BASEBLOCK *recROM = NULL; // and here
|
||||||
static BASEBLOCK *recROM1 = NULL; // also here
|
static BASEBLOCK *recROM1 = NULL; // also here
|
||||||
|
static BASEBLOCK *recROM2 = NULL; // also here
|
||||||
static BaseBlocks recBlocks;
|
static BaseBlocks recBlocks;
|
||||||
static u8 *recPtr = NULL;
|
static u8 *recPtr = NULL;
|
||||||
u32 psxpc; // recompiler psxpc
|
u32 psxpc; // recompiler psxpc
|
||||||
|
@ -622,7 +623,7 @@ static uptr m_ConfiguredCacheReserve = 32;
|
||||||
static u8* m_recBlockAlloc = NULL;
|
static u8* m_recBlockAlloc = NULL;
|
||||||
|
|
||||||
static const uint m_recBlockAllocSize =
|
static const uint m_recBlockAllocSize =
|
||||||
(((Ps2MemSize::IopRam + Ps2MemSize::Rom + Ps2MemSize::Rom1) / 4) * sizeof(BASEBLOCK));
|
(((Ps2MemSize::IopRam + Ps2MemSize::Rom + Ps2MemSize::Rom1 + Ps2MemSize::Rom2) / 4) * sizeof(BASEBLOCK));
|
||||||
|
|
||||||
static void recReserveCache()
|
static void recReserveCache()
|
||||||
{
|
{
|
||||||
|
@ -664,6 +665,8 @@ static void recAlloc()
|
||||||
recRAM = (BASEBLOCK*)curpos; curpos += (Ps2MemSize::IopRam / 4) * sizeof(BASEBLOCK);
|
recRAM = (BASEBLOCK*)curpos; curpos += (Ps2MemSize::IopRam / 4) * sizeof(BASEBLOCK);
|
||||||
recROM = (BASEBLOCK*)curpos; curpos += (Ps2MemSize::Rom / 4) * sizeof(BASEBLOCK);
|
recROM = (BASEBLOCK*)curpos; curpos += (Ps2MemSize::Rom / 4) * sizeof(BASEBLOCK);
|
||||||
recROM1 = (BASEBLOCK*)curpos; curpos += (Ps2MemSize::Rom1 / 4) * sizeof(BASEBLOCK);
|
recROM1 = (BASEBLOCK*)curpos; curpos += (Ps2MemSize::Rom1 / 4) * sizeof(BASEBLOCK);
|
||||||
|
recROM2 = (BASEBLOCK*)curpos; curpos += (Ps2MemSize::Rom2 / 4) * sizeof(BASEBLOCK);
|
||||||
|
|
||||||
|
|
||||||
if( s_pInstCache == NULL )
|
if( s_pInstCache == NULL )
|
||||||
{
|
{
|
||||||
|
@ -687,7 +690,7 @@ void recResetIOP()
|
||||||
recMem->Reset();
|
recMem->Reset();
|
||||||
|
|
||||||
iopClearRecLUT((BASEBLOCK*)m_recBlockAlloc,
|
iopClearRecLUT((BASEBLOCK*)m_recBlockAlloc,
|
||||||
(((Ps2MemSize::IopRam + Ps2MemSize::Rom + Ps2MemSize::Rom1) / 4)));
|
(((Ps2MemSize::IopRam + Ps2MemSize::Rom + Ps2MemSize::Rom1 + Ps2MemSize::Rom2) / 4)));
|
||||||
|
|
||||||
for (int i = 0; i < 0x10000; i++)
|
for (int i = 0; i < 0x10000; i++)
|
||||||
recLUT_SetPage(psxRecLUT, 0, 0, 0, i, 0);
|
recLUT_SetPage(psxRecLUT, 0, 0, 0, i, 0);
|
||||||
|
@ -721,6 +724,13 @@ void recResetIOP()
|
||||||
recLUT_SetPage(psxRecLUT, psxhwLUT, recROM1, 0xa000, i, i - 0x1fc0);
|
recLUT_SetPage(psxRecLUT, psxhwLUT, recROM1, 0xa000, i, i - 0x1fc0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i = 0x1e40; i < 0x1e48; i++)
|
||||||
|
{
|
||||||
|
recLUT_SetPage(psxRecLUT, psxhwLUT, recROM2, 0x0000, i, i - 0x1fc0);
|
||||||
|
recLUT_SetPage(psxRecLUT, psxhwLUT, recROM2, 0x8000, i, i - 0x1fc0);
|
||||||
|
recLUT_SetPage(psxRecLUT, psxhwLUT, recROM2, 0xa000, i, i - 0x1fc0);
|
||||||
|
}
|
||||||
|
|
||||||
if( s_pInstCache )
|
if( s_pInstCache )
|
||||||
memset( s_pInstCache, 0, sizeof(EEINST)*s_nInstCacheSize );
|
memset( s_pInstCache, 0, sizeof(EEINST)*s_nInstCacheSize );
|
||||||
|
|
||||||
|
|
|
@ -75,7 +75,7 @@ static const int RECCONSTBUF_SIZE = 16384 * 2; // 64 bit consts in 32 bit units
|
||||||
static RecompiledCodeReserve* recMem = NULL;
|
static RecompiledCodeReserve* recMem = NULL;
|
||||||
static u8* recRAMCopy = NULL;
|
static u8* recRAMCopy = NULL;
|
||||||
static u8* recLutReserve_RAM = NULL;
|
static u8* recLutReserve_RAM = NULL;
|
||||||
static const size_t recLutSize = Ps2MemSize::MainRam + Ps2MemSize::Rom + Ps2MemSize::Rom1;
|
static const size_t recLutSize = Ps2MemSize::MainRam + Ps2MemSize::Rom + Ps2MemSize::Rom1 + Ps2MemSize::Rom2;
|
||||||
|
|
||||||
static uptr m_ConfiguredCacheReserve = 64;
|
static uptr m_ConfiguredCacheReserve = 64;
|
||||||
|
|
||||||
|
@ -83,6 +83,7 @@ static u32* recConstBuf = NULL; // 64-bit pseudo-immediates
|
||||||
static BASEBLOCK *recRAM = NULL; // and the ptr to the blocks here
|
static BASEBLOCK *recRAM = NULL; // and the ptr to the blocks here
|
||||||
static BASEBLOCK *recROM = NULL; // and here
|
static BASEBLOCK *recROM = NULL; // and here
|
||||||
static BASEBLOCK *recROM1 = NULL; // also here
|
static BASEBLOCK *recROM1 = NULL; // also here
|
||||||
|
static BASEBLOCK *recROM2 = NULL; // also here
|
||||||
|
|
||||||
static BaseBlocks recBlocks;
|
static BaseBlocks recBlocks;
|
||||||
static u8* recPtr = NULL;
|
static u8* recPtr = NULL;
|
||||||
|
@ -515,6 +516,7 @@ static void recAlloc()
|
||||||
recRAM = basepos; basepos += (Ps2MemSize::MainRam / 4);
|
recRAM = basepos; basepos += (Ps2MemSize::MainRam / 4);
|
||||||
recROM = basepos; basepos += (Ps2MemSize::Rom / 4);
|
recROM = basepos; basepos += (Ps2MemSize::Rom / 4);
|
||||||
recROM1 = basepos; basepos += (Ps2MemSize::Rom1 / 4);
|
recROM1 = basepos; basepos += (Ps2MemSize::Rom1 / 4);
|
||||||
|
recROM2 = basepos; basepos += (Ps2MemSize::Rom2 / 4);
|
||||||
|
|
||||||
for (int i = 0; i < 0x10000; i++)
|
for (int i = 0; i < 0x10000; i++)
|
||||||
recLUT_SetPage(recLUT, 0, 0, 0, i, 0);
|
recLUT_SetPage(recLUT, 0, 0, 0, i, 0);
|
||||||
|
@ -545,6 +547,13 @@ static void recAlloc()
|
||||||
recLUT_SetPage(recLUT, hwLUT, recROM1, 0xa000, i, i - 0x1e00);
|
recLUT_SetPage(recLUT, hwLUT, recROM1, 0xa000, i, i - 0x1e00);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i = 0x1e40; i < 0x1e48; i++)
|
||||||
|
{
|
||||||
|
recLUT_SetPage(recLUT, hwLUT, recROM2, 0x0000, i, i - 0x1e40);
|
||||||
|
recLUT_SetPage(recLUT, hwLUT, recROM2, 0x8000, i, i - 0x1e40);
|
||||||
|
recLUT_SetPage(recLUT, hwLUT, recROM2, 0xa000, i, i - 0x1e40);
|
||||||
|
}
|
||||||
|
|
||||||
if( recConstBuf == NULL )
|
if( recConstBuf == NULL )
|
||||||
recConstBuf = (u32*) _aligned_malloc( RECCONSTBUF_SIZE * sizeof(*recConstBuf), 16 );
|
recConstBuf = (u32*) _aligned_malloc( RECCONSTBUF_SIZE * sizeof(*recConstBuf), 16 );
|
||||||
|
|
||||||
|
@ -620,7 +629,7 @@ static void recShutdown()
|
||||||
|
|
||||||
recBlocks.Reset();
|
recBlocks.Reset();
|
||||||
|
|
||||||
recRAM = recROM = recROM1 = NULL;
|
recRAM = recROM = recROM1 = recROM2 = NULL;
|
||||||
|
|
||||||
safe_aligned_free( recConstBuf );
|
safe_aligned_free( recConstBuf );
|
||||||
safe_free( s_pInstCache );
|
safe_free( s_pInstCache );
|
||||||
|
|
Loading…
Reference in New Issue