From d1a5f42eddda9ffb0a3a4e5535b03a56dd2e446c Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Thu, 23 Sep 2021 18:36:28 +1000 Subject: [PATCH] Discover gbpak and rumble functions --- ld/libfiles.ntsc-beta.inc | 10 +- ld/libfiles.ntsc-final.inc | 10 +- ld/libfiles.pal-final.inc | 10 +- src/game/bondgun.c | 44 +- src/game/cheats.c | 4 +- src/game/chr/chraction.c | 8 +- src/game/filelist.c | 6 +- src/game/filemgr.c | 2 +- src/game/game_0b69d0.c | 8 +- src/game/lv.c | 24 +- src/game/pak/pak.c | 645 +++++++++--------- src/include/PR/os_pfs.h | 28 + src/include/constants.h | 17 + src/include/game/bondgun.h | 2 +- src/include/game/pak/pak.h | 42 +- src/include/lib/joy.h | 16 +- src/include/lib/lib_06330.h | 9 - src/include/lib/lib_50be0.h | 9 - src/include/lib/lib_50d60.h | 9 - src/include/lib/lib_50f20.h | 9 - src/include/lib/lib_513b0.h | 9 - src/include/types.h | 12 +- src/lib/joy.c | 170 ++--- src/lib/lib_51570.c | 1 - src/lib/sched.c | 2 +- .../io/gbpakcheckconnector.c} | 24 +- .../io/gbpakgetstatus.c} | 4 +- .../{lib_06330.c => ultra/io/gbpakpower.c} | 2 +- .../{lib_50d60.c => ultra/io/gbpakreadid.c} | 14 +- .../io/gbpakreadwrite.c} | 3 +- src/lib/ultra/io/pfsfilestate.c | 2 - 31 files changed, 581 insertions(+), 574 deletions(-) delete mode 100644 src/include/lib/lib_06330.h delete mode 100644 src/include/lib/lib_50be0.h delete mode 100644 src/include/lib/lib_50d60.h delete mode 100644 src/include/lib/lib_50f20.h delete mode 100644 src/include/lib/lib_513b0.h rename src/lib/{lib_50f20.c => ultra/io/gbpakcheckconnector.c} (96%) rename src/lib/{lib_50be0.c => ultra/io/gbpakgetstatus.c} (98%) rename src/lib/{lib_06330.c => ultra/io/gbpakpower.c} (99%) rename src/lib/{lib_50d60.c => ultra/io/gbpakreadid.c} (95%) rename src/lib/{lib_513b0.c => ultra/io/gbpakreadwrite.c} (99%) diff --git a/ld/libfiles.ntsc-beta.inc b/ld/libfiles.ntsc-beta.inc index 72695d6b5..39b991940 100644 --- a/ld/libfiles.ntsc-beta.inc +++ b/ld/libfiles.ntsc-beta.inc @@ -22,7 +22,7 @@ build/ROMID/lib/ultra/os/initialize.o (section); \ build/ROMID/lib/ultra/io/sptask.o (section); \ build/ROMID/lib/lib_06100.o (section); \ - build/ROMID/lib/lib_06330.o (section); \ + build/ROMID/lib/ultra/io/gbpakpower.o (section); \ build/ROMID/lib/ultra/io/conteeplongwrite.o (section); \ build/ROMID/lib/lib_06550.o (section); \ build/ROMID/lib/lib_070d0.o (section); \ @@ -203,10 +203,10 @@ build/ROMID/lib/ultra/io/pfsreadwritefile.o (section); \ build/ROMID/lib/ultra/io/pfsnumfiles.o (section); \ build/ROMID/lib/ultra/io/pfsfilestate.o (section); \ - build/ROMID/lib/lib_50be0.o (section); \ - build/ROMID/lib/lib_50d60.o (section); \ - build/ROMID/lib/lib_50f20.o (section); \ - build/ROMID/lib/lib_513b0.o (section); \ + build/ROMID/lib/ultra/io/gbpakgetstatus.o (section); \ + build/ROMID/lib/ultra/io/gbpakreadid.o (section); \ + build/ROMID/lib/ultra/io/gbpakcheckconnector.o (section); \ + build/ROMID/lib/ultra/io/gbpakreadwrite.o (section); \ build/ROMID/lib/ultra/os/setcompare.o (section); \ build/ROMID/lib/ultra/io/vimodepallan1.o (section); \ build/ROMID/lib/ultra/io/vimodempallan1.o (section); \ diff --git a/ld/libfiles.ntsc-final.inc b/ld/libfiles.ntsc-final.inc index b42b37a58..1ca189e9e 100644 --- a/ld/libfiles.ntsc-final.inc +++ b/ld/libfiles.ntsc-final.inc @@ -21,7 +21,7 @@ build/ROMID/lib/ultra/os/initialize.o (section); \ build/ROMID/lib/ultra/io/sptask.o (section); \ build/ROMID/lib/lib_06100.o (section); \ - build/ROMID/lib/lib_06330.o (section); \ + build/ROMID/lib/ultra/io/gbpakpower.o (section); \ build/ROMID/lib/ultra/io/conteeplongwrite.o (section); \ build/ROMID/lib/lib_06550.o (section); \ build/ROMID/lib/lib_070d0.o (section); \ @@ -199,10 +199,10 @@ build/ROMID/lib/ultra/io/pfsreadwritefile.o (section); \ build/ROMID/lib/ultra/io/pfsnumfiles.o (section); \ build/ROMID/lib/ultra/io/pfsfilestate.o (section); \ - build/ROMID/lib/lib_50be0.o (section); \ - build/ROMID/lib/lib_50d60.o (section); \ - build/ROMID/lib/lib_50f20.o (section); \ - build/ROMID/lib/lib_513b0.o (section); \ + build/ROMID/lib/ultra/io/gbpakgetstatus.o (section); \ + build/ROMID/lib/ultra/io/gbpakreadid.o (section); \ + build/ROMID/lib/ultra/io/gbpakcheckconnector.o (section); \ + build/ROMID/lib/ultra/io/gbpakreadwrite.o (section); \ build/ROMID/lib/lib_51570.o (section); \ build/ROMID/lib/ultra/io/vimodepallan1.o (section); \ build/ROMID/lib/ultra/io/vimodempallan1.o (section); \ diff --git a/ld/libfiles.pal-final.inc b/ld/libfiles.pal-final.inc index b485a9c6f..972bf9a0c 100644 --- a/ld/libfiles.pal-final.inc +++ b/ld/libfiles.pal-final.inc @@ -21,7 +21,7 @@ build/ROMID/lib/ultra/os/initialize.o (section); \ build/ROMID/lib/ultra/io/sptask.o (section); \ build/ROMID/lib/lib_06100.o (section); \ - build/ROMID/lib/lib_06330.o (section); \ + build/ROMID/lib/ultra/io/gbpakpower.o (section); \ build/ROMID/lib/ultra/io/conteeplongwrite.o (section); \ build/ROMID/lib/lib_06550.o (section); \ build/ROMID/lib/lib_070d0.o (section); \ @@ -199,10 +199,10 @@ build/ROMID/lib/ultra/io/pfsreadwritefile.o (section); \ build/ROMID/lib/ultra/io/pfsnumfiles.o (section); \ build/ROMID/lib/ultra/io/pfsfilestate.o (section); \ - build/ROMID/lib/lib_50be0.o (section); \ - build/ROMID/lib/lib_50d60.o (section); \ - build/ROMID/lib/lib_50f20.o (section); \ - build/ROMID/lib/lib_513b0.o (section); \ + build/ROMID/lib/ultra/io/gbpakgetstatus.o (section); \ + build/ROMID/lib/ultra/io/gbpakreadid.o (section); \ + build/ROMID/lib/ultra/io/gbpakcheckconnector.o (section); \ + build/ROMID/lib/ultra/io/gbpakreadwrite.o (section); \ build/ROMID/lib/lib_51570.o (section); \ build/ROMID/lib/ultra/io/vimodepallan1.o (section); \ build/ROMID/lib/ultra/io/vimodempallan1.o (section); \ diff --git a/src/game/bondgun.c b/src/game/bondgun.c index 1221dd3e0..b6df46ac7 100644 --- a/src/game/bondgun.c +++ b/src/game/bondgun.c @@ -126,7 +126,7 @@ u32 var80070118 = 0x78000000; u32 var8007011c = 0x00000000; #if VERSION >= VERSION_NTSC_1_0 -void bgun0f097ba0(s32 handnum, s32 weaponnum) +void bgunRumble(s32 handnum, s32 weaponnum) { u32 stack; s32 contpadtouse1; @@ -134,24 +134,24 @@ void bgun0f097ba0(s32 handnum, s32 weaponnum) bool singlewield = false; s32 contpad1; s32 contpad2; - s32 a; - s32 b; + s32 contpad1hasrumble; + s32 contpad2hasrumble; joyGetContpadNumsForPlayer(g_Vars.currentplayernum, &contpad1, &contpad2); if (optionsGetControlMode(g_Vars.currentplayerstats->mpindex) >= CONTROLMODE_21 && contpad1 >= 0 && contpad2 >= 0) { - a = pak0f116914(contpad1) == 1; - b = pak0f116914(contpad2) == 1; + contpad1hasrumble = pakGetType(contpad1) == PAKTYPE_RUMBLE; + contpad2hasrumble = pakGetType(contpad2) == PAKTYPE_RUMBLE; if (!weaponHasFlag(weaponnum, WEAPONFLAG_DUALWIELD)) { singlewield = true; } - if (a && b) { + if (contpad1hasrumble && contpad2hasrumble) { if (singlewield) { - pak0f11dc04(contpad1, 0.2f, 2, 4); - pak0f11dc04(contpad2, 0.2f, 2, 4); + pakRumble(contpad1, 0.2f, 2, 4); + pakRumble(contpad2, 0.2f, 2, 4); } else { s32 contpadtouse1 = contpad1; @@ -159,26 +159,26 @@ void bgun0f097ba0(s32 handnum, s32 weaponnum) contpadtouse1 = contpad2; } - pak0f11dc04(contpadtouse1, 0.2f, 2, 4); + pakRumble(contpadtouse1, 0.2f, 2, 4); } } else { s32 contpadtouse2 = contpad1; - if (b) { + if (contpad2hasrumble) { contpadtouse2 = contpad2; } - pak0f11dc04(contpadtouse2, 0.2f, 2, 4); + pakRumble(contpadtouse2, 0.2f, 2, 4); } } else { if (contpad1 >= 0) { - pak0f11dc04(contpad1, 0.2f, 2, 4); + pakRumble(contpad1, 0.2f, 2, 4); } } } #else GLOBAL_ASM( -glabel bgun0f097ba0 +glabel bgunRumble /* f095b30: 27bdffd0 */ addiu $sp,$sp,-48 /* f095b34: 3c08800a */ lui $t0,0x800a /* f095b38: 2508e6c0 */ addiu $t0,$t0,-6464 @@ -192,7 +192,7 @@ glabel bgun0f097ba0 /* f095b58: 28410004 */ slti $at,$v0,0x4 /* f095b5c: 1420007c */ bnez $at,.NB0f095d50 /* f095b60: 2508e6c0 */ addiu $t0,$t0,-6464 -/* f095b64: 0fc44336 */ jal pak0f116914 +/* f095b64: 0fc44336 */ jal pakGetType /* f095b68: 8104028f */ lb $a0,0x28f($t0) /* f095b6c: 3c08800a */ lui $t0,0x800a /* f095b70: 2508e6c0 */ addiu $t0,$t0,-6464 @@ -233,7 +233,7 @@ glabel bgun0f097ba0 /* f095be8: 01f82021 */ addu $a0,$t7,$t8 /* f095bec: 0004ce00 */ sll $t9,$a0,0x18 /* f095bf0: 00192603 */ sra $a0,$t9,0x18 -/* f095bf4: 0fc44336 */ jal pak0f116914 +/* f095bf4: 0fc44336 */ jal pakGetType /* f095bf8: afa6001c */ sw $a2,0x1c($sp) /* f095bfc: 8fa6001c */ lw $a2,0x1c($sp) /* f095c00: 3c08800a */ lui $t0,0x800a @@ -282,7 +282,7 @@ glabel bgun0f097ba0 /* f095c98: 34a5cccd */ ori $a1,$a1,0xcccd /* f095c9c: 03002025 */ or $a0,$t8,$zero /* f095ca0: 24060002 */ addiu $a2,$zero,0x2 -/* f095ca4: 0fc45e2f */ jal pak0f11dc04 +/* f095ca4: 0fc45e2f */ jal pakRumble /* f095ca8: 24070004 */ addiu $a3,$zero,0x4 /* f095cac: 1000002f */ beqz $zero,.NB0f095d6c /* f095cb0: 8fbf0014 */ lw $ra,0x14($sp) @@ -327,7 +327,7 @@ glabel bgun0f097ba0 /* f095d34: 34a5cccd */ ori $a1,$a1,0xcccd /* f095d38: 01a02025 */ or $a0,$t5,$zero /* f095d3c: 24060002 */ addiu $a2,$zero,0x2 -/* f095d40: 0fc45e2f */ jal pak0f11dc04 +/* f095d40: 0fc45e2f */ jal pakRumble /* f095d44: 24070004 */ addiu $a3,$zero,0x4 /* f095d48: 10000008 */ beqz $zero,.NB0f095d6c /* f095d4c: 8fbf0014 */ lw $ra,0x14($sp) @@ -336,7 +336,7 @@ glabel bgun0f097ba0 /* f095d54: 34a5cccd */ ori $a1,$a1,0xcccd /* f095d58: 8104028f */ lb $a0,0x28f($t0) /* f095d5c: 24060002 */ addiu $a2,$zero,0x2 -/* f095d60: 0fc45e2f */ jal pak0f11dc04 +/* f095d60: 0fc45e2f */ jal pakRumble /* f095d64: 24070004 */ addiu $a3,$zero,0x4 /* f095d68: 8fbf0014 */ lw $ra,0x14($sp) .NB0f095d6c: @@ -5903,7 +5903,7 @@ glabel var7f1ac320 /* f09a868: 8fad0058 */ lw $t5,0x58($sp) /* f09a86c: 8fa4005c */ lw $a0,0x5c($sp) /* f09a870: 8da50000 */ lw $a1,0x0($t5) -/* f09a874: 0fc25ee8 */ jal bgun0f097ba0 +/* f09a874: 0fc25ee8 */ jal bgunRumble /* f09a878: afa70064 */ sw $a3,0x64($sp) /* f09a87c: 8fae0054 */ lw $t6,0x54($sp) /* f09a880: 24060001 */ addiu $a2,$zero,0x1 @@ -6233,7 +6233,7 @@ glabel var7f1ac320 /* f09a868: 8fad0058 */ lw $t5,0x58($sp) /* f09a86c: 8fa4005c */ lw $a0,0x5c($sp) /* f09a870: 8da50000 */ lw $a1,0x0($t5) -/* f09a874: 0fc25ee8 */ jal bgun0f097ba0 +/* f09a874: 0fc25ee8 */ jal bgunRumble /* f09a878: afa70064 */ sw $a3,0x64($sp) /* f09a87c: 8fae0054 */ lw $t6,0x54($sp) /* f09a880: 24060001 */ addiu $a2,$zero,0x1 @@ -6563,7 +6563,7 @@ glabel var7f1ac320 /* f0988a4: 8fad0050 */ lw $t5,0x50($sp) /* f0988a8: 8fa40054 */ lw $a0,0x54($sp) /* f0988ac: 8da50000 */ lw $a1,0x0($t5) -/* f0988b0: 0fc256cc */ jal bgun0f097ba0 +/* f0988b0: 0fc256cc */ jal bgunRumble /* f0988b4: afa7005c */ sw $a3,0x5c($sp) /* f0988b8: 8fae004c */ lw $t6,0x4c($sp) /* f0988bc: 24060001 */ addiu $a2,$zero,0x1 @@ -6835,7 +6835,7 @@ const char var7f1ab898[] = "rofftime"; // hand->stateflags |= HANDSTATEFLAG_00000020; // hand->stateflags |= HANDSTATEFLAG_00000010; // -// bgun0f097ba0(handnum, info->weaponnum); +// bgunRumble(handnum, info->weaponnum); // // if (usesammo && func->ammoindex >= 0) { // hand->loadedammo[func->ammoindex] -= hand->shotstotake; diff --git a/src/game/cheats.c b/src/game/cheats.c index 08ac3a246..ad657581a 100644 --- a/src/game/cheats.c +++ b/src/game/cheats.c @@ -467,7 +467,7 @@ s32 cheatMenuHandleDialog(s32 operation, struct menudialog *dialog, union handle if (operation == MENUOP_OPEN) { func0f14a52c(); - if (pak0f11e78c()) { + if (gbpakIsAnyPerfectDark()) { gamefileSetFlag(GAMEFILEFLAG_USED_TRANSFERPAK); } @@ -497,7 +497,7 @@ s32 cheatMenuHandleDialog(s32 operation, struct menudialog *dialog, union handle } if (operation == MENUOP_CLOSE) { - if (pak0f11e78c()) { + if (gbpakIsAnyPerfectDark()) { gamefileSetFlag(GAMEFILEFLAG_USED_TRANSFERPAK); } diff --git a/src/game/chr/chraction.c b/src/game/chr/chraction.c index 7fd355d50..6cc0f47d5 100644 --- a/src/game/chr/chraction.c +++ b/src/game/chr/chraction.c @@ -4502,19 +4502,19 @@ void chrDamage(struct chrdata *chr, f32 damage, struct coord *vector, struct gse joyGetContpadNumsForPlayer(g_Vars.currentplayernum, &contpad1, &contpad2); if (contpad1 >= 0) { - pak0f11dc04(contpad1, 0.25f, -1, -1); + pakRumble(contpad1, 0.25f, -1, -1); } if (contpad2 >= 0) { - pak0f11dc04(contpad2, 0.25f, -1, -1); + pakRumble(contpad2, 0.25f, -1, -1); } #else setCurrentPlayerNum(propGetPlayerNum(vprop)); - pak0f11dc04((s8)g_Vars.currentplayernum, 0.25f, -1, -1); + pakRumble((s8)g_Vars.currentplayernum, 0.25f, -1, -1); if (optionsGetControlMode(g_Vars.currentplayerstats->mpindex) >= CONTROLMODE_21) { - pak0f11dc04((s8)(PLAYERCOUNT() + g_Vars.currentplayernum), 0.25f, -1, -1); + pakRumble((s8)(PLAYERCOUNT() + g_Vars.currentplayernum), 0.25f, -1, -1); } #endif diff --git a/src/game/filelist.c b/src/game/filelist.c index d257ef57b..ff6b12a33 100644 --- a/src/game/filelist.c +++ b/src/game/filelist.c @@ -225,7 +225,7 @@ void filelistUpdate(struct filelist *list) } list->deviceguids[dis2dev[i]].fileid = 0; - list->deviceguids[dis2dev[i]].deviceserial = pakGetDeviceSerial(dis2dev[i]); + list->deviceguids[dis2dev[i]].deviceserial = pakGetSerial(dis2dev[i]); } else { // PFS error? list->spacesfree[dis2dev[i]] = -1; @@ -254,7 +254,7 @@ void filelistUpdate(struct filelist *list) list->devicestartindexes[dev2dis[filedevices[i]]] = list->numfiles; } - file->deviceserial = pakGetDeviceSerial(filedevices[i]); + file->deviceserial = pakGetSerial(filedevices[i]); file->fileid = sp1288[i]; list->numfiles++; @@ -267,7 +267,7 @@ void filelistUpdate(struct filelist *list) if (list->deviceguids[filedevices[i]].fileid == 0) { list->deviceguids[filedevices[i]].fileid = sp1288[i]; - list->deviceguids[filedevices[i]].deviceserial = pakGetDeviceSerial(filedevices[i]); + list->deviceguids[filedevices[i]].deviceserial = pakGetSerial(filedevices[i]); } } } diff --git a/src/game/filemgr.c b/src/game/filemgr.c index 0f355753c..74488e585 100644 --- a/src/game/filemgr.c +++ b/src/game/filemgr.c @@ -2423,7 +2423,7 @@ char *pakMenuTextEditingPakName(struct menuitem *item) s32 pakSelectionMenuHandler(s32 operation, struct menuitem *item, union handlerdata *data) { if (operation == MENUOP_CHECKDISABLED) { - if (!pakIsConnected((s8)item->param)) { + if (!pakIsMemoryPak((s8)item->param)) { return true; } } diff --git a/src/game/game_0b69d0.c b/src/game/game_0b69d0.c index 8c1e1a1a7..8dc46387a 100644 --- a/src/game/game_0b69d0.c +++ b/src/game/game_0b69d0.c @@ -559,7 +559,7 @@ glabel var7f1ad568 /* f0b7318: adc80004 */ sw $t0,0x4($t6) /* f0b731c: adc10008 */ sw $at,0x8($t6) /* f0b7320: 8e31d03c */ lw $s1,%lo(g_StageSetup+0xc)($s1) -/* f0b7324: 0fc47788 */ jal pak0f11de20 +/* f0b7324: 0fc47788 */ jal pakEnableRumbleForPlayer /* f0b7328: 8244028f */ lb $a0,0x28f($s2) /* f0b732c: 8e490284 */ lw $t1,0x284($s2) /* f0b7330: a12019b3 */ sb $zero,0x19b3($t1) @@ -896,7 +896,7 @@ glabel var7f1ad568 // u32 stack[4]; // s32 aiStack188[34]; // 5c // -// pak0f11de20(g_Vars.currentplayernum); +// pakEnableRumbleForPlayer(g_Vars.currentplayernum); // // g_Vars.currentplayer->dostartnewlife = false; // @@ -3473,7 +3473,7 @@ void func0f0ba010(void) var8009de2c = -1; g_InCutscene = 1; - pak0f11dcb0(1); + pakStopRumbleForAllPaks(true); g_Vars.in_cutscene = g_Vars.tickmode == TICKMODE_CUTSCENE && g_CutsceneCurAnimFrame60 < animGetNumFrames(g_CutsceneAnimNum) - 1; g_Vars.cutsceneskip60ths = 0; } @@ -14136,7 +14136,7 @@ Gfx *currentPlayerRenderHud(Gfx *gdl) bool pass = false; if (g_Vars.currentplayer->isdead == 1) { - pak0f11dd58(g_Vars.currentplayernum); + pakDisableRumbleForPlayer(g_Vars.currentplayernum); g_Vars.currentplayer->isdead = 2; pass = true; } diff --git a/src/game/lv.c b/src/game/lv.c index cb2621572..e425d79d6 100644 --- a/src/game/lv.c +++ b/src/game/lv.c @@ -650,12 +650,12 @@ glabel var7f1b1f44nc /* f1627d0: 3c018008 */ lui $at,0x8008 /* f1627d4: ac206874 */ sw $zero,0x6874($at) /* f1627d8: 3c018008 */ lui $at,0x8008 -/* f1627dc: 0c005812 */ jal joy000150c4 +/* f1627dc: 0c005812 */ jal joyIsCyclicPollingEnabled /* f1627e0: ac206870 */ sw $zero,0x6870($at) /* f1627e4: 10400008 */ beqz $v0,.NB0f162808 /* f1627e8: 3c057f1b */ lui $a1,0x7f1b /* f1627ec: 24a51e20 */ addiu $a1,$a1,0x1e20 -/* f1627f0: 0c00581b */ jal joyGetLock +/* f1627f0: 0c00581b */ jal joyDisableCyclicPolling /* f1627f4: 240402f8 */ addiu $a0,$zero,0x2f8 /* f1627f8: 3c11800a */ lui $s1,0x800a /* f1627fc: 2631e6c0 */ addiu $s1,$s1,-6464 @@ -6948,7 +6948,7 @@ glabel var7f1b8ed0pf /* f16c7a4: 10000003 */ b .PF0f16c7b4 /* f16c7a8: a28004d1 */ sb $zero,0x4d1($s4) .PF0f16c7ac: -/* f16c7ac: 0fc47a8d */ jal pak0f11df38 +/* f16c7ac: 0fc47a8d */ jal pakEnableRumbleForAllPlayers /* f16c7b0: a29804d1 */ sb $t8,0x4d1($s4) .PF0f16c7b4: /* f16c7b4: 2415ffff */ li $s5,-1 @@ -8222,7 +8222,7 @@ void lvTick(void) g_Vars.paksconnected2 = 0; } else { g_Vars.paksconnected2 = 31; - pak0f11df38(); + pakEnableRumbleForAllPlayers(); } g_Vars.joydisableframestogo = -1; @@ -8566,12 +8566,12 @@ glabel lvTick .NB0f166764: /* f166764: 14400018 */ bnez $v0,.NB0f1667c8 /* f166768: 00000000 */ sll $zero,$zero,0x0 -/* f16676c: 0c005812 */ jal joy000150c4 +/* f16676c: 0c005812 */ jal joyIsCyclicPollingEnabled /* f166770: 00000000 */ sll $zero,$zero,0x0 /* f166774: 14400004 */ bnez $v0,.NB0f166788 /* f166778: 24040cce */ addiu $a0,$zero,0xcce /* f16677c: 3c057f1b */ lui $a1,0x7f1b -/* f166780: 0c005834 */ jal joyReleaseLock +/* f166780: 0c005834 */ jal joyEnableCyclicPolling /* f166784: 24a51e98 */ addiu $a1,$a1,0x1e98 .NB0f166788: /* f166788: 8e8204b4 */ lw $v0,0x4b4($s4) @@ -8588,7 +8588,7 @@ glabel lvTick /* f1667b0: 10000003 */ beqz $zero,.NB0f1667c0 /* f1667b4: a28004d1 */ sb $zero,0x4d1($s4) .NB0f1667b8: -/* f1667b8: 0fc45ecc */ jal pak0f11df38 +/* f1667b8: 0fc45ecc */ jal pakEnableRumbleForAllPlayers /* f1667bc: a28f04d1 */ sb $t7,0x4d1($s4) .NB0f1667c0: /* f1667c0: 2415ffff */ addiu $s5,$zero,-1 @@ -9821,7 +9821,7 @@ void lvRecordDistanceMoved(void) void lvReset(void) { - pak0f11dcb0(1); + pakStopRumbleForAllPaks(true); if (g_MiscAudioHandle && audioIsPlaying(g_MiscAudioHandle)) { audioStop(g_MiscAudioHandle); @@ -9872,9 +9872,9 @@ void lvCheckPauseStateChanged(void) if (paused != var80084010) { if (paused) { - pak0f11deb8(); + pakDisableRumbleForAllPlayers(); } else { - pak0f11df38(); + pakEnableRumbleForAllPlayers(); } } @@ -9884,11 +9884,11 @@ void lvCheckPauseStateChanged(void) void lvSetPaused(bool paused) { if (paused) { - pak0f11deb8(); + pakDisableRumbleForAllPlayers(); snd0000fe20(); } else { snd0000fe50(); - pak0f11df38(); + pakEnableRumbleForAllPlayers(); } var80084014 = paused; diff --git a/src/game/pak/pak.c b/src/game/pak/pak.c index c62608143..04027b57c 100644 --- a/src/game/pak/pak.c +++ b/src/game/pak/pak.c @@ -10,14 +10,12 @@ #include "lib/args.h" #include "lib/joy.h" #include "lib/lib_06100.h" -#include "lib/lib_06330.h" #include "lib/lib_06440.h" #include "lib/lib_06550.h" #include "lib/main.h" #include "lib/memory.h" #include "lib/rng.h" #include "lib/lib_4e090.h" -#include "lib/lib_513b0.h" #include "data.h" #include "types.h" @@ -246,9 +244,9 @@ u32 pakGenerateSerial(s8 device) } #endif -bool pakIsConnected(s8 device) +bool pakIsMemoryPak(s8 device) { - if (g_Paks[device].unk000 == 2) { + if (g_Paks[device].type == PAKTYPE_MEMORY) { switch (g_Paks[device].unk010) { case 0x0e: case 0x0f: @@ -286,12 +284,12 @@ s32 pak0f116828(s8 device, s32 fileid, s32 filetype, u8 *body, s32 *outfileid, s bool pakDeleteFile(s8 device, s32 fileid) { - return pakDeleteFile2(device, fileid); + return _pakDeleteFile(device, fileid); } s32 pakDeleteGameNote(s8 device, u16 company_code, u32 game_code, char *game_name, char *ext_name) { - return pakDeleteGameNote2(device, company_code, game_code, game_name, ext_name); + return _pakDeleteGameNote(device, company_code, game_code, game_name, ext_name); } s32 pak0f1168c4(s8 device, struct pakdata **arg1) @@ -304,14 +302,14 @@ s32 pak0f1168ec(s8 device, u8 *olddata) return pak0f118230(device, olddata); } -u32 pak0f116914(s8 device) +u32 pakGetType(s8 device) { - return pakGetUnk000(device); + return _pakGetType(device); } -s32 pakGetDeviceSerial(s8 device) +s32 pakGetSerial(s8 device) { - return pakGetSerial(device); + return _pakGetSerial(device); } void pak0f116984(s8 arg0, u8 *arg1, u8 *arg2) @@ -390,7 +388,7 @@ void pak0f1169c8(s8 device, s32 arg1) bool pak0f116aec(s8 device) { - if (g_Paks[device].unk010 == 11 && g_Paks[device].unk000 == 2) { + if (g_Paks[device].unk010 == 11 && g_Paks[device].type == PAKTYPE_MEMORY) { return true; } @@ -402,7 +400,7 @@ bool pak0f116b5c(s8 device) if ((g_Paks[device].unk010 == 11 || g_Paks[device].unk010 == 16 || g_Paks[device].unk010 == 21) - && g_Paks[device].unk000 == 2) { + && g_Paks[device].type == PAKTYPE_MEMORY) { return true; } @@ -420,14 +418,14 @@ void pak0f116c2c(s8 index) joySetPfsTemporarilyPlugged(index); } -u16 pakGetSerial(s8 device) +u16 _pakGetSerial(s8 device) { return g_Paks[device].serial; } -u32 pakGetUnk000(s8 device) +u32 _pakGetType(s8 device) { - return g_Paks[device].unk000; + return g_Paks[device].type; } ubool pak0f116cd4(s8 device) @@ -463,21 +461,21 @@ s32 pak0f116df0(s8 device, struct pakdata **pakdata) return 1; } -s32 pakDeleteGameNote2(s8 device, u16 company_code, u32 game_code, char *game_name, char *ext_name) +s32 _pakDeleteGameNote(s8 device, u16 company_code, u32 game_code, char *game_name, char *ext_name) { s32 result; if (pak0f116b5c(device)) { #if VERSION >= VERSION_NTSC_1_0 - joyGetLock(); + joyDisableCyclicPolling(); #else - joyGetLock(123, "pak.c"); + joyDisableCyclicPolling(123, "pak.c"); #endif result = pakDeleteGameNote3(PFS(device), company_code, game_code, game_name, ext_name); #if VERSION >= VERSION_NTSC_1_0 - joyReleaseLock(); + joyEnableCyclicPolling(); #else - joyReleaseLock(123, "pak.c"); + joyEnableCyclicPolling(123, "pak.c"); #endif if (pakHandleResult(result, device, 1, VERSION >= VERSION_NTSC_FINAL ? 825 : 822)) { @@ -510,7 +508,7 @@ const char var7f1ad8b0n0[] = "????????"; #endif #if VERSION >= VERSION_NTSC_1_0 -s32 pakDeleteFile2(s8 device, s32 fileid) +s32 _pakDeleteFile(s8 device, s32 fileid) { struct pakfileheader header; s32 result = pakFindFile(device, fileid, &header); @@ -528,7 +526,7 @@ s32 pakDeleteFile2(s8 device, s32 fileid) return 0; } #else -s32 pakDeleteFile2(s8 device, s32 fileid) +s32 _pakDeleteFile(s8 device, s32 fileid) { struct pakfileheader header; u32 result; @@ -725,14 +723,14 @@ s32 pakGetUnk270(s8 device) return g_Paks[device].unk270; } -s32 pakGetUnk004(s8 device) +s32 pakGetRumbleState(s8 device) { - return g_Paks[device].unk004; + return g_Paks[device].rumblestate; } -void pakSetUnk004(s8 device, s32 value) +void pakSetRumbleState(s8 device, s32 state) { - g_Paks[device].unk004 = value; + g_Paks[device].rumblestate = state; } s32 pak0f117350(s8 device) @@ -870,15 +868,15 @@ void pakDumpEeprom(void) u8 buffer[2048]; #if VERSION >= VERSION_NTSC_1_0 - joyGetLock(); + joyDisableCyclicPolling(); #else - joyGetLock(1098, "pak.c"); + joyDisableCyclicPolling(1098, "pak.c"); #endif osEepromLongRead(&var80099e78, 0, buffer, 2048); #if VERSION >= VERSION_NTSC_1_0 - joyReleaseLock(); + joyEnableCyclicPolling(); #else - joyReleaseLock(1100, "pak.c"); + joyEnableCyclicPolling(1100, "pak.c"); #endif pakDumpBuffer(buffer, 2048, "EEPROM DUMP"); @@ -1284,15 +1282,15 @@ s32 pak0f117c0c(s32 arg0, s32 *arg1, s32 *arg2) s32 result; #if VERSION >= VERSION_NTSC_1_0 - joyGetLock(); + joyDisableCyclicPolling(); #else - joyGetLock(1308, "pak.c"); + joyDisableCyclicPolling(1308, "pak.c"); #endif result = osPfsNumFiles(arg0, arg1, arg2); #if VERSION >= VERSION_NTSC_1_0 - joyReleaseLock(); + joyEnableCyclicPolling(); #else - joyReleaseLock(1310, "pak.c"); + joyEnableCyclicPolling(1310, "pak.c"); #endif return result; @@ -1314,17 +1312,17 @@ s32 pakFreeBlocks(OSPfs *pfs, s32 *bytes_not_used) s32 result; #if VERSION >= VERSION_NTSC_1_0 - joyGetLock(); + joyDisableCyclicPolling(); #else - joyGetLock(1337, "pak.c"); + joyDisableCyclicPolling(1337, "pak.c"); #endif result = osPfsFreeBlocks(pfs, bytes_not_used); #if VERSION >= VERSION_NTSC_1_0 - joyReleaseLock(); + joyEnableCyclicPolling(); #else - joyReleaseLock(1339, "pak.c"); + joyEnableCyclicPolling(1339, "pak.c"); #endif return result; @@ -1345,17 +1343,17 @@ s32 pakFileState(OSPfs *pfs, s32 file_no, OSPfsState *note) s32 result; #if VERSION >= VERSION_NTSC_1_0 - joyGetLock(); + joyDisableCyclicPolling(); #else - joyGetLock(1363, "pak.c"); + joyDisableCyclicPolling(1363, "pak.c"); #endif result = osPfsFileState(pfs, file_no, note); #if VERSION >= VERSION_NTSC_1_0 - joyReleaseLock(); + joyEnableCyclicPolling(); #else - joyReleaseLock(1365, "pak.c"); + joyEnableCyclicPolling(1365, "pak.c"); #endif return result; @@ -1450,17 +1448,17 @@ s32 pak0f117ec0(OSPfs *pfs, u16 company_code, u32 game_code, u8 *game_name, u8 * s32 result; #if VERSION >= VERSION_NTSC_1_0 - joyGetLock(); + joyDisableCyclicPolling(); #else - joyGetLock(1496, "pak.c"); + joyDisableCyclicPolling(1496, "pak.c"); #endif result = func00006550(pfs, company_code, game_code, game_name, ext_name, numbytes); #if VERSION >= VERSION_NTSC_1_0 - joyReleaseLock(); + joyEnableCyclicPolling(); #else - joyReleaseLock(1498, "pak.c"); + joyEnableCyclicPolling(1498, "pak.c"); #endif return result; @@ -1653,7 +1651,7 @@ s32 pak0f118334(s8 device, s32 numpages) void pak0f1184d8(s8 device, u32 *arg1, bool *arg2) { if (device != SAVEDEVICE_GAMEPAK) { - if (g_Paks[device].unk000 != 2 || g_Paks[device].unk010 != 11) { + if (g_Paks[device].type != PAKTYPE_MEMORY || g_Paks[device].unk010 != 11) { pak0f1185e0(device, g_Paks[SAVEDEVICE_GAMEPAK].unk2bd & 0x0f, 1); device = SAVEDEVICE_GAMEPAK; } @@ -2439,7 +2437,7 @@ glabel pak0f118674 // } // // g_Paks[(u32)device].unk010 = 16; -// g_Paks[(u32)device].unk000 = 2; +// g_Paks[(u32)device].type = PAKTYPE_MEMORY; // // return 4; //} @@ -3266,7 +3264,7 @@ glabel pak0f1190bc u32 pak0f119298(s8 device) { - if (g_Paks[device].unk000 != 2) { + if (g_Paks[device].type != PAKTYPE_MEMORY) { return 1; } @@ -5530,14 +5528,14 @@ glabel pakCorrupt /* f119e20: 0fc464da */ jal pakFindFile /* f119e24: 02803025 */ or $a2,$s4,$zero /* f119e28: 00538021 */ addu $s0,$v0,$s3 -/* f119e2c: 0c00543a */ jal joyGetLock +/* f119e2c: 0c00543a */ jal joyDisableCyclicPolling /* f119e30: 26100030 */ addiu $s0,$s0,0x30 /* f119e34: 02a02025 */ or $a0,$s5,$zero /* f119e38: 320500ff */ andi $a1,$s0,0xff /* f119e3c: 02c03025 */ or $a2,$s6,$zero /* f119e40: 0c001910 */ jal osEepromLongWrite /* f119e44: 24070008 */ addiu $a3,$zero,0x8 -/* f119e48: 0c005451 */ jal joyReleaseLock +/* f119e48: 0c005451 */ jal joyEnableCyclicPolling /* f119e4c: 00000000 */ sll $zero,$zero,0x0 /* f119e50: 8e580004 */ lw $t8,0x4($s2) /* f119e54: 26520004 */ addiu $s2,$s2,0x4 @@ -5581,9 +5579,9 @@ glabel pakCorrupt // address += i * 8; // address += 0x30; // -// joyGetLock(); +// joyDisableCyclicPolling(); // osEepromLongWrite(&var80099e78, address, buffer8, 8); -// joyReleaseLock(); +// joyEnableCyclicPolling(); // } //} #endif @@ -6184,9 +6182,9 @@ glabel pakInit //{ // g_Paks[device].unk274 = 3; // g_Paks[device].unk014 = 0; -// g_Paks[device].unk000 = 0; +// g_Paks[device].type = PAKTYPE_NONE; // g_Paks[device].unk008 = 1; -// g_Paks[device].unk004 = 1; +// g_Paks[device].rumblestate = RUMBLESTATE_1; // g_Paks[device].unk00c = 3; // g_Paks[device].unk010 = 0; // g_Paks[device].noteindex = -1; @@ -6203,7 +6201,7 @@ glabel pakInit // g_Paks[device].nextfileid = 8; // g_Paks[device].serial = 0; // g_Paks[device].unk2c8 = 0; -// g_Paks[device].unk2b4 = -1; +// g_Paks[device].rumblettl = -1; //} s32 pakReadWriteBlock(s8 device, OSPfs *pfs, s32 file_no, u8 flag, u32 address, u32 len, u8 *buffer) @@ -6212,17 +6210,17 @@ s32 pakReadWriteBlock(s8 device, OSPfs *pfs, s32 file_no, u8 flag, u32 address, len = pakAlign(device, len); #if VERSION >= VERSION_NTSC_1_0 - joyGetLock(); + joyDisableCyclicPolling(); #else - joyGetLock(3096, "pak.c"); + joyDisableCyclicPolling(3096, "pak.c"); #endif result = _pakReadWriteBlock(pfs, file_no, flag, address, len, buffer); #if VERSION >= VERSION_NTSC_1_0 - joyReleaseLock(); + joyEnableCyclicPolling(); #else - joyReleaseLock(3098, "pak.c"); + joyEnableCyclicPolling(3098, "pak.c"); #endif return result; @@ -6584,7 +6582,7 @@ glabel pak0f11a7dc /* f11a7ec: afbf001c */ sw $ra,0x1c($sp) /* f11a7f0: 01c08825 */ or $s1,$t6,$zero /* f11a7f4: afb00014 */ sw $s0,0x14($sp) -/* f11a7f8: 0c00543a */ jal joyGetLock +/* f11a7f8: 0c00543a */ jal joyDisableCyclicPolling /* f11a7fc: afa40050 */ sw $a0,0x50($sp) /* f11a800: 24010004 */ addiu $at,$zero,0x4 /* f11a804: 16210003 */ bne $s1,$at,.L0f11a814 @@ -6615,7 +6613,7 @@ glabel pak0f11a7dc /* f11a860: 8e05029c */ lw $a1,0x29c($s0) /* f11a864: 0fc45f39 */ jal pakFileState /* f11a868: 27a6002c */ addiu $a2,$sp,0x2c -/* f11a86c: 0c005451 */ jal joyReleaseLock +/* f11a86c: 0c005451 */ jal joyEnableCyclicPolling /* f11a870: afa20028 */ sw $v0,0x28($sp) /* f11a874: 00112e00 */ sll $a1,$s1,0x18 /* f11a878: 00054e03 */ sra $t1,$a1,0x18 @@ -6665,7 +6663,7 @@ glabel pak0f11a7dc /* f1146ac: 01c08825 */ or $s1,$t6,$zero /* f1146b0: afb00014 */ sw $s0,0x14($sp) /* f1146b4: 24a5e304 */ addiu $a1,$a1,-7420 -/* f1146b8: 0c00581b */ jal joyGetLock +/* f1146b8: 0c00581b */ jal joyDisableCyclicPolling /* f1146bc: 24040caa */ addiu $a0,$zero,0xcaa /* f1146c0: 24010004 */ addiu $at,$zero,0x4 /* f1146c4: 16210003 */ bne $s1,$at,.NB0f1146d4 @@ -6697,7 +6695,7 @@ glabel pak0f11a7dc /* f114724: 3c057f1b */ lui $a1,0x7f1b /* f114728: afa20028 */ sw $v0,0x28($sp) /* f11472c: 24a5e30c */ addiu $a1,$a1,-7412 -/* f114730: 0c005834 */ jal joyReleaseLock +/* f114730: 0c005834 */ jal joyEnableCyclicPolling /* f114734: 24040cac */ addiu $a0,$zero,0xcac /* f114738: 00112e00 */ sll $a1,$s1,0x18 /* f11473c: 00054e03 */ sra $t1,$a1,0x18 @@ -6748,7 +6746,7 @@ glabel pak0f1147b8nb /* f1147d0: 3c057f1b */ lui $a1,0x7f1b /* f1147d4: 01c08025 */ or $s0,$t6,$zero /* f1147d8: 24a5e39c */ addiu $a1,$a1,-7268 -/* f1147dc: 0c00581b */ jal joyGetLock +/* f1147dc: 0c00581b */ jal joyDisableCyclicPolling /* f1147e0: 24040cc8 */ addiu $a0,$zero,0xcc8 /* f1147e4: 24010004 */ addiu $at,$zero,0x4 /* f1147e8: 16010003 */ bne $s0,$at,.NB0f1147f8 @@ -6771,7 +6769,7 @@ glabel pak0f1147b8nb /* f114824: 3c057f1b */ lui $a1,0x7f1b /* f114828: afa20020 */ sw $v0,0x20($sp) /* f11482c: 24a5e3a4 */ addiu $a1,$a1,-7260 -/* f114830: 0c005834 */ jal joyReleaseLock +/* f114830: 0c005834 */ jal joyEnableCyclicPolling /* f114834: 24040cca */ addiu $a0,$zero,0xcca /* f114838: 00102e00 */ sll $a1,$s0,0x18 /* f11483c: 0005ce03 */ sra $t9,$a1,0x18 @@ -6855,7 +6853,7 @@ glabel pak0f11a8f4 /* f11a980: 100000b9 */ beqz $zero,.L0f11ac68 /* f11a984: 00001025 */ or $v0,$zero,$zero .L0f11a988: -/* f11a988: 0c00543a */ jal joyGetLock +/* f11a988: 0c00543a */ jal joyDisableCyclicPolling /* f11a98c: 00000000 */ sll $zero,$zero,0x0 /* f11a990: 24010004 */ addiu $at,$zero,0x4 /* f11a994: 16210003 */ bne $s1,$at,.L0f11a9a4 @@ -6883,7 +6881,7 @@ glabel pak0f11a8f4 /* f11a9e4: 34c64445 */ ori $a2,$a2,_gamecode /* f11a9e8: 0fc45f96 */ jal pakFindNote /* f11a9ec: afaf0010 */ sw $t7,0x10($sp) -/* f11a9f0: 0c005451 */ jal joyReleaseLock +/* f11a9f0: 0c005451 */ jal joyEnableCyclicPolling /* f11a9f4: afa20048 */ sw $v0,0x48($sp) /* f11a9f8: 8fa40048 */ lw $a0,0x48($sp) /* f11a9fc: 00112e00 */ sll $a1,$s1,0x18 @@ -6907,7 +6905,7 @@ glabel pak0f11a8f4 /* f11aa40: 000a58c0 */ sll $t3,$t2,0x3 /* f11aa44: 016a5823 */ subu $t3,$t3,$t2 /* f11aa48: 000b5a80 */ sll $t3,$t3,0xa -/* f11aa4c: 0c00543a */ jal joyGetLock +/* f11aa4c: 0c00543a */ jal joyDisableCyclicPolling /* f11aa50: afab0044 */ sw $t3,0x44($sp) /* f11aa54: 24010004 */ addiu $at,$zero,0x4 /* f11aa58: 16210003 */ bne $s1,$at,.L0f11aa68 @@ -6936,7 +6934,7 @@ glabel pak0f11a8f4 /* f11aaac: afaf0014 */ sw $t7,0x14($sp) /* f11aab0: 0fc45f64 */ jal pakAllocateFile /* f11aab4: afb80018 */ sw $t8,0x18($sp) -/* f11aab8: 0c005451 */ jal joyReleaseLock +/* f11aab8: 0c005451 */ jal joyEnableCyclicPolling /* f11aabc: afa20048 */ sw $v0,0x48($sp) /* f11aac0: 920802b8 */ lbu $t0,0x2b8($s0) /* f11aac4: 00112e00 */ sll $a1,$s1,0x18 @@ -7105,7 +7103,7 @@ glabel pak0f11a8f4 /* f11a700: 100000b9 */ beqz $zero,.L0f11a9e8_2 /* f11a704: 00001025 */ or $v0,$zero,$zero .L0f11a708_2: -/* f11a708: 0c00543a */ jal joyGetLock +/* f11a708: 0c00543a */ jal joyDisableCyclicPolling /* f11a70c: 00000000 */ sll $zero,$zero,0x0 /* f11a710: 24010004 */ addiu $at,$zero,0x4 /* f11a714: 16210003 */ bne $s1,$at,.L0f11a724_2 @@ -7133,7 +7131,7 @@ glabel pak0f11a8f4 /* f11a764: 34c64445 */ ori $a2,$a2,_gamecode /* f11a768: 0fc45f76 */ jal pakFindNote /* f11a76c: afaf0010 */ sw $t7,0x10($sp) -/* f11a770: 0c005451 */ jal joyReleaseLock +/* f11a770: 0c005451 */ jal joyEnableCyclicPolling /* f11a774: afa2004c */ sw $v0,0x4c($sp) /* f11a778: 8fa4004c */ lw $a0,0x4c($sp) /* f11a77c: 00112e00 */ sll $a1,$s1,0x18 @@ -7157,7 +7155,7 @@ glabel pak0f11a8f4 /* f11a7c0: 000a58c0 */ sll $t3,$t2,0x3 /* f11a7c4: 016a5823 */ subu $t3,$t3,$t2 /* f11a7c8: 000b5a80 */ sll $t3,$t3,0xa -/* f11a7cc: 0c00543a */ jal joyGetLock +/* f11a7cc: 0c00543a */ jal joyDisableCyclicPolling /* f11a7d0: afab0048 */ sw $t3,0x48($sp) /* f11a7d4: 24010004 */ addiu $at,$zero,0x4 /* f11a7d8: 16210003 */ bne $s1,$at,.L0f11a7e8_2 @@ -7186,7 +7184,7 @@ glabel pak0f11a8f4 /* f11a82c: afaf0014 */ sw $t7,0x14($sp) /* f11a830: 0fc45f44 */ jal pakAllocateFile /* f11a834: afb80018 */ sw $t8,0x18($sp) -/* f11a838: 0c005451 */ jal joyReleaseLock +/* f11a838: 0c005451 */ jal joyEnableCyclicPolling /* f11a83c: afa2004c */ sw $v0,0x4c($sp) /* f11a840: 920802b8 */ lbu $t0,0x2b8($s0) /* f11a844: 00112e00 */ sll $a1,$s1,0x18 @@ -7347,7 +7345,7 @@ glabel pak0f11a8f4 /* f114934: 01602025 */ or $a0,$t3,$zero /* f114938: 3c057f1b */ lui $a1,0x7f1b /* f11493c: 24a5e3d4 */ addiu $a1,$a1,-7212 -/* f114940: 0c00581b */ jal joyGetLock +/* f114940: 0c00581b */ jal joyDisableCyclicPolling /* f114944: 24040cf7 */ addiu $a0,$zero,0xcf7 /* f114948: 24010004 */ addiu $at,$zero,0x4 /* f11494c: 16210003 */ bne $s1,$at,.NB0f11495c @@ -7378,7 +7376,7 @@ glabel pak0f11a8f4 /* f1149a8: 3c057f1b */ lui $a1,0x7f1b /* f1149ac: afa20040 */ sw $v0,0x40($sp) /* f1149b0: 24a5e3dc */ addiu $a1,$a1,-7204 -/* f1149b4: 0c005834 */ jal joyReleaseLock +/* f1149b4: 0c005834 */ jal joyEnableCyclicPolling /* f1149b8: 24040cf9 */ addiu $a0,$zero,0xcf9 /* f1149bc: 8fa40040 */ lw $a0,0x40($sp) /* f1149c0: 00112e00 */ sll $a1,$s1,0x18 @@ -7405,7 +7403,7 @@ glabel pak0f11a8f4 /* f114a0c: 000950c0 */ sll $t2,$t1,0x3 /* f114a10: 01495023 */ subu $t2,$t2,$t1 /* f114a14: 000a5280 */ sll $t2,$t2,0xa -/* f114a18: 0c00581b */ jal joyGetLock +/* f114a18: 0c00581b */ jal joyDisableCyclicPolling /* f114a1c: afaa003c */ sw $t2,0x3c($sp) /* f114a20: 24010004 */ addiu $at,$zero,0x4 /* f114a24: 16210003 */ bne $s1,$at,.NB0f114a34 @@ -7437,7 +7435,7 @@ glabel pak0f11a8f4 /* f114a84: 3c057f1b */ lui $a1,0x7f1b /* f114a88: afa20040 */ sw $v0,0x40($sp) /* f114a8c: 24a5e3ec */ addiu $a1,$a1,-7188 -/* f114a90: 0c005834 */ jal joyReleaseLock +/* f114a90: 0c005834 */ jal joyEnableCyclicPolling /* f114a94: 24040d0a */ addiu $a0,$zero,0xd0a /* f114a98: 921902b8 */ lbu $t9,0x2b8($s0) /* f114a9c: 00112e00 */ sll $a1,$s1,0x18 @@ -7554,7 +7552,7 @@ glabel pak0f11ac7c /* f11ac90: 01c08025 */ or $s0,$t6,$zero /* f11ac94: afa40030 */ sw $a0,0x30($sp) /* f11ac98: afa0002c */ sw $zero,0x2c($sp) -/* f11ac9c: 0c00543a */ jal joyGetLock +/* f11ac9c: 0c00543a */ jal joyDisableCyclicPolling /* f11aca0: afa00024 */ sw $zero,0x24($sp) /* f11aca4: 24010004 */ addiu $at,$zero,0x4 /* f11aca8: 16010003 */ bne $s0,$at,.L0f11acb8 @@ -7759,7 +7757,7 @@ glabel pak0f11ac7c /* f11af8c: 00000000 */ sll $zero,$zero,0x0 /* f11af90: afa0002c */ sw $zero,0x2c($sp) .L0f11af94: -/* f11af94: 0c005451 */ jal joyReleaseLock +/* f11af94: 0c005451 */ jal joyEnableCyclicPolling /* f11af98: 00000000 */ sll $zero,$zero,0x0 /* f11af9c: 8fbf001c */ lw $ra,0x1c($sp) /* f11afa0: 8fa2002c */ lw $v0,0x2c($sp) @@ -7786,7 +7784,7 @@ glabel pak0f114c08nb .NB0f114c34: /* f114c34: 3c057f1b */ lui $a1,0x7f1b /* f114c38: 24a5e464 */ addiu $a1,$a1,-7068 -/* f114c3c: 0c00581b */ jal joyGetLock +/* f114c3c: 0c00581b */ jal joyDisableCyclicPolling /* f114c40: 24040d6a */ addiu $a0,$zero,0xd6a /* f114c44: 24010004 */ addiu $at,$zero,0x4 /* f114c48: 16010003 */ bne $s0,$at,.NB0f114c58 @@ -7817,7 +7815,7 @@ glabel pak0f114c08nb /* f114ca4: 24010004 */ addiu $at,$zero,0x4 /* f114ca8: 3c057f1b */ lui $a1,0x7f1b /* f114cac: 24a5e46c */ addiu $a1,$a1,-7060 -/* f114cb0: 0c005834 */ jal joyReleaseLock +/* f114cb0: 0c005834 */ jal joyEnableCyclicPolling /* f114cb4: 24040d6f */ addiu $a0,$zero,0xd6f /* f114cb8: 10000041 */ beqz $zero,.NB0f114dc0 /* f114cbc: 24020001 */ addiu $v0,$zero,0x1 @@ -7850,7 +7848,7 @@ glabel pak0f114c08nb /* f114d1c: 24010004 */ addiu $at,$zero,0x4 /* f114d20: 3c057f1b */ lui $a1,0x7f1b /* f114d24: 24a5e474 */ addiu $a1,$a1,-7052 -/* f114d28: 0c005834 */ jal joyReleaseLock +/* f114d28: 0c005834 */ jal joyEnableCyclicPolling /* f114d2c: 24040d78 */ addiu $a0,$zero,0xd78 /* f114d30: 10000023 */ beqz $zero,.NB0f114dc0 /* f114d34: 24020001 */ addiu $v0,$zero,0x1 @@ -7883,13 +7881,13 @@ glabel pak0f114c08nb /* f114d94: 24040d86 */ addiu $a0,$zero,0xd86 /* f114d98: 3c057f1b */ lui $a1,0x7f1b /* f114d9c: 24a5e47c */ addiu $a1,$a1,-7044 -/* f114da0: 0c005834 */ jal joyReleaseLock +/* f114da0: 0c005834 */ jal joyEnableCyclicPolling /* f114da4: 24040d81 */ addiu $a0,$zero,0xd81 /* f114da8: 10000005 */ beqz $zero,.NB0f114dc0 /* f114dac: 24020001 */ addiu $v0,$zero,0x1 .NB0f114db0: /* f114db0: 3c057f1b */ lui $a1,0x7f1b -/* f114db4: 0c005834 */ jal joyReleaseLock +/* f114db4: 0c005834 */ jal joyEnableCyclicPolling /* f114db8: 24a5e484 */ addiu $a1,$a1,-7036 /* f114dbc: 00001025 */ or $v0,$zero,$zero .NB0f114dc0: @@ -7962,7 +7960,7 @@ glabel pak0f114dd4nb /* f114ea8: 12210034 */ beq $s1,$at,.NB0f114f7c /* f114eac: 24040dba */ addiu $a0,$zero,0xdba /* f114eb0: 3c057f1b */ lui $a1,0x7f1b -/* f114eb4: 0c00581b */ jal joyGetLock +/* f114eb4: 0c00581b */ jal joyDisableCyclicPolling /* f114eb8: 24a5e48c */ addiu $a1,$a1,-7028 /* f114ebc: 24010004 */ addiu $at,$zero,0x4 /* f114ec0: 16210003 */ bne $s1,$at,.NB0f114ed0 @@ -7985,7 +7983,7 @@ glabel pak0f114dd4nb /* f114efc: 3c057f1b */ lui $a1,0x7f1b /* f114f00: afa20020 */ sw $v0,0x20($sp) /* f114f04: 24a5e494 */ addiu $a1,$a1,-7020 -/* f114f08: 0c005834 */ jal joyReleaseLock +/* f114f08: 0c005834 */ jal joyEnableCyclicPolling /* f114f0c: 24040dbc */ addiu $a0,$zero,0xdbc /* f114f10: 00112e00 */ sll $a1,$s1,0x18 /* f114f14: 00054e03 */ sra $t1,$a1,0x18 @@ -8173,7 +8171,7 @@ s32 pakScrub(s8 device) s32 pak0f11b6ec(s8 device) { - if (g_Paks[device].unk010 == 0xb && g_Paks[device].unk000 == 2) { + if (g_Paks[device].unk010 == 11 && g_Paks[device].type == PAKTYPE_MEMORY) { return 3; } @@ -8325,7 +8323,7 @@ glabel pak0f11b86c /* f11b9f0: 26030010 */ addiu $v1,$s0,0x10 /* f11b9f4: 00401825 */ or $v1,$v0,$zero .L0f11b9f8: -/* f11b9f8: 0c00543a */ jal joyGetLock +/* f11b9f8: 0c00543a */ jal joyDisableCyclicPolling /* f11b9fc: afa30104 */ sw $v1,0x104($sp) /* f11ba00: 8fad0104 */ lw $t5,0x104($sp) /* f11ba04: 00008025 */ or $s0,$zero,$zero @@ -8417,7 +8415,7 @@ glabel pak0f11b86c /* f11bb48: 2407112a */ addiu $a3,$zero,_val7f11bb48 /* f11bb4c: 5440000b */ bnezl $v0,.L0f11bb7c /* f11bb50: 2e010010 */ sltiu $at,$s0,0x10 -/* f11bb54: 0c005451 */ jal joyReleaseLock +/* f11bb54: 0c005451 */ jal joyEnableCyclicPolling /* f11bb58: 00000000 */ sll $zero,$zero,0x0 /* f11bb5c: 24010001 */ addiu $at,$zero,0x1 /* f11bb60: 16610003 */ bne $s3,$at,.L0f11bb70 @@ -8444,7 +8442,7 @@ glabel pak0f11b86c /* f11bba0: 560aff9c */ bnel $s0,$t2,.L0f11ba14 /* f11bba4: 00112600 */ sll $a0,$s1,0x18 .L0f11bba8: -/* f11bba8: 0c005451 */ jal joyReleaseLock +/* f11bba8: 0c005451 */ jal joyEnableCyclicPolling /* f11bbac: 00000000 */ sll $zero,$zero,0x0 /* f11bbb0: 00001025 */ or $v0,$zero,$zero .L0f11bbb4: @@ -8572,7 +8570,7 @@ glabel pak0f11b86c .NB0f115970: /* f115970: 3c057f1b */ lui $a1,0x7f1b /* f115974: 24a5e544 */ addiu $a1,$a1,-6844 -/* f115978: 0c00581b */ jal joyGetLock +/* f115978: 0c00581b */ jal joyDisableCyclicPolling /* f11597c: afa30108 */ sw $v1,0x108($sp) /* f115980: 8fab0108 */ lw $t3,0x108($sp) /* f115984: 00008025 */ or $s0,$zero,$zero @@ -8663,7 +8661,7 @@ glabel pak0f11b86c /* f115ac4: 1440000b */ bnez $v0,.NB0f115af4 /* f115ac8: 3c057f1b */ lui $a1,0x7f1b /* f115acc: 24a5e54c */ addiu $a1,$a1,-6836 -/* f115ad0: 0c005834 */ jal joyReleaseLock +/* f115ad0: 0c005834 */ jal joyEnableCyclicPolling /* f115ad4: 24040fc0 */ addiu $a0,$zero,0xfc0 /* f115ad8: 24010001 */ addiu $at,$zero,0x1 /* f115adc: 16610003 */ bne $s3,$at,.NB0f115aec @@ -8691,7 +8689,7 @@ glabel pak0f11b86c .NB0f115b24: /* f115b24: 3c057f1b */ lui $a1,0x7f1b /* f115b28: 24a5e554 */ addiu $a1,$a1,-6828 -/* f115b2c: 0c005834 */ jal joyReleaseLock +/* f115b2c: 0c005834 */ jal joyEnableCyclicPolling /* f115b30: 24040fd6 */ addiu $a0,$zero,0xfd6 /* f115b34: 00001025 */ or $v0,$zero,$zero .NB0f115b38: @@ -9000,7 +8998,7 @@ glabel pakWriteFile /* f11c028: 00000000 */ sll $zero,$zero,0x0 /* f11c02c: 24430001 */ addiu $v1,$v0,0x1 .L0f11c030: -/* f11c030: 0c00543a */ jal joyGetLock +/* f11c030: 0c00543a */ jal joyDisableCyclicPolling /* f11c034: afa30098 */ sw $v1,0x98($sp) /* f11c038: 0000f025 */ or $s8,$zero,$zero .L0f11c03c: @@ -9117,7 +9115,7 @@ glabel pakWriteFile /* f11c1d0: 24071286 */ addiu $a3,$zero,_val7f11c1d0 /* f11c1d4: 5440000b */ bnezl $v0,.L0f11c204 /* f11c1d8: 8fb80098 */ lw $t8,0x98($sp) -/* f11c1dc: 0c005451 */ jal joyReleaseLock +/* f11c1dc: 0c005451 */ jal joyEnableCyclicPolling /* f11c1e0: 00000000 */ sll $zero,$zero,0x0 /* f11c1e4: 24010001 */ addiu $at,$zero,0x1 /* f11c1e8: 16010003 */ bne $s0,$at,.L0f11c1f8 @@ -9139,7 +9137,7 @@ glabel pakWriteFile /* f11c214: 24010002 */ addiu $at,$zero,0x2 /* f11c218: 17c1ff88 */ bne $s8,$at,.L0f11c03c /* f11c21c: 00000000 */ sll $zero,$zero,0x0 -/* f11c220: 0c005451 */ jal joyReleaseLock +/* f11c220: 0c005451 */ jal joyEnableCyclicPolling /* f11c224: 00000000 */ sll $zero,$zero,0x0 /* f11c228: 3c0d8007 */ lui $t5,%hi(g_PakDebugPakCache) /* f11c22c: 8dad5ce8 */ lw $t5,%lo(g_PakDebugPakCache)($t5) @@ -9448,7 +9446,7 @@ glabel pakWriteFile /* f115fa0: 24430001 */ addiu $v1,$v0,0x1 .NB0f115fa4: /* f115fa4: 24a5e60c */ addiu $a1,$a1,-6644 -/* f115fa8: 0c00581b */ jal joyGetLock +/* f115fa8: 0c00581b */ jal joyDisableCyclicPolling /* f115fac: afa30098 */ sw $v1,0x98($sp) /* f115fb0: 0000f025 */ or $s8,$zero,$zero .NB0f115fb4: @@ -9566,7 +9564,7 @@ glabel pakWriteFile /* f11614c: 1440000b */ bnez $v0,.NB0f11617c /* f116150: 3c057f1b */ lui $a1,0x7f1b /* f116154: 24a5e614 */ addiu $a1,$a1,-6636 -/* f116158: 0c005834 */ jal joyReleaseLock +/* f116158: 0c005834 */ jal joyEnableCyclicPolling /* f11615c: 2404111c */ addiu $a0,$zero,0x111c /* f116160: 24010001 */ addiu $at,$zero,0x1 /* f116164: 16010003 */ bne $s0,$at,.NB0f116174 @@ -9589,7 +9587,7 @@ glabel pakWriteFile /* f116198: 00000000 */ sll $zero,$zero,0x0 /* f11619c: 3c057f1b */ lui $a1,0x7f1b /* f1161a0: 24a5e61c */ addiu $a1,$a1,-6628 -/* f1161a4: 0c005834 */ jal joyReleaseLock +/* f1161a4: 0c005834 */ jal joyEnableCyclicPolling /* f1161a8: 24041129 */ addiu $a0,$zero,0x1129 /* f1161ac: 3c0d8008 */ lui $t5,0x8008 /* f1161b0: 8dad80b0 */ lw $t5,-0x7f50($t5) @@ -9729,7 +9727,7 @@ const char var7f1b45e4[] = "-forceversion"; // numblocks++; // } // -// joyGetLock(); +// joyDisableCyclicPolling(); // // // Write the header with writecompleted = 0, followed by the data, then // // rewrite the header with writecompleted = 1. This allows the game to @@ -9782,7 +9780,7 @@ const char var7f1b45e4[] = "-forceversion"; // result = pakReadWriteBlock(device, PFS(device), g_Paks[device].noteindex, OS_WRITE, offset + i * blocksize, pakGetBlockSize(device), &s2->bytes[offsetinfile]); // // if (!pakHandleResult(result, device, 1, 0x1286)) { -// joyReleaseLock(); +// joyEnableCyclicPolling(); // // if (result == 1) { // return 1; @@ -9794,7 +9792,7 @@ const char var7f1b45e4[] = "-forceversion"; // } // } // -// joyReleaseLock(); +// joyEnableCyclicPolling(); // // if (g_PakDebugPakCache) { // pakSaveHeaderToCache(device, offset / pakGetBlockSize(device), s2); @@ -9846,13 +9844,13 @@ bool pakRepair(s8 device) break; default: #if VERSION >= VERSION_NTSC_1_0 - joyGetLock(); + joyDisableCyclicPolling(); result = osPfsChecker(PFS(device)); - joyReleaseLock(); + joyEnableCyclicPolling(); #else - joyGetLock(4425, "pak.c"); + joyDisableCyclicPolling(4425, "pak.c"); result = osPfsChecker(PFS(device)); - joyReleaseLock(4427, "pak.c"); + joyEnableCyclicPolling(4427, "pak.c"); #endif if (result == PAKERROR_OK) { @@ -9893,21 +9891,21 @@ bool pakHandleResult(s32 result, s8 device, u32 arg2, u32 line) if (arg2) { switch (result) { case 1: - g_Paks[device].unk000 = 2; + g_Paks[device].type = PAKTYPE_MEMORY; g_Paks[device].unk010 = 1; break; case 11: - g_Paks[device].unk000 = 2; + g_Paks[device].type = PAKTYPE_MEMORY; g_Paks[device].unk010 = 14; break; case 3: case 10: - g_Paks[device].unk000 = 2; + g_Paks[device].type = PAKTYPE_MEMORY; g_Paks[device].unk010 = 15; break; case 7: case 8: - g_Paks[device].unk000 = 2; + g_Paks[device].type = PAKTYPE_MEMORY; g_Paks[device].unk010 = 16; break; } @@ -10198,10 +10196,10 @@ void pakExecuteDebugOperations(void) if (g_PakDebugPakInit) { s32 device = g_PakDebugPakInit - 1; - joyGetLock(); + joyDisableCyclicPolling(); pakInitPak(&var80099e78, PFS(device), device, 0); - joyReleaseLock(); + joyEnableCyclicPolling(); g_PakDebugPakInit = false; } @@ -10289,7 +10287,7 @@ glabel pakExecuteDebugOperations /* f116538: 3c057f1b */ lui $a1,0x7f1b /* f11653c: 10400019 */ beqz $v0,.NB0f1165a4 /* f116540: 2450ffff */ addiu $s0,$v0,-1 -/* f116544: 0c00581b */ jal joyGetLock +/* f116544: 0c00581b */ jal joyDisableCyclicPolling /* f116548: 24a5e700 */ addiu $a1,$a1,-6400 /* f11654c: 24010004 */ addiu $at,$zero,0x4 /* f116550: 16010003 */ bne $s0,$at,.NB0f116560 @@ -10311,7 +10309,7 @@ glabel pakExecuteDebugOperations /* f116588: 02003025 */ or $a2,$s0,$zero /* f11658c: 3c057f1b */ lui $a1,0x7f1b /* f116590: 24a5e708 */ addiu $a1,$a1,-6392 -/* f116594: 0c005834 */ jal joyReleaseLock +/* f116594: 0c005834 */ jal joyEnableCyclicPolling /* f116598: 240411d0 */ addiu $a0,$zero,0x11d0 /* f11659c: 3c018008 */ lui $at,0x8008 /* f1165a0: ac2080b4 */ sw $zero,-0x7f4c($at) @@ -10735,23 +10733,23 @@ void pak0f11ca30(void) } #endif -void pak0f11cb9c(u32 arg0) +void gbpakHandleError(u32 err) { #if VERSION >= VERSION_NTSC_1_0 - switch (arg0) { - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: + switch (err) { + case PFS_ERR_NOPACK: + case PFS_ERR_NEW_PACK: + case PFS_ERR_INCONSISTENT: + case PFS_ERR_CONTRFAIL: + case PFS_ERR_INVALID: + case PFS_ERR_BAD_DATA: + case PFS_DATA_FULL: + case PFS_DIR_FULL: + case PFS_ERR_EXIST: + case PFS_ERR_ID_FATAL: + case PFS_ERR_DEVICE: + case PFS_ERR_NO_GBCART: + case PFS_ERR_NEW_GBCART: break; } #endif @@ -10806,7 +10804,7 @@ glabel pak0f116768nb .NB0f1167b0: /* f1167b0: 27a50028 */ addiu $a1,$sp,0x28 /* f1167b4: 27a60023 */ addiu $a2,$sp,0x23 -/* f1167b8: 0c014950 */ jal func00050d60 +/* f1167b8: 0c014950 */ jal osGbpakReadId /* f1167bc: a3a7007b */ sb $a3,0x7b($sp) /* f1167c0: 83a7007b */ lb $a3,0x7b($sp) /* f1167c4: 1440001d */ bnez $v0,.NB0f11683c @@ -10831,19 +10829,19 @@ glabel pak0f116768nb /* f11680c: 25087658 */ addiu $t0,$t0,0x7658 /* f116810: 03282021 */ addu $a0,$t9,$t0 .NB0f116814: -/* f116814: 0c0149c0 */ jal func50f20 +/* f116814: 0c0149c0 */ jal osGbpakCheckConnector /* f116818: 27a50023 */ addiu $a1,$sp,0x23 /* f11681c: 14400003 */ bnez $v0,.NB0f11682c /* f116820: 00402025 */ or $a0,$v0,$zero /* f116824: 10000008 */ beqz $zero,.NB0f116848 /* f116828: 24020001 */ addiu $v0,$zero,0x1 .NB0f11682c: -/* f11682c: 0fc459d4 */ jal pak0f11cb9c +/* f11682c: 0fc459d4 */ jal gbpakHandleError /* f116830: 00000000 */ sll $zero,$zero,0x0 /* f116834: 10000004 */ beqz $zero,.NB0f116848 /* f116838: 00001025 */ or $v0,$zero,$zero .NB0f11683c: -/* f11683c: 0fc459d4 */ jal pak0f11cb9c +/* f11683c: 0fc459d4 */ jal gbpakHandleError /* f116840: 00000000 */ sll $zero,$zero,0x0 /* f116844: 00001025 */ or $v0,$zero,$zero .NB0f116848: @@ -10854,24 +10852,24 @@ glabel pak0f116768nb ); #endif -s32 pak0f11cbd8(s8 device, s32 arg1, char *arg2, u16 arg3) +bool gbpakRead(s8 device, s32 address, u8 *buffer, u16 size) { - s32 result = func000513b0(PFS(device), false, arg1, arg2, arg3); + s32 result = osGbpakReadWrite(PFS(device), OS_READ, address, buffer, size); if (result) { - pak0f11cb9c(result); + gbpakHandleError(result); return false; } return true; } -s32 pak0f11cc6c(s8 device, u16 arg1, char *arg2, u16 arg3) +bool gbpakWrite(s8 device, u16 address, u8 *buffer, u16 size) { - s32 result = func000513b0(PFS(device), true, arg1, arg2, arg3); + s32 result = osGbpakReadWrite(PFS(device), OS_WRITE, address, buffer, size); if (result) { - pak0f11cb9c(result); + gbpakHandleError(result); return false; } @@ -10895,7 +10893,7 @@ bool pak0f11cd00(s8 device, u16 arg1, char *arg2, s32 arg3, s32 arg4) buffer[i] = '\n'; } - pak0f11cc6c(device, 0, buffer, sizeof(buffer)); + gbpakWrite(device, 0, buffer, sizeof(buffer)); #else bool result = false; s32 i; @@ -10916,14 +10914,14 @@ bool pak0f11cd00(s8 device, u16 arg1, char *arg2, s32 arg3, s32 arg4) } #endif - if (pak0f11cc6c(device, 0x4000, buffer, 32)) { + if (gbpakWrite(device, 0x4000, buffer, 32)) { result = true; } } else { result = true; } - if (result && pak0f11cc6c(device, arg1, arg2, arg3)) { + if (result && gbpakWrite(device, arg1, arg2, arg3)) { result = true; } @@ -10941,7 +10939,7 @@ bool pak0f11ce00(s8 device, u16 arg1, char *arg2, s32 arg3, bool arg4) buffer[i] = 0; } - pak0f11cc6c(device, 0, buffer, sizeof(buffer)); + gbpakWrite(device, 0, buffer, sizeof(buffer)); #else bool result = false; s32 i; @@ -10955,14 +10953,14 @@ bool pak0f11ce00(s8 device, u16 arg1, char *arg2, s32 arg3, bool arg4) buffer[31] = (s32)(arg1 + 0xffff6000) / 0x2000; - if (pak0f11cc6c(device, 0x4000, buffer, sizeof(buffer))) { + if (gbpakWrite(device, 0x4000, buffer, sizeof(buffer))) { result = true; } } else { result = true; } - if (result && pak0f11cbd8(device, arg1, arg2, arg3)) { + if (result && gbpakRead(device, arg1, arg2, arg3)) { result = true; } @@ -11003,7 +11001,7 @@ glabel pak0f11cef8 /* f11cf64: 24054000 */ addiu $a1,$zero,0x4000 /* f11cf68: 27a600ac */ addiu $a2,$sp,0xac /* f11cf6c: 24070020 */ addiu $a3,$zero,0x20 -/* f11cf70: 0fc4731b */ jal pak0f11cc6c +/* f11cf70: 0fc4731b */ jal gbpakWrite /* f11cf74: afa80020 */ sw $t0,0x20($sp) /* f11cf78: 14400003 */ bnez $v0,.L0f11cf88 /* f11cf7c: 8fa80020 */ lw $t0,0x20($sp) @@ -11014,7 +11012,7 @@ glabel pak0f11cef8 /* f11cf8c: 3405afe0 */ dli $a1,0xafe0 /* f11cf90: 27a6008c */ addiu $a2,$sp,0x8c /* f11cf94: 24070020 */ addiu $a3,$zero,0x20 -/* f11cf98: 0fc472f6 */ jal pak0f11cbd8 +/* f11cf98: 0fc472f6 */ jal gbpakRead /* f11cf9c: afa80020 */ sw $t0,0x20($sp) /* f11cfa0: 14400003 */ bnez $v0,.L0f11cfb0 /* f11cfa4: 8fa80020 */ lw $t0,0x20($sp) @@ -11033,7 +11031,7 @@ glabel pak0f11cef8 /* f11cfd0: 24054000 */ addiu $a1,$zero,0x4000 /* f11cfd4: 27a600ac */ addiu $a2,$sp,0xac /* f11cfd8: 24070020 */ addiu $a3,$zero,0x20 -/* f11cfdc: 0fc4731b */ jal pak0f11cc6c +/* f11cfdc: 0fc4731b */ jal gbpakWrite /* f11cfe0: afa80020 */ sw $t0,0x20($sp) /* f11cfe4: 14400003 */ bnez $v0,.L0f11cff4 /* f11cfe8: 8fa80020 */ lw $t0,0x20($sp) @@ -11044,7 +11042,7 @@ glabel pak0f11cef8 /* f11cff8: 3405bfe0 */ dli $a1,0xbfe0 /* f11cffc: 27a6006c */ addiu $a2,$sp,0x6c /* f11d000: 24070020 */ addiu $a3,$zero,0x20 -/* f11d004: 0fc472f6 */ jal pak0f11cbd8 +/* f11d004: 0fc472f6 */ jal gbpakRead /* f11d008: afa80020 */ sw $t0,0x20($sp) /* f11d00c: 14400003 */ bnez $v0,.L0f11d01c /* f11d010: 8fa80020 */ lw $t0,0x20($sp) @@ -11063,7 +11061,7 @@ glabel pak0f11cef8 /* f11d03c: 24054000 */ addiu $a1,$zero,0x4000 /* f11d040: 27a600ac */ addiu $a2,$sp,0xac /* f11d044: 24070020 */ addiu $a3,$zero,0x20 -/* f11d048: 0fc4731b */ jal pak0f11cc6c +/* f11d048: 0fc4731b */ jal gbpakWrite /* f11d04c: afa80020 */ sw $t0,0x20($sp) /* f11d050: 14400003 */ bnez $v0,.L0f11d060 /* f11d054: 8fa80020 */ lw $t0,0x20($sp) @@ -11104,7 +11102,7 @@ glabel pak0f11cef8 /* f11d0d0: 356c0001 */ ori $t4,$t3,0x1 /* f11d0d4: a3ac002c */ sb $t4,0x2c($sp) /* f11d0d8: 27a6002c */ addiu $a2,$sp,0x2c -/* f11d0dc: 0fc4731b */ jal pak0f11cc6c +/* f11d0dc: 0fc4731b */ jal gbpakWrite /* f11d0e0: 24070040 */ addiu $a3,$zero,0x40 /* f11d0e4: 14400003 */ bnez $v0,.L0f11d0f4 /* f11d0e8: 8fa80020 */ lw $t0,0x20($sp) @@ -11152,7 +11150,7 @@ glabel pak7f116b0cnb /* f116b70: 24054000 */ addiu $a1,$zero,0x4000 /* f116b74: 27a600ac */ addiu $a2,$sp,0xac /* f116b78: 24070020 */ addiu $a3,$zero,0x20 -/* f116b7c: 0fc45a3b */ jal pak0f11cc6c +/* f116b7c: 0fc45a3b */ jal gbpakWrite /* f116b80: afa80020 */ sw $t0,0x20($sp) /* f116b84: 14400003 */ bnez $v0,.NB0f116b94 /* f116b88: 8fa80020 */ lw $t0,0x20($sp) @@ -11163,7 +11161,7 @@ glabel pak7f116b0cnb /* f116b98: 3405afe0 */ dli $a1,0xafe0 /* f116b9c: 27a6008c */ addiu $a2,$sp,0x8c /* f116ba0: 24070020 */ addiu $a3,$zero,0x20 -/* f116ba4: 0fc45a16 */ jal pak0f11cbd8 +/* f116ba4: 0fc45a16 */ jal gbpakRead /* f116ba8: afa80020 */ sw $t0,0x20($sp) /* f116bac: 14400003 */ bnez $v0,.NB0f116bbc /* f116bb0: 8fa80020 */ lw $t0,0x20($sp) @@ -11182,7 +11180,7 @@ glabel pak7f116b0cnb /* f116bdc: 24054000 */ addiu $a1,$zero,0x4000 /* f116be0: 27a600ac */ addiu $a2,$sp,0xac /* f116be4: 24070020 */ addiu $a3,$zero,0x20 -/* f116be8: 0fc45a3b */ jal pak0f11cc6c +/* f116be8: 0fc45a3b */ jal gbpakWrite /* f116bec: afa80020 */ sw $t0,0x20($sp) /* f116bf0: 14400003 */ bnez $v0,.NB0f116c00 /* f116bf4: 8fa80020 */ lw $t0,0x20($sp) @@ -11193,7 +11191,7 @@ glabel pak7f116b0cnb /* f116c04: 3405bfe0 */ dli $a1,0xbfe0 /* f116c08: 27a6006c */ addiu $a2,$sp,0x6c /* f116c0c: 24070020 */ addiu $a3,$zero,0x20 -/* f116c10: 0fc45a16 */ jal pak0f11cbd8 +/* f116c10: 0fc45a16 */ jal gbpakRead /* f116c14: afa80020 */ sw $t0,0x20($sp) /* f116c18: 14400003 */ bnez $v0,.NB0f116c28 /* f116c1c: 8fa80020 */ lw $t0,0x20($sp) @@ -11212,7 +11210,7 @@ glabel pak7f116b0cnb /* f116c48: 24054000 */ addiu $a1,$zero,0x4000 /* f116c4c: 27a600ac */ addiu $a2,$sp,0xac /* f116c50: 24070020 */ addiu $a3,$zero,0x20 -/* f116c54: 0fc45a3b */ jal pak0f11cc6c +/* f116c54: 0fc45a3b */ jal gbpakWrite /* f116c58: afa80020 */ sw $t0,0x20($sp) /* f116c5c: 14400003 */ bnez $v0,.NB0f116c6c /* f116c60: 8fa80020 */ lw $t0,0x20($sp) @@ -11253,7 +11251,7 @@ glabel pak7f116b0cnb /* f116cdc: 356c0001 */ ori $t4,$t3,0x1 /* f116ce0: a3ac002c */ sb $t4,0x2c($sp) /* f116ce4: 27a6002c */ addiu $a2,$sp,0x2c -/* f116ce8: 0fc45a3b */ jal pak0f11cc6c +/* f116ce8: 0fc45a3b */ jal gbpakWrite /* f116cec: 24070040 */ addiu $a3,$zero,0x40 /* f116cf0: 14400003 */ bnez $v0,.NB0f116d00 /* f116cf4: 8fa80020 */ lw $t0,0x20($sp) @@ -11292,7 +11290,7 @@ glabel pak0f11d110 /* f116d40: 83a40083 */ lb $a0,0x83($sp) /* f116d44: 24054000 */ addiu $a1,$zero,0x4000 /* f116d48: 27a60020 */ addiu $a2,$sp,0x20 -/* f116d4c: 0fc45a3b */ jal pak0f11cc6c +/* f116d4c: 0fc45a3b */ jal gbpakWrite /* f116d50: 24070020 */ addiu $a3,$zero,0x20 /* f116d54: 14400003 */ bnez $v0,.NB0f116d64 /* f116d58: 83a40083 */ lb $a0,0x83($sp) @@ -11301,7 +11299,7 @@ glabel pak0f11d110 .NB0f116d64: /* f116d64: 3405a000 */ dli $a1,0xa000 /* f116d68: 27a60040 */ addiu $a2,$sp,0x40 -/* f116d6c: 0fc45a16 */ jal pak0f11cbd8 +/* f116d6c: 0fc45a16 */ jal gbpakRead /* f116d70: 24070040 */ addiu $a3,$zero,0x40 /* f116d74: 54400004 */ bnezl $v0,.NB0f116d88 /* f116d78: 93a20040 */ lbu $v0,0x40($sp) @@ -11570,7 +11568,7 @@ glabel pak0f11d214 s32 pak0f11d3f8(s8 device) { - if (g_Paks[device].unk000 == 3 + if (g_Paks[device].type == PAKTYPE_GAMEBOY && (g_Paks[device].unk010 == 11 || g_Paks[device].unk010 == 12 || g_Paks[device].unk010 == 13)) { return true; } @@ -11662,7 +11660,7 @@ glabel pak7f1172d0nb /* f11732c: a046ffff */ sb $a2,-0x1($v0) /* f117330: 24054000 */ addiu $a1,$zero,0x4000 /* f117334: 27a60028 */ addiu $a2,$sp,0x28 -/* f117338: 0fc45a3b */ jal pak0f11cc6c +/* f117338: 0fc45a3b */ jal gbpakWrite /* f11733c: 24070020 */ addiu $a3,$zero,0x20 /* f117340: 8fbf0014 */ lw $ra,0x14($sp) /* f117344: 27bd0048 */ addiu $sp,$sp,0x48 @@ -11749,7 +11747,7 @@ glabel pak0f11d680 /* f11d780: 03002825 */ or $a1,$t8,$zero /* f11d784: 97a70020 */ lhu $a3,0x20($sp) /* f11d788: afa80018 */ sw $t0,0x18($sp) -/* f11d78c: 0fc472f6 */ jal pak0f11cbd8 +/* f11d78c: 0fc472f6 */ jal gbpakRead /* f11d790: 03233021 */ addu $a2,$t9,$v1 /* f11d794: 14400003 */ bnez $v0,.L0f11d7a4 /* f11d798: 8fa80018 */ lw $t0,0x18($sp) @@ -11842,7 +11840,7 @@ glabel pak0f11d680 /* f117448: 03002825 */ or $a1,$t8,$zero /* f11744c: 97a70020 */ lhu $a3,0x20($sp) /* f117450: afa80018 */ sw $t0,0x18($sp) -/* f117454: 0fc45a16 */ jal pak0f11cbd8 +/* f117454: 0fc45a16 */ jal gbpakRead /* f117458: 03233021 */ addu $a2,$t9,$v1 /* f11745c: 14400003 */ bnez $v0,.NB0f11746c /* f117460: 8fa80018 */ lw $t0,0x18($sp) @@ -12298,57 +12296,57 @@ glabel pak0f11d9c4 #endif #if VERSION >= VERSION_NTSC_1_0 -void pak0f11dc04(s32 device, f32 arg1, s32 arg2, s32 arg3) +void pakRumble(s32 device, f32 numsecs, s32 onduration, s32 offduration) { if (g_Paks[device].unk010 == 11 - && g_Paks[device].unk000 == 1 - && g_Paks[device].unk004 != 6 - && g_Paks[device].unk004 != 7 - && g_Paks[device].unk2b4 < 60 * arg1) { - g_Paks[device].unk004 = 3; - g_Paks[device].unk2b4 = 60 * arg1; - g_Paks[device].unk284 = arg2; - g_Paks[device].unk288 = arg2 + arg3; - g_Paks[device].unk28c = 0; + && g_Paks[device].type == PAKTYPE_RUMBLE + && g_Paks[device].rumblestate != RUMBLESTATE_DISABLED_STOPPING + && g_Paks[device].rumblestate != RUMBLESTATE_DISABLED_STOPPED + && g_Paks[device].rumblettl < 60 * numsecs) { + g_Paks[device].rumblestate = RUMBLESTATE_ENABLED_STARTING; + g_Paks[device].rumblettl = 60 * numsecs; + g_Paks[device].rumblepulsestopat = onduration; + g_Paks[device].rumblepulselen = onduration + offduration; + g_Paks[device].rumblepulsetimer = 0; } } #else -void pak0f11dc04(s8 device, f32 arg1, s32 arg2, s32 arg3) +void pakRumble(s8 device, f32 numsecs, s32 onduration, s32 offduration) { // This might be a global variable rather than static static u8 map[] = {0, 1, 0, 0, 0}; // 0x8009eb9c (ntsc-beta) u8 index = map[device]; if (g_Paks[index].unk010 == 11 - && g_Paks[index].unk000 == 1 - && g_Paks[index].unk004 != 6 - && g_Paks[index].unk004 != 7 - && g_Paks[index].unk2b4 < 60 * arg1) { - g_Paks[index].unk004 = 3; - g_Paks[index].unk2b4 = 60 * arg1; - g_Paks[index].unk284 = arg2; - g_Paks[index].unk288 = arg2 + arg3; - g_Paks[index].unk28c = 0; + && g_Paks[index].type == PAKTYPE_RUMBLE + && g_Paks[index].rumblestate != RUMBLESTATE_DISABLED_STOPPING + && g_Paks[index].rumblestate != RUMBLESTATE_DISABLED_STOPPED + && g_Paks[index].rumblettl < 60 * numsecs) { + g_Paks[index].rumblestate = RUMBLESTATE_ENABLED_STARTING; + g_Paks[index].rumblettl = 60 * numsecs; + g_Paks[index].rumblepulsestopat = onduration; + g_Paks[index].rumblepulselen = onduration + offduration; + g_Paks[index].rumblepulsetimer = 0; } } #endif -void pak0f11dcb0(s32 arg0) +void pakStopRumbleForAllPaks(bool disablepolling) { s8 i; for (i = 0; i < 5; i++) { - s32 value = g_Paks[i].unk000; + s32 type = g_Paks[i].type; - if (value); + if (type); - if (value != 2 && value != 3) { - joy000153c4(i, arg0); + if (type != PAKTYPE_MEMORY && type != PAKTYPE_GAMEBOY) { + joyStopRumble(i, disablepolling); } } } -void pak0f11dd58(s8 playernum) +void pakDisableRumbleForPlayer(s8 playernum) { s32 i; s32 tmp = playernum; @@ -12358,20 +12356,20 @@ void pak0f11dd58(s8 playernum) joyGetContpadNumsForPlayer(tmp, &contpads[0], &contpads[1]); for (i = 0; i < 2; i++) { - if (contpads[i] >= 0 && g_Paks[contpads[i]].unk000 == 1) { - g_Paks[contpads[i]].unk004 = 6; - joy000153c4(contpads[i], 1); + if (contpads[i] >= 0 && g_Paks[contpads[i]].type == PAKTYPE_RUMBLE) { + g_Paks[contpads[i]].rumblestate = RUMBLESTATE_DISABLED_STOPPING; + joyStopRumble(contpads[i], true); } } #else - if (g_Paks[playernum].unk000 == 1) { - g_Paks[playernum].unk004 = 6; - joy000153c4(playernum, 1); + if (g_Paks[playernum].type == PAKTYPE_RUMBLE) { + g_Paks[playernum].rumblestate = RUMBLESTATE_DISABLED_STOPPING; + joyStopRumble(playernum, true); } #endif } -void pak0f11de20(s8 playernum) +void pakEnableRumbleForPlayer(s8 playernum) { s32 i; s32 tmp = playernum; @@ -12381,48 +12379,51 @@ void pak0f11de20(s8 playernum) joyGetContpadNumsForPlayer(tmp, &contpads[0], &contpads[1]); for (i = 0; i < 2; i++) { - if (contpads[i] >= 0 && g_Paks[contpads[i]].unk000 == 1 && g_Paks[contpads[i]].unk004 == 7) { - g_Paks[contpads[i]].unk004 = 8; + if (contpads[i] >= 0 + && g_Paks[contpads[i]].type == PAKTYPE_RUMBLE + && g_Paks[contpads[i]].rumblestate == RUMBLESTATE_DISABLED_STOPPED) { + g_Paks[contpads[i]].rumblestate = RUMBLESTATE_ENABLING; } } #else - if (g_Paks[playernum].unk000 == 1 && g_Paks[playernum].unk004 == 7) { - g_Paks[playernum].unk004 = 8; + if (g_Paks[playernum].type == PAKTYPE_RUMBLE + && g_Paks[playernum].rumblestate == RUMBLESTATE_DISABLED_STOPPED) { + g_Paks[playernum].rumblestate = RUMBLESTATE_ENABLING; } #endif } -void pak0f11deb8(void) +void pakDisableRumbleForAllPlayers(void) { s32 i; #if VERSION >= VERSION_NTSC_1_0 for (i = 0; i < 4; i++) { - if (g_Paks[i].unk000 == 1) { - g_Paks[i].unk004 = 6; - joy000153c4(i, 1); + if (g_Paks[i].type == PAKTYPE_RUMBLE) { + g_Paks[i].rumblestate = RUMBLESTATE_DISABLED_STOPPING; + joyStopRumble(i, true); } } #else for (i = 0; i < 4; i++) { - pak0f11dd58(i); + pakDisableRumbleForPlayer(i); } #endif } -void pak0f11df38(void) +void pakEnableRumbleForAllPlayers(void) { s32 i; #if VERSION >= VERSION_NTSC_FINAL for (i = 0; i < 4; i++) { - if (g_Paks[i].unk000 == 1 && g_Paks[i].unk004 == 7) { - g_Paks[i].unk004 = 8; + if (g_Paks[i].type == PAKTYPE_RUMBLE && g_Paks[i].rumblestate == RUMBLESTATE_DISABLED_STOPPED) { + g_Paks[i].rumblestate = RUMBLESTATE_ENABLING; } } #else for (i = 0; i < 4; i++) { - pak0f11de20(i); + pakEnableRumbleForPlayer(i); } #endif } @@ -12602,11 +12603,11 @@ glabel var7f1b4fd8 /* f11e10c: 24090005 */ addiu $t1,$zero,0x5 /* f11e110: 1000008e */ beqz $zero,.L0f11e34c /* f11e114: ae090010 */ sw $t1,0x10($s0) -/* f11e118: 0c00543a */ jal joyGetLock +/* f11e118: 0c00543a */ jal joyDisableCyclicPolling /* f11e11c: 00000000 */ sll $zero,$zero,0x0 /* f11e120: 0fc46a3d */ jal pak0f11a8f4 /* f11e124: 83a40023 */ lb $a0,0x23($sp) -/* f11e128: 0c005451 */ jal joyReleaseLock +/* f11e128: 0c005451 */ jal joyEnableCyclicPolling /* f11e12c: 00000000 */ sll $zero,$zero,0x0 /* f11e130: 10000087 */ beqz $zero,.L0f11e350 /* f11e134: 8e0a02b8 */ lw $t2,0x2b8($s0) @@ -12970,11 +12971,11 @@ glabel var7f1b4fd8 .L0f11def4: /* f11def4: 1000009f */ beqz $zero,.L0f11e174 /* f11def8: ac6f0010 */ sw $t7,0x10($v1) -/* f11defc: 0c00543a */ jal joyGetLock +/* f11defc: 0c00543a */ jal joyDisableCyclicPolling /* f11df00: 00000000 */ sll $zero,$zero,0x0 /* f11df04: 0fc4699d */ jal pak0f11a8f4 /* f11df08: 83a40023 */ lb $a0,0x23($sp) -/* f11df0c: 0c005451 */ jal joyReleaseLock +/* f11df0c: 0c005451 */ jal joyEnableCyclicPolling /* f11df10: 00000000 */ sll $zero,$zero,0x0 /* f11df14: 10000098 */ beqz $zero,.L0f11e178 /* f11df18: 8fbf0014 */ lw $ra,0x14($sp) @@ -13314,7 +13315,7 @@ glabel var7f1af164nb /* f117d44: 24a5ece4 */ addiu $a1,$a1,-4892 /* f117d48: 2404171a */ addiu $a0,$zero,0x171a /* f117d4c: afa3001c */ sw $v1,0x1c($sp) -/* f117d50: 0c00581b */ jal joyGetLock +/* f117d50: 0c00581b */ jal joyDisableCyclicPolling /* f117d54: a3a6002b */ sb $a2,0x2b($sp) /* f117d58: 83a6002b */ lb $a2,0x2b($sp) /* f117d5c: 24010004 */ addiu $at,$zero,0x4 @@ -13339,7 +13340,7 @@ glabel var7f1af164nb /* f117da0: 3c057f1b */ lui $a1,0x7f1b /* f117da4: 24a5ecec */ addiu $a1,$a1,-4884 /* f117da8: 2404171c */ addiu $a0,$zero,0x171c -/* f117dac: 0c005834 */ jal joyReleaseLock +/* f117dac: 0c005834 */ jal joyEnableCyclicPolling /* f117db0: afa20024 */ sw $v0,0x24($sp) /* f117db4: 8fa60024 */ lw $a2,0x24($sp) /* f117db8: 8fa3001c */ lw $v1,0x1c($sp) @@ -13352,7 +13353,7 @@ glabel var7f1af164nb /* f117dd4: 1000006b */ beqz $zero,.NB0f117f84 /* f117dd8: ac6f0010 */ sw $t7,0x10($v1) .NB0f117ddc: -/* f117ddc: 0fc459d4 */ jal pak0f11cb9c +/* f117ddc: 0fc459d4 */ jal gbpakHandleError /* f117de0: afa3001c */ sw $v1,0x1c($sp) /* f117de4: 8fa3001c */ lw $v1,0x1c($sp) /* f117de8: 24180004 */ addiu $t8,$zero,0x4 @@ -13376,7 +13377,7 @@ glabel var7f1af164nb /* f117e30: 3c057f1b */ lui $a1,0x7f1b /* f117e34: 24a5ecf4 */ addiu $a1,$a1,-4876 /* f117e38: afa3001c */ sw $v1,0x1c($sp) -/* f117e3c: 0c00581b */ jal joyGetLock +/* f117e3c: 0c00581b */ jal joyDisableCyclicPolling /* f117e40: a3a6002b */ sb $a2,0x2b($sp) /* f117e44: 83a6002b */ lb $a2,0x2b($sp) /* f117e48: 00062600 */ sll $a0,$a2,0x18 @@ -13385,7 +13386,7 @@ glabel var7f1af164nb /* f117e54: 01602025 */ or $a0,$t3,$zero /* f117e58: 3c057f1b */ lui $a1,0x7f1b /* f117e5c: 24a5ecfc */ addiu $a1,$a1,-4868 -/* f117e60: 0c005834 */ jal joyReleaseLock +/* f117e60: 0c005834 */ jal joyEnableCyclicPolling /* f117e64: 2404174a */ addiu $a0,$zero,0x174a /* f117e68: 8fa3001c */ lw $v1,0x1c($sp) /* f117e6c: 240c000d */ addiu $t4,$zero,0xd @@ -13481,7 +13482,7 @@ glabel pak7f117f94nb /* f117f94: 27bdffd8 */ addiu $sp,$sp,-40 /* f117f98: afbf0014 */ sw $ra,0x14($sp) /* f117f9c: afa40028 */ sw $a0,0x28($sp) -/* f117fa0: 0fc461b0 */ jal pak0f11e844 +/* f117fa0: 0fc461b0 */ jal gbpakIdentifyGame /* f117fa4: 83a4002b */ lb $a0,0x2b($sp) /* f117fa8: 83a4002b */ lb $a0,0x2b($sp) /* f117fac: 3c0f800a */ lui $t7,0x800a @@ -13503,7 +13504,7 @@ glabel pak7f117f94nb /* f117fec: 2401000c */ addiu $at,$zero,0xc /* f117ff0: 15810011 */ bne $t4,$at,.NB0f118038 /* f117ff4: a0cb02b8 */ sb $t3,0x2b8($a2) -/* f117ff8: 0fc461b0 */ jal pak0f11e844 +/* f117ff8: 0fc461b0 */ jal gbpakIdentifyGame /* f117ffc: afa60018 */ sw $a2,0x18($sp) /* f118000: 8fa60018 */ lw $a2,0x18($sp) /* f118004: 000270c0 */ sll $t6,$v0,0x3 @@ -13662,17 +13663,17 @@ void pakProbeEeprom(void) s32 type; #if VERSION >= VERSION_NTSC_1_0 - joyGetLock(); + joyDisableCyclicPolling(); #else - joyGetLock(6199, "pak.c"); + joyDisableCyclicPolling(6199, "pak.c"); #endif type = osEepromProbe(&var80099e78); #if VERSION >= VERSION_NTSC_1_0 - joyReleaseLock(); + joyEnableCyclicPolling(); #else - joyReleaseLock(6201, "pak.c"); + joyEnableCyclicPolling(6201, "pak.c"); #endif if (type == EEPROM_TYPE_16K) { @@ -13691,17 +13692,17 @@ s32 pakReadEeprom(u8 address, u8 *buffer, u32 len) s32 result; #if VERSION >= VERSION_NTSC_1_0 - joyGetLock(); + joyDisableCyclicPolling(); #else - joyGetLock(6234, "pak.c"); + joyDisableCyclicPolling(6234, "pak.c"); #endif result = osEepromLongRead(&var80099e78, address, buffer, len); #if VERSION >= VERSION_NTSC_1_0 - joyReleaseLock(); + joyEnableCyclicPolling(); #else - joyReleaseLock(6236, "pak.c"); + joyEnableCyclicPolling(6236, "pak.c"); #endif return result == 0 ? PAKERROR_OK : PAKERROR_EEPROM_READFAILED; @@ -13712,17 +13713,17 @@ s32 pakWriteEeprom(u8 address, u8 *buffer, u32 len) s32 result; #if VERSION >= VERSION_NTSC_1_0 - joyGetLock(); + joyDisableCyclicPolling(); #else - joyGetLock(6269, "pak.c"); + joyDisableCyclicPolling(6269, "pak.c"); #endif result = osEepromLongWrite(&var80099e78, address, buffer, len); #if VERSION >= VERSION_NTSC_1_0 - joyReleaseLock(); + joyEnableCyclicPolling(); #else - joyReleaseLock(6271, "pak.c"); + joyEnableCyclicPolling(6271, "pak.c"); #endif return result == 0 ? PAKERROR_OK : PAKERROR_EEPROM_WRITEFAILED; @@ -13845,7 +13846,7 @@ s8 pakFindBySerial(s32 findserial) for (i = 0; i < 5; i++) { if (pak0f116aec(i)) { - s32 serial = pakGetDeviceSerial(i); + s32 serial = pakGetSerial(i); if (findserial == serial) { device = i; @@ -13856,20 +13857,26 @@ s8 pakFindBySerial(s32 findserial) return device; } -s32 pak0f11e750(s8 arg0) -{ - char sp18[32]; - sp18[0] = '\n'; +#if VERSION >= VERSION_NTSC_1_0 +const char var7f1b4d24[] = "Pak %d -> Pak_PdGameBoySetRWByte - Fatal Error\n"; +#else +const char var7f1b4d24[] = "Pak %d -> Pak_PdGameBoySetRWByte - Fatal Error"; +#endif - return pak0f11cc6c(arg0, 0, sp18, 32); +s32 pak0f11e750(s8 device) +{ + u8 buffer[32]; + buffer[0] = 0x0a; + + return gbpakWrite(device, 0, buffer, sizeof(buffer)); } -bool pak0f11e78c(void) +bool gbpakIsAnyPerfectDark(void) { s8 i; for (i = 0; i < 4; i++) { - if (pak0f11e844(i) == 2) { + if (gbpakIdentifyGame(i) == GBGAME_PD) { return true; } } @@ -13881,7 +13888,7 @@ bool pak0f11e78c(void) * Probable @bug: This function is probably intended to be a "strings are equal" * check, however it's actually checking if either string starts with the other. */ -bool pak0f11e7f0(char *a, char *b) +bool gbpakStrcmp(char *a, char *b) { while (*a != '\0' && *b != '\0') { if (*a != *b) { @@ -13896,85 +13903,77 @@ bool pak0f11e7f0(char *a, char *b) } #if VERSION >= VERSION_NTSC_1_0 -const char var7f1b4d24[] = "Pak %d -> Pak_PdGameBoySetRWByte - Fatal Error\n"; -#else -const char var7f1b4d24[] = "Pak %d -> Pak_PdGameBoySetRWByte - Fatal Error"; -#endif - -#if VERSION >= VERSION_NTSC_1_0 -s32 pak0f11e844(s8 device) +s32 gbpakIdentifyGame(s8 device) { - s32 stack1; - s32 stack2; - struct pakthing sp6c; - char sp38[52]; - u8 sp37; - s32 value; - s32 sp2c = 0; - s32 sp28 = 0; - s32 sp24 = 1; + OSGbpakId id; + u8 status; + s32 ret; + s32 game = GBGAME_OTHER; + bool poweredon = false; + bool ok = true; - if (g_Paks[device].unk000 != 3) { - return 0; + if (g_Paks[device].type != PAKTYPE_GAMEBOY) { + return GBGAME_OTHER; } - joyGetLock(); + joyDisableCyclicPolling(); - value = func00050d60(PFS(device), sp38, &sp37); + ret = osGbpakReadId(PFS(device), &id, &status); #if VERSION >= VERSION_NTSC_FINAL - // NTSC Final sets sp28 to 1 unconditionally. - // If we just set it to 1 without the if-statement then it creates a - // mismatch because the compiler optimises out the sp28 = 0 line earlier. - // Using this if-statement with a condition that's always true makes the - // compiler optimise out the if-statement but leave both assignments to - // sp28 intact. - if (sp24) { - sp28 = 1; + // NTSC Final sets poweredon to true unconditionally. + // If we just set it to true without the if-statement then it creates a + // mismatch because the compiler optimises out the poweredon = false line + // earlier. Using this if-statement with a condition that's always true + // makes the compiler optimise out the if-statement but leave both + // assignments to poweredon intact. + if (ok) { + poweredon = true; } - if (value) { - sp24 = 0; + if (ret != PAKERROR_OK) { + ok = false; } #else - // NTSC 1.0 only sets sp28 to 1 if the call to func00050d60 returned 0. - // The else here might have been else if (sp24). This optimises itself out, + // NTSC 1.0 only sets poweredon to true if the call to osGbpakReadId + // returned PAKERROR_OK. + // The else here might have been else if (ok). This optimises itself out, // but may explain why the final code appears to use a condition. They could // have moved the else-if into its own check (and had to do it prior to the - // value check for it to work as intended). - if (value) { - sp24 = 0; + // ret check for it to work as intended). + if (ret != PAKERROR_OK) { + ok = false; } else { - sp28 = 1; + poweredon = true; } #endif - if (var80075cb0 == sp6c.unk10) { - if (pak0f11e7f0(var80075cb4, sp6c.unk00) || pak0f11e7f0(var80075cc0, sp6c.unk00)) { + if (var80075cb0 == id.company_code) { + if (gbpakStrcmp(var80075cb4, id.game_title) || gbpakStrcmp(var80075cc0, id.game_title)) { g_Paks[device].unk2b8_03 = 0; g_Paks[device].unk2b8_04 = 1; - sp2c = 2; + game = GBGAME_PD; } } - if (sp2c != 2) { - sp24 = 0; + if (game != GBGAME_PD) { + ok = false; } - if (sp28) { - if (func00006330(PFS(device), 0)) { - sp24 = 0; + if (poweredon) { + if (osGbpakPower(PFS(device), OS_GBPAK_POWER_OFF) != PAKERROR_OK) { + ok = false; } } - joyReleaseLock(); + joyEnableCyclicPolling(); - if (sp24) { - return sp2c; + if (ok) { + return game; } g_Paks[device].unk010 = 26; - return 0; + return GBGAME_OTHER; } #else const char var7f1aee7c[] = "pak.c"; @@ -13989,13 +13988,13 @@ const char var7f1aeebc[] = "pak.c"; const char var7f1aeec4[] = "pak.c"; GLOBAL_ASM( -glabel pak0f11e844 +glabel gbpakIdentifyGame /* f1186c0: 27bdff80 */ addiu $sp,$sp,-128 /* f1186c4: afbf0014 */ sw $ra,0x14($sp) /* f1186c8: afa40080 */ sw $a0,0x80($sp) /* f1186cc: 3c057f1b */ lui $a1,0x7f1b /* f1186d0: 24a5ee7c */ addiu $a1,$a1,-4484 -/* f1186d4: 0c00581b */ jal joyGetLock +/* f1186d4: 0c00581b */ jal joyDisableCyclicPolling /* f1186d8: 24041b85 */ addiu $a0,$zero,0x1b85 /* f1186dc: 83a20083 */ lb $v0,0x83($sp) /* f1186e0: 3c0f800a */ lui $t7,0x800a @@ -14014,7 +14013,7 @@ glabel pak0f11e844 /* f118714: 13010006 */ beq $t8,$at,.NB0f118730 /* f118718: 27a5002f */ addiu $a1,$sp,0x2f /* f11871c: 3c057f1b */ lui $a1,0x7f1b -/* f118720: 0c005834 */ jal joyReleaseLock +/* f118720: 0c005834 */ jal joyEnableCyclicPolling /* f118724: 24a5ee84 */ addiu $a1,$a1,-4476 /* f118728: 100000a3 */ beqz $zero,.NB0f1189b8 /* f11872c: 00001025 */ or $v0,$zero,$zero @@ -14033,13 +14032,13 @@ glabel pak0f11e844 /* f118758: 0019c8c0 */ sll $t9,$t9,0x3 /* f11875c: 03282021 */ addu $a0,$t9,$t0 .NB0f118760: -/* f118760: 0c0148f0 */ jal func00050be0 +/* f118760: 0c0148f0 */ jal osGbpakGetStatus /* f118764: afa30020 */ sw $v1,0x20($sp) /* f118768: 10400007 */ beqz $v0,.NB0f118788 /* f11876c: 93a3002f */ lbu $v1,0x2f($sp) /* f118770: 3c057f1b */ lui $a1,0x7f1b /* f118774: 24a5ee8c */ addiu $a1,$a1,-4468 -/* f118778: 0c005834 */ jal joyReleaseLock +/* f118778: 0c005834 */ jal joyEnableCyclicPolling /* f11877c: 24041b91 */ addiu $a0,$zero,0x1b91 /* f118780: 1000008d */ beqz $zero,.NB0f1189b8 /* f118784: 00001025 */ or $v0,$zero,$zero @@ -14061,7 +14060,7 @@ glabel pak0f11e844 /* f1187bc: 000a50c0 */ sll $t2,$t2,0x3 /* f1187c0: 014b2021 */ addu $a0,$t2,$t3 .NB0f1187c4: -/* f1187c4: 0c0148f0 */ jal func00050be0 +/* f1187c4: 0c0148f0 */ jal osGbpakGetStatus /* f1187c8: 27a5002f */ addiu $a1,$sp,0x2f /* f1187cc: 93a3002f */ lbu $v1,0x2f($sp) .NB0f1187d0: @@ -14069,7 +14068,7 @@ glabel pak0f11e844 /* f1187d4: 14400006 */ bnez $v0,.NB0f1187f0 /* f1187d8: 24041b9f */ addiu $a0,$zero,0x1b9f /* f1187dc: 3c057f1b */ lui $a1,0x7f1b -/* f1187e0: 0c005834 */ jal joyReleaseLock +/* f1187e0: 0c005834 */ jal joyEnableCyclicPolling /* f1187e4: 24a5ee94 */ addiu $a1,$a1,-4460 /* f1187e8: 10000073 */ beqz $zero,.NB0f1189b8 /* f1187ec: 00001025 */ or $v0,$zero,$zero @@ -14077,7 +14076,7 @@ glabel pak0f11e844 /* f1187f0: 14400006 */ bnez $v0,.NB0f11880c /* f1187f4: 24041ba6 */ addiu $a0,$zero,0x1ba6 /* f1187f8: 3c057f1b */ lui $a1,0x7f1b -/* f1187fc: 0c005834 */ jal joyReleaseLock +/* f1187fc: 0c005834 */ jal joyEnableCyclicPolling /* f118800: 24a5ee9c */ addiu $a1,$a1,-4452 /* f118804: 1000006c */ beqz $zero,.NB0f1189b8 /* f118808: 00001025 */ or $v0,$zero,$zero @@ -14097,13 +14096,13 @@ glabel pak0f11e844 /* f118838: 25ad7658 */ addiu $t5,$t5,0x7658 /* f11883c: 018d2021 */ addu $a0,$t4,$t5 .NB0f118840: -/* f118840: 0c00191c */ jal func00006330 +/* f118840: 0c00191c */ jal osGbpakPower /* f118844: 24050001 */ addiu $a1,$zero,0x1 /* f118848: 10400007 */ beqz $v0,.NB0f118868 /* f11884c: 83ae0083 */ lb $t6,0x83($sp) /* f118850: 3c057f1b */ lui $a1,0x7f1b /* f118854: 24a5eea4 */ addiu $a1,$a1,-4444 -/* f118858: 0c005834 */ jal joyReleaseLock +/* f118858: 0c005834 */ jal joyEnableCyclicPolling /* f11885c: 24041bad */ addiu $a0,$zero,0x1bad /* f118860: 10000055 */ beqz $zero,.NB0f1189b8 /* f118864: 00001025 */ or $v0,$zero,$zero @@ -14124,13 +14123,13 @@ glabel pak0f11e844 /* f118898: 0018c0c0 */ sll $t8,$t8,0x3 /* f11889c: 03192021 */ addu $a0,$t8,$t9 .NB0f1188a0: -/* f1188a0: 0c014950 */ jal func00050d60 +/* f1188a0: 0c014950 */ jal osGbpakReadId /* f1188a4: 27a6002f */ addiu $a2,$sp,0x2f /* f1188a8: 10400007 */ beqz $v0,.NB0f1188c8 /* f1188ac: 97a80074 */ lhu $t0,0x74($sp) /* f1188b0: 3c057f1b */ lui $a1,0x7f1b /* f1188b4: 24a5eeac */ addiu $a1,$a1,-4436 -/* f1188b8: 0c005834 */ jal joyReleaseLock +/* f1188b8: 0c005834 */ jal joyEnableCyclicPolling /* f1188bc: 24041bb8 */ addiu $a0,$zero,0x1bb8 /* f1188c0: 1000003d */ beqz $zero,.NB0f1189b8 /* f1188c4: 00001025 */ or $v0,$zero,$zero @@ -14141,12 +14140,12 @@ glabel pak0f11e844 /* f1188d4: 24848058 */ addiu $a0,$a0,-32680 /* f1188d8: 15090014 */ bne $t0,$t1,.NB0f11892c /* f1188dc: 00000000 */ sll $zero,$zero,0x0 -/* f1188e0: 0fc4619b */ jal pak0f11e7f0 +/* f1188e0: 0fc4619b */ jal gbpakStrcmp /* f1188e4: 27a50064 */ addiu $a1,$sp,0x64 /* f1188e8: 14400006 */ bnez $v0,.NB0f118904 /* f1188ec: 3c048008 */ lui $a0,0x8008 /* f1188f0: 24848068 */ addiu $a0,$a0,-32664 -/* f1188f4: 0fc4619b */ jal pak0f11e7f0 +/* f1188f4: 0fc4619b */ jal gbpakStrcmp /* f1188f8: 27a50064 */ addiu $a1,$sp,0x64 /* f1188fc: 1040000b */ beqz $v0,.NB0f11892c /* f118900: 00000000 */ sll $zero,$zero,0x0 @@ -14159,7 +14158,7 @@ glabel pak0f11e844 /* f118918: 356d0020 */ ori $t5,$t3,0x20 /* f11891c: 31ae00ef */ andi $t6,$t5,0xef /* f118920: a04d02b8 */ sb $t5,0x2b8($v0) -/* f118924: 0c005834 */ jal joyReleaseLock +/* f118924: 0c005834 */ jal joyEnableCyclicPolling /* f118928: a04e02b8 */ sb $t6,0x2b8($v0) .NB0f11892c: /* f11892c: 3c188008 */ lui $t8,0x8008 @@ -14169,12 +14168,12 @@ glabel pak0f11e844 /* f11893c: 24848078 */ addiu $a0,$a0,-32648 /* f118940: 15f80018 */ bne $t7,$t8,.NB0f1189a4 /* f118944: 00000000 */ sll $zero,$zero,0x0 -/* f118948: 0fc4619b */ jal pak0f11e7f0 +/* f118948: 0fc4619b */ jal gbpakStrcmp /* f11894c: 27a50064 */ addiu $a1,$sp,0x64 /* f118950: 14400006 */ bnez $v0,.NB0f11896c /* f118954: 3c048008 */ lui $a0,0x8008 /* f118958: 24848084 */ addiu $a0,$a0,-32636 -/* f11895c: 0fc4619b */ jal pak0f11e7f0 +/* f11895c: 0fc4619b */ jal gbpakStrcmp /* f118960: 27a50064 */ addiu $a1,$sp,0x64 /* f118964: 1040000f */ beqz $v0,.NB0f1189a4 /* f118968: 00000000 */ sll $zero,$zero,0x0 @@ -14189,14 +14188,14 @@ glabel pak0f11e844 /* f118988: a04b02b8 */ sb $t3,0x2b8($v0) /* f11898c: 3c057f1b */ lui $a1,0x7f1b /* f118990: 24a5eebc */ addiu $a1,$a1,-4420 -/* f118994: 0c005834 */ jal joyReleaseLock +/* f118994: 0c005834 */ jal joyEnableCyclicPolling /* f118998: 24041bdf */ addiu $a0,$zero,0x1bdf /* f11899c: 10000006 */ beqz $zero,.NB0f1189b8 /* f1189a0: 24020002 */ addiu $v0,$zero,0x2 .NB0f1189a4: /* f1189a4: 3c057f1b */ lui $a1,0x7f1b /* f1189a8: 24a5eec4 */ addiu $a1,$a1,-4412 -/* f1189ac: 0c005834 */ jal joyReleaseLock +/* f1189ac: 0c005834 */ jal joyEnableCyclicPolling /* f1189b0: 24041be4 */ addiu $a0,$zero,0x1be4 /* f1189b4: 00001025 */ or $v0,$zero,$zero .NB0f1189b8: @@ -14274,7 +14273,7 @@ glabel pak0f11eaec /* f11eb80: a3b80028 */ sb $t8,0x28($sp) /* f11eb84: 3c047f1b */ lui $a0,%hi(var7f1b4d80) /* f11eb88: 24844d80 */ addiu $a0,$a0,%lo(var7f1b4d80) -/* f11eb8c: 0fc479fc */ jal pak0f11e7f0 +/* f11eb8c: 0fc479fc */ jal gbpakStrcmp /* f11eb90: 27a50038 */ addiu $a1,$sp,0x38 /* f11eb94: 24190001 */ addiu $t9,$zero,0x1 /* f11eb98: afb90010 */ sw $t9,0x10($sp) @@ -14306,20 +14305,26 @@ glabel pak0f11eaec /* f11ebf4: 27bd0098 */ addiu $sp,$sp,0x98 ); -void pak0f11ebf8(s8 arg0) +/** + * This function isn't called. + * + * It reads data from the game boy pak, unsets a bit, writes it, reads it back, + * sets the bit, writes it and then reads it back. + */ +void gbpakFiddle(s8 device) { - u8 sp20[32]; + u8 buffer[32]; - if (pak0f11cbd8(arg0, 0xa000, sp20, 32)) { - pak0f11e750(arg0); - sp20[0] &= 0x7f; + if (gbpakRead(device, 0xa000, buffer, sizeof(buffer))) { + pak0f11e750(device); + buffer[0] &= 0x7f; - if (pak0f11cc6c(arg0, 0xa000, sp20, 32)) { - if (pak0f11cbd8(arg0, 0xa000, sp20, 32)) { - sp20[0] |= 0x80; + if (gbpakWrite(device, 0xa000, buffer, sizeof(buffer))) { + if (gbpakRead(device, 0xa000, buffer, sizeof(buffer))) { + buffer[0] |= 0x80; - if (pak0f11cc6c(arg0, 0xa000, sp20, 32)) { - pak0f11cbd8(arg0, 0xa000, sp20, 32); + if (gbpakWrite(device, 0xa000, buffer, sizeof(buffer))) { + gbpakRead(device, 0xa000, buffer, sizeof(buffer)); } } } diff --git a/src/include/PR/os_pfs.h b/src/include/PR/os_pfs.h index 6c358b936..9ae5574af 100644 --- a/src/include/PR/os_pfs.h +++ b/src/include/PR/os_pfs.h @@ -68,6 +68,23 @@ typedef struct { char game_name[16]; } OSPfsState; +typedef struct { + u16 fixed1; /* Fixed data (0x00, 0xc3) */ + u16 start_address; /* Program start address */ + u8 nintendo_chr[0x30]; /* "Nintendo" character data */ + u8 game_title[16]; /* Game title */ + u16 company_code; /* Company code */ + u8 body_code; /* Body code */ + u8 cart_type; /* Game pak type */ + u8 rom_size; /* ROM size */ + u8 ram_size; /* RAM size */ + u8 country_code; /* country code */ + u8 fixed_data; /* fixed data(0x33) */ + u8 version; /* Mask ROM version number */ + u8 isum; /* Complement check */ + u16 sum; /* Sum check */ +} OSGbpakId; + /************************************************************************** * * Global definitions @@ -87,11 +104,16 @@ typedef struct { #define PFS_ERR_EXIST 9 /* file exists */ #define PFS_ERR_ID_FATAL 10 /* dead ram pack */ #define PFS_ERR_DEVICE 11 /* wrong device type */ +#define PFS_ERR_NO_GBCART 12 /* no gb cartridge (64GB-PAK) */ +#define PFS_ERR_NEW_GBCART 13 /* gb cartridge may be changed */ #define OS_PFS_VERSION 0x0200 #define OS_PFS_VERSION_HI (OS_PFS_VERSION >> 8) #define OS_PFS_VERSION_LO (OS_PFS_VERSION & 255) +#define OS_GBPAK_POWER_OFF 0 +#define OS_GBPAK_POWER_ON 1 + #define PFS_FILE_NAME_LEN 16 #define PFS_FILE_EXT_LEN 4 #define BLOCKSIZE 32 /* bytes */ @@ -167,6 +189,12 @@ s32 osMotorAccess(OSPfs *pfs, u32 vibrate); void osSetUpMempakWrite(s32 channel, OSPifRam* buf); s32 osMotorProbe(OSMesgQueue *mq, OSPfs *pfs, s32 channel); +s32 osGbpakCheckConnector(OSPfs *pfs, u8 *status); +s32 osGbpakGetStatus(OSPfs *pfs, u8 *status); +s32 osGbpakPower(OSPfs *pfs, s32 flag); +s32 osGbpakReadId(OSPfs *pfs, OSGbpakId *id, u8 *status); +s32 osGbpakReadWrite(OSPfs *pfs, u16 flag, u16 address, u8 *buffer, u16 size); + #endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ #ifdef _LANGUAGE_C_PLUS_PLUS diff --git a/src/include/constants.h b/src/include/constants.h index 5cb198772..eedac1745 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -1000,6 +1000,9 @@ #define GAMEFILEFLAG_4D 0x4d #define GAMEFILEFLAG_4E 0x4e +#define GBGAME_OTHER 0 +#define GBGAME_PD 2 + #define GOPOSFLAG_SPEED 0x03 // bits 0x01 and 0x02 combined #define GOPOSFLAG_INIT 0x04 #define GOPOSFLAG_FORPATHSTART 0x08 @@ -3082,6 +3085,11 @@ #define PAKFILETYPE_GAME 0x080 #define PAKFILETYPE_100 0x100 +#define PAKTYPE_NONE 0 +#define PAKTYPE_RUMBLE 1 +#define PAKTYPE_MEMORY 2 +#define PAKTYPE_GAMEBOY 3 + #define PATHFLAG_CIRCULAR 1 #define PATHFLAG_FLYING 2 #define PATHFLAG_INUSE 4 @@ -3230,6 +3238,15 @@ #define ROOMFLAG_PLAYAMBIENTTRACK 0x4000 #define ROOMFLAG_OUTDOORS 0x8000 +#define RUMBLESTATE_1 1 +#define RUMBLESTATE_ENABLED_STOPPED 2 +#define RUMBLESTATE_ENABLED_STARTING 3 +#define RUMBLESTATE_ENABLED_RUMBLING 4 +#define RUMBLESTATE_ENABLED_STOPPING 5 +#define RUMBLESTATE_DISABLED_STOPPING 6 +#define RUMBLESTATE_DISABLED_STOPPED 7 +#define RUMBLESTATE_ENABLING 8 + #define SAVEDEVICE_CONTROLLERPAK1 0 #define SAVEDEVICE_CONTROLLERPAK2 1 #define SAVEDEVICE_CONTROLLERPAK3 2 diff --git a/src/include/game/bondgun.h b/src/include/game/bondgun.h index ce290bd04..d97bae154 100644 --- a/src/include/game/bondgun.h +++ b/src/include/game/bondgun.h @@ -4,7 +4,7 @@ #include "data.h" #include "types.h" -void bgun0f097ba0(s32 handnum, s32 weaponnum); +void bgunRumble(s32 handnum, s32 weaponnum); s32 bgunGetUnequippedReloadIndex(s32 weaponnum); void bgunTickUnequippedReload(void); bool bgun0f097df0(struct inventory_typef *arg0, struct hand *hand); diff --git a/src/include/game/pak/pak.h b/src/include/game/pak/pak.h index c2199f3cd..979acbd69 100644 --- a/src/include/game/pak/pak.h +++ b/src/include/game/pak/pak.h @@ -9,7 +9,7 @@ u32 pakAlign(s8 device, u32 size); s32 pakGetAlignedFileLenByBodyLen(s8 device, s32 bodylen); u32 pakGetBodyLenByFileLen(u32 filelen); u32 pakGenerateSerial(s8 device); -bool pakIsConnected(s8 device); +bool pakIsMemoryPak(s8 device); s32 pak0f1167b0(s8 device, u32 filetype, u32 *buffer1024); s32 pak0f1167d8(s8 device); s32 pak0f116800(s8 device, s32 fileid, u8 *body, s32 arg3); @@ -17,20 +17,20 @@ s32 pak0f116828(s8 device, s32 fileid, s32 filetype, u8 *body, s32 *outfileid, s bool pakDeleteFile(s8 device, s32 fileid); s32 pakDeleteGameNote(s8 device, u16 company_code, u32 game_code, char *game_name, char *ext_name); s32 pak0f1168c4(s8 device, struct pakdata **arg1); -u32 pak0f116914(s8 device); -s32 pakGetDeviceSerial(s8 device); +u32 pakGetType(s8 device); +s32 pakGetSerial(s8 device); void pak0f11698c(s8 device); void pak0f116994(void); void pak0f1169c8(s8 device, s32 arg1); bool pak0f116aec(s8 device); bool pak0f116b5c(s8 device); void pak0f116bdc(s8 device, u8 *arg1, u8 *arg2); -u16 pakGetSerial(s8 device); -u32 pakGetUnk000(s8 device); +u16 _pakGetSerial(s8 device); +u32 _pakGetType(s8 device); void pakSetUnk010(s8 device, s32 value); s32 pak0f116df0(s8 device, struct pakdata **arg1); -s32 pakDeleteGameNote2(s8 device, u16 company_code, u32 game_code, char *game_name, char *ext_name); -s32 pakDeleteFile2(s8 device, s32 fileid); +s32 _pakDeleteGameNote(s8 device, u16 company_code, u32 game_code, char *game_name, char *ext_name); +s32 _pakDeleteFile(s8 device, s32 fileid); s32 pakGetUnk264(s8 device); u32 pakGetMaxFileSize(s8 device); s32 pakGetBodyLenByType(s8 device, u32 filetype); @@ -105,9 +105,9 @@ void pak0f11c54c(void); void pak0f11c6d0(void); void pakExecuteDebugOperations(void); void pak0f11ca30(void); -void pak0f11cb9c(u32 arg0); -s32 pak0f11cbd8(s8 device, s32 arg1, char *arg2, u16 arg3); -s32 pak0f11cc6c(s8 device, u16 arg1, char *buffer, u16 len); +void gbpakHandleError(u32 arg0); +bool gbpakRead(s8 device, s32 address, u8 *buffer, u16 size); +bool gbpakWrite(s8 device, u16 address, u8 *buffer, u16 size); bool pak0f11cd00(s8 device, u16 arg1, char *arg2, s32 arg3, s32 arg4); bool pak0f11ce00(s8 device, u16 arg1, char *arg2, s32 arg3, bool arg4); u32 pak0f11d118(void); @@ -123,16 +123,16 @@ u32 pak0f11d8b4(void); u32 pak0f11d9c4(void); #if VERSION >= VERSION_NTSC_1_0 -void pak0f11dc04(s32 arg0, f32 arg1, s32 arg2, s32 arg3); +void pakRumble(s32 device, f32 numsecs, s32 onduration, s32 offduration); #else -void pak0f11dc04(s8 arg0, f32 arg1, s32 arg2, s32 arg3); +void pakRumble(s8 device, f32 numsecs, s32 onduration, s32 offduration); #endif -void pak0f11dcb0(s32 arg0); -void pak0f11dd58(s8 playernum); -void pak0f11de20(s8 playernum); -void pak0f11deb8(void); -void pak0f11df38(void); +void pakStopRumbleForAllPaks(bool disablepolling); +void pakDisableRumbleForPlayer(s8 playernum); +void pakEnableRumbleForPlayer(s8 playernum); +void pakDisableRumbleForAllPlayers(void); +void pakEnableRumbleForAllPlayers(void); void pakDumpPak(void); void pak0f11df94(s8 device); void pak0f11e3bc(s8 device); @@ -144,10 +144,10 @@ bool pakHasBitflag(u32 flagnum, u8 *stream); void pakClearAllBitflags(u8 *flags); void pakN64FontCodeToAscii(char *src, char *dst, s32 len); s8 pakFindBySerial(s32 deviceserial); -s32 pak0f11e750(s8 arg0); -bool pak0f11e78c(void); -bool pak0f11e7f0(char *a, char *b); -s32 pak0f11e844(s8 device); +s32 pak0f11e750(s8 device); +bool gbpakIsAnyPerfectDark(void); +bool gbpakStrcmp(char *a, char *b); +s32 gbpakIdentifyGame(s8 device); bool pak0f11ea34(s8 arg0); extern const char var7f1b423c[]; diff --git a/src/include/lib/joy.h b/src/include/lib/joy.h index 5ffb79677..41533da6d 100644 --- a/src/include/lib/joy.h +++ b/src/include/lib/joy.h @@ -24,7 +24,7 @@ void joy00014238(void); void joyDebugJoy(void); s32 joyStartReadData(OSMesgQueue *mq); void joyReadData(void); -void joyPoll(void); +void joysTick(void); void joy00014810(bool value); s32 joyGetNumSamples(void); s32 joyGetStickXOnSample(s32 samplenum, s8 contpadnum); @@ -37,21 +37,21 @@ s32 joyGetStickX(s8 contpadnum); s32 joyGetStickY(s8 contpadnum); u16 joyGetButtons(s8 contpadnum, u16 mask); u16 joyGetButtonsPressedThisFrame(s8 contpadnum, u16 mask); -s32 joy000150c4(void); +bool joyIsCyclicPollingEnabled(void); #if VERSION >= VERSION_NTSC_1_0 -void joyGetLock(void); -void joyReleaseLock(void); +void joyDisableCyclicPolling(void); +void joyEnableCyclicPolling(void); #else -void joyGetLock(s32 line, char *file); -void joyReleaseLock(s32 line, char *file); +void joyDisableCyclicPolling(s32 line, char *file); +void joyEnableCyclicPolling(s32 line, char *file); #endif void joyReset(void); void joyGetContpadNumsForPlayer(s8 playernum, s32 *pad1, s32 *pad2); -void joy000153c4(s8 device, s32 arg1); +void joyStopRumble(s8 device, bool disablepolling); s32 joy000155b4(s8 device); s32 joy000155f4(s8 device); -void joy0001561c(void); +void joysTickRumble(void); #endif diff --git a/src/include/lib/lib_06330.h b/src/include/lib/lib_06330.h deleted file mode 100644 index 8b0d3259f..000000000 --- a/src/include/lib/lib_06330.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef _IN_LIB_LIB_06330_H -#define _IN_LIB_LIB_06330_H -#include -#include "data.h" -#include "types.h" - -s32 func00006330(OSPfs *pfs, u32 arg1); - -#endif diff --git a/src/include/lib/lib_50be0.h b/src/include/lib/lib_50be0.h deleted file mode 100644 index 2b7bbaf24..000000000 --- a/src/include/lib/lib_50be0.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef _IN_LIB_LIB_50BE0_H -#define _IN_LIB_LIB_50BE0_H -#include -#include "data.h" -#include "types.h" - -u32 func00050be0(void); - -#endif diff --git a/src/include/lib/lib_50d60.h b/src/include/lib/lib_50d60.h deleted file mode 100644 index 31961080b..000000000 --- a/src/include/lib/lib_50d60.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef _IN_LIB_LIB_50D60_H -#define _IN_LIB_LIB_50D60_H -#include -#include "data.h" -#include "types.h" - -s32 func00050d60(OSPfs *pfs, char *arg1, u8 *arg2); - -#endif diff --git a/src/include/lib/lib_50f20.h b/src/include/lib/lib_50f20.h deleted file mode 100644 index c7d71c6cb..000000000 --- a/src/include/lib/lib_50f20.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef _IN_LIB_LIB_50F20_H -#define _IN_LIB_LIB_50F20_H -#include -#include "data.h" -#include "types.h" - -u32 func50f20(void); - -#endif diff --git a/src/include/lib/lib_513b0.h b/src/include/lib/lib_513b0.h deleted file mode 100644 index 0a6ad519d..000000000 --- a/src/include/lib/lib_513b0.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef _IN_LIB_LIB_513B0_H -#define _IN_LIB_LIB_513B0_H -#include -#include "data.h" -#include "types.h" - -s32 func000513b0(OSPfs *pfs, bool arg1, u16 arg2, char *arg3, u16 arg4); - -#endif diff --git a/src/include/types.h b/src/include/types.h index 9b09c8751..aab1558b5 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -5031,8 +5031,8 @@ struct pakheadercache { }; struct pak { - /*0x000*/ s32 unk000; - /*0x004*/ u32 unk004; + /*0x000*/ s32 type; + /*0x004*/ u32 rumblestate; /*0x008*/ u32 unk008; /*0x00c*/ u32 unk00c; /*0x010*/ u32 unk010; @@ -5048,9 +5048,9 @@ struct pak { /*0x278*/ u32 unk278; /*0x27c*/ u32 unk27c; /*0x280*/ u32 unk280; - /*0x284*/ s32 unk284; - /*0x288*/ u32 unk288; - /*0x28c*/ u32 unk28c; + /*0x284*/ s32 rumblepulsestopat; + /*0x288*/ u32 rumblepulselen; + /*0x28c*/ u32 rumblepulsetimer; // counts up to pulselen then loops /*0x290*/ u32 unk290; /*0x294*/ u32 unk294; /*0x298*/ u32 unk298; @@ -5060,7 +5060,7 @@ struct pak { /*0x2a8*/ u32 numpages; /*0x2ac*/ u32 unk2ac; /*0x2b0*/ u32 unk2b0; - /*0x2b4*/ f32 unk2b4; + /*0x2b4*/ f32 rumblettl; /*0x2b8*/ u8 unk2b8_01 : 1; /*0x2b8*/ u8 unk2b8_02 : 1; /*0x2b8*/ u8 unk2b8_03 : 1; diff --git a/src/lib/joy.c b/src/lib/joy.c index a5549d2ce..bea2ff466 100644 --- a/src/lib/joy.c +++ b/src/lib/joy.c @@ -46,16 +46,16 @@ u32 var80099eb0; u32 var80099eb4; OSMesg var80099eb8; u32 var80099ebc; -OSMesgQueue var80099ec0; +OSMesgQueue g_JoyStopCyclicPollingMesgQueue; OSMesg var80099ed8; u32 var80099edc; -OSMesgQueue var80099ee0; +OSMesgQueue g_JoyStopCyclicPollingDoneMesgQueue; OSMesg var80099ef8; u32 var80099efc; -OSMesgQueue var80099f00; +OSMesgQueue g_JoyStartCyclicPollingMesgQueue; OSMesg var80099f18; u32 var80099f1c; -OSMesgQueue var80099f20; +OSMesgQueue g_JoyStartCyclicPollingDoneMesgQueue; OSContStatus var80099f38[4]; u8 g_JoyPfsStates[100]; u32 var80099fac; @@ -79,7 +79,7 @@ u8 g_JoyConnectedControllers = 0; bool g_JoyQueuesCreated = false; bool g_JoyInitDone = false; bool g_JoyNeedsInit = true; -u32 var8005eebc = 0; +u32 g_JoyCyclicPollDisableCount = 0; u32 var8005eec0 = 1; s32 (*var8005eec4)(struct contsample *samples, s32 samplenum) = NULL; void (*var8005eec8)(struct contsample *samples, s32 samplenum, s32 samplenum2) = NULL; @@ -98,7 +98,7 @@ u32 var8005eef0 = 1; void joy00013900(void) { if (var8005eef0) { - joyGetLock(); + joyDisableCyclicPolling(); var8005eef0 = false; } } @@ -106,7 +106,7 @@ void joy00013900(void) void joy00013938(void) { if (!var8005eef0) { - joyReleaseLock(); + joyEnableCyclicPolling(); var8005eef0 = true; } } @@ -213,7 +213,7 @@ void joyCheckPfs(s32 arg0) u32 value; if (var8005eedc - && (arg0 == 2 || (var8005eee0 && (arg0 || ((var8005eebc == 0 || var8005eef0 == 0) && var8005eeec)))) + && (arg0 == 2 || (var8005eee0 && (arg0 || ((g_JoyCyclicPollDisableCount == 0 || var8005eef0 == 0) && var8005eeec)))) && !doingit) { doingit = true; prevcount = thiscount; @@ -235,13 +235,13 @@ void joyCheckPfs(s32 arg0) var8005eee8++; if (arg0) { - joyGetLock(); + joyDisableCyclicPolling(); } osPfsIsPlug(&var80099e78, &bitpattern); if (arg0) { - joyReleaseLock(); + joyEnableCyclicPolling(); } bitpattern |= 0x10; @@ -299,10 +299,10 @@ void joySystemInit(void) s32 i; s32 j; - osCreateMesgQueue(&var80099ec0, &var80099eb8, 1); - osCreateMesgQueue(&var80099ee0, &var80099ed8, 1); - osCreateMesgQueue(&var80099f00, &var80099ef8, 1); - osCreateMesgQueue(&var80099f20, &var80099f18, 1); + osCreateMesgQueue(&g_JoyStopCyclicPollingMesgQueue, &var80099eb8, 1); + osCreateMesgQueue(&g_JoyStopCyclicPollingDoneMesgQueue, &var80099ed8, 1); + osCreateMesgQueue(&g_JoyStartCyclicPollingMesgQueue, &var80099ef8, 1); + osCreateMesgQueue(&g_JoyStartCyclicPollingDoneMesgQueue, &var80099f18, 1); osCreateMesgQueue(&var80099e78, &var80099e90, 10); osSetEventMesg(OS_EVENT_SI, &var80099e78, NULL); @@ -354,13 +354,13 @@ void joy00013dfc(void) OSMesg msg; if (g_JoyQueuesCreated) { - osSendMesg(&var80099ec0, &msg, OS_MESG_NOBLOCK); - osRecvMesg(&var80099ee0, &msg, OS_MESG_BLOCK); + osSendMesg(&g_JoyStopCyclicPollingMesgQueue, &msg, OS_MESG_NOBLOCK); + osRecvMesg(&g_JoyStopCyclicPollingDoneMesgQueue, &msg, OS_MESG_BLOCK); joy00013e84(); - osSendMesg(&var80099f00, &msg, OS_MESG_NOBLOCK); - osRecvMesg(&var80099f20, &msg, OS_MESG_BLOCK); + osSendMesg(&g_JoyStartCyclicPollingMesgQueue, &msg, OS_MESG_NOBLOCK); + osRecvMesg(&g_JoyStartCyclicPollingDoneMesgQueue, &msg, OS_MESG_BLOCK); var8005eec0 = 1; } @@ -380,7 +380,7 @@ void joy00013e84(void) g_JoyInitDone = true; for (i = 0; i < 4; i++) { - joy000153c4(i, 0); + joyStopRumble(i, false); } } else { u32 slots = 0xf; @@ -560,7 +560,7 @@ void joy00014238(void) } if (var8005eec4 == NULL) { - joy0001561c(); + joysTickRumble(); } doingit = false; @@ -594,22 +594,22 @@ void joyDebugJoy(void) var8005eec8(g_JoyData[0].samples, g_JoyData[0].curstart, g_JoyData[0].curlast); } - if (joy000150c4() && var8005eec0 && joyGetNumSamples() <= 0) { + if (joyIsCyclicPollingEnabled() && var8005eec0 && joyGetNumSamples() <= 0) { #if VERSION >= VERSION_NTSC_FINAL - joyGetLock(); + joyDisableCyclicPolling(); joy00014238(); - joyReleaseLock(); + joyEnableCyclicPolling(); joyConsumeSamples(&g_JoyData[0]); #elif VERSION >= VERSION_NTSC_1_0 - joyGetLock(); - joyReleaseLock(); + joyDisableCyclicPolling(); + joyEnableCyclicPolling(); joyConsumeSamples(&g_JoyData[0]); joy00014238(); #else - joyGetLock(500, "joy.c"); + joyDisableCyclicPolling(500, "joy.c"); joy00014238(); func0001509cnb(); - joyReleaseLock(507, "joy.c"); + joyEnableCyclicPolling(507, "joy.c"); joyConsumeSamples(&g_JoyData[0]); #endif } @@ -654,12 +654,12 @@ void joyReadData(void) } #if VERSION >= VERSION_NTSC_1_0 -void joyPoll(void) +void joysTick(void) { OSMesg msg; s8 i; - if (osRecvMesg(&var80099ec0, &msg, OS_MESG_NOBLOCK) == 0) { + if (osRecvMesg(&g_JoyStopCyclicPollingMesgQueue, &msg, OS_MESG_NOBLOCK) == 0) { if (g_JoyBusy) { osRecvMesg(&var80099e78, &msg, OS_MESG_BLOCK); @@ -676,7 +676,7 @@ void joyPoll(void) } } - osSendMesg(&var80099ee0, &msg, OS_MESG_NOBLOCK); + osSendMesg(&g_JoyStopCyclicPollingDoneMesgQueue, &msg, OS_MESG_NOBLOCK); var8005ee68++; @@ -684,7 +684,7 @@ void joyPoll(void) return; } - if (osRecvMesg(&var80099f00, &msg, OS_MESG_NOBLOCK) == 0) { + if (osRecvMesg(&g_JoyStartCyclicPollingMesgQueue, &msg, OS_MESG_NOBLOCK) == 0) { var8005ee68--; if (var8005ee68 == 0) { @@ -692,7 +692,7 @@ void joyPoll(void) g_JoyBusy = true; } - osSendMesg(&var80099f20, &msg, OS_MESG_NOBLOCK); + osSendMesg(&g_JoyStartCyclicPollingDoneMesgQueue, &msg, OS_MESG_NOBLOCK); return; } @@ -744,7 +744,7 @@ void joyPoll(void) } #else GLOBAL_ASM( -glabel joyPoll +glabel joysTick /* 1536c: 3c028006 */ lui $v0,0x8006 /* 15370: 244212c0 */ addiu $v0,$v0,0x12c0 /* 15374: 8c4e0000 */ lw $t6,0x0($v0) @@ -1233,12 +1233,19 @@ glabel func00015fa4nb ); #endif -s32 joy000150c4(void) +bool joyIsCyclicPollingEnabled(void) { - return var8005eebc ? false : true; + return g_JoyCyclicPollDisableCount ? false : true; } -void joyGetLock( +/** + * If cyclic polling is enabled, send a message to the scheduler thread telling + * it to update the joy state (connected controllers, PFS etc). Then block while + * waiting for its done message to come back, and increment the disable count. + * + * If cyclic polling was already disabled, simply increase the disable count. + */ +void joyDisableCyclicPolling( #if VERSION >= VERSION_NTSC_1_0 void #else @@ -1248,15 +1255,19 @@ void joyGetLock( { OSMesg msg; - if (var8005eebc == 0) { - osSendMesg(&var80099ec0, &msg, OS_MESG_NOBLOCK); - osRecvMesg(&var80099ee0, &msg, OS_MESG_BLOCK); + if (g_JoyCyclicPollDisableCount == 0) { + osSendMesg(&g_JoyStopCyclicPollingMesgQueue, &msg, OS_MESG_NOBLOCK); + osRecvMesg(&g_JoyStopCyclicPollingDoneMesgQueue, &msg, OS_MESG_BLOCK); } - var8005eebc++; + g_JoyCyclicPollDisableCount++; } -void joyReleaseLock( +/** + * Indicate that the caller is done with cyclic polling being disabled, + * and enable cyclic polling if there are no callers left who want it disabled. + */ +void joyEnableCyclicPolling( #if VERSION >= VERSION_NTSC_1_0 void #else @@ -1266,11 +1277,11 @@ void joyReleaseLock( { OSMesg msg; - var8005eebc--; + g_JoyCyclicPollDisableCount--; - if (var8005eebc == 0) { - osSendMesg(&var80099f00, &msg, OS_MESG_NOBLOCK); - osRecvMesg(&var80099f20, &msg, OS_MESG_BLOCK); + if (g_JoyCyclicPollDisableCount == 0) { + osSendMesg(&g_JoyStartCyclicPollingMesgQueue, &msg, OS_MESG_NOBLOCK); + osRecvMesg(&g_JoyStartCyclicPollingDoneMesgQueue, &msg, OS_MESG_BLOCK); } } @@ -1340,14 +1351,14 @@ void joyGetContpadNumsForPlayer(s8 playernum, s32 *pad1, s32 *pad2) #endif #if VERSION >= VERSION_NTSC_1_0 -void joy000153c4(s8 device, s32 arg1) +void joyStopRumble(s8 device, bool disablepolling) { u32 stack; if (device != SAVEDEVICE_GAMEPAK) { - if (g_Paks[device].unk000 != 2 && g_Paks[device].unk000 != 3) { - if (arg1) { - joyGetLock(); + if (g_Paks[device].type != PAKTYPE_MEMORY && g_Paks[device].type != PAKTYPE_GAMEBOY) { + if (disablepolling) { + joyDisableCyclicPolling(); } if (osMotorProbe(&var80099e78, PFS(device), device) == 0) { @@ -1356,15 +1367,16 @@ void joy000153c4(s8 device, s32 arg1) osMotorStop(PFS(device)); } - if (arg1) { - joyReleaseLock(); + if (disablepolling) { + joyEnableCyclicPolling(); } - if (g_Paks[device].unk004 != 6 && g_Paks[device].unk004 != 7) { - g_Paks[device].unk004 = 5; + if (g_Paks[device].rumblestate != RUMBLESTATE_DISABLED_STOPPING + && g_Paks[device].rumblestate != RUMBLESTATE_DISABLED_STOPPED) { + g_Paks[device].rumblestate = RUMBLESTATE_ENABLED_STOPPING; } - g_Paks[device].unk2b4 = -1; + g_Paks[device].rumblettl = -1; } } @@ -1374,7 +1386,7 @@ void joy000153c4(s8 device, s32 arg1) } #else GLOBAL_ASM( -glabel joy000153c4 +glabel joyStopRumble /* 162b0: 27bdffd8 */ addiu $sp,$sp,-40 /* 162b4: 00047600 */ sll $t6,$a0,0x18 /* 162b8: 000e7e03 */ sra $t7,$t6,0x18 @@ -1407,7 +1419,7 @@ glabel joy000153c4 /* 16324: 2404041e */ addiu $a0,$zero,0x41e /* 16328: 3c057005 */ lui $a1,0x7005 /* 1632c: 24a55958 */ addiu $a1,$a1,0x5958 -/* 16330: 0c00581b */ jal joyGetLock +/* 16330: 0c00581b */ jal joyDisableCyclicPolling /* 16334: afa60024 */ sw $a2,0x24($sp) /* 16338: 8fa60024 */ lw $a2,0x24($sp) .NB0001633c: @@ -1493,7 +1505,7 @@ glabel joy000153c4 /* 16454: 3c057005 */ lui $a1,0x7005 /* 16458: 51000004 */ beqzl $t0,.NB0001646c /* 1645c: 8fa3001c */ lw $v1,0x1c($sp) -/* 16460: 0c005834 */ jal joyReleaseLock +/* 16460: 0c005834 */ jal joyEnableCyclicPolling /* 16464: 24a55960 */ addiu $a1,$a1,0x5960 /* 16468: 8fa3001c */ lw $v1,0x1c($sp) .NB0001646c: @@ -1528,49 +1540,49 @@ s32 joy000155f4(s8 device) return joy000155b4(device); } -void joy0001561c(void) +void joysTickRumble(void) { s32 i; for (i = 0; i < 4; i++) { - if (g_Paks[i].unk010 == 11 && g_Paks[i].unk000 == 1) { - switch (g_Paks[i].unk004) { - case 3: - g_Paks[i].unk004 = 4; + if (g_Paks[i].unk010 == 11 && g_Paks[i].type == PAKTYPE_RUMBLE) { + switch (g_Paks[i].rumblestate) { + case RUMBLESTATE_ENABLED_STARTING: + g_Paks[i].rumblestate = RUMBLESTATE_ENABLED_RUMBLING; osMotorStart(PFS(i)); break; - case 4: - if (g_Paks[i].unk284 != -1) { - if (g_Paks[i].unk28c == 0) { + case RUMBLESTATE_ENABLED_RUMBLING: + if (g_Paks[i].rumblepulsestopat != -1) { + if (g_Paks[i].rumblepulsetimer == 0) { osMotorStart(PFS(i)); - } else if (g_Paks[i].unk284 == g_Paks[i].unk28c) { + } else if (g_Paks[i].rumblepulsestopat == g_Paks[i].rumblepulsetimer) { osMotorStop(PFS(i)); } - g_Paks[i].unk28c++; + g_Paks[i].rumblepulsetimer++; - if (g_Paks[i].unk288 == g_Paks[i].unk28c) { - g_Paks[i].unk28c = 0; + if (g_Paks[i].rumblepulselen == g_Paks[i].rumblepulsetimer) { + g_Paks[i].rumblepulsetimer = 0; } } - g_Paks[i].unk2b4--; + g_Paks[i].rumblettl--; - if (g_Paks[i].unk2b4 < 0) { - g_Paks[i].unk004 = 5; + if (g_Paks[i].rumblettl < 0) { + g_Paks[i].rumblestate = RUMBLESTATE_ENABLED_STOPPING; } break; - case 5: - g_Paks[i].unk004 = 2; + case RUMBLESTATE_ENABLED_STOPPING: + g_Paks[i].rumblestate = RUMBLESTATE_ENABLED_STOPPED; osMotorStop(PFS(i)); break; - case 6: + case RUMBLESTATE_DISABLED_STOPPING: osMotorStop(PFS(i)); - g_Paks[i].unk004 = 7; + g_Paks[i].rumblestate = RUMBLESTATE_DISABLED_STOPPED; break; - case 8: - g_Paks[i].unk004 = 2; - g_Paks[i].unk2b4 = -1; + case RUMBLESTATE_ENABLING: + g_Paks[i].rumblestate = RUMBLESTATE_ENABLED_STOPPED; + g_Paks[i].rumblettl = -1; break; } } diff --git a/src/lib/lib_51570.c b/src/lib/lib_51570.c index 8b4ad860d..49f6d62d1 100644 --- a/src/lib/lib_51570.c +++ b/src/lib/lib_51570.c @@ -4,7 +4,6 @@ #include "bss.h" #include "lib/lib_4b170.h" #include "lib/lib_4e090.h" -#include "lib/lib_513b0.h" #include "lib/lib_52360.h" #include "data.h" #include "types.h" diff --git a/src/lib/sched.c b/src/lib/sched.c index 150b82d2a..72ed29004 100644 --- a/src/lib/sched.c +++ b/src/lib/sched.c @@ -284,7 +284,7 @@ void func00002078(OSSched *sc) func00009ed4(); } - joyPoll(); + joysTick(); snd0000fe18(); func00001b98(sc->frameCount); } diff --git a/src/lib/lib_50f20.c b/src/lib/ultra/io/gbpakcheckconnector.c similarity index 96% rename from src/lib/lib_50f20.c rename to src/lib/ultra/io/gbpakcheckconnector.c index f3f4a0b32..9384bac22 100644 --- a/src/lib/lib_50f20.c +++ b/src/lib/ultra/io/gbpakcheckconnector.c @@ -1,15 +1,13 @@ #include #include "constants.h" #include "bss.h" -#include "lib/lib_06330.h" #include "lib/libc/ll.h" #include "lib/lib_4e090.h" -#include "lib/lib_513b0.h" #include "data.h" #include "types.h" GLOBAL_ASM( -glabel func50f20 +glabel osGbpakCheckConnector /* 50f20: 27bdfdf0 */ addiu $sp,$sp,-528 /* 50f24: afbf0044 */ sw $ra,0x44($sp) /* 50f28: 240e0001 */ addiu $t6,$zero,0x1 @@ -26,13 +24,13 @@ glabel func50f20 /* 50f54: afa50214 */ sw $a1,0x214($sp) /* 50f58: afae0208 */ sw $t6,0x208($sp) /* 50f5c: afa00204 */ sw $zero,0x204($sp) -/* 50f60: 0c0142f8 */ jal func00050be0 +/* 50f60: 0c0142f8 */ jal osGbpakGetStatus /* 50f64: a7a00200 */ sh $zero,0x200($sp) /* 50f68: 2401000d */ addiu $at,$zero,0xd /* 50f6c: 14410005 */ bne $v0,$at,.L00050f84 /* 50f70: 00401825 */ or $v1,$v0,$zero /* 50f74: 8fa40210 */ lw $a0,0x210($sp) -/* 50f78: 0c0142f8 */ jal func00050be0 +/* 50f78: 0c0142f8 */ jal osGbpakGetStatus /* 50f7c: 8fa50214 */ lw $a1,0x214($sp) /* 50f80: 00401825 */ or $v1,$v0,$zero .L00050f84: @@ -49,7 +47,7 @@ glabel func50f20 /* 50fa8: 33190001 */ andi $t9,$t8,0x1 /* 50fac: 57200008 */ bnezl $t9,.L00050fd0 /* 50fb0: 27a40070 */ addiu $a0,$sp,0x70 -/* 50fb4: 0c0018cc */ jal func00006330 +/* 50fb4: 0c0018cc */ jal osGbpakPower /* 50fb8: 24050001 */ addiu $a1,$zero,0x1 /* 50fbc: 50400004 */ beqzl $v0,.L00050fd0 /* 50fc0: 27a40070 */ addiu $a0,$sp,0x70 @@ -83,7 +81,7 @@ glabel func50f20 /* 51024: 02a03825 */ or $a3,$s5,$zero /* 51028: 8fa40210 */ lw $a0,0x210($sp) /* 5102c: 00002825 */ or $a1,$zero,$zero -/* 51030: 0c0144ec */ jal func000513b0 +/* 51030: 0c0144ec */ jal osGbpakReadWrite /* 51034: 0240a025 */ or $s4,$s2,$zero /* 51038: 10400003 */ beqz $v0,.L00051048 /* 5103c: 8fae0208 */ lw $t6,0x208($sp) @@ -113,7 +111,7 @@ glabel func50f20 /* 51098: 30d8ffff */ andi $t8,$a2,0xffff /* 5109c: 03003025 */ or $a2,$t8,$zero /* 510a0: 00002825 */ or $a1,$zero,$zero -/* 510a4: 0c0144ec */ jal func000513b0 +/* 510a4: 0c0144ec */ jal osGbpakReadWrite /* 510a8: 02503821 */ addu $a3,$s2,$s0 /* 510ac: 50400004 */ beqzl $v0,.L000510c0 /* 510b0: a2360000 */ sb $s6,0x0($s1) @@ -160,7 +158,7 @@ glabel func50f20 /* 51140: 240f0020 */ addiu $t7,$zero,0x20 /* 51144: afaf0010 */ sw $t7,0x10($sp) /* 51148: 03ce3821 */ addu $a3,$s8,$t6 -/* 5114c: 0c0144ec */ jal func000513b0 +/* 5114c: 0c0144ec */ jal osGbpakReadWrite /* 51150: 01a03025 */ or $a2,$t5,$zero /* 51154: 50400004 */ beqzl $v0,.L00051168 /* 51158: a2160000 */ sb $s6,0x0($s0) @@ -179,7 +177,7 @@ glabel func50f20 /* 51188: 240a0020 */ addiu $t2,$zero,0x20 /* 5118c: afaa0010 */ sw $t2,0x10($sp) /* 51190: 02093821 */ addu $a3,$s0,$t1 -/* 51194: 0c0144ec */ jal func000513b0 +/* 51194: 0c0144ec */ jal osGbpakReadWrite /* 51198: 3246ffff */ andi $a2,$s2,0xffff /* 5119c: 50400004 */ beqzl $v0,.L000511b0 /* 511a0: a2360000 */ sb $s6,0x0($s1) @@ -258,7 +256,7 @@ glabel func50f20 /* 512a8: 02a03825 */ or $a3,$s5,$zero /* 512ac: 8fa40210 */ lw $a0,0x210($sp) /* 512b0: 00002825 */ or $a1,$zero,$zero -/* 512b4: 0c0144ec */ jal func000513b0 +/* 512b4: 0c0144ec */ jal osGbpakReadWrite /* 512b8: 0240a025 */ or $s4,$s2,$zero /* 512bc: 10400003 */ beqz $v0,.L000512cc /* 512c0: 8fa40210 */ lw $a0,0x210($sp) @@ -276,7 +274,7 @@ glabel func50f20 /* 512ec: afaf0010 */ sw $t7,0x10($sp) /* 512f0: 01603025 */ or $a2,$t3,$zero /* 512f4: 02203825 */ or $a3,$s1,$zero -/* 512f8: 0c0144ec */ jal func000513b0 +/* 512f8: 0c0144ec */ jal osGbpakReadWrite /* 512fc: 00002825 */ or $a1,$zero,$zero /* 51300: 10400003 */ beqz $v0,.L00051310 /* 51304: 02a02025 */ or $a0,$s5,$zero @@ -305,7 +303,7 @@ glabel func50f20 /* 51354: 24020004 */ addiu $v0,$zero,0x4 /* 51358: 8fa40210 */ lw $a0,0x210($sp) .L0005135c: -/* 5135c: 0c0142f8 */ jal func00050be0 +/* 5135c: 0c0142f8 */ jal osGbpakGetStatus /* 51360: 8fa50214 */ lw $a1,0x214($sp) /* 51364: 2401000d */ addiu $at,$zero,0xd /* 51368: 14410002 */ bne $v0,$at,.L00051374 diff --git a/src/lib/lib_50be0.c b/src/lib/ultra/io/gbpakgetstatus.c similarity index 98% rename from src/lib/lib_50be0.c rename to src/lib/ultra/io/gbpakgetstatus.c index d49c94a97..ee876646c 100644 --- a/src/lib/lib_50be0.c +++ b/src/lib/ultra/io/gbpakgetstatus.c @@ -3,15 +3,13 @@ #include "constants.h" #include "bss.h" #include "lib/lib_06100.h" -#include "lib/lib_06330.h" #include "lib/lib_4b170.h" #include "lib/lib_4e090.h" -#include "lib/lib_513b0.h" #include "data.h" #include "types.h" GLOBAL_ASM( -glabel func00050be0 +glabel osGbpakGetStatus /* 50be0: 27bdffb0 */ addiu $sp,$sp,-80 /* 50be4: afbf001c */ sw $ra,0x1c($sp) /* 50be8: afb10018 */ sw $s1,0x18($sp) diff --git a/src/lib/lib_06330.c b/src/lib/ultra/io/gbpakpower.c similarity index 99% rename from src/lib/lib_06330.c rename to src/lib/ultra/io/gbpakpower.c index ec01366d1..554c32397 100644 --- a/src/lib/lib_06330.c +++ b/src/lib/ultra/io/gbpakpower.c @@ -6,7 +6,7 @@ #include "types.h" GLOBAL_ASM( -glabel func00006330 +glabel osGbpakPower /* 6330: 27bdffa0 */ addiu $sp,$sp,-96 /* 6334: afb10028 */ sw $s1,0x28($sp) /* 6338: afb00024 */ sw $s0,0x24($sp) diff --git a/src/lib/lib_50d60.c b/src/lib/ultra/io/gbpakreadid.c similarity index 95% rename from src/lib/lib_50d60.c rename to src/lib/ultra/io/gbpakreadid.c index 9ec95452f..4493f374d 100644 --- a/src/lib/lib_50d60.c +++ b/src/lib/ultra/io/gbpakreadid.c @@ -3,10 +3,8 @@ #include "constants.h" #include "bss.h" #include "lib/lib_06100.h" -#include "lib/lib_06330.h" #include "lib/lib_4b170.h" #include "lib/lib_4e090.h" -#include "lib/lib_513b0.h" #include "data.h" #include "types.h" @@ -30,19 +28,19 @@ u32 var8006122c = 0xffffff03; u32 var80061230 = 0x03030303; GLOBAL_ASM( -glabel func00050d60 +glabel osGbpakReadId /* 50d60: 27bdff70 */ addiu $sp,$sp,-144 /* 50d64: afbf001c */ sw $ra,0x1c($sp) /* 50d68: afa50094 */ sw $a1,0x94($sp) /* 50d6c: afa40090 */ sw $a0,0x90($sp) /* 50d70: afa60098 */ sw $a2,0x98($sp) -/* 50d74: 0c0142f8 */ jal func00050be0 +/* 50d74: 0c0142f8 */ jal osGbpakGetStatus /* 50d78: 00c02825 */ or $a1,$a2,$zero /* 50d7c: 2401000d */ addiu $at,$zero,0xd /* 50d80: 14410005 */ bne $v0,$at,.L00050d98 /* 50d84: 00403825 */ or $a3,$v0,$zero /* 50d88: 8fa40090 */ lw $a0,0x90($sp) -/* 50d8c: 0c0142f8 */ jal func00050be0 +/* 50d8c: 0c0142f8 */ jal osGbpakGetStatus /* 50d90: 8fa50098 */ lw $a1,0x98($sp) /* 50d94: 00403825 */ or $a3,$v0,$zero .L00050d98: @@ -59,7 +57,7 @@ glabel func00050d60 /* 50dbc: 31f80001 */ andi $t8,$t7,0x1 /* 50dc0: 57000008 */ bnezl $t8,.L00050de4 /* 50dc4: 24190060 */ addiu $t9,$zero,0x60 -/* 50dc8: 0c0018cc */ jal func00006330 +/* 50dc8: 0c0018cc */ jal osGbpakPower /* 50dcc: 24050001 */ addiu $a1,$zero,0x1 /* 50dd0: 50400004 */ beqzl $v0,.L00050de4 /* 50dd4: 24190060 */ addiu $t9,$zero,0x60 @@ -71,14 +69,14 @@ glabel func00050d60 /* 50de8: 8fa40090 */ lw $a0,0x90($sp) /* 50dec: 00002825 */ or $a1,$zero,$zero /* 50df0: 24060100 */ addiu $a2,$zero,0x100 -/* 50df4: 0c0144ec */ jal func000513b0 +/* 50df4: 0c0144ec */ jal osGbpakReadWrite /* 50df8: 27a70024 */ addiu $a3,$sp,0x24 /* 50dfc: 10400003 */ beqz $v0,.L00050e0c /* 50e00: 8fa40090 */ lw $a0,0x90($sp) /* 50e04: 10000041 */ b .L00050f0c /* 50e08: 8fbf001c */ lw $ra,0x1c($sp) .L00050e0c: -/* 50e0c: 0c0142f8 */ jal func00050be0 +/* 50e0c: 0c0142f8 */ jal osGbpakGetStatus /* 50e10: 8fa50098 */ lw $a1,0x98($sp) /* 50e14: 2401000d */ addiu $at,$zero,0xd /* 50e18: 14410002 */ bne $v0,$at,.L00050e24 diff --git a/src/lib/lib_513b0.c b/src/lib/ultra/io/gbpakreadwrite.c similarity index 99% rename from src/lib/lib_513b0.c rename to src/lib/ultra/io/gbpakreadwrite.c index 6f28ab816..39ca3b32e 100644 --- a/src/lib/lib_513b0.c +++ b/src/lib/ultra/io/gbpakreadwrite.c @@ -4,13 +4,12 @@ #include "bss.h" #include "lib/lib_4b170.h" #include "lib/lib_4e090.h" -#include "lib/lib_513b0.h" #include "lib/lib_52360.h" #include "data.h" #include "types.h" GLOBAL_ASM( -glabel func000513b0 +glabel osGbpakReadWrite /* 513b0: 27bdffc0 */ addiu $sp,$sp,-64 /* 513b4: afb10020 */ sw $s1,0x20($sp) /* 513b8: afbf0034 */ sw $ra,0x34($sp) diff --git a/src/lib/ultra/io/pfsfilestate.c b/src/lib/ultra/io/pfsfilestate.c index d87acfefb..8c9059d42 100644 --- a/src/lib/ultra/io/pfsfilestate.c +++ b/src/lib/ultra/io/pfsfilestate.c @@ -3,10 +3,8 @@ #include "constants.h" #include "bss.h" #include "lib/lib_06100.h" -#include "lib/lib_06330.h" #include "lib/lib_4b170.h" #include "lib/lib_4e090.h" -#include "lib/lib_513b0.h" #include "data.h" #include "types.h"