1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2024-11-25 09:45:02 +00:00

Decompile sleep.c and printutils.c

- Decompile sleep.c (OK)
- Decompile printutils.c (OK)
- Fix 1 non-matching in z_room.c
- Get rid of some magic numbers
This commit is contained in:
Random 2020-04-08 18:36:15 +02:00
parent 0a25ab74c4
commit d0cf6e153b
20 changed files with 94 additions and 308 deletions

View file

@ -9,148 +9,6 @@
.align 4
glabel func_800FF340
/* B764E0 800FF340 27BDFFE8 */ addiu $sp, $sp, -0x18
/* B764E4 800FF344 AFA5001C */ sw $a1, 0x1c($sp)
/* B764E8 800FF348 00802825 */ move $a1, $a0
/* B764EC 800FF34C AFBF0014 */ sw $ra, 0x14($sp)
/* B764F0 800FF350 AFA40018 */ sw $a0, 0x18($sp)
/* B764F4 800FF354 00C03825 */ move $a3, $a2
/* B764F8 800FF358 8FA6001C */ lw $a2, 0x1c($sp)
/* B764FC 800FF35C 0C0014B8 */ jal _Printf
/* B76500 800FF360 8C840000 */ lw $a0, ($a0)
/* B76504 800FF364 8FBF0014 */ lw $ra, 0x14($sp)
/* B76508 800FF368 27BD0018 */ addiu $sp, $sp, 0x18
/* B7650C 800FF36C 03E00008 */ jr $ra
/* B76510 800FF370 00000000 */ nop
glabel func_800FF374
/* B76514 800FF374 27BDFFE0 */ addiu $sp, $sp, -0x20
/* B76518 800FF378 AFBF0014 */ sw $ra, 0x14($sp)
/* B7651C 800FF37C AFA60028 */ sw $a2, 0x28($sp)
/* B76520 800FF380 AFA50024 */ sw $a1, 0x24($sp)
/* B76524 800FF384 AFA7002C */ sw $a3, 0x2c($sp)
/* B76528 800FF388 0C03FCD0 */ jal func_800FF340
/* B7652C 800FF38C 27A60028 */ addiu $a2, $sp, 0x28
/* B76530 800FF390 8FBF0014 */ lw $ra, 0x14($sp)
/* B76534 800FF394 27BD0020 */ addiu $sp, $sp, 0x20
/* B76538 800FF398 03E00008 */ jr $ra
/* B7653C 800FF39C 00000000 */ nop
glabel func_800FF3A0
/* B76540 800FF3A0 27BDFF98 */ addiu $sp, $sp, -0x68
/* B76544 800FF3A4 AFBF0024 */ sw $ra, 0x24($sp)
/* B76548 800FF3A8 AFA40068 */ sw $a0, 0x68($sp)
/* B7654C 800FF3AC AFA5006C */ sw $a1, 0x6c($sp)
/* B76550 800FF3B0 27A5004C */ addiu $a1, $sp, 0x4c
/* B76554 800FF3B4 27A40050 */ addiu $a0, $sp, 0x50
/* B76558 800FF3B8 0C001874 */ jal osCreateMesgQueue
/* B7655C 800FF3BC 24060001 */ li $a2, 1
/* B76560 800FF3C0 240E0000 */ li $t6, 0
/* B76564 800FF3C4 240F0000 */ li $t7, 0
/* B76568 800FF3C8 27B80050 */ addiu $t8, $sp, 0x50
/* B7656C 800FF3CC AFB80018 */ sw $t8, 0x18($sp)
/* B76570 800FF3D0 AFAF0014 */ sw $t7, 0x14($sp)
/* B76574 800FF3D4 AFAE0010 */ sw $t6, 0x10($sp)
/* B76578 800FF3D8 27A40028 */ addiu $a0, $sp, 0x28
/* B7657C 800FF3DC 8FA60068 */ lw $a2, 0x68($sp)
/* B76580 800FF3E0 8FA7006C */ lw $a3, 0x6c($sp)
/* B76584 800FF3E4 0C0418B8 */ jal osSetTimer
/* B76588 800FF3E8 AFA0001C */ sw $zero, 0x1c($sp)
/* B7658C 800FF3EC 27A40050 */ addiu $a0, $sp, 0x50
/* B76590 800FF3F0 00002825 */ move $a1, $zero
/* B76594 800FF3F4 0C000CA0 */ jal osRecvMesg
/* B76598 800FF3F8 24060001 */ li $a2, 1
/* B7659C 800FF3FC 8FBF0024 */ lw $ra, 0x24($sp)
/* B765A0 800FF400 27BD0068 */ addiu $sp, $sp, 0x68
/* B765A4 800FF404 03E00008 */ jr $ra
/* B765A8 800FF408 00000000 */ nop
glabel func_800FF40C
/* B765AC 800FF40C 27BDFFE8 */ addiu $sp, $sp, -0x18
/* B765B0 800FF410 AFBF0014 */ sw $ra, 0x14($sp)
/* B765B4 800FF414 AFA40018 */ sw $a0, 0x18($sp)
/* B765B8 800FF418 00802825 */ move $a1, $a0
/* B765BC 800FF41C 24040000 */ li $a0, 0
/* B765C0 800FF420 24060000 */ li $a2, 0
/* B765C4 800FF424 0C000E1E */ jal __ll_mul
/* B765C8 800FF428 24070003 */ li $a3, 3
/* B765CC 800FF42C 00402025 */ move $a0, $v0
/* B765D0 800FF430 00602825 */ move $a1, $v1
/* B765D4 800FF434 24060000 */ li $a2, 0
/* B765D8 800FF438 0C000DDE */ jal __ull_div
/* B765DC 800FF43C 24070040 */ li $a3, 64
/* B765E0 800FF440 00402025 */ move $a0, $v0
/* B765E4 800FF444 0C03FCE8 */ jal func_800FF3A0
/* B765E8 800FF448 00602825 */ move $a1, $v1
/* B765EC 800FF44C 8FBF0014 */ lw $ra, 0x14($sp)
/* B765F0 800FF450 27BD0018 */ addiu $sp, $sp, 0x18
/* B765F4 800FF454 03E00008 */ jr $ra
/* B765F8 800FF458 00000000 */ nop
glabel func_800FF45C
/* B765FC 800FF45C 27BDFFE8 */ addiu $sp, $sp, -0x18
/* B76600 800FF460 AFBF0014 */ sw $ra, 0x14($sp)
/* B76604 800FF464 AFA40018 */ sw $a0, 0x18($sp)
/* B76608 800FF468 00802825 */ move $a1, $a0
/* B7660C 800FF46C 24040000 */ li $a0, 0
/* B76610 800FF470 24060000 */ li $a2, 0
/* B76614 800FF474 0C000E1E */ jal __ll_mul
/* B76618 800FF478 24070BB8 */ li $a3, 3000
/* B7661C 800FF47C 00402025 */ move $a0, $v0
/* B76620 800FF480 00602825 */ move $a1, $v1
/* B76624 800FF484 24060000 */ li $a2, 0
/* B76628 800FF488 0C000DDE */ jal __ull_div
/* B7662C 800FF48C 24070040 */ li $a3, 64
/* B76630 800FF490 00402025 */ move $a0, $v0
/* B76634 800FF494 0C03FCE8 */ jal func_800FF3A0
/* B76638 800FF498 00602825 */ move $a1, $v1
/* B7663C 800FF49C 8FBF0014 */ lw $ra, 0x14($sp)
/* B76640 800FF4A0 27BD0018 */ addiu $sp, $sp, 0x18
/* B76644 800FF4A4 03E00008 */ jr $ra
/* B76648 800FF4A8 00000000 */ nop
glabel func_800FF4AC
/* B7664C 800FF4AC 27BDFFE8 */ addiu $sp, $sp, -0x18
/* B76650 800FF4B0 AFBF0014 */ sw $ra, 0x14($sp)
/* B76654 800FF4B4 AFA40018 */ sw $a0, 0x18($sp)
/* B76658 800FF4B8 00802825 */ move $a1, $a0
/* B7665C 800FF4BC 3C0702CB */ lui $a3, (0x02CB4178 >> 16) # lui $a3, 0x2cb
/* B76660 800FF4C0 34E74178 */ ori $a3, (0x02CB4178 & 0xFFFF) # ori $a3, $a3, 0x4178
/* B76664 800FF4C4 24040000 */ li $a0, 0
/* B76668 800FF4C8 0C000E1E */ jal __ll_mul
/* B7666C 800FF4CC 24060000 */ li $a2, 0
/* B76670 800FF4D0 00402025 */ move $a0, $v0
/* B76674 800FF4D4 00602825 */ move $a1, $v1
/* B76678 800FF4D8 24060000 */ li $a2, 0
/* B7667C 800FF4DC 0C000DDE */ jal __ull_div
/* B76680 800FF4E0 240703E8 */ li $a3, 1000
/* B76684 800FF4E4 00402025 */ move $a0, $v0
/* B76688 800FF4E8 0C03FCE8 */ jal func_800FF3A0
/* B7668C 800FF4EC 00602825 */ move $a1, $v1
/* B76690 800FF4F0 8FBF0014 */ lw $ra, 0x14($sp)
/* B76694 800FF4F4 27BD0018 */ addiu $sp, $sp, 0x18
/* B76698 800FF4F8 03E00008 */ jr $ra
/* B7669C 800FF4FC 00000000 */ nop
glabel func_800FF500
/* B766A0 800FF500 27BDFFE8 */ addiu $sp, $sp, -0x18
/* B766A4 800FF504 AFBF0014 */ sw $ra, 0x14($sp)
/* B766A8 800FF508 AFA40018 */ sw $a0, 0x18($sp)
/* B766AC 800FF50C 00802825 */ move $a1, $a0
/* B766B0 800FF510 3C0702CB */ lui $a3, (0x02CB4178 >> 16) # lui $a3, 0x2cb
/* B766B4 800FF514 34E74178 */ ori $a3, (0x02CB4178 & 0xFFFF) # ori $a3, $a3, 0x4178
/* B766B8 800FF518 24040000 */ li $a0, 0
/* B766BC 800FF51C 0C000E1E */ jal __ll_mul
/* B766C0 800FF520 24060000 */ li $a2, 0
/* B766C4 800FF524 00402025 */ move $a0, $v0
/* B766C8 800FF528 0C03FCE8 */ jal func_800FF3A0
/* B766CC 800FF52C 00602825 */ move $a1, $v1
/* B766D0 800FF530 8FBF0014 */ lw $ra, 0x14($sp)
/* B766D4 800FF534 27BD0018 */ addiu $sp, $sp, 0x18
/* B766D8 800FF538 03E00008 */ jr $ra
/* B766DC 800FF53C 00000000 */ nop
glabel func_800FF540
/* B766E0 800FF540 30C300FF */ andi $v1, $a2, 0xff
/* B766E4 800FF544 00A03825 */ move $a3, $a1

