ewa and other fixes

This commit is contained in:
Elliot Nunn 2018-07-15 18:30:41 +08:00
parent 74ad98c3d4
commit 4b6b3057f5
6 changed files with 112 additions and 113 deletions

View File

@ -28,19 +28,19 @@ ExceptionAfterRetry
stw r9, KDP.NKInfo.ExceptionCauseCounts(r8)
; Move regs from KDP to ContextBlock
lwz r8, EWA.r7(r1)
lwz r8, KDP.r7(r1)
stw r8, CB.r7(r6)
lwz r8, EWA.r8(r1)
lwz r8, KDP.r8(r1)
stw r8, CB.r8(r6)
lwz r8, EWA.r9(r1)
lwz r8, KDP.r9(r1)
stw r8, CB.r9(r6)
lwz r8, EWA.r10(r1)
lwz r8, KDP.r10(r1)
stw r8, CB.r10(r6)
lwz r8, EWA.r11(r1)
lwz r8, KDP.r11(r1)
stw r8, CB.r11(r6)
lwz r8, EWA.r12(r1)
lwz r8, KDP.r12(r1)
stw r8, CB.r12(r6)
lwz r8, EWA.r13(r1)
lwz r8, KDP.r13(r1)
stw r8, CB.r13(r6)
bge RunSystemContext ; Alt Context has left exception disabled => Sys Context
@ -80,11 +80,11 @@ RunExceptionHandler
########################################################################
major_0x02980_0x100
lwz r0, EWA.r0(r1)
lwz r2, EWA.r2(r1)
lwz r3, EWA.r3(r1)
lwz r4, EWA.r4(r1)
lwz r5, EWA.r5(r1)
lwz r0, KDP.r0(r1)
lwz r2, KDP.r2(r1)
lwz r3, KDP.r3(r1)
lwz r4, KDP.r4(r1)
lwz r5, KDP.r5(r1)
blr
PreferRegistersFromKDPSavingContextBlock
@ -93,7 +93,7 @@ PreferRegistersFromKDPSavingContextBlock
stw r21, CB.PropagateR21(r6)
stw r19, CB.PropagateR19(r6)
stw r18, CB.PropagateR18(r6)
lmw r14, EWA.r14(r1)
lmw r14, KDP.r14(r1)
blr
########################################################################
@ -161,7 +161,7 @@ KCallReturnFromException
lwz r4, CB.ExceptionOriginR4(r6)
bc BO_IF_NOT, bitFlagLowSaves, RunSystemContext
stmw r14, EWA.r14(r1)
stmw r14, KDP.r14(r1)
lwz r17, CB.PropagateR17(r6)
lwz r20, CB.PropagateR20(r6)
lwz r21, CB.PropagateR21(r6)
@ -196,9 +196,9 @@ KCallReturnFromException
LoadInterruptRegisters
mfsprg r1, 0
stw r6, EWA.r6(r1)
stw r6, KDP.r6(r1)
mfsprg r6, 1
stw r6, EWA.r1(r1)
stw r6, KDP.r1(r1)
lwz r6, KDP.PA_ContextBlock(r1)
stw r7, CB.r7(r6)
stw r8, CB.r8(r6)
@ -259,7 +259,7 @@ SwitchContext ; OldCB *r6, NewCB *r9
stw r21, CB.LowSave21(r6)
stw r19, CB.LowSave19(r6)
stw r18, CB.LowSave18(r6)
lmw r14, EWA.r14(r1)
lmw r14, KDP.r14(r1)
@not_low_saves
mfxer r8
@ -277,7 +277,7 @@ SwitchContext ; OldCB *r6, NewCB *r9
stw r12, CB.MQ(r6)
@no_mq
lwz r8, EWA.r1(r1)
lwz r8, KDP.r1(r1)
stw r0, CB.r0(r6)
stw r8, 0x010c(r6)
stw r2, 0x0114(r6)
@ -339,7 +339,7 @@ SwitchContext ; OldCB *r6, NewCB *r9
lwz r8, CB.r1(r6)
lwz r0, CB.r0(r6)
stw r8, EWA.r1(r1)
stw r8, KDP.r1(r1)
lwz r2, 0x0114(r6)
lwz r3, 0x011c(r6)
lwz r4, 0x0124(r6)
@ -386,8 +386,8 @@ IntReturn
lwz r8, CB.r8(r6)
lwz r9, CB.r9(r6)
lwz r6, EWA.r6(r1) ; restore last two registers from EWA
lwz r1, EWA.r1(r1)
lwz r6, KDP.r6(r1) ; restore last two registers from EWA
lwz r1, KDP.r1(r1)
rfi

