diff --git a/src/sm_82.c b/src/sm_82.c index c0951b7..09602cc 100644 --- a/src/sm_82.c +++ b/src/sm_82.c @@ -1049,25 +1049,22 @@ CoroutineRet GameState_13_Pausing_Async(void) { // 0x828CEF } void BackupBG2TilemapForPauseMenu(void) { // 0x828D51 - WriteReg(VMADDL, 1u); - WriteReg(VMADDH, reg_BG2SC & 0xFC); + WriteRegWord(VMADDL, (reg_BG2SC & 0xFC) << 8 | 1); + // fixed: this was missing + WriteReg(VMAIN, 0x80); WriteReg(DMAP1, 0x81u); WriteReg(BBAD1, 0x39u); - WriteReg(A1T1L, 0x5C); - WriteReg(A1T1H, 0xDFu); + WriteRegWord(A1T1L, 0xDF5C); WriteReg(A1B1, 0x7Eu); - WriteReg(DAS1L, 0); - WriteReg(DAS1H, 0x10u); + WriteRegWord(DAS1L, 0x1000); WriteReg(DAS10, 0); - WriteReg(A2A1L, 0); - WriteReg(A2A1H, 0); + WriteRegWord(A2A1L, 0); WriteReg(NTRL1, 0); WriteReg(MDMAEN, 2u); } void RestoreBG2TilemapFromPauseScreen(void) { // 0x828D96 - WriteReg(VMADDL, 0); - WriteReg(VMADDH, reg_BG2SC & 0xFC); + WriteRegWord(VMADDL, (reg_BG2SC & 0xFC) << 8); WriteReg(VMAIN, 0x80); static const StartDmaCopy unk_828DAE = { 1, 1, 0x18, LONGPTR(0x7edf5c), 0x1000 }; SetupDmaTransfer(&unk_828DAE); diff --git a/src/sm_cpu_infra.c b/src/sm_cpu_infra.c index 1e3fe81..c3bf55c 100644 --- a/src/sm_cpu_infra.c +++ b/src/sm_cpu_infra.c @@ -318,6 +318,8 @@ uint32 PatchBugs(uint32 mode, uint32 addr) { // Samus_HandleScrewAttackSpeedBoostingPals reads OOB if (special_samus_palette_frame > 6) special_samus_palette_frame = 6; + } else if (FixBugHook(0x828D56)) { + WriteReg(VMAIN, 0x80); // BackupBG2TilemapForPauseMenu lacks this } return 0;