mirror of
https://github.com/elliotnunn/powermac-rom.git
synced 2024-06-15 00:29:30 +00:00
round trip
always a pain
This commit is contained in:
parent
9b431080c4
commit
63c4fa4ac6
|
@ -24,7 +24,7 @@ vmr68Pte equ r16
|
|||
KCallVMDispatch
|
||||
stw r7, KDP.Flags(r1)
|
||||
lwz r7, KDP.CodeBase(r1)
|
||||
cmplwi r3, (VMTabEnd-VMTab)/4
|
||||
cmplwi r3, (VMTabEnd-VMTab)/2
|
||||
insrwi r7, r3, 7, 24
|
||||
lhz r8, VMTab-CodeBase(r7)
|
||||
lwz r9, KDP.VMLogicalPages(r1)
|
||||
|
@ -382,7 +382,7 @@ VMIsUnmodified
|
|||
########################################################################
|
||||
|
||||
VMLRU ; For each resident page: save Used bit and clear original
|
||||
slwi r9, r9, 2 ; (r9 is VMLogicalPages)
|
||||
slwi. r9, r9, 2 ; (r9 is VMLogicalPages)
|
||||
lwz r15, KDP.VMPageArray(r1)
|
||||
lwz r14, KDP.HTABORG(r1)
|
||||
add r15, r15, r9 ; r15 = loop PageArray ptr
|
||||
|
@ -397,7 +397,7 @@ VMLRU ; For each resident page: save Used bit and clear original
|
|||
mtcr r16
|
||||
cmpwi r4, 0
|
||||
|
||||
rlwinm r7, r16, 23, 0x7FFFFFFC ; r7 = offset of PPC PTE (if any)
|
||||
rlwinm r7, r16, 23, 0x007FFFF8 ; r7 = offset of PPC PTE (if any)
|
||||
bc BO_IF_NOT, bM68pdResident, @nonresident
|
||||
|
||||
bc BO_IF_NOT, bM68pdInHTAB, @not_in_htab
|
||||
|
@ -502,14 +502,13 @@ VMMakePageWriteThrough
|
|||
lwz r14, KDP.HTABORG(r1)
|
||||
slwi r6, r4, 12
|
||||
mfsrin r6, r6
|
||||
rlwinm r8, r6, 7, UpteValid | UpteVSID
|
||||
rlwinm r8, r6, 7, 0xFFFFF800
|
||||
xor r6, r6, r4
|
||||
slwi r7, r6, 6
|
||||
and r15, r15, r7
|
||||
rlwimi r8, r4, 22, UpteAPI
|
||||
crset cr0_eq ; clear cr0_eq when trying the secondary hash
|
||||
; _ori r8, r8, UpteValid ; r8 = the exact upper PTE word to search
|
||||
nop
|
||||
_ori r8, r8, UpteValid ; r8 = the exact upper PTE word to search
|
||||
|
||||
@secondary_hash
|
||||
lwzux r7, r14, r15 ; search the primary or secondary PTEG for r8
|
||||
|
@ -622,7 +621,7 @@ VMMarkCleanUnused
|
|||
|
||||
li r7, LpteReference | LpteChange
|
||||
andc r9, r9, r7
|
||||
ori r16, r16, M68pdModified
|
||||
ori r16, r16, M68pdShouldClean
|
||||
bl SavePTEAnd68kPD
|
||||
|
||||
b vmRet
|
||||
|
@ -777,7 +776,7 @@ VMAllocateMemory_0xc0
|
|||
lis r9, 4
|
||||
cmplw cr7, r7, r9
|
||||
rlwinm. r9, r7, 0, 0, 11
|
||||
bge cr7, vmRetNeg1
|
||||
blt cr7, vmRetNeg1
|
||||
bne vmRetNeg1
|
||||
lwz r14, KDP.CurMap.SegMapPtr(r1)
|
||||
rlwinm r9, r7, 19, 25, 28
|
||||
|
@ -793,10 +792,10 @@ VMAllocateMemory_0xf4
|
|||
lhz r16, 0x0002(r14)
|
||||
subf r8, r8, r9
|
||||
cmplw cr7, r8, r16
|
||||
ble cr7, VMAllocateMemory_0xf0
|
||||
bgt cr7, VMAllocateMemory_0xf0
|
||||
add r8, r8, r5
|
||||
cmplw cr7, r8, r16
|
||||
ble cr7, vmRetNeg1
|
||||
bgt cr7, vmRetNeg1
|
||||
lwz r16, 0x0004(r14)
|
||||
slwi r8, r7, 16
|
||||
andi. r16, r16, 0xe01
|
||||
|
@ -1050,8 +1049,8 @@ QuickCalcPTE
|
|||
stw r9, KDP.NKInfo.HashTableCreateCount(r1)
|
||||
rlwimi r8, r4, 22, UpteAPI
|
||||
lwz r9, KDP.PageAttributeInit(r1) ; r9 will be new lower PTE
|
||||
; _ori r8, r8, UpteValid
|
||||
nop
|
||||
_ori r8, r8, UpteValid
|
||||
rlwimi r9, r16, 0, 0xFFFFF000
|
||||
_mvbit r9, bLpteReference, r16, bM68pdUsed
|
||||
_mvbit r9, bLpteChange, r16, bM68pdModified
|
||||
_mvbit r9, bLpteInhibcache, r16, bM68pdCacheinhib
|
||||
|
@ -1095,7 +1094,7 @@ QuickCalcPTE
|
|||
QuickGetPhysical
|
||||
addi r8, r1, KDP.SegmentPageArrays
|
||||
lwz r9, KDP.VMPhysicalPages(r1)
|
||||
rlwimi r8, r7, 18, 0xF * 4
|
||||
rlwimi r8, r7, 18, 28, 29
|
||||
cmplw r7, r9
|
||||
lwz r8, 0(r8)
|
||||
rlwinm r7, r7, 2, 0xFFFF * 4
|
||||
|
|
|
@ -38,7 +38,7 @@ my_pad set (my_align - (my_offset & my_mask)) & my_mask
|
|||
MACRO
|
||||
_ori &rd, &rs, &imm
|
||||
IF (&imm) & 0xFFFF0000 THEN
|
||||
oris&dot &rd, &rs, (&imm) >> 16
|
||||
oris&dot &rd, &rs, ((&imm) >> 16) & 0xFFFF ; beware sign ext!
|
||||
ELSE
|
||||
ori&dot &rd, &rs, &imm
|
||||
ENDIF
|
||||
|
|
|
@ -172,7 +172,7 @@ PutPTE ; EA r27 // PTE r30/r31, EQ=Success, GT=Invalid, LT=Fault
|
|||
@single_pte ; PMDT_PTE_Single
|
||||
ori r28, r27, 0xfff ; r27 = EA, r31 = PMDT (low word, RPN)
|
||||
stw r28, KDP.HtabSingleEA(r1)
|
||||
rlwinm r31, r31, 0, ~Pattr_PTE_Single ; clear the flag that got us here, leaving none
|
||||
rlwinm r31, r31, 0, ~(Pattr_NotPTE | Pattr_PTE_Single) ; clear the flag that got us here, leaving none
|
||||
li r26, 0x5A5A ; so that KDP.HtabSinglePTE gets set and we return correctly
|
||||
b @parsed_pmdt ; RTS with r26 = 0x5A5A and r31 having flags cleared
|
||||
|
||||
|
|
|
@ -329,7 +329,7 @@ Create68kPTEs
|
|||
li r30, M68pdResident
|
||||
_mvbit r30, bM68pdCacheinhib, r23, bLpteInhibcache
|
||||
_mvbit r30, bM68pdCacheNotIO, r23, bLpteWritethru
|
||||
xori r30, r30, bM68pdCacheNotIO
|
||||
xori r30, r30, M68pdCacheNotIO
|
||||
_mvbit r30, bM68pdModified, r23, bLpteChange
|
||||
_mvbit r30, bM68pdUsed, r23, bLpteReference
|
||||
|
||||
|
@ -389,7 +389,7 @@ PutLogicalAreaInPageMap
|
|||
; Rewrite the first PMDT in this segment
|
||||
lwzu r8, 8(r19) ; find PMDT using SegMap32SupInit
|
||||
rotlwi r31, r21, 10
|
||||
ori r31, r31, Pattr_68k
|
||||
ori r31, r31, PMDT_68k
|
||||
stw r30, 0(r8) ; use entire segment (PageIdx = 0, PageCount = 0xFFFF)
|
||||
stw r31, 4(r8) ; RPN = PLE ptr | PMDT_NotPTE_PageList
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user