View File

@ -5,18 +5,18 @@
_align 6
IntExternal0
mfsprg r1, 0 ; Init regs and increment ctr
stw r0, EWA.r2(r1)
stw r2, EWA.r2(r1)
stw r0, KDP.r2(r1)
stw r2, KDP.r2(r1)
lwz r2, KDP.NKInfo.ExternalIntCount(r1)
stw r3, EWA.r3(r1)
stw r3, KDP.r3(r1)
addi r2, r2, 1
stw r2, KDP.NKInfo.ExternalIntCount(r1)
mfmsr r2 ; Save a self-ptr to FF880000... why?
lis r3, 0xFF88
_bset r0, r2, bitMsrDR
stw r4, EWA.r4(r1)
stw r5, EWA.r5(r1)
stw r4, KDP.r4(r1)
stw r5, KDP.r5(r1)
mfsrr0 r4
mfsrr1 r5
mtmsr r0
@ -24,8 +24,8 @@ IntExternal0
mtmsr r2
mtsrr0 r4
mtsrr1 r5
lwz r4, EWA.r4(r1)
lwz r5, EWA.r5(r1)
lwz r4, KDP.r4(r1)
lwz r5, KDP.r5(r1)
lwz r2, KDP.DebugIntPtr(r1) ; Query the shared mem (debug?) for int num
mfcr r0
@ -35,7 +35,7 @@ IntExternal0
ori r2, r2, 0x8000
sth r2, 0(r3)
mfsprg r2, 2
lwz r3, EWA.r3(r1)
lwz r3, KDP.r3(r1)
mtlr r2
beq @return ; 0 -> no interrupt
bgt @clear ; negative -> clear interrupt
@ -46,8 +46,8 @@ IntExternal0
@return
mtcr r0 ; Set CR and return
lwz r0, EWA.r0(r1)
lwz r2, EWA.r2(r1)
lwz r0, KDP.r0(r1)
lwz r2, KDP.r2(r1)
mfsprg r1, 1
rfi
@ -72,18 +72,18 @@ IntLookupTable
_align 6
IntExternal1
mfsprg r1, 0 ; Init regs and increment ctr
stw r0, EWA.r2(r1)
stw r2, EWA.r2(r1)
stw r0, KDP.r2(r1)
stw r2, KDP.r2(r1)
lwz r2, KDP.NKInfo.ExternalIntCount(r1)
stw r3, EWA.r3(r1)
stw r3, KDP.r3(r1)
addi r2, r2, 1
stw r2, KDP.NKInfo.ExternalIntCount(r1)
lis r2, 0x50F3 ; Query OpenPIC at 50F2A000
mfmsr r2
_bset r0, r2, bitMsrDR
stw r4, EWA.r4(r1)
stw r5, EWA.r5(r1)
stw r4, KDP.r4(r1)
stw r5, KDP.r5(r1)
mfsrr0 r4
mfsrr1 r5
mtmsr r0
@ -94,8 +94,8 @@ IntExternal1
mtmsr r2
mtsrr0 r4
mtsrr1 r5
lwz r4, EWA.r4(r1)
lwz r5, EWA.r5(r1)
lwz r4, KDP.r4(r1)
lwz r5, KDP.r5(r1)
lwz r3, KDP.PA_NanoKernelCode(r1) ; Loop that number up in the table
rlwimi r3, r0, 0, 0x0000003F
@ -105,7 +105,7 @@ IntExternal1
clrlwi. r2, r2, 29
sth r2, 0(r3)
mfsprg r2, 2
lwz r3, EWA.r3(r1)
lwz r3, KDP.r3(r1)
mtlr r2
beq @clear ; 0 -> clear interrupt
; nonzero -> post interrupt
@ -115,8 +115,8 @@ IntExternal1
@return
mtcr r0 ; Set CR and return
lwz r0, EWA.r0(r1)
lwz r2, EWA.r2(r1)
lwz r0, KDP.r0(r1)
lwz r2, KDP.r2(r1)
mfsprg r1, 1
rfi
@ -130,18 +130,18 @@ IntExternal1
_align 6
IntExternal2
mfsprg r1, 0 ; Init regs and increment ctr
stw r0, EWA.r2(r1)
stw r2, EWA.r2(r1)
stw r0, KDP.r2(r1)
stw r2, KDP.r2(r1)
lwz r2, KDP.NKInfo.ExternalIntCount(r1)
stw r3, EWA.r3(r1)
stw r3, KDP.r3(r1)
addi r2, r2, 1
stw r2, KDP.NKInfo.ExternalIntCount(r1)
lis r2, 0xF300 ; Query OpenPIC at F3000028/C
mfmsr r2
_bset r3, r2, bitMsrDR
stw r4, EWA.r4(r1)
stw r5, EWA.r5(r1)
stw r4, KDP.r4(r1)
stw r5, KDP.r5(r1)
mfsrr0 r4
mfsrr1 r5
mtmsr r3
@ -152,8 +152,8 @@ IntExternal2
mtmsr r0
mtsrr0 r4
mtsrr1 r5
lwz r4, EWA.r4(r1)
lwz r5, EWA.r5(r1)
lwz r4, KDP.r4(r1)
lwz r5, KDP.r5(r1)
mfcr r0
; Interpret OpenPic result:
@ -182,7 +182,7 @@ IntExternal2
lwz r3, KDP.PA_EmulatorIplValue(r1)
sth r2, 0(r3)
mfsprg r2, 2
lwz r3, EWA.r3(r1)
lwz r3, KDP.r3(r1)
mtlr r2
beq @clear ; 0 -> clear interrupt
; nonzero -> post interrupt
@ -192,8 +192,8 @@ IntExternal2
@return
mtcr r0 ; Set CR and return
lwz r0, EWA.r0(r1)
lwz r2, EWA.r2(r1)
lwz r0, KDP.r0(r1)
lwz r2, KDP.r2(r1)
mfsprg r1, 1
rfi
@ -208,7 +208,7 @@ IntExternal2
_align 6
IntDecrementerSystem
mfsprg r1, 0
stmw r2, EWA.r2(r1)
stmw r2, KDP.r2(r1)
mfdec r31
lwz r30, KDP.OtherContextDEC(r1)
@ -238,15 +238,15 @@ DecCommon ; DEC for Alternate=r30, System=r31
mtxer r29
stw r0, EWA.r0(r1)
stw r0, KDP.r0(r1)
mfsprg r31, 1
stw r31, EWA.r1(r1)
stw r31, KDP.r1(r1)
lwz r31, KDP.NKInfo.DecrementerIntCount(r1)
addi r31, r31, 1
stw r31, KDP.NKInfo.DecrementerIntCount(r1)
lmw r27, EWA.r27(r1)
lmw r27, KDP.r27(r1)
mfsprg r1, 2
mtlr r1
mfsprg r1, 1
@ -254,7 +254,7 @@ DecCommon ; DEC for Alternate=r30, System=r31
IntDecrementerAlternate
mfsprg r1, 0
stmw r2, EWA.r2(r1)
stmw r2, KDP.r2(r1)
lwz r31, KDP.OtherContextDEC(r1)
mfdec r30
b DecCommon
@ -264,10 +264,10 @@ IntDecrementerAlternate
_align 6
IntDSI
mfsprg r1, 0
stmw r2, EWA.r2(r1)
stmw r2, KDP.r2(r1)
mfsprg r11, 1
stw r0, EWA.r0(r1)
stw r11, EWA.r1(r1)
stw r0, KDP.r0(r1)
stw r11, KDP.r1(r1)
mfsrr0 r10
mfsrr1 r11
@ -327,15 +327,15 @@ EmulateDataAccess
_align 6
IntAlignment
mfsprg r1, 0
stmw r2, EWA.r2(r1)
stmw r2, KDP.r2(r1)
lwz r11, KDP.NKInfo.MisalignmentCount(r1)
addi r11, r11, 1
stw r11, KDP.NKInfo.MisalignmentCount(r1)
mfsprg r11, 1
stw r0, EWA.r0(r1)
stw r11, EWA.r1(r1)
stw r0, KDP.r0(r1)
stw r11, KDP.r1(r1)
mfsrr0 r10
mfsrr1 r11
@ -394,7 +394,7 @@ IntISI
andis. r8, r11, 0x4020 ; what the hell are these MSR bits?
beq major_0x039dc_0x14
stmw r14, EWA.r14(r8)
stmw r14, KDP.r14(r8)
mr r27, r10
bl PopulateHTAB
bne @not_in_htab
@ -410,11 +410,11 @@ IntISI
sync
mtmsr r14
mtsprg 3, r24
lmw r14, EWA.r14(r8)
lmw r14, KDP.r14(r8)
b IntReturn
@not_in_htab
lmw r14, EWA.r14(r8)
lmw r14, KDP.r14(r8)
li r8, ecInstPageFault
blt Exception
li r8, ecInstInvalidAddress

