diff --git a/src/include/lib/lib_0c000.h b/src/include/lib/lib_0c000.h index 5e3c359aa..40da973d3 100644 --- a/src/include/lib/lib_0c000.h +++ b/src/include/lib/lib_0c000.h @@ -97,7 +97,7 @@ void rmonPrintFloat(s32 index, f32 arg1); void rmonPrint2Floats(s32 index, f32 value1, f32 value2); void rmonPrint3Floats(s32 index, f32 value1, f32 value2, f32 value3); void crashPutChar(s32 x, s32 y, char c); -u32 func0000cc34(void); +void crashAppendChar(char c); void crashScroll(s32 numlines); void func0000cdc8(s32 x, s32 y, bool on); void crashReset(void); diff --git a/src/lib/lib_0c000.c b/src/lib/lib_0c000.c index ed92e70ee..8848f1113 100644 --- a/src/lib/lib_0c000.c +++ b/src/lib/lib_0c000.c @@ -9,8 +9,8 @@ #include "types.h" u32 var8005d5b0 = 0x00000000; -u32 var8005d5b4 = 0x00000000; -u32 var8005d5b8 = 0x00000000; +s16 g_CrashCurX = 0; +s16 g_CrashCurY = 0; struct crashdescription { u32 mask; @@ -566,85 +566,40 @@ void crashPutChar(s32 x, s32 y, char c) } } -GLOBAL_ASM( -glabel func0000cc34 -/* cc34: 27bdffd8 */ addiu $sp,$sp,-40 -/* cc38: 308600ff */ andi $a2,$a0,0xff -/* cc3c: afbf001c */ sw $ra,0x1c($sp) -/* cc40: afb00018 */ sw $s0,0x18($sp) -/* cc44: afa40028 */ sw $a0,0x28($sp) -/* cc48: 10c0003b */ beqz $a2,.L0000cd38 -/* cc4c: 00c01025 */ or $v0,$a2,$zero -/* cc50: 24010009 */ addiu $at,$zero,0x9 -/* cc54: 14c1000a */ bne $a2,$at,.L0000cc80 -/* cc58: 3c108006 */ lui $s0,%hi(var8005d5b4) -/* cc5c: 2610d5b4 */ addiu $s0,$s0,%lo(var8005d5b4) -.L0000cc60: -/* cc60: 0c00330d */ jal func0000cc34 -/* cc64: 24040020 */ addiu $a0,$zero,0x20 -/* cc68: 860e0000 */ lh $t6,0x0($s0) -/* cc6c: 31cf0007 */ andi $t7,$t6,0x7 -/* cc70: 15e0fffb */ bnez $t7,.L0000cc60 -/* cc74: 00000000 */ nop -/* cc78: 10000030 */ b .L0000cd3c -/* cc7c: 8fbf001c */ lw $ra,0x1c($sp) -.L0000cc80: -/* cc80: 2401000a */ addiu $at,$zero,0xa -/* cc84: 14410008 */ bne $v0,$at,.L0000cca8 -/* cc88: 3c038006 */ lui $v1,%hi(var8005d5b8) -/* cc8c: 2463d5b8 */ addiu $v1,$v1,%lo(var8005d5b8) -/* cc90: 84780000 */ lh $t8,0x0($v1) -/* cc94: 3c108006 */ lui $s0,%hi(var8005d5b4) -/* cc98: 2610d5b4 */ addiu $s0,$s0,%lo(var8005d5b4) -/* cc9c: 27190001 */ addiu $t9,$t8,0x1 -/* cca0: a4790000 */ sh $t9,0x0($v1) -/* cca4: a6000000 */ sh $zero,0x0($s0) -.L0000cca8: -/* cca8: 3c038006 */ lui $v1,%hi(var8005d5b8) -/* ccac: 2463d5b8 */ addiu $v1,$v1,%lo(var8005d5b8) -/* ccb0: 84650000 */ lh $a1,0x0($v1) -/* ccb4: 3c108006 */ lui $s0,%hi(var8005d5b4) -/* ccb8: 2610d5b4 */ addiu $s0,$s0,%lo(var8005d5b4) -/* ccbc: 28a1001d */ slti $at,$a1,0x1d -/* ccc0: 1420000a */ bnez $at,.L0000ccec -/* ccc4: 24a4ffe4 */ addiu $a0,$a1,-28 -/* ccc8: afa20024 */ sw $v0,0x24($sp) -/* cccc: 0c003353 */ jal crashScroll -/* ccd0: a3a6002b */ sb $a2,0x2b($sp) -/* ccd4: 3c038006 */ lui $v1,%hi(var8005d5b8) -/* ccd8: 2463d5b8 */ addiu $v1,$v1,%lo(var8005d5b8) -/* ccdc: 2408001c */ addiu $t0,$zero,0x1c -/* cce0: 8fa20024 */ lw $v0,0x24($sp) -/* cce4: 93a6002b */ lbu $a2,0x2b($sp) -/* cce8: a4680000 */ sh $t0,0x0($v1) -.L0000ccec: -/* ccec: 2401000a */ addiu $at,$zero,0xa -/* ccf0: 50410012 */ beql $v0,$at,.L0000cd3c -/* ccf4: 8fbf001c */ lw $ra,0x1c($sp) -/* ccf8: 86040000 */ lh $a0,0x0($s0) -/* ccfc: 0c0032e8 */ jal crashPutChar -/* cd00: 84650000 */ lh $a1,0x0($v1) -/* cd04: 86090000 */ lh $t1,0x0($s0) -/* cd08: 3c038006 */ lui $v1,%hi(var8005d5b8) -/* cd0c: 2463d5b8 */ addiu $v1,$v1,%lo(var8005d5b8) -/* cd10: 252a0001 */ addiu $t2,$t1,0x1 -/* cd14: a60a0000 */ sh $t2,0x0($s0) -/* cd18: 860b0000 */ lh $t3,0x0($s0) -/* cd1c: 29610047 */ slti $at,$t3,0x47 -/* cd20: 54200006 */ bnezl $at,.L0000cd3c -/* cd24: 8fbf001c */ lw $ra,0x1c($sp) -/* cd28: 846c0000 */ lh $t4,0x0($v1) -/* cd2c: a6000000 */ sh $zero,0x0($s0) -/* cd30: 258d0001 */ addiu $t5,$t4,0x1 -/* cd34: a46d0000 */ sh $t5,0x0($v1) -.L0000cd38: -/* cd38: 8fbf001c */ lw $ra,0x1c($sp) -.L0000cd3c: -/* cd3c: 8fb00018 */ lw $s0,0x18($sp) -/* cd40: 27bd0028 */ addiu $sp,$sp,0x28 -/* cd44: 03e00008 */ jr $ra -/* cd48: 00000000 */ nop -); +void crashAppendChar(char c) +{ + if (c == '\0') { + return; + } + + if (c == '\t') { + do { + crashAppendChar(' '); + } while (g_CrashCurX & 7); + + return; + } + + if (c == '\n') { + g_CrashCurY++; + g_CrashCurX = 0; + } + + if (g_CrashCurY > 28) { + crashScroll(g_CrashCurY - 28); + g_CrashCurY = 28; + } + + if (c != '\n') { + crashPutChar(g_CrashCurX, g_CrashCurY, c); + g_CrashCurX++; + + if (g_CrashCurX >= 71) { + g_CrashCurX = 0; + g_CrashCurY++; + } + } +} void crashScroll(s32 numlines) { diff --git a/src/lib/lib_2fa00.c b/src/lib/lib_2fa00.c index be1272b81..bb1e9eb29 100644 --- a/src/lib/lib_2fa00.c +++ b/src/lib/lib_2fa00.c @@ -65,7 +65,7 @@ glabel func0002fa48 /* 2fa70: 92240000 */ lbu $a0,0x0($s1) .L0002fa74: /* 2fa74: 26100001 */ addiu $s0,$s0,0x1 -/* 2fa78: 0c00330d */ jal func0000cc34 +/* 2fa78: 0c00330d */ jal crashAppendChar /* 2fa7c: 26310001 */ addiu $s1,$s1,0x1 /* 2fa80: 5612fffc */ bnel $s0,$s2,.L0002fa74 /* 2fa84: 92240000 */ lbu $a0,0x0($s1)