segasmp: partially deblob sys_init.o
This commit is contained in:
parent
6973e0413c
commit
c0e46834c3
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,5 +1,6 @@
|
|||||||
*.o
|
*.o
|
||||||
!/segasmp/lib/*
|
!/segasmp/lib/*
|
||||||
|
segasmp/lib/sys_init.o
|
||||||
*.iso
|
*.iso
|
||||||
*.elf
|
*.elf
|
||||||
*.bin
|
*.bin
|
||||||
|
Binary file not shown.
110
segasmp/lib/sys_init.s
Normal file
110
segasmp/lib/sys_init.s
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
/*
|
||||||
|
This is a partial decompilation of sys_init.o from SBL6.
|
||||||
|
|
||||||
|
This appears to have two independent purposes:
|
||||||
|
|
||||||
|
- *((uint32_t*)(0x0)) = *((uint32_t*)(0x060002dc)) (not sure why that's useful)
|
||||||
|
- copy 88 bytes starting at PATCHPG and ending at ENDOFPG to *(0x06000260)
|
||||||
|
|
||||||
|
Execution continues at the code/section that immediately
|
||||||
|
follows this one. This is by convention whatever is in
|
||||||
|
`smpsys.c`.
|
||||||
|
|
||||||
|
When assembled, this is byte-identical to sys_init.o from
|
||||||
|
SBL6.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.section .text.init
|
||||||
|
|
||||||
|
START:
|
||||||
|
mov.l A_INSTAL,r7 /* 0x06000260 */
|
||||||
|
mov.l A_SFTRES,r5 /* 0x060002dc */
|
||||||
|
mov.l @r7,r7
|
||||||
|
mov.l @r5,r3
|
||||||
|
mova PATSFTRS,r0 /* 0x00000000 */
|
||||||
|
mov.l r3,@r0
|
||||||
|
|
||||||
|
/* "INSTALL" is roughly an inlined 'memcpy', which copies PATCHPG to A_INSTAL */
|
||||||
|
INSTALL:
|
||||||
|
mova PATCHPG,r0
|
||||||
|
mov r7,r1
|
||||||
|
mov #22,r2 /* PATCHPG is 88 bytes long, and is copied 4 bytes at a time */
|
||||||
|
|
||||||
|
INSTAL1:
|
||||||
|
mov.l @r0+,r4
|
||||||
|
dt r2
|
||||||
|
mov.l r4,@r1
|
||||||
|
bf.s INSTAL1
|
||||||
|
add #4,r1
|
||||||
|
|
||||||
|
SETHOOK:
|
||||||
|
bra ENDOFPG
|
||||||
|
mov.l r7,@r5
|
||||||
|
|
||||||
|
A_SFTRES:
|
||||||
|
.word 0x0600
|
||||||
|
.word 0x02dc
|
||||||
|
|
||||||
|
A_INSTAL:
|
||||||
|
.word 0x0600
|
||||||
|
.word 0x0260
|
||||||
|
|
||||||
|
PATCHPG:
|
||||||
|
mov.w A_CCR,r3 /* 0xfe92 */
|
||||||
|
mov #0,r0
|
||||||
|
mov.b r0,@r3
|
||||||
|
mov #16,r0
|
||||||
|
mov.b r0,@r3
|
||||||
|
mov.l @r15+,r0
|
||||||
|
mov.l A_DEFSTK,r15 /* 0x06002000 */
|
||||||
|
mov.l r0,@-r15
|
||||||
|
mov.l PATSFTRS,r1 /* 0x00000000 */
|
||||||
|
mov #1,r0
|
||||||
|
mov #3,r4
|
||||||
|
sts.l pr,@-r15
|
||||||
|
jsr @r1
|
||||||
|
mov.b r0,@r3
|
||||||
|
|
||||||
|
_CDPAT_InitSctLen:
|
||||||
|
mov.l CDB_HIRQ,r5 /* 0x25890008 */
|
||||||
|
mov #-2,r3
|
||||||
|
mov.w r3,@r5
|
||||||
|
mov.w CONST_6000,r0 /* 0x6000 */
|
||||||
|
mov.w r0,@(16,r5)
|
||||||
|
mov #0,r0
|
||||||
|
mov.w r0,@(20,r5)
|
||||||
|
mov.w r0,@(24,r5)
|
||||||
|
mov.w r0,@(28,r5)
|
||||||
|
mov.w CONST_0900,r7 /* 0x0900 */
|
||||||
|
LOOP:
|
||||||
|
mov.w @r5,r0
|
||||||
|
tst #1,r0
|
||||||
|
bf BREAK_LOOP
|
||||||
|
dt r7
|
||||||
|
bf LOOP
|
||||||
|
BREAK_LOOP:
|
||||||
|
mov.w @(16,r5),r0
|
||||||
|
mov.w @(20,r5),r0
|
||||||
|
lds.l @r15+,pr
|
||||||
|
mov.w @(24,r5),r0
|
||||||
|
rts
|
||||||
|
mov.w @(28,r5),r0
|
||||||
|
|
||||||
|
CONST_6000:
|
||||||
|
.word 0x6000
|
||||||
|
CONST_0900:
|
||||||
|
.word 0x0900
|
||||||
|
A_CCR:
|
||||||
|
.word 0xfe92
|
||||||
|
CDB_HIRQ:
|
||||||
|
.word 0x2589
|
||||||
|
.word 0x0008
|
||||||
|
|
||||||
|
A_DEFSTK:
|
||||||
|
.word 0x0600
|
||||||
|
.word 0x2000
|
||||||
|
|
||||||
|
PATSFTRS:
|
||||||
|
.word 0x0000
|
||||||
|
.word 0x0000
|
||||||
|
ENDOFPG:
|
Loading…
x
Reference in New Issue
Block a user