Decompile osInitialize
This commit is contained in:
parent
c8448cdd11
commit
ec48a31f23
10
ld/pd.ld
10
ld/pd.ld
|
|
@ -134,13 +134,15 @@ SECTIONS
|
|||
osMemSize = 0x80000318;
|
||||
osAppNMIBuffer = 0x8000031c;
|
||||
|
||||
var803f50b8 = 0x803f50b8;
|
||||
vara00002e8 = 0xa00002e8;
|
||||
vara4500004 = 0xa4500004;
|
||||
varbc000c02 = 0xbc000c02; /* for ntsc-beta */
|
||||
var800902e4 = 0x800902e4; /* for ntsc-beta */
|
||||
var800902e8 = 0x800902e8; /* for ntsc-beta */
|
||||
|
||||
var803f50b8 = 0x803f50b8;
|
||||
|
||||
vara00002e8 = 0xa00002e8;
|
||||
|
||||
varbc000c02 = 0xbc000c02; /* for ntsc-beta */
|
||||
|
||||
/***************************************************************************
|
||||
* romheader
|
||||
* -------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -3041,9 +3041,8 @@ u32 var8005cf50 = 0x00000000;
|
|||
u32 var8005cf54 = 0x00000000;
|
||||
u32 var8005cf58 = 0x00000000;
|
||||
u32 var8005cf5c = 0x00000000;
|
||||
u32 var8005cf60 = 0x00000000;
|
||||
u32 var8005cf64 = 0x03b9aca0;
|
||||
u32 osViClock = 0x02e6d354;
|
||||
OSTime osClockRate = 62500000;
|
||||
u32 osViClock = VI_NTSC_CLOCK;
|
||||
u32 var8005cf6c = 0x00000000;
|
||||
u32 __osGlobalIntMask = 0x003fff01;
|
||||
u32 var8005cf74 = 0x00000000;
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ extern u32 __osViDevMgr;
|
|||
extern u32 var8005cefc;
|
||||
extern OSDevMgr __osPiDevMgr;
|
||||
extern u32 var8005cf30;
|
||||
extern u32 var8005cf60;
|
||||
extern OSTime osClockRate;
|
||||
extern u32 osViClock;
|
||||
extern u32 var8005cf6c;
|
||||
extern u32 __osGlobalIntMask;
|
||||
|
|
|
|||
|
|
@ -358,6 +358,7 @@ extern u32 piEventQueue;
|
|||
extern u32 piEventBuf;
|
||||
extern u32 var800907f0;
|
||||
extern u32 __osPfsPifRam;
|
||||
extern u32 __osFinalRom;
|
||||
extern u32 var80090a70;
|
||||
extern u32 var80090ab0;
|
||||
extern u32 var80090ad0;
|
||||
|
|
|
|||
|
|
@ -29,8 +29,8 @@ void __osPiGetAccess();
|
|||
void __osSetSR(u32);
|
||||
u32 __osGetSR();
|
||||
void __osSetFpcCsr(u32);
|
||||
s32 __osSiRawReadIo(void*, u32*);
|
||||
s32 __osSiRawWriteIo(void*, u32);
|
||||
s32 __osSiRawReadIo(u32, u32*);
|
||||
s32 __osSiRawWriteIo(u32, u32);
|
||||
s32 osPiRawReadIo(u32 a0, u32 *a1);
|
||||
void __osSpSetStatus(u32);
|
||||
u32 __osSpGetStatus();
|
||||
|
|
|
|||
|
|
@ -1,167 +1,58 @@
|
|||
#include <libultra_internal.h>
|
||||
#include "game/data/data_000000.h"
|
||||
#include "gvars/gvars.h"
|
||||
|
||||
GLOBAL_ASM(
|
||||
glabel osInitialize
|
||||
/* 5b60: 27bdffc8 */ addiu $sp,$sp,-56
|
||||
/* 5b64: afbf001c */ sw $ra,0x1c($sp)
|
||||
/* 5b68: 240e0001 */ addiu $t6,$zero,0x1
|
||||
/* 5b6c: 3c018009 */ lui $at,%hi(__osFinalRom)
|
||||
/* 5b70: afb10018 */ sw $s1,0x18($sp)
|
||||
/* 5b74: afb00014 */ sw $s0,0x14($sp)
|
||||
/* 5b78: 0c012b34 */ jal __osGetSR
|
||||
/* 5b7c: ac2e0a60 */ sw $t6,%lo(__osFinalRom)($at)
|
||||
/* 5b80: 3c012000 */ lui $at,0x2000
|
||||
/* 5b84: 0c012b30 */ jal __osSetSR
|
||||
/* 5b88: 00412025 */ or $a0,$v0,$at
|
||||
/* 5b8c: 3c040100 */ lui $a0,0x100
|
||||
/* 5b90: 0c012078 */ jal __osSetFpcCsr
|
||||
/* 5b94: 34840800 */ ori $a0,$a0,0x800
|
||||
/* 5b98: 3c101fc0 */ lui $s0,0x1fc0
|
||||
/* 5b9c: 361007fc */ ori $s0,$s0,0x7fc
|
||||
/* 5ba0: 27b10034 */ addiu $s1,$sp,0x34
|
||||
/* 5ba4: 02202825 */ or $a1,$s1,$zero
|
||||
/* 5ba8: 0c012b38 */ jal __osSiRawReadIo
|
||||
/* 5bac: 02002025 */ or $a0,$s0,$zero
|
||||
/* 5bb0: 10400005 */ beqz $v0,.L00005bc8
|
||||
/* 5bb4: 02002025 */ or $a0,$s0,$zero
|
||||
.L00005bb8:
|
||||
/* 5bb8: 0c012b38 */ jal __osSiRawReadIo
|
||||
/* 5bbc: 02202825 */ or $a1,$s1,$zero
|
||||
/* 5bc0: 5440fffd */ bnezl $v0,.L00005bb8
|
||||
/* 5bc4: 02002025 */ or $a0,$s0,$zero
|
||||
.L00005bc8:
|
||||
/* 5bc8: 8fa50034 */ lw $a1,0x34($sp)
|
||||
/* 5bcc: 02002025 */ or $a0,$s0,$zero
|
||||
/* 5bd0: 34af0008 */ ori $t7,$a1,0x8
|
||||
/* 5bd4: 0c012b4c */ jal __osSiRawWriteIo
|
||||
/* 5bd8: 01e02825 */ or $a1,$t7,$zero
|
||||
/* 5bdc: 10400008 */ beqz $v0,.L00005c00
|
||||
/* 5be0: 00000000 */ nop
|
||||
/* 5be4: 8fa50034 */ lw $a1,0x34($sp)
|
||||
.L00005be8:
|
||||
/* 5be8: 02002025 */ or $a0,$s0,$zero
|
||||
/* 5bec: 34b80008 */ ori $t8,$a1,0x8
|
||||
/* 5bf0: 0c012b4c */ jal __osSiRawWriteIo
|
||||
/* 5bf4: 03002825 */ or $a1,$t8,$zero
|
||||
/* 5bf8: 5440fffb */ bnezl $v0,.L00005be8
|
||||
/* 5bfc: 8fa50034 */ lw $a1,0x34($sp)
|
||||
.L00005c00:
|
||||
/* 5c00: 3c027000 */ lui $v0,%hi(__osExceptionPreamble)
|
||||
/* 5c04: 244234f0 */ addiu $v0,$v0,%lo(__osExceptionPreamble)
|
||||
/* 5c08: 8c410000 */ lw $at,0x0($v0)
|
||||
/* 5c0c: 3c108000 */ lui $s0,0x8000
|
||||
/* 5c10: 3c098000 */ lui $t1,0x8000
|
||||
/* 5c14: ae010000 */ sw $at,0x0($s0)
|
||||
/* 5c18: 8c480004 */ lw $t0,0x4($v0)
|
||||
/* 5c1c: 35290080 */ ori $t1,$t1,0x80
|
||||
/* 5c20: 3c0c8000 */ lui $t4,0x8000
|
||||
/* 5c24: ae080004 */ sw $t0,0x4($s0)
|
||||
/* 5c28: 8c410008 */ lw $at,0x8($v0)
|
||||
/* 5c2c: 358c0100 */ ori $t4,$t4,0x100
|
||||
/* 5c30: 3c0f8000 */ lui $t7,0x8000
|
||||
/* 5c34: ae010008 */ sw $at,0x8($s0)
|
||||
/* 5c38: 8c48000c */ lw $t0,0xc($v0)
|
||||
/* 5c3c: 35ef0180 */ ori $t7,$t7,0x180
|
||||
/* 5c40: 02002025 */ or $a0,$s0,$zero
|
||||
/* 5c44: ae08000c */ sw $t0,0xc($s0)
|
||||
/* 5c48: 8c410000 */ lw $at,0x0($v0)
|
||||
/* 5c4c: 24050190 */ addiu $a1,$zero,0x190
|
||||
/* 5c50: ad210000 */ sw $at,0x0($t1)
|
||||
/* 5c54: 8c4b0004 */ lw $t3,0x4($v0)
|
||||
/* 5c58: ad2b0004 */ sw $t3,0x4($t1)
|
||||
/* 5c5c: 8c410008 */ lw $at,0x8($v0)
|
||||
/* 5c60: ad210008 */ sw $at,0x8($t1)
|
||||
/* 5c64: 8c4b000c */ lw $t3,0xc($v0)
|
||||
/* 5c68: ad2b000c */ sw $t3,0xc($t1)
|
||||
/* 5c6c: 8c410000 */ lw $at,0x0($v0)
|
||||
/* 5c70: ad810000 */ sw $at,0x0($t4)
|
||||
/* 5c74: 8c4e0004 */ lw $t6,0x4($v0)
|
||||
/* 5c78: ad8e0004 */ sw $t6,0x4($t4)
|
||||
/* 5c7c: 8c410008 */ lw $at,0x8($v0)
|
||||
/* 5c80: ad810008 */ sw $at,0x8($t4)
|
||||
/* 5c84: 8c4e000c */ lw $t6,0xc($v0)
|
||||
/* 5c88: ad8e000c */ sw $t6,0xc($t4)
|
||||
/* 5c8c: 8c410000 */ lw $at,0x0($v0)
|
||||
/* 5c90: ade10000 */ sw $at,0x0($t7)
|
||||
/* 5c94: 8c590004 */ lw $t9,0x4($v0)
|
||||
/* 5c98: adf90004 */ sw $t9,0x4($t7)
|
||||
/* 5c9c: 8c410008 */ lw $at,0x8($v0)
|
||||
/* 5ca0: ade10008 */ sw $at,0x8($t7)
|
||||
/* 5ca4: 8c59000c */ lw $t9,0xc($v0)
|
||||
/* 5ca8: 0c012b60 */ jal osWritebackDCache
|
||||
/* 5cac: adf9000c */ sw $t9,0xc($t7)
|
||||
/* 5cb0: 02002025 */ or $a0,$s0,$zero
|
||||
/* 5cb4: 0c012054 */ jal osInvalICache
|
||||
/* 5cb8: 24050190 */ addiu $a1,$zero,0x190
|
||||
/* 5cbc: 0c001770 */ jal func00005dc0
|
||||
/* 5cc0: 00000000 */ nop
|
||||
/* 5cc4: 0c000bfc */ jal osMapTLBRdb
|
||||
/* 5cc8: 00000000 */ nop
|
||||
/* 5ccc: 3c108006 */ lui $s0,%hi(var8005cf60)
|
||||
/* 5cd0: 2610cf60 */ addiu $s0,$s0,%lo(var8005cf60)
|
||||
/* 5cd4: 8e040000 */ lw $a0,0x0($s0)
|
||||
/* 5cd8: 8e050004 */ lw $a1,0x4($s0)
|
||||
/* 5cdc: 24060000 */ addiu $a2,$zero,0x0
|
||||
/* 5ce0: 0c012bda */ jal __ll_mul
|
||||
/* 5ce4: 24070003 */ addiu $a3,$zero,0x3
|
||||
/* 5ce8: 00402025 */ or $a0,$v0,$zero
|
||||
/* 5cec: 00602825 */ or $a1,$v1,$zero
|
||||
/* 5cf0: 24060000 */ addiu $a2,$zero,0x0
|
||||
/* 5cf4: 0c012b9a */ jal __ull_div
|
||||
/* 5cf8: 24070004 */ addiu $a3,$zero,0x4
|
||||
/* 5cfc: ae020000 */ sw $v0,0x0($s0)
|
||||
/* 5d00: ae030004 */ sw $v1,0x4($s0)
|
||||
/* 5d04: 3c088000 */ lui $t0,0x8000
|
||||
/* 5d08: 8d08030c */ lw $t0,0x30c($t0)
|
||||
/* 5d0c: 3c048000 */ lui $a0,0x8000
|
||||
/* 5d10: 2484031c */ addiu $a0,$a0,0x31c
|
||||
/* 5d14: 15000003 */ bnez $t0,.L00005d24
|
||||
/* 5d18: 00000000 */ nop
|
||||
/* 5d1c: 0c012c30 */ jal bzero
|
||||
/* 5d20: 24050040 */ addiu $a1,$zero,0x40
|
||||
.L00005d24:
|
||||
/* 5d24: 3c028000 */ lui $v0,0x8000
|
||||
/* 5d28: 8c420300 */ lw $v0,0x300($v0)
|
||||
/* 5d2c: 3c0a02f5 */ lui $t2,0x2f5
|
||||
/* 5d30: 354ab2d2 */ ori $t2,$t2,0xb2d2
|
||||
/* 5d34: 14400004 */ bnez $v0,.L00005d48
|
||||
/* 5d38: 24010002 */ addiu $at,$zero,0x2
|
||||
/* 5d3c: 3c018006 */ lui $at,%hi(osViClock)
|
||||
/* 5d40: 1000000b */ b .L00005d70
|
||||
/* 5d44: ac2acf68 */ sw $t2,%lo(osViClock)($at)
|
||||
.L00005d48:
|
||||
/* 5d48: 14410006 */ bne $v0,$at,.L00005d64
|
||||
/* 5d4c: 3c0b02e6 */ lui $t3,0x2e6
|
||||
/* 5d50: 3c0902e6 */ lui $t1,0x2e6
|
||||
/* 5d54: 3529d354 */ ori $t1,$t1,0xd354
|
||||
/* 5d58: 3c018006 */ lui $at,%hi(osViClock)
|
||||
/* 5d5c: 10000004 */ b .L00005d70
|
||||
/* 5d60: ac29cf68 */ sw $t1,%lo(osViClock)($at)
|
||||
.L00005d64:
|
||||
/* 5d64: 356bd354 */ ori $t3,$t3,0xd354
|
||||
/* 5d68: 3c018006 */ lui $at,%hi(osViClock)
|
||||
/* 5d6c: ac2bcf68 */ sw $t3,%lo(osViClock)($at)
|
||||
.L00005d70:
|
||||
/* 5d70: 0c012c58 */ jal __osGetCause
|
||||
/* 5d74: 00000000 */ nop
|
||||
/* 5d78: 304d1000 */ andi $t5,$v0,0x1000
|
||||
/* 5d7c: 11a00003 */ beqz $t5,.L00005d8c
|
||||
/* 5d80: 240c0001 */ addiu $t4,$zero,0x1
|
||||
.L00005d84:
|
||||
/* 5d84: 1000ffff */ b .L00005d84
|
||||
/* 5d88: 00000000 */ nop
|
||||
.L00005d8c:
|
||||
/* 5d8c: 3c0ea450 */ lui $t6,0xa450
|
||||
/* 5d90: adcc0008 */ sw $t4,0x8($t6)
|
||||
/* 5d94: 24183fff */ addiu $t8,$zero,0x3fff
|
||||
/* 5d98: 3c0fa450 */ lui $t7,0xa450
|
||||
/* 5d9c: adf80010 */ sw $t8,0x10($t7)
|
||||
/* 5da0: 2419000f */ addiu $t9,$zero,0xf
|
||||
/* 5da4: 3c08a450 */ lui $t0,0xa450
|
||||
/* 5da8: ad190014 */ sw $t9,0x14($t0)
|
||||
/* 5dac: 8fbf001c */ lw $ra,0x1c($sp)
|
||||
/* 5db0: 8fb10018 */ lw $s1,0x18($sp)
|
||||
/* 5db4: 8fb00014 */ lw $s0,0x14($sp)
|
||||
/* 5db8: 03e00008 */ jr $ra
|
||||
/* 5dbc: 27bd0038 */ addiu $sp,$sp,0x38
|
||||
);
|
||||
typedef struct {
|
||||
unsigned int inst1;
|
||||
unsigned int inst2;
|
||||
unsigned int inst3;
|
||||
unsigned int inst4;
|
||||
} __osExceptionVector;
|
||||
|
||||
extern __osExceptionVector __osExceptionPreamble;
|
||||
extern u32 osAppNMIBuffer;
|
||||
|
||||
void osInitialize()
|
||||
{
|
||||
u32 pifdata;
|
||||
|
||||
__osFinalRom = TRUE;
|
||||
__osSetSR(__osGetSR() | SR_CU1);
|
||||
__osSetFpcCsr(FPCSR_FS | FPCSR_EV);
|
||||
|
||||
while (__osSiRawReadIo(PIF_RAM_END - 3, &pifdata));
|
||||
|
||||
while (__osSiRawWriteIo(PIF_RAM_END - 3, pifdata | 8));
|
||||
|
||||
*(__osExceptionVector *)UT_VEC = __osExceptionPreamble;
|
||||
*(__osExceptionVector *)XUT_VEC = __osExceptionPreamble;
|
||||
*(__osExceptionVector *)ECC_VEC = __osExceptionPreamble;
|
||||
*(__osExceptionVector *)E_VEC = __osExceptionPreamble;
|
||||
|
||||
osWritebackDCache((void *)UT_VEC, E_VEC - UT_VEC + sizeof(__osExceptionVector));
|
||||
osInvalICache((void *)UT_VEC, E_VEC - UT_VEC + sizeof(__osExceptionVector));
|
||||
func00005dc0();
|
||||
osMapTLBRdb();
|
||||
|
||||
osClockRate = osClockRate * 3 / 4;
|
||||
|
||||
if (osResetType == RESET_TYPE_COLD_RESET) {
|
||||
bzero(&osAppNMIBuffer, 0x40);
|
||||
}
|
||||
|
||||
if (osTvType == OS_TV_PAL) {
|
||||
osViClock = VI_PAL_CLOCK;
|
||||
} else if (osTvType == OS_TV_MPAL) {
|
||||
osViClock = VI_NTSC_CLOCK;
|
||||
} else {
|
||||
osViClock = VI_NTSC_CLOCK;
|
||||
}
|
||||
|
||||
if (__osGetCause() & CAUSE_IP5) {
|
||||
while (1);
|
||||
}
|
||||
|
||||
*(u32 *)PHYS_TO_K1(AI_CONTROL_REG) = 1;
|
||||
*(u32 *)PHYS_TO_K1(AI_DACRATE_REG) = 0x3fff;
|
||||
*(u32 *)PHYS_TO_K1(AI_BITRATE_REG) = 0xf;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue