diff --git a/ld/pd.ld b/ld/pd.ld index c6ed4bbf3..bfa3f8766 100644 --- a/ld/pd.ld +++ b/ld/pd.ld @@ -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) { diff --git a/src/lib/boot.c b/src/lib/boot.c index 8d45fbdec..184080cf7 100644 --- a/src/lib/boot.c +++ b/src/lib/boot.c @@ -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--) { diff --git a/src/lib/main.c b/src/lib/main.c index 0bc8ea61b..8bd48d417 100644 --- a/src/lib/main.c +++ b/src/lib/main.c @@ -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); diff --git a/src/lib/tlb.s b/src/lib/tlb.s index 25467e8bc..2a8561231 100644 --- a/src/lib/tlb.s +++ b/src/lib/tlb.s @@ -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 diff --git a/src/lib/vm.c b/src/lib/vm.c index f5f64ffb3..80ec311cc 100644 --- a/src/lib/vm.c +++ b/src/lib/vm.c @@ -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; diff --git a/src/preamble/preamble.s b/src/preamble/preamble.s index 05bbe8487..f34ddafa6 100644 --- a/src/preamble/preamble.s +++ b/src/preamble/preamble.s @@ -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