looks good

This commit is contained in:
Elliot Nunn 2018-07-06 21:44:52 +08:00
parent fbfcb55c89
commit 6cd7d2f29e
5 changed files with 45 additions and 30 deletions

View File

@ -635,7 +635,7 @@ PTEGMask ds.l 1 ; 6a0
HTABORG ds.l 1 ; 6a4 HTABORG ds.l 1 ; 6a4
VMLogicalPages ds.l 1 ; 6a8 ; set at init and changed by VMInit 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 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 VMMaxVirtualPages ds.l 1 ; 6b4 ; always 5fffe000, even with VM on
CpuSpecificBytes CpuSpecificBytes
CpuSpecificByte1 ds.b 1 ; 6b8 ; seems to contain flags (set from PVR & tbl by Init.s) CpuSpecificByte1 ds.b 1 ; 6b8 ; seems to contain flags (set from PVR & tbl by Init.s)

View File

@ -124,14 +124,14 @@ VMReturn ; OUTSIDE REFERER
DeclareVMCall 0, VMInit DeclareVMCall 0, VMInit
VMInit ; OUTSIDE REFERER 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) lwz r8, KDP.PARPerSegmentPLEPtrs + 0(r1)
cmpw r7, r8 cmpw r7, r8
bne VMReturn1 bne VMReturn1
stw r4, KDP.VMLogicalPages(r1) ; resize PAR 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) lwz r6, 0x05e8(r1)
li r5, 0x00 li r5, 0x00
@ -197,7 +197,7 @@ VMInit_0x110
lwz r7, KDP.TotalPhysicalPages(r1) lwz r7, KDP.TotalPhysicalPages(r1)
cmpw r4, r7 cmpw r4, r7
bnel VMPanic bnel VMPanic
lwz r5, KDP.FlatPageListPtr(r1) lwz r5, KDP.PARPageListPtr(r1)
lwz r4, KDP.VMLogicalPages(r1) lwz r4, KDP.VMLogicalPages(r1)
andi. r7, r5, 0xfff andi. r7, r5, 0xfff
@ -227,7 +227,7 @@ VMInit_0x110
srwi r7, r5, 12 srwi r7, r5, 12
bl major_0x09c9c bl major_0x09c9c
stw r9, KDP.FlatPageListPtr(r1) stw r9, KDP.PARPageListPtr(r1)
mr r15, r9 mr r15, r9
srwi r7, r5, 12 srwi r7, r5, 12
add r7, r7, r6 add r7, r7, r6
@ -263,7 +263,7 @@ VMInit_0x1ec
ori r16, r9, 0x21 ori r16, r9, 0x21
stwx r16, r15, r6 stwx r16, r15, r6
bne VMInit_0x1ec bne VMInit_0x1ec
lwz r15, KDP.FlatPageListPtr(r1) lwz r15, KDP.PARPageListPtr(r1)
srwi r7, r5, 10 srwi r7, r5, 10
add r15, r15, r7 add r15, r15, r7
lwz r5, KDP.VMLogicalPages(r1) lwz r5, KDP.VMLogicalPages(r1)
@ -295,7 +295,7 @@ VMInit_0x250
ble VMInit_0x250 ble VMInit_0x250
lwz r6, 0x05e8(r1) lwz r6, 0x05e8(r1)
lwz r9, KDP.VMLogicalPages(r1) lwz r9, KDP.VMLogicalPages(r1)
lwz r15, KDP.FlatPageListPtr(r1) lwz r15, KDP.PARPageListPtr(r1)
VMInit_0x288 VMInit_0x288
lwz r8, 0x0000(r6) lwz r8, 0x0000(r6)
@ -321,7 +321,7 @@ VMInit_Fail
lwz r7, KDP.TotalPhysicalPages(r1) lwz r7, KDP.TotalPhysicalPages(r1)
lwz r8, KDP.PARPerSegmentPLEPtrs + 0(r1) lwz r8, KDP.PARPerSegmentPLEPtrs + 0(r1)
stw r7, KDP.VMLogicalPages(r1) stw r7, KDP.VMLogicalPages(r1)
stw r8, KDP.FlatPageListPtr(r1) stw r8, KDP.PARPageListPtr(r1)
b VMReturn b VMReturn
@ -436,7 +436,7 @@ VMIsUnmodified ; OUTSIDE REFERER
VMLRU ; OUTSIDE REFERER VMLRU ; OUTSIDE REFERER
rlwinm. r9, r9, 2, 0, 29 rlwinm. r9, r9, 2, 0, 29
lwz r15, KDP.FlatPageListPtr(r1) lwz r15, KDP.PARPageListPtr(r1)
lwz r14, KDP.HTABORG(r1) lwz r14, KDP.HTABORG(r1)
add r15, r15, r9 add r15, r15, r9
srwi r4, r9, 2 srwi r4, r9, 2
@ -691,7 +691,7 @@ VMMarkUndefined ; OUTSIDE REFERER
bge VMReturnMinus1 bge VMReturnMinus1
bgt cr1, VMReturnMinus1 bgt cr1, VMReturnMinus1
bgt cr2, VMReturnMinus1 bgt cr2, VMReturnMinus1
lwz r15, KDP.FlatPageListPtr(r1) lwz r15, KDP.PARPageListPtr(r1)
slwi r8, r7, 2 slwi r8, r7, 2
li r7, 0x01 li r7, 0x01
@ -797,7 +797,7 @@ VMShouldClean ; OUTSIDE REFERER
DeclareVMCall 25, VMAllocateMemory DeclareVMCall 25, VMAllocateMemory
VMAllocateMemory ; OUTSIDE REFERER VMAllocateMemory ; OUTSIDE REFERER
lwz r7, KDP.FlatPageListPtr(r1) lwz r7, KDP.PARPageListPtr(r1)
lwz r8, KDP.PARPerSegmentPLEPtrs + 0(r1) lwz r8, KDP.PARPerSegmentPLEPtrs + 0(r1)
cmpwi cr6, r5, 0x00 cmpwi cr6, r5, 0x00
cmpw cr7, r7, r8 cmpw cr7, r7, r8
@ -877,7 +877,7 @@ VMAllocateMemory_0xf4
stw r8, KDP.SystemInfo + NKSystemInfo.LogicalMemorySize(r1) stw r8, KDP.SystemInfo + NKSystemInfo.LogicalMemorySize(r1)
addi r14, r1, 120 addi r14, r1, 120
lwz r15, KDP.FlatPageListPtr(r1) lwz r15, KDP.PARPageListPtr(r1)
li r8, 0 li r8, 0
addi r7, r7, -0x01 addi r7, r7, -0x01
ori r8, r8, 0xffff ori r8, r8, 0xffff
@ -900,7 +900,7 @@ VMAllocateMemory_0x34c
VMAllocateMemory_0x2e8 VMAllocateMemory_0x2e8
lwz r16, 0x0000(r15) lwz r16, 0x0000(r15)
lwz r7, KDP.TotalPhysicalPages(r1) lwz r7, KDP.TotalPhysicalPages(r1)
lwz r8, KDP.FlatPageListPtr(r1) lwz r8, KDP.PARPageListPtr(r1)
slwi r7, r7, 2 slwi r7, r7, 2
add r7, r7, r8 add r7, r7, r8
slwi r8, r5, 2 slwi r8, r5, 2
@ -936,7 +936,7 @@ VMAllocateMemory_0x324
GetPARPageInfo ; OUTSIDE REFERER GetPARPageInfo ; OUTSIDE REFERER
cmplw cr4, r4, r9 ;r9 is VMMaxVirtualPages by convention cmplw cr4, r4, r9 ;r9 is VMMaxVirtualPages by convention
lwz r15, KDP.FlatPageListPtr(r1) lwz r15, KDP.PARPageListPtr(r1)
slwi r8, r4, 2 slwi r8, r4, 2
bge cr4, GetPARPageInfo_0x40 bge cr4, GetPARPageInfo_0x40

