1003 lines
16 KiB
ArmAsm
1003 lines
16 KiB
ArmAsm
Local_Panic set *
|
|
b panic
|
|
|
|
|
|
|
|
; InitTMRQs
|
|
|
|
; Xrefs:
|
|
; setup
|
|
|
|
InitTMRQs ; OUTSIDE REFERER
|
|
addi r9, r1, -0xa84
|
|
lis r8, 0x544d
|
|
ori r8, r8, 0x5251
|
|
stw r8, 0x0004(r9)
|
|
stw r9, 0x0008(r9)
|
|
stw r9, 0x000c(r9)
|
|
li r8, 0x00
|
|
stb r8, 0x0014(r9)
|
|
li r8, 0x01
|
|
stb r8, 0x0016(r9)
|
|
stb r8, 0x0017(r9)
|
|
lis r8, 0x7fff
|
|
ori r8, r8, 0xffff
|
|
mtspr dec, r8
|
|
stw r8, 0x0038(r9)
|
|
oris r8, r8, 0xffff
|
|
stw r8, 0x003c(r9)
|
|
mfspr r8, pvr
|
|
rlwinm. r8, r8, 0, 0, 14
|
|
beq- InitTMRQs_0x7c
|
|
mflr r30
|
|
li r8, 0x40
|
|
|
|
; r1 = kdp
|
|
; r8 = size
|
|
bl PoolAlloc
|
|
; r8 = ptr
|
|
|
|
mr. r31, r8
|
|
beq+ Local_Panic
|
|
stw r31, -0x0434(r1)
|
|
li r9, 0x07
|
|
stb r9, 0x0014(r31)
|
|
li r9, 0x01
|
|
stb r9, 0x0016(r31)
|
|
mtlr r30
|
|
|
|
InitTMRQs_0x7c
|
|
mfspr r8, pvr
|
|
rlwinm. r8, r8, 0, 0, 14
|
|
beq- InitTMRQs_0xb4
|
|
mflr r30
|
|
li r8, 0x40
|
|
|
|
; r1 = kdp
|
|
; r8 = size
|
|
bl PoolAlloc
|
|
; r8 = ptr
|
|
|
|
mr. r31, r8
|
|
beq+ Local_Panic
|
|
stw r31, -0x0364(r1)
|
|
li r9, 0x08
|
|
stb r9, 0x0014(r31)
|
|
li r9, 0x01
|
|
stb r9, 0x0016(r31)
|
|
mtlr r30
|
|
|
|
InitTMRQs_0xb4
|
|
lwz r30, 0x0630(r1)
|
|
lhz r31, 0x0378(r30)
|
|
cmplwi r31, 0x101
|
|
blt- InitTMRQs_0x140
|
|
lwz r31, 0x0388(r30)
|
|
clrlwi. r8, r31, 0x1f
|
|
beq- InitTMRQs_0x140
|
|
lwz r8, 0x0edc(r1)
|
|
ori r8, r8, 0x02
|
|
stw r8, 0x0edc(r1)
|
|
mflr r30
|
|
li r8, 0x40
|
|
|
|
; r1 = kdp
|
|
; r8 = size
|
|
bl PoolAlloc
|
|
; r8 = ptr
|
|
|
|
mr. r31, r8
|
|
beq+ Local_Panic
|
|
li r9, 0x06
|
|
stb r9, 0x0014(r31)
|
|
li r9, 0x01
|
|
stb r9, 0x0016(r31)
|
|
bl GetTime
|
|
stw r8, 0x0038(r31)
|
|
stw r9, 0x003c(r31)
|
|
mr r8, r31
|
|
bl called_by_init_tmrqs
|
|
_log 'Nanodebugger activated.^n'
|
|
mtlr r30
|
|
|
|
InitTMRQs_0x140
|
|
blr
|
|
|
|
|
|
|
|
; TimerDispatch
|
|
|
|
; Xrefs:
|
|
; IntDecrementer
|
|
; major_0x130f0
|
|
|
|
TimerTable
|
|
|
|
dc.l major_0x130f0 - NKTop
|
|
dc.l major_0x13120 - NKTop
|
|
dc.l major_0x1318c - NKTop
|
|
dc.l major_0x1324c - NKTop
|
|
dc.l major_0x132e8 - NKTop
|
|
dc.l major_0x13350 - NKTop
|
|
dc.l major_0x135b8 - NKTop
|
|
dc.l major_0x134bc - NKTop
|
|
dc.l major_0x13524 - NKTop
|
|
|
|
TimerDispatch ; OUTSIDE REFERER
|
|
mflr r19
|
|
mfsprg r18, 0
|
|
stw r19, -0x0258(r18)
|
|
|
|
TimerDispatch_0x30 ; OUTSIDE REFERER
|
|
mfspr r8, pvr
|
|
rlwinm. r8, r8, 0, 0, 14
|
|
beq- TimerDispatch_0x54
|
|
|
|
TimerDispatch_0x3c
|
|
mftbu r8
|
|
mftb r9
|
|
mftbu r16
|
|
cmpw r8, r16
|
|
bne- TimerDispatch_0x3c
|
|
b TimerDispatch_0x90
|
|
|
|
TimerDispatch_0x54
|
|
mfspr r8, rtcu
|
|
mfspr r9, rtcl
|
|
mfspr r16, rtcu
|
|
cmpw r8, r16
|
|
bne- TimerDispatch_0x54
|
|
lis r16, 0x3b9a
|
|
ori r16, r16, 0xca00
|
|
mfspr r17, mq
|
|
dc.l 0x7d1040d6
|
|
mfspr r16, mq
|
|
mtspr mq, r17
|
|
mfxer r17
|
|
addc r9, r16, r9
|
|
addze r8, r8
|
|
mtxer r17
|
|
|
|
TimerDispatch_0x90
|
|
lbz r19, -0x0309(r18)
|
|
addi r30, r18, -0x320
|
|
cmpwi r19, 0x01
|
|
lwz r16, 0x0038(r30)
|
|
bne- TimerDispatch_0xcc
|
|
lwz r17, 0x003c(r30)
|
|
cmpw r16, r8
|
|
cmplw cr1, r17, r9
|
|
bgt- TimerDispatch_0xcc
|
|
blt- TimerDispatch_0xbc
|
|
bgt- cr1, TimerDispatch_0xcc
|
|
|
|
TimerDispatch_0xbc
|
|
li r19, 0x00
|
|
stw r30, -0x0254(r18)
|
|
stb r19, 0x0017(r30)
|
|
b major_0x132e8_0x10
|
|
|
|
TimerDispatch_0xcc
|
|
lwz r30, -0x0a7c(r1)
|
|
lwz r16, 0x0038(r30)
|
|
lwz r17, 0x003c(r30)
|
|
cmpw r16, r8
|
|
cmplw cr1, r17, r9
|
|
bgt- TimerDispatch_0x188
|
|
blt- TimerDispatch_0xec
|
|
bgt- cr1, TimerDispatch_0x188
|
|
|
|
TimerDispatch_0xec
|
|
lwz r19, 0x0008(r30)
|
|
lwz r20, 0x000c(r30)
|
|
stw r19, 0x0008(r20)
|
|
stw r20, 0x000c(r19)
|
|
li r19, 0x00
|
|
stw r19, 0x0008(r30)
|
|
stw r19, 0x000c(r30)
|
|
lwz r19, 0x064c(r1)
|
|
lbz r20, 0x0014(r30)
|
|
rlwimi r19, r20, 2, 23, 29
|
|
cmplwi r20, 0x09
|
|
llabel r20, TimerTable
|
|
li r21, 0x00
|
|
add r20, r20, r19
|
|
bgel+ Local_Panic
|
|
stb r21, 0x0017(r30)
|
|
lwz r20, 0x0000(r20)
|
|
add r20, r20, r19
|
|
mtlr r20
|
|
stw r30, -0x0254(r18)
|
|
blr
|
|
|
|
TimerDispatch_0x144
|
|
mfsprg r18, 0
|
|
lwz r30, -0x0254(r18)
|
|
lbz r19, 0x0016(r30)
|
|
cmpwi r19, 0x01
|
|
lwz r8, 0x0000(r30)
|
|
beq+ TimerDispatch_0x30
|
|
bl DeleteID
|
|
mr r8, r30
|
|
bl PoolFree
|
|
lwz r8, 0x001c(r30)
|
|
cmpwi r8, 0x00
|
|
beq- TimerDispatch_0x180
|
|
bl PoolFree
|
|
li r8, 0x00
|
|
stw r8, 0x001c(r30)
|
|
|
|
TimerDispatch_0x180:
|
|
mfsprg r18, 0
|
|
b TimerDispatch_0x30
|
|
|
|
TimerDispatch_0x188
|
|
lwz r19, -0x0258(r18)
|
|
mtlr r19
|
|
b major_0x13060_0x18
|
|
|
|
|
|
|
|
; StartTimeslicing
|
|
|
|
; Xrefs:
|
|
; setup
|
|
|
|
StartTimeslicing ; OUTSIDE REFERER
|
|
mfsprg r19, 0
|
|
|
|
li r8, 1
|
|
stb r8, -0x0309(r19)
|
|
|
|
li r8, 0
|
|
stw r8, -0x02e8(r19)
|
|
stw r8, -0x02e4(r19)
|
|
|
|
mflr r19
|
|
_log 'Starting timeslicing^n'
|
|
mtlr r19
|
|
|
|
|
|
|
|
; major_0x13060
|
|
|
|
; Xrefs:
|
|
; TimerDispatch
|
|
; StartTimeslicing
|
|
; called_by_init_tmrqs
|
|
; major_0x136c8
|
|
; major_0x148ec
|
|
|
|
major_0x13060 ; OUTSIDE REFERER
|
|
mflr r19
|
|
bl GetTime
|
|
mtlr r19
|
|
|
|
major_0x13060_0xc ; OUTSIDE REFERER
|
|
lwz r18, -0x0a7c(r1)
|
|
lwz r16, 0x0038(r18)
|
|
lwz r17, 0x003c(r18)
|
|
|
|
major_0x13060_0x18 ; OUTSIDE REFERER
|
|
mfxer r20
|
|
mfsprg r19, 0
|
|
lis r21, 0x7fff
|
|
lbz r18, -0x0309(r19)
|
|
ori r21, r21, 0xffff
|
|
cmpwi r18, 0x01
|
|
bne- major_0x13060_0x58
|
|
lwz r18, -0x02e8(r19)
|
|
lwz r19, -0x02e4(r19)
|
|
cmpw r16, r18
|
|
cmplw cr1, r17, r19
|
|
blt- major_0x13060_0x58
|
|
bgt- major_0x13060_0x50
|
|
ble- cr1, major_0x13060_0x58
|
|
|
|
major_0x13060_0x50
|
|
mr r17, r19
|
|
mr r16, r18
|
|
|
|
major_0x13060_0x58
|
|
subfc r17, r9, r17
|
|
subfe. r16, r8, r16
|
|
mtxer r20
|
|
blt- major_0x13060_0x84
|
|
bne- major_0x13060_0x7c
|
|
cmplw r16, r21
|
|
bgt- major_0x13060_0x7c
|
|
mtspr dec, r17
|
|
blr
|
|
|
|
major_0x13060_0x7c
|
|
mtspr dec, r21
|
|
blr
|
|
|
|
major_0x13060_0x84
|
|
mtspr dec, r21
|
|
mtspr dec, r16
|
|
blr
|
|
|
|
|
|
|
|
; major_0x130f0
|
|
|
|
; Xrefs:
|
|
; TimerDispatch
|
|
|
|
major_0x130f0 ; OUTSIDE REFERER
|
|
_log 'TimerInformation.kind is zero??^n'
|
|
|
|
|
|
|
|
; major_0x13120
|
|
|
|
; Xrefs:
|
|
; TimerDispatch
|
|
; major_0x130f0
|
|
|
|
major_0x13120 ; OUTSIDE REFERER
|
|
bl Local_Panic
|
|
lwz r18, 0x0018(r30)
|
|
stw r16, 0x0080(r18)
|
|
stw r17, 0x0084(r18)
|
|
lwz r8, 0x0018(r30)
|
|
li r16, 0x00
|
|
lbz r17, 0x0018(r8)
|
|
lwz r19, 0x0088(r8)
|
|
cmpwi r17, 0x00
|
|
stw r16, 0x011c(r19)
|
|
bne- major_0x13120_0x64
|
|
addi r16, r8, 0x08
|
|
lwz r17, 0x0008(r16)
|
|
lwz r19, 0x000c(r16)
|
|
stw r17, 0x0008(r19)
|
|
stw r19, 0x000c(r17)
|
|
li r17, 0x00
|
|
stw r17, 0x0008(r16)
|
|
stw r17, 0x000c(r16)
|
|
li r17, 0x01
|
|
stb r17, 0x0019(r8)
|
|
bl TaskReadyAsPrev
|
|
bl CalculateTimeslice
|
|
bl major_0x14af8
|
|
b TimerDispatch_0x144
|
|
|
|
major_0x13120_0x64
|
|
lwz r16, 0x0064(r8)
|
|
rlwinm. r16, r16, 0, 30, 30
|
|
|
|
|
|
|
|
; major_0x1318c
|
|
|
|
; Xrefs:
|
|
; TimerDispatch
|
|
; major_0x13120
|
|
|
|
major_0x1318c ; OUTSIDE REFERER
|
|
bne+ TimerDispatch_0x144
|
|
bl Local_Panic
|
|
lwz r18, 0x0018(r30)
|
|
stw r16, 0x0080(r18)
|
|
stw r17, 0x0084(r18)
|
|
lwz r8, 0x0018(r30)
|
|
li r16, -0x7270
|
|
lbz r17, 0x0018(r8)
|
|
lwz r18, 0x0088(r8)
|
|
cmpwi r17, 0x00
|
|
bne- major_0x1324c_0x8
|
|
stw r16, 0x011c(r18)
|
|
lwz r8, 0x0008(r8)
|
|
lwz r8, 0x0000(r8)
|
|
|
|
; r8 = id
|
|
bl LookupID
|
|
cmpwi r9, Queue.kIDClass
|
|
|
|
cmpwi cr1, r9, 0x05
|
|
beq- major_0x1318c_0x8c
|
|
beq- cr1, major_0x1318c_0x7c
|
|
cmpwi r9, 0x09
|
|
cmpwi cr1, r9, 0x06
|
|
beq- major_0x1318c_0x6c
|
|
bne+ cr1, Local_Panic
|
|
lwz r16, 0x0020(r8)
|
|
addi r16, r16, -0x01
|
|
stw r16, 0x0020(r8)
|
|
b major_0x1318c_0x98
|
|
|
|
major_0x1318c_0x6c
|
|
lwz r16, 0x001c(r8)
|
|
addi r16, r16, -0x01
|
|
stw r16, 0x001c(r8)
|
|
b major_0x1318c_0x98
|
|
|
|
major_0x1318c_0x7c
|
|
lwz r16, 0x001c(r8)
|
|
addi r16, r16, -0x01
|
|
stw r16, 0x001c(r8)
|
|
b major_0x1318c_0x98
|
|
|
|
major_0x1318c_0x8c
|
|
lwz r16, 0x002c(r8)
|
|
addi r16, r16, -0x01
|
|
stw r16, 0x002c(r8)
|
|
|
|
major_0x1318c_0x98
|
|
lwz r8, 0x0018(r30)
|
|
addi r16, r8, 0x08
|
|
lwz r17, 0x0008(r16)
|
|
lwz r18, 0x000c(r16)
|
|
stw r17, 0x0008(r18)
|
|
stw r18, 0x000c(r17)
|
|
li r17, 0x00
|
|
stw r17, 0x0008(r16)
|
|
stw r17, 0x000c(r16)
|
|
bl TaskReadyAsPrev
|
|
|
|
|
|
|
|
; major_0x1324c
|
|
|
|
; Xrefs:
|
|
; TimerDispatch
|
|
; major_0x1318c
|
|
|
|
major_0x1324c ; OUTSIDE REFERER
|
|
bl major_0x14af8
|
|
b TimerDispatch_0x144
|
|
|
|
major_0x1324c_0x8 ; OUTSIDE REFERER
|
|
b Local_Panic
|
|
|
|
|
|
|
|
; major_0x13258
|
|
|
|
; Dead code -- probably removed from TimerTable
|
|
|
|
lwz r8, 0x0018(r30)
|
|
|
|
; r8 = id
|
|
bl LookupID
|
|
cmpwi r9, Queue.kIDClass
|
|
|
|
mr r31, r8
|
|
bne- major_0x13258_0x68
|
|
lwz r16, 0x0024(r31)
|
|
lwz r8, 0x001c(r30)
|
|
cmpwi r16, 0x00
|
|
cmpwi cr1, r8, 0x00
|
|
beq- major_0x13258_0x40
|
|
lwz r17, 0x0028(r31)
|
|
mr. r8, r17
|
|
lwz r17, 0x0008(r17)
|
|
beq- major_0x13258_0x68
|
|
stw r17, 0x0028(r31)
|
|
b major_0x13258_0x4c
|
|
|
|
major_0x13258_0x40
|
|
beq- cr1, major_0x13258_0x68
|
|
li r16, 0x00
|
|
stw r16, 0x001c(r30)
|
|
|
|
major_0x13258_0x4c
|
|
lwz r16, 0x0020(r30)
|
|
lwz r17, 0x0024(r30)
|
|
lwz r18, 0x0028(r30)
|
|
stw r16, 0x0010(r8)
|
|
stw r17, 0x0014(r8)
|
|
stw r18, 0x0018(r8)
|
|
bl major_0x0c8b4
|
|
|
|
major_0x13258_0x68
|
|
lwz r8, 0x0034(r30)
|
|
|
|
; r8 = id
|
|
bl LookupID
|
|
cmpwi r9, Semaphore.kIDClass
|
|
|
|
mr r31, r8
|
|
bne- major_0x13258_0x80
|
|
bl major_0x0ccf4
|
|
|
|
major_0x13258_0x80
|
|
lwz r8, 0x002c(r30)
|
|
|
|
; r8 = id
|
|
bl LookupID
|
|
cmpwi r9, EventGroup.kIDClass
|
|
|
|
mr r31, r8
|
|
|
|
|
|
|
|
; major_0x132e8
|
|
|
|
; Xrefs:
|
|
; TimerDispatch
|
|
; major_0x13258
|
|
|
|
major_0x132e8 ; OUTSIDE REFERER
|
|
bne- major_0x132e8_0xc
|
|
lwz r8, 0x0030(r30)
|
|
bl major_0x0d35c
|
|
|
|
major_0x132e8_0xc
|
|
b TimerDispatch_0x144
|
|
|
|
major_0x132e8_0x10 ; OUTSIDE REFERER
|
|
mfsprg r28, 0
|
|
lwz r29, -0x0008(r28)
|
|
mr r8, r29
|
|
bl major_0x13e4c
|
|
lbz r17, 0x0019(r29)
|
|
cmpwi r17, 0x02
|
|
bge- major_0x132e8_0x64
|
|
mr r8, r29
|
|
lwz r16, 0x0038(r30)
|
|
lwz r17, 0x003c(r30)
|
|
bl clear_cr0_lt
|
|
bge- major_0x132e8_0x50
|
|
mr r8, r29
|
|
bl TaskReadyAsPrev
|
|
bl CalculateTimeslice
|
|
b major_0x13350_0x8
|
|
|
|
major_0x132e8_0x50
|
|
li r18, 0x02
|
|
stb r18, 0x0019(r29)
|
|
mr r8, r29
|
|
bl TaskReadyAsPrev
|
|
b major_0x13350_0x8
|
|
|
|
major_0x132e8_0x64
|
|
mr r8, r29
|
|
|
|
|
|
|
|
; major_0x13350
|
|
|
|
; Xrefs:
|
|
; TimerDispatch
|
|
; major_0x132e8
|
|
|
|
major_0x13350 ; OUTSIDE REFERER
|
|
bl TaskReadyAsPrev
|
|
bl major_0x149d4
|
|
|
|
major_0x13350_0x8 ; OUTSIDE REFERER
|
|
bl major_0x14af8
|
|
mfsprg r18, 0
|
|
b TimerDispatch_0x30
|
|
|
|
|
|
|
|
; major_0x13364
|
|
|
|
; Dead code -- probably removed from TimerTable
|
|
|
|
_log 'Heartbeat: Ext '
|
|
lwz r16, 0x0e80(r1)
|
|
mr r8, r16
|
|
bl printd
|
|
_log 'Alerts '
|
|
lwz r16, 0x0ee0(r1)
|
|
mr r8, r16
|
|
bl printd
|
|
_log 'Blue cpu-'
|
|
lwz r17, -0x08f0(r1)
|
|
lhz r16, 0x001a(r17)
|
|
mr r8, r16
|
|
bl printb
|
|
_log 'state-'
|
|
lbz r16, 0x0018(r17)
|
|
mr r8, r16
|
|
bl printb
|
|
_log 'scr-'
|
|
lwz r16, 0x0658(r1)
|
|
lwz r18, 0x0674(r1)
|
|
lwz r16, 0x00dc(r16)
|
|
and r16, r16, r18
|
|
mr r8, r16
|
|
bl printw
|
|
_log 'mcr-'
|
|
lwz r16, -0x0440(r1)
|
|
mr r8, r16
|
|
bl printw
|
|
_log 'IPL-'
|
|
lwz r16, 0x067c(r1)
|
|
lhz r16, 0x0000(r16)
|
|
mr r8, r16
|
|
bl printh
|
|
_log 'eSR-'
|
|
lwz r16, 0x0658(r1)
|
|
lwz r16, 0x01cc(r16)
|
|
andi. r16, r16, 0x07
|
|
mr r8, r16
|
|
bl printb
|
|
_log '^n'
|
|
mfxer r19
|
|
lwz r16, 0x0038(r30)
|
|
lwz r17, 0x003c(r30)
|
|
lwz r18, 0x0f2c(r1)
|
|
slwi r18, r18, 3
|
|
addc r17, r17, r18
|
|
|
|
|
|
|
|
; major_0x134bc
|
|
|
|
; Xrefs:
|
|
; TimerDispatch
|
|
; major_0x13364
|
|
|
|
major_0x134bc ; OUTSIDE REFERER
|
|
addze r16, r16
|
|
stw r16, 0x0038(r30)
|
|
stw r17, 0x003c(r30)
|
|
mtxer r19
|
|
mr r8, r30
|
|
bl called_by_init_tmrqs
|
|
b TimerDispatch_0x144
|
|
|
|
|
|
|
|
; major_0x134d8
|
|
|
|
; Dead code -- probably removed from TimerTable
|
|
|
|
lwz r18, -0x0438(r1)
|
|
lwz r19, 0x0f88(r1)
|
|
subf. r19, r18, r19
|
|
ble- major_0x13524_0x1c
|
|
srwi r19, r19, 11
|
|
mfxer r20
|
|
|
|
major_0x134d8_0x18
|
|
mftbu r16
|
|
mftb r17, 0x10c
|
|
mftbu r18
|
|
cmpw r16, r18
|
|
li r18, 0x00
|
|
bne- major_0x134d8_0x18
|
|
mttb r18
|
|
addc r17, r17, r19
|
|
addze r16, r16
|
|
mttbu r16
|
|
mttb r17
|
|
lwz r18, -0x0438(r1)
|
|
srwi r18, r18, 11
|
|
|
|
|
|
|
|
; major_0x13524
|
|
|
|
; Xrefs:
|
|
; TimerDispatch
|
|
; major_0x134d8
|
|
|
|
major_0x13524 ; OUTSIDE REFERER
|
|
addc r17, r17, r18
|
|
addze r16, r16
|
|
stw r16, 0x0038(r30)
|
|
stw r17, 0x003c(r30)
|
|
mtxer r20
|
|
mr r8, r30
|
|
bl called_by_init_tmrqs
|
|
|
|
major_0x13524_0x1c ; OUTSIDE REFERER
|
|
b TimerDispatch_0x144
|
|
|
|
|
|
|
|
; major_0x13544
|
|
|
|
; Dead code -- probably removed from TimerTable
|
|
|
|
lwz r19, -0x036c(r1)
|
|
mfxer r20
|
|
cmpwi cr1, r19, 0x00
|
|
srawi r8, r19, 31
|
|
beq- cr1, major_0x135b8_0x4
|
|
|
|
major_0x13544_0x14
|
|
mftbu r16
|
|
mftb r17, 0x10c
|
|
mftbu r18
|
|
cmpw r16, r18
|
|
li r18, 0x00
|
|
bne- major_0x13544_0x14
|
|
mttb r18
|
|
addc r19, r17, r19
|
|
adde r18, r16, r8
|
|
mttbu r18
|
|
mttb r19
|
|
bgt- cr1, major_0x13544_0x64
|
|
|
|
major_0x13544_0x44
|
|
mftbu r18
|
|
mftb r19, 0x10c
|
|
mftbu r8
|
|
cmpw r18, r8
|
|
bne- major_0x13544_0x44
|
|
subfc r19, r17, r19
|
|
subfe. r18, r16, r18
|
|
blt+ major_0x13544_0x44
|
|
|
|
major_0x13544_0x64
|
|
lwz r18, -0x0368(r1)
|
|
addc r17, r17, r18
|
|
addze r16, r16
|
|
stw r16, 0x0038(r30)
|
|
|
|
|
|
|
|
; major_0x135b8
|
|
|
|
; Xrefs:
|
|
; TimerDispatch
|
|
; major_0x13544
|
|
|
|
major_0x135b8 ; OUTSIDE REFERER
|
|
stw r17, 0x003c(r30)
|
|
|
|
major_0x135b8_0x4 ; OUTSIDE REFERER
|
|
mtxer r20
|
|
beq+ cr1, TimerDispatch_0x144
|
|
mr r8, r30
|
|
bl called_by_init_tmrqs
|
|
b TimerDispatch_0x144
|
|
|
|
|
|
|
|
; major_0x135d0
|
|
|
|
; Dead code -- probably removed from TimerTable
|
|
|
|
mfxer r19
|
|
lwz r16, 0x0038(r30)
|
|
lwz r17, 0x003c(r30)
|
|
lwz r18, 0x0f2c(r1)
|
|
srwi r18, r18, 1
|
|
addc r17, r17, r18
|
|
addze r16, r16
|
|
stw r16, 0x0038(r30)
|
|
stw r17, 0x003c(r30)
|
|
mtxer r19
|
|
mr r8, r30
|
|
bl called_by_init_tmrqs
|
|
bl getchar
|
|
cmpwi r8, -0x01
|
|
beq+ TimerDispatch_0x144
|
|
bl panic_non_interactive
|
|
b TimerDispatch_0x144
|
|
|
|
|
|
|
|
; called_by_init_tmrqs
|
|
|
|
; Xrefs:
|
|
; MPCall_55
|
|
; NKSetClockStep
|
|
; NKSetClockDriftCorrection
|
|
; MPCall_18
|
|
; MPCall_23
|
|
; MPCall_27
|
|
; MPCall_52
|
|
; MPCall_31
|
|
; InitTMRQs
|
|
|
|
; ARG KernelData *r1, TimerQueueStruct *r8
|
|
|
|
called_by_init_tmrqs ; OUTSIDE REFERER
|
|
lwz r16, 0x0038(r8)
|
|
lwz r17, 0x003c(r8)
|
|
lwz r20, PSA.TimerQueue + TimerQueueStruct.LLL + LLL.Next(r1)
|
|
lwz r18, 0x0038(r20)
|
|
lwz r19, 0x003c(r20)
|
|
cmpw r16, r18
|
|
cmplw cr1, r17, r19
|
|
bgt- called_by_init_tmrqs_0x5c
|
|
blt- called_by_init_tmrqs_0x28
|
|
bge- cr1, called_by_init_tmrqs_0x5c
|
|
|
|
called_by_init_tmrqs_0x28
|
|
addi r20, r1, -0xa84
|
|
li r18, 0x01
|
|
stb r18, 0x0017(r8)
|
|
lwz r19, 0x0000(r8)
|
|
lwz r9, 0x0000(r20)
|
|
stw r9, 0x0000(r8)
|
|
lwz r9, 0x0008(r20)
|
|
stw r9, 0x0008(r8)
|
|
stw r20, 0x000c(r8)
|
|
stw r8, 0x000c(r9)
|
|
stw r8, 0x0008(r20)
|
|
stw r19, 0x0000(r8)
|
|
b major_0x13060
|
|
|
|
called_by_init_tmrqs_0x5c
|
|
lwz r20, -0x0a78(r1)
|
|
|
|
called_by_init_tmrqs_0x60
|
|
lwz r18, 0x0038(r20)
|
|
lwz r19, 0x003c(r20)
|
|
cmpw r16, r18
|
|
cmplw cr1, r17, r19
|
|
bgt- called_by_init_tmrqs_0x84
|
|
blt- called_by_init_tmrqs_0x7c
|
|
bge- cr1, called_by_init_tmrqs_0x84
|
|
|
|
called_by_init_tmrqs_0x7c
|
|
lwz r20, 0x000c(r20)
|
|
b called_by_init_tmrqs_0x60
|
|
|
|
called_by_init_tmrqs_0x84
|
|
li r18, 0x01
|
|
stb r18, 0x0017(r8)
|
|
lwz r19, 0x0000(r8)
|
|
lwz r9, 0x0000(r20)
|
|
stw r9, 0x0000(r8)
|
|
lwz r9, 0x0008(r20)
|
|
stw r9, 0x0008(r8)
|
|
stw r20, 0x000c(r8)
|
|
stw r8, 0x000c(r9)
|
|
stw r8, 0x0008(r20)
|
|
stw r19, 0x0000(r8)
|
|
blr
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; major_0x136c8
|
|
|
|
; Xrefs:
|
|
; NKSetClockStep
|
|
; NKSetClockDriftCorrection
|
|
; MPCall_16
|
|
; major_0x0c8b4
|
|
; major_0x0ccf4
|
|
; MPCall_21
|
|
; MPCall_28
|
|
; MPCall_26
|
|
; MPCall_50
|
|
; major_0x0d35c
|
|
; MPCall_41
|
|
; MPCall_31
|
|
; MPCall_32
|
|
; major_0x0dce8
|
|
; MPCall_9
|
|
; CommonPIHPath
|
|
|
|
major_0x136c8 ; OUTSIDE REFERER
|
|
lwz r16, 0x0008(r8)
|
|
cmpwi r16, 0x00
|
|
lwz r18, -0x0a7c(r1)
|
|
beq+ Local_Panic
|
|
lwz r16, 0x0008(r8)
|
|
lwz r17, 0x000c(r8)
|
|
stw r16, 0x0008(r17)
|
|
stw r17, 0x000c(r16)
|
|
li r16, 0x00
|
|
stw r16, 0x0008(r8)
|
|
stw r16, 0x000c(r8)
|
|
li r16, 0x00
|
|
cmpw r18, r8
|
|
stb r16, 0x0017(r8)
|
|
beq+ major_0x13060
|
|
blr
|
|
|
|
|
|
|
|
; TimebaseTicksPerPeriod
|
|
|
|
; Xrefs:
|
|
; MPCall_18
|
|
; MPCall_23
|
|
; MPCall_27
|
|
; MPCall_52
|
|
; MPCall_31
|
|
; InitRDYQs
|
|
|
|
; Get the number of timebase ticks in a specified period
|
|
|
|
; ARG long r8 period (positive for ms, negative for us)
|
|
|
|
TimebaseTicksPerPeriod
|
|
mr. r17, r8
|
|
li r19, 250
|
|
lwz r9, KDP.ProcessorInfo + NKProcessorInfo.DecClockRateHz(r1)
|
|
|
|
bgt+ @period_positive
|
|
blt+ @period_negative
|
|
li r8, 0
|
|
li r9, 0
|
|
blr ; fail
|
|
@period_negative
|
|
neg r17, r17
|
|
lisori r19, 250000
|
|
@period_positive
|
|
|
|
divw r19, r9, r19
|
|
|
|
mullw r9, r19, r17
|
|
mulhw r8, r19, r17
|
|
|
|
srwi r9, r9, 2
|
|
rlwimi r9, r8, 30, 0, 1
|
|
srwi r8, r8, 2
|
|
|
|
blr
|
|
|
|
|
|
|
|
|
|
; Xrefs:
|
|
; NKSetClockStep
|
|
; NKSetClockDriftCorrection
|
|
; MPCall_18
|
|
; MPCall_23
|
|
; MPCall_27
|
|
; MPCall_52
|
|
; MPCall_40
|
|
; MPCall_32
|
|
; CreateTask
|
|
; InitTMRQs
|
|
; major_0x13060
|
|
; major_0x142dc
|
|
; major_0x14548
|
|
|
|
; RET long r8 tbu, long r9 tbl
|
|
; CLOB r16, r17
|
|
|
|
GetTime
|
|
|
|
mfpvr r8
|
|
rlwinm. r8, r8, 0, 0, 14
|
|
beq- @is_601
|
|
|
|
@retry_timebase:
|
|
mftbu r8
|
|
mftb r9
|
|
mftbu r16
|
|
cmpw r8, r16
|
|
bne- @retry_timebase
|
|
|
|
b @return
|
|
|
|
@is_601
|
|
dialect POWER ; disassembled this in POWER mode!
|
|
|
|
@retry_rtc
|
|
mfrtcu r8
|
|
mfrtcl r9
|
|
mfrtcu r16
|
|
cmp 0, r8, r16
|
|
|
|
dialect PowerPC
|
|
bne- @retry_rtc ; POWER chokes on hints?
|
|
dialect POWER
|
|
|
|
liu r16, 1000000000 >> 16
|
|
oril r16, r16, 1000000000 & 0xffff
|
|
|
|
mfmq r17
|
|
mul r8, r16, r8
|
|
mfmq r16
|
|
mtmq r17
|
|
|
|
mfxer r17
|
|
a r9, r16, r9
|
|
aze r8, r8
|
|
mtxer r17
|
|
|
|
dialect POWERPC
|
|
|
|
@return
|
|
blr
|