mirror of
https://github.com/zeldaret/oot.git
synced 2024-12-29 16:26:18 +00:00
53ceea717d
* Add .align 4 directives to all data/ files (+ minor alignment fixes) * Use .balign for everything and fix typo
714 lines
33 KiB
ArmAsm
714 lines
33 KiB
ArmAsm
.include "macro.inc"
|
|
|
|
# assembler directives
|
|
.set noat # allow manual use of $at
|
|
.set noreorder # don't insert nops after branches
|
|
.set gp=64 # allow use of 64-bit general purpose registers
|
|
|
|
.section .data
|
|
|
|
glabel __osHwIntTable
|
|
.word 0, 0
|
|
.word 0, 0
|
|
.word 0, 0
|
|
.word 0, 0
|
|
.word 0, 0
|
|
|
|
glabel __osPiIntTable
|
|
.word 0
|
|
.word 0
|
|
|
|
.section .rodata
|
|
|
|
glabel __osIntOffTable
|
|
.byte 0x00 /* redispatch */
|
|
.byte 0x14 /* prenmi */
|
|
.byte 0x18 /* IP6_Hdlr */
|
|
.byte 0x18 /* IP6_Hdlr */
|
|
.byte 0x1c /* IP7_Hdlr */
|
|
.byte 0x1c /* IP7_Hdlr */
|
|
.byte 0x1c /* IP7_Hdlr */
|
|
.byte 0x1c /* IP7_Hdlr */
|
|
.byte 0x20 /* counter */
|
|
.byte 0x20 /* counter */
|
|
.byte 0x20 /* counter */
|
|
.byte 0x20 /* counter */
|
|
.byte 0x20 /* counter */
|
|
.byte 0x20 /* counter */
|
|
.byte 0x20 /* counter */
|
|
.byte 0x20 /* counter */
|
|
.byte 0x00 /* redispatch */
|
|
.byte 0x04 /* sw1 */
|
|
.byte 0x08 /* sw2 */
|
|
.byte 0x08 /* sw2 */
|
|
.byte 0x0c /* rcp */
|
|
.byte 0x0c /* rcp */
|
|
.byte 0x0c /* rcp */
|
|
.byte 0x0c /* rcp */
|
|
.byte 0x10 /* cart */
|
|
.byte 0x10 /* cart */
|
|
.byte 0x10 /* cart */
|
|
.byte 0x10 /* cart */
|
|
.byte 0x10 /* cart */
|
|
.byte 0x10 /* cart */
|
|
.byte 0x10 /* cart */
|
|
.byte 0x10 /* cart */
|
|
|
|
glabel __osIntTable
|
|
.word redispatch
|
|
.word sw1
|
|
.word sw2
|
|
.word rcp
|
|
.word cart
|
|
.word prenmi
|
|
.word IP6_Hdlr
|
|
.word IP7_Hdlr
|
|
.word counter
|
|
|
|
.section .text
|
|
|
|
.balign 16
|
|
|
|
glabel __osExceptionPreamble
|
|
/* 0045D0 800039D0 3C1A8000 */ lui $k0, %hi(__osException) # $k0, 0x8000
|
|
/* 0045D4 800039D4 275A39E0 */ addiu $k0, %lo(__osException) # addiu $k0, $k0, 0x39e0
|
|
/* 0045D8 800039D8 03400008 */ jr $k0
|
|
/* 0045DC 800039DC 00000000 */ nop
|
|
|
|
glabel __osException
|
|
/* 0045E0 800039E0 3C1A8001 */ lui $k0, %hi(__osThreadSave) # $k0, 0x8001
|
|
/* 0045E4 800039E4 275A5890 */ addiu $k0, %lo(__osThreadSave) # addiu $k0, $k0, 0x5890
|
|
/* 0045E8 800039E8 FF410020 */ sd $at, 0x20($k0)
|
|
/* 0045EC 800039EC 401B6000 */ mfc0 $k1, $12
|
|
/* 0045F0 800039F0 AF5B0118 */ sw $k1, 0x118($k0)
|
|
/* 0045F4 800039F4 2401FFFC */ li $at, -4
|
|
/* 0045F8 800039F8 0361D824 */ and $k1, $k1, $at
|
|
/* 0045FC 800039FC 409B6000 */ mtc0 $k1, $12
|
|
/* 004600 80003A00 FF480058 */ sd $t0, 0x58($k0)
|
|
/* 004604 80003A04 FF490060 */ sd $t1, 0x60($k0)
|
|
/* 004608 80003A08 FF4A0068 */ sd $t2, 0x68($k0)
|
|
/* 00460C 80003A0C AF400018 */ sw $zero, 0x18($k0)
|
|
/* 004610 80003A10 40086800 */ mfc0 $t0, $13
|
|
/* 004614 80003A14 03404025 */ move $t0, $k0
|
|
/* 004618 80003A18 3C1A8001 */ lui $k0, %hi(__osRunningThread) # $k0, 0x8001
|
|
/* 00461C 80003A1C 8F5AAD50 */ lw $k0, %lo(__osRunningThread)($k0)
|
|
/* 004620 80003A20 DD090020 */ ld $t1, 0x20($t0)
|
|
/* 004624 80003A24 FF490020 */ sd $t1, 0x20($k0)
|
|
/* 004628 80003A28 DD090118 */ ld $t1, 0x118($t0)
|
|
/* 00462C 80003A2C FF490118 */ sd $t1, 0x118($k0)
|
|
/* 004630 80003A30 DD090058 */ ld $t1, 0x58($t0)
|
|
/* 004634 80003A34 FF490058 */ sd $t1, 0x58($k0)
|
|
/* 004638 80003A38 DD090060 */ ld $t1, 0x60($t0)
|
|
/* 00463C 80003A3C FF490060 */ sd $t1, 0x60($k0)
|
|
/* 004640 80003A40 DD090068 */ ld $t1, 0x68($t0)
|
|
/* 004644 80003A44 FF490068 */ sd $t1, 0x68($k0)
|
|
/* 004648 80003A48 8F5B0118 */ lw $k1, 0x118($k0)
|
|
/* 00464C 80003A4C 00004012 */ mflo $t0
|
|
/* 004650 80003A50 FF480108 */ sd $t0, 0x108($k0)
|
|
/* 004654 80003A54 00004010 */ mfhi $t0
|
|
/* 004658 80003A58 3369FF00 */ andi $t1, $k1, 0xff00
|
|
/* 00465C 80003A5C FF420028 */ sd $v0, 0x28($k0)
|
|
/* 004660 80003A60 FF430030 */ sd $v1, 0x30($k0)
|
|
/* 004664 80003A64 FF440038 */ sd $a0, 0x38($k0)
|
|
/* 004668 80003A68 FF450040 */ sd $a1, 0x40($k0)
|
|
/* 00466C 80003A6C FF460048 */ sd $a2, 0x48($k0)
|
|
/* 004670 80003A70 FF470050 */ sd $a3, 0x50($k0)
|
|
/* 004674 80003A74 FF4B0070 */ sd $t3, 0x70($k0)
|
|
/* 004678 80003A78 FF4C0078 */ sd $t4, 0x78($k0)
|
|
/* 00467C 80003A7C FF4D0080 */ sd $t5, 0x80($k0)
|
|
/* 004680 80003A80 FF4E0088 */ sd $t6, 0x88($k0)
|
|
/* 004684 80003A84 FF4F0090 */ sd $t7, 0x90($k0)
|
|
/* 004688 80003A88 FF500098 */ sd $s0, 0x98($k0)
|
|
/* 00468C 80003A8C FF5100A0 */ sd $s1, 0xa0($k0)
|
|
/* 004690 80003A90 FF5200A8 */ sd $s2, 0xa8($k0)
|
|
/* 004694 80003A94 FF5300B0 */ sd $s3, 0xb0($k0)
|
|
/* 004698 80003A98 FF5400B8 */ sd $s4, 0xb8($k0)
|
|
/* 00469C 80003A9C FF5500C0 */ sd $s5, 0xc0($k0)
|
|
/* 0046A0 80003AA0 FF5600C8 */ sd $s6, 0xc8($k0)
|
|
/* 0046A4 80003AA4 FF5700D0 */ sd $s7, 0xd0($k0)
|
|
/* 0046A8 80003AA8 FF5800D8 */ sd $t8, 0xd8($k0)
|
|
/* 0046AC 80003AAC FF5900E0 */ sd $t9, 0xe0($k0)
|
|
/* 0046B0 80003AB0 FF5C00E8 */ sd $gp, 0xe8($k0)
|
|
/* 0046B4 80003AB4 FF5D00F0 */ sd $sp, 0xf0($k0)
|
|
/* 0046B8 80003AB8 FF5E00F8 */ sd $fp, 0xf8($k0)
|
|
/* 0046BC 80003ABC FF5F0100 */ sd $ra, 0x100($k0)
|
|
/* 0046C0 80003AC0 11200011 */ beqz $t1, savercp
|
|
/* 0046C4 80003AC4 FF480110 */ sd $t0, 0x110($k0)
|
|
/* 0046C8 80003AC8 3C088001 */ lui $t0, %hi(__OSGlobalIntMask) # $t0, 0x8001
|
|
/* 0046CC 80003ACC 2508AD00 */ addiu $t0, %lo(__OSGlobalIntMask) # addiu $t0, $t0, -0x5300
|
|
/* 0046D0 80003AD0 8D080000 */ lw $t0, ($t0)
|
|
/* 0046D4 80003AD4 2401FFFF */ li $at, -1
|
|
/* 0046D8 80003AD8 01015026 */ xor $t2, $t0, $at
|
|
/* 0046DC 80003ADC 3C01FFFF */ lui $at, (0xFFFF00FF >> 16) # lui $at, 0xffff
|
|
/* 0046E0 80003AE0 314AFF00 */ andi $t2, $t2, 0xff00
|
|
/* 0046E4 80003AE4 342100FF */ ori $at, (0xFFFF00FF & 0xFFFF) # ori $at, $at, 0xff
|
|
/* 0046E8 80003AE8 012A6025 */ or $t4, $t1, $t2
|
|
/* 0046EC 80003AEC 03615824 */ and $t3, $k1, $at
|
|
/* 0046F0 80003AF0 3108FF00 */ andi $t0, $t0, 0xff00
|
|
/* 0046F4 80003AF4 016C5825 */ or $t3, $t3, $t4
|
|
/* 0046F8 80003AF8 01284824 */ and $t1, $t1, $t0
|
|
/* 0046FC 80003AFC 0361D824 */ and $k1, $k1, $at
|
|
/* 004700 80003B00 AF4B0118 */ sw $t3, 0x118($k0)
|
|
/* 004704 80003B04 0369D825 */ or $k1, $k1, $t1
|
|
savercp:
|
|
/* 004708 80003B08 3C09A430 */ lui $t1, %hi(D_A430000C) # $t1, 0xa430
|
|
/* 00470C 80003B0C 8D29000C */ lw $t1, %lo(D_A430000C)($t1)
|
|
/* 004710 80003B10 1120000B */ beqz $t1, endrcp
|
|
/* 004714 80003B14 00000000 */ nop
|
|
/* 004718 80003B18 3C088001 */ lui $t0, %hi(__OSGlobalIntMask) # $t0, 0x8001
|
|
/* 00471C 80003B1C 2508AD00 */ addiu $t0, %lo(__OSGlobalIntMask) # addiu $t0, $t0, -0x5300
|
|
/* 004720 80003B20 8D080000 */ lw $t0, ($t0)
|
|
/* 004724 80003B24 8F4C0128 */ lw $t4, 0x128($k0)
|
|
/* 004728 80003B28 2401FFFF */ li $at, -1
|
|
/* 00472C 80003B2C 00084402 */ srl $t0, $t0, 0x10
|
|
/* 004730 80003B30 01014026 */ xor $t0, $t0, $at
|
|
/* 004734 80003B34 3108003F */ andi $t0, $t0, 0x3f
|
|
/* 004738 80003B38 010C4024 */ and $t0, $t0, $t4
|
|
/* 00473C 80003B3C 01284825 */ or $t1, $t1, $t0
|
|
endrcp:
|
|
/* 004740 80003B40 AF490128 */ sw $t1, 0x128($k0)
|
|
/* 004744 80003B44 40087000 */ mfc0 $t0, $14
|
|
/* 004748 80003B48 AF48011C */ sw $t0, 0x11c($k0)
|
|
/* 00474C 80003B4C 8F480018 */ lw $t0, 0x18($k0)
|
|
/* 004750 80003B50 11000014 */ beqz $t0, no_rdb_mesg
|
|
/* 004754 80003B54 00000000 */ nop
|
|
/* 004758 80003B58 4448F800 */ cfc1 $t0, $31
|
|
/* 00475C 80003B5C 00000000 */ nop
|
|
/* 004760 80003B60 AF48012C */ sw $t0, 0x12c($k0)
|
|
/* 004764 80003B64 F7400130 */ sdc1 $f0, 0x130($k0)
|
|
/* 004768 80003B68 F7420138 */ sdc1 $f2, 0x138($k0)
|
|
/* 00476C 80003B6C F7440140 */ sdc1 $f4, 0x140($k0)
|
|
/* 004770 80003B70 F7460148 */ sdc1 $f6, 0x148($k0)
|
|
/* 004774 80003B74 F7480150 */ sdc1 $f8, 0x150($k0)
|
|
/* 004778 80003B78 F74A0158 */ sdc1 $f10, 0x158($k0)
|
|
/* 00477C 80003B7C F74C0160 */ sdc1 $f12, 0x160($k0)
|
|
/* 004780 80003B80 F74E0168 */ sdc1 $f14, 0x168($k0)
|
|
/* 004784 80003B84 F7500170 */ sdc1 $f16, 0x170($k0)
|
|
/* 004788 80003B88 F7520178 */ sdc1 $f18, 0x178($k0)
|
|
/* 00478C 80003B8C F7540180 */ sdc1 $f20, 0x180($k0)
|
|
/* 004790 80003B90 F7560188 */ sdc1 $f22, 0x188($k0)
|
|
/* 004794 80003B94 F7580190 */ sdc1 $f24, 0x190($k0)
|
|
/* 004798 80003B98 F75A0198 */ sdc1 $f26, 0x198($k0)
|
|
/* 00479C 80003B9C F75C01A0 */ sdc1 $f28, 0x1a0($k0)
|
|
/* 0047A0 80003BA0 F75E01A8 */ sdc1 $f30, 0x1a8($k0)
|
|
no_rdb_mesg:
|
|
/* 0047A4 80003BA4 40086800 */ mfc0 $t0, $13
|
|
/* 0047A8 80003BA8 AF480120 */ sw $t0, 0x120($k0)
|
|
/* 0047AC 80003BAC 24090002 */ li $t1, 2
|
|
/* 0047B0 80003BB0 A7490010 */ sh $t1, 0x10($k0)
|
|
/* 0047B4 80003BB4 3109007C */ andi $t1, $t0, 0x7c
|
|
/* 0047B8 80003BB8 240A0024 */ li $t2, 36
|
|
/* 0047BC 80003BBC 112A00B6 */ beq $t1, $t2, handle_break
|
|
/* 0047C0 80003BC0 00000000 */ nop
|
|
/* 0047C4 80003BC4 240A002C */ li $t2, 44
|
|
/* 0047C8 80003BC8 112A0105 */ beq $t1, $t2, handle_CpU
|
|
/* 0047CC 80003BCC 00000000 */ nop
|
|
/* 0047D0 80003BD0 240A0000 */ li $t2, 0
|
|
/* 0047D4 80003BD4 152A00C9 */ bne $t1, $t2, panic
|
|
/* 0047D8 80003BD8 00000000 */ nop
|
|
/* 0047DC 80003BDC 03688024 */ and $s0, $k1, $t0
|
|
next_interrupt:
|
|
/* 0047E0 80003BE0 3209FF00 */ andi $t1, $s0, 0xff00
|
|
/* 0047E4 80003BE4 00095302 */ srl $t2, $t1, 0xc
|
|
/* 0047E8 80003BE8 15400003 */ bnez $t2, .L80003BF8
|
|
/* 0047EC 80003BEC 00000000 */ nop
|
|
/* 0047F0 80003BF0 00095202 */ srl $t2, $t1, 8
|
|
/* 0047F4 80003BF4 214A0010 */ addi $t2, $t2, 0x10
|
|
.L80003BF8:
|
|
/* 0047F8 80003BF8 3C018001 */ lui $at, %hi(__osIntOffTable)
|
|
/* 0047FC 80003BFC 002A0821 */ addu $at, $at, $t2
|
|
/* 004800 80003C00 902A20F0 */ lbu $t2, %lo(__osIntOffTable)($at)
|
|
/* 004804 80003C04 3C018001 */ lui $at, %hi(__osIntTable)
|
|
/* 004808 80003C08 002A0821 */ addu $at, $at, $t2
|
|
/* 00480C 80003C0C 8C2A2110 */ lw $t2, %lo(__osIntTable)($at)
|
|
/* 004810 80003C10 01400008 */ jr $t2
|
|
/* 004814 80003C14 00000000 */ nop
|
|
IP6_Hdlr:
|
|
/* 004818 80003C18 2401DFFF */ li $at, -8193
|
|
/* 00481C 80003C1C 1000FFF0 */ b next_interrupt
|
|
/* 004820 80003C20 02018024 */ and $s0, $s0, $at
|
|
IP7_Hdlr:
|
|
/* 004824 80003C24 2401BFFF */ li $at, -16385
|
|
/* 004828 80003C28 1000FFED */ b next_interrupt
|
|
/* 00482C 80003C2C 02018024 */ and $s0, $s0, $at
|
|
counter:
|
|
/* 004830 80003C30 40095800 */ mfc0 $t1, $11
|
|
/* 004834 80003C34 40895800 */ mtc0 $t1, $11
|
|
/* 004838 80003C38 0C000FCB */ jal send_mesg
|
|
/* 00483C 80003C3C 24040018 */ li $a0, 24
|
|
/* 004840 80003C40 3C01FFFF */ lui $at, (0xFFFF7FFF >> 16) # lui $at, 0xffff
|
|
/* 004844 80003C44 34217FFF */ ori $at, (0xFFFF7FFF & 0xFFFF) # ori $at, $at, 0x7fff
|
|
/* 004848 80003C48 1000FFE5 */ b next_interrupt
|
|
/* 00484C 80003C4C 02018024 */ and $s0, $s0, $at
|
|
cart:
|
|
/* 004850 80003C50 3C098001 */ lui $t1, %hi(__osHwIntTable) # $t1, 0x8001
|
|
/* 004854 80003C54 2529AD10 */ addiu $t1, %lo(__osHwIntTable) # addiu $t1, $t1, -0x52f0
|
|
/* 004858 80003C58 8D2A0008 */ lw $t2, 8($t1)
|
|
/* 00485C 80003C5C 2401F7FF */ li $at, -2049
|
|
/* 004860 80003C60 02018024 */ and $s0, $s0, $at
|
|
/* 004864 80003C64 11400007 */ beqz $t2, .L80003C84
|
|
/* 004868 80003C68 21290008 */ addi $t1, $t1, 8
|
|
/* 00486C 80003C6C 0140F809 */ jalr $t2
|
|
/* 004870 80003C70 8D3D0004 */ lw $sp, 4($t1)
|
|
/* 004874 80003C74 10400003 */ beqz $v0, .L80003C84
|
|
/* 004878 80003C78 00000000 */ nop
|
|
/* 00487C 80003C7C 1000008C */ b redispatch
|
|
/* 004880 80003C80 00000000 */ nop
|
|
.L80003C84:
|
|
/* 004884 80003C84 0C000FCB */ jal send_mesg
|
|
/* 004888 80003C88 24040010 */ li $a0, 16
|
|
/* 00488C 80003C8C 1000FFD4 */ b next_interrupt
|
|
/* 004890 80003C90 00000000 */ nop
|
|
rcp:
|
|
/* 004894 80003C94 3C088001 */ lui $t0, %hi(__OSGlobalIntMask) # $t0, 0x8001
|
|
/* 004898 80003C98 2508AD00 */ addiu $t0, %lo(__OSGlobalIntMask) # addiu $t0, $t0, -0x5300
|
|
/* 00489C 80003C9C 8D080000 */ lw $t0, ($t0)
|
|
/* 0048A0 80003CA0 3C11A430 */ lui $s1, %hi(D_A4300008) # $s1, 0xa430
|
|
/* 0048A4 80003CA4 8E310008 */ lw $s1, %lo(D_A4300008)($s1)
|
|
/* 0048A8 80003CA8 00084402 */ srl $t0, $t0, 0x10
|
|
/* 0048AC 80003CAC 02288824 */ and $s1, $s1, $t0
|
|
/* 0048B0 80003CB0 32290001 */ andi $t1, $s1, 1
|
|
/* 0048B4 80003CB4 11200013 */ beqz $t1, vi
|
|
/* 0048B8 80003CB8 00000000 */ nop
|
|
/* 0048BC 80003CBC 3C0CA404 */ lui $t4, %hi(D_A4040010) # $t4, 0xa404
|
|
/* 0048C0 80003CC0 8D8C0010 */ lw $t4, %lo(D_A4040010)($t4)
|
|
/* 0048C4 80003CC4 34098008 */ li $t1, 32776
|
|
/* 0048C8 80003CC8 3C01A404 */ lui $at, %hi(D_A4040010) # $at, 0xa404
|
|
/* 0048CC 80003CCC 318C0300 */ andi $t4, $t4, 0x300
|
|
/* 0048D0 80003CD0 3231003E */ andi $s1, $s1, 0x3e
|
|
/* 0048D4 80003CD4 11800007 */ beqz $t4, sp_other_break
|
|
/* 0048D8 80003CD8 AC290010 */ sw $t1, %lo(D_A4040010)($at)
|
|
/* 0048DC 80003CDC 0C000FCB */ jal send_mesg
|
|
/* 0048E0 80003CE0 24040020 */ li $a0, 32
|
|
/* 0048E4 80003CE4 12200042 */ beqz $s1, NoMoreRcpInts
|
|
/* 0048E8 80003CE8 00000000 */ nop
|
|
/* 0048EC 80003CEC 10000005 */ b vi
|
|
/* 0048F0 80003CF0 00000000 */ nop
|
|
sp_other_break:
|
|
/* 0048F4 80003CF4 0C000FCB */ jal send_mesg
|
|
/* 0048F8 80003CF8 24040058 */ li $a0, 88
|
|
/* 0048FC 80003CFC 1220003C */ beqz $s1, NoMoreRcpInts
|
|
/* 004900 80003D00 00000000 */ nop
|
|
vi:
|
|
/* 004904 80003D04 32290008 */ andi $t1, $s1, 8
|
|
/* 004908 80003D08 11200007 */ beqz $t1, ai
|
|
/* 00490C 80003D0C 3C01A440 */ lui $at, %hi(D_A4400010) # $at, 0xa440
|
|
/* 004910 80003D10 32310037 */ andi $s1, $s1, 0x37
|
|
/* 004914 80003D14 AC200010 */ sw $zero, %lo(D_A4400010)($at)
|
|
/* 004918 80003D18 0C000FCB */ jal send_mesg
|
|
/* 00491C 80003D1C 24040038 */ li $a0, 56
|
|
/* 004920 80003D20 12200033 */ beqz $s1, NoMoreRcpInts
|
|
/* 004924 80003D24 00000000 */ nop
|
|
ai:
|
|
/* 004928 80003D28 32290004 */ andi $t1, $s1, 4
|
|
/* 00492C 80003D2C 11200009 */ beqz $t1, si
|
|
/* 004930 80003D30 00000000 */ nop
|
|
/* 004934 80003D34 24090001 */ li $t1, 1
|
|
/* 004938 80003D38 3C01A450 */ lui $at, %hi(D_A450000C) # $at, 0xa450
|
|
/* 00493C 80003D3C 3231003B */ andi $s1, $s1, 0x3b
|
|
/* 004940 80003D40 AC29000C */ sw $t1, %lo(D_A450000C)($at)
|
|
/* 004944 80003D44 0C000FCB */ jal send_mesg
|
|
/* 004948 80003D48 24040030 */ li $a0, 48
|
|
/* 00494C 80003D4C 12200028 */ beqz $s1, NoMoreRcpInts
|
|
/* 004950 80003D50 00000000 */ nop
|
|
si:
|
|
/* 004954 80003D54 32290002 */ andi $t1, $s1, 2
|
|
/* 004958 80003D58 11200007 */ beqz $t1, pi
|
|
/* 00495C 80003D5C 3C01A480 */ lui $at, %hi(D_A4800018) # $at, 0xa480
|
|
/* 004960 80003D60 3231003D */ andi $s1, $s1, 0x3d
|
|
/* 004964 80003D64 AC200018 */ sw $zero, %lo(D_A4800018)($at)
|
|
/* 004968 80003D68 0C000FCB */ jal send_mesg
|
|
/* 00496C 80003D6C 24040028 */ li $a0, 40
|
|
/* 004970 80003D70 1220001F */ beqz $s1, NoMoreRcpInts
|
|
/* 004974 80003D74 00000000 */ nop
|
|
pi:
|
|
/* 004978 80003D78 32290010 */ andi $t1, $s1, 0x10
|
|
/* 00497C 80003D7C 11200013 */ beqz $t1, dp
|
|
/* 004980 80003D80 00000000 */ nop
|
|
/* 004984 80003D84 24090002 */ li $t1, 2
|
|
/* 004988 80003D88 3C01A460 */ lui $at, %hi(D_A4600010) # $at, 0xa460
|
|
/* 00498C 80003D8C AC290010 */ sw $t1, %lo(D_A4600010)($at)
|
|
/* 004990 80003D90 3C098001 */ lui $t1, %hi(__osPiIntTable) # $t1, 0x8001
|
|
/* 004994 80003D94 2529AD38 */ addiu $t1, %lo(__osPiIntTable) # addiu $t1, $t1, -0x52c8
|
|
/* 004998 80003D98 8D2A0000 */ lw $t2, ($t1)
|
|
/* 00499C 80003D9C 3231002F */ andi $s1, $s1, 0x2f
|
|
/* 0049A0 80003DA0 11400006 */ beqz $t2, .L80003DBC
|
|
/* 0049A4 80003DA4 00000000 */ nop
|
|
/* 0049A8 80003DA8 8D3D0004 */ lw $sp, 4($t1)
|
|
/* 0049AC 80003DAC 0140F809 */ jalr $t2
|
|
/* 0049B0 80003DB0 00402025 */ move $a0, $v0
|
|
/* 0049B4 80003DB4 14400003 */ bnez $v0, .L80003DC4
|
|
/* 0049B8 80003DB8 00000000 */ nop
|
|
.L80003DBC:
|
|
/* 0049BC 80003DBC 0C000FCB */ jal send_mesg
|
|
/* 0049C0 80003DC0 24040040 */ li $a0, 64
|
|
.L80003DC4:
|
|
/* 0049C4 80003DC4 1220000A */ beqz $s1, NoMoreRcpInts
|
|
/* 0049C8 80003DC8 00000000 */ nop
|
|
dp:
|
|
/* 0049CC 80003DCC 32290020 */ andi $t1, $s1, 0x20
|
|
/* 0049D0 80003DD0 11200007 */ beqz $t1, NoMoreRcpInts
|
|
/* 0049D4 80003DD4 00000000 */ nop
|
|
/* 0049D8 80003DD8 24090800 */ li $t1, 2048
|
|
/* 0049DC 80003DDC 3C01A430 */ lui $at, 0xa430
|
|
/* 0049E0 80003DE0 3231001F */ andi $s1, $s1, 0x1f
|
|
/* 0049E4 80003DE4 AC290000 */ sw $t1, ($at)
|
|
/* 0049E8 80003DE8 0C000FCB */ jal send_mesg
|
|
/* 0049EC 80003DEC 24040048 */ li $a0, 72
|
|
NoMoreRcpInts:
|
|
/* 0049F0 80003DF0 2401FBFF */ li $at, -1025
|
|
/* 0049F4 80003DF4 1000FF7A */ b next_interrupt
|
|
/* 0049F8 80003DF8 02018024 */ and $s0, $s0, $at
|
|
prenmi:
|
|
/* 0049FC 80003DFC 8F5B0118 */ lw $k1, 0x118($k0)
|
|
/* 004A00 80003E00 2401EFFF */ li $at, -4097
|
|
/* 004A04 80003E04 3C098001 */ lui $t1, %hi(__osShutdown) # $t1, 0x8001
|
|
/* 004A08 80003E08 0361D824 */ and $k1, $k1, $at
|
|
/* 004A0C 80003E0C AF5B0118 */ sw $k1, 0x118($k0)
|
|
/* 004A10 80003E10 2529ACFC */ addiu $t1, %lo(__osShutdown) # addiu $t1, $t1, -0x5304
|
|
/* 004A14 80003E14 8D2A0000 */ lw $t2, ($t1)
|
|
/* 004A18 80003E18 11400003 */ beqz $t2, firstnmi
|
|
/* 004A1C 80003E1C 2401EFFF */ li $at, -4097
|
|
/* 004A20 80003E20 10000023 */ b redispatch
|
|
/* 004A24 80003E24 02018024 */ and $s0, $s0, $at
|
|
firstnmi:
|
|
/* 004A28 80003E28 240A0001 */ li $t2, 1
|
|
/* 004A2C 80003E2C AD2A0000 */ sw $t2, ($t1)
|
|
/* 004A30 80003E30 0C000FCB */ jal send_mesg
|
|
/* 004A34 80003E34 24040070 */ li $a0, 112
|
|
/* 004A38 80003E38 3C0A8001 */ lui $t2, %hi(__osRunQueue) # $t2, 0x8001
|
|
/* 004A3C 80003E3C 8D4AAD48 */ lw $t2, %lo(__osRunQueue)($t2)
|
|
/* 004A40 80003E40 2401EFFF */ li $at, -4097
|
|
/* 004A44 80003E44 02018024 */ and $s0, $s0, $at
|
|
/* 004A48 80003E48 8D5B0118 */ lw $k1, 0x118($t2)
|
|
/* 004A4C 80003E4C 0361D824 */ and $k1, $k1, $at
|
|
/* 004A50 80003E50 10000017 */ b redispatch
|
|
/* 004A54 80003E54 AD5B0118 */ sw $k1, 0x118($t2)
|
|
sw2:
|
|
/* 004A58 80003E58 2401FDFF */ li $at, -513
|
|
/* 004A5C 80003E5C 01014024 */ and $t0, $t0, $at
|
|
/* 004A60 80003E60 40886800 */ mtc0 $t0, $13
|
|
/* 004A64 80003E64 0C000FCB */ jal send_mesg
|
|
/* 004A68 80003E68 24040008 */ li $a0, 8
|
|
/* 004A6C 80003E6C 2401FDFF */ li $at, -513
|
|
/* 004A70 80003E70 1000FF5B */ b next_interrupt
|
|
/* 004A74 80003E74 02018024 */ and $s0, $s0, $at
|
|
sw1:
|
|
/* 004A78 80003E78 2401FEFF */ li $at, -257
|
|
/* 004A7C 80003E7C 01014024 */ and $t0, $t0, $at
|
|
/* 004A80 80003E80 40886800 */ mtc0 $t0, $13
|
|
/* 004A84 80003E84 0C000FCB */ jal send_mesg
|
|
/* 004A88 80003E88 24040000 */ li $a0, 0
|
|
/* 004A8C 80003E8C 2401FEFF */ li $at, -257
|
|
/* 004A90 80003E90 1000FF53 */ b next_interrupt
|
|
/* 004A94 80003E94 02018024 */ and $s0, $s0, $at
|
|
handle_break:
|
|
/* 004A98 80003E98 24090001 */ li $t1, 1
|
|
/* 004A9C 80003E9C A7490012 */ sh $t1, 0x12($k0)
|
|
/* 004AA0 80003EA0 0C000FCB */ jal send_mesg
|
|
/* 004AA4 80003EA4 24040050 */ li $a0, 80
|
|
/* 004AA8 80003EA8 10000001 */ b redispatch
|
|
/* 004AAC 80003EAC 00000000 */ nop
|
|
redispatch:
|
|
/* 004AB0 80003EB0 3C0A8001 */ lui $t2, %hi(__osRunQueue) # $t2, 0x8001
|
|
/* 004AB4 80003EB4 8D4AAD48 */ lw $t2, %lo(__osRunQueue)($t2)
|
|
/* 004AB8 80003EB8 8F490004 */ lw $t1, 4($k0)
|
|
/* 004ABC 80003EBC 8D4B0004 */ lw $t3, 4($t2)
|
|
/* 004AC0 80003EC0 012B082A */ slt $at, $t1, $t3
|
|
/* 004AC4 80003EC4 10200007 */ beqz $at, enqueueRunning
|
|
/* 004AC8 80003EC8 00000000 */ nop
|
|
/* 004ACC 80003ECC 3C048001 */ lui $a0, %hi(__osRunQueue) # $a0, 0x8001
|
|
/* 004AD0 80003ED0 03402825 */ move $a1, $k0
|
|
/* 004AD4 80003ED4 0C001045 */ jal __osEnqueueThread
|
|
/* 004AD8 80003ED8 2484AD48 */ addiu $a0, %lo(__osRunQueue) # addiu $a0, $a0, -0x52b8
|
|
/* 004ADC 80003EDC 0800105D */ j __osDispatchThread
|
|
/* 004AE0 80003EE0 00000000 */ nop
|
|
|
|
enqueueRunning:
|
|
/* 004AE4 80003EE4 3C098001 */ lui $t1, %hi(__osRunQueue) # $t1, 0x8001
|
|
/* 004AE8 80003EE8 2529AD48 */ addiu $t1, %lo(__osRunQueue) # addiu $t1, $t1, -0x52b8
|
|
/* 004AEC 80003EEC 8D2A0000 */ lw $t2, ($t1)
|
|
/* 004AF0 80003EF0 AF4A0000 */ sw $t2, ($k0)
|
|
/* 004AF4 80003EF4 0800105D */ j __osDispatchThread
|
|
/* 004AF8 80003EF8 AD3A0000 */ sw $k0, ($t1)
|
|
|
|
panic:
|
|
/* 004AFC 80003EFC 3C018001 */ lui $at, %hi(__osFaultedThread) # $at, 0x8001
|
|
/* 004B00 80003F00 AC3AAD54 */ sw $k0, %lo(__osFaultedThread)($at)
|
|
/* 004B04 80003F04 24090001 */ li $t1, 1
|
|
/* 004B08 80003F08 A7490010 */ sh $t1, 0x10($k0)
|
|
/* 004B0C 80003F0C 24090002 */ li $t1, 2
|
|
/* 004B10 80003F10 A7490012 */ sh $t1, 0x12($k0)
|
|
/* 004B14 80003F14 400A4000 */ mfc0 $t2, $8
|
|
/* 004B18 80003F18 AF4A0124 */ sw $t2, 0x124($k0)
|
|
/* 004B1C 80003F1C 0C000FCB */ jal send_mesg
|
|
/* 004B20 80003F20 24040060 */ li $a0, 96
|
|
/* 004B24 80003F24 0800105D */ j __osDispatchThread
|
|
/* 004B28 80003F28 00000000 */ nop
|
|
|
|
glabel send_mesg
|
|
/* 004B2C 80003F2C 3C0A8001 */ lui $t2, %hi(__osEventStateTab) # $t2, 0x8001
|
|
/* 004B30 80003F30 254A5A40 */ addiu $t2, %lo(__osEventStateTab) # addiu $t2, $t2, 0x5a40
|
|
/* 004B34 80003F34 01445021 */ addu $t2, $t2, $a0
|
|
/* 004B38 80003F38 8D490000 */ lw $t1, ($t2)
|
|
/* 004B3C 80003F3C 03E09025 */ move $s2, $ra
|
|
/* 004B40 80003F40 11200025 */ beqz $t1, send_done
|
|
/* 004B44 80003F44 00000000 */ nop
|
|
/* 004B48 80003F48 8D2B0008 */ lw $t3, 8($t1)
|
|
/* 004B4C 80003F4C 8D2C0010 */ lw $t4, 0x10($t1)
|
|
/* 004B50 80003F50 016C082A */ slt $at, $t3, $t4
|
|
/* 004B54 80003F54 10200020 */ beqz $at, send_done
|
|
/* 004B58 80003F58 00000000 */ nop
|
|
/* 004B5C 80003F5C 8D2D000C */ lw $t5, 0xc($t1)
|
|
/* 004B60 80003F60 01AB6821 */ addu $t5, $t5, $t3
|
|
/* 004B64 80003F64 01AC001A */ div $zero, $t5, $t4
|
|
/* 004B68 80003F68 15800002 */ bnez $t4, .L80003F74
|
|
/* 004B6C 80003F6C 00000000 */ nop
|
|
/* 004B70 80003F70 0007000D */ break 7
|
|
.L80003F74:
|
|
/* 004B74 80003F74 2401FFFF */ li $at, -1
|
|
/* 004B78 80003F78 15810004 */ bne $t4, $at, .L80003F8C
|
|
/* 004B7C 80003F7C 3C018000 */ lui $at, 0x8000
|
|
/* 004B80 80003F80 15A10002 */ bne $t5, $at, .L80003F8C
|
|
/* 004B84 80003F84 00000000 */ nop
|
|
/* 004B88 80003F88 0006000D */ break 6
|
|
.L80003F8C:
|
|
/* 004B8C 80003F8C 8D2C0014 */ lw $t4, 0x14($t1)
|
|
/* 004B90 80003F90 00006810 */ mfhi $t5
|
|
/* 004B94 80003F94 000D6880 */ sll $t5, $t5, 2
|
|
/* 004B98 80003F98 018D6021 */ addu $t4, $t4, $t5
|
|
/* 004B9C 80003F9C 8D4D0004 */ lw $t5, 4($t2)
|
|
/* 004BA0 80003FA0 256A0001 */ addiu $t2, $t3, 1
|
|
/* 004BA4 80003FA4 AD8D0000 */ sw $t5, ($t4)
|
|
/* 004BA8 80003FA8 AD2A0008 */ sw $t2, 8($t1)
|
|
/* 004BAC 80003FAC 8D2A0000 */ lw $t2, ($t1)
|
|
/* 004BB0 80003FB0 8D4B0000 */ lw $t3, ($t2)
|
|
/* 004BB4 80003FB4 11600008 */ beqz $t3, send_done
|
|
/* 004BB8 80003FB8 00000000 */ nop
|
|
/* 004BBC 80003FBC 0C001057 */ jal __osPopThread
|
|
/* 004BC0 80003FC0 01202025 */ move $a0, $t1
|
|
/* 004BC4 80003FC4 00405025 */ move $t2, $v0
|
|
/* 004BC8 80003FC8 3C048001 */ lui $a0, %hi(__osRunQueue) # $a0, 0x8001
|
|
/* 004BCC 80003FCC 01402825 */ move $a1, $t2
|
|
/* 004BD0 80003FD0 0C001045 */ jal __osEnqueueThread
|
|
/* 004BD4 80003FD4 2484AD48 */ addiu $a0, %lo(__osRunQueue) # addiu $a0, $a0, -0x52b8
|
|
send_done:
|
|
/* 004BD8 80003FD8 02400008 */ jr $s2
|
|
/* 004BDC 80003FDC 00000000 */ nop
|
|
handle_CpU:
|
|
/* 004BE0 80003FE0 3C013000 */ lui $at, 0x3000
|
|
/* 004BE4 80003FE4 01014824 */ and $t1, $t0, $at
|
|
/* 004BE8 80003FE8 00094F02 */ srl $t1, $t1, 0x1c
|
|
/* 004BEC 80003FEC 240A0001 */ li $t2, 1
|
|
/* 004BF0 80003FF0 152AFFC2 */ bne $t1, $t2, panic
|
|
/* 004BF4 80003FF4 00000000 */ nop
|
|
/* 004BF8 80003FF8 8F5B0118 */ lw $k1, 0x118($k0)
|
|
/* 004BFC 80003FFC 3C012000 */ lui $at, 0x2000
|
|
glabel func_80004000
|
|
/* 004C00 80004000 24090001 */ li $t1, 1
|
|
/* 004C04 80004004 0361D825 */ or $k1, $k1, $at
|
|
/* 004C08 80004008 AF490018 */ sw $t1, 0x18($k0)
|
|
/* 004C0C 8000400C 1000FFB5 */ b enqueueRunning
|
|
/* 004C10 80004010 AF5B0118 */ sw $k1, 0x118($k0)
|
|
glabel __osEnqueueAndYield
|
|
/* 004C14 80004014 3C058001 */ lui $a1, %hi(__osRunningThread) # $a1, 0x8001
|
|
/* 004C18 80004018 8CA5AD50 */ lw $a1, %lo(__osRunningThread)($a1)
|
|
/* 004C1C 8000401C 40086000 */ mfc0 $t0, $12
|
|
/* 004C20 80004020 8CBB0018 */ lw $k1, 0x18($a1)
|
|
/* 004C24 80004024 35080002 */ ori $t0, $t0, 2
|
|
/* 004C28 80004028 ACA80118 */ sw $t0, 0x118($a1)
|
|
/* 004C2C 8000402C FCB00098 */ sd $s0, 0x98($a1)
|
|
/* 004C30 80004030 FCB100A0 */ sd $s1, 0xa0($a1)
|
|
/* 004C34 80004034 FCB200A8 */ sd $s2, 0xa8($a1)
|
|
/* 004C38 80004038 FCB300B0 */ sd $s3, 0xb0($a1)
|
|
/* 004C3C 8000403C FCB400B8 */ sd $s4, 0xb8($a1)
|
|
/* 004C40 80004040 FCB500C0 */ sd $s5, 0xc0($a1)
|
|
/* 004C44 80004044 FCB600C8 */ sd $s6, 0xc8($a1)
|
|
/* 004C48 80004048 FCB700D0 */ sd $s7, 0xd0($a1)
|
|
/* 004C4C 8000404C FCBC00E8 */ sd $gp, 0xe8($a1)
|
|
/* 004C50 80004050 FCBD00F0 */ sd $sp, 0xf0($a1)
|
|
/* 004C54 80004054 FCBE00F8 */ sd $fp, 0xf8($a1)
|
|
/* 004C58 80004058 FCBF0100 */ sd $ra, 0x100($a1)
|
|
/* 004C5C 8000405C 13600009 */ beqz $k1, .L80004084
|
|
/* 004C60 80004060 ACBF011C */ sw $ra, 0x11c($a1)
|
|
/* 004C64 80004064 445BF800 */ cfc1 $k1, $31
|
|
/* 004C68 80004068 F4B40180 */ sdc1 $f20, 0x180($a1)
|
|
/* 004C6C 8000406C F4B60188 */ sdc1 $f22, 0x188($a1)
|
|
/* 004C70 80004070 F4B80190 */ sdc1 $f24, 0x190($a1)
|
|
/* 004C74 80004074 F4BA0198 */ sdc1 $f26, 0x198($a1)
|
|
/* 004C78 80004078 F4BC01A0 */ sdc1 $f28, 0x1a0($a1)
|
|
/* 004C7C 8000407C F4BE01A8 */ sdc1 $f30, 0x1a8($a1)
|
|
/* 004C80 80004080 ACBB012C */ sw $k1, 0x12c($a1)
|
|
.L80004084:
|
|
/* 004C84 80004084 8CBB0118 */ lw $k1, 0x118($a1)
|
|
/* 004C88 80004088 3369FF00 */ andi $t1, $k1, 0xff00
|
|
/* 004C8C 8000408C 1120000D */ beqz $t1, .L800040C4
|
|
/* 004C90 80004090 00000000 */ nop
|
|
/* 004C94 80004094 3C088001 */ lui $t0, %hi(__OSGlobalIntMask) # $t0, 0x8001
|
|
/* 004C98 80004098 2508AD00 */ addiu $t0, %lo(__OSGlobalIntMask) # addiu $t0, $t0, -0x5300
|
|
/* 004C9C 8000409C 8D080000 */ lw $t0, ($t0)
|
|
/* 004CA0 800040A0 2401FFFF */ li $at, -1
|
|
/* 004CA4 800040A4 01014026 */ xor $t0, $t0, $at
|
|
/* 004CA8 800040A8 3C01FFFF */ lui $at, (0xFFFF00FF >> 16) # lui $at, 0xffff
|
|
/* 004CAC 800040AC 3108FF00 */ andi $t0, $t0, 0xff00
|
|
/* 004CB0 800040B0 342100FF */ ori $at, (0xFFFF00FF & 0xFFFF) # ori $at, $at, 0xff
|
|
/* 004CB4 800040B4 01284825 */ or $t1, $t1, $t0
|
|
/* 004CB8 800040B8 0361D824 */ and $k1, $k1, $at
|
|
/* 004CBC 800040BC 0369D825 */ or $k1, $k1, $t1
|
|
/* 004CC0 800040C0 ACBB0118 */ sw $k1, 0x118($a1)
|
|
.L800040C4:
|
|
/* 004CC4 800040C4 3C1BA430 */ lui $k1, %hi(D_A430000C) # $k1, 0xa430
|
|
/* 004CC8 800040C8 8F7B000C */ lw $k1, %lo(D_A430000C)($k1)
|
|
/* 004CCC 800040CC 1360000B */ beqz $k1, .L800040FC
|
|
/* 004CD0 800040D0 00000000 */ nop
|
|
/* 004CD4 800040D4 3C1A8001 */ lui $k0, %hi(__OSGlobalIntMask) # $k0, 0x8001
|
|
/* 004CD8 800040D8 275AAD00 */ addiu $k0, %lo(__OSGlobalIntMask) # addiu $k0, $k0, -0x5300
|
|
/* 004CDC 800040DC 8F5A0000 */ lw $k0, ($k0)
|
|
/* 004CE0 800040E0 8CA80128 */ lw $t0, 0x128($a1)
|
|
/* 004CE4 800040E4 2401FFFF */ li $at, -1
|
|
/* 004CE8 800040E8 001AD402 */ srl $k0, $k0, 0x10
|
|
/* 004CEC 800040EC 0341D026 */ xor $k0, $k0, $at
|
|
/* 004CF0 800040F0 335A003F */ andi $k0, $k0, 0x3f
|
|
/* 004CF4 800040F4 0348D024 */ and $k0, $k0, $t0
|
|
/* 004CF8 800040F8 037AD825 */ or $k1, $k1, $k0
|
|
.L800040FC:
|
|
/* 004CFC 800040FC 10800003 */ beqz $a0, .L8000410C
|
|
/* 004D00 80004100 ACBB0128 */ sw $k1, 0x128($a1)
|
|
/* 004D04 80004104 0C001045 */ jal __osEnqueueThread
|
|
/* 004D08 80004108 00000000 */ nop
|
|
.L8000410C:
|
|
/* 004D0C 8000410C 0800105D */ j __osDispatchThread
|
|
/* 004D10 80004110 00000000 */ nop
|
|
|
|
glabel __osEnqueueThread
|
|
/* 004D14 80004114 8C980000 */ lw $t8, ($a0)
|
|
/* 004D18 80004118 8CAF0004 */ lw $t7, 4($a1)
|
|
/* 004D1C 8000411C 0080C825 */ move $t9, $a0
|
|
/* 004D20 80004120 8F0E0004 */ lw $t6, 4($t8)
|
|
/* 004D24 80004124 01CF082A */ slt $at, $t6, $t7
|
|
/* 004D28 80004128 14200007 */ bnez $at, .L80004148
|
|
/* 004D2C 8000412C 00000000 */ nop
|
|
.L80004130:
|
|
/* 004D30 80004130 0300C825 */ move $t9, $t8
|
|
/* 004D34 80004134 8F180000 */ lw $t8, ($t8)
|
|
/* 004D38 80004138 8F0E0004 */ lw $t6, 4($t8)
|
|
/* 004D3C 8000413C 01CF082A */ slt $at, $t6, $t7
|
|
/* 004D40 80004140 1020FFFB */ beqz $at, .L80004130
|
|
/* 004D44 80004144 00000000 */ nop
|
|
.L80004148:
|
|
/* 004D48 80004148 8F380000 */ lw $t8, ($t9)
|
|
/* 004D4C 8000414C ACB80000 */ sw $t8, ($a1)
|
|
/* 004D50 80004150 AF250000 */ sw $a1, ($t9)
|
|
/* 004D54 80004154 03E00008 */ jr $ra
|
|
/* 004D58 80004158 ACA40008 */ sw $a0, 8($a1)
|
|
|
|
glabel __osPopThread
|
|
/* 004D5C 8000415C 8C820000 */ lw $v0, ($a0)
|
|
/* 004D60 80004160 8C590000 */ lw $t9, ($v0)
|
|
/* 004D64 80004164 03E00008 */ jr $ra
|
|
/* 004D68 80004168 AC990000 */ sw $t9, ($a0)
|
|
|
|
glabel __osNop
|
|
/* 004D6C 8000416C 03E00008 */ jr $ra
|
|
/* 004D70 80004170 00000000 */ nop
|
|
|
|
glabel __osDispatchThread
|
|
/* 004D74 80004174 3C048001 */ lui $a0, %hi(__osRunQueue) # $a0, 0x8001
|
|
/* 004D78 80004178 0C001057 */ jal __osPopThread
|
|
/* 004D7C 8000417C 2484AD48 */ addiu $a0, %lo(__osRunQueue) # addiu $a0, $a0, -0x52b8
|
|
/* 004D80 80004180 3C018001 */ lui $at, %hi(__osRunningThread) # $at, 0x8001
|
|
/* 004D84 80004184 AC22AD50 */ sw $v0, %lo(__osRunningThread)($at)
|
|
/* 004D88 80004188 24080004 */ li $t0, 4
|
|
/* 004D8C 8000418C A4480010 */ sh $t0, 0x10($v0)
|
|
/* 004D90 80004190 0040D025 */ move $k0, $v0
|
|
/* 004D94 80004194 3C088001 */ lui $t0, %hi(__OSGlobalIntMask) # $t0, 0x8001
|
|
/* 004D98 80004198 8F5B0118 */ lw $k1, 0x118($k0)
|
|
/* 004D9C 8000419C 2508AD00 */ addiu $t0, %lo(__OSGlobalIntMask) # addiu $t0, $t0, -0x5300
|
|
/* 004DA0 800041A0 8D080000 */ lw $t0, ($t0)
|
|
/* 004DA4 800041A4 3C01FFFF */ lui $at, (0xFFFF00FF >> 16) # lui $at, 0xffff
|
|
/* 004DA8 800041A8 3369FF00 */ andi $t1, $k1, 0xff00
|
|
/* 004DAC 800041AC 342100FF */ ori $at, (0xFFFF00FF & 0xFFFF) # ori $at, $at, 0xff
|
|
/* 004DB0 800041B0 3108FF00 */ andi $t0, $t0, 0xff00
|
|
/* 004DB4 800041B4 01284824 */ and $t1, $t1, $t0
|
|
/* 004DB8 800041B8 0361D824 */ and $k1, $k1, $at
|
|
/* 004DBC 800041BC 0369D825 */ or $k1, $k1, $t1
|
|
/* 004DC0 800041C0 409B6000 */ mtc0 $k1, $12
|
|
/* 004DC4 800041C4 DF5B0108 */ ld $k1, 0x108($k0)
|
|
/* 004DC8 800041C8 DF410020 */ ld $at, 0x20($k0)
|
|
/* 004DCC 800041CC DF420028 */ ld $v0, 0x28($k0)
|
|
/* 004DD0 800041D0 03600013 */ mtlo $k1
|
|
/* 004DD4 800041D4 DF5B0110 */ ld $k1, 0x110($k0)
|
|
/* 004DD8 800041D8 DF430030 */ ld $v1, 0x30($k0)
|
|
/* 004DDC 800041DC DF440038 */ ld $a0, 0x38($k0)
|
|
/* 004DE0 800041E0 DF450040 */ ld $a1, 0x40($k0)
|
|
/* 004DE4 800041E4 DF460048 */ ld $a2, 0x48($k0)
|
|
/* 004DE8 800041E8 DF470050 */ ld $a3, 0x50($k0)
|
|
/* 004DEC 800041EC DF480058 */ ld $t0, 0x58($k0)
|
|
/* 004DF0 800041F0 DF490060 */ ld $t1, 0x60($k0)
|
|
/* 004DF4 800041F4 DF4A0068 */ ld $t2, 0x68($k0)
|
|
/* 004DF8 800041F8 DF4B0070 */ ld $t3, 0x70($k0)
|
|
/* 004DFC 800041FC DF4C0078 */ ld $t4, 0x78($k0)
|
|
/* 004E00 80004200 DF4D0080 */ ld $t5, 0x80($k0)
|
|
/* 004E04 80004204 DF4E0088 */ ld $t6, 0x88($k0)
|
|
/* 004E08 80004208 DF4F0090 */ ld $t7, 0x90($k0)
|
|
/* 004E0C 8000420C DF500098 */ ld $s0, 0x98($k0)
|
|
/* 004E10 80004210 DF5100A0 */ ld $s1, 0xa0($k0)
|
|
/* 004E14 80004214 DF5200A8 */ ld $s2, 0xa8($k0)
|
|
/* 004E18 80004218 DF5300B0 */ ld $s3, 0xb0($k0)
|
|
/* 004E1C 8000421C DF5400B8 */ ld $s4, 0xb8($k0)
|
|
/* 004E20 80004220 DF5500C0 */ ld $s5, 0xc0($k0)
|
|
/* 004E24 80004224 DF5600C8 */ ld $s6, 0xc8($k0)
|
|
/* 004E28 80004228 DF5700D0 */ ld $s7, 0xd0($k0)
|
|
/* 004E2C 8000422C DF5800D8 */ ld $t8, 0xd8($k0)
|
|
/* 004E30 80004230 DF5900E0 */ ld $t9, 0xe0($k0)
|
|
/* 004E34 80004234 DF5C00E8 */ ld $gp, 0xe8($k0)
|
|
/* 004E38 80004238 03600011 */ mthi $k1
|
|
/* 004E3C 8000423C DF5D00F0 */ ld $sp, 0xf0($k0)
|
|
/* 004E40 80004240 DF5E00F8 */ ld $fp, 0xf8($k0)
|
|
/* 004E44 80004244 DF5F0100 */ ld $ra, 0x100($k0)
|
|
/* 004E48 80004248 8F5B011C */ lw $k1, 0x11c($k0)
|
|
/* 004E4C 8000424C 409B7000 */ mtc0 $k1, $14
|
|
/* 004E50 80004250 8F5B0018 */ lw $k1, 0x18($k0)
|
|
/* 004E54 80004254 13600013 */ beqz $k1, .L800042A4
|
|
/* 004E58 80004258 00000000 */ nop
|
|
/* 004E5C 8000425C 8F5B012C */ lw $k1, 0x12c($k0)
|
|
/* 004E60 80004260 44DBF800 */ ctc1 $k1, $31
|
|
/* 004E64 80004264 D7400130 */ ldc1 $f0, 0x130($k0)
|
|
/* 004E68 80004268 D7420138 */ ldc1 $f2, 0x138($k0)
|
|
/* 004E6C 8000426C D7440140 */ ldc1 $f4, 0x140($k0)
|
|
/* 004E70 80004270 D7460148 */ ldc1 $f6, 0x148($k0)
|
|
/* 004E74 80004274 D7480150 */ ldc1 $f8, 0x150($k0)
|
|
/* 004E78 80004278 D74A0158 */ ldc1 $f10, 0x158($k0)
|
|
/* 004E7C 8000427C D74C0160 */ ldc1 $f12, 0x160($k0)
|
|
/* 004E80 80004280 D74E0168 */ ldc1 $f14, 0x168($k0)
|
|
/* 004E84 80004284 D7500170 */ ldc1 $f16, 0x170($k0)
|
|
/* 004E88 80004288 D7520178 */ ldc1 $f18, 0x178($k0)
|
|
/* 004E8C 8000428C D7540180 */ ldc1 $f20, 0x180($k0)
|
|
/* 004E90 80004290 D7560188 */ ldc1 $f22, 0x188($k0)
|
|
/* 004E94 80004294 D7580190 */ ldc1 $f24, 0x190($k0)
|
|
/* 004E98 80004298 D75A0198 */ ldc1 $f26, 0x198($k0)
|
|
/* 004E9C 8000429C D75C01A0 */ ldc1 $f28, 0x1a0($k0)
|
|
/* 004EA0 800042A0 D75E01A8 */ ldc1 $f30, 0x1a8($k0)
|
|
.L800042A4:
|
|
/* 004EA4 800042A4 8F5B0128 */ lw $k1, 0x128($k0)
|
|
/* 004EA8 800042A8 3C1A8001 */ lui $k0, %hi(__OSGlobalIntMask) # $k0, 0x8001
|
|
/* 004EAC 800042AC 275AAD00 */ addiu $k0, %lo(__OSGlobalIntMask) # addiu $k0, $k0, -0x5300
|
|
/* 004EB0 800042B0 8F5A0000 */ lw $k0, ($k0)
|
|
/* 004EB4 800042B4 001AD402 */ srl $k0, $k0, 0x10
|
|
/* 004EB8 800042B8 037AD824 */ and $k1, $k1, $k0
|
|
/* 004EBC 800042BC 001BD840 */ sll $k1, $k1, 1
|
|
/* 004EC0 800042C0 3C1A8001 */ lui $k0, %hi(__osRcpImTable) # $k0, 0x8001
|
|
/* 004EC4 800042C4 275A2160 */ addiu $k0, %lo(__osRcpImTable) # addiu $k0, $k0, 0x2160
|
|
/* 004EC8 800042C8 037AD821 */ addu $k1, $k1, $k0
|
|
/* 004ECC 800042CC 977B0000 */ lhu $k1, ($k1)
|
|
/* 004ED0 800042D0 3C1AA430 */ lui $k0, %hi(D_A430000C) # $k0, 0xa430
|
|
/* 004ED4 800042D4 275A000C */ addiu $k0, %lo(D_A430000C) # addiu $k0, $k0, 0xc
|
|
/* 004ED8 800042D8 AF5B0000 */ sw $k1, ($k0)
|
|
/* 004EDC 800042DC 00000000 */ nop
|
|
/* 004EE0 800042E0 00000000 */ nop
|
|
/* 004EE4 800042E4 00000000 */ nop
|
|
/* 004EE8 800042E8 00000000 */ nop
|
|
/* 004EEC 800042EC 42000018 */ eret
|
|
glabel __osCleanupThread
|
|
/* 004EF0 800042F0 0C0010D0 */ jal osDestroyThread
|
|
/* 004EF4 800042F4 00002025 */ move $a0, $zero
|