mirror of
https://github.com/elliotnunn/powermac-rom.git
synced 2024-06-15 00:29:30 +00:00
Finish SoftInt
This commit is contained in:
parent
5e9622f4b8
commit
fa5cf87729
|
@ -4,7 +4,93 @@
|
|||
|
||||
IllegalInstruction
|
||||
|
||||
org 0x29c0
|
||||
mfmsr r9
|
||||
_bset r8, r9, MSR_DRbit
|
||||
mtmsr r8
|
||||
lwz r8, 0(r10)
|
||||
mtmsr r9
|
||||
|
||||
stw r0, EWA.r0(r1)
|
||||
stw r2, EWA.r2(r1)
|
||||
stw r3, EWA.r3(r1)
|
||||
stw r4, EWA.r4(r1)
|
||||
stw r5, EWA.r5(r1)
|
||||
lwz r9, ContextBlock.r7(r6)
|
||||
stw r9, EWA.r7(r1)
|
||||
lwz r9, ContextBlock.r8(r6)
|
||||
stw r9, EWA.r8(r1)
|
||||
lwz r9, ContextBlock.r9(r6)
|
||||
stw r9, EWA.r9(r1)
|
||||
lwz r9, ContextBlock.r10(r6)
|
||||
stw r9, EWA.r10(r1)
|
||||
lwz r9, ContextBlock.r11(r6)
|
||||
stw r9, EWA.r11(r1)
|
||||
lwz r9, ContextBlock.r12(r6)
|
||||
stw r9, EWA.r12(r1)
|
||||
lwz r9, ContextBlock.r13(r6)
|
||||
stw r9, EWA.r13(r1)
|
||||
stmw r14, EWA.r14(r1)
|
||||
|
||||
rlwinm r9, r8, 6, 15, 31
|
||||
cmplwi r9, 0xB99F
|
||||
beq @MFTB
|
||||
|
||||
rlwinm r9, r8, 17, 15, 20
|
||||
insrwi r9, r8, 11, 21
|
||||
cmplwi r9, 0xFFAE
|
||||
beq @STFIWX
|
||||
|
||||
|
||||
@FAIL
|
||||
li r8, ecInvalidInstr
|
||||
b Exception
|
||||
|
||||
|
||||
@MFTB
|
||||
extrwi r9, r8, 10, 11 ; r9 = tbr field
|
||||
cmplwi cr7, r9, 0x188 ; TBL=268, mangled
|
||||
cmplwi cr6, r9, 0x1A8 ; TBU=269, mangled
|
||||
cror 15, cr6_eq, cr7_eq
|
||||
bc BO_IF_NOT, 15, @FAIL
|
||||
|
||||
@retry_rtc
|
||||
DIALECT POWER
|
||||
mfrtcu r20
|
||||
mfrtcl r21
|
||||
mfrtcu r23
|
||||
DIALECT POWERPC
|
||||
xor. r23, r23, r20
|
||||
lis r23, 1000000000 >> 16
|
||||
rlwinm r28, r8, 13, 25, 29 ; r28 = dest register number * 4
|
||||
ori r23, r23, 1000000000 & 0xFFFF
|
||||
bne @retry_rtc
|
||||
|
||||
mullw r8, r20, r23
|
||||
mulhwu r20, r20, r23
|
||||
mfxer r23
|
||||
addc r21, r21, r8
|
||||
addze r20, r20
|
||||
mtxer r23
|
||||
lwz r23, KDP.NanoKernelInfo + NKNanoKernelInfo.EmulatedUnimpInstCount(r1)
|
||||
rlwimi r7, r7, 27, 26, 26
|
||||
addi r23, r23, 1
|
||||
stw r23, KDP.NanoKernelInfo + NKNanoKernelInfo.EmulatedUnimpInstCount(r1)
|
||||
|
||||
stwx r21, r1, r28 ; save register into EWA
|
||||
mr r16, r7
|
||||
beq cr7, loc_D50 ; TBL
|
||||
stwx r20, r1, r28
|
||||
b loc_D50 ; TBU
|
||||
|
||||
|
||||
@STFIWX
|
||||
lwz r23, KDP.NanoKernelInfo + NKNanoKernelInfo.EmulatedUnimpInstCount(r1)
|
||||
mr r27, r8
|
||||
addi r23, r23, 1
|
||||
stw r23, KDP.NanoKernelInfo + NKNanoKernelInfo.EmulatedUnimpInstCount(r1)
|
||||
mfmsr r14
|
||||
_bset r15, r14, MSR_DRbit
|
||||
b loc_A38
|
||||
|
||||
########################################################################
|
||||
|
||||
|
|
|
@ -46,6 +46,10 @@ IntDSI
|
|||
IntAlignment
|
||||
org 0xC00
|
||||
FDP
|
||||
org 0xA38
|
||||
loc_A38
|
||||
org 0xD50
|
||||
loc_D50
|
||||
org 0x13F4
|
||||
MemRetryDSI
|
||||
org 0x1498
|
||||
|
|
Loading…
Reference in New Issue
Block a user