View file

@ -36,7 +36,7 @@ glabel func_800B1DBC
/* B28F7C 800B1DDC 3C048014 */ lui $a0, %hi(D_80142F58) # $a0, 0x8014
/* B28F80 800B1DE0 0C00084C */ jal osSyncPrintf
/* B28F84 800B1DE4 24842F58 */ addiu $a0, %lo(D_80142F58) # addiu $a0, $a0, 0x2f58
/* B28F88 800B1DE8 0C03FD2B */ jal func_800FF4AC
/* B28F88 800B1DE8 0C03FD2B */ jal Sleep_Msec
/* B28F8C 800B1DEC 24040064 */ li $a0, 100
/* B28F90 800B1DF0 8E04000C */ lw $a0, 0xc($s0)
/* B28F94 800B1DF4 3C058014 */ lui $a1, %hi(D_80142F68) # $a1, 0x8014

View file

@ -1,120 +0,0 @@
.rdata
glabel D_8013EF8C
.asciz "JPEG\n"
.balign 4
glabel D_8013EFA4
.asciz "JPEG %08x\n"
.balign 4
glabel D_8013EFC0
.asciz "%08x\n"
.balign 4
glabel D_8013EFEC
.asciz " time = %6.3f ms \n"
.balign 4
glabel D_8013F010
.asciz "\n"
.balign 4
glabel D_8013F040
.asciz "150\n"
.balign 4
glabel D_8013F080
.asciz "\n"
.balign 4
.text
glabel func_80096238
/* B0D3D8 80096238 27BDFFE0 */ addiu $sp, $sp, -0x20
/* B0D3DC 8009623C AFBF0014 */ sw $ra, 0x14($sp)
/* B0D3E0 80096240 AFA40020 */ sw $a0, 0x20($sp)
/* B0D3E4 80096244 8C8F0000 */ lw $t7, ($a0)
/* B0D3E8 80096248 3C01FFD8 */ lui $at, (0xFFD8FFE0 >> 16) # lui $at, 0xffd8
/* B0D3EC 8009624C 3421FFE0 */ ori $at, (0xFFD8FFE0 & 0xFFFF) # ori $at, $at, 0xffe0
/* B0D3F0 80096250 15E10049 */ bne $t7, $at, .L80096378
/* B0D3F4 80096254 3C048014 */ lui $a0, %hi(D_8013EF8C) # $a0, 0x8014
/* B0D3F8 80096258 0C00084C */ jal osSyncPrintf
/* B0D3FC 8009625C 2484EF8C */ addiu $a0, %lo(D_8013EF8C) # addiu $a0, $a0, -0x1074
/* B0D400 80096260 3C048014 */ lui $a0, %hi(D_8013EFA4) # $a0, 0x8014
/* B0D404 80096264 2484EFA4 */ addiu $a0, %lo(D_8013EFA4) # addiu $a0, $a0, -0x105c
/* B0D408 80096268 0C00084C */ jal osSyncPrintf
/* B0D40C 8009626C 8FA50020 */ lw $a1, 0x20($sp)
/* B0D410 80096270 3C048014 */ lui $a0, %hi(D_8013EFC0) # $a0, 0x8014
/* B0D414 80096274 3C058017 */ lui $a1, %hi(D_801759C0) # $a1, 0x8017
/* B0D418 80096278 24A559C0 */ addiu $a1, %lo(D_801759C0) # addiu $a1, $a1, 0x59c0
/* B0D41C 8009627C 0C00084C */ jal osSyncPrintf
/* B0D420 80096280 2484EFC0 */ addiu $a0, %lo(D_8013EFC0) # addiu $a0, $a0, -0x1040
/* B0D424 80096284 0C001A78 */ jal osGetTime
/* B0D428 80096288 00000000 */ nop
/* B0D42C 8009628C 3C058017 */ lui $a1, %hi(D_801759C0) # $a1, 0x8017
/* B0D430 80096290 3C06801A */ lui $a2, %hi(gGfxSPTaskOutputBuffer) # $a2, 0x801a
/* B0D434 80096294 3C070001 */ lui $a3, (0x00018000 >> 16) # lui $a3, 1
/* B0D438 80096298 AFA20018 */ sw $v0, 0x18($sp)
/* B0D43C 8009629C AFA3001C */ sw $v1, 0x1c($sp)
/* B0D440 800962A0 34E78000 */ ori $a3, (0x00018000 & 0xFFFF) # ori $a3, $a3, 0x8000
/* B0D444 800962A4 24C6B1C0 */ addiu $a2, %lo(gGfxSPTaskOutputBuffer) # addiu $a2, $a2, -0x4e40
/* B0D448 800962A8 24A559C0 */ addiu $a1, %lo(D_801759C0) # addiu $a1, $a1, 0x59c0
/* B0D44C 800962AC 0C01B906 */ jal func_8006E418
/* B0D450 800962B0 8FA40020 */ lw $a0, 0x20($sp)
/* B0D454 800962B4 1440002E */ bnez $v0, .L80096370
/* B0D458 800962B8 3C048014 */ lui $a0, %hi(D_8013F080)
/* B0D45C 800962BC 0C001A78 */ jal osGetTime
/* B0D460 800962C0 00000000 */ nop
/* B0D464 800962C4 8FB80018 */ lw $t8, 0x18($sp)
/* B0D468 800962C8 8FB9001C */ lw $t9, 0x1c($sp)
/* B0D46C 800962CC 24060000 */ li $a2, 0
/* B0D470 800962D0 00584023 */ subu $t0, $v0, $t8
/* B0D474 800962D4 0079082B */ sltu $at, $v1, $t9
/* B0D478 800962D8 01012023 */ subu $a0, $t0, $at
/* B0D47C 800962DC 00792823 */ subu $a1, $v1, $t9
/* B0D480 800962E0 AFA5001C */ sw $a1, 0x1c($sp)
/* B0D484 800962E4 AFA40018 */ sw $a0, 0x18($sp)
/* B0D488 800962E8 0C000E1E */ jal __ll_mul
/* B0D48C 800962EC 24070040 */ li $a3, 64
/* B0D490 800962F0 00402025 */ move $a0, $v0
/* B0D494 800962F4 00602825 */ move $a1, $v1
/* B0D498 800962F8 24060000 */ li $a2, 0
/* B0D49C 800962FC 0C000DDE */ jal __ull_div
/* B0D4A0 80096300 24070BB8 */ li $a3, 3000
/* B0D4A4 80096304 00402025 */ move $a0, $v0
/* B0D4A8 80096308 0C0419CA */ jal __ull_to_f
/* B0D4AC 8009630C 00602825 */ move $a1, $v1
/* B0D4B0 80096310 3C01447A */ li $at, 0x447A0000 # 0.000000
/* B0D4B4 80096314 44812000 */ mtc1 $at, $f4
/* B0D4B8 80096318 3C048014 */ lui $a0, %hi(D_8013EFEC) # $a0, 0x8014
/* B0D4BC 8009631C 2484EFEC */ addiu $a0, %lo(D_8013EFEC) # addiu $a0, $a0, -0x1014
/* B0D4C0 80096320 46040183 */ div.s $f6, $f0, $f4
/* B0D4C4 80096324 46003221 */ cvt.d.s $f8, $f6
/* B0D4C8 80096328 44074000 */ mfc1 $a3, $f8
/* B0D4CC 8009632C 44064800 */ mfc1 $a2, $f9
/* B0D4D0 80096330 0C00084C */ jal osSyncPrintf
/* B0D4D4 80096334 00000000 */ nop
/* B0D4D8 80096338 3C048014 */ lui $a0, %hi(D_8013F010) # $a0, 0x8014
/* B0D4DC 8009633C 0C00084C */ jal osSyncPrintf
/* B0D4E0 80096340 2484F010 */ addiu $a0, %lo(D_8013F010) # addiu $a0, $a0, -0xff0
/* B0D4E4 80096344 3C048014 */ lui $a0, %hi(D_8013F040) # $a0, 0x8014
/* B0D4E8 80096348 0C00084C */ jal osSyncPrintf
/* B0D4EC 8009634C 2484F040 */ addiu $a0, %lo(D_8013F040) # addiu $a0, $a0, -0xfc0
/* B0D4F0 80096350 3C048017 */ lui $a0, %hi(D_801759C0) # $a0, 0x8017
/* B0D4F4 80096354 3C060002 */ lui $a2, (0x00025800 >> 16) # lui $a2, 2
/* B0D4F8 80096358 34C65800 */ ori $a2, (0x00025800 & 0xFFFF) # ori $a2, $a2, 0x5800
/* B0D4FC 8009635C 248459C0 */ addiu $a0, %lo(D_801759C0) # addiu $a0, $a0, 0x59c0
/* B0D500 80096360 0C001BC4 */ jal bcopy
/* B0D504 80096364 8FA50020 */ lw $a1, 0x20($sp)
/* B0D508 80096368 10000004 */ b .L8009637C
/* B0D50C 8009636C 8FBF0014 */ lw $ra, 0x14($sp)
.L80096370:
/* B0D510 80096370 0C00084C */ jal osSyncPrintf
/* B0D514 80096374 2484F080 */ addiu $a0, %lo(D_8013F080)
.L80096378:
/* B0D518 80096378 8FBF0014 */ lw $ra, 0x14($sp)
.L8009637C:
/* B0D51C 8009637C 27BD0020 */ addiu $sp, $sp, 0x20
/* B0D520 80096380 00001025 */ move $v0, $zero
/* B0D524 80096384 03E00008 */ jr $ra
/* B0D528 80096388 00000000 */ nop

