mirror of
https://github.com/elliotnunn/powermac-rom.git
synced 2024-06-06 17:29:32 +00:00
more
This commit is contained in:
parent
f1b71713d3
commit
7b62fa404d
|
@ -586,7 +586,7 @@ TestIntMaskInit ds.l 1 ; 670 ; These are all copied from ConfigInfo...
|
|||
PostIntMaskInit ds.l 1 ; 674
|
||||
ClearIntMaskInit ds.l 1 ; 678
|
||||
PA_EmulatorIplValue ds.l 1 ; 67c ; Physical ptr into EDP
|
||||
SharedMemoryAddrPlus ds.l 1 ; 680 ; Really not sure
|
||||
DebugIntPtr ds.l 1 ; 680 ; Within (debug?) shared memory
|
||||
PA_PageMapStart ds.l 1 ; 684 ; Physical ptr to PageMap (= KDP+0x920)
|
||||
PageAttributeInit ds.l 1 ; 688 ; defaults for page table entries (see ConfigInfo)
|
||||
|
||||
|
|
4
NanoKernel/NKInit.s
Normal file → Executable file
4
NanoKernel/NKInit.s
Normal file → Executable file
|
@ -196,7 +196,7 @@ InitKernelGlobals
|
|||
|
||||
lwz r12, NKConfigurationInfo.SharedMemoryAddr(rCI)
|
||||
addi r12, r12, 0x7c
|
||||
stw r12, KDP.SharedMemoryAddrPlus(r1)
|
||||
stw r12, KDP.DebugIntPtr(r1)
|
||||
|
||||
lwz r12, NKConfigurationInfo.PageAttributeInit(rCI)
|
||||
stw r12, KDP.PageAttributeInit(r1)
|
||||
|
@ -261,7 +261,7 @@ InitInfoRecords
|
|||
|
||||
########################################################################
|
||||
|
||||
SetProcessorInfo
|
||||
InitProcessorInfo
|
||||
mfpvr r12
|
||||
stw r12, KDP.ProcInfo.ProcessorVersionReg(r1)
|
||||
srwi r12, r12, 16
|
||||
|
|
|
@ -1,5 +1,207 @@
|
|||
; AUTO-GENERATED SYMBOL LIST
|
||||
|
||||
########################################################################
|
||||
|
||||
_align 6
|
||||
IntExternal0
|
||||
mfsprg r1, 0 ; Init regs and increment ctr
|
||||
stw r0, EWA.r2(r1)
|
||||
stw r2, EWA.r2(r1)
|
||||
lwz r2, KDP.NKInfo.ExternalIntCount(r1)
|
||||
stw r3, EWA.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)
|
||||
mfsrr0 r4
|
||||
mfsrr1 r5
|
||||
mtmsr r0
|
||||
stw r3, 0(r3)
|
||||
mtmsr r2
|
||||
mtsrr0 r4
|
||||
mrsrr1 r5
|
||||
lwz r4, EWA.r4(r1)
|
||||
lwz r5, EWA.r5(r1)
|
||||
|
||||
lwz r2, KDP.DebugIntPtr(r1) ; Query the shared mem (debug?) for int num
|
||||
mfcr r0
|
||||
lha r2, 0(r2)
|
||||
lwz r3, KDP.PA_EmulatorIplValue(r1)
|
||||
rlwinm. r2, r2, 0, 0x80000007
|
||||
ori r2, r2, 0x8000
|
||||
sth r2, 0(r3)
|
||||
mfsprg r2, 2
|
||||
lwz r3, EWA.r3(r1)
|
||||
mtlr r2
|
||||
beq @return ; 0 -> no interrupt
|
||||
bgt @clear ; negative -> clear interrupt
|
||||
; positive -> post interrupt
|
||||
|
||||
lwz r2, KDP.PostIntMaskInit(r1) ; Post an interrupt via Cond Reg
|
||||
or r0, r0, r2
|
||||
|
||||
@return
|
||||
mtcr r0 ; Set CR and return
|
||||
lwz r0, EWA.r0(r1)
|
||||
lwz r2, EWA.r2(r1)
|
||||
mfsprg r1, 1
|
||||
rfi
|
||||
|
||||
@clear
|
||||
lwz r2, KDP.ClearIntMaskInit(r1) ; Clear an interrupt via Cond Reg
|
||||
and r0, r0, r2
|
||||
b @return
|
||||
|
||||
########################################################################
|
||||
|
||||
_align 6
|
||||
IntLookupTable
|
||||
dc.l 0, 1, 2, 2, 4, 4, 4, 4
|
||||
dc.l 3, 3, 3, 3, 4, 4, 4, 4
|
||||
dc.l 4, 4, 4, 4, 4, 4, 4, 4
|
||||
dc.l 4, 4, 4, 4, 4, 4, 4, 4
|
||||
dc.l 7, 7, 7, 7, 7, 7, 7, 7
|
||||
dc.l 7, 7, 7, 7, 7, 7, 7, 7
|
||||
dc.l 7, 7, 7, 7, 7, 7, 7, 7
|
||||
dc.l 7, 7, 7, 7, 7, 7, 7, 7
|
||||
|
||||
_align 6
|
||||
IntExternal1
|
||||
mfsprg r1, 0 ; Init regs and increment ctr
|
||||
stw r0, EWA.r2(r1)
|
||||
stw r2, EWA.r2(r1)
|
||||
lwz r2, KDP.NKInfo.ExternalIntCount(r1)
|
||||
stw r3, EWA.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)
|
||||
mfsrr0 r4
|
||||
mfsrr1 r5
|
||||
mtmsr r0
|
||||
li r0, 0xC0
|
||||
stb r0, -0x6000(r2)
|
||||
eieio
|
||||
lbz r0, -0x6000(r2)
|
||||
mtmsr r2
|
||||
mtsrr0 r4
|
||||
mrsrr1 r5
|
||||
lwz r4, EWA.r4(r1)
|
||||
lwz r5, EWA.r5(r1)
|
||||
|
||||
lwz r3, KDP.PA_NanoKernelCode ; Loop that number up in the table
|
||||
rlwimi r3, r0, 0, 0x0000003F
|
||||
lbz r2, IntLookupTable-NKTop(r3)
|
||||
mfcr r0
|
||||
lwz r3, KDP.PA_EmulatorIplValue(r1)
|
||||
clrlwi. r2, r2, 29
|
||||
sth r2, 0(r3)
|
||||
mfsprg r2, 2
|
||||
lwz r3, EWA.r3(r1)
|
||||
mtlr r2
|
||||
beq @clear ; 0 -> clear interrupt
|
||||
; nonzero -> post interrupt
|
||||
|
||||
lwz r2, KDP.PostIntMaskInit(r1) ; Post an interrupt via Cond Reg
|
||||
or r0, r0, r2
|
||||
|
||||
@return
|
||||
mtcr r0 ; Set CR and return
|
||||
lwz r0, EWA.r0(r1)
|
||||
lwz r2, EWA.r2(r1)
|
||||
mfsprg r1, 1
|
||||
rfi
|
||||
|
||||
@clear
|
||||
lwz r2, KDP.ClearIntMaskInit(r1) ; Clear an interrupt via Cond Reg
|
||||
and r0, r0, r2
|
||||
b @return
|
||||
|
||||
########################################################################
|
||||
|
||||
_align 6
|
||||
IntExternal2
|
||||
mfsprg r1, 0 ; Init regs and increment ctr
|
||||
stw r0, EWA.r2(r1)
|
||||
stw r2, EWA.r2(r1)
|
||||
lwz r2, KDP.NKInfo.ExternalIntCount(r1)
|
||||
stw r3, EWA.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)
|
||||
mfsrr0 r4
|
||||
mfsrr1 r5
|
||||
mtmsr r3
|
||||
lis r3, 0x8000
|
||||
stw r3, 0x28(r2)
|
||||
eieio
|
||||
lwz r3, 0x2C(r2)
|
||||
mtmsr r0
|
||||
mtsrr0 r4
|
||||
mrsrr1 r5
|
||||
lwz r4, EWA.r4(r1)
|
||||
lwz r5, EWA.r5(r1)
|
||||
|
||||
mfcr r0
|
||||
; Interpret OpenPic result:
|
||||
rlwinm. r2, r3, 0, 11, 11 ; bit 11 -> 7
|
||||
li r2, 7
|
||||
bne @gotnum
|
||||
|
||||
rlwinm r2, r3, 0, 15, 16 ; bit 15-16/21/31 -> 4
|
||||
rlwimi. r2, r3, 0, 21, 31
|
||||
li r2, 4
|
||||
bne @gotnum
|
||||
|
||||
rlwinm. r2, r3, 0, 18, 18 ; bit 18 -> 3
|
||||
li r2, 3
|
||||
bne @gotnum
|
||||
|
||||
andis. r2, r3, 0x7FEA ; bit 1-10/12/14/19-20 -> 2
|
||||
rlwimi. r2, r3, 0, 19, 20
|
||||
li r2, 2
|
||||
bne @gotnum
|
||||
|
||||
extrwi. r2, r3, 1, 13 ; bit 13 -> 1
|
||||
; else -> 0
|
||||
|
||||
@gotnum
|
||||
lwz r3, KDP.PA_EmulatorIplValue(r1)
|
||||
sth r2, 0(r3)
|
||||
mfsprg r2, 2
|
||||
lwz r3, EWA.r3(r1)
|
||||
mtlr r2
|
||||
beq @clear ; 0 -> clear interrupt
|
||||
; nonzero -> post interrupt
|
||||
|
||||
lwz r2, KDP.PostIntMaskInit(r1) ; Post an interrupt via Cond Reg
|
||||
or r0, r0, r2
|
||||
|
||||
@return
|
||||
mtcr r0 ; Set CR and return
|
||||
lwz r0, EWA.r0(r1)
|
||||
lwz r2, EWA.r2(r1)
|
||||
mfsprg r1, 1
|
||||
rfi
|
||||
|
||||
@clear
|
||||
lwz r2, KDP.ClearIntMaskInit(r1) ; Clear an interrupt via Cond Reg
|
||||
and r0, r0, r2
|
||||
b @return
|
||||
|
||||
########################################################################
|
||||
|
||||
; Increment the Sys/Alt CPU clocks, and the Dec-int counter
|
||||
|
|
|
@ -57,13 +57,13 @@ rAlt set r8
|
|||
lbz r22, NKConfigurationInfo.InterruptHandlerKind(rCI)
|
||||
|
||||
cmpwi r22, 0
|
||||
_kaddr r23, rNK, IntForEmulator_1
|
||||
_kaddr r23, rNK, IntExternal0
|
||||
beq @chosenIntHandler
|
||||
cmpwi r22, 1
|
||||
_kaddr r23, rNK, IntForEmulator_2
|
||||
_kaddr r23, rNK, IntExternal1
|
||||
beq @chosenIntHandler
|
||||
cmpwi r22, 2
|
||||
_kaddr r23, rNK, IntForEmulator_3
|
||||
_kaddr r23, rNK, IntExternal2
|
||||
beq @chosenIntHandler
|
||||
|
||||
@chosenIntHandler
|
||||
|
|
159
NanoKernel/NKSystemCrash.s
Executable file
159
NanoKernel/NKSystemCrash.s
Executable file
|
@ -0,0 +1,159 @@
|
|||
SystemCrash
|
||||
mfsprg0 r1
|
||||
stw r0, KDP.ThudSavedR0(r1)
|
||||
|
||||
mfspr r0, sprg1
|
||||
stw r0, KDP.ThudSavedR1(r1)
|
||||
|
||||
stmw r2, KDP.ThudSavedR2(r1)
|
||||
|
||||
mfspr r0, cr
|
||||
stw r0, KDP.ThudSavedCR(r1)
|
||||
|
||||
mfspr r0, mq
|
||||
stw r0, KDP.ThudSavedMQ(r1)
|
||||
|
||||
mfspr r0, xer
|
||||
stw r0, KDP.ThudSavedXER(r1)
|
||||
|
||||
mfspr r0, sprg2
|
||||
stw r0, KDP.ThudSavedSPRG2(r1)
|
||||
|
||||
mfspr r0, ctr
|
||||
stw r0, KDP.ThudSavedCTR(r1)
|
||||
|
||||
mfspr r0, pvr
|
||||
stw r0, KDP.ThudSavedPVR(r1)
|
||||
|
||||
mfspr r0, dsisr
|
||||
stw r0, KDP.ThudSavedDSISR(r1)
|
||||
mfspr r0, dar
|
||||
stw r0, KDP.ThudSavedDAR(r1)
|
||||
|
||||
mfspr r0, tbu
|
||||
stw r0, KDP.ThudSavedTBU(r1)
|
||||
|
||||
mfspr r0, tb
|
||||
stw r0, KDP.ThudSavedTB(r1)
|
||||
|
||||
mfspr r0, dec
|
||||
stw r0, KDP.ThudSavedDEC(r1)
|
||||
|
||||
mfspr r0, hid0
|
||||
stw r0, KDP.ThudSavedHID0(r1)
|
||||
|
||||
mfspr r0, sdr1
|
||||
stw r0, KDP.ThudSavedSDR(r1)
|
||||
|
||||
mfspr r0, srr0
|
||||
stw r0, KDP.ThudSavedSRR0(r1)
|
||||
mfspr r0, srr1
|
||||
stw r0, KDP.ThudSavedSRR(r1)
|
||||
mfspr r0, msr
|
||||
stw r0, KDP.ThudSavedMSR(r1)
|
||||
|
||||
mfsr r0, 0
|
||||
stw r0, KDP.ThudSavedSR0(r1)
|
||||
mfsr r0, 1
|
||||
stw r0, KDP.ThudSavedSR1(r1)
|
||||
mfsr r0, 2
|
||||
stw r0, KDP.ThudSavedSR2(r1)
|
||||
mfsr r0, 3
|
||||
stw r0, KDP.ThudSavedSR3(r1)
|
||||
mfsr r0, 4
|
||||
stw r0, KDP.ThudSavedSR4(r1)
|
||||
mfsr r0, 5
|
||||
stw r0, KDP.ThudSavedSR5(r1)
|
||||
mfsr r0, 6
|
||||
stw r0, KDP.ThudSavedSR6(r1)
|
||||
mfsr r0, 7
|
||||
stw r0, KDP.ThudSavedSR7(r1)
|
||||
mfsr r0, 8
|
||||
stw r0, KDP.ThudSavedSR8(r1)
|
||||
mfsr r0, 9
|
||||
stw r0, KDP.ThudSavedSR9(r1)
|
||||
mfsr r0, 10
|
||||
stw r0, KDP.ThudSavedSR10(r1)
|
||||
mfsr r0, 11
|
||||
stw r0, KDP.ThudSavedSR11(r1)
|
||||
mfsr r0, 12
|
||||
stw r0, KDP.ThudSavedSR12(r1)
|
||||
mfsr r0, 13
|
||||
stw r0, KDP.ThudSavedSR13(r1)
|
||||
mfsr r0, 14
|
||||
stw r0, KDP.ThudSavedSR14(r1)
|
||||
mfsr r0, 15
|
||||
stw r0, KDP.ThudSavedSR15(r1)
|
||||
|
||||
mfspr r0, msr
|
||||
ori r0, r0, 0x2000
|
||||
mtmsr r0
|
||||
stfd f0, KDP.ThudSavedF0(r1)
|
||||
stfd f1, KDP.ThudSavedF1(r1)
|
||||
stfd f2, KDP.ThudSavedF2(r1)
|
||||
stfd f3, KDP.ThudSavedF3(r1)
|
||||
stfd f4, KDP.ThudSavedF4(r1)
|
||||
stfd f5, KDP.ThudSavedF5(r1)
|
||||
stfd f6, KDP.ThudSavedF6(r1)
|
||||
stfd f7, KDP.ThudSavedF7(r1)
|
||||
stfd f8, KDP.ThudSavedF8(r1)
|
||||
stfd f9, KDP.ThudSavedF9(r1)
|
||||
stfd f10, KDP.ThudSavedF10(r1)
|
||||
stfd f11, KDP.ThudSavedF11(r1)
|
||||
stfd f12, KDP.ThudSavedF12(r1)
|
||||
stfd f13, KDP.ThudSavedF13(r1)
|
||||
stfd f14, KDP.ThudSavedF14(r1)
|
||||
stfd f15, KDP.ThudSavedF15(r1)
|
||||
stfd f16, KDP.ThudSavedF16(r1)
|
||||
stfd f17, KDP.ThudSavedF17(r1)
|
||||
stfd f18, KDP.ThudSavedF18(r1)
|
||||
stfd f19, KDP.ThudSavedF19(r1)
|
||||
stfd f20, KDP.ThudSavedF20(r1)
|
||||
stfd f21, KDP.ThudSavedF21(r1)
|
||||
stfd f22, KDP.ThudSavedF22(r1)
|
||||
stfd f23, KDP.ThudSavedF23(r1)
|
||||
stfd f24, KDP.ThudSavedF24(r1)
|
||||
stfd f25, KDP.ThudSavedF25(r1)
|
||||
stfd f26, KDP.ThudSavedF26(r1)
|
||||
stfd f27, KDP.ThudSavedF27(r1)
|
||||
stfd f28, KDP.ThudSavedF28(r1)
|
||||
stfd f29, KDP.ThudSavedF29(r1)
|
||||
stfd f30, KDP.ThudSavedF30(r1)
|
||||
stfd f31, KDP.ThudSavedF31(r1)
|
||||
mffs f31
|
||||
lwz r0, KDP.ThudSavedF31+4(r1)
|
||||
stfd f31, KDP.ThudSavedF31+4(r1)
|
||||
stw r0, KDP.ThudSavedF31+4(r1)
|
||||
|
||||
mfspr r0, lr
|
||||
stw r0, KDP.ThudSavedLR(r1)
|
||||
|
||||
########################################################################
|
||||
|
||||
lis r2, 2 ; Count down from 64k to find a zero
|
||||
@nonzero
|
||||
lwzu r0, -4(r2)
|
||||
mr. r2, r2
|
||||
bne @nonzero
|
||||
|
||||
@retryrtc ; Save RTC in "Mac/Smurf shared message mem"
|
||||
mfrtcu r2
|
||||
mfrtcl r3
|
||||
mfrtcu r0
|
||||
xor. r0, r0, r2
|
||||
bne @retryrtc
|
||||
lwz r1, KDP.SharedMemoryAddr(r1)
|
||||
stw r2, 0(r1)
|
||||
ori r3, r3, 1
|
||||
stw r3, 4(r1)
|
||||
|
||||
dcbf 0, r1
|
||||
sync
|
||||
|
||||
@loopforever
|
||||
lwz r1, 0(0)
|
||||
addi r1, r1, 1
|
||||
stw r1, 0(0)
|
||||
li r1, 0
|
||||
dcbst r1, r1
|
||||
b @loopforever
|
|
@ -20,34 +20,8 @@ MemRetryDSI
|
|||
MemRetryMachineCheck
|
||||
|
||||
NKTop
|
||||
b VMPanic
|
||||
|
||||
|
||||
|
||||
org 0x0
|
||||
Entry
|
||||
org 0xA4
|
||||
bankLoop
|
||||
org 0xC8
|
||||
FloatTables
|
||||
org 0x308
|
||||
ProcessorInfoTbl
|
||||
org 0x374
|
||||
FiguredOutProcessor
|
||||
org 0x468
|
||||
Thud
|
||||
Panic
|
||||
VMPanic
|
||||
org 0x680
|
||||
IntForEmulator_1
|
||||
org 0x740
|
||||
PDM68kInterruptTable
|
||||
org 0x780
|
||||
IntForEmulator_2
|
||||
org 0x840
|
||||
IntForEmulator_3
|
||||
org 0x940
|
||||
|
||||
include 'NKInit.s'
|
||||
include 'NKSystemCrash.s'
|
||||
include 'NKIntHandlers.s'
|
||||
include 'NKMemory.s'
|
||||
include 'NKExceptions.s'
|
||||
|
|
Loading…
Reference in New Issue
Block a user