nearly perfect except fdp

This commit is contained in:
Elliot Nunn 2018-07-15 19:59:56 +08:00
parent 062a081398
commit 90b71fe94e
6 changed files with 29 additions and 31 deletions

View File

@ -14,7 +14,7 @@ shift&name equ 31 - &bit
kNanoKernelVersion equ $0228
kNanoKernelVersion equ $0101
; PowerPC Machine Status Register (MSR) bits

View File

@ -57,7 +57,7 @@ InitKernelMemory
lwz r15, NKSystemInfo.PhysicalMemorySize(rSI) ; Size the HTAB for 2 entries per page
subi r15, r15, 1
cntlzw r12, r15
lis r14, 0x01ff ; r14 = size-1
lis r14, 0x00ff ; r14 = size-1
srw r14, r14, r12
ori r14, r14, 0xffff ; Obey architecture min and max size
clrlwi r14, r14, 9
@ -146,7 +146,7 @@ InitKernelGlobals
stw rCI, KDP.ConfigInfoPtr(r1)
addi r12, r14, 1
stw r12, KDP.SysInfo.HashTableSize(r11)
stw r12, KDP.SysInfo.HashTableSize(r1)
addi rED, r1, 0x1000
stw rED, KDP.EDPPtr(r1)
@ -210,7 +210,7 @@ InitKernelGlobals
########################################################################
InitInfoRecords
lwz r11, NKConfigurationInfo.LA_KernelData(rCI)
lwz r11, NKConfigurationInfo.LA_InfoRecord(rCI)
addi r12, r11, 0xFC0
stw r12, 0xFC0(r1)
@ -224,39 +224,39 @@ InitInfoRecords
stw r12, 0xFD0(r1)
stw r0, 0xFD4(r1)
addi r12, r11, NKProcessorInfoPtr & 0xFFF
addi r12, r11, KDP.ProcInfo
stw r12, NKProcessorInfoPtr & 0xFFF(r1)
li r12, 0x100
sth r12, NKProcessorInfoVer & 0xFFF(r1)
li r12, 64
li r12, NKProcessorInfo.Size
sth r12, NKProcessorInfoLen & 0xFFF(r1)
addi r12, r11, NKNanoKernelInfoPtr & 0xFFF
addi r12, r11, KDP.NKInfo
stw r12, NKNanoKernelInfoPtr & 0xFFF(r1)
li r12, kNanoKernelVersion
sth r12, NKNanoKernelInfoVer & 0xFFF(r1)
li r12, 256
li r12, NKNanoKernelInfo.Size
sth r12, NKNanoKernelInfoLen & 0xFFF(r1)
addi r12, r11, NKDiagInfoPtr & 0xFFF
addi r12, r11, KDP.DiagInfo
stw r12, NKDiagInfoPtr & 0xFFF(r1)
li r12, 0x100
sth r12, NKDiagInfoVer & 0xFFF(r1)
li r12, 256
li r12, NKDiagInfo.Size
sth r12, NKDiagInfoLen & 0xFFF(r1)
addi r12, r11, NKSystemInfoPtr & 0xFFF
addi r12, r11, KDP.SysInfo
stw r12, NKSystemInfoPtr & 0xFFF(r1)
li r12, 0x102
sth r12, NKSystemInfoVer & 0xFFF(r1)
li r12, 160
li r12, NKSystemInfo.Size
sth r12, NKSystemInfoLen & 0xFFF(r1)
addi r12, r11, NKProcessorInfoPtr & 0xFFF
addi r12, r11, KDP.ProcInfo
stw r12, 0xFF8(r1)
li r12, 0x100
sth r12, 0xFFC(r1)
li r12, 64
li r12, NKProcessorInfo.Size
sth r12, 0xFFE(r1)
########################################################################
@ -270,7 +270,7 @@ InitProcessorInfo
li r9, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr
cmpwi r12, 1 ; 601
addi r11, r11, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr
_kaddr r11, r11, ProcessorInfoTable
beq CopyProcessorInfo
cmpwi r12, 3 ; 603

View File