View file

@ -1,7 +1,7 @@
glabel func_8081F2FC
/* 0BADC 8081F2FC 27BDFFE8 */ addiu $sp, $sp, 0xFFE8 ## $sp = FFFFFFE8
/* 0BAE0 8081F300 AFBF0014 */ sw $ra, 0x0014($sp)
/* 0BAE4 8081F304 0C03FD2B */ jal func_800FF4AC
/* 0BAE4 8081F304 0C03FD2B */ jal Sleep_Msec
/* 0BAE8 8081F308 24040032 */ addiu $a0, $zero, 0x0032 ## $a0 = 00000032
/* 0BAEC 8081F30C 3C048083 */ lui $a0, %hi(D_808321B0) ## $a0 = 80830000
/* 0BAF0 8081F310 0C030DDC */ jal func_800C3770

View file

@ -2309,8 +2309,13 @@ void __osDisplayArena(Arena* arena);
void ArenaImpl_FaultClient(Arena* arena);
u32 __osCheckArena(Arena* arena);
u8 func_800FF334(Arena* arena);
// ? func_800FF3A0(?);
// ? func_800FF4AC(?);
void PrintUtils_VPrintf(char** arg0, const char* fmt, va_list args);
void PrintUtils_Printf(void* arg0, const char* fmt, ...);
void Sleep_Cycles(OSTime cycles);
void Sleep_Nsec(u32 nsec);
void Sleep_Usec(u32 usec);
void Sleep_Msec(u32 ms);
void Sleep_Sec(u32 sec);
// ? func_800FF540(?);
// ? func_800FF5A8(?);
// ? func_800FF62C(?);

