Disable virtual memory

This commit is contained in:
Ryan Dwyer
2022-11-05 22:28:58 +10:00
parent 489ec9043d
commit 0e82be8a0e
6 changed files with 14 additions and 104 deletions
+4 -3
View File
@@ -167,7 +167,7 @@ SECTIONS
PLACEHOLDER_SEGMENT(libzip, ROMALLOCATION_LIB)
__rompos = ROM_SIZE * 1024 * 1024;
__rampos = 0x70001050;
__rampos = 0x80001050;
BEGIN_SEG(lib) SUBALIGN(0x10)
{
@@ -244,7 +244,8 @@ SECTIONS
*/
__savedrompos = __rompos;
__rampos = 0x70200000;
__savedrampos = __rampos;
__rampos = 0x80200000;
__rompos = _datazipSegmentRomEnd;
BEGIN_SEG(inflate)
@@ -268,7 +269,7 @@ SECTIONS
PLACEHOLDER_SEGMENT(gamezip, ROMALLOCATION_GAME)
__rompos = __savedrompos;
__rampos = 0x7f000000;
__rampos = __savedrampos;
BEGIN_SEG(game)
{
+3 -3
View File
@@ -101,9 +101,9 @@ void bootPhase1(void)
inflatelen = (s32) &_inflateSegmentRomEnd - (s32) &_inflateSegmentRomStart;
copylen = datacomplen + inflatelen;
libram = (u32 *) ((u32) &_libSegmentStart + 0x2000);
libzipram = (u32 *) 0x70280000;
dataziprom = (u8 *) ((s32) &_datazipSegmentRomStart | 0x70000000);
datazipram = (u8 *) (0x70200000 - datacomplen);
libzipram = (u32 *) 0x80280000;
dataziprom = (u8 *) ((s32) &_datazipSegmentRomStart | 0x80000000);
datazipram = (u8 *) (0x80200000 - datacomplen);
dataram = (u32) &_dataSegmentStart;
for (i = copylen - 1; i >= 0; i--) {
+2 -2
View File
@@ -136,7 +136,7 @@ extern u8 _accessingpakSegmentRomStart;
extern u8 _accessingpakSegmentRomEnd;
extern u8 _copyrightSegmentRomStart;
extern u8 _copyrightSegmentRomEnd;
extern u8 _bssSegmentEnd;
extern u8 _gameSegmentEnd;
#if VERSION >= VERSION_NTSC_1_0
/**
@@ -342,7 +342,7 @@ void mainInit(void)
argSetString(" -ml0 -me0 -mgfx100 -mvtx50 -mt700 -ma400");
}
start = (u8 *) PHYS_TO_K0(osVirtualToPhysical(&_bssSegmentEnd));
start = (u8 *) PHYS_TO_K0(osVirtualToPhysical(&_gameSegmentEnd));
end = g_VmMarker;
mempSetHeap(start, end - start);
-16
View File
@@ -53,22 +53,6 @@ glabel var8008d268
* Sets up TLB index 0 (0x70000000), then calls bootPhase1.
*/
glabel tlbInit
li $t0, OS_PM_4M
mtc0 $t0, C0_PAGEMASK
lui $t0, 0x7000
mtc0 $t0, C0_ENTRYHI
addiu $t0, $zero, 0x1f
mtc0 $t0, C0_ENTRYLO0
lui $t0, 0x1
ori $t0, $t0, 0x1f
mtc0 $t0, C0_ENTRYLO1
addiu $t0, $zero, 0
mtc0 $t0, C0_INX
nop
tlbwi
nop
nop
nop
lui $t0, %hi(bootPhase1)
addiu $t0, $t0, %lo(bootPhase1)
jr $t0
+3 -78
View File
@@ -804,74 +804,17 @@ void vmInit(void)
rzipInit();
if (bootGetMemSize() <= 0x400000) {
u32 t8;
u32 sp1474;
u32 stackstart;
u32 *ptr;
g_Is4Mb = true;
stackstart = STACK_START - 8;
g_VmNumPages = (s32)((&_gameSegmentEnd - &_gameSegmentStart) + (PAGE_SIZE - 1)) / PAGE_SIZE;
g_VmRamEnd = 0x7f000000 + PAGE_SIZE * g_VmNumPages;
g_VmStateTableEnd = stackstart;
gameseg = (u8 *) (stackstart - g_VmNumPages * 8);
g_VmStateTable = (u32 *) gameseg;
t8 = (u32) (((u32) &_gameSegmentEnd - (u32) &_gameSegmentStart) + (PAGE_SIZE - 1)) / PAGE_SIZE;
sp1474 = t8 + 1;
g_VmZipTable = (u32 *) ((u32) ((u32 *)gameseg - (sp1474 + 4)) & ~0xf);
// Load gamezips pointer list
dmaExec(g_VmZipTable, (u32) &_gamezipSegmentRomStart, ALIGN16((sp1474 + 1) << 2));
// Make pointers absolute instead of relative to their segment
for (i = 0; i < sp1474; i++) { // s0
g_VmZipTable[i] += (u32) &_gamezipSegmentRomStart;
}
// Find the size of the biggest compressed zip
maxsize = 0;
for (i = 0; i < sp1474 - 1; i++) { // s0
u32 size = g_VmZipTable[i + 1] - g_VmZipTable[i];
if (size > maxsize) {
maxsize = size;
}
}
maxsize += 0x40;
maxsize &= ~0xf;
g_VmZipBuffer = (u32) g_VmZipTable - maxsize;
g_VmZipBuffer &= ~0xf;
gameseg = (u8 *) (g_VmZipBuffer - MAX_LOADED_PAGES * PAGE_SIZE);
gameseg -= (u32) gameseg & 0x1fff;
var8008ae20 = (u32) gameseg;
g_VmMarker = gameseg;
tlb000010a4();
ptr = g_VmStateTable;
statetablelen = (g_VmNumPages * 8) >> 2;
for (i = 0; i < statetablelen; i++) { // s1
ptr[i] = 0;
}
tlb0000113c();
while (1);
} else {
// Expansion pak is being used
g_Is4Mb = false;
t8 = (u32)((&_gameSegmentEnd - &_gameSegmentStart) + (PAGE_SIZE - 1)) / PAGE_SIZE;
s7 = (u8 *)(STACK_START - 8);
gameseg = (u8 *) ((u32) (s7 - (u8 *) ALIGN64((u32) &_gameSegmentEnd - (u32) &_gameSegmentStart)) & 0xfffe0000);
gameseg = &_gameSegmentStart;
s5 = (u32 *) (((u32) gameseg - ((t8 + 5) << 2)) & ~0xf);
g_VmMarker = gameseg;
g_VmMarker = s7;
sp1474 = t8 + 1;
// Load gamezips pointer list
@@ -891,24 +834,6 @@ void vmInit(void)
dmaExec(chunkbuffer, s5[i], ALIGN16(s5[i + 1] - s5[i])); \
s2 += rzipInflate(zip, s2, sp68);
}
// This loop sets the following TLB entries:
// entry 2: 0x7f000000 to 0x7f010000 and 0x7f010000 to 0x7f020000
// entry 3: 0x7f020000 to 0x7f030000 and 0x7f030000 to 0x7f040000
// ...
// entry 14: 0x7f1a0000 to 0x7f1b0000 and 0x7f1b0000 to 0x7f1c0000
s1 = (u8 *) 0x7f000000;
i = 2;
while (gameseg <= s7) {
osMapTLB(i, OS_PM_64K, s1,
osVirtualToPhysical((void *) gameseg),
osVirtualToPhysical((void *) (gameseg + 0x10000)), -1);
gameseg += 0x20000;
s1 += 0x20000;
i++;
}
}
g_VmNumTlbMisses = 0;
+2 -2
View File
@@ -19,8 +19,8 @@ glabel preamble
sw $zero, 4($t0)
bnez $t1, .L00001010
addi $t0, $t0, 8
lui $t2, %hi(tlbInitFromPreamble)
lui $t2, %hi(tlbInit)
lui $sp, 0x8000
addiu $t2, $t2, %lo(tlbInitFromPreamble)
addiu $t2, $t2, %lo(tlbInit)
jr $t2
addiu $sp, $sp, 0xf10