View File

@ -4,16 +4,16 @@
; These registers will be used throughout ; These registers will be used throughout
rCI set rCI rCI set r26
lwz rCI, KDP.PA_ConfigInfo(r1) lwz rCI, KDP.PA_ConfigInfo(r1)
rNK set rNK rNK set r25
lwz rNK, KDP.PA_NanoKernelCode(r1) lwz rNK, KDP.PA_NanoKernelCode(r1)
rPgMap set rPgMap rPgMap set r18
lwz rPgMap, KDP.PA_PageMapStart(r1) lwz rPgMap, KDP.PA_PageMapStart(r1)
rXER set rXER rXER set r17
mfxer rXER mfxer rXER
@ -54,16 +54,16 @@ rAlt set r8
stw r23, VecTable.ISIVector(rSys) stw r23, VecTable.ISIVector(rSys)
stw r23, VecTable.ISIVector(rAlt) stw r23, VecTable.ISIVector(rAlt)
lbz r22, NKConfigurationInfo.InterruptHandlerKind(rAlt) lbz r22, NKConfigurationInfo.InterruptHandlerKind(rCI)
cmpwi r22, 0 cmpwi r22, 0
_kaddr r24, rNK, IntForEmulator_1 _kaddr r23, rNK, IntForEmulator_1
beq @chosenIntHandler beq @chosenIntHandler
cmpwi r22, 1 cmpwi r22, 1
_kaddr r24, rNK, IntForEmulator_2 _kaddr r23, rNK, IntForEmulator_2
beq @chosenIntHandler beq @chosenIntHandler
cmpwi r22, 2 cmpwi r22, 2
_kaddr r24, rNK, IntForEmulator_3 _kaddr r23, rNK, IntForEmulator_3
beq @chosenIntHandler beq @chosenIntHandler
@chosenIntHandler @chosenIntHandler
@ -93,10 +93,6 @@ rAlt set r8
stw r23, VecTable.SyscallVector(rSys) stw r23, VecTable.SyscallVector(rSys)
stw r23, VecTable.SyscallVector(rAlt) stw r23, VecTable.SyscallVector(rAlt)
_kaddr r23, rNK, IntPerfMonitor
stw r23, VecTable.PerfMonitorVector(rSys)
stw r23, VecTable.PerfMonitorVector(rAlt)
_kaddr r23, rNK, IntTrace _kaddr r23, rNK, IntTrace
stw r23, VecTable.TraceVector(rSys) stw r23, VecTable.TraceVector(rSys)
stw r23, VecTable.TraceVector(rAlt) stw r23, VecTable.TraceVector(rAlt)
@ -242,14 +238,14 @@ CopyPageMap
lwz r8, NKConfigurationInfo.PageMapKDPOffset(rCI) lwz r8, NKConfigurationInfo.PageMapKDPOffset(rCI)
add r8, rPgMap, r8 add r8, rPgMap, r8
lwz r23, PageMapEntry.PBaseAndFlags(r8) lwz r23, PageMapEntry.PBaseAndFlags(r8)
rlwimi r23, r19, 0, 0, 0xFFFFF000 rlwimi r23, r19, 0, 0xFFFFF000
stw r23, PageMapEntry.PBaseAndFlags(r8) stw r23, PageMapEntry.PBaseAndFlags(r8)
lwz r19, KDP.PA_EmulatorData(r1) lwz r19, KDP.PA_EmulatorData(r1)
lwz r8, NKConfigurationInfo.PageMapEDPOffset(rCI) lwz r8, NKConfigurationInfo.PageMapEDPOffset(rCI)
add r8, rPgMap, r8 add r8, rPgMap, r8
lwz r23, PageMapEntry.PBaseAndFlags(r8) lwz r23, PageMapEntry.PBaseAndFlags(r8)
rlwimi r23, r19, 0, 0, 0xFFFFF000 rlwimi r23, r19, 0, 0xFFFFF000
stw r23, PageMapEntry.PBaseAndFlags(r8) stw r23, PageMapEntry.PBaseAndFlags(r8)
@ -410,6 +406,8 @@ CreatePARInPageMap
addi r29, r1, KDP.PARPerSegmentPLEPtrs - 4 ; where to save per-segment PLE ptr 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 addi r19, r1, KDP.SegMap32SupInit - 8 ; which part of PageMap to update
stw r21, KDP.PARPageListPtr(r1)
@next_segment @next_segment
cmplwi r22, 0xffff ; continue (bgt) while there are still pages left cmplwi r22, 0xffff ; continue (bgt) while there are still pages left

View File

@ -210,7 +210,6 @@ KCallPrioritizeInterrupts
; Move registers from CB to EWA, and Thud. ; Move registers from CB to EWA, and Thud.
align kIntAlign
KCallallSystemCrash KCallallSystemCrash
stw r0, EWA.r0(r1) stw r0, EWA.r0(r1)

View File

@ -31,7 +31,25 @@ SchSwitchSpace
CauseNotification CauseNotification
FDPEmulateInstruction FDPEmulateInstruction
ReturnFromExceptionFastPath 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 org 0x23AC
IntReturn IntReturn