@ -5,7 +5,7 @@
_align 6
IntExternal0
mfsprg r1, 0 ; Init regs and increment ctr
stw r0, KDP.r2(r1)
stw r0, KDP.r0(r1)
stw r2, KDP.r2(r1)
lwz r2, KDP.NKInfo.ExternalIntCount(r1)
stw r3, KDP.r3(r1)
@ -37,8 +37,8 @@ IntExternal0
mfsprg r2, 2
lwz r3, KDP.r3(r1)
mtlr r2
beq @return ; 0 -> no interrupt
bgt @clear ; negative -> clear interrupt
beq @clear ; 0 -> clear interrupt
bgt @return ; negative -> no interrupt flag
; positive -> post interrupt
lwz r2, KDP.PostIntMaskInit(r1) ; Post an interrupt via Cond Reg
@ -72,7 +72,7 @@ IntLookupTable
_align 6
IntExternal1
mfsprg r1, 0 ; Init regs and increment ctr
stw r0, KDP.r2(r1)
stw r0, KDP.r0(r1)
stw r2, KDP.r2(r1)
lwz r2, KDP.NKInfo.ExternalIntCount(r1)
stw r3, KDP.r3(r1)
@ -80,8 +80,8 @@ IntExternal1
stw r2, KDP.NKInfo.ExternalIntCount(r1)
lis r2, 0x50F3 ; Query OpenPIC at 50F2A000
mfmsr r2
_bset r0, r2, bitMsrDR
mfmsr r3
_bset r0, r3, bitMsrDR
stw r4, KDP.r4(r1)
stw r5, KDP.r5(r1)
mfsrr0 r4
@ -91,7 +91,7 @@ IntExternal1
stb r0, -0x6000(r2)
eieio
lbz r0, -0x6000(r2)
mtmsr r2
mtmsr r3
mtsrr0 r4
mtsrr1 r5
lwz r4, KDP.r4(r1)
@ -130,7 +130,7 @@ IntExternal1
_align 6
IntExternal2
mfsprg r1, 0 ; Init regs and increment ctr
stw r0, KDP.r2(r1)
stw r0, KDP.r0(r1)
stw r2, KDP.r2(r1)
lwz r2, KDP.NKInfo.ExternalIntCount(r1)
stw r3, KDP.r3(r1)
@ -138,8 +138,8 @@ IntExternal2
stw r2, KDP.NKInfo.ExternalIntCount(r1)
lis r2, 0xF300 ; Query OpenPIC at F3000028/C
mfmsr r2
_bset r3, r2, bitMsrDR
mfmsr r0
_bset r3, r0, bitMsrDR
stw r4, KDP.r4(r1)
stw r5, KDP.r5(r1)
mfsrr0 r4
@ -410,11 +410,11 @@ IntISI
sync
mtmsr r14
mtsprg 3, r24
lmw r14, KDP.r14(r8)
lmw r14, KDP.r14(r1)
b IntReturn
@not_in_htab
lmw r14, KDP.r14(r8)
lmw r14, KDP.r14(r1)
li r8, ecInstPageFault
blt Exception
li r8, ecInstInvalidAddress

View File

@ -5,7 +5,7 @@
PopulateHTAB ; LogicalAddress r28 // Success cr0.eq
lwz r29, KDP.CurrentMemLayout.SegMapPtr(r1)
rlwinm r28, r27, 7, 0x0000000F << 2 ; convert segment of passed ptr to offset into SegMap
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
lhz r30, PME.LBase(r29)

View File

@ -109,7 +109,7 @@ BatMap ds.l 1 ; packed array of 4-bit indices into BATs
########################################################################
KDP RECORD 0x80, INCR ; Kernel Data Page
KDP RECORD 0, INCR ; Kernel Data Page
r0 ds.l 1 ; 000 ; used for quick register saves at interrupt time
r1 ds.l 1 ; 004
r2 ds.l 1 ; 008

View File

@ -5,8 +5,6 @@
include 'NKMacros.s'
NKTop
b SystemCrash
org 0
include 'NKInit.s'
include 'NKSystemCrash.s'
include 'NKIntHandlers.s'