segasmp: partially deblob sys_init.o

This commit is contained in:
Zack Buhman 2023-07-19 06:30:58 +00:00
parent 6973e0413c
commit c0e46834c3
3 changed files with 111 additions and 0 deletions

1
.gitignore vendored
View File

@ -1,5 +1,6 @@
*.o
!/segasmp/lib/*
segasmp/lib/sys_init.o
*.iso
*.elf
*.bin

Binary file not shown.

110
segasmp/lib/sys_init.s Normal file
View 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: