update disasm with task pointers

This commit is contained in:
Connor Olding 2018-08-21 00:03:25 +02:00
parent 9ef8694c78
commit 704cd0406c

View file

@ -95,6 +95,26 @@ constant SP_SET_SG6($00400000) // Set Signal 6
constant SP_CLR_SG7($00800000) // Clear Signal 7 constant SP_CLR_SG7($00800000) // Clear Signal 7
constant SP_SET_SG7($01000000) // Set Signal 7 constant SP_SET_SG7($01000000) // Set Signal 7
// Task Struct:
constant TASK_START(0xFC0)
// Fields:
constant TASK_TYPE(0xFC0)
constant TASK_FLAGS(0xFC4)
constant TASK_UCODE_BOOT(0xFC8)
constant TASK_UCODE_BOOT_SIZE(0xFCC)
constant TASK_UCODE(0xFD0)
constant TASK_UCODE_SIZE(0xFD4)
constant TASK_UCODE_DATA(0xFD8)
constant TASK_UCODE_DATA_SIZE(0xFDC)
constant TASK_DRAM_STACK(0xFE0)
constant TASK_DRAM_STACK_SIZE(0xFE4)
constant TASK_OUTPUT_BUFF(0xFE8)
constant TASK_OUTPUT_BUFF_SIZE(0xFEC)
constant TASK_DATA_PTR(0xFF0)
constant TASK_DATA_SIZE(0xFF4)
constant TASK_YIELD_DATA_PTR(0xFF8)
constant TASK_YIELD_DATA_SIZE(0xFFC)
output "bin/F3DZEX2.boot.bin", create output "bin/F3DZEX2.boot.bin", create
fill 0xD0 fill 0xD0
@ -102,10 +122,10 @@ origin 0x00000000
base 0x04001000 base 0x04001000
j label_1054 j label_1054
addi at, r0, 0x0FC0 // Task data, tells us where the main program is addi at, r0, TASK_START
label_1008: label_1008:
lw v0, 0x10(at) // TASK_UCODE lw v0, TASK_UCODE-TASK_START(at)
addi v1, r0, 0x0F7F // copy 0xF80 bytes addi v1, r0, 0x0F7F // copy 0xF80 bytes
addi a3, r0, 0x1080 // to 0xA4001080 addi a3, r0, 0x1080 // to 0xA4001080
mtc0 a3, SP_COP_MEM_ADDR mtc0 a3, SP_COP_MEM_ADDR
@ -137,7 +157,7 @@ label_1040:
nop nop
label_1054: label_1054:
lw v0, 0x04(at) // load TASK_FLAGS lw v0, TASK_FLAGS-TASK_START(at)
andi v0, v0, 2 // check flag 1 andi v0, v0, 2 // check flag 1
beqz v0,+ beqz v0,+
nop nop
@ -150,8 +170,8 @@ label_1054:
bgtz v0,func_103C bgtz v0,func_103C
nop nop
+ +
lw v0, 0x18(at) // load TASK_UCODE_DATA lw v0, TASK_UCODE_DATA-TASK_START(at)
lw v1, 0x1C(at) // load TASK_UCODE_DATA_SIZE lw v1, TASK_UCODE_DATA_SIZE-TASK_START(at)
subi v1, v1, 1 // subtract 1 for DMA quirk subi v1, v1, 1 // subtract 1 for DMA quirk
- -
mfc0 fp, SP_COP_DMA_FULL mfc0 fp, SP_COP_DMA_FULL
@ -186,15 +206,15 @@ func_1088:
vadd vec1,vec0,vec0 // multiply vector 0 by 2 vadd vec1,vec0,vec0 // multiply vector 0 by 2
addi s6, r0, 0xD00 addi s6, r0, 0xD00
vsub vec1,vec0,vec31[e8] vsub vec1,vec0,vec31[e8]
lw t3, 0xF0(r0) lw t3, 0x0F0(r0) // TASK_DRAM_STACK gets written here?
lw t4, 0xFC4(r0) lw t4, TASK_FLAGS(r0)
addi at, r0, SP_CLR_SG1 | SP_CLR_SG2 addi at, r0, SP_CLR_SG1 | SP_CLR_SG2
beqz t3,+ beqz t3,+
mtc0 at, SP_COP_STATUS mtc0 at, SP_COP_STATUS
andi t4, t4, 1 andi t4, t4, 1 // check if flag 0 is set
beqz t4,label_1130 beqz t4,label_1130
sw r0, 0xFC4(r0) sw r0, TASK_FLAGS(r0)
j func_1168 & 0x1FFF j func_1168 & 0x1FFF
lw k0, 0xBF8(r0) lw k0, 0xBF8(r0)
@ -205,12 +225,12 @@ func_1088:
bnez t3,+ bnez t3,+
mfc0 v0, SP_COP_COMMAND_END mfc0 v0, SP_COP_COMMAND_END
lw v1, 0xFE8(r0) lw v1, TASK_OUTPUT_BUFF(r0)
sub t3, v1, v0 sub t3, v1, v0
bgtz t3,+ bgtz t3,+
mfc0 at, SP_COP_COMMAND_CURRENT mfc0 at, SP_COP_COMMAND_CURRENT
lw a0, 0xFEC(r0) lw a0, TASK_OUTPUT_BUFF_SIZE(r0)
beqz at,+ beqz at,+
sub t3,at,a0 sub t3,at,a0
@ -227,18 +247,18 @@ func_1088:
addi t3, r0, 1 addi t3, r0, 1
mtc0 t3, SP_COP_RDP_STATUS mtc0 t3, SP_COP_RDP_STATUS
lw v0, 0xFEC(r0) lw v0, TASK_OUTPUT_BUFF_SIZE(r0)
mtc0 v0, SP_COP_COMMAND_START mtc0 v0, SP_COP_COMMAND_START
mtc0 v0, SP_COP_COMMAND_END mtc0 v0, SP_COP_COMMAND_END
+ +
sw v0, 0xF0(r0) sw v0, 0x0F0(r0)
lw t3, 0xF4(r0) lw t3, 0x0F4(r0)
bnez t3, label_1130 bnez t3, label_1130
lw t3, 0xFE0(r0) lw t3, TASK_DRAM_STACK(r0)
sw t3, 0xF4(r0) sw t3, 0x0F4(r0)
label_1130: label_1130:
lw at, 0xFD0(r0) lw at, TASK_UCODE(r0)
lw v0, 0x2E0(r0) lw v0, 0x2E0(r0)
lw v1, 0x2E8(r0) lw v1, 0x2E8(r0)
lw a0, 0x410(r0) lw a0, 0x410(r0)
@ -251,7 +271,7 @@ label_1130:
add a1, a1, at add a1, a1, at
sw a0, 0x410(r0) sw a0, 0x410(r0)
sw a1, 0x418(r0) sw a1, 0x418(r0)
lw k0, 0xFF0(r0) lw k0, TASK_DATA_PTR(r0)
func_1168: func_1168:
addi t3, r0, 0x2E8 addi t3, r0, 0x2E8
nop nop
@ -259,11 +279,11 @@ func_1168:
ori t4, ra, 0 ori t4, ra, 0
- -
addi s3, r0, 0xA7 addi s3, r0, 0xA7 // DMA length: 0xA8
ori t8, k0, 0 ori t8, k0, 0
jal func_1FD8 & 0x1FFF jal func_1FD8 & 0x1FFF // load in the DList from TASK_DATA_PTR?
addiu s4, r0, 0x0920 addiu s4, r0, 0x0920 // DMA destination: DMEM+$920
addiu k0, k0, 0x00A8 addiu k0, k0, 0x00A8
addi k1, r0, 0xFF58 addi k1, r0, 0xFF58
@ -290,22 +310,22 @@ func_1194:
j func_1FD8 & 0x1FFF j func_1FD8 & 0x1FFF
addi ra, r0, 0x1190 addi ra, r0, 0x1190
lw t3, 0x01EC(r0) lw t3, 0x1EC(r0)
and t3, t3, t9 and t3, t3, t9
or t3, t3, t8 or t3, t3, t8
j func_1194 & 0x1FFF j func_1194 & 0x1FFF
sw t3, 0x01EC(r0) sw t3, 0x1EC(r0)
label_11EC: label_11EC:
lbu at, 0x00DE(r0) lbu at, 0x0DE(r0)
beqz at, label_1FAC beqz at, label_1FAC
addi at, at, 0xFFFC addi at, at, 0xFFFC
j label_1020 & 0x1FFF j label_1020 & 0x1FFF
lw k0, 0x0138(at) lw k0, 0x0138(at)
ldv vec29[e0], 0xD0(r0) ldv vec29[e0], 0x0D0(r0)
lw t9, 0x00D8(r0) lw t9, 0x0D8(r0)
addi s7, s7, SP_COP_COMMAND_START addi s7, s7, SP_COP_COMMAND_START
sdv vec29[e0], 0x3F8(s7) sdv vec29[e0], 0x3F8(s7)
func_1210: func_1210:
@ -323,13 +343,13 @@ func_1224:
srl t8, t8, 8 srl t8, t8, 8
jr ra jr ra
add t8, t8, t3 add t8, t8, t3
sw t9, 0x00C8(r0) sw t9, 0x0C8(r0)
j func_1210 & 0x1FFF j func_1210 & 0x1FFF
sw t8, 0x00CC(r0) sw t8, 0x0CC(r0)
sw t9, 0x00C0(r0) sw t9, 0x0C0(r0)
j func_1210 & 0x1FFF j func_1210 & 0x1FFF
sw t8, 0x00C4(r0) sw t8, 0x0C4(r0)
label_1258: label_1258:
addi ra, r0, 0x1194 addi ra, r0, 0x1194
@ -339,10 +359,10 @@ label_125C:
- -
mfc0 t4, SP_COP_DMA_BUSY mfc0 t4, SP_COP_DMA_BUSY
lw t8, 0x00F0(r0) lw t8, 0x0F0(r0)
addiu s3, t3, 0x0158 addiu s3, t3, 0x0158
bnez t4,- bnez t4,-
lw t4, 0x0FEC(r0) lw t4, TASK_OUTPUT_BUFF_SIZE(r0)
mtc0 t8, SP_COP_COMMAND_END mtc0 t8, SP_COP_COMMAND_END
add t3, t8, s3 add t3, t8, s3
@ -353,7 +373,7 @@ label_125C:
andi t3, t3, 0x0400 andi t3, t3, 0x0400
bnez t3,- bnez t3,-
lw t8, 0x0FE8(r0) lw t8, TASK_OUTPUT_BUFF(r0)
- -
mfc0 t3, SP_COP_COMMAND_CURRENT mfc0 t3, SP_COP_COMMAND_CURRENT
beq t3, t8,- beq t3, t8,-
@ -371,7 +391,7 @@ label_125C:
+ +
add t3, t8, s3 add t3, t8, s3
sw t3, 0x00F0(r0) sw t3, 0x0F0(r0)
addi s3, s3, 0xFFFF addi s3, s3, 0xFFFF
addi s4, s6, 0xDEA8 addi s4, s6, 0xDEA8
xori s6, s6, 0x0208 xori s6, s6, 0x0208
@ -390,7 +410,7 @@ label_12E4:
sh v0, 0x03CC(s2) sh v0, 0x03CC(s2)
sh v1, 0x03CE(s2) sh v1, 0x03CE(s2)
sh r0, 0x03D0(s2) sh r0, 0x03D0(s2)
lw sp, 0x03CC(r0) lw sp, 0x3CC(r0)
label_1308: label_1308:
lw t1, 0x03F8(a1) lw t1, 0x03F8(a1)
lw s0, 0x0024(v1) lw s0, 0x0024(v1)
@ -517,7 +537,7 @@ label_14A8:
lhu v1, 0x03CE(s5) lhu v1, 0x03CE(s5)
bnez a1, label_1308 bnez a1, label_1308
addi a1, a1, 0xFFFC addi a1, a1, 0xFFFC
sw r0, 0x03CC(r0) sw r0, 0x3CC(r0)
- -
lhu at, 0x03CA(s2) lhu at, 0x03CA(s2)
@ -533,7 +553,7 @@ label_14A8:
+ +
jr fp jr fp
sw sp, 0x03CC(r0) sw sp, 0x3CC(r0)
nops(0x4001780) nops(0x4001780)
@ -545,12 +565,12 @@ label_14A8:
jal func_1FD8 & 0x1FFF jal func_1FD8 & 0x1FFF
addi s3, at, 0xFFFF addi s3, at, 0xFFFF
lhu a1, 0x01EC(r0) lhu a1, 0x1EC(r0)
srl at, at, 3 srl at, at, 3
sub t7, t9, at sub t7, t9, at
lhu t7, 0x0380(t7) lhu t7, 0x0380(t7)
ori t6, s4, 0x0 ori t6, s4, 0x0
lbu t0, 0x01D9(r0) lbu t0, 0x1D9(r0)
andi a2, a1, 0x2 andi a2, a1, 0x2
bnez a2, label_12D8 bnez a2, label_12D8
andi a3, a1, 0x1 andi a3, a1, 0x1
@ -558,7 +578,7 @@ label_14A8:
bnez t0,+ bnez t0,+
sll a3, a3, 3 sll a3, a3, 3
sb t9, 0x01D9(r0) sb t9, 0x1D9(r0)
addi s5, r0, 0x0040 addi s5, r0, 0x0040
addi s4, r0, 0x0 addi s4, r0, 0x0
jal func_1088 & 0x1FFF jal func_1088 & 0x1FFF
@ -767,10 +787,10 @@ func_1A7C:
vlt vec13,vec2,vec4[e9] vlt vec13,vec2,vec4[e9]
vmrg vec14,vec6,vec4[e0] vmrg vec14,vec6,vec4[e0]
bnez t3, label_1FD4 bnez t3, label_1FD4
lbu t3, 0x01EE(r0) lbu t3, 0x1EE(r0)
vmudh vec29,vec10,vec12[e9] vmudh vec29,vec10,vec12[e9]
lw t4, 0x03CC(r0) lw t4, 0x3CC(r0)
vmadh vec29,vec12,vec11[e9] vmadh vec29,vec12,vec11[e9]
or a1, a1, a2 or a1, a1, a2
vge vec2,vec2,vec4[e9] vge vec2,vec2,vec4[e9]
@ -800,7 +820,7 @@ func_1A7C:
vsub vec8,vec10,vec14[e0] vsub vec8,vec10,vec14[e0]
mfc2 v1,vec10[e12] mfc2 v1,vec10[e12]
vsub vec11,vec14,vec2[e0] vsub vec11,vec14,vec2[e0]
lw a2, 0x01EC(r0) lw a2, 0x1EC(r0)
vsub vec12,vec14,vec10[e0] vsub vec12,vec14,vec10[e0]
llv vec13[e0], 0x20(at) llv vec13[e0], 0x20(at)
vsub vec15,vec10,vec2[e0] vsub vec15,vec10,vec2[e0]
@ -844,7 +864,7 @@ func_1BC0:
vrcph vec22[e11],vec8[e9] vrcph vec22[e11],vec8[e9]
lw t0, 0x0020(v1) lw t0, 0x0020(v1)
vmudl vec18,vec18,vec30[e11] vmudl vec18,vec18,vec30[e11]
lbu t1, 0x01E7(r0) lbu t1, 0x1E7(r0)
vmudl vec19,vec19,vec30[e11] vmudl vec19,vec19,vec30[e11]
sub t3, a1, a3 sub t3, a1, a3
vmudl vec21,vec21,vec30[e11] vmudl vec21,vec21,vec30[e11]
@ -868,7 +888,7 @@ func_1BC0:
vmudm vec29,vec25,vec20[e0] vmudm vec29,vec25,vec20[e0]
dw 0x48058880 dw 0x48058880
vmadl vec29,vec15,vec20[e0] vmadl vec29,vec15,vec20[e0]
lbu a3, 0x01E6(r0) lbu a3, 0x1E6(r0)
vmadn vec20,vec15,vec22[e0] vmadn vec20,vec15,vec22[e0]
lsv vec19[e14], 0x1C(v0) lsv vec19[e14], 0x1C(v0)
vmadh vec15,vec25,vec22[e0] vmadh vec15,vec25,vec22[e0]
@ -1054,7 +1074,7 @@ func_1BC0:
lh t9, 6(t9) lh t9, 6(t9)
sub v0, t9, t8 sub v0, t9, t8
bgez v0, func_1194 bgez v0, func_1194
lw t8, 0x00D8(r0) lw t8, 0x0D8(r0)
j label_1008 & 0x1FFF j label_1008 & 0x1FFF
lbu at, 0x09C1(k1) lbu at, 0x09C1(k1)
j label_1040 & 0x1FFF j label_1040 & 0x1FFF