diff --git a/Makefile b/Makefile index 3bb5b1a89..df276683f 100644 --- a/Makefile +++ b/Makefile @@ -747,11 +747,6 @@ $(B_DIR)/rsp/%.text.bin $(B_DIR)/rsp/%.data.bin: src/rsp/%.s @mkdir -p $(dir $@) armips -strequ CODE_FILE $(B_DIR)/rsp/$*.text.bin -strequ DATA_FILE $(B_DIR)/rsp/$*.data.bin $< -# For RSP ucodes which haven't been diassembled yet, copy from extracted -$(B_DIR)/rsp/%.bin: $(E_DIR)/rsp/%.bin - @mkdir -p $(dir $@) - cp $< $@ - $(B_DIR)/rsp/%.o: $(B_DIR)/rsp/%.bin TOOLCHAIN=$(TOOLCHAIN) ROMID=$(ROMID) tools/mkrawobject $< $@ diff --git a/ld/pd.ld b/ld/pd.ld index 476015b03..4d4a4fd14 100644 --- a/ld/pd.ld +++ b/ld/pd.ld @@ -69,6 +69,16 @@ } \ END_SEG(name) +#define RSP_TEXT_SEGMENT(name) \ + name##TextStart = .; \ + build/ROMID/rsp/name.text.o (.data); \ + name##TextEnd = .; + +#define RSP_DATA_SEGMENT(name) \ + name##DataStart = .; \ + build/ROMID/rsp/name.data.o (.data); \ + name##DataEnd = .; + OUTPUT_ARCH (mips) SECTIONS @@ -183,29 +193,20 @@ SECTIONS BEGIN_SEG(data) { - build/ROMID/rsp/rspboot.text.o (.data); - build/ROMID/rsp/gsp.text.o (.data); - build/ROMID/rsp/asp.text.o (.data); + RSP_TEXT_SEGMENT(rspboot) + RSP_TEXT_SEGMENT(gsp) + RSP_TEXT_SEGMENT(asp) + LIBFILES(.data) GAMEFILES(.data) - build/ROMID/rsp/gsp.data.o (.data); - build/ROMID/rsp/asp.data.o (.data); + . = ALIGN(0x10); + + RSP_DATA_SEGMENT(gsp) + RSP_DATA_SEGMENT(asp) } END_SEG(data) - rspbootTextStart = _dataSegmentStart; - rspbootTextEnd = rspbootTextStart + 0xd0; - gspTextStart = rspbootTextEnd; - gspTextEnd = gspTextStart + 0x1420; - aspTextStart = gspTextEnd; - aspTextEnd = aspTextStart + 0x1930; - - gspDataStart = _dataSegmentEnd - 0x800 - 0xb50; - gspDataEnd = gspDataStart + 0x800; - aspDataStart = gspDataEnd; - aspDataEnd = aspDataStart + 0xb50; - /*************************************************************************** * bss * ------------------------------------------------------------------------- diff --git a/src/game/title.c b/src/game/title.c index 6c20d3cf1..3a3cbdc9e 100644 --- a/src/game/title.c +++ b/src/game/title.c @@ -7458,7 +7458,7 @@ Gfx *titleRenderPdLogo(Gfx *gdl) rwdata->gdl = tmp = gfxAllocate(5 * sizeof(Gfx)); gSPSetLights1(tmp++, var80062530); - gSPBranchList(tmp++, rodata->primary); + gSPBranchList(tmp++, rodata->opagdl); } node = modelGetPart(model->definition, MODELPART_LOGO_0004); @@ -7475,7 +7475,7 @@ Gfx *titleRenderPdLogo(Gfx *gdl) if (g_PdLogoAmbientLightFrac > 0.0f) { gSPSetLights1(tmp++, var80062560); - gSPBranchList(tmp++, rodata->primary); + gSPBranchList(tmp++, rodata->opagdl); } else { gSPEndDisplayList(tmp++); } @@ -7495,7 +7495,7 @@ Gfx *titleRenderPdLogo(Gfx *gdl) if (g_PdLogoAmbientLightFrac > 0.0f) { gSPSetLights1(tmp++, var80062560); - gSPBranchList(tmp++, rodata->primary); + gSPBranchList(tmp++, rodata->opagdl); } else { gSPEndDisplayList(tmp++); } @@ -7515,7 +7515,7 @@ Gfx *titleRenderPdLogo(Gfx *gdl) if (g_PdLogoAmbientLightFrac > 0.0f) { gSPSetLights1(tmp++, var80062560); - gSPBranchList(tmp++, rodata->primary); + gSPBranchList(tmp++, rodata->opagdl); } else { gSPEndDisplayList(tmp++); } diff --git a/src/rsp/gsp.s b/src/rsp/gsp.s new file mode 100644 index 000000000..1ee978e99 --- /dev/null +++ b/src/rsp/gsp.s @@ -0,0 +1,1534 @@ +.rsp + +// RDP status read flags +DPC_STATUS_XBUS_DMA equ 0x0001 +DPC_STATUS_DMA_BUSY equ 0x0100 +DPC_STATUS_START_VALID equ 0x0400 + +// RDP status write flags +DPC_STATUS_CLR_XBUS equ 0x0001 + +.macro jumpTableEntry, addr + .dh addr & 0xffff +.endmacro + +.macro OverlayEntry, loadStart, loadEnd, imemAddr + .dw loadStart + .dh (loadEnd - loadStart - 1) & 0xffff + .dh (imemAddr) & 0xffff +.endmacro + +.create DATA_FILE, 0x0000 + +/* 0000 */ +Overlay0Info: +OverlayEntry orga(Overlay0), orga(Overlay0End), Overlay0 +Overlay1Info: +OverlayEntry orga(Overlay1), orga(Overlay1End), Overlay1 +Overlay2Info: +OverlayEntry orga(Overlay2), orga(Overlay2End), Overlay2 +Overlay3Info: +OverlayEntry orga(Overlay3), orga(Overlay3End), Overlay3 +Overlay4Info: +OverlayEntry orga(Overlay4), orga(Overlay4End), Overlay4 + +/* 0028 */ .word 0x0ffaf006, 0x7fff0000 +/* 0030 */ .word 0x00000001, 0x0002ffff, 0x40000004, 0x06330200 +/* 0040 */ .word 0x7ffffff8, 0x00080040, 0x00208000, 0x01cccccc +/* 0050 */ .word 0x0001ffff, 0x00010001, 0x0001ffff, 0x00010001 +/* 0060 */ .word 0x00020002, 0x00020002, 0x00020002, 0x00020002 +/* 0070 */ .word 0x00010000, 0x00000001, 0x00000001, 0x00000001 +/* 0080 */ .word 0x00010000, 0x0000ffff, 0x00000001, 0x0000ffff +/* 0090 */ .word 0x00000000, 0x0001ffff, 0x00000000, 0x00000001 +/* 00a0 */ .dh load_lighting +/* 00a2 */ .dh 0x7fff +/* 00a4 */ .word 0x571d3a0c, 0x00010002, 0x01000200 +/* 00b0 */ .word 0x40000040 +/* 00b4 */ .dh 0x0000 +/* 00b6 */ .dh overlay4_entry +/* 00b8 */ .word 0x00ffffff + +/* 00bc */ +.dh dispatch_dma +.dh sp_noop +.dh dispatch_imm +.dh dispatch_rdp + +/* 00c4 */ +/* 0x00 */ .dh sp_noop +/* 0x01 */ .dh dma_mtx +/* 0x02 */ .dh sp_noop +/* 0x03 */ .dh dma_movemem +/* 0x04 */ .dh dma_vtx +/* 0x05 */ .dh sp_noop +/* 0x06 */ .dh dma_dl +/* 0x07 */ .dh dma_col // new in PD +/* 0x08 */ .dh sp_noop +/* 0x09 */ .dh sp_noop + +.align 4 + +/* 00d8 */ +/* 0xb1 */ .dh imm_tri4 // new in PD +/* 0xb2 */ .dh imm_rdphalf_cont +/* 0xb3 */ .dh imm_rdphalf_2 +/* 0xb4 */ .dh imm_rdphalf_1 +/* 0xb5 */ .dh sp_noop +/* 0xb6 */ .dh imm_cleargeometrymode +/* 0xb7 */ .dh imm_setgeometrymode +/* 0xb8 */ .dh imm_enddl +/* 0xb9 */ .dh imm_setothermode_l +/* 0xba */ .dh imm_setothermode_h +/* 0xbb */ .dh imm_texture +/* 0xbc */ .dh imm_moveword +/* 0xbd */ .dh sp_noop // imm_popmtx removed in PD +/* 0xbe */ .dh sp_noop // imm_culldl removed in PD +/* 0xbf */ .dh imm_tri1 + +.dh found_in +.dh found_out +.dh found_first_in +.dh found_first_out +.dh clip_draw_loop +.dh perform_clip +.dh next_clip +.dh dma_wait_dl + +.align 4 + +/* 0108 */ .word 0x00000000, 0x00000000 +/* 0110 */ .word 0x0000ffff, 0x00000000, 0xef080cff, 0x00000000 +/* 0120 */ .word 0x00000000, 0x00000000, 0x00000000, 0x80000040 +/* 0130 */ .word 0x00000000, 0x00000000, 0x40004000, 0x00000000 +/* 0140 */ .word 0x00000000, 0x00000000, 0x00000000, 0x00000000 +/* 0150 */ .word 0x00000000, 0x00000000, 0x00000000, 0x00000000 +/* 0160 */ .word 0x00000000, 0x00000000, 0x00000000, 0x00000000 +/* 0170 */ .word 0x00000000, 0x00000000, 0x00000000, 0x00000000 +/* 0180 */ .word 0x00000000, 0x00000000, 0x00000000, 0x00000000 +/* 0190 */ .word 0x00000000, 0x00000000, 0x00000000, 0x00000000 +/* 01a0 */ .word 0x80000000, 0x80000000, 0x00000000, 0x00000000 +/* 01b0 */ .word 0x00800000, 0x00800000, 0x7f000000, 0x00000000 +/* 01c0 */ .word 0x00000000, 0x00000000, 0x00000000, 0x00000000 +/* 01d0 */ .word 0x00000000, 0x00000000, 0x007f0000, 0x00000000 +/* 01e0 */ .word 0x00000000, 0x00000000, 0x00000000, 0x00000000 +/* 01f0 */ .word 0x00000000, 0x00000000, 0x00000000, 0x00000000 +/* 0200 */ .word 0x00000000, 0x00000000, 0xe0011fff, 0x00040000 +/* 0210 */ .word 0xff000000, 0xff000000, 0x00000000, 0x00000000 +/* 0220 */ .word 0x000a141e, 0x28323c46, 0x505a646e, 0x78828c96 +/* 0230 */ .word 0x026001b0, 0x01d001f0, 0x021001f0, 0x01f001f0 +/* 0240 */ .word 0x01f001f0, 0x01f00138, 0x03300340, 0x03500320 +/* 0250 */ .word 0x012c0070, 0x01600270, 0x01f00360, 0x01100000 +/* 0260 */ .word 0x00000000, 0x00000000, 0x00000000, 0x00000000 +/* 0270 */ .word 0x01000000, 0x00ff0000 + +/* 0278 */ .fill (0x800 - orga()), 0 + +.close + +.create CODE_FILE, 0x04001080 + +Overlay0: +/* 04001080 0000 090005ee */ j gsp_040017b8 +/* 04001084 0004 201d0110 */ addi sp, r0, 0x110 +/* 04001088 0008 0d000447 */ jal segmented_to_physical +/* 0400108c 000c 03009820 */ add s3, t8, r0 +/* 04001090 0010 0016a020 */ add s4, r0, s6 +/* 04001094 0014 0d00044f */ jal dma_read_write +/* 04001098 0018 20110000 */ addi s1, r0, 0x0 +.L0400109c: +/* 0400109c 001c 842200bc */ lh v0, 0xbc(at) +/* 040010a0 0020 00400008 */ jr v0 +/* 040010a4 0024 001915c2 */ srl v0, t9, 23 + +sp_noop: +/* 040010a8 0028 40022000 */ mfc0 v0, SP_STATUS +/* 040010ac 002c 30420080 */ andi v0, v0, 0x80 +/* 040010b0 0030 14400006 */ bne v0, r0, .L040010cc +/* 040010b4 0034 84150026 */ lh s5, 0x26(r0) + +gsp_040010b8: +/* 040010b8 0038 1f80ffe9 */ bgtz gp, .L04001060 +/* 040010bc 003c 00000000 */ nop +/* 040010c0 0040 09000435 */ j load_displaylist +/* 040010c4 0044 841f0104 */ lh ra, 0x104(r0) + +gsp_040010c8: +/* 040010c8 0048 841500b6 */ lh s5, 0xb6(r0) +.L040010cc: +/* 040010cc 004c 0900043f */ j load_overlay +/* 040010d0 0050 341e0020 */ ori s8, r0, 0x20 + +load_displaylist: +/* 040010d4 0054 201c0140 */ addi gp, r0, 0x140 +/* 040010d8 0058 001fa820 */ add s5, r0, ra +/* 040010dc 005c 201406e0 */ addi s4, r0, 0x6e0 +/* 040010e0 0060 001a9820 */ add s3, r0, k0 +/* 040010e4 0064 2012013f */ addi s2, r0, 0x13f +/* 040010e8 0068 0d00044f */ jal dma_read_write +/* 040010ec 006c 20110000 */ addi s1, r0, 0x0 +/* 040010f0 0070 02a00008 */ jr s5 +/* 040010f4 0074 201b06e0 */ addi k1, r0, 0x6e0 + +load_overlay_fcn: +/* 040010f8 0078 001fa820 */ add s5, r0, ra + +load_overlay: +/* 040010fc 007c 8fd30000 */ lw s3, 0x0(s8) +/* 04001100 0080 87d20004 */ lh s2, 0x4(s8) +/* 04001104 0084 87d40006 */ lh s4, 0x6(s8) +/* 04001108 0088 0d00044f */ jal dma_read_write +/* 0400110c 008c 20110000 */ addi s1, r0, 0x0 +/* 04001110 0090 0d000459 */ jal dma_wait +/* 04001114 0094 00000000 */ nop +/* 04001118 0098 02a00008 */ jr s5 + +segmented_to_physical: +/* 0400111c 009c 8c0b00b8 */ lw t3, 0xb8(r0) +/* 04001120 00a0 00136582 */ srl t4, s3, 22 +/* 04001124 00a4 318c003c */ andi t4, t4, 0x3c +/* 04001128 00a8 026b9824 */ and s3, s3, t3 +/* 0400112c 00ac 000c6820 */ add t5, r0, t4 +/* 04001130 00b0 8dac0160 */ lw t4, 0x160(t5) +/* 04001134 00b4 03e00008 */ jr ra +/* 04001138 00b8 026c9820 */ add s3, s3, t4 + +dma_read_write: +/* 0400113c 00bc 400b2800 */ mfc0 t3, SP_DMA_FULL +/* 04001140 00c0 1560fffe */ bne t3, r0, dma_read_write +/* 04001144 00c4 00000000 */ nop +/* 04001148 00c8 40940000 */ mtc0 s4, SP_MEM_ADDR +/* 0400114c 00cc 1e200003 */ bgtz s1, .L0400115c +/* 04001150 00d0 40930800 */ mtc0 s3, SP_DRAM_ADDR +/* 04001154 00d4 03e00008 */ jr ra +/* 04001158 00d8 40921000 */ mtc0 s2, SP_RD_LEN +.L0400115c: +/* 0400115c 00dc 03e00008 */ jr ra +/* 04001160 00e0 40921800 */ mtc0 s2, SP_WR_LEN + +dma_wait: +/* 04001164 00e4 400b3000 */ mfc0 t3, SP_DMA_BUSY +/* 04001168 00e8 1560fffe */ bne t3, r0, dma_wait +/* 0400116c 00ec 00000000 */ nop +/* 04001170 00f0 03e00008 */ jr ra +/* 04001174 00f4 00000000 */ nop + +gsp_04001178: +/* 04001178 00f8 001fa820 */ add s5, r0, ra +/* 0400117c 00fc 8fb30018 */ lw s3, 0x18(sp) +/* 04001180 0100 22f2f5e0 */ addi s2, s7, 0xf5e0 +/* 04001184 0104 8fb70044 */ lw s7, 0x44(sp) +/* 04001188 0108 1a40001a */ blez s2, .L040011f4 +/* 0400118c 010c 0272a020 */ add s4, s3, s2 +/* 04001190 0110 02f4a022 */ sub s4, s7, s4 +/* 04001194 0114 06810008 */ bgez s4, .L040011b8 +.L04001198: +/* 04001198 0118 40145800 */ mfc0 s4, DPC_STATUS +/* 0400119c 011c 32940400 */ andi s4, s4, DPC_STATUS_START_VALID +/* 040011a0 0120 1680fffd */ bne s4, r0, .L04001198 +.L040011a4: +/* 040011a4 0124 40175000 */ mfc0 s7, DPC_CURRENT +/* 040011a8 0128 8fb30040 */ lw s3, 0x40(sp) +/* 040011ac 012c 12f3fffd */ beq s7, s3, .L040011a4 +/* 040011b0 0130 00000000 */ nop +/* 040011b4 0134 40934000 */ mtc0 s3, DPC_START +.L040011b8: +/* 040011b8 0138 40175000 */ mfc0 s7, DPC_CURRENT +/* 040011bc 013c 0277a022 */ sub s4, s3, s7 +/* 040011c0 0140 06810004 */ bgez s4, .L040011d4 +/* 040011c4 0144 0272a020 */ add s4, s3, s2 +/* 040011c8 0148 0297a022 */ sub s4, s4, s7 +/* 040011cc 014c 0681fffa */ bgez s4, .L040011b8 +/* 040011d0 0150 00000000 */ nop +.L040011d4: +/* 040011d4 0154 0272b820 */ add s7, s3, s2 +/* 040011d8 0158 2252ffff */ addi s2, s2, -1 +/* 040011dc 015c 20140a20 */ addi s4, r0, 0xa20 +/* 040011e0 0160 0d00044f */ jal dma_read_write +/* 040011e4 0164 20110001 */ addi s1, r0, 0x1 +/* 040011e8 0168 0d000459 */ jal dma_wait +/* 040011ec 016c afb70018 */ sw s7, 0x18(sp) +/* 040011f0 0170 40974800 */ mtc0 s7, DPC_END +.L040011f4: +/* 040011f4 0174 02a00008 */ jr s5 +/* 040011f8 0178 20170a20 */ addi s7, r0, 0xa20 + +dispatch_imm: +/* 040011fc 017c 304200fe */ andi v0, v0, 0xfe +/* 04001200 0180 84420076 */ lh v0, 0x76(v0) +/* 04001204 0184 00400008 */ jr v0 +/* 04001208 0188 9361ffff */ lbu at, -1(k1) + +imm_tri4: +/* 0400120c 018c 1300ffa6 */ beq t8, r0, sp_noop +/* 04001210 0190 3301000f */ andi at, t8, 0xf +/* 04001214 0194 0018c102 */ srl t8, t8, 4 +/* 04001218 0198 3302000f */ andi v0, t8, 0xf +/* 0400121c 019c 0018c102 */ srl t8, t8, 4 +/* 04001220 01a0 3323000f */ andi v1, t9, 0xf +/* 04001224 01a4 0019c902 */ srl t9, t9, 4 +/* 04001228 01a8 235afff8 */ addi k0, k0, -8 +/* 0400122c 01ac 237bfff8 */ addi k1, k1, -8 +/* 04001230 01b0 239c0008 */ addi gp, gp, 8 +/* 04001234 01b4 a7790002 */ sh t9, 0x2(k1) +/* 04001238 01b8 af780004 */ sw t8, 0x4(k1) +/* 0400123c 01bc 90210220 */ lbu at, 0x220(at) +/* 04001240 01c0 90420220 */ lbu v0, 0x220(v0) +/* 04001244 01c4 09000496 */ j .tri +/* 04001248 01c8 90630220 */ lbu v1, 0x220(v1) + +imm_tri1: +/* 0400124c 01cc 9361fffd */ lbu at, -3(k1) +/* 04001250 01d0 9362fffe */ lbu v0, -2(k1) +/* 04001254 01d4 9363ffff */ lbu v1, -1(k1) + +.tri: +/* 04001258 01d8 00010880 */ sll at, at, 2 +/* 0400125c 01dc 00021080 */ sll v0, v0, 2 +/* 04001260 01e0 00031880 */ sll v1, v1, 2 +/* 04001264 01e4 20210360 */ addi at, at, 0x360 +/* 04001268 01e8 20420360 */ addi v0, v0, 0x360 +/* 0400126c 01ec 20630360 */ addi v1, v1, 0x360 +/* 04001270 01f0 ac010e20 */ sw at, 0xe20(r0) +/* 04001274 01f4 ac020e24 */ sw v0, 0xe24(r0) +/* 04001278 01f8 ac030e28 */ sw v1, 0xe28(r0) +/* 0400127c 01fc 09000670 */ j gsp_040019c0 +/* 04001280 0200 841e00be */ lh s8, 0xbe(r0) + +imm_moveword: +/* 04001284 0204 9361fffb */ lbu at, -5(k1) +/* 04001288 0208 9762fff9 */ lhu v0, -7(k1) +/* 0400128c 020c 8425024e */ lh a1, 0x24e(at) +/* 04001290 0210 00a22820 */ add a1, a1, v0 +/* 04001294 0214 0900042a */ j sp_noop +/* 04001298 0218 acb80000 */ sw t8, 0x0(a1) + +imm_texture: +/* 0400129c 021c afb90010 */ sw t9, 0x10(sp) +/* 040012a0 0220 afb80014 */ sw t8, 0x14(sp) +/* 040012a4 0224 87a20006 */ lh v0, 0x6(sp) +/* 040012a8 0228 3042fffd */ andi v0, v0, 0xfffd +/* 040012ac 022c 33230001 */ andi v1, t9, 0x1 +/* 040012b0 0230 00031840 */ sll v1, v1, 1 +/* 040012b4 0234 00431025 */ or v0, v0, v1 +/* 040012b8 0238 0900042a */ j sp_noop +/* 040012bc 023c a7a20006 */ sh v0, 0x6(sp) + +imm_setothermode_h: +/* 040012c0 0240 090004b3 */ j .setothermode +/* 040012c4 0244 23a70008 */ addi a3, sp, 0x8 + +imm_setothermode_l: +/* 040012c8 0248 23a7000c */ addi a3, sp, 12 + +.setothermode: +/* 040012cc 024c 8ce30000 */ lw v1, 0x0(a3) +/* 040012d0 0250 2008ffff */ addi t0, r0, -1 +/* 040012d4 0254 9365fffb */ lbu a1, -5(k1) +/* 040012d8 0258 9366fffa */ lbu a2, -6(k1) +/* 040012dc 025c 20020001 */ addi v0, r0, 1 +/* 040012e0 0260 00a21004 */ sllv v0, v0, a1 +/* 040012e4 0264 2042ffff */ addi v0, v0, -1 +/* 040012e8 0268 00c21004 */ sllv v0, v0, a2 +/* 040012ec 026c 00481026 */ xor v0, v0, t0 +/* 040012f0 0270 00431024 */ and v0, v0, v1 +/* 040012f4 0274 00581825 */ or v1, v0, t8 +/* 040012f8 0278 ace30000 */ sw v1, 0x0(a3) +/* 040012fc 027c 8fb90008 */ lw t9, 0x8(sp) +/* 04001300 0280 090004e0 */ j gsp_04001380 +/* 04001304 0284 8fb8000c */ lw t8, 0xc(sp) + +imm_enddl: +/* 04001308 0288 83a2004a */ lb v0, 0x4a(sp) +/* 0400130c 028c 2042fffc */ addi v0, v0, -4 +/* 04001310 0290 0440ff6d */ bltz v0, gsp_040010c8 +/* 04001314 0294 20430276 */ addi v1, v0, 0x276 +/* 04001318 0298 8c7a0000 */ lw k0, 0x0(v1) +/* 0400131c 029c a3a2004a */ sb v0, 0x4a(sp) +/* 04001320 02a0 0900042a */ j sp_noop +/* 04001324 02a4 201c0000 */ addi gp, r0, 0x0 + +imm_setgeometrymode: +/* 04001328 02a8 8fa20004 */ lw v0, 0x4(sp) +/* 0400132c 02ac 00581025 */ or v0, v0, t8 +/* 04001330 02b0 0900042a */ j sp_noop +/* 04001334 02b4 afa20004 */ sw v0, 0x4(sp) + +imm_cleargeometrymode: +/* 04001338 02b8 8fa20004 */ lw v0, 0x4(sp) +/* 0400133c 02bc 2003ffff */ addi v1, r0, -1 +/* 04001340 02c0 00781826 */ xor v1, v1, t8 +/* 04001344 02c4 00431024 */ and v0, v0, v1 +/* 04001348 02c8 0900042a */ j sp_noop +/* 0400134c 02cc afa20004 */ sw v0, 0x4(sp) + +imm_rdphalf_1: +/* 04001350 02d0 0900042e */ j gsp_040010b8 +/* 04001354 02d4 afb8fffc */ sw t8, -4(sp) + +imm_rdphalf_cont: +/* 04001358 02d8 34020000 */ ori v0, r0, 0x0 + +imm_rdphalf_2: +/* 0400135c 02dc 090004e0 */ j gsp_04001380 +/* 04001360 02e0 8fb9fffc */ lw t9, -4(sp) + +dispatch_rdp: +/* 04001364 02e4 00191603 */ sra v0, t9, 24 +/* 04001368 02e8 20420003 */ addi v0, v0, 0x3 +/* 0400136c 02ec 04400004 */ bltz v0, gsp_04001380 +/* 04001370 02f0 20420018 */ addi v0, v0, 0x18 +/* 04001374 02f4 0d000447 */ jal segmented_to_physical +/* 04001378 02f8 03009820 */ add s3, t8, r0 +/* 0400137c 02fc 0260c020 */ add t8, s3, r0 + +gsp_04001380: +/* 04001380 0300 aef90000 */ sw t9, 0x0(s7) +/* 04001384 0304 aef80004 */ sw t8, 0x4(s7) +/* 04001388 0308 0d00045e */ jal gsp_04001178 +/* 0400138c 030c 22f70008 */ addi s7, s7, 0x8 +/* 04001390 0310 1c40ff45 */ bgtz v0, sp_noop +/* 04001394 0314 00000000 */ nop +/* 04001398 0318 0900042e */ j gsp_040010b8 + +dispatch_dma: +/* 0400139c 031c 304201fe */ andi v0, v0, 0x1fe +/* 040013a0 0320 844200c4 */ lh v0, 0xc4(v0) +/* 040013a4 0324 0d000459 */ jal dma_wait +/* 040013a8 0328 9361fff9 */ lbu at, -7(k1) +/* 040013ac 032c 00400008 */ jr v0 +/* 040013b0 0330 3026000f */ andi a2, at, 0xf + +dma_mtx: +/* 040013b4 0334 ebbf031c */ sbv $v31[6], 0x1c(sp) +/* 040013b8 0338 30280001 */ andi t0, at, 0x1 +/* 040013bc 033c 1500001b */ bne t0, r0, .L0400142c +/* 040013c0 0340 30270002 */ andi a3, at, 0x2 +/* 040013c4 0344 201402a0 */ addi s4, r0, 0x2a0 +/* 040013c8 0348 30280004 */ andi t0, at, 0x4 +/* 040013cc 034c 1100000a */ beq t0, r0, gsp_040013f8 +/* 040013d0 0350 cada2003 */ lqv $v26[0], 0x30(s6) +/* 040013d4 0354 8fb30024 */ lw s3, 0x24(sp) +/* 040013d8 0358 8fa8004c */ lw t0, 0x4c(sp) +/* 040013dc 035c 20110001 */ addi s1, r0, 0x1 +/* 040013e0 0360 22610040 */ addi at, s3, 0x40 +/* 040013e4 0364 12680004 */ beq s3, t0, gsp_040013f8 +/* 040013e8 0368 200c003f */ addi t4, r0, 0x3f +/* 040013ec 036c 0d00044f */ jal dma_read_write +/* 040013f0 0370 afa10024 */ sw at, 0x24(sp) +/* 040013f4 0374 0d000459 */ jal dma_wait + +gsp_040013f8: +/* 040013f8 0378 cadc2001 */ lqv $v28[0], 0x10(s6) +/* 040013fc 037c 10e0000e */ beq a3, r0, .L04001438 +/* 04001400 0380 cadb2002 */ lqv $v27[0], 0x20(s6) +/* 04001404 0384 ea9a2003 */ sqv $v26[0], 0x30(s4) +/* 04001408 0388 cadd2000 */ lqv $v29[0], 0x0(s6) +/* 0400140c 038c ea9c2001 */ sqv $v28[0], 0x10(s4) + +gsp_04001410: +/* 04001410 0390 20030320 */ addi v1, r0, 0x320 +/* 04001414 0394 ea9b2002 */ sqv $v27[0], 0x20(s4) +/* 04001418 0398 ea9d2000 */ sqv $v29[0], 0x0(s4) +/* 0400141c 039c 200102a0 */ addi at, r0, 0x2a0 +/* 04001420 03a0 200202e0 */ addi v0, r0, 0x2e0 +/* 04001424 03a4 09000517 */ j gsp_0400145c +/* 04001428 03a8 841f00be */ lh ra, 0xbe(r0) +.L0400142c: +/* 0400142c 03ac cada2003 */ lqv $v26[0], 0x30(s6) +/* 04001430 03b0 090004fe */ j gsp_040013f8 +/* 04001434 03b4 201402e0 */ addi s4, r0, 0x2e0 +.L04001438: +/* 04001438 03b8 24030e20 */ addiu v1, r0, 0xe20 +/* 0400143c 03bc 00160821 */ addu at, r0, s6 +/* 04001440 03c0 0d000517 */ jal gsp_0400145c +/* 04001444 03c4 00141021 */ addu v0, r0, s4 +/* 04001448 03c8 ea862003 */ sqv $v6[0], 0x30(s4) +/* 0400144c 03cc ea852001 */ sqv $v5[0], 0x10(s4) +/* 04001450 03d0 c87b2000 */ lqv $v27[0], 0x0(v1) +/* 04001454 03d4 09000504 */ j gsp_04001410 +/* 04001458 03d8 c87d207e */ lqv $v29[0], -0x20(v1) + +gsp_0400145c: +/* 0400145c 03dc 20730010 */ addi s3, v1, 0x10 +.L04001460: +/* 04001460 03e0 4b1ff947 */ vmudh $v5, $v31, $v31[0] +/* 04001464 03e4 20320008 */ addi s2, at, 0x8 +.L04001468: +/* 04001468 03e8 c8431800 */ ldv $v3[0], 0x0(v0) +/* 0400146c 03ec c8441804 */ ldv $v4[0], 0x20(v0) +/* 04001470 03f0 c8212000 */ lqv $v1[0], 0x0(at) +/* 04001474 03f4 c8222002 */ lqv $v2[0], 0x20(at) +/* 04001478 03f8 c8431c00 */ ldv $v3[8], 0x0(v0) +/* 0400147c 03fc c8441c04 */ ldv $v4[8], 0x20(v0) +/* 04001480 0400 4a82218c */ vmadl $v6, $v4, $v2[0h] +/* 04001484 0404 20210002 */ addi at, at, 0x2 +/* 04001488 0408 4a82198d */ vmadm $v6, $v3, $v2[0h] +/* 0400148c 040c 20420008 */ addi v0, v0, 0x8 +/* 04001490 0410 4a81218e */ vmadn $v6, $v4, $v1[0h] +/* 04001494 0414 4a81194f */ vmadh $v5, $v3, $v1[0h] +/* 04001498 0418 1432fff3 */ bne at, s2, .L04001468 +/* 0400149c 041c 4b1ff98e */ vmadn $v6, $v31, $v31[0] +/* 040014a0 0420 2042ffe0 */ addi v0, v0, -32 +/* 040014a4 0424 20210008 */ addi at, at, 8 +/* 040014a8 0428 e8652000 */ sqv $v5[0], 0x0(v1) +/* 040014ac 042c e8662002 */ sqv $v6[0], 0x20(v1) +/* 040014b0 0430 1473ffeb */ bne v1, s3, .L04001460 +/* 040014b4 0434 20630010 */ addi v1, v1, 0x10 +/* 040014b8 0438 03e00008 */ jr ra +/* 040014bc 043c 00000000 */ nop + +gsp_040014c0: +/* 040014c0 0440 20080260 */ addi t0, r0, 0x260 +/* 040014c4 0444 c8032005 */ lqv $v3[0], 0x50(r0) +/* 040014c8 0448 cbb30801 */ lsv $v19[0], 0x2(sp) +/* 040014cc 044c 87a30004 */ lh v1, 0x4(sp) +/* 040014d0 0450 c9001800 */ ldv $v0[0], 0x0(t0) +/* 040014d4 0454 c9011801 */ ldv $v1[0], 0x8(t0) +/* 040014d8 0458 c9001c00 */ ldv $v0[8], 0x0(t0) +/* 040014dc 045c c9011c01 */ ldv $v1[8], 0x8(t0) +/* 040014e0 0460 03e00008 */ jr ra +/* 040014e4 0464 4a030007 */ vmudh $v0, $v0, $v3 + +gsp_040014e8: +/* 040014e8 0468 20080320 */ addi t0, r0, 0x320 +/* 040014ec 046c c90b1803 */ ldv $v11[0], 0x18(t0) +/* 040014f0 0470 c90b1c03 */ ldv $v11[8], 0x18(t0) +/* 040014f4 0474 c90f1807 */ ldv $v15[0], 0x38(t0) +/* 040014f8 0478 c90f1c07 */ ldv $v15[8], 0x38(t0) + +gsp_040014fc: +/* 040014fc 047c c9081800 */ ldv $v8[0], 0x0(t0) +/* 04001500 0480 c9091801 */ ldv $v9[0], 0x8(t0) +/* 04001504 0484 c90a1802 */ ldv $v10[0], 0x10(t0) +/* 04001508 0488 c90c1804 */ ldv $v12[0], 0x20(t0) +/* 0400150c 048c c90d1805 */ ldv $v13[0], 0x28(t0) +/* 04001510 0490 c90e1806 */ ldv $v14[0], 0x30(t0) +/* 04001514 0494 c9081c00 */ ldv $v8[8], 0x0(t0) +/* 04001518 0498 c9091c01 */ ldv $v9[8], 0x8(t0) +/* 0400151c 049c c90a1c02 */ ldv $v10[8], 0x10(t0) +/* 04001520 04a0 c90c1c04 */ ldv $v12[8], 0x20(t0) +/* 04001524 04a4 c90d1c05 */ ldv $v13[8], 0x28(t0) +/* 04001528 04a8 03e00008 */ jr ra +/* 0400152c 04ac c90e1c06 */ ldv $v14[8], 0x30(t0) + +dma_movemem: +/* 04001530 04b0 cac02000 */ lqv $v0[0], 0x0(s6) +/* 04001534 04b4 842501b0 */ lh a1, 0x1b0(at) +/* 04001538 04b8 0900042a */ j sp_noop +/* 0400153c 04bc e8a02000 */ sqv $v0[0], 0x0(a1) + +dma_vtx: +/* 04001540 04c0 840800be */ lh t0, 0xbe(r0) +/* 04001544 04c4 a4080106 */ sh t0, 0x106(r0) +/* 04001548 04c8 00010902 */ srl at, at, 4 +/* 0400154c 04cc 20250001 */ addi a1, at, 0x1 +/* 04001550 04d0 8f68fffc */ lw t0, -4(k1) +/* 04001554 04d4 31080004 */ andi t0, t0, 0x4 +/* 04001558 04d8 02c8b020 */ add s6, s6, t0 +/* 0400155c 04dc 20a90000 */ addi t1, a1, 0x0 +/* 04001560 04e0 cac21000 */ llv $v2[0], 0x0(s6) +/* 04001564 04e4 cac21201 */ llv $v2[4], 0x4(s6) +/* 04001568 04e8 cac21403 */ llv $v2[8], 0xc(s6) +/* 0400156c 04ec cac21604 */ llv $v2[12], 0x10(s6) +/* 04001570 04f0 20070360 */ addi a3, r0, 0x360 +/* 04001574 04f4 00064140 */ sll t0, a2, 5 +/* 04001578 04f8 000630c0 */ sll a2, a2, 3 +/* 0400157c 04fc 00c84020 */ add t0, a2, t0 +/* 04001580 0500 0d000530 */ jal gsp_040014c0 +/* 04001584 0504 00e83820 */ add a3, a3, t0 +/* 04001588 0508 cbb11005 */ llv $v17[0], 0x14(sp) +/* 0400158c 050c 0d00053a */ jal gsp_040014e8 +/* 04001590 0510 cbb11405 */ llv $v17[8], 0x14(sp) +.L04001594: +/* 04001594 0514 4a826706 */ vmudn $v28, $v12, $v2[0h] +/* 04001598 0518 cad21002 */ llv $v18[0], 0x8(s6) +/* 0400159c 051c 4a82470f */ vmadh $v28, $v8, $v2[0h] +/* 040015a0 0520 92cf0007 */ lbu t7, 0x7(s6) +/* 040015a4 0524 4aa26f0e */ vmadn $v28, $v13, $v2[1h] +/* 040015a8 0528 92d00013 */ lbu s0, 0x13(s6) +/* 040015ac 052c 4aa24f0f */ vmadh $v28, $v9, $v2[1h] +/* 040015b0 0530 8def05e0 */ lw t7, 0x5e0(t7) +/* 040015b4 0534 4ac2770e */ vmadn $v28, $v14, $v2[2h] +/* 040015b8 0538 8e1005e0 */ lw s0, 0x5e0(s0) +/* 040015bc 053c 4ac2570f */ vmadh $v28, $v10, $v2[2h] +/* 040015c0 0540 30610002 */ andi at, v1, 0x2 +/* 040015c4 0544 4b3f7f0e */ vmadn $v28, $v15, $v31[1] +/* 040015c8 0548 cad21405 */ llv $v18[8], 0x14(s6) +/* 040015cc 054c 4b3f5f4f */ vmadh $v29, $v11, $v31[1] +/* 040015d0 0550 14200076 */ bne at, r0, load_lighting +/* 040015d4 0554 22d60018 */ addi s6, s6, 0x18 + +gsp_040015d8: +/* 040015d8 0558 4a119485 */ vmudm $v18, $v18, $v17 + +gsp_040015dc: +/* 040015dc 055c c815083b */ lsv $v21[0], 0x76(r0) +/* 040015e0 0560 4b15e506 */ vmudn $v20, $v28, $v21[0] +/* 040015e4 0564 480deb00 */ mfc2 t5, $v29[6] +/* 040015e8 0568 31ad8000 */ andi t5, t5, 0x8000 +/* 040015ec 056c 000d6b42 */ srl t5, t5, 13 +/* 040015f0 0570 4b15ed4f */ vmadh $v21, $v29, $v21[0] +/* 040015f4 0574 480eef00 */ mfc2 t6, $v29[14] +/* 040015f8 0578 31ce8000 */ andi t6, t6, 0x8000 +/* 040015fc 057c 000e7242 */ srl t6, t6, 9 +/* 04001600 0580 4afde8e5 */ vch $v3, $v29, $v29[3h] +/* 04001604 0584 01cd7025 */ or t6, t6, t5 +/* 04001608 0588 4afce0e4 */ vcl $v3, $v28, $v28[3h] +/* 0400160c 058c 484d0800 */ cfc2 t5, $vcc +/* 04001610 0590 4af5e8e5 */ vch $v3, $v29, $v21[3h] +/* 04001614 0594 4af4e0e4 */ vcl $v3, $v28, $v20[3h] +/* 04001618 0598 31a80703 */ andi t0, t5, 0x703 +/* 0400161c 059c 31ad7030 */ andi t5, t5, 0x7030 +/* 04001620 05a0 01ae6825 */ or t5, t5, t6 +/* 04001624 05a4 00084100 */ sll t0, t0, 4 +/* 04001628 05a8 000d6c00 */ sll t5, t5, 16 +/* 0400162c 05ac 01a86825 */ or t5, t5, t0 +/* 04001630 05b0 484e0800 */ cfc2 t6, $vcc +/* 04001634 05b4 31c80707 */ andi t0, t6, 0x707 +/* 04001638 05b8 4b1fed50 */ vadd $v21, $v29, $v31[0] +/* 0400163c 05bc 31ce7070 */ andi t6, t6, 0x7070 +/* 04001640 05c0 4b1fe510 */ vadd $v20, $v28, $v31[0] +/* 04001644 05c4 000e7300 */ sll t6, t6, 12 +/* 04001648 05c8 4b13e704 */ vmudl $v28, $v28, $v19[0] +/* 0400164c 05cc 010e4025 */ or t0, t0, t6 +/* 04001650 05d0 4b13ef4d */ vmadm $v29, $v29, $v19[0] +/* 04001654 05d4 010d4025 */ or t0, t0, t5 +/* 04001658 05d8 4b1fff0e */ vmadn $v28, $v31, $v31[0] +/* 0400165c 05dc a4e80024 */ sh t0, 0x24(a3) +/* 04001660 05e0 0d000400 */ jal gsp_04001000 +/* 04001664 05e4 86cdffee */ lh t5, -0x12(s6) +/* 04001668 05e8 4b1fd9a3 */ vge $v6, $v27, $v31[0] +/* 0400166c 05ec e8f51800 */ sdv $v21[0], 0x0(a3) +/* 04001670 05f0 4b1ed9a7 */ vmrg $v6, $v27, $v30[0] +/* 04001674 05f4 e8f41801 */ sdv $v20[0], 0x8(a3) +/* 04001678 05f8 4afaa144 */ vmudl $v5, $v20, $v26[3h] +/* 0400167c 05fc 4afaa94d */ vmadm $v5, $v21, $v26[3h] +/* 04001680 0600 4ae6a14e */ vmadn $v5, $v20, $v6[3h] +/* 04001684 0604 4ae6a90f */ vmadh $v4, $v21, $v6[3h] +/* 04001688 0608 2129ffff */ addi t1, t1, -1 +/* 0400168c 060c 4b132944 */ vmudl $v5, $v5, $v19[0] +/* 04001690 0610 4b13210d */ vmadm $v4, $v4, $v19[0] +/* 04001694 0614 4b1ff94e */ vmadn $v5, $v31, $v31[0] +/* 04001698 0618 306c0001 */ andi t4, v1, 0x1 +/* 0400169c 061c cac21000 */ llv $v2[0], 0x0(s6) +/* 040016a0 0620 cac21201 */ llv $v2[4], 0x4(s6) +/* 040016a4 0624 4b3f09c7 */ vmudh $v7, $v1, $v31[1] +/* 040016a8 0628 cac21403 */ llv $v2[8], 0xc(s6) +/* 040016ac 062c cac21604 */ llv $v2[12], 0x10(s6) +/* 040016b0 0630 4a0029ce */ vmadn $v7, $v5, $v0 +/* 040016b4 0634 c81d1805 */ ldv $v29[0], 0x28(r0) +/* 040016b8 0638 4a00218f */ vmadh $v6, $v4, $v0 +/* 040016bc 063c c81d1c05 */ ldv $v29[8], 0x28(r0) +/* 040016c0 0640 4b1ff9ce */ vmadn $v7, $v31, $v31[0] +/* 040016c4 0644 4a7d31a3 */ vge $v6, $v6, $v29[1q] +/* 040016c8 0648 acef0010 */ sw t7, 0x10(a3) +/* 040016cc 064c 1180000b */ beq t4, r0, .L040016fc +/* 040016d0 0650 4a5d31a0 */ vlt $v6, $v6, $v29[0q] +/* 040016d4 0654 c8032027 */ lqv $v3[0], 0x270(r0) +/* 040016d8 0658 4b032946 */ vmudn $v5, $v5, $v3[0] +/* 040016dc 065c 4b03210f */ vmadh $v4, $v4, $v3[0] +/* 040016e0 0660 4b232110 */ vadd $v4, $v4, $v3[1] +/* 040016e4 0664 4b1f2123 */ vge $v4, $v4, $v31[0] +/* 040016e8 0668 4b432120 */ vlt $v4, $v4, $v3[2] +/* 040016ec 066c e8e40293 */ sbv $v4[5], 0x13(a3) +/* 040016f0 0670 acf00018 */ sw s0, 0x18(a3) +/* 040016f4 0674 e8e4069b */ sbv $v4[13], 0x1b(a3) +/* 040016f8 0678 8cf00018 */ lw s0, 0x18(a3) +.L040016fc: +/* 040016fc 067c e8f21005 */ slv $v18[0], 0x14(a3) +/* 04001700 0680 e8e61803 */ sdv $v6[0], 0x18(a3) +/* 04001704 0684 e8e70a0f */ ssv $v7[4], 0x1e(a3) +/* 04001708 0688 e8fb0b10 */ ssv $v27[6], 0x20(a3) +/* 0400170c 068c e8fa0b11 */ ssv $v26[6], 0x22(a3) +/* 04001710 0690 1920000c */ blez t1, .L04001744 +/* 04001714 0694 2129ffff */ addi t1, t1, -1 +/* 04001718 0698 e8f51c05 */ sdv $v21[8], 0x28(a3) +/* 0400171c 069c e8f41c06 */ sdv $v20[8], 0x30(a3) +/* 04001720 06a0 e8f2140f */ slv $v18[8], 0x3c(a3) +/* 04001724 06a4 acf00038 */ sw s0, 0x38(a3) +/* 04001728 06a8 e8e61c08 */ sdv $v6[8], 0x40(a3) +/* 0400172c 06ac e8e70e23 */ ssv $v7[12], 0x46(a3) +/* 04001730 06b0 e8fb0f24 */ ssv $v27[14], 0x48(a3) +/* 04001734 06b4 e8fa0f25 */ ssv $v26[14], 0x4a(a3) +/* 04001738 06b8 ace8004c */ sw t0, 0x4c(a3) +/* 0400173c 06bc 20e70050 */ addi a3, a3, 0x50 +/* 04001740 06c0 1d20ff94 */ bgtz t1, .L04001594 +.L04001744: +/* 04001744 06c4 84080106 */ lh t0, 0x106(r0) +/* 04001748 06c8 01000008 */ jr t0 +/* 0400174c 06cc 00000000 */ nop + +dma_dl: +/* 04001750 06d0 1c200007 */ bgtz at, .L04001770 +/* 04001754 06d4 83a2004a */ lb v0, 0x4a(sp) +/* 04001758 06d8 2044ffdc */ addi a0, v0, -0x24 +/* 0400175c 06dc 1c80fe52 */ bgtz a0, sp_noop +/* 04001760 06e0 20430276 */ addi v1, v0, 0x276 +/* 04001764 06e4 20420004 */ addi v0, v0, 0x4 +/* 04001768 06e8 ac7a0000 */ sw k0, 0x0(v1) +/* 0400176c 06ec a3a2004a */ sb v0, 0x4a(sp) +.L04001770: +/* 04001770 06f0 0d000447 */ jal segmented_to_physical +/* 04001774 06f4 03009820 */ add s3, t8, r0 +/* 04001778 06f8 0260d020 */ add k0, s3, r0 +/* 0400177c 06fc 0900042a */ j sp_noop +/* 04001780 0700 201c0000 */ addi gp, r0, 0x0 + +dma_col: +/* 04001784 0704 8c240820 */ lw a0, 0x820(at) +/* 04001788 0708 ac2405e0 */ sw a0, 0x5e0(at) +/* 0400178c 070c 1c20fffd */ bgtz at, dma_col +/* 04001790 0710 2021fffc */ addi at, at, -4 +/* 04001794 0714 0900042a */ j sp_noop +/* 04001798 0718 00000000 */ nop +/* 0400179c 071c 00000000 */ nop +.L040017a0: +/* 040017a0 0720 341e0010 */ ori s8, r0, 0x10 +/* 040017a4 0724 1000fe55 */ b load_overlay +/* 040017a8 0728 84150100 */ lh s5, 0x100(r0) + +load_lighting: +/* 040017ac 072c 341e0018 */ ori s8, r0, 0x18 +/* 040017b0 0730 1000fe52 */ b load_overlay +/* 040017b4 0734 841500a0 */ lh s5, 0xa0(r0) + +gsp_040017b8: +/* 040017b8 0738 c81f2003 */ lqv $v31[0], 0x30(r0) +/* 040017bc 073c c81e2004 */ lqv $v30[0], 0x40(r0) +/* 040017c0 0740 8c040fc4 */ lw a0, 0xfc4(r0) +/* 040017c4 0744 30840001 */ andi a0, a0, 0x1 +/* 040017c8 0748 14800035 */ bne a0, r0, .L040018a0 +/* 040017cc 074c 00000000 */ nop +/* 040017d0 0750 8c370028 */ lw s7, 0x28(at) +/* 040017d4 0754 8c23002c */ lw v1, 0x2c(at) +/* 040017d8 0758 afb70040 */ sw s7, 0x40(sp) +/* 040017dc 075c afa30044 */ sw v1, 0x44(sp) +/* 040017e0 0760 40045800 */ mfc0 a0, DPC_STATUS +/* 040017e4 0764 30840001 */ andi a0, a0, DPC_STATUS_XBUS_DMA +/* 040017e8 0768 1480000a */ bne a0, r0, .L04001814 +/* 040017ec 076c 40044800 */ mfc0 a0, DPC_END +/* 040017f0 0770 02e4b822 */ sub s7, s7, a0 +/* 040017f4 0774 1ee00007 */ bgtz s7, .L04001814 +/* 040017f8 0778 40055000 */ mfc0 a1, DPC_CURRENT +/* 040017fc 077c 10a00005 */ beq a1, r0, .L04001814 +/* 04001800 0780 00000000 */ nop +/* 04001804 0784 10a40003 */ beq a1, a0, .L04001814 +/* 04001808 0788 00000000 */ nop +/* 0400180c 078c 0900060c */ j gsp_04001830 +/* 04001810 0790 34830000 */ ori v1, a0, 0x0 +.L04001814: +/* 04001814 0794 40045800 */ mfc0 a0, DPC_STATUS +/* 04001818 0798 30840400 */ andi a0, a0, DPC_STATUS_START_VALID +/* 0400181c 079c 1480fffd */ bne a0, r0, .L04001814 +/* 04001820 07a0 20040001 */ addi a0, r0, DPC_STATUS_CLR_XBUS +/* 04001824 07a4 40845800 */ mtc0 a0, DPC_STATUS +/* 04001828 07a8 40834000 */ mtc0 v1, DPC_START +/* 0400182c 07ac 40834800 */ mtc0 v1, DPC_END + +gsp_04001830: +/* 04001830 07b0 afa30018 */ sw v1, 0x18(sp) +/* 04001834 07b4 20170a20 */ addi s7, r0, 0xa20 +/* 04001838 07b8 8c250010 */ lw a1, 0x10(at) +/* 0400183c 07bc 8c020008 */ lw v0, Overlay1Info +/* 04001840 07c0 8c030010 */ lw v1, Overlay2Info +/* 04001844 07c4 8c040018 */ lw a0, Overlay3Info +/* 04001848 07c8 8c060020 */ lw a2, Overlay4Info +/* 0400184c 07cc 00451020 */ add v0, v0, a1 +/* 04001850 07d0 00651820 */ add v1, v1, a1 +/* 04001854 07d4 00852020 */ add a0, a0, a1 +/* 04001858 07d8 00c53020 */ add a2, a2, a1 +/* 0400185c 07dc ac020008 */ sw v0, Overlay1Info +/* 04001860 07e0 ac030010 */ sw v1, Overlay2Info +/* 04001864 07e4 ac040018 */ sw a0, Overlay3Info +/* 04001868 07e8 ac060020 */ sw a2, Overlay4Info +/* 0400186c 07ec 0d00043e */ jal load_overlay_fcn +/* 04001870 07f0 201e0008 */ addi s8, $zero, Overlay1Info +/* 04001874 07f4 0d000435 */ jal load_displaylist +/* 04001878 07f8 8c3a0030 */ lw k0, 0x30(at) +/* 0400187c 07fc 8c220020 */ lw v0, 0x20(at) +/* 04001880 0800 afa20020 */ sw v0, 0x20(sp) +/* 04001884 0804 afa20024 */ sw v0, 0x24(sp) +/* 04001888 0808 20420280 */ addi v0, v0, 0x280 +/* 0400188c 080c afa2004c */ sw v0, 0x4c(sp) +.L04001890: +/* 04001890 0810 8c02fff8 */ lw v0, -8(r0) +/* 04001894 0814 ac020108 */ sw v0, 0x108(r0) +/* 04001898 0818 09000416 */ j dma_wait_dl +/* 0400189c 081c 00000000 */ nop +.L040018a0: +/* 040018a0 0820 0d00043e */ jal load_overlay_fcn +/* 040018a4 0824 201e0008 */ addi s8, r0, 0x8 +/* 040018a8 0828 8c170930 */ lw s7, 0x930(r0) +/* 040018ac 082c 8c1c0924 */ lw gp, 0x924(r0) +/* 040018b0 0830 8c1b0928 */ lw k1, 0x928(r0) +/* 040018b4 0834 0900042a */ j sp_noop +/* 040018b8 0838 8c1a092c */ lw k0, 0x92c(r0) + +/* 040018bc 083c through 040019bc 093c */ +.fill 0x104, 0 + +gsp_040019c0: +/* 040019c0 0940 846b0024 */ lh t3, 0x24(v1) +/* 040019c4 0944 84480024 */ lh t0, 0x24(v0) +/* 040019c8 0948 84290024 */ lh t1, 0x24(at) +/* 040019cc 094c 01686024 */ and t4, t3, t0 +/* 040019d0 0950 01685825 */ or t3, t3, t0 +/* 040019d4 0954 01896024 */ and t4, t4, t1 +/* 040019d8 0958 318c7030 */ andi t4, t4, 0x7030 +/* 040019dc 095c 1580fdb2 */ bne t4, r0, sp_noop +/* 040019e0 0960 01695825 */ or t3, t3, t1 +/* 040019e4 0964 316b4343 */ andi t3, t3, 0x4343 +/* 040019e8 0968 1560ff6d */ bne t3, r0, .L040017a0 +.L040019ec: +/* 040019ec 096c c82d1006 */ llv $v13[0], 0x18(at) +/* 040019f0 0970 c84e1006 */ llv $v14[0], 0x18(v0) +/* 040019f4 0974 c86f1006 */ llv $v15[0], 0x18(v1) +/* 040019f8 0978 8fad0004 */ lw t5, 0x4(sp) +/* 040019fc 097c 20080920 */ addi t0, r0, 0x920 +/* 04001a00 0980 cbb50801 */ lsv $v21[0], 0x2(sp) +/* 04001a04 0984 c8250803 */ lsv $v5[0], 0x6(at) +/* 04001a08 0988 4a0d7291 */ vsub $v10, $v14, $v13 +/* 04001a0c 098c c8260807 */ lsv $v6[0], 0xe(at) +/* 04001a10 0990 4a0d7a51 */ vsub $v9, $v15, $v13 +/* 04001a14 0994 c8450903 */ lsv $v5[2], 0x6(v0) +/* 04001a18 0998 4a0e6b11 */ vsub $v12, $v13, $v14 +/* 04001a1c 099c c8460907 */ lsv $v6[2], 0xe(v0) +/* 04001a20 09a0 c8650a03 */ lsv $v5[4], 0x6(v1) +/* 04001a24 09a4 c8660a07 */ lsv $v6[4], 0xe(v1) +/* 04001a28 09a8 4b2a4c07 */ vmudh $v16, $v9, $v10[1] +/* 04001a2c 09ac 8429001a */ lh t1, 0x1a(at) +/* 04001a30 09b0 4b32949d */ vsar $v18, $v18, $v18[1] +/* 04001a34 09b4 844a001a */ lh t2, 0x1a(v0) +/* 04001a38 09b8 4b118c5d */ vsar $v17, $v17, $v17[0] +/* 04001a3c 09bc 846b001a */ lh t3, 0x1a(v1) +/* 04001a40 09c0 4b296407 */ vmudh $v16, $v12, $v9[1] +/* 04001a44 09c4 31ae1000 */ andi t6, t5, 0x1000 +/* 04001a48 09c8 4b34a51d */ vsar $v20, $v20, $v20[1] +/* 04001a4c 09cc 31af2000 */ andi t7, t5, 0x2000 +/* 04001a50 09d0 4b139cdd */ vsar $v19, $v19, $v19[0] +/* 04001a54 09d4 200c0000 */ addi t4, r0, 0x0 + +gsp_04001a58: +/* 04001a58 09d8 0149382a */ slt a3, t2, t1 +/* 04001a5c 09dc 18e00008 */ blez a3, .L04001a80 +/* 04001a60 09e0 01403820 */ add a3, t2, r0 +/* 04001a64 09e4 01205020 */ add t2, t1, r0 +/* 04001a68 09e8 00e04820 */ add t1, a3, r0 +/* 04001a6c 09ec 00403821 */ addu a3, v0, r0 +/* 04001a70 09f0 00201021 */ addu v0, at, r0 +/* 04001a74 09f4 00e00821 */ addu at, a3, r0 +/* 04001a78 09f8 398c0001 */ xori t4, t4, 0x1 +/* 04001a7c 09fc 00000000 */ nop +.L04001a80: +/* 04001a80 0a00 4a149714 */ vaddc $v28, $v18, $v20 +/* 04001a84 0a04 016a382a */ slt a3, t3, t2 +/* 04001a88 0a08 4a138f50 */ vadd $v29, $v17, $v19 +/* 04001a8c 0a0c 18e00008 */ blez a3, .L04001ab0 +/* 04001a90 0a10 01603820 */ add a3, t3, r0 +/* 04001a94 0a14 01405820 */ add t3, t2, r0 +/* 04001a98 0a18 00e05020 */ add t2, a3, r0 +/* 04001a9c 0a1c 00603821 */ addu a3, v1, r0 +/* 04001aa0 0a20 00401821 */ addu v1, v0, r0 +/* 04001aa4 0a24 00e01021 */ addu v0, a3, r0 +/* 04001aa8 0a28 09000696 */ j gsp_04001a58 +/* 04001aac 0a2c 398c0001 */ xori t4, t4, 0x1 +.L04001ab0: +/* 04001ab0 0a30 4b1feee0 */ vlt $v27, $v29, $v31[0] +/* 04001ab4 0a34 c86f1006 */ llv $v15[0], 0x18(v1) +/* 04001ab8 0a38 4a1ceeaa */ vor $v26, $v29, $v28 +/* 04001abc 0a3c c84e1006 */ llv $v14[0], 0x18(v0) +/* 04001ac0 0a40 c82d1006 */ llv $v13[0], 0x18(at) +/* 04001ac4 0a44 19800004 */ blez t4, .L04001ad8 +/* 04001ac8 0a48 4a0e7911 */ vsub $v4, $v15, $v14 +/* 04001acc 0a4c 4b7fe706 */ vmudn $v28, $v28, $v31[3] +/* 04001ad0 0a50 4b7fef4f */ vmadh $v29, $v29, $v31[3] +/* 04001ad4 0a54 4b1fff0e */ vmadn $v28, $v31, $v31[0] +.L04001ad8: +/* 04001ad8 0a58 4a0d7291 */ vsub $v10, $v14, $v13 +/* 04001adc 0a5c 4811d800 */ mfc2 s1, $v27[0] +/* 04001ae0 0a60 4a0d7a51 */ vsub $v9, $v15, $v13 +/* 04001ae4 0a64 4810d000 */ mfc2 s0, $v26[0] +/* 04001ae8 0a68 00118fc3 */ sra s1, s1, 31 +/* 04001aec 0a6c 4b1d5f73 */ vmov $v29[3], $v29[0] +/* 04001af0 0a70 01f17824 */ and t7, t7, s1 +/* 04001af4 0a74 4b1c5f33 */ vmov $v28[3], $v28[0] +/* 04001af8 0a78 4b0a5133 */ vmov $v4[2], $v10[0] +/* 04001afc 0a7c 12000139 */ beq s0, r0, .L04001fe4 +/* 04001b00 0a80 3a31ffff */ xori s1, s1, 0xffff +/* 04001b04 0a84 4b1feee0 */ vlt $v27, $v29, $v31[0] +/* 04001b08 0a88 01d17024 */ and t6, t6, s1 +/* 04001b0c 0a8c 4b2a5933 */ vmov $v4[3], $v10[1] +/* 04001b10 0a90 01ee8025 */ or s0, t7, t6 +/* 04001b14 0a94 4b096133 */ vmov $v4[4], $v9[0] +/* 04001b18 0a98 1e000132 */ bgtz s0, .L04001fe4 +/* 04001b1c 0a9c 4b296933 */ vmov $v4[5], $v9[1] +/* 04001b20 0aa0 4807d800 */ mfc2 a3, $v27[0] +/* 04001b24 0aa4 0d000400 */ jal gsp_04001000 +/* 04001b28 0aa8 20060080 */ addi a2, r0, 0x80 +/* 04001b2c 0aac 04e00002 */ bltz a3, .L04001b38 +/* 04001b30 0ab0 83a50007 */ lb a1, 0x7(sp) +/* 04001b34 0ab4 20060000 */ addi a2, r0, 0x0 +.L04001b38: +/* 04001b38 0ab8 4b9f2245 */ vmudm $v9, $v4, $v31[4] +/* 04001b3c 0abc 4b1ffa8e */ vmadn $v10, $v31, $v31[0] +/* 04001b40 0ac0 4b244a30 */ vrcp $v8[1], $v4[1] +/* 04001b44 0ac4 4b1f49f2 */ vrcph $v7[1], $v31[0] +/* 04001b48 0ac8 34a500c8 */ ori a1, a1, 0xc8 +/* 04001b4c 0acc 83a70012 */ lb a3, 0x12(sp) +/* 04001b50 0ad0 4b645a30 */ vrcp $v8[3], $v4[3] +/* 04001b54 0ad4 4b1f59f2 */ vrcph $v7[3], $v31[0] +/* 04001b58 0ad8 4ba46a30 */ vrcp $v8[5], $v4[5] +/* 04001b5c 0adc 4b1f69f2 */ vrcph $v7[5], $v31[0] +/* 04001b60 0ae0 00c73025 */ or a2, a2, a3 +/* 04001b64 0ae4 4b9e4204 */ vmudl $v8, $v8, $v30[4] +/* 04001b68 0ae8 a2e50000 */ sb a1, 0x0(s7) +/* 04001b6c 0aec 4b9e39cd */ vmadm $v7, $v7, $v30[4] +/* 04001b70 0af0 a2e60001 */ sb a2, 0x1(s7) +/* 04001b74 0af4 4b1ffa0e */ vmadn $v8, $v31, $v31[0] +/* 04001b78 0af8 4bbf2107 */ vmudh $v4, $v4, $v31[5] +/* 04001b7c 0afc c84c080c */ lsv $v12[0], 0x18(v0) +/* 04001b80 0b00 4b153184 */ vmudl $v6, $v6, $v21[0] +/* 04001b84 0b04 c82c0a0c */ lsv $v12[4], 0x18(at) +/* 04001b88 0b08 4b15294d */ vmadm $v5, $v5, $v21[0] +/* 04001b8c 0b0c c82c0c0c */ lsv $v12[8], 0x18(at) +/* 04001b90 0b10 4b1ff98e */ vmadn $v6, $v31, $v31[0] +/* 04001b94 0b14 00093b80 */ sll a3, t1, 14 +/* 04001b98 0b18 4a4a4044 */ vmudl $v1, $v8, $v10[0q] +/* 04001b9c 0b1c 4a4a384d */ vmadm $v1, $v7, $v10[0q] +/* 04001ba0 0b20 4a49404e */ vmadn $v1, $v8, $v9[0q] +/* 04001ba4 0b24 4a49380f */ vmadh $v0, $v7, $v9[0q] +/* 04001ba8 0b28 48871000 */ mtc2 a3, $v2[0] +/* 04001bac 0b2c 4b1ff84e */ vmadn $v1, $v31, $v31[0] +/* 04001bb0 0b30 ad030000 */ sw v1, 0x0(t0) +/* 04001bb4 0b34 4b9f4204 */ vmudl $v8, $v8, $v31[4] +/* 04001bb8 0b38 4b9f39cd */ vmadm $v7, $v7, $v31[4] +/* 04001bbc 0b3c 4b1ffa0e */ vmadn $v8, $v31, $v31[0] +/* 04001bc0 0b40 4b9f0844 */ vmudl $v1, $v1, $v31[4] +/* 04001bc4 0b44 4b9f000d */ vmadm $v0, $v0, $v31[4] +/* 04001bc8 0b48 4b1ff84e */ vmadn $v1, $v31, $v31[0] +/* 04001bcc 0b4c a6eb0002 */ sh t3, 0x2(s7) +/* 04001bd0 0b50 4b3e0c28 */ vand $v16, $v1, $v30[1] +/* 04001bd4 0b54 a6e90006 */ sh t1, 0x6(s7) +/* 04001bd8 0b58 4b9f6305 */ vmudm $v12, $v12, $v31[4] +/* 04001bdc 0b5c ad020004 */ sw v0, 0x4(t0) +/* 04001be0 0b60 4b1ffb4e */ vmadn $v13, $v31, $v31[0] +/* 04001be4 0b64 ad010008 */ sw at, 0x8(t0) +/* 04001be8 0b68 a6ea0004 */ sh t2, 0x4(s7) +/* 04001bec 0b6c 4bde0026 */ vcr $v0, $v0, $v30[6] +/* 04001bf0 0b70 eaec0804 */ ssv $v12[0], 0x8(s7) +/* 04001bf4 0b74 4b0282c4 */ vmudl $v11, $v16, $v2[0] +/* 04001bf8 0b78 eaed0805 */ ssv $v13[0], 0xa(s7) +/* 04001bfc 0b7c 4b02028d */ vmadm $v10, $v0, $v2[0] +/* 04001c00 0b80 eae00906 */ ssv $v0[2], 0xc(s7) +/* 04001c04 0b84 4b1fface */ vmadn $v11, $v31, $v31[0] +/* 04001c08 0b88 eae10907 */ ssv $v1[2], 0xe(s7) +/* 04001c0c 0b8c 30a70002 */ andi a3, a1, 0x2 +/* 04001c10 0b90 210f0008 */ addi t7, t0, 0x8 +/* 04001c14 0b94 21100010 */ addi s0, t0, 0x10 +/* 04001c18 0b98 4a6b68d5 */ vsubc $v3, $v13, $v11[1q] +/* 04001c1c 0b9c eae00d0a */ ssv $v0[10], 0x14(s7) +/* 04001c20 0ba0 4a6a6251 */ vsub $v9, $v12, $v10[1q] +/* 04001c24 0ba4 eae10d0b */ ssv $v1[10], 0x16(s7) +/* 04001c28 0ba8 4b263555 */ vsubc $v21, $v6, $v6[1] +/* 04001c2c 0bac eae00b0e */ ssv $v0[6], 0x1c(s7) +/* 04001c30 0bb0 4b252ce0 */ vlt $v19, $v5, $v5[1] +/* 04001c34 0bb4 eae10b0f */ ssv $v1[6], 0x1e(s7) +/* 04001c38 0bb8 4b263527 */ vmrg $v20, $v6, $v6[1] +/* 04001c3c 0bbc eae90c08 */ ssv $v9[8], 0x10(s7) +/* 04001c40 0bc0 4b46a555 */ vsubc $v21, $v20, $v6[2] +/* 04001c44 0bc4 eae30c09 */ ssv $v3[8], 0x12(s7) +/* 04001c48 0bc8 4b459ce0 */ vlt $v19, $v19, $v5[2] +/* 04001c4c 0bcc eae90a0c */ ssv $v9[4], 0x18(s7) +/* 04001c50 0bd0 4b46a527 */ vmrg $v20, $v20, $v6[2] +/* 04001c54 0bd4 eae30a0d */ ssv $v3[4], 0x1a(s7) +/* 04001c58 0bd8 22f70020 */ addi s7, s7, 0x20 +/* 04001c5c 0bdc 18e00031 */ blez a3, .L04001d24 +/* 04001c60 0be0 4bbea504 */ vmudl $v20, $v20, $v30[5] +/* 04001c64 0be4 8dee0000 */ lw t6, 0x0(t7) +/* 04001c68 0be8 4bbe9ccd */ vmadm $v19, $v19, $v30[5] +/* 04001c6c 0bec 8df1fffc */ lw s1, -4(t7) +/* 04001c70 0bf0 4b1ffd0e */ vmadn $v20, $v31, $v31[0] +/* 04001c74 0bf4 8df2fff8 */ lw s2, -8(t7) +/* 04001c78 0bf8 c9c91005 */ llv $v9[0], 0x14(t6) +/* 04001c7c 0bfc ca291405 */ llv $v9[8], 0x14(s1) +/* 04001c80 0c00 ca561005 */ llv $v22[0], 0x14(s2) +/* 04001c84 0c04 c9cb0811 */ lsv $v11[0], 0x22(t6) +/* 04001c88 0c08 c9cc0810 */ lsv $v12[0], 0x20(t6) +/* 04001c8c 0c0c ca2b0c11 */ lsv $v11[8], 0x22(s1) +/* 04001c90 0c10 4b1e5273 */ vmov $v9[2], $v30[0] +/* 04001c94 0c14 ca2c0c10 */ lsv $v12[8], 0x20(s1) +/* 04001c98 0c18 4b1e7273 */ vmov $v9[6], $v30[0] +/* 04001c9c 0c1c ca580811 */ lsv $v24[0], 0x22(s2) +/* 04001ca0 0c20 4b1e55b3 */ vmov $v22[2], $v30[0] +/* 04001ca4 0c24 ca590810 */ lsv $v25[0], 0x20(s2) +/* 04001ca8 0c28 4b145984 */ vmudl $v6, $v11, $v20[0] +/* 04001cac 0c2c 4b14618d */ vmadm $v6, $v12, $v20[0] +/* 04001cb0 0c30 e9130822 */ ssv $v19[0], 0x44(t0) +/* 04001cb4 0c34 4b13598e */ vmadn $v6, $v11, $v19[0] +/* 04001cb8 0c38 e9140826 */ ssv $v20[0], 0x4c(t0) +/* 04001cbc 0c3c 4b13614f */ vmadh $v5, $v12, $v19[0] +/* 04001cc0 0c40 4b14c404 */ vmudl $v16, $v24, $v20[0] +/* 04001cc4 0c44 4b14cc0d */ vmadm $v16, $v25, $v20[0] +/* 04001cc8 0c48 4b13c50e */ vmadn $v20, $v24, $v19[0] +/* 04001ccc 0c4c 4b13cccf */ vmadh $v19, $v25, $v19[0] +/* 04001cd0 0c50 4a864c05 */ vmudm $v16, $v9, $v6[0h] +/* 04001cd4 0c54 4a854a4f */ vmadh $v9, $v9, $v5[0h] +/* 04001cd8 0c58 4b1ffa8e */ vmadn $v10, $v31, $v31[0] +/* 04001cdc 0c5c 4b14b405 */ vmudm $v16, $v22, $v20[0] +/* 04001ce0 0c60 4b13b58f */ vmadh $v22, $v22, $v19[0] +/* 04001ce4 0c64 4b1ffdce */ vmadn $v23, $v31, $v31[0] +/* 04001ce8 0c68 ea091c02 */ sdv $v9[8], 0x10(s0) +/* 04001cec 0c6c ea0a1c03 */ sdv $v10[8], 0x18(s0) +/* 04001cf0 0c70 ea091800 */ sdv $v9[0], 0x0(s0) +/* 04001cf4 0c74 ea0a1801 */ sdv $v10[0], 0x8(s0) +/* 04001cf8 0c78 ea161804 */ sdv $v22[0], 0x20(s0) +/* 04001cfc 0c7c ea171805 */ sdv $v23[0], 0x28(s0) +/* 04001d00 0c80 4a094a53 */ vabs $v9, $v9, $v9 +/* 04001d04 0c84 ca131004 */ llv $v19[0], 0x10(s0) +/* 04001d08 0c88 4a16b593 */ vabs $v22, $v22, $v22 +/* 04001d0c 0c8c ca141006 */ llv $v20[0], 0x18(s0) +/* 04001d10 0c90 4a139cd3 */ vabs $v19, $v19, $v19 +/* 04001d14 0c94 4a164c63 */ vge $v17, $v9, $v22 +/* 04001d18 0c98 4a1754a7 */ vmrg $v18, $v10, $v23 +/* 04001d1c 0c9c 4a138c63 */ vge $v17, $v17, $v19 +/* 04001d20 0ca0 4a1494a7 */ vmrg $v18, $v18, $v20 +.L04001d24: +/* 04001d24 0ca4 e9111010 */ slv $v17[0], 0x40(t0) +/* 04001d28 0ca8 e9121012 */ slv $v18[0], 0x48(t0) +/* 04001d2c 0cac 30a70007 */ andi a3, a1, 0x7 +/* 04001d30 0cb0 18e000ab */ blez a3, .L04001fe0 +/* 04001d34 0cb4 4a1ffcac */ vxor $v18, $v31, $v31 +/* 04001d38 0cb8 c8793802 */ luv $v25[0], 0x10(v1) +/* 04001d3c 0cbc 4bbe9410 */ vadd $v16, $v18, $v30[5] +/* 04001d40 0cc0 c82f3802 */ luv $v15[0], 0x10(at) +/* 04001d44 0cc4 4bbe9610 */ vadd $v24, $v18, $v30[5] +/* 04001d48 0cc8 c8573802 */ luv $v23[0], 0x10(v0) +/* 04001d4c 0ccc 4bbe9150 */ vadd $v5, $v18, $v30[5] +/* 04001d50 0cd0 4bffce45 */ vmudm $v25, $v25, $v31[7] +/* 04001d54 0cd4 4bff7bc5 */ vmudm $v15, $v15, $v31[7] +/* 04001d58 0cd8 4bffbdc5 */ vmudm $v23, $v23, $v31[7] +/* 04001d5c 0cdc c9101c03 */ ldv $v16[8], 0x18(t0) +/* 04001d60 0ce0 c90f1c02 */ ldv $v15[8], 0x10(t0) +/* 04001d64 0ce4 c9181c05 */ ldv $v24[8], 0x28(t0) +/* 04001d68 0ce8 c9171c04 */ ldv $v23[8], 0x20(t0) +/* 04001d6c 0cec c9051c07 */ ldv $v5[8], 0x38(t0) +/* 04001d70 0cf0 c9191c06 */ ldv $v25[8], 0x30(t0) +/* 04001d74 0cf4 c8300f0f */ lsv $v16[14], 0x1e(at) +/* 04001d78 0cf8 c82f0f0e */ lsv $v15[14], 0x1c(at) +/* 04001d7c 0cfc c8580f0f */ lsv $v24[14], 0x1e(v0) +/* 04001d80 0d00 c8570f0e */ lsv $v23[14], 0x1c(v0) +/* 04001d84 0d04 c8650f0f */ lsv $v5[14], 0x1e(v1) +/* 04001d88 0d08 c8790f0e */ lsv $v25[14], 0x1c(v1) +/* 04001d8c 0d0c 4a10c315 */ vsubc $v12, $v24, $v16 +/* 04001d90 0d10 4a0fbad1 */ vsub $v11, $v23, $v15 +/* 04001d94 0d14 4a058515 */ vsubc $v20, $v16, $v5 +/* 04001d98 0d18 4a197cd1 */ vsub $v19, $v15, $v25 +/* 04001d9c 0d1c 4a102a95 */ vsubc $v10, $v5, $v16 +/* 04001da0 0d20 4a0fca51 */ vsub $v9, $v25, $v15 +/* 04001da4 0d24 4a188595 */ vsubc $v22, $v16, $v24 +/* 04001da8 0d28 4a177d51 */ vsub $v21, $v15, $v23 +/* 04001dac 0d2c 4b645186 */ vmudn $v6, $v10, $v4[3] +/* 04001db0 0d30 4b64498f */ vmadh $v6, $v9, $v4[3] +/* 04001db4 0d34 4ba4b18e */ vmadn $v6, $v22, $v4[5] +/* 04001db8 0d38 4ba4a98f */ vmadh $v6, $v21, $v4[5] +/* 04001dbc 0d3c 4b094a5d */ vsar $v9, $v9, $v9[0] +/* 04001dc0 0d40 4b2a529d */ vsar $v10, $v10, $v10[1] +/* 04001dc4 0d44 4b846186 */ vmudn $v6, $v12, $v4[4] +/* 04001dc8 0d48 4b84598f */ vmadh $v6, $v11, $v4[4] +/* 04001dcc 0d4c 4b44a18e */ vmadn $v6, $v20, $v4[2] +/* 04001dd0 0d50 4b44998f */ vmadh $v6, $v19, $v4[2] +/* 04001dd4 0d54 4b0b5add */ vsar $v11, $v11, $v11[0] +/* 04001dd8 0d58 4b2c631d */ vsar $v12, $v12, $v12[1] +/* 04001ddc 0d5c 4b7a5184 */ vmudl $v6, $v10, $v26[3] +/* 04001de0 0d60 4b7a498d */ vmadm $v6, $v9, $v26[3] +/* 04001de4 0d64 4b7b528e */ vmadn $v10, $v10, $v27[3] +/* 04001de8 0d68 4b7b4a4f */ vmadh $v9, $v9, $v27[3] +/* 04001dec 0d6c 4b7a6184 */ vmudl $v6, $v12, $v26[3] +/* 04001df0 0d70 4b7a598d */ vmadm $v6, $v11, $v26[3] +/* 04001df4 0d74 4b7b630e */ vmadn $v12, $v12, $v27[3] +/* 04001df8 0d78 eae91801 */ sdv $v9[0], 0x8(s7) +/* 04001dfc 0d7c 4b7b5acf */ vmadh $v11, $v11, $v27[3] +/* 04001e00 0d80 eaea1803 */ sdv $v10[0], 0x18(s7) +/* 04001e04 0d84 4b3f6186 */ vmudn $v6, $v12, $v31[1] +/* 04001e08 0d88 4b3f598f */ vmadh $v6, $v11, $v31[1] +/* 04001e0c 0d8c 4ba1518c */ vmadl $v6, $v10, $v1[5] +/* 04001e10 0d90 4ba1498d */ vmadm $v6, $v9, $v1[5] +/* 04001e14 0d94 4ba0538e */ vmadn $v14, $v10, $v0[5] +/* 04001e18 0d98 eaeb1805 */ sdv $v11[0], 0x28(s7) +/* 04001e1c 0d9c 4ba04b4f */ vmadh $v13, $v9, $v0[5] +/* 04001e20 0da0 eaec1807 */ sdv $v12[0], 0x38(s7) +/* 04001e24 0da4 4b027704 */ vmudl $v28, $v14, $v2[0] +/* 04001e28 0da8 eaed1804 */ sdv $v13[0], 0x20(s7) +/* 04001e2c 0dac 4b02698d */ vmadm $v6, $v13, $v2[0] +/* 04001e30 0db0 eaee1806 */ sdv $v14[0], 0x30(s7) +/* 04001e34 0db4 4b1fff0e */ vmadn $v28, $v31, $v31[0] +/* 04001e38 0db8 4a1c8495 */ vsubc $v18, $v16, $v28 +/* 04001e3c 0dbc 4a067c51 */ vsub $v17, $v15, $v6 +/* 04001e40 0dc0 30a70004 */ andi a3, a1, 0x4 +/* 04001e44 0dc4 18e00004 */ blez a3, .L04001e58 +/* 04001e48 0dc8 30a70002 */ andi a3, a1, 0x2 +/* 04001e4c 0dcc 22f70040 */ addi s7, s7, 0x40 +/* 04001e50 0dd0 eaf11878 */ sdv $v17[0], -0x40(s7) +/* 04001e54 0dd4 eaf2187a */ sdv $v18[0], -0x30(s7) +.L04001e58: +/* 04001e58 0dd8 18e00040 */ blez a3, .L04001f5c +/* 04001e5c 0ddc 30a70001 */ andi a3, a1, 0x1 +/* 04001e60 0de0 20100800 */ addi s0, r0, 0x800 +/* 04001e64 0de4 48909800 */ mtc2 s0, $v19[0] +/* 04001e68 0de8 4a094e13 */ vabs $v24, $v9, $v9 +/* 04001e6c 0dec c9141c08 */ ldv $v20[8], 0x40(t0) +/* 04001e70 0df0 4a0b5e53 */ vabs $v25, $v11, $v11 +/* 04001e74 0df4 c9151c09 */ ldv $v21[8], 0x48(t0) +/* 04001e78 0df8 4b13c605 */ vmudm $v24, $v24, $v19[0] +/* 04001e7c 0dfc 4b1ffe8e */ vmadn $v26, $v31, $v31[0] +/* 04001e80 0e00 4b13ce45 */ vmudm $v25, $v25, $v19[0] +/* 04001e84 0e04 4b1ffece */ vmadn $v27, $v31, $v31[0] +/* 04001e88 0e08 4b13ad44 */ vmudl $v21, $v21, $v19[0] +/* 04001e8c 0e0c 4b13a50d */ vmadm $v20, $v20, $v19[0] +/* 04001e90 0e10 4b1ffd4e */ vmadn $v21, $v31, $v31[0] +/* 04001e94 0e14 4b5fd686 */ vmudn $v26, $v26, $v31[2] +/* 04001e98 0e18 4b5fc60f */ vmadh $v24, $v24, $v31[2] +/* 04001e9c 0e1c 4b1ffe8e */ vmadn $v26, $v31, $v31[0] +/* 04001ea0 0e20 4b3fddce */ vmadn $v23, $v27, $v31[1] +/* 04001ea4 0e24 4b3fcd8f */ vmadh $v22, $v25, $v31[1] +/* 04001ea8 0e28 20100040 */ addi s0, r0, 0x40 +/* 04001eac 0e2c 4b3fa98e */ vmadn $v6, $v21, $v31[1] +/* 04001eb0 0e30 48909800 */ mtc2 s0, $v19[0] +/* 04001eb4 0e34 4b3fa14f */ vmadh $v5, $v20, $v31[1] +/* 04001eb8 0e38 4ba635d5 */ vsubc $v23, $v6, $v6[5] +/* 04001ebc 0e3c 4ba52963 */ vge $v5, $v5, $v5[5] +/* 04001ec0 0e40 4ba631a7 */ vmrg $v6, $v6, $v6[5] +/* 04001ec4 0e44 4bc635d5 */ vsubc $v23, $v6, $v6[6] +/* 04001ec8 0e48 4bc52963 */ vge $v5, $v5, $v5[6] +/* 04001ecc 0e4c 4bc631a7 */ vmrg $v6, $v6, $v6[6] +/* 04001ed0 0e50 4b133184 */ vmudl $v6, $v6, $v19[0] +/* 04001ed4 0e54 4b13294d */ vmadm $v5, $v5, $v19[0] +/* 04001ed8 0e58 4b1ff98e */ vmadn $v6, $v31, $v31[0] +/* 04001edc 0e5c 4b8545f2 */ vrcph $v23[0], $v5[4] +/* 04001ee0 0e60 4b8641b1 */ vrcpl $v6[0], $v6[4] +/* 04001ee4 0e64 4b1f4172 */ vrcph $v5[0], $v31[0] +/* 04001ee8 0e68 4b5f3186 */ vmudn $v6, $v6, $v31[2] +/* 04001eec 0e6c 4b5f294f */ vmadh $v5, $v5, $v31[2] +/* 04001ef0 0e70 4b3f2960 */ vlt $v5, $v5, $v31[1] +/* 04001ef4 0e74 4b1f31a7 */ vmrg $v6, $v6, $v31[0] +/* 04001ef8 0e78 4b069504 */ vmudl $v20, $v18, $v6[0] +/* 04001efc 0e7c 4b068d0d */ vmadm $v20, $v17, $v6[0] +/* 04001f00 0e80 4b05950e */ vmadn $v20, $v18, $v5[0] +/* 04001f04 0e84 4b058ccf */ vmadh $v19, $v17, $v5[0] +/* 04001f08 0e88 4b065584 */ vmudl $v22, $v10, $v6[0] +/* 04001f0c 0e8c 4b064d8d */ vmadm $v22, $v9, $v6[0] +/* 04001f10 0e90 4b05558e */ vmadn $v22, $v10, $v5[0] +/* 04001f14 0e94 eaf31c00 */ sdv $v19[8], 0x0(s7) +/* 04001f18 0e98 4b054d4f */ vmadh $v21, $v9, $v5[0] +/* 04001f1c 0e9c eaf41c02 */ sdv $v20[8], 0x10(s7) +/* 04001f20 0ea0 4b066604 */ vmudl $v24, $v12, $v6[0] +/* 04001f24 0ea4 4b065e0d */ vmadm $v24, $v11, $v6[0] +/* 04001f28 0ea8 4b05660e */ vmadn $v24, $v12, $v5[0] +/* 04001f2c 0eac eaf51c01 */ sdv $v21[8], 0x8(s7) +/* 04001f30 0eb0 4b055dcf */ vmadh $v23, $v11, $v5[0] +/* 04001f34 0eb4 eaf61c03 */ sdv $v22[8], 0x18(s7) +/* 04001f38 0eb8 4b067684 */ vmudl $v26, $v14, $v6[0] +/* 04001f3c 0ebc 4b066e8d */ vmadm $v26, $v13, $v6[0] +/* 04001f40 0ec0 4b05768e */ vmadn $v26, $v14, $v5[0] +/* 04001f44 0ec4 eaf71c05 */ sdv $v23[8], 0x28(s7) +/* 04001f48 0ec8 4b056e4f */ vmadh $v25, $v13, $v5[0] +/* 04001f4c 0ecc eaf81c07 */ sdv $v24[8], 0x38(s7) +/* 04001f50 0ed0 22f70040 */ addi s7, s7, 0x40 +/* 04001f54 0ed4 eaf91c7c */ sdv $v25[8], -0x20(s7) +/* 04001f58 0ed8 eafa1c7e */ sdv $v26[8], -0x10(s7) +.L04001f5c: +/* 04001f5c 0edc 18e00020 */ blez a3, .L04001fe0 +/* 04001f60 0ee0 4b9e7386 */ vmudn $v14, $v14, $v30[4] +/* 04001f64 0ee4 4b9e6b4f */ vmadh $v13, $v13, $v30[4] +/* 04001f68 0ee8 4b1ffb8e */ vmadn $v14, $v31, $v31[0] +/* 04001f6c 0eec 4b9e8406 */ vmudn $v16, $v16, $v30[4] +/* 04001f70 0ef0 4b9e7bcf */ vmadh $v15, $v15, $v30[4] +/* 04001f74 0ef4 4b1ffc0e */ vmadn $v16, $v31, $v31[0] +/* 04001f78 0ef8 eaed0f04 */ ssv $v13[14], 0x8(s7) +/* 04001f7c 0efc 4b9e5286 */ vmudn $v10, $v10, $v30[4] +/* 04001f80 0f00 eaee0f05 */ ssv $v14[14], 0xa(s7) +/* 04001f84 0f04 4b9e4a4f */ vmadh $v9, $v9, $v30[4] +/* 04001f88 0f08 4b1ffa8e */ vmadn $v10, $v31, $v31[0] +/* 04001f8c 0f0c 4b9e6306 */ vmudn $v12, $v12, $v30[4] +/* 04001f90 0f10 4b9e5acf */ vmadh $v11, $v11, $v30[4] +/* 04001f94 0f14 4b1ffb0e */ vmadn $v12, $v31, $v31[0] +/* 04001f98 0f18 93a70011 */ lbu a3, 0x11(sp) +/* 04001f9c 0f1c 00073822 */ sub a3, r0, a3 +/* 04001fa0 0f20 10e00003 */ beq a3, r0, .L04001fb0 +/* 04001fa4 0f24 48873000 */ mtc2 a3, $v6[0] +/* 04001fa8 0f28 4b065ae5 */ vch $v11, $v11, $v6[0] +/* 04001fac 0f2c 4b1f6324 */ vcl $v12, $v12, $v31[0] +.L04001fb0: +/* 04001fb0 0f30 eae90f02 */ ssv $v9[14], 0x4(s7) +/* 04001fb4 0f34 4b027704 */ vmudl $v28, $v14, $v2[0] +/* 04001fb8 0f38 eaea0f03 */ ssv $v10[14], 0x6(s7) +/* 04001fbc 0f3c 4b02698d */ vmadm $v6, $v13, $v2[0] +/* 04001fc0 0f40 eaeb0f06 */ ssv $v11[14], 0xc(s7) +/* 04001fc4 0f44 4b1fff0e */ vmadn $v28, $v31, $v31[0] +/* 04001fc8 0f48 eaec0f07 */ ssv $v12[14], 0xe(s7) +/* 04001fcc 0f4c 4a1c8495 */ vsubc $v18, $v16, $v28 +/* 04001fd0 0f50 4a067c51 */ vsub $v17, $v15, $v6 +/* 04001fd4 0f54 22f70010 */ addi s7, s7, 0x10 +/* 04001fd8 0f58 eaf10f78 */ ssv $v17[14], -0x10(s7) +/* 04001fdc 0f5c eaf20f79 */ ssv $v18[14], -0xe(s7) +.L04001fe0: +/* 04001fe0 0f60 0d00045e */ jal gsp_04001178 +.L04001fe4: +/* 04001fe4 0f64 00000000 */ nop +/* 04001fe8 0f68 03c00008 */ jr s8 +/* 04001fec 0f6c 00000000 */ nop +Overlay0End: + +.headersize 0x04001000 - orga() + +Overlay1: +gsp_04001000: +/* 04001000 0f70 4b7d5ef2 */ vrcph $v27[3], $v29[3] +/* 04001004 0f74 4b7c5eb1 */ vrcpl $v26[3], $v28[3] +/* 04001008 0f78 4bfd5ef2 */ vrcph $v27[3], $v29[7] +/* 0400100c 0f7c 4bfc7eb1 */ vrcpl $v26[7], $v28[7] +/* 04001010 0f80 4b1f7ef2 */ vrcph $v27[7], $v31[0] +/* 04001014 0f84 4b5fd686 */ vmudn $v26, $v26, $v31[2] +/* 04001018 0f88 4b5fdecf */ vmadh $v27, $v27, $v31[2] +/* 0400101c 0f8c 4b1ffe8e */ vmadn $v26, $v31, $v31[0] +/* 04001020 0f90 c8172006 */ lqv $v23[0], 0x60(r0) +/* 04001024 0f94 4a1ffdac */ vxor $v22, $v31, $v31 +/* 04001028 0f98 4a1cd604 */ vmudl $v24, $v26, $v28 +/* 0400102c 0f9c 4a1cde0d */ vmadm $v24, $v27, $v28 +/* 04001030 0fa0 4a1dd60e */ vmadn $v24, $v26, $v29 +/* 04001034 0fa4 4a1dde4f */ vmadh $v25, $v27, $v29 +/* 04001038 0fa8 4a18b615 */ vsubc $v24, $v22, $v24 +/* 0400103c 0fac 4a19be51 */ vsub $v25, $v23, $v25 +/* 04001040 0fb0 4a18d584 */ vmudl $v22, $v26, $v24 +/* 04001044 0fb4 4a18ddcd */ vmadm $v23, $v27, $v24 +/* 04001048 0fb8 4a19d68e */ vmadn $v26, $v26, $v25 +/* 0400104c 0fbc 4a19decf */ vmadh $v27, $v27, $v25 +/* 04001050 0fc0 03e00008 */ jr ra +/* 04001054 0fc4 00000000 */ nop + +dma_wait_dl: +/* 04001058 0fc8 0d000459 */ jal dma_wait +/* 0400105c 0fcc 201b06e0 */ addi k1, r0, 0x6e0 +.L04001060: +/* 04001060 0fd0 8f790000 */ lw t9, 0x0(k1) +/* 04001064 0fd4 8f780004 */ lw t8, 0x4(k1) +/* 04001068 0fd8 00190f42 */ srl at, t9, 29 +/* 0400106c 0fdc 30210006 */ andi at, at, 0x6 +/* 04001070 0fe0 235a0008 */ addi k0, k0, 0x8 +/* 04001074 0fe4 237b0008 */ addi k1, k1, 0x8 +/* 04001078 0fe8 239cfff8 */ addi gp, gp, -8 +/* 0400107c 0fec 1c200007 */ bgtz at, .L0400109c +/* 04001080 0ff0 333201ff */ andi s2, t9, 0x1ff +/* 04001084 0ff4 20160820 */ addi s6, r0, 0x820 +Overlay1End: + +.headersize 0x040017a0 - orga() + +Overlay2: +/* 040017a0 0ff8 10000006 */ b perform_clip +/* 040017a4 0ffc a41f0158 */ sh ra, 0x158(r0) +/* 040017a8 1000 00000000 */ nop +/* 040017ac 1004 00000000 */ nop +/* 040017b0 1008 341e0018 */ ori s8, r0, 0x18 +/* 040017b4 100c 1000fe51 */ b load_overlay +/* 040017b8 1010 841500a0 */ lh s5, 0xa0(r0) + +perform_clip: +/* 040017bc 1014 a4030980 */ sh v1, 0x980(r0) +/* 040017c0 1018 a4020982 */ sh v0, 0x982(r0) +/* 040017c4 101c a4010984 */ sh at, 0x984(r0) +/* 040017c8 1020 a4000986 */ sh r0, 0x986(r0) +/* 040017cc 1024 34070df8 */ ori a3, r0, 0xdf8 +/* 040017d0 1028 341e0980 */ ori s8, r0, 0x980 +/* 040017d4 102c 3406000c */ ori a2, r0, 0xc + +next_clip: +/* 040017d8 1030 03de2825 */ or a1, s8, s8 +/* 040017dc 1034 3bde0014 */ xori s8, s8, 0x14 +.L040017e0: +/* 040017e0 1038 10c0006a */ beq a2, r0, .L0400198c +/* 040017e4 103c 84cb00a6 */ lh t3, 0xa6(a2) +/* 040017e8 1040 20c6fffe */ addi a2, a2, -2 +/* 040017ec 1044 34110000 */ ori s1, r0, 0x0 +/* 040017f0 1048 00009025 */ or s2, r0, r0 + +found_in: +/* 040017f4 104c 34a20000 */ ori v0, a1, 0x0 + +found_out: +/* 040017f8 1050 09000603 */ j gsp_0400180c +/* 040017fc 1054 23ce0002 */ addi t6, s8, 0x2 +.L04001800: +/* 04001800 1058 010b4024 */ and t0, t0, t3 +/* 04001804 105c 1112000d */ beq t0, s2, .L0400183c +/* 04001808 1060 20420002 */ addi v0, v0, 0x2 + +gsp_0400180c: +/* 0400180c 1064 0140a025 */ or s4, t2, r0 +/* 04001810 1068 a5ca0000 */ sh t2, 0x0(t6) +/* 04001814 106c 21ce0002 */ addi t6, t6, 0x2 +.L04001818: +/* 04001818 1070 844a0000 */ lh t2, 0x0(v0) +/* 0400181c 1074 1540fff8 */ bne t2, r0, .L04001800 +/* 04001820 1078 85480024 */ lh t0, 0x24(t2) +/* 04001824 107c 2228fffe */ addi t0, s1, -2 +/* 04001828 1080 1d00fffb */ bgtz t0, .L04001818 +/* 0400182c 1084 34a20000 */ ori v0, a1, 0x0 +/* 04001830 1088 1100ffeb */ beq t0, r0, .L040017e0 +/* 04001834 108c 00000000 */ nop +/* 04001838 1090 0900066e */ j gsp_040019b8 +.L0400183c: +/* 0400183c 1094 024b9026 */ xor s2, s2, t3 +/* 04001840 1098 862800f6 */ lh t0, 0xf6(s1) +/* 04001844 109c 22310002 */ addi s1, s1, 0x2 +/* 04001848 10a0 01000008 */ jr t0 +/* 0400184c 10a4 84080102 */ lh t0, 0x102(r0) + +found_first_in: +/* 04001850 10a8 488a6800 */ mtc2 t2, $v13[0] +/* 04001854 10ac 02805025 */ or t2, s4, r0 +/* 04001858 10b0 48146800 */ mfc2 s4, $v13[0] +/* 0400185c 10b4 37ce0000 */ ori t6, s8, 0x0 +/* 04001860 10b8 840800f8 */ lh t0, 0xf8(r0) + +found_first_out: +/* 04001864 10bc a4080106 */ sh t0, 0x106(r0) +/* 04001868 10c0 20e70028 */ addi a3, a3, 0x28 +/* 0400186c 10c4 a5c70000 */ sh a3, 0x0(t6) +/* 04001870 10c8 a5c00002 */ sh r0, 0x2(t6) +/* 04001874 10cc c9491800 */ ldv $v9[0], 0x0(t2) +/* 04001878 10d0 c94a1801 */ ldv $v10[0], 0x8(t2) +/* 0400187c 10d4 ca841800 */ ldv $v4[0], 0x0(s4) +/* 04001880 10d8 ca851801 */ ldv $v5[0], 0x8(s4) +/* 04001884 10dc 00064080 */ sll t0, a2, 2 +/* 04001888 10e0 c901180e */ ldv $v1[0], 0x70(t0) +/* 0400188c 10e4 4b7f0807 */ vmudh $v0, $v1, $v31[3] +/* 04001890 10e8 4a012b06 */ vmudn $v12, $v5, $v1 +/* 04001894 10ec 4a0122cf */ vmadh $v11, $v4, $v1 +/* 04001898 10f0 4b1ffb0e */ vmadn $v12, $v31, $v31[0] +/* 0400189c 10f4 4a00570e */ vmadn $v28, $v10, $v0 +/* 040018a0 10f8 4a004f4f */ vmadh $v29, $v9, $v0 +/* 040018a4 10fc 4b1fff0e */ vmadn $v28, $v31, $v31[0] +/* 040018a8 1100 4a5ce694 */ vaddc $v26, $v28, $v28[0q] +/* 040018ac 1104 4a5deed0 */ vadd $v27, $v29, $v29[0q] +/* 040018b0 1108 4abad714 */ vaddc $v28, $v26, $v26[1h] +/* 040018b4 110c 4abbdf50 */ vadd $v29, $v27, $v27[1h] +/* 040018b8 1110 4808eb00 */ mfc2 t0, $v29[6] +/* 040018bc 1114 4b7d59f2 */ vrcph $v7[3], $v29[3] +/* 040018c0 1118 4b7c58f1 */ vrcpl $v3[3], $v28[3] +/* 040018c4 111c 4b1f59f2 */ vrcph $v7[3], $v31[0] +/* 040018c8 1120 4b5f18c6 */ vmudn $v3, $v3, $v31[2] +/* 040018cc 1124 05010003 */ bgez t0, .L040018dc +/* 040018d0 1128 4b5f39cf */ vmadh $v7, $v7, $v31[2] +/* 040018d4 112c 4b7f18c6 */ vmudn $v3, $v3, $v31[3] +/* 040018d8 1130 4b7f39cf */ vmadh $v7, $v7, $v31[3] +.L040018dc: +/* 040018dc 1134 4b1f39e1 */ veq $v7, $v7, $v31[0] +/* 040018e0 1138 4b7f18e7 */ vmrg $v3, $v3, $v31[3] +/* 040018e4 113c 4b63e704 */ vmudl $v28, $v28, $v3[3] +/* 040018e8 1140 4b63ef4d */ vmadm $v29, $v29, $v3[3] +/* 040018ec 1144 0d000400 */ jal gsp_04001000 +/* 040018f0 1148 4b1fff0e */ vmadn $v28, $v31, $v31[0] +/* 040018f4 114c 4a4c6714 */ vaddc $v28, $v12, $v12[0q] +/* 040018f8 1150 4a4b5f50 */ vadd $v29, $v11, $v11[0q] +/* 040018fc 1154 4abce314 */ vaddc $v12, $v28, $v28[1h] +/* 04001900 1158 4abdead0 */ vadd $v11, $v29, $v29[1h] +/* 04001904 115c 4a1a63c4 */ vmudl $v15, $v12, $v26 +/* 04001908 1160 4a1a5bcd */ vmadm $v15, $v11, $v26 +/* 0400190c 1164 4a1b63ce */ vmadn $v15, $v12, $v27 +/* 04001910 1168 4a1b5a0f */ vmadh $v8, $v11, $v27 +/* 04001914 116c 4bbfff04 */ vmudl $v28, $v31, $v31[5] +/* 04001918 1170 4b637bcc */ vmadl $v15, $v15, $v3[3] +/* 0400191c 1174 4b63420d */ vmadm $v8, $v8, $v3[3] +/* 04001920 1178 4b1ffbce */ vmadn $v15, $v31, $v31[0] +/* 04001924 117c 4b1f4221 */ veq $v8, $v8, $v31[0] +/* 04001928 1180 4b7f7be7 */ vmrg $v15, $v15, $v31[3] +/* 0400192c 1184 4b1f7be2 */ vne $v15, $v15, $v31[0] +/* 04001930 1188 4b3f7be7 */ vmrg $v15, $v15, $v31[1] +/* 04001934 118c 4b1f7a2d */ vnxor $v8, $v15, $v31[0] +/* 04001938 1190 4b3f4214 */ vaddc $v8, $v8, $v31[1] +/* 0400193c 1194 4a1def50 */ vadd $v29, $v29, $v29 +/* 04001940 1198 4ae82f04 */ vmudl $v28, $v5, $v8[3h] +/* 04001944 119c 4ae8274d */ vmadm $v29, $v4, $v8[3h] +/* 04001948 11a0 4aef570c */ vmadl $v28, $v10, $v15[3h] +/* 0400194c 11a4 4aef4f4d */ vmadm $v29, $v9, $v15[3h] +/* 04001950 11a8 4b1fff0e */ vmadn $v28, $v31, $v31[0] +/* 04001954 11ac c94c3802 */ luv $v12[0], 0x10(t2) +/* 04001958 11b0 ca8b3802 */ luv $v11[0], 0x10(s4) +/* 0400195c 11b4 c94c1405 */ llv $v12[8], 0x14(t2) +/* 04001960 11b8 ca8b1405 */ llv $v11[8], 0x14(s4) +/* 04001964 11bc 4b6f6485 */ vmudm $v18, $v12, $v15[3] +/* 04001968 11c0 4b685c8d */ vmadm $v18, $v11, $v8[3] +/* 0400196c 11c4 e8f23800 */ suv $v18[0], 0x0(a3) +/* 04001970 11c8 e8f21c01 */ sdv $v18[8], 0x8(a3) +/* 04001974 11cc c8f21801 */ ldv $v18[0], 0x8(a3) +/* 04001978 11d0 0d000530 */ jal gsp_040014c0 +/* 0400197c 11d4 8cef0000 */ lw t7, 0x0(a3) +/* 04001980 11d8 480a6800 */ mfc2 t2, $v13[0] +/* 04001984 11dc 09000577 */ j gsp_040015dc +/* 04001988 11e0 34090001 */ ori t1, r0, 0x1 +.L0400198c: +/* 0400198c 11e4 84a80000 */ lh t0, 0x0(a1) +/* 04001990 11e8 a40800b4 */ sh t0, 0xb4(r0) +/* 04001994 11ec a4050106 */ sh a1, 0x106(r0) +/* 04001998 11f0 841e00fe */ lh s8, 0xfe(r0) + +clip_draw_loop: +/* 0400199c 11f4 84080106 */ lh t0, 0x106(r0) +/* 040019a0 11f8 840300b4 */ lh v1, 0xb4(r0) +/* 040019a4 11fc 85020002 */ lh v0, 0x2(t0) +/* 040019a8 1200 85010004 */ lh at, 0x4(t0) +/* 040019ac 1204 21080002 */ addi t0, t0, 0x2 +/* 040019b0 1208 1420000e */ bne at, r0, .L040019ec +/* 040019b4 120c a4080106 */ sh t0, 0x106(r0) + +gsp_040019b8: +/* 040019b8 1210 0900042a */ j sp_noop +/* 040019bc 1214 00000000 */ nop +Overlay2End: + +.headersize 0x040017a0 - orga() + +Overlay3: +/* 040017a0 1218 341e0010 */ ori s8, r0, 0x10 +/* 040017a4 121c 1000fe55 */ b load_overlay +/* 040017a8 1220 84150100 */ lh s5, 0x100(r0) +/* 040017ac 1224 8c01012c */ lw at, 0x12c(r0) +/* 040017b0 1228 acef0000 */ sw t7, 0x0(a3) +/* 040017b4 122c acf00004 */ sw s0, 0x4(a3) +/* 040017b8 1230 04200022 */ bltz at, .L04001844 +/* 040017bc 1234 c8e43000 */ lpv $v4[0], 0x0(a3) +/* 040017c0 1238 c827383a */ luv $v7[0], 0x1d0(at) +/* 040017c4 123c 4a1bdeec */ vxor $v27, $v27, $v27 +.L040017c8: +/* 040017c8 1240 4b1f39e3 */ vge $v7, $v7, $v31[0] +/* 040017cc 1244 c8253038 */ lpv $v5[0], 0x1c0(at) +/* 040017d0 1248 4a07ded0 */ vadd $v27, $v27, $v7 +/* 040017d4 124c c8273836 */ luv $v7[0], 0x1b0(at) +/* 040017d8 1250 4b1f352a */ vor $v20, $v6, $v31[0] +/* 040017dc 1254 4a052180 */ vmulf $v6, $v4, $v5 +/* 040017e0 1258 4a6630d0 */ vadd $v3, $v6, $v6[1q] +/* 040017e4 125c 4ac61990 */ vadd $v6, $v3, $v6[2h] +/* 040017e8 1260 4a8639c0 */ vmulf $v7, $v7, $v6[0h] +/* 040017ec 1264 1c20fff6 */ bgtz at, .L040017c8 +/* 040017f0 1268 2021ffe0 */ addi at, at, -0x20 +/* 040017f4 126c e8fb3800 */ suv $v27[0], 0x0(a3) +/* 040017f8 1270 30680004 */ andi t0, v1, 0x4 +/* 040017fc 1274 a0ef0003 */ sb t7, 0x3(a3) +/* 04001800 1278 a0f00007 */ sb s0, 0x7(a3) +/* 04001804 127c 8cef0000 */ lw t7, 0x0(a3) +/* 04001808 1280 1100ff73 */ beq t0, r0, gsp_040015d8 +/* 0400180c 1284 8cf00004 */ lw s0, 0x4(a3) +/* 04001810 1288 30680008 */ andi t0, v1, 0x8 +/* 04001814 128c cba73012 */ lpv $v7[0], 0x90(sp) +/* 04001818 1290 c8061814 */ ldv $v6[0], 0xa0(r0) +/* 0400181c 1294 4a943d0e */ vmadn $v20, $v7, $v20[0h] +/* 04001820 1298 11000006 */ beq t0, r0, .L0400183c +/* 04001824 129c 4b1ffc8d */ vmadm $v18, $v31, $v31[0] +/* 04001828 12a0 4a1291c0 */ vmulf $v7, $v18, $v18 +/* 0400182c 12a4 4a1239c0 */ vmulf $v7, $v7, $v18 +/* 04001830 12a8 4b263d00 */ vmulf $v20, $v7, $v6[1] +/* 04001834 12ac 4b663d08 */ vmacf $v20, $v7, $v6[3] +/* 04001838 12b0 4b469488 */ vmacf $v18, $v18, $v6[2] +/* 0400183c 12b4 09000576 */ j gsp_040015d8 +/* 04001840 12b8 4b9f9490 */ vadd $v18, $v18, $v31[4] +.L04001844: +/* 04001844 12bc 30210fff */ andi at, at, 0xfff +/* 04001848 12c0 ac01012c */ sw at, 0x12c(r0) +/* 0400184c 12c4 0d00053f */ jal gsp_040014fc +/* 04001850 12c8 200802a0 */ addi t0, r0, 0x2a0 +/* 04001854 12cc 34080e20 */ ori t0, r0, 0xe20 +/* 04001858 12d0 e9085901 */ stv $v8[2], 0x10(t0) +/* 0400185c 12d4 e9085a02 */ stv $v8[4], 0x20(t0) +/* 04001860 12d8 e9085e03 */ stv $v8[12], 0x30(t0) +/* 04001864 12dc e9085f04 */ stv $v8[14], 0x40(t0) +/* 04001868 12e0 c9085f01 */ ltv $v8[14], 0x10(t0) +/* 0400186c 12e4 c9085e02 */ ltv $v8[12], 0x20(t0) +/* 04001870 12e8 c9085a03 */ ltv $v8[4], 0x30(t0) +/* 04001874 12ec c9085904 */ ltv $v8[2], 0x40(t0) +/* 04001878 12f0 e90c1c02 */ sdv $v12[8], 0x10(t0) +/* 0400187c 12f4 e90d1c04 */ sdv $v13[8], 0x20(t0) +/* 04001880 12f8 e90e1c06 */ sdv $v14[8], 0x30(t0) +/* 04001884 12fc c90c1802 */ ldv $v12[0], 0x10(t0) +/* 04001888 1300 c90d1804 */ ldv $v13[0], 0x20(t0) +/* 0400188c 1304 c90e1806 */ ldv $v14[0], 0x30(t0) +/* 04001890 1308 c8253037 */ lpv $v5[0], 0x1b8(at) +/* 04001894 130c 4b9f2940 */ vmulf $v5, $v5, $v31[4] +/* 04001898 1310 4a856186 */ vmudn $v6, $v12, $v5[0h] +/* 0400189c 1314 4aa5698e */ vmadn $v6, $v13, $v5[1h] +/* 040018a0 1318 4ac5718e */ vmadn $v6, $v14, $v5[2h] +/* 040018a4 131c 4b1ff8cd */ vmadm $v3, $v31, $v31[0] +/* 040018a8 1320 4b5f1985 */ vmudm $v6, $v3, $v31[2] +/* 040018ac 1324 4a8540c8 */ vmacf $v3, $v8, $v5[0h] +/* 040018b0 1328 4aa548c8 */ vmacf $v3, $v9, $v5[1h] +/* 040018b4 132c 4ac550c8 */ vmacf $v3, $v10, $v5[2h] +/* 040018b8 1330 4b1ff98e */ vmadn $v6, $v31, $v31[0] +/* 040018bc 1334 4a063144 */ vmudl $v5, $v6, $v6 +/* 040018c0 1338 4a06194d */ vmadm $v5, $v3, $v6 +/* 040018c4 133c 4a03314e */ vmadn $v5, $v6, $v3 +/* 040018c8 1340 4a031e8f */ vmadh $v26, $v3, $v3 +/* 040018cc 1344 4a6529d4 */ vaddc $v7, $v5, $v5[1q] +/* 040018d0 1348 4a7ad110 */ vadd $v4, $v26, $v26[1q] +/* 040018d4 134c 4a8729d4 */ vaddc $v7, $v5, $v7[0h] +/* 040018d8 1350 4a84d110 */ vadd $v4, $v26, $v4[0h] +/* 040018dc 1354 4b4442f6 */ vrsqh $v11[0], $v4[2] +/* 040018e0 1358 4b4743f5 */ vrsql $v15[0], $v7[2] +/* 040018e4 135c 4b1f42f6 */ vrsqh $v11[0], $v31[0] +/* 040018e8 1360 4b7e7bc4 */ vmudl $v15, $v15, $v30[3] +/* 040018ec 1364 4b7e5acd */ vmadm $v11, $v11, $v30[3] +/* 040018f0 1368 4b1ffbce */ vmadn $v15, $v31, $v31[0] +/* 040018f4 136c 4b0f31c4 */ vmudl $v7, $v6, $v15[0] +/* 040018f8 1370 4b0f19cd */ vmadm $v7, $v3, $v15[0] +/* 040018fc 1374 4b0b31ce */ vmadn $v7, $v6, $v11[0] +/* 04001900 1378 4b0b190f */ vmadh $v4, $v3, $v11[0] +/* 04001904 137c 4b1ff9ce */ vmadn $v7, $v31, $v31[0] +/* 04001908 1380 cba2181f */ ldv $v2[0], 0xf8(sp) +/* 0400190c 1384 4b0239e3 */ vge $v7, $v7, $v2[0] +/* 04001910 1388 4b2239e0 */ vlt $v7, $v7, $v2[1] +/* 04001914 138c 4b4239c6 */ vmudn $v7, $v7, $v2[2] +/* 04001918 1390 e8273038 */ spv $v7[0], 0x1c0(at) +/* 0400191c 1394 8c2801c0 */ lw t0, 0x1c0(at) +/* 04001920 1398 ac2801c4 */ sw t0, 0x1c4(at) +/* 04001924 139c 1c20ffda */ bgtz at, .L04001890 +/* 04001928 13a0 2021ffe0 */ addi at, at, -0x20 +/* 0400192c 13a4 0900053a */ j gsp_040014e8 +/* 04001930 13a8 841f00a0 */ lh ra, 0xa0(r0) +/* 04001934 13ac 00000000 */ nop +Overlay3End: + +.headersize 0x040017a0 - orga() + +Overlay4: +/* 040017a0 13b0 090005f0 */ j gsp_040017c0 +/* 040017a4 13b4 00000000 */ nop + +overlay4_entry: +/* 040017a8 13b8 00000000 */ nop +/* 040017ac 13bc 0d000459 */ jal dma_wait +/* 040017b0 13c0 34024000 */ ori v0, r0, 0x4000 +/* 040017b4 13c4 40822000 */ mtc0 v0, SP_STATUS +/* 040017b8 13c8 0000000d */ break 0 +/* 040017bc 13cc 00000000 */ nop + +gsp_040017c0: +/* 040017c0 13d0 34021000 */ ori v0, r0, 0x1000 +/* 040017c4 13d4 ac1c0924 */ sw gp, 0x924(r0) +/* 040017c8 13d8 ac1b0928 */ sw k1, 0x928(r0) +/* 040017cc 13dc ac1a092c */ sw k0, 0x92c(r0) +/* 040017d0 13e0 ac170930 */ sw s7, 0x930(r0) +/* 040017d4 13e4 8c130108 */ lw s3, 0x108(r0) +/* 040017d8 13e8 34140000 */ ori s4, r0, 0x0 +/* 040017dc 13ec 3412093f */ ori s2, r0, 0x93f +/* 040017e0 13f0 0d00044f */ jal dma_read_write +/* 040017e4 13f4 34110001 */ ori s1, r0, 0x1 +/* 040017e8 13f8 0d000459 */ jal dma_wait +/* 040017ec 13fc 00000000 */ nop +/* 040017f0 1400 09000432 */ j gsp_040010c8 +/* 040017f4 1404 40822000 */ mtc0 v0, SP_STATUS +/* 040017f8 1408 00000000 */ nop +/* 040017fc 140c 00000000 */ nop +/* 04001800 1410 2400beef */ addiu r0, r0, 0xbeef +/* 04001804 1414 00000000 */ nop +Overlay4End: + +.close diff --git a/tools/extract b/tools/extract index c9aa11097..207f14cb7 100755 --- a/tools/extract +++ b/tools/extract @@ -32,7 +32,6 @@ class Extractor: self.extract_mpconfigs() self.extract_mpstrings() self.extract_preamble() - self.extract_rsp() self.extract_textureconfig() self.extract_textures() @@ -249,19 +248,6 @@ class Extractor: def extract_preamble(self): self.write_extracted('preamble.bin', self.rom[0x1000:0x1050]) - def extract_rsp_segment(self, name, pos, length): - if pos < 0: - pos = len(self.data) + pos - - end = pos + length - content = self.data[pos:end] - - self.write_extracted('rsp/' + name, content) - - def extract_rsp(self): - self.extract_rsp_segment('gsp.text.bin', 0xd0, 0x1420) - self.extract_rsp_segment('gsp.data.bin', -0x1350, 0x800) - def extract_textures(self): base = self.val('textures') datalen = 0x294960 if self.romid == 'jpn-final' else 0x291d60