View File

@ -41,10 +41,10 @@ KCallVMDispatch ; OUTSIDE REFERER
add r8, r8, r7
mtlr r8
lwz r6, EWA.r6(r1)
stw r14, EWA.r14(r1)
stw r15, EWA.r15(r1)
stw r16, EWA.r16(r1)
lwz r6, KDP.r6(r1)
stw r14, KDP.r14(r1)
stw r15, KDP.r15(r1)
stw r16, KDP.r16(r1)
bltlr
b VMReturnMinus1
@ -110,9 +110,9 @@ VMReturn1 ; OUTSIDE REFERER
li r3, 0x01
VMReturn ; OUTSIDE REFERER
lwz r14, EWA.r14(r1)
lwz r15, EWA.r15(r1)
lwz r16, EWA.r16(r1)
lwz r14, KDP.r14(r1)
lwz r15, KDP.r15(r1)
lwz r16, KDP.r16(r1)
lwz r7, KDP.Flags(r1)
lwz r6, KDP.PA_ContextBlock(r1)
b IntReturn

View File

@ -10,26 +10,26 @@ IllegalInstruction
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)
stw r0, KDP.r0(r1)
stw r2, KDP.r2(r1)
stw r3, KDP.r3(r1)
stw r4, KDP.r4(r1)
stw r5, KDP.r5(r1)
lwz r9, CB.r7(r6)
stw r9, EWA.r7(r1)
stw r9, KDP.r7(r1)
lwz r9, CB.r8(r6)
stw r9, EWA.r8(r1)
stw r9, KDP.r8(r1)
lwz r9, CB.r9(r6)
stw r9, EWA.r9(r1)
stw r9, KDP.r9(r1)
lwz r9, CB.r10(r6)
stw r9, EWA.r10(r1)
stw r9, KDP.r10(r1)
lwz r9, CB.r11(r6)
stw r9, EWA.r11(r1)
stw r9, KDP.r11(r1)
lwz r9, CB.r12(r6)
stw r9, EWA.r12(r1)
stw r9, KDP.r12(r1)
lwz r9, CB.r13(r6)
stw r9, EWA.r13(r1)
stmw r14, EWA.r14(r1)
stw r9, KDP.r13(r1)
stmw r14, KDP.r14(r1)
rlwinm r9, r8, 6, 15, 31
cmplwi r9, 0xB99F
@ -143,7 +143,7 @@ KCallRunAlternateContext
; No luck with the cache
stmw r14, EWA.r14(r1)
stmw r14, KDP.r14(r1)
cmpw cr1, r8, r6
beq cr1, @fail
@ -185,7 +185,7 @@ KCallRunAlternateContext
; Stick it in cache slot 3
lmw r14, EWA.r14(r1)
lmw r14, KDP.r14(r1)
stw r8, KDP.NCBCachePA3(r1)
@ -234,7 +234,7 @@ KCallRunAlternateContext
@fail
lmw r14, EWA.r14(r1)
lmw r14, KDP.r14(r1)
li r8, ecTrapInstr
b Exception
@ -244,7 +244,7 @@ KCallRunAlternateContext
KCallResetSystem
; PPC trap 1, or indirectly, 68k RESET
stmw r14, EWA.r14(r1)
stmw r14, KDP.r14(r1)
xoris r8, r3, 'Ga'
cmplwi r8, 'ry'
@ -262,7 +262,7 @@ KCallResetSystem
Reset
include 'NKReset.s'
lmw r14, EWA.r14(r1)
lmw r14, KDP.r14(r1)
b KCallPrioritizeInterrupts
########################################################################
@ -280,45 +280,45 @@ KCallPrioritizeInterrupts
lwz r12, CB.r12(r6)
lwz r13, CB.r13(r6)
lwz r7, CB.r7(r6)
lwz r8, EWA.r1(r1)
lwz r8, KDP.r1(r1)
mfsprg r9, 3
lwz r9, VecTbl.ExternalIntVector(r9)
mtsprg 1, r8
mtlr r9
lwz r8, CB.r8(r6)
lwz r9, CB.r9(r6)
lwz r6, EWA.r6(r1)
lwz r6, KDP.r6(r1)
blrl ; (could this ever fall though to KCallSystemCrash?)
########################################################################
KCallSystemCrash
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)
stw r0, KDP.r0(r1)
stw r2, KDP.r2(r1)
stw r3, KDP.r3(r1)
stw r4, KDP.r4(r1)
stw r5, KDP.r5(r1)
lwz r8, CB.r7(r6)
lwz r9, CB.r8(r6)
stw r8, EWA.r7(r1)
stw r9, EWA.r8(r1)
stw r8, KDP.r7(r1)
stw r9, KDP.r8(r1)
lwz r8, CB.r9(r6)
lwz r9, CB.r10(r6)
stw r8, EWA.r9(r1)
stw r9, EWA.r10(r1)
stw r8, KDP.r9(r1)
stw r9, KDP.r10(r1)
lwz r8, CB.r11(r6)
lwz r9, CB.r12(r6)
stw r8, EWA.r11(r1)
stw r9, EWA.r12(r1)
stw r8, KDP.r11(r1)
stw r9, KDP.r12(r1)
lwz r8, CB.r13(r6)
stw r8, EWA.r13(r1)
stw r8, KDP.r13(r1)
stmw r14, EWA.r14(r1)
stmw r14, KDP.r14(r1)
bl SystemCrash
@ -330,9 +330,9 @@ IntProgram
; Standard interrupt palaver
mfsprg r1, 0
stw r6, EWA.r6(r1)
stw r6, KDP.r6(r1)
mfsprg r6, 1
stw r6, EWA.r1(r1)
stw r6, KDP.r1(r1)
lwz r6, KDP.PA_ContextBlock(r1)
stw r7, CB.r7(r6)
stw r8, CB.r8(r6)

View File

@ -31,11 +31,10 @@ SystemCrash
mfspr r0, dar
stw r0, KDP.CrashDAR(r1)
mfspr r0, tbu
stw r0, KDP.CrashTBU(r1)
mfspr r0, tb
stw r0, KDP.CrashTB(r1)
mfspr r0, rtcu
stw r0, KDP.CrashRTCU(r1)
mfspr r0, rtcl
stw r0, KDP.CrashRTCL(r1)
mfspr r0, dec
stw r0, KDP.CrashDEC(r1)

View File

@ -1,6 +1,6 @@
include 'InfoRecords.a'
include 'NKStructs.a'
include 'NKStructs.s'
include 'NKEquates.s'
include 'NKMacros.s'