4
spec
View file

@ -502,7 +502,9 @@ beginseg
include "build/data/code_800FD970.data.o"
include "build/data/code_800FD970.bss.o"
include "build/src/code/__osMalloc.o"
include "build/asm/code_800FF340.o"
include "build/src/code/printutils.o"
include "build/src/code/sleep.o"
include "build/asm/code_800FF540.o"
include "build/asm/code_800FFA50.o"
include "build/data/code_800FFA50.bss.o"
include "build/asm/code_80100040.o"

View file

@ -711,7 +711,7 @@ void __osDisplayArena(Arena* arena) {
iter->size);
if (!iter->isFree) {
osSyncPrintf(" [%016llu:%2d:%s:%d]", (iter->time * 64ll) / 3ull, iter->threadId,
osSyncPrintf(" [%016llu:%2d:%s:%d]", OS_CYCLES_TO_NSEC(iter->time), iter->threadId,
iter->filename ? iter->filename : "**NULL**", iter->line);
}

View file

@ -9,7 +9,7 @@ u32 D_8012DBC0 = false;
void func_800D31A0() {
osSyncPrintf(VT_FGCOL(RED) "\n**** Freeze!! ****\n" VT_RST);
while (true) {
func_800FF4AC(1000); // msleep
Sleep_Msec(1000);
}
}

View file

@ -2,6 +2,7 @@
#include <global.h>
#include <alloca.h>
#include <vt.h>
#include <PR/os_cont.h>
// data
const char* sExceptionNames[] = {
@ -42,7 +43,7 @@ FaultThreadStruct gFaultStruct;
void Fault_SleepImpl(u32 duration) {
u64 value = (duration * OS_CPU_COUNTER) / 1000ull;
func_800FF3A0(value);
Sleep_Cycles(value);
}
void Fault_ClientProcessThread(FaultClientContext* ctx) {
@ -582,7 +583,7 @@ void Fault_DrawMemDump(u32 pc, u32 sp, u32 unk0, u32 unk1) {
count--;
Fault_Sleep(0x10);
Fault_UpdatePadImpl();
if (!~(curInput->padPressed | ~0x20)) {
if (!~(curInput->padPressed | ~L_TRIG)) {
sFaultStructPtr->faultActive = false;
}
}
@ -592,40 +593,40 @@ void Fault_DrawMemDump(u32 pc, u32 sp, u32 unk0, u32 unk1) {
Fault_UpdatePadImpl();
} while (curInput->padPressed == 0);
if (!~(curInput->padPressed | ~0x1000)) {
if (!~(curInput->padPressed | ~START_BUTTON)) {
return;
}
if (!~(curInput->raw.pad | ~0x8000)) {
if (!~(curInput->raw.pad | ~A_BUTTON)) {
return;
}
off = 0x10;
if (!~(curInput->raw.pad | ~0x2000)) {
if (!~(curInput->raw.pad | ~Z_TRIG)) {
off = 0x100;
}
if (!~(curInput->raw.pad | ~0x4000)) {
if (!~(curInput->raw.pad | ~B_BUTTON)) {
off <<= 8;
}
if (!~(curInput->raw.pad | ~0x800)) {
if (!~(curInput->raw.pad | ~U_JPAD)) {
addr -= off;
}
if (!~(curInput->raw.pad | ~0x400)) {
if (!~(curInput->raw.pad | ~D_JPAD)) {
addr += off;
}
if (!~(curInput->raw.pad | ~0x8)) {
if (!~(curInput->raw.pad | ~U_CBUTTONS)) {
addr = pc;
}
if (!~(curInput->raw.pad | ~0x4)) {
if (!~(curInput->raw.pad | ~D_CBUTTONS)) {
addr = sp;
}
if (!~(curInput->raw.pad | ~0x2)) {
if (!~(curInput->raw.pad | ~L_CBUTTONS)) {
addr = unk0;
}
if (!~(curInput->raw.pad | ~0x1)) {
if (!~(curInput->raw.pad | ~R_CBUTTONS)) {
addr = unk1;
}
if (!~(curInput->raw.pad | ~0x20)) {
if (!~(curInput->raw.pad | ~L_TRIG)) {
break;
}
}

View file

@ -388,7 +388,7 @@ Gfx* GfxPrint_Close(GfxPrint* this) {
}
void GfxPrint_VPrintf(GfxPrint* this, const char* fmt, va_list args) {
func_800FF340(&this->callback, fmt, args);
PrintUtils_VPrintf(&this->callback, fmt, args);
}
void GfxPrint_Printf(GfxPrint* this, const char* fmt, ...) {

View file

@ -233,7 +233,7 @@ void PadMgr_Run(PadMgr* padmgr) {
while (bVar2 == 0) {
if ((D_8012D280 > 2) && (padmgr->queue3.validCount == 0)) {
// EUC-JP: コントローラスレッドイベント待ち | Waiting for controller thread event
osSyncPrintf("コントローラスレッドイベント待ち %lld\n", (osGetTime() * 64) / 3000);
osSyncPrintf("コントローラスレッドイベント待ち %lld\n", OS_CYCLES_TO_USEC(osGetTime()));
}
osRecvMesg(&padmgr->queue3, &mesg, OS_MESG_BLOCK);
@ -242,13 +242,13 @@ void PadMgr_Run(PadMgr* padmgr) {
switch (*mesg) {
case OS_SC_RETRACE_MSG:
if (D_8012D280 > 2) {
osSyncPrintf("padmgr_HandleRetraceMsg START %lld\n", (osGetTime() * 64) / 3000);
osSyncPrintf("padmgr_HandleRetraceMsg START %lld\n", OS_CYCLES_TO_USEC(osGetTime()));
}
func_800C7C14(padmgr);
if (D_8012D280 > 2) {
osSyncPrintf("padmgr_HandleRetraceMsg END %lld\n", (osGetTime() * 64) / 3000);
osSyncPrintf("padmgr_HandleRetraceMsg END %lld\n", OS_CYCLES_TO_USEC(osGetTime()));
}
break;

14
src/code/printutils.c Normal file
View file

@ -0,0 +1,14 @@
#include <global.h>
void PrintUtils_VPrintf(char** arg0, const char* fmt, va_list args)
{
_Printf(*arg0, arg0, fmt, args);
}
void PrintUtils_Printf(void* arg0, const char* fmt, ...)
{
va_list args;
va_start(args, fmt);
PrintUtils_VPrintf(arg0, fmt, args);
}

View file

@ -35,7 +35,7 @@ void func_800C8910(SchedContext* sc) {
osSpTaskYield();
if (D_8012D290 != 0) {
osSyncPrintf("%08d:osSpTaskYield\n", (u32)((osGetTime() * 64) / 3000));
osSyncPrintf("%08d:osSpTaskYield\n", (u32)(OS_CYCLES_TO_USEC(osGetTime())));
}
}
}

33
src/code/sleep.c Normal file
View file

@ -0,0 +1,33 @@
#include <global.h>
void Sleep_Cycles(OSTime cycles)
{
OSMesgQueue mq;
OSMesg msg;
OSTimer timer;
osCreateMesgQueue(&mq, &msg, OS_MESG_BLOCK);
osSetTimer(&timer, cycles, 0, &mq, NULL);
osRecvMesg(&mq, NULL, OS_MESG_BLOCK);
}
void Sleep_Nsec(u32 nsec)
{
Sleep_Cycles(OS_NSEC_TO_CYCLES(nsec));
}
void Sleep_Usec(u32 usec)
{
Sleep_Cycles(OS_USEC_TO_CYCLES(usec));
}
// originally "msleep"
void Sleep_Msec(u32 ms)
{
Sleep_Cycles((ms * OS_CPU_COUNTER) / 1000ull);
}
void Sleep_Sec(u32 sec)
{
Sleep_Cycles((sec * OS_CPU_COUNTER));
}

View file

@ -114,7 +114,7 @@ void func_8006390C(Input* input) {
s32 i;
regGroup = (gGameInfo->regGroup * REG_PAGES + gGameInfo->regPage) * REG_PER_PAGE - REG_PER_PAGE;
dpad = input->raw.pad & 0xF00;
dpad = input->raw.pad & (U_JPAD | L_JPAD | R_JPAD | D_JPAD);
if (!~(input->raw.pad | ~L_TRIG) || !~(input->raw.pad | ~R_TRIG) || !~(input->raw.pad | ~START_BUTTON)) {
input_combo = inputCombos;
for (i = 0; i < REG_GROUPS; i++) {

View file

@ -444,15 +444,15 @@ void Cutscene_Command_Terminator(GlobalContext* globalCtx, CutsceneContext* csCt
if ((gSaveContext.game_mode != 0) && (gSaveContext.game_mode != 3) && (globalCtx->sceneNum != SCENE_SPOT00) &&
(csCtx->frames > 20) &&
(!~(globalCtx->state.input[0].padPressed | 0xFFFF7FFF) || !~(globalCtx->state.input[0].padPressed | -0x4001) ||
!~(globalCtx->state.input[0].padPressed | -0x1001)) &&
(!~(globalCtx->state.input[0].padPressed | ~A_BUTTON) || !~(globalCtx->state.input[0].padPressed | ~B_BUTTON) ||
!~(globalCtx->state.input[0].padPressed | ~START_BUTTON)) &&
(gSaveContext.file_num != 0xFEDC) && (globalCtx->sceneLoadFlag == 0)) {
Audio_PlaySoundGeneral(NA_SE_SY_PIECE_OF_HEART, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
temp = 1;
}
if ((csCtx->frames == cmd->startFrame) || (temp != 0) ||
((csCtx->frames > 20) && (!~(globalCtx->state.input[0].padPressed | -0x1001)) &&
((csCtx->frames > 20) && (!~(globalCtx->state.input[0].padPressed | ~START_BUTTON)) &&
(gSaveContext.file_num != 0xFEDC))) {
csCtx->state = CS_STATE_UNSKIPPABLE_EXEC;
func_800F68BC(0);
@ -1524,7 +1524,7 @@ void Cutscene_ProcessCommands(GlobalContext* globalCtx, CutsceneContext* csCtx,
return;
}
if (!~(globalCtx->state.input[0].padPressed | -0x101)) {
if (!~(globalCtx->state.input[0].padPressed | ~R_JPAD)) {
csCtx->state = CS_STATE_UNSKIPPABLE_INIT;
return;
}

View file

@ -1,6 +1,7 @@
#include <ultra64.h>
#include <global.h>
#include <vt.h>
#include <PR/os_cont.h>
typedef struct {
/* 0x00 */ u8 scene;
@ -3981,13 +3982,13 @@ void Interface_Update(GlobalContext* globalCtx) {
u16 action;
Input* input = &globalCtx->state.input[2];
if (!~(input->padPressed | -0x201)) {
if (!~(input->padPressed | ~L_JPAD)) {
gSaveContext.language = 0;
osSyncPrintf("J_N=%x J_N=%x\n", gSaveContext.language, &gSaveContext.language);
} else if (!~(input->padPressed | -0x801)) {
} else if (!~(input->padPressed | ~U_JPAD)) {
gSaveContext.language = 1;
osSyncPrintf("J_N=%x J_N=%x\n", gSaveContext.language, &gSaveContext.language);
} else if (!~(input->padPressed | -0x101)) {
} else if (!~(input->padPressed | ~R_JPAD)) {
gSaveContext.language = 2;
osSyncPrintf("J_N=%x J_N=%x\n", gSaveContext.language, &gSaveContext.language);
}

View file

@ -230,11 +230,7 @@ void func_80095D04(GlobalContext* globalCtx, Room* room, u32 flags) {
#define JPEG_MARKER 0xFFD8FFE0
#ifdef NON_MATCHING
// long multiplication by 64 doesn't quite match
s32 func_80096238(void* data) {
OSTime timeBefore;
OSTime timeAfter;
OSTime time;
if (*(u32*)data == JPEG_MARKER) {
@ -245,13 +241,12 @@ s32 func_80096238(void* data) {
// Translates to: "WORK BUFFER ADDRESS (Z BUFFER) %08x"
osSyncPrintf("ワークバッファアドレス(Zバッファ)%08x\n", gZBuffer);
timeBefore = osGetTime();
time = osGetTime();
if (!func_8006E418(data, gZBuffer, gGfxSPTaskOutputBuffer, sizeof(gGfxSPTaskOutputBuffer))) {
timeAfter = osGetTime();
time = ((timeAfter - timeBefore) * 64) / 3000;
time = osGetTime() - time;
// Translates to: "SUCCESS... I THINK. time = %6.3f ms"
osSyncPrintf("成功…だと思う。 time = %6.3f ms \n", (f64)(time / 1000.0f));
osSyncPrintf("成功…だと思う。 time = %6.3f ms \n", (f64)(OS_CYCLES_TO_USEC(time) / 1000.0f));
// Translates to: "WRITING BACK TO ORIGINAL ADDRESS FROM WORK BUFFER."
osSyncPrintf("ワークバッファから元のアドレスに書き戻します。\n");
// Translates to: "IF THE ORIGINAL BUFFER SIZE ISN'T AT LEAST 150KB, IT WILL BE OUT OF CONTROL."
@ -266,9 +261,6 @@ s32 func_80096238(void* data) {
return 0;
}
#else
#pragma GLOBAL_ASM("asm/non_matchings/code/z_room/func_80096238.s")
#endif
#ifdef NON_MATCHING
// pointer arithmetic doesn't quite match

View file

@ -8,7 +8,7 @@ typedef struct {
u32 ins_0C; // nop
} struct_exceptionPreamble;
u64 osClockRate = 62500000;
u64 osClockRate = OS_CLOCK_RATE;
u32 osViClock = VI_NTSC_CLOCK;
u32 __osShutdown = 0;
u32 __OSGlobalIntMask = 0x003FFF01;

View file

@ -9,7 +9,7 @@
#define ROOM 0x00
#define FLAGS 0x00000015
#define TIMER_SCALE 0.0062500000931322574615478515625f
#define TIMER_SCALE ((f32)OS_CLOCK_RATE/10000000000)
#define DEGREE_60_RAD 1.0471975803375244140625f
#define DEGREE_15_RAD 0.261799395084381103515625f