mirror of
https://github.com/elliotnunn/powermac-rom.git
synced 2024-09-30 00:54:31 +00:00
301 lines
5.3 KiB
ArmAsm
301 lines
5.3 KiB
ArmAsm
|
kcCacheDispatch ; OUTSIDE REFERER
|
||
|
stw r21, 0x01ac(r6)
|
||
|
stw r22, 0x01b4(r6)
|
||
|
stw r23, 0x01bc(r6)
|
||
|
clrlwi r8, r3, 0x10
|
||
|
cmplwi r8, 0x02
|
||
|
bgt- kcCacheDispatch_0x4c
|
||
|
lwz r8, 0x0f68(r1)
|
||
|
andi. r8, r8, 0x01
|
||
|
beq- kcCacheDispatch_0x178
|
||
|
rlwinm. r9, r3, 0, 2, 2
|
||
|
bnel- kcCacheDispatch_0x1e4
|
||
|
srwi r8, r3, 30
|
||
|
cmpwi r8, 0x03
|
||
|
beq- kcCacheDispatch_0xd8
|
||
|
clrlwi r8, r3, 0x10
|
||
|
cmplwi r8, 0x01
|
||
|
beq- kcCacheDispatch_0x58
|
||
|
cmplwi r8, 0x02
|
||
|
beq- kcCacheDispatch_0xb8
|
||
|
|
||
|
kcCacheDispatch_0x4c
|
||
|
lis r3, -0x01
|
||
|
ori r3, r3, 0xfffe
|
||
|
b kcCacheDispatch_0x1c4
|
||
|
|
||
|
kcCacheDispatch_0x58
|
||
|
rlwinm. r9, r3, 0, 1, 1
|
||
|
bne- kcCacheDispatch_0x74
|
||
|
rlwinm. r9, r3, 0, 0, 0
|
||
|
bne- kcCacheDispatch_0x98
|
||
|
rlwinm. r9, r3, 0, 3, 3
|
||
|
bl kcCacheDispatch_0x258
|
||
|
b kcCacheDispatch_0x1c4
|
||
|
|
||
|
kcCacheDispatch_0x74
|
||
|
bl kcCacheDispatch_0x258
|
||
|
rlwinm r22, r3, 0, 4, 5
|
||
|
srwi r22, r22, 12
|
||
|
mfspr r21, hid0
|
||
|
andc r21, r21, r22
|
||
|
sync
|
||
|
mtspr hid0, r21
|
||
|
li r3, 0x00
|
||
|
b kcCacheDispatch_0x1c4
|
||
|
|
||
|
kcCacheDispatch_0x98
|
||
|
rlwinm r22, r3, 0, 4, 5
|
||
|
srwi r22, r22, 12
|
||
|
mfspr r21, hid0
|
||
|
or r21, r21, r22
|
||
|
sync
|
||
|
mtspr hid0, r21
|
||
|
li r3, 0x00
|
||
|
b kcCacheDispatch_0x1c4
|
||
|
|
||
|
kcCacheDispatch_0xb8
|
||
|
rlwinm. r9, r3, 0, 1, 1
|
||
|
bne- kcCacheDispatch_0x180
|
||
|
rlwinm. r9, r3, 0, 0, 0
|
||
|
bne- kcCacheDispatch_0xe8
|
||
|
rlwinm. r9, r3, 0, 3, 3
|
||
|
bne- kcCacheDispatch_0xe4
|
||
|
rlwinm. r9, r3, 0, 2, 2
|
||
|
bne- kcCacheDispatch_0x1c4
|
||
|
|
||
|
kcCacheDispatch_0xd8
|
||
|
lis r3, -0x01
|
||
|
ori r3, r3, 0xfffc
|
||
|
b kcCacheDispatch_0x1c4
|
||
|
|
||
|
kcCacheDispatch_0xe4
|
||
|
bl kcCacheDispatch_0x180
|
||
|
|
||
|
kcCacheDispatch_0xe8
|
||
|
mfspr r21, l2cr
|
||
|
sync
|
||
|
andis. r21, r21, 0x8000
|
||
|
bne- kcCacheDispatch_0x1c4
|
||
|
lwz r8, 0x0f54(r1)
|
||
|
and. r8, r8, r8
|
||
|
beq- kcCacheDispatch_0x178
|
||
|
mfspr r21, hid0
|
||
|
rlwinm r8, r21, 0, 12, 10
|
||
|
mtspr hid0, r8
|
||
|
sync
|
||
|
addi r8, r1, -0x4d0
|
||
|
lwz r8, 0x0050(r8)
|
||
|
and. r8, r8, r8
|
||
|
beq- kcCacheDispatch_0x1c4
|
||
|
sync
|
||
|
lis r9, 0x20
|
||
|
or r8, r8, r9
|
||
|
mtspr l2cr, r8
|
||
|
sync
|
||
|
|
||
|
kcCacheDispatch_0x138
|
||
|
mfspr r8, l2cr
|
||
|
sync
|
||
|
andi. r9, r8, 0x01
|
||
|
bne+ kcCacheDispatch_0x138
|
||
|
lis r9, 0x20
|
||
|
andc r8, r8, r9
|
||
|
mtspr l2cr, r8
|
||
|
sync
|
||
|
lis r9, -0x8000
|
||
|
or r8, r8, r9
|
||
|
mtspr l2cr, r8
|
||
|
sync
|
||
|
mtspr hid0, r21
|
||
|
sync
|
||
|
li r3, 0x00
|
||
|
b kcCacheDispatch_0x1c4
|
||
|
|
||
|
kcCacheDispatch_0x178
|
||
|
li r3, -0x02
|
||
|
b kcCacheDispatch_0x1c4
|
||
|
|
||
|
kcCacheDispatch_0x180
|
||
|
mfspr r22, l2cr
|
||
|
sync
|
||
|
andis. r22, r22, 0x8000
|
||
|
beq- kcCacheDispatch_0x1c4
|
||
|
bl kcCacheDispatch_0x258
|
||
|
mfspr r22, l2cr
|
||
|
sync
|
||
|
clrlwi r22, r22, 0x01
|
||
|
mtspr l2cr, r22
|
||
|
sync
|
||
|
addi r8, r1, -0x4d0
|
||
|
stw r22, 0x0050(r8)
|
||
|
sync
|
||
|
rlwinm r22, r22, 0, 7, 3
|
||
|
oris r22, r22, 0x10
|
||
|
mtspr l2cr, r22
|
||
|
sync
|
||
|
|
||
|
kcCacheDispatch_0x1c4
|
||
|
ori r23, r23, 0xffff
|
||
|
oris r3, r3, 0xffff
|
||
|
and r3, r3, r23
|
||
|
|
||
|
kcCacheDispatch_0x1d0
|
||
|
lwz r21, 0x01ac(r6)
|
||
|
lwz r22, 0x01b4(r6)
|
||
|
lwz r23, 0x01bc(r6)
|
||
|
sync
|
||
|
b skeleton_key
|
||
|
|
||
|
kcCacheDispatch_0x1e4
|
||
|
clrlwi r8, r3, 0x10
|
||
|
cmplwi r8, 0x01
|
||
|
beq- kcCacheDispatch_0x204
|
||
|
cmplwi r8, 0x02
|
||
|
beq- kcCacheDispatch_0x218
|
||
|
lis r3, -0x01
|
||
|
ori r3, r3, 0xfffb
|
||
|
b kcCacheDispatch_0x1d0
|
||
|
|
||
|
kcCacheDispatch_0x204
|
||
|
mfspr r21, hid0
|
||
|
rlwinm. r21, r21, 12, 4, 5
|
||
|
beq- kcCacheDispatch_0x24c
|
||
|
oris r23, r21, 0x8000
|
||
|
blr
|
||
|
|
||
|
kcCacheDispatch_0x218
|
||
|
lwz r8, 0x0f54(r1)
|
||
|
and. r8, r8, r8
|
||
|
beq+ kcCacheDispatch_0x178
|
||
|
mfspr r21, hid0
|
||
|
rlwinm r21, r21, 12, 4, 5
|
||
|
mfspr r22, l2cr
|
||
|
rlwinm r22, r22, 5, 4, 4
|
||
|
andc r21, r21, r22
|
||
|
mfspr r22, l2cr
|
||
|
andis. r22, r22, 0x8000
|
||
|
beq- kcCacheDispatch_0x24c
|
||
|
or r23, r21, r22
|
||
|
blr
|
||
|
|
||
|
kcCacheDispatch_0x24c
|
||
|
lis r23, 0x4000
|
||
|
ori r23, r23, 0x00
|
||
|
blr
|
||
|
|
||
|
kcCacheDispatch_0x258 ; OUTSIDE REFERER
|
||
|
mfctr r8
|
||
|
stw r25, 0x01cc(r6)
|
||
|
stw r24, 0x01c4(r6)
|
||
|
stw r8, 0x00f4(r6)
|
||
|
lhz r25, 0x0f44(r1)
|
||
|
and. r25, r25, r25
|
||
|
cntlzw r8, r25
|
||
|
beq- kcCacheDispatch_0x338
|
||
|
subfic r9, r8, 0x1f
|
||
|
lwz r8, 0x0f34(r1)
|
||
|
and. r8, r8, r8
|
||
|
beq- kcCacheDispatch_0x338
|
||
|
lwz r24, 0x0f68(r1)
|
||
|
mtcr r24
|
||
|
bso- cr6, kcCacheDispatch_0x350
|
||
|
bne- cr7, kcCacheDispatch_0x2a4
|
||
|
slwi r24, r8, 1
|
||
|
add r8, r8, r24
|
||
|
srwi r8, r8, 1
|
||
|
|
||
|
kcCacheDispatch_0x2a4
|
||
|
srw r8, r8, r9
|
||
|
mtctr r8
|
||
|
lwz r8, 0x0630(r1)
|
||
|
lwz r9, 0x0028(r8)
|
||
|
add r8, r8, r9
|
||
|
|
||
|
kcCacheDispatch_0x2b8
|
||
|
lwzux r9, r8, r25
|
||
|
bdnz+ kcCacheDispatch_0x2b8
|
||
|
lwz r24, 0x0f68(r1)
|
||
|
andi. r24, r24, 0x01
|
||
|
beq- kcCacheDispatch_0x338
|
||
|
mfspr r24, l2cr
|
||
|
andis. r24, r24, 0x8000
|
||
|
beq- kcCacheDispatch_0x338
|
||
|
lhz r25, 0x0f60(r1)
|
||
|
and. r25, r25, r25
|
||
|
cntlzw r8, r25
|
||
|
beq- kcCacheDispatch_0x338
|
||
|
subfic r9, r8, 0x1f
|
||
|
lwz r8, 0x0f54(r1)
|
||
|
and. r8, r8, r8
|
||
|
beq- kcCacheDispatch_0x338
|
||
|
srw r8, r8, r9
|
||
|
mtctr r8
|
||
|
mfspr r24, l2cr
|
||
|
oris r24, r24, 0x40
|
||
|
mtspr l2cr, r24
|
||
|
isync
|
||
|
lwz r8, 0x0630(r1)
|
||
|
lwz r9, 0x0028(r8)
|
||
|
add r8, r8, r9
|
||
|
addis r8, r8, 0x19
|
||
|
neg r25, r25
|
||
|
|
||
|
kcCacheDispatch_0x324
|
||
|
lwzux r9, r8, r25
|
||
|
bdnz+ kcCacheDispatch_0x324
|
||
|
rlwinm r24, r24, 0, 10, 8
|
||
|
mtspr l2cr, r24
|
||
|
isync
|
||
|
|
||
|
kcCacheDispatch_0x338
|
||
|
lwz r8, 0x00f4(r6)
|
||
|
lwz r25, 0x01cc(r6)
|
||
|
lwz r24, 0x01c4(r6)
|
||
|
sync
|
||
|
mtctr r8
|
||
|
blr
|
||
|
|
||
|
kcCacheDispatch_0x350
|
||
|
dssall
|
||
|
sync
|
||
|
mfspr r8, 1014
|
||
|
oris r8, r8, 0x80
|
||
|
mtspr 1014, r8
|
||
|
sync
|
||
|
|
||
|
kcCacheDispatch_0x368
|
||
|
mfspr r8, 1014
|
||
|
sync
|
||
|
andis. r8, r8, 0x80
|
||
|
bne+ kcCacheDispatch_0x368
|
||
|
mfspr r8, l2cr
|
||
|
ori r8, r8, 0x800
|
||
|
mtspr l2cr, r8
|
||
|
sync
|
||
|
|
||
|
kcCacheDispatch_0x388
|
||
|
mfspr r8, l2cr
|
||
|
sync
|
||
|
andi. r8, r8, 0x800
|
||
|
bne+ kcCacheDispatch_0x388
|
||
|
b kcCacheDispatch_0x338
|
||
|
|
||
|
kcCacheDispatch_0x39c ; OUTSIDE REFERER
|
||
|
lwz r8, 0x0f68(r1)
|
||
|
mtcr r8
|
||
|
bnslr- cr6
|
||
|
dssall
|
||
|
sync
|
||
|
mfspr r8, 1014
|
||
|
oris r8, r8, 0x80
|
||
|
mtspr 1014, r8
|
||
|
sync
|
||
|
|
||
|
kcCacheDispatch_0x3c0
|
||
|
mfspr r8, 1014
|
||
|
sync
|
||
|
andis. r8, r8, 0x80
|
||
|
bne+ kcCacheDispatch_0x3c0
|
||
|
blr
|