mirror of
https://github.com/elliotnunn/powermac-rom.git
synced 2025-02-06 12:30:17 +00:00
Work on the scheduler and interrupt handling code
This commit is contained in:
parent
f1df639613
commit
123c1e4bee
@ -88,7 +88,7 @@ MSR ds.l 1 ; 0a4 ; (SPAC) copied from kdp by CreateTask
|
|||||||
org 0xc4
|
org 0xc4
|
||||||
MQ ds.l 1 ; 0c4 ; 601 only
|
MQ ds.l 1 ; 0c4 ; 601 only
|
||||||
EDPOffsetSWIRelated ds.l 1 ; 0c8
|
EDPOffsetSWIRelated ds.l 1 ; 0c8
|
||||||
PriorityShifty ds.l 1 ; 0cc ; if low nybble is empty, InitRDYQs sets this to 2
|
PriorityShifty ds.l 1 ; 0cc ; if low nybble is empty, SchInit sets this to 2
|
||||||
SWIEventGroupID ds.l 1 ; 0d0 ; what?
|
SWIEventGroupID ds.l 1 ; 0d0 ; what?
|
||||||
XER ds.l 1 ; 0d4
|
XER ds.l 1 ; 0d4
|
||||||
VectorSaveArea ds.l 1 ; 0d8 ; AltiVec hack: vector registers don't fit in CB!
|
VectorSaveArea ds.l 1 ; 0d8 ; AltiVec hack: vector registers don't fit in CB!
|
||||||
|
@ -328,7 +328,7 @@ VMDispatchCountTblPtr ds.l 1 ; 128, kdp+ee8
|
|||||||
ds.l 1
|
ds.l 1
|
||||||
ds.l 1
|
ds.l 1
|
||||||
MPDispatchCountTblPtr ds.l 1 ; 134, kdp+ef4 ; ???????
|
MPDispatchCountTblPtr ds.l 1 ; 134, kdp+ef4 ; ???????
|
||||||
AddrSpcSetCtr ds.l 1 ; 138, kdp+ef8 ; incremented by SetSpaceSRsAndBATs
|
AddrSpcSetCtr ds.l 1 ; 138, kdp+ef8 ; incremented by SchSwitchSpace
|
||||||
IDCtr ds.l 1 ; 13c, kdp+efc
|
IDCtr ds.l 1 ; 13c, kdp+efc
|
||||||
|
|
||||||
org 0x160
|
org 0x160
|
||||||
@ -399,9 +399,7 @@ ProcessorFlags ds.l 1 ; 048, kdp+f68 ; flags to specify processor features
|
|||||||
|
|
||||||
org 0x05e
|
org 0x05e
|
||||||
SetToZero ds.w 1 ; 05e, kdp+f7e ; by same code that sets below
|
SetToZero ds.w 1 ; 05e, kdp+f7e ; by same code that sets below
|
||||||
CpuClockRateHzCopy ds.l 1 ; 060, kdp+f80 ; copies by Init.s
|
ClockRates ds.b 16*4 ; 060:0a0, kdp:f80:fc0 ; 16b blks of cpu/bus/dec/?? speeds (Hz)
|
||||||
BusClockRateHzCopy ds.l 1 ; 064, kdp+f84 ; copies by Init.s
|
|
||||||
DecClockRateHzCopy ds.l 1 ; 068, kdp+f88 ; copies by Init.s
|
|
||||||
|
|
||||||
endr
|
endr
|
||||||
|
|
||||||
|
@ -139,13 +139,13 @@ kFlag17 equ 17
|
|||||||
kFlag18 equ 18
|
kFlag18 equ 18
|
||||||
kFlag19 equ 19
|
kFlag19 equ 19
|
||||||
kFlag20 equ 20
|
kFlag20 equ 20
|
||||||
kFlag21 equ 21
|
kFlagPMF equ 21 ; set by MPMarkPMFTask, means perf monitor
|
||||||
kFlag22 equ 22
|
kFlag22 equ 22
|
||||||
kFlag23 equ 23
|
kFlag23 equ 23
|
||||||
kFlag24 equ 24
|
kFlag24 equ 24
|
||||||
kFlag25 equ 25 ; set for idle1, idle2
|
kFlag25 equ 25 ; set for idle1, idle2
|
||||||
kFlag26 equ 26 ; set for blue
|
kFlag26 equ 26 ; set for blue
|
||||||
kFlag27 equ 27 ; set on SWI
|
kFlag68kInterrupt equ 27 ; set on SWI (meaning 68k, or 68k interrupt?)
|
||||||
kFlag28 equ 28 ; set for blue
|
kFlag28 equ 28 ; set for blue
|
||||||
kFlag29 equ 29
|
kFlag29 equ 29
|
||||||
kFlag30 equ 30
|
kFlag30 equ 30
|
||||||
@ -164,11 +164,7 @@ VectorSaveArea ds.l 1 ; 08c
|
|||||||
ds.l 1 ; 094
|
ds.l 1 ; 094
|
||||||
ds.l 1 ; 098
|
ds.l 1 ; 098
|
||||||
NotificationPtr ds.l 1 ; 09c
|
NotificationPtr ds.l 1 ; 09c
|
||||||
SemaphoreLLL ds.l 4 ; 0a0:0b0
|
Semaphore ds.b 32 ; 0a0:0c0 ; Zero and One were fields
|
||||||
Zero ds.l 1 ; 0b0
|
|
||||||
One ds.l 1 ; 0b4
|
|
||||||
ds.l 1 ; 0b8
|
|
||||||
ds.l 1 ; 0bc
|
|
||||||
Zero1 ds.l 1 ; 0c0
|
Zero1 ds.l 1 ; 0c0
|
||||||
Zero2 ds.l 1 ; 0c4
|
Zero2 ds.l 1 ; 0c4
|
||||||
CreateTime1 ds.d 1 ; 0c8
|
CreateTime1 ds.d 1 ; 0c8
|
||||||
@ -178,7 +174,7 @@ CreateTime2 ds.d 1 ; 0d0
|
|||||||
Zero3 ds.l 1 ; 0e0
|
Zero3 ds.l 1 ; 0e0
|
||||||
Zero4 ds.l 1 ; 0e4
|
Zero4 ds.l 1 ; 0e4
|
||||||
Zero5 ds.l 1 ; 0e8
|
Zero5 ds.l 1 ; 0e8
|
||||||
ds.l 1 ; 0ec
|
SomeLabelField ds.l 1 ; 0ec
|
||||||
YellowVecTblPtr ds.l 1 ; 0f0
|
YellowVecTblPtr ds.l 1 ; 0f0
|
||||||
ExceptionHandlerID ds.l 1 ; 0f4 ; a queue
|
ExceptionHandlerID ds.l 1 ; 0f4 ; a queue
|
||||||
ErrToReturnIfIDie ds.l 1 ; 0f8
|
ErrToReturnIfIDie ds.l 1 ; 0f8
|
||||||
@ -275,7 +271,7 @@ Size equ *
|
|||||||
ReadyQueue record 0,INCR
|
ReadyQueue record 0,INCR
|
||||||
|
|
||||||
LLL ds.l 4 ; 00:10 ; nothing fancy, freeform contains priority flag
|
LLL ds.l 4 ; 00:10 ; nothing fancy, freeform contains priority flag
|
||||||
Counter ds.l 1 ; 10 ; InitRDYQs sets, TaskReadyAsNext bumps, major_0x13e4c decs
|
Counter ds.l 1 ; 10 ; SchInit sets, SchRdyTaskLater bumps, major_0x13e4c decs
|
||||||
TotalWeight ds.l 1 ; 14 ; divide available time by these
|
TotalWeight ds.l 1 ; 14 ; divide available time by these
|
||||||
Timecake ds.d 1 ; 18 ; period of ~1ms, 8ms, 64ms, 512ms
|
Timecake ds.d 1 ; 18 ; period of ~1ms, 8ms, 64ms, 512ms
|
||||||
|
|
||||||
@ -386,12 +382,46 @@ kSignature equ 'CPU '
|
|||||||
ID ds.l 1 ; 00
|
ID ds.l 1 ; 00
|
||||||
Signature ds.l 1 ; 04
|
Signature ds.l 1 ; 04
|
||||||
LLL ds.l 4 ; 08:18 ; member of CGRP
|
LLL ds.l 4 ; 08:18 ; member of CGRP
|
||||||
Eff ds.l 1 ; 18 ; contains 0x0000000f ; cannot delete if this field & 9
|
Flags ds.l 1 ; 18 ; contains 0x0000000f ; cannot delete if this field & 9
|
||||||
IdleTaskPtr ds.l 1 ; 1c
|
IdleTaskPtr ds.l 1 ; 1c
|
||||||
|
|
||||||
EWABase ds.b 800 ; negative-indexed parts of EWA
|
EWABase ds.b 800 ; negative-indexed parts of EWA
|
||||||
EWA ds.b 128 ; positive-indexed parts of EWA
|
EWA ds.b 128 ; positive-indexed parts of EWA
|
||||||
|
|
||||||
|
kFlag0 equ 0
|
||||||
|
kFlag1 equ 1
|
||||||
|
kFlag2 equ 2
|
||||||
|
kFlag3 equ 3
|
||||||
|
kFlag4 equ 4
|
||||||
|
kFlag5 equ 5
|
||||||
|
kFlag6 equ 6
|
||||||
|
kFlag7 equ 7
|
||||||
|
kFlag8 equ 8
|
||||||
|
kFlag9 equ 9
|
||||||
|
kFlag10 equ 10
|
||||||
|
kFlag11 equ 11
|
||||||
|
kFlag12 equ 12
|
||||||
|
kFlag13 equ 13
|
||||||
|
kFlag14 equ 14
|
||||||
|
kFlag15 equ 15
|
||||||
|
kFlag16 equ 16
|
||||||
|
kFlag17 equ 17
|
||||||
|
kFlag18 equ 18
|
||||||
|
kFlag19 equ 19
|
||||||
|
kFlag20 equ 20
|
||||||
|
kFlag21 equ 21
|
||||||
|
kFlag22 equ 22
|
||||||
|
kFlag23 equ 23
|
||||||
|
kFlag24 equ 24
|
||||||
|
kFlag25 equ 25
|
||||||
|
kFlag26 equ 26
|
||||||
|
kFlag27 equ 27
|
||||||
|
kFlagScheduled equ 28
|
||||||
|
kFlag29 equ 29
|
||||||
|
kFlag30 equ 30
|
||||||
|
kFlag31 equ 31
|
||||||
|
|
||||||
|
|
||||||
Size equ *
|
Size equ *
|
||||||
endr
|
endr
|
||||||
|
|
||||||
@ -555,7 +585,7 @@ LogicalBase ds.l 1 ; 24
|
|||||||
LogicalEnd ds.l 1 ; 28 ; the last valid address in the area
|
LogicalEnd ds.l 1 ; 28 ; the last valid address in the area
|
||||||
Length ds.l 1 ; 2c ; in actual bytes!
|
Length ds.l 1 ; 2c ; in actual bytes!
|
||||||
LogicalSeparation ds.l 1 ; 30 ; min logical distance to any other area
|
LogicalSeparation ds.l 1 ; 30 ; min logical distance to any other area
|
||||||
ds.l 1 ; 34
|
Counter ds.l 1 ; 34
|
||||||
BytesMapped ds.l 1 ; 38 ; total size of pages actually mapped to me
|
BytesMapped ds.l 1 ; 38 ; total size of pages actually mapped to me
|
||||||
FaultCtrArrayPtr ds.l 1 ; 3c ; in paged areas, tracks how many times pages are added to HTAB
|
FaultCtrArrayPtr ds.l 1 ; 3c ; in paged areas, tracks how many times pages are added to HTAB
|
||||||
PageMapArrayPtr ds.l 1 ; 40 ; in paged areas, stores PTE template for each page
|
PageMapArrayPtr ds.l 1 ; 40 ; in paged areas, stores PTE template for each page
|
||||||
|
@ -396,7 +396,7 @@ SIGPCallR10 ds.l 1 ; -21c, cpu+124
|
|||||||
SchEvalFlag ds.b 1 ; -118, cpu+228
|
SchEvalFlag ds.b 1 ; -118, cpu+228
|
||||||
TaskPriority ds.b 1 ; -117, cpu+229
|
TaskPriority ds.b 1 ; -117, cpu+229
|
||||||
CPUIndex ds.w 1 ; -116, cpu+22a
|
CPUIndex ds.w 1 ; -116, cpu+22a
|
||||||
ds.l 1 ; -114, cpu+22c
|
WeMightClear ds.l 1 ; -114, cpu+22c ; still boots if not cleared
|
||||||
ds.l 1 ; -110, cpu+230
|
ds.l 1 ; -110, cpu+230
|
||||||
ds.l 1 ; -10c, cpu+234
|
ds.l 1 ; -10c, cpu+234
|
||||||
ds.l 1 ; -108, cpu+238
|
ds.l 1 ; -108, cpu+238
|
||||||
@ -408,7 +408,7 @@ CPUIndex ds.w 1 ; -116, cpu+22a
|
|||||||
ds.l 1 ; -0f0, cpu+250
|
ds.l 1 ; -0f0, cpu+250
|
||||||
ds.l 1 ; -0ec, cpu+254
|
ds.l 1 ; -0ec, cpu+254
|
||||||
ds.l 1 ; -0e8, cpu+258
|
ds.l 1 ; -0e8, cpu+258
|
||||||
ds.l 1 ; -0e4, cpu+25c
|
SpecialAreaPtr ds.l 1 ; -0e4, cpu+25c
|
||||||
ds.l 1 ; -0e0, cpu+260
|
ds.l 1 ; -0e0, cpu+260
|
||||||
ds.l 1 ; -0dc, cpu+264
|
ds.l 1 ; -0dc, cpu+264
|
||||||
ds.l 1 ; -0d8, cpu+268
|
ds.l 1 ; -0d8, cpu+268
|
||||||
@ -504,6 +504,39 @@ r31 ds.l 1 ; 07c, cpu+3bc
|
|||||||
; Fun fact: offsets past here contain the main kernel globals
|
; Fun fact: offsets past here contain the main kernel globals
|
||||||
; ("Kernel Data Page"), but only on CPU-0.
|
; ("Kernel Data Page"), but only on CPU-0.
|
||||||
|
|
||||||
|
kFlag0 equ 0
|
||||||
|
kFlag1 equ 1
|
||||||
|
kFlag2 equ 2
|
||||||
|
kFlag3 equ 3
|
||||||
|
kFlag4 equ 4
|
||||||
|
kFlag5 equ 5
|
||||||
|
kFlag6 equ 6
|
||||||
|
kFlag7 equ 7
|
||||||
|
kFlag8 equ 8
|
||||||
|
kFlag9 equ 9
|
||||||
|
kFlagBlue equ 10 ; could mean "currently in interrupt mode"
|
||||||
|
kFlag11 equ 11
|
||||||
|
kFlag12 equ 12
|
||||||
|
kFlag13 equ 13
|
||||||
|
kFlag14 equ 14
|
||||||
|
kFlag15 equ 15
|
||||||
|
kFlag16 equ 16
|
||||||
|
kFlag17 equ 17
|
||||||
|
kFlag18 equ 18
|
||||||
|
kFlag19 equ 19
|
||||||
|
kFlag20 equ 20
|
||||||
|
kFlag21 equ 21
|
||||||
|
kFlag22 equ 22
|
||||||
|
kFlag23 equ 23
|
||||||
|
kFlag24 equ 24
|
||||||
|
kFlag25 equ 25
|
||||||
|
kFlag26 equ 26
|
||||||
|
kFlag27 equ 27
|
||||||
|
kFlag28 equ 28
|
||||||
|
kFlag29 equ 29
|
||||||
|
kFlag30 equ 30
|
||||||
|
kFlag31 equ 31
|
||||||
|
|
||||||
endr
|
endr
|
||||||
|
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
; major_0x12b94
|
; major_0x12b94
|
||||||
; InitTMRQs
|
; InitTMRQs
|
||||||
; StartTimeslicing
|
; StartTimeslicing
|
||||||
; InitRDYQs
|
; SchInit
|
||||||
; major_0x14bcc
|
; major_0x14bcc
|
||||||
; panic
|
; panic
|
||||||
; major_0x18040
|
; major_0x18040
|
||||||
@ -360,7 +360,7 @@ printd_0x120
|
|||||||
; createarea
|
; createarea
|
||||||
; ExtendPool
|
; ExtendPool
|
||||||
; major_0x12b94
|
; major_0x12b94
|
||||||
; InitRDYQs
|
; SchInit
|
||||||
; major_0x14bcc
|
; major_0x14bcc
|
||||||
; panic
|
; panic
|
||||||
; print_xpt_info
|
; print_xpt_info
|
||||||
|
@ -175,13 +175,13 @@ FinishInitBuiltin
|
|||||||
; Copy some choice values out of KDP's copy of NKProcessorInfo
|
; Copy some choice values out of KDP's copy of NKProcessorInfo
|
||||||
|
|
||||||
lwz r9, KDP.ProcessorInfo + NKProcessorInfo.DecClockRateHz(r1)
|
lwz r9, KDP.ProcessorInfo + NKProcessorInfo.DecClockRateHz(r1)
|
||||||
stw r9, KDP.ProcessorInfo + NKProcessorInfo.DecClockRateHzCopy(r1)
|
stw r9, KDP.ProcessorInfo + NKProcessorInfo.ClockRates + 8(r1)
|
||||||
|
|
||||||
lwz r9, KDP.ProcessorInfo + NKProcessorInfo.BusClockRateHz(r1)
|
lwz r9, KDP.ProcessorInfo + NKProcessorInfo.BusClockRateHz(r1)
|
||||||
stw r9, KDP.ProcessorInfo + NKProcessorInfo.BusClockRateHzCopy(r1)
|
stw r9, KDP.ProcessorInfo + NKProcessorInfo.ClockRates + 4(r1)
|
||||||
|
|
||||||
lwz r9, KDP.ProcessorInfo + NKProcessorInfo.CpuClockRateHz(r1)
|
lwz r9, KDP.ProcessorInfo + NKProcessorInfo.CpuClockRateHz(r1)
|
||||||
stw r9, KDP.ProcessorInfo + NKProcessorInfo.CpuClockRateHzCopy(r1)
|
stw r9, KDP.ProcessorInfo + NKProcessorInfo.ClockRates + 0(r1)
|
||||||
|
|
||||||
li r9, 0
|
li r9, 0
|
||||||
sth r9, KDP.ProcessorInfo + NKProcessorInfo.SetToZero(r1)
|
sth r9, KDP.ProcessorInfo + NKProcessorInfo.SetToZero(r1)
|
||||||
@ -873,7 +873,7 @@ SetProcessorFlags
|
|||||||
|
|
||||||
; Actually populate something useful (still have one unused long)
|
; Actually populate something useful (still have one unused long)
|
||||||
lisori r8, 15
|
lisori r8, 15
|
||||||
stw r8, CPU.Eff(r31)
|
stw r8, CPU.Flags(r31)
|
||||||
|
|
||||||
; Matches code in KCCreateCpuStruct very closely
|
; Matches code in KCCreateCpuStruct very closely
|
||||||
|
|
||||||
@ -1094,7 +1094,7 @@ SetProcessorFlags
|
|||||||
|
|
||||||
; One ready for each task priority (critical, etc)
|
; One ready for each task priority (critical, etc)
|
||||||
|
|
||||||
bl InitRDYQs
|
bl SchInit
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -1102,7 +1102,7 @@ SetProcessorFlags
|
|||||||
|
|
||||||
lwz r8, EWA.PA_CurAddressSpace(r1)
|
lwz r8, EWA.PA_CurAddressSpace(r1)
|
||||||
li r9, 0
|
li r9, 0
|
||||||
bl SetSpaceSRsAndBATs
|
bl SchSwitchSpace
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -1192,14 +1192,14 @@ SetProcessorFlags
|
|||||||
; CLOB r16, r17, r18
|
; CLOB r16, r17, r18
|
||||||
|
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bl TaskReadyAsPrev
|
bl SchRdyTaskNow
|
||||||
|
|
||||||
bl CalculateTimeslice
|
bl CalculateTimeslice
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; Do some things I do not understand
|
; Do some things I do not understand
|
||||||
bl major_0x14af8_0xa0
|
bl FlagSchEval
|
||||||
bl StartTimeslicing
|
bl StartTimeslicing
|
||||||
|
|
||||||
|
|
||||||
@ -1255,7 +1255,7 @@ av set PSA.AVFeatureBit
|
|||||||
|
|
||||||
; Point task ECB at the idle loop within the nanokernel code
|
; Point task ECB at the idle loop within the nanokernel code
|
||||||
lwz r8, KDP.PA_NanoKernelCode(r1)
|
lwz r8, KDP.PA_NanoKernelCode(r1)
|
||||||
llabel r26, IdleCode
|
llabel r26, SchIdleTask
|
||||||
add r8, r8, r26
|
add r8, r8, r26
|
||||||
stw r8, Task.ContextBlock + ContextBlock.CodePtr(r31)
|
stw r8, Task.ContextBlock + ContextBlock.CodePtr(r31)
|
||||||
|
|
||||||
@ -1283,7 +1283,7 @@ av set PSA.AVFeatureBit
|
|||||||
; CLOB r16, r17, r18
|
; CLOB r16, r17, r18
|
||||||
|
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bl TaskReadyAsPrev
|
bl SchRdyTaskNow
|
||||||
|
|
||||||
bl CalculateTimeslice
|
bl CalculateTimeslice
|
||||||
|
|
||||||
@ -1865,7 +1865,7 @@ ReconcileMemory
|
|||||||
mfsprg r8, 0
|
mfsprg r8, 0
|
||||||
mtxer r9
|
mtxer r9
|
||||||
|
|
||||||
bl Restore_r14_r31
|
bl SchRestoreStartingAtR14
|
||||||
|
|
||||||
b kcPrioritizeInterrupts
|
b kcPrioritizeInterrupts
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -86,7 +86,7 @@ MaxMPCallCount equ 134
|
|||||||
|
|
||||||
kcMPDispatch ; reached by `sc`, or `twi *, *, 8`
|
kcMPDispatch ; reached by `sc`, or `twi *, *, 8`
|
||||||
|
|
||||||
bl Save_r14_r31
|
bl SchSaveStartingAtR14
|
||||||
|
|
||||||
lwz r8, EWA.r6(r8) ; clobbers our EWA pointer :(
|
lwz r8, EWA.r6(r8) ; clobbers our EWA pointer :(
|
||||||
lwz r14, KDP.PA_NanoKernelCode(r1) ; but r14...
|
lwz r14, KDP.PA_NanoKernelCode(r1) ; but r14...
|
||||||
@ -670,7 +670,7 @@ ReleaseAndReturnMPCall ; OUTSIDE REFERER
|
|||||||
; BlockMPCall
|
; BlockMPCall
|
||||||
; KCGetCpuCount
|
; KCGetCpuCount
|
||||||
; MPCall_6
|
; MPCall_6
|
||||||
; KCYieldWithHint
|
; MPYieldWithHint
|
||||||
; KCCpuPlugin
|
; KCCpuPlugin
|
||||||
; NKPrintHex
|
; NKPrintHex
|
||||||
; NKPrintDecimal
|
; NKPrintDecimal
|
||||||
@ -699,15 +699,15 @@ TrulyCommonMPCallReturnPath ; OUTSIDE REFERER
|
|||||||
bc BO_IF_NOT, 10, @block
|
bc BO_IF_NOT, 10, @block
|
||||||
|
|
||||||
;return immediately
|
;return immediately
|
||||||
bl Restore_r14_r31
|
bl SchRestoreStartingAtR14
|
||||||
b IntReturn
|
b IntReturn
|
||||||
|
|
||||||
@block
|
@block
|
||||||
b RescheduleAndReturn
|
b SchEval
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; MPCall_0
|
; Called after MPLibrary creates a new structure
|
||||||
|
|
||||||
DeclareMPCall 0, MPCall_0
|
DeclareMPCall 0, MPCall_0
|
||||||
|
|
||||||
@ -716,8 +716,10 @@ MPCall_0 ; OUTSIDE REFERER
|
|||||||
mr r30, r7
|
mr r30, r7
|
||||||
mr r29, r6
|
mr r29, r6
|
||||||
bne+ ReturnMPCallOOM
|
bne+ ReturnMPCallOOM
|
||||||
|
|
||||||
|
; Fail if this page is outside of the PAR
|
||||||
rlwinm. r4, r3, 20, 12, 31
|
rlwinm. r4, r3, 20, 12, 31
|
||||||
lwz r9, 0x06a8(r1)
|
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
||||||
beq+ ReturnMPCallOOM
|
beq+ ReturnMPCallOOM
|
||||||
cmplw r4, r9
|
cmplw r4, r9
|
||||||
bge+ ReturnMPCallOOM
|
bge+ ReturnMPCallOOM
|
||||||
@ -909,17 +911,14 @@ MPRegisterCpuPlugin
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
; KCGetCpuCount
|
|
||||||
|
|
||||||
; Called by MPProcessors and MPProcessorsScheduled
|
; Called by MPProcessors and MPProcessorsScheduled
|
||||||
|
|
||||||
; > r3 = 0:all, 1:scheduled
|
; ARG bool r3 scheduled_only
|
||||||
|
; RET int r3
|
||||||
|
|
||||||
; < r3 = cpu_count
|
DeclareMPCall 3, MPProcessors
|
||||||
|
|
||||||
DeclareMPCall 3, KCGetCpuCount
|
MPProcessors
|
||||||
|
|
||||||
KCGetCpuCount ; OUTSIDE REFERER
|
|
||||||
|
|
||||||
mfsprg r15, 0
|
mfsprg r15, 0
|
||||||
lwz r14, EWA.CPUBase + CPU.LLL + LLL.Freeform(r15)
|
lwz r14, EWA.CPUBase + CPU.LLL + LLL.Freeform(r15)
|
||||||
@ -936,9 +935,9 @@ KCGetCpuCount ; OUTSIDE REFERER
|
|||||||
; ARG AddressSpaceID r3
|
; ARG AddressSpaceID r3
|
||||||
; RET AddressSpaceID r3, ??? r4, ProcessStructID r5
|
; RET AddressSpaceID r3, ??? r4, ProcessStructID r5
|
||||||
|
|
||||||
DeclareMPCall 4, KCCreateProcess
|
DeclareMPCall 4, MPCreateProcess
|
||||||
|
|
||||||
KCCreateProcess ; OUTSIDE REFERER
|
MPCreateProcess
|
||||||
|
|
||||||
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
|
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
|
||||||
|
|
||||||
@ -991,9 +990,9 @@ KCCreateProcess ; OUTSIDE REFERER
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
DeclareMPCall 5, MPCall_5
|
DeclareMPCall 5, MPTerminateProcess
|
||||||
|
|
||||||
MPCall_5 ; OUTSIDE REFERER
|
MPTerminateProcess
|
||||||
|
|
||||||
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
|
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
|
||||||
|
|
||||||
@ -1069,12 +1068,12 @@ MPCall_6_0xb4
|
|||||||
|
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
|
|
||||||
bl TaskUnready
|
bl SchTaskUnrdy
|
||||||
|
|
||||||
li r16, Task.kNominalPriority
|
li r16, Task.kNominalPriority
|
||||||
stb r16, Task.Priority(r31)
|
stb r16, Task.Priority(r31)
|
||||||
|
|
||||||
bl TaskReadyAsPrev
|
bl SchRdyTaskNow
|
||||||
|
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bl FlagSchEvaluationIfTaskRequires
|
bl FlagSchEvaluationIfTaskRequires
|
||||||
@ -1083,44 +1082,51 @@ MPCall_6_0xb4
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
; KCYieldWithHint
|
; Implements MPYield (null argument)
|
||||||
|
|
||||||
|
; Caller gets its priority set to nominal
|
||||||
|
|
||||||
DeclareMPCall 13, KCYieldWithHint
|
; ARG TaskID r3 (null for MPYield)
|
||||||
|
; RET OSStatus r3
|
||||||
|
|
||||||
KCYieldWithHint ; OUTSIDE REFERER
|
DeclareMPCall 13, MPYieldWithHint
|
||||||
|
|
||||||
|
MPYieldWithHint
|
||||||
|
|
||||||
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
|
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
|
||||||
|
|
||||||
mfsprg r16, 0
|
mfsprg r16, 0
|
||||||
rlwinm. r8, r7, 0, 10, 10
|
rlwinm. r8, r7, 0, 10, 10
|
||||||
lwz r17, KDP.PA_ECB(r1)
|
lwz r17, KDP.PA_ECB(r1)
|
||||||
lwz r31, -0x0008(r16)
|
lwz r31, EWA.PA_CurTask(r16)
|
||||||
beq- KCYieldWithHint_0x68
|
beq- @i_am_important ; not 68k mode?
|
||||||
clrlwi. r8, r3, 0x1f
|
|
||||||
|
clrlwi. r8, r3, 31
|
||||||
lwz r8, ContextBlock.PriorityShifty(r17)
|
lwz r8, ContextBlock.PriorityShifty(r17)
|
||||||
rlwinm r8, r8, 0, 24, 21
|
rlwinm r8, r8, 0, 24, 21
|
||||||
oris r8, r8, 0x8000
|
oris r8, r8, 0x8000
|
||||||
stw r8, ContextBlock.PriorityShifty(r17)
|
stw r8, ContextBlock.PriorityShifty(r17)
|
||||||
beq- KCYieldWithHint_0x68
|
beq- @i_am_important ; MPYield call
|
||||||
lbz r16, 0x0019(r31)
|
|
||||||
cmpwi r16, 0x02
|
|
||||||
bge- KCYieldWithHint_0x7c
|
|
||||||
mr r8, r31
|
|
||||||
bl TaskUnready
|
|
||||||
li r16, 0x02
|
|
||||||
stb r16, 0x0019(r31)
|
|
||||||
bl TaskReadyAsNext
|
|
||||||
b KCYieldWithHint_0x7c
|
|
||||||
|
|
||||||
KCYieldWithHint_0x68
|
; If this task is
|
||||||
|
lbz r16, Task.Priority(r31)
|
||||||
|
cmpwi r16, Task.kNominalPriority
|
||||||
|
bge- @return
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bl TaskUnready
|
bl SchTaskUnrdy
|
||||||
li r16, 0x02
|
li r16, Task.kNominalPriority
|
||||||
stb r16, 0x0019(r31)
|
stb r16, Task.Priority(r31)
|
||||||
bl TaskReadyAsPrev
|
bl SchRdyTaskLater
|
||||||
|
b @return
|
||||||
|
|
||||||
KCYieldWithHint_0x7c
|
@i_am_important
|
||||||
|
mr r8, r31
|
||||||
|
bl SchTaskUnrdy
|
||||||
|
li r16, Task.kNominalPriority
|
||||||
|
stb r16, Task.Priority(r31)
|
||||||
|
bl SchRdyTaskNow
|
||||||
|
|
||||||
|
@return
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bl FlagSchEvaluationIfTaskRequires
|
bl FlagSchEvaluationIfTaskRequires
|
||||||
_AssertAndRelease PSA.SchLock + Lock.Count, scratch=r16
|
_AssertAndRelease PSA.SchLock + Lock.Count, scratch=r16
|
||||||
@ -1128,32 +1134,35 @@ KCYieldWithHint_0x7c
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
DeclareMPCall 33, MPCall_33
|
; ARG AbsoluteTime r3/r4
|
||||||
|
; RET OSStatus r3
|
||||||
|
|
||||||
MPCall_33 ; OUTSIDE REFERER
|
DeclareMPCall 33, MPDelayUntil
|
||||||
rlwinm. r8, r7, 0, 10, 10 ; Contains CpuFlags
|
|
||||||
|
MPDelayUntil
|
||||||
|
|
||||||
|
rlwinm. r8, r7, 0, EWA.kFlagBlue, EWA.kFlagBlue
|
||||||
bne+ ReturnMPCallBlueBlocking
|
bne+ ReturnMPCallBlueBlocking
|
||||||
|
|
||||||
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
|
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
|
||||||
|
b _MPDelayUntilCommon
|
||||||
b MPCall_55_0x60
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; This version is allowed while the blue task is running
|
||||||
|
|
||||||
; MPCall_55
|
; ARG AbsoluteTime r3/r4
|
||||||
|
; RET OSStatus r3
|
||||||
|
|
||||||
; Xrefs:
|
DeclareMPCall 55, MPDelayUntilSys
|
||||||
; kcMPDispatch
|
|
||||||
; MPCall_33
|
|
||||||
|
|
||||||
DeclareMPCall 55, MPCall_55
|
MPDelayUntilSys
|
||||||
|
|
||||||
MPCall_55 ; OUTSIDE REFERER
|
rlwinm. r8, r7, 0, EWA.kFlagBlue, EWA.kFlagBlue
|
||||||
rlwinm. r8, r7, 0, 10, 10
|
|
||||||
lwz r16, KDP.NanoKernelInfo + NKNanoKernelInfo.ExternalIntCount(r1)
|
lwz r16, KDP.NanoKernelInfo + NKNanoKernelInfo.ExternalIntCount(r1)
|
||||||
beq- MPCall_55_0x60
|
beq- _MPDelayUntilCommon
|
||||||
|
|
||||||
|
; Why the hell are we counting interrupts?
|
||||||
lwz r17, PSA.OtherSystemContextPtr(r1)
|
lwz r17, PSA.OtherSystemContextPtr(r1)
|
||||||
lwz r18, KDP.PA_ECB(r1)
|
lwz r18, KDP.PA_ECB(r1)
|
||||||
cmpw r16, r17
|
cmpw r16, r17
|
||||||
@ -1170,13 +1179,14 @@ MPCall_55 ; OUTSIDE REFERER
|
|||||||
lwz r16, PSA.BlueSpinningOn(r1)
|
lwz r16, PSA.BlueSpinningOn(r1)
|
||||||
cmpwi r16, -1
|
cmpwi r16, -1
|
||||||
li r16, 0
|
li r16, 0
|
||||||
bne- MPCall_55_0x60
|
bne- _MPDelayUntilCommon
|
||||||
stw r16, PSA.BlueSpinningOn(r1)
|
stw r16, PSA.BlueSpinningOn(r1)
|
||||||
b ReleaseAndReturnZeroFromMPCall
|
b ReleaseAndReturnZeroFromMPCall
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
MPCall_55_0x60 ; OUTSIDE REFERER
|
_MPDelayUntilCommon
|
||||||
|
|
||||||
mfsprg r16, 0
|
mfsprg r16, 0
|
||||||
li r17, 1
|
li r17, 1
|
||||||
|
|
||||||
@ -1196,7 +1206,7 @@ MPCall_55_0x60 ; OUTSIDE REFERER
|
|||||||
bl EnqueueTimer
|
bl EnqueueTimer
|
||||||
|
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bl TaskUnready
|
bl SchTaskUnrdy
|
||||||
|
|
||||||
addi r16, r1, PSA.DelayQueue
|
addi r16, r1, PSA.DelayQueue
|
||||||
addi r17, r31, Timer.QueueLLL
|
addi r17, r31, Timer.QueueLLL
|
||||||
@ -1559,7 +1569,7 @@ KCCreateCpuStruct_0x68
|
|||||||
|
|
||||||
lisori r8, 11
|
lisori r8, 11
|
||||||
lisori r8, 6
|
lisori r8, 6
|
||||||
stw r8, CPU.Eff(r31)
|
stw r8, CPU.Flags(r31)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -1622,7 +1632,7 @@ MPDeleteProcessor
|
|||||||
mr r31, r8
|
mr r31, r8
|
||||||
bne+ ReleaseAndReturnMPCallInvalidIDErr
|
bne+ ReleaseAndReturnMPCallInvalidIDErr
|
||||||
|
|
||||||
lwz r16, CPU.Eff(r31)
|
lwz r16, CPU.Flags(r31)
|
||||||
lisori r17, 9
|
lisori r17, 9
|
||||||
and. r17, r17, r16
|
and. r17, r17, r16
|
||||||
bne+ ReleaseAndReturnMPCallOOM
|
bne+ ReleaseAndReturnMPCallOOM
|
||||||
@ -1666,7 +1676,7 @@ KCStartCPU ; OUTSIDE REFERER
|
|||||||
bne+ ReleaseAndReturnMPCallInvalidIDErr
|
bne+ ReleaseAndReturnMPCallInvalidIDErr
|
||||||
|
|
||||||
mr r30, r8
|
mr r30, r8
|
||||||
lwz r16, CPU.Eff(r30)
|
lwz r16, CPU.Flags(r30)
|
||||||
rlwinm. r8, r16, 0, 28, 28
|
rlwinm. r8, r16, 0, 28, 28
|
||||||
bne+ ReleaseAndReturnZeroFromMPCall
|
bne+ ReleaseAndReturnZeroFromMPCall
|
||||||
|
|
||||||
@ -1727,7 +1737,7 @@ KCStartCPU ; OUTSIDE REFERER
|
|||||||
|
|
||||||
|
|
||||||
lwz r8, KDP.PA_NanoKernelCode(r1)
|
lwz r8, KDP.PA_NanoKernelCode(r1)
|
||||||
llabel r26, IdleCode
|
llabel r26, SchIdleTask
|
||||||
add r8, r8, r26
|
add r8, r8, r26
|
||||||
stw r8, Task.ContextBlock + ContextBlock.CodePtr(r31)
|
stw r8, Task.ContextBlock + ContextBlock.CodePtr(r31)
|
||||||
|
|
||||||
@ -1822,16 +1832,16 @@ KCStopScheduling ; OUTSIDE REFERER
|
|||||||
oris r17, r17, 0x80
|
oris r17, r17, 0x80
|
||||||
stw r17, 0x0064(r31)
|
stw r17, 0x0064(r31)
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bl TaskUnready
|
bl SchTaskUnrdy
|
||||||
li r17, 0x00
|
li r17, 0x00
|
||||||
stb r17, 0x0019(r31)
|
stb r17, 0x0019(r31)
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bl TaskReadyAsNext
|
bl SchRdyTaskLater
|
||||||
bl CalculateTimeslice
|
bl CalculateTimeslice
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bl major_0x14af8_0xa0
|
bl FlagSchEval
|
||||||
lwz r8, 0x064c(r1)
|
lwz r8, 0x064c(r1)
|
||||||
llabel r9, StopProcessor
|
llabel r9, SchIdleTaskStopper
|
||||||
add r8, r8, r9
|
add r8, r8, r9
|
||||||
stw r8, 0x01fc(r31)
|
stw r8, 0x01fc(r31)
|
||||||
|
|
||||||
@ -1853,7 +1863,7 @@ MPCpuPlugin
|
|||||||
; Arguments in registers
|
; Arguments in registers
|
||||||
li r8, 0
|
li r8, 0
|
||||||
|
|
||||||
; Hopefully returns via kcReturnFromInterrupt? Geez...
|
; Hopefully returns via kcSchExitInterrupt? Geez...
|
||||||
bl SIGP
|
bl SIGP
|
||||||
|
|
||||||
mr r3, r8
|
mr r3, r8
|
||||||
@ -2045,13 +2055,13 @@ KCMarkPMFTask ; OUTSIDE REFERER
|
|||||||
|
|
||||||
; Insert bit 31 of r4 into bit 21 of these flags
|
; Insert bit 31 of r4 into bit 21 of these flags
|
||||||
lwz r17, Task.Flags(r31)
|
lwz r17, Task.Flags(r31)
|
||||||
rlwimi r17, r4, 10, 21, 21
|
rlwimi r17, r4, 10, Task.kFlagPMF, Task.kFlagPMF
|
||||||
stw r17, Task.Flags(r31)
|
stw r17, Task.Flags(r31)
|
||||||
|
|
||||||
|
|
||||||
; Don't know what this does!
|
; Don't know what this does!
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bl major_0x14af8_0xa0
|
bl FlagSchEval
|
||||||
|
|
||||||
b ReleaseAndReturnZeroFromMPCall
|
b ReleaseAndReturnZeroFromMPCall
|
||||||
|
|
||||||
@ -2129,18 +2139,28 @@ NKLocateInfoRecord
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
DeclareMPCall 108, MPCall_108
|
; ARG int r3 stop
|
||||||
|
; long r4 CpuClockRateHz
|
||||||
|
; long r5 BusClockRateHz
|
||||||
|
; long r6 DecClockRateHz
|
||||||
|
; RET OSStatus r3
|
||||||
|
|
||||||
MPCall_108 ; OUTSIDE REFERER
|
DeclareMPCall 108, NKSetPrInfoClockRates
|
||||||
cmplwi r3, 0x02
|
|
||||||
|
NKSetPrInfoClockRates
|
||||||
|
|
||||||
|
cmplwi r3, 2
|
||||||
bge+ ReturnParamErrFromMPCall
|
bge+ ReturnParamErrFromMPCall
|
||||||
mulli r17, r3, 0x10
|
|
||||||
addi r18, r1, 0xf80
|
mulli r17, r3, 16
|
||||||
|
addi r18, r1, KDP.ProcessorInfo + NKProcessorInfo.ClockRates
|
||||||
add r18, r17, r18
|
add r18, r17, r18
|
||||||
lwz r16, 0x0134(r6)
|
|
||||||
stw r4, 0x0000(r18)
|
lwz r16, ContextBlock.r6(r6)
|
||||||
stw r5, 0x0004(r18)
|
stw r4, 0(r18)
|
||||||
stw r16, 0x0008(r18)
|
stw r5, 4(r18)
|
||||||
|
stw r16, 8(r18)
|
||||||
|
|
||||||
_log 'Clock rates for step '
|
_log 'Clock rates for step '
|
||||||
mr r8, r3
|
mr r8, r3
|
||||||
bl Printd
|
bl Printd
|
||||||
@ -2154,6 +2174,7 @@ MPCall_108 ; OUTSIDE REFERER
|
|||||||
mr r8, r16
|
mr r8, r16
|
||||||
bl Printd
|
bl Printd
|
||||||
_log 'Hz^n'
|
_log 'Hz^n'
|
||||||
|
|
||||||
b ReturnZeroFromMPCall
|
b ReturnZeroFromMPCall
|
||||||
|
|
||||||
|
|
||||||
|
@ -189,7 +189,17 @@ HalfLoadedReg set (®)
|
|||||||
MACRO
|
MACRO
|
||||||
_bclr &dest, &src, &bit
|
_bclr &dest, &src, &bit
|
||||||
|
|
||||||
rlwinm&dot &dest, &src, 0, (&bit)+1, (&bit)-1
|
_bclr_rbit set &bit+1
|
||||||
|
if _bclr_rbit > 31
|
||||||
|
_bclr_rbit set 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
_bclr_lbit set &bit-1
|
||||||
|
if _bclr_lbit < 0
|
||||||
|
_bclr_lbit set 31
|
||||||
|
endif
|
||||||
|
|
||||||
|
rlwinm&dot &dest, &src, 0, _bclr_rbit, _bclr_lbit
|
||||||
|
|
||||||
ENDM
|
ENDM
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ PagingFunc1 ; OUTSIDE REFERER
|
|||||||
lwz r8, -0x001c(r30)
|
lwz r8, -0x001c(r30)
|
||||||
bl FindAreaAbove
|
bl FindAreaAbove
|
||||||
mr r31, r8
|
mr r31, r8
|
||||||
stw r8, -0x00e4(r30)
|
stw r8, EWA.SpecialAreaPtr(r30)
|
||||||
stw r27, -0x00e8(r30)
|
stw r27, -0x00e8(r30)
|
||||||
lwz r16, 0x0024(r31)
|
lwz r16, 0x0024(r31)
|
||||||
lwz r17, 0x0020(r31)
|
lwz r17, 0x0020(r31)
|
||||||
|
@ -89,11 +89,12 @@ CommonPIHPath_0xc ; OUTSIDE REFERER
|
|||||||
lwz r29, KDP.ClearIntMaskInit(r1)
|
lwz r29, KDP.ClearIntMaskInit(r1)
|
||||||
|
|
||||||
bne- @noperf
|
bne- @noperf
|
||||||
bne- cr1, CommonPIHPath_0x78
|
bne- cr1, @CommonPIHPath_0x78
|
||||||
@noperf
|
@noperf
|
||||||
|
|
||||||
rlwinm. r8, r7, 0, 10, 10
|
rlwinm. r8, r7, 0, 10, 10
|
||||||
beq- CommonPIHPath_0x14c
|
beq- @actual_meat
|
||||||
|
|
||||||
sth r28, 0x0000(r23)
|
sth r28, 0x0000(r23)
|
||||||
or r13, r13, r31
|
or r13, r13, r31
|
||||||
bgt- cr7, @negative
|
bgt- cr7, @negative
|
||||||
@ -101,10 +102,10 @@ CommonPIHPath_0xc ; OUTSIDE REFERER
|
|||||||
|
|
||||||
@negative
|
@negative
|
||||||
_AssertAndRelease PSA.PIHLock, scratch=r8
|
_AssertAndRelease PSA.PIHLock, scratch=r8
|
||||||
bl Restore_r20_r31
|
bl SchRestoreStartingAtR20
|
||||||
b IntReturn
|
b IntReturn
|
||||||
|
|
||||||
CommonPIHPath_0x78
|
@CommonPIHPath_0x78
|
||||||
_AssertAndRelease PSA.PIHLock, scratch=r8
|
_AssertAndRelease PSA.PIHLock, scratch=r8
|
||||||
bl Save_r14_r19
|
bl Save_r14_r19
|
||||||
|
|
||||||
@ -122,7 +123,7 @@ CommonPIHPath_0x78
|
|||||||
bl CauseNotification
|
bl CauseNotification
|
||||||
_AssertAndRelease PSA.SchLock, scratch=r8
|
_AssertAndRelease PSA.SchLock, scratch=r8
|
||||||
|
|
||||||
bl Restore_r14_r31
|
bl SchRestoreStartingAtR14
|
||||||
b IntReturn
|
b IntReturn
|
||||||
|
|
||||||
@no_handler_notification
|
@no_handler_notification
|
||||||
@ -136,7 +137,13 @@ CommonPIHPath_0x78
|
|||||||
|
|
||||||
b CommonPIHPath_0xc
|
b CommonPIHPath_0xc
|
||||||
|
|
||||||
CommonPIHPath_0x14c
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@actual_meat
|
||||||
|
|
||||||
_AssertAndRelease PSA.PIHLock, scratch=r8
|
_AssertAndRelease PSA.PIHLock, scratch=r8
|
||||||
bl Save_r14_r19
|
bl Save_r14_r19
|
||||||
|
|
||||||
@ -145,55 +152,56 @@ CommonPIHPath_0x14c
|
|||||||
lwz r30, PSA.MCR(r1)
|
lwz r30, PSA.MCR(r1)
|
||||||
or r31, r31, r30
|
or r31, r31, r30
|
||||||
stw r31, PSA.MCR(r1)
|
stw r31, PSA.MCR(r1)
|
||||||
sth r28, -0x043c(r1)
|
|
||||||
|
sth r28, PSA.Int(r1)
|
||||||
|
|
||||||
lwz r31, PSA.PA_BlueTask(r1)
|
lwz r31, PSA.PA_BlueTask(r1)
|
||||||
mfsprg r30, 0
|
mfsprg r30, 0
|
||||||
lwz r28, 0x0064(r31)
|
lwz r28, Task.Flags(r31)
|
||||||
lbz r29, 0x0018(r31)
|
lbz r29, Task.State(r31)
|
||||||
ori r28, r28, 0x10
|
_bset r28, r28, Task.kFlag68kInterrupt
|
||||||
stw r28, 0x0064(r31)
|
stw r28, Task.Flags(r31)
|
||||||
cmpwi r29, 0x00
|
|
||||||
lhz r16, 0x001a(r31)
|
cmpwi r29, 0
|
||||||
beq- CommonPIHPath_0x1dc
|
lhz r16, Task.CPUIndex(r31)
|
||||||
|
beq- @task_not_running
|
||||||
lhz r17, EWA.CPUIndex(r30)
|
lhz r17, EWA.CPUIndex(r30)
|
||||||
cmpw cr1, r16, r17
|
cmpw cr1, r16, r17
|
||||||
rlwinm. r8, r28, 0, 26, 26
|
rlwinm. r8, r28, 0, Task.kFlag26, Task.kFlag26
|
||||||
beq- cr1, CommonPIHPath_0x1d0
|
beq- cr1, @running_on_this_cpu
|
||||||
bne- CommonPIHPath_0x230
|
bne- @flag_and_run
|
||||||
|
|
||||||
CommonPIHPath_0x1d0
|
@running_on_this_cpu
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bl TaskUnready
|
bl SchTaskUnrdy
|
||||||
b CommonPIHPath_0x218
|
b @now_reschedule_task
|
||||||
|
|
||||||
CommonPIHPath_0x1dc
|
@task_not_running
|
||||||
addi r16, r31, 0x08
|
addi r16, r31, Task.QueueMember
|
||||||
RemoveFromList r16, scratch1=r17, scratch2=r18
|
RemoveFromList r16, scratch1=r17, scratch2=r18
|
||||||
lbz r17, 0x0037(r31)
|
lbz r17, Task.Timer + Timer.Byte3(r31)
|
||||||
cmpwi r17, 0x01
|
cmpwi r17, 1
|
||||||
bne- CommonPIHPath_0x210
|
bne- @task_timer_not_in_use
|
||||||
addi r8, r31, 0x20
|
addi r8, r31, Task.Timer
|
||||||
bl DequeueTimer
|
bl DequeueTimer
|
||||||
|
@task_timer_not_in_use
|
||||||
CommonPIHPath_0x210
|
lwz r16, KDP.NanoKernelInfo + NKNanoKernelInfo.ExternalIntCount(r1)
|
||||||
lwz r16, 0x0e80(r1)
|
|
||||||
stw r16, PSA.OtherSystemContextPtr(r1)
|
stw r16, PSA.OtherSystemContextPtr(r1)
|
||||||
|
|
||||||
CommonPIHPath_0x218
|
@now_reschedule_task
|
||||||
li r16, 0x00
|
li r16, Task.kCriticalPriority
|
||||||
stb r16, 0x0019(r31)
|
stb r16, Task.Priority(r31)
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bl TaskReadyAsNext
|
bl SchRdyTaskLater
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bl CalculateTimeslice
|
bl CalculateTimeslice
|
||||||
|
|
||||||
CommonPIHPath_0x230
|
@flag_and_run
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bl FlagSchEvaluationIfTaskRequires
|
bl FlagSchEvaluationIfTaskRequires
|
||||||
_AssertAndRelease PSA.SchLock, scratch=r16
|
_AssertAndRelease PSA.SchLock, scratch=r16
|
||||||
|
|
||||||
; r6 = ewa
|
bl SchRestoreStartingAtR14
|
||||||
bl Restore_r14_r31
|
|
||||||
b IntReturn
|
b IntReturn
|
||||||
|
|
||||||
|
|
||||||
@ -297,7 +305,7 @@ PDM_PIH
|
|||||||
|
|
||||||
_Lock PSA.PIHLock, scratch1=r8, scratch2=r9
|
_Lock PSA.PIHLock, scratch1=r8, scratch2=r9
|
||||||
|
|
||||||
bl Save_r20_r31
|
bl SchSaveStartingAtR20
|
||||||
|
|
||||||
addi r9, r1, PSA.BlueVecBase
|
addi r9, r1, PSA.BlueVecBase
|
||||||
andis. r8, r11, 0x8000 >> 14 ; SRR1 mystery bit
|
andis. r8, r11, 0x8000 >> 14 ; SRR1 mystery bit
|
||||||
@ -375,7 +383,7 @@ PBX_PIH
|
|||||||
_Lock PSA.PIHLock, scratch1=r8, scratch2=r9
|
_Lock PSA.PIHLock, scratch1=r8, scratch2=r9
|
||||||
|
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Save_r20_r31
|
bl SchSaveStartingAtR20
|
||||||
; r8 = sprg0 (not used by me)
|
; r8 = sprg0 (not used by me)
|
||||||
|
|
||||||
addi r9, r1, -0x750
|
addi r9, r1, -0x750
|
||||||
@ -439,7 +447,7 @@ GazellePIH
|
|||||||
_Lock PSA.PIHLock, scratch1=r8, scratch2=r9
|
_Lock PSA.PIHLock, scratch1=r8, scratch2=r9
|
||||||
|
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Save_r20_r31
|
bl SchSaveStartingAtR20
|
||||||
; r8 = sprg0 (not used by me)
|
; r8 = sprg0 (not used by me)
|
||||||
|
|
||||||
addi r9, r1, -0x750
|
addi r9, r1, -0x750
|
||||||
@ -527,7 +535,7 @@ TNT_PIH
|
|||||||
_Lock PSA.PIHLock, scratch1=r8, scratch2=r9
|
_Lock PSA.PIHLock, scratch1=r8, scratch2=r9
|
||||||
|
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Save_r20_r31
|
bl SchSaveStartingAtR20
|
||||||
; r8 = sprg0 (not used by me)
|
; r8 = sprg0 (not used by me)
|
||||||
|
|
||||||
addi r9, r1, -0x750
|
addi r9, r1, -0x750
|
||||||
@ -603,7 +611,7 @@ GossamerPIH
|
|||||||
_Lock PSA.PIHLock, scratch1=r8, scratch2=r9
|
_Lock PSA.PIHLock, scratch1=r8, scratch2=r9
|
||||||
|
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Save_r20_r31
|
bl SchSaveStartingAtR20
|
||||||
; r8 = sprg0 (not used by me)
|
; r8 = sprg0 (not used by me)
|
||||||
|
|
||||||
addi r9, r1, -0x750
|
addi r9, r1, -0x750
|
||||||
@ -696,7 +704,7 @@ NewWorldPowerBookPIH
|
|||||||
_Lock PSA.PIHLock, scratch1=r8, scratch2=r9
|
_Lock PSA.PIHLock, scratch1=r8, scratch2=r9
|
||||||
|
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Save_r20_r31
|
bl SchSaveStartingAtR20
|
||||||
; r8 = sprg0 (not used by me)
|
; r8 = sprg0 (not used by me)
|
||||||
|
|
||||||
addi r9, r1, -0x750
|
addi r9, r1, -0x750
|
||||||
@ -773,7 +781,7 @@ CordycepsPIH
|
|||||||
_Lock PSA.PIHLock, scratch1=r8, scratch2=r9
|
_Lock PSA.PIHLock, scratch1=r8, scratch2=r9
|
||||||
|
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Save_r20_r31
|
bl SchSaveStartingAtR20
|
||||||
; r8 = sprg0 (not used by me)
|
; r8 = sprg0 (not used by me)
|
||||||
|
|
||||||
addi r9, r1, -0x750
|
addi r9, r1, -0x750
|
||||||
@ -837,7 +845,7 @@ NewWorldPIH
|
|||||||
_Lock PSA.PIHLock, scratch1=r8, scratch2=r9
|
_Lock PSA.PIHLock, scratch1=r8, scratch2=r9
|
||||||
|
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Save_r20_r31
|
bl SchSaveStartingAtR20
|
||||||
; r8 = sprg0 (not used by me)
|
; r8 = sprg0 (not used by me)
|
||||||
|
|
||||||
addi r9, r1, -0x750
|
addi r9, r1, -0x750
|
||||||
@ -1025,7 +1033,7 @@ UnknownPIH
|
|||||||
_Lock PSA.PIHLock, scratch1=r8, scratch2=r9
|
_Lock PSA.PIHLock, scratch1=r8, scratch2=r9
|
||||||
|
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Save_r20_r31
|
bl SchSaveStartingAtR20
|
||||||
; r8 = sprg0 (not used by me)
|
; r8 = sprg0 (not used by me)
|
||||||
|
|
||||||
addi r9, r1, -0x750
|
addi r9, r1, -0x750
|
||||||
|
@ -22,7 +22,7 @@ Local_Panic set *
|
|||||||
; Each one has a "time cake" that gets divided among its tasks.
|
; Each one has a "time cake" that gets divided among its tasks.
|
||||||
; For critical it is ~1ms, successively multiplying by 8.
|
; For critical it is ~1ms, successively multiplying by 8.
|
||||||
|
|
||||||
InitRDYQs
|
SchInit
|
||||||
|
|
||||||
li r16, 0
|
li r16, 0
|
||||||
stw r16, KDP.NanoKernelInfo + NKNanoKernelInfo.TaskCount(r1)
|
stw r16, KDP.NanoKernelInfo + NKNanoKernelInfo.TaskCount(r1)
|
||||||
@ -61,7 +61,7 @@ InitRDYQs
|
|||||||
|
|
||||||
; Zero some shit
|
; Zero some shit
|
||||||
li r8, 0
|
li r8, 0
|
||||||
stw r8, ReadyQueue.Counter(r9) ; incremented by TaskReadyAsPrev/Next
|
stw r8, ReadyQueue.Counter(r9) ; incremented by SchRdyTaskNow/Next
|
||||||
stw r8, ReadyQueue.TotalWeight(r9)
|
stw r8, ReadyQueue.TotalWeight(r9)
|
||||||
|
|
||||||
; 1ms for critical, successively 8x for other queues
|
; 1ms for critical, successively 8x for other queues
|
||||||
@ -97,6 +97,10 @@ InitRDYQs
|
|||||||
addi r9, r9, 32 ;ReadyQueue.Size
|
addi r9, r9, 32 ;ReadyQueue.Size
|
||||||
blt+ @loop
|
blt+ @loop
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; DO SOMETHING ELSE:
|
||||||
|
|
||||||
; If the low nybble is empty, set ContextBlock.PriorityShifty to 2.
|
; If the low nybble is empty, set ContextBlock.PriorityShifty to 2.
|
||||||
lwz r16, KDP.PA_ECB(r1)
|
lwz r16, KDP.PA_ECB(r1)
|
||||||
lwz r17, ContextBlock.PriorityShifty(r16)
|
lwz r17, ContextBlock.PriorityShifty(r16)
|
||||||
@ -120,13 +124,13 @@ InitRDYQs
|
|||||||
; ...to (ECB *)r6
|
; ...to (ECB *)r6
|
||||||
; (and also copy SPRG0 to r8)
|
; (and also copy SPRG0 to r8)
|
||||||
|
|
||||||
Save_r14_r31
|
SchSaveStartingAtR14
|
||||||
li r8, ContextBlock.r16 & -32
|
li r8, ContextBlock.r16 & -32
|
||||||
dcbtst r8, r6
|
dcbtst r8, r6
|
||||||
stw r14, ContextBlock.r14(r6)
|
stw r14, ContextBlock.r14(r6)
|
||||||
stw r15, ContextBlock.r15(r6)
|
stw r15, ContextBlock.r15(r6)
|
||||||
|
|
||||||
Save_r16_r31
|
SchSaveStartingAtR16
|
||||||
li r8, ContextBlock.r20 & -32
|
li r8, ContextBlock.r20 & -32
|
||||||
stw r16, ContextBlock.r16(r6)
|
stw r16, ContextBlock.r16(r6)
|
||||||
dcbtst r8, r6
|
dcbtst r8, r6
|
||||||
@ -134,7 +138,7 @@ Save_r16_r31
|
|||||||
stw r18, ContextBlock.r18(r6)
|
stw r18, ContextBlock.r18(r6)
|
||||||
stw r19, ContextBlock.r19(r6)
|
stw r19, ContextBlock.r19(r6)
|
||||||
|
|
||||||
Save_r20_r31
|
SchSaveStartingAtR20
|
||||||
li r8, ContextBlock.r24 & -32
|
li r8, ContextBlock.r24 & -32
|
||||||
stw r20, ContextBlock.r20(r6)
|
stw r20, ContextBlock.r20(r6)
|
||||||
dcbtst r8, r6
|
dcbtst r8, r6
|
||||||
@ -142,7 +146,7 @@ Save_r20_r31
|
|||||||
stw r22, ContextBlock.r22(r6)
|
stw r22, ContextBlock.r22(r6)
|
||||||
stw r23, ContextBlock.r23(r6)
|
stw r23, ContextBlock.r23(r6)
|
||||||
|
|
||||||
Save_r24_r31
|
SchSaveStartingAtR24
|
||||||
li r8, ContextBlock.r28 & -32
|
li r8, ContextBlock.r28 & -32
|
||||||
stw r24, ContextBlock.r24(r6)
|
stw r24, ContextBlock.r24(r6)
|
||||||
dcbtst r8, r6
|
dcbtst r8, r6
|
||||||
@ -169,13 +173,13 @@ Save_r24_r31
|
|||||||
|
|
||||||
; ...from (ECB *)r6
|
; ...from (ECB *)r6
|
||||||
|
|
||||||
Restore_r14_r31
|
SchRestoreStartingAtR14
|
||||||
li r31, ContextBlock.r16 & -32
|
li r31, ContextBlock.r16 & -32
|
||||||
dcbt r31, r6
|
dcbt r31, r6
|
||||||
lwz r14, ContextBlock.r14(r6)
|
lwz r14, ContextBlock.r14(r6)
|
||||||
lwz r15, ContextBlock.r15(r6)
|
lwz r15, ContextBlock.r15(r6)
|
||||||
|
|
||||||
Restore_r16_r31
|
SchRestoreStartingAtR16
|
||||||
li r31, ContextBlock.r20 & -32
|
li r31, ContextBlock.r20 & -32
|
||||||
lwz r16, ContextBlock.r16(r6)
|
lwz r16, ContextBlock.r16(r6)
|
||||||
dcbt r31, r6
|
dcbt r31, r6
|
||||||
@ -183,7 +187,7 @@ Restore_r16_r31
|
|||||||
lwz r18, ContextBlock.r18(r6)
|
lwz r18, ContextBlock.r18(r6)
|
||||||
lwz r19, ContextBlock.r19(r6)
|
lwz r19, ContextBlock.r19(r6)
|
||||||
|
|
||||||
Restore_r20_r31
|
SchRestoreStartingAtR20
|
||||||
li r31, ContextBlock.r24 & -32
|
li r31, ContextBlock.r24 & -32
|
||||||
lwz r20, ContextBlock.r20(r6)
|
lwz r20, ContextBlock.r20(r6)
|
||||||
dcbt r31, r6
|
dcbt r31, r6
|
||||||
@ -191,7 +195,7 @@ Restore_r20_r31
|
|||||||
lwz r22, ContextBlock.r22(r6)
|
lwz r22, ContextBlock.r22(r6)
|
||||||
lwz r23, ContextBlock.r23(r6)
|
lwz r23, ContextBlock.r23(r6)
|
||||||
|
|
||||||
Restore_r24_r31
|
SchRestoreStartingAtR24
|
||||||
li r31, ContextBlock.r28 & -32
|
li r31, ContextBlock.r28 & -32
|
||||||
lwz r24, ContextBlock.r24(r6)
|
lwz r24, ContextBlock.r24(r6)
|
||||||
dcbt r31, r6
|
dcbt r31, r6
|
||||||
@ -699,7 +703,7 @@ Save_v0_v31_0x1b8
|
|||||||
; ARG Task *r8
|
; ARG Task *r8
|
||||||
; CLOB r16, r17, r18
|
; CLOB r16, r17, r18
|
||||||
|
|
||||||
TaskUnready
|
SchTaskUnrdy
|
||||||
|
|
||||||
lwz r17, Task.QueueMember + LLL.Next( r8)
|
lwz r17, Task.QueueMember + LLL.Next( r8)
|
||||||
lbz r18, Task.State( r8)
|
lbz r18, Task.State( r8)
|
||||||
@ -762,14 +766,12 @@ TaskUnready
|
|||||||
; ARG Task *r8
|
; ARG Task *r8
|
||||||
; CLOB r16, r17, r18
|
; CLOB r16, r17, r18
|
||||||
|
|
||||||
TaskReadyAsNext
|
SchRdyTaskLater
|
||||||
crclr cr1_eq
|
crclr cr1_eq
|
||||||
b TaskReadyCommonPath
|
b _SchRdyTaskCommon
|
||||||
|
SchRdyTaskNow ; not much point in doing this unless you then flag a scheduler evaluation
|
||||||
TaskReadyAsPrev
|
|
||||||
crset cr1_eq
|
crset cr1_eq
|
||||||
|
_SchRdyTaskCommon
|
||||||
TaskReadyCommonPath
|
|
||||||
|
|
||||||
lwz r16, Task.QueueMember + LLL.Next(r8)
|
lwz r16, Task.QueueMember + LLL.Next(r8)
|
||||||
lis r17, 0x8000 ; ...0000
|
lis r17, 0x8000 ; ...0000
|
||||||
@ -842,7 +844,7 @@ TaskReadyCommonPath
|
|||||||
|
|
||||||
; ARG AddressSpace *r8, AddressSpace *r9 (can be zero?)
|
; ARG AddressSpace *r8, AddressSpace *r9 (can be zero?)
|
||||||
|
|
||||||
SetSpaceSRsAndBATs
|
SchSwitchSpace
|
||||||
|
|
||||||
; This is the only function that hits this counter
|
; This is the only function that hits this counter
|
||||||
lwz r17, KDP.NanoKernelInfo + NKNanoKernelInfo.AddrSpcSetCtr(r1)
|
lwz r17, KDP.NanoKernelInfo + NKNanoKernelInfo.AddrSpcSetCtr(r1)
|
||||||
@ -1130,49 +1132,40 @@ SetAddrSpcRegisters_0x314:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
######## ######## ######## ## ### ## ## ## ##
|
; Always and only jumped to by IntReturn
|
||||||
## ## ## ## ## ## ## ### ## ## ##
|
|
||||||
## ## ## ## ## ## ## #### ## ####
|
SchReturn
|
||||||
######## ###### ## ## ## ## ## ## ## ##
|
|
||||||
## ## ## ## ## ######### ## #### ##
|
|
||||||
## ## ## ## ## ## ## ## ### ##
|
|
||||||
## ## ######## ## ## ## ## ## ## ##
|
|
||||||
|
|
||||||
ReturnToAnyTask ; OUTSIDE REFERER
|
|
||||||
lbz r8, EWA.SchEvalFlag(r1)
|
lbz r8, EWA.SchEvalFlag(r1)
|
||||||
rlwinm. r9, r7, 0, 16, 16
|
rlwinm. r9, r7, 0, 16, 16
|
||||||
lwz r1, EWA.PA_KDP(r1)
|
lwz r1, EWA.PA_KDP(r1)
|
||||||
cmpwi cr1, r8, 0x00
|
cmpwi cr1, r8, 0
|
||||||
|
|
||||||
bne- ReturnFromInterrupt
|
bne- SchExitInterrupt
|
||||||
beq+ cr1, ReturnFromInterrupt
|
beq+ cr1, SchExitInterrupt
|
||||||
|
|
||||||
bl Save_r14_r31
|
bl SchSaveStartingAtR14
|
||||||
_Lock PSA.SchLock, scratch1=r27, scratch2=r28
|
_Lock PSA.SchLock, scratch1=r27, scratch2=r28
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; Either fallen through from SchReturn, or jumped to by
|
||||||
|
; TrulyCommonMPCallReturnPath when it wants to block the caller
|
||||||
|
|
||||||
######## ######## ######## ## ####### ######## ## ## ######## ########
|
SchEval
|
||||||
## ## ## ## ## ## ## ## ## ## ## ## ##
|
|
||||||
## ## ## ## ## ## ## ## ## ## ## ## ##
|
|
||||||
######## ###### ## ## ## ## ## ######### ###### ########
|
|
||||||
## ## ## ## ## ## ## ## ## ## ## ## ##
|
|
||||||
## ## ## ## ## ## ## ## ## ## ## ## ##
|
|
||||||
## ## ######## ## ## ####### ## ## ## ######## ## ##
|
|
||||||
|
|
||||||
RescheduleAndReturn ; OUTSIDE REFERER
|
|
||||||
mfsprg r14, 0
|
mfsprg r14, 0
|
||||||
li r8, 0x00
|
|
||||||
|
li r8, 0
|
||||||
stb r8, EWA.SchEvalFlag(r14)
|
stb r8, EWA.SchEvalFlag(r14)
|
||||||
lwz r31, -0x0008(r14)
|
|
||||||
lwz r1, -0x0004(r14)
|
lwz r31, EWA.PA_CurTask(r14)
|
||||||
|
lwz r1, EWA.PA_KDP(r14)
|
||||||
|
|
||||||
lwz r9, KDP.NanoKernelInfo + NKNanoKernelInfo.SchEvalCount(r1)
|
lwz r9, KDP.NanoKernelInfo + NKNanoKernelInfo.SchEvalCount(r1)
|
||||||
addi r9, r9, 1
|
addi r9, r9, 1
|
||||||
stw r9, KDP.NanoKernelInfo + NKNanoKernelInfo.SchEvalCount(r1)
|
stw r9, KDP.NanoKernelInfo + NKNanoKernelInfo.SchEvalCount(r1)
|
||||||
|
|
||||||
bl major_0x14a98
|
bl SchFiddlePriorityShifty
|
||||||
lbz r27, 0x0019(r31)
|
lbz r27, 0x0019(r31)
|
||||||
blt- major_0x142dc_0x58
|
blt- major_0x142dc_0x58
|
||||||
li r26, 0x01
|
li r26, 0x01
|
||||||
@ -1183,12 +1176,13 @@ major_0x142dc_0x38
|
|||||||
cmpw r27, r26
|
cmpw r27, r26
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
beq- major_0x142dc_0x58
|
beq- major_0x142dc_0x58
|
||||||
bl TaskUnready
|
bl SchTaskUnrdy
|
||||||
stb r26, 0x0019(r31)
|
stb r26, 0x0019(r31)
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bl TaskReadyAsPrev
|
bl SchRdyTaskNow
|
||||||
bl CalculateTimeslice
|
bl CalculateTimeslice
|
||||||
|
|
||||||
|
|
||||||
major_0x142dc_0x58 ; OUTSIDE REFERER
|
major_0x142dc_0x58 ; OUTSIDE REFERER
|
||||||
lwz r27, -0x0970(r1)
|
lwz r27, -0x0970(r1)
|
||||||
|
|
||||||
@ -1290,7 +1284,7 @@ major_0x142dc_0x1bc
|
|||||||
_AssertAndRelease PSA.SchLock, scratch=r27
|
_AssertAndRelease PSA.SchLock, scratch=r27
|
||||||
|
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Restore_r14_r31
|
bl SchRestoreStartingAtR14
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -1302,7 +1296,7 @@ major_0x142dc_0x1bc
|
|||||||
## ## ## ##
|
## ## ## ##
|
||||||
## ## ## ####
|
## ## ## ####
|
||||||
|
|
||||||
; ReturnFromInterrupt
|
; SchExitInterrupt
|
||||||
|
|
||||||
; All MPCalls get here?
|
; All MPCalls get here?
|
||||||
; r0,7,8,9,10,11,12,13 restored from r6 area
|
; r0,7,8,9,10,11,12,13 restored from r6 area
|
||||||
@ -1314,8 +1308,8 @@ major_0x142dc_0x1bc
|
|||||||
|
|
||||||
; Xrefs:
|
; Xrefs:
|
||||||
; non_skeleton_reset_trap
|
; non_skeleton_reset_trap
|
||||||
; ReturnToAnyTask
|
; SchReturn
|
||||||
; RescheduleAndReturn
|
; SchEval
|
||||||
; major_0x14548
|
; major_0x14548
|
||||||
|
|
||||||
; > sprg0 = for r1 and r6
|
; > sprg0 = for r1 and r6
|
||||||
@ -1327,20 +1321,20 @@ major_0x142dc_0x1bc
|
|||||||
; > r12 = lr restore
|
; > r12 = lr restore
|
||||||
; > r13 = cr restore
|
; > r13 = cr restore
|
||||||
|
|
||||||
ReturnFromInterrupt ; OUTSIDE REFERER
|
SchExitInterrupt ; OUTSIDE REFERER
|
||||||
lwz r8, 0x0edc(r1)
|
lwz r8, 0x0edc(r1)
|
||||||
mfsprg r1, 0
|
mfsprg r1, 0
|
||||||
mtlr r12
|
mtlr r12
|
||||||
mtspr srr0, r10
|
mtspr srr0, r10
|
||||||
mtspr srr1, r11
|
mtspr srr1, r11
|
||||||
rlwinm. r8, r8, 0, 27, 27
|
rlwinm. r8, r8, 0, 27, 27
|
||||||
beq- ReturnFromInterrupt_0x2c
|
beq- SchExitInterrupt_0x2c
|
||||||
mfxer r8
|
mfxer r8
|
||||||
rlwinm r8, r8, 0, 23, 21
|
rlwinm r8, r8, 0, 23, 21
|
||||||
rlwimi r8, r7, 19, 23, 23
|
rlwimi r8, r7, 19, 23, 23
|
||||||
mtxer r8
|
mtxer r8
|
||||||
|
|
||||||
ReturnFromInterrupt_0x2c
|
SchExitInterrupt_0x2c
|
||||||
mtcr r13
|
mtcr r13
|
||||||
lwz r10, 0x0154(r6)
|
lwz r10, 0x0154(r6)
|
||||||
lwz r11, 0x015c(r6)
|
lwz r11, 0x015c(r6)
|
||||||
@ -1361,7 +1355,7 @@ ReturnFromInterrupt_0x2c
|
|||||||
; major_0x14548
|
; major_0x14548
|
||||||
|
|
||||||
; Xrefs:
|
; Xrefs:
|
||||||
; RescheduleAndReturn
|
; SchEval
|
||||||
|
|
||||||
major_0x14548 ; OUTSIDE REFERER
|
major_0x14548 ; OUTSIDE REFERER
|
||||||
lwz r16, 0x0064(r31)
|
lwz r16, 0x0064(r31)
|
||||||
@ -1418,7 +1412,7 @@ major_0x14548_0x58
|
|||||||
beq- major_0x14548_0xd4
|
beq- major_0x14548_0xd4
|
||||||
cmpwi r16, 0x00
|
cmpwi r16, 0x00
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
beql+ TaskReadyAsPrev
|
beql+ SchRdyTaskNow
|
||||||
major_0x14548_0xd4
|
major_0x14548_0xd4
|
||||||
|
|
||||||
mfsprg r19, 0
|
mfsprg r19, 0
|
||||||
@ -1449,7 +1443,7 @@ major_0x14548_0xd4
|
|||||||
cmpw r18, r9
|
cmpw r18, r9
|
||||||
beq- major_0x14548_0x148
|
beq- major_0x14548_0x148
|
||||||
mr r8, r18
|
mr r8, r18
|
||||||
bl SetSpaceSRsAndBATs
|
bl SchSwitchSpace
|
||||||
|
|
||||||
major_0x14548_0x148
|
major_0x14548_0x148
|
||||||
mfsprg r19, 0
|
mfsprg r19, 0
|
||||||
@ -1616,14 +1610,14 @@ major_0x14548_0x380
|
|||||||
; r11 = new srr1
|
; r11 = new srr1
|
||||||
; r12 = lr restore
|
; r12 = lr restore
|
||||||
; r13 = cr restore
|
; r13 = cr restore
|
||||||
b ReturnFromInterrupt
|
b SchExitInterrupt
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; major_0x148ec
|
; major_0x148ec
|
||||||
|
|
||||||
; Xrefs:
|
; Xrefs:
|
||||||
; RescheduleAndReturn
|
; SchEval
|
||||||
; major_0x14548
|
; major_0x14548
|
||||||
|
|
||||||
major_0x148ec ; OUTSIDE REFERER
|
major_0x148ec ; OUTSIDE REFERER
|
||||||
@ -1694,7 +1688,7 @@ major_0x148ec_0xc8
|
|||||||
mtxer r20
|
mtxer r20
|
||||||
li r16, 0x01
|
li r16, 0x01
|
||||||
stb r16, -0x0309(r21)
|
stb r16, -0x0309(r21)
|
||||||
b AdjustDecForTMRQGivenCurTime
|
b SetTimesliceFromCurTime
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -1709,7 +1703,7 @@ major_0x148ec_0xc8
|
|||||||
; SetEvent
|
; SetEvent
|
||||||
; MPCall_8
|
; MPCall_8
|
||||||
; major_0x130f0
|
; major_0x130f0
|
||||||
; RescheduleAndReturn
|
; SchEval
|
||||||
; major_0x14bcc
|
; major_0x14bcc
|
||||||
; CommonPIHPath
|
; CommonPIHPath
|
||||||
|
|
||||||
@ -1814,14 +1808,15 @@ clear_cr0_lt ; OUTSIDE REFERER
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
; major_0x14a98
|
; SchFiddlePriorityShifty
|
||||||
|
|
||||||
; Xrefs:
|
; Xrefs:
|
||||||
; IntDecrementer
|
; IntDecrementer
|
||||||
; RescheduleAndReturn
|
; SchEval
|
||||||
|
|
||||||
major_0x14a98 ; OUTSIDE REFERER
|
SchFiddlePriorityShifty ; OUTSIDE REFERER
|
||||||
rlwinm r8, r7, 10, 0, 0
|
|
||||||
|
rlwinm r8, r7, EWA.kFlagBlue, 0, 0
|
||||||
lwz r18, KDP.PA_ECB(r1)
|
lwz r18, KDP.PA_ECB(r1)
|
||||||
nand. r8, r8, r8
|
nand. r8, r8, r8
|
||||||
lwz r17, ContextBlock.PriorityShifty(r18)
|
lwz r17, ContextBlock.PriorityShifty(r18)
|
||||||
@ -1829,24 +1824,26 @@ major_0x14a98 ; OUTSIDE REFERER
|
|||||||
|
|
||||||
cmpwi r17, 0
|
cmpwi r17, 0
|
||||||
rlwinm r9, r17, 0, 22, 22
|
rlwinm r9, r17, 0, 22, 22
|
||||||
blt- major_0x14a98_0x54
|
blt- @pshifty_high_bit_set
|
||||||
|
|
||||||
cmpwi r9, 0x200
|
cmpwi r9, 0x200
|
||||||
lwz r16, ContextBlock.r25(r18)
|
lwz r16, ContextBlock.r25(r18)
|
||||||
beq- major_0x14a98_0x48
|
beq- @pshifty_bit_22_set
|
||||||
|
|
||||||
clrlwi r8, r16, 29
|
clrlwi r8, r16, 29
|
||||||
clrlwi r9, r17, 28
|
clrlwi r9, r17, 28
|
||||||
cmpwi r8, 6
|
cmpwi r8, 6
|
||||||
bgt- major_0x14a98_0x48
|
bgt- @pshifty_bit_22_set
|
||||||
cmpw r8, r9
|
cmpw r8, r9
|
||||||
bltlr-
|
bltlr-
|
||||||
cmpw r8, r8
|
cmpw r8, r8
|
||||||
|
|
||||||
major_0x14a98_0x48
|
@pshifty_bit_22_set
|
||||||
ori r17, r17, 0x100
|
ori r17, r17, 0x100
|
||||||
stw r17, ContextBlock.PriorityShifty(r18)
|
stw r17, ContextBlock.PriorityShifty(r18)
|
||||||
blr
|
blr
|
||||||
|
|
||||||
major_0x14a98_0x54
|
@pshifty_high_bit_set
|
||||||
clrlwi r17, r17, 1
|
clrlwi r17, r17, 1
|
||||||
stw r17, ContextBlock.PriorityShifty(r18)
|
stw r17, ContextBlock.PriorityShifty(r18)
|
||||||
blr
|
blr
|
||||||
@ -1864,71 +1861,109 @@ major_0x14a98_0x54
|
|||||||
; ARG Task *r8
|
; ARG Task *r8
|
||||||
|
|
||||||
FlagSchEvaluationIfTaskRequires ; OUTSIDE REFERER
|
FlagSchEvaluationIfTaskRequires ; OUTSIDE REFERER
|
||||||
|
|
||||||
lwz r16, Task.Flags(r8)
|
lwz r16, Task.Flags(r8)
|
||||||
mfsprg r15, 0
|
mfsprg r15, 0
|
||||||
|
|
||||||
rlwinm. r16, r16, 0, Task.kFlag25, Task.kFlag26
|
rlwinm. r16, r16, 0, Task.kFlag25, Task.kFlag26
|
||||||
bne- major_0x14af8_0xa0
|
bne- FlagSchEval
|
||||||
|
|
||||||
addi r16, r15, EWA.CPUBase
|
addi r16, r15, EWA.CPUBase
|
||||||
lbz r17, 0x0019(r8)
|
lbz r17, Task.Priority(r8)
|
||||||
lwz r19, CPU.LLL + LLL.Freeform(r16)
|
lwz r19, CPU.LLL + LLL.Freeform(r16)
|
||||||
|
|
||||||
|
|
||||||
|
; Uniprocessor systems:
|
||||||
|
; Flag a reevaluation on this, the only CPU
|
||||||
|
|
||||||
lwz r14, CoherenceGroup.ScheduledCpuCount(r19)
|
lwz r14, CoherenceGroup.ScheduledCpuCount(r19)
|
||||||
cmpwi r14, 2
|
cmpwi r14, 2
|
||||||
blt- major_0x14af8_0xa0
|
blt- FlagSchEval
|
||||||
|
|
||||||
|
|
||||||
|
; Multiprocessor systems:
|
||||||
|
; Find the best CPU to flag a
|
||||||
|
|
||||||
;multiprocessor
|
|
||||||
lwz r14, CoherenceGroup.CpuCount(r19)
|
lwz r14, CoherenceGroup.CpuCount(r19)
|
||||||
mr r18, r16
|
mr r18, r16
|
||||||
b @loopentry
|
b @loopentry
|
||||||
|
|
||||||
@34
|
; r19 = motherboard coherence group
|
||||||
lwz r16, 0x0008(r19)
|
; r14 = loop counter
|
||||||
|
; r16 = current CPU pointer
|
||||||
|
|
||||||
@38
|
@loop_hit_the_coherence_group
|
||||||
addi r16, r16, -0x08
|
lwz r16, CoherenceGroup.CPUList + LLL.Next(r19)
|
||||||
|
@loop
|
||||||
|
subi r16, r16, CPU.LLL
|
||||||
|
|
||||||
@loopentry
|
@loopentry
|
||||||
addi r14, r14, -0x01
|
subi r14, r14, 1
|
||||||
lbz r20, 0x0229(r16)
|
|
||||||
lwz r21, 0x0018(r16)
|
lbz r20, CPU.EWA + EWA.TaskPriority(r16)
|
||||||
|
lwz r21, CPU.Flags(r16)
|
||||||
|
|
||||||
cmpw cr1, r17, r20
|
cmpw cr1, r17, r20
|
||||||
rlwinm. r21, r21, 0, 28, 28
|
rlwinm. r21, r21, 0, CPU.kFlagScheduled, CPU.kFlagScheduled
|
||||||
bge- cr1, @60
|
|
||||||
beq- @60
|
bge- cr1, @cpu_not_best_for_task
|
||||||
|
beq- @cpu_not_best_for_task
|
||||||
|
|
||||||
mr r17, r20
|
mr r17, r20
|
||||||
mr r18, r16
|
mr r18, r16
|
||||||
|
@cpu_not_best_for_task
|
||||||
|
|
||||||
@60
|
lwz r16, CPU.LLL + LLL.Next(r16) ; next element
|
||||||
lwz r16, 0x0010(r16)
|
|
||||||
cmpwi cr1, r14, 0x00
|
cmpwi cr1, r14, 0
|
||||||
cmpw r16, r19
|
cmpw r16, r19
|
||||||
ble- cr1, @78
|
|
||||||
beq+ @34
|
|
||||||
b @38
|
|
||||||
|
|
||||||
@78
|
ble- cr1, @exit_loop
|
||||||
lbz r16, 0x0019(r8)
|
beq+ @loop_hit_the_coherence_group ; skip the owner of the linked list
|
||||||
|
|
||||||
|
b @loop
|
||||||
|
@exit_loop
|
||||||
|
|
||||||
|
; r17 = least-important priority being executed on any CPU
|
||||||
|
; r18 = pointer to that CPU
|
||||||
|
|
||||||
|
; No suitable CPU found (all running important-er tasks)
|
||||||
|
lbz r16, Task.Priority(r8)
|
||||||
cmpw r17, r16
|
cmpw r17, r16
|
||||||
blelr-
|
blelr-
|
||||||
|
|
||||||
|
; Was this CPU the most suitable?
|
||||||
lhz r17, EWA.CPUIndex(r15)
|
lhz r17, EWA.CPUIndex(r15)
|
||||||
lhz r18, CPU.EWA + EWA.CPUIndex(r18)
|
lhz r18, CPU.EWA + EWA.CPUIndex(r18)
|
||||||
cmpw r18, r17
|
cmpw r18, r17
|
||||||
bne- DoInterprocessorAlert
|
bne- AlertSchEvalOnOtherCPU
|
||||||
|
; otherwise fall through to FlagSchEvalOnThisCPU
|
||||||
|
|
||||||
NINETYFOUR
|
|
||||||
li r16, 0x01
|
; RETURN PATHS
|
||||||
|
|
||||||
|
; To force a scheduler evaluation to run on *this* CPU when returning from
|
||||||
|
; *this* interrupt, just raise a flag.
|
||||||
|
|
||||||
|
FlagSchEvalOnThisCPU
|
||||||
|
li r16, 1
|
||||||
stb r16, EWA.SchEvalFlag(r15)
|
stb r16, EWA.SchEvalFlag(r15)
|
||||||
blr
|
blr
|
||||||
|
|
||||||
|
|
||||||
major_0x14af8_0xa0
|
; Public function! Can go to FlagSchEvalOnThisCPU or AlertSchEvalOnOtherCPU
|
||||||
|
|
||||||
|
FlagSchEval
|
||||||
mfsprg r15, 0
|
mfsprg r15, 0
|
||||||
lhz r18, Task.CPUIndex(r8)
|
lhz r18, Task.CPUIndex(r8)
|
||||||
lhz r17, EWA.CPUIndex(r15)
|
lhz r17, EWA.CPUIndex(r15)
|
||||||
cmpw r17, r18
|
cmpw r17, r18
|
||||||
beq+ NINETYFOUR
|
beq+ FlagSchEvalOnThisCPU
|
||||||
|
|
||||||
DoInterprocessorAlert
|
|
||||||
|
; To force a scheduler evaluation to run on *another* CPU, we interrupt it
|
||||||
|
|
||||||
|
AlertSchEvalOnOtherCPU
|
||||||
lwz r9, KDP.NanoKernelInfo + NKNanoKernelInfo.AlertCount(r1)
|
lwz r9, KDP.NanoKernelInfo + NKNanoKernelInfo.AlertCount(r1)
|
||||||
addi r9, r9, 1
|
addi r9, r9, 1
|
||||||
stw r9, KDP.NanoKernelInfo + NKNanoKernelInfo.AlertCount(r1)
|
stw r9, KDP.NanoKernelInfo + NKNanoKernelInfo.AlertCount(r1)
|
||||||
@ -1938,7 +1973,7 @@ DoInterprocessorAlert
|
|||||||
stw r18, EWA.SIGPCallR4(r15)
|
stw r18, EWA.SIGPCallR4(r15)
|
||||||
|
|
||||||
li r8, 2
|
li r8, 2
|
||||||
b SIGP
|
b SIGP ; returns to link register
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -2051,7 +2086,7 @@ NewCpuEntryPoint
|
|||||||
|
|
||||||
lwz r8, Task.AddressSpacePtr(r31)
|
lwz r8, Task.AddressSpacePtr(r31)
|
||||||
li r9, 0
|
li r9, 0
|
||||||
bl SetSpaceSRsAndBATs
|
bl SchSwitchSpace
|
||||||
|
|
||||||
_log 'Adding idle task 0x'
|
_log 'Adding idle task 0x'
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
@ -2059,11 +2094,11 @@ NewCpuEntryPoint
|
|||||||
_log 'to the ready queue^n'
|
_log 'to the ready queue^n'
|
||||||
|
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bl TaskReadyAsPrev
|
bl SchRdyTaskNow
|
||||||
bl CalculateTimeslice
|
bl CalculateTimeslice
|
||||||
lwz r16, CPU.Eff(r3)
|
lwz r16, CPU.Flags(r3)
|
||||||
ori r16, r16, 8
|
ori r16, r16, 8
|
||||||
stw r16, CPU.Eff(r3)
|
stw r16, CPU.Flags(r3)
|
||||||
|
|
||||||
lwz r17, Task.QueueMember + LLL.Freeform(r3)
|
lwz r17, Task.QueueMember + LLL.Freeform(r3)
|
||||||
lwz r16, 0x0024(r17)
|
lwz r16, 0x0024(r17)
|
||||||
@ -2082,11 +2117,14 @@ NewCpuEntryPoint
|
|||||||
|
|
||||||
mr r30, r31
|
mr r30, r31
|
||||||
b major_0x142dc_0xd8
|
b major_0x142dc_0xd8
|
||||||
|
|
||||||
|
|
||||||
b major_0x142dc_0x58
|
b major_0x142dc_0x58
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
IdleCode
|
SchIdleTask
|
||||||
|
|
||||||
li r31, 0
|
li r31, 0
|
||||||
lisori r20, 'idle'
|
lisori r20, 'idle'
|
||||||
lisori r21, 'task'
|
lisori r21, 'task'
|
||||||
@ -2164,7 +2202,7 @@ IdleCode
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
StopProcessor
|
SchIdleTaskStopper
|
||||||
mfmsr r30
|
mfmsr r30
|
||||||
andi. r29, r30, 0x7fff
|
andi. r29, r30, 0x7fff
|
||||||
mtmsr r29
|
mtmsr r29
|
||||||
@ -2185,7 +2223,7 @@ StopProcessor
|
|||||||
lwz r8, 0x001c(r31)
|
lwz r8, 0x001c(r31)
|
||||||
li r9, 0x00
|
li r9, 0x00
|
||||||
stw r9, 0x001c(r31)
|
stw r9, 0x001c(r31)
|
||||||
bl TaskUnready
|
bl SchTaskUnrdy
|
||||||
addi r16, r1, -0xa44
|
addi r16, r1, -0xa44
|
||||||
addi r17, r8, 0x08
|
addi r17, r8, 0x08
|
||||||
stw r16, 0x0000(r17)
|
stw r16, 0x0000(r17)
|
||||||
@ -2201,7 +2239,7 @@ StopProcessor
|
|||||||
twi 31, r31, 8
|
twi 31, r31, 8
|
||||||
_log 'Stop didn''t work - going to sleep.^n'
|
_log 'Stop didn''t work - going to sleep.^n'
|
||||||
|
|
||||||
StopProcessor_0x10c
|
SchIdleTaskStopper_0x10c
|
||||||
lis r5, 0x7fff
|
lis r5, 0x7fff
|
||||||
ori r5, r5, 0xffff
|
ori r5, r5, 0xffff
|
||||||
mtdec r5
|
mtdec r5
|
||||||
@ -2209,4 +2247,4 @@ StopProcessor_0x10c
|
|||||||
li r3, 6
|
li r3, 6
|
||||||
li r4, 0
|
li r4, 0
|
||||||
twi 31, r31, 5
|
twi 31, r31, 5
|
||||||
b StopProcessor_0x10c
|
b SchIdleTaskStopper_0x10c
|
||||||
|
@ -374,7 +374,7 @@ RestoreKernelState_0x144
|
|||||||
mfsprg r15, 0
|
mfsprg r15, 0
|
||||||
lwz r8, -0x001c(r15)
|
lwz r8, -0x001c(r15)
|
||||||
li r9, 0x00
|
li r9, 0x00
|
||||||
bl SetSpaceSRsAndBATs
|
bl SchSwitchSpace
|
||||||
isync
|
isync
|
||||||
|
|
||||||
mfsprg r15, 0
|
mfsprg r15, 0
|
||||||
|
@ -155,7 +155,7 @@ MPDeleteQueue
|
|||||||
|
|
||||||
; Put RDYQ
|
; Put RDYQ
|
||||||
subi r8, r16, Task.QueueMember
|
subi r8, r16, Task.QueueMember
|
||||||
bl TaskReadyAsPrev
|
bl SchRdyTaskNow
|
||||||
|
|
||||||
bl FlagSchEvaluationIfTaskRequires
|
bl FlagSchEvaluationIfTaskRequires
|
||||||
|
|
||||||
@ -392,7 +392,7 @@ EnqueueMessage
|
|||||||
li r17, Task.kLatencyProtectPriority
|
li r17, Task.kLatencyProtectPriority
|
||||||
stb r17, Task.Priority(r8)
|
stb r17, Task.Priority(r8)
|
||||||
|
|
||||||
bl TaskReadyAsPrev
|
bl SchRdyTaskNow
|
||||||
bl CalculateTimeslice
|
bl CalculateTimeslice
|
||||||
|
|
||||||
bl FlagSchEvaluationIfTaskRequires
|
bl FlagSchEvaluationIfTaskRequires
|
||||||
@ -491,7 +491,7 @@ MPWaitOnQueue
|
|||||||
|
|
||||||
; Remove from ready queue
|
; Remove from ready queue
|
||||||
mr r8, r19
|
mr r8, r19
|
||||||
bl TaskUnready
|
bl SchTaskUnrdy
|
||||||
|
|
||||||
; Add to this queue
|
; Add to this queue
|
||||||
lwz r19, EWA.PA_CurTask(r30)
|
lwz r19, EWA.PA_CurTask(r30)
|
||||||
@ -711,7 +711,7 @@ MPWaitOnSemaphore
|
|||||||
;committed to blocking the calling task
|
;committed to blocking the calling task
|
||||||
|
|
||||||
; Remove from ready queue
|
; Remove from ready queue
|
||||||
bl TaskUnready
|
bl SchTaskUnrdy
|
||||||
|
|
||||||
; Add to this queue
|
; Add to this queue
|
||||||
addi r16, r31, Semaphore.BlockedTasks
|
addi r16, r31, Semaphore.BlockedTasks
|
||||||
@ -861,7 +861,7 @@ SignalSemaphore_0x30
|
|||||||
addi r8, r16, -0x08
|
addi r8, r16, -0x08
|
||||||
li r17, 0x01
|
li r17, 0x01
|
||||||
stb r17, 0x0019(r8)
|
stb r17, 0x0019(r8)
|
||||||
bl TaskReadyAsPrev
|
bl SchRdyTaskNow
|
||||||
bl CalculateTimeslice
|
bl CalculateTimeslice
|
||||||
bl FlagSchEvaluationIfTaskRequires
|
bl FlagSchEvaluationIfTaskRequires
|
||||||
mtlr r27
|
mtlr r27
|
||||||
@ -924,7 +924,7 @@ MPCall_21_0x68
|
|||||||
lwz r16, 0x0008(r31)
|
lwz r16, 0x0008(r31)
|
||||||
RemoveFromList r16, scratch1=r17, scratch2=r18
|
RemoveFromList r16, scratch1=r17, scratch2=r18
|
||||||
addi r8, r16, -0x08
|
addi r8, r16, -0x08
|
||||||
bl TaskReadyAsPrev
|
bl SchRdyTaskNow
|
||||||
bl FlagSchEvaluationIfTaskRequires
|
bl FlagSchEvaluationIfTaskRequires
|
||||||
b MPCall_21_0x34
|
b MPCall_21_0x34
|
||||||
|
|
||||||
@ -1089,7 +1089,7 @@ MPCall_27_0x78
|
|||||||
|
|
||||||
MPCall_27_0xb4
|
MPCall_27_0xb4
|
||||||
mr r8, r30
|
mr r8, r30
|
||||||
bl TaskUnready
|
bl SchTaskUnrdy
|
||||||
lis r16, 0x7fff
|
lis r16, 0x7fff
|
||||||
addi r18, r30, 0x08
|
addi r18, r30, 0x08
|
||||||
ori r16, r16, 0xffff
|
ori r16, r16, 0xffff
|
||||||
@ -1236,7 +1236,7 @@ MPCall_28_0x94
|
|||||||
stw r18, 0x00fc(r17)
|
stw r18, 0x00fc(r17)
|
||||||
li r17, 0x01
|
li r17, 0x01
|
||||||
stb r17, 0x0019(r8)
|
stb r17, 0x0019(r8)
|
||||||
bl TaskReadyAsPrev
|
bl SchRdyTaskNow
|
||||||
bl CalculateTimeslice
|
bl CalculateTimeslice
|
||||||
bl FlagSchEvaluationIfTaskRequires
|
bl FlagSchEvaluationIfTaskRequires
|
||||||
|
|
||||||
@ -1289,7 +1289,7 @@ MPCall_26_0x68
|
|||||||
lwz r16, 0x0008(r31)
|
lwz r16, 0x0008(r31)
|
||||||
RemoveFromList r16, scratch1=r17, scratch2=r18
|
RemoveFromList r16, scratch1=r17, scratch2=r18
|
||||||
addi r8, r16, -0x08
|
addi r8, r16, -0x08
|
||||||
bl TaskReadyAsPrev
|
bl SchRdyTaskNow
|
||||||
bl FlagSchEvaluationIfTaskRequires
|
bl FlagSchEvaluationIfTaskRequires
|
||||||
b MPCall_26_0x34
|
b MPCall_26_0x34
|
||||||
|
|
||||||
@ -1442,7 +1442,7 @@ MPDeleteEvent_0x68
|
|||||||
lwz r16, 0x0008(r31)
|
lwz r16, 0x0008(r31)
|
||||||
RemoveFromList r16, scratch1=r17, scratch2=r18
|
RemoveFromList r16, scratch1=r17, scratch2=r18
|
||||||
addi r8, r16, -0x08
|
addi r8, r16, -0x08
|
||||||
bl TaskReadyAsPrev
|
bl SchRdyTaskNow
|
||||||
bl FlagSchEvaluationIfTaskRequires
|
bl FlagSchEvaluationIfTaskRequires
|
||||||
b MPDeleteEvent_0x34
|
b MPDeleteEvent_0x34
|
||||||
|
|
||||||
@ -1543,7 +1543,7 @@ SetEvent
|
|||||||
li r17, Task.kLatencyProtectPriority
|
li r17, Task.kLatencyProtectPriority
|
||||||
stb r17, Task.Priority(r8)
|
stb r17, Task.Priority(r8)
|
||||||
|
|
||||||
bl TaskReadyAsPrev
|
bl SchRdyTaskNow
|
||||||
bl CalculateTimeslice
|
bl CalculateTimeslice
|
||||||
bl FlagSchEvaluationIfTaskRequires
|
bl FlagSchEvaluationIfTaskRequires
|
||||||
|
|
||||||
@ -1608,7 +1608,7 @@ SetEvent
|
|||||||
|
|
||||||
lwz r16, Task.Flags(r26)
|
lwz r16, Task.Flags(r26)
|
||||||
lbz r19, Task.State(r26)
|
lbz r19, Task.State(r26)
|
||||||
ori r16, r16, (1 << (31 - Task.kFlag27))
|
ori r16, r16, (1 << (31 - Task.kFlag68kInterrupt))
|
||||||
stw r16, Task.Flags(r26)
|
stw r16, Task.Flags(r26)
|
||||||
|
|
||||||
; But what *is* MCR?
|
; But what *is* MCR?
|
||||||
@ -1636,7 +1636,7 @@ SetEvent
|
|||||||
li r16, Task.kCriticalPriority
|
li r16, Task.kCriticalPriority
|
||||||
stb r16, Task.Priority(r26)
|
stb r16, Task.Priority(r26)
|
||||||
mr r8, r26
|
mr r8, r26
|
||||||
bl TaskReadyAsNext
|
bl SchRdyTaskLater
|
||||||
mr r8, r26
|
mr r8, r26
|
||||||
bl CalculateTimeslice
|
bl CalculateTimeslice
|
||||||
@task_already_running
|
@task_already_running
|
||||||
@ -1749,7 +1749,7 @@ MPWaitForEvent_field_10_was_zero
|
|||||||
|
|
||||||
; MOVE TASK OUT OF QUEUE AND INTO EVENT GROUP
|
; MOVE TASK OUT OF QUEUE AND INTO EVENT GROUP
|
||||||
mr r8, r19
|
mr r8, r19
|
||||||
bl TaskUnready
|
bl SchTaskUnrdy
|
||||||
|
|
||||||
lwz r19, EWA.PA_CurTask(r30)
|
lwz r19, EWA.PA_CurTask(r30)
|
||||||
addi r16, r31, EventGroup.LLL
|
addi r16, r31, EventGroup.LLL
|
||||||
@ -2610,7 +2610,7 @@ major_0x0dce8_0x60
|
|||||||
li r16, 0x01
|
li r16, 0x01
|
||||||
stb r16, 0x0019(r19)
|
stb r16, 0x0019(r19)
|
||||||
lwz r8, PSA.PA_BlueTask(r1)
|
lwz r8, PSA.PA_BlueTask(r1)
|
||||||
bl TaskReadyAsPrev
|
bl SchRdyTaskNow
|
||||||
major_0x0dce8_0x70
|
major_0x0dce8_0x70
|
||||||
|
|
||||||
lwz r8, PSA.PA_BlueTask(r1)
|
lwz r8, PSA.PA_BlueTask(r1)
|
||||||
|
@ -131,34 +131,25 @@ CreateTask
|
|||||||
|
|
||||||
|
|
||||||
; Create a semaphore struct inside the task
|
; Create a semaphore struct inside the task
|
||||||
; (NOT a semaphore queue)
|
|
||||||
|
|
||||||
addi r16, r28, Task.SemaphoreLLL
|
addi r16, r28, Task.Semaphore
|
||||||
_lstart r17, 'SEMA'
|
_lstart r17, Semaphore.kSignature
|
||||||
stw r16, LLL.Next(r16)
|
stw r16, Semaphore.BlockedTasks + LLL.Next(r16)
|
||||||
_lfinish
|
_lfinish
|
||||||
stw r16, LLL.Prev(r16)
|
stw r16, Semaphore.BlockedTasks + LLL.Prev(r16)
|
||||||
stw r17, LLL.Signature(r16)
|
stw r17, Semaphore.BlockedTasks + LLL.Signature(r16)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; Might be part of the SEMA?
|
|
||||||
|
|
||||||
li r16, 1
|
li r16, 1
|
||||||
stw r16, Task.One(r28)
|
stw r16, Task.Semaphore + Semaphore.MaxValue(r28)
|
||||||
li r16, 0
|
li r16, 0
|
||||||
stw r16, Task.Zero(r28)
|
stw r16, Task.Semaphore + Semaphore.Value(r28)
|
||||||
|
|
||||||
|
addi r8, r28, Task.Semaphore
|
||||||
|
|
||||||
; Allocate an ID for the SEMA
|
|
||||||
|
|
||||||
addi r8, r28, Task.SemaphoreLLL
|
|
||||||
li r9, Semaphore.kIDClass
|
li r9, Semaphore.kIDClass
|
||||||
bl MakeID
|
bl MakeID
|
||||||
cmpwi r8, 0
|
cmpwi r8, 0
|
||||||
beq- @fail_semq_no_id
|
beq- @fail_semq_no_id
|
||||||
stw r8, Task.SemaphoreLLL + LLL.Freeform(r28)
|
stw r8, Task.Semaphore + Semaphore.BlockedTasks + LLL.Freeform(r28)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -356,7 +347,7 @@ MPCall_8 ; OUTSIDE REFERER
|
|||||||
addi r16, r31, 0x08
|
addi r16, r31, 0x08
|
||||||
RemoveFromList r16, scratch1=r17, scratch2=r18
|
RemoveFromList r16, scratch1=r17, scratch2=r18
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bl TaskReadyAsPrev
|
bl SchRdyTaskNow
|
||||||
bl CalculateTimeslice
|
bl CalculateTimeslice
|
||||||
bl FlagSchEvaluationIfTaskRequires
|
bl FlagSchEvaluationIfTaskRequires
|
||||||
|
|
||||||
@ -403,7 +394,7 @@ MPCall_9 ; OUTSIDE REFERER
|
|||||||
li r17, 0x01
|
li r17, 0x01
|
||||||
stb r17, 0x0019(r31)
|
stb r17, 0x0019(r31)
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bl major_0x14af8_0xa0
|
bl FlagSchEval
|
||||||
_AssertAndRelease PSA.SchLock, scratch=r16
|
_AssertAndRelease PSA.SchLock, scratch=r16
|
||||||
subi r10, r10, 4
|
subi r10, r10, 4
|
||||||
b MPCall_6_0x78
|
b MPCall_6_0x78
|
||||||
@ -428,7 +419,7 @@ MPCall_9_0xe0
|
|||||||
ori r16, r16, 0x02
|
ori r16, r16, 0x02
|
||||||
stw r16, 0x0064(r31)
|
stw r16, 0x0064(r31)
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bl TaskUnready
|
bl SchTaskUnrdy
|
||||||
|
|
||||||
MPCall_9_0xf0
|
MPCall_9_0xf0
|
||||||
lwz r17, 0x009c(r31)
|
lwz r17, 0x009c(r31)
|
||||||
@ -597,7 +588,7 @@ MPCall_14 ; OUTSIDE REFERER
|
|||||||
stw r18, 0x0014(r16)
|
stw r18, 0x0014(r16)
|
||||||
beq- MPCall_14_0x70
|
beq- MPCall_14_0x70
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bl major_0x14af8_0xa0
|
bl FlagSchEval
|
||||||
|
|
||||||
MPCall_14_0x70
|
MPCall_14_0x70
|
||||||
stw r4, 0x001c(r31)
|
stw r4, 0x001c(r31)
|
||||||
@ -697,7 +688,7 @@ KCThrowException_0x70
|
|||||||
stw r4, 0x00f8(r31)
|
stw r4, 0x00f8(r31)
|
||||||
stw r16, 0x0064(r31)
|
stw r16, 0x0064(r31)
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bl TaskUnready
|
bl SchTaskUnrdy
|
||||||
addi r16, r1, -0xa34
|
addi r16, r1, -0xa34
|
||||||
addi r17, r31, 0x08
|
addi r17, r31, 0x08
|
||||||
stw r16, 0x0000(r17)
|
stw r16, 0x0000(r17)
|
||||||
@ -712,7 +703,7 @@ KCThrowException_0xb8
|
|||||||
li r17, 0x01
|
li r17, 0x01
|
||||||
stb r17, 0x0019(r31)
|
stb r17, 0x0019(r31)
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bl major_0x14af8_0xa0
|
bl FlagSchEval
|
||||||
_AssertAndRelease PSA.SchLock, scratch=r16
|
_AssertAndRelease PSA.SchLock, scratch=r16
|
||||||
subi r10, r10, 4
|
subi r10, r10, 4
|
||||||
b MPCall_6_0x78
|
b MPCall_6_0x78
|
||||||
@ -790,7 +781,7 @@ MPCall_58_0xb4
|
|||||||
addi r16, r31, 0x08
|
addi r16, r31, 0x08
|
||||||
RemoveFromList r16, scratch1=r17, scratch2=r18
|
RemoveFromList r16, scratch1=r17, scratch2=r18
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bl TaskReadyAsPrev
|
bl SchRdyTaskNow
|
||||||
bl FlagSchEvaluationIfTaskRequires
|
bl FlagSchEvaluationIfTaskRequires
|
||||||
|
|
||||||
MPCall_58_0xe0
|
MPCall_58_0xe0
|
||||||
@ -800,9 +791,9 @@ MPCall_58_0xe0
|
|||||||
|
|
||||||
|
|
||||||
FuncExportedFromTasks ; OUTSIDE REFERER
|
FuncExportedFromTasks ; OUTSIDE REFERER
|
||||||
addi r16, r1, -0xa34
|
addi r16, r1, PSA.DbugQueue
|
||||||
addi r17, r31, 0x08
|
addi r17, r31, Task.QueueMember
|
||||||
stw r16, 0x0000(r17)
|
stw r16, LLL.Freeform(r17)
|
||||||
InsertAsPrev r17, r16, scratch=r18
|
InsertAsPrev r17, r16, scratch=r18
|
||||||
li r8, 0x1c
|
li r8, 0x1c
|
||||||
bl PoolAlloc
|
bl PoolAlloc
|
||||||
@ -886,6 +877,8 @@ LoadSomeData ; OUTSIDE REFERER
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; Used to extract task state. This will be tricky.
|
||||||
|
|
||||||
DeclareMPCall 59, MPCall_59
|
DeclareMPCall 59, MPCall_59
|
||||||
|
|
||||||
MPCall_59 ; OUTSIDE REFERER
|
MPCall_59 ; OUTSIDE REFERER
|
||||||
@ -1505,8 +1498,8 @@ MPCall_114 ; OUTSIDE REFERER
|
|||||||
rlwinm. r8, r16, 0, 26, 26
|
rlwinm. r8, r16, 0, 26, 26
|
||||||
mr r8, r31
|
mr r8, r31
|
||||||
bne- MPCall_114_0x90
|
bne- MPCall_114_0x90
|
||||||
bl TaskUnready
|
bl SchTaskUnrdy
|
||||||
bl TaskReadyAsPrev
|
bl SchRdyTaskNow
|
||||||
|
|
||||||
MPCall_114_0x90
|
MPCall_114_0x90
|
||||||
bl FlagSchEvaluationIfTaskRequires
|
bl FlagSchEvaluationIfTaskRequires
|
||||||
|
@ -68,7 +68,7 @@
|
|||||||
; major_0x129cc
|
; major_0x129cc
|
||||||
; Local_Panic
|
; Local_Panic
|
||||||
; Local_Panic
|
; Local_Panic
|
||||||
; RescheduleAndReturn
|
; SchEval
|
||||||
; major_0x14548
|
; major_0x14548
|
||||||
; Local_Panic
|
; Local_Panic
|
||||||
; CommonPIHPath
|
; CommonPIHPath
|
||||||
|
@ -239,7 +239,7 @@ TimerDispatch_0x180:
|
|||||||
TimerDispatch_0x188
|
TimerDispatch_0x188
|
||||||
lwz r19, EWA.TimerDispatchLR(r18)
|
lwz r19, EWA.TimerDispatchLR(r18)
|
||||||
mtlr r19
|
mtlr r19
|
||||||
b AdjustDecForTMRQGivenCurTimeAndTripTime
|
b SetTimesliceFromCurTimeAndTripTime
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -255,8 +255,8 @@ StartTimeslicing ; OUTSIDE REFERER
|
|||||||
stb r8, EWA.GlobalTimeIsValid(r19)
|
stb r8, EWA.GlobalTimeIsValid(r19)
|
||||||
|
|
||||||
li r8, 0
|
li r8, 0
|
||||||
stw r8, -0x02e8(r19)
|
stw r8, EWA.GlobalTime(r19)
|
||||||
stw r8, -0x02e4(r19)
|
stw r8, EWA.GlobalTime + 4(r19)
|
||||||
|
|
||||||
mflr r19
|
mflr r19
|
||||||
_log 'Starting timeslicing^n'
|
_log 'Starting timeslicing^n'
|
||||||
@ -267,7 +267,7 @@ StartTimeslicing ; OUTSIDE REFERER
|
|||||||
|
|
||||||
; CLOB r8/r9, r16-r21
|
; CLOB r8/r9, r16-r21
|
||||||
|
|
||||||
AdjustDecForTMRQ
|
SetTimeslice
|
||||||
|
|
||||||
mflr r19
|
mflr r19
|
||||||
bl GetTime
|
bl GetTime
|
||||||
@ -279,7 +279,7 @@ AdjustDecForTMRQ
|
|||||||
; ARG TimeBase r8/r9 curTime
|
; ARG TimeBase r8/r9 curTime
|
||||||
; CLOB r16-r21
|
; CLOB r16-r21
|
||||||
|
|
||||||
AdjustDecForTMRQGivenCurTime
|
SetTimesliceFromCurTime
|
||||||
|
|
||||||
; This should get the most distant time???
|
; This should get the most distant time???
|
||||||
lwz r18, PSA.TimerQueue + LLL.Next(r1)
|
lwz r18, PSA.TimerQueue + LLL.Next(r1)
|
||||||
@ -292,7 +292,7 @@ AdjustDecForTMRQGivenCurTime
|
|||||||
; ARG TimeBase r8/r9 curTime, TimeBase r16/r17 TripTime
|
; ARG TimeBase r8/r9 curTime, TimeBase r16/r17 TripTime
|
||||||
; CLOB r18-r21
|
; CLOB r18-r21
|
||||||
|
|
||||||
AdjustDecForTMRQGivenCurTimeAndTripTime
|
SetTimesliceFromCurTimeAndTripTime
|
||||||
|
|
||||||
mfxer r20
|
mfxer r20
|
||||||
mfsprg r19, 0
|
mfsprg r19, 0
|
||||||
@ -372,7 +372,7 @@ TimerFire1 ; OUTSIDE REFERER
|
|||||||
RemoveFromList r16, scratch1=r17, scratch2=r19
|
RemoveFromList r16, scratch1=r17, scratch2=r19
|
||||||
li r17, 0x01
|
li r17, 0x01
|
||||||
stb r17, 0x0019(r8)
|
stb r17, 0x0019(r8)
|
||||||
bl TaskReadyAsPrev
|
bl SchRdyTaskNow
|
||||||
bl CalculateTimeslice
|
bl CalculateTimeslice
|
||||||
bl FlagSchEvaluationIfTaskRequires
|
bl FlagSchEvaluationIfTaskRequires
|
||||||
b TimerDispatch_0x144
|
b TimerDispatch_0x144
|
||||||
@ -442,7 +442,7 @@ TimerFire2_0x98
|
|||||||
lwz r8, 0x0018(r30)
|
lwz r8, 0x0018(r30)
|
||||||
addi r16, r8, 0x08
|
addi r16, r8, 0x08
|
||||||
RemoveFromList r16, scratch1=r17, scratch2=r18
|
RemoveFromList r16, scratch1=r17, scratch2=r18
|
||||||
bl TaskReadyAsPrev
|
bl SchRdyTaskNow
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -539,7 +539,7 @@ TimerFire4_0x10 ; OUTSIDE REFERER
|
|||||||
mfsprg r28, 0
|
mfsprg r28, 0
|
||||||
lwz r29, -0x0008(r28)
|
lwz r29, -0x0008(r28)
|
||||||
mr r8, r29
|
mr r8, r29
|
||||||
bl TaskUnready
|
bl SchTaskUnrdy
|
||||||
lbz r17, 0x0019(r29)
|
lbz r17, 0x0019(r29)
|
||||||
cmpwi r17, 0x02
|
cmpwi r17, 0x02
|
||||||
bge- TimerFire4_0x64
|
bge- TimerFire4_0x64
|
||||||
@ -549,7 +549,7 @@ TimerFire4_0x10 ; OUTSIDE REFERER
|
|||||||
bl clear_cr0_lt
|
bl clear_cr0_lt
|
||||||
bge- TimerFire4_0x50
|
bge- TimerFire4_0x50
|
||||||
mr r8, r29
|
mr r8, r29
|
||||||
bl TaskReadyAsPrev
|
bl SchRdyTaskNow
|
||||||
bl CalculateTimeslice
|
bl CalculateTimeslice
|
||||||
b TimerFire5_0x8
|
b TimerFire5_0x8
|
||||||
|
|
||||||
@ -557,7 +557,7 @@ TimerFire4_0x50
|
|||||||
li r18, 0x02
|
li r18, 0x02
|
||||||
stb r18, 0x0019(r29)
|
stb r18, 0x0019(r29)
|
||||||
mr r8, r29
|
mr r8, r29
|
||||||
bl TaskReadyAsPrev
|
bl SchRdyTaskNow
|
||||||
b TimerFire5_0x8
|
b TimerFire5_0x8
|
||||||
|
|
||||||
TimerFire4_0x64
|
TimerFire4_0x64
|
||||||
@ -572,7 +572,7 @@ TimerFire4_0x64
|
|||||||
; TimerFire4
|
; TimerFire4
|
||||||
|
|
||||||
TimerFire5 ; OUTSIDE REFERER
|
TimerFire5 ; OUTSIDE REFERER
|
||||||
bl TaskReadyAsPrev
|
bl SchRdyTaskNow
|
||||||
bl major_0x149d4
|
bl major_0x149d4
|
||||||
|
|
||||||
TimerFire5_0x8 ; OUTSIDE REFERER
|
TimerFire5_0x8 ; OUTSIDE REFERER
|
||||||
@ -844,7 +844,7 @@ EnqueueTimer ; OUTSIDE REFERER
|
|||||||
stw r8, LLL.Next(r20) ; next of considered = me
|
stw r8, LLL.Next(r20) ; next of considered = me
|
||||||
stw r19, LLL.Freeform(r8) ; my freeform = my original freeform
|
stw r19, LLL.Freeform(r8) ; my freeform = my original freeform
|
||||||
|
|
||||||
b AdjustDecForTMRQ
|
b SetTimeslice
|
||||||
|
|
||||||
@insert_further_ahead
|
@insert_further_ahead
|
||||||
lwz r20, PSA.TimerQueue + TimerQueueStruct.LLL + LLL.Prev(r1)
|
lwz r20, PSA.TimerQueue + TimerQueueStruct.LLL + LLL.Prev(r1)
|
||||||
@ -898,7 +898,7 @@ DequeueTimer
|
|||||||
cmpw r18, r8
|
cmpw r18, r8
|
||||||
stb r16, Timer.Byte3(r8)
|
stb r16, Timer.Byte3(r8)
|
||||||
|
|
||||||
beq+ AdjustDecForTMRQ
|
beq+ SetTimeslice
|
||||||
|
|
||||||
blr
|
blr
|
||||||
|
|
||||||
@ -912,7 +912,7 @@ DequeueTimer
|
|||||||
; MPCall_27
|
; MPCall_27
|
||||||
; MPCall_52
|
; MPCall_52
|
||||||
; MPCall_31
|
; MPCall_31
|
||||||
; InitRDYQs
|
; SchInit
|
||||||
|
|
||||||
; Get the number of timebase ticks in a specified period
|
; Get the number of timebase ticks in a specified period
|
||||||
|
|
||||||
@ -958,8 +958,8 @@ TimebaseTicksPerPeriod
|
|||||||
; MPCall_32
|
; MPCall_32
|
||||||
; CreateTask
|
; CreateTask
|
||||||
; InitTMRQs
|
; InitTMRQs
|
||||||
; AdjustDecForTMRQ
|
; SetTimeslice
|
||||||
; RescheduleAndReturn
|
; SchEval
|
||||||
; major_0x14548
|
; major_0x14548
|
||||||
|
|
||||||
; RET long r8 tbu, long r9 tbl
|
; RET long r8 tbu, long r9 tbl
|
||||||
|
@ -2253,12 +2253,8 @@ ProbePerfMonitor_0x188
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
; FDP_1214
|
FDPEmulateInstruction
|
||||||
|
|
||||||
; Xrefs:
|
|
||||||
; IntProgram
|
|
||||||
|
|
||||||
FDP_1214 ; OUTSIDE REFERER
|
|
||||||
mfsprg r1, 0
|
mfsprg r1, 0
|
||||||
lwz r8, 0x0104(r6)
|
lwz r8, 0x0104(r6)
|
||||||
stw r8, 0x0000(r1)
|
stw r8, 0x0000(r1)
|
||||||
|
@ -462,7 +462,7 @@ VMInit_0x29c
|
|||||||
mfsprg r9, 0
|
mfsprg r9, 0
|
||||||
|
|
||||||
lwz r6, EWA.PA_ContextBlock(r9)
|
lwz r6, EWA.PA_ContextBlock(r9)
|
||||||
bl Save_r14_r31 ; need some registers
|
bl SchSaveStartingAtR14 ; need some registers
|
||||||
|
|
||||||
lwz r8, EWA.PA_CurAddressSpace(r9)
|
lwz r8, EWA.PA_CurAddressSpace(r9)
|
||||||
li r9, 0
|
li r9, 0
|
||||||
@ -495,7 +495,7 @@ VMInit_0x29c
|
|||||||
bl printw
|
bl printw
|
||||||
_log '^n'
|
_log '^n'
|
||||||
|
|
||||||
bl Restore_r14_r31
|
bl SchRestoreStartingAtR14
|
||||||
|
|
||||||
b VMReturn0
|
b VMReturn0
|
||||||
|
|
||||||
@ -562,7 +562,7 @@ VMGetPhysicalPage ; OUTSIDE REFERER
|
|||||||
lwz r6, -0x0014(r9)
|
lwz r6, -0x0014(r9)
|
||||||
|
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Save_r14_r31
|
bl SchSaveStartingAtR14
|
||||||
; r8 = sprg0 (not used by me)
|
; r8 = sprg0 (not used by me)
|
||||||
|
|
||||||
slwi r29, r4, 12
|
slwi r29, r4, 12
|
||||||
@ -574,7 +574,7 @@ VMGetPhysicalPage ; OUTSIDE REFERER
|
|||||||
|
|
||||||
VMGetPhysicalPage_0x28
|
VMGetPhysicalPage_0x28
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Restore_r14_r31
|
bl SchRestoreStartingAtR14
|
||||||
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
||||||
|
|
||||||
VMGetPhysicalPage_0x30
|
VMGetPhysicalPage_0x30
|
||||||
@ -595,7 +595,7 @@ getPTEntryGivenPage ; OUTSIDE REFERER
|
|||||||
lwz r6, -0x0014(r9)
|
lwz r6, -0x0014(r9)
|
||||||
|
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Save_r14_r31
|
bl SchSaveStartingAtR14
|
||||||
; r8 = sprg0 (not used by me)
|
; r8 = sprg0 (not used by me)
|
||||||
|
|
||||||
slwi r29, r4, 12
|
slwi r29, r4, 12
|
||||||
@ -617,7 +617,7 @@ getPTEntryGivenPage_0x3c
|
|||||||
|
|
||||||
getPTEntryGivenPage_0x48
|
getPTEntryGivenPage_0x48
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Restore_r14_r31
|
bl SchRestoreStartingAtR14
|
||||||
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
||||||
|
|
||||||
getPTEntryGivenPage_0x50
|
getPTEntryGivenPage_0x50
|
||||||
@ -698,12 +698,12 @@ major_0x08d88_0x8c
|
|||||||
|
|
||||||
major_0x08d88_0xa8 ; OUTSIDE REFERER
|
major_0x08d88_0xa8 ; OUTSIDE REFERER
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Restore_r14_r31
|
bl SchRestoreStartingAtR14
|
||||||
b VMReturnMinus1
|
b VMReturnMinus1
|
||||||
|
|
||||||
major_0x08d88_0xb0 ; OUTSIDE REFERER
|
major_0x08d88_0xb0 ; OUTSIDE REFERER
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Restore_r14_r31
|
bl SchRestoreStartingAtR14
|
||||||
b VMReturn
|
b VMReturn
|
||||||
|
|
||||||
|
|
||||||
@ -730,7 +730,7 @@ VMIsResident ; OUTSIDE REFERER
|
|||||||
lwz r6, -0x0014(r9)
|
lwz r6, -0x0014(r9)
|
||||||
|
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Save_r14_r31
|
bl SchSaveStartingAtR14
|
||||||
; r8 = sprg0 (not used by me)
|
; r8 = sprg0 (not used by me)
|
||||||
|
|
||||||
slwi r29, r4, 12
|
slwi r29, r4, 12
|
||||||
@ -742,7 +742,7 @@ VMIsResident ; OUTSIDE REFERER
|
|||||||
|
|
||||||
VMIsResident_0x28
|
VMIsResident_0x28
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Restore_r14_r31
|
bl SchRestoreStartingAtR14
|
||||||
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
||||||
|
|
||||||
VMIsResident_0x30
|
VMIsResident_0x30
|
||||||
@ -875,13 +875,13 @@ VMMakePageCacheable_0x40
|
|||||||
lwz r6, -0x0014(r6)
|
lwz r6, -0x0014(r6)
|
||||||
|
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Save_r14_r31
|
bl SchSaveStartingAtR14
|
||||||
; r8 = sprg0 (not used by me)
|
; r8 = sprg0 (not used by me)
|
||||||
|
|
||||||
bl major_0x08f14
|
bl major_0x08f14
|
||||||
|
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Restore_r14_r31
|
bl SchRestoreStartingAtR14
|
||||||
lwz r5, 0x000c(r15)
|
lwz r5, 0x000c(r15)
|
||||||
andi. r6, r5, 0xe01
|
andi. r6, r5, 0xe01
|
||||||
cmpwi r6, 0xa01
|
cmpwi r6, 0xa01
|
||||||
@ -950,13 +950,13 @@ VMMakePageWriteThrough_0x3c
|
|||||||
lwz r6, -0x0014(r6)
|
lwz r6, -0x0014(r6)
|
||||||
|
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Save_r14_r31
|
bl SchSaveStartingAtR14
|
||||||
; r8 = sprg0 (not used by me)
|
; r8 = sprg0 (not used by me)
|
||||||
|
|
||||||
bl major_0x08f14
|
bl major_0x08f14
|
||||||
|
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Restore_r14_r31
|
bl SchRestoreStartingAtR14
|
||||||
lwz r5, 0x000c(r15)
|
lwz r5, 0x000c(r15)
|
||||||
andi. r6, r5, 0xe01
|
andi. r6, r5, 0xe01
|
||||||
cmpwi r6, 0xa01
|
cmpwi r6, 0xa01
|
||||||
@ -1119,13 +1119,13 @@ VMMakePageNonCacheable_0x78
|
|||||||
lwz r6, -0x0014(r6)
|
lwz r6, -0x0014(r6)
|
||||||
|
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Save_r14_r31
|
bl SchSaveStartingAtR14
|
||||||
; r8 = sprg0 (not used by me)
|
; r8 = sprg0 (not used by me)
|
||||||
|
|
||||||
bl major_0x08f14
|
bl major_0x08f14
|
||||||
|
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Restore_r14_r31
|
bl SchRestoreStartingAtR14
|
||||||
lwz r5, 0x0004(r15)
|
lwz r5, 0x0004(r15)
|
||||||
srwi r6, r5, 12
|
srwi r6, r5, 12
|
||||||
cmpw r6, r4
|
cmpw r6, r4
|
||||||
@ -1172,7 +1172,7 @@ VMMarkBacking ; OUTSIDE REFERER
|
|||||||
lwz r6, -0x0014(r9)
|
lwz r6, -0x0014(r9)
|
||||||
|
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Save_r14_r31
|
bl SchSaveStartingAtR14
|
||||||
; r8 = sprg0 (not used by me)
|
; r8 = sprg0 (not used by me)
|
||||||
|
|
||||||
slwi r29, r4, 12
|
slwi r29, r4, 12
|
||||||
@ -1196,7 +1196,7 @@ VMMarkBacking_0x30
|
|||||||
|
|
||||||
VMMarkBacking_0x50
|
VMMarkBacking_0x50
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Restore_r14_r31
|
bl SchRestoreStartingAtR14
|
||||||
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
||||||
|
|
||||||
VMMarkBacking_0x58
|
VMMarkBacking_0x58
|
||||||
@ -1277,7 +1277,7 @@ VMMarkResident ; OUTSIDE REFERER
|
|||||||
lwz r6, -0x0014(r9)
|
lwz r6, -0x0014(r9)
|
||||||
|
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Save_r14_r31
|
bl SchSaveStartingAtR14
|
||||||
; r8 = sprg0 (not used by me)
|
; r8 = sprg0 (not used by me)
|
||||||
|
|
||||||
slwi r29, r4, 12
|
slwi r29, r4, 12
|
||||||
@ -1299,7 +1299,7 @@ VMMarkResident ; OUTSIDE REFERER
|
|||||||
|
|
||||||
VMMarkResident_0x50
|
VMMarkResident_0x50
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Restore_r14_r31
|
bl SchRestoreStartingAtR14
|
||||||
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
||||||
|
|
||||||
VMMarkResident_0x58
|
VMMarkResident_0x58
|
||||||
@ -1348,7 +1348,7 @@ setPTEntryGivenPage ; OUTSIDE REFERER
|
|||||||
lwz r6, -0x0014(r9)
|
lwz r6, -0x0014(r9)
|
||||||
|
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Save_r14_r31
|
bl SchSaveStartingAtR14
|
||||||
; r8 = sprg0 (not used by me)
|
; r8 = sprg0 (not used by me)
|
||||||
|
|
||||||
mr r26, r4
|
mr r26, r4
|
||||||
@ -1375,7 +1375,7 @@ setPTEntryGivenPage_0x34
|
|||||||
|
|
||||||
setPTEntryGivenPage_0x5c
|
setPTEntryGivenPage_0x5c
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Restore_r14_r31
|
bl SchRestoreStartingAtR14
|
||||||
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
lwz r9, KDP.PrimaryAddrRangePages(r1)
|
||||||
|
|
||||||
setPTEntryGivenPage_0x64
|
setPTEntryGivenPage_0x64
|
||||||
@ -1562,7 +1562,7 @@ VMAllocateMemory_0x1a4
|
|||||||
lwz r6, -0x0014(r6)
|
lwz r6, -0x0014(r6)
|
||||||
|
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Save_r14_r31
|
bl SchSaveStartingAtR14
|
||||||
; r8 = sprg0 (not used by me)
|
; r8 = sprg0 (not used by me)
|
||||||
|
|
||||||
mr r30, r14
|
mr r30, r14
|
||||||
@ -1631,7 +1631,7 @@ VMAllocateMemory_0x1a4
|
|||||||
|
|
||||||
VMAllocateMemory_0x2e0
|
VMAllocateMemory_0x2e0
|
||||||
; r6 = ewa
|
; r6 = ewa
|
||||||
bl Restore_r14_r31
|
bl SchRestoreStartingAtR14
|
||||||
b VMReturn1
|
b VMReturn1
|
||||||
|
|
||||||
VMAllocateMemory_0x2e8
|
VMAllocateMemory_0x2e8
|
||||||
|
Loading…
x
Reference in New Issue
Block a user