/*.data*/ // 0x04000bb0 OPTYPE_JMP_OFFSET: .half 11e8 //NOOP .half 11ac //END_MAINDL .half 11ec //MOVEMEM .half 1210 //MOVEWORD .half 1218 //TODO_1218 .half 1258 //MTXCAT .half 12fc //MULT_MPMTX .half 1610 //BEGIN_RDPDL .half 17f4 //ZLIST_OBJ .half 1fbc //WAITSIGNAL .half 1444 //TODO_1444 .half 1444 .half 1570 //TODO_1570 .half 1188 //END_SUBDL .half 1bf0 //TODO_1BF0 .half 1cd4 //CLEARBUFFER .half 0000 .half 1cf0 //TODO_1CF0 .half 1d20 //TODO_1D20 .half 1bcc //TODO_1BCC .half 1790 //UPDATEMASK .half 17ec //TRIANGLECOMMAND .half 1664 //FLUSHRDPCMDBUFFER .half 17dc //RDPCMD .half 16f8 //RDPHALF1 .half 1758 //SETOTHERMODE_L .half 1720 //SETOTHERMODE_H .half 17dc //RDPCMD .half 17dc //RDPCMD .half 17dc //RDPCMD .half 17dc //RDPCMD .half 17dc //RDPCMD .half 17dc //RDPCMD .half 17dc //RDPCMD .half 17dc //RDPCMD .half 17dc //RDPCMD .half 17dc //RDPCMD .half 17dc //RDPCMD .half 17a4 //RDPSETOTHERMODE .half 17dc //RDPCMD .half 1704 //RDPHALF2 .half 17dc //RDPCMD .half 17dc //RDPCMD .half 17dc //RDPCMD .half 17dc //RDPCMD .half 17dc //RDPCMD .half 17dc //RDPCMD .half 17dc //RDPCMD .half 17dc //RDPCMD .half 17dc //RDPCMD .half 17dc //RDPCMD .half 17dc //RDPCMD .half 17dc //RDPCMD .half 17dc //RDPCMD .half 17dc //RDPCMD // 0x04000970 RSP_DLINPUT_OFFSET: .space 256 /* load display lists in 256 byte chunks (32 commands)*/ // 0x04000a70 RSP_DLINPUT_YIELD_OFFSET: .space 256 /* load display lists in 256 byte chunks (32 commands)*/ /*.text*/ /*Initialization*/ 04001080 lw r2, TASK_FLAGS //0xfc4 04001084 lw r30, TASK_DATA_PTR //0xff0 04001088 vsubc v0, v0, v0 0400108C addiu r1, 0, $0930 //00017fff 00400200 80000008 4000fff8 04001090 lqv v31[0], $0000(r1) //Constants 04001094 addi r29, 0, $0000 04001098 addi r16, 0, $0000 0400109C lw r17, TASK_YIELD_DATA_PTR //0xff8 040010A0 lui r1, 0, $0004 040010A4 ori r1, r1, $2800 040010A8 mtc0 r1, SP_STATUS 040010AC andi r2, r2, $0008 040010B0 bne r2, 0, $040010D8 //Don't do fifo if TASK_FLAGS & 0x8 ? /*FIFO*/ 040010B4 mfc0 r1, DPC_STATUS 040010B8 andi r1, r1, $0400 040010BC bne r1, 0, $040010B4 040010C0 addi r1, 0, $0001 040010C4 lw r22, TASK_OUTPUT_BUFF //0xfe8 040010C8 add r23, 0, 0 040010CC mtc0 r1, DPC_STATUS 040010D0 mtc0 r22, DPC_START 040010D4 mtc0 r22, DPC_END 040010D8 addi r26, 0, GfxDone //0x10f8 LoadDL: 040010DC add r2, 0, r30 //DRAM source address (TASK_DATA_PTR) 040010E0 addi r3, 0, RSP_DLINPUT_OFFSET //DMEM destination address (0x970) 040010E4 addi r4, 0, 0xff //Length 040010E8 jal DMARead 040010EC addi r29, 0, -256 //32 commands (256/8) 040010F0 jal DMAWait 040010F4 addi r30, r30, 256 //increment TASK_DATA_PTR DecodeDL: GfxDone: 040010F8 mfc0 r2, SP_STATUS 040010FC beq r29, 0, LoadDL 04001100 lw r28, (RSP_DLINPUT_OFFSET+0x100)(r29) //gfx0 04001104 lw r27, (RSP_DLINPUT_OFFSET+4+0x100)(r29) //gfx1 04001108 andi r2, r2, 0x80 0400110C srl r1, r28, 24 04001110 lhu r1, OPTYPE_JMP_OFFSET(r1) //0xbb0 04001114 bne r2, 0, ClearYield 04001118 nop 0400111C jr r1 04001120 addi r29, r29, 8 //increment command pointer ClearYield: 04001124 ori r1, 0, 0x200 04001128 mtc0 r1, SP_STATUS 0400112C addi r2, 0, $0001 04001130 jr r26 04001134 sb r2, $0940(0) WaitYield: 04001138 mfc0 r2, SP_STATUS 0400113C andi r2, r2, 0x80 04001140 bne r2, 0, ClearYield 04001144 nop 04001148 j WaitYield 0400114C nop LoadDL_Yield: 04001150 add r2, 0, r17 //DRAM source address (TASK_YIELD_DATA_PTR) 04001154 addi r3, 0, RSP_DLINPUT_YIELD_OFFSET //DMEM destination address (0xa70) 04001158 addi r4, 0, 0xff //Length 0400115C jal DMARead 04001160 addi r16, 0, -256 //32 commands (256/8) 04001164 jal DMAWait 04001168 addi r17, r17, 256 //increment TASK_YIELD_DATA_PTR DecodeDL_Yield: GfxDone_Yield: 0400116C beq r16, 0, LoadDL_Yield 04001170 lw r28, (RSP_DLINPUT_YIELD_OFFSET+0x100)(r16) //gfx0 04001174 lw r27, (RSP_DLINPUT_YIELD_OFFSET+4+0x100)(r16) //gfx1 04001178 srl r1, r28, 24 0400117C lhu r1, OPTYPE_JMP_OFFSET(r1) //0xbb0 04001180 jr r1 04001184 addi r16, r16, 8 //increment command pointer END_SUBDL: 04001188 lb r1, $0941(0) 0400118C bne r1, 0, TaskDone 04001190 addi r2, 0, -$0001 04001194 sb r2, $0940(0) 04001198 addi r26, 0, $10f8 0400119C lhu r3, $0f00(0) 040011A0 vadd v30, v0, v31[66666666] 040011A4 jr r3 040011A8 lw r15, $0ee0(0) END_MAINDL: 040011AC lb r1, $0940(0) 040011B0 bltz r1, TaskDone 040011B4 addi r2, 0, -$0001 040011B8 sb r2, $0941(0) 040011BC bgtz r1, $0400116C 040011C0 addi r26, 0, $116c 040011C4 j WaitYield 040011C8 nop TaskDone: 040011CC ori r1, 0, $4000 //TaskDone 040011D0 mtc0 r1, SP_STATUS 040011D4 break 040011D8 nop /*Never reached code?*/ 040011DC addi r26, 0, $116c 040011E0 j WaitYield 040011E4 nop NOOP: 040011E8 jr r26 MOVEMEM: 040011EC srl r1, r28, 23 040011F0 andi r1, r1, 1 //DMA R/W flag ((gfx0>>23)&1) 040011F4 add r2, 0, r27 //DRAM address (gfx1) 040011F8 andi r3, r28, 0xfff //DMEM address (gfx0&0xfff) 040011FC srl r4, r28, 12 //Length ((gfx0>>12)&0x7ff) 04001200 jal DMAProc 04001204 andi r4, r4, 0x7ff 04001208 j DMAWait 0400120C add r31, 0, r26 MOVEWORD: 04001210 jr r26 04001214 sw r27, $0000(r28) TODO_1218: 04001218 addi r1, r27, $0002 0400121C lqv v1[0], $0000(r27) 04001220 lsv v1[6], $000c(r27) 04001224 llv v1[10], $0010(r27) 04001228 lqv v2[0], $0020(r27) 0400122C lsv v2[6], $002c(r27) 04001230 llv v2[10], $0030(r27) 04001234 slv v1[8], $0000(r1) 04001238 ssv v1[2], $0008(r27) 0400123C slv v1[4], $0010(r27) 04001240 ssv v1[12], $000c(r27) 04001244 slv v2[8], $0020(r1) 04001248 ssv v2[2], $0028(r27) 0400124C slv v2[4], $0030(r27) 04001250 jr r26 04001254 ssv v2[12], $002c(r27) MTXCAT: 04001258 srl r1, r27, 16 //S 0400125C addi r2, r27, $0010 04001260 vmudh v1, v4, v0 04001264 addi r3, r28, $0008 04001268 ldv v5[0], $0020(r1) //S 0400126C ldv v5[8], $0020(r1) 04001270 lqv v3[0], $0020(r28) //T 04001274 ldv v4[0], $0000(r1) 04001278 ldv v4[8], $0000(r1) 0400127C lqv v2[0], $0000(r28) 04001280 vmadl v1, v5, v3[00004444] 04001284 addi r28, r28, $0002 04001288 vmadm v1, v4, v3[00004444] 0400128C addi r1, r1, $0008 04001290 vmadn v7, v5, v2[00004444] 04001294 bne r28, r3, $04001268 04001298 vmadh v6, v4, v2[00004444] 0400129C addi r1, r1, -$0020 040012A0 addi r28, r28, $0008 040012A4 sqv v7[0], $0020(r27) 040012A8 sqv v6[0], $0000(r27) 040012AC bne r27, r2, $04001260 040012B0 addi r27, r27, $0010 040012B4 jr r26 LoadMP: 040012B8 lqv v7[0], $0030(r28) 040012BC lqv v3[0], $0010(r28) 040012C0 lqv v5[0], $0020(r28) 040012C4 lqv v1[0], $0000(r28) 040012C8 vadd v8, v7, v0 040012CC vadd v4, v3, v0 040012D0 ldv v8[0], $0038(r28) 040012D4 vadd v6, v5, v0 040012D8 ldv v4[0], $0018(r28) 040012DC vadd v2, v1, v0 040012E0 ldv v6[0], $0028(r28) 040012E4 ldv v2[0], $0008(r28) 040012E8 ldv v7[8], $0030(r28) 040012EC ldv v3[8], $0010(r28) 040012F0 ldv v5[8], $0020(r28) 040012F4 jr r31 040012F8 ldv v1[8], $0000(r28) MULT_MPMTX: 040012FC lsv v25[0], $000e(0) 04001300 lsv v24[0], $0006(0) 04001304 llv v13[0], $0010(0) //factor 04001308 vadd v12, v0, v31[00000000] 0400130C ldv v12[0], $0000(0) //scale x/y/z/fm 04001310 ldv v12[8], $0000(0) //scale x/y/z/fm 04001314 vadd v25, v0, v25[00000000] 04001318 ldv v21[0], $0008(0) //trans x/y/z/fo 0400131C jal LoadMP 04001320 vadd v9, v13, v13 //factor * 2 04001324 ldv v21[8], $0008(0) //trans x/y/z/fo 04001328 srl r11, r27, 24 0400132C vmudm v19, v12, v9[11111111] 04001330 srl r12, r27, 12 04001334 vmadn v20, v0, v0[00000000] // v19[int]/v20[frac] = (scale x/y/z)[int] * (factor * 2)[frac] 04001338 ldv v9[0], $0000(r12) 0400133C addi r12, r12, $0006 04001340 ldv v9[8], $0000(r12) 04001344 addi r14, 0, $0000 04001348 vmudn v12, v8, v31[00000000] 0400134C addi r12, r12, $0006 04001350 vmadh v12, v4, v31[00000000] 04001354 andi r10, r13, $7070 04001358 mfc2 r8, v23[12] 0400135C mfc2 r9, v23[28] 04001360 vmadn v12, v6, v9[11115555] 04001364 sll r15, r10, 4 04001368 vmadh v12, v2, v9[11115555] 0400136C slv v18[0], $0000(r27) 04001370 vmadn v12, v7, v9[22226666] 04001374 slv v18[8], $0010(r27) 04001378 vmadh v12, v3, v9[22226666] 0400137C or r10, r10, r15 04001380 vmadn v10, v5, v9[00004444] 04001384 andi r13, r13, $0707 04001388 vmadh v11, v1, v9[00004444] //v11[int]/v10[frac] = [xi/yi/zi/wi] //x = sx*MP[0][0] + sy*MP[1][0] + sz*MP[2][0] + MP[3][0]; //y = sx*MP[0][1] + sy*MP[1][1] + sz*MP[2][1] + MP[3][1]; //z = sx*MP[0][2] + sy*MP[1][2] + sz*MP[2][2] + MP[3][2]; //w = sx*MP[0][3] + sy*MP[1][3] + sz*MP[2][3] + MP[3][3]; 0400138C srl r15, r13, 4 04001390 lb r8, $07b0(r8) 04001394 lb r9, $07b0(r9) 04001398 vmudl v12, v10, v13[11111111] 0400139C or r13, r13, r15 040013A0 vmadm v14, v11, v13[11111111] 040013A4 sh r10, $001c(r27) 040013A8 vmadn v15, v0, v0[00000000] //v14[int]/v15[frac] = [xi/yi/zi/wi] * (10/65536) 040013AC sb r13, $000c(r27) 040013B0 vmudh v12, v25, v31[00000000] 040013B4 vmadm v23, v11, v24[00000000] 040013B8 vrcph v12[0], v14[3] 040013BC vrcpl v16[1], v15[3] 040013C0 sb r8, $000d(r27) 040013C4 vrcph v16[0], v14[7] 040013C8 sb r9, $001d(r27) 040013CC vrcpl v16[5], v15[7] 040013D0 vrcph v16[4], v0[0] //v16(0)[int]/v16(1)[frac] = (1 / ((wi] * (10/65536))) / 2 (radix point shifted right) 040013D4 bltz r11, $0400143C 040013D8 vch v12, v11, v11[33337777] 040013DC addi r11, r11, -$0002 040013E0 vcl v12, v10, v10[33337777] 040013E4 add r27, r27, r14 040013E8 cfc2 r13, FLAG1 040013EC vge v12, v16, v0[00000000] 040013F0 addi r14, 0, $0020 040013F4 vmrg v14, v16, v31[11111111] // double precision mult 040013F8 vmudl v12, v10, v16[11335577] 040013FC sdv v11[0], $0008(r27) 04001400 vmadm v12, v11, v16[11335577] 04001404 sdv v11[8], $0018(r27) 04001408 vmadn v17, v10, v14[00224466] 0400140C slv v16[0], $0004(r27) 04001410 vmadh v18, v11, v14[00224466] 04001414 slv v16[8], $0014(r27) // v18[int]/v17[frac] = (x/y) * (1/w) // IxI 04001418 vmudh v12, v21, v31[00000000] 0400141C ldv v9[0], $0000(r12) //trans x/y/z/ in accu // double precision mult + trans x/y/z/ 04001420 vmadl v12, v20, v17 04001424 addi r12, r12, $0006 04001428 vmadm v12, v19, v17 0400142C ldv v9[8], $0000(r12) 04001430 vmadn v17, v20, v18 04001434 j $04001348 04001438 vmadh v18, v19, v18 // v18[int]/v17[frac] (trans x/y) + ((x/y) * (1/w) * (scale x/y) * (factor * 2)) 0400143C jr r26 04001440 nop /*Lights*/ TODO_1444: 04001444 addi r11, 0, $0950 04001448 lqv v20[0], $0010(r11) 0400144C srl r2, r27, 12 04001450 srl r1, r28, 12 04001454 sll r4, r28, 7 04001458 addi r10, 0, $0000 0400145C lbu r9, $0944(r10) 04001460 lw r5, $0000(r28) 04001464 lw r6, $0003(r28) 04001468 addiu r28, r28, $000c 0400146C lw r7, -$0006(r28) 04001470 sw r5, $0950(0) 04001474 lw r8, -$0003(r28) 04001478 sw r6, $0954(0) 0400147C lw r3, $0948(0) 04001480 sw r7, $0958(0) 04001484 lpv v11[0], $0000(r11) 04001488 sw r8, $095c(0) 0400148C lpv v12[0], $0008(r11) 04001490 lpv v3[0], $0018(r3) 04001494 luv v9[0], $0000(r3) 04001498 luv v10[0], $0000(r3) 0400149C vmulf v15, v11, v3 040014A0 vmulf v16, v12, v3 040014A4 luv v2[0], $0008(r3) 040014A8 addi r3, r3, -$0fe8 040014AC vadd v4, v0, v13[00004444] 040014B0 vadd v17, v15, v15[11115555] 040014B4 luv v7[0], $0000(r1) 040014B8 vadd v18, v16, v16[11115555] 040014BC luv v8[0], $0008(r1) 040014C0 vmov v4[6], v14[0] 040014C4 ldv v19[0], $0000(r1) 040014C8 vmov v4[0], v14[4] 040014CC ldv v19[8], $0008(r1) 040014D0 vadd v13, v17, v15[22226666] 040014D4 vadd v14, v18, v16[22226666] 040014D8 vmulf v5, v2, v13[00004444] 040014DC vmulf v6, v2, v14[00004444] 040014E0 vmov v4[3], v13[0] 040014E4 vmov v4[5], v13[4] 040014E8 vge v5, v5, v0[00000000] 040014EC vge v6, v6, v0[00000000] 040014F0 vmov v4[7], v14[0] 040014F4 vmov v4[1], v14[4] 040014F8 lpv v3[0], $0018(r3) 040014FC vadd v9, v9, v5 04001500 bgtz r3, $0400149C 04001504 vadd v10, v10, v6 04001508 addiu r27, r27, $0010 0400150C bgez r4, $04001528 04001510 vmulf v9, v9, v7 04001514 vmulf v2, v4, v4 04001518 vmulf v2, v2, v4 0400151C vmulf v21, v2, v20[33333333] 04001520 vmacf v21, v2, v20[44444444] 04001524 vmacf v4, v4, v20[55555555] 04001528 vaddc v4, v4, v31[44444444] 0400152C add r1, r1, r9 04001530 suv v9[0], $0000(r2) 04001534 vmulf v10, v10, v8 04001538 sbv v19[3], $0003(r2) 0400153C vmudl v4, v4, v20[11111111] 04001540 sbv v19[7], $0007(r2) 04001544 addi r2, r2, -$1ff8 04001548 bltz r2, $04001568 0400154C sdv v4[4], -$0010(r27) 04001550 suv v10[0], $0000(r2) 04001554 sbv v19[11], $0003(r2) 04001558 sbv v19[15], $0007(r2) 0400155C addi r2, r2, -$1ff8 04001560 bgez r2, $04001460 04001564 sdv v4[12], -$0008(r27) 04001568 jr r26 0400156C nop TODO_1570: 04001570 jal LoadMP 04001574 sw r27, $0948(0) 04001578 addi r1, 0, $0950 0400157C lqv v20[0], $0010(r1) 04001580 lpv v10[0], $0010(r27) 04001584 vmudn v17, v5, v10[00000000] 04001588 vmadh v17, v1, v10[00000000] 0400158C vmadn v17, v6, v10[11111111] 04001590 vmadh v17, v2, v10[11111111] 04001594 vmadn v17, v7, v10[22222222] 04001598 vmadh v17, v3, v10[22222222] 0400159C vsaw v12, ACCUM_M 040015A0 vsaw v11, ACCUM_H 040015A4 vmudl v17, v12, v12 040015A8 vmadm v17, v11, v12 040015AC vmadn v14, v12, v11 040015B0 vmadh v13, v11, v11 040015B4 vaddc v16, v14, v14[11111111] 040015B8 vadd v15, v13, v13[11111111] 040015BC vaddc v14, v16, v14[22222222] 040015C0 vadd v13, v15, v13[22222222] 040015C4 vrsqh v17[0], v13[0] 040015C8 vrsql v14[0], v14[0] 040015CC vrsqh v13[0], v0[0] 040015D0 vmudl v17, v14, v31[33333333] 040015D4 vmadm v13, v13, v31[33333333] 040015D8 vmadn v14, v0, v0[00000000] 040015DC vmudl v17, v12, v14[00000000] 040015E0 vmadm v17, v11, v14[00000000] 040015E4 vmadn v12, v12, v13[00000000] 040015E8 vmadh v11, v11, v13[00000000] 040015EC vmudn v12, v12, v31[11111111] 040015F0 vmadh v11, v11, v31[11111111] 040015F4 spv v11[0], $0018(r27) 040015F8 lw r2, $0018(r27) 040015FC addi r27, r27, -$0fe8 04001600 bgez r27, $04001580 04001604 sw r2, $0004(r27) 04001608 jr r26 0400160C nop BEGIN_RDPDL 04001610 addi r21, 0, 0x1 04001614 add r24, 0, r27 04001618 add r2, 0, r24 //DRAM address (gfx1) 0400161C addi r3, 0, 0xb70 //DMEM address 04001620 addi r4, 0, 0x3f //Length 04001624 jal DMARead 04001628 addi r25, 0, -64 0400162C jal DMAwait 04001630 addi r24, r24, 64 04001634 beq r25, 0, $04001618 04001638 lw r28, $0bb0(r25) 0400163C lw r27, $0bb4(r25) 04001640 addi r9, r23, -$0158 04001644 srl r10, r28, 24 04001648 sll r10, r10, 1 0400164C bltz r9, $0400165C 04001650 lhu r10, $0a1e(r10) 04001654 jal FlushRDP 04001658 nop 0400165C jr r10 04001660 addi r25, r25, 8 FLUSHRDPCMDBUFFER 04001664 beq r21, 0, $040016F0 04001668 nop 0400166C j FlushRDP 04001670 add r31, r26, 0 FlushRDP: 04001674 add r6, r31, 0 04001678 lw r1, TASK_OUTPUT_BUFF_SIZE //0xfec 0400167C sub r1, r1, r22 04001680 sub r1, r1, r23 04001684 bgez r1, $040016AC 04001688 nop 0400168C mfc0 r1, DPC_STATUS 04001690 andi r1, r1, $0400 04001694 bne r1, 0, $0400168C 04001698 mfc0 r1, DPC_CURRENT 0400169C lw r22, TASK_OUTPUT_BUFF //0xfe8 040016A0 beq r1, r22, $04001698 040016A4 nop 040016A8 mtc0 r22, DPC_START 040016AC mfc0 r1, DPC_CURRENT 040016B0 sub r2, r22, r1 040016B4 bgez r2, $040016C8 040016B8 add r2, r22, r23 040016BC sub r1, r2, r1 040016C0 bgez r1, $040016AC 040016C4 nop 040016C8 addi r1, 0, 1 //DMA write flag 040016CC add r2, 0, r22 040016D0 addi r3, 0, $0c20 040016D4 addi r4, r23, -$0001 040016D8 jal DMAProc 040016DC add r22, r22, r23 040016E0 jal DMAwait 040016E4 add r23, 0, 0 040016E8 jr r6 040016EC mtc0 r22, DPC_END 040016F0 jr r26 040016F4 nop RDPHALF1: 040016F8 sw r27, $0900(0) 040016FC j $04001634 04001700 nop RDPHALF2: 04001704 lw r28, $0900(0) 04001708 sw r28, $0c20(r23) 0400170C sw r27, $0c24(r23) 04001710 j $04001634 04001714 addi r23, r23, $0008 04001718 j $04001634 0400171C nop SETOTHERMODE_H 04001720 lw r3, $08f0(0) //OtherMode0 04001724 lw r4, $08f4(0) //OtherMode1 04001728 lui r1, 0, $8000 0400172C srl r2, r28, 8 04001730 srav r1, r1, r28 04001734 srlv r1, r1, r2 04001738 nor r2, r1, 0 0400173C and r3, r3, r2 04001740 or r3, r3, r27 04001744 sw r3, $08f0(0) 04001748 sw r3, $0c20(r23) 0400174C sw r4, $0c24(r23) 04001750 j $04001634 04001754 addi r23, r23, $0008 SETOTHERMODE_L: 04001758 lw r3, $08f0(0) 0400175C lw r4, $08f4(0) 04001760 lui r1, 0, $8000 04001764 srl r2, r28, 8 04001768 srav r1, r1, r28 0400176C srlv r1, r1, r2 04001770 nor r2, r1, 0 04001774 and r4, r4, r2 04001778 or r4, r4, r27 0400177C sw r4, $08f4(0) 04001780 sw r3, $0c20(r23) 04001784 sw r4, $0c24(r23) 04001788 j $04001634 0400178C addi r23, r23, $0008 UPDATEMASK: 04001790 addi r3, 0, $00ff 04001794 sw r28, $08f8(0) //Mask0 04001798 sb r3, $08f8(0) 0400179C j $04001634 040017A0 sw r27, $08fc(0) //Mask1 RDPSETOTHERMODE 040017A4 lw r3, $08f8(0) //Mask0 040017A8 lw r4, $08f0(0) //OtherMode0 040017AC and r28, r28, r3 040017B0 nor r3, r3, 0 040017B4 and r4, r4, r3 040017B8 or r28, r28, r4 040017BC lw r3, $08fc(0) //Mask1 040017C0 lw r4, $08f4(0) //OtherMode1 040017C4 and r27, r27, r3 040017C8 nor r3, r3, 0 040017CC and r4, r4, r3 040017D0 or r27, r27, r4 040017D4 sw r28, $08f0(0) 040017D8 sw r27, $08f4(0) RDPCMD: 040017DC sw r28, $0c20(r23) 040017E0 sw r27, $0c24(r23) 040017E4 j $04001634 040017E8 addi r23, r23, $0008 TRIANGLECOMMAND: 040017EC j $04001634 040017F0 sh r27, $0c1e(0) ZLIST_OBJ: 040017F4 add r19, 0, r26 040017F8 lw r15, $0ee0(0) 040017FC add r20, 0, r28 04001800 add r18, 0, r27 04001804 j LoadObj 04001808 vadd v30, v0, v31[66666666] 0400180C nop 04001810 bne r23, 0, $04001820 04001814 nop 04001818 j LoadObj 0400181C nop 04001820 jal FlushRDP 04001824 nop 04001828 lb r4, $0940(0) 0400182C blez r4, LoadObj 04001830 addi r3, 0, $1828 04001834 addi r26, 0, $116c 04001838 jr r26 0400183C sh r3, $0f00(0) LoadObj: 04001840 and r2, r15, r20 04001844 beq r2, 0, $040018CC 04001848 addi r3, 0, $0e30 0400184C jal DMARead 04001850 addi r4, 0, $004f 04001854 andi r20, r20, $0007 04001858 sll r20, r20, 1 0400185C mfc0 r2, SP_STATUS 04001860 andi r2, r2, $0080 04001864 beq r2, 0, $04001878 04001868 ori r1, 0, $0200 0400186C mtc0 r1, SP_STATUS 04001870 addi r2, 0, $0001 04001874 sb r2, $0940(0) 04001878 jal DMAwait 0400187C addi r13, 0, $000c 04001880 lhu r6, $0ee4(r20) 04001884 addi r14, 0, $180c 04001888 beq r6, r14, $040018B8 0400188C add r21, 0, 0 04001890 add r14, 0, 0 04001894 beq r13, r14, $040018B8 04001898 lw r24, $0e34(r14) 0400189C lw r12, $0ef4(r14) 040018A0 beq r24, 0, $04001894 040018A4 addi r14, r14, $0004 040018A8 beq r24, r12, $04001894 040018AC addi r26, 0, $1894 040018B0 j $04001618 040018B4 sw r24, $0ef0(r14) 040018B8 addi r3, 0, $0e30 040018BC lh r6, $0ee4(r20) 040018C0 lw r20, $0e30(0) 040018C4 jr r6 040018C8 addi r31, 0, $1820 040018CC add r20, 0, r18 040018D0 bne r18, 0, $04001840 040018D4 add r18, 0, 0 040018D8 add r26, r19, 0 040018DC jr r26 040018E0 nop /*Triangle génération*/ 040018E4 lqv v1[0], $0020(r3) 040018E8 lqv v2[0], $0030(r3) 040018EC jal $04001904 040018F0 lqv v3[0], $0040(r3) 040018F4 addi r31, 0, $1820 040018F8 lqv v1[0], $0010(r3) 040018FC lqv v2[0], $0020(r3) 04001900 lqv v3[0], $0030(r3) 04001904 addi r2, r23, $0c20 04001908 vadd v4, v0, v1[11111111] 0400190C vmov v24[7], v1[6] 04001910 vsubc v26, v1, v2[77777777] 04001914 vge v24, v24, v2[66666666] 04001918 vmrg v25, v1, v2[77777777] 0400191C vlt v9, v4, v2[11111111] 04001920 vge v8, v4, v2[11111111] 04001924 vmrg v6, v2, v1 04001928 vmrg v5, v1, v2 0400192C vsubc v26, v25, v3[77777777] 04001930 vge v24, v24, v3[66666666] 04001934 vmrg v25, v25, v3[77777777] 04001938 vge v10, v9, v3[11111111] 0400193C vmrg v7, v6, v3 04001940 vmrg v1, v3, v6 04001944 vge v10, v8, v10 04001948 vmrg v2, v7, v5 0400194C vmrg v3, v5, v7 04001950 vsub v5, v2, v1 04001954 vsub v6, v3, v1 04001958 vsub v8, v3, v2 0400195C vsub v28, v1, v2 04001960 vsub v7, v1, v3 04001964 vmov v8[2], v5[0] 04001968 vmov v8[3], v6[0] 0400196C vrcp v9[2], v5[1] 04001970 vrcph v10[2], v0[0] 04001974 vrcp v9[3], v6[1] 04001978 vrcph v10[3], v0[0] 0400197C vrcp v9[0], v8[1] 04001980 vrcph v10[0], v0[0] 04001984 vmudl v4, v9, v31[55555555] 04001988 vmadm v10, v10, v31[55555555] 0400198C vmadn v9, v0, v0[00000000] 04001990 vmudm v12, v8, v31[66666666] 04001994 vmadn v11, v0, v0[00000000] 04001998 vmudm v4, v10, v11 0400199C vmadl v4, v9, v11 040019A0 vmadn v11, v9, v12 040019A4 vmadh v12, v10, v12 040019A8 vmudn v14, v1, v31[66666666] 040019AC vsubc v14, v0, v14 040019B0 vsub v13, v0, v0 040019B4 vmudn v4, v30, v1[00000000] 040019B8 vmadl v4, v11, v14[11111111] 040019BC vmadm v4, v12, v14[11111111] 040019C0 vmadn v16, v11, v13[11111111] 040019C4 vmadh v15, v12, v13[11111111] 040019C8 ssv v1[2], $0006(r2) 040019CC ssv v2[2], $0004(r2) 040019D0 ssv v3[2], $0002(r2) 040019D4 mfc2 r1, v2[0] 040019D8 sll r1, r1, 14 040019DC sw r1, $0008(r2) 040019E0 ssv v15[6], $0010(r2) 040019E4 ssv v16[6], $0012(r2) 040019E8 ssv v15[4], $0018(r2) 040019EC ssv v16[4], $001a(r2) 040019F0 ssv v12[0], $000c(r2) 040019F4 ssv v12[6], $0014(r2) 040019F8 ssv v12[4], $001c(r2) 040019FC ssv v11[0], $000e(r2) 04001A00 ssv v11[6], $0016(r2) 04001A04 ssv v11[4], $001e(r2) 04001A08 sqv v1[0], $0050(r3) 04001A0C sqv v2[0], $0060(r3) 04001A10 sqv v3[0], $0070(r3) 04001A14 llv v22[0], $005c(r3) 04001A18 llv v22[8], $006c(r3) 04001A1C llv v22[12], $007c(r3) 04001A20 vadd v23, v0, v22[11335577] 04001A24 vor v19, v0, v31[11111111] 04001A28 vor v13, v0, v31[11111111] 04001A2C llv v19[0], $0058(r3) 04001A30 llv v19[8], $0068(r3) 04001A34 llv v13[8], $0078(r3) 04001A38 vrcph v4[0], v24[7] 04001A3C vrcpl v25[0], v25[7] 04001A40 vrcph v24[0], v0[0] 04001A44 vmudm v4, v22, v25[00000000] 04001A48 vmadl v4, v23, v25[00000000] 04001A4C vmadn v23, v23, v24[00000000] 04001A50 vmadh v22, v22, v24[00000000] 04001A54 vmudm v4, v19, v23[00004444] 04001A58 vmadh v19, v19, v22[00004444] 04001A5C vmadn v20, v0, v0[00000000] 04001A60 vmudm v4, v13, v23[66666666] 04001A64 vmadh v13, v13, v22[66666666] 04001A68 vmadn v21, v0, v0[00000000] 04001A6C sqv v19[0], $0090(r3) 04001A70 sqv v20[0], $00a0(r3) 04001A74 vaddc v22, v0, v0 04001A78 sdv v13[8], $0080(r3) 04001A7C sdv v21[8], $0088(r3) 04001A80 addiu r1, r3, $0004 04001A84 luv v16[0], $0050(r1) 04001A88 luv v17[0], $0060(r1) 04001A8C luv v18[0], $0070(r1) 04001A90 vmudm v16, v16, v31[33333333] 04001A94 vadd v22, v0, v31[44444444] 04001A98 vmudm v17, v17, v31[33333333] 04001A9C vadd v23, v0, v31[44444444] 04001AA0 vmudm v18, v18, v31[33333333] 04001AA4 vadd v15, v0, v31[44444444] 04001AA8 ldv v16[8], $0090(r3) 04001AAC ldv v17[8], $0098(r3) 04001AB0 ldv v18[8], $0080(r3) 04001AB4 ldv v22[8], $00a0(r3) 04001AB8 ldv v23[8], $00a8(r3) 04001ABC ldv v15[8], $0088(r3) 04001AC0 vmudh v4, v5, v6[00000000] 04001AC4 vmadh v4, v7, v5[00000000] 04001AC8 vsaw v13, ACCUM_H 04001ACC vsaw v19, ACCUM_M 04001AD0 vrcph v4[0], v13[1] 04001AD4 vrcpl v21[0], v19[1] 04001AD8 vrcph v20[0], v0[0] 04001ADC vmudn v21, v21, v31[55555555] 04001AE0 vmadh v20, v20, v31[55555555] 04001AE4 vsubc v25, v15, v22 04001AE8 vsub v24, v18, v16 04001AEC vsubc v27, v23, v22 04001AF0 vsub v26, v17, v16 04001AF4 vmudn v4, v25, v5[11111111] 04001AF8 vmadh v4, v24, v5[11111111] 04001AFC vmadn v4, v27, v7[11111111] 04001B00 vmadh v4, v26, v7[11111111] 04001B04 vsaw v18, ACCUM_M 04001B08 vsaw v17, ACCUM_H 04001B0C vmudl v4, v18, v21[00000000] 04001B10 vmadm v4, v17, v21[00000000] 04001B14 vmadn v18, v18, v20[00000000] 04001B18 vmadh v17, v17, v20[00000000] 04001B1C sdv v18[0], $0038(r2) 04001B20 sdv v17[0], $0028(r2) 04001B24 sdv v18[8], $0078(r2) 04001B28 sdv v17[8], $0068(r2) 04001B2C vmudn v4, v27, v6[00000000] 04001B30 vmadh v4, v26, v6[00000000] 04001B34 vmadn v4, v25, v28[00000000] 04001B38 vmadh v4, v24, v28[00000000] 04001B3C vsaw v23, ACCUM_M 04001B40 vsaw v15, ACCUM_H 04001B44 vmudl v4, v23, v21[00000000] 04001B48 vmadm v4, v15, v21[00000000] 04001B4C vmadn v23, v23, v20[00000000] 04001B50 vmadh v15, v15, v20[00000000] 04001B54 sdv v23[0], $0058(r2) 04001B58 sdv v15[0], $0048(r2) 04001B5C sdv v23[8], $0098(r2) 04001B60 sdv v15[8], $0088(r2) 04001B64 vmudl v4, v25, v9[33333333] 04001B68 vmadm v4, v24, v9[33333333] 04001B6C vmadn v29, v25, v10[33333333] 04001B70 vmadh v28, v24, v10[33333333] 04001B74 sdv v29[0], $0050(r2) 04001B78 sdv v28[0], $0040(r2) 04001B7C sdv v29[8], $0090(r2) 04001B80 sdv v28[8], $0080(r2) 04001B84 lh r8, $0c1e(0) //TRIANGLECOMMAND 04001B88 mfc2 r1, v13[2] 04001B8C andi r1, r1, $0080 04001B90 or r1, r1, r8 04001B94 sh r1, $0000(r2) 04001B98 vsub v14, v0, v14 04001B9C vmudl v4, v29, v14[11111111] 04001BA0 vmadm v28, v28, v14[11111111] 04001BA4 vmadn v29, v29, v0[00000000] 04001BA8 vsubc v22, v22, v29 04001BAC vsub v16, v16, v28 04001BB0 sdv v16[0], $0020(r2) 04001BB4 sdv v22[0], $0030(r2) 04001BB8 sdv v16[8], $0060(r2) 04001BBC sdv v22[8], $0070(r2) 04001BC0 addi r23, r23, $00a0 04001BC4 jr r31 04001BC8 nop /*End ZLIST_OBJ*/ /*Audio Command?*/ TODO_1BCC: 04001BCC lw r6, $0000(r28) //gfx0 04001BD0 addi r3, 0, $0000 //DMEM address 04001BD4 add r2, 0, r27 //RDRAM address (gfx1) 04001BD8 addi r4, 0, $0007 //length 04001BDC sw r6, $0000(0) 04001BE0 jal DMAProc 04001BE4 addi r1, 0, $0001 //DMA write flag 04001BE8 j DMAwait 04001BEC add r31, 0, r26 TODO_1BF0: 04001BF0 srl r6, r27, 24 04001BF4 srl r5, r28, 16 04001BF8 andi r5, r5, $00FF 04001BFC mtc2 r28, v2[0] 04001C00 mtc2 r5, v3[0] 04001C04 mtc2 r27, v2[4] 04001C08 srl r27, r27, 16 04001C0C andi r27, r27, $00FF 04001C10 mtc2 r27, v3[4] 04001C14 addiu r1, 0, $0920 //???? 04001C18 vadd v5, v0, v0 04001C1C lqv v6[0], $0000(r1) 04001C20 vmudm v4, v6, v2[00000000] 04001C24 vmadh v6, v6, v3[00000000] 04001C28 vmadn v5, v5, v3[00000000] 04001C2C addi r1, 0, $0904 //Written by Movemem cmd 04001C30 ldv v11[0], $0000(r1) 04001C34 ldv v11[4], $0000(r1) 04001C38 ldv v11[8], $0000(r1) 04001C3C ldv v11[12], $0000(r1) 04001C40 lw r11, $0010(0) //Written by Movemem cmd (0xc20) 04001C44 vsubc v7, v5, v2[00000000] 04001C48 vsub v8, v6, v3[00000000] 04001C4C vaddc v7, v7, v2[11111111] 04001C50 vaddc v8, v8, v3[11111111] LABEL1: 04001C54 mfc2 r7, v8[0] 04001C58 mfc2 r8, v8[8] 04001C5C mfc2 r9, v8[16] 04001C60 mfc2 r10, v8[24] 04001C64 add r7, r7, r7 04001C68 add r8, r8, r8 04001C6C add r9, r9, r9 04001C70 add r10, r10, r10 04001C74 lsv v9[0], $0030(r7) 04001C78 lsv v10[0], $0032(r7) 04001C7C lsv v9[4], $0030(r8) 04001C80 lsv v10[4], $0032(r8) 04001C84 lsv v9[8], $0030(r9) 04001C88 lsv v10[8], $0032(r9) 04001C8C lsv v9[12], $0030(r10) 04001C90 lsv v10[12], $0032(r10) 04001C94 vadd v9, v0, v9[00224466] 04001C98 vadd v10, v0, v10[00224466] 04001C9C lqv v13[0], $0000(r11) 04001CA0 vsub v12, v10, v9 04001CA4 vmudm v12, v12, v7 04001CA8 vmadh v9, v9, v31[00000000] 04001CAC addi r6, r6, -$0004 04001CB0 vmudn v9, v11, v9 04001CB4 vmadh v13, v13, v31[00000000] 04001CB8 sqv v13[0], $0000(r11) 04001CBC vaddc v7, v5, v7[77777777] 04001CC0 vadd v8, v6, v8[77777777] 04001CC4 bgtz r6, LABEL1 04001CC8 addi r11, r11, $0010 04001CCC jr r26 04001CD0 nop CLEARBUFFER: 04001CD4 addi r28, 0, $0200 04001CD8 addi r27, 0, $0c20 04001CDC addi r28, r28, -$0004 04001CE0 sw 0, $0000(r27) 04001CE4 bne r28, 0, $04001CDC 04001CE8 addi r27, r27, $0004 04001CEC jr r26 TODO_1CF0: 04001CF0 add r2, 0, r28 //RDRAM address 04001CF4 addi r3, 0, $0630 //DMEM address 04001CF8 jal DMARead 04001CFC addi r4, 0, $007f //length 04001D00 jal DMAwait 04001D04 add r2, 0, r27 //RDRAM address 04001D08 addi r3, 0, $0000 //DMEM address 04001D0C jal DMARead 04001D10 addi r4, 0, $0007 //length 04001D14 add r31, 0, r26 04001D18 j DMAwait 04001D1C sw r27, $0008(0) TODO_1D20: 04001D20 add r2, 0, r27 //RDRAM address 04001D24 addi r3, 0, $0430 //DMEM address 04001D28 andi r4, r28, $0FFF 04001D2C jal DMARead 04001D30 addi r4, r4, $000f //length 04001D34 andi r4, r28, $F000 04001D38 srl r4, r4, 12 04001D3C andi r28, r28, $0FFF 04001D40 addi r8, 0, $0630 04001D44 addi r6, r4, $0430 04001D48 jal DMAwait 04001D4C addi r7, 0, $0030 04001D50 lbu r9, $0000(r6) 04001D54 andi r10, r9, $000F 04001D58 sll r10, r10, 5 04001D5C add r10, r10, r8 04001D60 srl r9, r9, 4 04001D64 addi r11, 0, $0001 04001D68 sllv r9, r11, r9 04001D6C mtc2 r9, v11[0] 04001D70 addi r11, 0, $0020 04001D74 mtc2 r11, v11[4] 04001D78 lqv v12[0], $0000(r10) 04001D7C lqv v13[0], $0010(r10) 04001D80 vadd v14, v0, v0[00000000] 04001D84 lqv v14[2], $0010(r10) 04001D88 vadd v15, v0, v0[00000000] 04001D8C lqv v15[4], $0010(r10) 04001D90 vadd v16, v0, v0[00000000] 04001D94 lqv v16[6], $0010(r10) 04001D98 vadd v17, v0, v0[00000000] 04001D9C lqv v17[8], $0010(r10) 04001DA0 vadd v18, v0, v0[00000000] 04001DA4 lqv v18[10], $0010(r10) 04001DA8 vadd v19, v0, v0[00000000] 04001DAC lqv v19[12], $0010(r10) 04001DB0 vadd v20, v0, v0[00000000] 04001DB4 lqv v20[14], $0010(r10) 04001DB8 vadd v21, v0, v0[00000000] 04001DBC addi r11, 0, $0800 04001DC0 mtc2 r11, v21[28] 04001DC4 vmov v20[6], v21[7] 04001DC8 lb r11, $0001(r6) 04001DCC vmov v19[5], v21[7] 04001DD0 lb r12, $0002(r6) 04001DD4 vmov v18[4], v21[7] 04001DD8 lb r13, $0003(r6) 04001DDC vmov v17[3], v21[7] 04001DE0 lb r14, $0004(r6) 04001DE4 vmov v16[2], v21[7] 04001DE8 sll r15, r11, 28 04001DEC vmov v15[1], v21[7] 04001DF0 sll r3, r12, 28 04001DF4 vmov v14[0], v21[7] 04001DF8 sll r4, r13, 28 04001DFC sll r5, r14, 28 04001E00 sra r15, r15, 28 04001E04 sra r3, r3, 28 04001E08 sra r4, r4, 28 04001E0C sra r5, r5, 28 04001E10 sra r11, r11, 4 04001E14 sra r12, r12, 4 04001E18 sra r13, r13, 4 04001E1C sra r14, r14, 4 04001E20 mtc2 r11, v3[0] 04001E24 mtc2 r15, v4[0] 04001E28 vadd v3, v0, v3[00000000] 04001E2C mtc2 r12, v5[0] 04001E30 vadd v4, v0, v4[00000000] 04001E34 mtc2 r3, v6[0] 04001E38 vadd v5, v0, v5[00000000] 04001E3C mtc2 r13, v7[0] 04001E40 vadd v6, v0, v6[00000000] 04001E44 mtc2 r4, v8[0] 04001E48 vadd v7, v0, v7[00000000] 04001E4C mtc2 r14, v9[0] 04001E50 vadd v8, v0, v8[00000000] 04001E54 mtc2 r5, v10[0] 04001E58 lsv v1[0], $0000(0) 04001E5C vadd v9, v0, v9[00000000] 04001E60 lsv v2[0], $0002(0) 04001E64 vadd v10, v0, v10[00000000] 04001E68 lb r11, $0005(r6) 04001E6C vadd v1, v0, v1[00000000] 04001E70 lb r12, $0006(r6) 04001E74 vadd v2, v0, v2[00000000] 04001E78 lb r13, $0007(r6) 04001E7C addi r1, 0, $0001 04001E80 vmudh v3, v3, v14 04001E84 lb r14, $0008(r6) 04001E88 vmadh v4, v4, v15 04001E8C sll r15, r11, 28 04001E90 vmadh v5, v5, v16 04001E94 sll r3, r12, 28 04001E98 vmadh v6, v6, v17 04001E9C sll r4, r13, 28 04001EA0 vmadh v7, v7, v18 04001EA4 sll r5, r14, 28 04001EA8 vmadh v8, v8, v19 04001EAC sra r15, r15, 28 04001EB0 vmadh v9, v9, v20 04001EB4 sra r3, r3, 28 04001EB8 vmadh v9, v10, v21 04001EBC sra r4, r4, 28 04001EC0 vsaw v9, ACCUM_M 04001EC4 vsaw v10, ACCUM_H 04001EC8 sra r5, r5, 28 04001ECC vmudn v9, v9, v11[00000000] 04001ED0 sra r11, r11, 4 04001ED4 vmadh v10, v10, v11[00000000] 04001ED8 sra r12, r12, 4 04001EDC vmudh v1, v1, v12 04001EE0 sra r13, r13, 4 04001EE4 vmadh v7, v2, v13 04001EE8 sra r14, r14, 4 04001EEC vsaw v7, ACCUM_M 04001EF0 addi r7, r7, $0010 04001EF4 vsaw v8, ACCUM_H 04001EF8 mtc2 r11, v3[0] 04001EFC vmudh v8, v8, v11[11111111] 04001F00 mtc2 r15, v4[0] 04001F04 vmadn v7, v7, v11[11111111] 04001F08 mtc2 r12, v5[0] 04001F0C vmadn v9, v9, v11[11111111] 04001F10 mtc2 r3, v6[0] 04001F14 vmadh v10, v10, v11[11111111] 04001F18 mtc2 r13, v7[0] 04001F1C beq r1, 0, $04001F6C 04001F20 sqv v10[0], -$0010(r7) 04001F24 vadd v3, v0, v3[00000000] 04001F28 mtc2 r4, v8[0] 04001F2C vadd v4, v0, v4[00000000] 04001F30 mtc2 r14, v9[0] 04001F34 vadd v5, v0, v5[00000000] 04001F38 sqv v10[0], $0000(r7) 04001F3C vadd v1, v0, v10[66666666] 04001F40 addi r28, r28, -$0009 04001F44 vadd v2, v0, v10[77777777] 04001F48 mtc2 r5, v10[0] 04001F4C vadd v6, v0, v6[00000000] 04001F50 vadd v7, v0, v7[00000000] 04001F54 addi r1, r1, -$0001 04001F58 vadd v8, v0, v8[00000000] 04001F5C addi r6, r6, $0009 04001F60 vadd v9, v0, v9[00000000] 04001F64 j $04001E80 04001F68 vadd v10, v0, v10[00000000] 04001F6C bne r28, 0, $04001D50 04001F70 slv v10[12], $0000(0) 04001F74 jr r26 04001F78 nop /*--------------DMA-------------*/ DMAwait: 04001F7C mfc0 r1, SP_DMA_BUSY 04001F80 bne r1, 0, $04001F80 04001F84 mfc0 r1, SP_DMA_BUSY 04001F88 jr r31 DMARead: 04001F8C add r1, 0, 0 DMAProc: 04001F90 blez r4, $04001F88 04001F94 mfc0 r5, SP_DMA_FULL 04001F98 bne r5, 0, DMAProc 04001F9C nop 04001FA0 mtc0 r3, SP_MEM_ADDR 04001FA4 bne r1, 0, 04001FB4 //(r1 == 0) ? DMARead : DMAWrite 04001FA8 mtc0 r2, SP_DRAM_ADDR 04001FAC jr r31 04001FB0 mtc0 r4, SP_RD_LEN 04001FB4 jr r31 04001FB8 mtc0 r4, SP_WR_LEN WAITSIGNAL: 04001FBC lui r1, 0, $0001 04001FC0 ori r1, r1, $2810 04001FC4 mtc0 r1, SP_STATUS 04001FC8 ori r28, 0, $0400 04001FCC andi r28, r28, $0400 //SP_STATUS_SIG3? 04001FD0 bne r28, 0, $04001FCC 04001FD4 mfc0 r28, SP_STATUS 04001FD8 jr r26 04001FDC nop