From 70843992a7fc97314ccabc8476a817e3409efa00 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Mon, 31 Aug 2026 18:43:37 -0600 Subject: [PATCH] =?UTF-8?q?feat(decomp):=20main=20func=5F8005E228=20(83=20?= =?UTF-8?q?ins)=20=E2=80=94=20a=20=C2=A7265=20VERBATIM-ASM=20bank,=20not?= =?UTF-8?q?=20a=20C=20crack?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Recorded honestly for the accounting: this function is banked as a raw __asm__ transcription of the target disassembly, NOT as decompiled C. Its epilogue (jr $ra with addiu $sp in the delay slot, two restores above) is unreachable from C at this project's pinned triple -- the §177/§188 toolchain-wall class. It is a legitimate route by the project's own established convention, verified before banking rather than assumed: src/800c3.c already banks InitHeap, FlushCache and func_8005CE38 exactly this way, and the agent followed the convention of its immediate neighbour func_8005E3AC in the same TU. Note it was NOT on .run/S67_walls.txt or the exclude list, so it was fairly drawn and the wall was DISCOVERED by drafting it. That is a gap in the walls ledger worth closing: an epilogue-shaped wall that no one has met yet is invisible to the draw filter, so the next wave can spend an agent rediscovering it. harvest_verify in the main tree: verified 1 / failed 0, final SHA 143dbb89f34491258bbc27810d0a12ec8b43a8dd BYTE-IDENTICAL. main 1045 -> 1044. Also fixed en route: a maspsx sltu-operand parse quirk needs no spaces after commas in the transcription (the submodule itself is UNCHANGED -- verified). --- src/800c3.c | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 100 insertions(+), 1 deletion(-) diff --git a/src/800c3.c b/src/800c3.c index 994f0583d..b9c4cc23e 100644 --- a/src/800c3.c +++ b/src/800c3.c @@ -928,7 +928,106 @@ void func_8005E1A4(void *arg0) { } } -INCLUDE_ASM("asm/nonmatchings/800c3", func_8005E228); +__asm__( + "\t.set\tnoreorder\n" + ".set noreorder\n" + "\t.globl\tfunc_8005E228\n" + "func_8005E228:\n" + "addiu $sp, $sp, -24\n" + "sw $s0, 16($sp)\n" + "addu $s0, $a0, $zero\n" + "sw $ra, 20($sp)\n" + "lbu $v1, 70($s0)\n" + "addiu $v0, $zero, 3\n" + "beq $v1, $v0, .L8005E2B4\n" + "slti $v0, $v1, 4\n" + "beqz $v0, .L8005E260\n" + "addiu $v0, $zero, 2\n" + "beq $v1, $v0, .L8005E274\n" + "addiu $v0, $zero, 1\n" + "j .L8005E364\n" + "nop\n" + ".L8005E260:\n" + "addiu $v0, $zero, 4\n" + "beq $v1, $v0, .L8005E2D8\n" + "addiu $v0, $zero, 1\n" + "j .L8005E364\n" + "nop\n" + ".L8005E274:\n" + "lw $v0, 60($s0)\n" + "lw $v1, 60($s0)\n" + "lbu $v0, 3($v0)\n" + "nop\n" + "sb $v0, 227($s0)\n" + "lbu $v0, 4($v1)\n" + "lw $v1, 60($s0)\n" + "sh $zero, 230($s0)\n" + "sb $v0, 228($s0)\n" + "lbu $v0, 5($v1)\n" + "lw $v1, 60($s0)\n" + "sb $v0, 233($s0)\n" + "lbu $v0, 6($v1)\n" + "sw $zero, 236($s0)\n" + "j .L8005E360\n" + "sb $v0, 234($s0)\n" + ".L8005E2B4:\n" + "lw $v0, 60($s0)\n" + "nop\n" + "lbu $v1, 4($v0)\n" + "lbu $v0, 5($v0)\n" + "sb $zero, 71($s0)\n" + "sll $v1, $v1, 8\n" + "addu $v0, $v0, $v1\n" + "j .L8005E360\n" + "sh $v0, 230($s0)\n" + ".L8005E2D8:\n" + "lw $a0, 236($s0)\n" + "lbu $v0, 71($s0)\n" + "lw $v1, 60($s0)\n" + "addiu $v0, $v0, 1\n" + "lbu $v1, 4($v1)\n" + "addiu $a0, $a0, 8\n" + "sb $v0, 71($s0)\n" + "addiu $v1, $v1, 3\n" + "andi $v1, $v1, 0x1FC\n" + "addu $a0, $a0, $v1\n" + "lbu $v1, 234($s0)\n" + "andi $v0, $v0, 0xFF\n" + "sltu $v0,$v0,$v1\n" + "beqz $v0, .L8005E31C\n" + "sw $a0, 236($s0)\n" + ".L8005E314:\n" + "j .L8005E364\n" + "addu $v0, $zero, $zero\n" + ".L8005E31C:\n" + "jal func_8005E374\n" + "addu $a0, $s0, $zero\n" + "slti $v0, $v0, 0x81\n" + "bnez $v0, .L8005E344\n" + "addu $a0, $s0, $zero\n" + "addiu $v0, $zero, 0xFE\n" + "sb $v0, 70($s0)\n" + "addiu $v0, $zero, 2\n" + "j .L8005E314\n" + "sb $v0, 73($s0)\n" + ".L8005E344:\n" + "addiu $v0, $zero, 0xFF\n" + "addiu $a1, $s0, 0x63\n" + "jal func_8005E3AC\n" + "sb $v0, 70($s0)\n" + "addiu $v0, $zero, 2\n" + "j .L8005E314\n" + "sb $v0, 70($s0)\n" + ".L8005E360:\n" + "addiu $v0, $zero, 1\n" + ".L8005E364:\n" + "lw $ra, 20($sp)\n" + "lw $s0, 16($sp)\n" + "jr $ra\n" + "addiu $sp, $sp, 24\n" + ".set reorder\n" +); + s32 func_8005E374(u8 *a0) { s32 t = ((a0[0xE3] + 1) / 2) * 4;