diff --git a/asm/nonmatchings/code_1370_len_7d0/boot_main.s b/asm/nonmatchings/code_1370_len_7d0/boot_main.s index 781ff51d1d..8eefbc48ee 100644 --- a/asm/nonmatchings/code_1370_len_7d0/boot_main.s +++ b/asm/nonmatchings/code_1370_len_7d0/boot_main.s @@ -11,52 +11,52 @@ glabel boot_main /* 1388 80025F88 3C048009 */ lui $a0, 0x8009 /* 138C 80025F8C 24845820 */ addiu $a0, $a0, 0x5820 /* 1390 80025F90 080097EB */ j .L80025FAC -/* 1394 80025F94 00000000 */ nop +/* 1394 80025F94 00000000 */ nop .L80025F98: /* 1398 80025F98 24020002 */ addiu $v0, $zero, 2 /* 139C 80025F9C 14620009 */ bne $v1, $v0, .L80025FC4 -/* 13A0 80025FA0 00000000 */ nop +/* 13A0 80025FA0 00000000 */ nop /* 13A4 80025FA4 3C048009 */ lui $a0, 0x8009 /* 13A8 80025FA8 24845870 */ addiu $a0, $a0, 0x5870 .L80025FAC: /* 13AC 80025FAC 0C019B84 */ jal osViSetMode -/* 13B0 80025FB0 00000000 */ nop +/* 13B0 80025FB0 00000000 */ nop /* 13B4 80025FB4 0C019B98 */ jal osViSetSpecialFeatures /* 13B8 80025FB8 2404005A */ addiu $a0, $zero, 0x5a /* 13BC 80025FBC 080097F3 */ j .L80025FCC -/* 13C0 80025FC0 00000000 */ nop +/* 13C0 80025FC0 00000000 */ nop .L80025FC4: /* 13C4 80025FC4 080097F1 */ j .L80025FC4 -/* 13C8 80025FC8 00000000 */ nop +/* 13C8 80025FC8 00000000 */ nop .L80025FCC: /* 13CC 80025FCC 0C017D00 */ jal nuGfxDisplayOff -/* 13D0 80025FD0 00000000 */ nop +/* 13D0 80025FD0 00000000 */ nop /* 13D4 80025FD4 0C00B22C */ jal crash_create_monitor -/* 13D8 80025FD8 00000000 */ nop +/* 13D8 80025FD8 00000000 */ nop /* 13DC 80025FDC 0C009718 */ jal func_80025C60 -/* 13E0 80025FE0 00000000 */ nop +/* 13E0 80025FE0 00000000 */ nop /* 13E4 80025FE4 0C017D58 */ jal nuGfxInit -/* 13E8 80025FE8 00000000 */ nop +/* 13E8 80025FE8 00000000 */ nop /* 13EC 80025FEC 0C017D84 */ jal nuContInit -/* 13F0 80025FF0 00000000 */ nop +/* 13F0 80025FF0 00000000 */ nop /* 13F4 80025FF4 3C038007 */ lui $v1, %hi(gGameStatusPtr) /* 13F8 80025FF8 8C63419C */ lw $v1, %lo(gGameStatusPtr)($v1) /* 13FC 80025FFC 0C00B458 */ jal func_8002D160 /* 1400 80026000 A0620073 */ sb $v0, 0x73($v1) /* 1404 80026004 0C0AC800 */ jal func_802B2000 -/* 1408 80026008 00000000 */ nop +/* 1408 80026008 00000000 */ nop /* 140C 8002600C 0C0AC80F */ jal func_802B203C -/* 1410 80026010 00000000 */ nop +/* 1410 80026010 00000000 */ nop /* 1414 80026014 3C048002 */ lui $a0, 0x8002 /* 1418 80026018 2484605C */ addiu $a0, $a0, 0x605c /* 141C 8002601C 0C017C94 */ jal nuGfxFuncSet -/* 1420 80026020 00000000 */ nop +/* 1420 80026020 00000000 */ nop /* 1424 80026024 3C048002 */ lui $a0, 0x8002 /* 1428 80026028 2484670C */ addiu $a0, $a0, 0x670c /* 142C 8002602C 0C017CA4 */ jal nuGfxPreNMIFuncSet -/* 1430 80026030 00000000 */ nop +/* 1430 80026030 00000000 */ nop /* 1434 80026034 0C019680 */ jal osGetCount -/* 1438 80026038 00000000 */ nop +/* 1438 80026038 00000000 */ nop /* 143C 8002603C 3C048007 */ lui $a0, %hi(gRandSeed) /* 1440 80026040 24844410 */ addiu $a0, $a0, %lo(gRandSeed) /* 1444 80026044 8C830000 */ lw $v1, ($a0) @@ -65,73 +65,4 @@ glabel boot_main /* 1450 80026050 AC830000 */ sw $v1, ($a0) .L80026054: /* 1454 80026054 08009815 */ j .L80026054 -/* 1458 80026058 00000000 */ nop -/* 145C 8002605C 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 1460 80026060 AFB10014 */ sw $s1, 0x14($sp) -/* 1464 80026064 3C118007 */ lui $s1, 0x8007 -/* 1468 80026068 26313E00 */ addiu $s1, $s1, 0x3e00 -/* 146C 8002606C AFBF0018 */ sw $ra, 0x18($sp) -/* 1470 80026070 AFB00010 */ sw $s0, 0x10($sp) -/* 1474 80026074 8E230000 */ lw $v1, ($s1) -/* 1478 80026078 10600022 */ beqz $v1, .L80026104 -/* 147C 8002607C 0080802D */ daddu $s0, $a0, $zero -/* 1480 80026080 24020001 */ addiu $v0, $zero, 1 -/* 1484 80026084 14620016 */ bne $v1, $v0, .L800260E0 -/* 1488 80026088 00000000 */ nop -/* 148C 8002608C 0C017CB4 */ jal nuGfxTaskAllEndWait -/* 1490 80026090 00000000 */ nop -/* 1494 80026094 16000012 */ bnez $s0, .L800260E0 -/* 1498 80026098 00000000 */ nop -/* 149C 8002609C 0C019A6C */ jal osViGetCurrentFramebuffer -/* 14A0 800260A0 00000000 */ nop -/* 14A4 800260A4 3C10800A */ lui $s0, 0x800a -/* 14A8 800260A8 2610A680 */ addiu $s0, $s0, -0x5980 -/* 14AC 800260AC 0200202D */ daddu $a0, $s0, $zero -/* 14B0 800260B0 AE020008 */ sw $v0, 8($s0) -/* 14B4 800260B4 AE020004 */ sw $v0, 4($s0) -/* 14B8 800260B8 AE020000 */ sw $v0, ($s0) -/* 14BC 800260BC 3C018007 */ lui $at, 0x8007 -/* 14C0 800260C0 AC223E04 */ sw $v0, 0x3e04($at) -/* 14C4 800260C4 0C017CBC */ jal nuGfxSetCfb -/* 14C8 800260C8 24050003 */ addiu $a1, $zero, 3 -/* 14CC 800260CC 8E040000 */ lw $a0, ($s0) -/* 14D0 800260D0 0C019C08 */ jal osViSwapBuffer -/* 14D4 800260D4 00000000 */ nop -/* 14D8 800260D8 24020002 */ addiu $v0, $zero, 2 -/* 14DC 800260DC AE220000 */ sw $v0, ($s1) -.L800260E0: -/* 14E0 800260E0 3C038007 */ lui $v1, 0x8007 -/* 14E4 800260E4 8C633E00 */ lw $v1, 0x3e00($v1) -/* 14E8 800260E8 24020002 */ addiu $v0, $zero, 2 -/* 14EC 800260EC 14620018 */ bne $v1, $v0, .L80026150 -/* 14F0 800260F0 00000000 */ nop -/* 14F4 800260F4 0C009859 */ jal func_80026164 -/* 14F8 800260F8 00000000 */ nop -/* 14FC 800260FC 08009854 */ j .L80026150 -/* 1500 80026100 00000000 */ nop -.L80026104: -/* 1504 80026104 3C038007 */ lui $v1, 0x8007 -/* 1508 80026108 24633E0A */ addiu $v1, $v1, 0x3e0a -/* 150C 8002610C 94620000 */ lhu $v0, ($v1) -/* 1510 80026110 38420001 */ xori $v0, $v0, 1 -/* 1514 80026114 1440000E */ bnez $v0, .L80026150 -/* 1518 80026118 A4620000 */ sh $v0, ($v1) -/* 151C 8002611C 0C0099D0 */ jal step_game_loop -/* 1520 80026120 00000000 */ nop -/* 1524 80026124 3C038007 */ lui $v1, 0x8007 -/* 1528 80026128 24633E08 */ addiu $v1, $v1, 0x3e08 -/* 152C 8002612C 24020001 */ addiu $v0, $zero, 1 -/* 1530 80026130 A4620000 */ sh $v0, ($v1) -/* 1534 80026134 2A020003 */ slti $v0, $s0, 3 -/* 1538 80026138 10400005 */ beqz $v0, .L80026150 -/* 153C 8002613C 00000000 */ nop -/* 1540 80026140 0C009A7B */ jal func_800269EC -/* 1544 80026144 A4600000 */ sh $zero, ($v1) -/* 1548 80026148 0C009AC2 */ jal gfx_draw_frame -/* 154C 8002614C 00000000 */ nop -.L80026150: -/* 1550 80026150 8FBF0018 */ lw $ra, 0x18($sp) -/* 1554 80026154 8FB10014 */ lw $s1, 0x14($sp) -/* 1558 80026158 8FB00010 */ lw $s0, 0x10($sp) -/* 155C 8002615C 03E00008 */ jr $ra -/* 1560 80026160 27BD0020 */ addiu $sp, $sp, 0x20 +/* 1458 80026058 00000000 */ nop diff --git a/asm/nonmatchings/code_1370_len_7d0/gfxRetrace_Callback.s b/asm/nonmatchings/code_1370_len_7d0/gfxRetrace_Callback.s new file mode 100644 index 0000000000..0c89158b8f --- /dev/null +++ b/asm/nonmatchings/code_1370_len_7d0/gfxRetrace_Callback.s @@ -0,0 +1,73 @@ +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches + +glabel gfxRetrace_Callback +/* 145C 8002605C 27BDFFE0 */ addiu $sp, $sp, -0x20 +/* 1460 80026060 AFB10014 */ sw $s1, 0x14($sp) +/* 1464 80026064 3C118007 */ lui $s1, 0x8007 +/* 1468 80026068 26313E00 */ addiu $s1, $s1, 0x3e00 +/* 146C 8002606C AFBF0018 */ sw $ra, 0x18($sp) +/* 1470 80026070 AFB00010 */ sw $s0, 0x10($sp) +/* 1474 80026074 8E230000 */ lw $v1, ($s1) +/* 1478 80026078 10600022 */ beqz $v1, .L80026104 +/* 147C 8002607C 0080802D */ daddu $s0, $a0, $zero +/* 1480 80026080 24020001 */ addiu $v0, $zero, 1 +/* 1484 80026084 14620016 */ bne $v1, $v0, .L800260E0 +/* 1488 80026088 00000000 */ nop +/* 148C 8002608C 0C017CB4 */ jal nuGfxTaskAllEndWait +/* 1490 80026090 00000000 */ nop +/* 1494 80026094 16000012 */ bnez $s0, .L800260E0 +/* 1498 80026098 00000000 */ nop +/* 149C 8002609C 0C019A6C */ jal osViGetCurrentFramebuffer +/* 14A0 800260A0 00000000 */ nop +/* 14A4 800260A4 3C10800A */ lui $s0, 0x800a +/* 14A8 800260A8 2610A680 */ addiu $s0, $s0, -0x5980 +/* 14AC 800260AC 0200202D */ daddu $a0, $s0, $zero +/* 14B0 800260B0 AE020008 */ sw $v0, 8($s0) +/* 14B4 800260B4 AE020004 */ sw $v0, 4($s0) +/* 14B8 800260B8 AE020000 */ sw $v0, ($s0) +/* 14BC 800260BC 3C018007 */ lui $at, 0x8007 +/* 14C0 800260C0 AC223E04 */ sw $v0, 0x3e04($at) +/* 14C4 800260C4 0C017CBC */ jal nuGfxSetCfb +/* 14C8 800260C8 24050003 */ addiu $a1, $zero, 3 +/* 14CC 800260CC 8E040000 */ lw $a0, ($s0) +/* 14D0 800260D0 0C019C08 */ jal osViSwapBuffer +/* 14D4 800260D4 00000000 */ nop +/* 14D8 800260D8 24020002 */ addiu $v0, $zero, 2 +/* 14DC 800260DC AE220000 */ sw $v0, ($s1) +.L800260E0: +/* 14E0 800260E0 3C038007 */ lui $v1, 0x8007 +/* 14E4 800260E4 8C633E00 */ lw $v1, 0x3e00($v1) +/* 14E8 800260E8 24020002 */ addiu $v0, $zero, 2 +/* 14EC 800260EC 14620018 */ bne $v1, $v0, .L80026150 +/* 14F0 800260F0 00000000 */ nop +/* 14F4 800260F4 0C009859 */ jal func_80026164 +/* 14F8 800260F8 00000000 */ nop +/* 14FC 800260FC 08009854 */ j .L80026150 +/* 1500 80026100 00000000 */ nop +.L80026104: +/* 1504 80026104 3C038007 */ lui $v1, 0x8007 +/* 1508 80026108 24633E0A */ addiu $v1, $v1, 0x3e0a +/* 150C 8002610C 94620000 */ lhu $v0, ($v1) +/* 1510 80026110 38420001 */ xori $v0, $v0, 1 +/* 1514 80026114 1440000E */ bnez $v0, .L80026150 +/* 1518 80026118 A4620000 */ sh $v0, ($v1) +/* 151C 8002611C 0C0099D0 */ jal step_game_loop +/* 1520 80026120 00000000 */ nop +/* 1524 80026124 3C038007 */ lui $v1, 0x8007 +/* 1528 80026128 24633E08 */ addiu $v1, $v1, 0x3e08 +/* 152C 8002612C 24020001 */ addiu $v0, $zero, 1 +/* 1530 80026130 A4620000 */ sh $v0, ($v1) +/* 1534 80026134 2A020003 */ slti $v0, $s0, 3 +/* 1538 80026138 10400005 */ beqz $v0, .L80026150 +/* 153C 8002613C 00000000 */ nop +/* 1540 80026140 0C009A7B */ jal func_800269EC +/* 1544 80026144 A4600000 */ sh $zero, ($v1) +/* 1548 80026148 0C009AC2 */ jal gfx_draw_frame +/* 154C 8002614C 00000000 */ nop +.L80026150: +/* 1550 80026150 8FBF0018 */ lw $ra, 0x18($sp) +/* 1554 80026154 8FB10014 */ lw $s1, 0x14($sp) +/* 1558 80026158 8FB00010 */ lw $s0, 0x10($sp) +/* 155C 8002615C 03E00008 */ jr $ra +/* 1560 80026160 27BD0020 */ addiu $sp, $sp, 0x20 diff --git a/src/code_1370_len_7d0.c b/src/code_1370_len_7d0.c index 42f1924ee7..25b09e2082 100644 --- a/src/code_1370_len_7d0.c +++ b/src/code_1370_len_7d0.c @@ -1,7 +1,48 @@ #include "common.h" +#include "nu/nusys.h" -INCLUDE_ASM(s32, "code_1370_len_7d0", boot_main); +void gfxRetrace_Callback(void); +void gfxPreNMI_Callback(void); + +#ifdef NON_MATCHING +// Control flow issue w/ PANIC +void boot_main(void) { + OSViMode* viMode; + if (osTvType == OS_TV_NTSC) { + viMode = &osViModeTable[56]; + } else if (osTvType == OS_TV_MPAL) { + viMode = &osViModeTable[57]; + } else { + PANIC(); + } + osViSetMode(viMode); + + osViSetSpecialFeatures(OS_VI_GAMMA_OFF | OS_VI_GAMMA_DITHER_OFF | OS_VI_DIVOT_ON | OS_VI_DITHER_FILTER_ON); + nuGfxDisplayOff(); + crash_create_monitor(); + func_80025C60(); + nuGfxInit(); + GAME_STATUS->contBitPattern = nuContInit(); + func_8002D160(); + func_802B2000(); + func_802B203C(); + nuGfxFuncSet(gfxRetrace_Callback); + nuGfxPreNMIFuncSet(gfxPreNMI_Callback); + { + // Required to match + s32* randSeed = &gRandSeed; + (*randSeed) += osGetCount(); + } + nuGfxDisplayOn(); + + while (TRUE) {} +} +#else +INCLUDE_ASM(void, "code_1370_len_7d0", boot_main, void); +#endif + +INCLUDE_ASM(void, "code_1370_len_7d0", gfxRetrace_Callback, void); INCLUDE_ASM(s32, "code_1370_len_7d0", func_80026164); -INCLUDE_ASM(s32, "code_1370_len_7d0", gfxPreNMI_Callback); +INCLUDE_ASM(void, "code_1370_len_7d0", gfxPreNMI_Callback, void);