mirror of
https://github.com/elliotnunn/powermac-rom.git
synced 2024-09-27 12:56:33 +00:00
Lots of work on Address Spaces
This commit is contained in:
parent
b725df3cf7
commit
6c199998f0
@ -90,9 +90,21 @@ ContextBlock record 0,INCR
|
|||||||
Flags ds.l 1 ; 000 ; (SPAC) copied from kdp by CreateTask
|
Flags ds.l 1 ; 000 ; (SPAC) copied from kdp by CreateTask
|
||||||
Enables ds.l 1 ; 004
|
Enables ds.l 1 ; 004
|
||||||
|
|
||||||
|
org 0x40
|
||||||
|
SavedFlags ds.l 1 ; 040 ; from before exception
|
||||||
|
|
||||||
|
org 0x44
|
||||||
|
SavedEnables ds.l 1 ; 044 ; from before exception
|
||||||
|
|
||||||
|
org 0x4c
|
||||||
|
ExceptionHandler ds.l 1 ; 04c
|
||||||
|
|
||||||
org 0x5c
|
org 0x5c
|
||||||
LA_EmulatorKernelTrapTable ds.l 1
|
LA_EmulatorKernelTrapTable ds.l 1
|
||||||
|
|
||||||
|
org 0x74
|
||||||
|
SRR0 ds.l 1 ; 074
|
||||||
|
|
||||||
org 0x84
|
org 0x84
|
||||||
LA_EmulatorEntry ds.l 1 ; 084 ; Entry pt of emulator; set by NK Init.s
|
LA_EmulatorEntry ds.l 1 ; 084 ; Entry pt of emulator; set by NK Init.s
|
||||||
|
|
||||||
|
@ -127,16 +127,16 @@ kFlag5 equ 5
|
|||||||
kFlag6 equ 6
|
kFlag6 equ 6
|
||||||
kFlag7 equ 7
|
kFlag7 equ 7
|
||||||
kFlag8 equ 8
|
kFlag8 equ 8
|
||||||
kFlag9 equ 9
|
kFlagTakesAllExceptions equ 9
|
||||||
kFlag10 equ 10
|
kFlag10 equ 10
|
||||||
kFlag11 equ 11
|
kFlag11 equ 11
|
||||||
kFlag12 equ 12 ; set for idle1, idle2
|
kFlag12 equ 12 ; set for idle1, idle2
|
||||||
kFlag13 equ 13
|
kFlag13 equ 13
|
||||||
kFlag14 equ 14 ; set for blue, idle1
|
kFlagNotDebuggable equ 14 ; set for blue, idle1
|
||||||
kFlagBlue equ 15
|
kFlagBlue equ 15
|
||||||
kFlag16 equ 16
|
kFlag16 equ 16
|
||||||
kFlag17 equ 17
|
kFlag17 equ 17
|
||||||
kFlag18 equ 18
|
kFlagPageFaulted equ 18
|
||||||
kFlag19 equ 19
|
kFlag19 equ 19
|
||||||
kFlag20 equ 20
|
kFlag20 equ 20
|
||||||
kFlagPerfMon equ 21 ; set by MPMarkPMFTask, means perf monitor
|
kFlagPerfMon equ 21 ; set by MPMarkPMFTask, means perf monitor
|
||||||
@ -175,7 +175,7 @@ CodeFaultCtr ds.l 1 ; 0e0 ; these two only climb when VM is on
|
|||||||
DataFaultCtr ds.l 1 ; 0e4
|
DataFaultCtr ds.l 1 ; 0e4
|
||||||
PreemptCtr ds.l 1 ; 0e8
|
PreemptCtr ds.l 1 ; 0e8
|
||||||
SomeLabelField ds.l 1 ; 0ec
|
SomeLabelField ds.l 1 ; 0ec
|
||||||
YellowVecTblPtr ds.l 1 ; 0f0
|
VecBase ds.l 1 ; 0f0
|
||||||
ExceptionHandlerID ds.l 1 ; 0f4 ; a queue
|
ExceptionHandlerID ds.l 1 ; 0f4 ; a queue
|
||||||
ErrToReturnIfIDie ds.l 1 ; 0f8
|
ErrToReturnIfIDie ds.l 1 ; 0f8
|
||||||
ds.l 1 ; 0fc
|
ds.l 1 ; 0fc
|
||||||
@ -447,7 +447,8 @@ kSignature equ 'SPAC'
|
|||||||
|
|
||||||
ID ds.l 1 ; 00
|
ID ds.l 1 ; 00
|
||||||
Signature ds.l 1 ; 04
|
Signature ds.l 1 ; 04
|
||||||
ds.l 1 ; 08
|
Flags ds.l 1 ; 08
|
||||||
|
kFlag30 equ 30
|
||||||
TaskCount ds.l 1 ; 0c ; incremented by CreateTask
|
TaskCount ds.l 1 ; 0c ; incremented by CreateTask
|
||||||
RsrvList ds.l 4 ; 10:20 ; LLL
|
RsrvList ds.l 4 ; 10:20 ; LLL
|
||||||
AreaList ds.l 4 ; 20:30 ; LLL
|
AreaList ds.l 4 ; 20:30 ; LLL
|
||||||
@ -561,6 +562,9 @@ kIDClass equ 11
|
|||||||
kFirstID equ 0x000b0001
|
kFirstID equ 0x000b0001
|
||||||
kSignature equ 'AREA'
|
kSignature equ 'AREA'
|
||||||
|
|
||||||
|
kPLEFlagIsInHTAB equ 20 ; bits 0-19 = HTAB offset if set, else physical page
|
||||||
|
kPLEFlagHasPhysPage equ 31
|
||||||
|
|
||||||
;_______________________
|
;_______________________
|
||||||
; Fields
|
; Fields
|
||||||
;_______________________
|
;_______________________
|
||||||
@ -594,7 +598,7 @@ LLL ds.l 4 ; 54:64 ; member of address space
|
|||||||
ds.l 1 ; 64
|
ds.l 1 ; 64
|
||||||
PageSize ds.l 1 ; 68 ; always 4k, the size of a PPC page
|
PageSize ds.l 1 ; 68 ; always 4k, the size of a PPC page
|
||||||
AddressSpacePtr ds.l 1 ; 6c
|
AddressSpacePtr ds.l 1 ; 6c
|
||||||
ContigPTETemplate ds.l 1 ; 70 ; in contig areas, acts as PTE template for every page
|
ContigPTETemplate ds.l 1 ; 70 ; in contig areas, acts as PTE template for every page (whole Area is same page)
|
||||||
PagedPTETemplate ds.l 1 ; 74 ; when paged area is created this fills PageMapArray
|
PagedPTETemplate ds.l 1 ; 74 ; when paged area is created this fills PageMapArray
|
||||||
AlignmentMask ds.l 1 ; 78 ; bit mask that LogicalBase is aligned to
|
AlignmentMask ds.l 1 ; 78 ; bit mask that LogicalBase is aligned to
|
||||||
DefaultAlignmentMask ds.l 1 ; 7c ; always 0xFFFFF000 (page alignment)
|
DefaultAlignmentMask ds.l 1 ; 7c ; always 0xFFFFF000 (page alignment)
|
||||||
@ -607,6 +611,9 @@ FenceLLL ds.l 4 ; 90:a0 ; function unknown, id is 'fenc'
|
|||||||
Size equ *
|
Size equ *
|
||||||
endr
|
endr
|
||||||
|
|
||||||
|
; Page List Entry bits:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -159,11 +159,11 @@ Pending68kInt ds.w 1 ; -43c ; used when Sch interrupts blue task (-1 means "no
|
|||||||
_43a ds.w 1 ; -43a
|
_43a ds.w 1 ; -43a
|
||||||
DecClockRateHzCopy ds.l 1 ; -438 ; copied by Init.s
|
DecClockRateHzCopy ds.l 1 ; -438 ; copied by Init.s
|
||||||
OtherTimerQueuePtr ds.l 1 ; -434 ; unsigned timer queue in the pool, set by InitTMRQs
|
OtherTimerQueuePtr ds.l 1 ; -434 ; unsigned timer queue in the pool, set by InitTMRQs
|
||||||
FreePageCount ds.l 1 ; -430 ; zeroed by InitFreeList
|
FreePageCount ds.l 1 ; -430 ; zeroed by InitFreePageList
|
||||||
UnheldFreePageCount ds.l 1 ; -42c
|
UnheldFreePageCount ds.l 1 ; -42c
|
||||||
ExternalHandlerID ds.l 1 ; -428 ; notification for PIH to bump
|
ExternalHandlerID ds.l 1 ; -428 ; notification for PIH to bump
|
||||||
SystemAddressSpaceID ds.l 1 ; -424
|
SystemAddressSpaceID ds.l 1 ; -424
|
||||||
_420 ds.l 1 ; -420
|
AgerID ds.l 1 ; -420
|
||||||
blueProcessPtr ds.l 1 ; -41c ; physical ptr to first type-1 struct created
|
blueProcessPtr ds.l 1 ; -41c ; physical ptr to first type-1 struct created
|
||||||
ThermalHandlerID ds.l 1 ; -418 ; is a Note struct
|
ThermalHandlerID ds.l 1 ; -418 ; is a Note struct
|
||||||
PMFHandlerID ds.l 1 ; -414 ; also a Note struct
|
PMFHandlerID ds.l 1 ; -414 ; also a Note struct
|
||||||
@ -173,7 +173,7 @@ _408 ds.l 1 ; -408
|
|||||||
_404 ds.l 1 ; -404
|
_404 ds.l 1 ; -404
|
||||||
_400 ds.l 1 ; -400
|
_400 ds.l 1 ; -400
|
||||||
OtherSystemAddrSpcPtr ds.l 1 ; -3fc
|
OtherSystemAddrSpcPtr ds.l 1 ; -3fc
|
||||||
OtherSystemAddrSpcPtr2 ds.l 1 ; -3f8 ; copied from the one above by InitFreeList
|
OtherSystemAddrSpcPtr2 ds.l 1 ; -3f8 ; copied from the one above by InitFreePageList
|
||||||
ZeroedByInitFreeList3 ds.l 1 ; -3f4
|
ZeroedByInitFreeList3 ds.l 1 ; -3f4
|
||||||
_3f0 ds.l 1 ; -3f0
|
_3f0 ds.l 1 ; -3f0
|
||||||
_3ec ds.l 1 ; -3ec
|
_3ec ds.l 1 ; -3ec
|
||||||
@ -580,9 +580,9 @@ NCBCacheLA3 ds.l 1 ; 358
|
|||||||
NCBCachePA3 ds.l 1 ; 35c
|
NCBCachePA3 ds.l 1 ; 35c
|
||||||
NCBPointerCacheEnd
|
NCBPointerCacheEnd
|
||||||
|
|
||||||
YellowVecBase ds.l 48 ; 360:420 ; used to ignore illegal AltiVec insns by Init.s
|
VecBaseSystem ds.l 48 ; 360:420 ; when 68k emulator is running, *or* any MTask
|
||||||
OrangeVecBase ds.l 48 ; 420:4e0
|
VecBaseAlternate ds.l 48 ; 420:4e0 ; native PowerPC in blue task
|
||||||
RedVecBase ds.l 48 ; 4e0:5a0
|
VecBaseTranslation ds.l 48 ; 4e0:5a0 ; "FDP" instruction emulation
|
||||||
OldKDP ds.l 1 ; 5a0 ; gotten from the old SPRG0
|
OldKDP ds.l 1 ; 5a0 ; gotten from the old SPRG0
|
||||||
OtherFreeThing ds.l 1 ; 5a4
|
OtherFreeThing ds.l 1 ; 5a4
|
||||||
TopOfFreePages ds.l 1 ; 5a8 ; gotten from the old SPRG0
|
TopOfFreePages ds.l 1 ; 5a8 ; gotten from the old SPRG0
|
||||||
@ -634,10 +634,10 @@ PageAttributeInit ds.l 1 ; 688 ; defaults for page table entries (see ConfigInf
|
|||||||
ds.l 1 ; 69c
|
ds.l 1 ; 69c
|
||||||
PTEGMask ds.l 1 ; 6a0
|
PTEGMask ds.l 1 ; 6a0
|
||||||
HTABORG ds.l 1 ; 6a4
|
HTABORG ds.l 1 ; 6a4
|
||||||
PrimaryAddrRangePages 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
|
FlatPageListPtr ds.l 1 ; 6b0 ; VM puts this in system heap
|
||||||
VMMaxVirtualPages ds.l 1 ; 6b4 ; size of main contiguous segment?
|
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)
|
||||||
CpuSpecificByte2 ds.b 1 ; 6b9 ; probably not flags (set in same way)
|
CpuSpecificByte2 ds.b 1 ; 6b9 ; probably not flags (set in same way)
|
||||||
|
@ -17,7 +17,7 @@ NKFiles =
|
|||||||
{NKDir}NKMPCalls.s ¶
|
{NKDir}NKMPCalls.s ¶
|
||||||
{NKDir}NKSync.s ¶
|
{NKDir}NKSync.s ¶
|
||||||
{NKDir}NKTasks.s ¶
|
{NKDir}NKTasks.s ¶
|
||||||
{NKDir}NKAddressSpaceMPCalls.s カ
|
{NKDir}NKAddressSpaces.s ¶
|
||||||
{NKDir}NKPoolAllocator.s ¶
|
{NKDir}NKPoolAllocator.s ¶
|
||||||
{NKDir}NKTimers.s ¶
|
{NKDir}NKTimers.s ¶
|
||||||
{NKDir}NKScheduler.s ¶
|
{NKDir}NKScheduler.s ¶
|
||||||
|
@ -16,7 +16,7 @@ NKDebug
|
|||||||
|
|
||||||
beq @already_physical
|
beq @already_physical
|
||||||
li r9, 0
|
li r9, 0
|
||||||
bl V2P ; takes page EA in r8, r9=0, returns page PA in r17
|
bl SpaceL2PUsingBATs ; LogicalPage *r8, MPAddressSpace *r9 // PhysicalPage *r17
|
||||||
beq @fail
|
beq @fail
|
||||||
rlwimi r8, r17, 0, 0, 19
|
rlwimi r8, r17, 0, 0, 19
|
||||||
@already_physical
|
@already_physical
|
||||||
|
File diff suppressed because it is too large
Load Diff
4801
NanoKernel/NKAddressSpaces.s
Normal file
4801
NanoKernel/NKAddressSpaces.s
Normal file
File diff suppressed because it is too large
Load Diff
@ -198,13 +198,13 @@ FinishInitBuiltin
|
|||||||
|
|
||||||
llabel r8, IgnoreSoftwareInt
|
llabel r8, IgnoreSoftwareInt
|
||||||
add r8, r8, r9
|
add r8, r8, r9
|
||||||
stw r8, KDP.YellowVecBase + VecTable.ProgramIntVector(r1)
|
stw r8, KDP.VecBaseSystem + VecTable.ProgramIntVector(r1)
|
||||||
|
|
||||||
llabel r8, HandlePerfMonitorInt
|
llabel r8, HandlePerfMonitorInt
|
||||||
add r8, r8, r9
|
add r8, r8, r9
|
||||||
stw r8, KDP.YellowVecBase + VecTable.PerfMonitorVector(r1)
|
stw r8, KDP.VecBaseSystem + VecTable.PerfMonitorVector(r1)
|
||||||
|
|
||||||
addi r8, r1, KDP.YellowVecBase
|
addi r8, r1, KDP.VecBaseSystem
|
||||||
mtsprg 3, r8
|
mtsprg 3, r8
|
||||||
|
|
||||||
|
|
||||||
@ -366,21 +366,21 @@ InitHighLevel
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
; Fill with Panics: Yellow, Orange, Red (KDP)
|
; Fill the old-style KDP vector tables, and also two new PSA ones,
|
||||||
; Violet, Blue (PSA)
|
; with panics
|
||||||
|
|
||||||
llabel r23, panic
|
llabel r23, panic
|
||||||
add r23, r23, r25
|
add r23, r23, r25
|
||||||
|
|
||||||
addi r8, r1, KDP.YellowVecBase
|
addi r8, r1, KDP.VecBaseSystem
|
||||||
li r22, VecTable.Size
|
li r22, VecTable.Size
|
||||||
bl wordfill
|
bl wordfill
|
||||||
|
|
||||||
addi r8, r1, KDP.OrangeVecBase
|
addi r8, r1, KDP.VecBaseAlternate
|
||||||
li r22, VecTable.Size
|
li r22, VecTable.Size
|
||||||
bl wordfill
|
bl wordfill
|
||||||
|
|
||||||
addi r8, r1, KDP.RedVecBase
|
addi r8, r1, KDP.VecBaseTranslation
|
||||||
li r22, VecTable.Size
|
li r22, VecTable.Size
|
||||||
bl wordfill
|
bl wordfill
|
||||||
|
|
||||||
@ -405,12 +405,13 @@ InitHighLevel
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
; Activate Yellow and fill Yellow and Orange (KDP)
|
; Populate System and Alternate Context vector tables.
|
||||||
|
; Activate System Context vector table (will enter 68k emu soon).
|
||||||
|
|
||||||
addi r9, r1, KDP.YellowVecBase
|
addi r9, r1, KDP.VecBaseSystem
|
||||||
mtsprg 3, r9
|
mtsprg 3, r9
|
||||||
|
|
||||||
addi r8, r1, KDP.OrangeVecBase
|
addi r8, r1, KDP.VecBaseAlternate
|
||||||
|
|
||||||
llabel r23, panic
|
llabel r23, panic
|
||||||
add r23, r23, r25
|
add r23, r23, r25
|
||||||
@ -432,14 +433,15 @@ InitHighLevel
|
|||||||
stw r23, VecTable.ISIVector(r9)
|
stw r23, VecTable.ISIVector(r9)
|
||||||
stw r23, VecTable.ISIVector(r8)
|
stw r23, VecTable.ISIVector(r8)
|
||||||
|
|
||||||
; Difference: Yellow seems more likely to reach PIH
|
; Here is the difference between the System and Alternate
|
||||||
llabel r23, IntExternalYellow
|
; vector tables
|
||||||
|
llabel r23, IntExternalSystem
|
||||||
add r23, r23, r25
|
add r23, r23, r25
|
||||||
stw r23, VecTable.ExternalIntVector(r9) ; yellow
|
stw r23, VecTable.ExternalIntVector(r9)
|
||||||
|
|
||||||
llabel r23, IntExternalOrange
|
llabel r23, IntExternalAlternate
|
||||||
add r23, r23, r25
|
add r23, r23, r25
|
||||||
stw r23, VecTable.ExternalIntVector(r8) ; orange
|
stw r23, VecTable.ExternalIntVector(r8)
|
||||||
|
|
||||||
llabel r23, IntAlignment
|
llabel r23, IntAlignment
|
||||||
add r23, r23, r25
|
add r23, r23, r25
|
||||||
@ -490,9 +492,9 @@ InitHighLevel
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
; Fill Red (KDP), used while were emulating some instructions
|
; Fill the Translation vector table
|
||||||
|
|
||||||
addi r8, r1, KDP.RedVecBase
|
addi r8, r1, KDP.VecBaseTranslation
|
||||||
|
|
||||||
llabel r23, panic
|
llabel r23, panic
|
||||||
add r23, r23, r25
|
add r23, r23, r25
|
||||||
@ -502,7 +504,7 @@ InitHighLevel
|
|||||||
add r23, r23, r25
|
add r23, r23, r25
|
||||||
stw r23, VecTable.MachineCheckVector(r8)
|
stw r23, VecTable.MachineCheckVector(r8)
|
||||||
|
|
||||||
llabel r23, IntDSIOtherOther
|
llabel r23, IntDSITranslation
|
||||||
add r23, r23, r25
|
add r23, r23, r25
|
||||||
stw r23, VecTable.DSIVector(r8)
|
stw r23, VecTable.DSIVector(r8)
|
||||||
|
|
||||||
@ -1026,7 +1028,7 @@ SetProcessorFlags
|
|||||||
|
|
||||||
; Initialize the kernel queues. They are called:
|
; Initialize the kernel queues. They are called:
|
||||||
;
|
;
|
||||||
; - PHYS (free list, in KDP, by InitFreeList)
|
; - PHYS (free list, in KDP, by InitFreePageList)
|
||||||
; - DLYQ (in KDP, by me)
|
; - DLYQ (in KDP, by me)
|
||||||
; - DBUG (in KDP, by me)
|
; - DBUG (in KDP, by me)
|
||||||
; - PAGQ (in KDP, has ID, by me)
|
; - PAGQ (in KDP, has ID, by me)
|
||||||
@ -1037,7 +1039,7 @@ SetProcessorFlags
|
|||||||
; Free list in hardcoded KDP location
|
; Free list in hardcoded KDP location
|
||||||
; ARG KernelData *r1
|
; ARG KernelData *r1
|
||||||
; CLOB r8, r9
|
; CLOB r8, r9
|
||||||
bl InitFreeList
|
bl InitFreePageList
|
||||||
|
|
||||||
|
|
||||||
; Delay queue in hardcoded KDP location
|
; Delay queue in hardcoded KDP location
|
||||||
@ -1132,7 +1134,7 @@ SetProcessorFlags
|
|||||||
li r8, 2
|
li r8, 2
|
||||||
stb r8, Task.State(r31)
|
stb r8, Task.State(r31)
|
||||||
|
|
||||||
lisori r8, 0x30028 ; (Z>>Task.kFlag14) | (Z>>Task.kFlagBlue) | (Z>>Task.kFlag26) | (Z>>Task.kFlag28)
|
lisori r8, 0x30028 ; (Z>>Task.kFlagNotDebuggable) | (Z>>Task.kFlagBlue) | (Z>>Task.kFlag26) | (Z>>Task.kFlag28)
|
||||||
stw r8, Task.Flags(r31)
|
stw r8, Task.Flags(r31)
|
||||||
|
|
||||||
li r8, 200
|
li r8, 200
|
||||||
@ -1226,7 +1228,7 @@ SetProcessorFlags
|
|||||||
stw r8, Task.Name(r31)
|
stw r8, Task.Name(r31)
|
||||||
|
|
||||||
|
|
||||||
lisori r8, 0xA0040 ; (Z>>Task.kFlag12) | (Z>>Task.kFlag14) | (Z>>Task.kFlag25)
|
lisori r8, 0xA0040 ; (Z>>Task.kFlag12) | (Z>>Task.kFlagNotDebuggable) | (Z>>Task.kFlag25)
|
||||||
stw r8, Task.Flags(r31)
|
stw r8, Task.Flags(r31)
|
||||||
|
|
||||||
; For the scheduler
|
; For the scheduler
|
||||||
@ -1626,7 +1628,7 @@ PrimeFreeListFromBanks
|
|||||||
@loop
|
@loop
|
||||||
lwz r8, 0(r29)
|
lwz r8, 0(r29)
|
||||||
rlwinm r8, r8, 0, 0, 19 ; physical base of page
|
rlwinm r8, r8, 0, 0, 19 ; physical base of page
|
||||||
bl free_list_add_page
|
bl FreePageListPush ; PhysicalPage *r8
|
||||||
|
|
||||||
subi r17, r17, 1
|
subi r17, r17, 1
|
||||||
subi r29, r29, 4
|
subi r29, r29, 4
|
||||||
@ -1661,7 +1663,7 @@ PrimeFreeListFromSystemHeap
|
|||||||
@stupidloop
|
@stupidloop
|
||||||
rlwinm r8, r18, 0, 0, 19
|
rlwinm r8, r18, 0, 0, 19
|
||||||
|
|
||||||
bl free_list_add_page
|
bl FreePageListPush ; PhysicalPage *r8
|
||||||
addi r17, r17, -0x01
|
addi r17, r17, -0x01
|
||||||
addi r18, r18, 0x1000
|
addi r18, r18, 0x1000
|
||||||
cmpwi r17, 0x00
|
cmpwi r17, 0x00
|
||||||
@ -1685,7 +1687,7 @@ DonePrimingFreeList
|
|||||||
|
|
||||||
_log 'VMLogicalPages: '
|
_log 'VMLogicalPages: '
|
||||||
|
|
||||||
lwz r8, 0x06a8(r1) ; kdp.phys_pages
|
lwz r8, KDP.VMLogicalPages(r1)
|
||||||
mr r8, r8
|
mr r8, r8
|
||||||
bl Printw
|
bl Printw
|
||||||
|
|
||||||
@ -1764,7 +1766,7 @@ ReconcileMemory
|
|||||||
|
|
||||||
; The above, divided by 4096
|
; The above, divided by 4096
|
||||||
srwi r19, r19, 12
|
srwi r19, r19, 12
|
||||||
stw r19, KDP.PrimaryAddrRangePages(r1)
|
stw r19, KDP.VMLogicalPages(r1)
|
||||||
|
|
||||||
addi r29, r1, KDP.FlatPageListSegPtrs - 4
|
addi r29, r1, KDP.FlatPageListSegPtrs - 4
|
||||||
addi r19, r1, KDP.SegMaps - 8
|
addi r19, r1, KDP.SegMaps - 8
|
||||||
@ -1794,7 +1796,7 @@ ReconcileMemory
|
|||||||
; Number of pages in that last segment
|
; Number of pages in that last segment
|
||||||
sth r22, 0x0002(r8)
|
sth r22, 0x0002(r8)
|
||||||
|
|
||||||
lwz r17, KDP.PrimaryAddrRangePages(r1)
|
lwz r17, KDP.VMLogicalPages(r1)
|
||||||
lwz r18, KDP.TotalPhysicalPages(r1)
|
lwz r18, KDP.TotalPhysicalPages(r1)
|
||||||
stw r17, KDP.TotalPhysicalPages(r1)
|
stw r17, KDP.TotalPhysicalPages(r1)
|
||||||
|
|
||||||
@ -1815,7 +1817,7 @@ ReconcileMemory
|
|||||||
|
|
||||||
@loop
|
@loop
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bl free_list_add_page
|
bl FreePageListPush ; PhysicalPage *r8
|
||||||
addi r31, r31, 4096
|
addi r31, r31, 4096
|
||||||
subi r18, r18, 1
|
subi r18, r18, 1
|
||||||
cmpwi r18, 0
|
cmpwi r18, 0
|
||||||
@ -1827,7 +1829,7 @@ ReconcileMemory
|
|||||||
|
|
||||||
; Create Areas (an abstract NKv2 structure) from the Trampoline's PageMap
|
; Create Areas (an abstract NKv2 structure) from the Trampoline's PageMap
|
||||||
|
|
||||||
bl convert_pmdts_to_areas
|
bl CreateAreasFromPageMap
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -1870,7 +1872,7 @@ finish_old_world
|
|||||||
addi r29, r1, 0x5e8
|
addi r29, r1, 0x5e8
|
||||||
bl PagingFunc2
|
bl PagingFunc2
|
||||||
bl PagingFlushTLB
|
bl PagingFlushTLB
|
||||||
bl convert_pmdts_to_areas
|
bl CreateAreasFromPageMap
|
||||||
bl ProbePerfMonitor
|
bl ProbePerfMonitor
|
||||||
lwz r27, 0x0630(r1)
|
lwz r27, 0x0630(r1)
|
||||||
lwz r27, 0x0094(r27)
|
lwz r27, 0x0094(r27)
|
||||||
@ -1931,7 +1933,7 @@ setup_0x11f0
|
|||||||
|
|
||||||
_log 'Nanokernel replaced. Returning to boot process^n'
|
_log 'Nanokernel replaced. Returning to boot process^n'
|
||||||
|
|
||||||
addi r9, r1, KDP.OrangeVecBase
|
addi r9, r1, KDP.VecBaseAlternate
|
||||||
mtsprg 3, r9
|
mtsprg 3, r9
|
||||||
|
|
||||||
; r1 = kdp
|
; r1 = kdp
|
||||||
@ -1954,7 +1956,7 @@ CancelReplacement
|
|||||||
lwz r8, KDP.OldKDP(r1)
|
lwz r8, KDP.OldKDP(r1)
|
||||||
mtsprg 0, r8
|
mtsprg 0, r8
|
||||||
|
|
||||||
addi r9, r8, KDP.OrangeVecBase
|
addi r9, r8, KDP.VecBaseAlternate
|
||||||
mtsprg 3, r9
|
mtsprg 3, r9
|
||||||
|
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -299,7 +299,7 @@ MPCall_0 ; OUTSIDE REFERER
|
|||||||
|
|
||||||
; Fail if this page is outside of the PAR
|
; Fail if this page is outside of the PAR
|
||||||
rlwinm. r4, r3, 20, 12, 31
|
rlwinm. r4, r3, 20, 12, 31
|
||||||
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
lwz r9, KDP.VMLogicalPages(r1)
|
||||||
beq ReturnMPCallOOM
|
beq ReturnMPCallOOM
|
||||||
cmplw r4, r9
|
cmplw r4, r9
|
||||||
bge ReturnMPCallOOM
|
bge ReturnMPCallOOM
|
||||||
@ -1408,9 +1408,11 @@ KCStopScheduling ; OUTSIDE REFERER
|
|||||||
lbz r17, 0x0019(r31)
|
lbz r17, 0x0019(r31)
|
||||||
cmpwi r17, 0x00
|
cmpwi r17, 0x00
|
||||||
beq KCStopScheduling_0x94
|
beq KCStopScheduling_0x94
|
||||||
lwz r17, 0x0064(r31)
|
|
||||||
oris r17, r17, 0x80
|
lwz r17, Task.Flags(r31)
|
||||||
stw r17, 0x0064(r31)
|
_bset r17, r17, Task.kFlag8
|
||||||
|
stw r17, Task.Flags(r31)
|
||||||
|
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bl SchTaskUnrdy
|
bl SchTaskUnrdy
|
||||||
li r17, 0x00
|
li r17, 0x00
|
||||||
@ -1494,7 +1496,7 @@ NKxprintf ; OUTSIDE REFERER
|
|||||||
mr r8, r3
|
mr r8, r3
|
||||||
beq NKxprintf_0x1c
|
beq NKxprintf_0x1c
|
||||||
li r9, 0x00
|
li r9, 0x00
|
||||||
bl V2P
|
bl SpaceL2PUsingBATs ; LogicalPage *r8, MPAddressSpace *r9 // PhysicalPage *r17
|
||||||
beq NKxprintf_0x24
|
beq NKxprintf_0x24
|
||||||
rlwimi r8, r17, 0, 0, 19
|
rlwimi r8, r17, 0, 0, 19
|
||||||
|
|
||||||
@ -1969,13 +1971,13 @@ MPCall_115_0x94
|
|||||||
crmove 30, 2
|
crmove 30, 2
|
||||||
beq MPCall_115_0xd0
|
beq MPCall_115_0xd0
|
||||||
li r9, 0x00
|
li r9, 0x00
|
||||||
bl MPCall_95_0x45c
|
bl SpaceL2PIgnoringBATs ; LogicalPage *r8, MPAddressSpace *r9 // PhysicalPage *r17
|
||||||
beq ReleaseAndReturnMPCallOOM
|
beq ReleaseAndReturnMPCallOOM
|
||||||
add r8, r4, r5
|
add r8, r4, r5
|
||||||
li r9, 0x00
|
li r9, 0x00
|
||||||
addi r8, r8, -0x01
|
addi r8, r8, -0x01
|
||||||
mr r30, r8
|
mr r30, r8
|
||||||
bl MPCall_95_0x45c
|
bl SpaceL2PIgnoringBATs ; LogicalPage *r8, MPAddressSpace *r9 // PhysicalPage *r17
|
||||||
beq ReleaseAndReturnMPCallOOM
|
beq ReleaseAndReturnMPCallOOM
|
||||||
|
|
||||||
MPCall_115_0xd0
|
MPCall_115_0xd0
|
||||||
@ -1997,7 +1999,7 @@ MPCall_115_0xe0
|
|||||||
beq MPCall_115_0x11c
|
beq MPCall_115_0x11c
|
||||||
mr r27, r16
|
mr r27, r16
|
||||||
li r9, 0x00
|
li r9, 0x00
|
||||||
bl MPCall_95_0x45c
|
bl SpaceL2PIgnoringBATs ; LogicalPage *r8, MPAddressSpace *r9 // PhysicalPage *r17
|
||||||
beq ReleaseAndReturnMPCallOOM
|
beq ReleaseAndReturnMPCallOOM
|
||||||
mr r26, r17
|
mr r26, r17
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ PagingFunc1 ; OUTSIDE REFERER
|
|||||||
|
|
||||||
@_fc
|
@_fc
|
||||||
mr r8, r27
|
mr r8, r27
|
||||||
bl MPCall_95_0x1e4
|
bl SpaceGetPagePLE ; LogicalPage *r8, Area *r31 // PLE *r30, notfound cr0.eq
|
||||||
lwz r28, 0x0000(r30)
|
lwz r28, 0x0000(r30)
|
||||||
mr r26, r30
|
mr r26, r30
|
||||||
mr r8, r27
|
mr r8, r27
|
||||||
@ -380,7 +380,7 @@ PagingFunc1 ; OUTSIDE REFERER
|
|||||||
mr r8, r28
|
mr r8, r28
|
||||||
bgt @_600
|
bgt @_600
|
||||||
bgt Local_Panic
|
bgt Local_Panic
|
||||||
bl MPCall_95_0x1e4
|
bl SpaceGetPagePLE ; LogicalPage *r8, Area *r31 // PLE *r30, notfound cr0.eq
|
||||||
mr r26, r30
|
mr r26, r30
|
||||||
beql @_88
|
beql @_88
|
||||||
|
|
||||||
|
@ -1272,7 +1272,7 @@ major_0x142dc_0x184
|
|||||||
rlwimi r11, r27, 24, 29, 29
|
rlwimi r11, r27, 24, 29, 29
|
||||||
beq+ major_0x142dc_0x1bc
|
beq+ major_0x142dc_0x1bc
|
||||||
lwz r10, 0x00fc(r6)
|
lwz r10, 0x00fc(r6)
|
||||||
rlwinm r27, r27, 0, 9, 7
|
_bclr r27, r27, Task.kFlag8
|
||||||
stw r27, 0x0064(r31)
|
stw r27, 0x0064(r31)
|
||||||
|
|
||||||
major_0x142dc_0x1bc
|
major_0x142dc_0x1bc
|
||||||
@ -1332,7 +1332,7 @@ _SchPreempt
|
|||||||
stw r6, Task.ContextBlockPtr(r31)
|
stw r6, Task.ContextBlockPtr(r31)
|
||||||
mfsprg r8, 3
|
mfsprg r8, 3
|
||||||
stw r16, Task.Flags(r31)
|
stw r16, Task.Flags(r31)
|
||||||
stw r8, Task.YellowVecTblPtr(r31)
|
stw r8, Task.VecBase(r31)
|
||||||
|
|
||||||
|
|
||||||
; Spam its context block
|
; Spam its context block
|
||||||
@ -1432,7 +1432,7 @@ _SchPreempt
|
|||||||
lwz r11, 0x00a4(r6)
|
lwz r11, 0x00a4(r6)
|
||||||
lwz r8, 0x00f0(r30)
|
lwz r8, 0x00f0(r30)
|
||||||
rlwimi r11, r27, 24, 29, 29
|
rlwimi r11, r27, 24, 29, 29
|
||||||
rlwinm r27, r27, 0, 9, 7
|
_bclr r27, r27, Task.kFlag8
|
||||||
mtsprg 3, r8
|
mtsprg 3, r8
|
||||||
stw r27, Task.Flags(r30)
|
stw r27, Task.Flags(r30)
|
||||||
|
|
||||||
@ -1478,9 +1478,9 @@ _SchPreempt
|
|||||||
|
|
||||||
lwz r6, KDP.PA_ECB(r1)
|
lwz r6, KDP.PA_ECB(r1)
|
||||||
|
|
||||||
addi r26, r1, KDP.YellowVecBase
|
addi r26, r1, KDP.VecBaseSystem
|
||||||
mtsprg 3, r26
|
mtsprg 3, r26
|
||||||
stw r26, Task.YellowVecTblPtr(r30)
|
stw r26, Task.VecBase(r30)
|
||||||
|
|
||||||
stw r6, EWA.PA_ContextBlock(r19)
|
stw r6, EWA.PA_ContextBlock(r19)
|
||||||
stw r6, Task.ContextBlockPtr(r30)
|
stw r6, Task.ContextBlockPtr(r30)
|
||||||
@ -2042,7 +2042,7 @@ NewCpuEntryPoint
|
|||||||
stw r7, EWA.Flags(r14)
|
stw r7, EWA.Flags(r14)
|
||||||
stw r28, EWA.Enables(r14)
|
stw r28, EWA.Enables(r14)
|
||||||
|
|
||||||
lwz r8, Task.YellowVecTblPtr(r31)
|
lwz r8, Task.VecBase(r31)
|
||||||
mtsprg 3, r8
|
mtsprg 3, r8
|
||||||
|
|
||||||
lwz r10, ContextBlock.CodePtr(r6)
|
lwz r10, ContextBlock.CodePtr(r6)
|
||||||
|
@ -11,10 +11,12 @@ Local_Panic set *
|
|||||||
; ARG ProcessID r3
|
; ARG ProcessID r3
|
||||||
; RET OSStatus r3, TaskID r10
|
; RET OSStatus r3, TaskID r10
|
||||||
|
|
||||||
|
; kMPCreateTaskSuspendedMask is ignored?
|
||||||
|
|
||||||
DeclareMPCall 7, MPCall_7
|
DeclareMPCall 7, MPCall_7
|
||||||
|
|
||||||
MPCall_7 ; OUTSIDE REFERER
|
MPCall_7 ; OUTSIDE REFERER
|
||||||
rlwinm. r8, r5, 0, 31, 28
|
rlwinm. r8, r5, 0, ~0x00000006 ; kMPCreateTaskValidOptionsMask minus kMPCreateTaskSuspendedMask
|
||||||
bne ReturnMPCallOOM
|
bne ReturnMPCallOOM
|
||||||
|
|
||||||
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
|
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
|
||||||
@ -65,14 +67,14 @@ MPCall_7 ; OUTSIDE REFERER
|
|||||||
|
|
||||||
lwz r16, Task.Flags(r28)
|
lwz r16, Task.Flags(r28)
|
||||||
|
|
||||||
rlwinm. r8, r5, 0, 30, 30
|
rlwinm. r8, r5, 0, kMPCreateTaskTakesAllExceptionsMask
|
||||||
beq @noflag
|
beq @noflag
|
||||||
oris r16, r16, 0x40 ; Task.kFlag9
|
_bset r16, r16, Task.kFlagTakesAllExceptions
|
||||||
@noflag
|
@noflag
|
||||||
|
|
||||||
rlwinm. r8, r5, 0, 29, 29
|
rlwinm. r8, r5, 0, kMPCreateTaskNotDebuggableMask
|
||||||
beq @noflag2
|
beq @noflag2
|
||||||
oris r16, r16, 0x02 ; Task.kFlag14
|
_bset r16, r16, Task.kFlagNotDebuggable
|
||||||
@noflag2
|
@noflag2
|
||||||
|
|
||||||
stw r16, Task.Flags(r28)
|
stw r16, Task.Flags(r28)
|
||||||
@ -226,8 +228,8 @@ CreateTask
|
|||||||
lwz r16, PSA.UserModeMSR(r1)
|
lwz r16, PSA.UserModeMSR(r1)
|
||||||
stw r16, Task.ContextBlock + ContextBlock.MSR(r28)
|
stw r16, Task.ContextBlock + ContextBlock.MSR(r28)
|
||||||
|
|
||||||
addi r16, r1, KDP.YellowVecBase
|
addi r16, r1, KDP.VecBaseSystem
|
||||||
stw r16, Task.YellowVecTblPtr(r28)
|
stw r16, Task.VecBase(r28)
|
||||||
|
|
||||||
li r16, 0
|
li r16, 0
|
||||||
lwz r17, Task.NotificationPtr(r28)
|
lwz r17, Task.NotificationPtr(r28)
|
||||||
@ -790,7 +792,7 @@ ThrowTaskToDebugger ; OUTSIDE REFERER
|
|||||||
MPCall_58_0x114
|
MPCall_58_0x114
|
||||||
mtcr r29
|
mtcr r29
|
||||||
mr r28, r8
|
mr r28, r8
|
||||||
bc BO_IF, Task.kFlag14, MPCall_58_0x13c
|
bc BO_IF, Task.kFlagNotDebuggable, MPCall_58_0x13c
|
||||||
bc BO_IF, Task.kFlag20, MPCall_58_0x13c
|
bc BO_IF, Task.kFlag20, MPCall_58_0x13c
|
||||||
lwz r8, PSA._8e8(r1)
|
lwz r8, PSA._8e8(r1)
|
||||||
|
|
||||||
|
@ -285,7 +285,7 @@ FDP_023c
|
|||||||
|
|
||||||
FDP_024c
|
FDP_024c
|
||||||
li r8, 18
|
li r8, 18
|
||||||
b major_0x02980
|
b DataLikeException
|
||||||
|
|
||||||
|
|
||||||
FDP_0254 ; stswi
|
FDP_0254 ; stswi
|
||||||
@ -2122,10 +2122,10 @@ ProbePerfMonitor ; OUTSIDE REFERER
|
|||||||
|
|
||||||
; Temporarily disable program interrupts (leave old handler in r20)
|
; Temporarily disable program interrupts (leave old handler in r20)
|
||||||
lwz r21, KDP.PA_NanoKernelCode(r1)
|
lwz r21, KDP.PA_NanoKernelCode(r1)
|
||||||
lwz r20, KDP.YellowVecBase + VecTable.ProgramIntVector(r1)
|
lwz r20, KDP.VecBaseSystem + VecTable.ProgramIntVector(r1)
|
||||||
llabel r18, IgnoreSoftwareInt
|
llabel r18, IgnoreSoftwareInt
|
||||||
add r21, r18, r21
|
add r21, r18, r21
|
||||||
stw r21, KDP.YellowVecBase + VecTable.ProgramIntVector(r1)
|
stw r21, KDP.VecBaseSystem + VecTable.ProgramIntVector(r1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -2189,7 +2189,7 @@ ProbePerfMonitor ; OUTSIDE REFERER
|
|||||||
|
|
||||||
|
|
||||||
; Restore program interrupts
|
; Restore program interrupts
|
||||||
stw r20, KDP.YellowVecBase + VecTable.ProgramIntVector(r1)
|
stw r20, KDP.VecBaseSystem + VecTable.ProgramIntVector(r1)
|
||||||
|
|
||||||
|
|
||||||
; Test r23 and save
|
; Test r23 and save
|
||||||
@ -2351,7 +2351,7 @@ FDP_1354
|
|||||||
stw r9, 0x0ea0(r6)
|
stw r9, 0x0ea0(r6)
|
||||||
lwz r6, -0x0014(r1)
|
lwz r6, -0x0014(r1)
|
||||||
lwz r7, -0x0010(r1)
|
lwz r7, -0x0010(r1)
|
||||||
b major_0x02980_0x134
|
b CodeLikeException
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -3142,7 +3142,7 @@ FDP_1c40 ; OUTSIDE REFERER
|
|||||||
; r6 = saved at *(ewa + 0x18)
|
; r6 = saved at *(ewa + 0x18)
|
||||||
; sprg1 = saved at *(ewa + 4)
|
; sprg1 = saved at *(ewa + 4)
|
||||||
; rN (0,7,8,9,10,11,12,13, not r1) = saved at *(*(ewa - 0x14) + 0x104 + 8*N)
|
; rN (0,7,8,9,10,11,12,13, not r1) = saved at *(*(ewa - 0x14) + 0x104 + 8*N)
|
||||||
bl int_prepare
|
bl LoadInterruptRegisters
|
||||||
; r0 = 0
|
; r0 = 0
|
||||||
; r1 = *(ewa - 4)
|
; r1 = *(ewa - 4)
|
||||||
; r6 = kdp
|
; r6 = kdp
|
||||||
|
@ -93,7 +93,7 @@ VMDispatchTableEnd
|
|||||||
@noalt
|
@noalt
|
||||||
|
|
||||||
lwzx r8, r8, r7
|
lwzx r8, r8, r7
|
||||||
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
lwz r9, KDP.VMLogicalPages(r1)
|
||||||
add r8, r8, r7
|
add r8, r8, r7
|
||||||
mtlr r8
|
mtlr r8
|
||||||
bltlr
|
bltlr
|
||||||
@ -203,7 +203,7 @@ VMFinalInit ; OUTSIDE REFERER
|
|||||||
|
|
||||||
@loop
|
@loop
|
||||||
srwi r4, r31, 12
|
srwi r4, r31, 12
|
||||||
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
lwz r9, KDP.VMLogicalPages(r1)
|
||||||
bl GetPARPageInfo
|
bl GetPARPageInfo
|
||||||
bge cr4, @skip
|
bge cr4, @skip
|
||||||
bltl cr5, RemovePageFromTLB
|
bltl cr5, RemovePageFromTLB
|
||||||
@ -239,7 +239,7 @@ VMInit ; OUTSIDE REFERER
|
|||||||
cmpw r7, r8
|
cmpw r7, r8
|
||||||
bne VMReturn1
|
bne VMReturn1
|
||||||
|
|
||||||
stw r4, KDP.PrimaryAddrRangePages(r1) ; resize PAR
|
stw r4, KDP.VMLogicalPages(r1) ; resize PAR
|
||||||
|
|
||||||
stw r5, KDP.FlatPageListPtr(r1) ; where did NK find this???
|
stw r5, KDP.FlatPageListPtr(r1) ; where did NK find this???
|
||||||
|
|
||||||
@ -311,7 +311,7 @@ VMInit_0x110
|
|||||||
cmpw r4, r7
|
cmpw r4, r7
|
||||||
bnel Local_Panic
|
bnel Local_Panic
|
||||||
lwz r5, KDP.FlatPageListPtr(r1)
|
lwz r5, KDP.FlatPageListPtr(r1)
|
||||||
lwz r4, KDP.PrimaryAddrRangePages(r1)
|
lwz r4, KDP.VMLogicalPages(r1)
|
||||||
andi. r7, r5, 0xfff
|
andi. r7, r5, 0xfff
|
||||||
|
|
||||||
li r3, 0x02
|
li r3, 0x02
|
||||||
@ -354,7 +354,7 @@ VMInit_0x110
|
|||||||
li r3, 0x06
|
li r3, 0x06
|
||||||
bne VMInit_Fail
|
bne VMInit_Fail
|
||||||
|
|
||||||
stw r4, KDP.PrimaryAddrRangePages(r1)
|
stw r4, KDP.VMLogicalPages(r1)
|
||||||
lwz r8, -0x0020(r1)
|
lwz r8, -0x0020(r1)
|
||||||
slwi r7, r4, 12
|
slwi r7, r4, 12
|
||||||
stw r7, 0x0dc8(r8)
|
stw r7, 0x0dc8(r8)
|
||||||
@ -380,7 +380,7 @@ VMInit_0x1ec
|
|||||||
lwz r15, KDP.FlatPageListPtr(r1)
|
lwz r15, KDP.FlatPageListPtr(r1)
|
||||||
srwi r7, r5, 10
|
srwi r7, r5, 10
|
||||||
add r15, r15, r7
|
add r15, r15, r7
|
||||||
lwz r5, KDP.PrimaryAddrRangePages(r1)
|
lwz r5, KDP.VMLogicalPages(r1)
|
||||||
|
|
||||||
VMInit_0x218
|
VMInit_0x218
|
||||||
lwz r16, 0x0000(r15)
|
lwz r16, 0x0000(r15)
|
||||||
@ -411,7 +411,7 @@ VMInit_0x250
|
|||||||
sth r9, 0x0002(r3)
|
sth r9, 0x0002(r3)
|
||||||
sth r9, 0x000a(r3)
|
sth r9, 0x000a(r3)
|
||||||
lwz r6, 0x05e8(r1)
|
lwz r6, 0x05e8(r1)
|
||||||
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
lwz r9, KDP.VMLogicalPages(r1)
|
||||||
lwz r15, KDP.FlatPageListPtr(r1)
|
lwz r15, KDP.FlatPageListPtr(r1)
|
||||||
|
|
||||||
VMInit_0x288
|
VMInit_0x288
|
||||||
@ -451,7 +451,7 @@ VMInit_0x29c
|
|||||||
lwz r16, KDP.FlatPageListPtr(r1)
|
lwz r16, KDP.FlatPageListPtr(r1)
|
||||||
stw r16, Area.PageMapArrayPtr(r8)
|
stw r16, Area.PageMapArrayPtr(r8)
|
||||||
|
|
||||||
lwz r16, KDP.PrimaryAddrRangePages(r1)
|
lwz r16, KDP.VMLogicalPages(r1)
|
||||||
slwi r16, r16, 12
|
slwi r16, r16, 12
|
||||||
stw r16, Area.Length(r8)
|
stw r16, Area.Length(r8)
|
||||||
subi r16, r16, 1
|
subi r16, r16, 1
|
||||||
@ -475,7 +475,7 @@ VMInit_0x29c
|
|||||||
VMInit_Fail
|
VMInit_Fail
|
||||||
lwz r7, KDP.TotalPhysicalPages(r1)
|
lwz r7, KDP.TotalPhysicalPages(r1)
|
||||||
lwz r8, KDP.FlatPageListSegPtrs + 0(r1)
|
lwz r8, KDP.FlatPageListSegPtrs + 0(r1)
|
||||||
stw r7, KDP.PrimaryAddrRangePages(r1)
|
stw r7, KDP.VMLogicalPages(r1)
|
||||||
stw r8, KDP.FlatPageListPtr(r1)
|
stw r8, KDP.FlatPageListPtr(r1)
|
||||||
|
|
||||||
b VMReturn
|
b VMReturn
|
||||||
@ -498,7 +498,7 @@ VMExchangePages ; OUTSIDE REFERER
|
|||||||
mr r6, r15
|
mr r6, r15
|
||||||
mr r4, r5
|
mr r4, r5
|
||||||
mr r5, r16
|
mr r5, r16
|
||||||
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
lwz r9, KDP.VMLogicalPages(r1)
|
||||||
bl GetPARPageInfo
|
bl GetPARPageInfo
|
||||||
bge cr4, VMReturnMinus1
|
bge cr4, VMReturnMinus1
|
||||||
bgt cr5, VMReturnMinus1
|
bgt cr5, VMReturnMinus1
|
||||||
@ -548,7 +548,7 @@ VMGetPhysicalPage ; OUTSIDE REFERER
|
|||||||
VMGetPhysicalPage_0x28
|
VMGetPhysicalPage_0x28
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl SchRestoreStartingAtR14
|
bl SchRestoreStartingAtR14
|
||||||
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
lwz r9, KDP.VMLogicalPages(r1)
|
||||||
|
|
||||||
VMGetPhysicalPage_0x30
|
VMGetPhysicalPage_0x30
|
||||||
bl GetPARPageInfo
|
bl GetPARPageInfo
|
||||||
@ -578,8 +578,8 @@ getPTEntryGivenPage ; OUTSIDE REFERER
|
|||||||
beq getPTEntryGivenPage_0x3c
|
beq getPTEntryGivenPage_0x3c
|
||||||
bns cr7, getPTEntryGivenPage_0x3c
|
bns cr7, getPTEntryGivenPage_0x3c
|
||||||
bge cr5, getPTEntryGivenPage_0x3c
|
bge cr5, getPTEntryGivenPage_0x3c
|
||||||
bl MPCall_95_0x2e0
|
bl InvalPTE ; page *r8, PTE r16/r17, PTE *r18, PLE *r30 // PLEflags cr5-7
|
||||||
bl MPCall_95_0x334
|
bl SetPTE ; PTE r16/r17, PTE *r18
|
||||||
lwz r3, 0x0000(r30)
|
lwz r3, 0x0000(r30)
|
||||||
rlwimi r3, r17, 0, 0, 19
|
rlwimi r3, r17, 0, 0, 19
|
||||||
|
|
||||||
@ -591,7 +591,7 @@ getPTEntryGivenPage_0x3c
|
|||||||
getPTEntryGivenPage_0x48
|
getPTEntryGivenPage_0x48
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl SchRestoreStartingAtR14
|
bl SchRestoreStartingAtR14
|
||||||
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
lwz r9, KDP.VMLogicalPages(r1)
|
||||||
|
|
||||||
getPTEntryGivenPage_0x50
|
getPTEntryGivenPage_0x50
|
||||||
bl GetPARPageInfo
|
bl GetPARPageInfo
|
||||||
@ -654,8 +654,8 @@ major_0x08d88_0x74
|
|||||||
|
|
||||||
major_0x08d88_0x8c
|
major_0x08d88_0x8c
|
||||||
mr r8, r29
|
mr r8, r29
|
||||||
bl MPCall_95_0x1e4
|
bl SpaceGetPagePLE ; LogicalPage *r8, Area *r31 // PLE *r30, notfound cr0.eq
|
||||||
bl MPCall_95_0x2b0
|
bl GetPTEFromPLE ; PLE *r30 // PTE r16/r17, PTE *r18, PTEflags cr0, PLEflags cr5-7
|
||||||
mtlr r27
|
mtlr r27
|
||||||
crclr cr0_lt
|
crclr cr0_lt
|
||||||
crclr cr0_eq
|
crclr cr0_eq
|
||||||
@ -708,7 +708,7 @@ VMIsResident ; OUTSIDE REFERER
|
|||||||
VMIsResident_0x28
|
VMIsResident_0x28
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl SchRestoreStartingAtR14
|
bl SchRestoreStartingAtR14
|
||||||
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
lwz r9, KDP.VMLogicalPages(r1)
|
||||||
|
|
||||||
VMIsResident_0x30
|
VMIsResident_0x30
|
||||||
bl GetPARPageInfo
|
bl GetPARPageInfo
|
||||||
@ -1136,8 +1136,8 @@ VMMarkBacking ; OUTSIDE REFERER
|
|||||||
beq major_0x08d88_0xa8
|
beq major_0x08d88_0xa8
|
||||||
bns cr7, VMMarkBacking_0x30
|
bns cr7, VMMarkBacking_0x30
|
||||||
bge cr5, VMMarkBacking_0x30
|
bge cr5, VMMarkBacking_0x30
|
||||||
bl MPCall_95_0x2e0
|
bl InvalPTE ; page *r8, PTE r16/r17, PTE *r18, PLE *r30 // PLEflags cr5-7
|
||||||
bl MPCall_95_0x348
|
bl DeletePTE ; PTE *r18, PLE *r30
|
||||||
|
|
||||||
VMMarkBacking_0x30
|
VMMarkBacking_0x30
|
||||||
lwz r18, 0x0000(r30)
|
lwz r18, 0x0000(r30)
|
||||||
@ -1152,7 +1152,7 @@ VMMarkBacking_0x30
|
|||||||
VMMarkBacking_0x50
|
VMMarkBacking_0x50
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl SchRestoreStartingAtR14
|
bl SchRestoreStartingAtR14
|
||||||
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
lwz r9, KDP.VMLogicalPages(r1)
|
||||||
|
|
||||||
VMMarkBacking_0x58
|
VMMarkBacking_0x58
|
||||||
bl GetPARPageInfo
|
bl GetPARPageInfo
|
||||||
@ -1255,7 +1255,7 @@ VMMarkResident ; OUTSIDE REFERER
|
|||||||
VMMarkResident_0x50
|
VMMarkResident_0x50
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl SchRestoreStartingAtR14
|
bl SchRestoreStartingAtR14
|
||||||
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
lwz r9, KDP.VMLogicalPages(r1)
|
||||||
|
|
||||||
VMMarkResident_0x58
|
VMMarkResident_0x58
|
||||||
bl GetPARPageInfo
|
bl GetPARPageInfo
|
||||||
@ -1313,8 +1313,8 @@ setPTEntryGivenPage ; OUTSIDE REFERER
|
|||||||
beq major_0x08d88_0xa8
|
beq major_0x08d88_0xa8
|
||||||
bns cr7, setPTEntryGivenPage_0x34
|
bns cr7, setPTEntryGivenPage_0x34
|
||||||
bge cr5, setPTEntryGivenPage_0x34
|
bge cr5, setPTEntryGivenPage_0x34
|
||||||
bl MPCall_95_0x2e0
|
bl InvalPTE ; page *r8, PTE r16/r17, PTE *r18, PLE *r30 // PLEflags cr5-7
|
||||||
bl MPCall_95_0x348
|
bl DeletePTE ; PTE *r18, PLE *r30
|
||||||
|
|
||||||
setPTEntryGivenPage_0x34
|
setPTEntryGivenPage_0x34
|
||||||
lwz r18, 0x0000(r30)
|
lwz r18, 0x0000(r30)
|
||||||
@ -1331,7 +1331,7 @@ setPTEntryGivenPage_0x34
|
|||||||
setPTEntryGivenPage_0x5c
|
setPTEntryGivenPage_0x5c
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl SchRestoreStartingAtR14
|
bl SchRestoreStartingAtR14
|
||||||
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
lwz r9, KDP.VMLogicalPages(r1)
|
||||||
|
|
||||||
setPTEntryGivenPage_0x64
|
setPTEntryGivenPage_0x64
|
||||||
mr r6, r4
|
mr r6, r4
|
||||||
@ -1401,7 +1401,7 @@ VMAllocateMemory ; OUTSIDE REFERER
|
|||||||
or r7, r4, r6
|
or r7, r4, r6
|
||||||
rlwinm. r7, r7, 0, 0, 11
|
rlwinm. r7, r7, 0, 0, 11
|
||||||
ble cr6, VMReturnMinus1
|
ble cr6, VMReturnMinus1
|
||||||
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
lwz r9, KDP.VMLogicalPages(r1)
|
||||||
bne cr7, VMReturnMinus1
|
bne cr7, VMReturnMinus1
|
||||||
mr r7, r4
|
mr r7, r4
|
||||||
bne VMReturnMinus1
|
bne VMReturnMinus1
|
||||||
@ -1423,7 +1423,7 @@ VMAllocateMemory ; OUTSIDE REFERER
|
|||||||
b VMAllocateMemory_0xc0
|
b VMAllocateMemory_0xc0
|
||||||
|
|
||||||
VMAllocateMemory_0x6c
|
VMAllocateMemory_0x6c
|
||||||
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
lwz r9, KDP.VMLogicalPages(r1)
|
||||||
addi r5, r5, -0x01
|
addi r5, r5, -0x01
|
||||||
|
|
||||||
VMAllocateMemory_0x74
|
VMAllocateMemory_0x74
|
||||||
@ -1431,7 +1431,7 @@ VMAllocateMemory_0x74
|
|||||||
bl GetPARPageInfo
|
bl GetPARPageInfo
|
||||||
bltl cr5, RemovePageFromTLB
|
bltl cr5, RemovePageFromTLB
|
||||||
bltl cr5, RemovePTEFromHTAB
|
bltl cr5, RemovePTEFromHTAB
|
||||||
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
lwz r9, KDP.VMLogicalPages(r1)
|
||||||
subf r8, r4, r9
|
subf r8, r4, r9
|
||||||
cmplw cr7, r5, r8
|
cmplw cr7, r5, r8
|
||||||
and. r8, r16, r6
|
and. r8, r16, r6
|
||||||
@ -1498,7 +1498,7 @@ VMAllocateMemory_0x164
|
|||||||
lwz r7, KDP.TotalPhysicalPages(r1)
|
lwz r7, KDP.TotalPhysicalPages(r1)
|
||||||
subf r7, r5, r7
|
subf r7, r5, r7
|
||||||
stw r7, KDP.TotalPhysicalPages(r1)
|
stw r7, KDP.TotalPhysicalPages(r1)
|
||||||
stw r7, KDP.PrimaryAddrRangePages(r1)
|
stw r7, KDP.VMLogicalPages(r1)
|
||||||
lwz r5, -0x0020(r1)
|
lwz r5, -0x0020(r1)
|
||||||
slwi r8, r7, 12
|
slwi r8, r7, 12
|
||||||
stw r8, 0x0dc4(r5)
|
stw r8, 0x0dc4(r5)
|
||||||
@ -1564,7 +1564,7 @@ VMAllocateMemory_0x1a4
|
|||||||
ori r8, r8, 0xc0
|
ori r8, r8, 0xc0
|
||||||
stw r8, 0x0008(r31)
|
stw r8, 0x0008(r31)
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bl createarea
|
bl CreateArea
|
||||||
cmpwi r9, 0x00
|
cmpwi r9, 0x00
|
||||||
bne Local_Panic
|
bne Local_Panic
|
||||||
mr r31, r8
|
mr r31, r8
|
||||||
@ -1575,7 +1575,7 @@ VMAllocateMemory_0x1a4
|
|||||||
lwz r16, 0x0024(r8)
|
lwz r16, 0x0024(r8)
|
||||||
cmpwi r16, 0x00
|
cmpwi r16, 0x00
|
||||||
bne Local_Panic
|
bne Local_Panic
|
||||||
lwz r16, KDP.PrimaryAddrRangePages(r1)
|
lwz r16, KDP.VMLogicalPages(r1)
|
||||||
lwz r17, 0x002c(r8)
|
lwz r17, 0x002c(r8)
|
||||||
slwi r16, r16, 12
|
slwi r16, r16, 12
|
||||||
cmpw r17, r16
|
cmpw r17, r16
|
||||||
@ -1876,7 +1876,7 @@ VMLastExportedFunc_0xd7
|
|||||||
mr r31, r5
|
mr r31, r5
|
||||||
mr r28, r16
|
mr r28, r16
|
||||||
mr r26, r14
|
mr r26, r14
|
||||||
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
lwz r9, KDP.VMLogicalPages(r1)
|
||||||
bl GetPARPageInfo
|
bl GetPARPageInfo
|
||||||
mtlr r6
|
mtlr r6
|
||||||
b RemovePageFromTLB
|
b RemovePageFromTLB
|
||||||
|
@ -34,7 +34,7 @@ NKTop
|
|||||||
align 5
|
align 5
|
||||||
include 'NKTasks.s'
|
include 'NKTasks.s'
|
||||||
align 5
|
align 5
|
||||||
include 'NKAddressSpaceMPCalls.s'
|
include 'NKAddressSpaces.s'
|
||||||
|
|
||||||
align 5
|
align 5
|
||||||
include 'NKPoolAllocator.s'
|
include 'NKPoolAllocator.s'
|
||||||
|
Loading…
Reference in New Issue
Block a user