diff --git a/.gitignore b/.gitignore index 9f73fda..b652f72 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ *.o !/segasmp/lib/* +segasmp/lib/sys_init.o *.iso *.elf *.bin diff --git a/segasmp/lib/sys_init.o b/segasmp/lib/sys_init.o deleted file mode 100644 index a680e8b..0000000 Binary files a/segasmp/lib/sys_init.o and /dev/null differ diff --git a/segasmp/lib/sys_init.s b/segasmp/lib/sys_init.s new file mode 100644 index 0000000..aa5ec46 --- /dev/null +++ b/segasmp/lib/sys_init.s @@ -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: