From 6cd7d2f29ec1d96ae21b0c36cedb0f209c90f3e1 Mon Sep 17 00:00:00 2001 From: Elliot Nunn Date: Fri, 6 Jul 2018 21:44:52 +0800 Subject: [PATCH] looks good --- Internal/NKPublic.a | 2 +- NanoKernel/NKLegacyVM.s | 26 +++++++++++++------------- NanoKernel/NKReset.s | 26 ++++++++++++-------------- NanoKernel/NKSoftInt.s | 1 - NanoKernel/NanoKernel.s | 20 +++++++++++++++++++- 5 files changed, 45 insertions(+), 30 deletions(-) diff --git a/Internal/NKPublic.a b/Internal/NKPublic.a index 9d87e98..5e4d81c 100644 --- a/Internal/NKPublic.a +++ b/Internal/NKPublic.a @@ -635,7 +635,7 @@ PTEGMask ds.l 1 ; 6a0 HTABORG ds.l 1 ; 6a4 VMLogicalPages ds.l 1 ; 6a8 ; set at init and changed by VMInit TotalPhysicalPages ds.l 1 ; 6ac ; does not take into acct maximum MacOS memory -FlatPageListPtr ds.l 1 ; 6b0 ; VM puts this in system heap +PARPageListPtr ds.l 1 ; 6b0 ; VM puts this in system heap VMMaxVirtualPages ds.l 1 ; 6b4 ; always 5fffe000, even with VM on CpuSpecificBytes CpuSpecificByte1 ds.b 1 ; 6b8 ; seems to contain flags (set from PVR & tbl by Init.s) diff --git a/NanoKernel/NKLegacyVM.s b/NanoKernel/NKLegacyVM.s index 1dc7d91..24e1df7 100644 --- a/NanoKernel/NKLegacyVM.s +++ b/NanoKernel/NKLegacyVM.s @@ -124,14 +124,14 @@ VMReturn ; OUTSIDE REFERER DeclareVMCall 0, VMInit VMInit ; OUTSIDE REFERER - lwz r7, KDP.FlatPageListPtr(r1) ; check that zero seg isn't empty + lwz r7, KDP.PARPageListPtr(r1) ; check that zero seg isn't empty lwz r8, KDP.PARPerSegmentPLEPtrs + 0(r1) cmpw r7, r8 bne VMReturn1 stw r4, KDP.VMLogicalPages(r1) ; resize PAR - stw r5, KDP.FlatPageListPtr(r1) ; where did NK find this??? + stw r5, KDP.PARPageListPtr(r1) ; where did NK find this??? lwz r6, 0x05e8(r1) li r5, 0x00 @@ -197,7 +197,7 @@ VMInit_0x110 lwz r7, KDP.TotalPhysicalPages(r1) cmpw r4, r7 bnel VMPanic - lwz r5, KDP.FlatPageListPtr(r1) + lwz r5, KDP.PARPageListPtr(r1) lwz r4, KDP.VMLogicalPages(r1) andi. r7, r5, 0xfff @@ -227,7 +227,7 @@ VMInit_0x110 srwi r7, r5, 12 bl major_0x09c9c - stw r9, KDP.FlatPageListPtr(r1) + stw r9, KDP.PARPageListPtr(r1) mr r15, r9 srwi r7, r5, 12 add r7, r7, r6 @@ -263,7 +263,7 @@ VMInit_0x1ec ori r16, r9, 0x21 stwx r16, r15, r6 bne VMInit_0x1ec - lwz r15, KDP.FlatPageListPtr(r1) + lwz r15, KDP.PARPageListPtr(r1) srwi r7, r5, 10 add r15, r15, r7 lwz r5, KDP.VMLogicalPages(r1) @@ -295,7 +295,7 @@ VMInit_0x250 ble VMInit_0x250 lwz r6, 0x05e8(r1) lwz r9, KDP.VMLogicalPages(r1) - lwz r15, KDP.FlatPageListPtr(r1) + lwz r15, KDP.PARPageListPtr(r1) VMInit_0x288 lwz r8, 0x0000(r6) @@ -321,7 +321,7 @@ VMInit_Fail lwz r7, KDP.TotalPhysicalPages(r1) lwz r8, KDP.PARPerSegmentPLEPtrs + 0(r1) stw r7, KDP.VMLogicalPages(r1) - stw r8, KDP.FlatPageListPtr(r1) + stw r8, KDP.PARPageListPtr(r1) b VMReturn @@ -436,7 +436,7 @@ VMIsUnmodified ; OUTSIDE REFERER VMLRU ; OUTSIDE REFERER rlwinm. r9, r9, 2, 0, 29 - lwz r15, KDP.FlatPageListPtr(r1) + lwz r15, KDP.PARPageListPtr(r1) lwz r14, KDP.HTABORG(r1) add r15, r15, r9 srwi r4, r9, 2 @@ -691,7 +691,7 @@ VMMarkUndefined ; OUTSIDE REFERER bge VMReturnMinus1 bgt cr1, VMReturnMinus1 bgt cr2, VMReturnMinus1 - lwz r15, KDP.FlatPageListPtr(r1) + lwz r15, KDP.PARPageListPtr(r1) slwi r8, r7, 2 li r7, 0x01 @@ -797,7 +797,7 @@ VMShouldClean ; OUTSIDE REFERER DeclareVMCall 25, VMAllocateMemory VMAllocateMemory ; OUTSIDE REFERER - lwz r7, KDP.FlatPageListPtr(r1) + lwz r7, KDP.PARPageListPtr(r1) lwz r8, KDP.PARPerSegmentPLEPtrs + 0(r1) cmpwi cr6, r5, 0x00 cmpw cr7, r7, r8 @@ -877,7 +877,7 @@ VMAllocateMemory_0xf4 stw r8, KDP.SystemInfo + NKSystemInfo.LogicalMemorySize(r1) addi r14, r1, 120 - lwz r15, KDP.FlatPageListPtr(r1) + lwz r15, KDP.PARPageListPtr(r1) li r8, 0 addi r7, r7, -0x01 ori r8, r8, 0xffff @@ -900,7 +900,7 @@ VMAllocateMemory_0x34c VMAllocateMemory_0x2e8 lwz r16, 0x0000(r15) lwz r7, KDP.TotalPhysicalPages(r1) - lwz r8, KDP.FlatPageListPtr(r1) + lwz r8, KDP.PARPageListPtr(r1) slwi r7, r7, 2 add r7, r7, r8 slwi r8, r5, 2 @@ -936,7 +936,7 @@ VMAllocateMemory_0x324 GetPARPageInfo ; OUTSIDE REFERER cmplw cr4, r4, r9 ;r9 is VMMaxVirtualPages by convention - lwz r15, KDP.FlatPageListPtr(r1) + lwz r15, KDP.PARPageListPtr(r1) slwi r8, r4, 2 bge cr4, GetPARPageInfo_0x40 diff --git a/NanoKernel/NKReset.s b/NanoKernel/NKReset.s index a0cbabc..91e539b 100755 --- a/NanoKernel/NKReset.s +++ b/NanoKernel/NKReset.s @@ -4,16 +4,16 @@ ; These registers will be used throughout -rCI set rCI +rCI set r26 lwz rCI, KDP.PA_ConfigInfo(r1) -rNK set rNK +rNK set r25 lwz rNK, KDP.PA_NanoKernelCode(r1) -rPgMap set rPgMap +rPgMap set r18 lwz rPgMap, KDP.PA_PageMapStart(r1) -rXER set rXER +rXER set r17 mfxer rXER @@ -54,16 +54,16 @@ rAlt set r8 stw r23, VecTable.ISIVector(rSys) stw r23, VecTable.ISIVector(rAlt) - lbz r22, NKConfigurationInfo.InterruptHandlerKind(rAlt) + lbz r22, NKConfigurationInfo.InterruptHandlerKind(rCI) cmpwi r22, 0 - _kaddr r24, rNK, IntForEmulator_1 + _kaddr r23, rNK, IntForEmulator_1 beq @chosenIntHandler cmpwi r22, 1 - _kaddr r24, rNK, IntForEmulator_2 + _kaddr r23, rNK, IntForEmulator_2 beq @chosenIntHandler cmpwi r22, 2 - _kaddr r24, rNK, IntForEmulator_3 + _kaddr r23, rNK, IntForEmulator_3 beq @chosenIntHandler @chosenIntHandler @@ -93,10 +93,6 @@ rAlt set r8 stw r23, VecTable.SyscallVector(rSys) stw r23, VecTable.SyscallVector(rAlt) - _kaddr r23, rNK, IntPerfMonitor - stw r23, VecTable.PerfMonitorVector(rSys) - stw r23, VecTable.PerfMonitorVector(rAlt) - _kaddr r23, rNK, IntTrace stw r23, VecTable.TraceVector(rSys) stw r23, VecTable.TraceVector(rAlt) @@ -242,14 +238,14 @@ CopyPageMap lwz r8, NKConfigurationInfo.PageMapKDPOffset(rCI) add r8, rPgMap, r8 lwz r23, PageMapEntry.PBaseAndFlags(r8) - rlwimi r23, r19, 0, 0, 0xFFFFF000 + rlwimi r23, r19, 0, 0xFFFFF000 stw r23, PageMapEntry.PBaseAndFlags(r8) lwz r19, KDP.PA_EmulatorData(r1) lwz r8, NKConfigurationInfo.PageMapEDPOffset(rCI) add r8, rPgMap, r8 lwz r23, PageMapEntry.PBaseAndFlags(r8) - rlwimi r23, r19, 0, 0, 0xFFFFF000 + rlwimi r23, r19, 0, 0xFFFFF000 stw r23, PageMapEntry.PBaseAndFlags(r8) @@ -410,6 +406,8 @@ CreatePARInPageMap addi r29, r1, KDP.PARPerSegmentPLEPtrs - 4 ; where to save per-segment PLE ptr addi r19, r1, KDP.SegMap32SupInit - 8 ; which part of PageMap to update + stw r21, KDP.PARPageListPtr(r1) + @next_segment cmplwi r22, 0xffff ; continue (bgt) while there are still pages left diff --git a/NanoKernel/NKSoftInt.s b/NanoKernel/NKSoftInt.s index 4ce7248..bcbf203 100644 --- a/NanoKernel/NKSoftInt.s +++ b/NanoKernel/NKSoftInt.s @@ -210,7 +210,6 @@ KCallPrioritizeInterrupts ; Move registers from CB to EWA, and Thud. - align kIntAlign KCallallSystemCrash stw r0, EWA.r0(r1) diff --git a/NanoKernel/NanoKernel.s b/NanoKernel/NanoKernel.s index 7af9141..b2cedd0 100644 --- a/NanoKernel/NanoKernel.s +++ b/NanoKernel/NanoKernel.s @@ -31,7 +31,25 @@ SchSwitchSpace CauseNotification FDPEmulateInstruction ReturnFromExceptionFastPath - +IntAlignment +IntDecrementerAlternate +IntDecrementerSystem +IntDSI +IntForEmulator_1 +IntForEmulator_2 +IntForEmulator_3 +IntFPUnavail +IntISI +IntMachineCheck +IntPerfMonitor +KCallReturnFromException +KCallSystemCrash +KCallThud +KCallVMDispatch +MemRetryDSI +MemRetryMachineCheck +PagingFlushTLB +PagingFunc2 org 0x23AC IntReturn