mirror of
https://github.com/elliotnunn/powermac-rom.git
synced 2024-06-07 08:30:20 +00:00
memretry in some shape
This commit is contained in:
parent
5086393238
commit
2d82285303
85
NanoKernel/MRInterrupts.s
Executable file
85
NanoKernel/MRInterrupts.s
Executable file
|
@ -0,0 +1,85 @@
|
|||
; Special MR registers to investigate: r19 (inst addr), r26 (error)
|
||||
|
||||
MRDataStorageInt ; Consult DSISR and the page table to decide what to do
|
||||
mfdsisr r31 ; Check DSISR for simple HTAB miss
|
||||
andis. r28, r31, 0xC030 ; (bits 0/1/10/11)
|
||||
mfsprg r1, 1
|
||||
mfdar r27
|
||||
bne @possible_htab_miss
|
||||
|
||||
andis. r28, r31, 0x0800 ; Illegal data access (else crash!)
|
||||
addi r29, r1, 0x320 ; ?bug -> PutPTE used to accept this arg
|
||||
bnel PutPTE ; Read the failing PTE to r30/r31
|
||||
li r28, 0x43 ; Filter Writethru and Protection bits
|
||||
and r28, r31, r28
|
||||
cmpwi cr7, r28, 0x43
|
||||
beql SystemCrash ; Not illegal data access => Crash
|
||||
mfsprg r28, 2
|
||||
mtlr r28
|
||||
bne cr7, @access_exception ; Any filtered bit unset => Exception
|
||||
|
||||
mfsrr0 r28 ; Writethru and Protection bits set => ROM write nop
|
||||
addi r28, r28, 4
|
||||
lwz r26, KDP.NKInfo.QuietWrite(r1)
|
||||
mtsrr0 r28
|
||||
addi r26, r26, 1
|
||||
stw r26, KDP.NKInfo.QuietWrite(r1)
|
||||
|
||||
@return
|
||||
extrwi r26, r25, 8, 22 ; Signal to some MemRetry code?
|
||||
rfi
|
||||
|
||||
@access_exception
|
||||
andi. r28, r31, 3
|
||||
li r8, ecDataSupAccessViolation
|
||||
beq ExceptionAfterRetry
|
||||
|
||||
cmpwi r28, 3
|
||||
li r8, ecDataWriteViolation
|
||||
beq ExceptionAfterRetry ; Nobody allowed to write => Exception
|
||||
li r8, ecDataSupWriteViolation
|
||||
b ExceptionAfterRetry ; Supervisor allowed to write => Exception
|
||||
|
||||
@possible_htab_miss
|
||||
andis. r28, r31, 0x8010 ; Check for DataAccess Interrupt or ec[io]wx
|
||||
bne MRHardwareFault ; Either of those => big trouble
|
||||
|
||||
bl PutPTE ; HTAB miss => fill HTAB
|
||||
mfsprg r28, 2 ; (restore lr)
|
||||
mtlt r28
|
||||
beq @return ; HTAB success => RFI
|
||||
li r8, ecDataPageFault
|
||||
blt ExceptionAfterRetry ; Fault => Exception
|
||||
li r8, ecDataInvalidAddress
|
||||
b ExceptionAfterRetry ; Bad address => Exception
|
||||
|
||||
MRMachineCheckInt ; Always gives HW fault
|
||||
mfsprg r1, 1
|
||||
lwz r27, KDP.HtabLastEA(r1)
|
||||
|
||||
subf r28, r19, r27 ; Delete last HTAB entry if suspicious
|
||||
cmpwi r28, -16
|
||||
blt @no_htab_del
|
||||
cmpwi r28, 16
|
||||
bgt @no_htab_del
|
||||
|
||||
lwz r28, KDP.NKInfo.HashTableDeleteCount(r1)
|
||||
lwz r29, KDP.ApproxCurrentPTEG(r1)
|
||||
addi r28, r28, 1
|
||||
stw r28, KDP.NKInfo.HashTableDeleteCount(r1)
|
||||
li r28, 0
|
||||
stw r28, 0(r29)
|
||||
sync
|
||||
tlbie r27
|
||||
sync
|
||||
@no_htab_del
|
||||
|
||||
MRHardwareFault ; Can come from a DSI or a Machine Check
|
||||
cmplw r10, r19
|
||||
li r8, ecDataHardwareFault
|
||||
bne ExceptionAfterRetry
|
||||
|
||||
mtsprg 3, r24
|
||||
lmw r14, KDP.r14(r1)
|
||||
li r8, ecInstHardwareFault
|
||||
b Exception
|
155
NanoKernel/MRMemtab.s
Executable file
155
NanoKernel/MRMemtab.s
Executable file
|
@ -0,0 +1,155 @@
|
|||
; Indexing this table:
|
||||
; bits 0-23 MRCode
|
||||
; bits 24-26 number of bytes to access minus one
|
||||
; bit 27 one for load, zero for store
|
||||
; bits 28-30 alignment modulus
|
||||
; bit 31 zero (entries are 2b)
|
||||
|
||||
; "Alignment modulus":
|
||||
; If the "string" to be accessed is right-aligned to an 8b boundary, modulus is 0.
|
||||
; Modulus then increases by 1 for every increase in the address of the "string".
|
||||
|
||||
; Interpreting this table:
|
||||
; Each entry refers to a routine
|
||||
|
||||
MACRO
|
||||
memtabRow &label
|
||||
DC.W (&label-MRTop) - (*-MRMemtab)
|
||||
ENDM
|
||||
|
||||
MRMemtab
|
||||
memtabRow MRStore1 ; 1-byte stores
|
||||
memtabRow MRStore1 ; mod 1
|
||||
memtabRow MRStore1 ; mod 2
|
||||
memtabRow MRStore1 ; mod 3
|
||||
memtabRow MRStore1 ; mod 4
|
||||
memtabRow MRStore1 ; mod 5
|
||||
memtabRow MRStore1 ; mod 6
|
||||
memtabRow MRStore1 ; mod 7
|
||||
memtabRow MRLoad1 ; 1-byte loads
|
||||
memtabRow MRLoad1 ; mod 1
|
||||
memtabRow MRLoad1 ; mod 2
|
||||
memtabRow MRLoad1 ; mod 3
|
||||
memtabRow MRLoad1 ; mod 4
|
||||
memtabRow MRLoad1 ; mod 5
|
||||
memtabRow MRLoad1 ; mod 6
|
||||
memtabRow MRLoad1 ; mod 7
|
||||
|
||||
memtabRow MRStore2 ; 2-byte stores
|
||||
memtabRow MRStore11 ; mod 1
|
||||
memtabRow MRStore2 ; mod 2
|
||||
memtabRow MRStore11 ; mod 3
|
||||
memtabRow MRStore2 ; mod 4
|
||||
memtabRow MRStore11 ; mod 5
|
||||
memtabRow MRStore2 ; mod 6
|
||||
memtabRow MRStore11 ; mod 7
|
||||
memtabRow MRLoad2Fast ; 2-byte loads
|
||||
memtabRow MRLoad11 ; mod 1
|
||||
memtabRow MRLoad2Fast ; mod 2
|
||||
memtabRow MRLoad11 ; mod 3
|
||||
memtabRow MRLoad2Fast ; mod 4
|
||||
memtabRow MRLoad11 ; mod 5
|
||||
memtabRow MRLoad2Fast ; mod 6
|
||||
memtabRow MRLoad11 ; mod 7
|
||||
|
||||
memtabRow MRStore12 ; 3-byte stores
|
||||
memtabRow MRStore21 ; mod 1
|
||||
memtabRow MRStore12 ; mod 2
|
||||
memtabRow MRStore21 ; mod 3
|
||||
memtabRow MRStore12 ; mod 4
|
||||
memtabRow MRStore21 ; mod 5
|
||||
memtabRow MRStore12 ; mod 6
|
||||
memtabRow MRStore21 ; mod 7
|
||||
memtabRow MRLoad12 ; 3-byte loads
|
||||
memtabRow MRLoad21 ; mod 1
|
||||
memtabRow MRLoad12 ; mod 2
|
||||
memtabRow MRLoad21 ; mod 3
|
||||
memtabRow MRLoad12 ; mod 4
|
||||
memtabRow MRLoad21 ; mod 5
|
||||
memtabRow MRLoad12 ; mod 6
|
||||
memtabRow MRLoad21 ; mod 7
|
||||
|
||||
memtabRow MRStore4 ; 4-byte stores
|
||||
memtabRow MRStore121 ; mod 1
|
||||
memtabRow MRStore22Fast ; mod 2
|
||||
memtabRow MRStore121 ; mod 3
|
||||
memtabRow MRStore4 ; mod 4
|
||||
memtabRow MRStore121 ; mod 5
|
||||
memtabRow MRStore22Fast ; mod 6
|
||||
memtabRow MRStore121 ; mod 7
|
||||
memtabRow MRLoad4 ; 4-byte loads
|
||||
memtabRow MRLoad121 ; mod 1
|
||||
memtabRow MRLoad22Fast ; mod 2
|
||||
memtabRow MRLoad121 ; mod 3
|
||||
memtabRow MRLoad4 ; mod 4
|
||||
memtabRow MRLoad121 ; mod 5
|
||||
memtabRow MRLoad22Fast ; mod 6
|
||||
memtabRow MRLoad121 ; mod 7
|
||||
|
||||
memtabRow MRStore14 ; 5-byte stores
|
||||
memtabRow MRStore41 ; mod 1
|
||||
memtabRow MRStore14 ; mod 2
|
||||
memtabRow MRStore221 ; mod 3
|
||||
memtabRow MRStore14 ; mod 4
|
||||
memtabRow MRStore41 ; mod 5
|
||||
memtabRow MRStore14 ; mod 6
|
||||
memtabRow MRStore221 ; mod 7
|
||||
memtabRow MRLoad14 ; 5-byte loads
|
||||
memtabRow MRLoad41 ; mod 1
|
||||
memtabRow MRLoad122 ; mod 2
|
||||
memtabRow MRLoad221 ; mod 3
|
||||
memtabRow MRLoad14 ; mod 4
|
||||
memtabRow MRLoad41 ; mod 5
|
||||
memtabRow MRLoad122 ; mod 6
|
||||
memtabRow MRLoad221 ; mod 7
|
||||
|
||||
memtabRow MRStore24 ; 6-byte stores
|
||||
memtabRow MRStore141 ; mod 1
|
||||
memtabRow MRStore42 ; mod 2
|
||||
memtabRow MRStore1221 ; mod 3
|
||||
memtabRow MRStore24 ; mod 4
|
||||
memtabRow MRStore141 ; mod 5
|
||||
memtabRow MRStore42 ; mod 6
|
||||
memtabRow MRStore1221 ; mod 7
|
||||
memtabRow MRLoad24 ; 6-byte loads
|
||||
memtabRow MRLoad141 ; mod 1
|
||||
memtabRow MRLoad42 ; mod 2
|
||||
memtabRow MRLoad1221 ; mod 3
|
||||
memtabRow MRLoad24 ; mod 4
|
||||
memtabRow MRLoad141 ; mod 5
|
||||
memtabRow MRLoad42 ; mod 6
|
||||
memtabRow MRLoad1221 ; mod 7
|
||||
|
||||
memtabRow MRStore124 ; 7-byte stores
|
||||
memtabRow MRStore241 ; mod 1
|
||||
memtabRow MRStore142 ; mod 2
|
||||
memtabRow MRStore421 ; mod 3
|
||||
memtabRow MRStore124 ; mod 4
|
||||
memtabRow MRStore241 ; mod 5
|
||||
memtabRow MRStore142 ; mod 6
|
||||
memtabRow MRStore421 ; mod 7
|
||||
memtabRow MRLoad124 ; 7-byte loads
|
||||
memtabRow MRLoad241 ; mod 1
|
||||
memtabRow MRLoad142 ; mod 2
|
||||
memtabRow MRLoad421 ; mod 3
|
||||
memtabRow MRLoad124 ; mod 4
|
||||
memtabRow MRLoad241 ; mod 5
|
||||
memtabRow MRLoad142 ; mod 6
|
||||
memtabRow MRLoad421 ; mod 7
|
||||
|
||||
memtabRow MRStore8 ; 8-byte stores
|
||||
memtabRow MRStore1241 ; mod 1
|
||||
memtabRow MRStore242 ; mod 2
|
||||
memtabRow MRStore1421 ; mod 3
|
||||
memtabRow MRStore44 ; mod 4
|
||||
memtabRow MRStore1241 ; mod 5
|
||||
memtabRow MRStore242 ; mod 6
|
||||
memtabRow MRStore1421 ; mod 7
|
||||
memtabRow MRLoad8 ; 8-byte loads
|
||||
memtabRow MRLoad1241 ; mod 1
|
||||
memtabRow MRLoad242 ; mod 2
|
||||
memtabRow MRLoad1421 ; mod 3
|
||||
memtabRow MRLoad44 ; mod 4
|
||||
memtabRow MRLoad1241 ; mod 5
|
||||
memtabRow MRLoad242 ; mod 6
|
||||
memtabRow MRLoad1421 ; mod 7
|
272
NanoKernel/MRMemtabCode.s
Executable file
272
NanoKernel/MRMemtabCode.s
Executable file
|
@ -0,0 +1,272 @@
|
|||
; Each routine accepts:
|
||||
; r17 = pretend inst with (byteCount-1) in bits 28-30 (will be decremented)
|
||||
; r19 = address of byte to the right of the string to be loaded/saved
|
||||
; r26 as a scratch register
|
||||
; r20/r21 = right-justified data (stores only)
|
||||
|
||||
; Before jumping to MRDoneMemAccess or one of the MRFast paths, each routine sets:
|
||||
; r20/r21 = right-justified data (loads only)
|
||||
; r17 has byteCount field decremented
|
||||
; r26 = junk, not to be trusted
|
||||
|
||||
########################################################################
|
||||
|
||||
MRLoad1241
|
||||
lbz r26, -8(r19)
|
||||
subi r17, r17, 2
|
||||
insrwi r20, r26, 8, 0
|
||||
|
||||
MRLoad241
|
||||
lhz r26, -7(r19)
|
||||
subi r17, r17, 4
|
||||
insrwi r20, r26, 16, 8
|
||||
b MRLoad41
|
||||
|
||||
MRLoad141
|
||||
lbz r26, -6(r19)
|
||||
subi r17, r17, 2
|
||||
insrwi r20, r26, 8, 16
|
||||
|
||||
MRLoad41
|
||||
lwz r26, -5(r19)
|
||||
subi r17, r17, 8
|
||||
inslwi r20, r26, 8, 24
|
||||
insrwi r21, r26, 24, 0
|
||||
b MRLoad1
|
||||
|
||||
MRLoad1421
|
||||
lbz r26, -8(r19)
|
||||
subi r17, r17, 2
|
||||
insrwi r20, r26, 8, 0
|
||||
|
||||
MRLoad421
|
||||
lwz r26, -7(r19)
|
||||
subi r17, r17, 8
|
||||
inslwi r20, r26, 24, 8
|
||||
insrwi r21, r26, 8, 0
|
||||
b MRLoad21
|
||||
|
||||
MRLoad1221
|
||||
lbz r26, -6(r19)
|
||||
subi r17, r17, 2
|
||||
insrwi r20, r26, 8, 16
|
||||
|
||||
MRLoad221
|
||||
lhz r26, -5(r19)
|
||||
subi r17, r17, 4
|
||||
rlwimi r20, r26, 24, 24, 31
|
||||
insrwi r21, r26, 8, 0
|
||||
b MRLoad21
|
||||
|
||||
MRLoad121
|
||||
lbz r26, -4(r19)
|
||||
subi r17, r17, 2
|
||||
insrwi r21, r26, 8, 0
|
||||
|
||||
MRLoad21
|
||||
lhz r26, -3(r19)
|
||||
subi r17, r17, 4
|
||||
insrwi r21, r26, 16, 8
|
||||
b MRLoad1
|
||||
|
||||
MRLoad11
|
||||
lbz r26, -2(r19)
|
||||
subi r17, r17, 2
|
||||
insrwi r21, r26, 8, 16
|
||||
|
||||
MRLoad1
|
||||
lbz r26, -1(r19)
|
||||
insrwi r21, r26, 8, 24
|
||||
b MRDoneMemAccess
|
||||
|
||||
MRLoad242
|
||||
lhz r26, -8(r19)
|
||||
subi r17, r17, 4
|
||||
insrwi r20, r26, 16, 0
|
||||
b MRLoad42
|
||||
|
||||
MRLoad142
|
||||
lbz r26, -7(r19)
|
||||
subi r17, r17, 2
|
||||
insrwi r20, r26, 8, 8
|
||||
|
||||
MRLoad42
|
||||
lwz r26, -6(r19)
|
||||
subi r17, r17, 8
|
||||
inslwi r20, r26, 16, 16
|
||||
insrwi r21, r26, 16, 0
|
||||
b MRLoad2Fast
|
||||
|
||||
MRLoad122
|
||||
lbz r26, -5(r19)
|
||||
subi r17, r17, 2
|
||||
insrwi r20, r26, 8, 24
|
||||
b MRLoad22Fast
|
||||
|
||||
MRLoad12
|
||||
lbz r26, -3(r19)
|
||||
subi r17, r17, 2
|
||||
insrwi r21, r26, 8, 8
|
||||
b MRLoad2Fast
|
||||
|
||||
MRLoad44
|
||||
lwz r20, -8(r19)
|
||||
subi r17, r17, 8
|
||||
lwz r21, -4(r19)
|
||||
b MRDoneMemAccess
|
||||
|
||||
MRLoad124
|
||||
lbz r26, -7(r19)
|
||||
subi r17, r17, 2
|
||||
insrwi r20, r26, 8, 8
|
||||
|
||||
MRLoad24
|
||||
lhz r26, -6(r19)
|
||||
subi r17, r17, 4
|
||||
insrwi r20, r26, 16, 16
|
||||
lwz r21, -4(r19)
|
||||
b MRDoneMemAccess
|
||||
|
||||
MRLoad14
|
||||
lbz r26, -5(r19)
|
||||
subi r17, r17, 2
|
||||
insrwi r20, r26, 8, 24
|
||||
lwz r21, -4(r19)
|
||||
b MRDoneMemAccess
|
||||
|
||||
MRLoad8
|
||||
lwz r20, -8(r19)
|
||||
lwz r21, -4(r19)
|
||||
b MRDoneMemAccess
|
||||
|
||||
########################################################################
|
||||
|
||||
MRStore1241
|
||||
srwi r26, r20, 24
|
||||
stb r26, -8(r19)
|
||||
subi r17, r17, 2
|
||||
|
||||
MRStore241
|
||||
srwi r26, r20, 8
|
||||
sth r26, -7(r19)
|
||||
subi r17, r17, 4
|
||||
b MRStore41
|
||||
|
||||
MRStore141
|
||||
srwi r26, r20, 8
|
||||
stb r26, -6(r19)
|
||||
subi r17, r17, 2
|
||||
|
||||
MRStore41
|
||||
srwi r26, r21, 8
|
||||
insrwi r26, r20, 8, 0
|
||||
stw r26, -5(r19)
|
||||
subi r17, r17, 8
|
||||
stb r21, -1(r19)
|
||||
b MRDoneMemAccess
|
||||
|
||||
MRStore1421
|
||||
srwi r26, r20, 24
|
||||
stb r26, -8(r19)
|
||||
subi r17, r17, 2
|
||||
|
||||
MRStore421
|
||||
srwi r26, r21, 24
|
||||
insrwi r26, r20, 24, 0
|
||||
stw r26, -7(r19)
|
||||
subi r17, r17, 8
|
||||
b MRStore21
|
||||
|
||||
MRStore1221
|
||||
srwi r26, r20, 8
|
||||
stb r26, -6(r19)
|
||||
subi r17, r17, 2
|
||||
|
||||
MRStore221
|
||||
srwi r26, r21, 24
|
||||
insrwi r26, r20, 8, 16
|
||||
sth r26, -5(r19)
|
||||
subi r17, r17, 4
|
||||
b MRStore21
|
||||
|
||||
MRStore121
|
||||
srwi r26, r21, 24
|
||||
stb r26, -4(r19)
|
||||
subi r17, r17, 2
|
||||
|
||||
MRStore21
|
||||
srwi r26, r21, 8
|
||||
sth r26, -3(r19)
|
||||
subi r17, r17, 4
|
||||
stb r21, -1(r19)
|
||||
b MRDoneMemAccess
|
||||
|
||||
MRStore11
|
||||
srwi r26, r21, 8
|
||||
stb r26, -2(r19)
|
||||
subi r17, r17, 2
|
||||
|
||||
MRStore1
|
||||
stb r21, -1(r19)
|
||||
b MRDoneMemAccess
|
||||
|
||||
MRStore242
|
||||
srwi r26, r20, 16
|
||||
sth r26, -8(r19)
|
||||
subi r17, r17, 4
|
||||
b MRStore42
|
||||
|
||||
MRStore142
|
||||
srwi r26, r20, 16
|
||||
stb r26, -7(r19)
|
||||
subi r17, r17, 2
|
||||
|
||||
MRStore42
|
||||
srwi r26, r21, 16
|
||||
insrwi r26, r20, 16, 0
|
||||
stw r26, -6(r19)
|
||||
subi r17, r17, 8
|
||||
sth r21, -2(r19)
|
||||
b MRDoneMemAccess
|
||||
|
||||
MRStore122
|
||||
stb r20, -5(r19)
|
||||
subi r17, r17, 2
|
||||
b MRStore22Fast
|
||||
|
||||
MRStore12
|
||||
srwi r26, r21, 16
|
||||
stb r26, -3(r19)
|
||||
subi r17, r17, 2
|
||||
|
||||
MRStore2
|
||||
sth r21, -2(r19)
|
||||
b MRDoneMemAccess
|
||||
|
||||
MRStore44
|
||||
stw r20, -8(r19)
|
||||
subi r17, r17, 8
|
||||
stw r21, -4(r19)
|
||||
b MRDoneMemAccess
|
||||
|
||||
MRStore124
|
||||
srwi r26, r20, 16
|
||||
stb r26, -7(r19)
|
||||
subi r17, r17, 2
|
||||
|
||||
MRStore24
|
||||
sth r20, -6(r19)
|
||||
subi r17, r17, 4
|
||||
stw r21, -4(r19)
|
||||
b MRDoneMemAccess
|
||||
|
||||
MRStore14
|
||||
stb r20, -5(r19)
|
||||
subi r17, r17, 2
|
||||
stw r21, -4(r19)
|
||||
b MRDoneMemAccess
|
||||
|
||||
MRStore8
|
||||
stw r20, -8(r19)
|
||||
stw r21, -4(r19)
|
||||
b MRDoneMemAccess
|
136
NanoKernel/MROptab.s
Normal file
136
NanoKernel/MROptab.s
Normal file
|
@ -0,0 +1,136 @@
|
|||
MACRO
|
||||
optabRow &upperSix, &lowerSix, &flags, &primLabel, &secLabel
|
||||
DC.W (&lowerSix << 10) | (&upperSix << 4) | &flags ; 0-5 lowerSix, 6-11 upperSix, 12-15 flags
|
||||
DC.W ((&primLabel - MRTop) << 6) | ((&secLabel - MRTop) >> 2) ; 16-23 primary routine, 24-31 secondary routine
|
||||
ENDM
|
||||
|
||||
MROptabX
|
||||
optabRow 20, 09, %0000, MRPrimPlainLoad, MRSecLWARX ; Xopcd=00000(101)00=020=LWARX
|
||||
optabRow 21, 17, %0000, MRCrash, MRSecFail ; Xopcd=00010(101)00=084
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=00100(101)00=148
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=00110(101)00=212
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=01000(101)00=276
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=01010(101)00=340
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=01100(101)00=404
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=01110(101)00=468
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=10000(101)00=532
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=10010(101)00=596
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=10100(101)00=660
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=10110(101)00=724
|
||||
optabRow 03, 17, %0000, MRPrimPlainLoad, MRSecLoad ; Xopcd=11000(101)00=788
|
||||
optabRow 06, 09, %0000, MRPrimPlainLoad, MRSecLoad ; Xopcd=11010(101)00=852
|
||||
optabRow 19, 16, %0000, MRPrimPlainStore, MRExit ; Xopcd=11100(101)00=916
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=11110(101)00=980
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=00001(101)00=052
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=00011(101)00=116
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=00101(101)00=180
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=00111(101)00=244
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=01001(101)00=308
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=01011(101)00=372
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=01101(101)00=436
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=01111(101)00=500
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=10001(101)00=564
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=10011(101)00=628
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=10101(101)00=692
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=10111(101)00=756
|
||||
optabRow 03, 17, %0000, MRPrimUpdLoad, MRSecLoad ; Xopcd=11001(101)00=820
|
||||
optabRow 27, 17, %0011, MRCrash, MRSecFail ; Xopcd=11011(101)00=884
|
||||
optabRow 19, 16, %0000, MRPrimUpdStore, MRExit ; Xopcd=11101(101)00=948
|
||||
optabRow 31, 16, %0010, MRCrash, MRSecFail ; Xopcd=11111(101)00=1012
|
||||
optabRow 03, 17, %0000, MRPrimPlainLoad, MRSecLoad ; Xopcd=00000(101)01=021=LDX
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=00010(101)01=085
|
||||
optabRow 19, 16, %0000, MRPrimPlainStore, MRExit ; Xopcd=00100(101)01=149=STDX
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=00110(101)01=213
|
||||
optabRow 40, 09, %1011, MRPrimUnknown, MRSecUnknown ; Xopcd=01000(101)01=277
|
||||
optabRow 06, 09, %0000, MRPrimPlainLoad, MRSecLoad ; Xopcd=01010(101)01=341
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=01100(101)01=405
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=01110(101)01=469
|
||||
optabRow 32, 09, %1011, MRPrimLSWX, MRSecLSWix ; Xopcd=10000(101)01=533=LSWX
|
||||
optabRow 32, 09, %1111, MRPrimLSWI, MRSecLSWix ; Xopcd=10010(101)01=597=LSWI
|
||||
optabRow 36, 08, %0010, MRPrimSTSWX, MRSecStrStore ; Xopcd=10100(101)01=661=STSWX
|
||||
optabRow 36, 08, %1110, MRPrimSTSWI, MRSecStrStore ; Xopcd=10110(101)01=725=STSWI
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=11000(101)01=789
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=11010(101)01=853
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=11100(101)01=917
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=11110(101)01=981
|
||||
optabRow 03, 17, %0000, MRPrimUpdLoad, MRSecLoad ; Xopcd=00001(101)01=053=LDUX
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=00011(101)01=117
|
||||
optabRow 19, 16, %0000, MRPrimUpdStore, MRExit ; Xopcd=00101(101)01=181=STDUX
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=00111(101)01=245
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=01001(101)01=309
|
||||
optabRow 06, 09, %0000, MRPrimUpdLoad, MRExit ; Xopcd=01011(101)01=373=LWAUX
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=01101(101)01=437
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=01111(101)01=501
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=10001(101)01=565
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=10011(101)01=629
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=10101(101)01=693
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=10111(101)01=757
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=11001(101)01=821
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=11011(101)01=885
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=11101(101)01=949
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=11111(101)01=1013
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=00000(101)10=022
|
||||
optabRow 62, 03, %0010, MRPrimUpdLoad, MRSecCacheWang ; Xopcd=00010(101)10=086
|
||||
optabRow 22, 09, %0000, MRPrimPlainStore, MRSecSTWCX ; Xopcd=00100(101)10=150=STWCX.
|
||||
optabRow 23, 16, %0000, MRCrash, MRSecFail ; Xopcd=00110(101)10=214
|
||||
optabRow 62, 03, %0010, MRPrimUpdLoad, MRSecCacheWang ; Xopcd=01000(101)10=278=DCBT
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=01010(101)10=342
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=01100(101)10=406
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=01110(101)10=470
|
||||
optabRow 10, 09, %0010, MRPrimUpdLoad, MRSecLWBRX ; Xopcd=10000(101)10=534=LWBRX
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=10010(101)10=598
|
||||
optabRow 18, 08, %0000, MRPrimSTWBRX, MRExit ; Xopcd=10100(101)10=662=STWBRX
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=10110(101)10=726
|
||||
optabRow 09, 05, %0010, MRPrimUpdLoad, MRSecLHBRX ; Xopcd=11000(101)10=790=LHBRX
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=11010(101)10=854
|
||||
optabRow 17, 04, %0000, MRPrimSTHBRX, MRExit ; Xopcd=11100(101)10=918=STHBRX
|
||||
optabRow 62, 03, %0010, MRPrimUpdLoad, MRSecCacheWang ; Xopcd=11110(101)10=982=ICBI
|
||||
optabRow 62, 03, %0010, MRPrimUpdLoad, MRSecCacheWang ; Xopcd=00001(101)10=054=DCBST
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=00011(101)10=118
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=00101(101)10=182
|
||||
optabRow 62, 03, %0010, MRPrimUpdLoad, MRSecCacheWang ; Xopcd=00111(101)10=246=DCBTST
|
||||
optabRow 63, 01, %0000, MRPrimPlainLoad, MRIOInstFail ; Xopcd=01001(101)10=310=ECIWX
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=01011(101)10=374
|
||||
optabRow 63, 00, %0000, MRPrimPlainStore, MRIOInstFail ; Xopcd=01101(101)10=438=ECOWX
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=01111(101)10=502
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=10001(101)10=566
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=10011(101)10=630
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=10101(101)10=694
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=10111(101)10=758
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=11001(101)10=822
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=11011(101)10=886
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=11101(101)10=950
|
||||
optabRow 48, 16, %0010, MRPrimDCBZ, MRSecDCBZ ; Xopcd=11111(101)10=1014=DCBZ
|
||||
MROptabD
|
||||
optabRow 02, 09, %0000, MRPrimPlainLoad, MRSecLoad ; Xopcd=00000(101)11=023=LWZX Dopcd=(1)00000=32=LWZ
|
||||
optabRow 00, 03, %0000, MRPrimPlainLoad, MRSecLoad ; Xopcd=00010(101)11=087=LBZX Dopcd=(1)00010=34=LBZ
|
||||
optabRow 18, 08, %0000, MRPrimPlainStore, MRExit ; Xopcd=00100(101)11=151=STWX Dopcd=(1)00100=36=STW
|
||||
optabRow 16, 02, %0000, MRPrimPlainStore, MRExit ; Xopcd=00110(101)11=215=STBX Dopcd=(1)00110=38=STB
|
||||
optabRow 01, 05, %0000, MRPrimPlainLoad, MRSecLoad ; Xopcd=01000(101)11=279=LHZX Dopcd=(1)01000=40=LHZ
|
||||
optabRow 05, 05, %0000, MRPrimPlainLoad, MRSecLoadExt ; Xopcd=01010(101)11=343=LHAX Dopcd=(1)01010=42=LHA
|
||||
optabRow 17, 04, %0000, MRPrimPlainStore, MRExit ; Xopcd=01100(101)11=407=STHX Dopcd=(1)01100=44=STH
|
||||
optabRow 26, 09, %0011, MRPrimUpdLoad, MRSecLMW ; Xopcd=01110(101)11=471 Dopcd=(1)01110=46=LMW
|
||||
optabRow 14, 09, %0000, MRPrimPlainLoad, MRSecLFSu ; Xopcd=10000(101)11=535=LFSX Dopcd=(1)10000=48=LFS
|
||||
optabRow 15, 17, %0000, MRPrimPlainLoad, MRSecLFDu ; Xopcd=10010(101)11=599=LFDX Dopcd=(1)10010=50=LFD
|
||||
optabRow 18, 08, %0000, MRPrimSTFSx, MRExit ; Xopcd=10100(101)11=663=STFSX Dopcd=(1)10100=52=STFS
|
||||
optabRow 19, 16, %0000, MRPrimSTFDx, MRExit ; Xopcd=10110(101)11=727=STFDX Dopcd=(1)10110=54=STFD
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=11000(101)11=791 Dopcd=(1)11000=56
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=11010(101)11=855 Dopcd=(1)11010=58
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=11100(101)11=919 Dopcd=(1)11100=60
|
||||
optabRow 18, 08, %0000, MRPrimSTFDx, MRExit ; Xopcd=11110(101)11=983=STFIWX Dopcd=(1)11110=62
|
||||
optabRow 02, 09, %0000, MRPrimUpdLoad, MRSecLoad ; Xopcd=00001(101)11=055=LWZUX Dopcd=(1)00001=33=LWZU
|
||||
optabRow 00, 03, %0000, MRPrimUpdLoad, MRSecLoad ; Xopcd=00011(101)11=119=LBZUX Dopcd=(1)00011=35=LBZU
|
||||
optabRow 18, 08, %0000, MRPrimUpdStore, MRExit ; Xopcd=00101(101)11=183=STWUX Dopcd=(1)00101=37=STWU
|
||||
optabRow 16, 02, %0000, MRPrimUpdStore, MRExit ; Xopcd=00111(101)11=247=STBUX Dopcd=(1)00111=39=STBU
|
||||
optabRow 01, 05, %0000, MRPrimUpdLoad, MRSecLoad ; Xopcd=01001(101)11=311=LHZUX Dopcd=(1)01001=41=LHZU
|
||||
optabRow 05, 05, %0000, MRPrimUpdLoad, MRSecLoadExt ; Xopcd=01011(101)11=375=LHAUX Dopcd=(1)01011=43=LHAU
|
||||
optabRow 17, 04, %0000, MRPrimUpdStore, MRExit ; Xopcd=01101(101)11=439=STHUX Dopcd=(1)01101=45=STHU
|
||||
optabRow 30, 08, %0010, MRPrimUpdStore, MRSecSTMW ; Xopcd=01111(101)11=503 Dopcd=(1)01111=47=STMW
|
||||
optabRow 14, 09, %0000, MRPrimUpdLoad, MRSecLFSu ; Xopcd=10001(101)11=567=LFSUX Dopcd=(1)10001=49=LFSU
|
||||
optabRow 15, 17, %0000, MRPrimUpdLoad, MRSecLFDu ; Xopcd=10011(101)11=631=LFDUX Dopcd=(1)10011=51=LFDU
|
||||
optabRow 18, 08, %0000, MRPrimSTFSUx, MRExit ; Xopcd=10101(101)11=695=STFSUX Dopcd=(1)10101=53=STFSU
|
||||
optabRow 19, 16, %0000, MRPrimSTFDUx, MRExit ; Xopcd=10111(101)11=759=STFDUX Dopcd=(1)10111=55=STFDU
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=11001(101)11=823 Dopcd=(1)11001=57
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=11011(101)11=887 Dopcd=(1)11011=59
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=11101(101)11=951 Dopcd=(1)11101=61
|
||||
optabRow 63, 01, %0000, MRCrash, MRSecFail ; Xopcd=11111(101)11=1015 Dopcd=(1)11111=63
|
493
NanoKernel/MROptabCode.s
Normal file
493
NanoKernel/MROptabCode.s
Normal file
|
@ -0,0 +1,493 @@
|
|||
MRCrash ; C00
|
||||
bl SystemCrash
|
||||
MRSecFail ; C04
|
||||
b MRIOInstFail
|
||||
|
||||
########################################################################
|
||||
|
||||
MRPrimSTFSx ; C08
|
||||
rlwinm r17, r17, 0,16,10
|
||||
|
||||
MRPrimSTFSUx ; C0C
|
||||
crclr cr7_so
|
||||
b MRDoTableSTFD
|
||||
|
||||
MRPrimSTFDx ; C14
|
||||
rlwinm r17, r17, 0,16,10
|
||||
|
||||
MRPrimSTFDUx ; C18
|
||||
crset cr7_so
|
||||
|
||||
MRDoTableSTFD ; C1C
|
||||
; This table is of the form:
|
||||
; stfd <reg>, KDP.FloatEmScratch(r1)
|
||||
; b
|
||||
|
||||
clrrwi r19, r25, 10
|
||||
rlwimi r19, r17, 14,24,28
|
||||
addi r19, r19, STFDTable-MRTop
|
||||
mtlr r19
|
||||
rlwimi r14, r11, 0,18,18
|
||||
mtmsr r14
|
||||
blr
|
||||
|
||||
MRDoneTableSTFD ; c38
|
||||
ori r11, r11, 0x2000
|
||||
lwz r20, KDP.FloatEmScratch(r1)
|
||||
lwz r21, KDP.FloatEmScratch+4(r1)
|
||||
bso cr7, MRPrimUpdLoad
|
||||
extrwi r23, r20, 11,1
|
||||
cmpwi r23, 0x380
|
||||
insrwi r20, r20, 27,2
|
||||
inslwi r20, r21, 3,29
|
||||
mr r21, r20
|
||||
bgt MRPrimUpdLoad
|
||||
cmpwi r23, 0x36A
|
||||
clrrwi r21, r20, 31
|
||||
blt MRPrimUpdLoad
|
||||
oris r20, r20, 0x80
|
||||
neg r23, r23
|
||||
clrlwi r20, r20, 8
|
||||
srw r20, r20, r23
|
||||
rlwimi r21, r20, 31,9,31
|
||||
b MRPrimUpdLoad
|
||||
|
||||
########################################################################
|
||||
|
||||
MRPrimSTWBRX ; C84
|
||||
rlwinm r28, r17, 13,25,29
|
||||
lwbrx r21, r1, r28
|
||||
b MRPrimPlainLoad
|
||||
|
||||
MRPrimSTHBRX ; C90
|
||||
rlwinm r28, r17, 13,25,29
|
||||
addi r21, r1, 2
|
||||
lhbrx r21, r21, r28
|
||||
b MRPrimPlainLoad
|
||||
|
||||
########################################################################
|
||||
|
||||
MRPrimUpdStore ; CA0
|
||||
rlwinm r28, r17, 13,25,29
|
||||
lwzx r21, r1, r28
|
||||
b MRPrimUpdLoad
|
||||
|
||||
MRPrimPlainStore ; CAC
|
||||
rlwinm r28, r17, 13,25,29
|
||||
lwzx r21, r1, r28
|
||||
|
||||
MRPrimPlainLoad ; CB4
|
||||
rlwinm r17, r17, 0,16,10
|
||||
|
||||
MRPrimUpdLoad ; CB8
|
||||
extrwi. r22, r17, 4,27
|
||||
add r19, r18, r22
|
||||
|
||||
########################################################################
|
||||
|
||||
MRDoMemAccess ; CC0
|
||||
clrrwi r25, r25, 10
|
||||
insrwi r25, r19, 3,28
|
||||
insrwi r25, r17, 4,24
|
||||
lha r22, MRMemtab-MRTop(r25)
|
||||
addi r23, r1, KDP.VecTblMemRetry
|
||||
add r22, r22, r25
|
||||
mtlr r22
|
||||
mtsprg 3, r23
|
||||
mtmsr r15
|
||||
insrwi r25, r26, 8,22
|
||||
bnelr
|
||||
b MRDoneMemAccess
|
||||
|
||||
MRStore22Fast ; Fast return paths from MemAccess code
|
||||
srwi r23, r21, 16
|
||||
sth r23, -4(r19)
|
||||
addi r17, r17, -4
|
||||
sth r21, -2(r19)
|
||||
b MRDoneMemAccess
|
||||
MRLoad22Fast
|
||||
lhz r23, -4(r19)
|
||||
addi r17, r17, -4
|
||||
insrwi r21, r23, 16,0
|
||||
MRLoad2Fast
|
||||
lhz r23, -2(r19)
|
||||
insrwi r21, r23, 16,16
|
||||
|
||||
MRDoneMemAccess ; D18
|
||||
sync
|
||||
rlwinm. r28, r17, 18,25,29
|
||||
mtlr r25
|
||||
cror cr0_eq, cr0_eq, cr3_eq
|
||||
mtmsr r14
|
||||
mtsprg 3, r24
|
||||
beqlr
|
||||
crset cr3_so
|
||||
stwx r18, r1, r28
|
||||
blr
|
||||
|
||||
########################################################################
|
||||
|
||||
MRSecLoadExt ; D40
|
||||
extsh r21, r21
|
||||
|
||||
MRSecLoad ; D44
|
||||
rlwinm r28, r17, 13,25,29
|
||||
crset cr3_so
|
||||
stwx r21, r1, r28
|
||||
|
||||
########################################################################
|
||||
|
||||
MRExit ; D50
|
||||
andi. r23, r16, 0x20
|
||||
addi r10, r10, 4
|
||||
mtsrr0 r10
|
||||
mtsrr1 r11
|
||||
bne @trace
|
||||
mtlr r12
|
||||
|
||||
bns cr3, @otherway
|
||||
|
||||
mtcr r13
|
||||
lmw r2, KDP.r2(r1)
|
||||
lwz r0, KDP.r0(r1)
|
||||
lwz r1, KDP.r1(r1)
|
||||
rfi
|
||||
|
||||
@otherway
|
||||
mtcr r13
|
||||
lmw r10, KDP.r10(r1)
|
||||
lwz r1, KDP.r1(r1)
|
||||
rfi
|
||||
|
||||
@trace
|
||||
mfsprg r24, 3
|
||||
mtsprg 2, r12
|
||||
rlwinm r16, r16, 0,27,25
|
||||
lwz r12, VecTbl.Trace(r24)
|
||||
stw r16, KDP.Flags(r1)
|
||||
mtcr r13
|
||||
mtlr r12
|
||||
lmw r2, KDP.r2(r1)
|
||||
lwz r0, KDP.r0(r1)
|
||||
lwz r1, KDP.r1(r1)
|
||||
mtsprg 1, r1
|
||||
blrl
|
||||
|
||||
########################################################################
|
||||
|
||||
MRSecLHBRX ; DC0
|
||||
slwi r21, r21, 16
|
||||
|
||||
MRSecLWBRX ; DC4
|
||||
rlwinm r28, r17, 13,25,29
|
||||
crset cr3_so
|
||||
stwbrx r21, r1, r28
|
||||
b MRExit
|
||||
|
||||
########################################################################
|
||||
|
||||
MRSecLFSu ; DD4
|
||||
clrrwi r20, r21, 31
|
||||
xor. r21, r20, r21
|
||||
beq MRSecLFDu
|
||||
rlwinm. r23, r21, 16,17,24
|
||||
addi r23, r23, 0x80
|
||||
rlwimi r20, r21, 29,5,31
|
||||
extsh r23, r23
|
||||
rlwimi r20, r21, 0,1,1
|
||||
slwi r21, r21, 29
|
||||
addi r23, r23, -0x4080
|
||||
rlwimi r20, r23, 0,2,4
|
||||
bne MRSecLFDu
|
||||
srwi r21, r21, 20
|
||||
insrwi r21, r20, 20,0
|
||||
cntlzw r23, r21
|
||||
slw r21, r21, r23
|
||||
neg r23, r23
|
||||
rlwimi r20, r21, 21,12,31
|
||||
addi r23, r23, 0x380
|
||||
slwi r21, r21, 21
|
||||
insrwi r20, r23, 11,1
|
||||
|
||||
MRSecLFDu ; E28
|
||||
; This table is of the form:
|
||||
; lfd <reg>, KDP.FloatEmScratch(r1)
|
||||
; b MRExit
|
||||
rlwimi r23, r17, 14,24,28
|
||||
addi r23, r23, LFDTable-MRTop
|
||||
mtlr r23
|
||||
stw r20, KDP.FloatEmScratch(r1)
|
||||
stw r21, KDP.FloatEmScratch+4(r1)
|
||||
rlwimi r14, r11, 0,18,18
|
||||
mtmsr r14
|
||||
ori r11, r11, 0x2000
|
||||
blr
|
||||
|
||||
########################################################################
|
||||
|
||||
MRSecLMW ; E50
|
||||
rlwinm. r28, r17, 13,25,29
|
||||
rlwinm r23, r17, 18,25,29
|
||||
cmpw cr7, r28, r23
|
||||
addis r17, r17, 0x20
|
||||
beq loc_E68
|
||||
beq cr7, loc_E6C
|
||||
|
||||
loc_E68 ; E68
|
||||
stwx r21, r1, r28
|
||||
|
||||
loc_E6C ; E6C
|
||||
cmpwi r28, 0x7C
|
||||
li r22, 9
|
||||
insrwi r17, r22, 6,26
|
||||
addi r19, r19, 4
|
||||
bne MRDoMemAccess
|
||||
b MRExit
|
||||
|
||||
MRSecSTMW ; E84
|
||||
addis r17, r17, 0x20
|
||||
rlwinm. r28, r17, 13,25,29
|
||||
beq MRExit
|
||||
lwzx r21, r1, r28
|
||||
li r22, 8
|
||||
insrwi r17, r22, 6,26
|
||||
addi r19, r19, 4
|
||||
b MRDoMemAccess
|
||||
|
||||
########################################################################
|
||||
|
||||
MRPrimDCBZ ; Zero four 8b chunks of the cache blk
|
||||
clrrwi r19, r18, 5 ; r19 = address of chunk to zero
|
||||
b MRComDCBZ ; (for use by this code only)
|
||||
|
||||
MRSecDCBZ ; EAC
|
||||
andi. r22, r19, 0x18
|
||||
clrrwi r19, r19, 3 ; MemAccess code decrements this reg
|
||||
beq MRExit ; Zeroed all foun chunks -> done!
|
||||
|
||||
MRComDCBZ ; EB8
|
||||
li r22, 0x10 ; Set 8 bytes (? set bit 27)
|
||||
insrwi. r17, r22, 6,26
|
||||
addi r19, r19, 8 ; Align ptr to right hand size of chunk
|
||||
li r20, 0 ; Contents = zeros
|
||||
li r21, 0
|
||||
b MRDoMemAccess ; Go, then come back to MRSecDCBZ
|
||||
|
||||
########################################################################
|
||||
|
||||
MRSecLWARX ; ED0
|
||||
rlwinm r28, r17, 13,25,29
|
||||
crset cr3_so
|
||||
stwx r21, r1, r28
|
||||
stwcx. r21, r1, r28
|
||||
b MRExit
|
||||
|
||||
MRSecSTWCX ; EE4
|
||||
stwcx. r0, 0, r1
|
||||
mfcr r23
|
||||
rlwinm r23, r23, 0,3,1
|
||||
rlwimi r13, r23, 0,0,3
|
||||
b MRExit
|
||||
|
||||
########################################################################
|
||||
|
||||
MRSecCacheWang ; EF8
|
||||
rlwinm r16, r16, 0,28,25
|
||||
addi r10, r10, -4
|
||||
stw r16, KDP.Flags(r1)
|
||||
b MRExit
|
||||
|
||||
########################################################################
|
||||
|
||||
MRIOInstFail ; F08
|
||||
li r8, ecDataInvalidAddress
|
||||
b ExceptionMemRetried
|
||||
|
||||
########################################################################
|
||||
|
||||
MRPrimSTSWI ; F10
|
||||
addi r22, r27, -0x800
|
||||
extrwi r22, r22, 5,16
|
||||
b loc_F2C
|
||||
|
||||
MRPrimSTSWX ; F1C
|
||||
mfxer r22
|
||||
andi. r22, r22, 0x7F
|
||||
addi r22, r22, -1
|
||||
beq MRExit
|
||||
|
||||
loc_F2C ; F2C
|
||||
rlwimi r17, r22, 4,21,25
|
||||
not r22, r22
|
||||
insrwi r17, r22, 2,4
|
||||
mr r19, r18
|
||||
b loc_1008
|
||||
|
||||
MRSecStrStore ; F40
|
||||
andi. r22, r17, 0x7C0
|
||||
addis r28, r17, 0x20
|
||||
rlwimi r17, r28, 0,6,10
|
||||
addi r17, r17, -0x40
|
||||
bne loc_1008
|
||||
b MRExit
|
||||
|
||||
########################################################################
|
||||
|
||||
MRPrimLSWI ; F58
|
||||
addi r22, r27, -0x800
|
||||
extrwi r22, r22, 5,16
|
||||
addis r28, r27, 0x3E0
|
||||
rlwimi r17, r28, 22,16,20
|
||||
b loc_F80
|
||||
|
||||
MRPrimLSWX ; F6C
|
||||
mfxer r22
|
||||
andi. r22, r22, 0x7F
|
||||
rlwimi r17, r27, 0,16,20
|
||||
addi r22, r22, -1
|
||||
beq MRExit
|
||||
|
||||
loc_F80 ; F80
|
||||
andis. r23, r17, 0x1F
|
||||
rlwimi r17, r22, 4,21,25
|
||||
not r22, r22
|
||||
insrwi r17, r22, 2,4
|
||||
mr r19, r18
|
||||
bne loc_1070
|
||||
rlwimi r17, r17, 5,11,15
|
||||
b loc_1070
|
||||
|
||||
MRSecLSWix ; FA0
|
||||
andi. r22, r17, 0x7C0
|
||||
rlwinm r28, r17, 13,25,29
|
||||
bne loc_1044
|
||||
rlwinm r22, r17, 9,27,28
|
||||
slw r21, r21, r22
|
||||
b loc_1044
|
||||
|
||||
########################################################################
|
||||
|
||||
MRPrimUnknown ; FB8
|
||||
mfxer r22
|
||||
andi. r22, r22, 0x7F
|
||||
rlwimi r17, r27, 0,16,20
|
||||
insrwi r17, r27, 1,3
|
||||
addi r22, r22, -1
|
||||
beq MRExit
|
||||
andis. r23, r17, 0x1F
|
||||
rlwimi r17, r22, 4,21,25
|
||||
not r22, r22
|
||||
insrwi r17, r22, 2,4
|
||||
mr r19, r18
|
||||
bne loc_10C8
|
||||
rlwimi r17, r17, 5,11,15
|
||||
b loc_10C8
|
||||
|
||||
MRSecUnknown ; FF0
|
||||
rlwinm. r22, r17, 28,25,29
|
||||
rlwinm r28, r17, 13,25,29
|
||||
bne loc_109C
|
||||
rlwinm r23, r17, 9,27,28
|
||||
|
||||
loc_1000 ; 1000
|
||||
slw r21, r21, r23
|
||||
b loc_109C
|
||||
|
||||
loc_1008 ; 1008
|
||||
andi. r23, r17, 0x7C0
|
||||
rlwinm r28, r17, 13,25,29
|
||||
lwzx r21, r1, r28
|
||||
li r22, 8
|
||||
insrwi r17, r22, 6,26
|
||||
addi r19, r19, 4
|
||||
bne MRDoMemAccess
|
||||
rlwinm r22, r17, 9,27,28
|
||||
srw r21, r21, r22
|
||||
extrwi r22, r17, 2,4
|
||||
neg r22, r22
|
||||
add r19, r19, r22
|
||||
addi r22, r22, 4
|
||||
insrwi. r17, r22, 5,26
|
||||
b MRDoMemAccess
|
||||
|
||||
loc_1044 ; 1044
|
||||
rlwinm r23, r17, 18,25,29
|
||||
cmpw cr7, r28, r23
|
||||
rlwinm r23, r17, 23,25,29
|
||||
cmpw cr6, r28, r23
|
||||
beq cr7, loc_1060
|
||||
beq cr6, loc_1060
|
||||
stwx r21, r1, r28
|
||||
|
||||
loc_1060 ; 1060
|
||||
addis r28, r17, 0x20
|
||||
rlwimi r17, r28, 0,6,10
|
||||
addi r17, r17, -0x40
|
||||
beq MRExit
|
||||
|
||||
loc_1070 ; 1070
|
||||
andi. r23, r17, 0x7C0
|
||||
li r22, 9
|
||||
insrwi r17, r22, 6,26
|
||||
addi r19, r19, 4
|
||||
bne MRDoMemAccess
|
||||
extrwi r22, r17, 2,4
|
||||
neg r22, r22
|
||||
add r19, r19, r22
|
||||
addi r22, r22, 4
|
||||
insrwi. r17, r22, 5,26
|
||||
b MRDoMemAccess
|
||||
|
||||
loc_109C ; 109C
|
||||
rlwinm r23, r17, 18,25,29
|
||||
cmpw cr7, r28, r23
|
||||
rlwinm r23, r17, 23,25,29
|
||||
cmpw cr6, r28, r23
|
||||
beq cr7, loc_10B8
|
||||
beq cr6, loc_10B8
|
||||
stwx r21, r1, r28
|
||||
|
||||
loc_10B8 ; 10B8
|
||||
addis r28, r17, 0x20
|
||||
rlwimi r17, r28, 0,6,10
|
||||
addi r17, r17, -0x40
|
||||
beq MRExit
|
||||
|
||||
loc_10C8 ; 10C8
|
||||
not r22, r22
|
||||
rlwimi r22, r17, 6,30,31
|
||||
li r28, 1
|
||||
mfxer r23
|
||||
extrwi r23, r23, 8,16
|
||||
srwi r20, r21, 24
|
||||
cmpw cr7, r20, r23
|
||||
add. r22, r22, r28
|
||||
beq cr7, loc_112C
|
||||
beq loc_112C
|
||||
extrwi r20, r21, 8,8
|
||||
cmpw cr7, r20, r23
|
||||
add. r22, r22, r28
|
||||
beq cr7, loc_112C
|
||||
beq loc_112C
|
||||
extrwi r20, r21, 8,16
|
||||
cmpw cr7, r20, r23
|
||||
add. r22, r22, r28
|
||||
beq cr7, loc_112C
|
||||
beq loc_112C
|
||||
clrlwi r20, r21, 24
|
||||
cmpw cr7, r20, r23
|
||||
add. r22, r22, r28
|
||||
beq cr7, loc_112C
|
||||
bne loc_1070
|
||||
|
||||
loc_112C ; 112C
|
||||
rlwinm. r28, r17, 0,3,3
|
||||
mfxer r23
|
||||
add r22, r22, r23
|
||||
insrwi r23, r22, 7,25
|
||||
mtxer r23
|
||||
beq MRExit
|
||||
mfcr r23
|
||||
clrlwi r23, r23, 30
|
||||
insrwi r13, r23, 4,0
|
||||
b MRExit
|
264
NanoKernel/MemRetryBackup.s
Executable file
264
NanoKernel/MemRetryBackup.s
Executable file
|
@ -0,0 +1,264 @@
|
|||
MACRO
|
||||
MRTblEntry &word, &func1, &func2
|
||||
dc.w &word
|
||||
dc.b (&func1 - FDP) >> 2
|
||||
dc.b (&func2 - FDP) >> 2
|
||||
ENDM
|
||||
|
||||
MRTblEntry 0x2540, FDP_00B8, FDP_0150 ; lwarx
|
||||
MRTblEntry 0x4550, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x4430, FDP_00E4, FDP_0150
|
||||
MRTblEntry 0x2460, FDP_00E4, FDP_0150
|
||||
MRTblEntry 0x4130, FDP_00DC, FDP_015C
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x4430, FDP_00E8, FDP_0150
|
||||
MRTblEntry 0x45b3, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x4130, FDP_00A4, FDP_015C
|
||||
MRTblEntry 0x41f2, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x4430, FDP_00E4, FDP_0150
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x4130, FDP_00DC, FDP_015C
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x268b, FDP_0314, FDP_02FC
|
||||
MRTblEntry 0x2460, FDP_00E4, FDP_0150
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x260b, FDP_02B0, FDP_02E4 ; lswx
|
||||
MRTblEntry 0x260f, FDP_029C, FDP_02E4 ; lswi
|
||||
MRTblEntry 0x2242, FDP_0260, FDP_0284 ; stswx
|
||||
MRTblEntry 0x224e, FDP_0254, FDP_0284 ; stswi
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x4430, FDP_00E8, FDP_0150
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x4130, FDP_00A4, FDP_015C
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x2460, FDP_00E8, FDP_015C
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x0fe2, FDP_00E8, FDP_023C
|
||||
MRTblEntry 0x2160, FDP_00B0, FDP_015C ; stwcx.
|
||||
MRTblEntry 0x4170, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x0fe2, FDP_00E8, FDP_023C
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x24a2, FDP_00E8, FDP_0164 ; lwbrx
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x2120, FDP_0088, FDP_015C ; stwbrx
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x1492, FDP_00E8, FDP_0160 ; lhbrx
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x1110, FDP_0094, FDP_015C ; sthbrx
|
||||
MRTblEntry 0x0fe2, FDP_00E8, FDP_023C
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x0fe2, FDP_00E8, FDP_023C
|
||||
MRTblEntry 0x07f0, FDP_00E4, FDP_024C ; eciwx
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x03f0, FDP_00DC, FDP_024C ; ecowx
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x4302, FDP_01F8, FDP_020C ; dcbz
|
||||
MRTblEntry 0x0f50, FDP_00E4, FDP_0370 ; lwz(x)
|
||||
MRTblEntry 0x2770, FDP_00D4, FDP_0398 ; lbz(x)
|
||||
MRTblEntry 0x0b90, FDP_0350, FDP_015C ; stw(x)
|
||||
MRTblEntry 0x23b0, FDP_0364, FDP_015C ; stb(x)
|
||||
MRTblEntry 0x1410, FDP_00E4, FDP_0150 ; lhz(x)
|
||||
MRTblEntry 0x1450, FDP_00E4, FDP_014C ; lha(x)
|
||||
MRTblEntry 0x1110, FDP_00DC, FDP_015C ; sth(x)
|
||||
MRTblEntry 0x25a3, FDP_00E8, FDP_01A4 ; lmw
|
||||
MRTblEntry 0x24e0, FDP_00E4, FDP_0174 ; lfs(x)
|
||||
MRTblEntry 0x44f0, FDP_00E4, FDP_0178 ; lfd(x)
|
||||
MRTblEntry 0x2120, FDP_0008, FDP_015C ; stfs(x)
|
||||
MRTblEntry 0x4130, FDP_0014, FDP_015C ; stfd(x)
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x2120, FDP_0014, FDP_015C ; stfiwx
|
||||
MRTblEntry 0x1760, FDP_00CC, FDP_0384 ; lwzu(x)
|
||||
MRTblEntry 0x8740, FDP_00C0, FDP_015C ; lbzu(x)
|
||||
MRTblEntry 0x23a0, FDP_0358, FDP_015C ; stwu(x)
|
||||
MRTblEntry 0x8380, FDP_00C0, FDP_015C ; stbu(x)
|
||||
MRTblEntry 0x1410, FDP_00E8, FDP_0150 ; lhzu(x)
|
||||
MRTblEntry 0x8740, FDP_00C0, FDP_015C ; lhau(x)
|
||||
MRTblEntry 0x1110, FDP_00A4, FDP_015C ; sthu(x)
|
||||
MRTblEntry 0x8380, FDP_00C0, FDP_015C ; stmw
|
||||
MRTblEntry 0x24e0, FDP_00E8, FDP_0174 ; lfsu(x)
|
||||
MRTblEntry 0x44f0, FDP_00E8, FDP_0178 ; lfdu(x)
|
||||
MRTblEntry 0x2120, FDP_000C, FDP_015C ; stfsu(x)
|
||||
MRTblEntry 0x4130, FDP_0018, FDP_015C ; stfdu(x)
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
|
||||
MRTblEntry 0x2540, FDP_00B8, FDP_0150 ; lwarx
|
||||
MRTblEntry 0x4550, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x4430, FDP_00E4, FDP_0150
|
||||
MRTblEntry 0x2460, FDP_00E4, FDP_0150
|
||||
MRTblEntry 0x4130, FDP_00DC, FDP_015C
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x4430, FDP_00E8, FDP_0150
|
||||
MRTblEntry 0x45b3, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x4130, FDP_00A4, FDP_015C
|
||||
MRTblEntry 0x41f2, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x4430, FDP_00E4, FDP_0150
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x4130, FDP_00DC, FDP_015C
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x268b, FDP_0314, FDP_02FC
|
||||
MRTblEntry 0x2460, FDP_00E4, FDP_0150
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x260b, FDP_02B0, FDP_02E4 ; lswx
|
||||
MRTblEntry 0x260f, FDP_029C, FDP_02E4 ; lswi
|
||||
MRTblEntry 0x2242, FDP_0260, FDP_0284 ; stswx
|
||||
MRTblEntry 0x224e, FDP_0254, FDP_0284 ; stswi
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x4430, FDP_00E8, FDP_0150
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x4130, FDP_00A4, FDP_015C
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x2460, FDP_00E8, FDP_015C
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x0fe2, FDP_00E8, FDP_023C
|
||||
MRTblEntry 0x2160, FDP_00B0, FDP_015C ; stwcx.
|
||||
MRTblEntry 0x4170, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x0fe2, FDP_00E8, FDP_023C
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x24a2, FDP_00E8, FDP_0164 ; lwbrx
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x2120, FDP_0088, FDP_015C ; stwbrx
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x1492, FDP_00E8, FDP_0160 ; lhbrx
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x1110, FDP_0094, FDP_015C ; sthbrx
|
||||
MRTblEntry 0x0fe2, FDP_00E8, FDP_023C
|
||||
MRTblEntry 0x0fe2, FDP_00E8, FDP_023C
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x0fe2, FDP_00E8, FDP_023C
|
||||
MRTblEntry 0x07f0, FDP_00E4, FDP_024C ; eciwx
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x03f0, FDP_00DC, FDP_024C ; ecowx
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x4302, FDP_01F8, FDP_020C ; dcbz
|
||||
MRTblEntry 0x2420, FDP_00E4, FDP_0150 ; lwz(x)
|
||||
MRTblEntry 0x0c00, FDP_00E4, FDP_0150 ; lbz(x)
|
||||
MRTblEntry 0x2120, FDP_00DC, FDP_015C ; stw(x)
|
||||
MRTblEntry 0x0900, FDP_00DC, FDP_015C ; stb(x)
|
||||
MRTblEntry 0x1410, FDP_00E4, FDP_0150 ; lhz(x)
|
||||
MRTblEntry 0x1450, FDP_00E4, FDP_014C ; lha(x)
|
||||
MRTblEntry 0x1110, FDP_00DC, FDP_015C ; sth(x)
|
||||
MRTblEntry 0x25a3, FDP_00E8, FDP_01A4 ; lmw
|
||||
MRTblEntry 0x24e0, FDP_00E4, FDP_0174 ; lfs(x)
|
||||
MRTblEntry 0x44f0, FDP_00E4, FDP_0178 ; lfd(x)
|
||||
MRTblEntry 0x2120, FDP_0008, FDP_015C ; stfs(x)
|
||||
MRTblEntry 0x4130, FDP_0014, FDP_015C ; stfd(x)
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x2120, FDP_0014, FDP_015C ; stfiwx
|
||||
MRTblEntry 0x2420, FDP_00E8, FDP_0150 ; lwzu(x)
|
||||
MRTblEntry 0x0c00, FDP_00E8, FDP_0150 ; lbzu(x)
|
||||
MRTblEntry 0x2120, FDP_00A4, FDP_015C ; stwu(x)
|
||||
MRTblEntry 0x0900, FDP_00A4, FDP_015C ; stbu(x)
|
||||
MRTblEntry 0x1410, FDP_00E8, FDP_0150 ; lhzu(x)
|
||||
MRTblEntry 0x1450, FDP_00E8, FDP_014C ; lhau(x)
|
||||
MRTblEntry 0x1110, FDP_00A4, FDP_015C ; sthu(x)
|
||||
MRTblEntry 0x21e2, FDP_00A4, FDP_01D8 ; stmw
|
||||
MRTblEntry 0x24e0, FDP_00E8, FDP_0174 ; lfsu(x)
|
||||
MRTblEntry 0x44f0, FDP_00E8, FDP_0178 ; lfdu(x)
|
||||
MRTblEntry 0x2120, FDP_000C, FDP_015C ; stfsu(x)
|
||||
MRTblEntry 0x4130, FDP_0018, FDP_015C ; stfdu(x)
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
||||
MRTblEntry 0x07f0, FDP_xxxx, FDP_0004
|
|
@ -82,27 +82,25 @@ kSIGP17 equ 17 ; r4 = target CPU idx?
|
|||
|
||||
; Exception cause equates
|
||||
; System = FFFFFFFF, Alt = 7DF2F700 (ecInstPageFault and ecDataPageFault disabled), same +/- VM
|
||||
ecNoException equ 0 ; Exception
|
||||
ecSystemCall equ 1 ; ?
|
||||
ecTrapInstr equ 2 ; Exception
|
||||
ecFloatException equ 3 ; Exception
|
||||
ecInvalidInstr equ 4 ; Exception
|
||||
ecPrivilegedInstr equ 5 ; ?
|
||||
ecMachineCheck equ 7 ; Exception
|
||||
ecInstTrace equ 8 ; Exception
|
||||
ecInstInvalidAddress equ 10 ; Exception
|
||||
ecInstHardwareFault equ 11 ; Exception
|
||||
ecInstPageFault equ 12 ; Exception
|
||||
ecInstSupAccessViolation equ 14 ; Exception
|
||||
|
||||
; Usually from MemRetryDSI (also IntAlignment and IntMachineCheck)
|
||||
ecDataInvalidAddress equ 18 ; ExceptionMemRetried
|
||||
ecDataHardwareFault equ 19 ; ExceptionMemRetried
|
||||
ecDataPageFault equ 20 ; ExceptionMemRetried
|
||||
ecDataWriteViolation equ 21 ; ExceptionMemRetried
|
||||
ecDataSupAccessViolation equ 22 ; ExceptionMemRetried
|
||||
ecDataSupWriteViolation equ 23 ; ?
|
||||
ecUnknown24 equ 24 ; ExceptionMemRetried
|
||||
ecNoException equ 0
|
||||
ecSystemCall equ 1
|
||||
ecTrapInstr equ 2
|
||||
ecFloatException equ 3
|
||||
ecInvalidInstr equ 4
|
||||
ecPrivilegedInstr equ 5
|
||||
ecMachineCheck equ 7
|
||||
ecInstTrace equ 8
|
||||
ecInstInvalidAddress equ 10
|
||||
ecInstHardwareFault equ 11
|
||||
ecInstPageFault equ 12
|
||||
ecInstSupAccessViolation equ 14
|
||||
ecDataInvalidAddress equ 18
|
||||
ecDataHardwareFault equ 19
|
||||
ecDataPageFault equ 20
|
||||
ecDataWriteViolation equ 21
|
||||
ecDataSupAccessViolation equ 22
|
||||
ecDataSupWriteViolation equ 23
|
||||
ecUnknown24 equ 24
|
||||
|
||||
|
||||
; Runtime Flag equates
|
||||
|
@ -132,7 +130,7 @@ ecUnknown24 equ 24 ; ExceptionMemRetried
|
|||
_bitEqu 23, FlagFE1
|
||||
_bitEqu 24, Flag24
|
||||
_bitEqu 25, Flag25
|
||||
_bitEqu 26, Flag26
|
||||
_bitEqu 26, FlagTrace
|
||||
_bitEqu 27, FlagLowSaves
|
||||
_bitEqu 28, Flag28
|
||||
_bitEqu 29, Flag29
|
||||
|
|
|
@ -398,13 +398,13 @@ IntReturn
|
|||
_bclr r7, r7, bitFlagLowSaves
|
||||
|
||||
bc BO_IF, bitFlag31, Trace_0x30
|
||||
_bclr r7, r7, bitFlag26
|
||||
_bclr r7, r7, bitFlagTrace
|
||||
|
||||
b @return
|
||||
@Trace_0x18
|
||||
|
||||
bc BO_IF_NOT, bitFlag26, @return
|
||||
_bclr r7, r7, bitFlag26
|
||||
bc BO_IF_NOT, bitFlagTrace, @return
|
||||
_bclr r7, r7, bitFlagTrace
|
||||
|
||||
stw r7, KDP.Flags(r1)
|
||||
li r8, ecInstTrace
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
########################################################################
|
||||
|
||||
_alignToCacheBlock
|
||||
IntFPUnavail
|
||||
FPUnavailInt
|
||||
; Reload the FPU
|
||||
|
||||
mfsprg r1, 0
|
||||
|
@ -149,7 +149,7 @@ DisableFPU
|
|||
b &DEST
|
||||
ENDM
|
||||
|
||||
FloatLoadJumpTable
|
||||
MakeFloatJumpTable lfd, FDP_0da0
|
||||
FloatSaveJumpTable
|
||||
MakeFloatJumpTable stfd, FDP_003c
|
||||
LFDTable
|
||||
MakeFloatJumpTable lfd, MRExit
|
||||
STFDTable
|
||||
MakeFloatJumpTable stfd, MRDoneTableSTFD
|
||||
|
|
|
@ -206,7 +206,7 @@ IntExternal2
|
|||
|
||||
; Increment the Sys/Alt CPU clocks, and the Dec-int counter
|
||||
_align 6
|
||||
IntDecrementerSystem
|
||||
DecrementerIntSys
|
||||
mfsprg r1, 0
|
||||
stmw r2, KDP.r2(r1)
|
||||
mfdec r31
|
||||
|
@ -252,7 +252,7 @@ DecCommon ; DEC for Alternate=r30, System=r31
|
|||
mfsprg r1, 1
|
||||
rfi
|
||||
|
||||
IntDecrementerAlternate
|
||||
DecrementerIntAlt
|
||||
mfsprg r1, 0
|
||||
stmw r2, KDP.r2(r1)
|
||||
lwz r31, KDP.OtherContextDEC(r1)
|
||||
|
@ -262,7 +262,7 @@ IntDecrementerAlternate
|
|||
########################################################################
|
||||
|
||||
_align 6
|
||||
IntDSI
|
||||
DataStorageInt
|
||||
mfsprg r1, 0
|
||||
stmw r2, KDP.r2(r1)
|
||||
mfsprg r11, 1
|
||||
|
@ -277,7 +277,7 @@ IntDSI
|
|||
mfmsr r14
|
||||
_bset r15, r14, bitMsrDR
|
||||
mtmsr r15
|
||||
lwz r27, 0(r10)
|
||||
lwz r27, 0(r10) ; r27 = INSTRUCTION
|
||||
mtmsr r14
|
||||
|
||||
EmulateDataAccess
|
||||
|
@ -285,38 +285,39 @@ EmulateDataAccess
|
|||
lwz r25, KDP.RetryCodePtr(r1)
|
||||
li r21, 0
|
||||
beq @r0
|
||||
lwzx r18, r1, r18
|
||||
lwzx r18, r1, r18 ; r16 = contents of rA
|
||||
@r0
|
||||
andis. r26, r27, 0xec00
|
||||
andis. r26, r27, 0xec00 ; intended to extract the major opcode? seems wrong though!
|
||||
lwz r16, KDP.Flags(r1)
|
||||
mfsprg r24, 3
|
||||
rlwinm r17, r27, 0, 6, 15
|
||||
rlwinm r17, r27, 0, 6, 15 ; r17 = rS/D and rA fields
|
||||
rlwimi r16, r16, 27, 26, 26
|
||||
bge @low_opcode
|
||||
bge @xform
|
||||
|
||||
;dform
|
||||
rlwimi r25, r27, 7, 26, 29 ; opcode >= 32
|
||||
rlwimi r25, r27, 12, 25, 25
|
||||
lwz r26, 0xb80(r25)
|
||||
extsh r23, r27
|
||||
lwz r26, MROptabD - MRTop(r25) ; table of 4b elements, index = major opcode bits 51234 (this is the last quarter of MROptabX)
|
||||
extsh r23, r27 ; r23 = register offset field, sign-extended
|
||||
rlwimi r25, r26, 26, 22, 29
|
||||
mtlr r25
|
||||
mtcr r26
|
||||
add r18, r18, r23
|
||||
rlwimi r17, r26, 6, 26, 5
|
||||
mtlr r25 ; dest = r25 = first of two function ptrs in table entry
|
||||
mtcr r26 ; using the flags in the arbitrary upper 16 bits of the table entry?
|
||||
add r18, r18, r23 ; r18 = effective address attempted by instruction
|
||||
rlwimi r17, r26, 6, 26, 5 ; r17 = pretend X-form inst with: maj opcode (from tbl), rS/D and RA (from inst), min opcode (from tbl)
|
||||
blr
|
||||
|
||||
@low_opcode ; opcode <= 31
|
||||
@xform ; opcode <= 31
|
||||
rlwimi r25, r27, 27, 26, 29
|
||||
rlwimi r25, r27, 0, 25, 25
|
||||
rlwimi r25, r27, 6, 23, 24
|
||||
lwz r26, 0x800(r25)
|
||||
rlwinm r23, r27, 23, 25, 29
|
||||
lwz r26, MROptabX - MRTop(r25) ; table of 4b elements, index = minor (x-form) opcode bits 8940123
|
||||
rlwinm r23, r27, 23, 25, 29 ; r23 = 4 * rB
|
||||
rlwimi r25, r26, 26, 22, 29
|
||||
mtlr r25
|
||||
mtlr r25 ; dest = r25 = first of two function ptrs in table entry
|
||||
mtcr r26
|
||||
lwzx r23, r1, r23
|
||||
rlwimi r17, r26, 6, 26, 5
|
||||
add r18, r18, r23
|
||||
lwzx r23, r1, r23 ; get rB from saved registers
|
||||
rlwimi r17, r26, 6, 26, 5 ; r17 = pretend X-form inst with: maj opcode (from tbl), rS/D and RA (from inst), min opcode (from tbl)
|
||||
add r18, r18, r23 ; r18 = effective address attempted by instruction
|
||||
bclr BO_IF_NOT, 13
|
||||
neg r23, r23
|
||||
add r18, r18, r23
|
||||
|
@ -325,7 +326,7 @@ EmulateDataAccess
|
|||
########################################################################
|
||||
|
||||
_align 6
|
||||
IntAlignment
|
||||
AlignmentInt
|
||||
mfsprg r1, 0
|
||||
stmw r2, KDP.r2(r1)
|
||||
|
||||
|
@ -350,11 +351,11 @@ IntAlignment
|
|||
rlwinm r17, r27, 16, 0x03FF0000
|
||||
lwz r16, KDP.Flags(r1)
|
||||
rlwimi r25, r27, 24, 23, 29 ; add constant fields from dsisr (*4) to FDP
|
||||
rlwimi r16, r16, 27, 26, 26 ; copy FlagSE to Flag26
|
||||
rlwimi r16, r16, 27, 26, 26 ; copy FlagSE to FlagTrace
|
||||
bne @X_form
|
||||
|
||||
; D- or DS-form (immediate-indexed) instruction
|
||||
lwz r26, FDP_TableBase + 4*(0x40 + 0x20)(r25) ; use upper quarter of table
|
||||
lwz r26, MROptabD - MRTop(r25) ; use upper quarter of table
|
||||
mfmsr r14
|
||||
rlwimi r25, r26, 26, 22, 29 ; third byte of lookup value is a /4 code offset in FDP
|
||||
mtlr r25 ; so get ready to go there
|
||||
|
@ -365,7 +366,7 @@ IntAlignment
|
|||
|
||||
@X_form
|
||||
; X-form (register-indexed) instruction
|
||||
lwz r26, FDP_TableBase(r25)
|
||||
lwz r26, MROptabX - MRTop(r25)
|
||||
mfmsr r14
|
||||
rlwimi r25, r26, 26, 22, 29
|
||||
mtlr r25
|
||||
|
@ -380,15 +381,11 @@ IntAlignment
|
|||
|
||||
########################################################################
|
||||
|
||||
; FDP GOES HERE (0xC00)! (just include it as a file?)
|
||||
; there are some big mistakes in the labels below!
|
||||
_align 10
|
||||
FDP
|
||||
dcb.l (0x1874-0xC00)/4, 0x46445020 ; 'FDP '
|
||||
INCLUDE 'NKMemRetry.s'
|
||||
|
||||
########################################################################
|
||||
|
||||
IntISI
|
||||
InstStorageInt
|
||||
bl LoadInterruptRegisters
|
||||
|
||||
andis. r8, r11, 0x4020 ; what the hell are these MSR bits?
|
||||
|
@ -396,7 +393,7 @@ IntISI
|
|||
|
||||
stmw r14, KDP.r14(r8)
|
||||
mr r27, r10
|
||||
bl PopulateHTAB
|
||||
bl PutPTE
|
||||
bne @not_in_htab
|
||||
|
||||
mfsprg r24, 3
|
||||
|
@ -429,7 +426,7 @@ major_0x039dc_0x14
|
|||
|
||||
########################################################################
|
||||
|
||||
IntMachineCheck
|
||||
MachineCheckInt
|
||||
bl LoadInterruptRegisters
|
||||
li r8, ecMachineCheck
|
||||
b Exception
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
; NKExceptions
|
||||
; IntReturn
|
||||
; NKPaging
|
||||
; PopulateHTAB
|
||||
; PutPTE
|
||||
; EXPORTS:
|
||||
; EditPTEInHTAB (=> NKMPCalls)
|
||||
; GetPARPageInfo (=> NKMPCalls)
|
||||
|
@ -66,7 +66,7 @@ VMDispatchTable
|
|||
DeclareVMCall 2, VMReturn
|
||||
|
||||
|
||||
; VMGetPhysicalAddress: 'return phys address given log page (can be different from above!)'
|
||||
; VMGetPhysicaless: 'return phys address given log page (can be different from above!)'
|
||||
; ('above' means VMGetPhysicalPage)
|
||||
|
||||
DeclareVMCall 11, VMReturnMinus1
|
||||
|
@ -96,7 +96,7 @@ VMDispatchTable
|
|||
|
||||
; VMReturn
|
||||
|
||||
; VMGetPhysicalAddress_one
|
||||
; VMGetPhysicaless_one
|
||||
|
||||
VMReturnMinus1 ; OUTSIDE REFERER
|
||||
li r3, -0x01
|
||||
|
@ -133,7 +133,7 @@ VMInit ; OUTSIDE REFERER
|
|||
|
||||
stw r5, KDP.PARPageListPtr(r1) ; where did NK find this???
|
||||
|
||||
lwz r6, KDP.CurrentMemLayout.SegMapPtr(r1)
|
||||
lwz r6, KDP.CurMap.SegMapPtr(r1)
|
||||
li r5, 0x00
|
||||
li r4, 0x00
|
||||
|
||||
|
@ -278,7 +278,7 @@ VMInit_0x218
|
|||
cmpwi r5, 0x00
|
||||
addi r15, r15, 0x04
|
||||
bgt VMInit_0x218
|
||||
lwz r6, KDP.CurrentMemLayout.SegMapPtr(r1)
|
||||
lwz r6, KDP.CurMap.SegMapPtr(r1)
|
||||
li r9, 0
|
||||
ori r7, r9, 0xffff
|
||||
li r8, 0xa00
|
||||
|
@ -293,7 +293,7 @@ VMInit_0x250
|
|||
addi r9, r9, 1
|
||||
cmpwi r9, 3
|
||||
ble VMInit_0x250
|
||||
lwz r6, KDP.CurrentMemLayout.SegMapPtr(r1)
|
||||
lwz r6, KDP.CurMap.SegMapPtr(r1)
|
||||
lwz r9, KDP.VMLogicalPages(r1)
|
||||
lwz r15, KDP.PARPageListPtr(r1)
|
||||
|
||||
|
@ -838,7 +838,7 @@ VMAllocateMemory_0xc0
|
|||
rlwinm. r9, r7, 0, 0, 11
|
||||
blt cr7, VMReturnMinus1
|
||||
bne VMReturnMinus1
|
||||
lwz r14, KDP.CurrentMemLayout.SegMapPtr(r1)
|
||||
lwz r14, KDP.CurMap.SegMapPtr(r1)
|
||||
rlwinm r9, r7, 19, 25, 28
|
||||
lwzx r14, r14, r9
|
||||
clrlwi r9, r7, 0x10
|
||||
|
@ -963,7 +963,7 @@ GetPARPageInfo_0x40 ;some kind of little-used code path for when VMMaxVirtualPag
|
|||
rlwinm. r9, r4, 0, 0, 11
|
||||
blt cr4, VMReturnMinus1;return failure if r4<VMMaxVirtualPages
|
||||
bne VMReturnMinus1 ;return failure if bits 0-11 of r4 are non-zero
|
||||
lwz r15, KDP.CurrentMemLayout.SegMapPtr(r1);this appears to be an array of 8-byte structures.
|
||||
lwz r15, KDP.CurMap.SegMapPtr(r1);this appears to be an array of 8-byte structures.
|
||||
rlwinm r9, r4, 19, 25, 28;copy bits 12-15 or r4 to bits 25-28 of r9
|
||||
lwzx r15, r15, r9 ;do an index for some reason
|
||||
clrlwi r9, r4, 0x10 ;copy bits 16-31 to r9
|
||||
|
@ -1131,7 +1131,7 @@ VMLastExportedFunc_0xd7
|
|||
mr r14, r26
|
||||
mflr r6
|
||||
slwi r27, r4, 12
|
||||
bl PopulateHTAB
|
||||
bl PutPTE
|
||||
bnel SystemCrash
|
||||
mr r27, r7
|
||||
mr r29, r8
|
||||
|
|
57
NanoKernel/NKMemRetry.s
Executable file
57
NanoKernel/NKMemRetry.s
Executable file
|
@ -0,0 +1,57 @@
|
|||
; Control flow between PRIMARY and SECONDARY optab routines:
|
||||
|
||||
; INTERRUPT HANDLER sets:
|
||||
; r14 = original interrupt MSR
|
||||
; r15 = MSR | MSR[DR]
|
||||
; r17 = pretend inst: 0-5 from optab || 6-10 rS/rD || 11-15 rA || 21-25 zero || 26-31 from optab
|
||||
; r18 = effective address attempted
|
||||
; r25 = dirty MRTop ptr
|
||||
; r26 = OpTab entry
|
||||
; r27 = instruction
|
||||
; LR = r25 = address of primary routine (jumped to)
|
||||
|
||||
; PRIMARY ROUTINE
|
||||
|
||||
; LOOP until SECONDARY ROUTINE calls, or is, an exit routine
|
||||
; MRDoMemAccess accepts:
|
||||
; r17 = pretend inst: 0-5 from optab || 6-10 rS/rD || 11-15 rA || 21-27 ?? || 28-30 byteCount-1 || 31 isLoad (NB: what about bottom 6 bits??)
|
||||
; r19 = address first byte *after* the string to be accessed
|
||||
; r25 = dirty MRTop ptr
|
||||
; r26 = the original OpTab entry
|
||||
; EQ = should continue (NE => skip to MRDoneMemAccess)
|
||||
|
||||
; MRDoMemAccess sets:
|
||||
; r25 = address of secondary routine
|
||||
; MSR = r15
|
||||
; SPRG3 = VecTblMemRetry
|
||||
; LR = r22 = address of MemAccess routine (jumped to)
|
||||
|
||||
; MemAccess routine accepts:
|
||||
; r17 = pretend inst as noted above (will be modified)
|
||||
; r19 = address first byte *after* the string to be accessed (not modified)
|
||||
; r20/r21 = right-justified data (stores only)
|
||||
|
||||
; MemAccess routine sets:
|
||||
; r17 = same but with byteCount field decremented
|
||||
; r20/r21 = right-justified data (loads only)
|
||||
; r26 = scratch
|
||||
|
||||
; MRDoneMemAccess sets:
|
||||
; r17 = pretend inst as above
|
||||
; MSR = r14
|
||||
; SPRG3 = r24
|
||||
; userspace register rA in EWA = r18 (EA), and CR3.SO = 1 (skipped for r0 or if CR3.EQ)
|
||||
; LR = r25 = address of secondary routine (jumped to)
|
||||
|
||||
; SECONDARY ROUTINE
|
||||
|
||||
; EXIT ROUTINE
|
||||
|
||||
_align 10
|
||||
MRTop
|
||||
INCLUDE 'MROptabCode.s' ; c00:1154
|
||||
INCLUDE 'MRMemtabCode.s' ; 1154:13f4
|
||||
INCLUDE 'MRInterrupts.s' ; 13f4:14f4
|
||||
INCLUDE 'MROptab.s' ; 14f4:16f4
|
||||
INCLUDE 'MRMemtab.s' ; 16f4:17f4
|
||||
INCLUDE 'MRUnknown.s' ; 17f4:1874
|
|
@ -3,8 +3,8 @@
|
|||
########################################################################
|
||||
########################################################################
|
||||
|
||||
PopulateHTAB ; LogicalAddress r28 // Success cr0.eq
|
||||
lwz r29, KDP.CurrentMemLayout.SegMapPtr(r1)
|
||||
PutPTE ; EA r27 // PTE r30/r31, EQ=Success, GT=Invalid, LT=Fault
|
||||
lwz r29, KDP.CurMap.SegMapPtr(r1) ; late addition: r29 used to be an argument
|
||||
rlwinm r28, r27, 7, 0x0000000F << 3 ; 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
|
||||
|
@ -74,13 +74,13 @@ PopulateHTAB ; LogicalAddress r28 // Success cr0.eq
|
|||
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)
|
||||
blt cr7, @no_blanks_in_pteg ; >>>>> This might cause PutPTE 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)
|
||||
stw r27, KDP.HtabLastEA(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]
|
||||
|
@ -167,8 +167,8 @@ PopulateHTAB ; LogicalAddress r28 // Success cr0.eq
|
|||
; Helpful return code for @daddy_flag
|
||||
@return_via_pf2
|
||||
bgtlr
|
||||
addi r29, r1, KDP.SupervisorMemLayout
|
||||
b SwitchMemLayout
|
||||
addi r29, r1, KDP.SupervisorMap
|
||||
b SetMap
|
||||
|
||||
########################################################################
|
||||
; So try the secondary hashing function, if we haven't already
|
||||
|
@ -235,7 +235,7 @@ PopulateHTAB ; LogicalAddress r28 // Success cr0.eq
|
|||
rlwinm r31, r31, 6, 10, 19
|
||||
xor r28, r28, r31
|
||||
|
||||
lwz r26, KDP.CurrentMemLayout.SegMapPtr(r1)
|
||||
lwz r26, KDP.CurMap.SegMapPtr(r1)
|
||||
rlwinm r30, r28, (32-25), 0x00000078
|
||||
lwzx r26, r26, r30 ; r26 pts into PageMap @ current segment
|
||||
|
||||
|
@ -272,7 +272,7 @@ PopulateHTAB ; LogicalAddress r28 // Success cr0.eq
|
|||
|
||||
_InvalNCBPointerCache scratch=r28
|
||||
|
||||
bne cr7, PopulateHTAB ; not a DaddyFlag + CountingFlag? Retriable...
|
||||
bne cr7, PutPTE ; not a DaddyFlag + CountingFlag? Retriable...
|
||||
|
||||
rlwinm r26, r26, 22, 0xFFFFFFFC ; PIRFlag << 31 | BtmBit << 22 | physBase * 4
|
||||
lwzux r28, r26, r30
|
||||
|
@ -289,14 +289,14 @@ PopulateHTAB ; LogicalAddress r28 // Success cr0.eq
|
|||
rlwimi r28, r31, 27, 28, 28
|
||||
stw r28, 0(r26)
|
||||
|
||||
b PopulateHTAB
|
||||
b PutPTE
|
||||
|
||||
########################################################################
|
||||
########################################################################
|
||||
|
||||
SwitchMemLayout
|
||||
lwz r28, MemLayout.SegMapPtr(r29)
|
||||
stw r28, KDP.CurrentMemLayout.SegMapPtr(r1)
|
||||
SetMap ; MapPtrBlk r29
|
||||
lwz r28, MapPtrBlkSegMapPtr(r29)
|
||||
stw r28, KDP.CurMap.SegMapPtr(r1)
|
||||
addi r28, r28, 16*8 + 4
|
||||
lis r31, 0
|
||||
|
||||
|
@ -308,10 +308,10 @@ SwitchMemLayout
|
|||
bne @next_seg
|
||||
|
||||
mfpvr r31
|
||||
lwz r28, MemLayout.BatMap(r29)
|
||||
lwz r28, MapPtrBlkBatMap(r29)
|
||||
andis. r31, r31, 0xFFFE
|
||||
addi r29, r1, 0
|
||||
stw r28, KDP.CurrentMemLayout.BatMap(r1)
|
||||
stw r28, KDP.CurMap.BatMap(r1)
|
||||
beq @601
|
||||
|
||||
rlwimi r29, r28, 7, 0x00000078 ; BATS, non-601
|
||||
|
@ -440,7 +440,7 @@ SwitchMemLayout
|
|||
########################################################################
|
||||
########################################################################
|
||||
|
||||
GetPhysicalAddr
|
||||
GetPhysical ; EA r27, batPtr r29 // PA r31, EQ=Fail
|
||||
lwz r30, 0(r29)
|
||||
li r28, -1
|
||||
rlwimi r28, r30, 15, 0, 14
|
||||
|
@ -461,7 +461,7 @@ GetPhysicalAddr
|
|||
rlwimi r28, r30, 15, 0, 14
|
||||
xor r31, r27, r30
|
||||
andc. r31, r31, r28
|
||||
bne nobats
|
||||
bne GetPhysicalFromHTAB
|
||||
|
||||
@_54
|
||||
andi. r31, r30, 1
|
||||
|
@ -471,7 +471,7 @@ GetPhysicalAddr
|
|||
or r31, r31, r28
|
||||
bnelr
|
||||
|
||||
nobats
|
||||
GetPhysicalFromHTAB ; EA r27 // PA r31, EQ=Fail
|
||||
mfsrin r31, r27
|
||||
rlwinm r30, r27, 10, 26, 31
|
||||
rlwimi r30, r31, 7, 1, 24
|
||||
|
|
|
@ -41,58 +41,58 @@ rAlt set r8
|
|||
stw r23, VecTbl.SystemReset(rSys)
|
||||
stw r23, VecTbl.SystemReset(rAlt)
|
||||
|
||||
_kaddr r23, rNK, IntMachineCheck
|
||||
_kaddr r23, rNK, MachineCheckInt
|
||||
stw r23, VecTbl.MachineCheck(rSys)
|
||||
stw r23, VecTbl.MachineCheck(rAlt)
|
||||
|
||||
_kaddr r23, rNK, IntDSI
|
||||
_kaddr r23, rNK, DataStorageInt
|
||||
stw r23, VecTbl.DSI(rSys)
|
||||
stw r23, VecTbl.DSI(rAlt)
|
||||
|
||||
_kaddr r23, rNK, IntISI
|
||||
_kaddr r23, rNK, InstStorageInt
|
||||
stw r23, VecTbl.ISI(rSys)
|
||||
stw r23, VecTbl.ISI(rAlt)
|
||||
|
||||
lbz r22, NKConfigurationInfo.InterruptHandlerKind(rCI)
|
||||
|
||||
cmpwi r22, 0
|
||||
_kaddr r23, rNK, IntExternal0
|
||||
_kaddr r23, rNK, ExternalInt0
|
||||
beq @chosenIntHandler
|
||||
cmpwi r22, 1
|
||||
_kaddr r23, rNK, IntExternal1
|
||||
_kaddr r23, rNK, ExternalInt1
|
||||
beq @chosenIntHandler
|
||||
cmpwi r22, 2
|
||||
_kaddr r23, rNK, IntExternal2
|
||||
_kaddr r23, rNK, ExternalInt2
|
||||
beq @chosenIntHandler
|
||||
|
||||
@chosenIntHandler
|
||||
stw r23, VecTbl.External(rSys)
|
||||
|
||||
_kaddr r23, rNK, IntProgram
|
||||
_kaddr r23, rNK, ProgramInt
|
||||
stw r23, VecTbl.External(rAlt)
|
||||
|
||||
_kaddr r23, rNK, IntAlignment
|
||||
_kaddr r23, rNK, AlignmentInt
|
||||
stw r23, VecTbl.Alignment(rSys)
|
||||
stw r23, VecTbl.Alignment(rAlt)
|
||||
|
||||
_kaddr r23, rNK, IntProgram
|
||||
_kaddr r23, rNK, ProgramInt
|
||||
stw r23, VecTbl.Program(rSys)
|
||||
stw r23, VecTbl.Program(rAlt)
|
||||
|
||||
_kaddr r23, rNK, IntFPUnavail
|
||||
_kaddr r23, rNK, FPUnavailInt
|
||||
stw r23, VecTbl.FPUnavail(rSys)
|
||||
stw r23, VecTbl.FPUnavail(rAlt)
|
||||
|
||||
_kaddr r23, rNK, IntDecrementerSystem
|
||||
_kaddr r23, rNK, DecrementerIntSys
|
||||
stw r23, VecTbl.Decrementer(rSys)
|
||||
_kaddr r23, rNK, IntDecrementerAlternate
|
||||
_kaddr r23, rNK, DecrementerIntAlt
|
||||
stw r23, VecTbl.Decrementer(rAlt)
|
||||
|
||||
_kaddr r23, rNK, IntSyscall
|
||||
_kaddr r23, rNK, SyscallInt
|
||||
stw r23, VecTbl.Syscall(rSys)
|
||||
stw r23, VecTbl.Syscall(rAlt)
|
||||
|
||||
_kaddr r23, rNK, IntTrace
|
||||
_kaddr r23, rNK, TraceInt
|
||||
stw r23, VecTbl.Trace(rSys)
|
||||
stw r23, VecTbl.Trace(rAlt)
|
||||
stw r23, VecTbl.OtherTrace(rSys)
|
||||
|
@ -111,7 +111,7 @@ rAlt set r8
|
|||
|
||||
########################################################################
|
||||
|
||||
; Fill the KCallTbl, the IntProgram interface to the NanoKernel
|
||||
; Fill the KCallTbl, the ProgramInt interface to the NanoKernel
|
||||
InitKCalls
|
||||
_kaddr r23, rNK, KCallSystemCrash ; Uninited call -> crash
|
||||
addi r8, r1, KDP.KCallTbl
|
||||
|
@ -274,24 +274,24 @@ CopyBATRangeInit
|
|||
; Save some ptrs that allow us to enable Overlay mode, etc
|
||||
|
||||
addi r23, r1, KDP.SegMap32SupInit
|
||||
stw r23, KDP.SupervisorMemLayout.SegMapPtr(r1)
|
||||
stw r23, KDP.SupervisorMap.SegMapPtr(r1)
|
||||
lwz r23, NKConfigurationInfo.BatMap32SupInit(rCI)
|
||||
stw r23, KDP.SupervisorMemLayout.BatMap(r1)
|
||||
stw r23, KDP.SupervisorMap.BatMap(r1)
|
||||
|
||||
addi r23, r1, KDP.SegMap32UsrInit
|
||||
stw r23, KDP.UserMemLayout.SegMapPtr(r1)
|
||||
stw r23, KDP.UserMap.SegMapPtr(r1)
|
||||
lwz r23, NKConfigurationInfo.BatMap32UsrInit(rCI)
|
||||
stw r23, KDP.UserMemLayout.BatMap(r1)
|
||||
stw r23, KDP.UserMap.BatMap(r1)
|
||||
|
||||
addi r23, r1, KDP.SegMap32CPUInit
|
||||
stw r23, KDP.CpuMemLayout.SegMapPtr(r1)
|
||||
stw r23, KDP.CpuMap.SegMapPtr(r1)
|
||||
lwz r23, NKConfigurationInfo.BatMap32CPUInit(rCI)
|
||||
stw r23, KDP.CpuMemLayout.BatMap(r1)
|
||||
stw r23, KDP.CpuMap.BatMap(r1)
|
||||
|
||||
addi r23, r1, KDP.SegMap32OvlInit
|
||||
stw r23, KDP.OverlayMemLayout.SegMapPtr(r1)
|
||||
stw r23, KDP.OverlayMap.SegMapPtr(r1)
|
||||
lwz r23, NKConfigurationInfo.BatMap32OvlInit(rCI)
|
||||
stw r23, KDP.OverlayMemLayout.BatMap(r1)
|
||||
stw r23, KDP.OverlayMap.BatMap(r1)
|
||||
|
||||
########################################################################
|
||||
|
||||
|
@ -408,8 +408,8 @@ CreatePARInPageMap
|
|||
|
||||
; Enable the ROM Overlay
|
||||
|
||||
addi r29, r1, KDP.OverlayMemLayout
|
||||
bl SwitchMemLayout
|
||||
addi r29, r1, KDP.OverlayMap
|
||||
bl SetMap
|
||||
|
||||
########################################################################
|
||||
|
||||
|
@ -417,15 +417,15 @@ CreatePARInPageMap
|
|||
|
||||
lwz r27, KDP.ConfigInfoPtr(r1)
|
||||
lwz r27, NKConfigurationInfo.LA_InterruptCtl(r27)
|
||||
bl PopulateHTAB
|
||||
bl PutPTE
|
||||
|
||||
lwz r27, KDP.ConfigInfoPtr(r1)
|
||||
lwz r27, NKConfigurationInfo.LA_KernelData(r27)
|
||||
bl PopulateHTAB
|
||||
bl PutPTE
|
||||
|
||||
lwz r27, KDP.ConfigInfoPtr(r1)
|
||||
lwz r27, NKConfigurationInfo.LA_EmulatorData(r27)
|
||||
bl PopulateHTAB
|
||||
bl PutPTE
|
||||
|
||||
########################################################################
|
||||
|
||||
|
|
|
@ -147,7 +147,7 @@ KCallRunAlternateContext
|
|||
|
||||
mr r27, r8
|
||||
addi r29, r1, KDP.BATs + 0xa0
|
||||
bl GetPhysicalAddr
|
||||
bl GetPhysical
|
||||
clrlwi r23, r8, 20
|
||||
beq @fail
|
||||
|
||||
|
@ -158,7 +158,7 @@ KCallRunAlternateContext
|
|||
|
||||
addi r27, r27, 0x1000
|
||||
addi r29, r1, KDP.BATs + 0xa0
|
||||
bl GetPhysicalAddr
|
||||
bl GetPhysical
|
||||
beq @fail
|
||||
|
||||
subi r31, r31, 0x1000
|
||||
|
@ -267,7 +267,7 @@ Reset
|
|||
_alignToCacheBlock
|
||||
KCallPrioritizeInterrupts
|
||||
; Left side: roll back the interrupt preparation before the int handler repeats is
|
||||
; Right side: jump to the external interrupt handler (PIH or IntProgram)
|
||||
; Right side: jump to the external interrupt handler (PIH or ProgramInt)
|
||||
mtsprg 2, r12
|
||||
mtsrr0 r10
|
||||
mtsrr1 r11
|
||||
|
@ -321,7 +321,7 @@ KCallSystemCrash
|
|||
########################################################################
|
||||
|
||||
_alignToCacheBlock
|
||||
IntProgram
|
||||
ProgramInt
|
||||
; (also called when the Alternate Context gets an External Int => Exception)
|
||||
|
||||
; Standard interrupt palaver
|
||||
|
@ -420,7 +420,7 @@ IntProgram
|
|||
########################################################################
|
||||
|
||||
_alignToCacheBlock
|
||||
IntSyscall
|
||||
SyscallInt
|
||||
bl LoadInterruptRegisters
|
||||
mfmsr r8
|
||||
subi r10, r10, 4
|
||||
|
@ -431,7 +431,7 @@ IntSyscall
|
|||
########################################################################
|
||||
|
||||
_alignToCacheBlock
|
||||
IntTrace
|
||||
TraceInt
|
||||
bl LoadInterruptRegisters
|
||||
li r8, ecInstTrace
|
||||
b Exception
|
||||
|
|
|
@ -102,7 +102,7 @@ L ds.l 1
|
|||
|
||||
########################################################################
|
||||
|
||||
MemLayout RECORD 0, INCR
|
||||
MapPtrBlk RECORD 0, INCR
|
||||
SegMapPtr ds.l 1
|
||||
BatMap ds.l 1 ; packed array of 4-bit indices into BATs
|
||||
ENDR
|
||||
|
@ -182,11 +182,11 @@ 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
|
||||
CurrentMemLayout ds MemLayout ; 5e8:5f0
|
||||
SupervisorMap ds MapPtrBlk ; 5c8:5d0
|
||||
UserMap ds MapPtrBlk ; 5d0:5d8
|
||||
CpuMap ds MapPtrBlk ; 5d8:5e0
|
||||
OverlayMap ds MapPtrBlk ; 5e0:5e8
|
||||
CurMap ds MapPtrBlk ; 5e8:5f0
|
||||
|
||||
KCallTbl ds KCallTbl ; 5f0:630
|
||||
|
||||
|
@ -215,7 +215,7 @@ PageMapStartPtr ds.l 1 ; 684
|
|||
PageAttributeInit ds.l 1 ; 688 ; defaults for PLE/PTE?
|
||||
HtabTempPage ds.l 1 ; 68c ; a page that lives temporarily in the HTAB (per its PME)
|
||||
HtabTempEntryPtr ds.l 1 ; 690 ; ptr to that PME
|
||||
NewestPageInHtab ds.l 1 ; 694
|
||||
HtabLastEA ds.l 1 ; 694
|
||||
ApproxCurrentPTEG ds.l 1 ; 698
|
||||
OverflowingPTEG ds.l 1 ; 69c
|
||||
PTEGMask ds.l 1 ; 6a0
|
||||
|
|
|
@ -20,8 +20,8 @@
|
|||
; Exception
|
||||
; ExceptionMemRetried
|
||||
; NKFloatInts
|
||||
; FloatLoadJumpTable
|
||||
; FloatSaveJumpTable
|
||||
; LFDTable
|
||||
; STFDTable
|
||||
; NKIntHandlers
|
||||
; LoadInterruptRegisters
|
||||
; EmulateDataAccess
|
||||
|
@ -76,7 +76,7 @@ FDP_0018 ; stfdu(x)
|
|||
FDP_001c ; called from above
|
||||
clrrwi r19, r25, 10
|
||||
rlwimi r19, r17, 14, 24, 28
|
||||
addi r19, r19, FloatSaveJumpTable - FDP
|
||||
addi r19, r19, STFDTable - FDP
|
||||
mtlr r19
|
||||
rlwimi r14, r11, 0, 18, 18
|
||||
mtmsr r14
|
||||
|
@ -231,7 +231,7 @@ FDP_0174
|
|||
FDP_0178
|
||||
clrrwi r23, r25, 10
|
||||
rlwimi r23, r17, 14, 24, 28
|
||||
addi r23, r23, FloatLoadJumpTable - FDP
|
||||
addi r23, r23, LFDTable - FDP
|
||||
mtlr r23
|
||||
stw r20, -0x02E0(r1)
|
||||
stw r21, -0x02DC(r1)
|
||||
|
@ -1631,7 +1631,7 @@ FDP_06e4
|
|||
|
||||
|
||||
|
||||
|
||||
; This is the traceTable, intimately associated with loc_D18/FDP_011C
|
||||
macro
|
||||
HalfWordTableEntry &n, &target
|
||||
|
||||
|
|
|
@ -14,11 +14,3 @@ NKTop
|
|||
include 'NKSoftInt.s'
|
||||
include 'NKLegacyVM.s'
|
||||
NKBtm
|
||||
FDP_TableBase
|
||||
FDP_003C
|
||||
loc_A38
|
||||
FDP_011C
|
||||
loc_D50
|
||||
FDP_0DA0
|
||||
MemRetryDSI
|
||||
MemRetryMachineCheck
|
||||
|
|
Loading…
Reference in New Issue
Block a user