mirror of
https://github.com/elliotnunn/powermac-rom.git
synced 2024-06-07 08:30:20 +00:00
builds
This commit is contained in:
parent
51020bbbf3
commit
9b431080c4
|
@ -297,6 +297,13 @@ BatMap ds.l 1 ; packed array of 4-bit indices into BATs
|
|||
|
||||
########################################################################
|
||||
|
||||
BAT RECORD 0, INCR
|
||||
U ds.l 1
|
||||
L ds.l 1
|
||||
ENDR
|
||||
|
||||
########################################################################
|
||||
|
||||
KDP RECORD 0, INCR ; Kernel Data Page
|
||||
r0 ds.l 1 ; 000 ; used for quick register saves at interrupt time
|
||||
r1 ds.l 1 ; 004
|
||||
|
|
|
@ -398,9 +398,9 @@ InitEmulator
|
|||
mfpvr r7 ; Calculate Flags:
|
||||
srwi r7, r7, 16
|
||||
cmpwi r7, 1
|
||||
lis r7, GlobalFlagSystem >> 16 ; we will enter System Context (all CPUs)
|
||||
lis r7, GlobalFlagSystem >> 16 ; we will enter System Context (all CPUs)
|
||||
bne @not_601
|
||||
_ori r7, r7, GlobalFlagMQReg ; but only 601 has MQ register
|
||||
_ori r7, r7, GlobalFlagMQReg ; but only 601 has MQ register
|
||||
@not_601
|
||||
stw r7, KDP.Flags(r1)
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ vmr68Pte equ r16
|
|||
KCallVMDispatch
|
||||
stw r7, KDP.Flags(r1)
|
||||
lwz r7, KDP.CodeBase(r1)
|
||||
cmplwi r3, MaxVMCallCount
|
||||
cmplwi r3, (VMTabEnd-VMTab)/4
|
||||
insrwi r7, r3, 7, 24
|
||||
lhz r8, VMTab-CodeBase(r7)
|
||||
lwz r9, KDP.VMLogicalPages(r1)
|
||||
|
@ -74,6 +74,7 @@ VMTab ; Placeholders indented
|
|||
vmtabLine VMMarkUndefined ; 23 VMMarkUndefined
|
||||
vmtabLine VMMakePageWriteThrough ; 24 VMMakePageWriteThrough
|
||||
vmtabLine VMAllocateMemory ; 25 VMAllocateMemory: Page:A0, Count:A1, BusAlignMask:D1
|
||||
VMTabEnd
|
||||
|
||||
########################################################################
|
||||
|
||||
|
@ -396,7 +397,7 @@ VMLRU ; For each resident page: save Used bit and clear original
|
|||
mtcr r16
|
||||
cmpwi r4, 0
|
||||
|
||||
rlwinm r7, r16, 23, 7FFFFFFC ; r7 = offset of PPC PTE (if any)
|
||||
rlwinm r7, r16, 23, 0x7FFFFFFC ; r7 = offset of PPC PTE (if any)
|
||||
bc BO_IF_NOT, bM68pdResident, @nonresident
|
||||
|
||||
bc BO_IF_NOT, bM68pdInHTAB, @not_in_htab
|
||||
|
@ -455,14 +456,14 @@ VMMakePageWriteThrough
|
|||
ori r9, r9, LpteWritethru
|
||||
bl SavePTEAnd68kPD
|
||||
|
||||
b FlushPageAndReturn
|
||||
b vmFlushPageAndReturn
|
||||
|
||||
@not_paged ; so try to find a free PMDT to use (quite messy)
|
||||
rlwinm r7, r4, 16, 0xF ; address must be in segments 8-F
|
||||
cmpwi r7, 9
|
||||
blt vmRetNeg1
|
||||
|
||||
bc BO_IF_NOT, M68pdCacheinhib, vmRetNeg1 ; must already be cache-inhibited??
|
||||
bc BO_IF_NOT, bM68pdCacheinhib, vmRetNeg1 ; must already be cache-inhibited??
|
||||
|
||||
lwz r5, PMDT.Size + PMDT.Word2(r15) ; take over the following PMDT if
|
||||
andi. r6, r5, EveryPattr ; it is "available"
|
||||
|
@ -507,7 +508,8 @@ VMMakePageWriteThrough
|
|||
and r15, r15, r7
|
||||
rlwimi r8, r4, 22, UpteAPI
|
||||
crset cr0_eq ; clear cr0_eq when trying the secondary hash
|
||||
oris r8, r8, UpteValid ; r8 = the exact upper PTE word to search
|
||||
; _ori r8, r8, UpteValid ; r8 = the exact upper PTE word to search
|
||||
nop
|
||||
|
||||
@secondary_hash
|
||||
lwzux r7, r14, r15 ; search the primary or secondary PTEG for r8
|
||||
|
@ -577,11 +579,11 @@ VMMakePageNonCacheable ; set WI=01 and CM0/CM1=11
|
|||
ori r9, r9, LpteInhibcache
|
||||
|
||||
bl SavePTEAnd68kPD
|
||||
; Fall through to FlushPageAndReturn
|
||||
; Fall through to vmFlushPageAndReturn
|
||||
|
||||
########################################################################
|
||||
|
||||
FlushPageAndReturn ; When making page write-though or noncacheable
|
||||
vmFlushPageAndReturn ; When making page write-though or noncacheable
|
||||
rlwinm r4, r9, 0, 0xFFFFF000
|
||||
addi r5, r4, 32
|
||||
li r7, 0x1000
|
||||
|
@ -734,40 +736,42 @@ VMShouldClean ; is this page is a good candidate for writing to disk?
|
|||
########################################################################
|
||||
|
||||
VMAllocateMemory
|
||||
lwz r7, KDP.VMPageArray(r1)
|
||||
lwz r8, KDP.SegmentPageArrays + 0(r1)
|
||||
cmpwi cr6, r5, 0x00
|
||||
lwz r7, KDP.VMPageArray(r1)
|
||||
lwz r8, KDP.SegmentPageArrays(r1)
|
||||
cmpwi cr6, r5, 0
|
||||
cmpw cr7, r7, r8
|
||||
or r7, r4, r6
|
||||
rlwinm. r7, r7, 0, 0, 11
|
||||
bc BO_IF_NOT, M68pdCacheinhib, vmRetNeg1
|
||||
or r7, r4, r6 ; r4/r6 are page numbers?
|
||||
rlwinm. r7, r7, 0, 0xFFF00000
|
||||
ble cr6, vmRetNeg1
|
||||
lwz r9, KDP.VMLogicalPages(r1)
|
||||
bne cr7, vmRetNeg1
|
||||
bne cr7, vmRetNeg1 ; diff page arrays: already inited?
|
||||
mr r7, r4
|
||||
bne vmRetNeg1
|
||||
mr r4, r9
|
||||
slwi r6, r6, 12
|
||||
addi r5, r5, -0x01
|
||||
subi r5, r5, 1
|
||||
|
||||
@for_each_logical_page
|
||||
subi r4, r4, 1
|
||||
bl PageInfo
|
||||
bcl BO_IF, bM68pdInHTAB, DeletePTE ; clear from HTAB
|
||||
|
||||
VMAllocateMemory_0x74
|
||||
addi r4, r4, -0x01
|
||||
bl PageInfo
|
||||
bcl BO_IF, bM68pdInHTAB, DeletePTE
|
||||
lwz r9, KDP.VMLogicalPages(r1)
|
||||
subf r8, r4, r9
|
||||
cmplw cr7, r5, r8
|
||||
and. r8, r16, r6
|
||||
bge cr7, VMAllocateMemory_0x74
|
||||
bne VMAllocateMemory_0x74
|
||||
cmpwi cr6, r6, 0x00
|
||||
bge cr7, @for_each_logical_page
|
||||
bne @for_each_logical_page
|
||||
|
||||
cmpwi cr6, r6, 0
|
||||
beq cr6, VMAllocateMemory_0xc0
|
||||
slwi r8, r5, 2
|
||||
slwi r8, r5, 2
|
||||
lwzx r8, r15, r8
|
||||
slwi r14, r5, 12
|
||||
add r14, r14, r16
|
||||
xor r8, r8, r14
|
||||
rlwinm. r8, r8, 0, 0, 19
|
||||
bne VMAllocateMemory_0x74
|
||||
bne @for_each_logical_page
|
||||
|
||||
VMAllocateMemory_0xc0
|
||||
lis r9, 4
|
||||
|
@ -977,7 +981,7 @@ SaveLowerPTE
|
|||
|
||||
DeletePTE
|
||||
lwz r8, KDP.NKInfo.HashTableDeleteCount(r1)
|
||||
rlwinm r16, r16, 0, 21, 19 ~M68pdInHTAB
|
||||
rlwinm r16, r16, 0, ~M68pdInHTAB
|
||||
addi r8, r8, 1
|
||||
stw r8, KDP.NKInfo.HashTableDeleteCount(r1)
|
||||
rlwimi r16, r9, 0, 0xFFFFF000 ; edit new 68k PD
|
||||
|
@ -1046,12 +1050,13 @@ QuickCalcPTE
|
|||
stw r9, KDP.NKInfo.HashTableCreateCount(r1)
|
||||
rlwimi r8, r4, 22, UpteAPI
|
||||
lwz r9, KDP.PageAttributeInit(r1) ; r9 will be new lower PTE
|
||||
oris r8, r8, UpteValid
|
||||
; _ori r8, r8, UpteValid
|
||||
nop
|
||||
_mvbit r9, bLpteReference, r16, bM68pdUsed
|
||||
_mvbit r9, bLpteChange, r16, bM68pdModified
|
||||
_mvbit r9, bLpteInhibcache, r16, bM68pdCacheinhib
|
||||
_mvbit r9, bLpteWritethru, r16, bM68pdCacheNotIO
|
||||
xori r9, M68pdCacheinhib
|
||||
xori r9, r9, M68pdCacheinhib
|
||||
_mvbit r9, bLpteP1, r16, bM68pdWriteProtect
|
||||
|
||||
lwz r7, KDP.HTABORG(r1)
|
||||
|
|
|
@ -37,7 +37,7 @@ my_pad set (my_align - (my_offset & my_mask)) & my_mask
|
|||
|
||||
MACRO
|
||||
_ori &rd, &rs, &imm
|
||||
IF (&imm) > 0xFFFF
|
||||
IF (&imm) & 0xFFFF0000 THEN
|
||||
oris&dot &rd, &rs, (&imm) >> 16
|
||||
ELSE
|
||||
ori&dot &rd, &rs, &imm
|
||||
|
@ -56,8 +56,8 @@ my_pad set (my_align - (my_offset & my_mask)) & my_mask
|
|||
MACRO
|
||||
_clrNCBCache &scr==r0
|
||||
li &scr, -1
|
||||
stw &scr, KDP.NCBCacheLA0
|
||||
stw &scr, KDP.NCBCacheLA1
|
||||
stw &scr, KDP.NCBCacheLA2
|
||||
stw &scr, KDP.NCBCacheLA3
|
||||
stw &scr, KDP.NCBCacheLA0(r1)
|
||||
stw &scr, KDP.NCBCacheLA1(r1)
|
||||
stw &scr, KDP.NCBCacheLA2(r1)
|
||||
stw &scr, KDP.NCBCacheLA3(r1)
|
||||
ENDM
|
||||
|
|
|
@ -3,9 +3,8 @@
|
|||
|
||||
NKFiles = ¶
|
||||
{NKDir}NanoKernel.s ¶
|
||||
{NKDir}NKStructs.s ¶
|
||||
{NKDir}NKEquates.s ¶
|
||||
{NKDir}NKMacros.s ¶
|
||||
{NKDir}NKEquates.s ¶
|
||||
{NKDir}NKInit.s ¶
|
||||
{NKDir}NKSystemCrash.s ¶
|
||||
{NKDir}NKHotInts.s ¶
|
||||
|
|
Loading…
Reference in New Issue
Block a user