mirror of
https://github.com/elliotnunn/powermac-rom.git
synced 2024-09-30 00:54:31 +00:00
memory pretty close
This commit is contained in:
parent
71c936c302
commit
a58e7a345a
@ -487,7 +487,15 @@ r31 ds.l 1 ; 07c, cpu+3bc
|
||||
endr
|
||||
|
||||
|
||||
MemLayout record 0,INCR
|
||||
SegMapPtr ds.l 1
|
||||
BatMap ds.l 1 ; packed array of 4-bit indices into BATs
|
||||
endr
|
||||
|
||||
BAT record 0,INCR
|
||||
U ds.l 1
|
||||
L ds.l 1
|
||||
endr
|
||||
|
||||
;_______________________________________________________________________
|
||||
; KERNEL DATA PAGE
|
||||
@ -507,8 +515,15 @@ SegMap32CPUInit ds.l 32 ; 180:200
|
||||
SegMap32OvlInit ds.l 32 ; 200:280
|
||||
BATs ds.l 32 ; 280:300
|
||||
|
||||
; GAP
|
||||
org 0x340
|
||||
CurIBAT0 ds BAT ; 300:308
|
||||
CurIBAT1 ds BAT ; 308:310
|
||||
CurIBAT2 ds BAT ; 310:318
|
||||
CurIBAT3 ds BAT ; 318:320
|
||||
CurDBAT0 ds BAT ; 320:328
|
||||
CurDBAT1 ds BAT ; 328:330
|
||||
CurDBAT2 ds BAT ; 330:338
|
||||
CurDBAT3 ds BAT ; 338:340
|
||||
|
||||
NCBPointerCache
|
||||
NCBCacheLA0 ds.l 1 ; 340
|
||||
NCBCachePA0 ds.l 1 ; 344
|
||||
@ -530,8 +545,14 @@ PARPerSegmentPLEPtrs ds.l 4 ; 5b0:5c0 ; for each PAR segment, a ptr into the PAR
|
||||
FloatingPtTemp1 ds.l 1 ; 5c0
|
||||
FloatingPtTemp2 ds.l 1 ; 5c4
|
||||
|
||||
SupervisorMemLayout ds MemLayout ; 5c8:5d0
|
||||
UserMemLayout ds MemLayout ; 5d0:5d8
|
||||
CpuMemLayout ds MemLayout ; 5d8:5e0
|
||||
OverlayMemLayout ds MemLayout ; 5e0:5e8
|
||||
|
||||
SupervisorSegMapPtr ds.l 1 ; 5c8 ; these are for enabling overlay, etc
|
||||
SupervisorBatMap ds.l 1 ; 5cc
|
||||
|
||||
UserSegMapPtr ds.l 1 ; 5d0
|
||||
UserBatMap ds.l 1 ; 5d4
|
||||
CPUSegMapPtr ds.l 1 ; 5d8
|
||||
@ -539,8 +560,9 @@ CPUBatMap ds.l 1 ; 5dc
|
||||
OverlaySegMapPtr ds.l 1 ; 5e0
|
||||
OverlayBatMap ds.l 1 ; 5e4
|
||||
|
||||
ds.l 1 ; 5e8
|
||||
ds.l 1 ; 5ec
|
||||
CurrentSegMap ds.l 1 ; 5e8
|
||||
CurrentBatMap ds.l 1 ; 5ec
|
||||
|
||||
NanoKernelCallTable ds.l 16 ; 5f0:630
|
||||
PA_ConfigInfo ds.l 1 ; 630
|
||||
PA_EmulatorData ds.l 1 ; 634
|
||||
@ -565,11 +587,13 @@ PA_EmulatorIplValue ds.l 1 ; 67c ; Physical ptr into EDP
|
||||
SharedMemoryAddrPlus ds.l 1 ; 680 ; Really not sure
|
||||
PA_PageMapStart ds.l 1 ; 684 ; Physical ptr to PageMap (= KDP+0x920)
|
||||
PageAttributeInit ds.l 1 ; 688 ; defaults for page table entries (see ConfigInfo)
|
||||
ds.l 1 ; 68c
|
||||
ds.l 1 ; 690
|
||||
ds.l 1 ; 694
|
||||
ds.l 1 ; 698
|
||||
ds.l 1 ; 69c
|
||||
|
||||
HtabTempPage ds.l 1 ; 68c
|
||||
HtabTempEntryPtr ds.l 1 ; 690
|
||||
NewestPageInHtab ds.l 1 ; 694
|
||||
ApproxCurrentPTEG ds.l 1 ; 698
|
||||
OverflowingPTEG ds.l 1 ; 69c
|
||||
|
||||
PTEGMask ds.l 1 ; 6a0
|
||||
HTABORG ds.l 1 ; 6a4
|
||||
VMLogicalPages ds.l 1 ; 6a8 ; set at init and changed by VMInit
|
||||
@ -820,7 +844,7 @@ Size equ *
|
||||
; and I have misunderstood.
|
||||
;_______________________________________________________________________
|
||||
|
||||
PageMapEntry record 0,INCR
|
||||
PME record 0,INCR
|
||||
LBase ds.w 1 ; 0 ; (base - segment) >> 12
|
||||
PageCount ds.w 1 ; 2 ; page count MINUS ONE
|
||||
PBaseAndFlags ds.l 1 ; 4 ; PBase page aligned
|
||||
|
@ -18,8 +18,8 @@
|
||||
; NKIntMisc
|
||||
; IntReturnFromSIGP
|
||||
; NKPaging
|
||||
; PagingFunc1
|
||||
; PagingL2PWithBATs
|
||||
; PopulateHTAB
|
||||
; GetPhysicalAddr
|
||||
; NKScheduler
|
||||
; SchFiddlePriorityShifty
|
||||
; SchRestoreStartingAtR14
|
||||
@ -454,7 +454,7 @@ MemRetryDSI_0xe0
|
||||
MemRetryDSI_0x100
|
||||
andis. r28, r31, 0x800
|
||||
addi r29, r1, KDP.BATs + 0xa0
|
||||
bnel PagingL2PWithBATs
|
||||
bnel GetPhysicalAddr
|
||||
li r28, 0x43
|
||||
and r28, r31, r28
|
||||
cmpwi cr7, r28, 0x43
|
||||
@ -509,7 +509,7 @@ MemRetryDSI_0x1c8
|
||||
|
||||
_Lock PSA.HTABLock, scratch1=r28, scratch2=r31
|
||||
|
||||
bl PagingFunc1
|
||||
bl PopulateHTAB
|
||||
_AssertAndRelease PSA.HTABLock, scratch=r28
|
||||
mfsprg r28, 2
|
||||
mtlr r28
|
||||
@ -605,7 +605,7 @@ IntISI ; OUTSIDE REFERER
|
||||
_Lock PSA.HTABLock, scratch1=r28, scratch2=r31
|
||||
|
||||
mr r27, r10
|
||||
bl PagingFunc1
|
||||
bl PopulateHTAB
|
||||
_AssertAndRelease PSA.HTABLock, scratch=r28
|
||||
mfsprg r8, 0
|
||||
bne major_0x039dc
|
||||
@ -710,7 +710,7 @@ PIHDSI ; OUTSIDE REFERER
|
||||
_Lock PSA.HTABLock, scratch1=r28, scratch2=r31
|
||||
|
||||
mfspr r27, dar
|
||||
bl PagingFunc1
|
||||
bl PopulateHTAB
|
||||
_AssertAndRelease PSA.HTABLock, scratch=r28
|
||||
mfsprg r8, 0
|
||||
bne major_0x039dc
|
||||
|
@ -3,7 +3,7 @@
|
||||
; NKExceptions
|
||||
; IntReturn
|
||||
; NKPaging
|
||||
; PagingFunc1
|
||||
; PopulateHTAB
|
||||
; EXPORTS:
|
||||
; EditPTEInHTAB (=> NKMPCalls)
|
||||
; GetPARPageInfo (=> NKMPCalls)
|
||||
@ -1131,7 +1131,7 @@ VMLastExportedFunc_0xd7
|
||||
mr r14, r26
|
||||
mflr r6
|
||||
slwi r27, r4, 12
|
||||
bl PagingFunc1
|
||||
bl PopulateHTAB
|
||||
bnel VMPanic
|
||||
mr r27, r7
|
||||
mr r29, r8
|
||||
|
541
NanoKernel/NKMemory.s
Normal file
541
NanoKernel/NKMemory.s
Normal file
@ -0,0 +1,541 @@
|
||||
; AUTO-GENERATED SYMBOL LIST
|
||||
|
||||
########################################################################
|
||||
########################################################################
|
||||
|
||||
PopulateHTAB ; LogicalAddress r28 // Success cr0.eq
|
||||
lwz r29, KDP.CurrentSegMap(r1)
|
||||
rlwinm r28, r27, 7, 0x0000000F << 2 ; convert segment of passed ptr to offset into SegMap
|
||||
lwzx r29, r29, r28 ; r29 = ptr to start of segment in PageMap
|
||||
rlwinm r28, r27, 20, 0x0000FFFF ; r27 = page index within SegMap
|
||||
lhz r30, PME.LBase(r29)
|
||||
b @find_pme
|
||||
|
||||
@try_next_pme ; Point r29 to the PageMapEntry that concerns this page
|
||||
lhzu r30, 8(r29) ; get another PME.LBase
|
||||
@find_pme
|
||||
lhz r31, PME.PageCount(r29)
|
||||
subf r30, r30, r28 ; r30 = page index within area
|
||||
cmplw cr7, r30, r31
|
||||
bgt cr7, @try_next_pme
|
||||
|
||||
lwz r28, KDP.HtabTempEntryPtr(r1) ; (remove temp PTE if present)
|
||||
lwz r31, PME.PBaseAndFlags(r29)
|
||||
cmpwi cr7, r28, 0 ; (remove temp PTE if present)
|
||||
extlwi. r26, r31, 2, 20 ; DaddyFlag and CountingFlag in top bits
|
||||
bne cr7, @remove_temp_pte ; (remove temp PTE if present)
|
||||
blt @daddy_flag ; >>>>> DaddyFlag = 1
|
||||
@return_remove_temp_pte ; (optimized: if LT then to jumps to @daddy_flag)
|
||||
bgt @create_temp_pte ; >>>>> DaddyFlag = 0, CountingFlag = 1
|
||||
; fallthru ; >>>>> DaddyFlag = 0, CountingFlag = 0
|
||||
|
||||
########################################################################
|
||||
; CODE TO CREATE A PAGE TABLE ENTRY
|
||||
; <<<<< Fallthru from main entry point (top two flags of PME are zero)
|
||||
slwi r28, r30, 12
|
||||
add r31, r31, r28 ; r31 = physical page ptr plus 12 bits of PageMapEntry flags
|
||||
|
||||
@return_daddy_flag ; <<<<< @daddy_flag comes here
|
||||
@return_create_temp_pte ; <<<<< @create_temp_pte comes here (r31=pageptr, r26=0x5A5A)
|
||||
mfsrin r30, r27 ; HASH FUNCTION: get address of PTEG
|
||||
rlwinm r28, r27, 26, 10, 25 ; r28 = (1st arg of XOR) * 64b
|
||||
rlwinm r30, r30, 6, 7, 25 ; r30 = (2nd arg of XOR) * 64b
|
||||
xor r28, r28, r30 ; r28 (hash output * 64b) = r28 ^ r30
|
||||
lwz r30, KDP.PTEGMask(r1)
|
||||
lwz r29, KDP.HTABORG(r1)
|
||||
and r28, r28, r30
|
||||
or. r29, r29, r28 ; result (PTEG address) into r29
|
||||
|
||||
@retry_other_pteg ; <<<<< @no_blanks_in_pteg can return here after doing sec'dary hash
|
||||
lwz r30, 0(r29) ; Take address of PTEG in r29, find empty/"invalid" PTE within (optimized!)
|
||||
lwz r28, 8(r29)
|
||||
cmpwi cr6, r30, 0
|
||||
lwz r30, 16(r29)
|
||||
cmpwi cr7, r28, 0
|
||||
lwzu r28, 24(r29)
|
||||
bge cr6, @found_blank_pte
|
||||
cmpwi cr6, r30, 0
|
||||
lwzu r30, 8(r29)
|
||||
bge cr7, @found_blank_pte
|
||||
cmpwi cr7, r28, 0
|
||||
lwzu r28, 8(r29)
|
||||
bge cr6, @found_blank_pte
|
||||
cmpwi cr6, r30, 0
|
||||
lwzu r30, 8(r29)
|
||||
bge cr7, @found_blank_pte
|
||||
cmpwi cr7, r28, 0
|
||||
lwzu r28, 8(r29)
|
||||
bge cr6, @found_blank_pte
|
||||
cmpwi cr6, r30, 0
|
||||
addi r29, r29, 8
|
||||
bge cr7, @found_blank_pte
|
||||
cmpwi cr7, r28, 0
|
||||
addi r29, r29, 8
|
||||
bge cr6, @found_blank_pte
|
||||
rlwinm r28, r31, 0, 26, 26 ; wImg bit in PTE???
|
||||
addi r29, r29, 8 ; Leave PTE + 24 in r29
|
||||
blt cr7, @no_blanks_in_pteg ; >>>>> This might cause PopulateHTAB to return an error (BNE)
|
||||
|
||||
@found_blank_pte ; Take PTE address (plus 24) in r29, draft PTE[lo] in r31
|
||||
cmpwi r26, 0 ; NOTE: top bit of r31 will be set if sec'dary hash func was used
|
||||
mfsrin r28, r27
|
||||
extrwi r30, r27, 6, 4 ; PTE[API/26-31] taken from upper 6 bits of offset-within-segment
|
||||
stw r27, KDP.NewestPageInHtab(r1)
|
||||
ori r31, r31, 0x100 ; set PTE[R(eference)]
|
||||
rlwimi r30, r31, 27, 25, 25 ; set PTE[H(ash func ID)] to cheeky topmost bit of the phys addr in r31
|
||||
rlwinm r31, r31, 0, 21, 19 ; unset upper reserved bit in PTE[lo]
|
||||
insrwi r30, r28, 24, 1 ; get PTE[VSID] from segment register
|
||||
stw r31, -20(r29) ; PTE[lo] = r31
|
||||
oris r30, r30, 0x8000 ; set PTE[V(alid)]
|
||||
sync ; because we just wanged the page table
|
||||
stwu r30, -24(r29) ; PTE[hi] = r30
|
||||
|
||||
lwz r28, KDP.NanoKernelInfo + NKNanoKernelInfo.HashTableCreateCount(r1)
|
||||
stw r29, KDP.ApproxCurrentPTEG(r1)
|
||||
addi r28, r28, 1
|
||||
stw r28, KDP.NanoKernelInfo + NKNanoKernelInfo.HashTableCreateCount(r1)
|
||||
beqlr ; >>>>> RETURN "BEQ" if we got to "Case 1" directly
|
||||
|
||||
cmpwi r26, 0x5A5A ; Special value set so that we take note of this new temporary PTE?
|
||||
bne @notemp
|
||||
stw r29, KDP.HtabTempEntryPtr(r1)
|
||||
cmpw r29, r29 ; >>>>> RETURN "BEQ" if we got to "Case 1" via @create_temp_pte
|
||||
blr
|
||||
@notemp
|
||||
|
||||
lwz r28, 0(r26) ; Otherwise, we got here via @daddy_flag? Looks nonsensical.
|
||||
lwz r30, KDP.HTABORG(r1)
|
||||
ori r28, r28, 0x801
|
||||
subf r30, r30, r29
|
||||
cmpw r29, r29
|
||||
rlwimi r28, r30, 9, 0, 19
|
||||
stw r28, 0(r26)
|
||||
blr ; >>>>> RETURN "BEQ" otherwise
|
||||
|
||||
########################################################################
|
||||
; Helpful code that jumps back to roughly where it started
|
||||
@remove_temp_pte
|
||||
lwz r28, KDP.NanoKernelInfo + NKNanoKernelInfo.HashTableDeleteCount(r1)
|
||||
lwz r29, KDP.HtabTempEntryPtr(r1)
|
||||
addi r28, r28, 1
|
||||
stw r28, KDP.NanoKernelInfo + NKNanoKernelInfo.HashTableDeleteCount(r1)
|
||||
li r28, 0
|
||||
stw r28, 0(r29)
|
||||
lwz r29, KDP.HtabTempPage(r1)
|
||||
stw r28, KDP.HtabTempPage(r1)
|
||||
stw r28, KDP.HtabTempEntryPtr(r1)
|
||||
sync
|
||||
tlbie r29
|
||||
sync
|
||||
bge @return_remove_temp_pte ; Optimization: would otherwise branch to a "blt @daddy_flag"
|
||||
|
||||
########################################################################
|
||||
; r30 = page index within area, r31 = PBaseAndFlags
|
||||
@daddy_flag
|
||||
extlwi. r28, r31, 2, 21 ; top bits of r28 = CountingFlag, PhysicalIsRelativeFlag
|
||||
bge @return_via_pf2 ; if !CountingFlag: return (if !PIRFlag: via PF2)
|
||||
|
||||
rlwinm r28, r30, 2, 0xFFFFFFFC ; r28 = pageIdxInArea * 4
|
||||
rlwinm r26, r31, 22, 0xFFFFFFFC ; r26 = PIRFlag << 31 | BtmBit << 22 | physBase * 4
|
||||
lwzux r28, r26, r28 ; this makes no sense!!
|
||||
|
||||
lwz r31, KDP.PageAttributeInit(r1)
|
||||
andi. r30, r28, 0x881
|
||||
rlwimi r31, r28, 0, 0xFFFFF000
|
||||
cmplwi r30, 1
|
||||
cmplwi cr7, r30, 0x81
|
||||
ori r31, r31, 0x100
|
||||
rlwimi r31, r28, 3, 24, 24
|
||||
rlwimi r31, r28, 31, 26, 26
|
||||
rlwimi r31, r28, 1, 25, 25
|
||||
xori r31, r31, 0x40
|
||||
rlwimi r31, r28, 30, 31, 31
|
||||
beq @return_daddy_flag
|
||||
bltlr cr7
|
||||
bl Panic
|
||||
|
||||
########################################################################
|
||||
; Helpful code that jumps back to roughly where it started
|
||||
@create_temp_pte ; Make "temp" PageMapEntry, when flags look like 0x800
|
||||
ori r28, r27, 0xfff ; r27 = passed ptr, r31 = PBaseAndFlags
|
||||
stw r28, KDP.HtabTempPage(r1)
|
||||
rlwinm r31, r31, 0, 22, 19 ; clear CountingFlag in r31
|
||||
li r26, 0x5A5A ; set magic number in r26 so that KDP.HtabTempEntryPtr gets set
|
||||
b @return_create_temp_pte
|
||||
|
||||
########################################################################
|
||||
; Helpful return code for @daddy_flag
|
||||
@return_via_pf2
|
||||
bgtlr
|
||||
addi r29, r1, KDP.SupervisorMemLayout
|
||||
b SwitchMemLayout
|
||||
|
||||
########################################################################
|
||||
; So try the secondary hashing function, if we haven't already
|
||||
@no_blanks_in_pteg
|
||||
cmplw cr6, r28, r26
|
||||
subi r29, r29, 64 + 16
|
||||
ble cr6, @search_for_matching_pte
|
||||
crnot cr0_eq, cr0_eq
|
||||
lwz r30, KDP.PTEGMask(r1)
|
||||
xori r31, r31, 0x800
|
||||
xor r29, r29, r30
|
||||
beq @retry_other_pteg
|
||||
|
||||
########################################################################
|
||||
@search_for_matching_pte ; r29 = full PTEG
|
||||
lwz r26, KDP.OverflowingPTEG(r1) ; this could be zero
|
||||
crclr cr6_eq ; prepare to return "failure"
|
||||
rlwimi r26, r29, 0, -64
|
||||
addi r29, r26, 8
|
||||
b @first_pte
|
||||
|
||||
@rethink_pte_search
|
||||
bne cr6, @next_pte
|
||||
mr r26, r29
|
||||
|
||||
@next_pte
|
||||
cmpw cr6, r29, r26
|
||||
addi r29, r29, 8
|
||||
@first_pte
|
||||
rlwimi r29, r26, 0, 0, 25
|
||||
lwz r31, 4(r29)
|
||||
lwz r30, 0(r29)
|
||||
beq cr6, @got_pte
|
||||
rlwinm r28, r31, 30, 25, 25
|
||||
andc. r28, r28, r30 ; R && !H (i.e. page has been read and is not in "secondary hash" PTEG)
|
||||
bne @next_pte ; if so,
|
||||
@got_pte
|
||||
|
||||
########################################################################
|
||||
|
||||
clrlwi r28, r31, 30
|
||||
cmpwi cr7, r28, 0
|
||||
clrrwi r28, r31, 12
|
||||
cmpw r28, r1
|
||||
lwz r30, KDP.PA_ECB(r1)
|
||||
|
||||
beq cr7, @rethink_pte_search
|
||||
addi r31, r30, 768-1
|
||||
beq @rethink_pte_search
|
||||
|
||||
rlwinm r30, r30, 0, 0xFFFFF000
|
||||
cmpwi cr7, r28, 14
|
||||
lwz r30, 0(r29)
|
||||
rlwinm r31, r31, 0, 0xFFFFF000
|
||||
cmpwi r28, 15
|
||||
rlwinm r31, r30, 0, 0x00000200
|
||||
beq cr7, @rethink_pte_search
|
||||
extlwi r28, r30, 4, 1
|
||||
beq @rethink_pte_search
|
||||
neg r31, r31
|
||||
insrwi r28, r30, 6, 4
|
||||
xor r31, r31, r29
|
||||
rlwimi r28, r30, 5, 10, 19
|
||||
rlwinm r31, r31, 6, 10, 19
|
||||
xor r28, r28, r31
|
||||
|
||||
lwz r26, KDP.CurrentSegMap(r1)
|
||||
rlwinm r30, r28, (32-25), 0x00000078
|
||||
lwzx r26, r26, r30 ; r26 pts into PageMap @ current segment
|
||||
|
||||
@tinyloop ; find the last non-blank PME in the segment
|
||||
lhz r30, PME.LBase(r26)
|
||||
rlwinm r31, r28, 20, 0x0000FFFF
|
||||
subf r30, r30, r31
|
||||
lhz r31, PME.PageCount(r26)
|
||||
addi r26, r26, 8
|
||||
cmplw cr7, r30, r31
|
||||
lwz r31, PME.PBaseAndFlags - 8(r26)
|
||||
andi. r31, r31, 0xe01
|
||||
cmpwi r31, 0xa01
|
||||
bgt cr7, @tinyloop
|
||||
beq @tinyloop
|
||||
|
||||
lwz r26, PME.PBaseAndFlags - 8(r26) ; got that PME (26)
|
||||
slwi r30, r30, 2
|
||||
extrwi r31, r26, 2, 20
|
||||
cmpwi cr7, r31, 3 ; not a DaddyFlag + CountingFlag? Try again!
|
||||
|
||||
lwz r31, KDP.NanoKernelInfo + NKNanoKernelInfo.HashTableOverflowCount(r1)
|
||||
stw r29, KDP.OverflowingPTEG(r1)
|
||||
addi r31, r31, 1
|
||||
stw r31, KDP.NanoKernelInfo + NKNanoKernelInfo.HashTableOverflowCount(r1)
|
||||
lwz r31, KDP.NanoKernelInfo + NKNanoKernelInfo.HashTableDeleteCount(r1)
|
||||
stw r30, 0(r29)
|
||||
addi r31, r31, 1
|
||||
stw r31, KDP.NanoKernelInfo + NKNanoKernelInfo.HashTableDeleteCount(r1)
|
||||
|
||||
sync
|
||||
tlbie r28
|
||||
sync
|
||||
|
||||
_InvalNCBPointerCache scratch=r8
|
||||
|
||||
bne cr7, PopulateHTAB ; not a DaddyFlag + CountingFlag? Retriable...
|
||||
|
||||
rlwinm r26, r26, 22, 0xFFFFFFFC ; PIRFlag << 31 | BtmBit << 22 | physBase * 4
|
||||
lwzux r28, r26, r30
|
||||
lwz r31, 4(r29)
|
||||
andi. r30, r28, 0x800
|
||||
rlwinm r30, r28, (32-9), 0x007FFFF8
|
||||
xor r30, r30, r29
|
||||
beq Panic
|
||||
andi. r30, r30, 0xffff
|
||||
xori r28, r28, 0x800
|
||||
bne Panic
|
||||
rlwimi r28, r31, 0, 0, 19 ; r28 = EA of victim of overflow
|
||||
rlwimi r28, r31, 29, 27, 27
|
||||
rlwimi r28, r31, 27, 28, 28
|
||||
stw r28, 0(r26)
|
||||
|
||||
b PopulateHTAB
|
||||
|
||||
########################################################################
|
||||
########################################################################
|
||||
|
||||
SwitchMemLayout
|
||||
lwz r28, MemLayout.SegMapPtr(r29)
|
||||
stw r28, KDP.CurrentSegMap(r1)
|
||||
addi r28, r28, 16*8 + 4
|
||||
lis r31, 0
|
||||
|
||||
@next_seg ; SEGMENT REGISTERS
|
||||
lwzu r30, -8(r28)
|
||||
subis r31, r31, 0x1000
|
||||
mr. r31, r31
|
||||
mtsrin r30, r31
|
||||
bne @next_seg
|
||||
|
||||
mfpvr r31
|
||||
lwz r28, MemLayout.BatMap(r29)
|
||||
andis. r31, r31, 0xFFFE
|
||||
addi r29, r1, 0
|
||||
stw r28, KDP.CurrentBatMap(r1)
|
||||
beq @601
|
||||
|
||||
rlwimi r29, r28, 7, 0x00000078 ; BATS, non-601
|
||||
lwz r30, KDP.BATs + BAT.U(r29)
|
||||
lwz r31, KDP.BATs + BAT.L(r29)
|
||||
mtspr ibat0u, r30
|
||||
mtspr ibat0l, r31
|
||||
stw r30, KDP.CurIBAT0.U(r1)
|
||||
stw r31, KDP.CurIBAT0.L(r1)
|
||||
|
||||
rlwimi r29, r28, 11, 0x00000078
|
||||
lwz r30, KDP.BATs + BAT.U(r29)
|
||||
lwz r31, KDP.BATs + BAT.L(r29)
|
||||
mtspr ibat1u, r30
|
||||
mtspr ibat1l, r31
|
||||
stw r30, KDP.CurIBAT1.U(r1)
|
||||
stw r31, KDP.CurIBAT1.L(r1)
|
||||
|
||||
rlwimi r29, r28, 15, 0x00000078
|
||||
lwz r30, KDP.BATs + BAT.U(r29)
|
||||
lwz r31, KDP.BATs + BAT.L(r29)
|
||||
mtspr ibat2u, r30
|
||||
mtspr ibat2l, r31
|
||||
stw r30, KDP.CurIBAT2.U(r1)
|
||||
stw r31, KDP.CurIBAT2.L(r1)
|
||||
|
||||
rlwimi r29, r28, 19, 0x00000078
|
||||
lwz r30, KDP.BATs + BAT.U(r29)
|
||||
lwz r31, KDP.BATs + BAT.L(r29)
|
||||
mtspr ibat3u, r30
|
||||
mtspr ibat3l, r31
|
||||
stw r30, KDP.CurIBAT3.U(r1)
|
||||
stw r31, KDP.CurIBAT3.L(r1)
|
||||
|
||||
rlwimi r29, r28, 23, 0x00000078
|
||||
lwz r30, KDP.BATs + BAT.U(r29)
|
||||
lwz r31, KDP.BATs + BAT.L(r29)
|
||||
mtspr dbat0u, r30
|
||||
mtspr dbat0l, r31
|
||||
stw r30, KDP.CurDBAT0.U(r1)
|
||||
stw r31, KDP.CurDBAT0.L(r1)
|
||||
|
||||
rlwimi r29, r28, 27, 0x00000078
|
||||
lwz r30, KDP.BATs + BAT.U(r29)
|
||||
lwz r31, KDP.BATs + BAT.L(r29)
|
||||
mtspr dbat1u, r30
|
||||
mtspr dbat1l, r31
|
||||
stw r30, KDP.CurDBAT1.U(r1)
|
||||
stw r31, KDP.CurDBAT1.L(r1)
|
||||
|
||||
rlwimi r29, r28, 31, 0x00000078
|
||||
lwz r30, KDP.BATs + BAT.U(r29)
|
||||
lwz r31, KDP.BATs + BAT.L(r29)
|
||||
mtspr dbat2u, r30
|
||||
mtspr dbat2l, r31
|
||||
stw r30, KDP.CurDBAT2.U(r1)
|
||||
stw r31, KDP.CurDBAT2.L(r1)
|
||||
|
||||
rlwimi r29, r28, 3, 0x00000078
|
||||
lwz r30, KDP.BATs + BAT.U(r29)
|
||||
lwz r31, KDP.BATs + BAT.L(r29)
|
||||
mtspr dbat3u, r30
|
||||
mtspr dbat3l, r31
|
||||
stw r30, KDP.CurDBAT3.U(r1)
|
||||
stw r31, KDP.CurDBAT3.L(r1)
|
||||
|
||||
cmpw r29, r29
|
||||
blr
|
||||
|
||||
@601
|
||||
rlwimi r29, r28, 7, 25, 28
|
||||
lwz r30, KDP.BATs + 0(r29)
|
||||
lwz r31, KDP.BATs + 4(r29)
|
||||
stw r30, 0x0300(r1)
|
||||
stw r31, 0x0304(r1)
|
||||
stw r30, 0x0320(r1)
|
||||
stw r31, 0x0324(r1)
|
||||
rlwimi r30, r31, 0, 25, 31
|
||||
mtspr ibat0u, r30
|
||||
lwz r30, KDP.BATs + 0(r29)
|
||||
rlwimi r31, r30, 30, 26, 31
|
||||
rlwimi r31, r30, 6, 25, 25
|
||||
mtspr ibat0l, r31
|
||||
rlwimi r29, r28, 11, 25, 28
|
||||
lwz r30, KDP.BATs + 0(r29)
|
||||
lwz r31, KDP.BATs + 4(r29)
|
||||
stw r30, 0x0308(r1)
|
||||
stw r31, 0x030c(r1)
|
||||
stw r30, 0x0328(r1)
|
||||
stw r31, 0x032c(r1)
|
||||
rlwimi r30, r31, 0, 25, 31
|
||||
mtspr ibat1u, r30
|
||||
lwz r30, KDP.BATs + 0(r29)
|
||||
rlwimi r31, r30, 30, 26, 31
|
||||
rlwimi r31, r30, 6, 25, 25
|
||||
mtspr ibat1l, r31
|
||||
rlwimi r29, r28, 15, 25, 28
|
||||
lwz r30, KDP.BATs + 0(r29)
|
||||
lwz r31, KDP.BATs + 4(r29)
|
||||
stw r30, 0x0310(r1)
|
||||
stw r31, 0x0314(r1)
|
||||
stw r30, 0x0330(r1)
|
||||
stw r31, 0x0334(r1)
|
||||
rlwimi r30, r31, 0, 25, 31
|
||||
mtspr ibat2u, r30
|
||||
lwz r30, KDP.BATs + 0(r29)
|
||||
rlwimi r31, r30, 30, 26, 31
|
||||
rlwimi r31, r30, 6, 25, 25
|
||||
mtspr ibat2l, r31
|
||||
rlwimi r29, r28, 19, 25, 28
|
||||
lwz r30, KDP.BATs + 0(r29)
|
||||
lwz r31, KDP.BATs + 4(r29)
|
||||
stw r30, 0x0318(r1)
|
||||
stw r31, 0x031c(r1)
|
||||
stw r30, 0x0338(r1)
|
||||
stw r31, 0x033c(r1)
|
||||
rlwimi r30, r31, 0, 25, 31
|
||||
mtspr ibat3u, r30
|
||||
lwz r30, KDP.BATs + 0(r29)
|
||||
rlwimi r31, r30, 30, 26, 31
|
||||
rlwimi r31, r30, 6, 25, 25
|
||||
mtspr ibat3l, r31
|
||||
cmpw r29, r29
|
||||
blr
|
||||
|
||||
########################################################################
|
||||
########################################################################
|
||||
|
||||
GetPhysicalAddr
|
||||
lwz r30, 0(r29)
|
||||
li r28, -1
|
||||
rlwimi r28, r30, 15, 0, 14
|
||||
xor r31, r27, r30
|
||||
andc. r31, r31, r28
|
||||
beq @_54
|
||||
lwzu r30, 8(r29)
|
||||
rlwimi r28, r30, 15, 0, 14
|
||||
xor r31, r27, r30
|
||||
andc. r31, r31, r28
|
||||
beq @_54
|
||||
lwzu r30, 8(r29)
|
||||
rlwimi r28, r30, 15, 0, 14
|
||||
xor r31, r27, r30
|
||||
andc. r31, r31, r28
|
||||
beq @_54
|
||||
lwzu r30, 8(r29)
|
||||
rlwimi r28, r30, 15, 0, 14
|
||||
xor r31, r27, r30
|
||||
andc. r31, r31, r28
|
||||
bne nobats
|
||||
|
||||
@_54
|
||||
andi. r31, r30, 1
|
||||
rlwinm r28, r28, 0, 8, 19
|
||||
lwzu r31, 4(r29)
|
||||
and r28, r27, r28
|
||||
or r31, r31, r28
|
||||
bnelr
|
||||
|
||||
nobats
|
||||
mfsrin r31, r27
|
||||
rlwinm r30, r27, 10, 26, 31
|
||||
rlwimi r30, r31, 7, 1, 24
|
||||
rlwinm r28, r27, 26, 10, 25
|
||||
oris r30, r30, 0x8000
|
||||
rlwinm r31, r31, 6, 7, 25
|
||||
xor r28, r28, r31
|
||||
lwz r31, KDP.PTEGMask(r1)
|
||||
lwz r29, KDP.HTABORG(r1)
|
||||
and r28, r28, r31
|
||||
or. r29, r29, r28
|
||||
|
||||
@_2c
|
||||
lwz r31, 0(r29)
|
||||
lwz r28, 8(r29)
|
||||
cmpw cr6, r30, r31
|
||||
lwz r31, 16(r29)
|
||||
cmpw cr7, r30, r28
|
||||
lwzu r28, 24(r29)
|
||||
bne cr6, @_50
|
||||
|
||||
@_48
|
||||
lwzu r31, -0x0014(r29)
|
||||
blr
|
||||
|
||||
@_50
|
||||
cmpw cr6, r30, r31
|
||||
lwzu r31, 8(r29)
|
||||
beq cr7, @_48
|
||||
cmpw cr7, r30, r28
|
||||
lwzu r28, 8(r29)
|
||||
beq cr6, @_48
|
||||
cmpw cr6, r30, r31
|
||||
lwzu r31, 8(r29)
|
||||
beq cr7, @_48
|
||||
cmpw cr7, r30, r28
|
||||
lwzu r28, 8(r29)
|
||||
beq cr6, @_48
|
||||
cmpw cr6, r30, r31
|
||||
lwzu r31, -0x000c(r29)
|
||||
beqlr cr7
|
||||
cmpw cr7, r30, r28
|
||||
lwzu r31, 8(r29)
|
||||
beqlr cr6
|
||||
lwzu r31, 8(r29)
|
||||
beqlr cr7
|
||||
lwz r31, KDP.PTEGMask(r1)
|
||||
xori r30, r30, 0x40
|
||||
andi. r28, r30, 0x40
|
||||
addi r29, r29, -0x3c
|
||||
xor r29, r29, r31
|
||||
bne @_2c
|
||||
blr
|
||||
|
||||
########################################################################
|
||||
########################################################################
|
||||
|
||||
FlushTLB
|
||||
lhz r29, KDP.ProcessorInfo + NKProcessorInfo.TransCacheTotalSize(r1)
|
||||
slwi r29, r29, 11
|
||||
@loop
|
||||
subi r29, r29, 4096
|
||||
cmpwi r29, 0
|
||||
tlbie r29
|
||||
bgt @loop
|
||||
sync
|
||||
blr
|
@ -1,743 +0,0 @@
|
||||
Local_Panic set *
|
||||
b panic
|
||||
|
||||
|
||||
|
||||
; AUTO-GENERATED SYMBOL LIST
|
||||
; IMPORTS:
|
||||
; NKAddressSpaces
|
||||
; FindAreaAbove
|
||||
; MPCall_95_0x254
|
||||
; SpaceGetPagePLE
|
||||
; NKConsoleLog
|
||||
; printw
|
||||
; NKThud
|
||||
; panic
|
||||
; EXPORTS:
|
||||
; PagingFlushTLB (=> NKInit, NKScheduler, NKSleep)
|
||||
; PagingFunc1 (=> NKInit, NKIntHandlers, NKThud, NKVMCalls)
|
||||
; PagingFunc2 (=> NKInit)
|
||||
; PagingFunc2AndAHalf (=> NKSleep)
|
||||
; PagingL2PWithBATs (=> NKIntHandlers, NKIntMisc, NKMPCalls, NKRTASCalls, NKSleep)
|
||||
; PagingL2PWithoutBATs (=> NKInit, NKScreenConsole, NKThud)
|
||||
|
||||
|
||||
|
||||
align 5
|
||||
|
||||
PagingFunc1 ; OUTSIDE REFERER
|
||||
mfsprg r29, 0
|
||||
mflr r28
|
||||
stw r8, -0x00dc(r29)
|
||||
mfcr r8
|
||||
stw r9, -0x00d8(r29)
|
||||
stw r8, -0x00a4(r29)
|
||||
stw r14, -0x00d4(r29)
|
||||
stw r15, -0x00d0(r29)
|
||||
stw r16, -0x00cc(r29)
|
||||
stw r17, -0x00c8(r29)
|
||||
stw r18, -0x00c4(r29)
|
||||
stw r19, -0x00c0(r29)
|
||||
stw r20, -0x00bc(r29)
|
||||
stw r21, -0x00b8(r29)
|
||||
stw r22, -0x00b4(r29)
|
||||
stw r28, -0x00e0(r29)
|
||||
b @_88
|
||||
|
||||
@_44
|
||||
mfsprg r29, 0
|
||||
lwz r8, -0x00a4(r29)
|
||||
lwz r28, -0x00e0(r29)
|
||||
mtcrf 0x7f, r8
|
||||
lwz r8, -0x00dc(r29)
|
||||
mtlr r28
|
||||
lwz r9, -0x00d8(r29)
|
||||
lwz r14, -0x00d4(r29)
|
||||
lwz r15, -0x00d0(r29)
|
||||
lwz r16, -0x00cc(r29)
|
||||
lwz r17, -0x00c8(r29)
|
||||
lwz r18, -0x00c4(r29)
|
||||
lwz r19, -0x00c0(r29)
|
||||
lwz r20, -0x00bc(r29)
|
||||
lwz r21, -0x00b8(r29)
|
||||
lwz r22, -0x00b4(r29)
|
||||
blr
|
||||
|
||||
@_88
|
||||
mfsprg r30, 0
|
||||
mr r9, r27
|
||||
lwz r8, -0x001c(r30)
|
||||
bl FindAreaAbove
|
||||
mr r31, r8
|
||||
stw r8, EWA.SpecialAreaPtr(r30)
|
||||
stw r27, -0x00e8(r30)
|
||||
lwz r16, 0x0024(r31)
|
||||
lwz r17, 0x0020(r31)
|
||||
cmplw r16, r27
|
||||
lwz r18, 0x007c(r31)
|
||||
bgt @_1a0
|
||||
bgt @_44
|
||||
and r28, r27, r18
|
||||
rlwinm. r26, r17, 0, 16, 16
|
||||
lwz r17, 0x0038(r31)
|
||||
beq @_fc
|
||||
lwz r18, 0x0070(r31)
|
||||
subf r19, r16, r28
|
||||
clrlwi r31, r18, 0x1e
|
||||
cmpwi cr7, r17, -0x01
|
||||
cmpwi cr6, r31, 0x00
|
||||
beq cr7, @_1a0
|
||||
beq cr6, @_44
|
||||
cmpwi r17, 0x01
|
||||
add r31, r18, r19
|
||||
blt @_44
|
||||
li r26, 0x00
|
||||
b @_208
|
||||
|
||||
@_fc
|
||||
mr r8, r27
|
||||
bl SpaceGetPagePLE ; LogicalPage *r8, Area *r31 // PLE *r30, notfound cr0.eq
|
||||
lwz r28, 0x0000(r30)
|
||||
mr r26, r30
|
||||
mr r8, r27
|
||||
bl MPCall_95_0x254
|
||||
beq @_12c
|
||||
lhz r16, 0x0000(r30)
|
||||
rlwinm. r8, r16, 0, 16, 16
|
||||
bne @_12c
|
||||
srwi r16, r16, 1
|
||||
sth r16, 0x0000(r30)
|
||||
|
||||
@_12c
|
||||
lwz r8, 0x0024(r31)
|
||||
lwz r9, 0x06b4(r1)
|
||||
cmpwi r8, 0x00
|
||||
cmpwi cr6, r9, 0x00
|
||||
li r8, 0x801
|
||||
li r9, 0x01
|
||||
bne @_154
|
||||
beq cr6, @_154
|
||||
li r8, 0x881
|
||||
li r9, 0x81
|
||||
|
||||
@_154
|
||||
lwz r31, 0x0688(r1)
|
||||
and. r30, r28, r8
|
||||
rlwimi r31, r28, 0, 0, 19
|
||||
cmplwi cr6, r30, 0x800
|
||||
cmplwi r30, 0x01
|
||||
bge cr6, @_2ec
|
||||
cmplw cr7, r30, r9
|
||||
ori r31, r31, 0x100
|
||||
rlwimi r31, r28, 28, 28, 28
|
||||
rlwimi r31, r28, 3, 24, 24
|
||||
rlwimi r31, r28, 31, 26, 26
|
||||
rlwimi r31, r28, 1, 25, 25
|
||||
xori r31, r31, 0x40
|
||||
rlwimi r31, r28, 30, 31, 31
|
||||
rlwimi r31, r28, 0, 30, 30
|
||||
xori r31, r31, 0x02
|
||||
beq @_208
|
||||
blt cr7, @_44
|
||||
bl Local_Panic
|
||||
|
||||
@_1a0
|
||||
lwz r29, 0x05e8(r1)
|
||||
rlwinm r28, r27, 7, 25, 28
|
||||
lwzx r29, r29, r28
|
||||
rlwinm r28, r27, 20, 16, 31
|
||||
lhz r30, 0x0000(r29)
|
||||
b @_1bc
|
||||
|
||||
@_1b8
|
||||
lhzu r30, 0x0008(r29)
|
||||
|
||||
@_1bc
|
||||
lhz r31, 0x0002(r29)
|
||||
subf r30, r30, r28
|
||||
cmplw cr7, r30, r31
|
||||
bgt cr7, @_1b8
|
||||
lwz r28, 0x0690(r1)
|
||||
lwz r31, 0x0004(r29)
|
||||
cmpwi cr7, r28, 0x00
|
||||
bnel cr7, @_314
|
||||
rlwinm. r26, r31, 23, 29, 30
|
||||
cmplwi cr7, r26, 0x06
|
||||
beq @_200
|
||||
cmplwi cr6, r26, 0x02
|
||||
beq cr7, @_368
|
||||
beq cr6, @_3b8
|
||||
b @_44
|
||||
|
||||
; Dead code:
|
||||
blt @_360
|
||||
bgt @_3b8
|
||||
|
||||
@_200
|
||||
slwi r28, r30, 12
|
||||
add r31, r31, r28
|
||||
|
||||
@_208
|
||||
mfsrin r30, r27
|
||||
rlwinm r28, r27, 26, 10, 25
|
||||
rlwinm r30, r30, 6, 7, 25
|
||||
xor r28, r28, r30
|
||||
lwz r30, KDP.PTEGMask(r1)
|
||||
lwz r29, KDP.HTABORG(r1)
|
||||
and r28, r28, r30
|
||||
or. r29, r29, r28
|
||||
|
||||
@_228
|
||||
lwz r30, 0x0000(r29)
|
||||
lwz r28, 0x0008(r29)
|
||||
cmpwi cr6, r30, 0x00
|
||||
lwz r30, 0x0010(r29)
|
||||
cmpwi cr7, r28, 0x00
|
||||
lwzu r28, 0x0018(r29)
|
||||
bge cr6, @_298
|
||||
cmpwi cr6, r30, 0x00
|
||||
lwzu r30, 0x0008(r29)
|
||||
bge cr7, @_298
|
||||
cmpwi cr7, r28, 0x00
|
||||
lwzu r28, 0x0008(r29)
|
||||
bge cr6, @_298
|
||||
cmpwi cr6, r30, 0x00
|
||||
lwzu r30, 0x0008(r29)
|
||||
bge cr7, @_298
|
||||
cmpwi cr7, r28, 0x00
|
||||
lwzu r28, 0x0008(r29)
|
||||
bge cr6, @_298
|
||||
cmpwi cr6, r30, 0x00
|
||||
addi r29, r29, 0x08
|
||||
bge cr7, @_298
|
||||
cmpwi cr7, r28, 0x00
|
||||
addi r29, r29, 0x08
|
||||
bge cr6, @_298
|
||||
rlwinm r28, r31, 0, 26, 26
|
||||
addi r29, r29, 0x08
|
||||
blt cr7, @_3e0
|
||||
|
||||
@_298
|
||||
cmpwi r26, 0x00
|
||||
mfsrin r28, r27
|
||||
rlwinm r30, r27, 10, 26, 31
|
||||
stw r27, 0x0694(r1)
|
||||
oris r30, r30, 0x8000
|
||||
ori r31, r31, 0x100
|
||||
rlwimi r30, r31, 27, 25, 25
|
||||
rlwinm r31, r31, 0, 21, 19
|
||||
rlwimi r30, r28, 7, 1, 24
|
||||
stw r31, -0x0014(r29)
|
||||
eieio
|
||||
stwu r30, -0x0018(r29)
|
||||
sync
|
||||
lwz r28, 0x0e94(r1)
|
||||
stw r29, 0x0698(r1)
|
||||
addi r28, r28, 0x01
|
||||
stw r28, 0x0e94(r1)
|
||||
beq @_44
|
||||
cmpwi r26, 0x5a5a
|
||||
bne @_2f4
|
||||
stw r29, 0x0690(r1)
|
||||
|
||||
@_2ec
|
||||
cmpw r29, r29
|
||||
b @_44
|
||||
|
||||
@_2f4
|
||||
lwz r28, 0x0000(r26)
|
||||
lwz r30, KDP.HTABORG(r1)
|
||||
ori r28, r28, 0x800
|
||||
subf r30, r30, r29
|
||||
cmpw r29, r29
|
||||
rlwimi r28, r30, 9, 0, 19
|
||||
stw r28, 0x0000(r26)
|
||||
b @_44
|
||||
|
||||
@_314
|
||||
lwz r28, 0x0e98(r1)
|
||||
lwz r29, 0x0690(r1)
|
||||
addi r28, r28, 0x01
|
||||
stw r28, 0x0e98(r1)
|
||||
li r28, 0x00
|
||||
stw r28, 0x0000(r29)
|
||||
lwz r29, 0x068c(r1)
|
||||
stw r28, 0x068c(r1)
|
||||
stw r28, 0x0690(r1)
|
||||
mfspr r28, pvr
|
||||
rlwinm. r28, r28, 0, 0, 14
|
||||
sync
|
||||
tlbie r29
|
||||
beq @_354
|
||||
sync
|
||||
tlbsync
|
||||
|
||||
@_354
|
||||
sync
|
||||
isync
|
||||
blr
|
||||
|
||||
; Dead code:
|
||||
@_360
|
||||
rlwinm. r28, r31, 21, 0, 1
|
||||
bge @_3cc
|
||||
|
||||
@_368
|
||||
slwi r28, r30, 2
|
||||
rlwinm r26, r31, 22, 0, 29
|
||||
lwzux r28, r26, r28
|
||||
lwz r31, 0x0688(r1)
|
||||
andi. r30, r28, 0x881
|
||||
rlwimi r31, r28, 0, 0, 19
|
||||
cmplwi cr6, r30, 0x800
|
||||
cmplwi cr7, r30, 0x81
|
||||
cmplwi r30, 0x01
|
||||
bge cr6, @_2ec
|
||||
cmplwi cr7, r30, 0x81
|
||||
ori r31, r31, 0x100
|
||||
rlwimi r31, r28, 3, 24, 24
|
||||
rlwimi r31, r28, 31, 26, 26
|
||||
rlwimi r31, r28, 1, 25, 25
|
||||
xori r31, r31, 0x40
|
||||
rlwimi r31, r28, 30, 31, 31
|
||||
beq @_208
|
||||
blt cr7, @_44
|
||||
bl Local_Panic
|
||||
|
||||
@_3b8
|
||||
ori r28, r27, 0xfff
|
||||
stw r28, 0x068c(r1)
|
||||
rlwinm r31, r31, 0, 22, 19
|
||||
li r26, 0x5a5a
|
||||
b @_208
|
||||
|
||||
; Dead code:
|
||||
@_3cc
|
||||
bgt @_44
|
||||
bl Local_Panic
|
||||
addi r29, r1, KDP.SegMap32SupInitPtr
|
||||
bl PagingFunc2
|
||||
b @_44
|
||||
|
||||
@_3e0
|
||||
cmplw cr6, r28, r26
|
||||
addi r29, r29, -0x50
|
||||
ble cr6, @_400
|
||||
crnot 2, 2
|
||||
lwz r30, KDP.PTEGMask(r1)
|
||||
xori r31, r31, 0x800
|
||||
xor r29, r29, r30
|
||||
beq @_228
|
||||
|
||||
@_400
|
||||
lwz r26, 0x069c(r1)
|
||||
crclr cr6_eq
|
||||
rlwimi r26, r29, 0, 0, 25
|
||||
li r9, 0x08
|
||||
addi r29, r26, 0x08
|
||||
b @_428
|
||||
|
||||
; Dead code:
|
||||
@_418
|
||||
bne cr6, @_420
|
||||
mr r26, r29
|
||||
|
||||
@_420
|
||||
cmpw cr6, r29, r26
|
||||
addi r29, r29, 0x08
|
||||
|
||||
@_428
|
||||
rlwimi r29, r26, 0, 0, 25
|
||||
lwz r31, 0x0004(r29)
|
||||
lwz r30, 0x0000(r29)
|
||||
beq cr6, @_444
|
||||
rlwinm r28, r31, 30, 25, 25
|
||||
andc. r28, r28, r30
|
||||
bne @_420
|
||||
|
||||
@_444
|
||||
addi r9, r9, -0x01
|
||||
cmpwi cr7, r9, 0x00
|
||||
rlwinm r31, r30, 0, 25, 25
|
||||
blel cr7, Local_Panic
|
||||
rlwinm r28, r30, 1, 0, 3
|
||||
neg r31, r31
|
||||
rlwimi r28, r30, 22, 4, 9
|
||||
xor r31, r31, r29
|
||||
rlwimi r28, r30, 5, 10, 19
|
||||
rlwinm r31, r31, 6, 10, 19
|
||||
xor r28, r28, r31
|
||||
xoris r30, r30, 0x8000
|
||||
lwz r31, 0x0e9c(r1)
|
||||
stw r29, 0x069c(r1)
|
||||
addi r31, r31, 0x01
|
||||
stw r31, 0x0e9c(r1)
|
||||
lwz r31, 0x0e98(r1)
|
||||
stw r30, 0x0000(r29)
|
||||
addi r31, r31, 0x01
|
||||
stw r31, 0x0e98(r1)
|
||||
sync
|
||||
mfspr r31, pvr
|
||||
rlwinm. r31, r31, 0, 0, 14
|
||||
tlbie r28
|
||||
beq @_4b0
|
||||
sync
|
||||
tlbsync
|
||||
|
||||
@_4b0
|
||||
sync
|
||||
isync
|
||||
|
||||
_InvalNCBPointerCache scratch=r8
|
||||
|
||||
mfsprg r8, 0
|
||||
mr r9, r28
|
||||
lwz r8, -0x001c(r8)
|
||||
bl FindAreaAbove
|
||||
lwz r16, 0x0024(r8)
|
||||
mr r31, r8
|
||||
cmplw r16, r28
|
||||
mr r8, r28
|
||||
bgt @_600
|
||||
bgt Local_Panic
|
||||
bl SpaceGetPagePLE ; LogicalPage *r8, Area *r31 // PLE *r30, notfound cr0.eq
|
||||
mr r26, r30
|
||||
beql @_88
|
||||
|
||||
@_500
|
||||
lwz r28, 0x0000(r26)
|
||||
lwz r31, 0x0004(r29)
|
||||
andi. r30, r28, 0x800
|
||||
rlwinm r30, r28, 23, 9, 28
|
||||
xor r30, r30, r29
|
||||
beq Local_Panic
|
||||
andi. r30, r30, 0xffff
|
||||
xori r28, r28, 0x800
|
||||
bne Local_Panic
|
||||
rlwimi r28, r31, 0, 0, 19
|
||||
rlwimi r28, r31, 29, 27, 27
|
||||
rlwimi r28, r31, 27, 28, 28
|
||||
stw r28, 0x0000(r26)
|
||||
bl @_88
|
||||
_log 'PTEG overflow: EA '
|
||||
mr r8, r27
|
||||
bl Printw
|
||||
_log 'Victim EA: '
|
||||
mr r8, r28
|
||||
bl Printw
|
||||
_log 'MapInfo: '
|
||||
mr r8, r29
|
||||
bl Printw
|
||||
lwz r16, 0x0000(r26)
|
||||
mr r8, r26
|
||||
bl Printw
|
||||
mr r8, r16
|
||||
bl Printw
|
||||
_log ' PTE: '
|
||||
lwz r16, 0x0000(r29)
|
||||
lwz r17, 0x0004(r29)
|
||||
mr r8, r29
|
||||
bl Printw
|
||||
mr r8, r16
|
||||
bl Printw
|
||||
mr r8, r17
|
||||
bl Printw
|
||||
_log '^n'
|
||||
bl @_88
|
||||
|
||||
@_600
|
||||
lwz r26, 0x05e8(r1)
|
||||
rlwinm r30, r28, 7, 25, 28
|
||||
lwzx r26, r26, r30
|
||||
|
||||
@_60c
|
||||
lhz r30, 0x0000(r26)
|
||||
rlwinm r31, r28, 20, 16, 31
|
||||
subf r30, r30, r31
|
||||
lhz r31, 0x0002(r26)
|
||||
addi r26, r26, 0x08
|
||||
cmplw cr7, r30, r31
|
||||
lwz r31, -0x0004(r26)
|
||||
andi. r31, r31, 0xe01
|
||||
cmpwi r31, 0xa01
|
||||
bgt cr7, @_60c
|
||||
beq @_60c
|
||||
lwz r26, -0x0004(r26)
|
||||
slwi r30, r30, 2
|
||||
rlwinm r31, r26, 22, 30, 31
|
||||
cmpwi cr7, r31, 0x03
|
||||
rlwinm r26, r26, 22, 0, 29
|
||||
add r26, r26, r30
|
||||
bnel cr7, @_88
|
||||
b @_500
|
||||
|
||||
|
||||
|
||||
PagingFunc2 ; OUTSIDE REFERER
|
||||
sync
|
||||
isync
|
||||
lwz r28, 0x0000(r29)
|
||||
stw r28, 0x05e8(r1)
|
||||
addi r28, r28, 0x84
|
||||
lis r31, 0x00
|
||||
|
||||
@_18
|
||||
lwzu r30, -0x0008(r28)
|
||||
addis r31, r31, -0x1000
|
||||
mr. r31, r31
|
||||
mtsrin r30, r31
|
||||
bne @_18
|
||||
isync
|
||||
|
||||
PagingFunc2AndAHalf
|
||||
lwz r28, 0x0004(r29)
|
||||
mfspr r31, pvr
|
||||
rlwinm. r31, r31, 0, 0, 14
|
||||
addi r29, r1, 0x00
|
||||
stw r28, 0x05ec(r1)
|
||||
beq @_168
|
||||
li r30, 0x00
|
||||
mtspr ibat0u, r30
|
||||
mtspr ibat1u, r30
|
||||
mtspr ibat2u, r30
|
||||
mtspr ibat3u, r30
|
||||
mtspr dbat0u, r30
|
||||
mtspr dbat1u, r30
|
||||
mtspr dbat2u, r30
|
||||
mtspr dbat3u, r30
|
||||
rlwimi r29, r28, 7, 25, 28
|
||||
lwz r31, 0x0284(r29)
|
||||
lwz r30, 0x0280(r29)
|
||||
rlwinm r31, r31, 0, 29, 27
|
||||
mtspr ibat0l, r31
|
||||
mtspr ibat0u, r30
|
||||
stw r31, 0x0304(r1)
|
||||
stw r30, 0x0300(r1)
|
||||
rlwimi r29, r28, 11, 25, 28
|
||||
lwz r31, 0x0284(r29)
|
||||
lwz r30, 0x0280(r29)
|
||||
rlwinm r31, r31, 0, 29, 27
|
||||
mtspr ibat1l, r31
|
||||
mtspr ibat1u, r30
|
||||
stw r31, 0x030c(r1)
|
||||
stw r30, 0x0308(r1)
|
||||
rlwimi r29, r28, 15, 25, 28
|
||||
lwz r31, 0x0284(r29)
|
||||
lwz r30, 0x0280(r29)
|
||||
rlwinm r31, r31, 0, 29, 27
|
||||
mtspr ibat2l, r31
|
||||
mtspr ibat2u, r30
|
||||
stw r31, 0x0314(r1)
|
||||
stw r30, 0x0310(r1)
|
||||
rlwimi r29, r28, 19, 25, 28
|
||||
lwz r31, 0x0284(r29)
|
||||
lwz r30, 0x0280(r29)
|
||||
rlwinm r31, r31, 0, 29, 27
|
||||
mtspr ibat3l, r31
|
||||
mtspr ibat3u, r30
|
||||
stw r31, 0x031c(r1)
|
||||
stw r30, 0x0318(r1)
|
||||
rlwimi r29, r28, 23, 25, 28
|
||||
lwz r31, 0x0284(r29)
|
||||
lwz r30, 0x0280(r29)
|
||||
mtspr dbat0l, r31
|
||||
mtspr dbat0u, r30
|
||||
stw r31, 0x0324(r1)
|
||||
stw r30, 0x0320(r1)
|
||||
rlwimi r29, r28, 27, 25, 28
|
||||
lwz r31, 0x0284(r29)
|
||||
lwz r30, 0x0280(r29)
|
||||
mtspr dbat1l, r31
|
||||
mtspr dbat1u, r30
|
||||
stw r31, 0x032c(r1)
|
||||
stw r30, 0x0328(r1)
|
||||
rlwimi r29, r28, 31, 25, 28
|
||||
lwz r31, 0x0284(r29)
|
||||
lwz r30, 0x0280(r29)
|
||||
mtspr dbat2l, r31
|
||||
mtspr dbat2u, r30
|
||||
stw r31, 0x0334(r1)
|
||||
stw r30, 0x0330(r1)
|
||||
rlwimi r29, r28, 3, 25, 28
|
||||
lwz r31, 0x0284(r29)
|
||||
lwz r30, 0x0280(r29)
|
||||
mtspr dbat3l, r31
|
||||
mtspr dbat3u, r30
|
||||
stw r31, 0x033c(r1)
|
||||
stw r30, 0x0338(r1)
|
||||
isync
|
||||
cmpw r29, r29
|
||||
blr
|
||||
|
||||
@_168
|
||||
rlwimi r29, r28, 7, 25, 28
|
||||
lwz r30, 0x0280(r29)
|
||||
lwz r31, 0x0284(r29)
|
||||
stw r30, 0x0300(r1)
|
||||
stw r31, 0x0304(r1)
|
||||
stw r30, 0x0320(r1)
|
||||
stw r31, 0x0324(r1)
|
||||
rlwimi r30, r31, 0, 25, 31
|
||||
mtspr ibat0u, r30
|
||||
lwz r30, 0x0280(r29)
|
||||
rlwimi r31, r30, 30, 26, 31
|
||||
rlwimi r31, r30, 6, 25, 25
|
||||
mtspr ibat0l, r31
|
||||
rlwimi r29, r28, 11, 25, 28
|
||||
lwz r30, 0x0280(r29)
|
||||
lwz r31, 0x0284(r29)
|
||||
stw r30, 0x0308(r1)
|
||||
stw r31, 0x030c(r1)
|
||||
stw r30, 0x0328(r1)
|
||||
stw r31, 0x032c(r1)
|
||||
rlwimi r30, r31, 0, 25, 31
|
||||
mtspr ibat1u, r30
|
||||
lwz r30, 0x0280(r29)
|
||||
rlwimi r31, r30, 30, 26, 31
|
||||
rlwimi r31, r30, 6, 25, 25
|
||||
mtspr ibat1l, r31
|
||||
rlwimi r29, r28, 15, 25, 28
|
||||
lwz r30, 0x0280(r29)
|
||||
lwz r31, 0x0284(r29)
|
||||
stw r30, 0x0310(r1)
|
||||
stw r31, 0x0314(r1)
|
||||
stw r30, 0x0330(r1)
|
||||
stw r31, 0x0334(r1)
|
||||
rlwimi r30, r31, 0, 25, 31
|
||||
mtspr ibat2u, r30
|
||||
lwz r30, 0x0280(r29)
|
||||
rlwimi r31, r30, 30, 26, 31
|
||||
rlwimi r31, r30, 6, 25, 25
|
||||
mtspr ibat2l, r31
|
||||
rlwimi r29, r28, 19, 25, 28
|
||||
lwz r30, 0x0280(r29)
|
||||
lwz r31, 0x0284(r29)
|
||||
stw r30, 0x0318(r1)
|
||||
stw r31, 0x031c(r1)
|
||||
stw r30, 0x0338(r1)
|
||||
stw r31, 0x033c(r1)
|
||||
rlwimi r30, r31, 0, 25, 31
|
||||
mtspr ibat3u, r30
|
||||
lwz r30, 0x0280(r29)
|
||||
rlwimi r31, r30, 30, 26, 31
|
||||
rlwimi r31, r30, 6, 25, 25
|
||||
mtspr ibat3l, r31
|
||||
cmpw r29, r29
|
||||
blr
|
||||
|
||||
|
||||
|
||||
PagingL2PWithBATs ; OUTSIDE REFERER
|
||||
lwz r30, 0x0000(r29)
|
||||
li r28, -0x01
|
||||
rlwimi r28, r30, 15, 0, 14
|
||||
xor r31, r27, r30
|
||||
andc. r31, r31, r28
|
||||
beq @_54
|
||||
lwzu r30, 0x0008(r29)
|
||||
rlwimi r28, r30, 15, 0, 14
|
||||
xor r31, r27, r30
|
||||
andc. r31, r31, r28
|
||||
beq @_54
|
||||
lwzu r30, 0x0008(r29)
|
||||
rlwimi r28, r30, 15, 0, 14
|
||||
xor r31, r27, r30
|
||||
andc. r31, r31, r28
|
||||
beq @_54
|
||||
lwzu r30, 0x0008(r29)
|
||||
rlwimi r28, r30, 15, 0, 14
|
||||
xor r31, r27, r30
|
||||
andc. r31, r31, r28
|
||||
bne PagingL2PWithoutBATs
|
||||
|
||||
@_54
|
||||
andi. r31, r30, 0x01
|
||||
rlwinm r28, r28, 0, 8, 19
|
||||
lwzu r31, 0x0004(r29)
|
||||
and r28, r27, r28
|
||||
or r31, r31, r28
|
||||
bnelr
|
||||
|
||||
|
||||
|
||||
PagingL2PWithoutBATs ; OUTSIDE REFERER
|
||||
mfsrin r31, r27
|
||||
rlwinm r30, r27, 10, 26, 31
|
||||
rlwimi r30, r31, 7, 1, 24
|
||||
rlwinm r28, r27, 26, 10, 25
|
||||
oris r30, r30, 0x8000
|
||||
rlwinm r31, r31, 6, 7, 25
|
||||
xor r28, r28, r31
|
||||
lwz r31, KDP.PTEGMask(r1)
|
||||
lwz r29, KDP.HTABORG(r1)
|
||||
and r28, r28, r31
|
||||
or. r29, r29, r28
|
||||
|
||||
@_2c
|
||||
lwz r31, 0x0000(r29)
|
||||
lwz r28, 0x0008(r29)
|
||||
cmpw cr6, r30, r31
|
||||
lwz r31, 0x0010(r29)
|
||||
cmpw cr7, r30, r28
|
||||
lwzu r28, 0x0018(r29)
|
||||
bne cr6, @_50
|
||||
|
||||
@_48
|
||||
lwzu r31, -0x0014(r29)
|
||||
blr
|
||||
|
||||
@_50
|
||||
cmpw cr6, r30, r31
|
||||
lwzu r31, 0x0008(r29)
|
||||
beq cr7, @_48
|
||||
cmpw cr7, r30, r28
|
||||
lwzu r28, 0x0008(r29)
|
||||
beq cr6, @_48
|
||||
cmpw cr6, r30, r31
|
||||
lwzu r31, 0x0008(r29)
|
||||
beq cr7, @_48
|
||||
cmpw cr7, r30, r28
|
||||
lwzu r28, 0x0008(r29)
|
||||
beq cr6, @_48
|
||||
cmpw cr6, r30, r31
|
||||
lwzu r31, -0x000c(r29)
|
||||
beqlr cr7
|
||||
cmpw cr7, r30, r28
|
||||
lwzu r31, 0x0008(r29)
|
||||
beqlr cr6
|
||||
lwzu r31, 0x0008(r29)
|
||||
beqlr cr7
|
||||
lwz r31, KDP.PTEGMask(r1)
|
||||
xori r30, r30, 0x40
|
||||
andi. r28, r30, 0x40
|
||||
addi r29, r29, -0x3c
|
||||
xor r29, r29, r31
|
||||
bne @_2c
|
||||
blr
|
||||
|
||||
|
||||
|
||||
pb equ 12
|
||||
|
||||
PagingFlushTLB ; OUTSIDE REFERER
|
||||
lhz r29, KDP.ProcessorInfo + NKProcessorInfo.TransCacheTotalSize(r1)
|
||||
slwi r29, r29, pb
|
||||
|
||||
@loop
|
||||
subi r29, r29, 1 << pb
|
||||
cmpwi r29, 0
|
||||
tlbie r29
|
||||
bgt @loop
|
||||
|
||||
mfspr r29, pvr
|
||||
rlwinm. r29, r29, 0, 0, 14
|
||||
|
||||
; All cpus
|
||||
sync
|
||||
beqlr
|
||||
|
||||
; Non-601 stuff
|
||||
tlbsync
|
||||
sync
|
||||
isync
|
||||
blr
|
@ -187,7 +187,7 @@ InitHTAB
|
||||
@skip_zeroing_pteg
|
||||
|
||||
; Flush the TLB after touching the HTAB
|
||||
bl PagingFlushTLB
|
||||
bl FlushTLB
|
||||
|
||||
########################################################################
|
||||
|
||||
@ -209,12 +209,12 @@ CopyPageMap
|
||||
subi r22, r22, 4 ; load a word from the CI pagemap (top first)
|
||||
lwzx r21, r9, r22
|
||||
|
||||
andi. r23, r21, PageMapEntry.DaddyFlag | PageMapEntry.PhysicalIsRelativeFlag
|
||||
cmpwi r23, PageMapEntry.PhysicalIsRelativeFlag
|
||||
andi. r23, r21, PME.DaddyFlag | PME.PhysicalIsRelativeFlag
|
||||
cmpwi r23, PME.PhysicalIsRelativeFlag
|
||||
bne @physical_address_not_relative_to_config_info
|
||||
|
||||
; if the physical address of the area is relative to the ConfigInfo struct:
|
||||
rlwinm r21, r21, 0, ~PageMapEntry.PhysicalIsRelativeFlag
|
||||
rlwinm r21, r21, 0, ~PME.PhysicalIsRelativeFlag
|
||||
add r21, r21, rCI
|
||||
@physical_address_not_relative_to_config_info
|
||||
|
||||
@ -231,22 +231,22 @@ CopyPageMap
|
||||
|
||||
lwz r8, NKConfigurationInfo.PageMapIRPOffset(rCI)
|
||||
add r8, rPgMap, r8
|
||||
lwz r23, PageMapEntry.PBaseAndFlags(r8)
|
||||
lwz r23, PME.PBaseAndFlags(r8)
|
||||
rlwimi r23, r1, 0, 0xFFFFF000
|
||||
stw r23, PageMapEntry.PBaseAndFlags(r8)
|
||||
stw r23, PME.PBaseAndFlags(r8)
|
||||
|
||||
lwz r8, NKConfigurationInfo.PageMapKDPOffset(rCI)
|
||||
add r8, rPgMap, r8
|
||||
lwz r23, PageMapEntry.PBaseAndFlags(r8)
|
||||
lwz r23, PME.PBaseAndFlags(r8)
|
||||
rlwimi r23, r1, 0, 0xFFFFF000
|
||||
stw r23, PageMapEntry.PBaseAndFlags(r8)
|
||||
stw r23, PME.PBaseAndFlags(r8)
|
||||
|
||||
lwz r19, KDP.PA_EmulatorData(r1)
|
||||
lwz r8, NKConfigurationInfo.PageMapEDPOffset(rCI)
|
||||
add r8, rPgMap, r8
|
||||
lwz r23, PageMapEntry.PBaseAndFlags(r8)
|
||||
lwz r23, PME.PBaseAndFlags(r8)
|
||||
rlwimi r23, r19, 0, 0xFFFFF000
|
||||
stw r23, PageMapEntry.PBaseAndFlags(r8)
|
||||
stw r23, PME.PBaseAndFlags(r8)
|
||||
|
||||
|
||||
; Copy the SegMap
|
||||
@ -296,24 +296,24 @@ CopyBATRangeInit
|
||||
; Save some ptrs that allow us to enable Overlay mode, etc
|
||||
|
||||
addi r23, r1, KDP.SegMap32SupInit
|
||||
stw r23, KDP.SupervisorSegMapPtr(r1)
|
||||
stw r23, KDP.SupervisorMemLayout.SegMapPtr(r1)
|
||||
lwz r23, NKConfigurationInfo.BatMap32SupInit(rCI)
|
||||
stw r23, KDP.SupervisorBatMap(r1)
|
||||
stw r23, KDP.SupervisorMemLayout.BatMap(r1)
|
||||
|
||||
addi r23, r1, KDP.SegMap32UsrInit
|
||||
stw r23, KDP.UserSegMapPtr(r1)
|
||||
stw r23, KDP.UserMemLayout.SegMapPtr(r1)
|
||||
lwz r23, NKConfigurationInfo.BatMap32UsrInit(rCI)
|
||||
stw r23, KDP.UserBatMap(r1)
|
||||
stw r23, KDP.UserMemLayout.BatMap(r1)
|
||||
|
||||
addi r23, r1, KDP.SegMap32CPUInit
|
||||
stw r23, KDP.CPUSegMapPtr(r1)
|
||||
stw r23, KDP.CpuMemLayout.SegMapPtr(r1)
|
||||
lwz r23, NKConfigurationInfo.BatMap32CPUInit(rCI)
|
||||
stw r23, KDP.CPUBatMap(r1)
|
||||
stw r23, KDP.CpuMemLayout.BatMap(r1)
|
||||
|
||||
addi r23, r1, KDP.SegMap32OvlInit
|
||||
stw r23, KDP.OverlaySegMapPtr(r1)
|
||||
stw r23, KDP.OverlayMemLayout.SegMapPtr(r1)
|
||||
lwz r23, NKConfigurationInfo.BatMap32OvlInit(rCI)
|
||||
stw r23, KDP.OverlayBatMap(r1)
|
||||
stw r23, KDP.OverlayMemLayout.BatMap(r1)
|
||||
|
||||
########################################################################
|
||||
|
||||
@ -382,7 +382,7 @@ CreatePageList
|
||||
|
||||
; In the PageMap, create a Primary Address Range matching the size of PageList
|
||||
|
||||
; For every segment that contains part of the PAR, the first PageMapEntry will be rewritten
|
||||
; For every segment that contains part of the PAR, the first PME will be rewritten
|
||||
; Going in, r21/r29 point to first/last element of PageList
|
||||
|
||||
CreatePARInPageMap
|
||||
@ -411,8 +411,8 @@ CreatePARInPageMap
|
||||
@next_segment
|
||||
cmplwi r22, 0xffff ; continue (bgt) while there are still pages left
|
||||
|
||||
; Rewrite the first PageMapEntry in this segment
|
||||
lwzu r8, 8(r19) ; find PageMapEntry using SegMap32SupInit
|
||||
; Rewrite the first PME in this segment
|
||||
lwzu r8, 8(r19) ; find PME using SegMap32SupInit
|
||||
rotlwi r31, r21, 10
|
||||
ori r31, r31, 0xC00
|
||||
stw r30, 0(r8) ; LBase = 0, PageCount = 0xFFFF
|
||||
@ -426,14 +426,14 @@ CreatePARInPageMap
|
||||
bgt @next_segment
|
||||
|
||||
; Reduce the number of pages in the last segment
|
||||
sth r22, PageMapEntry.PageCount(r8)
|
||||
sth r22, PME.PageCount(r8)
|
||||
|
||||
########################################################################
|
||||
|
||||
; Enable the ROM Overlay
|
||||
|
||||
addi r29, r1, KDP.OverlaySegMapPtr
|
||||
bl PagingFunc2
|
||||
addi r29, r1, KDP.OverlayMemLayout
|
||||
bl SwitchMemLayout
|
||||
|
||||
########################################################################
|
||||
|
||||
@ -441,15 +441,15 @@ CreatePARInPageMap
|
||||
|
||||
lwz r27, KDP.PA_ConfigInfo(r1)
|
||||
lwz r27, NKConfigurationInfo.LA_InterruptCtl(r27)
|
||||
bl PagingFunc1
|
||||
bl PopulateHTAB
|
||||
|
||||
lwz r27, KDP.PA_ConfigInfo(r1)
|
||||
lwz r27, NKConfigurationInfo.LA_KernelData(r27)
|
||||
bl PagingFunc1
|
||||
bl PopulateHTAB
|
||||
|
||||
lwz r27, KDP.PA_ConfigInfo(r1)
|
||||
lwz r27, NKConfigurationInfo.LA_EmulatorData(r27)
|
||||
bl PagingFunc1
|
||||
bl PopulateHTAB
|
||||
|
||||
########################################################################
|
||||
|
||||
|
@ -150,7 +150,7 @@ KCallRunAlternateContext
|
||||
|
||||
mr r27, r8
|
||||
addi r29, r1, KDP.BATs + 0xa0
|
||||
bl PagingL2PWithBATs
|
||||
bl GetPhysicalAddr
|
||||
clrlwi r23, r8, 20
|
||||
beq @fail
|
||||
|
||||
@ -161,7 +161,7 @@ KCallRunAlternateContext
|
||||
|
||||
addi r27, r27, 0x1000
|
||||
addi r29, r1, KDP.BATs + 0xa0
|
||||
bl PagingL2PWithBATs
|
||||
bl GetPhysicalAddr
|
||||
beq @fail
|
||||
|
||||
subi r31, r31, 0x1000
|
||||
|
@ -68,17 +68,8 @@ major_0x039dc_0x14
|
||||
org 0x18EC
|
||||
IntMachineCheck
|
||||
org 0x18F8
|
||||
PagingFunc1
|
||||
org 0x1C74
|
||||
PagingFunc2
|
||||
org 0x1E70
|
||||
PagingL2PWithBATs
|
||||
org 0x1EDC
|
||||
PagingL2PWithoutBATs
|
||||
org 0x1F98
|
||||
PagingFlushTLB
|
||||
org 0x1FB8
|
||||
|
||||
include 'NKMemory.s'
|
||||
include 'NKExceptions.s'
|
||||
include 'NKFloatingPt.s'
|
||||
include 'NKSoftInt.s'
|
||||
|
Loading…
Reference in New Issue
Block a user