From f070ee948f094e68e45fe888072ed042af7973e0 Mon Sep 17 00:00:00 2001 From: TakaRikka <38417346+TakaRikka@users.noreply.github.com> Date: Mon, 2 Jan 2023 11:20:10 -0800 Subject: [PATCH] dolphin lib work (#237) * getLayerNo_common_common finally matched * dolphin ai / ar / card work from prime decomp * work on dolphin dvd / dsp / db * more dolphin os work * si work * remove asm * build fix --- Progress.md | 14 +- ...elopeMtx__12J3DMtxBufferFP12J3DModelData.s | 44 - .../initHookshotReady__9daAlink_cFv.s | 30 - ...nitHookshotUpperAnimeSpeed__9daAlink_cFi.s | 38 - .../setHookshotReadyAnime__9daAlink_cFv.s | 44 - ...No_common_common__14dComIfG_play_cFPCcii.s | 1463 ----------------- asm/dolphin/ai/ai/AIGetDSPSampleRate.s | 6 - asm/dolphin/ai/ai/AIGetStreamPlayState.s | 5 - asm/dolphin/ai/ai/AIGetStreamSampleRate.s | 5 - asm/dolphin/ai/ai/AIGetStreamVolLeft.s | 5 - asm/dolphin/ai/ai/AIGetStreamVolRight.s | 5 - asm/dolphin/ai/ai/AIInit.s | 10 +- asm/dolphin/ai/ai/AISetStreamVolLeft.s | 8 - asm/dolphin/ai/ai/AISetStreamVolRight.s | 8 - asm/dolphin/ai/ai/AIStartDMA.s | 7 - asm/dolphin/ai/ai/AIStopDMA.s | 7 - asm/dolphin/ai/ai/__AICallbackStackSwitch.s | 23 - asm/dolphin/ai/ai/__AIDHandler.s | 47 - asm/dolphin/ai/ai/__AI_SRC_INIT.s | 134 -- asm/dolphin/ar/ar/__ARHandler.s | 32 - .../base/PPCArch/PPCDisableSpeculation.s | 11 - asm/dolphin/base/PPCArch/PPCMffpscr.s | 9 - asm/dolphin/base/PPCArch/PPCMtfpscr.s | 11 - asm/dolphin/card/CARDBios/CARDGetFastMode.s | 9 - asm/dolphin/card/CARDBios/CARDInit.s | 2 +- asm/dolphin/card/CARDBios/OnReset.s | 24 - .../card/CARDBios/__CARDGetFontEncode.s | 3 - asm/dolphin/card/CARDBios/__CARDSetDiskID.s | 19 - .../card/CARDBios/__CARDSyncCallback.s | 14 - asm/dolphin/card/CARDBios/__CARDTxHandler.s | 47 - .../card/CARDBlock/__CARDGetFatBlock.s | 3 - asm/dolphin/card/CARDCheck/CARDCheck.s | 24 - asm/dolphin/card/CARDCheck/__CARDCheckSum.s | 114 -- asm/dolphin/card/CARDCreate/CARDCreate.s | 21 - asm/dolphin/card/CARDCreate/CARDCreateAsync.s | 151 -- .../card/CARDCreate/CreateCallbackFat.s | 79 - asm/dolphin/card/CARDDir/__CARDGetDirBlock.s | 3 - asm/dolphin/card/CARDFormat/CARDFormat.s | 24 - asm/dolphin/card/CARDMount/CARDMount.s | 21 - asm/dolphin/card/CARDMount/CARDMountAsync.s | 115 -- asm/dolphin/card/CARDMount/CARDProbe.s | 17 - asm/dolphin/card/CARDMount/CARDProbeEx.s | 112 -- asm/dolphin/card/CARDMount/DoMount.s | 2 +- asm/dolphin/card/CARDMount/IsCard.s | 61 - asm/dolphin/card/CARDNet/CARDGetSerialNo.s | 54 - asm/dolphin/card/CARDOpen/CARDClose.s | 24 - .../card/CARDOpen/__CARDCompareFileName.s | 31 - asm/dolphin/card/CARDOpen/__CARDIsReadable.s | 2 +- asm/dolphin/card/CARDOpen/__CARDIsWritable.s | 2 +- asm/dolphin/card/CARDRdwr/__CARDRead.s | 28 - asm/dolphin/card/CARDRdwr/__CARDWrite.s | 29 - asm/dolphin/card/CARDRead/CARDRead.s | 21 - asm/dolphin/card/CARDRead/ReadCallback.s | 84 - asm/dolphin/card/CARDStat/CARDSetStatus.s | 21 - asm/dolphin/card/CARDStat/UpdateIconOffsets.s | 151 -- asm/dolphin/card/CARDUnlock/ReadArrayUnlock.s | 87 - asm/dolphin/card/CARDUnlock/bitrev.s | 105 -- asm/dolphin/card/CARDWrite/CARDWrite.s | 21 - asm/dolphin/card/CARDWrite/CARDWriteAsync.s | 78 - asm/dolphin/db/db/DBInit.s | 11 - asm/dolphin/db/db/DBPrintf.s | 22 - asm/dolphin/db/db/__DBExceptionDestination.s | 5 - .../db/db/__DBExceptionDestinationAux.s | 19 - asm/dolphin/db/db/__DBIsExceptionMarked.s | 8 - asm/dolphin/dsp/dsp/DSPAssertInt.s | 17 - asm/dolphin/dsp/dsp/DSPCheckMailFromDSP.s | 5 - asm/dolphin/dsp/dsp/DSPCheckMailToDSP.s | 5 - asm/dolphin/dsp/dsp/DSPInit.s | 51 - asm/dolphin/dsp/dsp/DSPReadMailFromDSP.s | 7 - asm/dolphin/dsp/dsp/DSPSendMailToDSP.s | 6 - .../dsp/dsp_debug/__DSP_debug_printf.s | 22 - asm/dolphin/dsp/dsp_task/__DSP_insert_task.s | 47 - asm/dolphin/dsp/dsp_task/__DSP_remove_task.s | 41 - asm/dolphin/dvd/dvd/AlarmHandler.s | 18 - asm/dolphin/dvd/dvd/CategorizeError.s | 53 - asm/dolphin/dvd/dvd/DVDGetCurrentDiskID.s | 3 - asm/dolphin/dvd/dvd/DVDReset.s | 18 - asm/dolphin/dvd/dvd/DVDResume.s | 22 - asm/dolphin/dvd/dvd/DVDSetAutoInvalidation.s | 5 - asm/dolphin/dvd/dvd/__DVDTestAlarm.s | 17 - asm/dolphin/dvd/dvd/cbForCancelSync.s | 10 - asm/dolphin/dvd/dvd/cbForStateCheckID1.s | 70 - asm/dolphin/dvd/dvd/cbForStateCheckID2a.s | 30 - asm/dolphin/dvd/dvd/cbForStateCheckID3.s | 67 - asm/dolphin/dvd/dvd/cbForStateCoverClosed.s | 29 - asm/dolphin/dvd/dvd/cbForStateError.s | 48 - asm/dolphin/dvd/dvd/cbForStateGoToRetry.s | 90 - asm/dolphin/dvd/dvd/cbForStateReadingFST.s | 37 - asm/dolphin/dvd/dvd/cbForUnrecoveredError.s | 27 - .../dvd/dvd/cbForUnrecoveredErrorRetry.s | 36 - asm/dolphin/dvd/dvd/stateBusy.s | 216 --- asm/dolphin/dvd/dvd/stateCheckID.s | 62 - asm/dolphin/dvd/dvd/stateCheckID2.s | 15 - asm/dolphin/dvd/dvd/stateCheckID2a.s | 14 - asm/dolphin/dvd/dvd/stateCheckID3.s | 14 - asm/dolphin/dvd/dvd/stateCoverClosed.s | 59 - asm/dolphin/dvd/dvd/stateCoverClosed_CMD.s | 13 - asm/dolphin/dvd/dvd/stateGettingError.s | 11 - asm/dolphin/dvd/dvd/stateGoToRetry.s | 11 - asm/dolphin/dvd/dvd/stateMotorStopped.s | 11 - asm/dolphin/dvd/dvd/stateTimeout.s | 14 - asm/dolphin/dvd/fstload/cb.s | 59 - asm/dolphin/os/OS/OSExceptionInit.s | 178 -- asm/dolphin/os/OS/OSRegisterVersion.s | 12 - asm/dolphin/os/OS/__OSGetDIConfig.s | 6 - asm/dolphin/os/OSAlarm/InsertAlarm.s | 160 -- asm/dolphin/os/OSAlarm/OSInitAlarm.s | 24 - asm/dolphin/os/OSAlarm/OSSetAlarm.s | 27 - asm/dolphin/os/OSAlarm/OSSetPeriodicAlarm.s | 32 - .../os/OSAudioSystem/__OSInitAudioSystem.s | 123 -- asm/dolphin/os/OSContext/OSDumpContext.s | 191 --- asm/dolphin/os/OSContext/__OSContextInit.s | 19 - asm/dolphin/os/OSInterrupt/SetInterruptMask.s | 220 --- .../os/OSInterrupt/__OSInterruptInit.s | 30 - asm/dolphin/os/OSMemory/OSProtectRange.s | 52 - .../os/OSMemory/__OSInitMemoryProtection.s | 74 - asm/dolphin/os/OSMessage/OSInitMessageQueue.s | 25 - asm/dolphin/os/OSMutex/OSInitMutex.s | 15 - .../os/OSReset/OSRegisterResetFunction.s | 41 - asm/dolphin/os/OSReset/__OSDoHotReset.s | 19 - .../os/OSResetSW/OSGetResetButtonState.s | 16 +- .../os/OSResetSW/OSGetResetSwitchState.s | 9 - .../OSResetSW/__OSResetSWInterruptHandler.s | 4 +- asm/dolphin/os/OSRtc/__OSSyncSram.s | 5 - asm/dolphin/os/OSSync/__OSInitSystemCall.s | 26 - asm/dolphin/os/OSThread/OSYieldThread.s | 16 - asm/dolphin/os/OSThread/__OSReschedule.s | 14 - asm/dolphin/os/OSTime/GetDates.s | 116 -- asm/dolphin/os/__ppc_eabi_init/_ExitProcess.s | 9 - asm/dolphin/os/__ppc_eabi_init/__init_user.s | 9 - asm/dolphin/pad/Pad/OnReset.s | 54 - asm/dolphin/pad/Pad/PADInit.s | 89 - asm/dolphin/pad/Pad/PADOriginCallback.s | 52 - asm/dolphin/pad/Pad/PADRead.s | 206 --- asm/dolphin/pad/Pad/PADSetAnalogMode.s | 30 - asm/dolphin/pad/Pad/PADSetSpec.s | 30 - asm/dolphin/pad/Pad/SPEC0_MakeStatus.s | 105 -- asm/dolphin/pad/Pad/SPEC1_MakeStatus.s | 105 -- asm/dolphin/pad/Pad/SamplingHandler.s | 26 - asm/dolphin/pad/Pad/UpdateOrigin.s | 114 -- asm/dolphin/pad/Padclamp/ClampStick.s | 88 - asm/dolphin/si/SIBios/AlarmHandler.s | 37 - asm/dolphin/si/SIBios/SIBusy.s | 10 - asm/dolphin/si/SIBios/SIDisablePolling.s | 30 - asm/dolphin/si/SIBios/SIInit.s | 47 - asm/dolphin/si/SIBios/SIIsChanBusy.s | 17 - asm/dolphin/si/SIBios/SISetCommand.s | 6 - asm/dolphin/si/SIBios/SITransfer.s | 99 -- asm/dolphin/si/SIBios/SITransferCommands.s | 5 - asm/dolphin/si/SIBios/__SITransfer.s | 145 -- .../si/SISamplingRate/SIRefreshSamplingRate.s | 10 - asm/m_Do/m_Do_printf/OSPanic.s | 83 - include/d/a/d_a_alink.h | 4 +- include/d/com/d_com_inf_game.h | 6 +- include/d/kankyo/d_kankyo.h | 2 +- include/dolphin/ai/ai.h | 27 + include/dolphin/ar/ar.h | 9 +- include/dolphin/base/PPCArch.h | 490 ++++++ include/dolphin/card/CARDPriv.h | 180 ++ include/dolphin/card/card.h | 231 ++- include/dolphin/db/db.h | 24 + include/dolphin/dsp/dsp.h | 60 +- include/dolphin/dsp/dsp_debug.h | 10 + include/dolphin/dsp/dsp_task.h | 7 +- include/dolphin/dvd/dvd.h | 98 +- include/dolphin/exi/EXIBios.h | 64 + include/{ => dolphin}/exi/EXIUart.h | 0 include/dolphin/os/OS.h | 78 +- include/dolphin/os/OSAlarm.h | 12 +- include/dolphin/os/OSAlloc.h | 2 + include/dolphin/os/OSContext.h | 129 +- include/dolphin/os/OSError.h | 2 +- include/dolphin/os/OSInterrupt.h | 60 +- include/dolphin/os/OSMemory.h | 13 +- include/dolphin/os/OSMessage.h | 4 + include/dolphin/os/OSMutex.h | 7 +- include/dolphin/os/OSReset.h | 28 +- include/dolphin/os/OSResetSW.h | 3 +- include/dolphin/os/OSRtc.h | 67 +- include/dolphin/os/OSThread.h | 67 +- include/dolphin/os/OSTime.h | 2 +- include/dolphin/pad/Pad.h | 43 +- include/dolphin/pad/Padclamp.h | 24 + include/dolphin/si/SIBios.h | 124 +- include/dolphin/si/SISamplingRate.h | 16 + include/dolphin/vi/vi.h | 32 + include/exi/EXIBios.h | 6 - include_link.mk | 2 +- libs/JSystem/JFramework/JFWDisplay.cpp | 4 +- libs/dolphin/ai/Makefile | 10 +- libs/dolphin/ai/ai.c | 446 +++-- libs/dolphin/ar/Makefile | 10 +- libs/dolphin/ar/ar.c | 158 +- libs/dolphin/base/Makefile | 4 +- libs/dolphin/base/PPCArch.c | 191 +-- libs/dolphin/card/CARDBios.c | 564 +++++-- libs/dolphin/card/CARDBlock.c | 130 +- libs/dolphin/card/CARDCheck.c | 243 ++- libs/dolphin/card/CARDCreate.c | 174 +- libs/dolphin/card/CARDDir.c | 134 +- libs/dolphin/card/CARDFormat.c | 88 +- libs/dolphin/card/CARDMount.c | 336 ++-- libs/dolphin/card/CARDNet.c | 70 +- libs/dolphin/card/CARDOpen.c | 97 +- libs/dolphin/card/CARDRdwr.c | 102 +- libs/dolphin/card/CARDRead.c | 191 ++- libs/dolphin/card/CARDStat.c | 189 ++- libs/dolphin/card/CARDUnlock.c | 116 +- libs/dolphin/card/CARDWrite.c | 83 +- libs/dolphin/card/Makefile | 10 +- libs/dolphin/db/Makefile | 10 +- libs/dolphin/db/db.c | 93 +- libs/dolphin/dsp/Makefile | 10 +- libs/dolphin/dsp/dsp.c | 161 +- libs/dolphin/dsp/dsp_debug.c | 29 +- libs/dolphin/dsp/dsp_task.c | 238 ++- libs/dolphin/dvd/Makefile | 10 +- libs/dolphin/dvd/dvd.c | 1229 ++++++++++---- libs/dolphin/dvd/dvdidutils.c | 53 +- libs/dolphin/dvd/fstload.c | 90 +- libs/{ => dolphin}/exi/EXIBios.c | 231 ++- libs/{ => dolphin}/exi/EXIUart.c | 2 +- libs/{ => dolphin}/exi/Makefile | 20 +- libs/dolphin/gd/Makefile | 10 +- libs/dolphin/os/Makefile | 10 +- libs/dolphin/os/OS.c | 453 ++++- libs/dolphin/os/OSAlarm.c | 209 ++- libs/dolphin/os/OSAudioSystem.c | 104 +- libs/dolphin/os/OSContext.c | 176 +- libs/dolphin/os/OSError.c | 153 +- libs/dolphin/os/OSInterrupt.c | 340 +++- libs/dolphin/os/OSLink.c | 107 ++ libs/dolphin/os/OSMemory.c | 125 +- libs/dolphin/os/OSMessage.c | 80 +- libs/dolphin/os/OSMutex.c | 128 +- libs/dolphin/os/OSReset.c | 140 +- libs/dolphin/os/OSResetSW.c | 62 +- libs/dolphin/os/OSRtc.c | 138 +- libs/dolphin/os/OSSync.c | 45 +- libs/dolphin/os/OSThread.c | 341 +++- libs/dolphin/os/OSTime.c | 118 +- libs/dolphin/os/__ppc_eabi_init.c | 23 +- libs/dolphin/pad/Makefile | 10 +- libs/dolphin/pad/Pad.c | 824 ++++++++-- libs/dolphin/pad/Padclamp.c | 163 +- libs/dolphin/si/Makefile | 10 +- libs/dolphin/si/SIBios.c | 734 +++++++-- libs/dolphin/si/SISamplingRate.c | 78 +- libs/dolphin/vi/Makefile | 10 +- rel/d/a/d_a_movie_player/d_a_movie_player.cpp | 1 - src/d/a/d_a_alink_hook.inc | 155 +- src/d/com/d_com_inf_game.cpp | 404 ++--- src/d/kankyo/d_kankyo.cpp | 4 +- src/d/save/d_save.cpp | 16 +- src/m_Do/m_Do_DVDError.cpp | 2 +- src/m_Do/m_Do_MemCard.cpp | 16 +- src/m_Do/m_Do_printf.cpp | 53 +- 257 files changed, 9625 insertions(+), 10850 deletions(-) delete mode 100644 asm/JSystem/J3DGraphAnimator/J3DMtxBuffer/createWeightEnvelopeMtx__12J3DMtxBufferFP12J3DModelData.s delete mode 100644 asm/d/a/d_a_alink/initHookshotReady__9daAlink_cFv.s delete mode 100644 asm/d/a/d_a_alink/initHookshotUpperAnimeSpeed__9daAlink_cFi.s delete mode 100644 asm/d/a/d_a_alink/setHookshotReadyAnime__9daAlink_cFv.s delete mode 100644 asm/d/com/d_com_inf_game/getLayerNo_common_common__14dComIfG_play_cFPCcii.s delete mode 100644 asm/dolphin/ai/ai/AIGetDSPSampleRate.s delete mode 100644 asm/dolphin/ai/ai/AIGetStreamPlayState.s delete mode 100644 asm/dolphin/ai/ai/AIGetStreamSampleRate.s delete mode 100644 asm/dolphin/ai/ai/AIGetStreamVolLeft.s delete mode 100644 asm/dolphin/ai/ai/AIGetStreamVolRight.s delete mode 100644 asm/dolphin/ai/ai/AISetStreamVolLeft.s delete mode 100644 asm/dolphin/ai/ai/AISetStreamVolRight.s delete mode 100644 asm/dolphin/ai/ai/AIStartDMA.s delete mode 100644 asm/dolphin/ai/ai/AIStopDMA.s delete mode 100644 asm/dolphin/ai/ai/__AICallbackStackSwitch.s delete mode 100644 asm/dolphin/ai/ai/__AIDHandler.s delete mode 100644 asm/dolphin/ai/ai/__AI_SRC_INIT.s delete mode 100644 asm/dolphin/ar/ar/__ARHandler.s delete mode 100644 asm/dolphin/base/PPCArch/PPCDisableSpeculation.s delete mode 100644 asm/dolphin/base/PPCArch/PPCMffpscr.s delete mode 100644 asm/dolphin/base/PPCArch/PPCMtfpscr.s delete mode 100644 asm/dolphin/card/CARDBios/CARDGetFastMode.s delete mode 100644 asm/dolphin/card/CARDBios/OnReset.s delete mode 100644 asm/dolphin/card/CARDBios/__CARDGetFontEncode.s delete mode 100644 asm/dolphin/card/CARDBios/__CARDSetDiskID.s delete mode 100644 asm/dolphin/card/CARDBios/__CARDSyncCallback.s delete mode 100644 asm/dolphin/card/CARDBios/__CARDTxHandler.s delete mode 100644 asm/dolphin/card/CARDBlock/__CARDGetFatBlock.s delete mode 100644 asm/dolphin/card/CARDCheck/CARDCheck.s delete mode 100644 asm/dolphin/card/CARDCheck/__CARDCheckSum.s delete mode 100644 asm/dolphin/card/CARDCreate/CARDCreate.s delete mode 100644 asm/dolphin/card/CARDCreate/CARDCreateAsync.s delete mode 100644 asm/dolphin/card/CARDCreate/CreateCallbackFat.s delete mode 100644 asm/dolphin/card/CARDDir/__CARDGetDirBlock.s delete mode 100644 asm/dolphin/card/CARDFormat/CARDFormat.s delete mode 100644 asm/dolphin/card/CARDMount/CARDMount.s delete mode 100644 asm/dolphin/card/CARDMount/CARDMountAsync.s delete mode 100644 asm/dolphin/card/CARDMount/CARDProbe.s delete mode 100644 asm/dolphin/card/CARDMount/CARDProbeEx.s delete mode 100644 asm/dolphin/card/CARDMount/IsCard.s delete mode 100644 asm/dolphin/card/CARDNet/CARDGetSerialNo.s delete mode 100644 asm/dolphin/card/CARDOpen/CARDClose.s delete mode 100644 asm/dolphin/card/CARDOpen/__CARDCompareFileName.s delete mode 100644 asm/dolphin/card/CARDRdwr/__CARDRead.s delete mode 100644 asm/dolphin/card/CARDRdwr/__CARDWrite.s delete mode 100644 asm/dolphin/card/CARDRead/CARDRead.s delete mode 100644 asm/dolphin/card/CARDRead/ReadCallback.s delete mode 100644 asm/dolphin/card/CARDStat/CARDSetStatus.s delete mode 100644 asm/dolphin/card/CARDStat/UpdateIconOffsets.s delete mode 100644 asm/dolphin/card/CARDUnlock/ReadArrayUnlock.s delete mode 100644 asm/dolphin/card/CARDUnlock/bitrev.s delete mode 100644 asm/dolphin/card/CARDWrite/CARDWrite.s delete mode 100644 asm/dolphin/card/CARDWrite/CARDWriteAsync.s delete mode 100644 asm/dolphin/db/db/DBInit.s delete mode 100644 asm/dolphin/db/db/DBPrintf.s delete mode 100644 asm/dolphin/db/db/__DBExceptionDestination.s delete mode 100644 asm/dolphin/db/db/__DBExceptionDestinationAux.s delete mode 100644 asm/dolphin/db/db/__DBIsExceptionMarked.s delete mode 100644 asm/dolphin/dsp/dsp/DSPAssertInt.s delete mode 100644 asm/dolphin/dsp/dsp/DSPCheckMailFromDSP.s delete mode 100644 asm/dolphin/dsp/dsp/DSPCheckMailToDSP.s delete mode 100644 asm/dolphin/dsp/dsp/DSPInit.s delete mode 100644 asm/dolphin/dsp/dsp/DSPReadMailFromDSP.s delete mode 100644 asm/dolphin/dsp/dsp/DSPSendMailToDSP.s delete mode 100644 asm/dolphin/dsp/dsp_debug/__DSP_debug_printf.s delete mode 100644 asm/dolphin/dsp/dsp_task/__DSP_insert_task.s delete mode 100644 asm/dolphin/dsp/dsp_task/__DSP_remove_task.s delete mode 100644 asm/dolphin/dvd/dvd/AlarmHandler.s delete mode 100644 asm/dolphin/dvd/dvd/CategorizeError.s delete mode 100644 asm/dolphin/dvd/dvd/DVDGetCurrentDiskID.s delete mode 100644 asm/dolphin/dvd/dvd/DVDReset.s delete mode 100644 asm/dolphin/dvd/dvd/DVDResume.s delete mode 100644 asm/dolphin/dvd/dvd/DVDSetAutoInvalidation.s delete mode 100644 asm/dolphin/dvd/dvd/__DVDTestAlarm.s delete mode 100644 asm/dolphin/dvd/dvd/cbForCancelSync.s delete mode 100644 asm/dolphin/dvd/dvd/cbForStateCheckID1.s delete mode 100644 asm/dolphin/dvd/dvd/cbForStateCheckID2a.s delete mode 100644 asm/dolphin/dvd/dvd/cbForStateCheckID3.s delete mode 100644 asm/dolphin/dvd/dvd/cbForStateCoverClosed.s delete mode 100644 asm/dolphin/dvd/dvd/cbForStateError.s delete mode 100644 asm/dolphin/dvd/dvd/cbForStateGoToRetry.s delete mode 100644 asm/dolphin/dvd/dvd/cbForStateReadingFST.s delete mode 100644 asm/dolphin/dvd/dvd/cbForUnrecoveredError.s delete mode 100644 asm/dolphin/dvd/dvd/cbForUnrecoveredErrorRetry.s delete mode 100644 asm/dolphin/dvd/dvd/stateBusy.s delete mode 100644 asm/dolphin/dvd/dvd/stateCheckID.s delete mode 100644 asm/dolphin/dvd/dvd/stateCheckID2.s delete mode 100644 asm/dolphin/dvd/dvd/stateCheckID2a.s delete mode 100644 asm/dolphin/dvd/dvd/stateCheckID3.s delete mode 100644 asm/dolphin/dvd/dvd/stateCoverClosed.s delete mode 100644 asm/dolphin/dvd/dvd/stateCoverClosed_CMD.s delete mode 100644 asm/dolphin/dvd/dvd/stateGettingError.s delete mode 100644 asm/dolphin/dvd/dvd/stateGoToRetry.s delete mode 100644 asm/dolphin/dvd/dvd/stateMotorStopped.s delete mode 100644 asm/dolphin/dvd/dvd/stateTimeout.s delete mode 100644 asm/dolphin/dvd/fstload/cb.s delete mode 100644 asm/dolphin/os/OS/OSExceptionInit.s delete mode 100644 asm/dolphin/os/OS/OSRegisterVersion.s delete mode 100644 asm/dolphin/os/OS/__OSGetDIConfig.s delete mode 100644 asm/dolphin/os/OSAlarm/InsertAlarm.s delete mode 100644 asm/dolphin/os/OSAlarm/OSInitAlarm.s delete mode 100644 asm/dolphin/os/OSAlarm/OSSetAlarm.s delete mode 100644 asm/dolphin/os/OSAlarm/OSSetPeriodicAlarm.s delete mode 100644 asm/dolphin/os/OSAudioSystem/__OSInitAudioSystem.s delete mode 100644 asm/dolphin/os/OSContext/OSDumpContext.s delete mode 100644 asm/dolphin/os/OSContext/__OSContextInit.s delete mode 100644 asm/dolphin/os/OSInterrupt/SetInterruptMask.s delete mode 100644 asm/dolphin/os/OSInterrupt/__OSInterruptInit.s delete mode 100644 asm/dolphin/os/OSMemory/OSProtectRange.s delete mode 100644 asm/dolphin/os/OSMemory/__OSInitMemoryProtection.s delete mode 100644 asm/dolphin/os/OSMessage/OSInitMessageQueue.s delete mode 100644 asm/dolphin/os/OSMutex/OSInitMutex.s delete mode 100644 asm/dolphin/os/OSReset/OSRegisterResetFunction.s delete mode 100644 asm/dolphin/os/OSReset/__OSDoHotReset.s delete mode 100644 asm/dolphin/os/OSResetSW/OSGetResetSwitchState.s delete mode 100644 asm/dolphin/os/OSRtc/__OSSyncSram.s delete mode 100644 asm/dolphin/os/OSSync/__OSInitSystemCall.s delete mode 100644 asm/dolphin/os/OSThread/OSYieldThread.s delete mode 100644 asm/dolphin/os/OSThread/__OSReschedule.s delete mode 100644 asm/dolphin/os/OSTime/GetDates.s delete mode 100644 asm/dolphin/os/__ppc_eabi_init/_ExitProcess.s delete mode 100644 asm/dolphin/os/__ppc_eabi_init/__init_user.s delete mode 100644 asm/dolphin/pad/Pad/OnReset.s delete mode 100644 asm/dolphin/pad/Pad/PADInit.s delete mode 100644 asm/dolphin/pad/Pad/PADOriginCallback.s delete mode 100644 asm/dolphin/pad/Pad/PADRead.s delete mode 100644 asm/dolphin/pad/Pad/PADSetAnalogMode.s delete mode 100644 asm/dolphin/pad/Pad/PADSetSpec.s delete mode 100644 asm/dolphin/pad/Pad/SPEC0_MakeStatus.s delete mode 100644 asm/dolphin/pad/Pad/SPEC1_MakeStatus.s delete mode 100644 asm/dolphin/pad/Pad/SamplingHandler.s delete mode 100644 asm/dolphin/pad/Pad/UpdateOrigin.s delete mode 100644 asm/dolphin/pad/Padclamp/ClampStick.s delete mode 100644 asm/dolphin/si/SIBios/AlarmHandler.s delete mode 100644 asm/dolphin/si/SIBios/SIBusy.s delete mode 100644 asm/dolphin/si/SIBios/SIDisablePolling.s delete mode 100644 asm/dolphin/si/SIBios/SIInit.s delete mode 100644 asm/dolphin/si/SIBios/SIIsChanBusy.s delete mode 100644 asm/dolphin/si/SIBios/SISetCommand.s delete mode 100644 asm/dolphin/si/SIBios/SITransfer.s delete mode 100644 asm/dolphin/si/SIBios/SITransferCommands.s delete mode 100644 asm/dolphin/si/SIBios/__SITransfer.s delete mode 100644 asm/dolphin/si/SISamplingRate/SIRefreshSamplingRate.s delete mode 100644 asm/m_Do/m_Do_printf/OSPanic.s create mode 100644 include/dolphin/card/CARDPriv.h create mode 100644 include/dolphin/exi/EXIBios.h rename include/{ => dolphin}/exi/EXIUart.h (100%) delete mode 100644 include/exi/EXIBios.h rename libs/{ => dolphin}/exi/EXIBios.c (61%) rename libs/{ => dolphin}/exi/EXIUart.c (98%) rename libs/{ => dolphin}/exi/Makefile (54%) diff --git a/Progress.md b/Progress.md index d478f07d07..cb17113bc9 100644 --- a/Progress.md +++ b/Progress.md @@ -7,22 +7,22 @@ Section | Percentage | Decompiled (bytes) | Total (bytes) .init | 97.972973% | 9280 | 9472 .extab | 100.000000% | 96 | 96 .extabindex | 100.000000% | 96 | 96 -.text | 20.092845% | 722648 | 3596544 +.text | 21.344157% | 767652 | 3596544 .ctors | 100.000000% | 448 | 448 .dtors | 100.000000% | 32 | 32 .rodata | 100.000000% | 193856 | 193856 .data | 100.000000% | 197632 | 197632 .sdata | 100.000000% | 1408 | 1408 .sdata2 | 100.000000% | 20832 | 20832 -Total | 28.517223% | 1146584 | 4020672 +Total | 29.636538% | 1191588 | 4020672 ## Total Section | Percentage | Decompiled (bytes) | Total (bytes) ---|---|---|--- -main.dol | 28.517223% | 1146584 | 4020672 -RELs | 33.281706% | 3827504 | 11500324 -Total | 32.047479% | 4974088 | 15520996 +main.dol | 29.636538% | 1191588 | 4020672 +RELs | 33.290749% | 3828544 | 11500324 +Total | 32.344136% | 5020132 | 15520996 ## RELs @@ -131,7 +131,7 @@ d_a_tag_sppath | 33.333333% | 2040 | 6120 d_a_tag_shop_item | 41.944848% | 1156 | 2756 d_a_tag_theB_hint | 67.253521% | 764 | 1136 d_a_tag_lv2prchk | 35.734870% | 992 | 2776 -d_a_tag_mmsg | 46.938776% | 920 | 1960 +d_a_tag_mmsg | 100.000000% | 1960 | 1960 d_a_tag_lightball | 46.212121% | 976 | 2112 d_a_tag_msg | 37.563971% | 1468 | 3908 d_a_tag_pachi | 51.107595% | 1292 | 2528 @@ -785,4 +785,4 @@ d_a_b_oh2 | 37.960954% | 2100 | 5532 d_a_b_bq | 28.033347% | 11164 | 39824 d_a_b_zant_sima | 40.995025% | 1648 | 4020 d_a_b_gm | 30.376176% | 11628 | 38280 -Total | 33.281706% | 3827504 | 11500324 +Total | 33.290749% | 3828544 | 11500324 diff --git a/asm/JSystem/J3DGraphAnimator/J3DMtxBuffer/createWeightEnvelopeMtx__12J3DMtxBufferFP12J3DModelData.s b/asm/JSystem/J3DGraphAnimator/J3DMtxBuffer/createWeightEnvelopeMtx__12J3DMtxBufferFP12J3DModelData.s deleted file mode 100644 index 4e22fae611..0000000000 --- a/asm/JSystem/J3DGraphAnimator/J3DMtxBuffer/createWeightEnvelopeMtx__12J3DMtxBufferFP12J3DModelData.s +++ /dev/null @@ -1,44 +0,0 @@ -lbl_803263F0: -/* 803263F0 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 803263F4 7C 08 02 A6 */ mflr r0 -/* 803263F8 90 01 00 14 */ stw r0, 0x14(r1) -/* 803263FC 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80326400 93 C1 00 08 */ stw r30, 8(r1) -/* 80326404 7C 7E 1B 78 */ mr r30, r3 -/* 80326408 7C 9F 23 78 */ mr r31, r4 -/* 8032640C A0 04 00 2E */ lhz r0, 0x2e(r4) -/* 80326410 28 00 00 00 */ cmplwi r0, 0 -/* 80326414 41 82 00 20 */ beq lbl_80326434 -/* 80326418 54 03 04 3E */ clrlwi r3, r0, 0x10 -/* 8032641C 4B FA 88 A9 */ bl __nwa__FUl -/* 80326420 90 7E 00 08 */ stw r3, 8(r30) -/* 80326424 A0 1F 00 2E */ lhz r0, 0x2e(r31) -/* 80326428 1C 60 00 30 */ mulli r3, r0, 0x30 -/* 8032642C 4B FA 88 99 */ bl __nwa__FUl -/* 80326430 90 7E 00 10 */ stw r3, 0x10(r30) -lbl_80326434: -/* 80326434 A0 7F 00 2E */ lhz r3, 0x2e(r31) -/* 80326438 28 03 00 00 */ cmplwi r3, 0 -/* 8032643C 41 82 00 18 */ beq lbl_80326454 -/* 80326440 80 1E 00 08 */ lwz r0, 8(r30) -/* 80326444 28 00 00 00 */ cmplwi r0, 0 -/* 80326448 40 82 00 0C */ bne lbl_80326454 -/* 8032644C 38 60 00 04 */ li r3, 4 -/* 80326450 48 00 00 24 */ b lbl_80326474 -lbl_80326454: -/* 80326454 54 60 04 3F */ clrlwi. r0, r3, 0x10 -/* 80326458 41 82 00 18 */ beq lbl_80326470 -/* 8032645C 80 1E 00 10 */ lwz r0, 0x10(r30) -/* 80326460 28 00 00 00 */ cmplwi r0, 0 -/* 80326464 40 82 00 0C */ bne lbl_80326470 -/* 80326468 38 60 00 04 */ li r3, 4 -/* 8032646C 48 00 00 08 */ b lbl_80326474 -lbl_80326470: -/* 80326470 38 60 00 00 */ li r3, 0 -lbl_80326474: -/* 80326474 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80326478 83 C1 00 08 */ lwz r30, 8(r1) -/* 8032647C 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80326480 7C 08 03 A6 */ mtlr r0 -/* 80326484 38 21 00 10 */ addi r1, r1, 0x10 -/* 80326488 4E 80 00 20 */ blr diff --git a/asm/d/a/d_a_alink/initHookshotReady__9daAlink_cFv.s b/asm/d/a/d_a_alink/initHookshotReady__9daAlink_cFv.s deleted file mode 100644 index 8e18244438..0000000000 --- a/asm/d/a/d_a_alink/initHookshotReady__9daAlink_cFv.s +++ /dev/null @@ -1,30 +0,0 @@ -lbl_80109170: -/* 80109170 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 80109174 7C 08 02 A6 */ mflr r0 -/* 80109178 90 01 00 24 */ stw r0, 0x24(r1) -/* 8010917C 93 E1 00 1C */ stw r31, 0x1c(r1) -/* 80109180 7C 7F 1B 78 */ mr r31, r3 -/* 80109184 38 00 00 01 */ li r0, 1 -/* 80109188 B0 03 30 1A */ sth r0, 0x301a(r3) -/* 8010918C C0 22 92 C0 */ lfs f1, lit_6108(r2) -/* 80109190 D0 23 33 E0 */ stfs f1, 0x33e0(r3) -/* 80109194 D0 21 00 08 */ stfs f1, 8(r1) -/* 80109198 C0 02 92 B8 */ lfs f0, lit_6040(r2) -/* 8010919C D0 01 00 0C */ stfs f0, 0xc(r1) -/* 801091A0 D0 21 00 10 */ stfs f1, 0x10(r1) -/* 801091A4 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 801091A8 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 801091AC 38 63 5B D4 */ addi r3, r3, 0x5bd4 -/* 801091B0 38 80 00 01 */ li r4, 1 -/* 801091B4 38 A0 00 01 */ li r5, 1 -/* 801091B8 38 C1 00 08 */ addi r6, r1, 8 -/* 801091BC 4B F6 68 69 */ bl StartShock__12dVibration_cFii4cXyz -/* 801091C0 38 00 00 03 */ li r0, 3 -/* 801091C4 B0 1F 30 18 */ sth r0, 0x3018(r31) -/* 801091C8 C0 02 92 BC */ lfs f0, lit_6041(r2) -/* 801091CC D0 1F 34 94 */ stfs f0, 0x3494(r31) -/* 801091D0 83 E1 00 1C */ lwz r31, 0x1c(r1) -/* 801091D4 80 01 00 24 */ lwz r0, 0x24(r1) -/* 801091D8 7C 08 03 A6 */ mtlr r0 -/* 801091DC 38 21 00 20 */ addi r1, r1, 0x20 -/* 801091E0 4E 80 00 20 */ blr diff --git a/asm/d/a/d_a_alink/initHookshotUpperAnimeSpeed__9daAlink_cFi.s b/asm/d/a/d_a_alink/initHookshotUpperAnimeSpeed__9daAlink_cFi.s deleted file mode 100644 index 2454507abd..0000000000 --- a/asm/d/a/d_a_alink/initHookshotUpperAnimeSpeed__9daAlink_cFi.s +++ /dev/null @@ -1,38 +0,0 @@ -lbl_801090EC: -/* 801090EC 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 801090F0 7C 08 02 A6 */ mflr r0 -/* 801090F4 90 01 00 14 */ stw r0, 0x14(r1) -/* 801090F8 93 E1 00 0C */ stw r31, 0xc(r1) -/* 801090FC 93 C1 00 08 */ stw r30, 8(r1) -/* 80109100 7C 7E 1B 78 */ mr r30, r3 -/* 80109104 7C 9F 23 78 */ mr r31, r4 -/* 80109108 4B FF F9 11 */ bl checkHookshotWait__9daAlink_cCFv -/* 8010910C 2C 03 00 00 */ cmpwi r3, 0 -/* 80109110 41 82 00 44 */ beq lbl_80109154 -/* 80109114 2C 1F 00 00 */ cmpwi r31, 0 -/* 80109118 41 82 00 1C */ beq lbl_80109134 -/* 8010911C C0 02 92 C0 */ lfs f0, lit_6108(r2) -/* 80109120 D0 1E 20 54 */ stfs f0, 0x2054(r30) -/* 80109124 D0 1E 20 58 */ stfs f0, 0x2058(r30) -/* 80109128 80 7E 1F 54 */ lwz r3, 0x1f54(r30) -/* 8010912C D0 03 00 08 */ stfs f0, 8(r3) -/* 80109130 48 00 00 1C */ b lbl_8010914C -lbl_80109134: -/* 80109134 7F C3 F3 78 */ mr r3, r30 -/* 80109138 38 9E 20 48 */ addi r4, r30, 0x2048 -/* 8010913C 3C A0 80 39 */ lis r5, m__22daAlinkHIO_hookshot_c0@ha /* 0x8038E9C0@ha */ -/* 80109140 38 A5 E9 C0 */ addi r5, r5, m__22daAlinkHIO_hookshot_c0@l /* 0x8038E9C0@l */ -/* 80109144 C0 25 00 40 */ lfs f1, 0x40(r5) -/* 80109148 4B FF 8B AD */ bl setWaterInAnmRate__9daAlink_cFP16daPy_frameCtrl_cf -lbl_8010914C: -/* 8010914C 38 60 00 01 */ li r3, 1 -/* 80109150 48 00 00 08 */ b lbl_80109158 -lbl_80109154: -/* 80109154 38 60 00 00 */ li r3, 0 -lbl_80109158: -/* 80109158 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 8010915C 83 C1 00 08 */ lwz r30, 8(r1) -/* 80109160 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80109164 7C 08 03 A6 */ mtlr r0 -/* 80109168 38 21 00 10 */ addi r1, r1, 0x10 -/* 8010916C 4E 80 00 20 */ blr diff --git a/asm/d/a/d_a_alink/setHookshotReadyAnime__9daAlink_cFv.s b/asm/d/a/d_a_alink/setHookshotReadyAnime__9daAlink_cFv.s deleted file mode 100644 index 07dec9b952..0000000000 --- a/asm/d/a/d_a_alink/setHookshotReadyAnime__9daAlink_cFv.s +++ /dev/null @@ -1,44 +0,0 @@ -lbl_801091E4: -/* 801091E4 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 801091E8 7C 08 02 A6 */ mflr r0 -/* 801091EC 90 01 00 24 */ stw r0, 0x24(r1) -/* 801091F0 39 61 00 20 */ addi r11, r1, 0x20 -/* 801091F4 48 25 8F E9 */ bl _savegpr_29 -/* 801091F8 7C 7D 1B 78 */ mr r29, r3 -/* 801091FC 83 E3 27 E0 */ lwz r31, 0x27e0(r3) -/* 80109200 3B C0 00 01 */ li r30, 1 -/* 80109204 7F E3 FB 78 */ mr r3, r31 -/* 80109208 4B F6 A5 DD */ bl LockonTruth__12dAttention_cFv -/* 8010920C 54 60 06 3F */ clrlwi. r0, r3, 0x18 -/* 80109210 40 82 00 14 */ bne lbl_80109224 -/* 80109214 80 1F 03 34 */ lwz r0, 0x334(r31) -/* 80109218 54 00 00 85 */ rlwinm. r0, r0, 0, 2, 2 -/* 8010921C 40 82 00 08 */ bne lbl_80109224 -/* 80109220 3B C0 00 00 */ li r30, 0 -lbl_80109224: -/* 80109224 57 C0 06 3F */ clrlwi. r0, r30, 0x18 -/* 80109228 40 82 00 18 */ bne lbl_80109240 -/* 8010922C A8 1D 30 8E */ lha r0, 0x308e(r29) -/* 80109230 2C 00 00 00 */ cmpwi r0, 0 -/* 80109234 40 82 00 0C */ bne lbl_80109240 -/* 80109238 C0 22 92 C0 */ lfs f1, lit_6108(r2) -/* 8010923C 48 00 00 10 */ b lbl_8010924C -lbl_80109240: -/* 80109240 3C 60 80 39 */ lis r3, m__22daAlinkHIO_hookshot_c0@ha /* 0x8038E9C0@ha */ -/* 80109244 38 63 E9 C0 */ addi r3, r3, m__22daAlinkHIO_hookshot_c0@l /* 0x8038E9C0@l */ -/* 80109248 C0 23 00 40 */ lfs f1, 0x40(r3) -lbl_8010924C: -/* 8010924C 7F A3 EB 78 */ mr r3, r29 -/* 80109250 38 80 01 8D */ li r4, 0x18d -/* 80109254 C0 42 92 C4 */ lfs f2, lit_6109(r2) -/* 80109258 4B FA 41 51 */ bl setUpperAnimeBaseSpeed__9daAlink_cFUsff -/* 8010925C 38 00 00 00 */ li r0, 0 -/* 80109260 B0 1D 30 20 */ sth r0, 0x3020(r29) -/* 80109264 7F A3 EB 78 */ mr r3, r29 -/* 80109268 4B FF FF 09 */ bl initHookshotReady__9daAlink_cFv -/* 8010926C 39 61 00 20 */ addi r11, r1, 0x20 -/* 80109270 48 25 8F B9 */ bl _restgpr_29 -/* 80109274 80 01 00 24 */ lwz r0, 0x24(r1) -/* 80109278 7C 08 03 A6 */ mtlr r0 -/* 8010927C 38 21 00 20 */ addi r1, r1, 0x20 -/* 80109280 4E 80 00 20 */ blr diff --git a/asm/d/com/d_com_inf_game/getLayerNo_common_common__14dComIfG_play_cFPCcii.s b/asm/d/com/d_com_inf_game/getLayerNo_common_common__14dComIfG_play_cFPCcii.s deleted file mode 100644 index db99bd764d..0000000000 --- a/asm/d/com/d_com_inf_game/getLayerNo_common_common__14dComIfG_play_cFPCcii.s +++ /dev/null @@ -1,1463 +0,0 @@ -lbl_8002B434: -/* 8002B434 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 8002B438 7C 08 02 A6 */ mflr r0 -/* 8002B43C 90 01 00 24 */ stw r0, 0x24(r1) -/* 8002B440 39 61 00 20 */ addi r11, r1, 0x20 -/* 8002B444 48 33 6D 99 */ bl _savegpr_29 -/* 8002B448 7C 7F 1B 78 */ mr r31, r3 -/* 8002B44C 7C 9E 23 78 */ mr r30, r4 -/* 8002B450 90 A1 00 08 */ stw r5, 8(r1) -/* 8002B454 2C 05 00 00 */ cmpwi r5, 0 -/* 8002B458 40 80 12 D4 */ bge lbl_8002C72C -/* 8002B45C 38 00 FF FF */ li r0, -1 -/* 8002B460 90 01 00 08 */ stw r0, 8(r1) -/* 8002B464 48 18 12 A9 */ bl dKy_darkworld_stage_check__FPCci -/* 8002B468 54 60 06 3E */ clrlwi r0, r3, 0x18 -/* 8002B46C 28 00 00 01 */ cmplwi r0, 1 -/* 8002B470 40 82 00 0C */ bne lbl_8002B47C -/* 8002B474 38 00 00 0E */ li r0, 0xe -/* 8002B478 90 01 00 08 */ stw r0, 8(r1) -lbl_8002B47C: -/* 8002B47C 80 01 00 08 */ lwz r0, 8(r1) -/* 8002B480 2C 00 00 0D */ cmpwi r0, 0xd -/* 8002B484 40 80 12 A8 */ bge lbl_8002C72C -/* 8002B488 7F E3 FB 78 */ mr r3, r31 -/* 8002B48C 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002B490 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002B494 48 33 D5 01 */ bl strcmp -/* 8002B498 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B49C 41 82 00 20 */ beq lbl_8002B4BC -/* 8002B4A0 7F E3 FB 78 */ mr r3, r31 -/* 8002B4A4 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002B4A8 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002B4AC 38 84 00 07 */ addi r4, r4, 7 -/* 8002B4B0 48 33 D4 E5 */ bl strcmp -/* 8002B4B4 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B4B8 40 82 00 88 */ bne lbl_8002B540 -lbl_8002B4BC: -/* 8002B4BC 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002B4C0 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002B4C4 3B A3 07 F0 */ addi r29, r3, 0x7f0 -/* 8002B4C8 7F A3 EB 78 */ mr r3, r29 -/* 8002B4CC 3C 80 80 3A */ lis r4, saveBitLabels__16dSv_event_flag_c@ha /* 0x803A7288@ha */ -/* 8002B4D0 38 84 72 88 */ addi r4, r4, saveBitLabels__16dSv_event_flag_c@l /* 0x803A7288@l */ -/* 8002B4D4 A0 84 02 14 */ lhz r4, 0x214(r4) -/* 8002B4D8 48 00 94 E5 */ bl isEventBit__11dSv_event_cCFUs -/* 8002B4DC 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B4E0 41 82 00 10 */ beq lbl_8002B4F0 -/* 8002B4E4 38 00 00 03 */ li r0, 3 -/* 8002B4E8 90 01 00 08 */ stw r0, 8(r1) -/* 8002B4EC 48 00 12 40 */ b lbl_8002C72C -lbl_8002B4F0: -/* 8002B4F0 7F A3 EB 78 */ mr r3, r29 -/* 8002B4F4 3C 80 80 3A */ lis r4, saveBitLabels__16dSv_event_flag_c@ha /* 0x803A7288@ha */ -/* 8002B4F8 38 84 72 88 */ addi r4, r4, saveBitLabels__16dSv_event_flag_c@l /* 0x803A7288@l */ -/* 8002B4FC A0 84 01 46 */ lhz r4, 0x146(r4) -/* 8002B500 48 00 94 BD */ bl isEventBit__11dSv_event_cCFUs -/* 8002B504 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B508 41 82 00 10 */ beq lbl_8002B518 -/* 8002B50C 38 00 00 02 */ li r0, 2 -/* 8002B510 90 01 00 08 */ stw r0, 8(r1) -/* 8002B514 48 00 12 18 */ b lbl_8002C72C -lbl_8002B518: -/* 8002B518 7F A3 EB 78 */ mr r3, r29 -/* 8002B51C 3C 80 80 3A */ lis r4, saveBitLabels__16dSv_event_flag_c@ha /* 0x803A7288@ha */ -/* 8002B520 38 84 72 88 */ addi r4, r4, saveBitLabels__16dSv_event_flag_c@l /* 0x803A7288@l */ -/* 8002B524 A0 84 01 44 */ lhz r4, 0x144(r4) -/* 8002B528 48 00 94 95 */ bl isEventBit__11dSv_event_cCFUs -/* 8002B52C 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B530 41 82 11 FC */ beq lbl_8002C72C -/* 8002B534 38 00 00 01 */ li r0, 1 -/* 8002B538 90 01 00 08 */ stw r0, 8(r1) -/* 8002B53C 48 00 11 F0 */ b lbl_8002C72C -lbl_8002B540: -/* 8002B540 7F E3 FB 78 */ mr r3, r31 -/* 8002B544 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002B548 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002B54C 38 84 00 0F */ addi r4, r4, 0xf -/* 8002B550 48 33 D4 45 */ bl strcmp -/* 8002B554 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B558 40 82 00 90 */ bne lbl_8002B5E8 -/* 8002B55C 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002B560 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002B564 3B A3 07 F0 */ addi r29, r3, 0x7f0 -/* 8002B568 7F A3 EB 78 */ mr r3, r29 -/* 8002B56C 38 80 20 08 */ li r4, 0x2008 -/* 8002B570 48 00 94 4D */ bl isEventBit__11dSv_event_cCFUs -/* 8002B574 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B578 41 82 00 10 */ beq lbl_8002B588 -/* 8002B57C 38 00 00 05 */ li r0, 5 -/* 8002B580 90 01 00 08 */ stw r0, 8(r1) -/* 8002B584 48 00 11 A8 */ b lbl_8002C72C -lbl_8002B588: -/* 8002B588 7F A3 EB 78 */ mr r3, r29 -/* 8002B58C 38 80 1E 08 */ li r4, 0x1e08 -/* 8002B590 48 00 94 2D */ bl isEventBit__11dSv_event_cCFUs -/* 8002B594 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B598 41 82 00 10 */ beq lbl_8002B5A8 -/* 8002B59C 38 00 00 03 */ li r0, 3 -/* 8002B5A0 90 01 00 08 */ stw r0, 8(r1) -/* 8002B5A4 48 00 11 88 */ b lbl_8002C72C -lbl_8002B5A8: -/* 8002B5A8 7F A3 EB 78 */ mr r3, r29 -/* 8002B5AC 38 80 06 02 */ li r4, 0x602 -/* 8002B5B0 48 00 94 0D */ bl isEventBit__11dSv_event_cCFUs -/* 8002B5B4 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B5B8 41 82 00 10 */ beq lbl_8002B5C8 -/* 8002B5BC 38 00 00 02 */ li r0, 2 -/* 8002B5C0 90 01 00 08 */ stw r0, 8(r1) -/* 8002B5C4 48 00 11 68 */ b lbl_8002C72C -lbl_8002B5C8: -/* 8002B5C8 7F A3 EB 78 */ mr r3, r29 -/* 8002B5CC 38 80 45 10 */ li r4, 0x4510 -/* 8002B5D0 48 00 93 ED */ bl isEventBit__11dSv_event_cCFUs -/* 8002B5D4 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B5D8 40 82 11 54 */ bne lbl_8002C72C -/* 8002B5DC 38 00 00 01 */ li r0, 1 -/* 8002B5E0 90 01 00 08 */ stw r0, 8(r1) -/* 8002B5E4 48 00 11 48 */ b lbl_8002C72C -lbl_8002B5E8: -/* 8002B5E8 7F E3 FB 78 */ mr r3, r31 -/* 8002B5EC 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002B5F0 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002B5F4 38 84 00 17 */ addi r4, r4, 0x17 -/* 8002B5F8 48 33 D3 9D */ bl strcmp -/* 8002B5FC 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B600 40 82 00 58 */ bne lbl_8002B658 -/* 8002B604 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002B608 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002B60C 3B A3 07 F0 */ addi r29, r3, 0x7f0 -/* 8002B610 7F A3 EB 78 */ mr r3, r29 -/* 8002B614 3C 80 80 3A */ lis r4, saveBitLabels__16dSv_event_flag_c@ha /* 0x803A7288@ha */ -/* 8002B618 38 84 72 88 */ addi r4, r4, saveBitLabels__16dSv_event_flag_c@l /* 0x803A7288@l */ -/* 8002B61C A0 84 00 6E */ lhz r4, 0x6e(r4) -/* 8002B620 48 00 93 9D */ bl isEventBit__11dSv_event_cCFUs -/* 8002B624 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B628 41 82 00 10 */ beq lbl_8002B638 -/* 8002B62C 38 00 00 02 */ li r0, 2 -/* 8002B630 90 01 00 08 */ stw r0, 8(r1) -/* 8002B634 48 00 10 F8 */ b lbl_8002C72C -lbl_8002B638: -/* 8002B638 7F A3 EB 78 */ mr r3, r29 -/* 8002B63C 38 80 45 10 */ li r4, 0x4510 -/* 8002B640 48 00 93 7D */ bl isEventBit__11dSv_event_cCFUs -/* 8002B644 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B648 40 82 10 E4 */ bne lbl_8002C72C -/* 8002B64C 38 00 00 01 */ li r0, 1 -/* 8002B650 90 01 00 08 */ stw r0, 8(r1) -/* 8002B654 48 00 10 D8 */ b lbl_8002C72C -lbl_8002B658: -/* 8002B658 7F E3 FB 78 */ mr r3, r31 -/* 8002B65C 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002B660 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002B664 38 84 00 1F */ addi r4, r4, 0x1f -/* 8002B668 48 33 D3 2D */ bl strcmp -/* 8002B66C 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B670 41 82 00 20 */ beq lbl_8002B690 -/* 8002B674 7F E3 FB 78 */ mr r3, r31 -/* 8002B678 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002B67C 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002B680 38 84 00 27 */ addi r4, r4, 0x27 -/* 8002B684 48 33 D3 11 */ bl strcmp -/* 8002B688 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B68C 40 82 00 E8 */ bne lbl_8002B774 -lbl_8002B690: -/* 8002B690 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002B694 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002B698 3B A3 07 F0 */ addi r29, r3, 0x7f0 -/* 8002B69C 7F A3 EB 78 */ mr r3, r29 -/* 8002B6A0 38 80 08 04 */ li r4, 0x804 -/* 8002B6A4 48 00 93 19 */ bl isEventBit__11dSv_event_cCFUs -/* 8002B6A8 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B6AC 41 82 00 18 */ beq lbl_8002B6C4 -/* 8002B6B0 38 00 00 02 */ li r0, 2 -/* 8002B6B4 90 01 00 08 */ stw r0, 8(r1) -/* 8002B6B8 38 61 00 08 */ addi r3, r1, 8 -/* 8002B6BC 4B FF FD 39 */ bl dComIfG_get_timelayer__FPi -/* 8002B6C0 48 00 10 6C */ b lbl_8002C72C -lbl_8002B6C4: -/* 8002B6C4 7F A3 EB 78 */ mr r3, r29 -/* 8002B6C8 38 80 08 10 */ li r4, 0x810 -/* 8002B6CC 48 00 92 F1 */ bl isEventBit__11dSv_event_cCFUs -/* 8002B6D0 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B6D4 41 82 00 10 */ beq lbl_8002B6E4 -/* 8002B6D8 38 00 00 04 */ li r0, 4 -/* 8002B6DC 90 01 00 08 */ stw r0, 8(r1) -/* 8002B6E0 48 00 10 4C */ b lbl_8002C72C -lbl_8002B6E4: -/* 8002B6E4 7F A3 EB 78 */ mr r3, r29 -/* 8002B6E8 38 80 13 20 */ li r4, 0x1320 -/* 8002B6EC 48 00 92 D1 */ bl isEventBit__11dSv_event_cCFUs -/* 8002B6F0 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B6F4 41 82 00 18 */ beq lbl_8002B70C -/* 8002B6F8 38 00 00 02 */ li r0, 2 -/* 8002B6FC 90 01 00 08 */ stw r0, 8(r1) -/* 8002B700 38 61 00 08 */ addi r3, r1, 8 -/* 8002B704 4B FF FC F1 */ bl dComIfG_get_timelayer__FPi -/* 8002B708 48 00 10 24 */ b lbl_8002C72C -lbl_8002B70C: -/* 8002B70C 7F A3 EB 78 */ mr r3, r29 -/* 8002B710 38 80 07 01 */ li r4, 0x701 -/* 8002B714 48 00 92 A9 */ bl isEventBit__11dSv_event_cCFUs -/* 8002B718 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B71C 41 82 00 10 */ beq lbl_8002B72C -/* 8002B720 38 00 00 0C */ li r0, 0xc -/* 8002B724 90 01 00 08 */ stw r0, 8(r1) -/* 8002B728 48 00 10 04 */ b lbl_8002C72C -lbl_8002B72C: -/* 8002B72C 7F A3 EB 78 */ mr r3, r29 -/* 8002B730 38 80 0A 08 */ li r4, 0xa08 -/* 8002B734 48 00 92 89 */ bl isEventBit__11dSv_event_cCFUs -/* 8002B738 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B73C 41 82 00 18 */ beq lbl_8002B754 -/* 8002B740 38 00 00 02 */ li r0, 2 -/* 8002B744 90 01 00 08 */ stw r0, 8(r1) -/* 8002B748 38 61 00 08 */ addi r3, r1, 8 -/* 8002B74C 4B FF FC A9 */ bl dComIfG_get_timelayer__FPi -/* 8002B750 48 00 0F DC */ b lbl_8002C72C -lbl_8002B754: -/* 8002B754 7F A3 EB 78 */ mr r3, r29 -/* 8002B758 38 80 06 08 */ li r4, 0x608 -/* 8002B75C 48 00 92 61 */ bl isEventBit__11dSv_event_cCFUs -/* 8002B760 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B764 41 82 0F C8 */ beq lbl_8002C72C -/* 8002B768 38 00 00 01 */ li r0, 1 -/* 8002B76C 90 01 00 08 */ stw r0, 8(r1) -/* 8002B770 48 00 0F BC */ b lbl_8002C72C -lbl_8002B774: -/* 8002B774 7F E3 FB 78 */ mr r3, r31 -/* 8002B778 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002B77C 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002B780 38 84 00 2F */ addi r4, r4, 0x2f -/* 8002B784 48 33 D2 11 */ bl strcmp -/* 8002B788 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B78C 41 82 00 20 */ beq lbl_8002B7AC -/* 8002B790 7F E3 FB 78 */ mr r3, r31 -/* 8002B794 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002B798 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002B79C 38 84 00 37 */ addi r4, r4, 0x37 -/* 8002B7A0 48 33 D1 F5 */ bl strcmp -/* 8002B7A4 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B7A8 40 82 00 BC */ bne lbl_8002B864 -lbl_8002B7AC: -/* 8002B7AC 7F E3 FB 78 */ mr r3, r31 -/* 8002B7B0 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002B7B4 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002B7B8 38 84 00 2F */ addi r4, r4, 0x2f -/* 8002B7BC 48 33 D1 D9 */ bl strcmp -/* 8002B7C0 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B7C4 40 82 00 3C */ bne lbl_8002B800 -/* 8002B7C8 2C 1E 00 01 */ cmpwi r30, 1 -/* 8002B7CC 40 82 00 34 */ bne lbl_8002B800 -/* 8002B7D0 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002B7D4 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002B7D8 38 63 07 F0 */ addi r3, r3, 0x7f0 -/* 8002B7DC 38 80 09 04 */ li r4, 0x904 -/* 8002B7E0 48 00 91 DD */ bl isEventBit__11dSv_event_cCFUs -/* 8002B7E4 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B7E8 41 82 00 18 */ beq lbl_8002B800 -/* 8002B7EC 38 00 00 04 */ li r0, 4 -/* 8002B7F0 90 01 00 08 */ stw r0, 8(r1) -/* 8002B7F4 38 61 00 08 */ addi r3, r1, 8 -/* 8002B7F8 4B FF FB FD */ bl dComIfG_get_timelayer__FPi -/* 8002B7FC 48 00 0F 30 */ b lbl_8002C72C -lbl_8002B800: -/* 8002B800 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002B804 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002B808 3B A3 07 F0 */ addi r29, r3, 0x7f0 -/* 8002B80C 7F A3 EB 78 */ mr r3, r29 -/* 8002B810 3C 80 80 3A */ lis r4, saveBitLabels__16dSv_event_flag_c@ha /* 0x803A7288@ha */ -/* 8002B814 38 84 72 88 */ addi r4, r4, saveBitLabels__16dSv_event_flag_c@l /* 0x803A7288@l */ -/* 8002B818 A0 84 00 AA */ lhz r4, 0xaa(r4) -/* 8002B81C 48 00 91 A1 */ bl isEventBit__11dSv_event_cCFUs -/* 8002B820 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B824 41 82 00 18 */ beq lbl_8002B83C -/* 8002B828 38 00 00 02 */ li r0, 2 -/* 8002B82C 90 01 00 08 */ stw r0, 8(r1) -/* 8002B830 38 61 00 08 */ addi r3, r1, 8 -/* 8002B834 4B FF FB C1 */ bl dComIfG_get_timelayer__FPi -/* 8002B838 48 00 0E F4 */ b lbl_8002C72C -lbl_8002B83C: -/* 8002B83C 7F A3 EB 78 */ mr r3, r29 -/* 8002B840 3C 80 80 3A */ lis r4, saveBitLabels__16dSv_event_flag_c@ha /* 0x803A7288@ha */ -/* 8002B844 38 84 72 88 */ addi r4, r4, saveBitLabels__16dSv_event_flag_c@l /* 0x803A7288@l */ -/* 8002B848 A0 84 00 6A */ lhz r4, 0x6a(r4) -/* 8002B84C 48 00 91 71 */ bl isEventBit__11dSv_event_cCFUs -/* 8002B850 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B854 41 82 0E D8 */ beq lbl_8002C72C -/* 8002B858 38 00 00 01 */ li r0, 1 -/* 8002B85C 90 01 00 08 */ stw r0, 8(r1) -/* 8002B860 48 00 0E CC */ b lbl_8002C72C -lbl_8002B864: -/* 8002B864 7F E3 FB 78 */ mr r3, r31 -/* 8002B868 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002B86C 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002B870 38 84 00 3F */ addi r4, r4, 0x3f -/* 8002B874 48 33 D1 21 */ bl strcmp -/* 8002B878 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B87C 40 82 00 34 */ bne lbl_8002B8B0 -/* 8002B880 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002B884 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002B888 38 63 07 F0 */ addi r3, r3, 0x7f0 -/* 8002B88C 3C 80 80 3A */ lis r4, saveBitLabels__16dSv_event_flag_c@ha /* 0x803A7288@ha */ -/* 8002B890 38 84 72 88 */ addi r4, r4, saveBitLabels__16dSv_event_flag_c@l /* 0x803A7288@l */ -/* 8002B894 A0 84 00 80 */ lhz r4, 0x80(r4) -/* 8002B898 48 00 91 25 */ bl isEventBit__11dSv_event_cCFUs -/* 8002B89C 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B8A0 41 82 0E 8C */ beq lbl_8002C72C -/* 8002B8A4 38 00 00 02 */ li r0, 2 -/* 8002B8A8 90 01 00 08 */ stw r0, 8(r1) -/* 8002B8AC 48 00 0E 80 */ b lbl_8002C72C -lbl_8002B8B0: -/* 8002B8B0 7F E3 FB 78 */ mr r3, r31 -/* 8002B8B4 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002B8B8 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002B8BC 38 84 00 47 */ addi r4, r4, 0x47 -/* 8002B8C0 48 33 D0 D5 */ bl strcmp -/* 8002B8C4 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B8C8 40 82 00 90 */ bne lbl_8002B958 -/* 8002B8CC 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002B8D0 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002B8D4 3B A3 07 F0 */ addi r29, r3, 0x7f0 -/* 8002B8D8 7F A3 EB 78 */ mr r3, r29 -/* 8002B8DC 38 80 23 20 */ li r4, 0x2320 -/* 8002B8E0 48 00 90 DD */ bl isEventBit__11dSv_event_cCFUs -/* 8002B8E4 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B8E8 41 82 00 10 */ beq lbl_8002B8F8 -/* 8002B8EC 38 00 00 03 */ li r0, 3 -/* 8002B8F0 90 01 00 08 */ stw r0, 8(r1) -/* 8002B8F4 48 00 0E 38 */ b lbl_8002C72C -lbl_8002B8F8: -/* 8002B8F8 7F A3 EB 78 */ mr r3, r29 -/* 8002B8FC 38 80 20 04 */ li r4, 0x2004 -/* 8002B900 48 00 90 BD */ bl isEventBit__11dSv_event_cCFUs -/* 8002B904 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B908 41 82 00 10 */ beq lbl_8002B918 -/* 8002B90C 38 00 00 04 */ li r0, 4 -/* 8002B910 90 01 00 08 */ stw r0, 8(r1) -/* 8002B914 48 00 0E 18 */ b lbl_8002C72C -lbl_8002B918: -/* 8002B918 7F A3 EB 78 */ mr r3, r29 -/* 8002B91C 38 80 20 20 */ li r4, 0x2020 -/* 8002B920 48 00 90 9D */ bl isEventBit__11dSv_event_cCFUs -/* 8002B924 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B928 41 82 00 10 */ beq lbl_8002B938 -/* 8002B92C 38 00 00 02 */ li r0, 2 -/* 8002B930 90 01 00 08 */ stw r0, 8(r1) -/* 8002B934 48 00 0D F8 */ b lbl_8002C72C -lbl_8002B938: -/* 8002B938 7F A3 EB 78 */ mr r3, r29 -/* 8002B93C 38 80 07 01 */ li r4, 0x701 -/* 8002B940 48 00 90 7D */ bl isEventBit__11dSv_event_cCFUs -/* 8002B944 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B948 41 82 0D E4 */ beq lbl_8002C72C -/* 8002B94C 38 00 00 01 */ li r0, 1 -/* 8002B950 90 01 00 08 */ stw r0, 8(r1) -/* 8002B954 48 00 0D D8 */ b lbl_8002C72C -lbl_8002B958: -/* 8002B958 7F E3 FB 78 */ mr r3, r31 -/* 8002B95C 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002B960 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002B964 38 84 00 4F */ addi r4, r4, 0x4f -/* 8002B968 48 33 D0 2D */ bl strcmp -/* 8002B96C 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B970 41 82 00 60 */ beq lbl_8002B9D0 -/* 8002B974 7F E3 FB 78 */ mr r3, r31 -/* 8002B978 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002B97C 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002B980 38 84 00 57 */ addi r4, r4, 0x57 -/* 8002B984 48 33 D0 11 */ bl strcmp -/* 8002B988 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B98C 41 82 00 44 */ beq lbl_8002B9D0 -/* 8002B990 7F E3 FB 78 */ mr r3, r31 -/* 8002B994 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002B998 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002B99C 38 84 00 5F */ addi r4, r4, 0x5f -/* 8002B9A0 48 33 CF F5 */ bl strcmp -/* 8002B9A4 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B9A8 40 82 00 0C */ bne lbl_8002B9B4 -/* 8002B9AC 2C 1E 00 05 */ cmpwi r30, 5 -/* 8002B9B0 41 82 00 20 */ beq lbl_8002B9D0 -lbl_8002B9B4: -/* 8002B9B4 7F E3 FB 78 */ mr r3, r31 -/* 8002B9B8 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002B9BC 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002B9C0 38 84 00 67 */ addi r4, r4, 0x67 -/* 8002B9C4 48 33 CF D1 */ bl strcmp -/* 8002B9C8 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B9CC 40 82 01 FC */ bne lbl_8002BBC8 -lbl_8002B9D0: -/* 8002B9D0 7F E3 FB 78 */ mr r3, r31 -/* 8002B9D4 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002B9D8 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002B9DC 38 84 00 4F */ addi r4, r4, 0x4f -/* 8002B9E0 48 33 CF B5 */ bl strcmp -/* 8002B9E4 2C 03 00 00 */ cmpwi r3, 0 -/* 8002B9E8 40 82 00 78 */ bne lbl_8002BA60 -/* 8002B9EC 2C 1E 00 00 */ cmpwi r30, 0 -/* 8002B9F0 40 82 00 70 */ bne lbl_8002BA60 -/* 8002B9F4 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002B9F8 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002B9FC 3B A3 07 F0 */ addi r29, r3, 0x7f0 -/* 8002BA00 7F A3 EB 78 */ mr r3, r29 -/* 8002BA04 38 80 3B 08 */ li r4, 0x3b08 -/* 8002BA08 48 00 8F B5 */ bl isEventBit__11dSv_event_cCFUs -/* 8002BA0C 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BA10 41 82 00 10 */ beq lbl_8002BA20 -/* 8002BA14 38 00 00 03 */ li r0, 3 -/* 8002BA18 90 01 00 08 */ stw r0, 8(r1) -/* 8002BA1C 48 00 0D 10 */ b lbl_8002C72C -lbl_8002BA20: -/* 8002BA20 7F A3 EB 78 */ mr r3, r29 -/* 8002BA24 38 80 31 20 */ li r4, 0x3120 -/* 8002BA28 48 00 8F 95 */ bl isEventBit__11dSv_event_cCFUs -/* 8002BA2C 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BA30 41 82 00 10 */ beq lbl_8002BA40 -/* 8002BA34 38 00 00 01 */ li r0, 1 -/* 8002BA38 90 01 00 08 */ stw r0, 8(r1) -/* 8002BA3C 48 00 0C F0 */ b lbl_8002C72C -lbl_8002BA40: -/* 8002BA40 7F A3 EB 78 */ mr r3, r29 -/* 8002BA44 38 80 09 04 */ li r4, 0x904 -/* 8002BA48 48 00 8F 75 */ bl isEventBit__11dSv_event_cCFUs -/* 8002BA4C 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BA50 41 82 0C DC */ beq lbl_8002C72C -/* 8002BA54 38 00 00 02 */ li r0, 2 -/* 8002BA58 90 01 00 08 */ stw r0, 8(r1) -/* 8002BA5C 48 00 0C D0 */ b lbl_8002C72C -lbl_8002BA60: -/* 8002BA60 7F E3 FB 78 */ mr r3, r31 -/* 8002BA64 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002BA68 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002BA6C 38 84 00 5F */ addi r4, r4, 0x5f -/* 8002BA70 48 33 CF 25 */ bl strcmp -/* 8002BA74 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BA78 40 82 00 34 */ bne lbl_8002BAAC -/* 8002BA7C 2C 1E 00 05 */ cmpwi r30, 5 -/* 8002BA80 40 82 00 2C */ bne lbl_8002BAAC -/* 8002BA84 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002BA88 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002BA8C 38 63 07 F0 */ addi r3, r3, 0x7f0 -/* 8002BA90 38 80 20 20 */ li r4, 0x2020 -/* 8002BA94 48 00 8F 29 */ bl isEventBit__11dSv_event_cCFUs -/* 8002BA98 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BA9C 41 82 00 10 */ beq lbl_8002BAAC -/* 8002BAA0 38 00 00 04 */ li r0, 4 -/* 8002BAA4 90 01 00 08 */ stw r0, 8(r1) -/* 8002BAA8 48 00 0C 84 */ b lbl_8002C72C -lbl_8002BAAC: -/* 8002BAAC 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002BAB0 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002BAB4 3B A3 07 F0 */ addi r29, r3, 0x7f0 -/* 8002BAB8 7F A3 EB 78 */ mr r3, r29 -/* 8002BABC 38 80 1E 08 */ li r4, 0x1e08 -/* 8002BAC0 48 00 8E FD */ bl isEventBit__11dSv_event_cCFUs -/* 8002BAC4 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BAC8 41 82 00 50 */ beq lbl_8002BB18 -/* 8002BACC 7F E3 FB 78 */ mr r3, r31 -/* 8002BAD0 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002BAD4 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002BAD8 38 84 00 57 */ addi r4, r4, 0x57 -/* 8002BADC 48 33 CE B9 */ bl strcmp -/* 8002BAE0 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BAE4 40 82 00 34 */ bne lbl_8002BB18 -/* 8002BAE8 2C 1E 00 04 */ cmpwi r30, 4 -/* 8002BAEC 41 82 00 20 */ beq lbl_8002BB0C -/* 8002BAF0 2C 1E 00 03 */ cmpwi r30, 3 -/* 8002BAF4 41 82 00 18 */ beq lbl_8002BB0C -/* 8002BAF8 2C 1E 00 01 */ cmpwi r30, 1 -/* 8002BAFC 41 82 00 10 */ beq lbl_8002BB0C -/* 8002BB00 38 00 00 00 */ li r0, 0 -/* 8002BB04 90 01 00 08 */ stw r0, 8(r1) -/* 8002BB08 48 00 0C 24 */ b lbl_8002C72C -lbl_8002BB0C: -/* 8002BB0C 38 00 00 01 */ li r0, 1 -/* 8002BB10 90 01 00 08 */ stw r0, 8(r1) -/* 8002BB14 48 00 0C 18 */ b lbl_8002C72C -lbl_8002BB18: -/* 8002BB18 7F A3 EB 78 */ mr r3, r29 -/* 8002BB1C 38 80 09 04 */ li r4, 0x904 -/* 8002BB20 48 00 8E 9D */ bl isEventBit__11dSv_event_cCFUs -/* 8002BB24 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BB28 41 82 00 54 */ beq lbl_8002BB7C -/* 8002BB2C 7F E3 FB 78 */ mr r3, r31 -/* 8002BB30 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002BB34 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002BB38 38 84 00 4F */ addi r4, r4, 0x4f -/* 8002BB3C 48 33 CE 59 */ bl strcmp -/* 8002BB40 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BB44 40 82 00 2C */ bne lbl_8002BB70 -/* 8002BB48 2C 1E 00 01 */ cmpwi r30, 1 -/* 8002BB4C 40 82 00 24 */ bne lbl_8002BB70 -/* 8002BB50 7F A3 EB 78 */ mr r3, r29 -/* 8002BB54 38 80 0C 01 */ li r4, 0xc01 -/* 8002BB58 48 00 8E 65 */ bl isEventBit__11dSv_event_cCFUs -/* 8002BB5C 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BB60 40 82 00 10 */ bne lbl_8002BB70 -/* 8002BB64 38 00 00 09 */ li r0, 9 -/* 8002BB68 90 01 00 08 */ stw r0, 8(r1) -/* 8002BB6C 48 00 0B C0 */ b lbl_8002C72C -lbl_8002BB70: -/* 8002BB70 38 00 00 02 */ li r0, 2 -/* 8002BB74 90 01 00 08 */ stw r0, 8(r1) -/* 8002BB78 48 00 0B B4 */ b lbl_8002C72C -lbl_8002BB7C: -/* 8002BB7C 7F E3 FB 78 */ mr r3, r31 -/* 8002BB80 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002BB84 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002BB88 38 84 00 57 */ addi r4, r4, 0x57 -/* 8002BB8C 48 33 CE 09 */ bl strcmp -/* 8002BB90 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BB94 40 82 0B 98 */ bne lbl_8002C72C -/* 8002BB98 2C 1E 00 03 */ cmpwi r30, 3 -/* 8002BB9C 40 82 0B 90 */ bne lbl_8002C72C -/* 8002BBA0 7F A3 EB 78 */ mr r3, r29 -/* 8002BBA4 3C 80 80 3A */ lis r4, saveBitLabels__16dSv_event_flag_c@ha /* 0x803A7288@ha */ -/* 8002BBA8 38 84 72 88 */ addi r4, r4, saveBitLabels__16dSv_event_flag_c@l /* 0x803A7288@l */ -/* 8002BBAC A0 84 00 88 */ lhz r4, 0x88(r4) -/* 8002BBB0 48 00 8E 0D */ bl isEventBit__11dSv_event_cCFUs -/* 8002BBB4 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BBB8 41 82 0B 74 */ beq lbl_8002C72C -/* 8002BBBC 38 00 00 01 */ li r0, 1 -/* 8002BBC0 90 01 00 08 */ stw r0, 8(r1) -/* 8002BBC4 48 00 0B 68 */ b lbl_8002C72C -lbl_8002BBC8: -/* 8002BBC8 7F E3 FB 78 */ mr r3, r31 -/* 8002BBCC 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002BBD0 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002BBD4 38 84 00 6F */ addi r4, r4, 0x6f -/* 8002BBD8 48 33 CD BD */ bl strcmp -/* 8002BBDC 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BBE0 40 82 00 2C */ bne lbl_8002BC0C -/* 8002BBE4 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002BBE8 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002BBEC 38 63 07 F0 */ addi r3, r3, 0x7f0 -/* 8002BBF0 38 80 20 08 */ li r4, 0x2008 -/* 8002BBF4 48 00 8D C9 */ bl isEventBit__11dSv_event_cCFUs -/* 8002BBF8 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BBFC 41 82 0B 30 */ beq lbl_8002C72C -/* 8002BC00 38 00 00 02 */ li r0, 2 -/* 8002BC04 90 01 00 08 */ stw r0, 8(r1) -/* 8002BC08 48 00 0B 24 */ b lbl_8002C72C -lbl_8002BC0C: -/* 8002BC0C 7F E3 FB 78 */ mr r3, r31 -/* 8002BC10 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002BC14 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002BC18 38 84 00 77 */ addi r4, r4, 0x77 -/* 8002BC1C 48 33 CD 79 */ bl strcmp -/* 8002BC20 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BC24 40 82 00 34 */ bne lbl_8002BC58 -/* 8002BC28 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002BC2C 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002BC30 38 63 07 F0 */ addi r3, r3, 0x7f0 -/* 8002BC34 3C 80 80 3A */ lis r4, saveBitLabels__16dSv_event_flag_c@ha /* 0x803A7288@ha */ -/* 8002BC38 38 84 72 88 */ addi r4, r4, saveBitLabels__16dSv_event_flag_c@l /* 0x803A7288@l */ -/* 8002BC3C A0 84 00 BE */ lhz r4, 0xbe(r4) -/* 8002BC40 48 00 8D 7D */ bl isEventBit__11dSv_event_cCFUs -/* 8002BC44 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BC48 41 82 0A E4 */ beq lbl_8002C72C -/* 8002BC4C 38 00 00 01 */ li r0, 1 -/* 8002BC50 90 01 00 08 */ stw r0, 8(r1) -/* 8002BC54 48 00 0A D8 */ b lbl_8002C72C -lbl_8002BC58: -/* 8002BC58 7F E3 FB 78 */ mr r3, r31 -/* 8002BC5C 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002BC60 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002BC64 38 84 00 7F */ addi r4, r4, 0x7f -/* 8002BC68 48 33 CD 2D */ bl strcmp -/* 8002BC6C 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BC70 40 82 00 3C */ bne lbl_8002BCAC -/* 8002BC74 2C 1E 00 00 */ cmpwi r30, 0 -/* 8002BC78 40 82 00 34 */ bne lbl_8002BCAC -/* 8002BC7C 38 00 00 08 */ li r0, 8 -/* 8002BC80 90 01 00 08 */ stw r0, 8(r1) -/* 8002BC84 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002BC88 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002BC8C 38 63 07 F0 */ addi r3, r3, 0x7f0 -/* 8002BC90 38 80 40 08 */ li r4, 0x4008 -/* 8002BC94 48 00 8D 29 */ bl isEventBit__11dSv_event_cCFUs -/* 8002BC98 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BC9C 41 82 0A 90 */ beq lbl_8002C72C -/* 8002BCA0 38 00 00 00 */ li r0, 0 -/* 8002BCA4 90 01 00 08 */ stw r0, 8(r1) -/* 8002BCA8 48 00 0A 84 */ b lbl_8002C72C -lbl_8002BCAC: -/* 8002BCAC 7F E3 FB 78 */ mr r3, r31 -/* 8002BCB0 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002BCB4 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002BCB8 38 84 00 87 */ addi r4, r4, 0x87 -/* 8002BCBC 48 33 CC D9 */ bl strcmp -/* 8002BCC0 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BCC4 40 82 00 50 */ bne lbl_8002BD14 -/* 8002BCC8 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002BCCC 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002BCD0 3B A3 07 F0 */ addi r29, r3, 0x7f0 -/* 8002BCD4 7F A3 EB 78 */ mr r3, r29 -/* 8002BCD8 38 80 0B 01 */ li r4, 0xb01 -/* 8002BCDC 48 00 8C E1 */ bl isEventBit__11dSv_event_cCFUs -/* 8002BCE0 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BCE4 41 82 00 10 */ beq lbl_8002BCF4 -/* 8002BCE8 38 00 00 01 */ li r0, 1 -/* 8002BCEC 90 01 00 08 */ stw r0, 8(r1) -/* 8002BCF0 48 00 0A 3C */ b lbl_8002C72C -lbl_8002BCF4: -/* 8002BCF4 7F A3 EB 78 */ mr r3, r29 -/* 8002BCF8 38 80 09 02 */ li r4, 0x902 -/* 8002BCFC 48 00 8C C1 */ bl isEventBit__11dSv_event_cCFUs -/* 8002BD00 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BD04 41 82 0A 28 */ beq lbl_8002C72C -/* 8002BD08 38 00 00 02 */ li r0, 2 -/* 8002BD0C 90 01 00 08 */ stw r0, 8(r1) -/* 8002BD10 48 00 0A 1C */ b lbl_8002C72C -lbl_8002BD14: -/* 8002BD14 7F E3 FB 78 */ mr r3, r31 -/* 8002BD18 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002BD1C 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002BD20 38 84 00 8F */ addi r4, r4, 0x8f -/* 8002BD24 48 33 CC 71 */ bl strcmp -/* 8002BD28 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BD2C 40 82 01 9C */ bne lbl_8002BEC8 -/* 8002BD30 2C 1E 00 00 */ cmpwi r30, 0 -/* 8002BD34 40 82 00 E4 */ bne lbl_8002BE18 -/* 8002BD38 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002BD3C 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002BD40 3B A3 07 F0 */ addi r29, r3, 0x7f0 -/* 8002BD44 7F A3 EB 78 */ mr r3, r29 -/* 8002BD48 3C 80 80 3A */ lis r4, saveBitLabels__16dSv_event_flag_c@ha /* 0x803A7288@ha */ -/* 8002BD4C 38 84 72 88 */ addi r4, r4, saveBitLabels__16dSv_event_flag_c@l /* 0x803A7288@l */ -/* 8002BD50 A0 84 00 70 */ lhz r4, 0x70(r4) -/* 8002BD54 48 00 8C 69 */ bl isEventBit__11dSv_event_cCFUs -/* 8002BD58 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BD5C 41 82 00 18 */ beq lbl_8002BD74 -/* 8002BD60 38 00 00 04 */ li r0, 4 -/* 8002BD64 90 01 00 08 */ stw r0, 8(r1) -/* 8002BD68 38 61 00 08 */ addi r3, r1, 8 -/* 8002BD6C 4B FF F6 89 */ bl dComIfG_get_timelayer__FPi -/* 8002BD70 48 00 09 BC */ b lbl_8002C72C -lbl_8002BD74: -/* 8002BD74 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002BD78 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002BD7C 38 63 00 28 */ addi r3, r3, 0x28 -/* 8002BD80 38 80 00 00 */ li r4, 0 -/* 8002BD84 48 00 6E 2D */ bl isDarkClearLV__21dSv_player_status_b_cCFi -/* 8002BD88 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BD8C 41 82 00 18 */ beq lbl_8002BDA4 -/* 8002BD90 38 00 00 02 */ li r0, 2 -/* 8002BD94 90 01 00 08 */ stw r0, 8(r1) -/* 8002BD98 38 61 00 08 */ addi r3, r1, 8 -/* 8002BD9C 4B FF F6 59 */ bl dComIfG_get_timelayer__FPi -/* 8002BDA0 48 00 09 8C */ b lbl_8002C72C -lbl_8002BDA4: -/* 8002BDA4 7F A3 EB 78 */ mr r3, r29 -/* 8002BDA8 3C 80 80 3A */ lis r4, saveBitLabels__16dSv_event_flag_c@ha /* 0x803A7288@ha */ -/* 8002BDAC 38 84 72 88 */ addi r4, r4, saveBitLabels__16dSv_event_flag_c@l /* 0x803A7288@l */ -/* 8002BDB0 A0 84 00 5E */ lhz r4, 0x5e(r4) -/* 8002BDB4 48 00 8C 09 */ bl isEventBit__11dSv_event_cCFUs -/* 8002BDB8 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BDBC 41 82 00 10 */ beq lbl_8002BDCC -/* 8002BDC0 38 00 00 01 */ li r0, 1 -/* 8002BDC4 90 01 00 08 */ stw r0, 8(r1) -/* 8002BDC8 48 00 09 64 */ b lbl_8002C72C -lbl_8002BDCC: -/* 8002BDCC 7F A3 EB 78 */ mr r3, r29 -/* 8002BDD0 38 80 45 10 */ li r4, 0x4510 -/* 8002BDD4 48 00 8B E9 */ bl isEventBit__11dSv_event_cCFUs -/* 8002BDD8 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BDDC 41 82 00 10 */ beq lbl_8002BDEC -/* 8002BDE0 38 00 00 07 */ li r0, 7 -/* 8002BDE4 90 01 00 08 */ stw r0, 8(r1) -/* 8002BDE8 48 00 09 44 */ b lbl_8002C72C -lbl_8002BDEC: -/* 8002BDEC 7F A3 EB 78 */ mr r3, r29 -/* 8002BDF0 38 80 4A 40 */ li r4, 0x4a40 -/* 8002BDF4 48 00 8B C9 */ bl isEventBit__11dSv_event_cCFUs -/* 8002BDF8 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BDFC 41 82 00 10 */ beq lbl_8002BE0C -/* 8002BE00 38 00 00 00 */ li r0, 0 -/* 8002BE04 90 01 00 08 */ stw r0, 8(r1) -/* 8002BE08 48 00 09 24 */ b lbl_8002C72C -lbl_8002BE0C: -/* 8002BE0C 38 00 00 06 */ li r0, 6 -/* 8002BE10 90 01 00 08 */ stw r0, 8(r1) -/* 8002BE14 48 00 09 18 */ b lbl_8002C72C -lbl_8002BE18: -/* 8002BE18 2C 1E 00 01 */ cmpwi r30, 1 -/* 8002BE1C 40 82 09 10 */ bne lbl_8002C72C -/* 8002BE20 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002BE24 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002BE28 38 63 00 28 */ addi r3, r3, 0x28 -/* 8002BE2C 38 80 00 00 */ li r4, 0 -/* 8002BE30 48 00 6D 81 */ bl isDarkClearLV__21dSv_player_status_b_cCFi -/* 8002BE34 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BE38 41 82 00 10 */ beq lbl_8002BE48 -/* 8002BE3C 38 00 00 02 */ li r0, 2 -/* 8002BE40 90 01 00 08 */ stw r0, 8(r1) -/* 8002BE44 48 00 08 E8 */ b lbl_8002C72C -lbl_8002BE48: -/* 8002BE48 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002BE4C 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002BE50 3B A3 07 F0 */ addi r29, r3, 0x7f0 -/* 8002BE54 7F A3 EB 78 */ mr r3, r29 -/* 8002BE58 3C 80 80 3A */ lis r4, saveBitLabels__16dSv_event_flag_c@ha /* 0x803A7288@ha */ -/* 8002BE5C 38 84 72 88 */ addi r4, r4, saveBitLabels__16dSv_event_flag_c@l /* 0x803A7288@l */ -/* 8002BE60 A0 84 00 5E */ lhz r4, 0x5e(r4) -/* 8002BE64 48 00 8B 59 */ bl isEventBit__11dSv_event_cCFUs -/* 8002BE68 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BE6C 41 82 00 10 */ beq lbl_8002BE7C -/* 8002BE70 38 00 00 01 */ li r0, 1 -/* 8002BE74 90 01 00 08 */ stw r0, 8(r1) -/* 8002BE78 48 00 08 B4 */ b lbl_8002C72C -lbl_8002BE7C: -/* 8002BE7C 7F A3 EB 78 */ mr r3, r29 -/* 8002BE80 38 80 45 10 */ li r4, 0x4510 -/* 8002BE84 48 00 8B 39 */ bl isEventBit__11dSv_event_cCFUs -/* 8002BE88 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BE8C 41 82 00 10 */ beq lbl_8002BE9C -/* 8002BE90 38 00 00 00 */ li r0, 0 -/* 8002BE94 90 01 00 08 */ stw r0, 8(r1) -/* 8002BE98 48 00 08 94 */ b lbl_8002C72C -lbl_8002BE9C: -/* 8002BE9C 7F A3 EB 78 */ mr r3, r29 -/* 8002BEA0 38 80 4A 40 */ li r4, 0x4a40 -/* 8002BEA4 48 00 8B 19 */ bl isEventBit__11dSv_event_cCFUs -/* 8002BEA8 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BEAC 41 82 00 10 */ beq lbl_8002BEBC -/* 8002BEB0 38 00 00 04 */ li r0, 4 -/* 8002BEB4 90 01 00 08 */ stw r0, 8(r1) -/* 8002BEB8 48 00 08 74 */ b lbl_8002C72C -lbl_8002BEBC: -/* 8002BEBC 38 00 00 03 */ li r0, 3 -/* 8002BEC0 90 01 00 08 */ stw r0, 8(r1) -/* 8002BEC4 48 00 08 68 */ b lbl_8002C72C -lbl_8002BEC8: -/* 8002BEC8 7F E3 FB 78 */ mr r3, r31 -/* 8002BECC 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002BED0 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002BED4 38 84 00 97 */ addi r4, r4, 0x97 -/* 8002BED8 48 33 CA BD */ bl strcmp -/* 8002BEDC 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BEE0 40 82 01 10 */ bne lbl_8002BFF0 -/* 8002BEE4 2C 1E 00 01 */ cmpwi r30, 1 -/* 8002BEE8 40 82 00 2C */ bne lbl_8002BF14 -/* 8002BEEC 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002BEF0 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002BEF4 38 63 00 28 */ addi r3, r3, 0x28 -/* 8002BEF8 38 80 00 00 */ li r4, 0 -/* 8002BEFC 48 00 6C B5 */ bl isDarkClearLV__21dSv_player_status_b_cCFi -/* 8002BF00 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BF04 41 82 08 28 */ beq lbl_8002C72C -/* 8002BF08 38 00 00 02 */ li r0, 2 -/* 8002BF0C 90 01 00 08 */ stw r0, 8(r1) -/* 8002BF10 48 00 08 1C */ b lbl_8002C72C -lbl_8002BF14: -/* 8002BF14 2C 1E 00 02 */ cmpwi r30, 2 -/* 8002BF18 40 82 00 80 */ bne lbl_8002BF98 -/* 8002BF1C 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002BF20 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002BF24 3B A3 07 F0 */ addi r29, r3, 0x7f0 -/* 8002BF28 7F A3 EB 78 */ mr r3, r29 -/* 8002BF2C 38 80 07 80 */ li r4, 0x780 -/* 8002BF30 48 00 8A 8D */ bl isEventBit__11dSv_event_cCFUs -/* 8002BF34 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BF38 41 82 00 10 */ beq lbl_8002BF48 -/* 8002BF3C 38 00 00 03 */ li r0, 3 -/* 8002BF40 90 01 00 08 */ stw r0, 8(r1) -/* 8002BF44 48 00 07 E8 */ b lbl_8002C72C -lbl_8002BF48: -/* 8002BF48 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002BF4C 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002BF50 38 63 00 28 */ addi r3, r3, 0x28 -/* 8002BF54 38 80 00 00 */ li r4, 0 -/* 8002BF58 48 00 6C 59 */ bl isDarkClearLV__21dSv_player_status_b_cCFi -/* 8002BF5C 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BF60 41 82 00 10 */ beq lbl_8002BF70 -/* 8002BF64 38 00 00 02 */ li r0, 2 -/* 8002BF68 90 01 00 08 */ stw r0, 8(r1) -/* 8002BF6C 48 00 07 C0 */ b lbl_8002C72C -lbl_8002BF70: -/* 8002BF70 7F A3 EB 78 */ mr r3, r29 -/* 8002BF74 3C 80 80 3A */ lis r4, saveBitLabels__16dSv_event_flag_c@ha /* 0x803A7288@ha */ -/* 8002BF78 38 84 72 88 */ addi r4, r4, saveBitLabels__16dSv_event_flag_c@l /* 0x803A7288@l */ -/* 8002BF7C A0 84 00 5E */ lhz r4, 0x5e(r4) -/* 8002BF80 48 00 8A 3D */ bl isEventBit__11dSv_event_cCFUs -/* 8002BF84 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BF88 41 82 07 A4 */ beq lbl_8002C72C -/* 8002BF8C 38 00 00 01 */ li r0, 1 -/* 8002BF90 90 01 00 08 */ stw r0, 8(r1) -/* 8002BF94 48 00 07 98 */ b lbl_8002C72C -lbl_8002BF98: -/* 8002BF98 2C 1E 00 05 */ cmpwi r30, 5 -/* 8002BF9C 40 82 07 90 */ bne lbl_8002C72C -/* 8002BFA0 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002BFA4 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002BFA8 38 63 07 F0 */ addi r3, r3, 0x7f0 -/* 8002BFAC 38 80 06 01 */ li r4, 0x601 -/* 8002BFB0 48 00 8A 0D */ bl isEventBit__11dSv_event_cCFUs -/* 8002BFB4 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BFB8 41 82 00 10 */ beq lbl_8002BFC8 -/* 8002BFBC 38 00 00 04 */ li r0, 4 -/* 8002BFC0 90 01 00 08 */ stw r0, 8(r1) -/* 8002BFC4 48 00 07 68 */ b lbl_8002C72C -lbl_8002BFC8: -/* 8002BFC8 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002BFCC 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002BFD0 38 63 00 28 */ addi r3, r3, 0x28 -/* 8002BFD4 38 80 00 00 */ li r4, 0 -/* 8002BFD8 48 00 6B D9 */ bl isDarkClearLV__21dSv_player_status_b_cCFi -/* 8002BFDC 2C 03 00 00 */ cmpwi r3, 0 -/* 8002BFE0 41 82 07 4C */ beq lbl_8002C72C -/* 8002BFE4 38 00 00 02 */ li r0, 2 -/* 8002BFE8 90 01 00 08 */ stw r0, 8(r1) -/* 8002BFEC 48 00 07 40 */ b lbl_8002C72C -lbl_8002BFF0: -/* 8002BFF0 7F E3 FB 78 */ mr r3, r31 -/* 8002BFF4 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002BFF8 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002BFFC 38 84 00 9E */ addi r4, r4, 0x9e -/* 8002C000 48 33 C9 95 */ bl strcmp -/* 8002C004 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C008 40 82 01 0C */ bne lbl_8002C114 -/* 8002C00C 2C 1E 00 01 */ cmpwi r30, 1 -/* 8002C010 40 82 00 AC */ bne lbl_8002C0BC -/* 8002C014 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002C018 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002C01C 38 63 00 28 */ addi r3, r3, 0x28 -/* 8002C020 38 80 00 00 */ li r4, 0 -/* 8002C024 48 00 6B 8D */ bl isDarkClearLV__21dSv_player_status_b_cCFi -/* 8002C028 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C02C 41 82 00 10 */ beq lbl_8002C03C -/* 8002C030 38 00 00 02 */ li r0, 2 -/* 8002C034 90 01 00 08 */ stw r0, 8(r1) -/* 8002C038 48 00 06 F4 */ b lbl_8002C72C -lbl_8002C03C: -/* 8002C03C 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002C040 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002C044 3B A3 07 F0 */ addi r29, r3, 0x7f0 -/* 8002C048 7F A3 EB 78 */ mr r3, r29 -/* 8002C04C 3C 80 80 3A */ lis r4, saveBitLabels__16dSv_event_flag_c@ha /* 0x803A7288@ha */ -/* 8002C050 38 84 72 88 */ addi r4, r4, saveBitLabels__16dSv_event_flag_c@l /* 0x803A7288@l */ -/* 8002C054 A0 84 00 5E */ lhz r4, 0x5e(r4) -/* 8002C058 48 00 89 65 */ bl isEventBit__11dSv_event_cCFUs -/* 8002C05C 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C060 41 82 00 10 */ beq lbl_8002C070 -/* 8002C064 38 00 00 04 */ li r0, 4 -/* 8002C068 90 01 00 08 */ stw r0, 8(r1) -/* 8002C06C 48 00 06 C0 */ b lbl_8002C72C -lbl_8002C070: -/* 8002C070 7F A3 EB 78 */ mr r3, r29 -/* 8002C074 38 80 45 10 */ li r4, 0x4510 -/* 8002C078 48 00 89 45 */ bl isEventBit__11dSv_event_cCFUs -/* 8002C07C 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C080 41 82 00 10 */ beq lbl_8002C090 -/* 8002C084 38 00 00 00 */ li r0, 0 -/* 8002C088 90 01 00 08 */ stw r0, 8(r1) -/* 8002C08C 48 00 06 A0 */ b lbl_8002C72C -lbl_8002C090: -/* 8002C090 7F A3 EB 78 */ mr r3, r29 -/* 8002C094 38 80 4A 20 */ li r4, 0x4a20 -/* 8002C098 48 00 89 25 */ bl isEventBit__11dSv_event_cCFUs -/* 8002C09C 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C0A0 41 82 00 10 */ beq lbl_8002C0B0 -/* 8002C0A4 38 00 00 03 */ li r0, 3 -/* 8002C0A8 90 01 00 08 */ stw r0, 8(r1) -/* 8002C0AC 48 00 06 80 */ b lbl_8002C72C -lbl_8002C0B0: -/* 8002C0B0 38 00 00 01 */ li r0, 1 -/* 8002C0B4 90 01 00 08 */ stw r0, 8(r1) -/* 8002C0B8 48 00 06 74 */ b lbl_8002C72C -lbl_8002C0BC: -/* 8002C0BC 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002C0C0 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002C0C4 38 63 00 28 */ addi r3, r3, 0x28 -/* 8002C0C8 38 80 00 00 */ li r4, 0 -/* 8002C0CC 48 00 6A E5 */ bl isDarkClearLV__21dSv_player_status_b_cCFi -/* 8002C0D0 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C0D4 41 82 00 10 */ beq lbl_8002C0E4 -/* 8002C0D8 38 00 00 02 */ li r0, 2 -/* 8002C0DC 90 01 00 08 */ stw r0, 8(r1) -/* 8002C0E0 48 00 06 4C */ b lbl_8002C72C -lbl_8002C0E4: -/* 8002C0E4 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002C0E8 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002C0EC 38 63 07 F0 */ addi r3, r3, 0x7f0 -/* 8002C0F0 3C 80 80 3A */ lis r4, saveBitLabels__16dSv_event_flag_c@ha /* 0x803A7288@ha */ -/* 8002C0F4 38 84 72 88 */ addi r4, r4, saveBitLabels__16dSv_event_flag_c@l /* 0x803A7288@l */ -/* 8002C0F8 A0 84 00 5E */ lhz r4, 0x5e(r4) -/* 8002C0FC 48 00 88 C1 */ bl isEventBit__11dSv_event_cCFUs -/* 8002C100 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C104 41 82 06 28 */ beq lbl_8002C72C -/* 8002C108 38 00 00 04 */ li r0, 4 -/* 8002C10C 90 01 00 08 */ stw r0, 8(r1) -/* 8002C110 48 00 06 1C */ b lbl_8002C72C -lbl_8002C114: -/* 8002C114 7F E3 FB 78 */ mr r3, r31 -/* 8002C118 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002C11C 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002C120 38 84 00 A6 */ addi r4, r4, 0xa6 -/* 8002C124 48 33 C8 71 */ bl strcmp -/* 8002C128 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C12C 40 82 00 DC */ bne lbl_8002C208 -/* 8002C130 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002C134 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002C138 38 63 00 28 */ addi r3, r3, 0x28 -/* 8002C13C 38 80 00 00 */ li r4, 0 -/* 8002C140 48 00 6A 71 */ bl isDarkClearLV__21dSv_player_status_b_cCFi -/* 8002C144 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C148 41 82 00 18 */ beq lbl_8002C160 -/* 8002C14C 38 00 00 02 */ li r0, 2 -/* 8002C150 90 01 00 08 */ stw r0, 8(r1) -/* 8002C154 38 61 00 08 */ addi r3, r1, 8 -/* 8002C158 4B FF F2 9D */ bl dComIfG_get_timelayer__FPi -/* 8002C15C 48 00 05 D0 */ b lbl_8002C72C -lbl_8002C160: -/* 8002C160 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002C164 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002C168 3B A3 07 F0 */ addi r29, r3, 0x7f0 -/* 8002C16C 7F A3 EB 78 */ mr r3, r29 -/* 8002C170 3C 80 80 3A */ lis r4, saveBitLabels__16dSv_event_flag_c@ha /* 0x803A7288@ha */ -/* 8002C174 38 84 72 88 */ addi r4, r4, saveBitLabels__16dSv_event_flag_c@l /* 0x803A7288@l */ -/* 8002C178 A0 84 00 5E */ lhz r4, 0x5e(r4) -/* 8002C17C 48 00 88 41 */ bl isEventBit__11dSv_event_cCFUs -/* 8002C180 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C184 41 82 00 10 */ beq lbl_8002C194 -/* 8002C188 38 00 00 01 */ li r0, 1 -/* 8002C18C 90 01 00 08 */ stw r0, 8(r1) -/* 8002C190 48 00 05 9C */ b lbl_8002C72C -lbl_8002C194: -/* 8002C194 7F A3 EB 78 */ mr r3, r29 -/* 8002C198 3C 80 80 3A */ lis r4, saveBitLabels__16dSv_event_flag_c@ha /* 0x803A7288@ha */ -/* 8002C19C 38 84 72 88 */ addi r4, r4, saveBitLabels__16dSv_event_flag_c@l /* 0x803A7288@l */ -/* 8002C1A0 A0 84 01 52 */ lhz r4, 0x152(r4) -/* 8002C1A4 48 00 88 19 */ bl isEventBit__11dSv_event_cCFUs -/* 8002C1A8 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C1AC 41 82 00 10 */ beq lbl_8002C1BC -/* 8002C1B0 38 00 00 0A */ li r0, 0xa -/* 8002C1B4 90 01 00 08 */ stw r0, 8(r1) -/* 8002C1B8 48 00 05 74 */ b lbl_8002C72C -lbl_8002C1BC: -/* 8002C1BC 7F A3 EB 78 */ mr r3, r29 -/* 8002C1C0 38 80 45 10 */ li r4, 0x4510 -/* 8002C1C4 48 00 87 F9 */ bl isEventBit__11dSv_event_cCFUs -/* 8002C1C8 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C1CC 41 82 00 10 */ beq lbl_8002C1DC -/* 8002C1D0 38 00 00 09 */ li r0, 9 -/* 8002C1D4 90 01 00 08 */ stw r0, 8(r1) -/* 8002C1D8 48 00 05 54 */ b lbl_8002C72C -lbl_8002C1DC: -/* 8002C1DC 7F A3 EB 78 */ mr r3, r29 -/* 8002C1E0 38 80 4A 40 */ li r4, 0x4a40 -/* 8002C1E4 48 00 87 D9 */ bl isEventBit__11dSv_event_cCFUs -/* 8002C1E8 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C1EC 41 82 00 10 */ beq lbl_8002C1FC -/* 8002C1F0 38 00 00 0B */ li r0, 0xb -/* 8002C1F4 90 01 00 08 */ stw r0, 8(r1) -/* 8002C1F8 48 00 05 34 */ b lbl_8002C72C -lbl_8002C1FC: -/* 8002C1FC 38 00 00 0C */ li r0, 0xc -/* 8002C200 90 01 00 08 */ stw r0, 8(r1) -/* 8002C204 48 00 05 28 */ b lbl_8002C72C -lbl_8002C208: -/* 8002C208 7F E3 FB 78 */ mr r3, r31 -/* 8002C20C 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002C210 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002C214 38 84 00 AD */ addi r4, r4, 0xad -/* 8002C218 48 33 C7 7D */ bl strcmp -/* 8002C21C 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C220 40 82 00 C4 */ bne lbl_8002C2E4 -/* 8002C224 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002C228 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002C22C 3B A3 07 F0 */ addi r29, r3, 0x7f0 -/* 8002C230 7F A3 EB 78 */ mr r3, r29 -/* 8002C234 38 80 1E 08 */ li r4, 0x1e08 -/* 8002C238 48 00 87 85 */ bl isEventBit__11dSv_event_cCFUs -/* 8002C23C 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C240 41 82 00 10 */ beq lbl_8002C250 -/* 8002C244 38 00 00 06 */ li r0, 6 -/* 8002C248 90 01 00 08 */ stw r0, 8(r1) -/* 8002C24C 48 00 04 E0 */ b lbl_8002C72C -lbl_8002C250: -/* 8002C250 7F A3 EB 78 */ mr r3, r29 -/* 8002C254 38 80 0C 01 */ li r4, 0xc01 -/* 8002C258 48 00 87 65 */ bl isEventBit__11dSv_event_cCFUs -/* 8002C25C 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C260 41 82 00 10 */ beq lbl_8002C270 -/* 8002C264 38 00 00 04 */ li r0, 4 -/* 8002C268 90 01 00 08 */ stw r0, 8(r1) -/* 8002C26C 48 00 04 C0 */ b lbl_8002C72C -lbl_8002C270: -/* 8002C270 7F A3 EB 78 */ mr r3, r29 -/* 8002C274 3C 80 80 3A */ lis r4, saveBitLabels__16dSv_event_flag_c@ha /* 0x803A7288@ha */ -/* 8002C278 38 84 72 88 */ addi r4, r4, saveBitLabels__16dSv_event_flag_c@l /* 0x803A7288@l */ -/* 8002C27C A0 84 00 88 */ lhz r4, 0x88(r4) -/* 8002C280 48 00 87 3D */ bl isEventBit__11dSv_event_cCFUs -/* 8002C284 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C288 41 82 00 10 */ beq lbl_8002C298 -/* 8002C28C 38 00 00 00 */ li r0, 0 -/* 8002C290 90 01 00 08 */ stw r0, 8(r1) -/* 8002C294 48 00 04 98 */ b lbl_8002C72C -lbl_8002C298: -/* 8002C298 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002C29C 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002C2A0 3B A3 0D D8 */ addi r29, r3, 0xdd8 -/* 8002C2A4 7F A3 EB 78 */ mr r3, r29 -/* 8002C2A8 38 80 06 01 */ li r4, 0x601 -/* 8002C2AC 48 00 87 11 */ bl isEventBit__11dSv_event_cCFUs -/* 8002C2B0 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C2B4 41 82 04 78 */ beq lbl_8002C72C -/* 8002C2B8 7F A3 EB 78 */ mr r3, r29 -/* 8002C2BC 38 80 06 02 */ li r4, 0x602 -/* 8002C2C0 48 00 86 FD */ bl isEventBit__11dSv_event_cCFUs -/* 8002C2C4 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C2C8 41 82 00 10 */ beq lbl_8002C2D8 -/* 8002C2CC 38 00 00 02 */ li r0, 2 -/* 8002C2D0 90 01 00 08 */ stw r0, 8(r1) -/* 8002C2D4 48 00 04 58 */ b lbl_8002C72C -lbl_8002C2D8: -/* 8002C2D8 38 00 00 03 */ li r0, 3 -/* 8002C2DC 90 01 00 08 */ stw r0, 8(r1) -/* 8002C2E0 48 00 04 4C */ b lbl_8002C72C -lbl_8002C2E4: -/* 8002C2E4 7F E3 FB 78 */ mr r3, r31 -/* 8002C2E8 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002C2EC 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002C2F0 38 84 00 B5 */ addi r4, r4, 0xb5 -/* 8002C2F4 48 33 C6 A1 */ bl strcmp -/* 8002C2F8 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C2FC 40 82 01 40 */ bne lbl_8002C43C -/* 8002C300 2C 1E 00 08 */ cmpwi r30, 8 -/* 8002C304 40 82 00 50 */ bne lbl_8002C354 -/* 8002C308 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002C30C 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002C310 3B A3 07 F0 */ addi r29, r3, 0x7f0 -/* 8002C314 7F A3 EB 78 */ mr r3, r29 -/* 8002C318 38 80 1E 08 */ li r4, 0x1e08 -/* 8002C31C 48 00 86 A1 */ bl isEventBit__11dSv_event_cCFUs -/* 8002C320 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C324 41 82 00 10 */ beq lbl_8002C334 -/* 8002C328 38 00 00 06 */ li r0, 6 -/* 8002C32C 90 01 00 08 */ stw r0, 8(r1) -/* 8002C330 48 00 03 FC */ b lbl_8002C72C -lbl_8002C334: -/* 8002C334 7F A3 EB 78 */ mr r3, r29 -/* 8002C338 38 80 0C 01 */ li r4, 0xc01 -/* 8002C33C 48 00 86 81 */ bl isEventBit__11dSv_event_cCFUs -/* 8002C340 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C344 41 82 03 E8 */ beq lbl_8002C72C -/* 8002C348 38 00 00 04 */ li r0, 4 -/* 8002C34C 90 01 00 08 */ stw r0, 8(r1) -/* 8002C350 48 00 03 DC */ b lbl_8002C72C -lbl_8002C354: -/* 8002C354 2C 1E 00 10 */ cmpwi r30, 0x10 -/* 8002C358 40 82 00 90 */ bne lbl_8002C3E8 -/* 8002C35C 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002C360 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002C364 3B A3 07 F0 */ addi r29, r3, 0x7f0 -/* 8002C368 7F A3 EB 78 */ mr r3, r29 -/* 8002C36C 38 80 22 04 */ li r4, 0x2204 -/* 8002C370 48 00 86 4D */ bl isEventBit__11dSv_event_cCFUs -/* 8002C374 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C378 41 82 00 10 */ beq lbl_8002C388 -/* 8002C37C 38 00 00 06 */ li r0, 6 -/* 8002C380 90 01 00 08 */ stw r0, 8(r1) -/* 8002C384 48 00 03 A8 */ b lbl_8002C72C -lbl_8002C388: -/* 8002C388 7F A3 EB 78 */ mr r3, r29 -/* 8002C38C 38 80 21 02 */ li r4, 0x2102 -/* 8002C390 48 00 86 2D */ bl isEventBit__11dSv_event_cCFUs -/* 8002C394 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C398 41 82 00 10 */ beq lbl_8002C3A8 -/* 8002C39C 38 00 00 01 */ li r0, 1 -/* 8002C3A0 90 01 00 08 */ stw r0, 8(r1) -/* 8002C3A4 48 00 03 88 */ b lbl_8002C72C -lbl_8002C3A8: -/* 8002C3A8 7F A3 EB 78 */ mr r3, r29 -/* 8002C3AC 38 80 1E 08 */ li r4, 0x1e08 -/* 8002C3B0 48 00 86 0D */ bl isEventBit__11dSv_event_cCFUs -/* 8002C3B4 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C3B8 41 82 00 10 */ beq lbl_8002C3C8 -/* 8002C3BC 38 00 00 06 */ li r0, 6 -/* 8002C3C0 90 01 00 08 */ stw r0, 8(r1) -/* 8002C3C4 48 00 03 68 */ b lbl_8002C72C -lbl_8002C3C8: -/* 8002C3C8 7F A3 EB 78 */ mr r3, r29 -/* 8002C3CC 38 80 0C 01 */ li r4, 0xc01 -/* 8002C3D0 48 00 85 ED */ bl isEventBit__11dSv_event_cCFUs -/* 8002C3D4 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C3D8 41 82 03 54 */ beq lbl_8002C72C -/* 8002C3DC 38 00 00 04 */ li r0, 4 -/* 8002C3E0 90 01 00 08 */ stw r0, 8(r1) -/* 8002C3E4 48 00 03 48 */ b lbl_8002C72C -lbl_8002C3E8: -/* 8002C3E8 2C 1E 00 11 */ cmpwi r30, 0x11 -/* 8002C3EC 40 82 03 40 */ bne lbl_8002C72C -/* 8002C3F0 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002C3F4 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002C3F8 3B A3 07 F0 */ addi r29, r3, 0x7f0 -/* 8002C3FC 7F A3 EB 78 */ mr r3, r29 -/* 8002C400 38 80 1E 08 */ li r4, 0x1e08 -/* 8002C404 48 00 85 B9 */ bl isEventBit__11dSv_event_cCFUs -/* 8002C408 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C40C 41 82 00 10 */ beq lbl_8002C41C -/* 8002C410 38 00 00 00 */ li r0, 0 -/* 8002C414 90 01 00 08 */ stw r0, 8(r1) -/* 8002C418 48 00 03 14 */ b lbl_8002C72C -lbl_8002C41C: -/* 8002C41C 7F A3 EB 78 */ mr r3, r29 -/* 8002C420 38 80 0C 01 */ li r4, 0xc01 -/* 8002C424 48 00 85 99 */ bl isEventBit__11dSv_event_cCFUs -/* 8002C428 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C42C 41 82 03 00 */ beq lbl_8002C72C -/* 8002C430 38 00 00 04 */ li r0, 4 -/* 8002C434 90 01 00 08 */ stw r0, 8(r1) -/* 8002C438 48 00 02 F4 */ b lbl_8002C72C -lbl_8002C43C: -/* 8002C43C 7F E3 FB 78 */ mr r3, r31 -/* 8002C440 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002C444 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002C448 38 84 00 BD */ addi r4, r4, 0xbd -/* 8002C44C 48 33 C5 49 */ bl strcmp -/* 8002C450 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C454 40 82 00 2C */ bne lbl_8002C480 -/* 8002C458 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002C45C 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002C460 38 63 07 F0 */ addi r3, r3, 0x7f0 -/* 8002C464 38 80 23 20 */ li r4, 0x2320 -/* 8002C468 48 00 85 55 */ bl isEventBit__11dSv_event_cCFUs -/* 8002C46C 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C470 41 82 02 BC */ beq lbl_8002C72C -/* 8002C474 38 00 00 01 */ li r0, 1 -/* 8002C478 90 01 00 08 */ stw r0, 8(r1) -/* 8002C47C 48 00 02 B0 */ b lbl_8002C72C -lbl_8002C480: -/* 8002C480 7F E3 FB 78 */ mr r3, r31 -/* 8002C484 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002C488 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002C48C 38 84 00 C5 */ addi r4, r4, 0xc5 -/* 8002C490 48 33 C5 05 */ bl strcmp -/* 8002C494 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C498 40 82 00 68 */ bne lbl_8002C500 -/* 8002C49C 2C 1E 00 05 */ cmpwi r30, 5 -/* 8002C4A0 40 82 00 38 */ bne lbl_8002C4D8 -/* 8002C4A4 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002C4A8 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002C4AC 38 63 07 F0 */ addi r3, r3, 0x7f0 -/* 8002C4B0 38 80 1E 08 */ li r4, 0x1e08 -/* 8002C4B4 48 00 85 09 */ bl isEventBit__11dSv_event_cCFUs -/* 8002C4B8 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C4BC 41 82 00 10 */ beq lbl_8002C4CC -/* 8002C4C0 38 00 00 00 */ li r0, 0 -/* 8002C4C4 90 01 00 08 */ stw r0, 8(r1) -/* 8002C4C8 48 00 02 64 */ b lbl_8002C72C -lbl_8002C4CC: -/* 8002C4CC 38 00 00 01 */ li r0, 1 -/* 8002C4D0 90 01 00 08 */ stw r0, 8(r1) -/* 8002C4D4 48 00 02 58 */ b lbl_8002C72C -lbl_8002C4D8: -/* 8002C4D8 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002C4DC 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002C4E0 38 63 07 F0 */ addi r3, r3, 0x7f0 -/* 8002C4E4 38 80 22 10 */ li r4, 0x2210 -/* 8002C4E8 48 00 84 D5 */ bl isEventBit__11dSv_event_cCFUs -/* 8002C4EC 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C4F0 41 82 02 3C */ beq lbl_8002C72C -/* 8002C4F4 38 00 00 01 */ li r0, 1 -/* 8002C4F8 90 01 00 08 */ stw r0, 8(r1) -/* 8002C4FC 48 00 02 30 */ b lbl_8002C72C -lbl_8002C500: -/* 8002C500 7F E3 FB 78 */ mr r3, r31 -/* 8002C504 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002C508 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002C50C 38 84 00 CD */ addi r4, r4, 0xcd -/* 8002C510 48 33 C4 85 */ bl strcmp -/* 8002C514 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C518 40 82 00 2C */ bne lbl_8002C544 -/* 8002C51C 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002C520 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002C524 38 63 07 F0 */ addi r3, r3, 0x7f0 -/* 8002C528 38 80 20 08 */ li r4, 0x2008 -/* 8002C52C 48 00 84 91 */ bl isEventBit__11dSv_event_cCFUs -/* 8002C530 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C534 41 82 01 F8 */ beq lbl_8002C72C -/* 8002C538 38 00 00 02 */ li r0, 2 -/* 8002C53C 90 01 00 08 */ stw r0, 8(r1) -/* 8002C540 48 00 01 EC */ b lbl_8002C72C -lbl_8002C544: -/* 8002C544 7F E3 FB 78 */ mr r3, r31 -/* 8002C548 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002C54C 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002C550 38 84 00 D5 */ addi r4, r4, 0xd5 -/* 8002C554 48 33 C4 41 */ bl strcmp -/* 8002C558 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C55C 40 82 00 70 */ bne lbl_8002C5CC -/* 8002C560 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002C564 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002C568 3B A3 07 F0 */ addi r29, r3, 0x7f0 -/* 8002C56C 7F A3 EB 78 */ mr r3, r29 -/* 8002C570 38 80 2B 08 */ li r4, 0x2b08 -/* 8002C574 48 00 84 49 */ bl isEventBit__11dSv_event_cCFUs -/* 8002C578 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C57C 41 82 00 10 */ beq lbl_8002C58C -/* 8002C580 38 00 00 03 */ li r0, 3 -/* 8002C584 90 01 00 08 */ stw r0, 8(r1) -/* 8002C588 48 00 01 A4 */ b lbl_8002C72C -lbl_8002C58C: -/* 8002C58C 7F A3 EB 78 */ mr r3, r29 -/* 8002C590 38 80 20 10 */ li r4, 0x2010 -/* 8002C594 48 00 84 29 */ bl isEventBit__11dSv_event_cCFUs -/* 8002C598 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C59C 41 82 00 10 */ beq lbl_8002C5AC -/* 8002C5A0 38 00 00 02 */ li r0, 2 -/* 8002C5A4 90 01 00 08 */ stw r0, 8(r1) -/* 8002C5A8 48 00 01 84 */ b lbl_8002C72C -lbl_8002C5AC: -/* 8002C5AC 7F A3 EB 78 */ mr r3, r29 -/* 8002C5B0 38 80 0B 40 */ li r4, 0xb40 -/* 8002C5B4 48 00 84 09 */ bl isEventBit__11dSv_event_cCFUs -/* 8002C5B8 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C5BC 41 82 01 70 */ beq lbl_8002C72C -/* 8002C5C0 38 00 00 01 */ li r0, 1 -/* 8002C5C4 90 01 00 08 */ stw r0, 8(r1) -/* 8002C5C8 48 00 01 64 */ b lbl_8002C72C -lbl_8002C5CC: -/* 8002C5CC 7F E3 FB 78 */ mr r3, r31 -/* 8002C5D0 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002C5D4 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002C5D8 38 84 00 DD */ addi r4, r4, 0xdd -/* 8002C5DC 48 33 C3 B9 */ bl strcmp -/* 8002C5E0 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C5E4 40 82 00 2C */ bne lbl_8002C610 -/* 8002C5E8 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002C5EC 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002C5F0 38 63 07 F0 */ addi r3, r3, 0x7f0 -/* 8002C5F4 38 80 45 10 */ li r4, 0x4510 -/* 8002C5F8 48 00 83 C5 */ bl isEventBit__11dSv_event_cCFUs -/* 8002C5FC 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C600 41 82 01 2C */ beq lbl_8002C72C -/* 8002C604 38 00 00 01 */ li r0, 1 -/* 8002C608 90 01 00 08 */ stw r0, 8(r1) -/* 8002C60C 48 00 01 20 */ b lbl_8002C72C -lbl_8002C610: -/* 8002C610 7F E3 FB 78 */ mr r3, r31 -/* 8002C614 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002C618 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002C61C 38 84 00 E4 */ addi r4, r4, 0xe4 -/* 8002C620 48 33 C3 75 */ bl strcmp -/* 8002C624 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C628 40 82 00 2C */ bne lbl_8002C654 -/* 8002C62C 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002C630 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002C634 38 63 00 28 */ addi r3, r3, 0x28 -/* 8002C638 38 80 00 03 */ li r4, 3 -/* 8002C63C 48 00 65 B1 */ bl isTransformLV__21dSv_player_status_b_cCFi -/* 8002C640 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C644 41 82 00 E8 */ beq lbl_8002C72C -/* 8002C648 38 00 00 0D */ li r0, 0xd -/* 8002C64C 90 01 00 08 */ stw r0, 8(r1) -/* 8002C650 48 00 00 DC */ b lbl_8002C72C -lbl_8002C654: -/* 8002C654 7F E3 FB 78 */ mr r3, r31 -/* 8002C658 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002C65C 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002C660 38 84 00 EC */ addi r4, r4, 0xec -/* 8002C664 48 33 C3 31 */ bl strcmp -/* 8002C668 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C66C 40 82 00 28 */ bne lbl_8002C694 -/* 8002C670 2C 1E 00 0B */ cmpwi r30, 0xb -/* 8002C674 41 82 00 B8 */ beq lbl_8002C72C -/* 8002C678 2C 1E 00 0D */ cmpwi r30, 0xd -/* 8002C67C 41 82 00 B0 */ beq lbl_8002C72C -/* 8002C680 2C 1E 00 0E */ cmpwi r30, 0xe -/* 8002C684 41 82 00 A8 */ beq lbl_8002C72C -/* 8002C688 38 00 00 01 */ li r0, 1 -/* 8002C68C 90 01 00 08 */ stw r0, 8(r1) -/* 8002C690 48 00 00 9C */ b lbl_8002C72C -lbl_8002C694: -/* 8002C694 7F E3 FB 78 */ mr r3, r31 -/* 8002C698 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002C69C 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002C6A0 38 84 00 F3 */ addi r4, r4, 0xf3 -/* 8002C6A4 48 33 C2 F1 */ bl strcmp -/* 8002C6A8 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C6AC 41 82 00 20 */ beq lbl_8002C6CC -/* 8002C6B0 7F E3 FB 78 */ mr r3, r31 -/* 8002C6B4 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002C6B8 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002C6BC 38 84 00 FB */ addi r4, r4, 0xfb -/* 8002C6C0 48 33 C2 D5 */ bl strcmp -/* 8002C6C4 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C6C8 40 82 00 64 */ bne lbl_8002C72C -lbl_8002C6CC: -/* 8002C6CC 3C 60 80 43 */ lis r3, g_env_light@ha /* 0x8042CA54@ha */ -/* 8002C6D0 38 63 CA 54 */ addi r3, r3, g_env_light@l /* 0x8042CA54@l */ -/* 8002C6D4 88 03 12 FE */ lbz r0, 0x12fe(r3) -/* 8002C6D8 2C 00 00 03 */ cmpwi r0, 3 -/* 8002C6DC 41 82 00 3C */ beq lbl_8002C718 -/* 8002C6E0 40 80 00 14 */ bge lbl_8002C6F4 -/* 8002C6E4 2C 00 00 01 */ cmpwi r0, 1 -/* 8002C6E8 41 82 00 18 */ beq lbl_8002C700 -/* 8002C6EC 40 80 00 20 */ bge lbl_8002C70C -/* 8002C6F0 48 00 00 3C */ b lbl_8002C72C -lbl_8002C6F4: -/* 8002C6F4 2C 00 00 05 */ cmpwi r0, 5 -/* 8002C6F8 40 80 00 34 */ bge lbl_8002C72C -/* 8002C6FC 48 00 00 28 */ b lbl_8002C724 -lbl_8002C700: -/* 8002C700 38 00 00 00 */ li r0, 0 -/* 8002C704 90 01 00 08 */ stw r0, 8(r1) -/* 8002C708 48 00 00 24 */ b lbl_8002C72C -lbl_8002C70C: -/* 8002C70C 38 00 00 01 */ li r0, 1 -/* 8002C710 90 01 00 08 */ stw r0, 8(r1) -/* 8002C714 48 00 00 18 */ b lbl_8002C72C -lbl_8002C718: -/* 8002C718 38 00 00 02 */ li r0, 2 -/* 8002C71C 90 01 00 08 */ stw r0, 8(r1) -/* 8002C720 48 00 00 0C */ b lbl_8002C72C -lbl_8002C724: -/* 8002C724 38 00 00 03 */ li r0, 3 -/* 8002C728 90 01 00 08 */ stw r0, 8(r1) -lbl_8002C72C: -/* 8002C72C 80 01 00 08 */ lwz r0, 8(r1) -/* 8002C730 2C 00 00 0E */ cmpwi r0, 0xe -/* 8002C734 40 82 02 00 */ bne lbl_8002C934 -/* 8002C738 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 8002C73C 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 8002C740 3B A3 07 F0 */ addi r29, r3, 0x7f0 -/* 8002C744 7F A3 EB 78 */ mr r3, r29 -/* 8002C748 3C 80 80 3A */ lis r4, saveBitLabels__16dSv_event_flag_c@ha /* 0x803A7288@ha */ -/* 8002C74C 38 84 72 88 */ addi r4, r4, saveBitLabels__16dSv_event_flag_c@l /* 0x803A7288@l */ -/* 8002C750 A0 84 00 82 */ lhz r4, 0x82(r4) -/* 8002C754 48 00 82 69 */ bl isEventBit__11dSv_event_cCFUs -/* 8002C758 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C75C 41 82 01 48 */ beq lbl_8002C8A4 -/* 8002C760 7F E3 FB 78 */ mr r3, r31 -/* 8002C764 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002C768 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002C76C 38 84 00 87 */ addi r4, r4, 0x87 -/* 8002C770 48 33 C2 25 */ bl strcmp -/* 8002C774 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C778 41 82 00 EC */ beq lbl_8002C864 -/* 8002C77C 7F E3 FB 78 */ mr r3, r31 -/* 8002C780 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002C784 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002C788 38 84 00 6F */ addi r4, r4, 0x6f -/* 8002C78C 48 33 C2 09 */ bl strcmp -/* 8002C790 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C794 41 82 00 D0 */ beq lbl_8002C864 -/* 8002C798 7F E3 FB 78 */ mr r3, r31 -/* 8002C79C 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002C7A0 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002C7A4 38 84 00 4F */ addi r4, r4, 0x4f -/* 8002C7A8 48 33 C1 ED */ bl strcmp -/* 8002C7AC 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C7B0 41 82 00 B4 */ beq lbl_8002C864 -/* 8002C7B4 7F E3 FB 78 */ mr r3, r31 -/* 8002C7B8 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002C7BC 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002C7C0 38 84 00 57 */ addi r4, r4, 0x57 -/* 8002C7C4 48 33 C1 D1 */ bl strcmp -/* 8002C7C8 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C7CC 41 82 00 98 */ beq lbl_8002C864 -/* 8002C7D0 7F E3 FB 78 */ mr r3, r31 -/* 8002C7D4 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002C7D8 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002C7DC 38 84 00 5F */ addi r4, r4, 0x5f -/* 8002C7E0 48 33 C1 B5 */ bl strcmp -/* 8002C7E4 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C7E8 40 82 00 0C */ bne lbl_8002C7F4 -/* 8002C7EC 2C 1E 00 05 */ cmpwi r30, 5 -/* 8002C7F0 41 82 00 74 */ beq lbl_8002C864 -lbl_8002C7F4: -/* 8002C7F4 7F E3 FB 78 */ mr r3, r31 -/* 8002C7F8 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002C7FC 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002C800 38 84 00 67 */ addi r4, r4, 0x67 -/* 8002C804 48 33 C1 91 */ bl strcmp -/* 8002C808 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C80C 41 82 00 58 */ beq lbl_8002C864 -/* 8002C810 7F E3 FB 78 */ mr r3, r31 -/* 8002C814 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002C818 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002C81C 38 84 00 AD */ addi r4, r4, 0xad -/* 8002C820 48 33 C1 75 */ bl strcmp -/* 8002C824 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C828 41 82 00 3C */ beq lbl_8002C864 -/* 8002C82C 7F E3 FB 78 */ mr r3, r31 -/* 8002C830 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002C834 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002C838 38 84 00 77 */ addi r4, r4, 0x77 -/* 8002C83C 48 33 C1 59 */ bl strcmp -/* 8002C840 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C844 41 82 00 20 */ beq lbl_8002C864 -/* 8002C848 7F E3 FB 78 */ mr r3, r31 -/* 8002C84C 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002C850 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002C854 38 84 00 B5 */ addi r4, r4, 0xb5 -/* 8002C858 48 33 C1 3D */ bl strcmp -/* 8002C85C 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C860 40 82 00 44 */ bne lbl_8002C8A4 -lbl_8002C864: -/* 8002C864 7F E3 FB 78 */ mr r3, r31 -/* 8002C868 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002C86C 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002C870 38 84 00 AD */ addi r4, r4, 0xad -/* 8002C874 48 33 C1 21 */ bl strcmp -/* 8002C878 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C87C 40 82 00 20 */ bne lbl_8002C89C -/* 8002C880 2C 1E 00 09 */ cmpwi r30, 9 -/* 8002C884 41 80 00 20 */ blt lbl_8002C8A4 -/* 8002C888 2C 1E 00 0E */ cmpwi r30, 0xe -/* 8002C88C 41 81 00 18 */ bgt lbl_8002C8A4 -/* 8002C890 38 00 00 0D */ li r0, 0xd -/* 8002C894 90 01 00 08 */ stw r0, 8(r1) -/* 8002C898 48 00 00 0C */ b lbl_8002C8A4 -lbl_8002C89C: -/* 8002C89C 38 00 00 0D */ li r0, 0xd -/* 8002C8A0 90 01 00 08 */ stw r0, 8(r1) -lbl_8002C8A4: -/* 8002C8A4 7F E3 FB 78 */ mr r3, r31 -/* 8002C8A8 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002C8AC 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002C8B0 38 84 00 E4 */ addi r4, r4, 0xe4 -/* 8002C8B4 48 33 C0 E1 */ bl strcmp -/* 8002C8B8 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C8BC 40 82 00 2C */ bne lbl_8002C8E8 -/* 8002C8C0 2C 1E 00 00 */ cmpwi r30, 0 -/* 8002C8C4 40 82 00 24 */ bne lbl_8002C8E8 -/* 8002C8C8 7F A3 EB 78 */ mr r3, r29 -/* 8002C8CC 38 80 4D 08 */ li r4, 0x4d08 -/* 8002C8D0 48 00 80 ED */ bl isEventBit__11dSv_event_cCFUs -/* 8002C8D4 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C8D8 40 82 00 5C */ bne lbl_8002C934 -/* 8002C8DC 38 00 00 0B */ li r0, 0xb -/* 8002C8E0 90 01 00 08 */ stw r0, 8(r1) -/* 8002C8E4 48 00 00 50 */ b lbl_8002C934 -lbl_8002C8E8: -/* 8002C8E8 7F E3 FB 78 */ mr r3, r31 -/* 8002C8EC 3C 80 80 38 */ lis r4, d_com_d_com_inf_game__stringBase0@ha /* 0x80378F38@ha */ -/* 8002C8F0 38 84 8F 38 */ addi r4, r4, d_com_d_com_inf_game__stringBase0@l /* 0x80378F38@l */ -/* 8002C8F4 38 84 01 03 */ addi r4, r4, 0x103 -/* 8002C8F8 48 33 C0 9D */ bl strcmp -/* 8002C8FC 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C900 40 82 00 34 */ bne lbl_8002C934 -/* 8002C904 2C 1E 00 0A */ cmpwi r30, 0xa -/* 8002C908 40 82 00 2C */ bne lbl_8002C934 -/* 8002C90C 7F A3 EB 78 */ mr r3, r29 -/* 8002C910 38 80 54 10 */ li r4, 0x5410 -/* 8002C914 48 00 80 A9 */ bl isEventBit__11dSv_event_cCFUs -/* 8002C918 2C 03 00 00 */ cmpwi r3, 0 -/* 8002C91C 41 82 00 10 */ beq lbl_8002C92C -/* 8002C920 38 00 00 01 */ li r0, 1 -/* 8002C924 90 01 00 08 */ stw r0, 8(r1) -/* 8002C928 48 00 00 0C */ b lbl_8002C934 -lbl_8002C92C: -/* 8002C92C 38 00 00 00 */ li r0, 0 -/* 8002C930 90 01 00 08 */ stw r0, 8(r1) -lbl_8002C934: -/* 8002C934 80 61 00 08 */ lwz r3, 8(r1) -/* 8002C938 39 61 00 20 */ addi r11, r1, 0x20 -/* 8002C93C 48 33 58 ED */ bl _restgpr_29 -/* 8002C940 80 01 00 24 */ lwz r0, 0x24(r1) -/* 8002C944 7C 08 03 A6 */ mtlr r0 -/* 8002C948 38 21 00 20 */ addi r1, r1, 0x20 -/* 8002C94C 4E 80 00 20 */ blr diff --git a/asm/dolphin/ai/ai/AIGetDSPSampleRate.s b/asm/dolphin/ai/ai/AIGetDSPSampleRate.s deleted file mode 100644 index e868038915..0000000000 --- a/asm/dolphin/ai/ai/AIGetDSPSampleRate.s +++ /dev/null @@ -1,6 +0,0 @@ -lbl_8034FF34: -/* 8034FF34 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006C00@ha */ -/* 8034FF38 80 03 6C 00 */ lwz r0, 0x6C00(r3) /* 0xCC006C00@l */ -/* 8034FF3C 54 00 D7 FE */ rlwinm r0, r0, 0x1a, 0x1f, 0x1f -/* 8034FF40 68 03 00 01 */ xori r3, r0, 1 -/* 8034FF44 4E 80 00 20 */ blr diff --git a/asm/dolphin/ai/ai/AIGetStreamPlayState.s b/asm/dolphin/ai/ai/AIGetStreamPlayState.s deleted file mode 100644 index ac338298dd..0000000000 --- a/asm/dolphin/ai/ai/AIGetStreamPlayState.s +++ /dev/null @@ -1,5 +0,0 @@ -lbl_8034FE44: -/* 8034FE44 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006C00@ha */ -/* 8034FE48 80 03 6C 00 */ lwz r0, 0x6C00(r3) /* 0xCC006C00@l */ -/* 8034FE4C 54 03 07 FE */ clrlwi r3, r0, 0x1f -/* 8034FE50 4E 80 00 20 */ blr diff --git a/asm/dolphin/ai/ai/AIGetStreamSampleRate.s b/asm/dolphin/ai/ai/AIGetStreamSampleRate.s deleted file mode 100644 index 11a7750255..0000000000 --- a/asm/dolphin/ai/ai/AIGetStreamSampleRate.s +++ /dev/null @@ -1,5 +0,0 @@ -lbl_8035001C: -/* 8035001C 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006C00@ha */ -/* 80350020 80 03 6C 00 */ lwz r0, 0x6C00(r3) /* 0xCC006C00@l */ -/* 80350024 54 03 FF FE */ rlwinm r3, r0, 0x1f, 0x1f, 0x1f -/* 80350028 4E 80 00 20 */ blr diff --git a/asm/dolphin/ai/ai/AIGetStreamVolLeft.s b/asm/dolphin/ai/ai/AIGetStreamVolLeft.s deleted file mode 100644 index 39419941e0..0000000000 --- a/asm/dolphin/ai/ai/AIGetStreamVolLeft.s +++ /dev/null @@ -1,5 +0,0 @@ -lbl_80350048: -/* 80350048 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006C04@ha */ -/* 8035004C 80 03 6C 04 */ lwz r0, 0x6C04(r3) /* 0xCC006C04@l */ -/* 80350050 54 03 06 3E */ clrlwi r3, r0, 0x18 -/* 80350054 4E 80 00 20 */ blr diff --git a/asm/dolphin/ai/ai/AIGetStreamVolRight.s b/asm/dolphin/ai/ai/AIGetStreamVolRight.s deleted file mode 100644 index fd39c3e43f..0000000000 --- a/asm/dolphin/ai/ai/AIGetStreamVolRight.s +++ /dev/null @@ -1,5 +0,0 @@ -lbl_80350074: -/* 80350074 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006C04@ha */ -/* 80350078 80 03 6C 04 */ lwz r0, 0x6C04(r3) /* 0xCC006C04@l */ -/* 8035007C 54 03 C6 3E */ rlwinm r3, r0, 0x18, 0x18, 0x1f -/* 80350080 4E 80 00 20 */ blr diff --git a/asm/dolphin/ai/ai/AIInit.s b/asm/dolphin/ai/ai/AIInit.s index 6bd2deb40f..3cd46ae725 100644 --- a/asm/dolphin/ai/ai/AIInit.s +++ b/asm/dolphin/ai/ai/AIInit.s @@ -35,18 +35,18 @@ lbl_80350084: /* 80350108 7C 6A 18 16 */ mulhwu r3, r10, r3 /* 8035010C 55 08 BA 7E */ srwi r8, r8, 9 /* 80350110 54 E7 BA 7E */ srwi r7, r7, 9 -/* 80350114 91 0D 93 14 */ stw r8, data_80451894(r13) +/* 80350114 91 0D 93 14 */ stw r8, bound_32KHz+0x4(r13) /* 80350118 54 A5 BA 7E */ srwi r5, r5, 9 /* 8035011C 54 84 BA 7E */ srwi r4, r4, 9 -/* 80350120 90 ED 93 1C */ stw r7, data_8045189C(r13) +/* 80350120 90 ED 93 1C */ stw r7, bound_48KHz+0x4(r13) /* 80350124 3B E0 00 00 */ li r31, 0 /* 80350128 54 63 BA 7E */ srwi r3, r3, 9 -/* 8035012C 90 AD 93 24 */ stw r5, data_804518A4(r13) +/* 8035012C 90 AD 93 24 */ stw r5, min_wait+0x4(r13) /* 80350130 3C C0 CC 00 */ lis r6, 0xCC00 /* 0xCC006C00@ha */ -/* 80350134 90 6D 93 34 */ stw r3, data_804518B4(r13) +/* 80350134 90 6D 93 34 */ stw r3, buffer+0x4(r13) /* 80350138 38 60 00 01 */ li r3, 1 /* 8035013C 80 06 6C 00 */ lwz r0, 0x6C00(r6) /* 0xCC006C00@l */ -/* 80350140 90 8D 93 2C */ stw r4, data_804518AC(r13) +/* 80350140 90 8D 93 2C */ stw r4, max_wait+0x4(r13) /* 80350144 54 00 06 F2 */ rlwinm r0, r0, 0, 0x1b, 0x19 /* 80350148 60 00 00 20 */ ori r0, r0, 0x20 /* 8035014C 93 ED 93 10 */ stw r31, bound_32KHz(r13) diff --git a/asm/dolphin/ai/ai/AISetStreamVolLeft.s b/asm/dolphin/ai/ai/AISetStreamVolLeft.s deleted file mode 100644 index dc98f1ddae..0000000000 --- a/asm/dolphin/ai/ai/AISetStreamVolLeft.s +++ /dev/null @@ -1,8 +0,0 @@ -lbl_8035002C: -/* 8035002C 3C 80 CC 00 */ lis r4, 0xCC00 /* 0xCC006C00@ha */ -/* 80350030 38 84 6C 00 */ addi r4, r4, 0x6C00 /* 0xCC006C00@l */ -/* 80350034 80 04 00 04 */ lwz r0, 4(r4) -/* 80350038 54 00 00 2E */ rlwinm r0, r0, 0, 0, 0x17 -/* 8035003C 50 60 06 3E */ rlwimi r0, r3, 0, 0x18, 0x1f -/* 80350040 90 04 00 04 */ stw r0, 4(r4) -/* 80350044 4E 80 00 20 */ blr diff --git a/asm/dolphin/ai/ai/AISetStreamVolRight.s b/asm/dolphin/ai/ai/AISetStreamVolRight.s deleted file mode 100644 index c707ba4c96..0000000000 --- a/asm/dolphin/ai/ai/AISetStreamVolRight.s +++ /dev/null @@ -1,8 +0,0 @@ -lbl_80350058: -/* 80350058 3C 80 CC 00 */ lis r4, 0xCC00 /* 0xCC006C00@ha */ -/* 8035005C 38 84 6C 00 */ addi r4, r4, 0x6C00 /* 0xCC006C00@l */ -/* 80350060 80 04 00 04 */ lwz r0, 4(r4) -/* 80350064 54 00 06 1E */ rlwinm r0, r0, 0, 0x18, 0xf -/* 80350068 50 60 44 2E */ rlwimi r0, r3, 8, 0x10, 0x17 -/* 8035006C 90 04 00 04 */ stw r0, 4(r4) -/* 80350070 4E 80 00 20 */ blr diff --git a/asm/dolphin/ai/ai/AIStartDMA.s b/asm/dolphin/ai/ai/AIStartDMA.s deleted file mode 100644 index 55d79863db..0000000000 --- a/asm/dolphin/ai/ai/AIStartDMA.s +++ /dev/null @@ -1,7 +0,0 @@ -lbl_8034FD3C: -/* 8034FD3C 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC005000@ha */ -/* 8034FD40 38 63 50 00 */ addi r3, r3, 0x5000 /* 0xCC005000@l */ -/* 8034FD44 A0 03 00 36 */ lhz r0, 0x36(r3) -/* 8034FD48 60 00 80 00 */ ori r0, r0, 0x8000 -/* 8034FD4C B0 03 00 36 */ sth r0, 0x36(r3) -/* 8034FD50 4E 80 00 20 */ blr diff --git a/asm/dolphin/ai/ai/AIStopDMA.s b/asm/dolphin/ai/ai/AIStopDMA.s deleted file mode 100644 index dd37ed36e0..0000000000 --- a/asm/dolphin/ai/ai/AIStopDMA.s +++ /dev/null @@ -1,7 +0,0 @@ -lbl_8034FD54: -/* 8034FD54 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC005000@ha */ -/* 8034FD58 38 63 50 00 */ addi r3, r3, 0x5000 /* 0xCC005000@l */ -/* 8034FD5C A0 03 00 36 */ lhz r0, 0x36(r3) -/* 8034FD60 54 00 04 5E */ rlwinm r0, r0, 0, 0x11, 0xf -/* 8034FD64 B0 03 00 36 */ sth r0, 0x36(r3) -/* 8034FD68 4E 80 00 20 */ blr diff --git a/asm/dolphin/ai/ai/__AICallbackStackSwitch.s b/asm/dolphin/ai/ai/__AICallbackStackSwitch.s deleted file mode 100644 index d5e983237e..0000000000 --- a/asm/dolphin/ai/ai/__AICallbackStackSwitch.s +++ /dev/null @@ -1,23 +0,0 @@ -lbl_80350318: -/* 80350318 7C 08 02 A6 */ mflr r0 -/* 8035031C 90 01 00 04 */ stw r0, 4(r1) -/* 80350320 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 80350324 93 E1 00 14 */ stw r31, 0x14(r1) -/* 80350328 7C 7F 1B 78 */ mr r31, r3 -/* 8035032C 3C A0 80 45 */ lis r5, __OldStack@ha /* 0x80451884@ha */ -/* 80350330 38 A5 18 84 */ addi r5, r5, __OldStack@l /* 0x80451884@l */ -/* 80350334 90 25 00 00 */ stw r1, 0(r5) -/* 80350338 3C A0 80 45 */ lis r5, __CallbackStack@ha /* 0x80451880@ha */ -/* 8035033C 38 A5 18 80 */ addi r5, r5, __CallbackStack@l /* 0x80451880@l */ -/* 80350340 80 25 00 00 */ lwz r1, 0(r5) -/* 80350344 38 21 FF F8 */ addi r1, r1, -8 -/* 80350348 7F E8 03 A6 */ mtlr r31 -/* 8035034C 4E 80 00 21 */ blrl -/* 80350350 3C A0 80 45 */ lis r5, __OldStack@ha /* 0x80451884@ha */ -/* 80350354 38 A5 18 84 */ addi r5, r5, __OldStack@l /* 0x80451884@l */ -/* 80350358 80 25 00 00 */ lwz r1, 0(r5) -/* 8035035C 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 80350360 83 E1 00 14 */ lwz r31, 0x14(r1) -/* 80350364 38 21 00 18 */ addi r1, r1, 0x18 -/* 80350368 7C 08 03 A6 */ mtlr r0 -/* 8035036C 4E 80 00 20 */ blr diff --git a/asm/dolphin/ai/ai/__AIDHandler.s b/asm/dolphin/ai/ai/__AIDHandler.s deleted file mode 100644 index 5052d5780d..0000000000 --- a/asm/dolphin/ai/ai/__AIDHandler.s +++ /dev/null @@ -1,47 +0,0 @@ -lbl_8035026C: -/* 8035026C 7C 08 02 A6 */ mflr r0 -/* 80350270 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC005000@ha */ -/* 80350274 90 01 00 04 */ stw r0, 4(r1) -/* 80350278 38 63 50 00 */ addi r3, r3, 0x5000 /* 0xCC005000@l */ -/* 8035027C 38 00 FF 5F */ li r0, -161 -/* 80350280 94 21 FD 20 */ stwu r1, -0x2e0(r1) -/* 80350284 93 E1 02 DC */ stw r31, 0x2dc(r1) -/* 80350288 3B E4 00 00 */ addi r31, r4, 0 -/* 8035028C A0 A3 00 0A */ lhz r5, 0xa(r3) -/* 80350290 7C A0 00 38 */ and r0, r5, r0 -/* 80350294 60 00 00 08 */ ori r0, r0, 8 -/* 80350298 B0 03 00 0A */ sth r0, 0xa(r3) -/* 8035029C 38 61 00 10 */ addi r3, r1, 0x10 -/* 803502A0 4B FE BD 61 */ bl OSClearContext -/* 803502A4 38 61 00 10 */ addi r3, r1, 0x10 -/* 803502A8 4B FE BB 91 */ bl OSSetCurrentContext -/* 803502AC 80 6D 92 FC */ lwz r3, __AID_Callback(r13) -/* 803502B0 28 03 00 00 */ cmplwi r3, 0 -/* 803502B4 41 82 00 40 */ beq lbl_803502F4 -/* 803502B8 80 0D 93 0C */ lwz r0, __AID_Active(r13) -/* 803502BC 2C 00 00 00 */ cmpwi r0, 0 -/* 803502C0 40 82 00 34 */ bne lbl_803502F4 -/* 803502C4 80 0D 93 00 */ lwz r0, __CallbackStack(r13) -/* 803502C8 38 80 00 01 */ li r4, 1 -/* 803502CC 90 8D 93 0C */ stw r4, __AID_Active(r13) -/* 803502D0 28 00 00 00 */ cmplwi r0, 0 -/* 803502D4 41 82 00 0C */ beq lbl_803502E0 -/* 803502D8 48 00 00 41 */ bl __AICallbackStackSwitch -/* 803502DC 48 00 00 10 */ b lbl_803502EC -lbl_803502E0: -/* 803502E0 39 83 00 00 */ addi r12, r3, 0 -/* 803502E4 7D 88 03 A6 */ mtlr r12 -/* 803502E8 4E 80 00 21 */ blrl -lbl_803502EC: -/* 803502EC 38 00 00 00 */ li r0, 0 -/* 803502F0 90 0D 93 0C */ stw r0, __AID_Active(r13) -lbl_803502F4: -/* 803502F4 38 61 00 10 */ addi r3, r1, 0x10 -/* 803502F8 4B FE BD 09 */ bl OSClearContext -/* 803502FC 7F E3 FB 78 */ mr r3, r31 -/* 80350300 4B FE BB 39 */ bl OSSetCurrentContext -/* 80350304 80 01 02 E4 */ lwz r0, 0x2e4(r1) -/* 80350308 83 E1 02 DC */ lwz r31, 0x2dc(r1) -/* 8035030C 38 21 02 E0 */ addi r1, r1, 0x2e0 -/* 80350310 7C 08 03 A6 */ mtlr r0 -/* 80350314 4E 80 00 20 */ blr diff --git a/asm/dolphin/ai/ai/__AI_SRC_INIT.s b/asm/dolphin/ai/ai/__AI_SRC_INIT.s deleted file mode 100644 index 7716d91d08..0000000000 --- a/asm/dolphin/ai/ai/__AI_SRC_INIT.s +++ /dev/null @@ -1,134 +0,0 @@ -lbl_80350370: -/* 80350370 7C 08 02 A6 */ mflr r0 -/* 80350374 90 01 00 04 */ stw r0, 4(r1) -/* 80350378 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 8035037C BF 41 00 18 */ stmw r26, 0x18(r1) -/* 80350380 38 80 00 00 */ li r4, 0 -/* 80350384 38 60 00 00 */ li r3, 0 -/* 80350388 38 00 00 00 */ li r0, 0 -/* 8035038C 3B 80 00 00 */ li r28, 0 -/* 80350390 3B A0 00 00 */ li r29, 0 -/* 80350394 48 00 00 04 */ b lbl_80350398 -lbl_80350398: -/* 80350398 3F E0 CC 00 */ lis r31, 0xcc00 -/* 8035039C 48 00 00 04 */ b lbl_803503A0 -lbl_803503A0: -/* 803503A0 48 00 01 64 */ b lbl_80350504 -lbl_803503A4: -/* 803503A4 80 1F 6C 00 */ lwz r0, 0x6c00(r31) -/* 803503A8 3B DF 6C 00 */ addi r30, r31, 0x6c00 -/* 803503AC 3B DE 00 08 */ addi r30, r30, 8 -/* 803503B0 54 00 06 F2 */ rlwinm r0, r0, 0, 0x1b, 0x19 -/* 803503B4 60 00 00 20 */ ori r0, r0, 0x20 -/* 803503B8 90 1F 6C 00 */ stw r0, 0x6c00(r31) -/* 803503BC 80 1F 6C 00 */ lwz r0, 0x6c00(r31) -/* 803503C0 54 00 07 FA */ rlwinm r0, r0, 0, 0x1f, 0x1d -/* 803503C4 90 1F 6C 00 */ stw r0, 0x6c00(r31) -/* 803503C8 80 1F 6C 00 */ lwz r0, 0x6c00(r31) -/* 803503CC 54 00 00 3C */ rlwinm r0, r0, 0, 0, 0x1e -/* 803503D0 60 00 00 01 */ ori r0, r0, 1 -/* 803503D4 90 1F 6C 00 */ stw r0, 0x6c00(r31) -/* 803503D8 80 7E 00 00 */ lwz r3, 0(r30) -/* 803503DC 48 00 00 04 */ b lbl_803503E0 -lbl_803503E0: -/* 803503E0 48 00 00 04 */ b lbl_803503E4 -lbl_803503E4: -/* 803503E4 80 1E 00 00 */ lwz r0, 0(r30) -/* 803503E8 7C 03 00 40 */ cmplw r3, r0 -/* 803503EC 41 82 FF F8 */ beq lbl_803503E4 -/* 803503F0 4B FF 23 0D */ bl OSGetTime -/* 803503F4 80 1F 6C 00 */ lwz r0, 0x6c00(r31) -/* 803503F8 7C 9A 23 78 */ mr r26, r4 -/* 803503FC 7C 7B 1B 78 */ mr r27, r3 -/* 80350400 54 00 07 FA */ rlwinm r0, r0, 0, 0x1f, 0x1d -/* 80350404 60 00 00 02 */ ori r0, r0, 2 -/* 80350408 90 1F 6C 00 */ stw r0, 0x6c00(r31) -/* 8035040C 80 1F 6C 00 */ lwz r0, 0x6c00(r31) -/* 80350410 54 00 00 3C */ rlwinm r0, r0, 0, 0, 0x1e -/* 80350414 60 00 00 01 */ ori r0, r0, 1 -/* 80350418 90 1F 6C 00 */ stw r0, 0x6c00(r31) -/* 8035041C 80 7E 00 00 */ lwz r3, 0(r30) -/* 80350420 48 00 00 04 */ b lbl_80350424 -lbl_80350424: -/* 80350424 48 00 00 04 */ b lbl_80350428 -lbl_80350428: -/* 80350428 80 1E 00 00 */ lwz r0, 0(r30) -/* 8035042C 7C 03 00 40 */ cmplw r3, r0 -/* 80350430 41 82 FF F8 */ beq lbl_80350428 -/* 80350434 4B FF 22 C9 */ bl OSGetTime -/* 80350438 7D 1A 20 10 */ subfc r8, r26, r4 -/* 8035043C 81 8D 93 14 */ lwz r12, data_80451894(r13) -/* 80350440 80 BF 6C 00 */ lwz r5, 0x6c00(r31) -/* 80350444 7C FB 19 10 */ subfe r7, r27, r3 -/* 80350448 81 4D 93 34 */ lwz r10, data_804518B4(r13) -/* 8035044C 6C E7 80 00 */ xoris r7, r7, 0x8000 -/* 80350450 54 A5 07 FA */ rlwinm r5, r5, 0, 0x1f, 0x1d -/* 80350454 81 6D 93 10 */ lwz r11, bound_32KHz(r13) -/* 80350458 7C CA 60 10 */ subfc r6, r10, r12 -/* 8035045C 81 2D 93 30 */ lwz r9, buffer(r13) -/* 80350460 90 BF 6C 00 */ stw r5, 0x6c00(r31) -/* 80350464 7C 09 59 10 */ subfe r0, r9, r11 -/* 80350468 6C 05 80 00 */ xoris r5, r0, 0x8000 -/* 8035046C 7C 06 40 10 */ subfc r0, r6, r8 -/* 80350470 80 1F 6C 00 */ lwz r0, 0x6c00(r31) -/* 80350474 7C A5 39 10 */ subfe r5, r5, r7 -/* 80350478 7C A7 39 10 */ subfe r5, r7, r7 -/* 8035047C 7C A5 00 D0 */ neg r5, r5 -/* 80350480 54 00 00 3C */ rlwinm r0, r0, 0, 0, 0x1e -/* 80350484 2C 05 00 00 */ cmpwi r5, 0 -/* 80350488 90 1F 6C 00 */ stw r0, 0x6c00(r31) -/* 8035048C 41 82 00 14 */ beq lbl_803504A0 -/* 80350490 83 AD 93 20 */ lwz r29, min_wait(r13) -/* 80350494 38 00 00 01 */ li r0, 1 -/* 80350498 83 8D 93 24 */ lwz r28, data_804518A4(r13) -/* 8035049C 48 00 00 68 */ b lbl_80350504 -lbl_803504A0: -/* 803504A0 7C CC 50 14 */ addc r6, r12, r10 -/* 803504A4 7C 0B 49 14 */ adde r0, r11, r9 -/* 803504A8 6C 05 80 00 */ xoris r5, r0, 0x8000 -/* 803504AC 7C 06 40 10 */ subfc r0, r6, r8 -/* 803504B0 7C A5 39 10 */ subfe r5, r5, r7 -/* 803504B4 7C A7 39 10 */ subfe r5, r7, r7 -/* 803504B8 7C A5 00 D0 */ neg r5, r5 -/* 803504BC 2C 05 00 00 */ cmpwi r5, 0 -/* 803504C0 40 82 00 40 */ bne lbl_80350500 -/* 803504C4 80 AD 93 1C */ lwz r5, data_8045189C(r13) -/* 803504C8 80 0D 93 18 */ lwz r0, bound_48KHz(r13) -/* 803504CC 7C CA 28 10 */ subfc r6, r10, r5 -/* 803504D0 7C 09 01 10 */ subfe r0, r9, r0 -/* 803504D4 6C 05 80 00 */ xoris r5, r0, 0x8000 -/* 803504D8 7C 06 40 10 */ subfc r0, r6, r8 -/* 803504DC 7C A5 39 10 */ subfe r5, r5, r7 -/* 803504E0 7C A7 39 10 */ subfe r5, r7, r7 -/* 803504E4 7C A5 00 D0 */ neg r5, r5 -/* 803504E8 2C 05 00 00 */ cmpwi r5, 0 -/* 803504EC 41 82 00 14 */ beq lbl_80350500 -/* 803504F0 83 AD 93 28 */ lwz r29, max_wait(r13) -/* 803504F4 38 00 00 01 */ li r0, 1 -/* 803504F8 83 8D 93 2C */ lwz r28, data_804518AC(r13) -/* 803504FC 48 00 00 08 */ b lbl_80350504 -lbl_80350500: -/* 80350500 38 00 00 00 */ li r0, 0 -lbl_80350504: -/* 80350504 28 00 00 00 */ cmplwi r0, 0 -/* 80350508 41 82 FE 9C */ beq lbl_803503A4 -/* 8035050C 7F 64 E0 14 */ addc r27, r4, r28 -/* 80350510 7F 43 E9 14 */ adde r26, r3, r29 -/* 80350514 48 00 00 04 */ b lbl_80350518 -lbl_80350518: -/* 80350518 48 00 00 04 */ b lbl_8035051C -lbl_8035051C: -/* 8035051C 4B FF 21 E1 */ bl OSGetTime -/* 80350520 6C 65 80 00 */ xoris r5, r3, 0x8000 -/* 80350524 6F 43 80 00 */ xoris r3, r26, 0x8000 -/* 80350528 7C 1B 20 10 */ subfc r0, r27, r4 -/* 8035052C 7C 63 29 10 */ subfe r3, r3, r5 -/* 80350530 7C 65 29 10 */ subfe r3, r5, r5 -/* 80350534 7C 63 00 D0 */ neg r3, r3 -/* 80350538 2C 03 00 00 */ cmpwi r3, 0 -/* 8035053C 40 82 FF E0 */ bne lbl_8035051C -/* 80350540 BB 41 00 18 */ lmw r26, 0x18(r1) -/* 80350544 80 01 00 34 */ lwz r0, 0x34(r1) -/* 80350548 38 21 00 30 */ addi r1, r1, 0x30 -/* 8035054C 7C 08 03 A6 */ mtlr r0 -/* 80350550 4E 80 00 20 */ blr diff --git a/asm/dolphin/ar/ar/__ARHandler.s b/asm/dolphin/ar/ar/__ARHandler.s deleted file mode 100644 index 0e22f4e954..0000000000 --- a/asm/dolphin/ar/ar/__ARHandler.s +++ /dev/null @@ -1,32 +0,0 @@ -lbl_803507F8: -/* 803507F8 7C 08 02 A6 */ mflr r0 -/* 803507FC 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC005000@ha */ -/* 80350800 90 01 00 04 */ stw r0, 4(r1) -/* 80350804 38 63 50 00 */ addi r3, r3, 0x5000 /* 0xCC005000@l */ -/* 80350808 38 00 FF 77 */ li r0, -137 -/* 8035080C 94 21 FD 20 */ stwu r1, -0x2e0(r1) -/* 80350810 93 E1 02 DC */ stw r31, 0x2dc(r1) -/* 80350814 3B E4 00 00 */ addi r31, r4, 0 -/* 80350818 A0 A3 00 0A */ lhz r5, 0xa(r3) -/* 8035081C 7C A0 00 38 */ and r0, r5, r0 -/* 80350820 60 00 00 20 */ ori r0, r0, 0x20 -/* 80350824 B0 03 00 0A */ sth r0, 0xa(r3) -/* 80350828 38 61 00 10 */ addi r3, r1, 0x10 -/* 8035082C 4B FE B7 D5 */ bl OSClearContext -/* 80350830 38 61 00 10 */ addi r3, r1, 0x10 -/* 80350834 4B FE B6 05 */ bl OSSetCurrentContext -/* 80350838 81 8D 93 38 */ lwz r12, __AR_Callback(r13) -/* 8035083C 28 0C 00 00 */ cmplwi r12, 0 -/* 80350840 41 82 00 0C */ beq lbl_8035084C -/* 80350844 7D 88 03 A6 */ mtlr r12 -/* 80350848 4E 80 00 21 */ blrl -lbl_8035084C: -/* 8035084C 38 61 00 10 */ addi r3, r1, 0x10 -/* 80350850 4B FE B7 B1 */ bl OSClearContext -/* 80350854 7F E3 FB 78 */ mr r3, r31 -/* 80350858 4B FE B5 E1 */ bl OSSetCurrentContext -/* 8035085C 80 01 02 E4 */ lwz r0, 0x2e4(r1) -/* 80350860 83 E1 02 DC */ lwz r31, 0x2dc(r1) -/* 80350864 38 21 02 E0 */ addi r1, r1, 0x2e0 -/* 80350868 7C 08 03 A6 */ mtlr r0 -/* 8035086C 4E 80 00 20 */ blr diff --git a/asm/dolphin/base/PPCArch/PPCDisableSpeculation.s b/asm/dolphin/base/PPCArch/PPCDisableSpeculation.s deleted file mode 100644 index b6d044d4b2..0000000000 --- a/asm/dolphin/base/PPCArch/PPCDisableSpeculation.s +++ /dev/null @@ -1,11 +0,0 @@ -lbl_80339DA4: -/* 80339DA4 7C 08 02 A6 */ mflr r0 -/* 80339DA8 90 01 00 04 */ stw r0, 4(r1) -/* 80339DAC 94 21 FF F8 */ stwu r1, -8(r1) -/* 80339DB0 4B FF FF 21 */ bl PPCMfhid0 -/* 80339DB4 60 63 02 00 */ ori r3, r3, 0x200 -/* 80339DB8 4B FF FF 21 */ bl PPCMthid0 -/* 80339DBC 80 01 00 0C */ lwz r0, 0xc(r1) -/* 80339DC0 38 21 00 08 */ addi r1, r1, 8 -/* 80339DC4 7C 08 03 A6 */ mtlr r0 -/* 80339DC8 4E 80 00 20 */ blr diff --git a/asm/dolphin/base/PPCArch/PPCMffpscr.s b/asm/dolphin/base/PPCArch/PPCMffpscr.s deleted file mode 100644 index 7c7f608149..0000000000 --- a/asm/dolphin/base/PPCArch/PPCMffpscr.s +++ /dev/null @@ -1,9 +0,0 @@ -lbl_80339D44: -/* 80339D44 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 80339D48 DB E1 00 10 */ stfd f31, 0x10(r1) -/* 80339D4C FF E0 04 8E */ mffs f31 -/* 80339D50 DB E1 00 08 */ stfd f31, 8(r1) -/* 80339D54 80 61 00 0C */ lwz r3, 0xc(r1) -/* 80339D58 CB E1 00 10 */ lfd f31, 0x10(r1) -/* 80339D5C 38 21 00 18 */ addi r1, r1, 0x18 -/* 80339D60 4E 80 00 20 */ blr diff --git a/asm/dolphin/base/PPCArch/PPCMtfpscr.s b/asm/dolphin/base/PPCArch/PPCMtfpscr.s deleted file mode 100644 index df2855ed60..0000000000 --- a/asm/dolphin/base/PPCArch/PPCMtfpscr.s +++ /dev/null @@ -1,11 +0,0 @@ -lbl_80339D64: -/* 80339D64 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 80339D68 DB E1 00 18 */ stfd f31, 0x18(r1) -/* 80339D6C 38 80 00 00 */ li r4, 0 -/* 80339D70 90 81 00 10 */ stw r4, 0x10(r1) -/* 80339D74 90 61 00 14 */ stw r3, 0x14(r1) -/* 80339D78 CB E1 00 10 */ lfd f31, 0x10(r1) -/* 80339D7C FD FE FD 8E */ mtfsf 0xff, f31 -/* 80339D80 CB E1 00 18 */ lfd f31, 0x18(r1) -/* 80339D84 38 21 00 20 */ addi r1, r1, 0x20 -/* 80339D88 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDBios/CARDGetFastMode.s b/asm/dolphin/card/CARDBios/CARDGetFastMode.s deleted file mode 100644 index b3590d3f0a..0000000000 --- a/asm/dolphin/card/CARDBios/CARDGetFastMode.s +++ /dev/null @@ -1,9 +0,0 @@ -lbl_80353F08: -/* 80353F08 A0 0D 93 9A */ lhz r0, struct_80451918+0x2(r13) -/* 80353F0C 28 00 00 00 */ cmplwi r0, 0 -/* 80353F10 41 82 00 0C */ beq lbl_80353F1C -/* 80353F14 38 60 00 01 */ li r3, 1 -/* 80353F18 4E 80 00 20 */ blr -lbl_80353F1C: -/* 80353F1C 38 60 00 00 */ li r3, 0 -/* 80353F20 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDBios/CARDInit.s b/asm/dolphin/card/CARDBios/CARDInit.s index 095da590b5..4c06ead5f1 100644 --- a/asm/dolphin/card/CARDBios/CARDInit.s +++ b/asm/dolphin/card/CARDBios/CARDInit.s @@ -15,7 +15,7 @@ lbl_80353AC8: /* 80353AFC 40 82 00 5C */ bne lbl_80353B58 lbl_80353B00: /* 80353B00 4B FE 9A 55 */ bl OSGetFontEncode -/* 80353B04 B0 6D 93 98 */ sth r3, struct_80451918+0x0(r13) +/* 80353B04 B0 6D 93 98 */ sth r3, __CARDEncode+0x0(r13) /* 80353B08 80 6D 84 E0 */ lwz r3, __CARDVersion(r13) /* 80353B0C 4B FE 6D 69 */ bl OSRegisterVersion /* 80353B10 4B FF E9 AD */ bl DSPInit diff --git a/asm/dolphin/card/CARDBios/OnReset.s b/asm/dolphin/card/CARDBios/OnReset.s deleted file mode 100644 index c72d8222d9..0000000000 --- a/asm/dolphin/card/CARDBios/OnReset.s +++ /dev/null @@ -1,24 +0,0 @@ -lbl_80353EB8: -/* 80353EB8 7C 08 02 A6 */ mflr r0 -/* 80353EBC 2C 03 00 00 */ cmpwi r3, 0 -/* 80353EC0 90 01 00 04 */ stw r0, 4(r1) -/* 80353EC4 94 21 FF F8 */ stwu r1, -8(r1) -/* 80353EC8 40 82 00 2C */ bne lbl_80353EF4 -/* 80353ECC 38 60 00 00 */ li r3, 0 -/* 80353ED0 48 00 35 09 */ bl CARDUnmount -/* 80353ED4 2C 03 FF FF */ cmpwi r3, -1 -/* 80353ED8 41 82 00 14 */ beq lbl_80353EEC -/* 80353EDC 38 60 00 01 */ li r3, 1 -/* 80353EE0 48 00 34 F9 */ bl CARDUnmount -/* 80353EE4 2C 03 FF FF */ cmpwi r3, -1 -/* 80353EE8 40 82 00 0C */ bne lbl_80353EF4 -lbl_80353EEC: -/* 80353EEC 38 60 00 00 */ li r3, 0 -/* 80353EF0 48 00 00 08 */ b lbl_80353EF8 -lbl_80353EF4: -/* 80353EF4 38 60 00 01 */ li r3, 1 -lbl_80353EF8: -/* 80353EF8 80 01 00 0C */ lwz r0, 0xc(r1) -/* 80353EFC 38 21 00 08 */ addi r1, r1, 8 -/* 80353F00 7C 08 03 A6 */ mtlr r0 -/* 80353F04 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDBios/__CARDGetFontEncode.s b/asm/dolphin/card/CARDBios/__CARDGetFontEncode.s deleted file mode 100644 index 0046116314..0000000000 --- a/asm/dolphin/card/CARDBios/__CARDGetFontEncode.s +++ /dev/null @@ -1,3 +0,0 @@ -lbl_80353B74: -/* 80353B74 A0 6D 93 98 */ lhz r3, struct_80451918+0x0(r13) -/* 80353B78 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDBios/__CARDSetDiskID.s b/asm/dolphin/card/CARDBios/__CARDSetDiskID.s deleted file mode 100644 index cadd43b86e..0000000000 --- a/asm/dolphin/card/CARDBios/__CARDSetDiskID.s +++ /dev/null @@ -1,19 +0,0 @@ -lbl_80353B7C: -/* 80353B7C 28 03 00 00 */ cmplwi r3, 0 -/* 80353B80 3C 80 80 45 */ lis r4, __CARDBlock@ha /* 0x8044CBC0@ha */ -/* 80353B84 38 84 CB C0 */ addi r4, r4, __CARDBlock@l /* 0x8044CBC0@l */ -/* 80353B88 41 82 00 0C */ beq lbl_80353B94 -/* 80353B8C 7C 60 1B 78 */ mr r0, r3 -/* 80353B90 48 00 00 08 */ b lbl_80353B98 -lbl_80353B94: -/* 80353B94 38 04 02 20 */ addi r0, r4, 0x220 -lbl_80353B98: -/* 80353B98 28 03 00 00 */ cmplwi r3, 0 -/* 80353B9C 90 04 01 0C */ stw r0, 0x10c(r4) -/* 80353BA0 41 82 00 08 */ beq lbl_80353BA8 -/* 80353BA4 48 00 00 08 */ b lbl_80353BAC -lbl_80353BA8: -/* 80353BA8 38 64 02 20 */ addi r3, r4, 0x220 -lbl_80353BAC: -/* 80353BAC 90 64 02 1C */ stw r3, 0x21c(r4) -/* 80353BB0 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDBios/__CARDSyncCallback.s b/asm/dolphin/card/CARDBios/__CARDSyncCallback.s deleted file mode 100644 index 90c46ad366..0000000000 --- a/asm/dolphin/card/CARDBios/__CARDSyncCallback.s +++ /dev/null @@ -1,14 +0,0 @@ -lbl_80352A34: -/* 80352A34 7C 08 02 A6 */ mflr r0 -/* 80352A38 1C 83 01 10 */ mulli r4, r3, 0x110 -/* 80352A3C 90 01 00 04 */ stw r0, 4(r1) -/* 80352A40 3C 60 80 45 */ lis r3, __CARDBlock@ha /* 0x8044CBC0@ha */ -/* 80352A44 94 21 FF F8 */ stwu r1, -8(r1) -/* 80352A48 38 03 CB C0 */ addi r0, r3, __CARDBlock@l /* 0x8044CBC0@l */ -/* 80352A4C 7C 60 22 14 */ add r3, r0, r4 -/* 80352A50 38 63 00 8C */ addi r3, r3, 0x8c -/* 80352A54 4B FE F2 45 */ bl OSWakeupThread -/* 80352A58 80 01 00 0C */ lwz r0, 0xc(r1) -/* 80352A5C 38 21 00 08 */ addi r1, r1, 8 -/* 80352A60 7C 08 03 A6 */ mtlr r0 -/* 80352A64 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDBios/__CARDTxHandler.s b/asm/dolphin/card/CARDBios/__CARDTxHandler.s deleted file mode 100644 index 0b90950f8b..0000000000 --- a/asm/dolphin/card/CARDBios/__CARDTxHandler.s +++ /dev/null @@ -1,47 +0,0 @@ -lbl_80352C58: -/* 80352C58 7C 08 02 A6 */ mflr r0 -/* 80352C5C 90 01 00 04 */ stw r0, 4(r1) -/* 80352C60 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 80352C64 BF 61 00 14 */ stmw r27, 0x14(r1) -/* 80352C68 3B 63 00 00 */ addi r27, r3, 0 -/* 80352C6C 3C 60 80 45 */ lis r3, __CARDBlock@ha /* 0x8044CBC0@ha */ -/* 80352C70 38 03 CB C0 */ addi r0, r3, __CARDBlock@l /* 0x8044CBC0@l */ -/* 80352C74 1C 9B 01 10 */ mulli r4, r27, 0x110 -/* 80352C78 38 7B 00 00 */ addi r3, r27, 0 -/* 80352C7C 7F A0 22 14 */ add r29, r0, r4 -/* 80352C80 4B FF 0D 15 */ bl EXIDeselect -/* 80352C84 7C 60 00 34 */ cntlzw r0, r3 -/* 80352C88 38 7B 00 00 */ addi r3, r27, 0 -/* 80352C8C 54 1F D9 7E */ srwi r31, r0, 5 -/* 80352C90 4B FF 14 8D */ bl EXIUnlock -/* 80352C94 80 1D 00 C8 */ lwz r0, 0xc8(r29) -/* 80352C98 28 00 00 00 */ cmplwi r0, 0 -/* 80352C9C 7C 1C 03 78 */ mr r28, r0 -/* 80352CA0 41 82 00 4C */ beq lbl_80352CEC -/* 80352CA4 3B C0 00 00 */ li r30, 0 -/* 80352CA8 2C 1F 00 00 */ cmpwi r31, 0 -/* 80352CAC 93 DD 00 C8 */ stw r30, 0xc8(r29) -/* 80352CB0 40 82 00 18 */ bne lbl_80352CC8 -/* 80352CB4 7F 63 DB 78 */ mr r3, r27 -/* 80352CB8 4B FF 08 B5 */ bl EXIProbe -/* 80352CBC 2C 03 00 00 */ cmpwi r3, 0 -/* 80352CC0 41 82 00 08 */ beq lbl_80352CC8 -/* 80352CC4 3B C0 00 01 */ li r30, 1 -lbl_80352CC8: -/* 80352CC8 2C 1E 00 00 */ cmpwi r30, 0 -/* 80352CCC 41 82 00 0C */ beq lbl_80352CD8 -/* 80352CD0 38 80 00 00 */ li r4, 0 -/* 80352CD4 48 00 00 08 */ b lbl_80352CDC -lbl_80352CD8: -/* 80352CD8 38 80 FF FD */ li r4, -3 -lbl_80352CDC: -/* 80352CDC 39 9C 00 00 */ addi r12, r28, 0 -/* 80352CE0 7D 88 03 A6 */ mtlr r12 -/* 80352CE4 38 7B 00 00 */ addi r3, r27, 0 -/* 80352CE8 4E 80 00 21 */ blrl -lbl_80352CEC: -/* 80352CEC BB 61 00 14 */ lmw r27, 0x14(r1) -/* 80352CF0 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 80352CF4 38 21 00 28 */ addi r1, r1, 0x28 -/* 80352CF8 7C 08 03 A6 */ mtlr r0 -/* 80352CFC 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDBlock/__CARDGetFatBlock.s b/asm/dolphin/card/CARDBlock/__CARDGetFatBlock.s deleted file mode 100644 index a9bfd20edf..0000000000 --- a/asm/dolphin/card/CARDBlock/__CARDGetFatBlock.s +++ /dev/null @@ -1,3 +0,0 @@ -lbl_80355414: -/* 80355414 80 63 00 88 */ lwz r3, 0x88(r3) -/* 80355418 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDCheck/CARDCheck.s b/asm/dolphin/card/CARDCheck/CARDCheck.s deleted file mode 100644 index 2a21b9aabc..0000000000 --- a/asm/dolphin/card/CARDCheck/CARDCheck.s +++ /dev/null @@ -1,24 +0,0 @@ -lbl_803568F4: -/* 803568F4 7C 08 02 A6 */ mflr r0 -/* 803568F8 3C 80 80 35 */ lis r4, __CARDSyncCallback@ha /* 0x80352A34@ha */ -/* 803568FC 90 01 00 04 */ stw r0, 4(r1) -/* 80356900 38 A4 2A 34 */ addi r5, r4, __CARDSyncCallback@l /* 0x80352A34@l */ -/* 80356904 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 80356908 93 E1 00 14 */ stw r31, 0x14(r1) -/* 8035690C 3B E3 00 00 */ addi r31, r3, 0 -/* 80356910 38 81 00 0C */ addi r4, r1, 0xc -/* 80356914 4B FF FA 51 */ bl CARDCheckExAsync -/* 80356918 2C 03 00 00 */ cmpwi r3, 0 -/* 8035691C 41 80 00 18 */ blt lbl_80356934 -/* 80356920 34 01 00 0C */ addic. r0, r1, 0xc -/* 80356924 40 82 00 08 */ bne lbl_8035692C -/* 80356928 48 00 00 0C */ b lbl_80356934 -lbl_8035692C: -/* 8035692C 7F E3 FB 78 */ mr r3, r31 -/* 80356930 4B FF D4 F1 */ bl __CARDSync -lbl_80356934: -/* 80356934 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 80356938 83 E1 00 14 */ lwz r31, 0x14(r1) -/* 8035693C 38 21 00 18 */ addi r1, r1, 0x18 -/* 80356940 7C 08 03 A6 */ mtlr r0 -/* 80356944 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDCheck/__CARDCheckSum.s b/asm/dolphin/card/CARDCheck/__CARDCheckSum.s deleted file mode 100644 index a0cf9161be..0000000000 --- a/asm/dolphin/card/CARDCheck/__CARDCheckSum.s +++ /dev/null @@ -1,114 +0,0 @@ -lbl_803559E0: -/* 803559E0 38 00 00 00 */ li r0, 0 -/* 803559E4 7C 84 0E 70 */ srawi r4, r4, 1 -/* 803559E8 B0 06 00 00 */ sth r0, 0(r6) -/* 803559EC 7C 84 01 95 */ addze. r4, r4 -/* 803559F0 B0 05 00 00 */ sth r0, 0(r5) -/* 803559F4 40 81 01 70 */ ble lbl_80355B64 -/* 803559F8 54 80 E8 FF */ rlwinm. r0, r4, 0x1d, 3, 0x1f -/* 803559FC 7C 09 03 A6 */ mtctr r0 -/* 80355A00 41 82 01 34 */ beq lbl_80355B34 -lbl_80355A04: -/* 80355A04 A0 E5 00 00 */ lhz r7, 0(r5) -/* 80355A08 A0 03 00 00 */ lhz r0, 0(r3) -/* 80355A0C 7C 07 02 14 */ add r0, r7, r0 -/* 80355A10 B0 05 00 00 */ sth r0, 0(r5) -/* 80355A14 A0 03 00 00 */ lhz r0, 0(r3) -/* 80355A18 A0 E6 00 00 */ lhz r7, 0(r6) -/* 80355A1C 7C 00 00 F8 */ nor r0, r0, r0 -/* 80355A20 7C 07 02 14 */ add r0, r7, r0 -/* 80355A24 B0 06 00 00 */ sth r0, 0(r6) -/* 80355A28 A0 E5 00 00 */ lhz r7, 0(r5) -/* 80355A2C A0 03 00 02 */ lhz r0, 2(r3) -/* 80355A30 7C 07 02 14 */ add r0, r7, r0 -/* 80355A34 B0 05 00 00 */ sth r0, 0(r5) -/* 80355A38 A0 03 00 02 */ lhz r0, 2(r3) -/* 80355A3C A0 E6 00 00 */ lhz r7, 0(r6) -/* 80355A40 7C 00 00 F8 */ nor r0, r0, r0 -/* 80355A44 7C 07 02 14 */ add r0, r7, r0 -/* 80355A48 B0 06 00 00 */ sth r0, 0(r6) -/* 80355A4C A0 E5 00 00 */ lhz r7, 0(r5) -/* 80355A50 A0 03 00 04 */ lhz r0, 4(r3) -/* 80355A54 7C 07 02 14 */ add r0, r7, r0 -/* 80355A58 B0 05 00 00 */ sth r0, 0(r5) -/* 80355A5C A0 03 00 04 */ lhz r0, 4(r3) -/* 80355A60 A0 E6 00 00 */ lhz r7, 0(r6) -/* 80355A64 7C 00 00 F8 */ nor r0, r0, r0 -/* 80355A68 7C 07 02 14 */ add r0, r7, r0 -/* 80355A6C B0 06 00 00 */ sth r0, 0(r6) -/* 80355A70 A0 E5 00 00 */ lhz r7, 0(r5) -/* 80355A74 A0 03 00 06 */ lhz r0, 6(r3) -/* 80355A78 7C 07 02 14 */ add r0, r7, r0 -/* 80355A7C B0 05 00 00 */ sth r0, 0(r5) -/* 80355A80 A0 03 00 06 */ lhz r0, 6(r3) -/* 80355A84 A0 E6 00 00 */ lhz r7, 0(r6) -/* 80355A88 7C 00 00 F8 */ nor r0, r0, r0 -/* 80355A8C 7C 07 02 14 */ add r0, r7, r0 -/* 80355A90 B0 06 00 00 */ sth r0, 0(r6) -/* 80355A94 A0 E5 00 00 */ lhz r7, 0(r5) -/* 80355A98 A0 03 00 08 */ lhz r0, 8(r3) -/* 80355A9C 7C 07 02 14 */ add r0, r7, r0 -/* 80355AA0 B0 05 00 00 */ sth r0, 0(r5) -/* 80355AA4 A0 03 00 08 */ lhz r0, 8(r3) -/* 80355AA8 A0 E6 00 00 */ lhz r7, 0(r6) -/* 80355AAC 7C 00 00 F8 */ nor r0, r0, r0 -/* 80355AB0 7C 07 02 14 */ add r0, r7, r0 -/* 80355AB4 B0 06 00 00 */ sth r0, 0(r6) -/* 80355AB8 A0 E5 00 00 */ lhz r7, 0(r5) -/* 80355ABC A0 03 00 0A */ lhz r0, 0xa(r3) -/* 80355AC0 7C 07 02 14 */ add r0, r7, r0 -/* 80355AC4 B0 05 00 00 */ sth r0, 0(r5) -/* 80355AC8 A0 03 00 0A */ lhz r0, 0xa(r3) -/* 80355ACC A0 E6 00 00 */ lhz r7, 0(r6) -/* 80355AD0 7C 00 00 F8 */ nor r0, r0, r0 -/* 80355AD4 7C 07 02 14 */ add r0, r7, r0 -/* 80355AD8 B0 06 00 00 */ sth r0, 0(r6) -/* 80355ADC A0 E5 00 00 */ lhz r7, 0(r5) -/* 80355AE0 A0 03 00 0C */ lhz r0, 0xc(r3) -/* 80355AE4 7C 07 02 14 */ add r0, r7, r0 -/* 80355AE8 B0 05 00 00 */ sth r0, 0(r5) -/* 80355AEC A0 03 00 0C */ lhz r0, 0xc(r3) -/* 80355AF0 A0 E6 00 00 */ lhz r7, 0(r6) -/* 80355AF4 7C 00 00 F8 */ nor r0, r0, r0 -/* 80355AF8 7C 07 02 14 */ add r0, r7, r0 -/* 80355AFC B0 06 00 00 */ sth r0, 0(r6) -/* 80355B00 A0 E5 00 00 */ lhz r7, 0(r5) -/* 80355B04 A0 03 00 0E */ lhz r0, 0xe(r3) -/* 80355B08 7C 07 02 14 */ add r0, r7, r0 -/* 80355B0C B0 05 00 00 */ sth r0, 0(r5) -/* 80355B10 A0 03 00 0E */ lhz r0, 0xe(r3) -/* 80355B14 38 63 00 10 */ addi r3, r3, 0x10 -/* 80355B18 A0 E6 00 00 */ lhz r7, 0(r6) -/* 80355B1C 7C 00 00 F8 */ nor r0, r0, r0 -/* 80355B20 7C 07 02 14 */ add r0, r7, r0 -/* 80355B24 B0 06 00 00 */ sth r0, 0(r6) -/* 80355B28 42 00 FE DC */ bdnz lbl_80355A04 -/* 80355B2C 70 84 00 07 */ andi. r4, r4, 7 -/* 80355B30 41 82 00 34 */ beq lbl_80355B64 -lbl_80355B34: -/* 80355B34 7C 89 03 A6 */ mtctr r4 -lbl_80355B38: -/* 80355B38 A0 E5 00 00 */ lhz r7, 0(r5) -/* 80355B3C A0 03 00 00 */ lhz r0, 0(r3) -/* 80355B40 7C 07 02 14 */ add r0, r7, r0 -/* 80355B44 B0 05 00 00 */ sth r0, 0(r5) -/* 80355B48 A0 03 00 00 */ lhz r0, 0(r3) -/* 80355B4C 38 63 00 02 */ addi r3, r3, 2 -/* 80355B50 A0 E6 00 00 */ lhz r7, 0(r6) -/* 80355B54 7C 00 00 F8 */ nor r0, r0, r0 -/* 80355B58 7C 07 02 14 */ add r0, r7, r0 -/* 80355B5C B0 06 00 00 */ sth r0, 0(r6) -/* 80355B60 42 00 FF D8 */ bdnz lbl_80355B38 -lbl_80355B64: -/* 80355B64 A0 05 00 00 */ lhz r0, 0(r5) -/* 80355B68 28 00 FF FF */ cmplwi r0, 0xffff -/* 80355B6C 40 82 00 0C */ bne lbl_80355B78 -/* 80355B70 38 00 00 00 */ li r0, 0 -/* 80355B74 B0 05 00 00 */ sth r0, 0(r5) -lbl_80355B78: -/* 80355B78 A0 06 00 00 */ lhz r0, 0(r6) -/* 80355B7C 28 00 FF FF */ cmplwi r0, 0xffff -/* 80355B80 4C 82 00 20 */ bnelr -/* 80355B84 38 00 00 00 */ li r0, 0 -/* 80355B88 B0 06 00 00 */ sth r0, 0(r6) -/* 80355B8C 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDCreate/CARDCreate.s b/asm/dolphin/card/CARDCreate/CARDCreate.s deleted file mode 100644 index 0537ddcff5..0000000000 --- a/asm/dolphin/card/CARDCreate/CARDCreate.s +++ /dev/null @@ -1,21 +0,0 @@ -lbl_80358458: -/* 80358458 7C 08 02 A6 */ mflr r0 -/* 8035845C 3C E0 80 35 */ lis r7, __CARDSyncCallback@ha /* 0x80352A34@ha */ -/* 80358460 90 01 00 04 */ stw r0, 4(r1) -/* 80358464 38 E7 2A 34 */ addi r7, r7, __CARDSyncCallback@l /* 0x80352A34@l */ -/* 80358468 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 8035846C 93 E1 00 1C */ stw r31, 0x1c(r1) -/* 80358470 3B E3 00 00 */ addi r31, r3, 0 -/* 80358474 4B FF FD C5 */ bl CARDCreateAsync -/* 80358478 2C 03 00 00 */ cmpwi r3, 0 -/* 8035847C 40 80 00 08 */ bge lbl_80358484 -/* 80358480 48 00 00 0C */ b lbl_8035848C -lbl_80358484: -/* 80358484 7F E3 FB 78 */ mr r3, r31 -/* 80358488 4B FF B9 99 */ bl __CARDSync -lbl_8035848C: -/* 8035848C 80 01 00 24 */ lwz r0, 0x24(r1) -/* 80358490 83 E1 00 1C */ lwz r31, 0x1c(r1) -/* 80358494 38 21 00 20 */ addi r1, r1, 0x20 -/* 80358498 7C 08 03 A6 */ mtlr r0 -/* 8035849C 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDCreate/CARDCreateAsync.s b/asm/dolphin/card/CARDCreate/CARDCreateAsync.s deleted file mode 100644 index 98b5e80217..0000000000 --- a/asm/dolphin/card/CARDCreate/CARDCreateAsync.s +++ /dev/null @@ -1,151 +0,0 @@ -lbl_80358238: -/* 80358238 7C 08 02 A6 */ mflr r0 -/* 8035823C 90 01 00 04 */ stw r0, 4(r1) -/* 80358240 94 21 FF B8 */ stwu r1, -0x48(r1) -/* 80358244 BE E1 00 24 */ stmw r23, 0x24(r1) -/* 80358248 3B 44 00 00 */ addi r26, r4, 0 -/* 8035824C 3B 23 00 00 */ addi r25, r3, 0 -/* 80358250 3B 65 00 00 */ addi r27, r5, 0 -/* 80358254 3B 86 00 00 */ addi r28, r6, 0 -/* 80358258 3B A7 00 00 */ addi r29, r7, 0 -/* 8035825C 38 7A 00 00 */ addi r3, r26, 0 -/* 80358260 48 01 09 85 */ bl strlen -/* 80358264 28 03 00 20 */ cmplwi r3, 0x20 -/* 80358268 40 81 00 0C */ ble lbl_80358274 -/* 8035826C 38 60 FF F4 */ li r3, -12 -/* 80358270 48 00 01 D4 */ b lbl_80358444 -lbl_80358274: -/* 80358274 38 79 00 00 */ addi r3, r25, 0 -/* 80358278 38 81 00 1C */ addi r4, r1, 0x1c -/* 8035827C 4B FF B9 39 */ bl __CARDGetControlBlock -/* 80358280 2C 03 00 00 */ cmpwi r3, 0 -/* 80358284 40 80 00 08 */ bge lbl_8035828C -/* 80358288 48 00 01 BC */ b lbl_80358444 -lbl_8035828C: -/* 8035828C 28 1B 00 00 */ cmplwi r27, 0 -/* 80358290 41 82 00 1C */ beq lbl_803582AC -/* 80358294 80 61 00 1C */ lwz r3, 0x1c(r1) -/* 80358298 80 83 00 0C */ lwz r4, 0xc(r3) -/* 8035829C 7C 1B 23 96 */ divwu r0, r27, r4 -/* 803582A0 7C 00 21 D6 */ mullw r0, r0, r4 -/* 803582A4 7C 00 D8 51 */ subf. r0, r0, r27 -/* 803582A8 41 82 00 0C */ beq lbl_803582B4 -lbl_803582AC: -/* 803582AC 38 60 FF 80 */ li r3, -128 -/* 803582B0 48 00 01 94 */ b lbl_80358444 -lbl_803582B4: -/* 803582B4 3C 80 00 01 */ lis r4, 0x0001 /* 0x0000FFFF@ha */ -/* 803582B8 3B C4 FF FF */ addi r30, r4, 0xFFFF /* 0x0000FFFF@l */ -/* 803582BC 4B FF D4 C1 */ bl __CARDGetDirBlock -/* 803582C0 3B E3 00 00 */ addi r31, r3, 0 -/* 803582C4 3B 1F 00 00 */ addi r24, r31, 0 -/* 803582C8 3A E0 00 00 */ li r23, 0 -/* 803582CC 48 00 00 8C */ b lbl_80358358 -lbl_803582D0: -/* 803582D0 88 18 00 00 */ lbz r0, 0(r24) -/* 803582D4 28 00 00 FF */ cmplwi r0, 0xff -/* 803582D8 40 82 00 18 */ bne lbl_803582F0 -/* 803582DC 57 C0 04 3E */ clrlwi r0, r30, 0x10 -/* 803582E0 28 00 FF FF */ cmplwi r0, 0xffff -/* 803582E4 40 82 00 6C */ bne lbl_80358350 -/* 803582E8 7E FE BB 78 */ mr r30, r23 -/* 803582EC 48 00 00 64 */ b lbl_80358350 -lbl_803582F0: -/* 803582F0 80 81 00 1C */ lwz r4, 0x1c(r1) -/* 803582F4 38 78 00 00 */ addi r3, r24, 0 -/* 803582F8 38 A0 00 04 */ li r5, 4 -/* 803582FC 80 84 01 0C */ lwz r4, 0x10c(r4) -/* 80358300 48 00 DD 8D */ bl memcmp -/* 80358304 2C 03 00 00 */ cmpwi r3, 0 -/* 80358308 40 82 00 48 */ bne lbl_80358350 -/* 8035830C 80 81 00 1C */ lwz r4, 0x1c(r1) -/* 80358310 38 78 00 04 */ addi r3, r24, 4 -/* 80358314 38 A0 00 02 */ li r5, 2 -/* 80358318 80 84 01 0C */ lwz r4, 0x10c(r4) -/* 8035831C 38 84 00 04 */ addi r4, r4, 4 -/* 80358320 48 00 DD 6D */ bl memcmp -/* 80358324 2C 03 00 00 */ cmpwi r3, 0 -/* 80358328 40 82 00 28 */ bne lbl_80358350 -/* 8035832C 38 78 00 00 */ addi r3, r24, 0 -/* 80358330 38 9A 00 00 */ addi r4, r26, 0 -/* 80358334 4B FF F9 41 */ bl __CARDCompareFileName -/* 80358338 2C 03 00 00 */ cmpwi r3, 0 -/* 8035833C 41 82 00 14 */ beq lbl_80358350 -/* 80358340 80 61 00 1C */ lwz r3, 0x1c(r1) -/* 80358344 38 80 FF F9 */ li r4, -7 -/* 80358348 4B FF B9 25 */ bl __CARDPutControlBlock -/* 8035834C 48 00 00 F8 */ b lbl_80358444 -lbl_80358350: -/* 80358350 3B 18 00 40 */ addi r24, r24, 0x40 -/* 80358354 3A F7 00 01 */ addi r23, r23, 1 -lbl_80358358: -/* 80358358 56 E0 04 3E */ clrlwi r0, r23, 0x10 -/* 8035835C 28 00 00 7F */ cmplwi r0, 0x7f -/* 80358360 41 80 FF 70 */ blt lbl_803582D0 -/* 80358364 57 C0 04 3E */ clrlwi r0, r30, 0x10 -/* 80358368 28 00 FF FF */ cmplwi r0, 0xffff -/* 8035836C 40 82 00 14 */ bne lbl_80358380 -/* 80358370 80 61 00 1C */ lwz r3, 0x1c(r1) -/* 80358374 38 80 FF F8 */ li r4, -8 -/* 80358378 4B FF B8 F5 */ bl __CARDPutControlBlock -/* 8035837C 48 00 00 C8 */ b lbl_80358444 -lbl_80358380: -/* 80358380 80 61 00 1C */ lwz r3, 0x1c(r1) -/* 80358384 4B FF D0 91 */ bl __CARDGetFatBlock -/* 80358388 80 81 00 1C */ lwz r4, 0x1c(r1) -/* 8035838C A0 03 00 06 */ lhz r0, 6(r3) -/* 80358390 80 64 00 0C */ lwz r3, 0xc(r4) -/* 80358394 7C 03 01 D6 */ mullw r0, r3, r0 -/* 80358398 7C 00 D8 40 */ cmplw r0, r27 -/* 8035839C 40 80 00 14 */ bge lbl_803583B0 -/* 803583A0 38 64 00 00 */ addi r3, r4, 0 -/* 803583A4 38 80 FF F7 */ li r4, -9 -/* 803583A8 4B FF B8 C5 */ bl __CARDPutControlBlock -/* 803583AC 48 00 00 98 */ b lbl_80358444 -lbl_803583B0: -/* 803583B0 28 1D 00 00 */ cmplwi r29, 0 -/* 803583B4 41 82 00 0C */ beq lbl_803583C0 -/* 803583B8 7F A0 EB 78 */ mr r0, r29 -/* 803583BC 48 00 00 0C */ b lbl_803583C8 -lbl_803583C0: -/* 803583C0 3C 60 80 35 */ lis r3, __CARDDefaultApiCallback@ha /* 0x80352A30@ha */ -/* 803583C4 38 03 2A 30 */ addi r0, r3, __CARDDefaultApiCallback@l /* 0x80352A30@l */ -lbl_803583C8: -/* 803583C8 90 04 00 D0 */ stw r0, 0xd0(r4) -/* 803583CC 57 C0 32 B2 */ rlwinm r0, r30, 6, 0xa, 0x19 -/* 803583D0 7C FF 02 14 */ add r7, r31, r0 -/* 803583D4 80 61 00 1C */ lwz r3, 0x1c(r1) -/* 803583D8 57 DD 04 3E */ clrlwi r29, r30, 0x10 -/* 803583DC 38 9A 00 00 */ addi r4, r26, 0 -/* 803583E0 B3 C3 00 BC */ sth r30, 0xbc(r3) -/* 803583E4 38 67 00 08 */ addi r3, r7, 8 -/* 803583E8 38 A0 00 20 */ li r5, 0x20 -/* 803583EC 80 C1 00 1C */ lwz r6, 0x1c(r1) -/* 803583F0 80 06 00 0C */ lwz r0, 0xc(r6) -/* 803583F4 7C 1B 03 96 */ divwu r0, r27, r0 -/* 803583F8 B0 07 00 38 */ sth r0, 0x38(r7) -/* 803583FC 48 01 06 ED */ bl strncpy -/* 80358400 80 81 00 1C */ lwz r4, 0x1c(r1) -/* 80358404 3C 60 80 36 */ lis r3, CreateCallbackFat@ha /* 0x80358108@ha */ -/* 80358408 38 A3 81 08 */ addi r5, r3, CreateCallbackFat@l /* 0x80358108@l */ -/* 8035840C 93 84 00 C0 */ stw r28, 0xc0(r4) -/* 80358410 7F 23 CB 78 */ mr r3, r25 -/* 80358414 93 3C 00 00 */ stw r25, 0(r28) -/* 80358418 93 BC 00 04 */ stw r29, 4(r28) -/* 8035841C 80 81 00 1C */ lwz r4, 0x1c(r1) -/* 80358420 80 04 00 0C */ lwz r0, 0xc(r4) -/* 80358424 7C 9B 03 96 */ divwu r4, r27, r0 -/* 80358428 4B FF D1 91 */ bl __CARDAllocBlock -/* 8035842C 7C 64 1B 79 */ or. r4, r3, r3 -/* 80358430 40 80 00 10 */ bge lbl_80358440 -/* 80358434 80 61 00 1C */ lwz r3, 0x1c(r1) -/* 80358438 4B FF B8 35 */ bl __CARDPutControlBlock -/* 8035843C 48 00 00 08 */ b lbl_80358444 -lbl_80358440: -/* 80358440 7C 83 23 78 */ mr r3, r4 -lbl_80358444: -/* 80358444 BA E1 00 24 */ lmw r23, 0x24(r1) -/* 80358448 80 01 00 4C */ lwz r0, 0x4c(r1) -/* 8035844C 38 21 00 48 */ addi r1, r1, 0x48 -/* 80358450 7C 08 03 A6 */ mtlr r0 -/* 80358454 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDCreate/CreateCallbackFat.s b/asm/dolphin/card/CARDCreate/CreateCallbackFat.s deleted file mode 100644 index 12d1acf479..0000000000 --- a/asm/dolphin/card/CARDCreate/CreateCallbackFat.s +++ /dev/null @@ -1,79 +0,0 @@ -lbl_80358108: -/* 80358108 7C 08 02 A6 */ mflr r0 -/* 8035810C 90 01 00 04 */ stw r0, 4(r1) -/* 80358110 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 80358114 BF 61 00 14 */ stmw r27, 0x14(r1) -/* 80358118 3B 83 00 00 */ addi r28, r3, 0 -/* 8035811C 3C 60 80 45 */ lis r3, __CARDBlock@ha /* 0x8044CBC0@ha */ -/* 80358120 1C BC 01 10 */ mulli r5, r28, 0x110 -/* 80358124 38 03 CB C0 */ addi r0, r3, __CARDBlock@l /* 0x8044CBC0@l */ -/* 80358128 7F E0 2A 14 */ add r31, r0, r5 -/* 8035812C 83 BF 00 D0 */ lwz r29, 0xd0(r31) -/* 80358130 3B 60 00 00 */ li r27, 0 -/* 80358134 7C 9E 23 79 */ or. r30, r4, r4 -/* 80358138 93 7F 00 D0 */ stw r27, 0xd0(r31) -/* 8035813C 41 80 00 C0 */ blt lbl_803581FC -/* 80358140 7F E3 FB 78 */ mr r3, r31 -/* 80358144 4B FF D6 39 */ bl __CARDGetDirBlock -/* 80358148 A0 1F 00 BC */ lhz r0, 0xbc(r31) -/* 8035814C 38 A0 00 04 */ li r5, 4 -/* 80358150 80 9F 01 0C */ lwz r4, 0x10c(r31) -/* 80358154 54 00 30 32 */ slwi r0, r0, 6 -/* 80358158 7F C3 02 14 */ add r30, r3, r0 -/* 8035815C 38 7E 00 00 */ addi r3, r30, 0 -/* 80358160 4B CA B3 E1 */ bl memcpy -/* 80358164 80 9F 01 0C */ lwz r4, 0x10c(r31) -/* 80358168 38 7E 00 04 */ addi r3, r30, 4 -/* 8035816C 38 A0 00 02 */ li r5, 2 -/* 80358170 38 84 00 04 */ addi r4, r4, 4 -/* 80358174 4B CA B3 CD */ bl memcpy -/* 80358178 38 00 00 04 */ li r0, 4 -/* 8035817C 98 1E 00 34 */ stb r0, 0x34(r30) -/* 80358180 38 00 FF FF */ li r0, -1 -/* 80358184 3C 60 80 00 */ lis r3, 0x8000 /* 0x800000F8@ha */ -/* 80358188 9B 7E 00 35 */ stb r27, 0x35(r30) -/* 8035818C A0 9F 00 BE */ lhz r4, 0xbe(r31) -/* 80358190 B0 9E 00 36 */ sth r4, 0x36(r30) -/* 80358194 9B 7E 00 07 */ stb r27, 7(r30) -/* 80358198 90 1E 00 2C */ stw r0, 0x2c(r30) -/* 8035819C B3 7E 00 30 */ sth r27, 0x30(r30) -/* 803581A0 B3 7E 00 32 */ sth r27, 0x32(r30) -/* 803581A4 90 1E 00 3C */ stw r0, 0x3c(r30) -/* 803581A8 A0 1E 00 32 */ lhz r0, 0x32(r30) -/* 803581AC 54 00 00 3A */ rlwinm r0, r0, 0, 0, 0x1d -/* 803581B0 60 00 00 01 */ ori r0, r0, 1 -/* 803581B4 B0 1E 00 32 */ sth r0, 0x32(r30) -/* 803581B8 80 9F 00 C0 */ lwz r4, 0xc0(r31) -/* 803581BC 93 64 00 08 */ stw r27, 8(r4) -/* 803581C0 A0 1E 00 36 */ lhz r0, 0x36(r30) -/* 803581C4 80 9F 00 C0 */ lwz r4, 0xc0(r31) -/* 803581C8 B0 04 00 10 */ sth r0, 0x10(r4) -/* 803581CC 80 03 00 F8 */ lwz r0, 0x00F8(r3) /* 0x800000F8@l */ -/* 803581D0 54 1B F0 BE */ srwi r27, r0, 2 -/* 803581D4 4B FE A5 29 */ bl OSGetTime -/* 803581D8 38 DB 00 00 */ addi r6, r27, 0 -/* 803581DC 38 A0 00 00 */ li r5, 0 -/* 803581E0 48 00 A1 45 */ bl __div2i -/* 803581E4 90 9E 00 28 */ stw r4, 0x28(r30) -/* 803581E8 38 7C 00 00 */ addi r3, r28, 0 -/* 803581EC 38 9D 00 00 */ addi r4, r29, 0 -/* 803581F0 4B FF D7 2D */ bl __CARDUpdateDir -/* 803581F4 7C 7E 1B 79 */ or. r30, r3, r3 -/* 803581F8 40 80 00 2C */ bge lbl_80358224 -lbl_803581FC: -/* 803581FC 38 7F 00 00 */ addi r3, r31, 0 -/* 80358200 38 9E 00 00 */ addi r4, r30, 0 -/* 80358204 4B FF BA 69 */ bl __CARDPutControlBlock -/* 80358208 28 1D 00 00 */ cmplwi r29, 0 -/* 8035820C 41 82 00 18 */ beq lbl_80358224 -/* 80358210 39 9D 00 00 */ addi r12, r29, 0 -/* 80358214 7D 88 03 A6 */ mtlr r12 -/* 80358218 38 7C 00 00 */ addi r3, r28, 0 -/* 8035821C 38 9E 00 00 */ addi r4, r30, 0 -/* 80358220 4E 80 00 21 */ blrl -lbl_80358224: -/* 80358224 BB 61 00 14 */ lmw r27, 0x14(r1) -/* 80358228 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 8035822C 38 21 00 28 */ addi r1, r1, 0x28 -/* 80358230 7C 08 03 A6 */ mtlr r0 -/* 80358234 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDDir/__CARDGetDirBlock.s b/asm/dolphin/card/CARDDir/__CARDGetDirBlock.s deleted file mode 100644 index 655c12cd71..0000000000 --- a/asm/dolphin/card/CARDDir/__CARDGetDirBlock.s +++ /dev/null @@ -1,3 +0,0 @@ -lbl_8035577C: -/* 8035577C 80 63 00 84 */ lwz r3, 0x84(r3) -/* 80355780 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDFormat/CARDFormat.s b/asm/dolphin/card/CARDFormat/CARDFormat.s deleted file mode 100644 index 11367b097c..0000000000 --- a/asm/dolphin/card/CARDFormat/CARDFormat.s +++ /dev/null @@ -1,24 +0,0 @@ -lbl_80357C20: -/* 80357C20 7C 08 02 A6 */ mflr r0 -/* 80357C24 90 01 00 04 */ stw r0, 4(r1) -/* 80357C28 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 80357C2C 93 E1 00 14 */ stw r31, 0x14(r1) -/* 80357C30 7C 7F 1B 78 */ mr r31, r3 -/* 80357C34 4B FF BF 41 */ bl __CARDGetFontEncode -/* 80357C38 3C A0 80 35 */ lis r5, __CARDSyncCallback@ha /* 0x80352A34@ha */ -/* 80357C3C 38 83 00 00 */ addi r4, r3, 0 -/* 80357C40 38 A5 2A 34 */ addi r5, r5, __CARDSyncCallback@l /* 0x80352A34@l */ -/* 80357C44 38 7F 00 00 */ addi r3, r31, 0 -/* 80357C48 4B FF F9 81 */ bl __CARDFormatRegionAsync -/* 80357C4C 2C 03 00 00 */ cmpwi r3, 0 -/* 80357C50 40 80 00 08 */ bge lbl_80357C58 -/* 80357C54 48 00 00 0C */ b lbl_80357C60 -lbl_80357C58: -/* 80357C58 7F E3 FB 78 */ mr r3, r31 -/* 80357C5C 4B FF C1 C5 */ bl __CARDSync -lbl_80357C60: -/* 80357C60 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 80357C64 83 E1 00 14 */ lwz r31, 0x14(r1) -/* 80357C68 38 21 00 18 */ addi r1, r1, 0x18 -/* 80357C6C 7C 08 03 A6 */ mtlr r0 -/* 80357C70 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDMount/CARDMount.s b/asm/dolphin/card/CARDMount/CARDMount.s deleted file mode 100644 index 614f03d3df..0000000000 --- a/asm/dolphin/card/CARDMount/CARDMount.s +++ /dev/null @@ -1,21 +0,0 @@ -lbl_803572F4: -/* 803572F4 7C 08 02 A6 */ mflr r0 -/* 803572F8 3C C0 80 35 */ lis r6, __CARDSyncCallback@ha /* 0x80352A34@ha */ -/* 803572FC 90 01 00 04 */ stw r0, 4(r1) -/* 80357300 38 C6 2A 34 */ addi r6, r6, __CARDSyncCallback@l /* 0x80352A34@l */ -/* 80357304 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 80357308 93 E1 00 1C */ stw r31, 0x1c(r1) -/* 8035730C 3B E3 00 00 */ addi r31, r3, 0 -/* 80357310 4B FF FE 45 */ bl CARDMountAsync -/* 80357314 2C 03 00 00 */ cmpwi r3, 0 -/* 80357318 40 80 00 08 */ bge lbl_80357320 -/* 8035731C 48 00 00 0C */ b lbl_80357328 -lbl_80357320: -/* 80357320 7F E3 FB 78 */ mr r3, r31 -/* 80357324 4B FF CA FD */ bl __CARDSync -lbl_80357328: -/* 80357328 80 01 00 24 */ lwz r0, 0x24(r1) -/* 8035732C 83 E1 00 1C */ lwz r31, 0x1c(r1) -/* 80357330 38 21 00 20 */ addi r1, r1, 0x20 -/* 80357334 7C 08 03 A6 */ mtlr r0 -/* 80357338 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDMount/CARDMountAsync.s b/asm/dolphin/card/CARDMount/CARDMountAsync.s deleted file mode 100644 index 3488093dde..0000000000 --- a/asm/dolphin/card/CARDMount/CARDMountAsync.s +++ /dev/null @@ -1,115 +0,0 @@ -lbl_80357154: -/* 80357154 7C 08 02 A6 */ mflr r0 -/* 80357158 90 01 00 04 */ stw r0, 4(r1) -/* 8035715C 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 80357160 BF 41 00 18 */ stmw r26, 0x18(r1) -/* 80357164 7C 7E 1B 79 */ or. r30, r3, r3 -/* 80357168 3B 44 00 00 */ addi r26, r4, 0 -/* 8035716C 3B 65 00 00 */ addi r27, r5, 0 -/* 80357170 3B A6 00 00 */ addi r29, r6, 0 -/* 80357174 41 80 00 0C */ blt lbl_80357180 -/* 80357178 2C 1E 00 02 */ cmpwi r30, 2 -/* 8035717C 41 80 00 0C */ blt lbl_80357188 -lbl_80357180: -/* 80357180 38 60 FF 80 */ li r3, -128 -/* 80357184 48 00 01 5C */ b lbl_803572E0 -lbl_80357188: -/* 80357188 3C 60 80 00 */ lis r3, 0x8000 /* 0x800030E3@ha */ -/* 8035718C 88 03 30 E3 */ lbz r0, 0x30E3(r3) /* 0x800030E3@l */ -/* 80357190 54 00 06 31 */ rlwinm. r0, r0, 0, 0x18, 0x18 -/* 80357194 41 82 00 0C */ beq lbl_803571A0 -/* 80357198 38 60 FF FD */ li r3, -3 -/* 8035719C 48 00 01 44 */ b lbl_803572E0 -lbl_803571A0: -/* 803571A0 1C 9E 01 10 */ mulli r4, r30, 0x110 -/* 803571A4 3C 60 80 45 */ lis r3, __CARDBlock@ha /* 0x8044CBC0@ha */ -/* 803571A8 38 03 CB C0 */ addi r0, r3, __CARDBlock@l /* 0x8044CBC0@l */ -/* 803571AC 7F E0 22 14 */ add r31, r0, r4 -/* 803571B0 4B FE 65 45 */ bl OSDisableInterrupts -/* 803571B4 80 1F 00 04 */ lwz r0, 4(r31) -/* 803571B8 3B 83 00 00 */ addi r28, r3, 0 -/* 803571BC 2C 00 FF FF */ cmpwi r0, -1 -/* 803571C0 40 82 00 14 */ bne lbl_803571D4 -/* 803571C4 7F 83 E3 78 */ mr r3, r28 -/* 803571C8 4B FE 65 55 */ bl OSRestoreInterrupts -/* 803571CC 38 60 FF FF */ li r3, -1 -/* 803571D0 48 00 01 10 */ b lbl_803572E0 -lbl_803571D4: -/* 803571D4 80 1F 00 00 */ lwz r0, 0(r31) -/* 803571D8 2C 00 00 00 */ cmpwi r0, 0 -/* 803571DC 40 82 00 24 */ bne lbl_80357200 -/* 803571E0 7F C3 F3 78 */ mr r3, r30 -/* 803571E4 4B FE D0 15 */ bl EXIGetState -/* 803571E8 54 60 07 39 */ rlwinm. r0, r3, 0, 0x1c, 0x1c -/* 803571EC 41 82 00 14 */ beq lbl_80357200 -/* 803571F0 7F 83 E3 78 */ mr r3, r28 -/* 803571F4 4B FE 65 29 */ bl OSRestoreInterrupts -/* 803571F8 38 60 FF FE */ li r3, -2 -/* 803571FC 48 00 00 E4 */ b lbl_803572E0 -lbl_80357200: -/* 80357200 38 00 FF FF */ li r0, -1 -/* 80357204 90 1F 00 04 */ stw r0, 4(r31) -/* 80357208 28 1D 00 00 */ cmplwi r29, 0 -/* 8035720C 93 5F 00 80 */ stw r26, 0x80(r31) -/* 80357210 93 7F 00 C4 */ stw r27, 0xc4(r31) -/* 80357214 41 82 00 0C */ beq lbl_80357220 -/* 80357218 7F A0 EB 78 */ mr r0, r29 -/* 8035721C 48 00 00 0C */ b lbl_80357228 -lbl_80357220: -/* 80357220 3C 60 80 35 */ lis r3, __CARDDefaultApiCallback@ha /* 0x80352A30@ha */ -/* 80357224 38 03 2A 30 */ addi r0, r3, __CARDDefaultApiCallback@l /* 0x80352A30@l */ -lbl_80357228: -/* 80357228 90 1F 00 D0 */ stw r0, 0xd0(r31) -/* 8035722C 38 00 00 00 */ li r0, 0 -/* 80357230 90 1F 00 CC */ stw r0, 0xcc(r31) -/* 80357234 80 1F 00 00 */ lwz r0, 0(r31) -/* 80357238 2C 00 00 00 */ cmpwi r0, 0 -/* 8035723C 40 82 00 34 */ bne lbl_80357270 -/* 80357240 3C 60 80 35 */ lis r3, __CARDExtHandler@ha /* 0x80352A68@ha */ -/* 80357244 38 83 2A 68 */ addi r4, r3, __CARDExtHandler@l /* 0x80352A68@l */ -/* 80357248 38 7E 00 00 */ addi r3, r30, 0 -/* 8035724C 4B FE C4 55 */ bl EXIAttach -/* 80357250 2C 03 00 00 */ cmpwi r3, 0 -/* 80357254 40 82 00 1C */ bne lbl_80357270 -/* 80357258 38 00 FF FD */ li r0, -3 -/* 8035725C 90 1F 00 04 */ stw r0, 4(r31) -/* 80357260 7F 83 E3 78 */ mr r3, r28 -/* 80357264 4B FE 64 B9 */ bl OSRestoreInterrupts -/* 80357268 38 60 FF FD */ li r3, -3 -/* 8035726C 48 00 00 74 */ b lbl_803572E0 -lbl_80357270: -/* 80357270 3B A0 00 00 */ li r29, 0 -/* 80357274 93 BF 00 24 */ stw r29, 0x24(r31) -/* 80357278 38 00 00 01 */ li r0, 1 -/* 8035727C 38 7E 00 00 */ addi r3, r30, 0 -/* 80357280 90 1F 00 00 */ stw r0, 0(r31) -/* 80357284 38 80 00 00 */ li r4, 0 -/* 80357288 4B FE C0 F5 */ bl EXISetExiCallback -/* 8035728C 38 7F 00 E0 */ addi r3, r31, 0xe0 -/* 80357290 4B FE 39 AD */ bl OSCancelAlarm -/* 80357294 93 BF 00 84 */ stw r29, 0x84(r31) -/* 80357298 7F 83 E3 78 */ mr r3, r28 -/* 8035729C 93 BF 00 88 */ stw r29, 0x88(r31) -/* 803572A0 4B FE 64 7D */ bl OSRestoreInterrupts -/* 803572A4 3C 60 80 35 */ lis r3, __CARDMountCallback@ha /* 0x8035701C@ha */ -/* 803572A8 38 03 70 1C */ addi r0, r3, __CARDMountCallback@l /* 0x8035701C@l */ -/* 803572AC 3C 60 80 35 */ lis r3, __CARDUnlockedHandler@ha /* 0x80352D00@ha */ -/* 803572B0 90 1F 00 DC */ stw r0, 0xdc(r31) -/* 803572B4 38 A3 2D 00 */ addi r5, r3, __CARDUnlockedHandler@l /* 0x80352D00@l */ -/* 803572B8 38 7E 00 00 */ addi r3, r30, 0 -/* 803572BC 38 80 00 00 */ li r4, 0 -/* 803572C0 4B FE CD 69 */ bl EXILock -/* 803572C4 2C 03 00 00 */ cmpwi r3, 0 -/* 803572C8 40 82 00 0C */ bne lbl_803572D4 -/* 803572CC 38 60 00 00 */ li r3, 0 -/* 803572D0 48 00 00 10 */ b lbl_803572E0 -lbl_803572D4: -/* 803572D4 93 BF 00 DC */ stw r29, 0xdc(r31) -/* 803572D8 7F C3 F3 78 */ mr r3, r30 -/* 803572DC 4B FF F8 ED */ bl DoMount -lbl_803572E0: -/* 803572E0 BB 41 00 18 */ lmw r26, 0x18(r1) -/* 803572E4 80 01 00 34 */ lwz r0, 0x34(r1) -/* 803572E8 38 21 00 30 */ addi r1, r1, 0x30 -/* 803572EC 7C 08 03 A6 */ mtlr r0 -/* 803572F0 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDMount/CARDProbe.s b/asm/dolphin/card/CARDMount/CARDProbe.s deleted file mode 100644 index 4c266806f3..0000000000 --- a/asm/dolphin/card/CARDMount/CARDProbe.s +++ /dev/null @@ -1,17 +0,0 @@ -lbl_80356A14: -/* 80356A14 7C 08 02 A6 */ mflr r0 -/* 80356A18 3C 80 80 00 */ lis r4, 0x8000 /* 0x800030E3@ha */ -/* 80356A1C 90 01 00 04 */ stw r0, 4(r1) -/* 80356A20 94 21 FF F8 */ stwu r1, -8(r1) -/* 80356A24 88 04 30 E3 */ lbz r0, 0x30E3(r4) /* 0x800030E3@l */ -/* 80356A28 54 00 06 31 */ rlwinm. r0, r0, 0, 0x18, 0x18 -/* 80356A2C 41 82 00 0C */ beq lbl_80356A38 -/* 80356A30 38 60 00 00 */ li r3, 0 -/* 80356A34 48 00 00 08 */ b lbl_80356A3C -lbl_80356A38: -/* 80356A38 4B FE CB 35 */ bl EXIProbe -lbl_80356A3C: -/* 80356A3C 80 01 00 0C */ lwz r0, 0xc(r1) -/* 80356A40 38 21 00 08 */ addi r1, r1, 8 -/* 80356A44 7C 08 03 A6 */ mtlr r0 -/* 80356A48 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDMount/CARDProbeEx.s b/asm/dolphin/card/CARDMount/CARDProbeEx.s deleted file mode 100644 index a9c01b23b9..0000000000 --- a/asm/dolphin/card/CARDMount/CARDProbeEx.s +++ /dev/null @@ -1,112 +0,0 @@ -lbl_80356A4C: -/* 80356A4C 7C 08 02 A6 */ mflr r0 -/* 80356A50 90 01 00 04 */ stw r0, 4(r1) -/* 80356A54 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 80356A58 BF 61 00 1C */ stmw r27, 0x1c(r1) -/* 80356A5C 7C 7B 1B 79 */ or. r27, r3, r3 -/* 80356A60 3B 84 00 00 */ addi r28, r4, 0 -/* 80356A64 3B E5 00 00 */ addi r31, r5, 0 -/* 80356A68 41 80 00 0C */ blt lbl_80356A74 -/* 80356A6C 2C 1B 00 02 */ cmpwi r27, 2 -/* 80356A70 41 80 00 0C */ blt lbl_80356A7C -lbl_80356A74: -/* 80356A74 38 60 FF 80 */ li r3, -128 -/* 80356A78 48 00 01 3C */ b lbl_80356BB4 -lbl_80356A7C: -/* 80356A7C 3C 60 80 00 */ lis r3, 0x8000 /* 0x800030E3@ha */ -/* 80356A80 88 03 30 E3 */ lbz r0, 0x30E3(r3) /* 0x800030E3@l */ -/* 80356A84 54 00 06 31 */ rlwinm. r0, r0, 0, 0x18, 0x18 -/* 80356A88 41 82 00 0C */ beq lbl_80356A94 -/* 80356A8C 38 60 FF FD */ li r3, -3 -/* 80356A90 48 00 01 24 */ b lbl_80356BB4 -lbl_80356A94: -/* 80356A94 1C 9B 01 10 */ mulli r4, r27, 0x110 -/* 80356A98 3C 60 80 45 */ lis r3, __CARDBlock@ha /* 0x8044CBC0@ha */ -/* 80356A9C 38 03 CB C0 */ addi r0, r3, __CARDBlock@l /* 0x8044CBC0@l */ -/* 80356AA0 7F C0 22 14 */ add r30, r0, r4 -/* 80356AA4 4B FE 6C 51 */ bl OSDisableInterrupts -/* 80356AA8 3B A3 00 00 */ addi r29, r3, 0 -/* 80356AAC 38 7B 00 00 */ addi r3, r27, 0 -/* 80356AB0 4B FE CB 3D */ bl EXIProbeEx -/* 80356AB4 2C 03 FF FF */ cmpwi r3, -1 -/* 80356AB8 40 82 00 0C */ bne lbl_80356AC4 -/* 80356ABC 3B C0 FF FD */ li r30, -3 -/* 80356AC0 48 00 00 E8 */ b lbl_80356BA8 -lbl_80356AC4: -/* 80356AC4 2C 03 00 00 */ cmpwi r3, 0 -/* 80356AC8 40 82 00 0C */ bne lbl_80356AD4 -/* 80356ACC 3B C0 FF FF */ li r30, -1 -/* 80356AD0 48 00 00 D8 */ b lbl_80356BA8 -lbl_80356AD4: -/* 80356AD4 80 1E 00 00 */ lwz r0, 0(r30) -/* 80356AD8 2C 00 00 00 */ cmpwi r0, 0 -/* 80356ADC 41 82 00 40 */ beq lbl_80356B1C -/* 80356AE0 80 1E 00 24 */ lwz r0, 0x24(r30) -/* 80356AE4 2C 00 00 01 */ cmpwi r0, 1 -/* 80356AE8 40 80 00 0C */ bge lbl_80356AF4 -/* 80356AEC 3B C0 FF FF */ li r30, -1 -/* 80356AF0 48 00 00 B8 */ b lbl_80356BA8 -lbl_80356AF4: -/* 80356AF4 28 1C 00 00 */ cmplwi r28, 0 -/* 80356AF8 41 82 00 0C */ beq lbl_80356B04 -/* 80356AFC A0 1E 00 08 */ lhz r0, 8(r30) -/* 80356B00 90 1C 00 00 */ stw r0, 0(r28) -lbl_80356B04: -/* 80356B04 28 1F 00 00 */ cmplwi r31, 0 -/* 80356B08 41 82 00 0C */ beq lbl_80356B14 -/* 80356B0C 80 1E 00 0C */ lwz r0, 0xc(r30) -/* 80356B10 90 1F 00 00 */ stw r0, 0(r31) -lbl_80356B14: -/* 80356B14 3B C0 00 00 */ li r30, 0 -/* 80356B18 48 00 00 90 */ b lbl_80356BA8 -lbl_80356B1C: -/* 80356B1C 7F 63 DB 78 */ mr r3, r27 -/* 80356B20 4B FE D6 D9 */ bl EXIGetState -/* 80356B24 54 60 07 39 */ rlwinm. r0, r3, 0, 0x1c, 0x1c -/* 80356B28 41 82 00 0C */ beq lbl_80356B34 -/* 80356B2C 3B C0 FF FE */ li r30, -2 -/* 80356B30 48 00 00 78 */ b lbl_80356BA8 -lbl_80356B34: -/* 80356B34 38 7B 00 00 */ addi r3, r27, 0 -/* 80356B38 38 A1 00 14 */ addi r5, r1, 0x14 -/* 80356B3C 38 80 00 00 */ li r4, 0 -/* 80356B40 4B FE D6 F9 */ bl EXIGetID -/* 80356B44 2C 03 00 00 */ cmpwi r3, 0 -/* 80356B48 40 82 00 0C */ bne lbl_80356B54 -/* 80356B4C 3B C0 FF FF */ li r30, -1 -/* 80356B50 48 00 00 58 */ b lbl_80356BA8 -lbl_80356B54: -/* 80356B54 80 61 00 14 */ lwz r3, 0x14(r1) -/* 80356B58 4B FF FD F1 */ bl IsCard -/* 80356B5C 2C 03 00 00 */ cmpwi r3, 0 -/* 80356B60 41 82 00 44 */ beq lbl_80356BA4 -/* 80356B64 28 1C 00 00 */ cmplwi r28, 0 -/* 80356B68 41 82 00 10 */ beq lbl_80356B78 -/* 80356B6C 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80356B70 54 00 06 3A */ rlwinm r0, r0, 0, 0x18, 0x1d -/* 80356B74 90 1C 00 00 */ stw r0, 0(r28) -lbl_80356B78: -/* 80356B78 28 1F 00 00 */ cmplwi r31, 0 -/* 80356B7C 41 82 00 20 */ beq lbl_80356B9C -/* 80356B80 80 81 00 14 */ lwz r4, 0x14(r1) -/* 80356B84 3C 60 80 3D */ lis r3, SectorSizeTable@ha /* 0x803D2000@ha */ -/* 80356B88 38 03 20 00 */ addi r0, r3, SectorSizeTable@l /* 0x803D2000@l */ -/* 80356B8C 54 83 BE FA */ rlwinm r3, r4, 0x17, 0x1b, 0x1d -/* 80356B90 7C 60 1A 14 */ add r3, r0, r3 -/* 80356B94 80 03 00 00 */ lwz r0, 0(r3) -/* 80356B98 90 1F 00 00 */ stw r0, 0(r31) -lbl_80356B9C: -/* 80356B9C 3B C0 00 00 */ li r30, 0 -/* 80356BA0 48 00 00 08 */ b lbl_80356BA8 -lbl_80356BA4: -/* 80356BA4 3B C0 FF FE */ li r30, -2 -lbl_80356BA8: -/* 80356BA8 7F A3 EB 78 */ mr r3, r29 -/* 80356BAC 4B FE 6B 71 */ bl OSRestoreInterrupts -/* 80356BB0 7F C3 F3 78 */ mr r3, r30 -lbl_80356BB4: -/* 80356BB4 BB 61 00 1C */ lmw r27, 0x1c(r1) -/* 80356BB8 80 01 00 34 */ lwz r0, 0x34(r1) -/* 80356BBC 38 21 00 30 */ addi r1, r1, 0x30 -/* 80356BC0 7C 08 03 A6 */ mtlr r0 -/* 80356BC4 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDMount/DoMount.s b/asm/dolphin/card/CARDMount/DoMount.s index 9a1145ffcf..8076d24992 100644 --- a/asm/dolphin/card/CARDMount/DoMount.s +++ b/asm/dolphin/card/CARDMount/DoMount.s @@ -228,7 +228,7 @@ lbl_80356EF4: /* 80356F18 7F 83 02 2E */ lhzx r28, r3, r0 /* 80356F1C 38 60 00 00 */ li r3, 0 /* 80356F20 4B FE 96 3D */ bl __OSUnlockSramEx -/* 80356F24 A0 0D 84 F0 */ lhz r0, struct_80450A70+0x0(r13) +/* 80356F24 A0 0D 84 F0 */ lhz r0, __CARDVendorID+0x0(r13) /* 80356F28 28 00 FF FF */ cmplwi r0, 0xffff /* 80356F2C 41 82 00 0C */ beq lbl_80356F38 /* 80356F30 7C 1C 00 40 */ cmplw r28, r0 diff --git a/asm/dolphin/card/CARDMount/IsCard.s b/asm/dolphin/card/CARDMount/IsCard.s deleted file mode 100644 index 10ba970017..0000000000 --- a/asm/dolphin/card/CARDMount/IsCard.s +++ /dev/null @@ -1,61 +0,0 @@ -lbl_80356948: -/* 80356948 54 60 00 1F */ rlwinm. r0, r3, 0, 0, 0xf -/* 8035694C 41 82 00 24 */ beq lbl_80356970 -/* 80356950 3C 03 80 00 */ addis r0, r3, 0x8000 -/* 80356954 28 00 00 04 */ cmplwi r0, 4 -/* 80356958 40 82 00 10 */ bne lbl_80356968 -/* 8035695C A0 0D 84 F0 */ lhz r0, struct_80450A70+0x0(r13) -/* 80356960 28 00 FF FF */ cmplwi r0, 0xffff -/* 80356964 40 82 00 0C */ bne lbl_80356970 -lbl_80356968: -/* 80356968 38 60 00 00 */ li r3, 0 -/* 8035696C 4E 80 00 20 */ blr -lbl_80356970: -/* 80356970 54 60 07 BF */ clrlwi. r0, r3, 0x1e -/* 80356974 41 82 00 0C */ beq lbl_80356980 -/* 80356978 38 60 00 00 */ li r3, 0 -/* 8035697C 4E 80 00 20 */ blr -lbl_80356980: -/* 80356980 54 65 06 3A */ rlwinm r5, r3, 0, 0x18, 0x1d -/* 80356984 2C 05 00 20 */ cmpwi r5, 0x20 -/* 80356988 41 82 00 48 */ beq lbl_803569D0 -/* 8035698C 40 80 00 28 */ bge lbl_803569B4 -/* 80356990 2C 05 00 08 */ cmpwi r5, 8 -/* 80356994 41 82 00 3C */ beq lbl_803569D0 -/* 80356998 40 80 00 10 */ bge lbl_803569A8 -/* 8035699C 2C 05 00 04 */ cmpwi r5, 4 -/* 803569A0 41 82 00 30 */ beq lbl_803569D0 -/* 803569A4 48 00 00 24 */ b lbl_803569C8 -lbl_803569A8: -/* 803569A8 2C 05 00 10 */ cmpwi r5, 0x10 -/* 803569AC 41 82 00 24 */ beq lbl_803569D0 -/* 803569B0 48 00 00 18 */ b lbl_803569C8 -lbl_803569B4: -/* 803569B4 2C 05 00 80 */ cmpwi r5, 0x80 -/* 803569B8 41 82 00 18 */ beq lbl_803569D0 -/* 803569BC 40 80 00 0C */ bge lbl_803569C8 -/* 803569C0 2C 05 00 40 */ cmpwi r5, 0x40 -/* 803569C4 41 82 00 0C */ beq lbl_803569D0 -lbl_803569C8: -/* 803569C8 38 60 00 00 */ li r3, 0 -/* 803569CC 4E 80 00 20 */ blr -lbl_803569D0: -/* 803569D0 3C 80 80 3D */ lis r4, SectorSizeTable@ha /* 0x803D2000@ha */ -/* 803569D4 54 63 BE FA */ rlwinm r3, r3, 0x17, 0x1b, 0x1d -/* 803569D8 38 04 20 00 */ addi r0, r4, SectorSizeTable@l /* 0x803D2000@l */ -/* 803569DC 7C 60 1A 14 */ add r3, r0, r3 -/* 803569E0 80 63 00 00 */ lwz r3, 0(r3) -/* 803569E4 2C 03 00 00 */ cmpwi r3, 0 -/* 803569E8 40 82 00 0C */ bne lbl_803569F4 -/* 803569EC 38 60 00 00 */ li r3, 0 -/* 803569F0 4E 80 00 20 */ blr -lbl_803569F4: -/* 803569F4 54 A0 88 DC */ rlwinm r0, r5, 0x11, 3, 0xe -/* 803569F8 7C 00 1B 96 */ divwu r0, r0, r3 -/* 803569FC 28 00 00 08 */ cmplwi r0, 8 -/* 80356A00 40 80 00 0C */ bge lbl_80356A0C -/* 80356A04 38 60 00 00 */ li r3, 0 -/* 80356A08 4E 80 00 20 */ blr -lbl_80356A0C: -/* 80356A0C 38 60 00 01 */ li r3, 1 -/* 80356A10 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDNet/CARDGetSerialNo.s b/asm/dolphin/card/CARDNet/CARDGetSerialNo.s deleted file mode 100644 index 724489d4ab..0000000000 --- a/asm/dolphin/card/CARDNet/CARDGetSerialNo.s +++ /dev/null @@ -1,54 +0,0 @@ -lbl_80359158: -/* 80359158 7C 08 02 A6 */ mflr r0 -/* 8035915C 2C 03 00 00 */ cmpwi r3, 0 -/* 80359160 90 01 00 04 */ stw r0, 4(r1) -/* 80359164 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 80359168 93 E1 00 1C */ stw r31, 0x1c(r1) -/* 8035916C 3B E4 00 00 */ addi r31, r4, 0 -/* 80359170 41 80 00 0C */ blt lbl_8035917C -/* 80359174 2C 03 00 02 */ cmpwi r3, 2 -/* 80359178 41 80 00 0C */ blt lbl_80359184 -lbl_8035917C: -/* 8035917C 38 60 FF 80 */ li r3, -128 -/* 80359180 48 00 00 88 */ b lbl_80359208 -lbl_80359184: -/* 80359184 38 81 00 10 */ addi r4, r1, 0x10 -/* 80359188 4B FF AA 2D */ bl __CARDGetControlBlock -/* 8035918C 2C 03 00 00 */ cmpwi r3, 0 -/* 80359190 40 80 00 08 */ bge lbl_80359198 -/* 80359194 48 00 00 74 */ b lbl_80359208 -lbl_80359198: -/* 80359198 80 61 00 10 */ lwz r3, 0x10(r1) -/* 8035919C 38 E0 00 00 */ li r7, 0 -/* 803591A0 38 C0 00 00 */ li r6, 0 -/* 803591A4 80 A3 00 80 */ lwz r5, 0x80(r3) -/* 803591A8 38 80 00 00 */ li r4, 0 -/* 803591AC 80 65 00 04 */ lwz r3, 4(r5) -/* 803591B0 80 05 00 00 */ lwz r0, 0(r5) -/* 803591B4 7C E7 1A 78 */ xor r7, r7, r3 -/* 803591B8 38 65 00 08 */ addi r3, r5, 8 -/* 803591BC 7C C6 02 78 */ xor r6, r6, r0 -/* 803591C0 80 05 00 08 */ lwz r0, 8(r5) -/* 803591C4 80 63 00 04 */ lwz r3, 4(r3) -/* 803591C8 7C C6 02 78 */ xor r6, r6, r0 -/* 803591CC 7C E7 1A 78 */ xor r7, r7, r3 -/* 803591D0 38 65 00 10 */ addi r3, r5, 0x10 -/* 803591D4 80 05 00 10 */ lwz r0, 0x10(r5) -/* 803591D8 80 63 00 04 */ lwz r3, 4(r3) -/* 803591DC 7C C6 02 78 */ xor r6, r6, r0 -/* 803591E0 7C E7 1A 78 */ xor r7, r7, r3 -/* 803591E4 38 65 00 18 */ addi r3, r5, 0x18 -/* 803591E8 80 05 00 18 */ lwz r0, 0x18(r5) -/* 803591EC 80 63 00 04 */ lwz r3, 4(r3) -/* 803591F0 7C C6 02 78 */ xor r6, r6, r0 -/* 803591F4 7C E7 1A 78 */ xor r7, r7, r3 -/* 803591F8 90 FF 00 04 */ stw r7, 4(r31) -/* 803591FC 90 DF 00 00 */ stw r6, 0(r31) -/* 80359200 80 61 00 10 */ lwz r3, 0x10(r1) -/* 80359204 4B FF AA 69 */ bl __CARDPutControlBlock -lbl_80359208: -/* 80359208 80 01 00 24 */ lwz r0, 0x24(r1) -/* 8035920C 83 E1 00 1C */ lwz r31, 0x1c(r1) -/* 80359210 38 21 00 20 */ addi r1, r1, 0x20 -/* 80359214 7C 08 03 A6 */ mtlr r0 -/* 80359218 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDOpen/CARDClose.s b/asm/dolphin/card/CARDOpen/CARDClose.s deleted file mode 100644 index 2dd8baff1c..0000000000 --- a/asm/dolphin/card/CARDOpen/CARDClose.s +++ /dev/null @@ -1,24 +0,0 @@ -lbl_803580B4: -/* 803580B4 7C 08 02 A6 */ mflr r0 -/* 803580B8 90 01 00 04 */ stw r0, 4(r1) -/* 803580BC 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 803580C0 93 E1 00 14 */ stw r31, 0x14(r1) -/* 803580C4 7C 7F 1B 78 */ mr r31, r3 -/* 803580C8 38 81 00 0C */ addi r4, r1, 0xc -/* 803580CC 80 63 00 00 */ lwz r3, 0(r3) -/* 803580D0 4B FF BA E5 */ bl __CARDGetControlBlock -/* 803580D4 2C 03 00 00 */ cmpwi r3, 0 -/* 803580D8 40 80 00 08 */ bge lbl_803580E0 -/* 803580DC 48 00 00 18 */ b lbl_803580F4 -lbl_803580E0: -/* 803580E0 38 00 FF FF */ li r0, -1 -/* 803580E4 90 1F 00 00 */ stw r0, 0(r31) -/* 803580E8 38 80 00 00 */ li r4, 0 -/* 803580EC 80 61 00 0C */ lwz r3, 0xc(r1) -/* 803580F0 4B FF BB 7D */ bl __CARDPutControlBlock -lbl_803580F4: -/* 803580F4 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 803580F8 83 E1 00 14 */ lwz r31, 0x14(r1) -/* 803580FC 38 21 00 18 */ addi r1, r1, 0x18 -/* 80358100 7C 08 03 A6 */ mtlr r0 -/* 80358104 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDOpen/__CARDCompareFileName.s b/asm/dolphin/card/CARDOpen/__CARDCompareFileName.s deleted file mode 100644 index 6d793f2b35..0000000000 --- a/asm/dolphin/card/CARDOpen/__CARDCompareFileName.s +++ /dev/null @@ -1,31 +0,0 @@ -lbl_80357C74: -/* 80357C74 38 A3 00 08 */ addi r5, r3, 8 -/* 80357C78 38 E0 00 20 */ li r7, 0x20 -/* 80357C7C 48 00 00 3C */ b lbl_80357CB8 -lbl_80357C80: -/* 80357C80 88 05 00 00 */ lbz r0, 0(r5) -/* 80357C84 38 A5 00 01 */ addi r5, r5, 1 -/* 80357C88 88 C4 00 00 */ lbz r6, 0(r4) -/* 80357C8C 38 84 00 01 */ addi r4, r4, 1 -/* 80357C90 7C 03 07 74 */ extsb r3, r0 -/* 80357C94 7C C0 07 74 */ extsb r0, r6 -/* 80357C98 7C 03 00 00 */ cmpw r3, r0 -/* 80357C9C 41 82 00 0C */ beq lbl_80357CA8 -/* 80357CA0 38 60 00 00 */ li r3, 0 -/* 80357CA4 4E 80 00 20 */ blr -lbl_80357CA8: -/* 80357CA8 7C C0 07 75 */ extsb. r0, r6 -/* 80357CAC 40 82 00 0C */ bne lbl_80357CB8 -/* 80357CB0 38 60 00 01 */ li r3, 1 -/* 80357CB4 4E 80 00 20 */ blr -lbl_80357CB8: -/* 80357CB8 34 E7 FF FF */ addic. r7, r7, -1 -/* 80357CBC 40 80 FF C4 */ bge lbl_80357C80 -/* 80357CC0 88 04 00 00 */ lbz r0, 0(r4) -/* 80357CC4 7C 00 07 75 */ extsb. r0, r0 -/* 80357CC8 40 82 00 0C */ bne lbl_80357CD4 -/* 80357CCC 38 60 00 01 */ li r3, 1 -/* 80357CD0 4E 80 00 20 */ blr -lbl_80357CD4: -/* 80357CD4 38 60 00 00 */ li r3, 0 -/* 80357CD8 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDOpen/__CARDIsReadable.s b/asm/dolphin/card/CARDOpen/__CARDIsReadable.s index fa2bcab6a9..2b70786171 100644 --- a/asm/dolphin/card/CARDOpen/__CARDIsReadable.s +++ b/asm/dolphin/card/CARDOpen/__CARDIsReadable.s @@ -10,7 +10,7 @@ lbl_80357EA4: /* 80357EC4 2C 1D FF F6 */ cmpwi r29, -10 /* 80357EC8 40 82 00 9C */ bne lbl_80357F64 /* 80357ECC 88 7B 00 34 */ lbz r3, 0x34(r27) -/* 80357ED0 88 0D 84 F2 */ lbz r0, struct_80450A70+0x2(r13) +/* 80357ED0 88 0D 84 F2 */ lbz r0, data_80450A72(r13) /* 80357ED4 7C 60 00 38 */ and r0, r3, r0 /* 80357ED8 54 1E 06 3E */ clrlwi r30, r0, 0x18 /* 80357EDC 54 00 06 B5 */ rlwinm. r0, r0, 0, 0x1a, 0x1a diff --git a/asm/dolphin/card/CARDOpen/__CARDIsWritable.s b/asm/dolphin/card/CARDOpen/__CARDIsWritable.s index d269cf827e..7d23ac0038 100644 --- a/asm/dolphin/card/CARDOpen/__CARDIsWritable.s +++ b/asm/dolphin/card/CARDOpen/__CARDIsWritable.s @@ -36,7 +36,7 @@ lbl_80357DE8: /* 80357DE8 2C 1E FF F6 */ cmpwi r30, -10 /* 80357DEC 40 82 00 A0 */ bne lbl_80357E8C /* 80357DF0 88 7B 00 34 */ lbz r3, 0x34(r27) -/* 80357DF4 88 0D 84 F2 */ lbz r0, struct_80450A70+0x2(r13) +/* 80357DF4 88 0D 84 F2 */ lbz r0, data_80450A72(r13) /* 80357DF8 7C 60 00 38 */ and r0, r3, r0 /* 80357DFC 54 1C 06 3E */ clrlwi r28, r0, 0x18 /* 80357E00 54 00 06 B5 */ rlwinm. r0, r0, 0, 0x1a, 0x1a diff --git a/asm/dolphin/card/CARDRdwr/__CARDRead.s b/asm/dolphin/card/CARDRdwr/__CARDRead.s deleted file mode 100644 index 70b51a67c4..0000000000 --- a/asm/dolphin/card/CARDRdwr/__CARDRead.s +++ /dev/null @@ -1,28 +0,0 @@ -lbl_80355260: -/* 80355260 7C 08 02 A6 */ mflr r0 -/* 80355264 1D 23 01 10 */ mulli r9, r3, 0x110 -/* 80355268 90 01 00 04 */ stw r0, 4(r1) -/* 8035526C 3D 00 80 45 */ lis r8, __CARDBlock@ha /* 0x8044CBC0@ha */ -/* 80355270 94 21 FF F8 */ stwu r1, -8(r1) -/* 80355274 38 08 CB C0 */ addi r0, r8, __CARDBlock@l /* 0x8044CBC0@l */ -/* 80355278 7D 00 4A 14 */ add r8, r0, r9 -/* 8035527C 80 08 00 00 */ lwz r0, 0(r8) -/* 80355280 2C 00 00 00 */ cmpwi r0, 0 -/* 80355284 40 82 00 0C */ bne lbl_80355290 -/* 80355288 38 60 FF FD */ li r3, -3 -/* 8035528C 48 00 00 28 */ b lbl_803552B4 -lbl_80355290: -/* 80355290 90 E8 00 D4 */ stw r7, 0xd4(r8) -/* 80355294 54 A0 BA 7E */ srwi r0, r5, 9 -/* 80355298 3C A0 80 35 */ lis r5, BlockReadCallback@ha /* 0x80355184@ha */ -/* 8035529C 90 08 00 AC */ stw r0, 0xac(r8) -/* 803552A0 38 05 51 84 */ addi r0, r5, BlockReadCallback@l /* 0x80355184@l */ -/* 803552A4 90 88 00 B0 */ stw r4, 0xb0(r8) -/* 803552A8 7C 04 03 78 */ mr r4, r0 -/* 803552AC 90 C8 00 B4 */ stw r6, 0xb4(r8) -/* 803552B0 4B FF E4 99 */ bl __CARDReadSegment -lbl_803552B4: -/* 803552B4 80 01 00 0C */ lwz r0, 0xc(r1) -/* 803552B8 38 21 00 08 */ addi r1, r1, 8 -/* 803552BC 7C 08 03 A6 */ mtlr r0 -/* 803552C0 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDRdwr/__CARDWrite.s b/asm/dolphin/card/CARDRdwr/__CARDWrite.s deleted file mode 100644 index 1144ca3763..0000000000 --- a/asm/dolphin/card/CARDRdwr/__CARDWrite.s +++ /dev/null @@ -1,29 +0,0 @@ -lbl_803553AC: -/* 803553AC 7C 08 02 A6 */ mflr r0 -/* 803553B0 1D 23 01 10 */ mulli r9, r3, 0x110 -/* 803553B4 90 01 00 04 */ stw r0, 4(r1) -/* 803553B8 3D 00 80 45 */ lis r8, __CARDBlock@ha /* 0x8044CBC0@ha */ -/* 803553BC 94 21 FF F8 */ stwu r1, -8(r1) -/* 803553C0 38 08 CB C0 */ addi r0, r8, __CARDBlock@l /* 0x8044CBC0@l */ -/* 803553C4 7D 00 4A 14 */ add r8, r0, r9 -/* 803553C8 80 08 00 00 */ lwz r0, 0(r8) -/* 803553CC 2C 00 00 00 */ cmpwi r0, 0 -/* 803553D0 40 82 00 0C */ bne lbl_803553DC -/* 803553D4 38 60 FF FD */ li r3, -3 -/* 803553D8 48 00 00 2C */ b lbl_80355404 -lbl_803553DC: -/* 803553DC 90 E8 00 D4 */ stw r7, 0xd4(r8) -/* 803553E0 3C E0 80 35 */ lis r7, BlockWriteCallback@ha /* 0x803552C4@ha */ -/* 803553E4 38 07 52 C4 */ addi r0, r7, BlockWriteCallback@l /* 0x803552C4@l */ -/* 803553E8 A0 E8 00 0A */ lhz r7, 0xa(r8) -/* 803553EC 7C A5 3B D6 */ divw r5, r5, r7 -/* 803553F0 90 A8 00 AC */ stw r5, 0xac(r8) -/* 803553F4 90 88 00 B0 */ stw r4, 0xb0(r8) -/* 803553F8 7C 04 03 78 */ mr r4, r0 -/* 803553FC 90 C8 00 B4 */ stw r6, 0xb4(r8) -/* 80355400 4B FF E4 7D */ bl __CARDWritePage -lbl_80355404: -/* 80355404 80 01 00 0C */ lwz r0, 0xc(r1) -/* 80355408 38 21 00 08 */ addi r1, r1, 8 -/* 8035540C 7C 08 03 A6 */ mtlr r0 -/* 80355410 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDRead/CARDRead.s b/asm/dolphin/card/CARDRead/CARDRead.s deleted file mode 100644 index bf462e6b2b..0000000000 --- a/asm/dolphin/card/CARDRead/CARDRead.s +++ /dev/null @@ -1,21 +0,0 @@ -lbl_803588CC: -/* 803588CC 7C 08 02 A6 */ mflr r0 -/* 803588D0 3C E0 80 35 */ lis r7, __CARDSyncCallback@ha /* 0x80352A34@ha */ -/* 803588D4 90 01 00 04 */ stw r0, 4(r1) -/* 803588D8 38 E7 2A 34 */ addi r7, r7, __CARDSyncCallback@l /* 0x80352A34@l */ -/* 803588DC 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 803588E0 93 E1 00 1C */ stw r31, 0x1c(r1) -/* 803588E4 3B E3 00 00 */ addi r31, r3, 0 -/* 803588E8 4B FF FE A1 */ bl CARDReadAsync -/* 803588EC 2C 03 00 00 */ cmpwi r3, 0 -/* 803588F0 40 80 00 08 */ bge lbl_803588F8 -/* 803588F4 48 00 00 0C */ b lbl_80358900 -lbl_803588F8: -/* 803588F8 80 7F 00 00 */ lwz r3, 0(r31) -/* 803588FC 4B FF B5 25 */ bl __CARDSync -lbl_80358900: -/* 80358900 80 01 00 24 */ lwz r0, 0x24(r1) -/* 80358904 83 E1 00 1C */ lwz r31, 0x1c(r1) -/* 80358908 38 21 00 20 */ addi r1, r1, 0x20 -/* 8035890C 7C 08 03 A6 */ mtlr r0 -/* 80358910 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDRead/ReadCallback.s b/asm/dolphin/card/CARDRead/ReadCallback.s deleted file mode 100644 index fdc03d1fe9..0000000000 --- a/asm/dolphin/card/CARDRead/ReadCallback.s +++ /dev/null @@ -1,84 +0,0 @@ -lbl_80358658: -/* 80358658 7C 08 02 A6 */ mflr r0 -/* 8035865C 90 01 00 04 */ stw r0, 4(r1) -/* 80358660 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 80358664 BF 61 00 14 */ stmw r27, 0x14(r1) -/* 80358668 3B A3 00 00 */ addi r29, r3, 0 -/* 8035866C 3C 60 80 45 */ lis r3, __CARDBlock@ha /* 0x8044CBC0@ha */ -/* 80358670 1C BD 01 10 */ mulli r5, r29, 0x110 -/* 80358674 38 03 CB C0 */ addi r0, r3, __CARDBlock@l /* 0x8044CBC0@l */ -/* 80358678 7C 9E 23 79 */ or. r30, r4, r4 -/* 8035867C 7F E0 2A 14 */ add r31, r0, r5 -/* 80358680 41 80 00 C8 */ blt lbl_80358748 -/* 80358684 83 9F 00 C0 */ lwz r28, 0xc0(r31) -/* 80358688 80 9C 00 0C */ lwz r4, 0xc(r28) -/* 8035868C 2C 04 00 00 */ cmpwi r4, 0 -/* 80358690 40 80 00 0C */ bge lbl_8035869C -/* 80358694 3B C0 FF F2 */ li r30, -14 -/* 80358698 48 00 00 B0 */ b lbl_80358748 -lbl_8035869C: -/* 8035869C 80 BF 00 0C */ lwz r5, 0xc(r31) -/* 803586A0 80 DC 00 08 */ lwz r6, 8(r28) -/* 803586A4 38 05 FF FF */ addi r0, r5, -1 -/* 803586A8 7C 03 00 F8 */ nor r3, r0, r0 -/* 803586AC 7C 06 2A 14 */ add r0, r6, r5 -/* 803586B0 7C 60 00 38 */ and r0, r3, r0 -/* 803586B4 7F 66 00 50 */ subf r27, r6, r0 -/* 803586B8 7C 1B 20 50 */ subf r0, r27, r4 -/* 803586BC 90 1C 00 0C */ stw r0, 0xc(r28) -/* 803586C0 80 1C 00 0C */ lwz r0, 0xc(r28) -/* 803586C4 2C 00 00 00 */ cmpwi r0, 0 -/* 803586C8 40 81 00 80 */ ble lbl_80358748 -/* 803586CC 7F E3 FB 78 */ mr r3, r31 -/* 803586D0 4B FF CD 45 */ bl __CARDGetFatBlock -/* 803586D4 80 1C 00 08 */ lwz r0, 8(r28) -/* 803586D8 7C 00 DA 14 */ add r0, r0, r27 -/* 803586DC 90 1C 00 08 */ stw r0, 8(r28) -/* 803586E0 A0 1C 00 10 */ lhz r0, 0x10(r28) -/* 803586E4 54 00 08 3C */ slwi r0, r0, 1 -/* 803586E8 7C 03 02 2E */ lhzx r0, r3, r0 -/* 803586EC B0 1C 00 10 */ sth r0, 0x10(r28) -/* 803586F0 A0 7C 00 10 */ lhz r3, 0x10(r28) -/* 803586F4 28 03 00 05 */ cmplwi r3, 5 -/* 803586F8 41 80 00 10 */ blt lbl_80358708 -/* 803586FC A0 1F 00 10 */ lhz r0, 0x10(r31) -/* 80358700 7C 03 00 40 */ cmplw r3, r0 -/* 80358704 41 80 00 0C */ blt lbl_80358710 -lbl_80358708: -/* 80358708 3B C0 FF FA */ li r30, -6 -/* 8035870C 48 00 00 3C */ b lbl_80358748 -lbl_80358710: -/* 80358710 80 BC 00 0C */ lwz r5, 0xc(r28) -/* 80358714 80 1F 00 0C */ lwz r0, 0xc(r31) -/* 80358718 7C 05 00 00 */ cmpw r5, r0 -/* 8035871C 40 80 00 08 */ bge lbl_80358724 -/* 80358720 48 00 00 08 */ b lbl_80358728 -lbl_80358724: -/* 80358724 7C 05 03 78 */ mr r5, r0 -lbl_80358728: -/* 80358728 7C 80 19 D6 */ mullw r4, r0, r3 -/* 8035872C 80 DF 00 B4 */ lwz r6, 0xb4(r31) -/* 80358730 3C 60 80 36 */ lis r3, ReadCallback@ha /* 0x80358658@ha */ -/* 80358734 38 E3 86 58 */ addi r7, r3, ReadCallback@l /* 0x80358658@l */ -/* 80358738 38 7D 00 00 */ addi r3, r29, 0 -/* 8035873C 4B FF CB 25 */ bl __CARDRead -/* 80358740 7C 7E 1B 79 */ or. r30, r3, r3 -/* 80358744 40 80 00 30 */ bge lbl_80358774 -lbl_80358748: -/* 80358748 83 7F 00 D0 */ lwz r27, 0xd0(r31) -/* 8035874C 38 00 00 00 */ li r0, 0 -/* 80358750 38 7F 00 00 */ addi r3, r31, 0 -/* 80358754 90 1F 00 D0 */ stw r0, 0xd0(r31) -/* 80358758 7F C4 F3 78 */ mr r4, r30 -/* 8035875C 4B FF B5 11 */ bl __CARDPutControlBlock -/* 80358760 39 9B 00 00 */ addi r12, r27, 0 -/* 80358764 7D 88 03 A6 */ mtlr r12 -/* 80358768 38 7D 00 00 */ addi r3, r29, 0 -/* 8035876C 38 9E 00 00 */ addi r4, r30, 0 -/* 80358770 4E 80 00 21 */ blrl -lbl_80358774: -/* 80358774 BB 61 00 14 */ lmw r27, 0x14(r1) -/* 80358778 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 8035877C 38 21 00 28 */ addi r1, r1, 0x28 -/* 80358780 7C 08 03 A6 */ mtlr r0 -/* 80358784 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDStat/CARDSetStatus.s b/asm/dolphin/card/CARDStat/CARDSetStatus.s deleted file mode 100644 index 7bd3aa7780..0000000000 --- a/asm/dolphin/card/CARDStat/CARDSetStatus.s +++ /dev/null @@ -1,21 +0,0 @@ -lbl_80359110: -/* 80359110 7C 08 02 A6 */ mflr r0 -/* 80359114 3C C0 80 35 */ lis r6, __CARDSyncCallback@ha /* 0x80352A34@ha */ -/* 80359118 90 01 00 04 */ stw r0, 4(r1) -/* 8035911C 38 C6 2A 34 */ addi r6, r6, __CARDSyncCallback@l /* 0x80352A34@l */ -/* 80359120 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 80359124 93 E1 00 1C */ stw r31, 0x1c(r1) -/* 80359128 3B E3 00 00 */ addi r31, r3, 0 -/* 8035912C 4B FF FE 71 */ bl CARDSetStatusAsync -/* 80359130 2C 03 00 00 */ cmpwi r3, 0 -/* 80359134 40 80 00 08 */ bge lbl_8035913C -/* 80359138 48 00 00 0C */ b lbl_80359144 -lbl_8035913C: -/* 8035913C 7F E3 FB 78 */ mr r3, r31 -/* 80359140 4B FF AC E1 */ bl __CARDSync -lbl_80359144: -/* 80359144 80 01 00 24 */ lwz r0, 0x24(r1) -/* 80359148 83 E1 00 1C */ lwz r31, 0x1c(r1) -/* 8035914C 38 21 00 20 */ addi r1, r1, 0x20 -/* 80359150 7C 08 03 A6 */ mtlr r0 -/* 80359154 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDStat/UpdateIconOffsets.s b/asm/dolphin/card/CARDStat/UpdateIconOffsets.s deleted file mode 100644 index 7ff24d19df..0000000000 --- a/asm/dolphin/card/CARDStat/UpdateIconOffsets.s +++ /dev/null @@ -1,151 +0,0 @@ -lbl_80358C90: -/* 80358C90 81 03 00 2C */ lwz r8, 0x2c(r3) -/* 80358C94 3C 08 00 01 */ addis r0, r8, 1 -/* 80358C98 28 00 FF FF */ cmplwi r0, 0xffff -/* 80358C9C 40 82 00 18 */ bne lbl_80358CB4 -/* 80358CA0 38 00 00 00 */ li r0, 0 -/* 80358CA4 98 04 00 2E */ stb r0, 0x2e(r4) -/* 80358CA8 39 00 00 00 */ li r8, 0 -/* 80358CAC B0 04 00 34 */ sth r0, 0x34(r4) -/* 80358CB0 B0 04 00 36 */ sth r0, 0x36(r4) -lbl_80358CB4: -/* 80358CB4 88 03 00 07 */ lbz r0, 7(r3) -/* 80358CB8 39 20 00 00 */ li r9, 0 -/* 80358CBC 54 00 07 BE */ clrlwi r0, r0, 0x1e -/* 80358CC0 2C 00 00 02 */ cmpwi r0, 2 -/* 80358CC4 41 82 00 28 */ beq lbl_80358CEC -/* 80358CC8 40 80 00 38 */ bge lbl_80358D00 -/* 80358CCC 2C 00 00 01 */ cmpwi r0, 1 -/* 80358CD0 40 80 00 08 */ bge lbl_80358CD8 -/* 80358CD4 48 00 00 2C */ b lbl_80358D00 -lbl_80358CD8: -/* 80358CD8 91 04 00 3C */ stw r8, 0x3c(r4) -/* 80358CDC 38 08 0C 00 */ addi r0, r8, 0xc00 -/* 80358CE0 39 08 0E 00 */ addi r8, r8, 0xe00 -/* 80358CE4 90 04 00 40 */ stw r0, 0x40(r4) -/* 80358CE8 48 00 00 24 */ b lbl_80358D0C -lbl_80358CEC: -/* 80358CEC 91 04 00 3C */ stw r8, 0x3c(r4) -/* 80358CF0 38 00 FF FF */ li r0, -1 -/* 80358CF4 39 08 18 00 */ addi r8, r8, 0x1800 -/* 80358CF8 90 04 00 40 */ stw r0, 0x40(r4) -/* 80358CFC 48 00 00 10 */ b lbl_80358D0C -lbl_80358D00: -/* 80358D00 38 00 FF FF */ li r0, -1 -/* 80358D04 90 04 00 3C */ stw r0, 0x3c(r4) -/* 80358D08 90 04 00 40 */ stw r0, 0x40(r4) -lbl_80358D0C: -/* 80358D0C 38 00 00 02 */ li r0, 2 -/* 80358D10 7C 09 03 A6 */ mtctr r0 -/* 80358D14 38 E4 00 00 */ addi r7, r4, 0 -/* 80358D18 39 40 00 00 */ li r10, 0 -/* 80358D1C 38 C0 00 00 */ li r6, 0 -/* 80358D20 38 00 FF FF */ li r0, -1 -lbl_80358D24: -/* 80358D24 A0 A3 00 30 */ lhz r5, 0x30(r3) -/* 80358D28 7C A5 36 30 */ sraw r5, r5, r6 -/* 80358D2C 54 A5 07 BE */ clrlwi r5, r5, 0x1e -/* 80358D30 2C 05 00 02 */ cmpwi r5, 2 -/* 80358D34 41 82 00 24 */ beq lbl_80358D58 -/* 80358D38 40 80 00 2C */ bge lbl_80358D64 -/* 80358D3C 2C 05 00 01 */ cmpwi r5, 1 -/* 80358D40 40 80 00 08 */ bge lbl_80358D48 -/* 80358D44 48 00 00 20 */ b lbl_80358D64 -lbl_80358D48: -/* 80358D48 91 07 00 44 */ stw r8, 0x44(r7) -/* 80358D4C 39 20 00 01 */ li r9, 1 -/* 80358D50 39 08 04 00 */ addi r8, r8, 0x400 -/* 80358D54 48 00 00 14 */ b lbl_80358D68 -lbl_80358D58: -/* 80358D58 91 07 00 44 */ stw r8, 0x44(r7) -/* 80358D5C 39 08 08 00 */ addi r8, r8, 0x800 -/* 80358D60 48 00 00 08 */ b lbl_80358D68 -lbl_80358D64: -/* 80358D64 90 07 00 44 */ stw r0, 0x44(r7) -lbl_80358D68: -/* 80358D68 A0 A3 00 30 */ lhz r5, 0x30(r3) -/* 80358D6C 38 C6 00 02 */ addi r6, r6, 2 -/* 80358D70 38 E7 00 04 */ addi r7, r7, 4 -/* 80358D74 7C A5 36 30 */ sraw r5, r5, r6 -/* 80358D78 54 A5 07 BE */ clrlwi r5, r5, 0x1e -/* 80358D7C 2C 05 00 02 */ cmpwi r5, 2 -/* 80358D80 41 82 00 24 */ beq lbl_80358DA4 -/* 80358D84 40 80 00 2C */ bge lbl_80358DB0 -/* 80358D88 2C 05 00 01 */ cmpwi r5, 1 -/* 80358D8C 40 80 00 08 */ bge lbl_80358D94 -/* 80358D90 48 00 00 20 */ b lbl_80358DB0 -lbl_80358D94: -/* 80358D94 91 07 00 44 */ stw r8, 0x44(r7) -/* 80358D98 39 20 00 01 */ li r9, 1 -/* 80358D9C 39 08 04 00 */ addi r8, r8, 0x400 -/* 80358DA0 48 00 00 14 */ b lbl_80358DB4 -lbl_80358DA4: -/* 80358DA4 91 07 00 44 */ stw r8, 0x44(r7) -/* 80358DA8 39 08 08 00 */ addi r8, r8, 0x800 -/* 80358DAC 48 00 00 08 */ b lbl_80358DB4 -lbl_80358DB0: -/* 80358DB0 90 07 00 44 */ stw r0, 0x44(r7) -lbl_80358DB4: -/* 80358DB4 A0 A3 00 30 */ lhz r5, 0x30(r3) -/* 80358DB8 38 C6 00 02 */ addi r6, r6, 2 -/* 80358DBC 39 4A 00 01 */ addi r10, r10, 1 -/* 80358DC0 7C A5 36 30 */ sraw r5, r5, r6 -/* 80358DC4 54 A5 07 BE */ clrlwi r5, r5, 0x1e -/* 80358DC8 2C 05 00 02 */ cmpwi r5, 2 -/* 80358DCC 38 E7 00 04 */ addi r7, r7, 4 -/* 80358DD0 41 82 00 24 */ beq lbl_80358DF4 -/* 80358DD4 40 80 00 2C */ bge lbl_80358E00 -/* 80358DD8 2C 05 00 01 */ cmpwi r5, 1 -/* 80358DDC 40 80 00 08 */ bge lbl_80358DE4 -/* 80358DE0 48 00 00 20 */ b lbl_80358E00 -lbl_80358DE4: -/* 80358DE4 91 07 00 44 */ stw r8, 0x44(r7) -/* 80358DE8 39 20 00 01 */ li r9, 1 -/* 80358DEC 39 08 04 00 */ addi r8, r8, 0x400 -/* 80358DF0 48 00 00 14 */ b lbl_80358E04 -lbl_80358DF4: -/* 80358DF4 91 07 00 44 */ stw r8, 0x44(r7) -/* 80358DF8 39 08 08 00 */ addi r8, r8, 0x800 -/* 80358DFC 48 00 00 08 */ b lbl_80358E04 -lbl_80358E00: -/* 80358E00 90 07 00 44 */ stw r0, 0x44(r7) -lbl_80358E04: -/* 80358E04 A0 A3 00 30 */ lhz r5, 0x30(r3) -/* 80358E08 38 C6 00 02 */ addi r6, r6, 2 -/* 80358E0C 39 4A 00 01 */ addi r10, r10, 1 -/* 80358E10 7C A5 36 30 */ sraw r5, r5, r6 -/* 80358E14 54 A5 07 BE */ clrlwi r5, r5, 0x1e -/* 80358E18 2C 05 00 02 */ cmpwi r5, 2 -/* 80358E1C 38 E7 00 04 */ addi r7, r7, 4 -/* 80358E20 41 82 00 24 */ beq lbl_80358E44 -/* 80358E24 40 80 00 2C */ bge lbl_80358E50 -/* 80358E28 2C 05 00 01 */ cmpwi r5, 1 -/* 80358E2C 40 80 00 08 */ bge lbl_80358E34 -/* 80358E30 48 00 00 20 */ b lbl_80358E50 -lbl_80358E34: -/* 80358E34 91 07 00 44 */ stw r8, 0x44(r7) -/* 80358E38 39 20 00 01 */ li r9, 1 -/* 80358E3C 39 08 04 00 */ addi r8, r8, 0x400 -/* 80358E40 48 00 00 14 */ b lbl_80358E54 -lbl_80358E44: -/* 80358E44 91 07 00 44 */ stw r8, 0x44(r7) -/* 80358E48 39 08 08 00 */ addi r8, r8, 0x800 -/* 80358E4C 48 00 00 08 */ b lbl_80358E54 -lbl_80358E50: -/* 80358E50 90 07 00 44 */ stw r0, 0x44(r7) -lbl_80358E54: -/* 80358E54 38 C6 00 02 */ addi r6, r6, 2 -/* 80358E58 38 E7 00 04 */ addi r7, r7, 4 -/* 80358E5C 39 4A 00 01 */ addi r10, r10, 1 -/* 80358E60 42 00 FE C4 */ bdnz lbl_80358D24 -/* 80358E64 2C 09 00 00 */ cmpwi r9, 0 -/* 80358E68 41 82 00 10 */ beq lbl_80358E78 -/* 80358E6C 91 04 00 64 */ stw r8, 0x64(r4) -/* 80358E70 39 08 02 00 */ addi r8, r8, 0x200 -/* 80358E74 48 00 00 0C */ b lbl_80358E80 -lbl_80358E78: -/* 80358E78 38 00 FF FF */ li r0, -1 -/* 80358E7C 90 04 00 64 */ stw r0, 0x64(r4) -lbl_80358E80: -/* 80358E80 91 04 00 68 */ stw r8, 0x68(r4) -/* 80358E84 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDUnlock/ReadArrayUnlock.s b/asm/dolphin/card/CARDUnlock/ReadArrayUnlock.s deleted file mode 100644 index 78d16c34fd..0000000000 --- a/asm/dolphin/card/CARDUnlock/ReadArrayUnlock.s +++ /dev/null @@ -1,87 +0,0 @@ -lbl_80354090: -/* 80354090 7C 08 02 A6 */ mflr r0 -/* 80354094 90 01 00 04 */ stw r0, 4(r1) -/* 80354098 94 21 FF C0 */ stwu r1, -0x40(r1) -/* 8035409C BF 41 00 28 */ stmw r26, 0x28(r1) -/* 803540A0 3B A3 00 00 */ addi r29, r3, 0 -/* 803540A4 3C 60 80 45 */ lis r3, __CARDBlock@ha /* 0x8044CBC0@ha */ -/* 803540A8 38 03 CB C0 */ addi r0, r3, __CARDBlock@l /* 0x8044CBC0@l */ -/* 803540AC 1D 1D 01 10 */ mulli r8, r29, 0x110 -/* 803540B0 3B 44 00 00 */ addi r26, r4, 0 -/* 803540B4 3B C5 00 00 */ addi r30, r5, 0 -/* 803540B8 3B E6 00 00 */ addi r31, r6, 0 -/* 803540BC 3B 67 00 00 */ addi r27, r7, 0 -/* 803540C0 38 7D 00 00 */ addi r3, r29, 0 -/* 803540C4 7F 80 42 14 */ add r28, r0, r8 -/* 803540C8 38 80 00 00 */ li r4, 0 -/* 803540CC 38 A0 00 04 */ li r5, 4 -/* 803540D0 4B FE F7 99 */ bl EXISelect -/* 803540D4 2C 03 00 00 */ cmpwi r3, 0 -/* 803540D8 40 82 00 0C */ bne lbl_803540E4 -/* 803540DC 38 60 FF FD */ li r3, -3 -/* 803540E0 48 00 00 E0 */ b lbl_803541C0 -lbl_803540E4: -/* 803540E4 57 5A 00 26 */ rlwinm r26, r26, 0, 0, 0x13 -/* 803540E8 38 61 00 1C */ addi r3, r1, 0x1c -/* 803540EC 38 80 00 00 */ li r4, 0 -/* 803540F0 38 A0 00 05 */ li r5, 5 -/* 803540F4 4B CA F3 65 */ bl memset -/* 803540F8 38 00 00 52 */ li r0, 0x52 -/* 803540FC 2C 1B 00 00 */ cmpwi r27, 0 -/* 80354100 98 01 00 1C */ stb r0, 0x1c(r1) -/* 80354104 40 82 00 28 */ bne lbl_8035412C -/* 80354108 57 40 1F BE */ rlwinm r0, r26, 3, 0x1e, 0x1f -/* 8035410C 98 01 00 1D */ stb r0, 0x1d(r1) -/* 80354110 57 40 5E 3E */ rlwinm r0, r26, 0xb, 0x18, 0x1f -/* 80354114 57 43 6F BE */ rlwinm r3, r26, 0xd, 0x1e, 0x1f -/* 80354118 98 01 00 1E */ stb r0, 0x1e(r1) -/* 8035411C 57 40 A6 7E */ rlwinm r0, r26, 0x14, 0x19, 0x1f -/* 80354120 98 61 00 1F */ stb r3, 0x1f(r1) -/* 80354124 98 01 00 20 */ stb r0, 0x20(r1) -/* 80354128 48 00 00 14 */ b lbl_8035413C -lbl_8035412C: -/* 8035412C 57 40 46 3E */ srwi r0, r26, 0x18 -/* 80354130 98 01 00 1D */ stb r0, 0x1d(r1) -/* 80354134 57 40 86 3E */ rlwinm r0, r26, 0x10, 0x18, 0x1f -/* 80354138 98 01 00 1E */ stb r0, 0x1e(r1) -lbl_8035413C: -/* 8035413C 38 7D 00 00 */ addi r3, r29, 0 -/* 80354140 38 81 00 1C */ addi r4, r1, 0x1c -/* 80354144 38 A0 00 05 */ li r5, 5 -/* 80354148 38 C0 00 01 */ li r6, 1 -/* 8035414C 4B FE EE 11 */ bl EXIImmEx -/* 80354150 80 9C 00 80 */ lwz r4, 0x80(r28) -/* 80354154 7C 60 00 34 */ cntlzw r0, r3 -/* 80354158 80 BC 00 14 */ lwz r5, 0x14(r28) -/* 8035415C 38 7D 00 00 */ addi r3, r29, 0 -/* 80354160 54 1C D9 7E */ srwi r28, r0, 5 -/* 80354164 38 84 02 00 */ addi r4, r4, 0x200 -/* 80354168 38 C0 00 01 */ li r6, 1 -/* 8035416C 4B FE ED F1 */ bl EXIImmEx -/* 80354170 7C 60 00 34 */ cntlzw r0, r3 -/* 80354174 54 00 D9 7E */ srwi r0, r0, 5 -/* 80354178 38 7D 00 00 */ addi r3, r29, 0 -/* 8035417C 38 9E 00 00 */ addi r4, r30, 0 -/* 80354180 38 BF 00 00 */ addi r5, r31, 0 -/* 80354184 7F 9C 03 78 */ or r28, r28, r0 -/* 80354188 38 C0 00 00 */ li r6, 0 -/* 8035418C 4B FE ED D1 */ bl EXIImmEx -/* 80354190 7C 60 00 34 */ cntlzw r0, r3 -/* 80354194 54 00 D9 7E */ srwi r0, r0, 5 -/* 80354198 38 7D 00 00 */ addi r3, r29, 0 -/* 8035419C 7F 9C 03 78 */ or r28, r28, r0 -/* 803541A0 4B FE F7 F5 */ bl EXIDeselect -/* 803541A4 7C 60 00 34 */ cntlzw r0, r3 -/* 803541A8 54 00 D9 7E */ srwi r0, r0, 5 -/* 803541AC 7F 9C 03 79 */ or. r28, r28, r0 -/* 803541B0 41 82 00 0C */ beq lbl_803541BC -/* 803541B4 38 60 FF FD */ li r3, -3 -/* 803541B8 48 00 00 08 */ b lbl_803541C0 -lbl_803541BC: -/* 803541BC 38 60 00 00 */ li r3, 0 -lbl_803541C0: -/* 803541C0 BB 41 00 28 */ lmw r26, 0x28(r1) -/* 803541C4 80 01 00 44 */ lwz r0, 0x44(r1) -/* 803541C8 38 21 00 40 */ addi r1, r1, 0x40 -/* 803541CC 7C 08 03 A6 */ mtlr r0 -/* 803541D0 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDUnlock/bitrev.s b/asm/dolphin/card/CARDUnlock/bitrev.s deleted file mode 100644 index 9bf032586b..0000000000 --- a/asm/dolphin/card/CARDUnlock/bitrev.s +++ /dev/null @@ -1,105 +0,0 @@ -lbl_80353F24: -/* 80353F24 38 00 00 08 */ li r0, 8 -/* 80353F28 7C 09 03 A6 */ mtctr r0 -/* 80353F2C 54 66 0F FE */ srwi r6, r3, 0x1f -/* 80353F30 39 20 00 00 */ li r9, 0 -/* 80353F34 39 40 00 01 */ li r10, 1 -/* 80353F38 38 E0 00 00 */ li r7, 0 -/* 80353F3C 39 00 00 00 */ li r8, 0 -/* 80353F40 38 A0 00 01 */ li r5, 1 -lbl_80353F44: -/* 80353F44 28 08 00 0F */ cmplwi r8, 0xf -/* 80353F48 40 81 00 2C */ ble lbl_80353F74 -/* 80353F4C 28 08 00 1F */ cmplwi r8, 0x1f -/* 80353F50 40 82 00 0C */ bne lbl_80353F5C -/* 80353F54 7C E7 33 78 */ or r7, r7, r6 -/* 80353F58 48 00 00 38 */ b lbl_80353F90 -lbl_80353F5C: -/* 80353F5C 7C A0 40 30 */ slw r0, r5, r8 -/* 80353F60 7C 60 00 38 */ and r0, r3, r0 -/* 80353F64 7C 00 54 30 */ srw r0, r0, r10 -/* 80353F68 7C E7 03 78 */ or r7, r7, r0 -/* 80353F6C 39 4A 00 02 */ addi r10, r10, 2 -/* 80353F70 48 00 00 20 */ b lbl_80353F90 -lbl_80353F74: -/* 80353F74 7C A4 40 30 */ slw r4, r5, r8 -/* 80353F78 20 08 00 1F */ subfic r0, r8, 0x1f -/* 80353F7C 7C 09 00 50 */ subf r0, r9, r0 -/* 80353F80 7C 64 20 38 */ and r4, r3, r4 -/* 80353F84 7C 80 00 30 */ slw r0, r4, r0 -/* 80353F88 7C E7 03 78 */ or r7, r7, r0 -/* 80353F8C 39 29 00 01 */ addi r9, r9, 1 -lbl_80353F90: -/* 80353F90 39 08 00 01 */ addi r8, r8, 1 -/* 80353F94 28 08 00 0F */ cmplwi r8, 0xf -/* 80353F98 40 81 00 2C */ ble lbl_80353FC4 -/* 80353F9C 28 08 00 1F */ cmplwi r8, 0x1f -/* 80353FA0 40 82 00 0C */ bne lbl_80353FAC -/* 80353FA4 7C E7 33 78 */ or r7, r7, r6 -/* 80353FA8 48 00 00 38 */ b lbl_80353FE0 -lbl_80353FAC: -/* 80353FAC 7C A0 40 30 */ slw r0, r5, r8 -/* 80353FB0 7C 60 00 38 */ and r0, r3, r0 -/* 80353FB4 7C 00 54 30 */ srw r0, r0, r10 -/* 80353FB8 7C E7 03 78 */ or r7, r7, r0 -/* 80353FBC 39 4A 00 02 */ addi r10, r10, 2 -/* 80353FC0 48 00 00 20 */ b lbl_80353FE0 -lbl_80353FC4: -/* 80353FC4 7C A4 40 30 */ slw r4, r5, r8 -/* 80353FC8 20 08 00 1F */ subfic r0, r8, 0x1f -/* 80353FCC 7C 09 00 50 */ subf r0, r9, r0 -/* 80353FD0 7C 64 20 38 */ and r4, r3, r4 -/* 80353FD4 7C 80 00 30 */ slw r0, r4, r0 -/* 80353FD8 7C E7 03 78 */ or r7, r7, r0 -/* 80353FDC 39 29 00 01 */ addi r9, r9, 1 -lbl_80353FE0: -/* 80353FE0 39 08 00 01 */ addi r8, r8, 1 -/* 80353FE4 28 08 00 0F */ cmplwi r8, 0xf -/* 80353FE8 40 81 00 2C */ ble lbl_80354014 -/* 80353FEC 28 08 00 1F */ cmplwi r8, 0x1f -/* 80353FF0 40 82 00 0C */ bne lbl_80353FFC -/* 80353FF4 7C E7 33 78 */ or r7, r7, r6 -/* 80353FF8 48 00 00 38 */ b lbl_80354030 -lbl_80353FFC: -/* 80353FFC 7C A0 40 30 */ slw r0, r5, r8 -/* 80354000 7C 60 00 38 */ and r0, r3, r0 -/* 80354004 7C 00 54 30 */ srw r0, r0, r10 -/* 80354008 7C E7 03 78 */ or r7, r7, r0 -/* 8035400C 39 4A 00 02 */ addi r10, r10, 2 -/* 80354010 48 00 00 20 */ b lbl_80354030 -lbl_80354014: -/* 80354014 7C A4 40 30 */ slw r4, r5, r8 -/* 80354018 20 08 00 1F */ subfic r0, r8, 0x1f -/* 8035401C 7C 09 00 50 */ subf r0, r9, r0 -/* 80354020 7C 64 20 38 */ and r4, r3, r4 -/* 80354024 7C 80 00 30 */ slw r0, r4, r0 -/* 80354028 7C E7 03 78 */ or r7, r7, r0 -/* 8035402C 39 29 00 01 */ addi r9, r9, 1 -lbl_80354030: -/* 80354030 39 08 00 01 */ addi r8, r8, 1 -/* 80354034 28 08 00 0F */ cmplwi r8, 0xf -/* 80354038 40 81 00 2C */ ble lbl_80354064 -/* 8035403C 28 08 00 1F */ cmplwi r8, 0x1f -/* 80354040 40 82 00 0C */ bne lbl_8035404C -/* 80354044 7C E7 33 78 */ or r7, r7, r6 -/* 80354048 48 00 00 38 */ b lbl_80354080 -lbl_8035404C: -/* 8035404C 7C A0 40 30 */ slw r0, r5, r8 -/* 80354050 7C 60 00 38 */ and r0, r3, r0 -/* 80354054 7C 00 54 30 */ srw r0, r0, r10 -/* 80354058 7C E7 03 78 */ or r7, r7, r0 -/* 8035405C 39 4A 00 02 */ addi r10, r10, 2 -/* 80354060 48 00 00 20 */ b lbl_80354080 -lbl_80354064: -/* 80354064 7C A4 40 30 */ slw r4, r5, r8 -/* 80354068 20 08 00 1F */ subfic r0, r8, 0x1f -/* 8035406C 7C 09 00 50 */ subf r0, r9, r0 -/* 80354070 7C 64 20 38 */ and r4, r3, r4 -/* 80354074 7C 80 00 30 */ slw r0, r4, r0 -/* 80354078 7C E7 03 78 */ or r7, r7, r0 -/* 8035407C 39 29 00 01 */ addi r9, r9, 1 -lbl_80354080: -/* 80354080 39 08 00 01 */ addi r8, r8, 1 -/* 80354084 42 00 FE C0 */ bdnz lbl_80353F44 -/* 80354088 7C E3 3B 78 */ mr r3, r7 -/* 8035408C 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDWrite/CARDWrite.s b/asm/dolphin/card/CARDWrite/CARDWrite.s deleted file mode 100644 index 3687c0af6c..0000000000 --- a/asm/dolphin/card/CARDWrite/CARDWrite.s +++ /dev/null @@ -1,21 +0,0 @@ -lbl_80358C48: -/* 80358C48 7C 08 02 A6 */ mflr r0 -/* 80358C4C 3C E0 80 35 */ lis r7, __CARDSyncCallback@ha /* 0x80352A34@ha */ -/* 80358C50 90 01 00 04 */ stw r0, 4(r1) -/* 80358C54 38 E7 2A 34 */ addi r7, r7, __CARDSyncCallback@l /* 0x80352A34@l */ -/* 80358C58 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 80358C5C 93 E1 00 1C */ stw r31, 0x1c(r1) -/* 80358C60 3B E3 00 00 */ addi r31, r3, 0 -/* 80358C64 4B FF FE D1 */ bl CARDWriteAsync -/* 80358C68 2C 03 00 00 */ cmpwi r3, 0 -/* 80358C6C 40 80 00 08 */ bge lbl_80358C74 -/* 80358C70 48 00 00 0C */ b lbl_80358C7C -lbl_80358C74: -/* 80358C74 80 7F 00 00 */ lwz r3, 0(r31) -/* 80358C78 4B FF B1 A9 */ bl __CARDSync -lbl_80358C7C: -/* 80358C7C 80 01 00 24 */ lwz r0, 0x24(r1) -/* 80358C80 83 E1 00 1C */ lwz r31, 0x1c(r1) -/* 80358C84 38 21 00 20 */ addi r1, r1, 0x20 -/* 80358C88 7C 08 03 A6 */ mtlr r0 -/* 80358C8C 4E 80 00 20 */ blr diff --git a/asm/dolphin/card/CARDWrite/CARDWriteAsync.s b/asm/dolphin/card/CARDWrite/CARDWriteAsync.s deleted file mode 100644 index 4bb40ce682..0000000000 --- a/asm/dolphin/card/CARDWrite/CARDWriteAsync.s +++ /dev/null @@ -1,78 +0,0 @@ -lbl_80358B34: -/* 80358B34 7C 08 02 A6 */ mflr r0 -/* 80358B38 90 01 00 04 */ stw r0, 4(r1) -/* 80358B3C 94 21 FF C8 */ stwu r1, -0x38(r1) -/* 80358B40 BF 61 00 24 */ stmw r27, 0x24(r1) -/* 80358B44 3B 86 00 00 */ addi r28, r6, 0 -/* 80358B48 3B 65 00 00 */ addi r27, r5, 0 -/* 80358B4C 3B E4 00 00 */ addi r31, r4, 0 -/* 80358B50 3B C3 00 00 */ addi r30, r3, 0 -/* 80358B54 3B A7 00 00 */ addi r29, r7, 0 -/* 80358B58 38 9B 00 00 */ addi r4, r27, 0 -/* 80358B5C 38 BC 00 00 */ addi r5, r28, 0 -/* 80358B60 38 C1 00 1C */ addi r6, r1, 0x1c -/* 80358B64 4B FF F9 3D */ bl __CARDSeek -/* 80358B68 2C 03 00 00 */ cmpwi r3, 0 -/* 80358B6C 40 80 00 08 */ bge lbl_80358B74 -/* 80358B70 48 00 00 C4 */ b lbl_80358C34 -lbl_80358B74: -/* 80358B74 80 61 00 1C */ lwz r3, 0x1c(r1) -/* 80358B78 80 83 00 0C */ lwz r4, 0xc(r3) -/* 80358B7C 38 84 FF FF */ addi r4, r4, -1 -/* 80358B80 7F 80 20 39 */ and. r0, r28, r4 -/* 80358B84 40 82 00 0C */ bne lbl_80358B90 -/* 80358B88 7F 60 20 39 */ and. r0, r27, r4 -/* 80358B8C 41 82 00 10 */ beq lbl_80358B9C -lbl_80358B90: -/* 80358B90 38 80 FF 80 */ li r4, -128 -/* 80358B94 4B FF B0 D9 */ bl __CARDPutControlBlock -/* 80358B98 48 00 00 9C */ b lbl_80358C34 -lbl_80358B9C: -/* 80358B9C 4B FF CB E1 */ bl __CARDGetDirBlock -/* 80358BA0 80 1E 00 04 */ lwz r0, 4(r30) -/* 80358BA4 54 00 30 32 */ slwi r0, r0, 6 -/* 80358BA8 7C 83 02 14 */ add r4, r3, r0 -/* 80358BAC 80 61 00 1C */ lwz r3, 0x1c(r1) -/* 80358BB0 4B FF F1 C1 */ bl __CARDIsWritable -/* 80358BB4 7C 64 1B 79 */ or. r4, r3, r3 -/* 80358BB8 40 80 00 10 */ bge lbl_80358BC8 -/* 80358BBC 80 61 00 1C */ lwz r3, 0x1c(r1) -/* 80358BC0 4B FF B0 AD */ bl __CARDPutControlBlock -/* 80358BC4 48 00 00 70 */ b lbl_80358C34 -lbl_80358BC8: -/* 80358BC8 38 7F 00 00 */ addi r3, r31, 0 -/* 80358BCC 38 9B 00 00 */ addi r4, r27, 0 -/* 80358BD0 4B FE 2A 0D */ bl DCStoreRange -/* 80358BD4 28 1D 00 00 */ cmplwi r29, 0 -/* 80358BD8 41 82 00 0C */ beq lbl_80358BE4 -/* 80358BDC 7F A0 EB 78 */ mr r0, r29 -/* 80358BE0 48 00 00 0C */ b lbl_80358BEC -lbl_80358BE4: -/* 80358BE4 3C 60 80 35 */ lis r3, __CARDDefaultApiCallback@ha /* 0x80352A30@ha */ -/* 80358BE8 38 03 2A 30 */ addi r0, r3, __CARDDefaultApiCallback@l /* 0x80352A30@l */ -lbl_80358BEC: -/* 80358BEC 80 81 00 1C */ lwz r4, 0x1c(r1) -/* 80358BF0 3C 60 80 36 */ lis r3, EraseCallback@ha /* 0x80358A84@ha */ -/* 80358BF4 38 A3 8A 84 */ addi r5, r3, EraseCallback@l /* 0x80358A84@l */ -/* 80358BF8 90 04 00 D0 */ stw r0, 0xd0(r4) -/* 80358BFC 80 61 00 1C */ lwz r3, 0x1c(r1) -/* 80358C00 93 E3 00 B4 */ stw r31, 0xb4(r3) -/* 80358C04 80 61 00 1C */ lwz r3, 0x1c(r1) -/* 80358C08 A0 1E 00 10 */ lhz r0, 0x10(r30) -/* 80358C0C 80 83 00 0C */ lwz r4, 0xc(r3) -/* 80358C10 80 7E 00 00 */ lwz r3, 0(r30) -/* 80358C14 7C 84 01 D6 */ mullw r4, r4, r0 -/* 80358C18 4B FF AD A1 */ bl __CARDEraseSector -/* 80358C1C 7C 7E 1B 79 */ or. r30, r3, r3 -/* 80358C20 40 80 00 10 */ bge lbl_80358C30 -/* 80358C24 80 61 00 1C */ lwz r3, 0x1c(r1) -/* 80358C28 7F C4 F3 78 */ mr r4, r30 -/* 80358C2C 4B FF B0 41 */ bl __CARDPutControlBlock -lbl_80358C30: -/* 80358C30 7F C3 F3 78 */ mr r3, r30 -lbl_80358C34: -/* 80358C34 BB 61 00 24 */ lmw r27, 0x24(r1) -/* 80358C38 80 01 00 3C */ lwz r0, 0x3c(r1) -/* 80358C3C 38 21 00 38 */ addi r1, r1, 0x38 -/* 80358C40 7C 08 03 A6 */ mtlr r0 -/* 80358C44 4E 80 00 20 */ blr diff --git a/asm/dolphin/db/db/DBInit.s b/asm/dolphin/db/db/DBInit.s deleted file mode 100644 index 36d3383f29..0000000000 --- a/asm/dolphin/db/db/DBInit.s +++ /dev/null @@ -1,11 +0,0 @@ -lbl_80346398: -/* 80346398 3C 80 80 00 */ lis r4, 0x8000 /* 0x80000040@ha */ -/* 8034639C 38 04 00 40 */ addi r0, r4, 0x0040 /* 0x80000040@l */ -/* 803463A0 3C 60 80 34 */ lis r3, __DBExceptionDestination@ha /* 0x80346408@ha */ -/* 803463A4 90 0D 91 88 */ stw r0, __DBInterface(r13) -/* 803463A8 38 63 64 08 */ addi r3, r3, __DBExceptionDestination@l /* 0x80346408@l */ -/* 803463AC 3C 03 80 00 */ addis r0, r3, 0x8000 -/* 803463B0 90 04 00 48 */ stw r0, 0x48(r4) -/* 803463B4 38 00 00 01 */ li r0, 1 -/* 803463B8 90 0D 91 8C */ stw r0, DBVerbose(r13) -/* 803463BC 4E 80 00 20 */ blr diff --git a/asm/dolphin/db/db/DBPrintf.s b/asm/dolphin/db/db/DBPrintf.s deleted file mode 100644 index e717eba9bf..0000000000 --- a/asm/dolphin/db/db/DBPrintf.s +++ /dev/null @@ -1,22 +0,0 @@ -lbl_80346434: -/* 80346434 94 21 FF 90 */ stwu r1, -0x70(r1) -/* 80346438 40 86 00 24 */ bne cr1, lbl_8034645C -/* 8034643C D8 21 00 28 */ stfd f1, 0x28(r1) -/* 80346440 D8 41 00 30 */ stfd f2, 0x30(r1) -/* 80346444 D8 61 00 38 */ stfd f3, 0x38(r1) -/* 80346448 D8 81 00 40 */ stfd f4, 0x40(r1) -/* 8034644C D8 A1 00 48 */ stfd f5, 0x48(r1) -/* 80346450 D8 C1 00 50 */ stfd f6, 0x50(r1) -/* 80346454 D8 E1 00 58 */ stfd f7, 0x58(r1) -/* 80346458 D9 01 00 60 */ stfd f8, 0x60(r1) -lbl_8034645C: -/* 8034645C 90 61 00 08 */ stw r3, 8(r1) -/* 80346460 90 81 00 0C */ stw r4, 0xc(r1) -/* 80346464 90 A1 00 10 */ stw r5, 0x10(r1) -/* 80346468 90 C1 00 14 */ stw r6, 0x14(r1) -/* 8034646C 90 E1 00 18 */ stw r7, 0x18(r1) -/* 80346470 91 01 00 1C */ stw r8, 0x1c(r1) -/* 80346474 91 21 00 20 */ stw r9, 0x20(r1) -/* 80346478 91 41 00 24 */ stw r10, 0x24(r1) -/* 8034647C 38 21 00 70 */ addi r1, r1, 0x70 -/* 80346480 4E 80 00 20 */ blr diff --git a/asm/dolphin/db/db/__DBExceptionDestination.s b/asm/dolphin/db/db/__DBExceptionDestination.s deleted file mode 100644 index f714a8812b..0000000000 --- a/asm/dolphin/db/db/__DBExceptionDestination.s +++ /dev/null @@ -1,5 +0,0 @@ -lbl_80346408: -/* 80346408 7C 60 00 A6 */ mfmsr r3 -/* 8034640C 60 63 00 30 */ ori r3, r3, 0x30 -/* 80346410 7C 60 01 24 */ mtmsr r3 -/* 80346414 4B FF FF AC */ b __DBExceptionDestinationAux diff --git a/asm/dolphin/db/db/__DBExceptionDestinationAux.s b/asm/dolphin/db/db/__DBExceptionDestinationAux.s deleted file mode 100644 index 258e95f0d0..0000000000 --- a/asm/dolphin/db/db/__DBExceptionDestinationAux.s +++ /dev/null @@ -1,19 +0,0 @@ -lbl_803463C0: -/* 803463C0 7C 08 02 A6 */ mflr r0 -/* 803463C4 3C 60 80 3D */ lis r3, lit_9@ha /* 0x803D1368@ha */ -/* 803463C8 90 01 00 04 */ stw r0, 4(r1) -/* 803463CC 38 63 13 68 */ addi r3, r3, lit_9@l /* 0x803D1368@l */ -/* 803463D0 4C C6 31 82 */ crclr 6 -/* 803463D4 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 803463D8 93 E1 00 14 */ stw r31, 0x14(r1) -/* 803463DC 80 80 00 C0 */ lwz r4, 0xc0(r0) -/* 803463E0 3F E4 80 00 */ addis r31, r4, 0x8000 -/* 803463E4 4B CC 06 D9 */ bl OSReport -/* 803463E8 7F E3 FB 78 */ mr r3, r31 -/* 803463EC 4B FF 5C F5 */ bl OSDumpContext -/* 803463F0 4B FF 39 11 */ bl PPCHalt -/* 803463F4 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 803463F8 83 E1 00 14 */ lwz r31, 0x14(r1) -/* 803463FC 38 21 00 18 */ addi r1, r1, 0x18 -/* 80346400 7C 08 03 A6 */ mtlr r0 -/* 80346404 4E 80 00 20 */ blr diff --git a/asm/dolphin/db/db/__DBIsExceptionMarked.s b/asm/dolphin/db/db/__DBIsExceptionMarked.s deleted file mode 100644 index 981a66e64d..0000000000 --- a/asm/dolphin/db/db/__DBIsExceptionMarked.s +++ /dev/null @@ -1,8 +0,0 @@ -lbl_80346418: -/* 80346418 80 8D 91 88 */ lwz r4, __DBInterface(r13) -/* 8034641C 54 60 06 3E */ clrlwi r0, r3, 0x18 -/* 80346420 38 60 00 01 */ li r3, 1 -/* 80346424 80 84 00 04 */ lwz r4, 4(r4) -/* 80346428 7C 60 00 30 */ slw r0, r3, r0 -/* 8034642C 7C 83 00 38 */ and r3, r4, r0 -/* 80346430 4E 80 00 20 */ blr diff --git a/asm/dolphin/dsp/dsp/DSPAssertInt.s b/asm/dolphin/dsp/dsp/DSPAssertInt.s deleted file mode 100644 index 0cf087e77d..0000000000 --- a/asm/dolphin/dsp/dsp/DSPAssertInt.s +++ /dev/null @@ -1,17 +0,0 @@ -lbl_8035247C: -/* 8035247C 7C 08 02 A6 */ mflr r0 -/* 80352480 90 01 00 04 */ stw r0, 4(r1) -/* 80352484 94 21 FF F8 */ stwu r1, -8(r1) -/* 80352488 4B FE B2 6D */ bl OSDisableInterrupts -/* 8035248C 3C 80 CC 00 */ lis r4, 0xCC00 /* 0xCC005000@ha */ -/* 80352490 38 84 50 00 */ addi r4, r4, 0x5000 /* 0xCC005000@l */ -/* 80352494 A0 A4 00 0A */ lhz r5, 0xa(r4) -/* 80352498 38 00 FF 57 */ li r0, -169 -/* 8035249C 7C A0 00 38 */ and r0, r5, r0 -/* 803524A0 60 00 00 02 */ ori r0, r0, 2 -/* 803524A4 B0 04 00 0A */ sth r0, 0xa(r4) -/* 803524A8 4B FE B2 75 */ bl OSRestoreInterrupts -/* 803524AC 80 01 00 0C */ lwz r0, 0xc(r1) -/* 803524B0 38 21 00 08 */ addi r1, r1, 8 -/* 803524B4 7C 08 03 A6 */ mtlr r0 -/* 803524B8 4E 80 00 20 */ blr diff --git a/asm/dolphin/dsp/dsp/DSPCheckMailFromDSP.s b/asm/dolphin/dsp/dsp/DSPCheckMailFromDSP.s deleted file mode 100644 index 45808ef6e2..0000000000 --- a/asm/dolphin/dsp/dsp/DSPCheckMailFromDSP.s +++ /dev/null @@ -1,5 +0,0 @@ -lbl_80352440: -/* 80352440 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC005004@ha */ -/* 80352444 A0 03 50 04 */ lhz r0, 0x5004(r3) /* 0xCC005004@l */ -/* 80352448 54 03 8F FE */ rlwinm r3, r0, 0x11, 0x1f, 0x1f -/* 8035244C 4E 80 00 20 */ blr diff --git a/asm/dolphin/dsp/dsp/DSPCheckMailToDSP.s b/asm/dolphin/dsp/dsp/DSPCheckMailToDSP.s deleted file mode 100644 index ed799d0152..0000000000 --- a/asm/dolphin/dsp/dsp/DSPCheckMailToDSP.s +++ /dev/null @@ -1,5 +0,0 @@ -lbl_80352430: -/* 80352430 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC005000@ha */ -/* 80352434 A0 03 50 00 */ lhz r0, 0x5000(r3) /* 0xCC005000@l */ -/* 80352438 54 03 8F FE */ rlwinm r3, r0, 0x11, 0x1f, 0x1f -/* 8035243C 4E 80 00 20 */ blr diff --git a/asm/dolphin/dsp/dsp/DSPInit.s b/asm/dolphin/dsp/dsp/DSPInit.s deleted file mode 100644 index 9bcd67fd7e..0000000000 --- a/asm/dolphin/dsp/dsp/DSPInit.s +++ /dev/null @@ -1,51 +0,0 @@ -lbl_803524BC: -/* 803524BC 7C 08 02 A6 */ mflr r0 -/* 803524C0 3C 60 80 3D */ lis r3, lit_1@ha /* 0x803D1C78@ha */ -/* 803524C4 90 01 00 04 */ stw r0, 4(r1) -/* 803524C8 38 A3 1C 78 */ addi r5, r3, lit_1@l /* 0x803D1C78@l */ -/* 803524CC 4C C6 31 82 */ crclr 6 -/* 803524D0 38 65 00 48 */ addi r3, r5, 0x48 -/* 803524D4 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 803524D8 38 85 00 68 */ addi r4, r5, 0x68 -/* 803524DC 93 E1 00 0C */ stw r31, 0xc(r1) -/* 803524E0 38 A5 00 74 */ addi r5, r5, 0x74 -/* 803524E4 48 00 00 9D */ bl __DSP_debug_printf -/* 803524E8 80 0D 93 80 */ lwz r0, __DSP_init_flag(r13) -/* 803524EC 2C 00 00 01 */ cmpwi r0, 1 -/* 803524F0 41 82 00 7C */ beq lbl_8035256C -/* 803524F4 80 6D 84 D8 */ lwz r3, __DSPVersion(r13) -/* 803524F8 4B FE 83 7D */ bl OSRegisterVersion -/* 803524FC 4B FE B1 F9 */ bl OSDisableInterrupts -/* 80352500 3C 80 80 2A */ lis r4, __DSPHandler@ha /* 0x8029EB20@ha */ -/* 80352504 3B E3 00 00 */ addi r31, r3, 0 -/* 80352508 38 84 EB 20 */ addi r4, r4, __DSPHandler@l /* 0x8029EB20@l */ -/* 8035250C 38 60 00 07 */ li r3, 7 -/* 80352510 4B FE B2 31 */ bl __OSSetInterruptHandler -/* 80352514 3C 60 01 00 */ lis r3, 0x100 -/* 80352518 4B FE B6 2D */ bl __OSUnmaskInterrupts -/* 8035251C 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC005000@ha */ -/* 80352520 38 C3 50 00 */ addi r6, r3, 0x5000 /* 0xCC005000@l */ -/* 80352524 A0 63 50 0A */ lhz r3, 0x500a(r3) -/* 80352528 38 00 FF 57 */ li r0, -169 -/* 8035252C 7C 60 00 38 */ and r0, r3, r0 -/* 80352530 60 00 08 00 */ ori r0, r0, 0x800 -/* 80352534 B0 06 00 0A */ sth r0, 0xa(r6) -/* 80352538 38 A0 FF 53 */ li r5, -173 -/* 8035253C 38 80 00 00 */ li r4, 0 -/* 80352540 A0 E6 00 0A */ lhz r7, 0xa(r6) -/* 80352544 38 00 00 01 */ li r0, 1 -/* 80352548 38 7F 00 00 */ addi r3, r31, 0 -/* 8035254C 7C E5 28 38 */ and r5, r7, r5 -/* 80352550 B0 A6 00 0A */ sth r5, 0xa(r6) -/* 80352554 90 8D 93 88 */ stw r4, __DSP_tmp_task(r13) -/* 80352558 90 8D 93 94 */ stw r4, __DSP_curr_task(r13) -/* 8035255C 90 8D 93 8C */ stw r4, __DSP_last_task(r13) -/* 80352560 90 8D 93 90 */ stw r4, __DSP_first_task(r13) -/* 80352564 90 0D 93 80 */ stw r0, __DSP_init_flag(r13) -/* 80352568 4B FE B1 B5 */ bl OSRestoreInterrupts -lbl_8035256C: -/* 8035256C 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80352570 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80352574 38 21 00 10 */ addi r1, r1, 0x10 -/* 80352578 7C 08 03 A6 */ mtlr r0 -/* 8035257C 4E 80 00 20 */ blr diff --git a/asm/dolphin/dsp/dsp/DSPReadMailFromDSP.s b/asm/dolphin/dsp/dsp/DSPReadMailFromDSP.s deleted file mode 100644 index 90dce7352f..0000000000 --- a/asm/dolphin/dsp/dsp/DSPReadMailFromDSP.s +++ /dev/null @@ -1,7 +0,0 @@ -lbl_80352450: -/* 80352450 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC005000@ha */ -/* 80352454 38 63 50 00 */ addi r3, r3, 0x5000 /* 0xCC005000@l */ -/* 80352458 A0 03 00 04 */ lhz r0, 4(r3) -/* 8035245C A0 63 00 06 */ lhz r3, 6(r3) -/* 80352460 50 03 80 1E */ rlwimi r3, r0, 0x10, 0, 0xf -/* 80352464 4E 80 00 20 */ blr diff --git a/asm/dolphin/dsp/dsp/DSPSendMailToDSP.s b/asm/dolphin/dsp/dsp/DSPSendMailToDSP.s deleted file mode 100644 index 46e1db39e3..0000000000 --- a/asm/dolphin/dsp/dsp/DSPSendMailToDSP.s +++ /dev/null @@ -1,6 +0,0 @@ -lbl_80352468: -/* 80352468 3C 80 CC 00 */ lis r4, 0xCC00 /* 0xCC005000@ha */ -/* 8035246C 54 60 84 3E */ srwi r0, r3, 0x10 -/* 80352470 B0 04 50 00 */ sth r0, 0x5000(r4) /* 0xCC005000@l */ -/* 80352474 B0 64 50 02 */ sth r3, 0x5002(r4) -/* 80352478 4E 80 00 20 */ blr diff --git a/asm/dolphin/dsp/dsp_debug/__DSP_debug_printf.s b/asm/dolphin/dsp/dsp_debug/__DSP_debug_printf.s deleted file mode 100644 index 8cc028254e..0000000000 --- a/asm/dolphin/dsp/dsp_debug/__DSP_debug_printf.s +++ /dev/null @@ -1,22 +0,0 @@ -lbl_80352580: -/* 80352580 94 21 FF 90 */ stwu r1, -0x70(r1) -/* 80352584 40 86 00 24 */ bne cr1, lbl_803525A8 -/* 80352588 D8 21 00 28 */ stfd f1, 0x28(r1) -/* 8035258C D8 41 00 30 */ stfd f2, 0x30(r1) -/* 80352590 D8 61 00 38 */ stfd f3, 0x38(r1) -/* 80352594 D8 81 00 40 */ stfd f4, 0x40(r1) -/* 80352598 D8 A1 00 48 */ stfd f5, 0x48(r1) -/* 8035259C D8 C1 00 50 */ stfd f6, 0x50(r1) -/* 803525A0 D8 E1 00 58 */ stfd f7, 0x58(r1) -/* 803525A4 D9 01 00 60 */ stfd f8, 0x60(r1) -lbl_803525A8: -/* 803525A8 90 61 00 08 */ stw r3, 8(r1) -/* 803525AC 90 81 00 0C */ stw r4, 0xc(r1) -/* 803525B0 90 A1 00 10 */ stw r5, 0x10(r1) -/* 803525B4 90 C1 00 14 */ stw r6, 0x14(r1) -/* 803525B8 90 E1 00 18 */ stw r7, 0x18(r1) -/* 803525BC 91 01 00 1C */ stw r8, 0x1c(r1) -/* 803525C0 91 21 00 20 */ stw r9, 0x20(r1) -/* 803525C4 91 41 00 24 */ stw r10, 0x24(r1) -/* 803525C8 38 21 00 70 */ addi r1, r1, 0x70 -/* 803525CC 4E 80 00 20 */ blr diff --git a/asm/dolphin/dsp/dsp_task/__DSP_insert_task.s b/asm/dolphin/dsp/dsp_task/__DSP_insert_task.s deleted file mode 100644 index 9956f00139..0000000000 --- a/asm/dolphin/dsp/dsp_task/__DSP_insert_task.s +++ /dev/null @@ -1,47 +0,0 @@ -lbl_803528FC: -/* 803528FC 80 0D 93 90 */ lwz r0, __DSP_first_task(r13) -/* 80352900 28 00 00 00 */ cmplwi r0, 0 -/* 80352904 40 82 00 20 */ bne lbl_80352924 -/* 80352908 90 6D 93 94 */ stw r3, __DSP_curr_task(r13) -/* 8035290C 38 00 00 00 */ li r0, 0 -/* 80352910 90 6D 93 8C */ stw r3, __DSP_last_task(r13) -/* 80352914 90 6D 93 90 */ stw r3, __DSP_first_task(r13) -/* 80352918 90 03 00 3C */ stw r0, 0x3c(r3) -/* 8035291C 90 03 00 38 */ stw r0, 0x38(r3) -/* 80352920 4E 80 00 20 */ blr -lbl_80352924: -/* 80352924 7C 05 03 78 */ mr r5, r0 -/* 80352928 48 00 00 44 */ b lbl_8035296C -lbl_8035292C: -/* 8035292C 80 83 00 04 */ lwz r4, 4(r3) -/* 80352930 80 05 00 04 */ lwz r0, 4(r5) -/* 80352934 7C 04 00 40 */ cmplw r4, r0 -/* 80352938 40 80 00 30 */ bge lbl_80352968 -/* 8035293C 80 05 00 3C */ lwz r0, 0x3c(r5) -/* 80352940 90 03 00 3C */ stw r0, 0x3c(r3) -/* 80352944 90 65 00 3C */ stw r3, 0x3c(r5) -/* 80352948 90 A3 00 38 */ stw r5, 0x38(r3) -/* 8035294C 80 83 00 3C */ lwz r4, 0x3c(r3) -/* 80352950 28 04 00 00 */ cmplwi r4, 0 -/* 80352954 40 82 00 0C */ bne lbl_80352960 -/* 80352958 90 6D 93 90 */ stw r3, __DSP_first_task(r13) -/* 8035295C 48 00 00 18 */ b lbl_80352974 -lbl_80352960: -/* 80352960 90 64 00 38 */ stw r3, 0x38(r4) -/* 80352964 48 00 00 10 */ b lbl_80352974 -lbl_80352968: -/* 80352968 80 A5 00 38 */ lwz r5, 0x38(r5) -lbl_8035296C: -/* 8035296C 28 05 00 00 */ cmplwi r5, 0 -/* 80352970 40 82 FF BC */ bne lbl_8035292C -lbl_80352974: -/* 80352974 28 05 00 00 */ cmplwi r5, 0 -/* 80352978 4C 82 00 20 */ bnelr -/* 8035297C 80 8D 93 8C */ lwz r4, __DSP_last_task(r13) -/* 80352980 38 00 00 00 */ li r0, 0 -/* 80352984 90 64 00 38 */ stw r3, 0x38(r4) -/* 80352988 90 03 00 38 */ stw r0, 0x38(r3) -/* 8035298C 80 0D 93 8C */ lwz r0, __DSP_last_task(r13) -/* 80352990 90 03 00 3C */ stw r0, 0x3c(r3) -/* 80352994 90 6D 93 8C */ stw r3, __DSP_last_task(r13) -/* 80352998 4E 80 00 20 */ blr diff --git a/asm/dolphin/dsp/dsp_task/__DSP_remove_task.s b/asm/dolphin/dsp/dsp_task/__DSP_remove_task.s deleted file mode 100644 index 15d25e6908..0000000000 --- a/asm/dolphin/dsp/dsp_task/__DSP_remove_task.s +++ /dev/null @@ -1,41 +0,0 @@ -lbl_8035299C: -/* 8035299C 38 80 00 00 */ li r4, 0 -/* 803529A0 90 83 00 08 */ stw r4, 8(r3) -/* 803529A4 38 00 00 03 */ li r0, 3 -/* 803529A8 90 03 00 00 */ stw r0, 0(r3) -/* 803529AC 80 0D 93 90 */ lwz r0, __DSP_first_task(r13) -/* 803529B0 7C 00 18 40 */ cmplw r0, r3 -/* 803529B4 40 82 00 30 */ bne lbl_803529E4 -/* 803529B8 80 03 00 38 */ lwz r0, 0x38(r3) -/* 803529BC 28 00 00 00 */ cmplwi r0, 0 -/* 803529C0 41 82 00 14 */ beq lbl_803529D4 -/* 803529C4 90 0D 93 90 */ stw r0, __DSP_first_task(r13) -/* 803529C8 80 63 00 38 */ lwz r3, 0x38(r3) -/* 803529CC 90 83 00 3C */ stw r4, 0x3c(r3) -/* 803529D0 4E 80 00 20 */ blr -lbl_803529D4: -/* 803529D4 90 8D 93 94 */ stw r4, __DSP_curr_task(r13) -/* 803529D8 90 8D 93 8C */ stw r4, __DSP_last_task(r13) -/* 803529DC 90 8D 93 90 */ stw r4, __DSP_first_task(r13) -/* 803529E0 4E 80 00 20 */ blr -lbl_803529E4: -/* 803529E4 80 0D 93 8C */ lwz r0, __DSP_last_task(r13) -/* 803529E8 7C 00 18 40 */ cmplw r0, r3 -/* 803529EC 40 82 00 20 */ bne lbl_80352A0C -/* 803529F0 80 03 00 3C */ lwz r0, 0x3c(r3) -/* 803529F4 90 0D 93 8C */ stw r0, __DSP_last_task(r13) -/* 803529F8 80 63 00 3C */ lwz r3, 0x3c(r3) -/* 803529FC 90 83 00 38 */ stw r4, 0x38(r3) -/* 80352A00 80 0D 93 90 */ lwz r0, __DSP_first_task(r13) -/* 80352A04 90 0D 93 94 */ stw r0, __DSP_curr_task(r13) -/* 80352A08 4E 80 00 20 */ blr -lbl_80352A0C: -/* 80352A0C 80 03 00 38 */ lwz r0, 0x38(r3) -/* 80352A10 90 0D 93 94 */ stw r0, __DSP_curr_task(r13) -/* 80352A14 80 03 00 38 */ lwz r0, 0x38(r3) -/* 80352A18 80 83 00 3C */ lwz r4, 0x3c(r3) -/* 80352A1C 90 04 00 38 */ stw r0, 0x38(r4) -/* 80352A20 80 03 00 3C */ lwz r0, 0x3c(r3) -/* 80352A24 80 63 00 38 */ lwz r3, 0x38(r3) -/* 80352A28 90 03 00 3C */ stw r0, 0x3c(r3) -/* 80352A2C 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/AlarmHandler.s b/asm/dolphin/dvd/dvd/AlarmHandler.s deleted file mode 100644 index c03767fb99..0000000000 --- a/asm/dolphin/dvd/dvd/AlarmHandler.s +++ /dev/null @@ -1,18 +0,0 @@ -lbl_80349DEC: -/* 80349DEC 7C 08 02 A6 */ mflr r0 -/* 80349DF0 90 01 00 04 */ stw r0, 4(r1) -/* 80349DF4 94 21 FF F8 */ stwu r1, -8(r1) -/* 80349DF8 48 00 13 41 */ bl DVDReset -/* 80349DFC 3C 60 80 45 */ lis r3, CurrDiskID@ha /* 0x8044C920@ha */ -/* 80349E00 38 63 C9 20 */ addi r3, r3, CurrDiskID@l /* 0x8044C920@l */ -/* 80349E04 38 80 00 20 */ li r4, 0x20 -/* 80349E08 4B FF 17 79 */ bl DCInvalidateRange -/* 80349E0C 3C 80 80 35 */ lis r4, stateCoverClosed_CMD@ha /* 0x80349F04@ha */ -/* 80349E10 80 6D 91 F8 */ lwz r3, executing(r13) -/* 80349E14 38 04 9F 04 */ addi r0, r4, stateCoverClosed_CMD@l /* 0x80349F04@l */ -/* 80349E18 90 0D 92 40 */ stw r0, LastState(r13) -/* 80349E1C 48 00 00 E9 */ bl stateCoverClosed_CMD -/* 80349E20 80 01 00 0C */ lwz r0, 0xc(r1) -/* 80349E24 38 21 00 08 */ addi r1, r1, 8 -/* 80349E28 7C 08 03 A6 */ mtlr r0 -/* 80349E2C 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/CategorizeError.s b/asm/dolphin/dvd/dvd/CategorizeError.s deleted file mode 100644 index 10452a54b1..0000000000 --- a/asm/dolphin/dvd/dvd/CategorizeError.s +++ /dev/null @@ -1,53 +0,0 @@ -lbl_803493E4: -/* 803493E4 3C 03 FF FE */ addis r0, r3, 0xfffe -/* 803493E8 28 00 04 00 */ cmplwi r0, 0x400 -/* 803493EC 40 82 00 10 */ bne lbl_803493FC -/* 803493F0 90 6D 92 28 */ stw r3, LastError(r13) -/* 803493F4 38 60 00 01 */ li r3, 1 -/* 803493F8 4E 80 00 20 */ blr -lbl_803493FC: -/* 803493FC 54 64 02 3E */ clrlwi r4, r3, 8 -/* 80349400 3C 04 FF FA */ addis r0, r4, 0xfffa -/* 80349404 28 00 28 00 */ cmplwi r0, 0x2800 -/* 80349408 41 82 00 1C */ beq lbl_80349424 -/* 8034940C 3C 04 FF FE */ addis r0, r4, 0xfffe -/* 80349410 28 00 3A 00 */ cmplwi r0, 0x3a00 -/* 80349414 41 82 00 10 */ beq lbl_80349424 -/* 80349418 3C 04 FF F5 */ addis r0, r4, 0xfff5 -/* 8034941C 28 00 5A 01 */ cmplwi r0, 0x5a01 -/* 80349420 40 82 00 0C */ bne lbl_8034942C -lbl_80349424: -/* 80349424 38 60 00 00 */ li r3, 0 -/* 80349428 4E 80 00 20 */ blr -lbl_8034942C: -/* 8034942C 80 6D 92 2C */ lwz r3, NumInternalRetry(r13) -/* 80349430 38 03 00 01 */ addi r0, r3, 1 -/* 80349434 90 0D 92 2C */ stw r0, NumInternalRetry(r13) -/* 80349438 80 0D 92 2C */ lwz r0, NumInternalRetry(r13) -/* 8034943C 2C 00 00 02 */ cmpwi r0, 2 -/* 80349440 40 82 00 28 */ bne lbl_80349468 -/* 80349444 80 0D 92 28 */ lwz r0, LastError(r13) -/* 80349448 7C 04 00 40 */ cmplw r4, r0 -/* 8034944C 40 82 00 10 */ bne lbl_8034945C -/* 80349450 90 8D 92 28 */ stw r4, LastError(r13) -/* 80349454 38 60 00 01 */ li r3, 1 -/* 80349458 4E 80 00 20 */ blr -lbl_8034945C: -/* 8034945C 90 8D 92 28 */ stw r4, LastError(r13) -/* 80349460 38 60 00 02 */ li r3, 2 -/* 80349464 4E 80 00 20 */ blr -lbl_80349468: -/* 80349468 3C 04 FF FD */ addis r0, r4, 0xfffd -/* 8034946C 90 8D 92 28 */ stw r4, LastError(r13) -/* 80349470 28 00 11 00 */ cmplwi r0, 0x1100 -/* 80349474 41 82 00 14 */ beq lbl_80349488 -/* 80349478 80 6D 91 F8 */ lwz r3, executing(r13) -/* 8034947C 80 03 00 08 */ lwz r0, 8(r3) -/* 80349480 28 00 00 05 */ cmplwi r0, 5 -/* 80349484 40 82 00 0C */ bne lbl_80349490 -lbl_80349488: -/* 80349488 38 60 00 02 */ li r3, 2 -/* 8034948C 4E 80 00 20 */ blr -lbl_80349490: -/* 80349490 38 60 00 03 */ li r3, 3 -/* 80349494 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/DVDGetCurrentDiskID.s b/asm/dolphin/dvd/dvd/DVDGetCurrentDiskID.s deleted file mode 100644 index 3003fe5879..0000000000 --- a/asm/dolphin/dvd/dvd/DVDGetCurrentDiskID.s +++ /dev/null @@ -1,3 +0,0 @@ -lbl_8034B620: -/* 8034B620 3C 60 80 00 */ lis r3, 0x8000 -/* 8034B624 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/DVDReset.s b/asm/dolphin/dvd/dvd/DVDReset.s deleted file mode 100644 index ea05bb0395..0000000000 --- a/asm/dolphin/dvd/dvd/DVDReset.s +++ /dev/null @@ -1,18 +0,0 @@ -lbl_8034B138: -/* 8034B138 7C 08 02 A6 */ mflr r0 -/* 8034B13C 90 01 00 04 */ stw r0, 4(r1) -/* 8034B140 94 21 FF F8 */ stwu r1, -8(r1) -/* 8034B144 4B FF D2 45 */ bl DVDLowReset -/* 8034B148 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006000@ha */ -/* 8034B14C 38 00 00 2A */ li r0, 0x2a -/* 8034B150 90 03 60 00 */ stw r0, 0x6000(r3) /* 0xCC006000@l */ -/* 8034B154 38 83 60 00 */ addi r4, r3, 0x6000 -/* 8034B158 38 00 00 00 */ li r0, 0 -/* 8034B15C 80 63 60 04 */ lwz r3, 0x6004(r3) -/* 8034B160 90 64 00 04 */ stw r3, 4(r4) -/* 8034B164 90 0D 92 30 */ stw r0, ResetRequired(r13) -/* 8034B168 90 0D 92 20 */ stw r0, ResumeFromHere(r13) -/* 8034B16C 80 01 00 0C */ lwz r0, 0xc(r1) -/* 8034B170 38 21 00 08 */ addi r1, r1, 8 -/* 8034B174 7C 08 03 A6 */ mtlr r0 -/* 8034B178 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/DVDResume.s b/asm/dolphin/dvd/dvd/DVDResume.s deleted file mode 100644 index b85c2d76cb..0000000000 --- a/asm/dolphin/dvd/dvd/DVDResume.s +++ /dev/null @@ -1,22 +0,0 @@ -lbl_8034B284: -/* 8034B284 7C 08 02 A6 */ mflr r0 -/* 8034B288 90 01 00 04 */ stw r0, 4(r1) -/* 8034B28C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 8034B290 93 E1 00 0C */ stw r31, 0xc(r1) -/* 8034B294 4B FF 24 61 */ bl OSDisableInterrupts -/* 8034B298 38 80 00 00 */ li r4, 0 -/* 8034B29C 90 8D 92 04 */ stw r4, PauseFlag(r13) -/* 8034B2A0 7C 7F 1B 78 */ mr r31, r3 -/* 8034B2A4 80 0D 92 08 */ lwz r0, PausingFlag(r13) -/* 8034B2A8 2C 00 00 00 */ cmpwi r0, 0 -/* 8034B2AC 41 82 00 0C */ beq lbl_8034B2B8 -/* 8034B2B0 90 8D 92 08 */ stw r4, PausingFlag(r13) -/* 8034B2B4 4B FF ED F9 */ bl stateReady -lbl_8034B2B8: -/* 8034B2B8 7F E3 FB 78 */ mr r3, r31 -/* 8034B2BC 4B FF 24 61 */ bl OSRestoreInterrupts -/* 8034B2C0 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8034B2C4 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 8034B2C8 38 21 00 10 */ addi r1, r1, 0x10 -/* 8034B2CC 7C 08 03 A6 */ mtlr r0 -/* 8034B2D0 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/DVDSetAutoInvalidation.s b/asm/dolphin/dvd/dvd/DVDSetAutoInvalidation.s deleted file mode 100644 index 1ed38d42d3..0000000000 --- a/asm/dolphin/dvd/dvd/DVDSetAutoInvalidation.s +++ /dev/null @@ -1,5 +0,0 @@ -lbl_8034B274: -/* 8034B274 80 0D 84 6C */ lwz r0, autoInvalidation(r13) -/* 8034B278 90 6D 84 6C */ stw r3, autoInvalidation(r13) -/* 8034B27C 7C 03 03 78 */ mr r3, r0 -/* 8034B280 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/__DVDTestAlarm.s b/asm/dolphin/dvd/dvd/__DVDTestAlarm.s deleted file mode 100644 index 3b5499830d..0000000000 --- a/asm/dolphin/dvd/dvd/__DVDTestAlarm.s +++ /dev/null @@ -1,17 +0,0 @@ -lbl_8034B83C: -/* 8034B83C 7C 08 02 A6 */ mflr r0 -/* 8034B840 3C 80 80 45 */ lis r4, ResetAlarm@ha /* 0x8044C970@ha */ -/* 8034B844 90 01 00 04 */ stw r0, 4(r1) -/* 8034B848 38 04 C9 70 */ addi r0, r4, ResetAlarm@l /* 0x8044C970@l */ -/* 8034B84C 7C 03 00 40 */ cmplw r3, r0 -/* 8034B850 94 21 FF F8 */ stwu r1, -8(r1) -/* 8034B854 40 82 00 0C */ bne lbl_8034B860 -/* 8034B858 38 60 00 01 */ li r3, 1 -/* 8034B85C 48 00 00 08 */ b lbl_8034B864 -lbl_8034B860: -/* 8034B860 4B FF CC 59 */ bl __DVDLowTestAlarm -lbl_8034B864: -/* 8034B864 80 01 00 0C */ lwz r0, 0xc(r1) -/* 8034B868 38 21 00 08 */ addi r1, r1, 8 -/* 8034B86C 7C 08 03 A6 */ mtlr r0 -/* 8034B870 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/cbForCancelSync.s b/asm/dolphin/dvd/dvd/cbForCancelSync.s deleted file mode 100644 index 01815e1cae..0000000000 --- a/asm/dolphin/dvd/dvd/cbForCancelSync.s +++ /dev/null @@ -1,10 +0,0 @@ -lbl_8034B5FC: -/* 8034B5FC 7C 08 02 A6 */ mflr r0 -/* 8034B600 38 6D 91 F0 */ la r3, __DVDThreadQueue(r13) /* 80451770-_SDA_BASE_ */ -/* 8034B604 90 01 00 04 */ stw r0, 4(r1) -/* 8034B608 94 21 FF F8 */ stwu r1, -8(r1) -/* 8034B60C 4B FF 66 8D */ bl OSWakeupThread -/* 8034B610 80 01 00 0C */ lwz r0, 0xc(r1) -/* 8034B614 38 21 00 08 */ addi r1, r1, 8 -/* 8034B618 7C 08 03 A6 */ mtlr r0 -/* 8034B61C 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/cbForStateCheckID1.s b/asm/dolphin/dvd/dvd/cbForStateCheckID1.s deleted file mode 100644 index c960f005a9..0000000000 --- a/asm/dolphin/dvd/dvd/cbForStateCheckID1.s +++ /dev/null @@ -1,70 +0,0 @@ -lbl_80349B28: -/* 80349B28 7C 08 02 A6 */ mflr r0 -/* 80349B2C 28 03 00 10 */ cmplwi r3, 0x10 -/* 80349B30 90 01 00 04 */ stw r0, 4(r1) -/* 80349B34 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 80349B38 93 E1 00 14 */ stw r31, 0x14(r1) -/* 80349B3C 40 82 00 20 */ bne lbl_80349B5C -/* 80349B40 3C 60 01 23 */ lis r3, 0x0123 /* 0x01234568@ha */ -/* 80349B44 38 63 45 68 */ addi r3, r3, 0x4568 /* 0x01234568@l */ -/* 80349B48 48 00 20 41 */ bl __DVDStoreErrorCode -/* 80349B4C 48 00 15 ED */ bl DVDReset -/* 80349B50 38 60 00 00 */ li r3, 0 -/* 80349B54 4B FF F7 89 */ bl cbForStateError -/* 80349B58 48 00 00 B8 */ b lbl_80349C10 -lbl_80349B5C: -/* 80349B5C 54 60 07 BD */ rlwinm. r0, r3, 0, 0x1e, 0x1e -/* 80349B60 41 82 00 20 */ beq lbl_80349B80 -/* 80349B64 3C 60 01 23 */ lis r3, 0x0123 /* 0x01234567@ha */ -/* 80349B68 38 63 45 67 */ addi r3, r3, 0x4567 /* 0x01234567@l */ -/* 80349B6C 48 00 20 1D */ bl __DVDStoreErrorCode -/* 80349B70 3C 60 80 35 */ lis r3, cbForStateError@ha /* 0x803492DC@ha */ -/* 80349B74 38 63 92 DC */ addi r3, r3, cbForStateError@l /* 0x803492DC@l */ -/* 80349B78 4B FF E4 9D */ bl DVDLowStopMotor -/* 80349B7C 48 00 00 94 */ b lbl_80349C10 -lbl_80349B80: -/* 80349B80 38 80 00 00 */ li r4, 0 -/* 80349B84 90 8D 92 2C */ stw r4, NumInternalRetry(r13) -/* 80349B88 80 0D 92 18 */ lwz r0, Canceling(r13) -/* 80349B8C 28 00 00 00 */ cmplwi r0, 0 -/* 80349B90 41 82 00 68 */ beq lbl_80349BF8 -/* 80349B94 38 00 00 01 */ li r0, 1 -/* 80349B98 83 ED 91 F8 */ lwz r31, executing(r13) -/* 80349B9C 90 0D 92 20 */ stw r0, ResumeFromHere(r13) -/* 80349BA0 3C 60 80 45 */ lis r3, DummyCommandBlock@ha /* 0x8044C940@ha */ -/* 80349BA4 38 63 C9 40 */ addi r3, r3, DummyCommandBlock@l /* 0x8044C940@l */ -/* 80349BA8 90 8D 92 18 */ stw r4, Canceling(r13) -/* 80349BAC 38 00 00 0A */ li r0, 0xa -/* 80349BB0 90 6D 91 F8 */ stw r3, executing(r13) -/* 80349BB4 90 1F 00 0C */ stw r0, 0xc(r31) -/* 80349BB8 81 9F 00 28 */ lwz r12, 0x28(r31) -/* 80349BBC 28 0C 00 00 */ cmplwi r12, 0 -/* 80349BC0 41 82 00 14 */ beq lbl_80349BD4 -/* 80349BC4 7D 88 03 A6 */ mtlr r12 -/* 80349BC8 38 9F 00 00 */ addi r4, r31, 0 -/* 80349BCC 38 60 FF FD */ li r3, -3 -/* 80349BD0 4E 80 00 21 */ blrl -lbl_80349BD4: -/* 80349BD4 81 8D 92 1C */ lwz r12, CancelCallback(r13) -/* 80349BD8 28 0C 00 00 */ cmplwi r12, 0 -/* 80349BDC 41 82 00 14 */ beq lbl_80349BF0 -/* 80349BE0 7D 88 03 A6 */ mtlr r12 -/* 80349BE4 38 9F 00 00 */ addi r4, r31, 0 -/* 80349BE8 38 60 00 00 */ li r3, 0 -/* 80349BEC 4E 80 00 21 */ blrl -lbl_80349BF0: -/* 80349BF0 48 00 04 BD */ bl stateReady -/* 80349BF4 38 80 00 01 */ li r4, 1 -lbl_80349BF8: -/* 80349BF8 2C 04 00 00 */ cmpwi r4, 0 -/* 80349BFC 40 82 00 14 */ bne lbl_80349C10 -/* 80349C00 80 6D 91 F8 */ lwz r3, executing(r13) -/* 80349C04 38 00 00 06 */ li r0, 6 -/* 80349C08 90 03 00 0C */ stw r0, 0xc(r3) -/* 80349C0C 48 00 03 8D */ bl stateMotorStopped -lbl_80349C10: -/* 80349C10 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 80349C14 83 E1 00 14 */ lwz r31, 0x14(r1) -/* 80349C18 38 21 00 18 */ addi r1, r1, 0x18 -/* 80349C1C 7C 08 03 A6 */ mtlr r0 -/* 80349C20 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/cbForStateCheckID2a.s b/asm/dolphin/dvd/dvd/cbForStateCheckID2a.s deleted file mode 100644 index 3caafa6715..0000000000 --- a/asm/dolphin/dvd/dvd/cbForStateCheckID2a.s +++ /dev/null @@ -1,30 +0,0 @@ -lbl_80349A88: -/* 80349A88 7C 08 02 A6 */ mflr r0 -/* 80349A8C 28 03 00 10 */ cmplwi r3, 0x10 -/* 80349A90 90 01 00 04 */ stw r0, 4(r1) -/* 80349A94 94 21 FF F8 */ stwu r1, -8(r1) -/* 80349A98 40 82 00 20 */ bne lbl_80349AB8 -/* 80349A9C 3C 60 01 23 */ lis r3, 0x0123 /* 0x01234568@ha */ -/* 80349AA0 38 63 45 68 */ addi r3, r3, 0x4568 /* 0x01234568@l */ -/* 80349AA4 48 00 20 E5 */ bl __DVDStoreErrorCode -/* 80349AA8 48 00 16 91 */ bl DVDReset -/* 80349AAC 38 60 00 00 */ li r3, 0 -/* 80349AB0 4B FF F8 2D */ bl cbForStateError -/* 80349AB4 48 00 00 2C */ b lbl_80349AE0 -lbl_80349AB8: -/* 80349AB8 54 60 07 FF */ clrlwi. r0, r3, 0x1f -/* 80349ABC 41 82 00 18 */ beq lbl_80349AD4 -/* 80349AC0 38 00 00 00 */ li r0, 0 -/* 80349AC4 80 6D 91 F8 */ lwz r3, executing(r13) -/* 80349AC8 90 0D 92 2C */ stw r0, NumInternalRetry(r13) -/* 80349ACC 48 00 00 25 */ bl stateCheckID2 -/* 80349AD0 48 00 00 10 */ b lbl_80349AE0 -lbl_80349AD4: -/* 80349AD4 3C 60 80 35 */ lis r3, cbForStateGettingError@ha /* 0x80349498@ha */ -/* 80349AD8 38 63 94 98 */ addi r3, r3, cbForStateGettingError@l /* 0x80349498@l */ -/* 80349ADC 4B FF E5 C5 */ bl DVDLowRequestError -lbl_80349AE0: -/* 80349AE0 80 01 00 0C */ lwz r0, 0xc(r1) -/* 80349AE4 38 21 00 08 */ addi r1, r1, 8 -/* 80349AE8 7C 08 03 A6 */ mtlr r0 -/* 80349AEC 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/cbForStateCheckID3.s b/asm/dolphin/dvd/dvd/cbForStateCheckID3.s deleted file mode 100644 index f465122c3d..0000000000 --- a/asm/dolphin/dvd/dvd/cbForStateCheckID3.s +++ /dev/null @@ -1,67 +0,0 @@ -lbl_80349CFC: -/* 80349CFC 7C 08 02 A6 */ mflr r0 -/* 80349D00 28 03 00 10 */ cmplwi r3, 0x10 -/* 80349D04 90 01 00 04 */ stw r0, 4(r1) -/* 80349D08 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 80349D0C 93 E1 00 14 */ stw r31, 0x14(r1) -/* 80349D10 40 82 00 20 */ bne lbl_80349D30 -/* 80349D14 3C 60 01 23 */ lis r3, 0x0123 /* 0x01234568@ha */ -/* 80349D18 38 63 45 68 */ addi r3, r3, 0x4568 /* 0x01234568@l */ -/* 80349D1C 48 00 1E 6D */ bl __DVDStoreErrorCode -/* 80349D20 48 00 14 19 */ bl DVDReset -/* 80349D24 38 60 00 00 */ li r3, 0 -/* 80349D28 4B FF F5 B5 */ bl cbForStateError -/* 80349D2C 48 00 00 AC */ b lbl_80349DD8 -lbl_80349D30: -/* 80349D30 54 60 07 FF */ clrlwi. r0, r3, 0x1f -/* 80349D34 41 82 00 98 */ beq lbl_80349DCC -/* 80349D38 38 80 00 00 */ li r4, 0 -/* 80349D3C 90 8D 92 2C */ stw r4, NumInternalRetry(r13) -/* 80349D40 80 0D 92 18 */ lwz r0, Canceling(r13) -/* 80349D44 28 00 00 00 */ cmplwi r0, 0 -/* 80349D48 41 82 00 64 */ beq lbl_80349DAC -/* 80349D4C 90 8D 92 20 */ stw r4, ResumeFromHere(r13) -/* 80349D50 3C 60 80 45 */ lis r3, DummyCommandBlock@ha /* 0x8044C940@ha */ -/* 80349D54 83 ED 91 F8 */ lwz r31, executing(r13) -/* 80349D58 38 63 C9 40 */ addi r3, r3, DummyCommandBlock@l /* 0x8044C940@l */ -/* 80349D5C 90 8D 92 18 */ stw r4, Canceling(r13) -/* 80349D60 38 00 00 0A */ li r0, 0xa -/* 80349D64 90 6D 91 F8 */ stw r3, executing(r13) -/* 80349D68 90 1F 00 0C */ stw r0, 0xc(r31) -/* 80349D6C 81 9F 00 28 */ lwz r12, 0x28(r31) -/* 80349D70 28 0C 00 00 */ cmplwi r12, 0 -/* 80349D74 41 82 00 14 */ beq lbl_80349D88 -/* 80349D78 7D 88 03 A6 */ mtlr r12 -/* 80349D7C 38 9F 00 00 */ addi r4, r31, 0 -/* 80349D80 38 60 FF FD */ li r3, -3 -/* 80349D84 4E 80 00 21 */ blrl -lbl_80349D88: -/* 80349D88 81 8D 92 1C */ lwz r12, CancelCallback(r13) -/* 80349D8C 28 0C 00 00 */ cmplwi r12, 0 -/* 80349D90 41 82 00 14 */ beq lbl_80349DA4 -/* 80349D94 7D 88 03 A6 */ mtlr r12 -/* 80349D98 38 9F 00 00 */ addi r4, r31, 0 -/* 80349D9C 38 60 00 00 */ li r3, 0 -/* 80349DA0 4E 80 00 21 */ blrl -lbl_80349DA4: -/* 80349DA4 48 00 03 09 */ bl stateReady -/* 80349DA8 38 80 00 01 */ li r4, 1 -lbl_80349DAC: -/* 80349DAC 2C 04 00 00 */ cmpwi r4, 0 -/* 80349DB0 40 82 00 28 */ bne lbl_80349DD8 -/* 80349DB4 80 6D 91 F8 */ lwz r3, executing(r13) -/* 80349DB8 38 00 00 01 */ li r0, 1 -/* 80349DBC 90 03 00 0C */ stw r0, 0xc(r3) -/* 80349DC0 80 6D 91 F8 */ lwz r3, executing(r13) -/* 80349DC4 48 00 05 D1 */ bl stateBusy -/* 80349DC8 48 00 00 10 */ b lbl_80349DD8 -lbl_80349DCC: -/* 80349DCC 3C 60 80 35 */ lis r3, cbForStateGettingError@ha /* 0x80349498@ha */ -/* 80349DD0 38 63 94 98 */ addi r3, r3, cbForStateGettingError@l /* 0x80349498@l */ -/* 80349DD4 4B FF E2 CD */ bl DVDLowRequestError -lbl_80349DD8: -/* 80349DD8 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 80349DDC 83 E1 00 14 */ lwz r31, 0x14(r1) -/* 80349DE0 38 21 00 18 */ addi r1, r1, 0x18 -/* 80349DE4 7C 08 03 A6 */ mtlr r0 -/* 80349DE8 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/cbForStateCoverClosed.s b/asm/dolphin/dvd/dvd/cbForStateCoverClosed.s deleted file mode 100644 index 18fdee10a0..0000000000 --- a/asm/dolphin/dvd/dvd/cbForStateCoverClosed.s +++ /dev/null @@ -1,29 +0,0 @@ -lbl_80349F34: -/* 80349F34 7C 08 02 A6 */ mflr r0 -/* 80349F38 28 03 00 10 */ cmplwi r3, 0x10 -/* 80349F3C 90 01 00 04 */ stw r0, 4(r1) -/* 80349F40 94 21 FF F8 */ stwu r1, -8(r1) -/* 80349F44 40 82 00 20 */ bne lbl_80349F64 -/* 80349F48 3C 60 01 23 */ lis r3, 0x0123 /* 0x01234568@ha */ -/* 80349F4C 38 63 45 68 */ addi r3, r3, 0x4568 /* 0x01234568@l */ -/* 80349F50 48 00 1C 39 */ bl __DVDStoreErrorCode -/* 80349F54 48 00 11 E5 */ bl DVDReset -/* 80349F58 38 60 00 00 */ li r3, 0 -/* 80349F5C 4B FF F3 81 */ bl cbForStateError -/* 80349F60 48 00 00 28 */ b lbl_80349F88 -lbl_80349F64: -/* 80349F64 54 60 07 FF */ clrlwi. r0, r3, 0x1f -/* 80349F68 41 82 00 14 */ beq lbl_80349F7C -/* 80349F6C 38 00 00 00 */ li r0, 0 -/* 80349F70 90 0D 92 2C */ stw r0, NumInternalRetry(r13) -/* 80349F74 4B FF F9 CD */ bl stateCheckID -/* 80349F78 48 00 00 10 */ b lbl_80349F88 -lbl_80349F7C: -/* 80349F7C 3C 60 80 35 */ lis r3, cbForStateGettingError@ha /* 0x80349498@ha */ -/* 80349F80 38 63 94 98 */ addi r3, r3, cbForStateGettingError@l /* 0x80349498@l */ -/* 80349F84 4B FF E1 1D */ bl DVDLowRequestError -lbl_80349F88: -/* 80349F88 80 01 00 0C */ lwz r0, 0xc(r1) -/* 80349F8C 38 21 00 08 */ addi r1, r1, 8 -/* 80349F90 7C 08 03 A6 */ mtlr r0 -/* 80349F94 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/cbForStateError.s b/asm/dolphin/dvd/dvd/cbForStateError.s deleted file mode 100644 index 78e6a0f288..0000000000 --- a/asm/dolphin/dvd/dvd/cbForStateError.s +++ /dev/null @@ -1,48 +0,0 @@ -lbl_803492DC: -/* 803492DC 7C 08 02 A6 */ mflr r0 -/* 803492E0 28 03 00 10 */ cmplwi r3, 0x10 -/* 803492E4 90 01 00 04 */ stw r0, 4(r1) -/* 803492E8 38 00 FF FF */ li r0, -1 -/* 803492EC 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 803492F0 93 E1 00 14 */ stw r31, 0x14(r1) -/* 803492F4 80 8D 91 F8 */ lwz r4, executing(r13) -/* 803492F8 90 04 00 0C */ stw r0, 0xc(r4) -/* 803492FC 40 82 00 0C */ bne lbl_80349308 -/* 80349300 48 00 00 89 */ bl stateTimeout -/* 80349304 48 00 00 70 */ b lbl_80349374 -lbl_80349308: -/* 80349308 48 00 29 F5 */ bl __DVDPrintFatalMessage -/* 8034930C 3C 60 80 45 */ lis r3, DummyCommandBlock@ha /* 0x8044C940@ha */ -/* 80349310 83 ED 91 F8 */ lwz r31, executing(r13) -/* 80349314 38 03 C9 40 */ addi r0, r3, DummyCommandBlock@l /* 0x8044C940@l */ -/* 80349318 38 60 00 01 */ li r3, 1 -/* 8034931C 90 0D 91 F8 */ stw r0, executing(r13) -/* 80349320 90 6D 92 10 */ stw r3, FatalErrorFlag(r13) -/* 80349324 81 9F 00 28 */ lwz r12, 0x28(r31) -/* 80349328 28 0C 00 00 */ cmplwi r12, 0 -/* 8034932C 41 82 00 14 */ beq lbl_80349340 -/* 80349330 7D 88 03 A6 */ mtlr r12 -/* 80349334 38 9F 00 00 */ addi r4, r31, 0 -/* 80349338 38 60 FF FF */ li r3, -1 -/* 8034933C 4E 80 00 21 */ blrl -lbl_80349340: -/* 80349340 80 0D 92 18 */ lwz r0, Canceling(r13) -/* 80349344 28 00 00 00 */ cmplwi r0, 0 -/* 80349348 41 82 00 28 */ beq lbl_80349370 -/* 8034934C 81 8D 92 1C */ lwz r12, CancelCallback(r13) -/* 80349350 38 00 00 00 */ li r0, 0 -/* 80349354 90 0D 92 18 */ stw r0, Canceling(r13) -/* 80349358 28 0C 00 00 */ cmplwi r12, 0 -/* 8034935C 41 82 00 14 */ beq lbl_80349370 -/* 80349360 7D 88 03 A6 */ mtlr r12 -/* 80349364 38 9F 00 00 */ addi r4, r31, 0 -/* 80349368 38 60 00 00 */ li r3, 0 -/* 8034936C 4E 80 00 21 */ blrl -lbl_80349370: -/* 80349370 48 00 0D 3D */ bl stateReady -lbl_80349374: -/* 80349374 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 80349378 83 E1 00 14 */ lwz r31, 0x14(r1) -/* 8034937C 38 21 00 18 */ addi r1, r1, 0x18 -/* 80349380 7C 08 03 A6 */ mtlr r0 -/* 80349384 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/cbForStateGoToRetry.s b/asm/dolphin/dvd/dvd/cbForStateGoToRetry.s deleted file mode 100644 index 1210c469d8..0000000000 --- a/asm/dolphin/dvd/dvd/cbForStateGoToRetry.s +++ /dev/null @@ -1,90 +0,0 @@ -lbl_80349800: -/* 80349800 7C 08 02 A6 */ mflr r0 -/* 80349804 28 03 00 10 */ cmplwi r3, 0x10 -/* 80349808 90 01 00 04 */ stw r0, 4(r1) -/* 8034980C 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 80349810 93 E1 00 14 */ stw r31, 0x14(r1) -/* 80349814 40 82 00 20 */ bne lbl_80349834 -/* 80349818 3C 60 01 23 */ lis r3, 0x0123 /* 0x01234568@ha */ -/* 8034981C 38 63 45 68 */ addi r3, r3, 0x4568 /* 0x01234568@l */ -/* 80349820 48 00 23 69 */ bl __DVDStoreErrorCode -/* 80349824 48 00 19 15 */ bl DVDReset -/* 80349828 38 60 00 00 */ li r3, 0 -/* 8034982C 4B FF FA B1 */ bl cbForStateError -/* 80349830 48 00 00 FC */ b lbl_8034992C -lbl_80349834: -/* 80349834 54 60 07 BD */ rlwinm. r0, r3, 0, 0x1e, 0x1e -/* 80349838 41 82 00 20 */ beq lbl_80349858 -/* 8034983C 3C 60 01 23 */ lis r3, 0x0123 /* 0x01234567@ha */ -/* 80349840 38 63 45 67 */ addi r3, r3, 0x4567 /* 0x01234567@l */ -/* 80349844 48 00 23 45 */ bl __DVDStoreErrorCode -/* 80349848 3C 60 80 35 */ lis r3, cbForStateError@ha /* 0x803492DC@ha */ -/* 8034984C 38 63 92 DC */ addi r3, r3, cbForStateError@l /* 0x803492DC@l */ -/* 80349850 4B FF E7 C5 */ bl DVDLowStopMotor -/* 80349854 48 00 00 D8 */ b lbl_8034992C -lbl_80349858: -/* 80349858 38 00 00 00 */ li r0, 0 -/* 8034985C 90 0D 92 2C */ stw r0, NumInternalRetry(r13) -/* 80349860 80 0D 92 14 */ lwz r0, CurrCommand(r13) -/* 80349864 28 00 00 04 */ cmplwi r0, 4 -/* 80349868 41 82 00 28 */ beq lbl_80349890 -/* 8034986C 80 0D 92 14 */ lwz r0, CurrCommand(r13) -/* 80349870 28 00 00 05 */ cmplwi r0, 5 -/* 80349874 41 82 00 1C */ beq lbl_80349890 -/* 80349878 80 0D 92 14 */ lwz r0, CurrCommand(r13) -/* 8034987C 28 00 00 0D */ cmplwi r0, 0xd -/* 80349880 41 82 00 10 */ beq lbl_80349890 -/* 80349884 80 0D 92 14 */ lwz r0, CurrCommand(r13) -/* 80349888 28 00 00 0F */ cmplwi r0, 0xf -/* 8034988C 40 82 00 0C */ bne lbl_80349898 -lbl_80349890: -/* 80349890 38 00 00 01 */ li r0, 1 -/* 80349894 90 0D 92 30 */ stw r0, ResetRequired(r13) -lbl_80349898: -/* 80349898 80 0D 92 18 */ lwz r0, Canceling(r13) -/* 8034989C 28 00 00 00 */ cmplwi r0, 0 -/* 803498A0 41 82 00 70 */ beq lbl_80349910 -/* 803498A4 38 00 00 02 */ li r0, 2 -/* 803498A8 83 ED 91 F8 */ lwz r31, executing(r13) -/* 803498AC 3C 60 80 45 */ lis r3, DummyCommandBlock@ha /* 0x8044C940@ha */ -/* 803498B0 90 0D 92 20 */ stw r0, ResumeFromHere(r13) -/* 803498B4 38 03 C9 40 */ addi r0, r3, DummyCommandBlock@l /* 0x8044C940@l */ -/* 803498B8 38 60 00 00 */ li r3, 0 -/* 803498BC 90 0D 91 F8 */ stw r0, executing(r13) -/* 803498C0 38 00 00 0A */ li r0, 0xa -/* 803498C4 90 6D 92 18 */ stw r3, Canceling(r13) -/* 803498C8 90 1F 00 0C */ stw r0, 0xc(r31) -/* 803498CC 81 9F 00 28 */ lwz r12, 0x28(r31) -/* 803498D0 28 0C 00 00 */ cmplwi r12, 0 -/* 803498D4 41 82 00 14 */ beq lbl_803498E8 -/* 803498D8 7D 88 03 A6 */ mtlr r12 -/* 803498DC 38 9F 00 00 */ addi r4, r31, 0 -/* 803498E0 38 60 FF FD */ li r3, -3 -/* 803498E4 4E 80 00 21 */ blrl -lbl_803498E8: -/* 803498E8 81 8D 92 1C */ lwz r12, CancelCallback(r13) -/* 803498EC 28 0C 00 00 */ cmplwi r12, 0 -/* 803498F0 41 82 00 14 */ beq lbl_80349904 -/* 803498F4 7D 88 03 A6 */ mtlr r12 -/* 803498F8 38 9F 00 00 */ addi r4, r31, 0 -/* 803498FC 38 60 00 00 */ li r3, 0 -/* 80349900 4E 80 00 21 */ blrl -lbl_80349904: -/* 80349904 48 00 07 A9 */ bl stateReady -/* 80349908 38 00 00 01 */ li r0, 1 -/* 8034990C 48 00 00 08 */ b lbl_80349914 -lbl_80349910: -/* 80349910 38 00 00 00 */ li r0, 0 -lbl_80349914: -/* 80349914 2C 00 00 00 */ cmpwi r0, 0 -/* 80349918 40 82 00 14 */ bne lbl_8034992C -/* 8034991C 80 6D 91 F8 */ lwz r3, executing(r13) -/* 80349920 38 00 00 0B */ li r0, 0xb -/* 80349924 90 03 00 0C */ stw r0, 0xc(r3) -/* 80349928 48 00 06 71 */ bl stateMotorStopped -lbl_8034992C: -/* 8034992C 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 80349930 83 E1 00 14 */ lwz r31, 0x14(r1) -/* 80349934 38 21 00 18 */ addi r1, r1, 0x18 -/* 80349938 7C 08 03 A6 */ mtlr r0 -/* 8034993C 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/cbForStateReadingFST.s b/asm/dolphin/dvd/dvd/cbForStateReadingFST.s deleted file mode 100644 index dc16101409..0000000000 --- a/asm/dolphin/dvd/dvd/cbForStateReadingFST.s +++ /dev/null @@ -1,37 +0,0 @@ -lbl_8034925C: -/* 8034925C 7C 08 02 A6 */ mflr r0 -/* 80349260 28 03 00 10 */ cmplwi r3, 0x10 -/* 80349264 90 01 00 04 */ stw r0, 4(r1) -/* 80349268 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 8034926C 93 E1 00 14 */ stw r31, 0x14(r1) -/* 80349270 40 82 00 0C */ bne lbl_8034927C -/* 80349274 48 00 01 15 */ bl stateTimeout -/* 80349278 48 00 00 50 */ b lbl_803492C8 -lbl_8034927C: -/* 8034927C 54 60 07 FF */ clrlwi. r0, r3, 0x1f -/* 80349280 41 82 00 44 */ beq lbl_803492C4 -/* 80349284 3B E0 00 00 */ li r31, 0 -/* 80349288 93 ED 92 2C */ stw r31, NumInternalRetry(r13) -/* 8034928C 4B FF F2 65 */ bl __DVDFSInit -/* 80349290 3C 60 80 45 */ lis r3, DummyCommandBlock@ha /* 0x8044C940@ha */ -/* 80349294 80 8D 91 F8 */ lwz r4, executing(r13) -/* 80349298 38 03 C9 40 */ addi r0, r3, DummyCommandBlock@l /* 0x8044C940@l */ -/* 8034929C 90 0D 91 F8 */ stw r0, executing(r13) -/* 803492A0 93 E4 00 0C */ stw r31, 0xc(r4) -/* 803492A4 81 84 00 28 */ lwz r12, 0x28(r4) -/* 803492A8 28 0C 00 00 */ cmplwi r12, 0 -/* 803492AC 41 82 00 10 */ beq lbl_803492BC -/* 803492B0 7D 88 03 A6 */ mtlr r12 -/* 803492B4 38 60 00 00 */ li r3, 0 -/* 803492B8 4E 80 00 21 */ blrl -lbl_803492BC: -/* 803492BC 48 00 0D F1 */ bl stateReady -/* 803492C0 48 00 00 08 */ b lbl_803492C8 -lbl_803492C4: -/* 803492C4 48 00 00 F9 */ bl stateGettingError -lbl_803492C8: -/* 803492C8 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 803492CC 83 E1 00 14 */ lwz r31, 0x14(r1) -/* 803492D0 38 21 00 18 */ addi r1, r1, 0x18 -/* 803492D4 7C 08 03 A6 */ mtlr r0 -/* 803492D8 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/cbForUnrecoveredError.s b/asm/dolphin/dvd/dvd/cbForUnrecoveredError.s deleted file mode 100644 index c6e001fff0..0000000000 --- a/asm/dolphin/dvd/dvd/cbForUnrecoveredError.s +++ /dev/null @@ -1,27 +0,0 @@ -lbl_803496FC: -/* 803496FC 7C 08 02 A6 */ mflr r0 -/* 80349700 28 03 00 10 */ cmplwi r3, 0x10 -/* 80349704 90 01 00 04 */ stw r0, 4(r1) -/* 80349708 94 21 FF F8 */ stwu r1, -8(r1) -/* 8034970C 40 82 00 20 */ bne lbl_8034972C -/* 80349710 3C 60 01 23 */ lis r3, 0x0123 /* 0x01234568@ha */ -/* 80349714 38 63 45 68 */ addi r3, r3, 0x4568 /* 0x01234568@l */ -/* 80349718 48 00 24 71 */ bl __DVDStoreErrorCode -/* 8034971C 48 00 1A 1D */ bl DVDReset -/* 80349720 38 60 00 00 */ li r3, 0 -/* 80349724 4B FF FB B9 */ bl cbForStateError -/* 80349728 48 00 00 20 */ b lbl_80349748 -lbl_8034972C: -/* 8034972C 54 60 07 FF */ clrlwi. r0, r3, 0x1f -/* 80349730 41 82 00 0C */ beq lbl_8034973C -/* 80349734 48 00 00 A5 */ bl stateGoToRetry -/* 80349738 48 00 00 10 */ b lbl_80349748 -lbl_8034973C: -/* 8034973C 3C 60 80 35 */ lis r3, cbForUnrecoveredErrorRetry@ha /* 0x80349758@ha */ -/* 80349740 38 63 97 58 */ addi r3, r3, cbForUnrecoveredErrorRetry@l /* 0x80349758@l */ -/* 80349744 4B FF E9 5D */ bl DVDLowRequestError -lbl_80349748: -/* 80349748 80 01 00 0C */ lwz r0, 0xc(r1) -/* 8034974C 38 21 00 08 */ addi r1, r1, 8 -/* 80349750 7C 08 03 A6 */ mtlr r0 -/* 80349754 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/cbForUnrecoveredErrorRetry.s b/asm/dolphin/dvd/dvd/cbForUnrecoveredErrorRetry.s deleted file mode 100644 index 829bccd741..0000000000 --- a/asm/dolphin/dvd/dvd/cbForUnrecoveredErrorRetry.s +++ /dev/null @@ -1,36 +0,0 @@ -lbl_80349758: -/* 80349758 7C 08 02 A6 */ mflr r0 -/* 8034975C 28 03 00 10 */ cmplwi r3, 0x10 -/* 80349760 90 01 00 04 */ stw r0, 4(r1) -/* 80349764 94 21 FF F8 */ stwu r1, -8(r1) -/* 80349768 40 82 00 20 */ bne lbl_80349788 -/* 8034976C 3C 60 01 23 */ lis r3, 0x0123 /* 0x01234568@ha */ -/* 80349770 38 63 45 68 */ addi r3, r3, 0x4568 /* 0x01234568@l */ -/* 80349774 48 00 24 15 */ bl __DVDStoreErrorCode -/* 80349778 48 00 19 C1 */ bl DVDReset -/* 8034977C 38 60 00 00 */ li r3, 0 -/* 80349780 4B FF FB 5D */ bl cbForStateError -/* 80349784 48 00 00 44 */ b lbl_803497C8 -lbl_80349788: -/* 80349788 54 60 07 BD */ rlwinm. r0, r3, 0, 0x1e, 0x1e -/* 8034978C 41 82 00 20 */ beq lbl_803497AC -/* 80349790 3C 60 01 23 */ lis r3, 0x0123 /* 0x01234567@ha */ -/* 80349794 38 63 45 67 */ addi r3, r3, 0x4567 /* 0x01234567@l */ -/* 80349798 48 00 23 F1 */ bl __DVDStoreErrorCode -/* 8034979C 3C 60 80 35 */ lis r3, cbForStateError@ha /* 0x803492DC@ha */ -/* 803497A0 38 63 92 DC */ addi r3, r3, cbForStateError@l /* 0x803492DC@l */ -/* 803497A4 4B FF E8 71 */ bl DVDLowStopMotor -/* 803497A8 48 00 00 20 */ b lbl_803497C8 -lbl_803497AC: -/* 803497AC 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006000@ha */ -/* 803497B0 38 63 60 00 */ addi r3, r3, 0x6000 /* 0xCC006000@l */ -/* 803497B4 80 63 00 20 */ lwz r3, 0x20(r3) -/* 803497B8 48 00 23 D1 */ bl __DVDStoreErrorCode -/* 803497BC 3C 60 80 35 */ lis r3, cbForStateError@ha /* 0x803492DC@ha */ -/* 803497C0 38 63 92 DC */ addi r3, r3, cbForStateError@l /* 0x803492DC@l */ -/* 803497C4 4B FF E8 51 */ bl DVDLowStopMotor -lbl_803497C8: -/* 803497C8 80 01 00 0C */ lwz r0, 0xc(r1) -/* 803497CC 38 21 00 08 */ addi r1, r1, 8 -/* 803497D0 7C 08 03 A6 */ mtlr r0 -/* 803497D4 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/stateBusy.s b/asm/dolphin/dvd/dvd/stateBusy.s deleted file mode 100644 index d21fcba31b..0000000000 --- a/asm/dolphin/dvd/dvd/stateBusy.s +++ /dev/null @@ -1,216 +0,0 @@ -lbl_8034A394: -/* 8034A394 7C 08 02 A6 */ mflr r0 -/* 8034A398 3C 80 80 35 */ lis r4, stateBusy@ha /* 0x8034A394@ha */ -/* 8034A39C 90 01 00 04 */ stw r0, 4(r1) -/* 8034A3A0 38 04 A3 94 */ addi r0, r4, stateBusy@l /* 0x8034A394@l */ -/* 8034A3A4 7C 67 1B 78 */ mr r7, r3 -/* 8034A3A8 94 21 FF F8 */ stwu r1, -8(r1) -/* 8034A3AC 90 0D 92 40 */ stw r0, LastState(r13) -/* 8034A3B0 80 03 00 08 */ lwz r0, 8(r3) -/* 8034A3B4 28 00 00 10 */ cmplwi r0, 0x10 -/* 8034A3B8 41 81 02 F4 */ bgt lbl_8034A6AC -/* 8034A3BC 3C 60 80 3D */ lis r3, lit_359@ha /* 0x803D15A8@ha */ -/* 8034A3C0 38 63 15 A8 */ addi r3, r3, lit_359@l /* 0x803D15A8@l */ -/* 8034A3C4 54 00 10 3A */ slwi r0, r0, 2 -/* 8034A3C8 7C 03 00 2E */ lwzx r0, r3, r0 -/* 8034A3CC 7C 09 03 A6 */ mtctr r0 -/* 8034A3D0 4E 80 04 20 */ bctr -/* 8034A3D4 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006004@ha */ -/* 8034A3D8 80 03 60 04 */ lwz r0, 0x6004(r3) /* 0xCC006004@l */ -/* 8034A3DC 38 A3 60 00 */ addi r5, r3, 0x6000 -/* 8034A3E0 3C 60 80 35 */ lis r3, cbForStateBusy@ha /* 0x8034A6D4@ha */ -/* 8034A3E4 90 05 00 04 */ stw r0, 4(r5) -/* 8034A3E8 38 00 00 20 */ li r0, 0x20 -/* 8034A3EC 38 83 A6 D4 */ addi r4, r3, cbForStateBusy@l /* 0x8034A6D4@l */ -/* 8034A3F0 90 07 00 1C */ stw r0, 0x1c(r7) -/* 8034A3F4 80 67 00 18 */ lwz r3, 0x18(r7) -/* 8034A3F8 4B FF DB 79 */ bl DVDLowReadDiskID -/* 8034A3FC 48 00 02 C8 */ b lbl_8034A6C4 -/* 8034A400 80 07 00 14 */ lwz r0, 0x14(r7) -/* 8034A404 28 00 00 00 */ cmplwi r0, 0 -/* 8034A408 40 82 00 3C */ bne lbl_8034A444 -/* 8034A40C 3C 60 80 45 */ lis r3, DummyCommandBlock@ha /* 0x8044C940@ha */ -/* 8034A410 80 8D 91 F8 */ lwz r4, executing(r13) -/* 8034A414 38 03 C9 40 */ addi r0, r3, DummyCommandBlock@l /* 0x8044C940@l */ -/* 8034A418 90 0D 91 F8 */ stw r0, executing(r13) -/* 8034A41C 38 00 00 00 */ li r0, 0 -/* 8034A420 90 04 00 0C */ stw r0, 0xc(r4) -/* 8034A424 81 84 00 28 */ lwz r12, 0x28(r4) -/* 8034A428 28 0C 00 00 */ cmplwi r12, 0 -/* 8034A42C 41 82 00 10 */ beq lbl_8034A43C -/* 8034A430 7D 88 03 A6 */ mtlr r12 -/* 8034A434 38 60 00 00 */ li r3, 0 -/* 8034A438 4E 80 00 21 */ blrl -lbl_8034A43C: -/* 8034A43C 4B FF FC 71 */ bl stateReady -/* 8034A440 48 00 02 84 */ b lbl_8034A6C4 -lbl_8034A444: -/* 8034A444 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006000@ha */ -/* 8034A448 38 63 60 00 */ addi r3, r3, 0x6000 /* 0xCC006000@l */ -/* 8034A44C 80 03 00 04 */ lwz r0, 4(r3) -/* 8034A450 3C 80 00 08 */ lis r4, 8 -/* 8034A454 90 03 00 04 */ stw r0, 4(r3) -/* 8034A458 80 67 00 20 */ lwz r3, 0x20(r7) -/* 8034A45C 80 07 00 14 */ lwz r0, 0x14(r7) -/* 8034A460 7C 03 00 50 */ subf r0, r3, r0 -/* 8034A464 7C 00 20 40 */ cmplw r0, r4 -/* 8034A468 40 81 00 08 */ ble lbl_8034A470 -/* 8034A46C 48 00 00 08 */ b lbl_8034A474 -lbl_8034A470: -/* 8034A470 7C 04 03 78 */ mr r4, r0 -lbl_8034A474: -/* 8034A474 90 87 00 1C */ stw r4, 0x1c(r7) -/* 8034A478 3C 60 80 35 */ lis r3, cbForStateBusy@ha /* 0x8034A6D4@ha */ -/* 8034A47C 38 C3 A6 D4 */ addi r6, r3, cbForStateBusy@l /* 0x8034A6D4@l */ -/* 8034A480 80 A7 00 20 */ lwz r5, 0x20(r7) -/* 8034A484 80 67 00 18 */ lwz r3, 0x18(r7) -/* 8034A488 80 07 00 10 */ lwz r0, 0x10(r7) -/* 8034A48C 7C 63 2A 14 */ add r3, r3, r5 -/* 8034A490 80 87 00 1C */ lwz r4, 0x1c(r7) -/* 8034A494 7C A0 2A 14 */ add r5, r0, r5 -/* 8034A498 4B FF D7 81 */ bl DVDLowRead -/* 8034A49C 48 00 02 28 */ b lbl_8034A6C4 -/* 8034A4A0 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006004@ha */ -/* 8034A4A4 80 03 60 04 */ lwz r0, 0x6004(r3) /* 0xCC006004@l */ -/* 8034A4A8 38 A3 60 00 */ addi r5, r3, 0x6000 -/* 8034A4AC 3C 60 80 35 */ lis r3, cbForStateBusy@ha /* 0x8034A6D4@ha */ -/* 8034A4B0 90 05 00 04 */ stw r0, 4(r5) -/* 8034A4B4 38 83 A6 D4 */ addi r4, r3, cbForStateBusy@l /* 0x8034A6D4@l */ -/* 8034A4B8 80 67 00 10 */ lwz r3, 0x10(r7) -/* 8034A4BC 4B FF D9 F5 */ bl DVDLowSeek -/* 8034A4C0 48 00 02 04 */ b lbl_8034A6C4 -/* 8034A4C4 3C 60 80 35 */ lis r3, cbForStateBusy@ha /* 0x8034A6D4@ha */ -/* 8034A4C8 38 63 A6 D4 */ addi r3, r3, cbForStateBusy@l /* 0x8034A6D4@l */ -/* 8034A4CC 4B FF DB 49 */ bl DVDLowStopMotor -/* 8034A4D0 48 00 01 F4 */ b lbl_8034A6C4 -/* 8034A4D4 3C 60 80 35 */ lis r3, cbForStateBusy@ha /* 0x8034A6D4@ha */ -/* 8034A4D8 38 63 A6 D4 */ addi r3, r3, cbForStateBusy@l /* 0x8034A6D4@l */ -/* 8034A4DC 4B FF DB 39 */ bl DVDLowStopMotor -/* 8034A4E0 48 00 01 E4 */ b lbl_8034A6C4 -/* 8034A4E4 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006000@ha */ -/* 8034A4E8 38 63 60 00 */ addi r3, r3, 0x6000 /* 0xCC006000@l */ -/* 8034A4EC 80 03 00 04 */ lwz r0, 4(r3) -/* 8034A4F0 90 03 00 04 */ stw r0, 4(r3) -/* 8034A4F4 80 0D 92 0C */ lwz r0, AutoFinishing(r13) -/* 8034A4F8 2C 00 00 00 */ cmpwi r0, 0 -/* 8034A4FC 41 82 00 24 */ beq lbl_8034A520 -/* 8034A500 80 AD 91 F8 */ lwz r5, executing(r13) -/* 8034A504 38 00 00 00 */ li r0, 0 -/* 8034A508 3C 60 80 35 */ lis r3, cbForStateBusy@ha /* 0x8034A6D4@ha */ -/* 8034A50C 90 05 00 1C */ stw r0, 0x1c(r5) -/* 8034A510 38 83 A6 D4 */ addi r4, r3, cbForStateBusy@l /* 0x8034A6D4@l */ -/* 8034A514 38 60 00 00 */ li r3, 0 -/* 8034A518 4B FF DD 49 */ bl DVDLowRequestAudioStatus -/* 8034A51C 48 00 01 A8 */ b lbl_8034A6C4 -lbl_8034A520: -/* 8034A520 80 8D 91 F8 */ lwz r4, executing(r13) -/* 8034A524 38 00 00 01 */ li r0, 1 -/* 8034A528 3C 60 80 35 */ lis r3, cbForStateBusy@ha /* 0x8034A6D4@ha */ -/* 8034A52C 90 04 00 1C */ stw r0, 0x1c(r4) -/* 8034A530 38 C3 A6 D4 */ addi r6, r3, cbForStateBusy@l /* 0x8034A6D4@l */ -/* 8034A534 38 60 00 00 */ li r3, 0 -/* 8034A538 80 87 00 14 */ lwz r4, 0x14(r7) -/* 8034A53C 80 A7 00 10 */ lwz r5, 0x10(r7) -/* 8034A540 4B FF DC 89 */ bl DVDLowAudioStream -/* 8034A544 48 00 01 80 */ b lbl_8034A6C4 -/* 8034A548 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006004@ha */ -/* 8034A54C 80 03 60 04 */ lwz r0, 0x6004(r3) /* 0xCC006004@l */ -/* 8034A550 38 83 60 00 */ addi r4, r3, 0x6000 -/* 8034A554 3C 60 80 35 */ lis r3, cbForStateBusy@ha /* 0x8034A6D4@ha */ -/* 8034A558 90 04 00 04 */ stw r0, 4(r4) -/* 8034A55C 38 C3 A6 D4 */ addi r6, r3, cbForStateBusy@l /* 0x8034A6D4@l */ -/* 8034A560 3C 60 00 01 */ lis r3, 1 -/* 8034A564 38 80 00 00 */ li r4, 0 -/* 8034A568 38 A0 00 00 */ li r5, 0 -/* 8034A56C 4B FF DC 5D */ bl DVDLowAudioStream -/* 8034A570 48 00 01 54 */ b lbl_8034A6C4 -/* 8034A574 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006004@ha */ -/* 8034A578 80 03 60 04 */ lwz r0, 0x6004(r3) /* 0xCC006004@l */ -/* 8034A57C 38 83 60 00 */ addi r4, r3, 0x6000 -/* 8034A580 3C 60 80 35 */ lis r3, cbForStateBusy@ha /* 0x8034A6D4@ha */ -/* 8034A584 90 04 00 04 */ stw r0, 4(r4) -/* 8034A588 38 00 00 01 */ li r0, 1 -/* 8034A58C 38 C3 A6 D4 */ addi r6, r3, cbForStateBusy@l /* 0x8034A6D4@l */ -/* 8034A590 90 0D 92 0C */ stw r0, AutoFinishing(r13) -/* 8034A594 38 60 00 00 */ li r3, 0 -/* 8034A598 38 80 00 00 */ li r4, 0 -/* 8034A59C 38 A0 00 00 */ li r5, 0 -/* 8034A5A0 4B FF DC 29 */ bl DVDLowAudioStream -/* 8034A5A4 48 00 01 20 */ b lbl_8034A6C4 -/* 8034A5A8 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006004@ha */ -/* 8034A5AC 80 03 60 04 */ lwz r0, 0x6004(r3) /* 0xCC006004@l */ -/* 8034A5B0 38 A3 60 00 */ addi r5, r3, 0x6000 -/* 8034A5B4 3C 60 80 35 */ lis r3, cbForStateBusy@ha /* 0x8034A6D4@ha */ -/* 8034A5B8 90 05 00 04 */ stw r0, 4(r5) -/* 8034A5BC 38 83 A6 D4 */ addi r4, r3, cbForStateBusy@l /* 0x8034A6D4@l */ -/* 8034A5C0 38 60 00 00 */ li r3, 0 -/* 8034A5C4 4B FF DC 9D */ bl DVDLowRequestAudioStatus -/* 8034A5C8 48 00 00 FC */ b lbl_8034A6C4 -/* 8034A5CC 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006004@ha */ -/* 8034A5D0 80 03 60 04 */ lwz r0, 0x6004(r3) /* 0xCC006004@l */ -/* 8034A5D4 38 A3 60 00 */ addi r5, r3, 0x6000 -/* 8034A5D8 3C 60 80 35 */ lis r3, cbForStateBusy@ha /* 0x8034A6D4@ha */ -/* 8034A5DC 90 05 00 04 */ stw r0, 4(r5) -/* 8034A5E0 38 83 A6 D4 */ addi r4, r3, cbForStateBusy@l /* 0x8034A6D4@l */ -/* 8034A5E4 3C 60 00 01 */ lis r3, 1 -/* 8034A5E8 4B FF DC 79 */ bl DVDLowRequestAudioStatus -/* 8034A5EC 48 00 00 D8 */ b lbl_8034A6C4 -/* 8034A5F0 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006004@ha */ -/* 8034A5F4 80 03 60 04 */ lwz r0, 0x6004(r3) /* 0xCC006004@l */ -/* 8034A5F8 38 A3 60 00 */ addi r5, r3, 0x6000 -/* 8034A5FC 3C 60 80 35 */ lis r3, cbForStateBusy@ha /* 0x8034A6D4@ha */ -/* 8034A600 90 05 00 04 */ stw r0, 4(r5) -/* 8034A604 38 83 A6 D4 */ addi r4, r3, cbForStateBusy@l /* 0x8034A6D4@l */ -/* 8034A608 3C 60 00 02 */ lis r3, 2 -/* 8034A60C 4B FF DC 55 */ bl DVDLowRequestAudioStatus -/* 8034A610 48 00 00 B4 */ b lbl_8034A6C4 -/* 8034A614 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006004@ha */ -/* 8034A618 80 03 60 04 */ lwz r0, 0x6004(r3) /* 0xCC006004@l */ -/* 8034A61C 38 A3 60 00 */ addi r5, r3, 0x6000 -/* 8034A620 3C 60 80 35 */ lis r3, cbForStateBusy@ha /* 0x8034A6D4@ha */ -/* 8034A624 90 05 00 04 */ stw r0, 4(r5) -/* 8034A628 38 83 A6 D4 */ addi r4, r3, cbForStateBusy@l /* 0x8034A6D4@l */ -/* 8034A62C 3C 60 00 03 */ lis r3, 3 -/* 8034A630 4B FF DC 31 */ bl DVDLowRequestAudioStatus -/* 8034A634 48 00 00 90 */ b lbl_8034A6C4 -/* 8034A638 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006004@ha */ -/* 8034A63C 80 03 60 04 */ lwz r0, 0x6004(r3) /* 0xCC006004@l */ -/* 8034A640 38 83 60 00 */ addi r4, r3, 0x6000 -/* 8034A644 3C 60 80 35 */ lis r3, cbForStateBusy@ha /* 0x8034A6D4@ha */ -/* 8034A648 90 04 00 04 */ stw r0, 4(r4) -/* 8034A64C 38 A3 A6 D4 */ addi r5, r3, cbForStateBusy@l /* 0x8034A6D4@l */ -/* 8034A650 80 67 00 10 */ lwz r3, 0x10(r7) -/* 8034A654 80 87 00 14 */ lwz r4, 0x14(r7) -/* 8034A658 4B FF DC 95 */ bl DVDLowAudioBufferConfig -/* 8034A65C 48 00 00 68 */ b lbl_8034A6C4 -/* 8034A660 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006004@ha */ -/* 8034A664 80 03 60 04 */ lwz r0, 0x6004(r3) /* 0xCC006004@l */ -/* 8034A668 38 A3 60 00 */ addi r5, r3, 0x6000 -/* 8034A66C 3C 60 80 35 */ lis r3, cbForStateBusy@ha /* 0x8034A6D4@ha */ -/* 8034A670 90 05 00 04 */ stw r0, 4(r5) -/* 8034A674 38 00 00 20 */ li r0, 0x20 -/* 8034A678 38 83 A6 D4 */ addi r4, r3, cbForStateBusy@l /* 0x8034A6D4@l */ -/* 8034A67C 90 07 00 1C */ stw r0, 0x1c(r7) -/* 8034A680 80 67 00 18 */ lwz r3, 0x18(r7) -/* 8034A684 4B FF DA A9 */ bl DVDLowInquiry -/* 8034A688 48 00 00 3C */ b lbl_8034A6C4 -/* 8034A68C 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006004@ha */ -/* 8034A690 80 03 60 04 */ lwz r0, 0x6004(r3) /* 0xCC006004@l */ -/* 8034A694 38 83 60 00 */ addi r4, r3, 0x6000 -/* 8034A698 3C 60 80 35 */ lis r3, cbForStateBusy@ha /* 0x8034A6D4@ha */ -/* 8034A69C 90 04 00 04 */ stw r0, 4(r4) -/* 8034A6A0 38 63 A6 D4 */ addi r3, r3, cbForStateBusy@l /* 0x8034A6D4@l */ -/* 8034A6A4 4B FF D9 71 */ bl DVDLowStopMotor -/* 8034A6A8 48 00 00 1C */ b lbl_8034A6C4 -lbl_8034A6AC: -/* 8034A6AC 81 8D 84 70 */ lwz r12, checkOptionalCommand(r13) -/* 8034A6B0 3C 60 80 35 */ lis r3, cbForStateBusy@ha /* 0x8034A6D4@ha */ -/* 8034A6B4 38 83 A6 D4 */ addi r4, r3, cbForStateBusy@l /* 0x8034A6D4@l */ -/* 8034A6B8 7D 88 03 A6 */ mtlr r12 -/* 8034A6BC 38 67 00 00 */ addi r3, r7, 0 -/* 8034A6C0 4E 80 00 21 */ blrl -lbl_8034A6C4: -/* 8034A6C4 80 01 00 0C */ lwz r0, 0xc(r1) -/* 8034A6C8 38 21 00 08 */ addi r1, r1, 8 -/* 8034A6CC 7C 08 03 A6 */ mtlr r0 -/* 8034A6D0 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/stateCheckID.s b/asm/dolphin/dvd/dvd/stateCheckID.s deleted file mode 100644 index 93add82fd4..0000000000 --- a/asm/dolphin/dvd/dvd/stateCheckID.s +++ /dev/null @@ -1,62 +0,0 @@ -lbl_80349940: -/* 80349940 7C 08 02 A6 */ mflr r0 -/* 80349944 3C 60 80 45 */ lis r3, BB2@ha /* 0x8044C900@ha */ -/* 80349948 90 01 00 04 */ stw r0, 4(r1) -/* 8034994C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80349950 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80349954 3B E3 C9 00 */ addi r31, r3, BB2@l /* 0x8044C900@l */ -/* 80349958 80 0D 92 14 */ lwz r0, CurrCommand(r13) -/* 8034995C 2C 00 00 03 */ cmpwi r0, 3 -/* 80349960 41 82 00 08 */ beq lbl_80349968 -/* 80349964 48 00 00 6C */ b lbl_803499D0 -lbl_80349968: -/* 80349968 80 8D 91 F8 */ lwz r4, executing(r13) -/* 8034996C 38 7F 00 20 */ addi r3, r31, 0x20 -/* 80349970 80 84 00 24 */ lwz r4, 0x24(r4) -/* 80349974 48 00 22 91 */ bl DVDCompareDiskID -/* 80349978 2C 03 00 00 */ cmpwi r3, 0 -/* 8034997C 41 82 00 44 */ beq lbl_803499C0 -/* 80349980 80 6D 91 FC */ lwz r3, IDShouldBe(r13) -/* 80349984 38 9F 00 20 */ addi r4, r31, 0x20 -/* 80349988 38 A0 00 20 */ li r5, 0x20 -/* 8034998C 4B CB 9B B5 */ bl memcpy -/* 80349990 80 8D 91 F8 */ lwz r4, executing(r13) -/* 80349994 38 00 00 01 */ li r0, 1 -/* 80349998 38 7F 00 00 */ addi r3, r31, 0 -/* 8034999C 90 04 00 0C */ stw r0, 0xc(r4) -/* 803499A0 38 80 00 20 */ li r4, 0x20 -/* 803499A4 4B FF 1B DD */ bl DCInvalidateRange -/* 803499A8 3C 80 80 35 */ lis r4, stateCheckID2a@ha /* 0x80349A54@ha */ -/* 803499AC 80 6D 91 F8 */ lwz r3, executing(r13) -/* 803499B0 38 04 9A 54 */ addi r0, r4, stateCheckID2a@l /* 0x80349A54@l */ -/* 803499B4 90 0D 92 40 */ stw r0, LastState(r13) -/* 803499B8 48 00 00 9D */ bl stateCheckID2a -/* 803499BC 48 00 00 50 */ b lbl_80349A0C -lbl_803499C0: -/* 803499C0 3C 60 80 35 */ lis r3, cbForStateCheckID1@ha /* 0x80349B28@ha */ -/* 803499C4 38 63 9B 28 */ addi r3, r3, cbForStateCheckID1@l /* 0x80349B28@l */ -/* 803499C8 4B FF E6 4D */ bl DVDLowStopMotor -/* 803499CC 48 00 00 40 */ b lbl_80349A0C -lbl_803499D0: -/* 803499D0 80 8D 91 FC */ lwz r4, IDShouldBe(r13) -/* 803499D4 38 7F 00 20 */ addi r3, r31, 0x20 -/* 803499D8 38 A0 00 20 */ li r5, 0x20 -/* 803499DC 48 01 C6 B1 */ bl memcmp -/* 803499E0 2C 03 00 00 */ cmpwi r3, 0 -/* 803499E4 41 82 00 14 */ beq lbl_803499F8 -/* 803499E8 3C 60 80 35 */ lis r3, cbForStateCheckID1@ha /* 0x80349B28@ha */ -/* 803499EC 38 63 9B 28 */ addi r3, r3, cbForStateCheckID1@l /* 0x80349B28@l */ -/* 803499F0 4B FF E6 25 */ bl DVDLowStopMotor -/* 803499F4 48 00 00 18 */ b lbl_80349A0C -lbl_803499F8: -/* 803499F8 3C 80 80 35 */ lis r4, stateCheckID3@ha /* 0x80349A20@ha */ -/* 803499FC 80 6D 91 F8 */ lwz r3, executing(r13) -/* 80349A00 38 04 9A 20 */ addi r0, r4, stateCheckID3@l /* 0x80349A20@l */ -/* 80349A04 90 0D 92 40 */ stw r0, LastState(r13) -/* 80349A08 48 00 00 19 */ bl stateCheckID3 -lbl_80349A0C: -/* 80349A0C 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80349A10 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80349A14 38 21 00 10 */ addi r1, r1, 0x10 -/* 80349A18 7C 08 03 A6 */ mtlr r0 -/* 80349A1C 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/stateCheckID2.s b/asm/dolphin/dvd/dvd/stateCheckID2.s deleted file mode 100644 index ba29772e40..0000000000 --- a/asm/dolphin/dvd/dvd/stateCheckID2.s +++ /dev/null @@ -1,15 +0,0 @@ -lbl_80349AF0: -/* 80349AF0 7C 08 02 A6 */ mflr r0 -/* 80349AF4 3C 60 80 45 */ lis r3, BB2@ha /* 0x8044C900@ha */ -/* 80349AF8 90 01 00 04 */ stw r0, 4(r1) -/* 80349AFC 3C 80 80 35 */ lis r4, cbForStateCheckID2@ha /* 0x80349C24@ha */ -/* 80349B00 38 C4 9C 24 */ addi r6, r4, cbForStateCheckID2@l /* 0x80349C24@l */ -/* 80349B04 94 21 FF F8 */ stwu r1, -8(r1) -/* 80349B08 38 63 C9 00 */ addi r3, r3, BB2@l /* 0x8044C900@l */ -/* 80349B0C 38 80 00 20 */ li r4, 0x20 -/* 80349B10 38 A0 04 20 */ li r5, 0x420 -/* 80349B14 4B FF E1 05 */ bl DVDLowRead -/* 80349B18 80 01 00 0C */ lwz r0, 0xc(r1) -/* 80349B1C 38 21 00 08 */ addi r1, r1, 8 -/* 80349B20 7C 08 03 A6 */ mtlr r0 -/* 80349B24 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/stateCheckID2a.s b/asm/dolphin/dvd/dvd/stateCheckID2a.s deleted file mode 100644 index 5708e74a8e..0000000000 --- a/asm/dolphin/dvd/dvd/stateCheckID2a.s +++ /dev/null @@ -1,14 +0,0 @@ -lbl_80349A54: -/* 80349A54 7C 08 02 A6 */ mflr r0 -/* 80349A58 3C 60 80 35 */ lis r3, cbForStateCheckID2a@ha /* 0x80349A88@ha */ -/* 80349A5C 90 01 00 04 */ stw r0, 4(r1) -/* 80349A60 38 A3 9A 88 */ addi r5, r3, cbForStateCheckID2a@l /* 0x80349A88@l */ -/* 80349A64 94 21 FF F8 */ stwu r1, -8(r1) -/* 80349A68 80 8D 91 FC */ lwz r4, IDShouldBe(r13) -/* 80349A6C 88 64 00 08 */ lbz r3, 8(r4) -/* 80349A70 38 80 00 0A */ li r4, 0xa -/* 80349A74 4B FF E8 79 */ bl DVDLowAudioBufferConfig -/* 80349A78 80 01 00 0C */ lwz r0, 0xc(r1) -/* 80349A7C 38 21 00 08 */ addi r1, r1, 8 -/* 80349A80 7C 08 03 A6 */ mtlr r0 -/* 80349A84 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/stateCheckID3.s b/asm/dolphin/dvd/dvd/stateCheckID3.s deleted file mode 100644 index 6b8136d1e5..0000000000 --- a/asm/dolphin/dvd/dvd/stateCheckID3.s +++ /dev/null @@ -1,14 +0,0 @@ -lbl_80349A20: -/* 80349A20 7C 08 02 A6 */ mflr r0 -/* 80349A24 3C 60 80 35 */ lis r3, cbForStateCheckID3@ha /* 0x80349CFC@ha */ -/* 80349A28 90 01 00 04 */ stw r0, 4(r1) -/* 80349A2C 38 A3 9C FC */ addi r5, r3, cbForStateCheckID3@l /* 0x80349CFC@l */ -/* 80349A30 94 21 FF F8 */ stwu r1, -8(r1) -/* 80349A34 80 8D 91 FC */ lwz r4, IDShouldBe(r13) -/* 80349A38 88 64 00 08 */ lbz r3, 8(r4) -/* 80349A3C 38 80 00 0A */ li r4, 0xa -/* 80349A40 4B FF E8 AD */ bl DVDLowAudioBufferConfig -/* 80349A44 80 01 00 0C */ lwz r0, 0xc(r1) -/* 80349A48 38 21 00 08 */ addi r1, r1, 8 -/* 80349A4C 7C 08 03 A6 */ mtlr r0 -/* 80349A50 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/stateCoverClosed.s b/asm/dolphin/dvd/dvd/stateCoverClosed.s deleted file mode 100644 index e97fd750f2..0000000000 --- a/asm/dolphin/dvd/dvd/stateCoverClosed.s +++ /dev/null @@ -1,59 +0,0 @@ -lbl_80349E30: -/* 80349E30 7C 08 02 A6 */ mflr r0 -/* 80349E34 3C 60 80 45 */ lis r3, BB2@ha /* 0x8044C900@ha */ -/* 80349E38 90 01 00 04 */ stw r0, 4(r1) -/* 80349E3C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80349E40 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80349E44 3B E3 C9 00 */ addi r31, r3, BB2@l /* 0x8044C900@l */ -/* 80349E48 80 0D 92 14 */ lwz r0, CurrCommand(r13) -/* 80349E4C 2C 00 00 0D */ cmpwi r0, 0xd -/* 80349E50 41 82 00 28 */ beq lbl_80349E78 -/* 80349E54 40 80 00 18 */ bge lbl_80349E6C -/* 80349E58 2C 00 00 06 */ cmpwi r0, 6 -/* 80349E5C 40 80 00 4C */ bge lbl_80349EA8 -/* 80349E60 2C 00 00 04 */ cmpwi r0, 4 -/* 80349E64 40 80 00 14 */ bge lbl_80349E78 -/* 80349E68 48 00 00 40 */ b lbl_80349EA8 -lbl_80349E6C: -/* 80349E6C 2C 00 00 0F */ cmpwi r0, 0xf -/* 80349E70 41 82 00 08 */ beq lbl_80349E78 -/* 80349E74 48 00 00 34 */ b lbl_80349EA8 -lbl_80349E78: -/* 80349E78 48 00 19 FD */ bl __DVDClearWaitingQueue -/* 80349E7C 80 8D 91 F8 */ lwz r4, executing(r13) -/* 80349E80 38 1F 00 40 */ addi r0, r31, 0x40 -/* 80349E84 90 0D 91 F8 */ stw r0, executing(r13) -/* 80349E88 81 84 00 28 */ lwz r12, 0x28(r4) -/* 80349E8C 28 0C 00 00 */ cmplwi r12, 0 -/* 80349E90 41 82 00 10 */ beq lbl_80349EA0 -/* 80349E94 7D 88 03 A6 */ mtlr r12 -/* 80349E98 38 60 FF FC */ li r3, -4 -/* 80349E9C 4E 80 00 21 */ blrl -lbl_80349EA0: -/* 80349EA0 48 00 02 0D */ bl stateReady -/* 80349EA4 48 00 00 4C */ b lbl_80349EF0 -lbl_80349EA8: -/* 80349EA8 38 00 00 00 */ li r0, 0 -/* 80349EAC 90 0D 92 38 */ stw r0, MotorState(r13) -/* 80349EB0 48 00 12 89 */ bl DVDReset -/* 80349EB4 38 7F 00 70 */ addi r3, r31, 0x70 -/* 80349EB8 4B FF 0A 41 */ bl OSCreateAlarm -/* 80349EBC 3C 60 80 00 */ lis r3, 0x8000 /* 0x800000F8@ha */ -/* 80349EC0 80 03 00 F8 */ lwz r0, 0x00F8(r3) /* 0x800000F8@l */ -/* 80349EC4 3C 80 10 62 */ lis r4, 0x1062 /* 0x10624DD3@ha */ -/* 80349EC8 3C 60 80 35 */ lis r3, AlarmHandler@ha /* 0x80349DEC@ha */ -/* 80349ECC 54 00 F0 BE */ srwi r0, r0, 2 -/* 80349ED0 38 84 4D D3 */ addi r4, r4, 0x4DD3 /* 0x10624DD3@l */ -/* 80349ED4 7C 04 00 16 */ mulhwu r0, r4, r0 -/* 80349ED8 54 00 D1 BE */ srwi r0, r0, 6 -/* 80349EDC 1C C0 04 7E */ mulli r6, r0, 0x47e -/* 80349EE0 38 E3 9D EC */ addi r7, r3, AlarmHandler@l /* 0x80349DEC@l */ -/* 80349EE4 38 7F 00 70 */ addi r3, r31, 0x70 -/* 80349EE8 38 A0 00 00 */ li r5, 0 -/* 80349EEC 4B FF 0C 6D */ bl OSSetAlarm -lbl_80349EF0: -/* 80349EF0 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80349EF4 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80349EF8 38 21 00 10 */ addi r1, r1, 0x10 -/* 80349EFC 7C 08 03 A6 */ mtlr r0 -/* 80349F00 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/stateCoverClosed_CMD.s b/asm/dolphin/dvd/dvd/stateCoverClosed_CMD.s deleted file mode 100644 index 644691003c..0000000000 --- a/asm/dolphin/dvd/dvd/stateCoverClosed_CMD.s +++ /dev/null @@ -1,13 +0,0 @@ -lbl_80349F04: -/* 80349F04 7C 08 02 A6 */ mflr r0 -/* 80349F08 3C 60 80 45 */ lis r3, CurrDiskID@ha /* 0x8044C920@ha */ -/* 80349F0C 90 01 00 04 */ stw r0, 4(r1) -/* 80349F10 3C 80 80 35 */ lis r4, cbForStateCoverClosed@ha /* 0x80349F34@ha */ -/* 80349F14 38 63 C9 20 */ addi r3, r3, CurrDiskID@l /* 0x8044C920@l */ -/* 80349F18 94 21 FF F8 */ stwu r1, -8(r1) -/* 80349F1C 38 84 9F 34 */ addi r4, r4, cbForStateCoverClosed@l /* 0x80349F34@l */ -/* 80349F20 4B FF E0 51 */ bl DVDLowReadDiskID -/* 80349F24 80 01 00 0C */ lwz r0, 0xc(r1) -/* 80349F28 38 21 00 08 */ addi r1, r1, 8 -/* 80349F2C 7C 08 03 A6 */ mtlr r0 -/* 80349F30 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/stateGettingError.s b/asm/dolphin/dvd/dvd/stateGettingError.s deleted file mode 100644 index 72ed75e434..0000000000 --- a/asm/dolphin/dvd/dvd/stateGettingError.s +++ /dev/null @@ -1,11 +0,0 @@ -lbl_803493BC: -/* 803493BC 7C 08 02 A6 */ mflr r0 -/* 803493C0 3C 60 80 35 */ lis r3, cbForStateGettingError@ha /* 0x80349498@ha */ -/* 803493C4 90 01 00 04 */ stw r0, 4(r1) -/* 803493C8 38 63 94 98 */ addi r3, r3, cbForStateGettingError@l /* 0x80349498@l */ -/* 803493CC 94 21 FF F8 */ stwu r1, -8(r1) -/* 803493D0 4B FF EC D1 */ bl DVDLowRequestError -/* 803493D4 80 01 00 0C */ lwz r0, 0xc(r1) -/* 803493D8 38 21 00 08 */ addi r1, r1, 8 -/* 803493DC 7C 08 03 A6 */ mtlr r0 -/* 803493E0 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/stateGoToRetry.s b/asm/dolphin/dvd/dvd/stateGoToRetry.s deleted file mode 100644 index cf4a6d52d0..0000000000 --- a/asm/dolphin/dvd/dvd/stateGoToRetry.s +++ /dev/null @@ -1,11 +0,0 @@ -lbl_803497D8: -/* 803497D8 7C 08 02 A6 */ mflr r0 -/* 803497DC 3C 60 80 35 */ lis r3, cbForStateGoToRetry@ha /* 0x80349800@ha */ -/* 803497E0 90 01 00 04 */ stw r0, 4(r1) -/* 803497E4 38 63 98 00 */ addi r3, r3, cbForStateGoToRetry@l /* 0x80349800@l */ -/* 803497E8 94 21 FF F8 */ stwu r1, -8(r1) -/* 803497EC 4B FF E8 29 */ bl DVDLowStopMotor -/* 803497F0 80 01 00 0C */ lwz r0, 0xc(r1) -/* 803497F4 38 21 00 08 */ addi r1, r1, 8 -/* 803497F8 7C 08 03 A6 */ mtlr r0 -/* 803497FC 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/stateMotorStopped.s b/asm/dolphin/dvd/dvd/stateMotorStopped.s deleted file mode 100644 index ac996491a1..0000000000 --- a/asm/dolphin/dvd/dvd/stateMotorStopped.s +++ /dev/null @@ -1,11 +0,0 @@ -lbl_80349F98: -/* 80349F98 7C 08 02 A6 */ mflr r0 -/* 80349F9C 3C 60 80 35 */ lis r3, cbForStateMotorStopped@ha /* 0x80349FC0@ha */ -/* 80349FA0 90 01 00 04 */ stw r0, 4(r1) -/* 80349FA4 38 63 9F C0 */ addi r3, r3, cbForStateMotorStopped@l /* 0x80349FC0@l */ -/* 80349FA8 94 21 FF F8 */ stwu r1, -8(r1) -/* 80349FAC 4B FF DF 99 */ bl DVDLowWaitCoverClose -/* 80349FB0 80 01 00 0C */ lwz r0, 0xc(r1) -/* 80349FB4 38 21 00 08 */ addi r1, r1, 8 -/* 80349FB8 7C 08 03 A6 */ mtlr r0 -/* 80349FBC 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/dvd/stateTimeout.s b/asm/dolphin/dvd/dvd/stateTimeout.s deleted file mode 100644 index 3406cdf3a5..0000000000 --- a/asm/dolphin/dvd/dvd/stateTimeout.s +++ /dev/null @@ -1,14 +0,0 @@ -lbl_80349388: -/* 80349388 7C 08 02 A6 */ mflr r0 -/* 8034938C 3C 60 01 23 */ lis r3, 0x0123 /* 0x01234568@ha */ -/* 80349390 90 01 00 04 */ stw r0, 4(r1) -/* 80349394 38 63 45 68 */ addi r3, r3, 0x4568 /* 0x01234568@l */ -/* 80349398 94 21 FF F8 */ stwu r1, -8(r1) -/* 8034939C 48 00 27 ED */ bl __DVDStoreErrorCode -/* 803493A0 48 00 1D 99 */ bl DVDReset -/* 803493A4 38 60 00 00 */ li r3, 0 -/* 803493A8 4B FF FF 35 */ bl cbForStateError -/* 803493AC 80 01 00 0C */ lwz r0, 0xc(r1) -/* 803493B0 38 21 00 08 */ addi r1, r1, 8 -/* 803493B4 7C 08 03 A6 */ mtlr r0 -/* 803493B8 4E 80 00 20 */ blr diff --git a/asm/dolphin/dvd/fstload/cb.s b/asm/dolphin/dvd/fstload/cb.s deleted file mode 100644 index 1aee446ddc..0000000000 --- a/asm/dolphin/dvd/fstload/cb.s +++ /dev/null @@ -1,59 +0,0 @@ -lbl_8034BD2C: -/* 8034BD2C 7C 08 02 A6 */ mflr r0 -/* 8034BD30 2C 03 00 00 */ cmpwi r3, 0 -/* 8034BD34 90 01 00 04 */ stw r0, 4(r1) -/* 8034BD38 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 8034BD3C 93 E1 00 14 */ stw r31, 0x14(r1) -/* 8034BD40 3B E4 00 00 */ addi r31, r4, 0 -/* 8034BD44 40 81 00 7C */ ble lbl_8034BDC0 -/* 8034BD48 80 0D 92 50 */ lwz r0, status(r13) -/* 8034BD4C 2C 00 00 01 */ cmpwi r0, 1 -/* 8034BD50 41 82 00 3C */ beq lbl_8034BD8C -/* 8034BD54 40 80 00 9C */ bge lbl_8034BDF0 -/* 8034BD58 2C 00 00 00 */ cmpwi r0, 0 -/* 8034BD5C 40 80 00 08 */ bge lbl_8034BD64 -/* 8034BD60 48 00 00 90 */ b lbl_8034BDF0 -lbl_8034BD64: -/* 8034BD64 38 00 00 01 */ li r0, 1 -/* 8034BD68 80 8D 92 54 */ lwz r4, bb2(r13) -/* 8034BD6C 3C 60 80 35 */ lis r3, cb@ha /* 0x8034BD2C@ha */ -/* 8034BD70 90 0D 92 50 */ stw r0, status(r13) -/* 8034BD74 38 E3 BD 2C */ addi r7, r3, cb@l /* 0x8034BD2C@l */ -/* 8034BD78 38 7F 00 00 */ addi r3, r31, 0 -/* 8034BD7C 38 A0 00 20 */ li r5, 0x20 -/* 8034BD80 38 C0 04 20 */ li r6, 0x420 -/* 8034BD84 4B FF F0 85 */ bl DVDReadAbsAsyncForBS -/* 8034BD88 48 00 00 68 */ b lbl_8034BDF0 -lbl_8034BD8C: -/* 8034BD8C 38 00 00 02 */ li r0, 2 -/* 8034BD90 80 CD 92 54 */ lwz r6, bb2(r13) -/* 8034BD94 90 0D 92 50 */ stw r0, status(r13) -/* 8034BD98 3C 60 80 35 */ lis r3, cb@ha /* 0x8034BD2C@ha */ -/* 8034BD9C 38 E3 BD 2C */ addi r7, r3, cb@l /* 0x8034BD2C@l */ -/* 8034BDA0 80 A6 00 08 */ lwz r5, 8(r6) -/* 8034BDA4 7F E3 FB 78 */ mr r3, r31 -/* 8034BDA8 80 86 00 10 */ lwz r4, 0x10(r6) -/* 8034BDAC 38 05 00 1F */ addi r0, r5, 0x1f -/* 8034BDB0 80 C6 00 04 */ lwz r6, 4(r6) -/* 8034BDB4 54 05 00 34 */ rlwinm r5, r0, 0, 0, 0x1a -/* 8034BDB8 4B FF F0 51 */ bl DVDReadAbsAsyncForBS -/* 8034BDBC 48 00 00 34 */ b lbl_8034BDF0 -lbl_8034BDC0: -/* 8034BDC0 2C 03 FF FF */ cmpwi r3, -1 -/* 8034BDC4 41 82 00 2C */ beq lbl_8034BDF0 -/* 8034BDC8 2C 03 FF FC */ cmpwi r3, -4 -/* 8034BDCC 40 82 00 24 */ bne lbl_8034BDF0 -/* 8034BDD0 38 00 00 00 */ li r0, 0 -/* 8034BDD4 90 0D 92 50 */ stw r0, status(r13) -/* 8034BDD8 4B FF F3 61 */ bl DVDReset -/* 8034BDDC 3C 60 80 35 */ lis r3, cb@ha /* 0x8034BD2C@ha */ -/* 8034BDE0 80 8D 92 58 */ lwz r4, idTmp(r13) -/* 8034BDE4 38 A3 BD 2C */ addi r5, r3, cb@l /* 0x8034BD2C@l */ -/* 8034BDE8 38 7F 00 00 */ addi r3, r31, 0 -/* 8034BDEC 4B FF F0 ED */ bl DVDReadDiskID -lbl_8034BDF0: -/* 8034BDF0 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 8034BDF4 83 E1 00 14 */ lwz r31, 0x14(r1) -/* 8034BDF8 38 21 00 18 */ addi r1, r1, 0x18 -/* 8034BDFC 7C 08 03 A6 */ mtlr r0 -/* 8034BE00 4E 80 00 20 */ blr diff --git a/asm/dolphin/os/OS/OSExceptionInit.s b/asm/dolphin/os/OS/OSExceptionInit.s deleted file mode 100644 index c0d965e21a..0000000000 --- a/asm/dolphin/os/OS/OSExceptionInit.s +++ /dev/null @@ -1,178 +0,0 @@ -lbl_8033A440: -/* 8033A440 7C 08 02 A6 */ mflr r0 -/* 8033A444 90 01 00 04 */ stw r0, 4(r1) -/* 8033A448 94 21 FF C8 */ stwu r1, -0x38(r1) -/* 8033A44C BE 81 00 08 */ stmw r20, 8(r1) -/* 8033A450 3C 60 80 00 */ lis r3, 0x8000 /* 0x80000060@ha */ -/* 8033A454 80 03 00 60 */ lwz r0, 0x0060(r3) /* 0x80000060@l */ -/* 8033A458 3C 80 80 34 */ lis r4, __OSEVSetNumber@ha /* 0x8033A780@ha */ -/* 8033A45C 3B C4 A7 80 */ addi r30, r4, __OSEVSetNumber@l /* 0x8033A780@l */ -/* 8033A460 3C A0 80 34 */ lis r5, OSExceptionVector@ha /* 0x8033A718@ha */ -/* 8033A464 83 3E 00 00 */ lwz r25, 0(r30) -/* 8033A468 3C 80 80 34 */ lis r4, __OSEVEnd@ha /* 0x8033A7B0@ha */ -/* 8033A46C 38 A5 A7 18 */ addi r5, r5, OSExceptionVector@l /* 0x8033A718@l */ -/* 8033A470 38 84 A7 B0 */ addi r4, r4, __OSEVEnd@l /* 0x8033A7B0@l */ -/* 8033A474 3C C0 80 3D */ lis r6, lit_1@ha /* 0x803CF288@ha */ -/* 8033A478 28 00 00 00 */ cmplwi r0, 0 -/* 8033A47C 7C B8 2B 78 */ mr r24, r5 -/* 8033A480 3B A6 F2 88 */ addi r29, r6, lit_1@l /* 0x803CF288@l */ -/* 8033A484 7E E5 20 50 */ subf r23, r5, r4 -/* 8033A488 3A 83 00 60 */ addi r20, r3, 0x60 -/* 8033A48C 40 82 00 4C */ bne lbl_8033A4D8 -/* 8033A490 38 7D 01 60 */ addi r3, r29, 0x160 -/* 8033A494 4C C6 31 82 */ crclr 6 -/* 8033A498 48 00 BF 9D */ bl DBPrintf -/* 8033A49C 3C 80 80 34 */ lis r4, __OSDBIntegrator@ha /* 0x8033A6C0@ha */ -/* 8033A4A0 3C 60 80 34 */ lis r3, __OSDBJump@ha /* 0x8033A6E4@ha */ -/* 8033A4A4 38 03 A6 E4 */ addi r0, r3, __OSDBJump@l /* 0x8033A6E4@l */ -/* 8033A4A8 38 84 A6 C0 */ addi r4, r4, __OSDBIntegrator@l /* 0x8033A6C0@l */ -/* 8033A4AC 7E A4 00 50 */ subf r21, r4, r0 -/* 8033A4B0 7E 83 A3 78 */ mr r3, r20 -/* 8033A4B4 7E A5 AB 78 */ mr r5, r21 -/* 8033A4B8 4B CC 90 89 */ bl memcpy -/* 8033A4BC 7E 83 A3 78 */ mr r3, r20 -/* 8033A4C0 7E A4 AB 78 */ mr r4, r21 -/* 8033A4C4 48 00 11 49 */ bl DCFlushRangeNoSync -/* 8033A4C8 7C 00 04 AC */ sync -/* 8033A4CC 7E 83 A3 78 */ mr r3, r20 -/* 8033A4D0 7E A4 AB 78 */ mr r4, r21 -/* 8033A4D4 48 00 11 BD */ bl ICInvalidateRange -lbl_8033A4D8: -/* 8033A4D8 3C 80 80 34 */ lis r4, __OSDBJump@ha /* 0x8033A6E4@ha */ -/* 8033A4DC 3C 60 80 34 */ lis r3, __OSSetExceptionHandler@ha /* 0x8033A6E8@ha */ -/* 8033A4E0 3B E4 A6 E4 */ addi r31, r4, __OSDBJump@l /* 0x8033A6E4@l */ -/* 8033A4E4 38 03 A6 E8 */ addi r0, r3, __OSSetExceptionHandler@l /* 0x8033A6E8@l */ -/* 8033A4E8 3B 9D 01 24 */ addi r28, r29, 0x124 -/* 8033A4EC 7F 7F 00 50 */ subf r27, r31, r0 -/* 8033A4F0 3B 40 00 00 */ li r26, 0 -/* 8033A4F4 48 00 00 04 */ b lbl_8033A4F8 -lbl_8033A4F8: -/* 8033A4F8 3C 60 80 34 */ lis r3, __DBVECTOR@ha /* 0x8033A770@ha */ -/* 8033A4FC 3A A3 A7 70 */ addi r21, r3, __DBVECTOR@l /* 0x8033A770@l */ -/* 8033A500 3E C0 60 00 */ lis r22, 0x6000 -/* 8033A504 48 00 00 04 */ b lbl_8033A508 -lbl_8033A508: -/* 8033A508 48 00 01 48 */ b lbl_8033A650 -lbl_8033A50C: -/* 8033A50C 80 6D 90 84 */ lwz r3, BI2DebugFlag(r13) -/* 8033A510 28 03 00 00 */ cmplwi r3, 0 -/* 8033A514 41 82 00 34 */ beq lbl_8033A548 -/* 8033A518 80 03 00 00 */ lwz r0, 0(r3) -/* 8033A51C 28 00 00 02 */ cmplwi r0, 2 -/* 8033A520 41 80 00 28 */ blt lbl_8033A548 -/* 8033A524 7F 43 D3 78 */ mr r3, r26 -/* 8033A528 48 00 BE F1 */ bl __DBIsExceptionMarked -/* 8033A52C 2C 03 00 00 */ cmpwi r3, 0 -/* 8033A530 41 82 00 18 */ beq lbl_8033A548 -/* 8033A534 38 7D 01 7C */ addi r3, r29, 0x17c -/* 8033A538 4C C6 31 82 */ crclr 6 -/* 8033A53C 57 44 06 3E */ clrlwi r4, r26, 0x18 -/* 8033A540 48 00 BE F5 */ bl DBPrintf -/* 8033A544 48 00 01 04 */ b lbl_8033A648 -lbl_8033A548: -/* 8033A548 57 54 06 3E */ clrlwi r20, r26, 0x18 -/* 8033A54C 7F 20 A3 78 */ or r0, r25, r20 -/* 8033A550 90 1E 00 00 */ stw r0, 0(r30) -/* 8033A554 7F 43 D3 78 */ mr r3, r26 -/* 8033A558 48 00 BE C1 */ bl __DBIsExceptionMarked -/* 8033A55C 2C 03 00 00 */ cmpwi r3, 0 -/* 8033A560 41 82 00 28 */ beq lbl_8033A588 -/* 8033A564 7E 84 A3 78 */ mr r4, r20 -/* 8033A568 4C C6 31 82 */ crclr 6 -/* 8033A56C 38 7D 01 AC */ addi r3, r29, 0x1ac -/* 8033A570 48 00 BE C5 */ bl DBPrintf -/* 8033A574 7E A3 AB 78 */ mr r3, r21 -/* 8033A578 7F E4 FB 78 */ mr r4, r31 -/* 8033A57C 7F 65 DB 78 */ mr r5, r27 -/* 8033A580 4B CC 8F C1 */ bl memcpy -/* 8033A584 48 00 00 90 */ b lbl_8033A614 -lbl_8033A588: -/* 8033A588 7E A4 AB 78 */ mr r4, r21 -/* 8033A58C 48 00 00 04 */ b lbl_8033A590 -lbl_8033A590: -/* 8033A590 28 1B 00 00 */ cmplwi r27, 0 -/* 8033A594 38 7B 00 03 */ addi r3, r27, 3 -/* 8033A598 54 63 F0 BE */ srwi r3, r3, 2 -/* 8033A59C 40 81 00 78 */ ble lbl_8033A614 -/* 8033A5A0 54 60 E8 FE */ srwi r0, r3, 3 -/* 8033A5A4 28 00 00 00 */ cmplwi r0, 0 -/* 8033A5A8 7C 09 03 A6 */ mtctr r0 -/* 8033A5AC 41 82 00 54 */ beq lbl_8033A600 -/* 8033A5B0 48 00 00 04 */ b lbl_8033A5B4 -lbl_8033A5B4: -/* 8033A5B4 92 C4 00 00 */ stw r22, 0(r4) -/* 8033A5B8 38 84 00 04 */ addi r4, r4, 4 -/* 8033A5BC 92 C4 00 00 */ stw r22, 0(r4) -/* 8033A5C0 38 84 00 04 */ addi r4, r4, 4 -/* 8033A5C4 92 C4 00 00 */ stw r22, 0(r4) -/* 8033A5C8 38 84 00 04 */ addi r4, r4, 4 -/* 8033A5CC 92 C4 00 00 */ stw r22, 0(r4) -/* 8033A5D0 38 84 00 04 */ addi r4, r4, 4 -/* 8033A5D4 92 C4 00 00 */ stw r22, 0(r4) -/* 8033A5D8 38 84 00 04 */ addi r4, r4, 4 -/* 8033A5DC 92 C4 00 00 */ stw r22, 0(r4) -/* 8033A5E0 38 84 00 04 */ addi r4, r4, 4 -/* 8033A5E4 92 C4 00 00 */ stw r22, 0(r4) -/* 8033A5E8 38 84 00 04 */ addi r4, r4, 4 -/* 8033A5EC 92 C4 00 00 */ stw r22, 0(r4) -/* 8033A5F0 38 84 00 04 */ addi r4, r4, 4 -/* 8033A5F4 42 00 FF C0 */ bdnz lbl_8033A5B4 -/* 8033A5F8 70 63 00 07 */ andi. r3, r3, 7 -/* 8033A5FC 41 82 00 18 */ beq lbl_8033A614 -lbl_8033A600: -/* 8033A600 7C 69 03 A6 */ mtctr r3 -/* 8033A604 48 00 00 04 */ b lbl_8033A608 -lbl_8033A608: -/* 8033A608 92 C4 00 00 */ stw r22, 0(r4) -/* 8033A60C 38 84 00 04 */ addi r4, r4, 4 -/* 8033A610 42 00 FF F8 */ bdnz lbl_8033A608 -lbl_8033A614: -/* 8033A614 80 7C 00 00 */ lwz r3, 0(r28) -/* 8033A618 7F 04 C3 78 */ mr r4, r24 -/* 8033A61C 7E E5 BB 78 */ mr r5, r23 -/* 8033A620 3E 83 80 00 */ addis r20, r3, 0x8000 -/* 8033A624 7E 83 A3 78 */ mr r3, r20 -/* 8033A628 4B CC 8F 19 */ bl memcpy -/* 8033A62C 7E 83 A3 78 */ mr r3, r20 -/* 8033A630 7E E4 BB 78 */ mr r4, r23 -/* 8033A634 48 00 0F D9 */ bl DCFlushRangeNoSync -/* 8033A638 7C 00 04 AC */ sync -/* 8033A63C 7E 83 A3 78 */ mr r3, r20 -/* 8033A640 7E E4 BB 78 */ mr r4, r23 -/* 8033A644 48 00 10 4D */ bl ICInvalidateRange -lbl_8033A648: -/* 8033A648 3B 9C 00 04 */ addi r28, r28, 4 -/* 8033A64C 3B 5A 00 01 */ addi r26, r26, 1 -lbl_8033A650: -/* 8033A650 57 40 06 3E */ clrlwi r0, r26, 0x18 -/* 8033A654 28 00 00 0F */ cmplwi r0, 0xf -/* 8033A658 41 80 FE B4 */ blt lbl_8033A50C -/* 8033A65C 3C 60 80 00 */ lis r3, 0x8000 /* 0x80003000@ha */ -/* 8033A660 38 03 30 00 */ addi r0, r3, 0x3000 /* 0x80003000@l */ -/* 8033A664 90 0D 90 A4 */ stw r0, OSExceptionTable(r13) -/* 8033A668 3A 80 00 00 */ li r20, 0 -/* 8033A66C 48 00 00 04 */ b lbl_8033A670 -lbl_8033A670: -/* 8033A670 3C 60 80 34 */ lis r3, OSDefaultExceptionHandler@ha /* 0x8033A7B4@ha */ -/* 8033A674 3A E3 A7 B4 */ addi r23, r3, OSDefaultExceptionHandler@l /* 0x8033A7B4@l */ -/* 8033A678 48 00 00 04 */ b lbl_8033A67C -lbl_8033A67C: -/* 8033A67C 48 00 00 14 */ b lbl_8033A690 -lbl_8033A680: -/* 8033A680 7E 83 A3 78 */ mr r3, r20 -/* 8033A684 7E E4 BB 78 */ mr r4, r23 -/* 8033A688 48 00 00 61 */ bl __OSSetExceptionHandler -/* 8033A68C 3A 94 00 01 */ addi r20, r20, 1 -lbl_8033A690: -/* 8033A690 56 80 06 3E */ clrlwi r0, r20, 0x18 -/* 8033A694 28 00 00 0F */ cmplwi r0, 0xf -/* 8033A698 41 80 FF E8 */ blt lbl_8033A680 -/* 8033A69C 93 3E 00 00 */ stw r25, 0(r30) -/* 8033A6A0 38 7D 01 DC */ addi r3, r29, 0x1dc -/* 8033A6A4 4C C6 31 82 */ crclr 6 -/* 8033A6A8 48 00 BD 8D */ bl DBPrintf -/* 8033A6AC BA 81 00 08 */ lmw r20, 8(r1) -/* 8033A6B0 80 01 00 3C */ lwz r0, 0x3c(r1) -/* 8033A6B4 38 21 00 38 */ addi r1, r1, 0x38 -/* 8033A6B8 7C 08 03 A6 */ mtlr r0 -/* 8033A6BC 4E 80 00 20 */ blr diff --git a/asm/dolphin/os/OS/OSRegisterVersion.s b/asm/dolphin/os/OS/OSRegisterVersion.s deleted file mode 100644 index 76e8866337..0000000000 --- a/asm/dolphin/os/OS/OSRegisterVersion.s +++ /dev/null @@ -1,12 +0,0 @@ -lbl_8033A874: -/* 8033A874 7C 08 02 A6 */ mflr r0 -/* 8033A878 90 01 00 04 */ stw r0, 4(r1) -/* 8033A87C 94 21 FF F8 */ stwu r1, -8(r1) -/* 8033A880 7C 64 1B 78 */ mr r4, r3 -/* 8033A884 4C C6 31 82 */ crclr 6 -/* 8033A888 38 6D 84 0C */ la r3, lit_163(r13) /* 8045098C-_SDA_BASE_ */ -/* 8033A88C 4B CC C2 31 */ bl OSReport -/* 8033A890 80 01 00 0C */ lwz r0, 0xc(r1) -/* 8033A894 38 21 00 08 */ addi r1, r1, 8 -/* 8033A898 7C 08 03 A6 */ mtlr r0 -/* 8033A89C 4E 80 00 20 */ blr diff --git a/asm/dolphin/os/OS/__OSGetDIConfig.s b/asm/dolphin/os/OS/__OSGetDIConfig.s deleted file mode 100644 index 41d74619f4..0000000000 --- a/asm/dolphin/os/OS/__OSGetDIConfig.s +++ /dev/null @@ -1,6 +0,0 @@ -lbl_8033A860: -/* 8033A860 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006000@ha */ -/* 8033A864 38 63 60 00 */ addi r3, r3, 0x6000 /* 0xCC006000@l */ -/* 8033A868 80 03 00 24 */ lwz r0, 0x24(r3) -/* 8033A86C 54 03 06 3E */ clrlwi r3, r0, 0x18 -/* 8033A870 4E 80 00 20 */ blr diff --git a/asm/dolphin/os/OSAlarm/InsertAlarm.s b/asm/dolphin/os/OSAlarm/InsertAlarm.s deleted file mode 100644 index 1546e5a0c9..0000000000 --- a/asm/dolphin/os/OSAlarm/InsertAlarm.s +++ /dev/null @@ -1,160 +0,0 @@ -lbl_8033A908: -/* 8033A908 7C 08 02 A6 */ mflr r0 -/* 8033A90C 90 01 00 04 */ stw r0, 4(r1) -/* 8033A910 94 21 FF C0 */ stwu r1, -0x40(r1) -/* 8033A914 BF 21 00 24 */ stmw r25, 0x24(r1) -/* 8033A918 3B 80 00 00 */ li r28, 0 -/* 8033A91C 7C 7D 1B 78 */ mr r29, r3 -/* 8033A920 6F 84 80 00 */ xoris r4, r28, 0x8000 -/* 8033A924 3B 25 00 00 */ addi r25, r5, 0 -/* 8033A928 3B C6 00 00 */ addi r30, r6, 0 -/* 8033A92C 3B E7 00 00 */ addi r31, r7, 0 -/* 8033A930 80 03 00 18 */ lwz r0, 0x18(r3) -/* 8033A934 81 03 00 1C */ lwz r8, 0x1c(r3) -/* 8033A938 6C 03 80 00 */ xoris r3, r0, 0x8000 -/* 8033A93C 7C 08 E0 10 */ subfc r0, r8, r28 -/* 8033A940 7C 63 21 10 */ subfe r3, r3, r4 -/* 8033A944 7C 64 21 10 */ subfe r3, r4, r4 -/* 8033A948 7C 63 00 D1 */ neg. r3, r3 -/* 8033A94C 41 82 00 7C */ beq lbl_8033A9C8 -/* 8033A950 48 00 7D CD */ bl __OSGetSystemTime -/* 8033A954 80 FD 00 20 */ lwz r7, 0x20(r29) -/* 8033A958 6C 65 80 00 */ xoris r5, r3, 0x8000 -/* 8033A95C 81 1D 00 24 */ lwz r8, 0x24(r29) -/* 8033A960 6C E6 80 00 */ xoris r6, r7, 0x8000 -/* 8033A964 7C 04 40 10 */ subfc r0, r4, r8 -/* 8033A968 7C A5 31 10 */ subfe r5, r5, r6 -/* 8033A96C 7C A6 31 10 */ subfe r5, r6, r6 -/* 8033A970 7C A5 00 D1 */ neg. r5, r5 -/* 8033A974 3B C8 00 00 */ addi r30, r8, 0 -/* 8033A978 3B 27 00 00 */ addi r25, r7, 0 -/* 8033A97C 41 82 00 4C */ beq lbl_8033A9C8 -/* 8033A980 83 7D 00 18 */ lwz r27, 0x18(r29) -/* 8033A984 7C 88 20 10 */ subfc r4, r8, r4 -/* 8033A988 83 5D 00 1C */ lwz r26, 0x1c(r29) -/* 8033A98C 7C 67 19 10 */ subfe r3, r7, r3 -/* 8033A990 38 BB 00 00 */ addi r5, r27, 0 -/* 8033A994 38 DA 00 00 */ addi r6, r26, 0 -/* 8033A998 48 02 79 8D */ bl __div2i -/* 8033A99C 38 00 00 01 */ li r0, 1 -/* 8033A9A0 7C A4 00 14 */ addc r5, r4, r0 -/* 8033A9A4 7C 9B 29 D6 */ mullw r4, r27, r5 -/* 8033A9A8 7C 1A 28 16 */ mulhwu r0, r26, r5 -/* 8033A9AC 7C 63 E1 14 */ adde r3, r3, r28 -/* 8033A9B0 7C 84 02 14 */ add r4, r4, r0 -/* 8033A9B4 7C 1A 19 D6 */ mullw r0, r26, r3 -/* 8033A9B8 7C 7A 29 D6 */ mullw r3, r26, r5 -/* 8033A9BC 7C 04 02 14 */ add r0, r4, r0 -/* 8033A9C0 7F DE 18 14 */ addc r30, r30, r3 -/* 8033A9C4 7F 39 01 14 */ adde r25, r25, r0 -lbl_8033A9C8: -/* 8033A9C8 93 FD 00 00 */ stw r31, 0(r29) -/* 8033A9CC 6F 24 80 00 */ xoris r4, r25, 0x8000 -/* 8033A9D0 93 DD 00 0C */ stw r30, 0xc(r29) -/* 8033A9D4 93 3D 00 08 */ stw r25, 8(r29) -/* 8033A9D8 80 CD 90 B8 */ lwz r6, AlarmQueue(r13) -/* 8033A9DC 48 00 00 C4 */ b lbl_8033AAA0 -lbl_8033A9E0: -/* 8033A9E0 80 06 00 08 */ lwz r0, 8(r6) -/* 8033A9E4 80 A6 00 0C */ lwz r5, 0xc(r6) -/* 8033A9E8 6C 03 80 00 */ xoris r3, r0, 0x8000 -/* 8033A9EC 7C 05 F0 10 */ subfc r0, r5, r30 -/* 8033A9F0 7C 63 21 10 */ subfe r3, r3, r4 -/* 8033A9F4 7C 64 21 10 */ subfe r3, r4, r4 -/* 8033A9F8 7C 63 00 D1 */ neg. r3, r3 -/* 8033A9FC 41 82 00 A0 */ beq lbl_8033AA9C -/* 8033AA00 80 06 00 10 */ lwz r0, 0x10(r6) -/* 8033AA04 90 1D 00 10 */ stw r0, 0x10(r29) -/* 8033AA08 93 A6 00 10 */ stw r29, 0x10(r6) -/* 8033AA0C 90 DD 00 14 */ stw r6, 0x14(r29) -/* 8033AA10 80 7D 00 10 */ lwz r3, 0x10(r29) -/* 8033AA14 28 03 00 00 */ cmplwi r3, 0 -/* 8033AA18 41 82 00 0C */ beq lbl_8033AA24 -/* 8033AA1C 93 A3 00 14 */ stw r29, 0x14(r3) -/* 8033AA20 48 00 01 24 */ b lbl_8033AB44 -lbl_8033AA24: -/* 8033AA24 93 AD 90 B8 */ stw r29, AlarmQueue(r13) -/* 8033AA28 48 00 7C F5 */ bl __OSGetSystemTime -/* 8033AA2C 80 DD 00 0C */ lwz r6, 0xc(r29) -/* 8033AA30 38 E0 00 00 */ li r7, 0 -/* 8033AA34 80 1D 00 08 */ lwz r0, 8(r29) -/* 8033AA38 6C E5 80 00 */ xoris r5, r7, 0x8000 -/* 8033AA3C 7D 04 30 10 */ subfc r8, r4, r6 -/* 8033AA40 7C 03 01 10 */ subfe r0, r3, r0 -/* 8033AA44 6C 06 80 00 */ xoris r6, r0, 0x8000 -/* 8033AA48 7C 07 40 10 */ subfc r0, r7, r8 -/* 8033AA4C 7C A5 31 10 */ subfe r5, r5, r6 -/* 8033AA50 7C A6 31 10 */ subfe r5, r6, r6 -/* 8033AA54 7C A5 00 D1 */ neg. r5, r5 -/* 8033AA58 41 82 00 10 */ beq lbl_8033AA68 -/* 8033AA5C 38 60 00 00 */ li r3, 0 -/* 8033AA60 4B FF F2 91 */ bl PPCMtdec -/* 8033AA64 48 00 00 E0 */ b lbl_8033AB44 -lbl_8033AA68: -/* 8033AA68 3C 80 80 00 */ lis r4, 0x8000 -/* 8033AA6C 6C E3 80 00 */ xoris r3, r7, 0x8000 -/* 8033AA70 7C 04 40 10 */ subfc r0, r4, r8 -/* 8033AA74 7C 63 31 10 */ subfe r3, r3, r6 -/* 8033AA78 7C 66 31 10 */ subfe r3, r6, r6 -/* 8033AA7C 7C 63 00 D1 */ neg. r3, r3 -/* 8033AA80 41 82 00 10 */ beq lbl_8033AA90 -/* 8033AA84 7D 03 43 78 */ mr r3, r8 -/* 8033AA88 4B FF F2 69 */ bl PPCMtdec -/* 8033AA8C 48 00 00 B8 */ b lbl_8033AB44 -lbl_8033AA90: -/* 8033AA90 38 64 FF FF */ addi r3, r4, -1 -/* 8033AA94 4B FF F2 5D */ bl PPCMtdec -/* 8033AA98 48 00 00 AC */ b lbl_8033AB44 -lbl_8033AA9C: -/* 8033AA9C 80 C6 00 14 */ lwz r6, 0x14(r6) -lbl_8033AAA0: -/* 8033AAA0 28 06 00 00 */ cmplwi r6, 0 -/* 8033AAA4 40 82 FF 3C */ bne lbl_8033A9E0 -/* 8033AAA8 3B C0 00 00 */ li r30, 0 -/* 8033AAAC 93 DD 00 14 */ stw r30, 0x14(r29) -/* 8033AAB0 38 6D 90 B8 */ la r3, AlarmQueue(r13) /* 80451638-_SDA_BASE_ */ -/* 8033AAB4 80 83 00 04 */ lwz r4, 4(r3) -/* 8033AAB8 97 A3 00 04 */ stwu r29, 4(r3) -/* 8033AABC 28 04 00 00 */ cmplwi r4, 0 -/* 8033AAC0 90 9D 00 10 */ stw r4, 0x10(r29) -/* 8033AAC4 41 82 00 0C */ beq lbl_8033AAD0 -/* 8033AAC8 93 A4 00 14 */ stw r29, 0x14(r4) -/* 8033AACC 48 00 00 78 */ b lbl_8033AB44 -lbl_8033AAD0: -/* 8033AAD0 93 A3 00 00 */ stw r29, 0(r3) -/* 8033AAD4 93 AD 90 B8 */ stw r29, AlarmQueue(r13) -/* 8033AAD8 48 00 7C 45 */ bl __OSGetSystemTime -/* 8033AADC 80 DD 00 0C */ lwz r6, 0xc(r29) -/* 8033AAE0 6F C5 80 00 */ xoris r5, r30, 0x8000 -/* 8033AAE4 80 1D 00 08 */ lwz r0, 8(r29) -/* 8033AAE8 7C E4 30 10 */ subfc r7, r4, r6 -/* 8033AAEC 7C 03 01 10 */ subfe r0, r3, r0 -/* 8033AAF0 6C 06 80 00 */ xoris r6, r0, 0x8000 -/* 8033AAF4 7C 1E 38 10 */ subfc r0, r30, r7 -/* 8033AAF8 7C A5 31 10 */ subfe r5, r5, r6 -/* 8033AAFC 7C A6 31 10 */ subfe r5, r6, r6 -/* 8033AB00 7C A5 00 D1 */ neg. r5, r5 -/* 8033AB04 41 82 00 10 */ beq lbl_8033AB14 -/* 8033AB08 38 60 00 00 */ li r3, 0 -/* 8033AB0C 4B FF F1 E5 */ bl PPCMtdec -/* 8033AB10 48 00 00 34 */ b lbl_8033AB44 -lbl_8033AB14: -/* 8033AB14 3C 80 80 00 */ lis r4, 0x8000 -/* 8033AB18 6F C3 80 00 */ xoris r3, r30, 0x8000 -/* 8033AB1C 7C 04 38 10 */ subfc r0, r4, r7 -/* 8033AB20 7C 63 31 10 */ subfe r3, r3, r6 -/* 8033AB24 7C 66 31 10 */ subfe r3, r6, r6 -/* 8033AB28 7C 63 00 D1 */ neg. r3, r3 -/* 8033AB2C 41 82 00 10 */ beq lbl_8033AB3C -/* 8033AB30 7C E3 3B 78 */ mr r3, r7 -/* 8033AB34 4B FF F1 BD */ bl PPCMtdec -/* 8033AB38 48 00 00 0C */ b lbl_8033AB44 -lbl_8033AB3C: -/* 8033AB3C 38 64 FF FF */ addi r3, r4, -1 -/* 8033AB40 4B FF F1 B1 */ bl PPCMtdec -lbl_8033AB44: -/* 8033AB44 BB 21 00 24 */ lmw r25, 0x24(r1) -/* 8033AB48 80 01 00 44 */ lwz r0, 0x44(r1) -/* 8033AB4C 38 21 00 40 */ addi r1, r1, 0x40 -/* 8033AB50 7C 08 03 A6 */ mtlr r0 -/* 8033AB54 4E 80 00 20 */ blr diff --git a/asm/dolphin/os/OSAlarm/OSInitAlarm.s b/asm/dolphin/os/OSAlarm/OSInitAlarm.s deleted file mode 100644 index 14716538cb..0000000000 --- a/asm/dolphin/os/OSAlarm/OSInitAlarm.s +++ /dev/null @@ -1,24 +0,0 @@ -lbl_8033A8A0: -/* 8033A8A0 7C 08 02 A6 */ mflr r0 -/* 8033A8A4 38 60 00 08 */ li r3, 8 -/* 8033A8A8 90 01 00 04 */ stw r0, 4(r1) -/* 8033A8AC 94 21 FF F8 */ stwu r1, -8(r1) -/* 8033A8B0 4B FF FE 55 */ bl __OSGetExceptionHandler -/* 8033A8B4 3C 80 80 34 */ lis r4, DecrementerExceptionHandler@ha /* 0x8033AF88@ha */ -/* 8033A8B8 38 84 AF 88 */ addi r4, r4, DecrementerExceptionHandler@l /* 0x8033AF88@l */ -/* 8033A8BC 7C 03 20 40 */ cmplw r3, r4 -/* 8033A8C0 41 82 00 28 */ beq lbl_8033A8E8 -/* 8033A8C4 38 00 00 00 */ li r0, 0 -/* 8033A8C8 38 6D 90 B8 */ la r3, AlarmQueue(r13) /* 80451638-_SDA_BASE_ */ -/* 8033A8CC 90 03 00 04 */ stw r0, 4(r3) -/* 8033A8D0 38 60 00 08 */ li r3, 8 -/* 8033A8D4 90 0D 90 B8 */ stw r0, AlarmQueue(r13) -/* 8033A8D8 4B FF FE 11 */ bl __OSSetExceptionHandler -/* 8033A8DC 3C 60 80 3D */ lis r3, ResetFunctionInfo@ha /* 0x803CF480@ha */ -/* 8033A8E0 38 63 F4 80 */ addi r3, r3, ResetFunctionInfo@l /* 0x803CF480@l */ -/* 8033A8E4 48 00 4D 7D */ bl OSRegisterResetFunction -lbl_8033A8E8: -/* 8033A8E8 80 01 00 0C */ lwz r0, 0xc(r1) -/* 8033A8EC 38 21 00 08 */ addi r1, r1, 8 -/* 8033A8F0 7C 08 03 A6 */ mtlr r0 -/* 8033A8F4 4E 80 00 20 */ blr diff --git a/asm/dolphin/os/OSAlarm/OSSetAlarm.s b/asm/dolphin/os/OSAlarm/OSSetAlarm.s deleted file mode 100644 index ba393ded21..0000000000 --- a/asm/dolphin/os/OSAlarm/OSSetAlarm.s +++ /dev/null @@ -1,27 +0,0 @@ -lbl_8033AB58: -/* 8033AB58 7C 08 02 A6 */ mflr r0 -/* 8033AB5C 90 01 00 04 */ stw r0, 4(r1) -/* 8033AB60 94 21 FF C8 */ stwu r1, -0x38(r1) -/* 8033AB64 BF 61 00 24 */ stmw r27, 0x24(r1) -/* 8033AB68 3B 63 00 00 */ addi r27, r3, 0 -/* 8033AB6C 3B A5 00 00 */ addi r29, r5, 0 -/* 8033AB70 3B 86 00 00 */ addi r28, r6, 0 -/* 8033AB74 3B C7 00 00 */ addi r30, r7, 0 -/* 8033AB78 48 00 2B 7D */ bl OSDisableInterrupts -/* 8033AB7C 38 00 00 00 */ li r0, 0 -/* 8033AB80 90 1B 00 1C */ stw r0, 0x1c(r27) -/* 8033AB84 7C 7F 1B 78 */ mr r31, r3 -/* 8033AB88 90 1B 00 18 */ stw r0, 0x18(r27) -/* 8033AB8C 48 00 7B 91 */ bl __OSGetSystemTime -/* 8033AB90 7C DC 20 14 */ addc r6, r28, r4 -/* 8033AB94 7C BD 19 14 */ adde r5, r29, r3 -/* 8033AB98 38 7B 00 00 */ addi r3, r27, 0 -/* 8033AB9C 38 FE 00 00 */ addi r7, r30, 0 -/* 8033ABA0 4B FF FD 69 */ bl InsertAlarm -/* 8033ABA4 7F E3 FB 78 */ mr r3, r31 -/* 8033ABA8 48 00 2B 75 */ bl OSRestoreInterrupts -/* 8033ABAC BB 61 00 24 */ lmw r27, 0x24(r1) -/* 8033ABB0 80 01 00 3C */ lwz r0, 0x3c(r1) -/* 8033ABB4 38 21 00 38 */ addi r1, r1, 0x38 -/* 8033ABB8 7C 08 03 A6 */ mtlr r0 -/* 8033ABBC 4E 80 00 20 */ blr diff --git a/asm/dolphin/os/OSAlarm/OSSetPeriodicAlarm.s b/asm/dolphin/os/OSAlarm/OSSetPeriodicAlarm.s deleted file mode 100644 index 8aca4481aa..0000000000 --- a/asm/dolphin/os/OSAlarm/OSSetPeriodicAlarm.s +++ /dev/null @@ -1,32 +0,0 @@ -lbl_8033ABC0: -/* 8033ABC0 7C 08 02 A6 */ mflr r0 -/* 8033ABC4 90 01 00 04 */ stw r0, 4(r1) -/* 8033ABC8 94 21 FF C0 */ stwu r1, -0x40(r1) -/* 8033ABCC BF 41 00 28 */ stmw r26, 0x28(r1) -/* 8033ABD0 3B 43 00 00 */ addi r26, r3, 0 -/* 8033ABD4 3B 85 00 00 */ addi r28, r5, 0 -/* 8033ABD8 3B 66 00 00 */ addi r27, r6, 0 -/* 8033ABDC 3B A7 00 00 */ addi r29, r7, 0 -/* 8033ABE0 3B E8 00 00 */ addi r31, r8, 0 -/* 8033ABE4 3B C9 00 00 */ addi r30, r9, 0 -/* 8033ABE8 48 00 2B 0D */ bl OSDisableInterrupts -/* 8033ABEC 93 FA 00 1C */ stw r31, 0x1c(r26) -/* 8033ABF0 7C 7F 1B 78 */ mr r31, r3 -/* 8033ABF4 38 9B 00 00 */ addi r4, r27, 0 -/* 8033ABF8 93 BA 00 18 */ stw r29, 0x18(r26) -/* 8033ABFC 38 7C 00 00 */ addi r3, r28, 0 -/* 8033AC00 48 00 7B 81 */ bl __OSTimeToSystemTime -/* 8033AC04 90 9A 00 24 */ stw r4, 0x24(r26) -/* 8033AC08 38 FE 00 00 */ addi r7, r30, 0 -/* 8033AC0C 38 C0 00 00 */ li r6, 0 -/* 8033AC10 90 7A 00 20 */ stw r3, 0x20(r26) -/* 8033AC14 38 7A 00 00 */ addi r3, r26, 0 -/* 8033AC18 38 A0 00 00 */ li r5, 0 -/* 8033AC1C 4B FF FC ED */ bl InsertAlarm -/* 8033AC20 7F E3 FB 78 */ mr r3, r31 -/* 8033AC24 48 00 2A F9 */ bl OSRestoreInterrupts -/* 8033AC28 BB 41 00 28 */ lmw r26, 0x28(r1) -/* 8033AC2C 80 01 00 44 */ lwz r0, 0x44(r1) -/* 8033AC30 38 21 00 40 */ addi r1, r1, 0x40 -/* 8033AC34 7C 08 03 A6 */ mtlr r0 -/* 8033AC38 4E 80 00 20 */ blr diff --git a/asm/dolphin/os/OSAudioSystem/__OSInitAudioSystem.s b/asm/dolphin/os/OSAudioSystem/__OSInitAudioSystem.s deleted file mode 100644 index ce1e68fb1e..0000000000 --- a/asm/dolphin/os/OSAudioSystem/__OSInitAudioSystem.s +++ /dev/null @@ -1,123 +0,0 @@ -lbl_8033B2D8: -/* 8033B2D8 7C 08 02 A6 */ mflr r0 -/* 8033B2DC 90 01 00 04 */ stw r0, 4(r1) -/* 8033B2E0 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 8033B2E4 BF 21 00 14 */ stmw r25, 0x14(r1) -/* 8033B2E8 4B FF FF A5 */ bl OSGetArenaHi -/* 8033B2EC 3C 80 81 00 */ lis r4, 0x8100 -/* 8033B2F0 38 A0 00 80 */ li r5, 0x80 -/* 8033B2F4 38 63 FF 80 */ addi r3, r3, -128 -/* 8033B2F8 4B CC 82 49 */ bl memcpy -/* 8033B2FC 3C 60 80 3D */ lis r3, DSPInitCode@ha /* 0x803CF490@ha */ -/* 8033B300 38 83 F4 90 */ addi r4, r3, DSPInitCode@l /* 0x803CF490@l */ -/* 8033B304 3C 60 81 00 */ lis r3, 0x8100 -/* 8033B308 38 A0 00 80 */ li r5, 0x80 -/* 8033B30C 4B CC 82 35 */ bl memcpy -/* 8033B310 3C 60 81 00 */ lis r3, 0x8100 -/* 8033B314 38 80 00 80 */ li r4, 0x80 -/* 8033B318 48 00 02 95 */ bl DCFlushRange -/* 8033B31C 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC005000@ha */ -/* 8033B320 38 63 50 00 */ addi r3, r3, 0x5000 /* 0xCC005000@l */ -/* 8033B324 38 00 00 43 */ li r0, 0x43 -/* 8033B328 B0 03 00 12 */ sth r0, 0x12(r3) -/* 8033B32C 3B E3 00 0A */ addi r31, r3, 0xa -/* 8033B330 38 00 08 AC */ li r0, 0x8ac -/* 8033B334 B0 03 00 0A */ sth r0, 0xa(r3) -/* 8033B338 A0 03 00 0A */ lhz r0, 0xa(r3) -/* 8033B33C 60 00 00 01 */ ori r0, r0, 1 -/* 8033B340 B0 03 00 0A */ sth r0, 0xa(r3) -lbl_8033B344: -/* 8033B344 A0 1F 00 00 */ lhz r0, 0(r31) -/* 8033B348 54 00 07 FF */ clrlwi. r0, r0, 0x1f -/* 8033B34C 40 82 FF F8 */ bne lbl_8033B344 -/* 8033B350 38 00 00 00 */ li r0, 0 -/* 8033B354 3C 80 CC 00 */ lis r4, 0xCC00 /* 0xCC005000@ha */ -/* 8033B358 B0 04 50 00 */ sth r0, 0x5000(r4) /* 0xCC005000@l */ -lbl_8033B35C: -/* 8033B35C 3B C4 50 00 */ addi r30, r4, 0x5000 -/* 8033B360 A4 7E 00 04 */ lhzu r3, 4(r30) -/* 8033B364 3B A4 50 00 */ addi r29, r4, 0x5000 -/* 8033B368 A4 1D 00 06 */ lhzu r0, 6(r29) -/* 8033B36C 50 60 80 1E */ rlwimi r0, r3, 0x10, 0, 0xf -/* 8033B370 54 00 00 01 */ rlwinm. r0, r0, 0, 0, 0 -/* 8033B374 40 82 FF E8 */ bne lbl_8033B35C -/* 8033B378 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC005000@ha */ -/* 8033B37C 3C 00 01 00 */ lis r0, 0x100 -/* 8033B380 3B 63 50 00 */ addi r27, r3, 0x5000 /* 0xCC005000@l */ -/* 8033B384 94 1B 00 20 */ stwu r0, 0x20(r27) -/* 8033B388 38 00 00 00 */ li r0, 0 -/* 8033B38C 3B 43 50 00 */ addi r26, r3, 0x5000 -/* 8033B390 94 1A 00 24 */ stwu r0, 0x24(r26) -/* 8033B394 38 00 00 20 */ li r0, 0x20 -/* 8033B398 3B 23 50 00 */ addi r25, r3, 0x5000 -/* 8033B39C 94 19 00 28 */ stwu r0, 0x28(r25) -/* 8033B3A0 A0 7F 00 00 */ lhz r3, 0(r31) -/* 8033B3A4 48 00 00 08 */ b lbl_8033B3AC -lbl_8033B3A8: -/* 8033B3A8 A0 7F 00 00 */ lhz r3, 0(r31) -lbl_8033B3AC: -/* 8033B3AC 54 60 06 B5 */ rlwinm. r0, r3, 0, 0x1a, 0x1a -/* 8033B3B0 41 82 FF F8 */ beq lbl_8033B3A8 -/* 8033B3B4 B0 7F 00 00 */ sth r3, 0(r31) -/* 8033B3B8 48 00 73 5D */ bl OSGetTick -/* 8033B3BC 7C 7C 1B 78 */ mr r28, r3 -lbl_8033B3C0: -/* 8033B3C0 48 00 73 55 */ bl OSGetTick -/* 8033B3C4 7C 1C 18 50 */ subf r0, r28, r3 -/* 8033B3C8 2C 00 08 92 */ cmpwi r0, 0x892 -/* 8033B3CC 41 80 FF F4 */ blt lbl_8033B3C0 -/* 8033B3D0 3C 00 01 00 */ lis r0, 0x100 -/* 8033B3D4 90 1B 00 00 */ stw r0, 0(r27) -/* 8033B3D8 38 60 00 00 */ li r3, 0 -/* 8033B3DC 38 00 00 20 */ li r0, 0x20 -/* 8033B3E0 90 7A 00 00 */ stw r3, 0(r26) -/* 8033B3E4 90 19 00 00 */ stw r0, 0(r25) -/* 8033B3E8 A0 7F 00 00 */ lhz r3, 0(r31) -/* 8033B3EC 48 00 00 08 */ b lbl_8033B3F4 -lbl_8033B3F0: -/* 8033B3F0 A0 7F 00 00 */ lhz r3, 0(r31) -lbl_8033B3F4: -/* 8033B3F4 54 60 06 B5 */ rlwinm. r0, r3, 0, 0x1a, 0x1a -/* 8033B3F8 41 82 FF F8 */ beq lbl_8033B3F0 -/* 8033B3FC B0 7F 00 00 */ sth r3, 0(r31) -/* 8033B400 A0 1F 00 00 */ lhz r0, 0(r31) -/* 8033B404 54 00 05 66 */ rlwinm r0, r0, 0, 0x15, 0x13 -/* 8033B408 B0 1F 00 00 */ sth r0, 0(r31) -lbl_8033B40C: -/* 8033B40C A0 1F 00 00 */ lhz r0, 0(r31) -/* 8033B410 54 00 05 6B */ rlwinm. r0, r0, 0, 0x15, 0x15 -/* 8033B414 40 82 FF F8 */ bne lbl_8033B40C -/* 8033B418 A0 1F 00 00 */ lhz r0, 0(r31) -/* 8033B41C 54 00 07 B8 */ rlwinm r0, r0, 0, 0x1e, 0x1c -/* 8033B420 B0 1F 00 00 */ sth r0, 0(r31) -/* 8033B424 A0 1E 00 00 */ lhz r0, 0(r30) -/* 8033B428 48 00 00 08 */ b lbl_8033B430 -lbl_8033B42C: -/* 8033B42C A0 1E 00 00 */ lhz r0, 0(r30) -lbl_8033B430: -/* 8033B430 54 05 04 3E */ clrlwi r5, r0, 0x10 -/* 8033B434 54 00 04 21 */ rlwinm. r0, r0, 0, 0x10, 0x10 -/* 8033B438 41 82 FF F4 */ beq lbl_8033B42C -/* 8033B43C A0 1F 00 00 */ lhz r0, 0(r31) -/* 8033B440 A0 9D 00 00 */ lhz r4, 0(r29) -/* 8033B444 60 00 00 04 */ ori r0, r0, 4 -/* 8033B448 B0 1F 00 00 */ sth r0, 0(r31) -/* 8033B44C 38 00 08 AC */ li r0, 0x8ac -/* 8033B450 B0 1F 00 00 */ sth r0, 0(r31) -/* 8033B454 A0 1F 00 00 */ lhz r0, 0(r31) -/* 8033B458 60 00 00 01 */ ori r0, r0, 1 -/* 8033B45C B0 1F 00 00 */ sth r0, 0(r31) -lbl_8033B460: -/* 8033B460 A0 1F 00 00 */ lhz r0, 0(r31) -/* 8033B464 54 00 07 FF */ clrlwi. r0, r0, 0x1f -/* 8033B468 40 82 FF F8 */ bne lbl_8033B460 -/* 8033B46C 4B FF FE 21 */ bl OSGetArenaHi -/* 8033B470 38 83 FF 80 */ addi r4, r3, -128 -/* 8033B474 3C 60 81 00 */ lis r3, 0x8100 -/* 8033B478 38 A0 00 80 */ li r5, 0x80 -/* 8033B47C 4B CC 80 C5 */ bl memcpy -/* 8033B480 BB 21 00 14 */ lmw r25, 0x14(r1) -/* 8033B484 80 01 00 34 */ lwz r0, 0x34(r1) -/* 8033B488 38 21 00 30 */ addi r1, r1, 0x30 -/* 8033B48C 7C 08 03 A6 */ mtlr r0 -/* 8033B490 4E 80 00 20 */ blr diff --git a/asm/dolphin/os/OSContext/OSDumpContext.s b/asm/dolphin/os/OSContext/OSDumpContext.s deleted file mode 100644 index 743b14b2eb..0000000000 --- a/asm/dolphin/os/OSContext/OSDumpContext.s +++ /dev/null @@ -1,191 +0,0 @@ -lbl_8033C0E0: -/* 8033C0E0 7C 08 02 A6 */ mflr r0 -/* 8033C0E4 90 01 00 04 */ stw r0, 4(r1) -/* 8033C0E8 94 21 FD 08 */ stwu r1, -0x2f8(r1) -/* 8033C0EC BF 21 02 DC */ stmw r25, 0x2dc(r1) -/* 8033C0F0 7C 7C 1B 78 */ mr r28, r3 -/* 8033C0F4 3C 60 80 3D */ lis r3, lit_61@ha /* 0x803CF740@ha */ -/* 8033C0F8 4C C6 31 82 */ crclr 6 -/* 8033C0FC 3B E3 F7 40 */ addi r31, r3, lit_61@l /* 0x803CF740@l */ -/* 8033C100 7F E3 FB 78 */ mr r3, r31 -/* 8033C104 7F 84 E3 78 */ mr r4, r28 -/* 8033C108 4B CC A9 B5 */ bl OSReport -/* 8033C10C 3B 20 00 00 */ li r25, 0 -/* 8033C110 57 20 10 3A */ slwi r0, r25, 2 -/* 8033C114 7F 7C 02 14 */ add r27, r28, r0 -/* 8033C118 48 00 00 04 */ b lbl_8033C11C -lbl_8033C11C: -/* 8033C11C 48 00 00 04 */ b lbl_8033C120 -lbl_8033C120: -/* 8033C120 48 00 00 04 */ b lbl_8033C124 -lbl_8033C124: -/* 8033C124 81 1B 00 40 */ lwz r8, 0x40(r27) -/* 8033C128 7F 24 CB 78 */ mr r4, r25 -/* 8033C12C 80 BB 00 00 */ lwz r5, 0(r27) -/* 8033C130 38 7F 00 44 */ addi r3, r31, 0x44 -/* 8033C134 4C C6 31 82 */ crclr 6 -/* 8033C138 7C A6 2B 78 */ mr r6, r5 -/* 8033C13C 7D 09 43 78 */ mr r9, r8 -/* 8033C140 38 F9 00 10 */ addi r7, r25, 0x10 -/* 8033C144 4B CC A9 79 */ bl OSReport -/* 8033C148 3B 7B 00 04 */ addi r27, r27, 4 -/* 8033C14C 3B 39 00 01 */ addi r25, r25, 1 -/* 8033C150 28 19 00 10 */ cmplwi r25, 0x10 -/* 8033C154 41 80 FF D0 */ blt lbl_8033C124 -/* 8033C158 80 9C 00 84 */ lwz r4, 0x84(r28) -/* 8033C15C 38 7F 00 74 */ addi r3, r31, 0x74 -/* 8033C160 80 BC 00 80 */ lwz r5, 0x80(r28) -/* 8033C164 4C C6 31 82 */ crclr 6 -/* 8033C168 4B CC A9 55 */ bl OSReport -/* 8033C16C 80 9C 01 98 */ lwz r4, 0x198(r28) -/* 8033C170 38 7F 00 A4 */ addi r3, r31, 0xa4 -/* 8033C174 80 BC 01 9C */ lwz r5, 0x19c(r28) -/* 8033C178 4C C6 31 82 */ crclr 6 -/* 8033C17C 4B CC A9 41 */ bl OSReport -/* 8033C180 38 7F 00 D4 */ addi r3, r31, 0xd4 -/* 8033C184 4C C6 31 82 */ crclr 6 -/* 8033C188 4B CC A9 35 */ bl OSReport -/* 8033C18C 3B 20 00 00 */ li r25, 0 -/* 8033C190 57 20 10 3A */ slwi r0, r25, 2 -/* 8033C194 7F 7C 02 14 */ add r27, r28, r0 -/* 8033C198 48 00 00 04 */ b lbl_8033C19C -lbl_8033C19C: -/* 8033C19C 48 00 00 04 */ b lbl_8033C1A0 -lbl_8033C1A0: -/* 8033C1A0 48 00 00 04 */ b lbl_8033C1A4 -lbl_8033C1A4: -/* 8033C1A4 80 BB 01 A4 */ lwz r5, 0x1a4(r27) -/* 8033C1A8 7F 24 CB 78 */ mr r4, r25 -/* 8033C1AC 80 FB 01 B4 */ lwz r7, 0x1b4(r27) -/* 8033C1B0 38 7F 00 E8 */ addi r3, r31, 0xe8 -/* 8033C1B4 38 D9 00 04 */ addi r6, r25, 4 -/* 8033C1B8 4C C6 31 82 */ crclr 6 -/* 8033C1BC 4B CC A9 01 */ bl OSReport -/* 8033C1C0 3B 7B 00 04 */ addi r27, r27, 4 -/* 8033C1C4 3B 39 00 01 */ addi r25, r25, 1 -/* 8033C1C8 28 19 00 04 */ cmplwi r25, 4 -/* 8033C1CC 41 80 FF D8 */ blt lbl_8033C1A4 -/* 8033C1D0 A0 1C 01 A2 */ lhz r0, 0x1a2(r28) -/* 8033C1D4 54 00 07 FE */ clrlwi r0, r0, 0x1f -/* 8033C1D8 28 00 00 00 */ cmplwi r0, 0 -/* 8033C1DC 41 82 01 3C */ beq lbl_8033C318 -/* 8033C1E0 48 00 15 15 */ bl OSDisableInterrupts -/* 8033C1E4 3C C0 80 00 */ lis r6, 0x8000 /* 0x800000D4@ha */ -/* 8033C1E8 80 06 00 D4 */ lwz r0, 0x00D4(r6) /* 0x800000D4@l */ -/* 8033C1EC 38 A0 00 00 */ li r5, 0 -/* 8033C1F0 38 81 00 10 */ addi r4, r1, 0x10 -/* 8033C1F4 B0 A1 01 B0 */ sth r5, 0x1b0(r1) -/* 8033C1F8 7C 1E 03 78 */ mr r30, r0 -/* 8033C1FC 7C 7D 1B 78 */ mr r29, r3 -/* 8033C200 B0 A1 01 B2 */ sth r5, 0x1b2(r1) -/* 8033C204 80 06 00 D8 */ lwz r0, 0xd8(r6) -/* 8033C208 7C 04 00 40 */ cmplw r4, r0 -/* 8033C20C 40 82 00 08 */ bne lbl_8033C214 -/* 8033C210 90 A6 00 D8 */ stw r5, 0xd8(r6) -lbl_8033C214: -/* 8033C214 38 61 00 10 */ addi r3, r1, 0x10 -/* 8033C218 4B FF FC 21 */ bl OSSetCurrentContext -/* 8033C21C 38 7F 01 0C */ addi r3, r31, 0x10c -/* 8033C220 4C C6 31 82 */ crclr 6 -/* 8033C224 4B CC A8 99 */ bl OSReport -/* 8033C228 3B 20 00 00 */ li r25, 0 -/* 8033C22C 57 20 18 38 */ slwi r0, r25, 3 -/* 8033C230 7F 5C 02 14 */ add r26, r28, r0 -/* 8033C234 48 00 00 04 */ b lbl_8033C238 -lbl_8033C238: -/* 8033C238 48 00 00 04 */ b lbl_8033C23C -lbl_8033C23C: -/* 8033C23C 48 00 00 04 */ b lbl_8033C240 -lbl_8033C240: -/* 8033C240 C8 3A 00 98 */ lfd f1, 0x98(r26) -/* 8033C244 48 02 5E 69 */ bl __cvt_fp2unsigned -/* 8033C248 7C 7B 1B 78 */ mr r27, r3 -/* 8033C24C C8 3A 00 90 */ lfd f1, 0x90(r26) -/* 8033C250 48 02 5E 5D */ bl __cvt_fp2unsigned -/* 8033C254 7C 65 1B 78 */ mr r5, r3 -/* 8033C258 4C C6 31 82 */ crclr 6 -/* 8033C25C 7F 24 CB 78 */ mr r4, r25 -/* 8033C260 7F 67 DB 78 */ mr r7, r27 -/* 8033C264 38 7F 01 20 */ addi r3, r31, 0x120 -/* 8033C268 38 D9 00 01 */ addi r6, r25, 1 -/* 8033C26C 4B CC A8 51 */ bl OSReport -/* 8033C270 3B 5A 00 10 */ addi r26, r26, 0x10 -/* 8033C274 3B 39 00 02 */ addi r25, r25, 2 -/* 8033C278 28 19 00 20 */ cmplwi r25, 0x20 -/* 8033C27C 41 80 FF C4 */ blt lbl_8033C240 -/* 8033C280 38 7F 01 3C */ addi r3, r31, 0x13c -/* 8033C284 4C C6 31 82 */ crclr 6 -/* 8033C288 4B CC A8 35 */ bl OSReport -/* 8033C28C 3B 20 00 00 */ li r25, 0 -/* 8033C290 57 20 18 38 */ slwi r0, r25, 3 -/* 8033C294 7F 5C 02 14 */ add r26, r28, r0 -/* 8033C298 48 00 00 04 */ b lbl_8033C29C -lbl_8033C29C: -/* 8033C29C 48 00 00 04 */ b lbl_8033C2A0 -lbl_8033C2A0: -/* 8033C2A0 48 00 00 04 */ b lbl_8033C2A4 -lbl_8033C2A4: -/* 8033C2A4 C8 3A 01 D0 */ lfd f1, 0x1d0(r26) -/* 8033C2A8 48 02 5E 05 */ bl __cvt_fp2unsigned -/* 8033C2AC 7C 7B 1B 78 */ mr r27, r3 -/* 8033C2B0 C8 3A 01 C8 */ lfd f1, 0x1c8(r26) -/* 8033C2B4 48 02 5D F9 */ bl __cvt_fp2unsigned -/* 8033C2B8 7C 65 1B 78 */ mr r5, r3 -/* 8033C2BC 4C C6 31 82 */ crclr 6 -/* 8033C2C0 7F 24 CB 78 */ mr r4, r25 -/* 8033C2C4 7F 67 DB 78 */ mr r7, r27 -/* 8033C2C8 38 7F 01 50 */ addi r3, r31, 0x150 -/* 8033C2CC 38 D9 00 01 */ addi r6, r25, 1 -/* 8033C2D0 4B CC A7 ED */ bl OSReport -/* 8033C2D4 3B 5A 00 10 */ addi r26, r26, 0x10 -/* 8033C2D8 3B 39 00 02 */ addi r25, r25, 2 -/* 8033C2DC 28 19 00 20 */ cmplwi r25, 0x20 -/* 8033C2E0 41 80 FF C4 */ blt lbl_8033C2A4 -/* 8033C2E4 38 A0 00 00 */ li r5, 0 -/* 8033C2E8 B0 A1 01 B0 */ sth r5, 0x1b0(r1) -/* 8033C2EC 3C 60 80 00 */ lis r3, 0x8000 /* 0x800000D8@ha */ -/* 8033C2F0 38 81 00 10 */ addi r4, r1, 0x10 -/* 8033C2F4 B0 A1 01 B2 */ sth r5, 0x1b2(r1) -/* 8033C2F8 80 03 00 D8 */ lwz r0, 0x00D8(r3) /* 0x800000D8@l */ -/* 8033C2FC 7C 04 00 40 */ cmplw r4, r0 -/* 8033C300 40 82 00 08 */ bne lbl_8033C308 -/* 8033C304 90 A3 00 D8 */ stw r5, 0xd8(r3) -lbl_8033C308: -/* 8033C308 7F C3 F3 78 */ mr r3, r30 -/* 8033C30C 4B FF FB 2D */ bl OSSetCurrentContext -/* 8033C310 7F A3 EB 78 */ mr r3, r29 -/* 8033C314 48 00 14 09 */ bl OSRestoreInterrupts -lbl_8033C318: -/* 8033C318 38 7F 01 70 */ addi r3, r31, 0x170 -/* 8033C31C 4C C6 31 82 */ crclr 6 -/* 8033C320 4B CC A7 9D */ bl OSReport -/* 8033C324 83 3C 00 04 */ lwz r25, 4(r28) -/* 8033C328 3B 40 00 00 */ li r26, 0 -/* 8033C32C 48 00 00 04 */ b lbl_8033C330 -lbl_8033C330: -/* 8033C330 48 00 00 04 */ b lbl_8033C334 -lbl_8033C334: -/* 8033C334 48 00 00 20 */ b lbl_8033C354 -lbl_8033C338: -/* 8033C338 80 B9 00 00 */ lwz r5, 0(r25) -/* 8033C33C 7F 24 CB 78 */ mr r4, r25 -/* 8033C340 80 D9 00 04 */ lwz r6, 4(r25) -/* 8033C344 38 7F 01 98 */ addi r3, r31, 0x198 -/* 8033C348 4C C6 31 82 */ crclr 6 -/* 8033C34C 4B CC A7 71 */ bl OSReport -/* 8033C350 83 39 00 00 */ lwz r25, 0(r25) -lbl_8033C354: -/* 8033C354 28 19 00 00 */ cmplwi r25, 0 -/* 8033C358 41 82 00 1C */ beq lbl_8033C374 -/* 8033C35C 3C 19 00 01 */ addis r0, r25, 1 -/* 8033C360 28 00 FF FF */ cmplwi r0, 0xffff -/* 8033C364 41 82 00 10 */ beq lbl_8033C374 -/* 8033C368 28 1A 00 10 */ cmplwi r26, 0x10 -/* 8033C36C 3B 5A 00 01 */ addi r26, r26, 1 -/* 8033C370 41 80 FF C8 */ blt lbl_8033C338 -lbl_8033C374: -/* 8033C374 BB 21 02 DC */ lmw r25, 0x2dc(r1) -/* 8033C378 80 01 02 FC */ lwz r0, 0x2fc(r1) -/* 8033C37C 38 21 02 F8 */ addi r1, r1, 0x2f8 -/* 8033C380 7C 08 03 A6 */ mtlr r0 -/* 8033C384 4E 80 00 20 */ blr diff --git a/asm/dolphin/os/OSContext/__OSContextInit.s b/asm/dolphin/os/OSContext/__OSContextInit.s deleted file mode 100644 index 7f29648761..0000000000 --- a/asm/dolphin/os/OSContext/__OSContextInit.s +++ /dev/null @@ -1,19 +0,0 @@ -lbl_8033C40C: -/* 8033C40C 7C 08 02 A6 */ mflr r0 -/* 8033C410 90 01 00 04 */ stw r0, 4(r1) -/* 8033C414 94 21 FF F8 */ stwu r1, -8(r1) -/* 8033C418 3C 60 80 34 */ lis r3, OSSwitchFPUContext@ha /* 0x8033C388@ha */ -/* 8033C41C 38 83 C3 88 */ addi r4, r3, OSSwitchFPUContext@l /* 0x8033C388@l */ -/* 8033C420 38 60 00 07 */ li r3, 7 -/* 8033C424 4B FF E2 C5 */ bl __OSSetExceptionHandler -/* 8033C428 38 00 00 00 */ li r0, 0 -/* 8033C42C 4C C6 31 82 */ crclr 6 -/* 8033C430 3C 80 80 00 */ lis r4, 0x8000 /* 0x800000D8@ha */ -/* 8033C434 3C 60 80 3D */ lis r3, lit_76@ha /* 0x803CF8F4@ha */ -/* 8033C438 90 04 00 D8 */ stw r0, 0x00D8(r4) /* 0x800000D8@l */ -/* 8033C43C 38 63 F8 F4 */ addi r3, r3, lit_76@l /* 0x803CF8F4@l */ -/* 8033C440 48 00 9F F5 */ bl DBPrintf -/* 8033C444 80 01 00 0C */ lwz r0, 0xc(r1) -/* 8033C448 38 21 00 08 */ addi r1, r1, 8 -/* 8033C44C 7C 08 03 A6 */ mtlr r0 -/* 8033C450 4E 80 00 20 */ blr diff --git a/asm/dolphin/os/OSInterrupt/SetInterruptMask.s b/asm/dolphin/os/OSInterrupt/SetInterruptMask.s deleted file mode 100644 index 894953aeb2..0000000000 --- a/asm/dolphin/os/OSInterrupt/SetInterruptMask.s +++ /dev/null @@ -1,220 +0,0 @@ -lbl_8033D7E4: -/* 8033D7E4 7C 60 00 34 */ cntlzw r0, r3 -/* 8033D7E8 2C 00 00 0C */ cmpwi r0, 0xc -/* 8033D7EC 40 80 00 24 */ bge lbl_8033D810 -/* 8033D7F0 2C 00 00 08 */ cmpwi r0, 8 -/* 8033D7F4 41 82 00 FC */ beq lbl_8033D8F0 -/* 8033D7F8 40 80 01 28 */ bge lbl_8033D920 -/* 8033D7FC 2C 00 00 05 */ cmpwi r0, 5 -/* 8033D800 40 80 00 9C */ bge lbl_8033D89C -/* 8033D804 2C 00 00 00 */ cmpwi r0, 0 -/* 8033D808 40 80 00 28 */ bge lbl_8033D830 -/* 8033D80C 48 00 02 AC */ b lbl_8033DAB8 -lbl_8033D810: -/* 8033D810 2C 00 00 11 */ cmpwi r0, 0x11 -/* 8033D814 40 80 00 10 */ bge lbl_8033D824 -/* 8033D818 2C 00 00 0F */ cmpwi r0, 0xf -/* 8033D81C 40 80 01 A8 */ bge lbl_8033D9C4 -/* 8033D820 48 00 01 50 */ b lbl_8033D970 -lbl_8033D824: -/* 8033D824 2C 00 00 1B */ cmpwi r0, 0x1b -/* 8033D828 40 80 02 90 */ bge lbl_8033DAB8 -/* 8033D82C 48 00 01 D8 */ b lbl_8033DA04 -lbl_8033D830: -/* 8033D830 54 80 00 00 */ rlwinm r0, r4, 0, 0, 0 -/* 8033D834 28 00 00 00 */ cmplwi r0, 0 -/* 8033D838 38 A0 00 00 */ li r5, 0 -/* 8033D83C 40 82 00 08 */ bne lbl_8033D844 -/* 8033D840 60 A5 00 01 */ ori r5, r5, 1 -lbl_8033D844: -/* 8033D844 54 80 00 42 */ rlwinm r0, r4, 0, 1, 1 -/* 8033D848 28 00 00 00 */ cmplwi r0, 0 -/* 8033D84C 40 82 00 08 */ bne lbl_8033D854 -/* 8033D850 60 A5 00 02 */ ori r5, r5, 2 -lbl_8033D854: -/* 8033D854 54 80 00 84 */ rlwinm r0, r4, 0, 2, 2 -/* 8033D858 28 00 00 00 */ cmplwi r0, 0 -/* 8033D85C 40 82 00 08 */ bne lbl_8033D864 -/* 8033D860 60 A5 00 04 */ ori r5, r5, 4 -lbl_8033D864: -/* 8033D864 54 80 00 C6 */ rlwinm r0, r4, 0, 3, 3 -/* 8033D868 28 00 00 00 */ cmplwi r0, 0 -/* 8033D86C 40 82 00 08 */ bne lbl_8033D874 -/* 8033D870 60 A5 00 08 */ ori r5, r5, 8 -lbl_8033D874: -/* 8033D874 54 80 01 08 */ rlwinm r0, r4, 0, 4, 4 -/* 8033D878 28 00 00 00 */ cmplwi r0, 0 -/* 8033D87C 40 82 00 08 */ bne lbl_8033D884 -/* 8033D880 60 A5 00 10 */ ori r5, r5, 0x10 -lbl_8033D884: -/* 8033D884 3C 80 CC 00 */ lis r4, 0xCC00 /* 0xCC004000@ha */ -/* 8033D888 54 A0 04 3E */ clrlwi r0, r5, 0x10 -/* 8033D88C 38 84 40 00 */ addi r4, r4, 0x4000 /* 0xCC004000@l */ -/* 8033D890 B0 04 00 1C */ sth r0, 0x1c(r4) -/* 8033D894 54 63 01 7E */ clrlwi r3, r3, 5 -/* 8033D898 48 00 02 20 */ b lbl_8033DAB8 -lbl_8033D89C: -/* 8033D89C 3C A0 CC 00 */ lis r5, 0xCC00 /* 0xCC005000@ha */ -/* 8033D8A0 38 A5 50 00 */ addi r5, r5, 0x5000 /* 0xCC005000@l */ -/* 8033D8A4 38 A5 00 0A */ addi r5, r5, 0xa -/* 8033D8A8 54 80 01 4A */ rlwinm r0, r4, 0, 5, 5 -/* 8033D8AC A0 C5 00 00 */ lhz r6, 0(r5) -/* 8033D8B0 28 00 00 00 */ cmplwi r0, 0 -/* 8033D8B4 54 C6 07 6C */ rlwinm r6, r6, 0, 0x1d, 0x16 -/* 8033D8B8 40 82 00 08 */ bne lbl_8033D8C0 -/* 8033D8BC 60 C6 00 10 */ ori r6, r6, 0x10 -lbl_8033D8C0: -/* 8033D8C0 54 80 01 8C */ rlwinm r0, r4, 0, 6, 6 -/* 8033D8C4 28 00 00 00 */ cmplwi r0, 0 -/* 8033D8C8 40 82 00 08 */ bne lbl_8033D8D0 -/* 8033D8CC 60 C6 00 40 */ ori r6, r6, 0x40 -lbl_8033D8D0: -/* 8033D8D0 54 80 01 CE */ rlwinm r0, r4, 0, 7, 7 -/* 8033D8D4 28 00 00 00 */ cmplwi r0, 0 -/* 8033D8D8 40 82 00 08 */ bne lbl_8033D8E0 -/* 8033D8DC 60 C6 01 00 */ ori r6, r6, 0x100 -lbl_8033D8E0: -/* 8033D8E0 54 C0 04 3E */ clrlwi r0, r6, 0x10 -/* 8033D8E4 B0 05 00 00 */ sth r0, 0(r5) -/* 8033D8E8 54 63 02 08 */ rlwinm r3, r3, 0, 8, 4 -/* 8033D8EC 48 00 01 CC */ b lbl_8033DAB8 -lbl_8033D8F0: -/* 8033D8F0 54 80 02 10 */ rlwinm r0, r4, 0, 8, 8 -/* 8033D8F4 3C 80 CC 00 */ lis r4, 0xCC00 /* 0xCC006C00@ha */ -/* 8033D8F8 28 00 00 00 */ cmplwi r0, 0 -/* 8033D8FC 80 A4 6C 00 */ lwz r5, 0x6C00(r4) /* 0xCC006C00@l */ -/* 8033D900 38 00 FF D3 */ li r0, -45 -/* 8033D904 7C A5 00 38 */ and r5, r5, r0 -/* 8033D908 40 82 00 08 */ bne lbl_8033D910 -/* 8033D90C 60 A5 00 04 */ ori r5, r5, 4 -lbl_8033D910: -/* 8033D910 3C 80 CC 00 */ lis r4, 0xCC00 /* 0xCC006C00@ha */ -/* 8033D914 90 A4 6C 00 */ stw r5, 0x6C00(r4) /* 0xCC006C00@l */ -/* 8033D918 54 63 02 4E */ rlwinm r3, r3, 0, 9, 7 -/* 8033D91C 48 00 01 9C */ b lbl_8033DAB8 -lbl_8033D920: -/* 8033D920 54 80 02 52 */ rlwinm r0, r4, 0, 9, 9 -/* 8033D924 3C A0 CC 00 */ lis r5, 0xCC00 /* 0xCC006800@ha */ -/* 8033D928 28 00 00 00 */ cmplwi r0, 0 -/* 8033D92C 80 A5 68 00 */ lwz r5, 0x6800(r5) /* 0xCC006800@l */ -/* 8033D930 38 00 D3 F0 */ li r0, -11280 -/* 8033D934 7C A5 00 38 */ and r5, r5, r0 -/* 8033D938 40 82 00 08 */ bne lbl_8033D940 -/* 8033D93C 60 A5 00 01 */ ori r5, r5, 1 -lbl_8033D940: -/* 8033D940 54 80 02 94 */ rlwinm r0, r4, 0, 0xa, 0xa -/* 8033D944 28 00 00 00 */ cmplwi r0, 0 -/* 8033D948 40 82 00 08 */ bne lbl_8033D950 -/* 8033D94C 60 A5 00 04 */ ori r5, r5, 4 -lbl_8033D950: -/* 8033D950 54 80 02 D6 */ rlwinm r0, r4, 0, 0xb, 0xb -/* 8033D954 28 00 00 00 */ cmplwi r0, 0 -/* 8033D958 40 82 00 08 */ bne lbl_8033D960 -/* 8033D95C 60 A5 04 00 */ ori r5, r5, 0x400 -lbl_8033D960: -/* 8033D960 3C 80 CC 00 */ lis r4, 0xCC00 /* 0xCC006800@ha */ -/* 8033D964 90 A4 68 00 */ stw r5, 0x6800(r4) /* 0xCC006800@l */ -/* 8033D968 54 63 03 10 */ rlwinm r3, r3, 0, 0xc, 8 -/* 8033D96C 48 00 01 4C */ b lbl_8033DAB8 -lbl_8033D970: -/* 8033D970 3C A0 CC 00 */ lis r5, 0xCC00 /* 0xCC006800@ha */ -/* 8033D974 38 C5 68 00 */ addi r6, r5, 0x6800 /* 0xCC006800@l */ -/* 8033D978 38 C6 00 14 */ addi r6, r6, 0x14 -/* 8033D97C 54 80 03 18 */ rlwinm r0, r4, 0, 0xc, 0xc -/* 8033D980 80 E6 00 00 */ lwz r7, 0(r6) -/* 8033D984 38 A0 F3 F0 */ li r5, -3088 -/* 8033D988 28 00 00 00 */ cmplwi r0, 0 -/* 8033D98C 7C E7 28 38 */ and r7, r7, r5 -/* 8033D990 40 82 00 08 */ bne lbl_8033D998 -/* 8033D994 60 E7 00 01 */ ori r7, r7, 1 -lbl_8033D998: -/* 8033D998 54 80 03 5A */ rlwinm r0, r4, 0, 0xd, 0xd -/* 8033D99C 28 00 00 00 */ cmplwi r0, 0 -/* 8033D9A0 40 82 00 08 */ bne lbl_8033D9A8 -/* 8033D9A4 60 E7 00 04 */ ori r7, r7, 4 -lbl_8033D9A8: -/* 8033D9A8 54 80 03 9C */ rlwinm r0, r4, 0, 0xe, 0xe -/* 8033D9AC 28 00 00 00 */ cmplwi r0, 0 -/* 8033D9B0 40 82 00 08 */ bne lbl_8033D9B8 -/* 8033D9B4 60 E7 04 00 */ ori r7, r7, 0x400 -lbl_8033D9B8: -/* 8033D9B8 90 E6 00 00 */ stw r7, 0(r6) -/* 8033D9BC 54 63 03 D6 */ rlwinm r3, r3, 0, 0xf, 0xb -/* 8033D9C0 48 00 00 F8 */ b lbl_8033DAB8 -lbl_8033D9C4: -/* 8033D9C4 3C A0 CC 00 */ lis r5, 0xCC00 /* 0xCC006800@ha */ -/* 8033D9C8 38 A5 68 00 */ addi r5, r5, 0x6800 /* 0xCC006800@l */ -/* 8033D9CC 38 A5 00 28 */ addi r5, r5, 0x28 -/* 8033D9D0 54 80 03 DE */ rlwinm r0, r4, 0, 0xf, 0xf -/* 8033D9D4 80 C5 00 00 */ lwz r6, 0(r5) -/* 8033D9D8 28 00 00 00 */ cmplwi r0, 0 -/* 8033D9DC 54 C6 00 36 */ rlwinm r6, r6, 0, 0, 0x1b -/* 8033D9E0 40 82 00 08 */ bne lbl_8033D9E8 -/* 8033D9E4 60 C6 00 01 */ ori r6, r6, 1 -lbl_8033D9E8: -/* 8033D9E8 54 80 04 20 */ rlwinm r0, r4, 0, 0x10, 0x10 -/* 8033D9EC 28 00 00 00 */ cmplwi r0, 0 -/* 8033D9F0 40 82 00 08 */ bne lbl_8033D9F8 -/* 8033D9F4 60 C6 00 04 */ ori r6, r6, 4 -lbl_8033D9F8: -/* 8033D9F8 90 C5 00 00 */ stw r6, 0(r5) -/* 8033D9FC 54 63 04 5C */ rlwinm r3, r3, 0, 0x11, 0xe -/* 8033DA00 48 00 00 B8 */ b lbl_8033DAB8 -lbl_8033DA04: -/* 8033DA04 54 80 04 62 */ rlwinm r0, r4, 0, 0x11, 0x11 -/* 8033DA08 28 00 00 00 */ cmplwi r0, 0 -/* 8033DA0C 38 A0 00 F0 */ li r5, 0xf0 -/* 8033DA10 40 82 00 08 */ bne lbl_8033DA18 -/* 8033DA14 60 A5 08 00 */ ori r5, r5, 0x800 -lbl_8033DA18: -/* 8033DA18 54 80 05 28 */ rlwinm r0, r4, 0, 0x14, 0x14 -/* 8033DA1C 28 00 00 00 */ cmplwi r0, 0 -/* 8033DA20 40 82 00 08 */ bne lbl_8033DA28 -/* 8033DA24 60 A5 00 08 */ ori r5, r5, 8 -lbl_8033DA28: -/* 8033DA28 54 80 05 6A */ rlwinm r0, r4, 0, 0x15, 0x15 -/* 8033DA2C 28 00 00 00 */ cmplwi r0, 0 -/* 8033DA30 40 82 00 08 */ bne lbl_8033DA38 -/* 8033DA34 60 A5 00 04 */ ori r5, r5, 4 -lbl_8033DA38: -/* 8033DA38 54 80 05 AC */ rlwinm r0, r4, 0, 0x16, 0x16 -/* 8033DA3C 28 00 00 00 */ cmplwi r0, 0 -/* 8033DA40 40 82 00 08 */ bne lbl_8033DA48 -/* 8033DA44 60 A5 00 02 */ ori r5, r5, 2 -lbl_8033DA48: -/* 8033DA48 54 80 05 EE */ rlwinm r0, r4, 0, 0x17, 0x17 -/* 8033DA4C 28 00 00 00 */ cmplwi r0, 0 -/* 8033DA50 40 82 00 08 */ bne lbl_8033DA58 -/* 8033DA54 60 A5 00 01 */ ori r5, r5, 1 -lbl_8033DA58: -/* 8033DA58 54 80 06 30 */ rlwinm r0, r4, 0, 0x18, 0x18 -/* 8033DA5C 28 00 00 00 */ cmplwi r0, 0 -/* 8033DA60 40 82 00 08 */ bne lbl_8033DA68 -/* 8033DA64 60 A5 01 00 */ ori r5, r5, 0x100 -lbl_8033DA68: -/* 8033DA68 54 80 06 72 */ rlwinm r0, r4, 0, 0x19, 0x19 -/* 8033DA6C 28 00 00 00 */ cmplwi r0, 0 -/* 8033DA70 40 82 00 08 */ bne lbl_8033DA78 -/* 8033DA74 60 A5 10 00 */ ori r5, r5, 0x1000 -lbl_8033DA78: -/* 8033DA78 54 80 04 A4 */ rlwinm r0, r4, 0, 0x12, 0x12 -/* 8033DA7C 28 00 00 00 */ cmplwi r0, 0 -/* 8033DA80 40 82 00 08 */ bne lbl_8033DA88 -/* 8033DA84 60 A5 02 00 */ ori r5, r5, 0x200 -lbl_8033DA88: -/* 8033DA88 54 80 04 E6 */ rlwinm r0, r4, 0, 0x13, 0x13 -/* 8033DA8C 28 00 00 00 */ cmplwi r0, 0 -/* 8033DA90 40 82 00 08 */ bne lbl_8033DA98 -/* 8033DA94 60 A5 04 00 */ ori r5, r5, 0x400 -lbl_8033DA98: -/* 8033DA98 54 80 06 B4 */ rlwinm r0, r4, 0, 0x1a, 0x1a -/* 8033DA9C 28 00 00 00 */ cmplwi r0, 0 -/* 8033DAA0 40 82 00 08 */ bne lbl_8033DAA8 -/* 8033DAA4 60 A5 20 00 */ ori r5, r5, 0x2000 -lbl_8033DAA8: -/* 8033DAA8 3C 80 CC 00 */ lis r4, 0xCC00 /* 0xCC003000@ha */ -/* 8033DAAC 38 84 30 00 */ addi r4, r4, 0x3000 /* 0xCC003000@l */ -/* 8033DAB0 90 A4 00 04 */ stw r5, 4(r4) -/* 8033DAB4 54 63 06 E0 */ rlwinm r3, r3, 0, 0x1b, 0x10 -lbl_8033DAB8: -/* 8033DAB8 4E 80 00 20 */ blr diff --git a/asm/dolphin/os/OSInterrupt/__OSInterruptInit.s b/asm/dolphin/os/OSInterrupt/__OSInterruptInit.s deleted file mode 100644 index d74e7e6019..0000000000 --- a/asm/dolphin/os/OSInterrupt/__OSInterruptInit.s +++ /dev/null @@ -1,30 +0,0 @@ -lbl_8033D770: -/* 8033D770 7C 08 02 A6 */ mflr r0 -/* 8033D774 90 01 00 04 */ stw r0, 4(r1) -/* 8033D778 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 8033D77C 93 E1 00 0C */ stw r31, 0xc(r1) -/* 8033D780 3F E0 80 00 */ lis r31, 0x8000 /* 0x80003040@ha */ -/* 8033D784 38 1F 30 40 */ addi r0, r31, 0x3040 /* 0x80003040@l */ -/* 8033D788 90 0D 90 F0 */ stw r0, InterruptHandlerTable(r13) -/* 8033D78C 38 80 00 00 */ li r4, 0 -/* 8033D790 38 A0 00 80 */ li r5, 0x80 -/* 8033D794 80 6D 90 F0 */ lwz r3, InterruptHandlerTable(r13) -/* 8033D798 4B CC 5C C1 */ bl memset -/* 8033D79C 38 00 00 00 */ li r0, 0 -/* 8033D7A0 90 1F 00 C4 */ stw r0, 0xc4(r31) -/* 8033D7A4 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC003000@ha */ -/* 8033D7A8 38 83 30 00 */ addi r4, r3, 0x3000 /* 0xCC003000@l */ -/* 8033D7AC 90 1F 00 C8 */ stw r0, 0xc8(r31) -/* 8033D7B0 38 00 00 F0 */ li r0, 0xf0 -/* 8033D7B4 38 60 FF E0 */ li r3, -32 -/* 8033D7B8 90 04 00 04 */ stw r0, 4(r4) -/* 8033D7BC 48 00 03 01 */ bl __OSMaskInterrupts -/* 8033D7C0 3C 60 80 34 */ lis r3, ExternalInterruptHandler@ha /* 0x8033DF10@ha */ -/* 8033D7C4 38 83 DF 10 */ addi r4, r3, ExternalInterruptHandler@l /* 0x8033DF10@l */ -/* 8033D7C8 38 60 00 04 */ li r3, 4 -/* 8033D7CC 4B FF CF 1D */ bl __OSSetExceptionHandler -/* 8033D7D0 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8033D7D4 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 8033D7D8 38 21 00 10 */ addi r1, r1, 0x10 -/* 8033D7DC 7C 08 03 A6 */ mtlr r0 -/* 8033D7E0 4E 80 00 20 */ blr diff --git a/asm/dolphin/os/OSMemory/OSProtectRange.s b/asm/dolphin/os/OSMemory/OSProtectRange.s deleted file mode 100644 index a214f26be9..0000000000 --- a/asm/dolphin/os/OSMemory/OSProtectRange.s +++ /dev/null @@ -1,52 +0,0 @@ -lbl_8033ED14: -/* 8033ED14 7C 08 02 A6 */ mflr r0 -/* 8033ED18 90 01 00 04 */ stw r0, 4(r1) -/* 8033ED1C 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 8033ED20 BF 41 00 18 */ stmw r26, 0x18(r1) -/* 8033ED24 3B 43 00 00 */ addi r26, r3, 0 -/* 8033ED28 28 1A 00 04 */ cmplwi r26, 4 -/* 8033ED2C 40 80 00 98 */ bge lbl_8033EDC4 -/* 8033ED30 7C 64 2A 14 */ add r3, r4, r5 -/* 8033ED34 38 03 03 FF */ addi r0, r3, 0x3ff -/* 8033ED38 54 9B 00 2A */ rlwinm r27, r4, 0, 0, 0x15 -/* 8033ED3C 54 1D 00 2A */ rlwinm r29, r0, 0, 0, 0x15 -/* 8033ED40 38 7B 00 00 */ addi r3, r27, 0 -/* 8033ED44 54 DF 07 BE */ clrlwi r31, r6, 0x1e -/* 8033ED48 7C 9B E8 50 */ subf r4, r27, r29 -/* 8033ED4C 4B FF C8 61 */ bl DCFlushRange -/* 8033ED50 4B FF E9 A5 */ bl OSDisableInterrupts -/* 8033ED54 3C 00 80 00 */ lis r0, 0x8000 -/* 8033ED58 7C 1E D4 30 */ srw r30, r0, r26 -/* 8033ED5C 3B 83 00 00 */ addi r28, r3, 0 -/* 8033ED60 38 7E 00 00 */ addi r3, r30, 0 -/* 8033ED64 4B FF ED 59 */ bl __OSMaskInterrupts -/* 8033ED68 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC004000@ha */ -/* 8033ED6C 38 A3 40 00 */ addi r5, r3, 0x4000 /* 0xCC004000@l */ -/* 8033ED70 57 43 10 3A */ slwi r3, r26, 2 -/* 8033ED74 57 60 B4 3E */ rlwinm r0, r27, 0x16, 0x10, 0x1f -/* 8033ED78 7C 05 1B 2E */ sthx r0, r5, r3 -/* 8033ED7C 57 A4 B4 3E */ rlwinm r4, r29, 0x16, 0x10, 0x1f -/* 8033ED80 7C 65 1A 14 */ add r3, r5, r3 -/* 8033ED84 B0 83 00 02 */ sth r4, 2(r3) -/* 8033ED88 38 85 00 10 */ addi r4, r5, 0x10 -/* 8033ED8C 57 46 08 3C */ slwi r6, r26, 1 -/* 8033ED90 38 00 00 03 */ li r0, 3 -/* 8033ED94 A0 A5 00 10 */ lhz r5, 0x10(r5) -/* 8033ED98 7C 03 30 30 */ slw r3, r0, r6 -/* 8033ED9C 7F E0 30 30 */ slw r0, r31, r6 -/* 8033EDA0 7C A5 18 78 */ andc r5, r5, r3 -/* 8033EDA4 7C A5 03 78 */ or r5, r5, r0 -/* 8033EDA8 28 1F 00 03 */ cmplwi r31, 3 -/* 8033EDAC B0 A4 00 00 */ sth r5, 0(r4) -/* 8033EDB0 41 82 00 0C */ beq lbl_8033EDBC -/* 8033EDB4 7F C3 F3 78 */ mr r3, r30 -/* 8033EDB8 4B FF ED 8D */ bl __OSUnmaskInterrupts -lbl_8033EDBC: -/* 8033EDBC 7F 83 E3 78 */ mr r3, r28 -/* 8033EDC0 4B FF E9 5D */ bl OSRestoreInterrupts -lbl_8033EDC4: -/* 8033EDC4 BB 41 00 18 */ lmw r26, 0x18(r1) -/* 8033EDC8 80 01 00 34 */ lwz r0, 0x34(r1) -/* 8033EDCC 38 21 00 30 */ addi r1, r1, 0x30 -/* 8033EDD0 7C 08 03 A6 */ mtlr r0 -/* 8033EDD4 4E 80 00 20 */ blr diff --git a/asm/dolphin/os/OSMemory/__OSInitMemoryProtection.s b/asm/dolphin/os/OSMemory/__OSInitMemoryProtection.s deleted file mode 100644 index 78ab6db9ab..0000000000 --- a/asm/dolphin/os/OSMemory/__OSInitMemoryProtection.s +++ /dev/null @@ -1,74 +0,0 @@ -lbl_8033EEF0: -/* 8033EEF0 7C 08 02 A6 */ mflr r0 -/* 8033EEF4 90 01 00 04 */ stw r0, 4(r1) -/* 8033EEF8 94 21 FF B0 */ stwu r1, -0x50(r1) -/* 8033EEFC BF 61 00 3C */ stmw r27, 0x3c(r1) -/* 8033EF00 3F 60 80 00 */ lis r27, 0x8000 /* 0x800000F0@ha */ -/* 8033EF04 83 FB 00 F0 */ lwz r31, 0x00F0(r27) /* 0x800000F0@l */ -/* 8033EF08 4B FF E7 ED */ bl OSDisableInterrupts -/* 8033EF0C 3C 80 CC 00 */ lis r4, 0xCC00 /* 0xCC004000@ha */ -/* 8033EF10 3B 84 40 00 */ addi r28, r4, 0x4000 /* 0xCC004000@l */ -/* 8033EF14 38 00 00 00 */ li r0, 0 -/* 8033EF18 B0 1C 00 20 */ sth r0, 0x20(r28) -/* 8033EF1C 38 00 00 FF */ li r0, 0xff -/* 8033EF20 7C 7E 1B 78 */ mr r30, r3 -/* 8033EF24 B0 1C 00 10 */ sth r0, 0x10(r28) -/* 8033EF28 3C 60 F0 00 */ lis r3, 0xf000 -/* 8033EF2C 4B FF EB 91 */ bl __OSMaskInterrupts -/* 8033EF30 3C 60 80 34 */ lis r3, MEMIntrruptHandler@ha /* 0x8033ECA8@ha */ -/* 8033EF34 3B A3 EC A8 */ addi r29, r3, MEMIntrruptHandler@l /* 0x8033ECA8@l */ -/* 8033EF38 7F A4 EB 78 */ mr r4, r29 -/* 8033EF3C 38 60 00 00 */ li r3, 0 -/* 8033EF40 4B FF E8 01 */ bl __OSSetInterruptHandler -/* 8033EF44 7F A4 EB 78 */ mr r4, r29 -/* 8033EF48 38 60 00 01 */ li r3, 1 -/* 8033EF4C 4B FF E7 F5 */ bl __OSSetInterruptHandler -/* 8033EF50 7F A4 EB 78 */ mr r4, r29 -/* 8033EF54 38 60 00 02 */ li r3, 2 -/* 8033EF58 4B FF E7 E9 */ bl __OSSetInterruptHandler -/* 8033EF5C 7F A4 EB 78 */ mr r4, r29 -/* 8033EF60 38 60 00 03 */ li r3, 3 -/* 8033EF64 4B FF E7 DD */ bl __OSSetInterruptHandler -/* 8033EF68 7F A4 EB 78 */ mr r4, r29 -/* 8033EF6C 38 60 00 04 */ li r3, 4 -/* 8033EF70 4B FF E7 D1 */ bl __OSSetInterruptHandler -/* 8033EF74 3C 60 80 3D */ lis r3, ResetFunctionInfo@ha /* 0x803D07D8@ha */ -/* 8033EF78 38 63 07 D8 */ addi r3, r3, ResetFunctionInfo@l /* 0x803D07D8@l */ -/* 8033EF7C 48 00 06 E5 */ bl OSRegisterResetFunction -/* 8033EF80 80 7B 00 F0 */ lwz r3, 0xf0(r27) -/* 8033EF84 80 1B 00 28 */ lwz r0, 0x28(r27) -/* 8033EF88 7C 03 00 40 */ cmplw r3, r0 -/* 8033EF8C 40 80 00 24 */ bge lbl_8033EFB0 -/* 8033EF90 3C 03 FE 80 */ addis r0, r3, 0xfe80 -/* 8033EF94 28 00 00 00 */ cmplwi r0, 0 -/* 8033EF98 40 82 00 18 */ bne lbl_8033EFB0 -/* 8033EF9C 3C 60 81 80 */ lis r3, 0x8180 -/* 8033EFA0 3C 80 01 80 */ lis r4, 0x180 -/* 8033EFA4 4B FF C5 DD */ bl DCInvalidateRange -/* 8033EFA8 38 00 00 02 */ li r0, 2 -/* 8033EFAC B0 1C 00 28 */ sth r0, 0x28(r28) -lbl_8033EFB0: -/* 8033EFB0 3C 00 01 80 */ lis r0, 0x180 -/* 8033EFB4 7C 1F 00 40 */ cmplw r31, r0 -/* 8033EFB8 41 81 00 14 */ bgt lbl_8033EFCC -/* 8033EFBC 3C 60 80 34 */ lis r3, Config24MB@ha /* 0x8033EDD8@ha */ -/* 8033EFC0 38 63 ED D8 */ addi r3, r3, Config24MB@l /* 0x8033EDD8@l */ -/* 8033EFC4 4B FF FF 15 */ bl RealMode -/* 8033EFC8 48 00 00 1C */ b lbl_8033EFE4 -lbl_8033EFCC: -/* 8033EFCC 3C 00 03 00 */ lis r0, 0x300 -/* 8033EFD0 7C 1F 00 40 */ cmplw r31, r0 -/* 8033EFD4 41 81 00 10 */ bgt lbl_8033EFE4 -/* 8033EFD8 3C 60 80 34 */ lis r3, Config48MB@ha /* 0x8033EE58@ha */ -/* 8033EFDC 38 63 EE 58 */ addi r3, r3, Config48MB@l /* 0x8033EE58@l */ -/* 8033EFE0 4B FF FE F9 */ bl RealMode -lbl_8033EFE4: -/* 8033EFE4 3C 60 08 00 */ lis r3, 0x800 -/* 8033EFE8 4B FF EB 5D */ bl __OSUnmaskInterrupts -/* 8033EFEC 7F C3 F3 78 */ mr r3, r30 -/* 8033EFF0 4B FF E7 2D */ bl OSRestoreInterrupts -/* 8033EFF4 BB 61 00 3C */ lmw r27, 0x3c(r1) -/* 8033EFF8 80 01 00 54 */ lwz r0, 0x54(r1) -/* 8033EFFC 38 21 00 50 */ addi r1, r1, 0x50 -/* 8033F000 7C 08 03 A6 */ mtlr r0 -/* 8033F004 4E 80 00 20 */ blr diff --git a/asm/dolphin/os/OSMessage/OSInitMessageQueue.s b/asm/dolphin/os/OSMessage/OSInitMessageQueue.s deleted file mode 100644 index c7d2c8d8ec..0000000000 --- a/asm/dolphin/os/OSMessage/OSInitMessageQueue.s +++ /dev/null @@ -1,25 +0,0 @@ -lbl_8033E994: -/* 8033E994 7C 08 02 A6 */ mflr r0 -/* 8033E998 90 01 00 04 */ stw r0, 4(r1) -/* 8033E99C 94 21 FF D8 */ stwu r1, -0x28(r1) -/* 8033E9A0 93 E1 00 24 */ stw r31, 0x24(r1) -/* 8033E9A4 3B E5 00 00 */ addi r31, r5, 0 -/* 8033E9A8 93 C1 00 20 */ stw r30, 0x20(r1) -/* 8033E9AC 3B C4 00 00 */ addi r30, r4, 0 -/* 8033E9B0 93 A1 00 1C */ stw r29, 0x1c(r1) -/* 8033E9B4 3B A3 00 00 */ addi r29, r3, 0 -/* 8033E9B8 48 00 22 BD */ bl OSInitThreadQueue -/* 8033E9BC 38 7D 00 08 */ addi r3, r29, 8 -/* 8033E9C0 48 00 22 B5 */ bl OSInitThreadQueue -/* 8033E9C4 93 DD 00 10 */ stw r30, 0x10(r29) -/* 8033E9C8 38 00 00 00 */ li r0, 0 -/* 8033E9CC 93 FD 00 14 */ stw r31, 0x14(r29) -/* 8033E9D0 90 1D 00 18 */ stw r0, 0x18(r29) -/* 8033E9D4 90 1D 00 1C */ stw r0, 0x1c(r29) -/* 8033E9D8 80 01 00 2C */ lwz r0, 0x2c(r1) -/* 8033E9DC 83 E1 00 24 */ lwz r31, 0x24(r1) -/* 8033E9E0 83 C1 00 20 */ lwz r30, 0x20(r1) -/* 8033E9E4 83 A1 00 1C */ lwz r29, 0x1c(r1) -/* 8033E9E8 38 21 00 28 */ addi r1, r1, 0x28 -/* 8033E9EC 7C 08 03 A6 */ mtlr r0 -/* 8033E9F0 4E 80 00 20 */ blr diff --git a/asm/dolphin/os/OSMutex/OSInitMutex.s b/asm/dolphin/os/OSMutex/OSInitMutex.s deleted file mode 100644 index af8f8423f7..0000000000 --- a/asm/dolphin/os/OSMutex/OSInitMutex.s +++ /dev/null @@ -1,15 +0,0 @@ -lbl_8033F008: -/* 8033F008 7C 08 02 A6 */ mflr r0 -/* 8033F00C 90 01 00 04 */ stw r0, 4(r1) -/* 8033F010 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 8033F014 93 E1 00 14 */ stw r31, 0x14(r1) -/* 8033F018 7C 7F 1B 78 */ mr r31, r3 -/* 8033F01C 48 00 1C 59 */ bl OSInitThreadQueue -/* 8033F020 38 00 00 00 */ li r0, 0 -/* 8033F024 90 1F 00 08 */ stw r0, 8(r31) -/* 8033F028 90 1F 00 0C */ stw r0, 0xc(r31) -/* 8033F02C 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 8033F030 83 E1 00 14 */ lwz r31, 0x14(r1) -/* 8033F034 38 21 00 18 */ addi r1, r1, 0x18 -/* 8033F038 7C 08 03 A6 */ mtlr r0 -/* 8033F03C 4E 80 00 20 */ blr diff --git a/asm/dolphin/os/OSReset/OSRegisterResetFunction.s b/asm/dolphin/os/OSReset/OSRegisterResetFunction.s deleted file mode 100644 index 9d8cc9b666..0000000000 --- a/asm/dolphin/os/OSReset/OSRegisterResetFunction.s +++ /dev/null @@ -1,41 +0,0 @@ -lbl_8033F660: -/* 8033F660 80 AD 91 10 */ lwz r5, ResetFunctionQueue(r13) -/* 8033F664 48 00 00 08 */ b lbl_8033F66C -lbl_8033F668: -/* 8033F668 80 A5 00 08 */ lwz r5, 8(r5) -lbl_8033F66C: -/* 8033F66C 28 05 00 00 */ cmplwi r5, 0 -/* 8033F670 41 82 00 14 */ beq lbl_8033F684 -/* 8033F674 80 85 00 04 */ lwz r4, 4(r5) -/* 8033F678 80 03 00 04 */ lwz r0, 4(r3) -/* 8033F67C 7C 04 00 40 */ cmplw r4, r0 -/* 8033F680 40 81 FF E8 */ ble lbl_8033F668 -lbl_8033F684: -/* 8033F684 28 05 00 00 */ cmplwi r5, 0 -/* 8033F688 40 82 00 34 */ bne lbl_8033F6BC -/* 8033F68C 38 AD 91 10 */ la r5, ResetFunctionQueue(r13) /* 80451690-_SDA_BASE_ */ -/* 8033F690 84 85 00 04 */ lwzu r4, 4(r5) -/* 8033F694 28 04 00 00 */ cmplwi r4, 0 -/* 8033F698 40 82 00 0C */ bne lbl_8033F6A4 -/* 8033F69C 90 6D 91 10 */ stw r3, ResetFunctionQueue(r13) -/* 8033F6A0 48 00 00 08 */ b lbl_8033F6A8 -lbl_8033F6A4: -/* 8033F6A4 90 64 00 08 */ stw r3, 8(r4) -lbl_8033F6A8: -/* 8033F6A8 90 83 00 0C */ stw r4, 0xc(r3) -/* 8033F6AC 38 00 00 00 */ li r0, 0 -/* 8033F6B0 90 03 00 08 */ stw r0, 8(r3) -/* 8033F6B4 90 65 00 00 */ stw r3, 0(r5) -/* 8033F6B8 4E 80 00 20 */ blr -lbl_8033F6BC: -/* 8033F6BC 90 A3 00 08 */ stw r5, 8(r3) -/* 8033F6C0 80 85 00 0C */ lwz r4, 0xc(r5) -/* 8033F6C4 90 65 00 0C */ stw r3, 0xc(r5) -/* 8033F6C8 28 04 00 00 */ cmplwi r4, 0 -/* 8033F6CC 90 83 00 0C */ stw r4, 0xc(r3) -/* 8033F6D0 40 82 00 0C */ bne lbl_8033F6DC -/* 8033F6D4 90 6D 91 10 */ stw r3, ResetFunctionQueue(r13) -/* 8033F6D8 4E 80 00 20 */ blr -lbl_8033F6DC: -/* 8033F6DC 90 64 00 08 */ stw r3, 8(r4) -/* 8033F6E0 4E 80 00 20 */ blr diff --git a/asm/dolphin/os/OSReset/__OSDoHotReset.s b/asm/dolphin/os/OSReset/__OSDoHotReset.s deleted file mode 100644 index 7c09bc705d..0000000000 --- a/asm/dolphin/os/OSReset/__OSDoHotReset.s +++ /dev/null @@ -1,19 +0,0 @@ -lbl_8033F864: -/* 8033F864 7C 08 02 A6 */ mflr r0 -/* 8033F868 90 01 00 04 */ stw r0, 4(r1) -/* 8033F86C 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 8033F870 93 E1 00 14 */ stw r31, 0x14(r1) -/* 8033F874 7C 7F 1B 78 */ mr r31, r3 -/* 8033F878 4B FF DE 7D */ bl OSDisableInterrupts -/* 8033F87C 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC002000@ha */ -/* 8033F880 38 63 20 00 */ addi r3, r3, 0x2000 /* 0xCC002000@l */ -/* 8033F884 38 00 00 00 */ li r0, 0 -/* 8033F888 B0 03 00 02 */ sth r0, 2(r3) -/* 8033F88C 4B FF BE 39 */ bl ICFlashInvalidate -/* 8033F890 57 E3 18 38 */ slwi r3, r31, 3 -/* 8033F894 4B FF FE F9 */ bl Reset -/* 8033F898 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 8033F89C 83 E1 00 14 */ lwz r31, 0x14(r1) -/* 8033F8A0 38 21 00 18 */ addi r1, r1, 0x18 -/* 8033F8A4 7C 08 03 A6 */ mtlr r0 -/* 8033F8A8 4E 80 00 20 */ blr diff --git a/asm/dolphin/os/OSResetSW/OSGetResetButtonState.s b/asm/dolphin/os/OSResetSW/OSGetResetButtonState.s index c774a6f3be..a47a7a51cb 100644 --- a/asm/dolphin/os/OSResetSW/OSGetResetButtonState.s +++ b/asm/dolphin/os/OSResetSW/OSGetResetButtonState.s @@ -17,7 +17,7 @@ lbl_8033FBD8: /* 8033FC14 40 82 00 40 */ bne lbl_8033FC54 /* 8033FC18 80 0D 91 30 */ lwz r0, HoldUp(r13) /* 8033FC1C 38 C0 00 00 */ li r6, 0 -/* 8033FC20 80 AD 91 34 */ lwz r5, data_804516B4(r13) +/* 8033FC20 80 AD 91 34 */ lwz r5, HoldUp+0x4(r13) /* 8033FC24 38 E0 00 01 */ li r7, 1 /* 8033FC28 7C 00 32 78 */ xor r0, r0, r6 /* 8033FC2C 7C A5 32 78 */ xor r5, r5, r6 @@ -28,21 +28,21 @@ lbl_8033FBD8: lbl_8033FC40: /* 8033FC40 7C C7 33 78 */ mr r7, r6 lbl_8033FC44: -/* 8033FC44 90 8D 91 3C */ stw r4, data_804516BC(r13) +/* 8033FC44 90 8D 91 3C */ stw r4, HoldDown+0x4(r13) /* 8033FC48 7C FD 3B 78 */ mr r29, r7 /* 8033FC4C 90 6D 91 38 */ stw r3, HoldDown(r13) /* 8033FC50 48 00 01 48 */ b lbl_8033FD98 lbl_8033FC54: /* 8033FC54 80 0D 91 30 */ lwz r0, HoldUp(r13) /* 8033FC58 39 20 00 00 */ li r9, 0 -/* 8033FC5C 80 AD 91 34 */ lwz r5, data_804516B4(r13) +/* 8033FC5C 80 AD 91 34 */ lwz r5, HoldUp+0x4(r13) /* 8033FC60 39 40 00 01 */ li r10, 1 /* 8033FC64 7C 00 4A 78 */ xor r0, r0, r9 /* 8033FC68 7C A5 4A 78 */ xor r5, r5, r9 /* 8033FC6C 7C A0 03 79 */ or. r0, r5, r0 /* 8033FC70 40 82 00 58 */ bne lbl_8033FCC8 /* 8033FC74 3C C0 80 00 */ lis r6, 0x8000 /* 0x800000F8@ha */ -/* 8033FC78 80 AD 91 3C */ lwz r5, data_804516BC(r13) +/* 8033FC78 80 AD 91 3C */ lwz r5, HoldDown+0x4(r13) /* 8033FC7C 80 E6 00 F8 */ lwz r7, 0x00F8(r6) /* 0x800000F8@l */ /* 8033FC80 3C C0 43 1C */ lis r6, 0x431C /* 0x431BDE83@ha */ /* 8033FC84 39 06 DE 83 */ addi r8, r6, 0xDE83 /* 0x431BDE83@l */ @@ -82,17 +82,17 @@ lbl_8033FCE4: /* 8033FCFC 2C 05 00 00 */ cmpwi r5, 0 /* 8033FD00 3B A5 00 00 */ addi r29, r5, 0 /* 8033FD04 41 82 00 10 */ beq lbl_8033FD14 -/* 8033FD08 90 8D 91 34 */ stw r4, data_804516B4(r13) +/* 8033FD08 90 8D 91 34 */ stw r4, HoldUp+0x4(r13) /* 8033FD0C 90 6D 91 30 */ stw r3, HoldUp(r13) /* 8033FD10 48 00 00 88 */ b lbl_8033FD98 lbl_8033FD14: -/* 8033FD14 90 0D 91 34 */ stw r0, data_804516B4(r13) +/* 8033FD14 90 0D 91 34 */ stw r0, HoldUp+0x4(r13) /* 8033FD18 90 0D 91 30 */ stw r0, HoldUp(r13) /* 8033FD1C 48 00 00 7C */ b lbl_8033FD98 lbl_8033FD20: /* 8033FD20 80 CD 91 30 */ lwz r6, HoldUp(r13) /* 8033FD24 39 00 00 00 */ li r8, 0 -/* 8033FD28 80 ED 91 34 */ lwz r7, data_804516B4(r13) +/* 8033FD28 80 ED 91 34 */ lwz r7, HoldUp+0x4(r13) /* 8033FD2C 7C C0 42 78 */ xor r0, r6, r8 /* 8033FD30 7C E5 42 78 */ xor r5, r7, r8 /* 8033FD34 7C A0 03 79 */ or. r0, r5, r0 @@ -118,7 +118,7 @@ lbl_8033FD20: /* 8033FD84 48 00 00 14 */ b lbl_8033FD98 lbl_8033FD88: /* 8033FD88 38 00 00 00 */ li r0, 0 -/* 8033FD8C 90 0D 91 34 */ stw r0, data_804516B4(r13) +/* 8033FD8C 90 0D 91 34 */ stw r0, HoldUp+0x4(r13) /* 8033FD90 3B A0 00 00 */ li r29, 0 /* 8033FD94 90 0D 91 30 */ stw r0, HoldUp(r13) lbl_8033FD98: diff --git a/asm/dolphin/os/OSResetSW/OSGetResetSwitchState.s b/asm/dolphin/os/OSResetSW/OSGetResetSwitchState.s deleted file mode 100644 index 5b72b454b6..0000000000 --- a/asm/dolphin/os/OSResetSW/OSGetResetSwitchState.s +++ /dev/null @@ -1,9 +0,0 @@ -lbl_8033FE70: -/* 8033FE70 7C 08 02 A6 */ mflr r0 -/* 8033FE74 90 01 00 04 */ stw r0, 4(r1) -/* 8033FE78 94 21 FF F8 */ stwu r1, -8(r1) -/* 8033FE7C 4B FF FD 5D */ bl OSGetResetButtonState -/* 8033FE80 80 01 00 0C */ lwz r0, 0xc(r1) -/* 8033FE84 38 21 00 08 */ addi r1, r1, 8 -/* 8033FE88 7C 08 03 A6 */ mtlr r0 -/* 8033FE8C 4E 80 00 20 */ blr diff --git a/asm/dolphin/os/OSResetSW/__OSResetSWInterruptHandler.s b/asm/dolphin/os/OSResetSW/__OSResetSWInterruptHandler.s index 05a8eb14b1..d2ef5b51bd 100644 --- a/asm/dolphin/os/OSResetSW/__OSResetSWInterruptHandler.s +++ b/asm/dolphin/os/OSResetSW/__OSResetSWInterruptHandler.s @@ -7,7 +7,7 @@ lbl_8033FAE4: /* 8033FAF8 93 A1 00 1C */ stw r29, 0x1c(r1) /* 8033FAFC 48 00 2C 21 */ bl __OSGetSystemTime /* 8033FB00 3C A0 80 00 */ lis r5, 0x8000 /* 0x800000F8@ha */ -/* 8033FB04 90 8D 91 3C */ stw r4, data_804516BC(r13) +/* 8033FB04 90 8D 91 3C */ stw r4, HoldDown+0x4(r13) /* 8033FB08 80 05 00 F8 */ lwz r0, 0x00F8(r5) /* 0x800000F8@l */ /* 8033FB0C 3C 80 43 1C */ lis r4, 0x431C /* 0x431BDE83@ha */ /* 8033FB10 38 84 DE 83 */ addi r4, r4, 0xDE83 /* 0x431BDE83@l */ @@ -21,7 +21,7 @@ lbl_8033FAE4: /* 8033FB30 3F E0 CC 00 */ lis r31, 0xcc00 lbl_8033FB34: /* 8033FB34 48 00 2B E9 */ bl __OSGetSystemTime -/* 8033FB38 80 CD 91 3C */ lwz r6, data_804516BC(r13) +/* 8033FB38 80 CD 91 3C */ lwz r6, HoldDown+0x4(r13) /* 8033FB3C 6F C5 80 00 */ xoris r5, r30, 0x8000 /* 8033FB40 80 0D 91 38 */ lwz r0, HoldDown(r13) /* 8033FB44 7C 86 20 10 */ subfc r4, r6, r4 diff --git a/asm/dolphin/os/OSRtc/__OSSyncSram.s b/asm/dolphin/os/OSRtc/__OSSyncSram.s deleted file mode 100644 index fbc2fd3f6e..0000000000 --- a/asm/dolphin/os/OSRtc/__OSSyncSram.s +++ /dev/null @@ -1,5 +0,0 @@ -lbl_80340580: -/* 80340580 3C 60 80 45 */ lis r3, Scb@ha /* 0x8044BB20@ha */ -/* 80340584 38 63 BB 20 */ addi r3, r3, Scb@l /* 0x8044BB20@l */ -/* 80340588 80 63 00 4C */ lwz r3, 0x4c(r3) -/* 8034058C 4E 80 00 20 */ blr diff --git a/asm/dolphin/os/OSSync/__OSInitSystemCall.s b/asm/dolphin/os/OSSync/__OSInitSystemCall.s deleted file mode 100644 index 80c22a2c08..0000000000 --- a/asm/dolphin/os/OSSync/__OSInitSystemCall.s +++ /dev/null @@ -1,26 +0,0 @@ -lbl_80340A40: -/* 80340A40 7C 08 02 A6 */ mflr r0 -/* 80340A44 90 01 00 04 */ stw r0, 4(r1) -/* 80340A48 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80340A4C 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80340A50 3C A0 80 00 */ lis r5, 0x8000 /* 0x80000C00@ha */ -/* 80340A54 3C 80 80 34 */ lis r4, SystemCallVector@ha /* 0x80340A20@ha */ -/* 80340A58 3C 60 80 34 */ lis r3, __OSSystemCallVectorEnd@ha /* 0x80340A3C@ha */ -/* 80340A5C 3B E5 0C 00 */ addi r31, r5, 0x0C00 /* 0x80000C00@l */ -/* 80340A60 38 03 0A 3C */ addi r0, r3, __OSSystemCallVectorEnd@l /* 0x80340A3C@l */ -/* 80340A64 38 84 0A 20 */ addi r4, r4, SystemCallVector@l /* 0x80340A20@l */ -/* 80340A68 7F E3 FB 78 */ mr r3, r31 -/* 80340A6C 7C A4 00 50 */ subf r5, r4, r0 -/* 80340A70 4B CC 2A D1 */ bl memcpy -/* 80340A74 7F E3 FB 78 */ mr r3, r31 -/* 80340A78 38 80 01 00 */ li r4, 0x100 -/* 80340A7C 4B FF AB 91 */ bl DCFlushRangeNoSync -/* 80340A80 7C 00 04 AC */ sync -/* 80340A84 7F E3 FB 78 */ mr r3, r31 -/* 80340A88 38 80 01 00 */ li r4, 0x100 -/* 80340A8C 4B FF AC 05 */ bl ICInvalidateRange -/* 80340A90 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80340A94 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80340A98 38 21 00 10 */ addi r1, r1, 0x10 -/* 80340A9C 7C 08 03 A6 */ mtlr r0 -/* 80340AA0 4E 80 00 20 */ blr diff --git a/asm/dolphin/os/OSThread/OSYieldThread.s b/asm/dolphin/os/OSThread/OSYieldThread.s deleted file mode 100644 index 60f1210d7f..0000000000 --- a/asm/dolphin/os/OSThread/OSYieldThread.s +++ /dev/null @@ -1,16 +0,0 @@ -lbl_80341250: -/* 80341250 7C 08 02 A6 */ mflr r0 -/* 80341254 90 01 00 04 */ stw r0, 4(r1) -/* 80341258 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 8034125C 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80341260 4B FF C4 95 */ bl OSDisableInterrupts -/* 80341264 3B E3 00 00 */ addi r31, r3, 0 -/* 80341268 38 60 00 01 */ li r3, 1 -/* 8034126C 4B FF FD 8D */ bl SelectThread -/* 80341270 7F E3 FB 78 */ mr r3, r31 -/* 80341274 4B FF C4 A9 */ bl OSRestoreInterrupts -/* 80341278 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8034127C 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80341280 38 21 00 10 */ addi r1, r1, 0x10 -/* 80341284 7C 08 03 A6 */ mtlr r0 -/* 80341288 4E 80 00 20 */ blr diff --git a/asm/dolphin/os/OSThread/__OSReschedule.s b/asm/dolphin/os/OSThread/__OSReschedule.s deleted file mode 100644 index 4ba308303e..0000000000 --- a/asm/dolphin/os/OSThread/__OSReschedule.s +++ /dev/null @@ -1,14 +0,0 @@ -lbl_80341220: -/* 80341220 7C 08 02 A6 */ mflr r0 -/* 80341224 90 01 00 04 */ stw r0, 4(r1) -/* 80341228 94 21 FF F8 */ stwu r1, -8(r1) -/* 8034122C 80 0D 91 44 */ lwz r0, RunQueueHint(r13) -/* 80341230 2C 00 00 00 */ cmpwi r0, 0 -/* 80341234 41 82 00 0C */ beq lbl_80341240 -/* 80341238 38 60 00 00 */ li r3, 0 -/* 8034123C 4B FF FD BD */ bl SelectThread -lbl_80341240: -/* 80341240 80 01 00 0C */ lwz r0, 0xc(r1) -/* 80341244 38 21 00 08 */ addi r1, r1, 8 -/* 80341248 7C 08 03 A6 */ mtlr r0 -/* 8034124C 4E 80 00 20 */ blr diff --git a/asm/dolphin/os/OSTime/GetDates.s b/asm/dolphin/os/OSTime/GetDates.s deleted file mode 100644 index 9149017873..0000000000 --- a/asm/dolphin/os/OSTime/GetDates.s +++ /dev/null @@ -1,116 +0,0 @@ -lbl_803427D8: -/* 803427D8 3C A0 92 49 */ lis r5, 0x9249 /* 0x92492493@ha */ -/* 803427DC 38 05 24 93 */ addi r0, r5, 0x2493 /* 0x92492493@l */ -/* 803427E0 38 E3 00 06 */ addi r7, r3, 6 -/* 803427E4 7C C0 38 96 */ mulhw r6, r0, r7 -/* 803427E8 3C A0 B3 8D */ lis r5, 0xB38D /* 0xB38CF9B1@ha */ -/* 803427EC 38 05 F9 B1 */ addi r0, r5, 0xF9B1 /* 0xB38CF9B1@l */ -/* 803427F0 7C 00 18 96 */ mulhw r0, r0, r3 -/* 803427F4 7C A6 3A 14 */ add r5, r6, r7 -/* 803427F8 7C A5 16 70 */ srawi r5, r5, 2 -/* 803427FC 54 A6 0F FE */ srwi r6, r5, 0x1f -/* 80342800 7C A5 32 14 */ add r5, r5, r6 -/* 80342804 7C 00 1A 14 */ add r0, r0, r3 -/* 80342808 1C C5 00 07 */ mulli r6, r5, 7 -/* 8034280C 7C 00 46 70 */ srawi r0, r0, 8 -/* 80342810 54 05 0F FE */ srwi r5, r0, 0x1f -/* 80342814 7C A0 2A 14 */ add r5, r0, r5 -/* 80342818 7C 06 38 50 */ subf r0, r6, r7 -/* 8034281C 1D 65 01 6D */ mulli r11, r5, 0x16d -/* 80342820 90 04 00 18 */ stw r0, 0x18(r4) -/* 80342824 48 00 00 04 */ b lbl_80342828 -lbl_80342828: -/* 80342828 3C C0 51 EC */ lis r6, 0x51EC /* 0x51EB851F@ha */ -/* 8034282C 39 46 85 1F */ addi r10, r6, 0x851F /* 0x51EB851F@l */ -/* 80342830 48 00 00 04 */ b lbl_80342834 -lbl_80342834: -/* 80342834 48 00 00 0C */ b lbl_80342840 -lbl_80342838: -/* 80342838 39 6B FE 93 */ addi r11, r11, -365 -/* 8034283C 38 A5 FF FF */ addi r5, r5, -1 -lbl_80342840: -/* 80342840 2C 05 00 01 */ cmpwi r5, 1 -/* 80342844 40 80 00 0C */ bge lbl_80342850 -/* 80342848 38 00 00 00 */ li r0, 0 -/* 8034284C 48 00 00 38 */ b lbl_80342884 -lbl_80342850: -/* 80342850 38 05 FF FF */ addi r0, r5, -1 -/* 80342854 7C 0A 00 96 */ mulhw r0, r10, r0 -/* 80342858 7C 08 3E 70 */ srawi r8, r0, 7 -/* 8034285C 7C 06 2E 70 */ srawi r6, r0, 5 -/* 80342860 38 05 00 03 */ addi r0, r5, 3 -/* 80342864 54 C7 0F FE */ srwi r7, r6, 0x1f -/* 80342868 7C 00 16 70 */ srawi r0, r0, 2 -/* 8034286C 55 09 0F FE */ srwi r9, r8, 0x1f -/* 80342870 7C C6 3A 14 */ add r6, r6, r7 -/* 80342874 7C 00 01 94 */ addze r0, r0 -/* 80342878 7C E8 4A 14 */ add r7, r8, r9 -/* 8034287C 7C 06 00 50 */ subf r0, r6, r0 -/* 80342880 7C 07 02 14 */ add r0, r7, r0 -lbl_80342884: -/* 80342884 7C 0B 02 14 */ add r0, r11, r0 -/* 80342888 7C 03 00 00 */ cmpw r3, r0 -/* 8034288C 41 80 FF AC */ blt lbl_80342838 -/* 80342890 7C A6 16 70 */ srawi r6, r5, 2 -/* 80342894 90 A4 00 14 */ stw r5, 0x14(r4) -/* 80342898 7C C6 01 94 */ addze r6, r6 -/* 8034289C 54 C6 10 3A */ slwi r6, r6, 2 -/* 803428A0 7C C6 28 10 */ subfc r6, r6, r5 -/* 803428A4 7C 00 18 50 */ subf r0, r0, r3 -/* 803428A8 2C 06 00 00 */ cmpwi r6, 0 -/* 803428AC 90 04 00 1C */ stw r0, 0x1c(r4) -/* 803428B0 38 E0 00 01 */ li r7, 1 -/* 803428B4 39 00 00 00 */ li r8, 0 -/* 803428B8 40 82 00 30 */ bne lbl_803428E8 -/* 803428BC 3C 60 51 EC */ lis r3, 0x51EC /* 0x51EB851F@ha */ -/* 803428C0 38 63 85 1F */ addi r3, r3, 0x851F /* 0x51EB851F@l */ -/* 803428C4 7C 63 28 96 */ mulhw r3, r3, r5 -/* 803428C8 7C 63 2E 70 */ srawi r3, r3, 5 -/* 803428CC 54 66 0F FE */ srwi r6, r3, 0x1f -/* 803428D0 7C 63 32 14 */ add r3, r3, r6 -/* 803428D4 1C 63 00 64 */ mulli r3, r3, 0x64 -/* 803428D8 7C 63 28 50 */ subf r3, r3, r5 -/* 803428DC 2C 03 00 00 */ cmpwi r3, 0 -/* 803428E0 41 82 00 08 */ beq lbl_803428E8 -/* 803428E4 7C E8 3B 78 */ mr r8, r7 -lbl_803428E8: -/* 803428E8 2C 08 00 00 */ cmpwi r8, 0 -/* 803428EC 40 82 00 30 */ bne lbl_8034291C -/* 803428F0 3C 60 51 EC */ lis r3, 0x51EC /* 0x51EB851F@ha */ -/* 803428F4 38 63 85 1F */ addi r3, r3, 0x851F /* 0x51EB851F@l */ -/* 803428F8 7C 63 28 96 */ mulhw r3, r3, r5 -/* 803428FC 7C 63 3E 70 */ srawi r3, r3, 7 -/* 80342900 54 66 0F FE */ srwi r6, r3, 0x1f -/* 80342904 7C 63 32 14 */ add r3, r3, r6 -/* 80342908 1C 63 01 90 */ mulli r3, r3, 0x190 -/* 8034290C 7C 63 28 50 */ subf r3, r3, r5 -/* 80342910 2C 03 00 00 */ cmpwi r3, 0 -/* 80342914 41 82 00 08 */ beq lbl_8034291C -/* 80342918 38 E0 00 00 */ li r7, 0 -lbl_8034291C: -/* 8034291C 2C 07 00 00 */ cmpwi r7, 0 -/* 80342920 41 82 00 10 */ beq lbl_80342930 -/* 80342924 3C 60 80 3D */ lis r3, LeapYearDays@ha /* 0x803D1078@ha */ -/* 80342928 38 C3 10 78 */ addi r6, r3, LeapYearDays@l /* 0x803D1078@l */ -/* 8034292C 48 00 00 0C */ b lbl_80342938 -lbl_80342930: -/* 80342930 3C 60 80 3D */ lis r3, YearDays@ha /* 0x803D1048@ha */ -/* 80342934 38 C3 10 48 */ addi r6, r3, YearDays@l /* 0x803D1048@l */ -lbl_80342938: -/* 80342938 38 E0 00 0C */ li r7, 0xc -/* 8034293C 38 60 00 30 */ li r3, 0x30 -/* 80342940 48 00 00 04 */ b lbl_80342944 -lbl_80342944: -/* 80342944 48 00 00 04 */ b lbl_80342948 -lbl_80342948: -/* 80342948 38 63 FF FC */ addi r3, r3, -4 -/* 8034294C 7C A6 18 2E */ lwzx r5, r6, r3 -/* 80342950 38 E7 FF FF */ addi r7, r7, -1 -/* 80342954 7C 00 28 00 */ cmpw r0, r5 -/* 80342958 41 80 FF F0 */ blt lbl_80342948 -/* 8034295C 90 E4 00 10 */ stw r7, 0x10(r4) -/* 80342960 7C 66 18 2E */ lwzx r3, r6, r3 -/* 80342964 7C 63 00 50 */ subf r3, r3, r0 -/* 80342968 38 03 00 01 */ addi r0, r3, 1 -/* 8034296C 90 04 00 0C */ stw r0, 0xc(r4) -/* 80342970 4E 80 00 20 */ blr diff --git a/asm/dolphin/os/__ppc_eabi_init/_ExitProcess.s b/asm/dolphin/os/__ppc_eabi_init/_ExitProcess.s deleted file mode 100644 index afa730e33d..0000000000 --- a/asm/dolphin/os/__ppc_eabi_init/_ExitProcess.s +++ /dev/null @@ -1,9 +0,0 @@ -lbl_80342BEC: -/* 80342BEC 7C 08 02 A6 */ mflr r0 -/* 80342BF0 90 01 00 04 */ stw r0, 4(r1) -/* 80342BF4 94 21 FF F8 */ stwu r1, -8(r1) -/* 80342BF8 4B FF 71 09 */ bl PPCHalt -/* 80342BFC 80 01 00 0C */ lwz r0, 0xc(r1) -/* 80342C00 38 21 00 08 */ addi r1, r1, 8 -/* 80342C04 7C 08 03 A6 */ mtlr r0 -/* 80342C08 4E 80 00 20 */ blr diff --git a/asm/dolphin/os/__ppc_eabi_init/__init_user.s b/asm/dolphin/os/__ppc_eabi_init/__init_user.s deleted file mode 100644 index 3bfb30d3cd..0000000000 --- a/asm/dolphin/os/__ppc_eabi_init/__init_user.s +++ /dev/null @@ -1,9 +0,0 @@ -lbl_80342B78: -/* 80342B78 7C 08 02 A6 */ mflr r0 -/* 80342B7C 90 01 00 04 */ stw r0, 4(r1) -/* 80342B80 94 21 FF F8 */ stwu r1, -8(r1) -/* 80342B84 48 00 00 15 */ bl __init_cpp -/* 80342B88 80 01 00 0C */ lwz r0, 0xc(r1) -/* 80342B8C 38 21 00 08 */ addi r1, r1, 8 -/* 80342B90 7C 08 03 A6 */ mtlr r0 -/* 80342B94 4E 80 00 20 */ blr diff --git a/asm/dolphin/pad/Pad/OnReset.s b/asm/dolphin/pad/Pad/OnReset.s deleted file mode 100644 index 2bf230d836..0000000000 --- a/asm/dolphin/pad/Pad/OnReset.s +++ /dev/null @@ -1,54 +0,0 @@ -lbl_8034FA84: -/* 8034FA84 7C 08 02 A6 */ mflr r0 -/* 8034FA88 90 01 00 04 */ stw r0, 4(r1) -/* 8034FA8C 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 8034FA90 93 E1 00 1C */ stw r31, 0x1c(r1) -/* 8034FA94 3B E3 00 00 */ addi r31, r3, 0 -/* 8034FA98 80 0D 92 E8 */ lwz r0, SamplingCallback(r13) -/* 8034FA9C 28 00 00 00 */ cmplwi r0, 0 -/* 8034FAA0 41 82 00 0C */ beq lbl_8034FAAC -/* 8034FAA4 38 60 00 00 */ li r3, 0 -/* 8034FAA8 48 00 00 F9 */ bl PADSetSamplingCallback -lbl_8034FAAC: -/* 8034FAAC 2C 1F 00 00 */ cmpwi r31, 0 -/* 8034FAB0 40 82 00 70 */ bne lbl_8034FB20 -/* 8034FAB4 80 0D 92 D0 */ lwz r0, ResettingBits(r13) -/* 8034FAB8 3B E0 00 00 */ li r31, 0 -/* 8034FABC 38 7F 00 00 */ addi r3, r31, 0 -/* 8034FAC0 28 00 00 00 */ cmplwi r0, 0 -/* 8034FAC4 40 82 00 14 */ bne lbl_8034FAD8 -/* 8034FAC8 80 0D 84 A4 */ lwz r0, ResettingChan(r13) -/* 8034FACC 2C 00 00 20 */ cmpwi r0, 0x20 -/* 8034FAD0 40 82 00 08 */ bne lbl_8034FAD8 -/* 8034FAD4 38 60 00 01 */ li r3, 1 -lbl_8034FAD8: -/* 8034FAD8 2C 03 00 00 */ cmpwi r3, 0 -/* 8034FADC 41 82 00 14 */ beq lbl_8034FAF0 -/* 8034FAE0 4B FF 50 C1 */ bl SIBusy -/* 8034FAE4 2C 03 00 00 */ cmpwi r3, 0 -/* 8034FAE8 40 82 00 08 */ bne lbl_8034FAF0 -/* 8034FAEC 3B E0 00 01 */ li r31, 1 -lbl_8034FAF0: -/* 8034FAF0 80 0D 92 EC */ lwz r0, recalibrated(r13) -/* 8034FAF4 2C 00 00 00 */ cmpwi r0, 0 -/* 8034FAF8 40 82 00 20 */ bne lbl_8034FB18 -/* 8034FAFC 2C 1F 00 00 */ cmpwi r31, 0 -/* 8034FB00 41 82 00 18 */ beq lbl_8034FB18 -/* 8034FB04 3C 60 F0 00 */ lis r3, 0xf000 -/* 8034FB08 4B FF F1 35 */ bl PADRecalibrate -/* 8034FB0C 90 6D 92 EC */ stw r3, recalibrated(r13) -/* 8034FB10 38 60 00 00 */ li r3, 0 -/* 8034FB14 48 00 00 18 */ b lbl_8034FB2C -lbl_8034FB18: -/* 8034FB18 7F E3 FB 78 */ mr r3, r31 -/* 8034FB1C 48 00 00 10 */ b lbl_8034FB2C -lbl_8034FB20: -/* 8034FB20 38 00 00 00 */ li r0, 0 -/* 8034FB24 90 0D 92 EC */ stw r0, recalibrated(r13) -/* 8034FB28 38 60 00 01 */ li r3, 1 -lbl_8034FB2C: -/* 8034FB2C 80 01 00 24 */ lwz r0, 0x24(r1) -/* 8034FB30 83 E1 00 1C */ lwz r31, 0x1c(r1) -/* 8034FB34 38 21 00 20 */ addi r1, r1, 0x20 -/* 8034FB38 7C 08 03 A6 */ mtlr r0 -/* 8034FB3C 4E 80 00 20 */ blr diff --git a/asm/dolphin/pad/Pad/PADInit.s b/asm/dolphin/pad/Pad/PADInit.s deleted file mode 100644 index 28fafb3f02..0000000000 --- a/asm/dolphin/pad/Pad/PADInit.s +++ /dev/null @@ -1,89 +0,0 @@ -lbl_8034ED50: -/* 8034ED50 7C 08 02 A6 */ mflr r0 -/* 8034ED54 3C 60 80 45 */ lis r3, Type@ha /* 0x8044CB70@ha */ -/* 8034ED58 90 01 00 04 */ stw r0, 4(r1) -/* 8034ED5C 94 21 FF C8 */ stwu r1, -0x38(r1) -/* 8034ED60 BF 21 00 1C */ stmw r25, 0x1c(r1) -/* 8034ED64 3B E3 CB 70 */ addi r31, r3, Type@l /* 0x8044CB70@l */ -/* 8034ED68 80 0D 92 C8 */ lwz r0, Initialized(r13) -/* 8034ED6C 2C 00 00 00 */ cmpwi r0, 0 -/* 8034ED70 41 82 00 0C */ beq lbl_8034ED7C -/* 8034ED74 38 60 00 01 */ li r3, 1 -/* 8034ED78 48 00 01 14 */ b lbl_8034EE8C -lbl_8034ED7C: -/* 8034ED7C 80 6D 84 A0 */ lwz r3, __PADVersion(r13) -/* 8034ED80 4B FE BA F5 */ bl OSRegisterVersion -/* 8034ED84 80 6D 92 F0 */ lwz r3, __PADSpec(r13) -/* 8034ED88 28 03 00 00 */ cmplwi r3, 0 -/* 8034ED8C 41 82 00 08 */ beq lbl_8034ED94 -/* 8034ED90 48 00 04 C9 */ bl PADSetSpec -lbl_8034ED94: -/* 8034ED94 80 0D 91 78 */ lwz r0, __PADFixBits(r13) -/* 8034ED98 38 60 00 01 */ li r3, 1 -/* 8034ED9C 90 6D 92 C8 */ stw r3, Initialized(r13) -/* 8034EDA0 28 00 00 00 */ cmplwi r0, 0 -/* 8034EDA4 41 82 00 8C */ beq lbl_8034EE30 -/* 8034EDA8 4B FF 39 55 */ bl OSGetTime -/* 8034EDAC 3B 24 00 00 */ addi r25, r4, 0 -/* 8034EDB0 3B 43 00 00 */ addi r26, r3, 0 -/* 8034EDB4 38 A0 00 10 */ li r5, 0x10 -/* 8034EDB8 48 01 38 DD */ bl __shr2i -/* 8034EDBC 3C A0 00 01 */ lis r5, 0x0001 /* 0x0000FFFF@ha */ -/* 8034EDC0 3B 65 FF FF */ addi r27, r5, 0xFFFF /* 0x0000FFFF@l */ -/* 8034EDC4 3B 80 00 00 */ li r28, 0 -/* 8034EDC8 7C 86 D8 38 */ and r6, r4, r27 -/* 8034EDCC 7F 24 D8 38 */ and r4, r25, r27 -/* 8034EDD0 7C 65 E0 38 */ and r5, r3, r28 -/* 8034EDD4 7F 40 E0 38 */ and r0, r26, r28 -/* 8034EDD8 7F A4 30 14 */ addc r29, r4, r6 -/* 8034EDDC 38 7A 00 00 */ addi r3, r26, 0 -/* 8034EDE0 38 99 00 00 */ addi r4, r25, 0 -/* 8034EDE4 7F C0 29 14 */ adde r30, r0, r5 -/* 8034EDE8 38 A0 00 20 */ li r5, 0x20 -/* 8034EDEC 48 01 38 A9 */ bl __shr2i -/* 8034EDF0 7C 84 D8 38 */ and r4, r4, r27 -/* 8034EDF4 7C 60 E0 38 */ and r0, r3, r28 -/* 8034EDF8 7F A4 E8 14 */ addc r29, r4, r29 -/* 8034EDFC 38 7A 00 00 */ addi r3, r26, 0 -/* 8034EE00 38 99 00 00 */ addi r4, r25, 0 -/* 8034EE04 7F C0 F1 14 */ adde r30, r0, r30 -/* 8034EE08 38 A0 00 30 */ li r5, 0x30 -/* 8034EE0C 48 01 38 89 */ bl __shr2i -/* 8034EE10 7C 80 D8 38 */ and r0, r4, r27 -/* 8034EE14 7C A0 E8 14 */ addc r5, r0, r29 -/* 8034EE18 3C 00 F0 00 */ lis r0, 0xf000 -/* 8034EE1C 38 80 3F FF */ li r4, 0x3fff -/* 8034EE20 90 0D 92 D4 */ stw r0, RecalibrateBits(r13) -/* 8034EE24 7C A0 20 38 */ and r0, r5, r4 -/* 8034EE28 3C 60 80 00 */ lis r3, 0x8000 /* 0x800030E0@ha */ -/* 8034EE2C B0 03 30 E0 */ sth r0, 0x30E0(r3) /* 0x800030E0@l */ -lbl_8034EE30: -/* 8034EE30 3C 60 80 00 */ lis r3, 0x8000 /* 0x800030E0@ha */ -/* 8034EE34 A0 03 30 E0 */ lhz r0, 0x30E0(r3) /* 0x800030E0@l */ -/* 8034EE38 54 00 42 AE */ rlwinm r0, r0, 8, 0xa, 0x17 -/* 8034EE3C 64 00 4D 00 */ oris r0, r0, 0x4d00 -/* 8034EE40 90 1F 00 40 */ stw r0, 0x40(r31) -/* 8034EE44 A0 03 30 E0 */ lhz r0, 0x30e0(r3) -/* 8034EE48 54 00 42 AE */ rlwinm r0, r0, 8, 0xa, 0x17 -/* 8034EE4C 64 00 4D 40 */ oris r0, r0, 0x4d40 -/* 8034EE50 90 1F 00 44 */ stw r0, 0x44(r31) -/* 8034EE54 A0 03 30 E0 */ lhz r0, 0x30e0(r3) -/* 8034EE58 54 00 42 AE */ rlwinm r0, r0, 8, 0xa, 0x17 -/* 8034EE5C 64 00 4D 80 */ oris r0, r0, 0x4d80 -/* 8034EE60 90 1F 00 48 */ stw r0, 0x48(r31) -/* 8034EE64 A0 03 30 E0 */ lhz r0, 0x30e0(r3) -/* 8034EE68 54 00 42 AE */ rlwinm r0, r0, 8, 0xa, 0x17 -/* 8034EE6C 64 00 4D C0 */ oris r0, r0, 0x4dc0 -/* 8034EE70 90 1F 00 4C */ stw r0, 0x4c(r31) -/* 8034EE74 4B FF 75 01 */ bl SIRefreshSamplingRate -/* 8034EE78 3C 60 80 3D */ lis r3, ResetFunctionInfo@ha /* 0x803D1B90@ha */ -/* 8034EE7C 38 63 1B 90 */ addi r3, r3, ResetFunctionInfo@l /* 0x803D1B90@l */ -/* 8034EE80 4B FF 07 E1 */ bl OSRegisterResetFunction -/* 8034EE84 3C 60 F0 00 */ lis r3, 0xf000 -/* 8034EE88 4B FF FC A5 */ bl PADReset -lbl_8034EE8C: -/* 8034EE8C BB 21 00 1C */ lmw r25, 0x1c(r1) -/* 8034EE90 80 01 00 3C */ lwz r0, 0x3c(r1) -/* 8034EE94 38 21 00 38 */ addi r1, r1, 0x38 -/* 8034EE98 7C 08 03 A6 */ mtlr r0 -/* 8034EE9C 4E 80 00 20 */ blr diff --git a/asm/dolphin/pad/Pad/PADOriginCallback.s b/asm/dolphin/pad/Pad/PADOriginCallback.s deleted file mode 100644 index 4e521f0335..0000000000 --- a/asm/dolphin/pad/Pad/PADOriginCallback.s +++ /dev/null @@ -1,52 +0,0 @@ -lbl_8034E458: -/* 8034E458 7C 08 02 A6 */ mflr r0 -/* 8034E45C 90 01 00 04 */ stw r0, 4(r1) -/* 8034E460 54 80 07 3F */ clrlwi. r0, r4, 0x1c -/* 8034E464 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 8034E468 93 E1 00 2C */ stw r31, 0x2c(r1) -/* 8034E46C 40 82 00 48 */ bne lbl_8034E4B4 -/* 8034E470 80 6D 84 A4 */ lwz r3, ResettingChan(r13) -/* 8034E474 4B FF FE 41 */ bl UpdateOrigin -/* 8034E478 83 ED 84 A4 */ lwz r31, ResettingChan(r13) -/* 8034E47C 3C 00 80 00 */ lis r0, 0x8000 -/* 8034E480 80 6D 92 CC */ lwz r3, EnabledBits(r13) -/* 8034E484 38 81 00 1C */ addi r4, r1, 0x1c -/* 8034E488 7C 00 FC 30 */ srw r0, r0, r31 -/* 8034E48C 7C 60 03 78 */ or r0, r3, r0 -/* 8034E490 90 0D 92 CC */ stw r0, EnabledBits(r13) -/* 8034E494 7F E3 FB 78 */ mr r3, r31 -/* 8034E498 4B FF 75 A5 */ bl SIGetResponse -/* 8034E49C 80 0D 84 AC */ lwz r0, AnalogMode(r13) -/* 8034E4A0 38 7F 00 00 */ addi r3, r31, 0 -/* 8034E4A4 64 04 00 40 */ oris r4, r0, 0x40 -/* 8034E4A8 4B FF 73 29 */ bl SISetCommand -/* 8034E4AC 80 6D 92 CC */ lwz r3, EnabledBits(r13) -/* 8034E4B0 4B FF 73 B1 */ bl SIEnablePolling -lbl_8034E4B4: -/* 8034E4B4 80 AD 92 D0 */ lwz r5, ResettingBits(r13) -/* 8034E4B8 7C A0 00 34 */ cntlzw r0, r5 -/* 8034E4BC 90 0D 84 A4 */ stw r0, ResettingChan(r13) -/* 8034E4C0 80 8D 84 A4 */ lwz r4, ResettingChan(r13) -/* 8034E4C4 2C 04 00 20 */ cmpwi r4, 0x20 -/* 8034E4C8 41 82 00 40 */ beq lbl_8034E508 -/* 8034E4CC 3C 00 80 00 */ lis r0, 0x8000 -/* 8034E4D0 7C 00 24 30 */ srw r0, r0, r4 -/* 8034E4D4 7C A0 00 78 */ andc r0, r5, r0 -/* 8034E4D8 1C 84 00 0C */ mulli r4, r4, 0xc -/* 8034E4DC 90 0D 92 D0 */ stw r0, ResettingBits(r13) -/* 8034E4E0 3C 60 80 45 */ lis r3, Origin@ha /* 0x8044CB80@ha */ -/* 8034E4E4 38 03 CB 80 */ addi r0, r3, Origin@l /* 0x8044CB80@l */ -/* 8034E4E8 7C 60 22 14 */ add r3, r0, r4 -/* 8034E4EC 38 80 00 00 */ li r4, 0 -/* 8034E4F0 38 A0 00 0C */ li r5, 0xc -/* 8034E4F4 4B CB 4F 65 */ bl memset -/* 8034E4F8 3C 80 80 35 */ lis r4, PADTypeAndStatusCallback@ha /* 0x8034E6C0@ha */ -/* 8034E4FC 80 6D 84 A4 */ lwz r3, ResettingChan(r13) -/* 8034E500 38 84 E6 C0 */ addi r4, r4, PADTypeAndStatusCallback@l /* 0x8034E6C0@l */ -/* 8034E504 4B FF 7C 51 */ bl SIGetTypeAsync -lbl_8034E508: -/* 8034E508 80 01 00 34 */ lwz r0, 0x34(r1) -/* 8034E50C 83 E1 00 2C */ lwz r31, 0x2c(r1) -/* 8034E510 38 21 00 30 */ addi r1, r1, 0x30 -/* 8034E514 7C 08 03 A6 */ mtlr r0 -/* 8034E518 4E 80 00 20 */ blr diff --git a/asm/dolphin/pad/Pad/PADRead.s b/asm/dolphin/pad/Pad/PADRead.s deleted file mode 100644 index 691ac69a36..0000000000 --- a/asm/dolphin/pad/Pad/PADRead.s +++ /dev/null @@ -1,206 +0,0 @@ -lbl_8034EEA0: -/* 8034EEA0 7C 08 02 A6 */ mflr r0 -/* 8034EEA4 90 01 00 04 */ stw r0, 4(r1) -/* 8034EEA8 94 21 FF C0 */ stwu r1, -0x40(r1) -/* 8034EEAC BE C1 00 18 */ stmw r22, 0x18(r1) -/* 8034EEB0 7C 77 1B 78 */ mr r23, r3 -/* 8034EEB4 4B FE E8 41 */ bl OSDisableInterrupts -/* 8034EEB8 3B 20 00 00 */ li r25, 0 -/* 8034EEBC 1C B9 00 0C */ mulli r5, r25, 0xc -/* 8034EEC0 3C 80 80 45 */ lis r4, Origin@ha /* 0x8044CB80@ha */ -/* 8034EEC4 38 04 CB 80 */ addi r0, r4, Origin@l /* 0x8044CB80@l */ -/* 8034EEC8 7F 80 2A 14 */ add r28, r0, r5 -/* 8034EECC 3C 80 80 35 */ lis r4, PADOriginUpdateCallback@ha /* 0x8034E51C@ha */ -/* 8034EED0 3C A0 80 35 */ lis r5, PADReceiveCheckCallback@ha /* 0x8034E9EC@ha */ -/* 8034EED4 3B 43 00 00 */ addi r26, r3, 0 -/* 8034EED8 3A C4 E5 1C */ addi r22, r4, PADOriginUpdateCallback@l /* 0x8034E51C@l */ -/* 8034EEDC 3B E5 E9 EC */ addi r31, r5, PADReceiveCheckCallback@l /* 0x8034E9EC@l */ -/* 8034EEE0 3B 00 00 00 */ li r24, 0 -/* 8034EEE4 3F C0 80 00 */ lis r30, 0x8000 -lbl_8034EEE8: -/* 8034EEE8 80 0D 92 E0 */ lwz r0, PendingBits(r13) -/* 8034EEEC 7F DB CC 30 */ srw r27, r30, r25 -/* 8034EEF0 7C 00 D8 39 */ and. r0, r0, r27 -/* 8034EEF4 41 82 00 28 */ beq lbl_8034EF1C -/* 8034EEF8 38 60 00 00 */ li r3, 0 -/* 8034EEFC 4B FF FC 31 */ bl PADReset -/* 8034EF00 38 00 FF FE */ li r0, -2 -/* 8034EF04 98 17 00 0A */ stb r0, 0xa(r23) -/* 8034EF08 38 77 00 00 */ addi r3, r23, 0 -/* 8034EF0C 38 80 00 00 */ li r4, 0 -/* 8034EF10 38 A0 00 0A */ li r5, 0xa -/* 8034EF14 4B CB 45 45 */ bl memset -/* 8034EF18 48 00 02 54 */ b lbl_8034F16C -lbl_8034EF1C: -/* 8034EF1C 80 0D 92 D0 */ lwz r0, ResettingBits(r13) -/* 8034EF20 7C 00 D8 39 */ and. r0, r0, r27 -/* 8034EF24 40 82 00 10 */ bne lbl_8034EF34 -/* 8034EF28 80 0D 84 A4 */ lwz r0, ResettingChan(r13) -/* 8034EF2C 7C 00 C8 00 */ cmpw r0, r25 -/* 8034EF30 40 82 00 20 */ bne lbl_8034EF50 -lbl_8034EF34: -/* 8034EF34 38 00 FF FE */ li r0, -2 -/* 8034EF38 98 17 00 0A */ stb r0, 0xa(r23) -/* 8034EF3C 38 77 00 00 */ addi r3, r23, 0 -/* 8034EF40 38 80 00 00 */ li r4, 0 -/* 8034EF44 38 A0 00 0A */ li r5, 0xa -/* 8034EF48 4B CB 45 11 */ bl memset -/* 8034EF4C 48 00 02 20 */ b lbl_8034F16C -lbl_8034EF50: -/* 8034EF50 80 0D 92 CC */ lwz r0, EnabledBits(r13) -/* 8034EF54 7C 00 D8 39 */ and. r0, r0, r27 -/* 8034EF58 40 82 00 20 */ bne lbl_8034EF78 -/* 8034EF5C 38 00 FF FF */ li r0, -1 -/* 8034EF60 98 17 00 0A */ stb r0, 0xa(r23) -/* 8034EF64 38 77 00 00 */ addi r3, r23, 0 -/* 8034EF68 38 80 00 00 */ li r4, 0 -/* 8034EF6C 38 A0 00 0A */ li r5, 0xa -/* 8034EF70 4B CB 44 E9 */ bl memset -/* 8034EF74 48 00 01 F8 */ b lbl_8034F16C -lbl_8034EF78: -/* 8034EF78 7F 23 CB 78 */ mr r3, r25 -/* 8034EF7C 4B FF 5C 45 */ bl SIIsChanBusy -/* 8034EF80 2C 03 00 00 */ cmpwi r3, 0 -/* 8034EF84 41 82 00 20 */ beq lbl_8034EFA4 -/* 8034EF88 38 00 FF FD */ li r0, -3 -/* 8034EF8C 98 17 00 0A */ stb r0, 0xa(r23) -/* 8034EF90 38 77 00 00 */ addi r3, r23, 0 -/* 8034EF94 38 80 00 00 */ li r4, 0 -/* 8034EF98 38 A0 00 0A */ li r5, 0xa -/* 8034EF9C 4B CB 44 BD */ bl memset -/* 8034EFA0 48 00 01 CC */ b lbl_8034F16C -lbl_8034EFA4: -/* 8034EFA4 7F 23 CB 78 */ mr r3, r25 -/* 8034EFA8 4B FF 67 AD */ bl SIGetStatus -/* 8034EFAC 54 60 07 39 */ rlwinm. r0, r3, 0, 0x1c, 0x1c -/* 8034EFB0 41 82 00 D8 */ beq lbl_8034F088 -/* 8034EFB4 38 79 00 00 */ addi r3, r25, 0 -/* 8034EFB8 38 81 00 10 */ addi r4, r1, 0x10 -/* 8034EFBC 4B FF 6A 81 */ bl SIGetResponse -/* 8034EFC0 80 0D 92 D8 */ lwz r0, WaitingBits(r13) -/* 8034EFC4 7C 00 D8 39 */ and. r0, r0, r27 -/* 8034EFC8 41 82 00 40 */ beq lbl_8034F008 -/* 8034EFCC 38 00 00 00 */ li r0, 0 -/* 8034EFD0 98 17 00 0A */ stb r0, 0xa(r23) -/* 8034EFD4 38 77 00 00 */ addi r3, r23, 0 -/* 8034EFD8 38 80 00 00 */ li r4, 0 -/* 8034EFDC 38 A0 00 0A */ li r5, 0xa -/* 8034EFE0 4B CB 44 79 */ bl memset -/* 8034EFE4 80 6D 92 DC */ lwz r3, CheckingBits(r13) -/* 8034EFE8 7C 60 D8 39 */ and. r0, r3, r27 -/* 8034EFEC 40 82 01 80 */ bne lbl_8034F16C -/* 8034EFF0 7C 60 DB 78 */ or r0, r3, r27 -/* 8034EFF4 90 0D 92 DC */ stw r0, CheckingBits(r13) -/* 8034EFF8 38 79 00 00 */ addi r3, r25, 0 -/* 8034EFFC 38 9F 00 00 */ addi r4, r31, 0 -/* 8034F000 4B FF 71 55 */ bl SIGetTypeAsync -/* 8034F004 48 00 01 68 */ b lbl_8034F16C -lbl_8034F008: -/* 8034F008 4B FE E6 ED */ bl OSDisableInterrupts -/* 8034F00C 3B A3 00 00 */ addi r29, r3, 0 -/* 8034F010 38 7B 00 00 */ addi r3, r27, 0 -/* 8034F014 4B FF 68 E9 */ bl SIDisablePolling -/* 8034F018 80 0D 92 CC */ lwz r0, EnabledBits(r13) -/* 8034F01C 7F 69 D8 F8 */ nor r9, r27, r27 -/* 8034F020 80 CD 92 D8 */ lwz r6, WaitingBits(r13) -/* 8034F024 7F 23 CB 78 */ mr r3, r25 -/* 8034F028 80 AD 92 DC */ lwz r5, CheckingBits(r13) -/* 8034F02C 80 8D 92 E0 */ lwz r4, PendingBits(r13) -/* 8034F030 7C 08 48 38 */ and r8, r0, r9 -/* 8034F034 80 0D 92 E4 */ lwz r0, BarrelBits(r13) -/* 8034F038 7C C7 48 38 */ and r7, r6, r9 -/* 8034F03C 7C A6 48 38 */ and r6, r5, r9 -/* 8034F040 7C 85 48 38 */ and r5, r4, r9 -/* 8034F044 91 0D 92 CC */ stw r8, EnabledBits(r13) -/* 8034F048 7C 00 48 38 */ and r0, r0, r9 -/* 8034F04C 90 ED 92 D8 */ stw r7, WaitingBits(r13) -/* 8034F050 38 80 00 00 */ li r4, 0 -/* 8034F054 90 CD 92 DC */ stw r6, CheckingBits(r13) -/* 8034F058 90 AD 92 E0 */ stw r5, PendingBits(r13) -/* 8034F05C 90 0D 92 E4 */ stw r0, BarrelBits(r13) -/* 8034F060 4B FF 17 ED */ bl OSSetWirelessID -/* 8034F064 7F A3 EB 78 */ mr r3, r29 -/* 8034F068 4B FE E6 B5 */ bl OSRestoreInterrupts -/* 8034F06C 38 00 FF FF */ li r0, -1 -/* 8034F070 98 17 00 0A */ stb r0, 0xa(r23) -/* 8034F074 38 77 00 00 */ addi r3, r23, 0 -/* 8034F078 38 80 00 00 */ li r4, 0 -/* 8034F07C 38 A0 00 0A */ li r5, 0xa -/* 8034F080 4B CB 43 D9 */ bl memset -/* 8034F084 48 00 00 E8 */ b lbl_8034F16C -lbl_8034F088: -/* 8034F088 7F 23 CB 78 */ mr r3, r25 -/* 8034F08C 4B FF 6F 05 */ bl SIGetType -/* 8034F090 54 60 00 85 */ rlwinm. r0, r3, 0, 2, 2 -/* 8034F094 40 82 00 08 */ bne lbl_8034F09C -/* 8034F098 7F 18 DB 78 */ or r24, r24, r27 -lbl_8034F09C: -/* 8034F09C 38 79 00 00 */ addi r3, r25, 0 -/* 8034F0A0 38 81 00 10 */ addi r4, r1, 0x10 -/* 8034F0A4 4B FF 69 99 */ bl SIGetResponse -/* 8034F0A8 2C 03 00 00 */ cmpwi r3, 0 -/* 8034F0AC 40 82 00 20 */ bne lbl_8034F0CC -/* 8034F0B0 38 00 FF FD */ li r0, -3 -/* 8034F0B4 98 17 00 0A */ stb r0, 0xa(r23) -/* 8034F0B8 38 77 00 00 */ addi r3, r23, 0 -/* 8034F0BC 38 80 00 00 */ li r4, 0 -/* 8034F0C0 38 A0 00 0A */ li r5, 0xa -/* 8034F0C4 4B CB 43 95 */ bl memset -/* 8034F0C8 48 00 00 A4 */ b lbl_8034F16C -lbl_8034F0CC: -/* 8034F0CC 80 01 00 10 */ lwz r0, 0x10(r1) -/* 8034F0D0 54 00 00 01 */ rlwinm. r0, r0, 0, 0, 0 -/* 8034F0D4 41 82 00 20 */ beq lbl_8034F0F4 -/* 8034F0D8 38 00 FF FD */ li r0, -3 -/* 8034F0DC 98 17 00 0A */ stb r0, 0xa(r23) -/* 8034F0E0 38 77 00 00 */ addi r3, r23, 0 -/* 8034F0E4 38 80 00 00 */ li r4, 0 -/* 8034F0E8 38 A0 00 0A */ li r5, 0xa -/* 8034F0EC 4B CB 43 6D */ bl memset -/* 8034F0F0 48 00 00 7C */ b lbl_8034F16C -lbl_8034F0F4: -/* 8034F0F4 81 8D 84 B4 */ lwz r12, MakeStatus(r13) -/* 8034F0F8 38 79 00 00 */ addi r3, r25, 0 -/* 8034F0FC 38 97 00 00 */ addi r4, r23, 0 -/* 8034F100 7D 88 03 A6 */ mtlr r12 -/* 8034F104 38 A1 00 10 */ addi r5, r1, 0x10 -/* 8034F108 4E 80 00 21 */ blrl -/* 8034F10C A0 17 00 00 */ lhz r0, 0(r23) -/* 8034F110 54 00 04 A5 */ rlwinm. r0, r0, 0, 0x12, 0x12 -/* 8034F114 41 82 00 44 */ beq lbl_8034F158 -/* 8034F118 38 00 FF FD */ li r0, -3 -/* 8034F11C 98 17 00 0A */ stb r0, 0xa(r23) -/* 8034F120 38 77 00 00 */ addi r3, r23, 0 -/* 8034F124 38 80 00 00 */ li r4, 0 -/* 8034F128 38 A0 00 0A */ li r5, 0xa -/* 8034F12C 4B CB 43 2D */ bl memset -/* 8034F130 38 79 00 00 */ addi r3, r25, 0 -/* 8034F134 38 DC 00 00 */ addi r6, r28, 0 -/* 8034F138 39 16 00 00 */ addi r8, r22, 0 -/* 8034F13C 38 8D 84 B8 */ la r4, CmdReadOrigin(r13) /* 80450A38-_SDA_BASE_ */ -/* 8034F140 38 A0 00 01 */ li r5, 1 -/* 8034F144 38 E0 00 0A */ li r7, 0xa -/* 8034F148 39 40 00 00 */ li r10, 0 -/* 8034F14C 39 20 00 00 */ li r9, 0 -/* 8034F150 4B FF 6A 3D */ bl SITransfer -/* 8034F154 48 00 00 18 */ b lbl_8034F16C -lbl_8034F158: -/* 8034F158 38 00 00 00 */ li r0, 0 -/* 8034F15C 98 17 00 0A */ stb r0, 0xa(r23) -/* 8034F160 A0 17 00 00 */ lhz r0, 0(r23) -/* 8034F164 54 00 06 6E */ rlwinm r0, r0, 0, 0x19, 0x17 -/* 8034F168 B0 17 00 00 */ sth r0, 0(r23) -lbl_8034F16C: -/* 8034F16C 3B 39 00 01 */ addi r25, r25, 1 -/* 8034F170 2C 19 00 04 */ cmpwi r25, 4 -/* 8034F174 3B 9C 00 0C */ addi r28, r28, 0xc -/* 8034F178 3A F7 00 0C */ addi r23, r23, 0xc -/* 8034F17C 41 80 FD 6C */ blt lbl_8034EEE8 -/* 8034F180 7F 43 D3 78 */ mr r3, r26 -/* 8034F184 4B FE E5 99 */ bl OSRestoreInterrupts -/* 8034F188 7F 03 C3 78 */ mr r3, r24 -/* 8034F18C BA C1 00 18 */ lmw r22, 0x18(r1) -/* 8034F190 80 01 00 44 */ lwz r0, 0x44(r1) -/* 8034F194 38 21 00 40 */ addi r1, r1, 0x40 -/* 8034F198 7C 08 03 A6 */ mtlr r0 -/* 8034F19C 4E 80 00 20 */ blr diff --git a/asm/dolphin/pad/Pad/PADSetAnalogMode.s b/asm/dolphin/pad/Pad/PADSetAnalogMode.s deleted file mode 100644 index 82b6339a24..0000000000 --- a/asm/dolphin/pad/Pad/PADSetAnalogMode.s +++ /dev/null @@ -1,30 +0,0 @@ -lbl_8034FA10: -/* 8034FA10 7C 08 02 A6 */ mflr r0 -/* 8034FA14 90 01 00 04 */ stw r0, 4(r1) -/* 8034FA18 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 8034FA1C 93 E1 00 14 */ stw r31, 0x14(r1) -/* 8034FA20 7C 7F 1B 78 */ mr r31, r3 -/* 8034FA24 4B FE DC D1 */ bl OSDisableInterrupts -/* 8034FA28 80 AD 92 CC */ lwz r5, EnabledBits(r13) -/* 8034FA2C 57 E6 40 2E */ slwi r6, r31, 8 -/* 8034FA30 80 8D 92 D8 */ lwz r4, WaitingBits(r13) -/* 8034FA34 7C 7F 1B 78 */ mr r31, r3 -/* 8034FA38 39 05 00 00 */ addi r8, r5, 0 -/* 8034FA3C 7D 07 40 F8 */ nor r7, r8, r8 -/* 8034FA40 80 0D 92 DC */ lwz r0, CheckingBits(r13) -/* 8034FA44 7C A5 28 78 */ andc r5, r5, r5 -/* 8034FA48 90 CD 84 AC */ stw r6, AnalogMode(r13) -/* 8034FA4C 7C 84 38 38 */ and r4, r4, r7 -/* 8034FA50 7C 00 38 38 */ and r0, r0, r7 -/* 8034FA54 90 AD 92 CC */ stw r5, EnabledBits(r13) -/* 8034FA58 7D 03 43 78 */ mr r3, r8 -/* 8034FA5C 90 8D 92 D8 */ stw r4, WaitingBits(r13) -/* 8034FA60 90 0D 92 DC */ stw r0, CheckingBits(r13) -/* 8034FA64 4B FF 5E 99 */ bl SIDisablePolling -/* 8034FA68 7F E3 FB 78 */ mr r3, r31 -/* 8034FA6C 4B FE DC B1 */ bl OSRestoreInterrupts -/* 8034FA70 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 8034FA74 83 E1 00 14 */ lwz r31, 0x14(r1) -/* 8034FA78 38 21 00 18 */ addi r1, r1, 0x18 -/* 8034FA7C 7C 08 03 A6 */ mtlr r0 -/* 8034FA80 4E 80 00 20 */ blr diff --git a/asm/dolphin/pad/Pad/PADSetSpec.s b/asm/dolphin/pad/Pad/PADSetSpec.s deleted file mode 100644 index ad8f86ebcb..0000000000 --- a/asm/dolphin/pad/Pad/PADSetSpec.s +++ /dev/null @@ -1,30 +0,0 @@ -lbl_8034F258: -/* 8034F258 38 00 00 00 */ li r0, 0 -/* 8034F25C 2C 03 00 01 */ cmpwi r3, 1 -/* 8034F260 90 0D 92 F0 */ stw r0, __PADSpec(r13) -/* 8034F264 41 82 00 30 */ beq lbl_8034F294 -/* 8034F268 40 80 00 10 */ bge lbl_8034F278 -/* 8034F26C 2C 03 00 00 */ cmpwi r3, 0 -/* 8034F270 40 80 00 14 */ bge lbl_8034F284 -/* 8034F274 48 00 00 3C */ b lbl_8034F2B0 -lbl_8034F278: -/* 8034F278 2C 03 00 06 */ cmpwi r3, 6 -/* 8034F27C 40 80 00 34 */ bge lbl_8034F2B0 -/* 8034F280 48 00 00 24 */ b lbl_8034F2A4 -lbl_8034F284: -/* 8034F284 3C 80 80 35 */ lis r4, SPEC0_MakeStatus@ha /* 0x8034F2B8@ha */ -/* 8034F288 38 04 F2 B8 */ addi r0, r4, SPEC0_MakeStatus@l /* 0x8034F2B8@l */ -/* 8034F28C 90 0D 84 B4 */ stw r0, MakeStatus(r13) -/* 8034F290 48 00 00 20 */ b lbl_8034F2B0 -lbl_8034F294: -/* 8034F294 3C 80 80 35 */ lis r4, SPEC1_MakeStatus@ha /* 0x8034F42C@ha */ -/* 8034F298 38 04 F4 2C */ addi r0, r4, SPEC1_MakeStatus@l /* 0x8034F42C@l */ -/* 8034F29C 90 0D 84 B4 */ stw r0, MakeStatus(r13) -/* 8034F2A0 48 00 00 10 */ b lbl_8034F2B0 -lbl_8034F2A4: -/* 8034F2A4 3C 80 80 35 */ lis r4, SPEC2_MakeStatus@ha /* 0x8034F5A0@ha */ -/* 8034F2A8 38 04 F5 A0 */ addi r0, r4, SPEC2_MakeStatus@l /* 0x8034F5A0@l */ -/* 8034F2AC 90 0D 84 B4 */ stw r0, MakeStatus(r13) -lbl_8034F2B0: -/* 8034F2B0 90 6D 84 B0 */ stw r3, Spec(r13) -/* 8034F2B4 4E 80 00 20 */ blr diff --git a/asm/dolphin/pad/Pad/SPEC0_MakeStatus.s b/asm/dolphin/pad/Pad/SPEC0_MakeStatus.s deleted file mode 100644 index c349617bff..0000000000 --- a/asm/dolphin/pad/Pad/SPEC0_MakeStatus.s +++ /dev/null @@ -1,105 +0,0 @@ -lbl_8034F2B8: -/* 8034F2B8 38 60 00 00 */ li r3, 0 -/* 8034F2BC B0 64 00 00 */ sth r3, 0(r4) -/* 8034F2C0 80 05 00 00 */ lwz r0, 0(r5) -/* 8034F2C4 54 00 87 39 */ rlwinm. r0, r0, 0x10, 0x1c, 0x1c -/* 8034F2C8 41 82 00 08 */ beq lbl_8034F2D0 -/* 8034F2CC 38 60 01 00 */ li r3, 0x100 -lbl_8034F2D0: -/* 8034F2D0 A0 04 00 00 */ lhz r0, 0(r4) -/* 8034F2D4 7C 00 1B 78 */ or r0, r0, r3 -/* 8034F2D8 B0 04 00 00 */ sth r0, 0(r4) -/* 8034F2DC 80 05 00 00 */ lwz r0, 0(r5) -/* 8034F2E0 54 00 86 B5 */ rlwinm. r0, r0, 0x10, 0x1a, 0x1a -/* 8034F2E4 41 82 00 0C */ beq lbl_8034F2F0 -/* 8034F2E8 38 60 02 00 */ li r3, 0x200 -/* 8034F2EC 48 00 00 08 */ b lbl_8034F2F4 -lbl_8034F2F0: -/* 8034F2F0 38 60 00 00 */ li r3, 0 -lbl_8034F2F4: -/* 8034F2F4 A0 04 00 00 */ lhz r0, 0(r4) -/* 8034F2F8 7C 00 1B 78 */ or r0, r0, r3 -/* 8034F2FC B0 04 00 00 */ sth r0, 0(r4) -/* 8034F300 80 05 00 00 */ lwz r0, 0(r5) -/* 8034F304 54 00 85 EF */ rlwinm. r0, r0, 0x10, 0x17, 0x17 -/* 8034F308 41 82 00 0C */ beq lbl_8034F314 -/* 8034F30C 38 60 04 00 */ li r3, 0x400 -/* 8034F310 48 00 00 08 */ b lbl_8034F318 -lbl_8034F314: -/* 8034F314 38 60 00 00 */ li r3, 0 -lbl_8034F318: -/* 8034F318 A0 04 00 00 */ lhz r0, 0(r4) -/* 8034F31C 7C 00 1B 78 */ or r0, r0, r3 -/* 8034F320 B0 04 00 00 */ sth r0, 0(r4) -/* 8034F324 80 05 00 00 */ lwz r0, 0(r5) -/* 8034F328 54 00 87 FF */ rlwinm. r0, r0, 0x10, 0x1f, 0x1f -/* 8034F32C 41 82 00 0C */ beq lbl_8034F338 -/* 8034F330 38 60 08 00 */ li r3, 0x800 -/* 8034F334 48 00 00 08 */ b lbl_8034F33C -lbl_8034F338: -/* 8034F338 38 60 00 00 */ li r3, 0 -lbl_8034F33C: -/* 8034F33C A0 04 00 00 */ lhz r0, 0(r4) -/* 8034F340 7C 00 1B 78 */ or r0, r0, r3 -/* 8034F344 B0 04 00 00 */ sth r0, 0(r4) -/* 8034F348 80 05 00 00 */ lwz r0, 0(r5) -/* 8034F34C 54 00 86 F7 */ rlwinm. r0, r0, 0x10, 0x1b, 0x1b -/* 8034F350 41 82 00 0C */ beq lbl_8034F35C -/* 8034F354 38 C0 10 00 */ li r6, 0x1000 -/* 8034F358 48 00 00 08 */ b lbl_8034F360 -lbl_8034F35C: -/* 8034F35C 38 C0 00 00 */ li r6, 0 -lbl_8034F360: -/* 8034F360 A0 64 00 00 */ lhz r3, 0(r4) -/* 8034F364 38 00 00 00 */ li r0, 0 -/* 8034F368 7C 63 33 78 */ or r3, r3, r6 -/* 8034F36C B0 64 00 00 */ sth r3, 0(r4) -/* 8034F370 80 65 00 04 */ lwz r3, 4(r5) -/* 8034F374 54 63 84 3E */ srwi r3, r3, 0x10 -/* 8034F378 7C 63 07 74 */ extsb r3, r3 -/* 8034F37C 98 64 00 02 */ stb r3, 2(r4) -/* 8034F380 80 65 00 04 */ lwz r3, 4(r5) -/* 8034F384 54 63 46 3E */ srwi r3, r3, 0x18 -/* 8034F388 7C 63 07 74 */ extsb r3, r3 -/* 8034F38C 98 64 00 03 */ stb r3, 3(r4) -/* 8034F390 80 65 00 04 */ lwz r3, 4(r5) -/* 8034F394 7C 63 07 74 */ extsb r3, r3 -/* 8034F398 98 64 00 04 */ stb r3, 4(r4) -/* 8034F39C 80 65 00 04 */ lwz r3, 4(r5) -/* 8034F3A0 54 63 C2 3E */ srwi r3, r3, 8 -/* 8034F3A4 7C 63 07 74 */ extsb r3, r3 -/* 8034F3A8 98 64 00 05 */ stb r3, 5(r4) -/* 8034F3AC 80 65 00 00 */ lwz r3, 0(r5) -/* 8034F3B0 54 63 C6 3E */ rlwinm r3, r3, 0x18, 0x18, 0x1f -/* 8034F3B4 98 64 00 06 */ stb r3, 6(r4) -/* 8034F3B8 80 65 00 00 */ lwz r3, 0(r5) -/* 8034F3BC 98 64 00 07 */ stb r3, 7(r4) -/* 8034F3C0 98 04 00 08 */ stb r0, 8(r4) -/* 8034F3C4 98 04 00 09 */ stb r0, 9(r4) -/* 8034F3C8 88 04 00 06 */ lbz r0, 6(r4) -/* 8034F3CC 28 00 00 AA */ cmplwi r0, 0xaa -/* 8034F3D0 41 80 00 10 */ blt lbl_8034F3E0 -/* 8034F3D4 A0 04 00 00 */ lhz r0, 0(r4) -/* 8034F3D8 60 00 00 40 */ ori r0, r0, 0x40 -/* 8034F3DC B0 04 00 00 */ sth r0, 0(r4) -lbl_8034F3E0: -/* 8034F3E0 88 04 00 07 */ lbz r0, 7(r4) -/* 8034F3E4 28 00 00 AA */ cmplwi r0, 0xaa -/* 8034F3E8 41 80 00 10 */ blt lbl_8034F3F8 -/* 8034F3EC A0 04 00 00 */ lhz r0, 0(r4) -/* 8034F3F0 60 00 00 20 */ ori r0, r0, 0x20 -/* 8034F3F4 B0 04 00 00 */ sth r0, 0(r4) -lbl_8034F3F8: -/* 8034F3F8 88 64 00 02 */ lbz r3, 2(r4) -/* 8034F3FC 38 03 FF 80 */ addi r0, r3, -128 -/* 8034F400 98 04 00 02 */ stb r0, 2(r4) -/* 8034F404 88 64 00 03 */ lbz r3, 3(r4) -/* 8034F408 38 03 FF 80 */ addi r0, r3, -128 -/* 8034F40C 98 04 00 03 */ stb r0, 3(r4) -/* 8034F410 88 64 00 04 */ lbz r3, 4(r4) -/* 8034F414 38 03 FF 80 */ addi r0, r3, -128 -/* 8034F418 98 04 00 04 */ stb r0, 4(r4) -/* 8034F41C 88 64 00 05 */ lbz r3, 5(r4) -/* 8034F420 38 03 FF 80 */ addi r0, r3, -128 -/* 8034F424 98 04 00 05 */ stb r0, 5(r4) -/* 8034F428 4E 80 00 20 */ blr diff --git a/asm/dolphin/pad/Pad/SPEC1_MakeStatus.s b/asm/dolphin/pad/Pad/SPEC1_MakeStatus.s deleted file mode 100644 index 0ff47a5899..0000000000 --- a/asm/dolphin/pad/Pad/SPEC1_MakeStatus.s +++ /dev/null @@ -1,105 +0,0 @@ -lbl_8034F42C: -/* 8034F42C 38 60 00 00 */ li r3, 0 -/* 8034F430 B0 64 00 00 */ sth r3, 0(r4) -/* 8034F434 80 05 00 00 */ lwz r0, 0(r5) -/* 8034F438 54 00 86 31 */ rlwinm. r0, r0, 0x10, 0x18, 0x18 -/* 8034F43C 41 82 00 08 */ beq lbl_8034F444 -/* 8034F440 38 60 01 00 */ li r3, 0x100 -lbl_8034F444: -/* 8034F444 A0 04 00 00 */ lhz r0, 0(r4) -/* 8034F448 7C 00 1B 78 */ or r0, r0, r3 -/* 8034F44C B0 04 00 00 */ sth r0, 0(r4) -/* 8034F450 80 05 00 00 */ lwz r0, 0(r5) -/* 8034F454 54 00 85 EF */ rlwinm. r0, r0, 0x10, 0x17, 0x17 -/* 8034F458 41 82 00 0C */ beq lbl_8034F464 -/* 8034F45C 38 60 02 00 */ li r3, 0x200 -/* 8034F460 48 00 00 08 */ b lbl_8034F468 -lbl_8034F464: -/* 8034F464 38 60 00 00 */ li r3, 0 -lbl_8034F468: -/* 8034F468 A0 04 00 00 */ lhz r0, 0(r4) -/* 8034F46C 7C 00 1B 78 */ or r0, r0, r3 -/* 8034F470 B0 04 00 00 */ sth r0, 0(r4) -/* 8034F474 80 05 00 00 */ lwz r0, 0(r5) -/* 8034F478 54 00 86 B5 */ rlwinm. r0, r0, 0x10, 0x1a, 0x1a -/* 8034F47C 41 82 00 0C */ beq lbl_8034F488 -/* 8034F480 38 60 04 00 */ li r3, 0x400 -/* 8034F484 48 00 00 08 */ b lbl_8034F48C -lbl_8034F488: -/* 8034F488 38 60 00 00 */ li r3, 0 -lbl_8034F48C: -/* 8034F48C A0 04 00 00 */ lhz r0, 0(r4) -/* 8034F490 7C 00 1B 78 */ or r0, r0, r3 -/* 8034F494 B0 04 00 00 */ sth r0, 0(r4) -/* 8034F498 80 05 00 00 */ lwz r0, 0(r5) -/* 8034F49C 54 00 86 F7 */ rlwinm. r0, r0, 0x10, 0x1b, 0x1b -/* 8034F4A0 41 82 00 0C */ beq lbl_8034F4AC -/* 8034F4A4 38 60 08 00 */ li r3, 0x800 -/* 8034F4A8 48 00 00 08 */ b lbl_8034F4B0 -lbl_8034F4AC: -/* 8034F4AC 38 60 00 00 */ li r3, 0 -lbl_8034F4B0: -/* 8034F4B0 A0 04 00 00 */ lhz r0, 0(r4) -/* 8034F4B4 7C 00 1B 78 */ or r0, r0, r3 -/* 8034F4B8 B0 04 00 00 */ sth r0, 0(r4) -/* 8034F4BC 80 05 00 00 */ lwz r0, 0(r5) -/* 8034F4C0 54 00 85 AD */ rlwinm. r0, r0, 0x10, 0x16, 0x16 -/* 8034F4C4 41 82 00 0C */ beq lbl_8034F4D0 -/* 8034F4C8 38 C0 10 00 */ li r6, 0x1000 -/* 8034F4CC 48 00 00 08 */ b lbl_8034F4D4 -lbl_8034F4D0: -/* 8034F4D0 38 C0 00 00 */ li r6, 0 -lbl_8034F4D4: -/* 8034F4D4 A0 64 00 00 */ lhz r3, 0(r4) -/* 8034F4D8 38 00 00 00 */ li r0, 0 -/* 8034F4DC 7C 63 33 78 */ or r3, r3, r6 -/* 8034F4E0 B0 64 00 00 */ sth r3, 0(r4) -/* 8034F4E4 80 65 00 04 */ lwz r3, 4(r5) -/* 8034F4E8 54 63 84 3E */ srwi r3, r3, 0x10 -/* 8034F4EC 7C 63 07 74 */ extsb r3, r3 -/* 8034F4F0 98 64 00 02 */ stb r3, 2(r4) -/* 8034F4F4 80 65 00 04 */ lwz r3, 4(r5) -/* 8034F4F8 54 63 46 3E */ srwi r3, r3, 0x18 -/* 8034F4FC 7C 63 07 74 */ extsb r3, r3 -/* 8034F500 98 64 00 03 */ stb r3, 3(r4) -/* 8034F504 80 65 00 04 */ lwz r3, 4(r5) -/* 8034F508 7C 63 07 74 */ extsb r3, r3 -/* 8034F50C 98 64 00 04 */ stb r3, 4(r4) -/* 8034F510 80 65 00 04 */ lwz r3, 4(r5) -/* 8034F514 54 63 C2 3E */ srwi r3, r3, 8 -/* 8034F518 7C 63 07 74 */ extsb r3, r3 -/* 8034F51C 98 64 00 05 */ stb r3, 5(r4) -/* 8034F520 80 65 00 00 */ lwz r3, 0(r5) -/* 8034F524 54 63 C6 3E */ rlwinm r3, r3, 0x18, 0x18, 0x1f -/* 8034F528 98 64 00 06 */ stb r3, 6(r4) -/* 8034F52C 80 65 00 00 */ lwz r3, 0(r5) -/* 8034F530 98 64 00 07 */ stb r3, 7(r4) -/* 8034F534 98 04 00 08 */ stb r0, 8(r4) -/* 8034F538 98 04 00 09 */ stb r0, 9(r4) -/* 8034F53C 88 04 00 06 */ lbz r0, 6(r4) -/* 8034F540 28 00 00 AA */ cmplwi r0, 0xaa -/* 8034F544 41 80 00 10 */ blt lbl_8034F554 -/* 8034F548 A0 04 00 00 */ lhz r0, 0(r4) -/* 8034F54C 60 00 00 40 */ ori r0, r0, 0x40 -/* 8034F550 B0 04 00 00 */ sth r0, 0(r4) -lbl_8034F554: -/* 8034F554 88 04 00 07 */ lbz r0, 7(r4) -/* 8034F558 28 00 00 AA */ cmplwi r0, 0xaa -/* 8034F55C 41 80 00 10 */ blt lbl_8034F56C -/* 8034F560 A0 04 00 00 */ lhz r0, 0(r4) -/* 8034F564 60 00 00 20 */ ori r0, r0, 0x20 -/* 8034F568 B0 04 00 00 */ sth r0, 0(r4) -lbl_8034F56C: -/* 8034F56C 88 64 00 02 */ lbz r3, 2(r4) -/* 8034F570 38 03 FF 80 */ addi r0, r3, -128 -/* 8034F574 98 04 00 02 */ stb r0, 2(r4) -/* 8034F578 88 64 00 03 */ lbz r3, 3(r4) -/* 8034F57C 38 03 FF 80 */ addi r0, r3, -128 -/* 8034F580 98 04 00 03 */ stb r0, 3(r4) -/* 8034F584 88 64 00 04 */ lbz r3, 4(r4) -/* 8034F588 38 03 FF 80 */ addi r0, r3, -128 -/* 8034F58C 98 04 00 04 */ stb r0, 4(r4) -/* 8034F590 88 64 00 05 */ lbz r3, 5(r4) -/* 8034F594 38 03 FF 80 */ addi r0, r3, -128 -/* 8034F598 98 04 00 05 */ stb r0, 5(r4) -/* 8034F59C 4E 80 00 20 */ blr diff --git a/asm/dolphin/pad/Pad/SamplingHandler.s b/asm/dolphin/pad/Pad/SamplingHandler.s deleted file mode 100644 index 5c7525bdb2..0000000000 --- a/asm/dolphin/pad/Pad/SamplingHandler.s +++ /dev/null @@ -1,26 +0,0 @@ -lbl_8034FB40: -/* 8034FB40 7C 08 02 A6 */ mflr r0 -/* 8034FB44 90 01 00 04 */ stw r0, 4(r1) -/* 8034FB48 94 21 FD 20 */ stwu r1, -0x2e0(r1) -/* 8034FB4C 93 E1 02 DC */ stw r31, 0x2dc(r1) -/* 8034FB50 3B E4 00 00 */ addi r31, r4, 0 -/* 8034FB54 80 0D 92 E8 */ lwz r0, SamplingCallback(r13) -/* 8034FB58 28 00 00 00 */ cmplwi r0, 0 -/* 8034FB5C 41 82 00 30 */ beq lbl_8034FB8C -/* 8034FB60 38 61 00 10 */ addi r3, r1, 0x10 -/* 8034FB64 4B FE C4 9D */ bl OSClearContext -/* 8034FB68 38 61 00 10 */ addi r3, r1, 0x10 -/* 8034FB6C 4B FE C2 CD */ bl OSSetCurrentContext -/* 8034FB70 81 8D 92 E8 */ lwz r12, SamplingCallback(r13) -/* 8034FB74 7D 88 03 A6 */ mtlr r12 -/* 8034FB78 4E 80 00 21 */ blrl -/* 8034FB7C 38 61 00 10 */ addi r3, r1, 0x10 -/* 8034FB80 4B FE C4 81 */ bl OSClearContext -/* 8034FB84 7F E3 FB 78 */ mr r3, r31 -/* 8034FB88 4B FE C2 B1 */ bl OSSetCurrentContext -lbl_8034FB8C: -/* 8034FB8C 80 01 02 E4 */ lwz r0, 0x2e4(r1) -/* 8034FB90 83 E1 02 DC */ lwz r31, 0x2dc(r1) -/* 8034FB94 38 21 02 E0 */ addi r1, r1, 0x2e0 -/* 8034FB98 7C 08 03 A6 */ mtlr r0 -/* 8034FB9C 4E 80 00 20 */ blr diff --git a/asm/dolphin/pad/Pad/UpdateOrigin.s b/asm/dolphin/pad/Pad/UpdateOrigin.s deleted file mode 100644 index 1ddee530ad..0000000000 --- a/asm/dolphin/pad/Pad/UpdateOrigin.s +++ /dev/null @@ -1,114 +0,0 @@ -lbl_8034E2B4: -/* 8034E2B4 7C 08 02 A6 */ mflr r0 -/* 8034E2B8 3C A0 80 45 */ lis r5, Origin@ha /* 0x8044CB80@ha */ -/* 8034E2BC 90 01 00 04 */ stw r0, 4(r1) -/* 8034E2C0 1C C3 00 0C */ mulli r6, r3, 0xc -/* 8034E2C4 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 8034E2C8 38 A5 CB 80 */ addi r5, r5, Origin@l /* 0x8044CB80@l */ -/* 8034E2CC 93 E1 00 14 */ stw r31, 0x14(r1) -/* 8034E2D0 7F E5 32 14 */ add r31, r5, r6 -/* 8034E2D4 80 0D 84 AC */ lwz r0, AnalogMode(r13) -/* 8034E2D8 54 04 05 6E */ rlwinm r4, r0, 0, 0x15, 0x17 -/* 8034E2DC 2C 04 04 00 */ cmpwi r4, 0x400 -/* 8034E2E0 3C 00 80 00 */ lis r0, 0x8000 -/* 8034E2E4 7C 00 1C 30 */ srw r0, r0, r3 -/* 8034E2E8 41 82 00 F4 */ beq lbl_8034E3DC -/* 8034E2EC 40 80 00 34 */ bge lbl_8034E320 -/* 8034E2F0 2C 04 02 00 */ cmpwi r4, 0x200 -/* 8034E2F4 41 82 00 B8 */ beq lbl_8034E3AC -/* 8034E2F8 40 80 00 1C */ bge lbl_8034E314 -/* 8034E2FC 2C 04 01 00 */ cmpwi r4, 0x100 -/* 8034E300 41 82 00 78 */ beq lbl_8034E378 -/* 8034E304 40 80 00 D8 */ bge lbl_8034E3DC -/* 8034E308 2C 04 00 00 */ cmpwi r4, 0 -/* 8034E30C 41 82 00 38 */ beq lbl_8034E344 -/* 8034E310 48 00 00 CC */ b lbl_8034E3DC -lbl_8034E314: -/* 8034E314 2C 04 03 00 */ cmpwi r4, 0x300 -/* 8034E318 41 82 00 C4 */ beq lbl_8034E3DC -/* 8034E31C 48 00 00 C0 */ b lbl_8034E3DC -lbl_8034E320: -/* 8034E320 2C 04 06 00 */ cmpwi r4, 0x600 -/* 8034E324 41 82 00 20 */ beq lbl_8034E344 -/* 8034E328 40 80 00 10 */ bge lbl_8034E338 -/* 8034E32C 2C 04 05 00 */ cmpwi r4, 0x500 -/* 8034E330 41 82 00 14 */ beq lbl_8034E344 -/* 8034E334 48 00 00 A8 */ b lbl_8034E3DC -lbl_8034E338: -/* 8034E338 2C 04 07 00 */ cmpwi r4, 0x700 -/* 8034E33C 41 82 00 08 */ beq lbl_8034E344 -/* 8034E340 48 00 00 9C */ b lbl_8034E3DC -lbl_8034E344: -/* 8034E344 88 9F 00 06 */ lbz r4, 6(r31) -/* 8034E348 54 84 00 36 */ rlwinm r4, r4, 0, 0, 0x1b -/* 8034E34C 98 9F 00 06 */ stb r4, 6(r31) -/* 8034E350 88 9F 00 07 */ lbz r4, 7(r31) -/* 8034E354 54 84 00 36 */ rlwinm r4, r4, 0, 0, 0x1b -/* 8034E358 98 9F 00 07 */ stb r4, 7(r31) -/* 8034E35C 88 9F 00 08 */ lbz r4, 8(r31) -/* 8034E360 54 84 00 36 */ rlwinm r4, r4, 0, 0, 0x1b -/* 8034E364 98 9F 00 08 */ stb r4, 8(r31) -/* 8034E368 88 9F 00 09 */ lbz r4, 9(r31) -/* 8034E36C 54 84 00 36 */ rlwinm r4, r4, 0, 0, 0x1b -/* 8034E370 98 9F 00 09 */ stb r4, 9(r31) -/* 8034E374 48 00 00 68 */ b lbl_8034E3DC -lbl_8034E378: -/* 8034E378 88 9F 00 04 */ lbz r4, 4(r31) -/* 8034E37C 54 84 00 36 */ rlwinm r4, r4, 0, 0, 0x1b -/* 8034E380 98 9F 00 04 */ stb r4, 4(r31) -/* 8034E384 88 9F 00 05 */ lbz r4, 5(r31) -/* 8034E388 54 84 00 36 */ rlwinm r4, r4, 0, 0, 0x1b -/* 8034E38C 98 9F 00 05 */ stb r4, 5(r31) -/* 8034E390 88 9F 00 08 */ lbz r4, 8(r31) -/* 8034E394 54 84 00 36 */ rlwinm r4, r4, 0, 0, 0x1b -/* 8034E398 98 9F 00 08 */ stb r4, 8(r31) -/* 8034E39C 88 9F 00 09 */ lbz r4, 9(r31) -/* 8034E3A0 54 84 00 36 */ rlwinm r4, r4, 0, 0, 0x1b -/* 8034E3A4 98 9F 00 09 */ stb r4, 9(r31) -/* 8034E3A8 48 00 00 34 */ b lbl_8034E3DC -lbl_8034E3AC: -/* 8034E3AC 88 9F 00 04 */ lbz r4, 4(r31) -/* 8034E3B0 54 84 00 36 */ rlwinm r4, r4, 0, 0, 0x1b -/* 8034E3B4 98 9F 00 04 */ stb r4, 4(r31) -/* 8034E3B8 88 9F 00 05 */ lbz r4, 5(r31) -/* 8034E3BC 54 84 00 36 */ rlwinm r4, r4, 0, 0, 0x1b -/* 8034E3C0 98 9F 00 05 */ stb r4, 5(r31) -/* 8034E3C4 88 9F 00 06 */ lbz r4, 6(r31) -/* 8034E3C8 54 84 00 36 */ rlwinm r4, r4, 0, 0, 0x1b -/* 8034E3CC 98 9F 00 06 */ stb r4, 6(r31) -/* 8034E3D0 88 9F 00 07 */ lbz r4, 7(r31) -/* 8034E3D4 54 84 00 36 */ rlwinm r4, r4, 0, 0, 0x1b -/* 8034E3D8 98 9F 00 07 */ stb r4, 7(r31) -lbl_8034E3DC: -/* 8034E3DC 88 9F 00 02 */ lbz r4, 2(r31) -/* 8034E3E0 38 84 FF 80 */ addi r4, r4, -128 -/* 8034E3E4 98 9F 00 02 */ stb r4, 2(r31) -/* 8034E3E8 88 9F 00 03 */ lbz r4, 3(r31) -/* 8034E3EC 38 84 FF 80 */ addi r4, r4, -128 -/* 8034E3F0 98 9F 00 03 */ stb r4, 3(r31) -/* 8034E3F4 88 9F 00 04 */ lbz r4, 4(r31) -/* 8034E3F8 38 84 FF 80 */ addi r4, r4, -128 -/* 8034E3FC 98 9F 00 04 */ stb r4, 4(r31) -/* 8034E400 88 9F 00 05 */ lbz r4, 5(r31) -/* 8034E404 38 84 FF 80 */ addi r4, r4, -128 -/* 8034E408 98 9F 00 05 */ stb r4, 5(r31) -/* 8034E40C 80 8D 84 A8 */ lwz r4, XPatchBits(r13) -/* 8034E410 7C 80 00 39 */ and. r0, r4, r0 -/* 8034E414 41 82 00 30 */ beq lbl_8034E444 -/* 8034E418 88 1F 00 02 */ lbz r0, 2(r31) -/* 8034E41C 7C 00 07 74 */ extsb r0, r0 -/* 8034E420 2C 00 00 40 */ cmpwi r0, 0x40 -/* 8034E424 40 81 00 20 */ ble lbl_8034E444 -/* 8034E428 4B FF 7B 69 */ bl SIGetType -/* 8034E42C 54 63 00 1E */ rlwinm r3, r3, 0, 0, 0xf -/* 8034E430 3C 03 F7 00 */ addis r0, r3, 0xf700 -/* 8034E434 28 00 00 00 */ cmplwi r0, 0 -/* 8034E438 40 82 00 0C */ bne lbl_8034E444 -/* 8034E43C 38 00 00 00 */ li r0, 0 -/* 8034E440 98 1F 00 02 */ stb r0, 2(r31) -lbl_8034E444: -/* 8034E444 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 8034E448 83 E1 00 14 */ lwz r31, 0x14(r1) -/* 8034E44C 38 21 00 18 */ addi r1, r1, 0x18 -/* 8034E450 7C 08 03 A6 */ mtlr r0 -/* 8034E454 4E 80 00 20 */ blr diff --git a/asm/dolphin/pad/Padclamp/ClampStick.s b/asm/dolphin/pad/Padclamp/ClampStick.s deleted file mode 100644 index 0addcb013e..0000000000 --- a/asm/dolphin/pad/Padclamp/ClampStick.s +++ /dev/null @@ -1,88 +0,0 @@ -lbl_8034DDBC: -/* 8034DDBC 88 03 00 00 */ lbz r0, 0(r3) -/* 8034DDC0 89 84 00 00 */ lbz r12, 0(r4) -/* 8034DDC4 7C 00 07 75 */ extsb. r0, r0 -/* 8034DDC8 7D 8C 07 74 */ extsb r12, r12 -/* 8034DDCC 7C 0B 03 78 */ mr r11, r0 -/* 8034DDD0 41 80 00 0C */ blt lbl_8034DDDC -/* 8034DDD4 38 00 00 01 */ li r0, 1 -/* 8034DDD8 48 00 00 0C */ b lbl_8034DDE4 -lbl_8034DDDC: -/* 8034DDDC 38 00 FF FF */ li r0, -1 -/* 8034DDE0 7D 6B 00 D0 */ neg r11, r11 -lbl_8034DDE4: -/* 8034DDE4 2C 0C 00 00 */ cmpwi r12, 0 -/* 8034DDE8 41 80 00 0C */ blt lbl_8034DDF4 -/* 8034DDEC 39 00 00 01 */ li r8, 1 -/* 8034DDF0 48 00 00 0C */ b lbl_8034DDFC -lbl_8034DDF4: -/* 8034DDF4 39 00 FF FF */ li r8, -1 -/* 8034DDF8 7D 8C 00 D0 */ neg r12, r12 -lbl_8034DDFC: -/* 8034DDFC 7C E7 07 74 */ extsb r7, r7 -/* 8034DE00 7C 0B 38 00 */ cmpw r11, r7 -/* 8034DE04 41 81 00 0C */ bgt lbl_8034DE10 -/* 8034DE08 39 60 00 00 */ li r11, 0 -/* 8034DE0C 48 00 00 08 */ b lbl_8034DE14 -lbl_8034DE10: -/* 8034DE10 7D 67 58 50 */ subf r11, r7, r11 -lbl_8034DE14: -/* 8034DE14 7C 0C 38 00 */ cmpw r12, r7 -/* 8034DE18 41 81 00 0C */ bgt lbl_8034DE24 -/* 8034DE1C 39 80 00 00 */ li r12, 0 -/* 8034DE20 48 00 00 08 */ b lbl_8034DE28 -lbl_8034DE24: -/* 8034DE24 7D 87 60 50 */ subf r12, r7, r12 -lbl_8034DE28: -/* 8034DE28 2C 0B 00 00 */ cmpwi r11, 0 -/* 8034DE2C 40 82 00 1C */ bne lbl_8034DE48 -/* 8034DE30 2C 0C 00 00 */ cmpwi r12, 0 -/* 8034DE34 40 82 00 14 */ bne lbl_8034DE48 -/* 8034DE38 38 00 00 00 */ li r0, 0 -/* 8034DE3C 98 04 00 00 */ stb r0, 0(r4) -/* 8034DE40 98 03 00 00 */ stb r0, 0(r3) -/* 8034DE44 4E 80 00 20 */ blr -lbl_8034DE48: -/* 8034DE48 7C C6 07 74 */ extsb r6, r6 -/* 8034DE4C 7D 26 61 D6 */ mullw r9, r6, r12 -/* 8034DE50 7C E6 59 D6 */ mullw r7, r6, r11 -/* 8034DE54 7C 09 38 00 */ cmpw r9, r7 -/* 8034DE58 41 81 00 44 */ bgt lbl_8034DE9C -/* 8034DE5C 7C A9 07 74 */ extsb r9, r5 -/* 8034DE60 7C A6 48 50 */ subf r5, r6, r9 -/* 8034DE64 7C AC 29 D6 */ mullw r5, r12, r5 -/* 8034DE68 7D 26 49 D6 */ mullw r9, r6, r9 -/* 8034DE6C 7C E7 2A 14 */ add r7, r7, r5 -/* 8034DE70 7C 09 38 00 */ cmpw r9, r7 -/* 8034DE74 40 80 00 64 */ bge lbl_8034DED8 -/* 8034DE78 7C CB 49 D6 */ mullw r6, r11, r9 -/* 8034DE7C 7C AC 49 D6 */ mullw r5, r12, r9 -/* 8034DE80 7C C6 3B D6 */ divw r6, r6, r7 -/* 8034DE84 7C A5 3B D6 */ divw r5, r5, r7 -/* 8034DE88 7C C6 07 74 */ extsb r6, r6 -/* 8034DE8C 7C A5 07 74 */ extsb r5, r5 -/* 8034DE90 39 66 00 00 */ addi r11, r6, 0 -/* 8034DE94 39 85 00 00 */ addi r12, r5, 0 -/* 8034DE98 48 00 00 40 */ b lbl_8034DED8 -lbl_8034DE9C: -/* 8034DE9C 7C A7 07 74 */ extsb r7, r5 -/* 8034DEA0 7C A6 38 50 */ subf r5, r6, r7 -/* 8034DEA4 7C AB 29 D6 */ mullw r5, r11, r5 -/* 8034DEA8 7D 46 39 D6 */ mullw r10, r6, r7 -/* 8034DEAC 7C E9 2A 14 */ add r7, r9, r5 -/* 8034DEB0 7C 0A 38 00 */ cmpw r10, r7 -/* 8034DEB4 40 80 00 24 */ bge lbl_8034DED8 -/* 8034DEB8 7C CB 51 D6 */ mullw r6, r11, r10 -/* 8034DEBC 7C AC 51 D6 */ mullw r5, r12, r10 -/* 8034DEC0 7C C6 3B D6 */ divw r6, r6, r7 -/* 8034DEC4 7C A5 3B D6 */ divw r5, r5, r7 -/* 8034DEC8 7C C6 07 74 */ extsb r6, r6 -/* 8034DECC 7C A5 07 74 */ extsb r5, r5 -/* 8034DED0 39 66 00 00 */ addi r11, r6, 0 -/* 8034DED4 39 85 00 00 */ addi r12, r5, 0 -lbl_8034DED8: -/* 8034DED8 7C A0 59 D6 */ mullw r5, r0, r11 -/* 8034DEDC 7C 08 61 D6 */ mullw r0, r8, r12 -/* 8034DEE0 98 A3 00 00 */ stb r5, 0(r3) -/* 8034DEE4 98 04 00 00 */ stb r0, 0(r4) -/* 8034DEE8 4E 80 00 20 */ blr diff --git a/asm/dolphin/si/SIBios/AlarmHandler.s b/asm/dolphin/si/SIBios/AlarmHandler.s deleted file mode 100644 index bfd235c63f..0000000000 --- a/asm/dolphin/si/SIBios/AlarmHandler.s +++ /dev/null @@ -1,37 +0,0 @@ -lbl_80345B00: -/* 80345B00 7C 08 02 A6 */ mflr r0 -/* 80345B04 3C 80 80 45 */ lis r4, Alarm@ha /* 0x8044C6B0@ha */ -/* 80345B08 90 01 00 04 */ stw r0, 4(r1) -/* 80345B0C 38 04 C6 B0 */ addi r0, r4, Alarm@l /* 0x8044C6B0@l */ -/* 80345B10 3C 80 66 66 */ lis r4, 0x6666 /* 0x66666667@ha */ -/* 80345B14 7C 00 18 50 */ subf r0, r0, r3 -/* 80345B18 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 80345B1C 38 64 66 67 */ addi r3, r4, 0x6667 /* 0x66666667@l */ -/* 80345B20 7C 03 00 96 */ mulhw r0, r3, r0 -/* 80345B24 93 E1 00 1C */ stw r31, 0x1c(r1) -/* 80345B28 7C 00 26 70 */ srawi r0, r0, 4 -/* 80345B2C 54 03 0F FE */ srwi r3, r0, 0x1f -/* 80345B30 7C 00 1A 14 */ add r0, r0, r3 -/* 80345B34 3C 60 80 45 */ lis r3, Packet@ha /* 0x8044C630@ha */ -/* 80345B38 54 04 28 34 */ slwi r4, r0, 5 -/* 80345B3C 38 03 C6 30 */ addi r0, r3, Packet@l /* 0x8044C630@l */ -/* 80345B40 7F E0 22 14 */ add r31, r0, r4 -/* 80345B44 80 7F 00 00 */ lwz r3, 0(r31) -/* 80345B48 2C 03 FF FF */ cmpwi r3, -1 -/* 80345B4C 41 82 00 2C */ beq lbl_80345B78 -/* 80345B50 80 9F 00 04 */ lwz r4, 4(r31) -/* 80345B54 80 BF 00 08 */ lwz r5, 8(r31) -/* 80345B58 80 DF 00 0C */ lwz r6, 0xc(r31) -/* 80345B5C 80 FF 00 10 */ lwz r7, 0x10(r31) -/* 80345B60 81 1F 00 14 */ lwz r8, 0x14(r31) -/* 80345B64 4B FF F9 E5 */ bl __SITransfer -/* 80345B68 2C 03 00 00 */ cmpwi r3, 0 -/* 80345B6C 41 82 00 0C */ beq lbl_80345B78 -/* 80345B70 38 00 FF FF */ li r0, -1 -/* 80345B74 90 1F 00 00 */ stw r0, 0(r31) -lbl_80345B78: -/* 80345B78 80 01 00 24 */ lwz r0, 0x24(r1) -/* 80345B7C 83 E1 00 1C */ lwz r31, 0x1c(r1) -/* 80345B80 38 21 00 20 */ addi r1, r1, 0x20 -/* 80345B84 7C 08 03 A6 */ mtlr r0 -/* 80345B88 4E 80 00 20 */ blr diff --git a/asm/dolphin/si/SIBios/SIBusy.s b/asm/dolphin/si/SIBios/SIBusy.s deleted file mode 100644 index 94e1723c50..0000000000 --- a/asm/dolphin/si/SIBios/SIBusy.s +++ /dev/null @@ -1,10 +0,0 @@ -lbl_80344BA0: -/* 80344BA0 3C 60 80 3D */ lis r3, Si@ha /* 0x803D11FC@ha */ -/* 80344BA4 80 03 11 FC */ lwz r0, Si@l(r3) /* 0x803D11FC@l */ -/* 80344BA8 2C 00 FF FF */ cmpwi r0, -1 -/* 80344BAC 41 82 00 0C */ beq lbl_80344BB8 -/* 80344BB0 38 60 00 01 */ li r3, 1 -/* 80344BB4 4E 80 00 20 */ blr -lbl_80344BB8: -/* 80344BB8 38 60 00 00 */ li r3, 0 -/* 80344BBC 4E 80 00 20 */ blr diff --git a/asm/dolphin/si/SIBios/SIDisablePolling.s b/asm/dolphin/si/SIBios/SIDisablePolling.s deleted file mode 100644 index ddbfb01bd9..0000000000 --- a/asm/dolphin/si/SIBios/SIDisablePolling.s +++ /dev/null @@ -1,30 +0,0 @@ -lbl_803458FC: -/* 803458FC 7C 08 02 A6 */ mflr r0 -/* 80345900 90 01 00 04 */ stw r0, 4(r1) -/* 80345904 94 21 FF E8 */ stwu r1, -0x18(r1) -/* 80345908 93 E1 00 14 */ stw r31, 0x14(r1) -/* 8034590C 7C 7F 1B 79 */ or. r31, r3, r3 -/* 80345910 40 82 00 14 */ bne lbl_80345924 -/* 80345914 3C 60 80 3D */ lis r3, Si@ha /* 0x803D11FC@ha */ -/* 80345918 38 63 11 FC */ addi r3, r3, Si@l /* 0x803D11FC@l */ -/* 8034591C 80 63 00 04 */ lwz r3, 4(r3) -/* 80345920 48 00 00 34 */ b lbl_80345954 -lbl_80345924: -/* 80345924 4B FF 7D D1 */ bl OSDisableInterrupts -/* 80345928 3C 80 80 3D */ lis r4, Si@ha /* 0x803D11FC@ha */ -/* 8034592C 38 84 11 FC */ addi r4, r4, Si@l /* 0x803D11FC@l */ -/* 80345930 80 04 00 04 */ lwz r0, 4(r4) -/* 80345934 57 FF 46 36 */ rlwinm r31, r31, 8, 0x18, 0x1b -/* 80345938 38 A4 00 04 */ addi r5, r4, 4 -/* 8034593C 3C 80 CC 00 */ lis r4, 0xCC00 /* 0xCC006430@ha */ -/* 80345940 7C 1F F8 78 */ andc r31, r0, r31 -/* 80345944 93 E4 64 30 */ stw r31, 0x6430(r4) /* 0xCC006430@l */ -/* 80345948 93 E5 00 00 */ stw r31, 0(r5) -/* 8034594C 4B FF 7D D1 */ bl OSRestoreInterrupts -/* 80345950 7F E3 FB 78 */ mr r3, r31 -lbl_80345954: -/* 80345954 80 01 00 1C */ lwz r0, 0x1c(r1) -/* 80345958 83 E1 00 14 */ lwz r31, 0x14(r1) -/* 8034595C 38 21 00 18 */ addi r1, r1, 0x18 -/* 80345960 7C 08 03 A6 */ mtlr r0 -/* 80345964 4E 80 00 20 */ blr diff --git a/asm/dolphin/si/SIBios/SIInit.s b/asm/dolphin/si/SIBios/SIInit.s deleted file mode 100644 index af7c2efc8d..0000000000 --- a/asm/dolphin/si/SIBios/SIInit.s +++ /dev/null @@ -1,47 +0,0 @@ -lbl_80345494: -/* 80345494 7C 08 02 A6 */ mflr r0 -/* 80345498 3C 80 80 45 */ lis r4, Packet@ha /* 0x8044C630@ha */ -/* 8034549C 90 01 00 04 */ stw r0, 4(r1) -/* 803454A0 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 803454A4 93 E1 00 0C */ stw r31, 0xc(r1) -/* 803454A8 3B E4 C6 30 */ addi r31, r4, Packet@l /* 0x8044C630@l */ -/* 803454AC 80 6D 84 48 */ lwz r3, __SIVersion(r13) -/* 803454B0 4B FF 53 C5 */ bl OSRegisterVersion -/* 803454B4 38 A0 FF FF */ li r5, -1 -/* 803454B8 90 BF 00 60 */ stw r5, 0x60(r31) -/* 803454BC 3C 60 80 3D */ lis r3, Si@ha /* 0x803D11FC@ha */ -/* 803454C0 38 83 11 FC */ addi r4, r3, Si@l /* 0x803D11FC@l */ -/* 803454C4 90 BF 00 40 */ stw r5, 0x40(r31) -/* 803454C8 38 00 00 00 */ li r0, 0 -/* 803454CC 38 60 00 00 */ li r3, 0 -/* 803454D0 90 BF 00 20 */ stw r5, 0x20(r31) -/* 803454D4 90 BF 00 00 */ stw r5, 0(r31) -/* 803454D8 90 04 00 04 */ stw r0, 4(r4) -/* 803454DC 48 00 0D B5 */ bl SISetSamplingRate -/* 803454E0 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006400@ha */ -lbl_803454E4: -/* 803454E4 38 83 64 00 */ addi r4, r3, 0x6400 /* 0xCC006400@l */ -/* 803454E8 84 04 00 34 */ lwzu r0, 0x34(r4) -/* 803454EC 54 00 07 FF */ clrlwi. r0, r0, 0x1f -/* 803454F0 40 82 FF F4 */ bne lbl_803454E4 -/* 803454F4 3C 00 80 00 */ lis r0, 0x8000 -/* 803454F8 3C 60 80 34 */ lis r3, SIInterruptHandler@ha /* 0x80344EF8@ha */ -/* 803454FC 90 04 00 00 */ stw r0, 0(r4) -/* 80345500 38 83 4E F8 */ addi r4, r3, SIInterruptHandler@l /* 0x80344EF8@l */ -/* 80345504 38 60 00 14 */ li r3, 0x14 -/* 80345508 4B FF 82 39 */ bl __OSSetInterruptHandler -/* 8034550C 38 60 08 00 */ li r3, 0x800 -/* 80345510 4B FF 86 35 */ bl __OSUnmaskInterrupts -/* 80345514 38 60 00 00 */ li r3, 0 -/* 80345518 48 00 0A 79 */ bl SIGetType -/* 8034551C 38 60 00 01 */ li r3, 1 -/* 80345520 48 00 0A 71 */ bl SIGetType -/* 80345524 38 60 00 02 */ li r3, 2 -/* 80345528 48 00 0A 69 */ bl SIGetType -/* 8034552C 38 60 00 03 */ li r3, 3 -/* 80345530 48 00 0A 61 */ bl SIGetType -/* 80345534 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80345538 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 8034553C 38 21 00 10 */ addi r1, r1, 0x10 -/* 80345540 7C 08 03 A6 */ mtlr r0 -/* 80345544 4E 80 00 20 */ blr diff --git a/asm/dolphin/si/SIBios/SIIsChanBusy.s b/asm/dolphin/si/SIBios/SIIsChanBusy.s deleted file mode 100644 index dcd7ea760d..0000000000 --- a/asm/dolphin/si/SIBios/SIIsChanBusy.s +++ /dev/null @@ -1,17 +0,0 @@ -lbl_80344BC0: -/* 80344BC0 3C 80 80 45 */ lis r4, Packet@ha /* 0x8044C630@ha */ -/* 80344BC4 54 65 28 34 */ slwi r5, r3, 5 -/* 80344BC8 38 04 C6 30 */ addi r0, r4, Packet@l /* 0x8044C630@l */ -/* 80344BCC 7C 80 2A 14 */ add r4, r0, r5 -/* 80344BD0 80 04 00 00 */ lwz r0, 0(r4) -/* 80344BD4 38 A0 00 01 */ li r5, 1 -/* 80344BD8 2C 00 FF FF */ cmpwi r0, -1 -/* 80344BDC 40 82 00 18 */ bne lbl_80344BF4 -/* 80344BE0 3C 80 80 3D */ lis r4, Si@ha /* 0x803D11FC@ha */ -/* 80344BE4 80 04 11 FC */ lwz r0, Si@l(r4) /* 0x803D11FC@l */ -/* 80344BE8 7C 00 18 00 */ cmpw r0, r3 -/* 80344BEC 41 82 00 08 */ beq lbl_80344BF4 -/* 80344BF0 38 A0 00 00 */ li r5, 0 -lbl_80344BF4: -/* 80344BF4 7C A3 2B 78 */ mr r3, r5 -/* 80344BF8 4E 80 00 20 */ blr diff --git a/asm/dolphin/si/SIBios/SISetCommand.s b/asm/dolphin/si/SIBios/SISetCommand.s deleted file mode 100644 index 4fcfa3ffad..0000000000 --- a/asm/dolphin/si/SIBios/SISetCommand.s +++ /dev/null @@ -1,6 +0,0 @@ -lbl_803457D0: -/* 803457D0 1C 03 00 0C */ mulli r0, r3, 0xc -/* 803457D4 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006400@ha */ -/* 803457D8 38 63 64 00 */ addi r3, r3, 0x6400 /* 0xCC006400@l */ -/* 803457DC 7C 83 01 2E */ stwx r4, r3, r0 -/* 803457E0 4E 80 00 20 */ blr diff --git a/asm/dolphin/si/SIBios/SITransfer.s b/asm/dolphin/si/SIBios/SITransfer.s deleted file mode 100644 index 59dda363be..0000000000 --- a/asm/dolphin/si/SIBios/SITransfer.s +++ /dev/null @@ -1,99 +0,0 @@ -lbl_80345B8C: -/* 80345B8C 7C 08 02 A6 */ mflr r0 -/* 80345B90 90 01 00 04 */ stw r0, 4(r1) -/* 80345B94 94 21 FF A0 */ stwu r1, -0x60(r1) -/* 80345B98 BE 61 00 2C */ stmw r19, 0x2c(r1) -/* 80345B9C 3B 03 00 00 */ addi r24, r3, 0 -/* 80345BA0 3C 60 80 45 */ lis r3, Packet@ha /* 0x8044C630@ha */ -/* 80345BA4 3A E3 C6 30 */ addi r23, r3, Packet@l /* 0x8044C630@l */ -/* 80345BA8 57 00 28 34 */ slwi r0, r24, 5 -/* 80345BAC 3B 24 00 00 */ addi r25, r4, 0 -/* 80345BB0 3B 45 00 00 */ addi r26, r5, 0 -/* 80345BB4 3B 66 00 00 */ addi r27, r6, 0 -/* 80345BB8 3B 87 00 00 */ addi r28, r7, 0 -/* 80345BBC 3B A8 00 00 */ addi r29, r8, 0 -/* 80345BC0 3B E9 00 00 */ addi r31, r9, 0 -/* 80345BC4 3B CA 00 00 */ addi r30, r10, 0 -/* 80345BC8 7E D7 02 14 */ add r22, r23, r0 -/* 80345BCC 4B FF 7B 29 */ bl OSDisableInterrupts -/* 80345BD0 80 16 00 00 */ lwz r0, 0(r22) -/* 80345BD4 3A A3 00 00 */ addi r21, r3, 0 -/* 80345BD8 2C 00 FF FF */ cmpwi r0, -1 -/* 80345BDC 40 82 00 14 */ bne lbl_80345BF0 -/* 80345BE0 3C 60 80 3D */ lis r3, Si@ha /* 0x803D11FC@ha */ -/* 80345BE4 80 03 11 FC */ lwz r0, Si@l(r3) /* 0x803D11FC@l */ -/* 80345BE8 7C 00 C0 00 */ cmpw r0, r24 -/* 80345BEC 40 82 00 14 */ bne lbl_80345C00 -lbl_80345BF0: -/* 80345BF0 7E A3 AB 78 */ mr r3, r21 -/* 80345BF4 4B FF 7B 29 */ bl OSRestoreInterrupts -/* 80345BF8 38 60 00 00 */ li r3, 0 -/* 80345BFC 48 00 00 E8 */ b lbl_80345CE4 -lbl_80345C00: -/* 80345C00 4B FF CB 1D */ bl __OSGetSystemTime -/* 80345C04 38 00 00 00 */ li r0, 0 -/* 80345C08 7F C5 02 78 */ xor r5, r30, r0 -/* 80345C0C 7F E0 02 78 */ xor r0, r31, r0 -/* 80345C10 7C A0 03 79 */ or. r0, r5, r0 -/* 80345C14 40 82 00 10 */ bne lbl_80345C24 -/* 80345C18 3A 64 00 00 */ addi r19, r4, 0 -/* 80345C1C 3A 83 00 00 */ addi r20, r3, 0 -/* 80345C20 48 00 00 1C */ b lbl_80345C3C -lbl_80345C24: -/* 80345C24 57 00 18 38 */ slwi r0, r24, 3 -/* 80345C28 7C D7 02 14 */ add r6, r23, r0 -/* 80345C2C 80 A6 01 44 */ lwz r5, 0x144(r6) -/* 80345C30 80 06 01 40 */ lwz r0, 0x140(r6) -/* 80345C34 7E 7E 28 14 */ addc r19, r30, r5 -/* 80345C38 7E 9F 01 14 */ adde r20, r31, r0 -lbl_80345C3C: -/* 80345C3C 6C 66 80 00 */ xoris r6, r3, 0x8000 -/* 80345C40 6E 85 80 00 */ xoris r5, r20, 0x8000 -/* 80345C44 7C 13 20 10 */ subfc r0, r19, r4 -/* 80345C48 7C A5 31 10 */ subfe r5, r5, r6 -/* 80345C4C 7C A6 31 10 */ subfe r5, r6, r6 -/* 80345C50 7C A5 00 D1 */ neg. r5, r5 -/* 80345C54 41 82 00 30 */ beq lbl_80345C84 -/* 80345C58 1C 18 00 28 */ mulli r0, r24, 0x28 -/* 80345C5C 7F C4 98 10 */ subfc r30, r4, r19 -/* 80345C60 7F E3 A1 10 */ subfe r31, r3, r20 -/* 80345C64 3C 80 80 34 */ lis r4, AlarmHandler@ha /* 0x80345B00@ha */ -/* 80345C68 7C 77 02 14 */ add r3, r23, r0 -/* 80345C6C 38 E4 5B 00 */ addi r7, r4, AlarmHandler@l /* 0x80345B00@l */ -/* 80345C70 38 DE 00 00 */ addi r6, r30, 0 -/* 80345C74 38 BF 00 00 */ addi r5, r31, 0 -/* 80345C78 38 63 00 80 */ addi r3, r3, 0x80 -/* 80345C7C 4B FF 4E DD */ bl OSSetAlarm -/* 80345C80 48 00 00 38 */ b lbl_80345CB8 -lbl_80345C84: -/* 80345C84 38 78 00 00 */ addi r3, r24, 0 -/* 80345C88 38 99 00 00 */ addi r4, r25, 0 -/* 80345C8C 38 BA 00 00 */ addi r5, r26, 0 -/* 80345C90 38 DB 00 00 */ addi r6, r27, 0 -/* 80345C94 38 FC 00 00 */ addi r7, r28, 0 -/* 80345C98 39 1D 00 00 */ addi r8, r29, 0 -/* 80345C9C 4B FF F8 AD */ bl __SITransfer -/* 80345CA0 2C 03 00 00 */ cmpwi r3, 0 -/* 80345CA4 41 82 00 14 */ beq lbl_80345CB8 -/* 80345CA8 7E A3 AB 78 */ mr r3, r21 -/* 80345CAC 4B FF 7A 71 */ bl OSRestoreInterrupts -/* 80345CB0 38 60 00 01 */ li r3, 1 -/* 80345CB4 48 00 00 30 */ b lbl_80345CE4 -lbl_80345CB8: -/* 80345CB8 93 16 00 00 */ stw r24, 0(r22) -/* 80345CBC 7E A3 AB 78 */ mr r3, r21 -/* 80345CC0 93 36 00 04 */ stw r25, 4(r22) -/* 80345CC4 93 56 00 08 */ stw r26, 8(r22) -/* 80345CC8 93 76 00 0C */ stw r27, 0xc(r22) -/* 80345CCC 93 96 00 10 */ stw r28, 0x10(r22) -/* 80345CD0 93 B6 00 14 */ stw r29, 0x14(r22) -/* 80345CD4 92 76 00 1C */ stw r19, 0x1c(r22) -/* 80345CD8 92 96 00 18 */ stw r20, 0x18(r22) -/* 80345CDC 4B FF 7A 41 */ bl OSRestoreInterrupts -/* 80345CE0 38 60 00 01 */ li r3, 1 -lbl_80345CE4: -/* 80345CE4 BA 61 00 2C */ lmw r19, 0x2c(r1) -/* 80345CE8 80 01 00 64 */ lwz r0, 0x64(r1) -/* 80345CEC 38 21 00 60 */ addi r1, r1, 0x60 -/* 80345CF0 7C 08 03 A6 */ mtlr r0 -/* 80345CF4 4E 80 00 20 */ blr diff --git a/asm/dolphin/si/SIBios/SITransferCommands.s b/asm/dolphin/si/SIBios/SITransferCommands.s deleted file mode 100644 index bfa8e10bf4..0000000000 --- a/asm/dolphin/si/SIBios/SITransferCommands.s +++ /dev/null @@ -1,5 +0,0 @@ -lbl_803457E4: -/* 803457E4 3C 60 CC 00 */ lis r3, 0xCC00 /* 0xCC006438@ha */ -/* 803457E8 3C 00 80 00 */ lis r0, 0x8000 -/* 803457EC 90 03 64 38 */ stw r0, 0x6438(r3) /* 0xCC006438@l */ -/* 803457F0 4E 80 00 20 */ blr diff --git a/asm/dolphin/si/SIBios/__SITransfer.s b/asm/dolphin/si/SIBios/__SITransfer.s deleted file mode 100644 index 262378e3fa..0000000000 --- a/asm/dolphin/si/SIBios/__SITransfer.s +++ /dev/null @@ -1,145 +0,0 @@ -lbl_80345548: -/* 80345548 7C 08 02 A6 */ mflr r0 -/* 8034554C 3D 20 80 3D */ lis r9, lit_1@ha /* 0x803D11B8@ha */ -/* 80345550 90 01 00 04 */ stw r0, 4(r1) -/* 80345554 94 21 FF B8 */ stwu r1, -0x48(r1) -/* 80345558 BF 21 00 2C */ stmw r25, 0x2c(r1) -/* 8034555C 3B 43 00 00 */ addi r26, r3, 0 -/* 80345560 3B 64 00 00 */ addi r27, r4, 0 -/* 80345564 3B 85 00 00 */ addi r28, r5, 0 -/* 80345568 3B A6 00 00 */ addi r29, r6, 0 -/* 8034556C 3B C7 00 00 */ addi r30, r7, 0 -/* 80345570 3B E8 00 00 */ addi r31, r8, 0 -/* 80345574 3B 29 11 B8 */ addi r25, r9, lit_1@l /* 0x803D11B8@l */ -/* 80345578 4B FF 81 7D */ bl OSDisableInterrupts -/* 8034557C 80 19 00 44 */ lwz r0, 0x44(r25) -/* 80345580 2C 00 FF FF */ cmpwi r0, -1 -/* 80345584 41 82 00 10 */ beq lbl_80345594 -/* 80345588 4B FF 81 95 */ bl OSRestoreInterrupts -/* 8034558C 38 60 00 00 */ li r3, 0 -/* 80345590 48 00 01 B0 */ b lbl_80345740 -lbl_80345594: -/* 80345594 3C C0 CC 00 */ lis r6, 0xCC00 /* 0xCC006438@ha */ -/* 80345598 57 40 18 38 */ slwi r0, r26, 3 -/* 8034559C 80 E6 64 38 */ lwz r7, 0x6438(r6) /* 0xCC006438@l */ -/* 803455A0 3C 80 0F 00 */ lis r4, 0xf00 -/* 803455A4 7C 80 06 30 */ sraw r0, r4, r0 -/* 803455A8 7C E7 00 38 */ and r7, r7, r0 -/* 803455AC 90 E6 64 38 */ stw r7, 0x6438(r6) -/* 803455B0 38 1C 00 03 */ addi r0, r28, 3 -/* 803455B4 54 04 F0 BE */ srwi r4, r0, 2 -/* 803455B8 93 59 00 44 */ stw r26, 0x44(r25) -/* 803455BC 28 04 00 00 */ cmplwi r4, 0 -/* 803455C0 38 A0 00 00 */ li r5, 0 -/* 803455C4 93 F9 00 54 */ stw r31, 0x54(r25) -/* 803455C8 93 D9 00 4C */ stw r30, 0x4c(r25) -/* 803455CC 93 B9 00 50 */ stw r29, 0x50(r25) -/* 803455D0 40 81 00 A4 */ ble lbl_80345674 -/* 803455D4 28 04 00 08 */ cmplwi r4, 8 -/* 803455D8 38 E4 FF F8 */ addi r7, r4, -8 -/* 803455DC 40 81 01 4C */ ble lbl_80345728 -/* 803455E0 38 07 00 07 */ addi r0, r7, 7 -/* 803455E4 54 00 E8 FE */ srwi r0, r0, 3 -/* 803455E8 28 07 00 00 */ cmplwi r7, 0 -/* 803455EC 7C 09 03 A6 */ mtctr r0 -/* 803455F0 38 FB 00 00 */ addi r7, r27, 0 -/* 803455F4 38 C6 64 00 */ addi r6, r6, 0x6400 -/* 803455F8 40 81 01 30 */ ble lbl_80345728 -lbl_803455FC: -/* 803455FC 80 07 00 00 */ lwz r0, 0(r7) -/* 80345600 38 A5 00 08 */ addi r5, r5, 8 -/* 80345604 90 06 00 80 */ stw r0, 0x80(r6) -/* 80345608 80 07 00 04 */ lwz r0, 4(r7) -/* 8034560C 90 06 00 84 */ stw r0, 0x84(r6) -/* 80345610 80 07 00 08 */ lwz r0, 8(r7) -/* 80345614 90 06 00 88 */ stw r0, 0x88(r6) -/* 80345618 80 07 00 0C */ lwz r0, 0xc(r7) -/* 8034561C 90 06 00 8C */ stw r0, 0x8c(r6) -/* 80345620 80 07 00 10 */ lwz r0, 0x10(r7) -/* 80345624 90 06 00 90 */ stw r0, 0x90(r6) -/* 80345628 80 07 00 14 */ lwz r0, 0x14(r7) -/* 8034562C 90 06 00 94 */ stw r0, 0x94(r6) -/* 80345630 80 07 00 18 */ lwz r0, 0x18(r7) -/* 80345634 90 06 00 98 */ stw r0, 0x98(r6) -/* 80345638 80 07 00 1C */ lwz r0, 0x1c(r7) -/* 8034563C 38 E7 00 20 */ addi r7, r7, 0x20 -/* 80345640 90 06 00 9C */ stw r0, 0x9c(r6) -/* 80345644 38 C6 00 20 */ addi r6, r6, 0x20 -/* 80345648 42 00 FF B4 */ bdnz lbl_803455FC -/* 8034564C 48 00 00 DC */ b lbl_80345728 -lbl_80345650: -/* 80345650 7C 05 20 50 */ subf r0, r5, r4 -/* 80345654 7C 05 20 40 */ cmplw r5, r4 -/* 80345658 7C 09 03 A6 */ mtctr r0 -/* 8034565C 40 80 00 18 */ bge lbl_80345674 -lbl_80345660: -/* 80345660 80 06 00 00 */ lwz r0, 0(r6) -/* 80345664 38 C6 00 04 */ addi r6, r6, 4 -/* 80345668 90 07 00 80 */ stw r0, 0x80(r7) -/* 8034566C 38 E7 00 04 */ addi r7, r7, 4 -/* 80345670 42 00 FF F0 */ bdnz lbl_80345660 -lbl_80345674: -/* 80345674 3C 80 CC 00 */ lis r4, 0xCC00 /* 0xCC006400@ha */ -/* 80345678 38 C4 64 00 */ addi r6, r4, 0x6400 /* 0xCC006400@l */ -/* 8034567C 84 06 00 34 */ lwzu r0, 0x34(r6) -/* 80345680 38 80 00 01 */ li r4, 1 -/* 80345684 90 01 00 24 */ stw r0, 0x24(r1) -/* 80345688 28 1F 00 00 */ cmplwi r31, 0 -/* 8034568C 88 01 00 24 */ lbz r0, 0x24(r1) -/* 80345690 50 80 3E 30 */ rlwimi r0, r4, 7, 0x18, 0x18 -/* 80345694 98 01 00 24 */ stb r0, 0x24(r1) -/* 80345698 41 82 00 08 */ beq lbl_803456A0 -/* 8034569C 48 00 00 08 */ b lbl_803456A4 -lbl_803456A0: -/* 803456A0 38 80 00 00 */ li r4, 0 -lbl_803456A4: -/* 803456A4 88 01 00 24 */ lbz r0, 0x24(r1) -/* 803456A8 50 80 36 72 */ rlwimi r0, r4, 6, 0x19, 0x19 -/* 803456AC 28 1C 00 80 */ cmplwi r28, 0x80 -/* 803456B0 98 01 00 24 */ stb r0, 0x24(r1) -/* 803456B4 40 82 00 0C */ bne lbl_803456C0 -/* 803456B8 38 00 00 00 */ li r0, 0 -/* 803456BC 48 00 00 08 */ b lbl_803456C4 -lbl_803456C0: -/* 803456C0 7F 80 E3 78 */ mr r0, r28 -lbl_803456C4: -/* 803456C4 54 04 06 3E */ clrlwi r4, r0, 0x18 -/* 803456C8 88 01 00 25 */ lbz r0, 0x25(r1) -/* 803456CC 50 80 06 7E */ rlwimi r0, r4, 0, 0x19, 0x1f -/* 803456D0 28 1E 00 80 */ cmplwi r30, 0x80 -/* 803456D4 98 01 00 25 */ stb r0, 0x25(r1) -/* 803456D8 40 82 00 0C */ bne lbl_803456E4 -/* 803456DC 38 00 00 00 */ li r0, 0 -/* 803456E0 48 00 00 08 */ b lbl_803456E8 -lbl_803456E4: -/* 803456E4 7F C0 F3 78 */ mr r0, r30 -lbl_803456E8: -/* 803456E8 54 04 06 3E */ clrlwi r4, r0, 0x18 -/* 803456EC 88 01 00 26 */ lbz r0, 0x26(r1) -/* 803456F0 50 80 06 7E */ rlwimi r0, r4, 0, 0x19, 0x1f -/* 803456F4 98 01 00 26 */ stb r0, 0x26(r1) -/* 803456F8 38 80 00 01 */ li r4, 1 -/* 803456FC 88 01 00 27 */ lbz r0, 0x27(r1) -/* 80345700 53 40 0F 7C */ rlwimi r0, r26, 1, 0x1d, 0x1e -/* 80345704 98 01 00 27 */ stb r0, 0x27(r1) -/* 80345708 88 01 00 27 */ lbz r0, 0x27(r1) -/* 8034570C 50 80 07 FE */ rlwimi r0, r4, 0, 0x1f, 0x1f -/* 80345710 98 01 00 27 */ stb r0, 0x27(r1) -/* 80345714 80 01 00 24 */ lwz r0, 0x24(r1) -/* 80345718 90 06 00 00 */ stw r0, 0(r6) -/* 8034571C 4B FF 80 01 */ bl OSRestoreInterrupts -/* 80345720 38 60 00 01 */ li r3, 1 -/* 80345724 48 00 00 1C */ b lbl_80345740 -lbl_80345728: -/* 80345728 3C C0 CC 00 */ lis r6, 0xCC00 /* 0xCC006400@ha */ -/* 8034572C 54 A0 10 3A */ slwi r0, r5, 2 -/* 80345730 38 E6 64 00 */ addi r7, r6, 0x6400 /* 0xCC006400@l */ -/* 80345734 7C DB 02 14 */ add r6, r27, r0 -/* 80345738 7C E7 02 14 */ add r7, r7, r0 -/* 8034573C 4B FF FF 14 */ b lbl_80345650 -lbl_80345740: -/* 80345740 BB 21 00 2C */ lmw r25, 0x2c(r1) -/* 80345744 80 01 00 4C */ lwz r0, 0x4c(r1) -/* 80345748 38 21 00 48 */ addi r1, r1, 0x48 -/* 8034574C 7C 08 03 A6 */ mtlr r0 -/* 80345750 4E 80 00 20 */ blr diff --git a/asm/dolphin/si/SISamplingRate/SIRefreshSamplingRate.s b/asm/dolphin/si/SISamplingRate/SIRefreshSamplingRate.s deleted file mode 100644 index dcd415d309..0000000000 --- a/asm/dolphin/si/SISamplingRate/SIRefreshSamplingRate.s +++ /dev/null @@ -1,10 +0,0 @@ -lbl_80346374: -/* 80346374 7C 08 02 A6 */ mflr r0 -/* 80346378 90 01 00 04 */ stw r0, 4(r1) -/* 8034637C 94 21 FF F8 */ stwu r1, -8(r1) -/* 80346380 80 6D 91 80 */ lwz r3, SamplingRate(r13) -/* 80346384 4B FF FF 0D */ bl SISetSamplingRate -/* 80346388 80 01 00 0C */ lwz r0, 0xc(r1) -/* 8034638C 38 21 00 08 */ addi r1, r1, 8 -/* 80346390 7C 08 03 A6 */ mtlr r0 -/* 80346394 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_printf/OSPanic.s b/asm/m_Do/m_Do_printf/OSPanic.s deleted file mode 100644 index c612487cd7..0000000000 --- a/asm/m_Do/m_Do_printf/OSPanic.s +++ /dev/null @@ -1,83 +0,0 @@ -lbl_80006E7C: -/* 80006E7C 94 21 FF 70 */ stwu r1, -0x90(r1) -/* 80006E80 7C 08 02 A6 */ mflr r0 -/* 80006E84 90 01 00 94 */ stw r0, 0x94(r1) -/* 80006E88 39 61 00 90 */ addi r11, r1, 0x90 -/* 80006E8C 48 35 B3 51 */ bl _savegpr_29 -/* 80006E90 7C 7F 1B 78 */ mr r31, r3 -/* 80006E94 7C 9E 23 78 */ mr r30, r4 -/* 80006E98 7C BD 2B 78 */ mr r29, r5 -/* 80006E9C 40 86 00 24 */ bne cr1, lbl_80006EC0 -/* 80006EA0 D8 21 00 28 */ stfd f1, 0x28(r1) -/* 80006EA4 D8 41 00 30 */ stfd f2, 0x30(r1) -/* 80006EA8 D8 61 00 38 */ stfd f3, 0x38(r1) -/* 80006EAC D8 81 00 40 */ stfd f4, 0x40(r1) -/* 80006EB0 D8 A1 00 48 */ stfd f5, 0x48(r1) -/* 80006EB4 D8 C1 00 50 */ stfd f6, 0x50(r1) -/* 80006EB8 D8 E1 00 58 */ stfd f7, 0x58(r1) -/* 80006EBC D9 01 00 60 */ stfd f8, 0x60(r1) -lbl_80006EC0: -/* 80006EC0 90 61 00 08 */ stw r3, 8(r1) -/* 80006EC4 90 81 00 0C */ stw r4, 0xc(r1) -/* 80006EC8 90 A1 00 10 */ stw r5, 0x10(r1) -/* 80006ECC 90 C1 00 14 */ stw r6, 0x14(r1) -/* 80006ED0 90 E1 00 18 */ stw r7, 0x18(r1) -/* 80006ED4 91 01 00 1C */ stw r8, 0x1c(r1) -/* 80006ED8 91 21 00 20 */ stw r9, 0x20(r1) -/* 80006EDC 91 41 00 24 */ stw r10, 0x24(r1) -/* 80006EE0 48 33 68 15 */ bl OSDisableInterrupts -/* 80006EE4 38 81 00 68 */ addi r4, r1, 0x68 -/* 80006EE8 3C 00 03 00 */ lis r0, 0x300 -/* 80006EEC 90 01 00 68 */ stw r0, 0x68(r1) -/* 80006EF0 38 01 00 98 */ addi r0, r1, 0x98 -/* 80006EF4 90 01 00 6C */ stw r0, 0x6c(r1) -/* 80006EF8 38 01 00 08 */ addi r0, r1, 8 -/* 80006EFC 90 01 00 70 */ stw r0, 0x70(r1) -/* 80006F00 7F A3 EB 78 */ mr r3, r29 -/* 80006F04 4B FF FA 81 */ bl mDoPrintf_vprintf__FPCcP16__va_list_struct -/* 80006F08 3C 60 80 37 */ lis r3, m_Do_m_Do_printf__stringBase0@ha /* 0x80373CB0@ha */ -/* 80006F0C 38 63 3C B0 */ addi r3, r3, m_Do_m_Do_printf__stringBase0@l /* 0x80373CB0@l */ -/* 80006F10 38 63 00 60 */ addi r3, r3, 0x60 -/* 80006F14 7F E4 FB 78 */ mr r4, r31 -/* 80006F18 7F C5 F3 78 */ mr r5, r30 -/* 80006F1C 4C C6 31 82 */ crclr 6 -/* 80006F20 4B FF F8 F5 */ bl OSAttention -/* 80006F24 3C 60 80 37 */ lis r3, m_Do_m_Do_printf__stringBase0@ha /* 0x80373CB0@ha */ -/* 80006F28 38 63 3C B0 */ addi r3, r3, m_Do_m_Do_printf__stringBase0@l /* 0x80373CB0@l */ -/* 80006F2C 38 63 00 76 */ addi r3, r3, 0x76 -/* 80006F30 4C C6 31 82 */ crclr 6 -/* 80006F34 4B FF F8 E1 */ bl OSAttention -/* 80006F38 3B C0 00 00 */ li r30, 0 -/* 80006F3C 48 33 50 BD */ bl OSGetStackPointer -/* 80006F40 7C 7D 1B 78 */ mr r29, r3 -/* 80006F44 3C 60 80 37 */ lis r3, m_Do_m_Do_printf__stringBase0@ha /* 0x80373CB0@ha */ -/* 80006F48 3B E3 3C B0 */ addi r31, r3, m_Do_m_Do_printf__stringBase0@l /* 0x80373CB0@l */ -/* 80006F4C 48 00 00 20 */ b lbl_80006F6C -lbl_80006F50: -/* 80006F50 38 7F 00 9C */ addi r3, r31, 0x9c -/* 80006F54 7F A4 EB 78 */ mr r4, r29 -/* 80006F58 80 BD 00 00 */ lwz r5, 0(r29) -/* 80006F5C 80 DD 00 04 */ lwz r6, 4(r29) -/* 80006F60 4C C6 31 82 */ crclr 6 -/* 80006F64 4B FF F8 B1 */ bl OSAttention -/* 80006F68 83 BD 00 00 */ lwz r29, 0(r29) -lbl_80006F6C: -/* 80006F6C 28 1D 00 00 */ cmplwi r29, 0 -/* 80006F70 41 82 00 1C */ beq lbl_80006F8C -/* 80006F74 3C 1D 00 01 */ addis r0, r29, 1 -/* 80006F78 28 00 FF FF */ cmplwi r0, 0xffff -/* 80006F7C 41 82 00 10 */ beq lbl_80006F8C -/* 80006F80 28 1E 00 10 */ cmplwi r30, 0x10 -/* 80006F84 3B DE 00 01 */ addi r30, r30, 1 -/* 80006F88 41 80 FF C8 */ blt lbl_80006F50 -lbl_80006F8C: -/* 80006F8C 3C 60 01 23 */ lis r3, 0x0123 /* 0x01234567@ha */ -/* 80006F90 38 03 45 67 */ addi r0, r3, 0x4567 /* 0x01234567@l */ -/* 80006F94 90 03 45 67 */ stw r0, 0x4567(r3) -/* 80006F98 48 33 2D 69 */ bl PPCHalt -/* 80006F9C 39 61 00 90 */ addi r11, r1, 0x90 -/* 80006FA0 48 35 B2 89 */ bl _restgpr_29 -/* 80006FA4 80 01 00 94 */ lwz r0, 0x94(r1) -/* 80006FA8 7C 08 03 A6 */ mtlr r0 -/* 80006FAC 38 21 00 90 */ addi r1, r1, 0x90 -/* 80006FB0 4E 80 00 20 */ blr diff --git a/include/d/a/d_a_alink.h b/include/d/a/d_a_alink.h index be42e28f57..9c270ccd33 100644 --- a/include/d/a/d_a_alink.h +++ b/include/d/a/d_a_alink.h @@ -2393,10 +2393,10 @@ public: /* 80108F64 */ bool cancelHookshotMove(); /* 8010903C */ BOOL checkHookshotReadyMaterialOffMode() const; /* 80109070 */ void setHookshotReadyMaterial(); - /* 801090EC */ void initHookshotUpperAnimeSpeed(int); + /* 801090EC */ int initHookshotUpperAnimeSpeed(int); /* 80109170 */ void initHookshotReady(); /* 801091E4 */ void setHookshotReadyAnime(); - /* 80109284 */ void checkUpperItemActionHookshot(); + /* 80109284 */ int checkUpperItemActionHookshot(); /* 801095C8 */ int checkNextActionHookshot(); /* 801097A0 */ void setHookshotReturnEnd(); /* 80109890 */ void setHookshotHangMoveBGCollect(); diff --git a/include/d/com/d_com_inf_game.h b/include/d/com/d_com_inf_game.h index 2f74001e9d..cdb09b53fc 100644 --- a/include/d/com/d_com_inf_game.h +++ b/include/d/com/d_com_inf_game.h @@ -954,7 +954,9 @@ inline void dComIfGs_onEventBit(u16 i_flag) { g_dComIfG_gameInfo.info.getSavedata().getEvent().onEventBit(i_flag); } -inline BOOL i_dComIfGs_isEventBit(u16 i_flag) { +// debug rom says `i_flag` is not const, but it's needed to match in some places? +// missing some other inline maybe? +inline BOOL i_dComIfGs_isEventBit(const u16 i_flag) { return g_dComIfG_gameInfo.info.getEvent().isEventBit(i_flag); } @@ -2566,7 +2568,7 @@ inline int dComIfG_getTimerNowTimeMs() { return g_dComIfG_gameInfo.play.getTimerNowTimeMs(); } -inline int dComIfG_setTimerNowTimeMs(int time) { +inline void dComIfG_setTimerNowTimeMs(int time) { g_dComIfG_gameInfo.play.setTimerNowTimeMs(time); } diff --git a/include/d/kankyo/d_kankyo.h b/include/d/kankyo/d_kankyo.h index c99567d4b5..331228746f 100644 --- a/include/d/kankyo/d_kankyo.h +++ b/include/d/kankyo/d_kankyo.h @@ -542,7 +542,7 @@ inline dScnKy_env_light_c* i_dKy_getEnvlight() { return &g_env_light; } -BOOL dKy_darkworld_stage_check(char const*, int); +u8 dKy_darkworld_stage_check(char const*, int); BOOL dKy_withwarp_capture_check(); bool dKy_darkworld_check(); void dKy_undwater_filter_draw(); diff --git a/include/dolphin/ai/ai.h b/include/dolphin/ai/ai.h index e0ee3a3adf..0130971aea 100644 --- a/include/dolphin/ai/ai.h +++ b/include/dolphin/ai/ai.h @@ -3,4 +3,31 @@ #include "dolphin/types.h" +#ifdef __cplusplus +extern "C" { +#endif + +typedef void (*AISCallback)(u32 count); +typedef void (*AIDCallback)(); + +AIDCallback AIRegisterDMACallback(AIDCallback callback); +void AIInitDMA(u32 addr, u32 length); +void AIStartDMA(void); +void AIStopDMA(void); +void AISetStreamPlayState(u32 state); +u32 AIGetStreamPlayState(void); +void AISetDSPSampleRate(u32 rate); +u32 AIGetDSPSampleRate(void); +void __AI_set_stream_sample_rate(u32 rate); +u32 AIGetStreamSampleRate(void); +void AISetStreamVolLeft(u8 vol); +u8 AIGetStreamVolLeft(void); +void AISetStreamVolRight(u8 vol); +u8 AIGetStreamVolRight(void); +void AIInit(u8* stack); + +#ifdef __cplusplus +}; +#endif + #endif /* AI_H */ diff --git a/include/dolphin/ar/ar.h b/include/dolphin/ar/ar.h index 4e7621c45d..c04e41f1de 100644 --- a/include/dolphin/ar/ar.h +++ b/include/dolphin/ar/ar.h @@ -7,8 +7,13 @@ extern "C" { #endif -u32 ARInit(u32*, u32); -u32 ARAlloc(u32); +typedef void (*ARCallback)(void); + +ARCallback ARRegisterDMACallback(ARCallback callback); +u32 ARGetDMAStatus(void); +void ARStartDMA(u32 type, u32 mainmem_addr, u32 aram_addr, u32 length); +u32 ARInit(u32* stack_index_addr, u32 num_entries); +u32 ARAlloc(u32 length); u32 ARGetSize(void); #ifdef __cplusplus diff --git a/include/dolphin/base/PPCArch.h b/include/dolphin/base/PPCArch.h index d721eb225c..120ba92252 100644 --- a/include/dolphin/base/PPCArch.h +++ b/include/dolphin/base/PPCArch.h @@ -3,6 +3,492 @@ #include "dolphin/types.h" +#ifdef __cplusplus +extern "C" { +#endif + +#define CTR 9 +#define XER 1 +#define LR 8 + +#define UPMC1 937 +#define UPMC2 938 +#define UPMC3 941 +#define UPMC4 942 + +#define USIA 939 + +#define UMMCR0 936 +#define UMMCR1 940 + +#define HID0 1008 +#define HID1 1009 + +#define PVR 287 + +#define IBAT0U 528 +#define IBAT0L 529 +#define IBAT1U 530 +#define IBAT1L 531 +#define IBAT2U 532 +#define IBAT2L 533 +#define IBAT3U 534 +#define IBAT3L 535 + +#define DBAT0U 536 +#define DBAT0L 537 +#define DBAT1U 538 +#define DBAT1L 539 +#define DBAT2U 540 +#define DBAT2L 541 +#define DBAT3U 542 +#define DBAT3L 543 + +#define SDR1 25 + +#define SPRG0 272 +#define SPRG1 273 +#define SPRG2 274 +#define SPRG3 275 + +#define DAR 19 +#define DSISR 18 + +#define SRR0 26 +#define SRR1 27 + +#define EAR 282 + +#define DABR 1013 + +#define TBL 284 +#define TBU 285 + +#define L2CR 1017 + +#define DEC 22 + +#define IABR 1010 + +#define PMC1 953 +#define PMC2 954 +#define PMC3 957 +#define PMC4 958 + +#define SIA 955 + +#define MMCR0 952 +#define MMCR1 956 + +#define THRM1 1020 +#define THRM2 1021 +#define THRM3 1022 + +#define ICTC 1019 + +#define GQR0 912 +#define GQR1 913 +#define GQR2 914 +#define GQR3 915 +#define GQR4 916 +#define GQR5 917 +#define GQR6 918 +#define GQR7 919 + +#define HID2 920 + +#define WPAR 921 + +#define DMA_U 922 +#define DMA_L 923 + +#define MSR_POW 0x00040000 // Power Management +#define MSR_ILE 0x00010000 // Interrupt Little Endian +#define MSR_EE 0x00008000 // external interrupt +#define MSR_PR 0x00004000 // privilege level(should be 0) +#define MSR_FP 0x00002000 // floating point available +#define MSR_ME 0x00001000 // machine check enable +#define MSR_FE0 0x00000800 // floating point exception enable +#define MSR_SE 0x00000400 // single step trace enable +#define MSR_BE 0x00000200 // branch trace enable +#define MSR_FE1 0x00000100 // floating point exception enable +#define MSR_IP 0x00000040 // Exception prefix +#define MSR_IR 0x00000020 // instruction relocate +#define MSR_DR 0x00000010 // data relocate +#define MSR_PM 0x00000004 // Performance monitor marked mode +#define MSR_RI 0x00000002 // Recoverable interrupt +#define MSR_LE 0x00000001 // Little Endian + +#define MSR_POW_BIT 13 // Power Management +#define MSR_ILE_BIT 15 // Interrupt Little Endian +#define MSR_EE_BIT 16 // external interrupt +#define MSR_PR_BIT 17 // privilege level (should be 0) +#define MSR_FP_BIT 18 // floating point available +#define MSR_ME_BIT 19 // machine check enable +#define MSR_FE0_BIT 20 // floating point exception enable +#define MSR_SE_BIT 21 // single step trace enable +#define MSR_BE_BIT 22 // branch trace enable +#define MSR_FE1_BIT 23 // floating point exception enable +#define MSR_IP_BIT 25 // Exception prefix +#define MSR_IR_BIT 26 // instruction relocate +#define MSR_DR_BIT 27 // data relocate +#define MSR_PM_BIT 29 // Performance monitor marked mode +#define MSR_RI_BIT 30 // Recoverable interrupt +#define MSR_LE_BIT 31 // Little Endian + +/*---------------------------------------------------------------------------* + HID0 bits + *---------------------------------------------------------------------------*/ +#define HID0_EMCP 0x80000000 // Enable MCP +#define HID0_DBP 0x40000000 // Enable 60x bus address and data parity chk +#define HID0_EBA 0x20000000 // Enable 60x address parity checking +#define HID0_EBD 0x10000000 // Enable 60x data parity checking +#define HID0_BCLK 0x08000000 // CLK_OUT output enable and clk selection +#define HID0_ECLK 0x02000000 // CLK_OUT output enable and clk selection +#define HID0_PAR 0x01000000 // Disable !ARTRY precharge +#define HID0_DOZE 0x00800000 // Doze mode enable +#define HID0_NAP 0x00400000 // Nap mode enable +#define HID0_SLEEP 0x00200000 // Sleep mode enable +#define HID0_DPM 0x00100000 // Dynamic power management enable +#define HID0_NHR 0x00010000 // Not hard reset (0 hard reset if s/w set it) +#define HID0_ICE 0x00008000 // Instruction cache enable +#define HID0_DCE 0x00004000 // Data cache enable +#define HID0_ILOCK 0x00002000 // ICache lock +#define HID0_DLOCK 0x00001000 // DCache lock +#define HID0_ICFI 0x00000800 // ICache flash invalidate +#define HID0_DCFI 0x00000400 // DCache flash invalidate +#define HID0_SPD 0x00000200 // Speculative cache access enable (0 enable) +#define HID0_IFEM 0x00000100 // Enable M bit on bus for Ifetch +#define HID0_SGE 0x00000080 // Store gathering enable +#define HID0_DCFA 0x00000040 // DCache flush assist - set before a flush +#define HID0_BTIC 0x00000020 // Branch target icache enable +#define HID0_ABE 0x00000008 // Address bcast enable +#define HID0_BHT 0x00000004 // Branch history table enable +#define HID0_NOOPTI 0x00000001 // No-op Dcache touch instructions + +#define HID0_ICE_BIT 16 // Instruction cache enable +#define HID0_DCE_BIT 17 // Data cache enable +#define HID0_ILOCK_BIT 18 // ICache lock +#define HID0_DLOCK_BIT 19 // DCache lock + +#define HID2_LSQE 0x80000000 // L/S quantize enable +#define HID2_WPE 0x40000000 // Write pipe enable +#define HID2_PSE 0x20000000 // Paired single enable +#define HID2_LCE 0x10000000 // Locked cache enable + +#define HID2_DCHERR 0x00800000 // ERROR: dcbz_l cache hit +#define HID2_DNCERR 0x00400000 // ERROR: DMA access to normal cache +#define HID2_DCMERR 0x00200000 // ERROR: DMA cache miss error +#define HID2_DQOERR 0x00100000 // ERROR: DMA queue overflow +#define HID2_DCHEE 0x00080000 // dcbz_l cache hit error enable +#define HID2_DNCEE 0x00040000 // DMA access to normal cache error enable +#define HID2_DCMEE 0x00020000 // DMA cache miss error error enable +#define HID2_DQOEE 0x00010000 // DMA queue overflow error enable + +#define HID2_DMAQL_MASK 0x0F000000 // DMA queue length mask +#define HID2_DMAQL_SHIFT 24 // DMA queue shift + +#define HID2_LSQE_BIT 0 +#define HID2_WPE_BIT 1 +#define HID2_PSE_BIT 2 +#define HID2_LCE_BIT 3 + +#define HID2_DCHERR_BIT 8 +#define HID2_DNCERR_BIT 9 +#define HID2_DCMERR_BIT 10 +#define HID2_DQOERR_BIT 11 +#define HID2_DCHEE_BIT 12 +#define HID2_DNCEE_BIT 13 +#define HID2_DCMEE_BIT 14 +#define HID2_DQOEE_BIT 15 + +#define GQR_LOAD_SCALE_MASK 0x3F000000 // load scale field +#define GQR_LOAD_TYPE_MASK 0x00070000 // load type field +#define GQR_STORE_SCALE_MASK 0x00003F00 // store scale field +#define GQR_STORE_TYPE_MASK 0x00000007 // store type field + +typedef struct { + u32 _pad0 :2; + u32 loadScale :6; + u32 _pad1 :5; + u32 loadType :3; + u32 _pad2 :2; + u32 storeScale :6; + u32 _pad3 :5; + u32 storeType :3; +} PPC_GQR_t; + +typedef union { + u32 val; + PPC_GQR_t f; +} PPC_GQR_u; + + +#define DMA_U_ADDR_MASK 0xFFFFFFE0 // Start addr in memory +#define DMA_U_LEN_U_MASK 0x0000001F // lines to transfer (U) + +#define DMA_L_LC_ADDR_MASK 0xFFFFFFE0 // Start addr in LC +#define DMA_L_LOAD 0x00000010 // 0 - store, 1 - load +#define DMA_L_STORE 0x00000000 // 0 - store, 1 - load +#define DMA_L_LEN_MASK 0x0000000C // lines to transfer (L) +#define DMA_L_TRIGGER 0x00000002 // 0 - cmd inactive, 1 - cmd rdy +#define DMA_L_FLUSH 0x00000001 // 1 - Flush DMA queue + +typedef struct { + u32 memAddr :27; + u32 dmaLenU :5; +} PPC_DMA_U_t; + +typedef union { + u32 val; + PPC_DMA_U_t f; +} PPC_DMA_U_u; + + +typedef struct { + u32 lcAddr :27; + u32 dmaLd :1; + u32 dmaLenL :2; + u32 dmaTrigger :1; + u32 dmaFlush :1; +} PPC_DMA_L_t; + + +typedef union { + u32 val; + PPC_DMA_L_t f; +} PPC_DMA_L_u; + + +#define WPAR_ADDR 0xFFFFFFE0 // 32byte gather address +#define WPAR_BNE 0x00000001 // Buffer not empty (R) + +#define SRR1_DMA_BIT 0x00200000 +#define SRR1_L2DP_BIT 0x00100000 + +#define L2CR_L2E 0x80000000 // L2 Enable +#define L2CR_L2PE 0x40000000 // L2 data parity generation and checking enable + +#define L2CR_L2SIZ_256K 0x10000000 // L2 size 256K +#define L2CR_L2SIZ_512K 0x20000000 // L2 size 512 +#define L2CR_L2SIZ_1M 0x30000000 // L2 size 1M + +#define L2CR_L2CLK_1_0 0x02000000 // L2 clock ratio 1 +#define L2CR_L2CLK_1_5 0x04000000 // L2 clock ratio 1.5 +#define L2CR_L2CLK_2_0 0x08000000 // L2 clock ratio 2 +#define L2CR_L2CLK_2_5 0x0A000000 // L2 clock ratio 2.5 +#define L2CR_L2CLK_3_0 0x0C000000 // L2 clock ratio 3 + +#define L2CR_RAM_FLOW_THRU_BURST 0x00000000 // L2 RAM type flow-through sync. burst SRAM +#define L2CR_RAM_PIPELINE_BURST 0x01000000 // L2 RAM type pipelined sync. burst SRAM +#define L2CR_RAM_PIPELINE_LATE 0x01800000 // L2 RAM type pipelined sync. late-write SRAM + +#define L2CR_L2DO 0x00400000 // Data only +#define L2CR_L2I 0x00200000 // Global invalidate +#define L2CR_L2CTL 0x00100000 // ZZ enable +#define L2CR_L2WT 0x00080000 // L2 write through +#define L2CR_L2TS 0x00040000 // L2 test support + +#define L2CR_L2OH_0_5 0x00000000 // L2 output hold 0.5 ns +#define L2CR_L2OH_1_0 0x00010000 // L2 output hold 1.0 ns + +#define L2CR_L2SL 0x00008000 // L2 DLL slow +#define L2CR_L2DF 0x00004000 // L2 differential clock +#define L2CR_L2BYP 0x00002000 // L2 DLL bypass +#define L2CR_L2CS 0x00000200 // L2 clock stop +#define L2CR_L2DRO 0x00000100 // L2 DLL rollover checkstop enable +#define L2CR_L2CTR_MASK 0x000000FE // L2 counter value mask +#define L2CR_L2IP 0x00000001 // L2 global invalidate in progress + +#define MMCR0_DIS 0x80000000 // Disables counting unconditionally +#define MMCR0_DP 0x40000000 // Disables counting while in supervisor mode +#define MMCR0_DU 0x20000000 // Disables counting while in user mode +#define MMCR0_DMS 0x10000000 // Disables counting while MSR[PM] is set +#define MMCR0_DMR 0x08000000 // Disables counting while MSR[PM] is zero +#define MMCR0_ENINT 0x04000000 // Enables performance monitor interrupt signaling +#define MMCR0_DISCOUNT 0x02000000 // Disables counting of PMCn when a performance monitor interrupt is signaled or... +#define MMCR0_RTCSELECT_MASK 0x01800000 // 64-bit time base, bit selection enable +#define MMCR0_RTCSELECT_63 0x00000000 // Pick bit 63 to count +#define MMCR0_RTCSELECT_55 0x00800000 // Pick bit 55 to count +#define MMCR0_RTCSELECT_51 0x01000000 // Pick bit 51 to count +#define MMCR0_RTCSELECT_47 0x01800000 // Pick bit 47 to count +#define MMCR0_INTONBITTRANS 0x00400000 // Causes interrupt signaling on bit transition from off to on +#define MMCR0_THRESHOLD_MASK 0x003F0000 // Threshold value +#define MMCR0_THRESHOLD(n) ((n) << 16) // Threshold value (0 - 63) +#define MMCR0_PMC1INTCONTROL 0x00008000 // Enables interrupt signaling due to PMC1 counter overflow +#define MMCR0_PMC2INTCONTROL 0x00004000 // Enables interrupt signaling due to PMC2-PMC4 counter overflow +#define MMCR0_PMCTRIGGER 0x00002000 // Can be used to trigger counting of PMC2-PMC4 after PMC1 has overflowed or... +#define MMCR0_PMC1SELECT_MASK 0x00001FC0 // PMC1 input selector +#define MMCR0_PMC2SELECT_MASK 0x0000003F // PMC2 input selector + +#define MMCR1_PMC3SELECT_MASK 0xF8000000 // PMC3 input selector +#define MMCR1_PMC4SELECT_MASK 0x07C00000 // PMC4 input selector + +#define PMC1_OV 0x80000000 // Overflow +#define PMC1_COUNTER 0x7FFFFFFF // Counter value +#define PMC2_OV 0x80000000 // Overflow +#define PMC2_COUNTER 0x7FFFFFFF // Counter value +#define PMC3_OV 0x80000000 // Overflow +#define PMC3_COUNTER 0x7FFFFFFF // Counter value +#define PMC4_OV 0x80000000 // Overflow +#define PMC4_COUNTER 0x7FFFFFFF // Counter value + +/*---------------------------------------------------------------------------* + PMC1 Events + *---------------------------------------------------------------------------*/ +#define MMCR0_PMC1_HOLD 0x00000000 // Register holds current value +#define MMCR0_PMC1_CYCLE 0x00000040 // Processor cycles +#define MMCR0_PMC1_INSTRUCTION 0x00000080 // # of instructions completed. +#define MMCR0_PMC1_TRANSITION 0x000000C0 // # of transitions for 0 to 1 +#define MMCR0_PMC1_DISPATCHED 0x00000100 // # of instructions dispatched +#define MMCR0_PMC1_EIEIO 0x00000140 // # of eieio instructions completed +#define MMCR0_PMC1_ITLB_CYCLE 0x00000180 // # of cycles spent performing table search op. for the ITLB +#define MMCR0_PMC1_L2_HIT 0x000001C0 // # of access that hit the L2. +#define MMCR0_PMC1_EA 0x00000200 // # of valid instruction EAs delivered to the memory subsystem +#define MMCR0_PMC1_IABR 0x00000240 // # of time the address of an instruction matches the IABR +#define MMCR0_PMC1_L1_MISS 0x00000280 // # of loads that miss the L1 +#define MMCR0_PMC1_Bx_UNRESOLVED 0x000002C0 // # of branches that are unresolved when processed +#define MMCR0_PMC1_Bx_STALL_CYCLE 0x00000300 // # of cycles that dispatcher stalls due to a second + // unresolved branch in the instruction stream +#define MMCR0_PMC1_IC_FETCH_MISS 0x00000340 // # of times an instruction fetch missed the L1 Icache +#define MMCR0_PMC2_HOLD 0x00000000 // Register holds current value +#define MMCR0_PMC2_CYCLE 0x00000001 // Processor cycles +#define MMCR0_PMC2_INSTRUCTION 0x00000002 // # of instructions completed +#define MMCR0_PMC2_TRANSITION 0x00000003 // # of time-base (lower) bit transitions +#define MMCR0_PMC2_DISPATCHED 0x00000004 // # of instructions dispatched +#define MMCR0_PMC2_IC_MISS 0x00000005 // # of L1 instruction cache misses +#define MMCR0_PMC2_ITLB_MISS 0x00000006 // # of ITLB misses +#define MMCR0_PMC2_L2_I_MISS 0x00000007 // # of L2 instruction misses +#define MMCR0_PMC2_Bx_FALL_TROUGH 0x00000008 // # of fall-through branches +#define MMCR0_PMC2_PR_SWITCH 0x00000009 // # of MSR[PR] bit toggles +#define MMCR0_PMC2_RESERVED_LOAD 0x0000000A // # of reserved loads completed +#define MMCR0_PMC2_LOAD_STORE 0x0000000B // # of completed loads and stores +#define MMCR0_PMC2_SNOOP 0x0000000C // # of snoops +#define MMCR0_PMC2_L1_CASTOUT 0x0000000D // # of L1 castouts to L2 +#define MMCR0_PMC2_SYSTEM 0x0000000E // # of completed system unit instructions +#define MMCR0_PMC2_IC_FETCH_MISS 0x0000000F // # of instruction fetch misses in the L1 +#define MMCR0_PMC2_Bx_OUT_OF_ORDER 0x00000010 // # of branches allowing out-of-order execution + +/*---------------------------------------------------------------------------* + PMC3 Events + *---------------------------------------------------------------------------*/ +#define MMCR1_PMC3_HOLD 0x00000000 // Register holds current value +#define MMCR1_PMC3_CYCLE 0x08000000 // Processor cycles +#define MMCR1_PMC3_INSTRUCTION 0x10000000 // # of instructions completed +#define MMCR1_PMC3_TRANSITION 0x18000000 // # of time-base (lower) bit transitions +#define MMCR1_PMC3_DISPATCHED 0x20000000 // # of instructions dispatched +#define MMCR1_PMC3_DC_MISS 0x28000000 // # of L1 data cache misses +#define MMCR1_PMC3_DTLB_MISS 0x30000000 // # of DTLB misses +#define MMCR1_PMC3_L2_D_MISS 0x38000000 // # of L2 data misses +#define MMCR1_PMC3_Bx_TAKEN 0x40000000 // # predicted branches that were taken +#define MMCR1_PMC3_PM_SWITCH 0x48000000 // # of transitions between marked and unmarked processes +#define MMCR1_PMC3_COND_STORE 0x50000000 // # of store conditional instructions completed +#define MMCR1_PMC3_FPU 0x58000000 // # of instructions completed from the FPU +#define MMCR1_PMC3_L2_SNOOP_CASTOUT 0x60000000 // # of L2 castout caused by snoops to modified lines +#define MMCR1_PMC3_L2_HIT 0x68000000 // # of cache operations that hit in the L2 cache +#define MMCR1_PMC3_L1_MISS_CYCLE 0x78000000 // # of cycles generated by L1 load misses +#define MMCR1_PMC3_Bx_SECOND 0x80000000 // # of branches in the second speculative branch + // resolved correctly +#define MMCR1_PMC3_BPU_LR_CR 0x88000000 // # of cycles the BPU stalls due to LR or CR unresolved + // dependencies + +#define MMCR1_PMC4_HOLD 0x00000000 // Register holds current value +#define MMCR1_PMC4_CYCLE 0x00400000 // Processor cycles +#define MMCR1_PMC4_INSTRUCTION 0x00800000 // # of instructions completed +#define MMCR1_PMC4_TRANSITION 0x00C00000 // # of time-base (lower) bit transitions +#define MMCR1_PMC4_DISPATCHED 0x01000000 // # of instructions dispatched +#define MMCR1_PMC4_L2_CASTOUT 0x01400000 // # of L2 castouts +#define MMCR1_PMC4_DTLB_CYCLE 0x01800000 // # of cycles spent performing table searches for DTLB accesses +#define MMCR1_PMC4_Bx_MISSED 0x02000000 // # of mispredicted branches +#define MMCR1_PMC4_COND_STORE_INT 0x02800000 // # of store conditional instructions completed + // with reservation intact +#define MMCR1_PMC4_SYNC 0x02C00000 // # of completed sync instructions +#define MMCR1_PMC4_SNOOP_RETRY 0x03000000 // # of snoop request retries +#define MMCR1_PMC4_INTEGER 0x03400000 // # of completed integer operations +#define MMCR1_PMC4_BPU_THIRD 0x03800000 // # of cycles the BPU cannot process new branches + // due to having two unresolved branches +#define MMCR1_PMC4_DC_MISS 0x07C00000 // # of L1 data cache misses + +/*---------------------------------------------------------------------------* + FPSCR bits + *---------------------------------------------------------------------------*/ +#ifndef FPSCR_FX +#define FPSCR_FX 0x80000000 // Exception summary +#define FPSCR_FEX 0x40000000 // Enabled exception summary +#define FPSCR_VX 0x20000000 // Invalid operation +#define FPSCR_OX 0x10000000 // Overflow exception +#define FPSCR_UX 0x08000000 // Underflow exception +#define FPSCR_ZX 0x04000000 // Zero divide exception +#define FPSCR_XX 0x02000000 // Inexact exception +#define FPSCR_VXSNAN 0x01000000 // SNaN +#define FPSCR_VXISI 0x00800000 // Infinity - Infinity +#define FPSCR_VXIDI 0x00400000 // Infinity / Infinity +#define FPSCR_VXZDZ 0x00200000 // 0 / 0 +#define FPSCR_VXIMZ 0x00100000 // Infinity * 0 +#define FPSCR_VXVC 0x00080000 // Invalid compare +#define FPSCR_FR 0x00040000 // Fraction rounded +#define FPSCR_FI 0x00020000 // Fraction inexact +#define FPSCR_VXSOFT 0x00000400 // Software request +#define FPSCR_VXSQRT 0x00000200 // Invalid square root +#define FPSCR_VXCVI 0x00000100 // Invalid integer convert +#define FPSCR_VE 0x00000080 // Invalid operation exception enable +#define FPSCR_OE 0x00000040 // Overflow exception enable +#define FPSCR_UE 0x00000020 // Underflow exception enable +#define FPSCR_ZE 0x00000010 // Zero divide exception enable +#define FPSCR_XE 0x00000008 // Inexact exception enable +#define FPSCR_NI 0x00000004 // Non-IEEE mode +#endif + +#ifndef FPSCR_FX_BIT +#define FPSCR_FX_BIT 0 // Exception summary +#define FPSCR_FEX_BIT 1 // Enabled exception summary +#define FPSCR_VX_BIT 2 // Invalid operation +#define FPSCR_OX_BIT 3 // Overflow exception +#define FPSCR_UX_BIT 4 // Underflow exception +#define FPSCR_ZX_BIT 5 // Zero divide exception +#define FPSCR_XX_BIT 6 // Inexact exception +#define FPSCR_VXSNAN_BIT 7 // SNaN +#define FPSCR_VXISI_BIT 8 // Infinity - Infinity +#define FPSCR_VXIDI_BIT 9 // Infinity / Infinity +#define FPSCR_VXZDZ_BIT 10 // 0 / 0 +#define FPSCR_VXIMZ_BIT 11 // Infinity * 0 +#define FPSCR_VXVC_BIT 12 // Invalid compare +#define FPSCR_FR_BIT 13 // Fraction rounded +#define FPSCR_FI_BIT 14 // Fraction inexact +#define FPSCR_VXSOFT_BIT 21 // Software request +#define FPSCR_VXSQRT_BIT 22 // Invalid square root +#define FPSCR_VXCVI_BIT 23 // Invalid integer convert +#define FPSCR_VE_BIT 24 // Invalid operation exception enable +#define FPSCR_OE_BIT 25 // Overflow exception enable +#define FPSCR_UE_BIT 26 // Underflow exception enable +#define FPSCR_ZE_BIT 27 // Zero divide exception enable +#define FPSCR_XE_BIT 28 // Inexact exception enable +#define FPSCR_NI_BIT 29 // Non-IEEE mode +#endif + +u32 PPCMfmsr(void); +void PPCMtmsr(register u32 newMSR); +u32 PPCMfhid0(void); +void PPCMthid0(register u32 newHID0); +u32 PPCMfl2cr(void); +void PPCMtl2cr(register u32 newL2cr); +void PPCMtdec(register u32 newDec); +void PPCSync(void); +void PPCHalt(void); +void PPCMtmmcr0(register u32 newMmcr0); +void PPCMtmmcr1(register u32 newMmcr1); +void PPCMtpmc1(register u32 newPmc1); +void PPCMtpmc2(register u32 newPmc2); +void PPCMtpmc3(register u32 newPmc3); +void PPCMtpmc4(register u32 newPmc4); +u32 PPCMffpscr(void); +void PPCMtfpscr(register u32 newFPSCR); +u32 PPCMfhid2(void); +void PPCMthid2(register u32 newhid2); +void PPCMtwpar(register u32 newwpar); +void PPCDisableSpeculation(void); +void PPCSetFpNonIEEEMode(void); + union FpscrUnion { f64 f; struct { @@ -11,4 +497,8 @@ union FpscrUnion { } u; }; +#ifdef __cplusplus +}; +#endif + #endif /* PPCARCH_H */ diff --git a/include/dolphin/card/CARDPriv.h b/include/dolphin/card/CARDPriv.h new file mode 100644 index 0000000000..6d6f3da480 --- /dev/null +++ b/include/dolphin/card/CARDPriv.h @@ -0,0 +1,180 @@ +#ifndef CARDPRIV_H +#define CARDPRIV_H + +#include "dolphin/types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define CARD_FAT_AVAIL 0x0000u +#define CARD_FAT_CHECKSUM 0x0000u +#define CARD_FAT_CHECKSUMINV 0x0001u +#define CARD_FAT_CHECKCODE 0x0002u +#define CARD_FAT_FREEBLOCKS 0x0003u +#define CARD_FAT_LASTSLOT 0x0004u + +#define CARD_PAGE_SIZE 128u +#define CARD_SEG_SIZE 512u + +#define CARD_NUM_SYSTEM_BLOCK 5 +#define CARD_SYSTEM_BLOCK_SIZE (8 * 1024u) + +#define CARD_MAX_MOUNT_STEP (CARD_NUM_SYSTEM_BLOCK + 2) + +typedef struct CARDDir { + u8 gameName[4]; + u8 company[2]; + u8 _padding0; + u8 bannerFormat; + u8 fileName[CARD_FILENAME_MAX]; + u32 time; // seconds since 01/01/2000 midnight + + u32 iconAddr; // 0xFFFFFFFF if not used + u16 iconFormat; + u16 iconSpeed; + + u8 permission; + u8 copyTimes; + u16 startBlock; + u16 length; + u8 _padding1[2]; + + u32 commentAddr; // 0xFFFFFFFF if not used +} CARDDir; + +typedef struct CARDDirCheck { + u8 padding0[64 - 2 * 4]; + u16 padding1; + s16 checkCode; + u16 checkSum; + u16 checkSumInv; +} CARDDirCheck; + +typedef struct CARDControl { + /* 0x000 */ BOOL attached; + /* 0x004 */ s32 result; + /* 0x008 */ u16 size; + /* 0x00A */ u16 pageSize; + /* 0x00C */ s32 sectorSize; + /* 0x010 */ u16 cBlock; + /* 0x012 */ u16 vendorID; + /* 0x014 */ s32 latency; + /* 0x018 */ u8 id[12]; + /* 0x024 */ int mountStep; + /* 0x028 */ int formatStep; + /* 0x02C */ u32 scramble; + /* 0x030 */ DSPTaskInfo task; + /* 0x080 */ void* workArea; + /* 0x084 */ CARDDir* currentDir; + /* 0x088 */ u16* currentFat; + /* 0x08C */ OSThreadQueue threadQueue; + /* 0x094 */ u8 cmd[9]; + /* 0x0A0 */ s32 cmdlen; + /* 0x0A4 */ vu32 mode; + /* 0x0A8 */ int retry; + /* 0x0AC */ int repeat; + /* 0x0B0 */ u32 addr; + /* 0x0B4 */ void* buffer; + /* 0x0B8 */ s32 xferred; + /* 0x0BC */ u16 freeNo; + /* 0x0BE */ u16 startBlock; + /* 0x0C0 */ CARDFileInfo* fileInfo; + /* 0x0C4 */ CARDCallback extCallback; + /* 0x0C8 */ CARDCallback txCallback; + /* 0x0CC */ CARDCallback exiCallback; + /* 0x0D0 */ CARDCallback apiCallback; + /* 0x0D4 */ CARDCallback xferCallback; + /* 0x0D8 */ CARDCallback eraseCallback; + /* 0x0DC */ CARDCallback unlockCallback; + /* 0x0E0 */ OSAlarm alarm; + /* 0x108 */ u32 cid; + /* 0x10C */ const DVDDiskID* diskID; +} CARDControl; + +typedef struct CARDID { + u8 serial[32]; // flashID[12] + timebase[8] + counterBias[4] + language[4] + XXX[4] + u16 deviceID; + u16 size; + u16 encode; // character set -- 0: S-JIS, 1: ANSI + + u8 padding[512 - 32 - 5 * 2]; + + u16 checkSum; + u16 checkSumInv; +} CARDID; + +void __CARDDefaultApiCallback(s32 chan, s32 result); +s32 __CARDEraseSector(s32 chan, u32 addr, CARDCallback callback); +s32 __CARDPutControlBlock(struct CARDControl* card, s32 result); +void __CARDSyncCallback(s32 chan, s32 result); +u16* __CARDGetFatBlock(CARDControl* card); + +/* CARDBios */ +void __CARDExtHandler(s32 chan, OSContext* context); +void __CARDExiHandler(s32 chan, OSContext* context); +void __CARDTxHandler(s32 chan, OSContext* context); +void __CARDUnlockedHandler(s32 chan, OSContext* context); +s32 __CARDEnableInterrupt(s32 chan, BOOL enable); +s32 __CARDReadStatus(s32 chan, u8* status); +void __CARDReadVendorID(); +s32 __CARDClearStatus(s32 chan); +s32 __CARDStart(s32 chan, CARDCallback txCallback, CARDCallback exiCallback); +s32 __CARDReadSegment(s32 chan, CARDCallback callback); +s32 __CARDWritePage(s32 chan, CARDCallback callback); +u16 __CARDGetFontEncode(void); +void __CARDSetDiskID(const DVDDiskID* id); +s32 __CARDGetControlBlock(s32 chan, struct CARDControl** pcard); +s32 __CARDSync(s32 chan); + +/* CARDBlock */ +s32 __CARDAllocBlock(s32 chan, u32 cBlock, CARDCallback callback); +s32 __CARDUpdateFatBlock(s32 chan, u16* fat, CARDCallback callback); + +/* CARDCheck */ +void __CARDCheckSum(void* ptr, int length, u16* checksum, u16* checksumInv); +s32 __CARDVerify(CARDControl* card); + +/* CARDDir */ +CARDDir* __CARDGetDirBlock(CARDControl* card); +s32 __CARDUpdateDir(s32 chan, CARDCallback callback); + +/* CARDFormat */ +s32 __CARDFormatRegionAsync(s32 chan, u16 encode, CARDCallback callback); + +/* CARDMount */ +void __CARDMountCallback(s32 chan, s32 result); + +/* CARDOpen */ +BOOL __CARDCompareFileName(CARDDir* ent, const char* fileName); +s32 __CARDAccess(CARDControl* card, CARDDir* ent); +s32 __CARDIsWritable(CARDControl* card, CARDDir* ent); +s32 __CARDIsReadable(CARDControl* card, CARDDir* ent); + +/* CARDRdwr */ +s32 __CARDRead(s32 chan, u32 addr, s32 length, void* dst, CARDCallback callback); +s32 __CARDWrite(s32 chan, u32 addr, s32 length, void* dst, CARDCallback callback); + +/* CARDRead */ +s32 __CARDSeek(CARDFileInfo* fileInfo, s32 length, s32 offset, CARDControl** pcard); + +/* CARDUnlock */ +s32 __CARDUnlock(s32 chan, u8 flashID[12]); + +#define CARDIsValidBlockNo(card, iBlock) \ + (CARD_NUM_SYSTEM_BLOCK <= (iBlock) && (iBlock) < (card)->cBlock) +#define __CARDGetDirCheck(dir) ((CARDDirCheck*)&(dir)[CARD_MAX_FILE]) + +#define TRUNC(n, a) (((u32)(n)) & ~((a)-1)) +#define OFFSET(n, a) (((u32)(n)) & ((a)-1)) + +extern CARDControl __CARDBlock[2]; +extern DVDDiskID __CARDDiskNone; +extern u16 __CARDVendorID; +extern u8 data_80450A72; + +#ifdef __cplusplus +} +#endif + +#endif /* CARDPRIV_H */ diff --git a/include/dolphin/card/card.h b/include/dolphin/card/card.h index 447b4cd644..b4caf50616 100644 --- a/include/dolphin/card/card.h +++ b/include/dolphin/card/card.h @@ -3,71 +3,172 @@ #include "dolphin/types.h" -#define CARD_ERROR_UNLOCKED 1 -#define CARD_ERROR_READY 0 -#define CARD_ERROR_BUSY -1 -#define CARD_ERROR_WRONGDEVICE -2 -#define CARD_ERROR_NOCARD -3 -#define CARD_ERROR_NOFILE -4 -#define CARD_ERROR_IOERROR -5 -#define CARD_ERROR_BROKEN -6 -#define CARD_ERROR_EXIST -7 -#define CARD_ERROR_NOENT -8 -#define CARD_ERROR_INSSPACE -9 -#define CARD_ERROR_NOPERM -10 -#define CARD_ERROR_LIMIT -11 -#define CARD_ERROR_NAMETOOLONG -12 -#define CARD_ERROR_ENCODING -13 -#define CARD_ERROR_CANCELED -14 -#define CARD_ERROR_FATAL_ERROR -128 - -struct CARDFileInfo { - /* 0x00 */ s32 channel; - /* 0x04 */ s32 fileNo; - /* 0x08 */ u32 offset; - /* 0x0C */ u16 iconIndex; - /* 0x0E */ u16 commentIndex; - /* 0x10 */ u16 field_0x10; -}; // Size: 0x10 - -struct CARDStat { - /* 0x00 */ char filename[32]; - /* 0x20 */ u32 length; - /* 0x24 */ u32 time; - /* 0x28 */ char gamecode[4]; - /* 0x2C */ char company[2]; - /* 0x2E */ u8 gameVersion; - /* 0x2F */ u8 bannerFormat; - /* 0x30 */ u32 iconAddress; - /* 0x34 */ u16 iconFormat; - /* 0x36 */ u16 iconSpeed; - /* 0x38 */ u32 commentAddress; - /* 0x3C */ u32 bannerOffset; - /* 0x40 */ u32 bannerPalOffset; - /* 0x44 */ u32 iconOffset[8]; - /* 0x64 */ u32 iconPalOffset; - /* 0x68 */ u32 dataOffset; -}; // Size: 0x6C - -typedef void (*CARDCallback)(s32 channel, s32 result); - +#ifdef __cplusplus extern "C" { -s32 CARDInit(void); -s32 CARDFreeBlocks(s32 channel, s32* free_bytes, s32* free_files); -s32 CARDCheck(s32 channel); -s32 CARDProbe(s32 channel); -s32 CARDProbeEx(s32 channel, s32* mem_size, s32* sect_size); -s32 CARDMount(s32 channel, void* buffer, CARDCallback callback); -s32 CARDUnmount(s32 channel); -s32 CARDFormat(s32 channel); -s32 CARDOpen(s32 channel, const char* filename, CARDFileInfo* file); -s32 CARDClose(CARDFileInfo* file); -s32 CARDCreate(s32 channel, const char* filename, u32 size, CARDFileInfo* file); -s32 CARDRead(CARDFileInfo* file, void* buffer, u32 size, u32 offset); -s32 CARDWrite(CARDFileInfo* file, void* buffer, u32 size, u32 offset); -s32 CARDGetStatus(s32 channel, s32 fileNo, CARDStat* stat); -s32 CARDSetStatus(s32 channel, s32 fileNo, CARDStat* stat); -s32 CARDGetSerialNo(s32 channel, u32* serial1, u32* serial2); -}; +#endif + +#define CARD_ENCODE_ANSI 0u +#define CARD_ENCODE_SJIS 1u + +/* Sizes */ +#define CARD_WORKAREA_SIZE (5 * 8 * 1024) +#define CARD_READ_SIZE 512 +#define CARD_MAX_FILE 127 +#define CARD_COMMENT_SIZE 64 +#define CARD_FILENAME_MAX 32 +#define CARD_ICON_MAX 8 +#define CARD_ICON_WIDTH 32 +#define CARD_ICON_HEIGHT 32 +#define CARD_BANNER_WIDTH 96 +#define CARD_BANNER_HEIGHT 32 + +/* Icon animation */ +#define CARD_MODE_NORMAL 0 +#define CARD_MODE_FAST 1 + +#define CARDGetBannerFormat(stat) (((stat)->bannerFormat) & CARD_STAT_BANNER_MASK) +#define CARDGetIconAnim(stat) (((stat)->bannerFormat) & CARD_STAT_ANIM_MASK) +#define CARDGetIconFormat(stat, n) (((stat)->iconFormat >> (2 * (n))) & CARD_STAT_ICON_MASK) +#define CARDGetIconSpeed(stat, n) (((stat)->iconSpeed >> (2 * (n))) & CARD_STAT_SPEED_MASK) +#define CARDSetBannerFormat(stat, f) \ + ((stat)->bannerFormat = (u8)(((stat)->bannerFormat & ~CARD_STAT_BANNER_MASK) | (f))) +#define CARDSetIconAnim(stat, f) \ + ((stat)->bannerFormat = (u8)(((stat)->bannerFormat & ~CARD_STAT_ANIM_MASK) | (f))) +#define CARDSetIconFormat(stat, n, f) \ + ((stat)->iconFormat = \ + (u16)(((stat)->iconFormat & ~(CARD_STAT_ICON_MASK << (2 * (n)))) | ((f) << (2 * (n))))) +#define CARDSetIconSpeed(stat, n, f) \ + ((stat)->iconSpeed = \ + (u16)(((stat)->iconSpeed & ~(CARD_STAT_SPEED_MASK << (2 * (n)))) | ((f) << (2 * (n))))) +#define CARDSetIconAddress(stat, addr) ((stat)->iconAddr = (u32)(addr)) +#define CARDSetCommentAddress(stat, addr) ((stat)->commentAddr = (u32)(addr)) +#define CARDGetFileNo(fileInfo) ((fileInfo)->fileNo) + +#define CARD_RESULT_UNLOCKED 1 +#define CARD_RESULT_READY 0 +#define CARD_RESULT_BUSY -1 +#define CARD_RESULT_WRONGDEVICE -2 +#define CARD_RESULT_NOCARD -3 +#define CARD_RESULT_NOFILE -4 +#define CARD_RESULT_IOERROR -5 +#define CARD_RESULT_BROKEN -6 +#define CARD_RESULT_EXIST -7 +#define CARD_RESULT_NOENT -8 +#define CARD_RESULT_INSSPACE -9 +#define CARD_RESULT_NOPERM -10 +#define CARD_RESULT_LIMIT -11 +#define CARD_RESULT_NAMETOOLONG -12 +#define CARD_RESULT_ENCODING -13 +#define CARD_RESULT_CANCELED -14 +#define CARD_RESULT_FATAL_ERROR -128 + +#define CARD_STAT_ICON_NONE 0 +#define CARD_STAT_ICON_C8 1 +#define CARD_STAT_ICON_RGB5A3 2 +#define CARD_STAT_ICON_MASK 3 + +#define CARD_STAT_BANNER_NONE 0 +#define CARD_STAT_BANNER_C8 1 +#define CARD_STAT_BANNER_RGB5A3 2 +#define CARD_STAT_BANNER_MASK 3 + +#define CARD_STAT_ANIM_LOOP 0x00 +#define CARD_STAT_ANIM_BOUNCE 0x04 +#define CARD_STAT_ANIM_MASK 0x04 + +#define CARD_STAT_SPEED_END 0 +#define CARD_STAT_SPEED_FAST 1 +#define CARD_STAT_SPEED_MIDDLE 2 +#define CARD_STAT_SPEED_SLOW 3 +#define CARD_STAT_SPEED_MASK 3 + +#define CARD_ATTR_PUBLIC 0x04u +#define CARD_ATTR_NO_COPY 0x08u +#define CARD_ATTR_NO_MOVE 0x10u +#define CARD_ATTR_GLOBAL 0x20u +#define CARD_ATTR_COMPANY 0x40u + +typedef struct CARDFileInfo { + s32 chan; + s32 fileNo; + + s32 offset; + s32 length; + u16 iBlock; + u16 __padding; +} CARDFileInfo; + +typedef struct CARDStat { + char fileName[CARD_FILENAME_MAX]; + u32 length; + u32 time; // seconds since 01/01/2000 midnight + u8 gameName[4]; + u8 company[2]; + + u8 bannerFormat; + u8 __padding; + u32 iconAddr; // offset to the banner, bannerTlut, icon, iconTlut data set. + u16 iconFormat; + u16 iconSpeed; + u32 commentAddr; // offset to the pair of 32 byte character strings. + + u32 offsetBanner; + u32 offsetBannerTlut; + u32 offsetIcon[CARD_ICON_MAX]; + u32 offsetIconTlut; + u32 offsetData; +} CARDStat; + +typedef void (*CARDCallback)(s32 chan, s32 result); + +/* CARDBios */ +void CARDInit(void); +BOOL CARDGetFastMode(void); +s32 CARDFreeBlocks(s32 chan, s32* byteNotUsed, s32* filesNotUsed); + +/* CARDCheck */ +s32 CARDCheck(s32 chan); +static s32 CARDCheckExAsync(s32 chan, s32* xferBytes, CARDCallback callback); + +/* CARDCreate */ +static s32 CARDCreateAsync(s32 chan, const char* fileName, u32 size, CARDFileInfo* fileInfo, + CARDCallback callback); +s32 CARDCreate(s32 chan, const char* fileName, u32 size, CARDFileInfo* fileInfo); + +/* CARDFormat */ +s32 CARDFormat(s32 chan); + +/* CARDMount */ +s32 CARDProbe(s32 chan); +s32 CARDProbeEx(s32 chan, s32* memSize, s32* sectorSize); +s32 CARDMount(s32 chan, void* workArea, CARDCallback attachCb); +s32 CARDUnmount(s32 chan); +static s32 CARDMountAsync(s32 chan, void* workArea, CARDCallback detachCb, CARDCallback attachCb); + +/* CARDNet */ +s32 CARDGetSerialNo(s32 chan, u64* serialNo); + +/* CARDOpen */ +s32 CARDOpen(s32 chan, const char* fileName, CARDFileInfo* fileInfo); +s32 CARDClose(CARDFileInfo* fileInfo); + +/* CARDRead */ +static s32 CARDReadAsync(CARDFileInfo* fileInfo, void* buf, s32 length, s32 offset, + CARDCallback callback); +s32 CARDRead(CARDFileInfo* fileInfo, void* buf, s32 length, s32 offset); + +/* CARDStat */ +s32 CARDSetStatus(s32 chan, s32 fileNo, CARDStat* stat); +s32 CARDGetStatus(s32 chan, s32 fileNo, CARDStat* stat); +static s32 CARDSetStatusAsync(s32 chan, s32 fileNo, CARDStat* stat, CARDCallback callback); + +/* CARDWrite */ +static s32 CARDWriteAsync(CARDFileInfo* fileInfo, const void* buf, s32 length, s32 offset, + CARDCallback callback); +s32 CARDWrite(CARDFileInfo* fileInfo, const void* buf, s32 length, s32 offset); + +#ifdef __cplusplus +} +#endif #endif /* CARD_H */ diff --git a/include/dolphin/db/db.h b/include/dolphin/db/db.h index cc7cd0a94e..2d786f4880 100644 --- a/include/dolphin/db/db.h +++ b/include/dolphin/db/db.h @@ -3,4 +3,28 @@ #include "dolphin/types.h" +#ifdef __cplusplus +extern "C" { +#endif + +#define OS_DBINTERFACE_ADDR 0x00000040 + +typedef struct DBInterface { + /* 0x0 */ u32 bPresent; + /* 0x4 */ u32 exceptionMask; + /* 0x8 */ void (*ExceptionDestination)(void); + /* 0xC */ void* exceptionReturn; +} DBInterface; + +extern DBInterface* __DBInterface; + +void DBInit(void); +void __DBExceptionDestinationAux(void); +void __DBExceptionDestination(void); +void DBPrintf(char* format, ...); + +#ifdef __cplusplus +} +#endif + #endif /* DB_H */ diff --git a/include/dolphin/dsp/dsp.h b/include/dolphin/dsp/dsp.h index 65c0061489..e45c5c11af 100644 --- a/include/dolphin/dsp/dsp.h +++ b/include/dolphin/dsp/dsp.h @@ -1,7 +1,65 @@ #ifndef DSP_H #define DSP_H -#include "dolphin/types.h" +#include "dolphin/os/OS.h" + +volatile u16 __DSPRegs[32] : 0xCC005000; +volatile u32 __AIRegs[8] : 0xCC006C00; + +#ifdef __cplusplus +extern "C" { +#endif + +#define DSP_TASK_FLAG_CLEARALL 0x00000000 +#define DSP_TASK_FLAG_ATTACHED 0x00000001 +#define DSP_TASK_FLAG_CANCEL 0x00000002 + +#define DSP_TASK_STATE_INIT 0 +#define DSP_TASK_STATE_RUN 1 +#define DSP_TASK_STATE_YIELD 2 +#define DSP_TASK_STATE_DONE 3 + +typedef void (*DSPCallback)(void* task); + +typedef struct DSPTaskInfo DSPTaskInfo; + +typedef struct DSPTaskInfo { + /* 0x00 */ vu32 state; + /* 0x04 */ vu32 priority; + /* 0x08 */ vu32 flags; + /* 0x0C */ u16* iram_mmem_addr; + /* 0x10 */ u32 iram_length; + /* 0x14 */ u32 iram_addr; + + /* 0x18 */ u16* dram_mmem_addr; + /* 0x1C */ u32 dram_length; + /* 0x20 */ u32 dram_addr; + + /* 0x24 */ u16 dsp_init_vector; + /* 0x26 */ u16 dsp_resume_vector; + + /* 0x28 */ DSPCallback init_cb; + /* 0x2C */ DSPCallback res_cb; + /* 0x30 */ DSPCallback done_cb; + /* 0x34 */ DSPCallback req_cb; + + /* 0x38 */ struct DSPTaskInfo* next; + /* 0x3C */ struct DSPTaskInfo* prev; + + /* 0x40 */ OSTime t_context; + /* 0x48 */ OSTime t_task; +} DSPTaskInfo; + +u32 DSPCheckMailToDSP(void); +u32 DSPCheckMailFromDSP(void); +u32 DSPReadMailFromDSP(void); +void DSPSendMailToDSP(u32 mail); +void DSPAssertInt(); +void DSPInit(void); + +#ifdef __cplusplus +} +#endif void DSPReleaseHalt2(u32 msg); u16 DSP_CreateMap2(u32 msg); diff --git a/include/dolphin/dsp/dsp_debug.h b/include/dolphin/dsp/dsp_debug.h index 72ec9f7cd8..1939e9412b 100644 --- a/include/dolphin/dsp/dsp_debug.h +++ b/include/dolphin/dsp/dsp_debug.h @@ -3,4 +3,14 @@ #include "dolphin/types.h" +#ifdef __cplusplus +extern "C" { +#endif + +void __DSP_debug_printf(const char* fmt, ...); + +#ifdef __cplusplus +} +#endif + #endif /* DSP_DEBUG_H */ diff --git a/include/dolphin/dsp/dsp_task.h b/include/dolphin/dsp/dsp_task.h index 45199d5224..8b2e88ff7b 100644 --- a/include/dolphin/dsp/dsp_task.h +++ b/include/dolphin/dsp/dsp_task.h @@ -1,6 +1,11 @@ #ifndef DSP_TASK_H #define DSP_TASK_H -#include "dolphin/types.h" +#include "dolphin/dsp/dsp.h" + +extern DSPTaskInfo* __DSP_tmp_task; +extern DSPTaskInfo* __DSP_last_task; +extern DSPTaskInfo* __DSP_first_task; +extern DSPTaskInfo* __DSP_curr_task; #endif /* DSP_TASK_H */ diff --git a/include/dolphin/dvd/dvd.h b/include/dolphin/dvd/dvd.h index 2613077ef4..5253960ac2 100644 --- a/include/dolphin/dvd/dvd.h +++ b/include/dolphin/dvd/dvd.h @@ -7,6 +7,8 @@ extern "C" { #endif +vu32 __DIRegs[16] : 0xCC006000; + typedef enum DVDState { DVD_STATE_END = 0x0, DVD_STATE_BUSY = 0x1, @@ -23,15 +25,15 @@ typedef enum DVDState { } DVDState; typedef struct DVDDirectory { - u32 entry_number; - u32 location; - u32 next; + /* 0x0 */ u32 entry_number; + /* 0x4 */ u32 location; + /* 0x8 */ u32 next; } DVDDirectory; typedef struct DVDDirectoryEntry { - u32 entry_number; - BOOL is_directory; - char* name; + /* 0x0 */ u32 entry_number; + /* 0x4 */ BOOL is_directory; + /* 0x8 */ char* name; } DVDDirectoryEntry; typedef struct DVDDiskID { @@ -48,57 +50,87 @@ struct DVDFileInfo; struct DVDCommandBlock; typedef void (*DVDCBCallback)(s32 result, struct DVDCommandBlock* block); typedef void (*DVDCallback)(s32 result, struct DVDFileInfo* info); +typedef void (*DVDLowCallback)(u32 intType); typedef struct DVDCommandBlock { - struct DVDCommandBlock* next; - struct DVDCommandBlock* prev; - u32 command; - s32 state; - u32 offset; - u32 length; - void* buffer; - u32 current_transfer_size; - u32 transferred_size; - DVDDiskID* disk_id; - DVDCBCallback callback; - void* user_data; + /* 0x00 */ struct DVDCommandBlock* next; + /* 0x04 */ struct DVDCommandBlock* prev; + /* 0x08 */ u32 command; + /* 0x0C */ s32 state; + /* 0x10 */ u32 offset; + /* 0x14 */ u32 length; + /* 0x18 */ void* buffer; + /* 0x1C */ u32 current_transfer_size; + /* 0x20 */ u32 transferred_size; + /* 0x24 */ DVDDiskID* disk_id; + /* 0x28 */ DVDCBCallback callback; + /* 0x2C */ void* user_data; } DVDCommandBlock; typedef struct DVDFileInfo { - DVDCommandBlock block; - u32 start_address; - u32 length; - DVDCallback callback; + /* 0x00 */ DVDCommandBlock block; + /* 0x30 */ u32 start_address; + /* 0x34 */ u32 length; + /* 0x38 */ DVDCallback callback; } DVDFileInfo; typedef struct DVDDriveInfo { - /* 0x00 */ u16 field_0x0; + /* 0x00 */ u16 revision_level; /* 0x02 */ u16 device_code; - /* 0x04 */ u32 field_0x4; - /* 0x08 */ u32 field_0x8; - /* 0x0C */ u32 field_0xc; - /* 0x10 */ u32 field_0x10; - /* 0x14 */ u32 field_0x14; - /* 0x18 */ u32 field_0x18; - /* 0x1C */ u32 field_0x1c; + /* 0x04 */ u32 release_date; + /* 0x08 */ u8 padding[24]; } DVDDriveInfo; +typedef struct DVDBB1 { + u32 appLoaderLength; + void* appLoaderFunc1; + void* appLoaderFunc2; + void* appLoaderFunc3; +} DVDBB1; + +typedef struct DVDBB2 { + u32 bootFilePosition; + u32 FSTPosition; + u32 FSTLength; + u32 FSTMaxLength; + void* FSTAddress; + u32 userPosition; + u32 userLength; + + u32 padding0; +} DVDBB2; + +typedef void (*DVDOptionalCommandChecker)(DVDCommandBlock* block, void (*cb)(u32 intType)); + void DVDInit(void); BOOL DVDOpen(const char* filename, DVDFileInfo* fileinfo); BOOL DVDClose(DVDFileInfo* fileinfo); BOOL DVDReadPrio(DVDFileInfo* fileinfo, void*, s32, s32, s32); DVDDiskID* DVDGetCurrentDiskID(void); BOOL DVDFastOpen(long, DVDFileInfo* fileinfo); -BOOL DVDGetCommandBlockStatus(DVDCommandBlock*); +s32 DVDGetCommandBlockStatus(const DVDCommandBlock* block); BOOL DVDReadAsyncPrio(DVDFileInfo* fileinfo, void*, long, long, DVDCallback, long); int DVDConvertPathToEntrynum(const char*); -DVDState DVDGetDriveStatus(void); +s32 DVDGetDriveStatus(void); BOOL DVDCheckDisk(void); - BOOL DVDChangeDir(const char* dirname); BOOL DVDCloseDir(DVDDirectory* dir); BOOL DVDOpenDir(const char*, DVDDirectory* dir); BOOL DVDReadDir(DVDDirectory* dir, DVDDirectoryEntry* entry); +BOOL DVDReadAbsAsyncPrio(DVDCommandBlock* block, void* addr, s32 length, s32 offset, + DVDCBCallback callback, s32 prio); +BOOL DVDReadAbsAsyncForBS(DVDCommandBlock* block, void* addr, s32 length, s32 offset, + DVDCBCallback callback); +BOOL DVDReadDiskID(DVDCommandBlock* block, DVDDiskID* diskID, DVDCBCallback callback); +BOOL DVDCancelStreamAsync(DVDCommandBlock* block, DVDCBCallback callback); +BOOL DVDInquiryAsync(DVDCommandBlock* block, DVDDriveInfo* info, DVDCBCallback callback); +void DVDReset(void); +BOOL DVDSetAutoInvalidation(BOOL autoInval); +void DVDResume(void); +static BOOL DVDCancelAsync(DVDCommandBlock* block, DVDCBCallback callback); +s32 DVDCancel(DVDCommandBlock* block); + +BOOL DVDCompareDiskID(DVDDiskID* id1, DVDDiskID* id2); #ifdef __cplusplus }; diff --git a/include/dolphin/exi/EXIBios.h b/include/dolphin/exi/EXIBios.h new file mode 100644 index 0000000000..5e842a2774 --- /dev/null +++ b/include/dolphin/exi/EXIBios.h @@ -0,0 +1,64 @@ +#ifndef EXIBIOS_H +#define EXIBIOS_H + +#include "dolphin/os/OS.h" + +#ifdef __cplusplus +extern "C" { +#endif + +vu32 __EXIRegs[16] : 0xCC006800; + +#define EXI_READ 0 +#define EXI_WRITE 1 + +#define EXI_STATE_IDLE 0x00 +#define EXI_STATE_DMA 0x01 +#define EXI_STATE_IMM 0x02 +#define EXI_STATE_BUSY (EXI_STATE_DMA | EXI_STATE_IMM) +#define EXI_STATE_SELECTED 0x04 +#define EXI_STATE_ATTACHED 0x08 +#define EXI_STATE_LOCKED 0x10 + +typedef void (*EXICallback)(s32 chan, OSContext* context); + +typedef struct EXIControl { + EXICallback exiCallback; + EXICallback tcCallback; + EXICallback extCallback; + vu32 state; + int immLen; + u8* immBuf; + u32 dev; + u32 id; + s32 idTime; + int items; + struct { + u32 dev; + EXICallback callback; + } queue[3]; +} EXIControl; + +s32 EXIImm(s32 chan, void* buf, s32 len, u32 type, EXICallback callback); +s32 EXIImmEx(s32 chan, void* buf, s32 len, u32 mode); +BOOL EXIDma(s32 chan, void* buf, s32 len, u32 type, EXICallback callback); +BOOL EXISync(s32 chan); +EXICallback EXISetExiCallback(s32 chan, EXICallback exiCallback); +BOOL EXIProbe(s32 chan); +s32 EXIProbeEx(s32 chan); +BOOL EXIAttach(s32 chan, EXICallback extCallback); +BOOL EXIDetach(s32 chan); +BOOL EXISelect(s32 chan, u32 dev, u32 freq); +BOOL EXIDeselect(s32 chan); +void EXIInit(void); +BOOL EXILock(s32 chan, u32 dev, EXICallback unlockedCallback); +BOOL EXIUnlock(s32 chan); +u32 EXIGetState(s32 chan); +static void UnlockedHandler(s32 chan, OSContext* context); +s32 EXIGetID(s32 chan, u32 dev, u32* id); + +#ifdef __cplusplus +}; +#endif + +#endif /* EXIBIOS_H */ diff --git a/include/exi/EXIUart.h b/include/dolphin/exi/EXIUart.h similarity index 100% rename from include/exi/EXIUart.h rename to include/dolphin/exi/EXIUart.h diff --git a/include/dolphin/os/OS.h b/include/dolphin/os/OS.h index 11b60643e2..2d91a6ad0c 100644 --- a/include/dolphin/os/OS.h +++ b/include/dolphin/os/OS.h @@ -30,14 +30,54 @@ extern "C" { #endif +// Upper words of the masks, since UIMM is only 16 bits +#define OS_CACHED_REGION_PREFIX 0x8000 +#define OS_UNCACHED_REGION_PREFIX 0xC000 +#define OS_PHYSICAL_MASK 0x3FFF + +#define OS_BASE_CACHED (OS_CACHED_REGION_PREFIX << 16) +#define OS_BASE_UNCACHED (OS_UNCACHED_REGION_PREFIX << 16) + #define OS_BUS_CLOCK (*(u32*)0x800000F8) #define OS_CORE_CLOCK (*(u32*)0x800000FC) #define OS_TIMER_CLOCK (OS_BUS_CLOCK / 4) #define OS_TIMER_CLOCK_MS (OS_TIMER_CLOCK / 1000) +#define OSTicksToCycles(ticks) (((ticks) * ((OS_CORE_CLOCK * 2) / OS_TIMER_CLOCK)) / 2) +#define OSTicksToSeconds(ticks) ((ticks) / OS_TIMER_CLOCK) +#define OSTicksToMilliseconds(ticks) ((ticks) / (OS_TIMER_CLOCK / 1000)) +#define OSTicksToMicroseconds(ticks) (((ticks)*8) / (OS_TIMER_CLOCK / 125000)) +#define OSTicksToNanoseconds(ticks) (((ticks)*8000) / (OS_TIMER_CLOCK / 125000)) +#define OSSecondsToTicks(sec) ((sec)*OS_TIMER_CLOCK) +#define OSMillisecondsToTicks(msec) ((msec) * (OS_TIMER_CLOCK / 1000)) +#define OSMicrosecondsToTicks(usec) (((usec) * (OS_TIMER_CLOCK / 125000)) / 8) +#define OSNanosecondsToTicks(nsec) (((nsec) * (OS_TIMER_CLOCK / 125000)) / 8000) + #define OS_MESSAGE_NON_BLOCKING 0 #define OS_MESSAGE_BLOCKING 1 +#define OS_CONSOLE_MASK 0xf0000000 +#define OS_CONSOLE_RETAIL 0x00000000 +#define OS_CONSOLE_DEVELOPMENT 0x10000000 +#define OS_CONSOLE_TDEV 0x20000000 + +#define OS_CONSOLE_RETAIL4 0x00000004 +#define OS_CONSOLE_RETAIL3 0x00000003 +#define OS_CONSOLE_RETAIL2 0x00000002 +#define OS_CONSOLE_RETAIL1 0x00000001 +#define OS_CONSOLE_TDEVHW4 0x20000007 +#define OS_CONSOLE_TDEVHW3 0x20000006 +#define OS_CONSOLE_TDEVHW2 0x20000005 +#define OS_CONSOLE_TDEVHW1 0x20000004 +#define OS_CONSOLE_DEVHW4 0x10000007 +#define OS_CONSOLE_DEVHW3 0x10000006 +#define OS_CONSOLE_DEVHW2 0x10000005 +#define OS_CONSOLE_DEVHW1 0x10000004 +#define OS_CONSOLE_MINNOW 0x10000003 +#define OS_CONSOLE_ARTHUR 0x10000002 +#define OS_CONSOLE_PC_EMULATOR 0x10000001 +#define OS_CONSOLE_EMULATOR 0x10000000 + volatile u16 __OSDeviceCode : 0x800030E6; volatile u32 OS_PI_INTR_CAUSE : 0xCC003000; @@ -81,7 +121,7 @@ static void OSExceptionInit(void); void __OSDBIntegrator(void); void __OSDBJump(void); -typedef void (*OSExceptionHandler)(OSException, OSContext*); +typedef void (*OSExceptionHandler)(__OSException, OSContext*); OSExceptionHandler __OSSetExceptionHandler(__OSException exception, OSExceptionHandler handler); OSExceptionHandler __OSGetExceptionHandler(__OSException exception); static void OSExceptionVector(void); @@ -90,7 +130,7 @@ void __OSEVSetNumber(); void __OSEVEnd(); static void OSDefaultExceptionHandler(__OSException exception, OSContext* context); void __OSPSInit(void); -void __OSGetDIConfig(void); +u32 __OSGetDIConfig(void); void OSRegisterVersion(char* version); void OSSwitchFiberEx(u32, u32, u32, u32, u32, u32); @@ -161,6 +201,28 @@ typedef struct OSBootInfo { /* 0x3C */ u32 fst_max_length; } OSBootInfo; +typedef struct { + BOOL valid; + u32 restartCode; + u32 bootDol; + void* regionStart; + void* regionEnd; + BOOL argsUseDefault; + void* argsAddr; // valid only when argsUseDefault = FALSE +} OSExecParams; + +typedef struct BI2Debug { + /* 0x00 */ s32 debugMonSize; + /* 0x04 */ s32 simMemSize; + /* 0x08 */ u32 argOffset; + /* 0x0C */ u32 debugFlag; + /* 0x10 */ int trackLocation; + /* 0x14 */ int trackSize; + /* 0x18 */ u32 countryCode; + /* 0x1C */ u8 unk[8]; + /* 0x24 */ u32 padSpec; +} BI2Debug; + struct GLOBAL_MEMORY { DVDDiskID disk; u32 nintendo_boot_code; /* Nintendo Standard Boot Code. */ @@ -245,10 +307,14 @@ struct GLOBAL_MEMORY { #define OS_ASSERT(...) -inline void* OSPhysicalToCached(u32 offset) { - OS_ASSERT(offset <= 0x1fffffff); - return (void*)(offset + 0x80000000); -} +#define OSPhysicalToCached(paddr) ((void*)((u32)(paddr) + OS_BASE_CACHED)) +#define OSPhysicalToUncached(paddr) ((void*)((u32)(paddr) + OS_BASE_UNCACHED)) +#define OSCachedToPhysical(caddr) ((u32)((u8*)(caddr)-OS_BASE_CACHED)) +#define OSUncachedToPhysical(ucaddr) ((u32)((u8*)(ucaddr)-OS_BASE_UNCACHED)) +#define OSCachedToUncached(caddr) ((void*)((u8*)(caddr) + (OS_BASE_UNCACHED - OS_BASE_CACHED))) +#define OSUncachedToCached(ucaddr) ((void*)((u8*)(ucaddr) - (OS_BASE_UNCACHED - OS_BASE_CACHED))) + +extern OSTime __OSStartTime; #ifdef __cplusplus }; diff --git a/include/dolphin/os/OSAlarm.h b/include/dolphin/os/OSAlarm.h index 56cf7975de..f628e20da8 100644 --- a/include/dolphin/os/OSAlarm.h +++ b/include/dolphin/os/OSAlarm.h @@ -25,15 +25,19 @@ typedef struct OSAlarm { /* 0x20 */ OSTime start_time; } OSAlarm; // Size: 0x28 +typedef struct OSAlarmQueue { + OSAlarm* head; + OSAlarm* tail; +} OSAlarmQueue; + void OSInitAlarm(void); void OSCreateAlarm(OSAlarm* alarm); -static void InsertAlarm(OSAlarm* alarm, s64 time, OSAlarmHandler* handler); -void OSSetAlarm(OSAlarm* alarm, s64 time, OSAlarmHandler* handler); -void OSSetPeriodicAlarm(OSAlarm* alarm, s64 start, s64 period, OSAlarmHandler* handler); +static void InsertAlarm(OSAlarm* alarm, s64 time, OSAlarmHandler handler); +void OSSetAlarm(OSAlarm* alarm, s64 time, OSAlarmHandler handler); +void OSSetPeriodicAlarm(OSAlarm* alarm, s64 start, s64 period, OSAlarmHandler handler); void OSCancelAlarm(OSAlarm* alarm); static void DecrementerExceptionCallback(__OSException exception, OSContext* context); static void DecrementerExceptionHandler(__OSException exception, OSContext* context); -static s32 OnReset(s32 param_0); #ifdef __cplusplus }; diff --git a/include/dolphin/os/OSAlloc.h b/include/dolphin/os/OSAlloc.h index 5a5ff4c3f5..7a74b1e4bc 100644 --- a/include/dolphin/os/OSAlloc.h +++ b/include/dolphin/os/OSAlloc.h @@ -26,6 +26,8 @@ typedef u32 OSHeapHandle; extern volatile s32 __OSCurrHeap; +#define OSRoundUp32B(v) (((u32)(v + 31) & ~31)) + #define OSRoundUp(x, align) (((x) + (align)-1) & (-(align))) #define OSRoundUpPtr(x, align) ((void*)((((u32)(x)) + (align)-1) & (~((align)-1)))) diff --git a/include/dolphin/os/OSContext.h b/include/dolphin/os/OSContext.h index 7a22d6b231..78562a353d 100644 --- a/include/dolphin/os/OSContext.h +++ b/include/dolphin/os/OSContext.h @@ -7,6 +7,133 @@ extern "C" { #endif +#define __OS_CONTEXT_FRAME 768 + +#define OS_CONTEXT_R0 0 +#define OS_CONTEXT_R1 4 +#define OS_CONTEXT_R2 8 +#define OS_CONTEXT_R3 12 +#define OS_CONTEXT_R4 16 +#define OS_CONTEXT_R5 20 +#define OS_CONTEXT_R6 24 +#define OS_CONTEXT_R7 28 +#define OS_CONTEXT_R8 32 +#define OS_CONTEXT_R9 36 +#define OS_CONTEXT_R10 40 +#define OS_CONTEXT_R11 44 +#define OS_CONTEXT_R12 48 +#define OS_CONTEXT_R13 52 +#define OS_CONTEXT_R14 56 +#define OS_CONTEXT_R15 60 +#define OS_CONTEXT_R16 64 +#define OS_CONTEXT_R17 68 +#define OS_CONTEXT_R18 72 +#define OS_CONTEXT_R19 76 +#define OS_CONTEXT_R20 80 +#define OS_CONTEXT_R21 84 +#define OS_CONTEXT_R22 88 +#define OS_CONTEXT_R23 92 +#define OS_CONTEXT_R24 96 +#define OS_CONTEXT_R25 100 +#define OS_CONTEXT_R26 104 +#define OS_CONTEXT_R27 108 +#define OS_CONTEXT_R28 112 +#define OS_CONTEXT_R29 116 +#define OS_CONTEXT_R30 120 +#define OS_CONTEXT_R31 124 + +#define OS_CONTEXT_CR 128 +#define OS_CONTEXT_LR 132 +#define OS_CONTEXT_CTR 136 +#define OS_CONTEXT_XER 140 + +#define OS_CONTEXT_FPR0 144 +#define OS_CONTEXT_FPR1 152 +#define OS_CONTEXT_FPR2 160 +#define OS_CONTEXT_FPR3 168 +#define OS_CONTEXT_FPR4 176 +#define OS_CONTEXT_FPR5 184 +#define OS_CONTEXT_FPR6 192 +#define OS_CONTEXT_FPR7 200 +#define OS_CONTEXT_FPR8 208 +#define OS_CONTEXT_FPR9 216 +#define OS_CONTEXT_FPR10 224 +#define OS_CONTEXT_FPR11 232 +#define OS_CONTEXT_FPR12 240 +#define OS_CONTEXT_FPR13 248 +#define OS_CONTEXT_FPR14 256 +#define OS_CONTEXT_FPR15 264 +#define OS_CONTEXT_FPR16 272 +#define OS_CONTEXT_FPR17 280 +#define OS_CONTEXT_FPR18 288 +#define OS_CONTEXT_FPR19 296 +#define OS_CONTEXT_FPR20 304 +#define OS_CONTEXT_FPR21 312 +#define OS_CONTEXT_FPR22 320 +#define OS_CONTEXT_FPR23 328 +#define OS_CONTEXT_FPR24 336 +#define OS_CONTEXT_FPR25 344 +#define OS_CONTEXT_FPR26 352 +#define OS_CONTEXT_FPR27 360 +#define OS_CONTEXT_FPR28 368 +#define OS_CONTEXT_FPR29 376 +#define OS_CONTEXT_FPR30 384 +#define OS_CONTEXT_FPR31 392 + +#define OS_CONTEXT_FPSCR 400 + +#define OS_CONTEXT_SRR0 408 +#define OS_CONTEXT_SRR1 412 + +#define OS_CONTEXT_MODE 416 +#define OS_CONTEXT_STATE 418 + +#define OS_CONTEXT_GQR0 420 +#define OS_CONTEXT_GQR1 424 +#define OS_CONTEXT_GQR2 428 +#define OS_CONTEXT_GQR3 432 +#define OS_CONTEXT_GQR4 436 +#define OS_CONTEXT_GQR5 440 +#define OS_CONTEXT_GQR6 444 +#define OS_CONTEXT_GQR7 448 +#define __OSCONTEXT_PADDING 452 + +#define OS_CONTEXT_PSF0 456 +#define OS_CONTEXT_PSF1 464 +#define OS_CONTEXT_PSF2 472 +#define OS_CONTEXT_PSF3 480 +#define OS_CONTEXT_PSF4 488 +#define OS_CONTEXT_PSF5 496 +#define OS_CONTEXT_PSF6 504 +#define OS_CONTEXT_PSF7 512 +#define OS_CONTEXT_PSF8 520 +#define OS_CONTEXT_PSF9 528 +#define OS_CONTEXT_PSF10 536 +#define OS_CONTEXT_PSF11 544 +#define OS_CONTEXT_PSF12 552 +#define OS_CONTEXT_PSF13 560 +#define OS_CONTEXT_PSF14 568 +#define OS_CONTEXT_PSF15 576 +#define OS_CONTEXT_PSF16 584 +#define OS_CONTEXT_PSF17 592 +#define OS_CONTEXT_PSF18 600 +#define OS_CONTEXT_PSF19 608 +#define OS_CONTEXT_PSF20 616 +#define OS_CONTEXT_PSF21 624 +#define OS_CONTEXT_PSF22 632 +#define OS_CONTEXT_PSF23 640 +#define OS_CONTEXT_PSF24 648 +#define OS_CONTEXT_PSF25 656 +#define OS_CONTEXT_PSF26 664 +#define OS_CONTEXT_PSF27 672 +#define OS_CONTEXT_PSF28 680 +#define OS_CONTEXT_PSF29 688 +#define OS_CONTEXT_PSF30 696 +#define OS_CONTEXT_PSF31 704 +#define OS_CONTEXT_STATE_EXC 0x02u + +#define OS_CONTEXT_STATE_FPSAVED 0x01u + typedef struct OSContext { /* 0x000 */ u32 gpr[32]; /* 0x080 */ u32 cr; @@ -32,7 +159,7 @@ void __OSSaveFPUContext(s32 unused0, s32 unused1, OSContext* context); void OSSaveFPUContext(OSContext* context); void OSSetCurrentContext(OSContext* context); OSContext* OSGetCurrentContext(void); -void OSSaveContext(OSContext* context); +u32 OSSaveContext(OSContext* context); void OSLoadContext(OSContext* context); void OSClearContext(OSContext* context); void OSInitContext(OSContext* context, u32 pc, u32 lr); diff --git a/include/dolphin/os/OSError.h b/include/dolphin/os/OSError.h index 6f5b41f57d..ec07c81632 100644 --- a/include/dolphin/os/OSError.h +++ b/include/dolphin/os/OSError.h @@ -53,7 +53,7 @@ typedef u8 __OSException; typedef void (*OSErrorHandler)(OSError error, OSContext* context, u32, u32); OSErrorHandler OSSetErrorHandler(OSError error, OSErrorHandler handler); -void __OSUnhandledException(OSException exception, OSContext* context, u32 dsisr, u32 dar); +void __OSUnhandledException(__OSException exception, OSContext* context, u32 dsisr, u32 dar); #ifdef __cplusplus }; diff --git a/include/dolphin/os/OSInterrupt.h b/include/dolphin/os/OSInterrupt.h index ac5ccf9779..7654dfd431 100644 --- a/include/dolphin/os/OSInterrupt.h +++ b/include/dolphin/os/OSInterrupt.h @@ -44,6 +44,64 @@ typedef enum { OS_INTR_MAX } OSInterruptType; +#define OS_INTERRUPTMASK(interrupt) (0x80000000u >> (interrupt)) + +#define OS_INTERRUPTMASK_MEM_0 OS_INTERRUPTMASK(OS_INTR_MEM_0) +#define OS_INTERRUPTMASK_MEM_1 OS_INTERRUPTMASK(OS_INTR_MEM_1) +#define OS_INTERRUPTMASK_MEM_2 OS_INTERRUPTMASK(OS_INTR_MEM_2) +#define OS_INTERRUPTMASK_MEM_3 OS_INTERRUPTMASK(OS_INTR_MEM_3) +#define OS_INTERRUPTMASK_MEM_ADDRESS OS_INTERRUPTMASK(OS_INTR_MEM_ADDRESS) +#define OS_INTERRUPTMASK_MEM \ + (OS_INTERRUPTMASK_MEM_0 | OS_INTERRUPTMASK_MEM_1 | OS_INTERRUPTMASK_MEM_2 | \ + OS_INTERRUPTMASK_MEM_3 | OS_INTERRUPTMASK_MEM_ADDRESS) + +#define OS_INTERRUPTMASK_DSP_AI OS_INTERRUPTMASK(OS_INTR_DSP_AI) +#define OS_INTERRUPTMASK_DSP_ARAM OS_INTERRUPTMASK(OS_INTR_DSP_ARAM) +#define OS_INTERRUPTMASK_DSP_DSP OS_INTERRUPTMASK(OS_INTR_DSP_DSP) +#define OS_INTERRUPTMASK_DSP \ + (OS_INTERRUPTMASK_DSP_AI | OS_INTERRUPTMASK_DSP_ARAM | OS_INTERRUPTMASK_DSP_DSP) + +#define OS_INTERRUPTMASK_AI_AI OS_INTERRUPTMASK(OS_INTR_AI_AI) +#define OS_INTERRUPTMASK_AI (OS_INTERRUPTMASK_AI_AI) + +#define OS_INTERRUPTMASK_EXI_0_EXI OS_INTERRUPTMASK(OS_INTR_EXI_0_EXI) +#define OS_INTERRUPTMASK_EXI_0_TC OS_INTERRUPTMASK(OS_INTR_EXI_0_TC) +#define OS_INTERRUPTMASK_EXI_0_EXT OS_INTERRUPTMASK(OS_INTR_EXI_0_EXT) +#define OS_INTERRUPTMASK_EXI_0 \ + (OS_INTERRUPTMASK_EXI_0_EXI | OS_INTERRUPTMASK_EXI_0_TC | OS_INTERRUPTMASK_EXI_0_EXT) + +#define OS_INTERRUPTMASK_EXI_1_EXI OS_INTERRUPTMASK(OS_INTR_EXI_1_EXI) +#define OS_INTERRUPTMASK_EXI_1_TC OS_INTERRUPTMASK(OS_INTR_EXI_1_TC) +#define OS_INTERRUPTMASK_EXI_1_EXT OS_INTERRUPTMASK(OS_INTR_EXI_1_EXT) +#define OS_INTERRUPTMASK_EXI_1 \ + (OS_INTERRUPTMASK_EXI_1_EXI | OS_INTERRUPTMASK_EXI_1_TC | OS_INTERRUPTMASK_EXI_1_EXT) + +#define OS_INTERRUPTMASK_EXI_2_EXI OS_INTERRUPTMASK(OS_INTR_EXI_2_EXI) +#define OS_INTERRUPTMASK_EXI_2_TC OS_INTERRUPTMASK(OS_INTR_EXI_2_TC) +#define OS_INTERRUPTMASK_EXI_2 (OS_INTERRUPTMASK_EXI_2_EXI | OS_INTERRUPTMASK_EXI_2_TC) +#define OS_INTERRUPTMASK_EXI \ + (OS_INTERRUPTMASK_EXI_0_EXI | OS_INTERRUPTMASK_EXI_0_TC | OS_INTERRUPTMASK_EXI_0_EXT | \ + OS_INTERRUPTMASK_EXI_1_EXI | OS_INTERRUPTMASK_EXI_1_TC | OS_INTERRUPTMASK_EXI_1_EXT | \ + OS_INTERRUPTMASK_EXI_2_EXI | OS_INTERRUPTMASK_EXI_2_TC) + +#define OS_INTERRUPTMASK_PI_PE_TOKEN OS_INTERRUPTMASK(OS_INTR_PI_PE_TOKEN) +#define OS_INTERRUPTMASK_PI_PE_FINISH OS_INTERRUPTMASK(OS_INTR_PI_PE_FINISH) +#define OS_INTERRUPTMASK_PI_PE (OS_INTERRUPTMASK_PI_PE_TOKEN | OS_INTERRUPTMASK_PI_PE_FINISH) + +#define OS_INTERRUPTMASK_PI_CP OS_INTERRUPTMASK(OS_INTR_PI_CP) +#define OS_INTERRUPTMASK_PI_SI OS_INTERRUPTMASK(OS_INTR_PI_SI) +#define OS_INTERRUPTMASK_PI_DI OS_INTERRUPTMASK(OS_INTR_PI_DI) +#define OS_INTERRUPTMASK_PI_RSW OS_INTERRUPTMASK(OS_INTR_PI_RSW) +#define OS_INTERRUPTMASK_PI_ERROR OS_INTERRUPTMASK(OS_INTR_PI_ERROR) +#define OS_INTERRUPTMASK_PI_VI OS_INTERRUPTMASK(OS_INTR_PI_VI) +#define OS_INTERRUPTMASK_PI_DEBUG OS_INTERRUPTMASK(OS_INTR_PI_DEBUG) +#define OS_INTERRUPTMASK_PI_HSP OS_INTERRUPTMASK(OS_INTR_PI_HSP) +#define OS_INTERRUPTMASK_PI \ + (OS_INTERRUPTMASK_PI_CP | OS_INTERRUPTMASK_PI_SI | OS_INTERRUPTMASK_PI_DI | \ + OS_INTERRUPTMASK_PI_RSW | OS_INTERRUPTMASK_PI_ERROR | OS_INTERRUPTMASK_PI_VI | \ + OS_INTERRUPTMASK_PI_PE_TOKEN | OS_INTERRUPTMASK_PI_PE_FINISH | OS_INTERRUPTMASK_PI_DEBUG | \ + OS_INTERRUPTMASK_PI_HSP) + typedef s16 OSInterrupt; typedef u32 OSInterruptMask; typedef void (*OSInterruptHandler)(OSInterrupt interrupt, OSContext* context); @@ -58,7 +116,7 @@ void __OSInterruptInit(void); static OSInterruptMask SetInterruptMask(OSInterruptMask param_0, OSInterruptMask param_1); OSInterruptMask __OSMaskInterrupts(OSInterruptMask mask); OSInterruptMask __OSUnmaskInterrupts(OSInterruptMask mask); -void __OSDispatchInterrupt(OSInterrupt interrupt, OSContext* context); +void __OSDispatchInterrupt(u8 interrupt, OSContext* context); static void ExternalInterruptHandler(OSInterrupt interrupt, OSContext* context); void __RAS_OSDisableInterrupts_begin(void); diff --git a/include/dolphin/os/OSMemory.h b/include/dolphin/os/OSMemory.h index 7a1be5185c..92c5da07ae 100644 --- a/include/dolphin/os/OSMemory.h +++ b/include/dolphin/os/OSMemory.h @@ -8,12 +8,21 @@ extern "C" { #endif -static s32 OnReset(s32 param_0); +#define OS_PROTECT_CHAN0 0 +#define OS_PROTECT_CHAN1 1 +#define OS_PROTECT_CHAN2 2 +#define OS_PROTECT_CHAN3 3 + +#define OS_PROTECT_CONTROL_NONE 0x00 +#define OS_PROTECT_CONTROL_READ 0x01 +#define OS_PROTECT_CONTROL_WRITE 0x02 +#define OS_PROTECT_CONTROL_RDWR (OS_PROTECT_CONTROL_READ | OS_PROTECT_CONTROL_WRITE) + static void MEMIntrruptHandler(OSInterrupt interrupt, struct OSContext* context); void OSProtectRange(u32 channel, void* address, u32 nBytes, u32 control); static void Config24MB(void); static void Config48MB(void); -static void RealMode(void* config); +static void RealMode(u32 config); void __OSInitMemoryProtection(void); #ifdef __cplusplus diff --git a/include/dolphin/os/OSMessage.h b/include/dolphin/os/OSMessage.h index d4ab6b3601..a6447ec9ce 100644 --- a/include/dolphin/os/OSMessage.h +++ b/include/dolphin/os/OSMessage.h @@ -18,6 +18,10 @@ typedef struct OSMessageQueue { /* 0x1C */ s32 num_used; } OSMessageQueue; +// Flags to turn blocking on/off when sending/receiving message +#define OS_MESSAGE_NOBLOCK 0 +#define OS_MESSAGE_BLOCK 1 + void OSInitMessageQueue(OSMessageQueue* queue, OSMessage* msgArray, s32 msgCount); BOOL OSSendMessage(OSMessageQueue* queue, OSMessage msg, s32 flags); BOOL OSReceiveMessage(OSMessageQueue* queue, OSMessage* msg, s32 flags); diff --git a/include/dolphin/os/OSMutex.h b/include/dolphin/os/OSMutex.h index a3815e294a..7e42c91bc4 100644 --- a/include/dolphin/os/OSMutex.h +++ b/include/dolphin/os/OSMutex.h @@ -14,14 +14,19 @@ typedef struct OSMutex { /* 0x10 */ OSMutexLink link; } OSMutex; // Size: 0x18 +typedef struct OSCond { + OSThreadQueue queue; +} OSCond; + void OSInitMutex(OSMutex* mutex); void OSLockMutex(OSMutex* mutex); void OSUnlockMutex(OSMutex* mutex); -void __OSUnlockAllMutex(OSThread* thread); s32 OSTryLockMutex(OSMutex* mutex); void OSInitCond(OSCond* cond); void OSWaitCond(OSCond* cond, OSMutex* mutex); void OSSignalCond(OSCond* cond); + +void __OSUnlockAllMutex(OSThread* thread); s32 __OSCheckMutex(OSThread* thread); BOOL __OSCheckDeadLock(OSThread* thread); BOOL __OSCheckMutexes(OSThread* thread); diff --git a/include/dolphin/os/OSReset.h b/include/dolphin/os/OSReset.h index 4928124052..c642db1835 100644 --- a/include/dolphin/os/OSReset.h +++ b/include/dolphin/os/OSReset.h @@ -7,6 +7,25 @@ extern "C" { #endif +#define OS_RESETCODE_RESTART 0x80000000 +#define OS_RESETCODE_SYSTEM 0x40000000 + +#define OS_RESETCODE_EXEC 0xC0000000 +#define OS_RESETCODE_NETCONFIG 0xC0010000 + +#define OS_RESET_TIMEOUT OSMillisecondsToTicks(1000) + +#define OS_RESET_RESTART 0 +#define OS_RESET_HOTRESET 1 +#define OS_RESET_SHUTDOWN 2 + +#define OS_RESET_PRIO_SO 110 +#define OS_RESET_PRIO_IP 111 +#define OS_RESET_PRIO_CARD 127 +#define OS_RESET_PRIO_PAD 127 +#define OS_RESET_PRIO_GX 127 +#define OS_RESET_PRIO_ALARM 4294967295 + typedef s32 (*OSResetFunction)(s32); typedef struct OSResetFunctionInfo { @@ -16,12 +35,17 @@ typedef struct OSResetFunctionInfo { /* 0xC */ struct OSResetFunctionInfo* prev; } OSResetFunctionInfo; +typedef struct OSResetQueue { + OSResetFunctionInfo* first; + OSResetFunctionInfo* last; +} OSResetQueue; + void OSRegisterResetFunction(OSResetFunctionInfo* info); -BOOL __OSCallResetFunctions(s32 param_0); +BOOL __OSCallResetFunctions(u32 param_0); static void Reset(s32 param_0); static void KillThreads(void); void __OSDoHotReset(s32 param_0); -void OSResetSystem(s32 reset, u32 resetCode, BOOL forceMenu); +void OSResetSystem(int reset, u32 resetCode, BOOL forceMenu); u32 OSGetResetCode(void); #ifdef __cplusplus diff --git a/include/dolphin/os/OSResetSW.h b/include/dolphin/os/OSResetSW.h index 9cacab0c8f..4ac78009a5 100644 --- a/include/dolphin/os/OSResetSW.h +++ b/include/dolphin/os/OSResetSW.h @@ -7,7 +7,8 @@ extern "C" { #endif -void __OSResetSWInterruptHandler(void); +typedef void (*OSResetCallback)(void); + static BOOL OSGetResetButtonState(void); BOOL OSGetResetSwitchState(void); diff --git a/include/dolphin/os/OSRtc.h b/include/dolphin/os/OSRtc.h index a3c04a1ac3..e19f09155a 100644 --- a/include/dolphin/os/OSRtc.h +++ b/include/dolphin/os/OSRtc.h @@ -7,26 +7,65 @@ extern "C" { #endif -typedef enum OSSoundMode { - /* 0x0 */ SOUND_MODE_MONO, - /* 0x1 */ SOUND_MODE_STEREO, -} OSSoundMode; +typedef u32 OSSoundMode; + +#define OS_SOUND_MODE_MONO 0 +#define OS_SOUND_MODE_STEREO 1 + +#define RTC_CMD_READ 0x20000000 +#define RTC_CMD_WRITE 0xa0000000 + +#define RTC_SRAM_ADDR 0x00000100 +#define RTC_SRAM_SIZE 64 + +#define RTC_CHAN 0 +#define RTC_DEV 1 +#define RTC_FREQ 3 // EXI_FREQ_8M + +typedef struct SramControlBlock { + u8 sram[RTC_SRAM_SIZE]; + u32 offset; + BOOL enabled; + BOOL locked; + BOOL sync; + void (*callback)(void); +} SramControlBlock; + +typedef struct OSSram { + u16 checkSum; + u16 checkSumInv; + u32 ead0; + u32 ead1; + u32 counterBias; + s8 displayOffsetH; + u8 ntd; + u8 language; + u8 flags; +} OSSram; + +typedef struct OSSramEx { + u8 flashID[2][12]; + u32 wirelessKeyboardID; + u16 wirelessPadID[4]; + u8 dvdErrorCode; + u8 _padding0; + u8 flashIDCheckSum[2]; + u16 gbs; + u8 _padding1[2]; +} OSSramEx; -static void WriteSramCallback(void); -static u8 WriteSram(u8* param_0, u32 param_1, u32 param_2); void __OSInitSram(void); -u16* __OSLockSram(void); -u16* __OSLockSramEx(void); -static u32 UnlockSram(s32 param_0, u32 param_1); -u32 __OSUnlockSram(s32 param_0); -u32 __OSUnlockSramEx(s32 param_0); -u32 __OSSyncSram(void); +OSSram* __OSLockSram(void); +OSSramEx* __OSLockSramEx(void); +BOOL __OSUnlockSram(BOOL commit); +BOOL __OSUnlockSramEx(BOOL commit); +BOOL __OSSyncSram(void); u32 OSGetSoundMode(void); void OSSetSoundMode(OSSoundMode mode); u32 OSGetProgressiveMode(void); void OSSetProgressiveMode(u32 mode); -u16 OSGetWirelessID(s32 index); -void OSSetWirelessID(s32 index, u16 id); +u16 OSGetWirelessID(s32 channel); +void OSSetWirelessID(s32 channel, u16 id); static u16 OSGetGbsMode(void); static void OSSetGbsMode(u16 mode); diff --git a/include/dolphin/os/OSThread.h b/include/dolphin/os/OSThread.h index 5b77de9412..40b9e134c1 100644 --- a/include/dolphin/os/OSThread.h +++ b/include/dolphin/os/OSThread.h @@ -8,37 +8,52 @@ extern "C" { #endif typedef u16 OSThreadState; +typedef s32 OSPriority; // 0 highest, 31 lowest + #define OS_THREAD_STATE_UNINITIALIZED 0 #define OS_THREAD_STATE_READY 1 #define OS_THREAD_STATE_RUNNING 2 #define OS_THREAD_STATE_WAITING 4 #define OS_THREAD_STATE_DEAD 8 -typedef struct OSThreadLink { - struct OSThread* prev; - struct OSThread* next; -} OSThreadLink; +#define OS_THREAD_ATTR_DETACH 0x0001u -typedef struct OSThreadQueue { - /* 0x0 */ struct OSThread* head; - /* 0x4 */ struct OSThread* tail; -} OSThreadQueue; +#define OS_THREAD_STACK_MAGIC 0xDEADBABE -typedef struct OSMutexLink { - struct OSMutex* prev; - struct OSMutex* next; -} OSMutexLink; +#define OS_PRIORITY_MIN 0 // highest +#define OS_PRIORITY_MAX 31 // lowest +#define OS_PRIORITY_IDLE OS_PRIORITY_MAX -typedef struct OSMutexQueue { - struct OSMutex* prev; - struct OSMutex* next; -} OSMutexQueue; +typedef struct OSThread OSThread; +typedef struct OSThreadQueue OSThreadQueue; +typedef struct OSThreadLink OSThreadLink; -typedef struct OSCond { - OSThreadQueue queue; -} OSCond; +typedef struct OSMutex OSMutex; +typedef struct OSMutexQueue OSMutexQueue; +typedef struct OSMutexLink OSMutexLink; +typedef struct OSCond OSCond; -typedef struct OSThread { +struct OSThreadLink { + OSThread* next; + OSThread* prev; +}; + +struct OSThreadQueue { + /* 0x0 */ OSThread* head; + /* 0x4 */ OSThread* tail; +}; + +struct OSMutexLink { + OSMutex* prev; + OSMutex* next; +}; + +struct OSMutexQueue { + OSMutex* head; + OSMutex* tail; +}; + +struct OSThread { OSContext context; OSThreadState state; u16 attributes; @@ -49,14 +64,14 @@ typedef struct OSThread { OSThreadQueue* queue; OSThreadLink link; OSThreadQueue join_queue; - struct OSMutex* mutex; + OSMutex* mutex; OSMutexQueue owned_mutexes; OSThreadLink active_threads_link; u8* stack_base; u8* stack_end; u8* error_code; void* data[2]; -} OSThread; +}; typedef void (*OSSwitchThreadCallback)(OSThread* from, OSThread* to); @@ -73,13 +88,13 @@ s32 OSDisableScheduler(void); s32 OSEnableScheduler(void); static void UnsetRun(OSThread* thread); s32 __OSGetEffectivePriority(OSThread* thread); -static void SetEffectivePriority(OSThread* thread, s32 priority); +static OSThread* SetEffectivePriority(OSThread* thread, s32 priority); void __OSPromoteThread(OSThread* thread, s32 priority); -static void SelectThread(OSThread* thread); +static OSThread* SelectThread(BOOL yield); void __OSReschedule(void); void OSYieldThread(void); -BOOL OSCreateThread(OSThread* thread, void* func, void* param, void* stackBase, - u32 stackSize, s32 priority, u16 attribute); +BOOL OSCreateThread(OSThread* thread, void* func, void* param, void* stackBase, u32 stackSize, + s32 priority, u16 attribute); void OSExitThread(void* exitValue); void OSCancelThread(OSThread* thread); void OSDetachThread(OSThread* thread); diff --git a/include/dolphin/os/OSTime.h b/include/dolphin/os/OSTime.h index 38470ad781..7d67ca5b2c 100644 --- a/include/dolphin/os/OSTime.h +++ b/include/dolphin/os/OSTime.h @@ -29,7 +29,7 @@ OSTime OSGetTime(void); OSTick OSGetTick(void); OSTime __OSGetSystemTime(void); OSTime __OSTimeToSystemTime(OSTime time); -void GetDates(OSTime ticks, OSCalendarTime* ct); +void GetDates(s32 days, OSCalendarTime* ct); void OSTicksToCalendarTime(OSTime ticks, OSCalendarTime* ct); #ifdef __cplusplus diff --git a/include/dolphin/pad/Pad.h b/include/dolphin/pad/Pad.h index 7cc798cb44..5fc625ff25 100644 --- a/include/dolphin/pad/Pad.h +++ b/include/dolphin/pad/Pad.h @@ -1,7 +1,7 @@ #ifndef PAD_H #define PAD_H -#include "dolphin/types.h" +#include "dolphin/os/OS.h" #ifdef __cplusplus extern "C" { @@ -14,6 +14,36 @@ typedef enum PADMask { PAD_CHAN0_BIT = (1 << 31), } PADMask; +#define PAD_SPEC_0 0 +#define PAD_SPEC_1 1 +#define PAD_SPEC_2 2 +#define PAD_SPEC_3 3 +#define PAD_SPEC_4 4 +#define PAD_SPEC_5 5 + +#define PAD_MOTOR_STOP 0 +#define PAD_MOTOR_RUMBLE 1 +#define PAD_MOTOR_STOP_HARD 2 + +#define PAD_ERR_NONE 0 +#define PAD_ERR_NO_CONTROLLER -1 +#define PAD_ERR_NOT_READY -2 +#define PAD_ERR_TRANSFER -3 + +#define PAD_BUTTON_LEFT 0x0001 +#define PAD_BUTTON_RIGHT 0x0002 +#define PAD_BUTTON_DOWN 0x0004 +#define PAD_BUTTON_UP 0x0008 +#define PAD_TRIGGER_Z 0x0010 +#define PAD_TRIGGER_R 0x0020 +#define PAD_TRIGGER_L 0x0040 +#define PAD_BUTTON_A 0x0100 +#define PAD_BUTTON_B 0x0200 +#define PAD_BUTTON_X 0x0400 +#define PAD_BUTTON_Y 0x0800 +#define PAD_BUTTON_MENU 0x1000 +#define PAD_BUTTON_START 0x1000 + typedef struct PADStatus { /* 0x0 */ u16 button; /* 0x2 */ s8 stick_x; @@ -27,15 +57,22 @@ typedef struct PADStatus { /* 0xA */ s8 error; } PADStatus; -u32 PADInit(void); +typedef void (*PADSamplingCallback)(void); + +BOOL PADInit(void); void PADSetAnalogMode(u32 mode); -void PADSetSpec(int spec); +void PADSetSpec(u32 spec); BOOL PADReset(u32 mask); void PADClampCircle(PADStatus* status); void PADClamp(PADStatus* status); u32 PADRead(PADStatus* status); void PADControlMotor(s32 channel, u32 command); BOOL PADRecalibrate(u32 mask); +static void PADOriginCallback(s32 chan, u32 error, OSContext* context); +static void PADOriginUpdateCallback(s32 chan, u32 error, OSContext* context); +static void PADProbeCallback(s32 chan, u32 error, OSContext* context); +static void PADTypeAndStatusCallback(s32 chan, u32 type); +static void PADReceiveCheckCallback(s32 chan, u32 type); #ifdef __cplusplus }; diff --git a/include/dolphin/pad/Padclamp.h b/include/dolphin/pad/Padclamp.h index d9c5b8b6d4..4de100a5c5 100644 --- a/include/dolphin/pad/Padclamp.h +++ b/include/dolphin/pad/Padclamp.h @@ -3,4 +3,28 @@ #include "dolphin/types.h" +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct PADClampRegion { + u8 minTrigger; + u8 maxTrigger; + s8 minStick; + s8 maxStick; + s8 xyStick; + s8 minSubstick; + s8 maxSubstick; + s8 xySubstick; + s8 radStick; + s8 radSubstick; +} PADClampRegion; + +void PADClamp(PADStatus* status); +void PADClampCircle(PADStatus* status); + +#ifdef __cplusplus +}; +#endif + #endif /* PADCLAMP_H */ diff --git a/include/dolphin/si/SIBios.h b/include/dolphin/si/SIBios.h index d1340a8d20..34f04fc2f6 100644 --- a/include/dolphin/si/SIBios.h +++ b/include/dolphin/si/SIBios.h @@ -1,6 +1,128 @@ #ifndef SIBIOS_H #define SIBIOS_H -#include "dolphin/types.h" +#include "dolphin/os/OS.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define SI_MAX_CHAN 4 +#define SI_MAX_COMCSR_INLNGTH 128 +#define SI_MAX_COMCSR_OUTLNGTH 128 +#define SI_ERROR_UNDER_RUN 0x0001 +#define SI_ERROR_OVER_RUN 0x0002 +#define SI_ERROR_COLLISION 0x0004 +#define SI_ERROR_NO_RESPONSE 0x0008 +#define SI_ERROR_WRST 0x0010 +#define SI_ERROR_RDST 0x0020 +#define SI_ERROR_UNKNOWN 0x0040 +#define SI_ERROR_BUSY 0x0080 +#define SI_CHAN0 0 +#define SI_CHAN1 1 +#define SI_CHAN2 2 +#define SI_CHAN3 3 +#define SI_CHAN0_BIT 0x80000000 +#define SI_CHAN1_BIT 0x40000000 +#define SI_CHAN2_BIT 0x20000000 +#define SI_CHAN3_BIT 0x10000000 +#define SI_CHAN_BIT(chan) (SI_CHAN0_BIT >> (chan)) +#define SI_TYPE_MASK 0x18000000u +#define SI_TYPE_N64 0x00000000u +#define SI_TYPE_DOLPHIN 0x08000000u +#define SI_TYPE_GC SI_TYPE_DOLPHIN +#define SI_GC_WIRELESS 0x80000000 +#define SI_GC_NOMOTOR 0x20000000 +#define SI_GC_STANDARD 0x01000000 +#define SI_WIRELESS_RECEIVED 0x40000000 +#define SI_WIRELESS_IR 0x04000000 +#define SI_WIRELESS_STATE 0x02000000 +#define SI_WIRELESS_ORIGIN 0x00200000 +#define SI_WIRELESS_FIX_ID 0x00100000 +#define SI_WIRELESS_TYPE 0x000f0000 +#define SI_WIRELESS_LITE_MASK 0x000c0000 +#define SI_WIRELESS_LITE 0x00040000 +#define SI_WIRELESS_CONT_MASK 0x00080000 +#define SI_WIRELESS_CONT 0x00000000 +#define SI_WIRELESS_ID 0x00c0ff00 +#define SI_WIRELESS_TYPE_ID (SI_WIRELESS_TYPE | SI_WIRELESS_ID) +#define SI_N64_CONTROLLER (SI_TYPE_N64 | 0x05000000) +#define SI_N64_MIC (SI_TYPE_N64 | 0x00010000) +#define SI_N64_KEYBOARD (SI_TYPE_N64 | 0x00020000) +#define SI_N64_MOUSE (SI_TYPE_N64 | 0x02000000) +#define SI_GBA (SI_TYPE_N64 | 0x00040000) +#define SI_GC_CONTROLLER (SI_TYPE_GC | SI_GC_STANDARD) +#define SI_GC_RECEIVER (SI_TYPE_GC | SI_GC_WIRELESS) +#define SI_GC_WAVEBIRD \ + (SI_TYPE_GC | SI_GC_WIRELESS | SI_GC_STANDARD | SI_WIRELESS_STATE | SI_WIRELESS_FIX_ID) +#define SI_GC_KEYBOARD (SI_TYPE_GC | 0x00200000) +#define SI_GC_STEERING (SI_TYPE_GC | 0x00000000) + +typedef void (*SICallback)(s32 chan, u32 sr, OSContext* context); +typedef void (*SITypeAndStatusCallback)(s32 chan, u32 type); + +typedef struct SIPacket { + s32 chan; + void* output; + u32 outputBytes; + void* input; + u32 inputBytes; + SICallback callback; + OSTime fire; +} SIPacket; + +typedef struct SIControl { + s32 chan; + u32 poll; + u32 inputBytes; + void* input; + SICallback callback; +} SIControl; + +typedef struct SIComm_s { + u32 tcint : 1; + u32 tcintmsk : 1; + u32 comerr : 1; + u32 rdstint : 1; + u32 rdstintmsk : 1; + u32 pad0 : 4; + u32 outlngth : 7; + u32 pad1 : 1; + u32 inlngth : 7; + u32 pad2 : 5; + u32 channel : 2; + u32 tstart : 1; +} SIComm_s; + +typedef union SIComm_u { + u32 val; + SIComm_s f; +} SIComm_u; + +BOOL SIBusy(void); +BOOL SIIsChanBusy(s32 chan); +static void SIInterruptHandler(OSInterrupt interrupt, OSContext* context); +static BOOL SIEnablePollingInterrupt(BOOL enable); +BOOL SIRegisterPollingHandler(OSInterruptHandler handler); +BOOL SIUnregisterPollingHandler(OSInterruptHandler handler); +void SIInit(void); +u32 SIGetStatus(s32 chan); +void SISetCommand(s32 chan, u32 command); +void SITransferCommands(void); +u32 SISetXY(u32 x, u32 y); +u32 SIEnablePolling(u32 poll); +u32 SIDisablePolling(u32 poll); +static BOOL SIGetResponseRaw(s32 chan); +BOOL SIGetResponse(s32 chan, void* data); +BOOL SITransfer(s32 chan, void* output, u32 outputBytes, void* input, u32 inputBytes, + SICallback callback, OSTime delay); +u32 SIGetType(s32 chan); +u32 SIGetTypeAsync(s32 chan, SITypeAndStatusCallback callback); + +vu32 __SIRegs[64] : 0xCC006400; + +#ifdef __cplusplus +} +#endif #endif /* SIBIOS_H */ diff --git a/include/dolphin/si/SISamplingRate.h b/include/dolphin/si/SISamplingRate.h index b5f95d475d..01aa045fef 100644 --- a/include/dolphin/si/SISamplingRate.h +++ b/include/dolphin/si/SISamplingRate.h @@ -3,4 +3,20 @@ #include "dolphin/types.h" +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct XY { + u16 line; + u8 count; +} XY; + +void SISetSamplingRate(u32 msec); +void SIRefreshSamplingRate(void); + +#ifdef __cplusplus +} +#endif + #endif /* SISAMPLINGRATE_H */ diff --git a/include/dolphin/vi/vi.h b/include/dolphin/vi/vi.h index e3eb7c8902..cf1552d85c 100644 --- a/include/dolphin/vi/vi.h +++ b/include/dolphin/vi/vi.h @@ -8,6 +8,36 @@ extern "C" { #endif +#define VI_TVMODE(format, interlace) (((format) << 2) + (interlace)) + +#define VI_INTERLACE 0 +#define VI_NON_INTERLACE 1 +#define VI_PROGRESSIVE 2 + +#define VI_NTSC 0 +#define VI_PAL 1 +#define VI_MPAL 2 +#define VI_DEBUG 3 +#define VI_DEBUG_PAL 4 +#define VI_EURGB60 5 + +typedef enum { + VI_TVMODE_NTSC_INT = VI_TVMODE(VI_NTSC, VI_INTERLACE), + VI_TVMODE_NTSC_DS = VI_TVMODE(VI_NTSC, VI_NON_INTERLACE), + VI_TVMODE_NTSC_PROG = VI_TVMODE(VI_NTSC, VI_PROGRESSIVE), + VI_TVMODE_PAL_INT = VI_TVMODE(VI_PAL, VI_INTERLACE), + VI_TVMODE_PAL_DS = VI_TVMODE(VI_PAL, VI_NON_INTERLACE), + VI_TVMODE_EURGB60_INT = VI_TVMODE(VI_EURGB60, VI_INTERLACE), + VI_TVMODE_EURGB60_DS = VI_TVMODE(VI_EURGB60, VI_NON_INTERLACE), + VI_TVMODE_MPAL_INT = VI_TVMODE(VI_MPAL, VI_INTERLACE), + VI_TVMODE_MPAL_DS = VI_TVMODE(VI_MPAL, VI_NON_INTERLACE), + VI_TVMODE_DEBUG_INT = VI_TVMODE(VI_DEBUG, VI_INTERLACE), + VI_TVMODE_DEBUG_PAL_INT = VI_TVMODE(VI_DEBUG_PAL, VI_INTERLACE), + VI_TVMODE_DEBUG_PAL_DS = VI_TVMODE(VI_DEBUG_PAL, VI_NON_INTERLACE) +} VITVMode; + +typedef enum { VI_XFBMODE_SF = 0, VI_XFBMODE_DF } VIXFBMode; + typedef void (*VIRetraceCallback)(u32); void VIWaitForRetrace(void); @@ -22,6 +52,8 @@ void* VIGetCurrentFrameBuffer(); void VISetBlack(BOOL); u32 VIGetRetraceCount(); +vu16 __VIRegs[59] : 0xCC002000; + #ifdef __cplusplus }; #endif diff --git a/include/exi/EXIBios.h b/include/exi/EXIBios.h deleted file mode 100644 index 6d664a641c..0000000000 --- a/include/exi/EXIBios.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef EXIBIOS_H -#define EXIBIOS_H - -#include "dolphin/types.h" - -#endif /* EXIBIOS_H */ diff --git a/include_link.mk b/include_link.mk index 9f0bd28a96..c0df6258c0 100644 --- a/include_link.mk +++ b/include_link.mk @@ -28,7 +28,7 @@ -include libs/JSystem/JMath/Makefile -include libs/dolphin/base/Makefile -include libs/dolphin/os/Makefile --include libs/exi/Makefile +-include libs/dolphin/exi/Makefile -include libs/dolphin/si/Makefile -include libs/dolphin/db/Makefile -include libs/dolphin/mtx/Makefile diff --git a/libs/JSystem/JFramework/JFWDisplay.cpp b/libs/JSystem/JFramework/JFWDisplay.cpp index 7134e6cf23..5e977b58e4 100644 --- a/libs/JSystem/JFramework/JFWDisplay.cpp +++ b/libs/JSystem/JFramework/JFWDisplay.cpp @@ -573,7 +573,7 @@ void JFWDisplay::threadSleep(s64 time) { s32 status = OSDisableInterrupts(); alarm.appendLink(); - OSSetAlarm(&alarm, time, (OSAlarmHandler*)JFWThreadAlarmHandler); + OSSetAlarm(&alarm, time, JFWThreadAlarmHandler); OSSuspendThread(alarm.getThread()); OSRestoreInterrupts(status); } @@ -694,7 +694,7 @@ static void JFWDrawDoneAlarm() { s32 status = OSDisableInterrupts(); alarm.createAlarm(); alarm.appendLink(); - OSSetAlarm(&alarm, 0.5 * (*(u32*)0x800000F8 / 4), (OSAlarmHandler*)JFWGXAbortAlarmHandler); + OSSetAlarm(&alarm, 0.5 * (*(u32*)0x800000F8 / 4), JFWGXAbortAlarmHandler); GXDrawDone(); alarm.cancelAlarm(); alarm.removeLink(); diff --git a/libs/dolphin/ai/Makefile b/libs/dolphin/ai/Makefile index 4e1b30c82b..895608cf4a 100644 --- a/libs/dolphin/ai/Makefile +++ b/libs/dolphin/ai/Makefile @@ -9,6 +9,14 @@ LIBAI_A_O_FILES := \ $(BUILD_DIR)/libs/dolphin/ai/ai.o \ LIBAI_A_CFLAGS := \ + -Cpp_exceptions off \ + -proc gekko \ + -fp hard \ + -nodefaults \ + -str reuse \ + -RTTI off \ + -maxerrors 5 \ + -enum int $(INCLUDES) \ -O4,p \ -lang=c \ @@ -27,4 +35,4 @@ $(BUILD_DIR)/libs/dolphin/ai/%.o: libs/dolphin/ai/%.c @mkdir -p $(@D) @echo building... $< @$(ICONV) -f UTF-8 -t CP932 < $< > $(basename $@).c - @$(WINE) tools/mwcc_compiler/1.2.5/mwcceppc.exe $(CFLAGS) $(LIBAI_A_CFLAGS) -c -o $@ $(basename $@).c + @$(WINE) tools/mwcc_compiler/1.2.5/mwcceppc.exe $(LIBAI_A_CFLAGS) -c -o $@ $(basename $@).c diff --git a/libs/dolphin/ai/ai.c b/libs/dolphin/ai/ai.c index 091025ddb6..44071660dd 100644 --- a/libs/dolphin/ai/ai.c +++ b/libs/dolphin/ai/ai.c @@ -5,295 +5,413 @@ #include "dolphin/ai/ai.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/dsp/dsp.h" +#include "dolphin/os/OS.h" -// -// Forward References: -// - -void AIRegisterDMACallback(); -void AIInitDMA(); -void AIStartDMA(); -void AIStopDMA(); -void AISetStreamPlayState(); -static void AIGetStreamPlayState(); -void AISetDSPSampleRate(); -void AIGetDSPSampleRate(); -void __AI_set_stream_sample_rate(); -static void AIGetStreamSampleRate(); -void AISetStreamVolLeft(); -static void AIGetStreamVolLeft(); -void AISetStreamVolRight(); -static void AIGetStreamVolRight(); -void AIInit(); -void __AISHandler(); -void __AIDHandler(); -void __AICallbackStackSwitch(); -void __AI_SRC_INIT(); - -// -// External References: -// - -void OSRegisterVersion(); -void OSSetCurrentContext(); -void OSClearContext(); -void OSDisableInterrupts(); -void OSRestoreInterrupts(); -void __OSSetInterruptHandler(); -void __OSUnmaskInterrupts(); -void OSGetTime(); - -// -// Declarations: -// +void __AISHandler(s16 interrupt, OSContext* context); +void __AIDHandler(s16 interrupt, OSContext* context); +void __AICallbackStackSwitch(AIDCallback callback); +void __AI_SRC_INIT(void); /* ############################################################################################## */ /* 80451878-8045187C 000D78 0004+00 2/2 0/0 0/0 .sbss __AIS_Callback */ -static u8 __AIS_Callback[4]; +static AISCallback __AIS_Callback; /* 8045187C-80451880 000D7C 0004+00 3/3 0/0 0/0 .sbss __AID_Callback */ -static u8 __AID_Callback[4]; +static AIDCallback __AID_Callback; /* 8034FC70-8034FCB4 34A5B0 0044+00 0/0 1/1 0/0 .text AIRegisterDMACallback */ +// need compiler epilogue patch #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void AIRegisterDMACallback() { +asm AIDCallback AIRegisterDMACallback(AIDCallback callback) { nofralloc #include "asm/dolphin/ai/ai/AIRegisterDMACallback.s" } #pragma pop /* 8034FCB4-8034FD3C 34A5F4 0088+00 0/0 2/2 0/0 .text AIInitDMA */ +// need compiler epilogue patch +#ifdef NONMATCHING +void AIInitDMA(u32 addr, u32 length) { + s32 oldInts; + oldInts = OSDisableInterrupts(); + __DSPRegs[24] = (u16)((__DSPRegs[24] & ~0x3FF) | (addr >> 16)); + __DSPRegs[25] = (u16)((__DSPRegs[25] & ~0xFFE0) | (0xffff & addr)); + __DSPRegs[27] = (u16)((__DSPRegs[27] & ~0x7FFF) | (u16)((length >> 5) & 0xFFFF)); + OSRestoreInterrupts(oldInts); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void AIInitDMA() { +asm void AIInitDMA(u32 addr, u32 length) { nofralloc #include "asm/dolphin/ai/ai/AIInitDMA.s" } #pragma pop +#endif /* 8034FD3C-8034FD54 34A67C 0018+00 0/0 1/1 0/0 .text AIStartDMA */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void AIStartDMA() { - nofralloc -#include "asm/dolphin/ai/ai/AIStartDMA.s" +void AIStartDMA(void) { + __DSPRegs[27] |= 0x8000; } -#pragma pop /* 8034FD54-8034FD6C 34A694 0018+00 0/0 1/1 0/0 .text AIStopDMA */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void AIStopDMA() { - nofralloc -#include "asm/dolphin/ai/ai/AIStopDMA.s" + +void AIStopDMA(void) { + __DSPRegs[27] &= ~0x8000; } -#pragma pop /* 8034FD6C-8034FE44 34A6AC 00D8+00 1/1 1/1 0/0 .text AISetStreamPlayState */ +// need compiler epilogue patch +#ifdef NONMATCHING +void AISetStreamPlayState(u32 state) { + s32 oldInts; + u8 volRight; + u8 volLeft; + + if (state == AIGetStreamPlayState()) { + return; + } + + if (AIGetStreamSampleRate() == 0 && state == 1) { + volRight = AIGetStreamVolRight(); + volLeft = AIGetStreamVolLeft(); + AISetStreamVolRight(0); + AISetStreamVolLeft(0); + oldInts = OSDisableInterrupts(); + __AI_SRC_INIT(); + __AIRegs[0] = (__AIRegs[0] & ~0x20) | 0x20; + __AIRegs[0] = (__AIRegs[0] & ~1) | 1; + OSRestoreInterrupts(oldInts); + AISetStreamVolLeft(volRight); + AISetStreamVolRight(volLeft); + } else { + __AIRegs[0] = (__AIRegs[0] & ~1) | state; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void AISetStreamPlayState() { +asm void AISetStreamPlayState(u32 state) { nofralloc #include "asm/dolphin/ai/ai/AISetStreamPlayState.s" } #pragma pop +#endif /* 8034FE44-8034FE54 34A784 0010+00 1/1 0/0 0/0 .text AIGetStreamPlayState */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void AIGetStreamPlayState() { - nofralloc -#include "asm/dolphin/ai/ai/AIGetStreamPlayState.s" +u32 AIGetStreamPlayState(void) { + return __AIRegs[0] & 1; } -#pragma pop /* 8034FE54-8034FF34 34A794 00E0+00 1/1 1/1 0/0 .text AISetDSPSampleRate */ +// need compiler epilogue patch +#ifdef NONMATCHING +void AISetDSPSampleRate(u32 rate) { + u32 state; + s32 oldInts; + u8 left; + u8 right; + u32 sampleRate; + + if (rate == AIGetDSPSampleRate()) { + return; + } + + __AIRegs[0] &= ~0x40; + if (rate == 0) { + left = AIGetStreamVolLeft(); + right = AIGetStreamVolRight(); + state = AIGetStreamPlayState(); + sampleRate = AIGetStreamSampleRate(); + AISetStreamVolLeft(0); + AISetStreamVolRight(0); + oldInts = OSDisableInterrupts(); + __AI_SRC_INIT(); + __AIRegs[0] = (__AIRegs[0] & ~0x20) | 0x20; + __AIRegs[0] = (__AIRegs[0] & ~2) | (sampleRate * 2); + __AIRegs[0] = (__AIRegs[0] & ~1) | state; + __AIRegs[0] |= 0x40; + OSRestoreInterrupts(oldInts); + AISetStreamVolLeft(left); + AISetStreamVolRight(right); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void AISetDSPSampleRate() { +asm void AISetDSPSampleRate(u32 rate) { nofralloc #include "asm/dolphin/ai/ai/AISetDSPSampleRate.s" } #pragma pop +#endif /* 8034FF34-8034FF48 34A874 0014+00 1/1 0/0 1/1 .text AIGetDSPSampleRate */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void AIGetDSPSampleRate() { - nofralloc -#include "asm/dolphin/ai/ai/AIGetDSPSampleRate.s" +u32 AIGetDSPSampleRate(void) { + return ((__AIRegs[0] >> 6) & 1) ^ 1; } -#pragma pop /* 8034FF48-8035001C 34A888 00D4+00 1/1 0/1 0/0 .text __AI_set_stream_sample_rate */ +// need compiler epilogue patch +#ifdef NONMATCHING +void __AI_set_stream_sample_rate(u32 rate) { + s32 oldInts; + s32 state; + u8 left; + u8 right; + s32 temp_r26; + + if (rate == AIGetStreamSampleRate()) { + return; + } + + state = AIGetStreamPlayState(); + left = AIGetStreamVolLeft(); + right = AIGetStreamVolRight(); + AISetStreamVolRight(0); + AISetStreamVolLeft(0); + temp_r26 = __AIRegs[0] & 0x40; + __AIRegs[0] &= ~0x40; + oldInts = OSDisableInterrupts(); + __AI_SRC_INIT(); + __AIRegs[0] |= temp_r26; + __AIRegs[0] = (__AIRegs[0] & ~0x20) | 0x20; + __AIRegs[0] = (__AIRegs[0] & ~2) | (rate * 2); + OSRestoreInterrupts(oldInts); + AISetStreamPlayState(state); + AISetStreamVolLeft(left); + AISetStreamVolRight(right); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __AI_set_stream_sample_rate() { +asm void __AI_set_stream_sample_rate(u32 rate) { nofralloc #include "asm/dolphin/ai/ai/__AI_set_stream_sample_rate.s" } #pragma pop +#endif /* 8035001C-8035002C 34A95C 0010+00 3/3 0/0 0/0 .text AIGetStreamSampleRate */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void AIGetStreamSampleRate() { - nofralloc -#include "asm/dolphin/ai/ai/AIGetStreamSampleRate.s" +u32 AIGetStreamSampleRate(void) { + return (__AIRegs[0] >> 1) & 1; } -#pragma pop /* 8035002C-80350048 34A96C 001C+00 3/3 1/1 0/0 .text AISetStreamVolLeft */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void AISetStreamVolLeft() { - nofralloc -#include "asm/dolphin/ai/ai/AISetStreamVolLeft.s" +void AISetStreamVolLeft(u8 vol) { + __AIRegs[1] = (__AIRegs[1] & ~0xFF) | (vol & 0xFF); } -#pragma pop /* 80350048-80350058 34A988 0010+00 3/3 0/0 0/0 .text AIGetStreamVolLeft */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void AIGetStreamVolLeft() { - nofralloc -#include "asm/dolphin/ai/ai/AIGetStreamVolLeft.s" +u8 AIGetStreamVolLeft(void) { + return __AIRegs[1]; } -#pragma pop /* 80350058-80350074 34A998 001C+00 3/3 1/1 0/0 .text AISetStreamVolRight */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void AISetStreamVolRight() { - nofralloc -#include "asm/dolphin/ai/ai/AISetStreamVolRight.s" +void AISetStreamVolRight(u8 vol) { + __AIRegs[1] = (__AIRegs[1] & ~0xFF00) | ((vol & 0xFF) << 8); } -#pragma pop /* 80350074-80350084 34A9B4 0010+00 3/3 0/0 0/0 .text AIGetStreamVolRight */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void AIGetStreamVolRight() { - nofralloc -#include "asm/dolphin/ai/ai/AIGetStreamVolRight.s" +u8 AIGetStreamVolRight(void) { + return __AIRegs[1] >> 8; } -#pragma pop /* ############################################################################################## */ /* 803D1BA0-803D1BE8 02ECC0 0044+04 1/0 0/0 0/0 .data @1 */ -SECTION_DATA static char lit_1[] = "<< Dolphin SDK - AI\trelease build: Apr 5 2004 04:15:02 (0x2301) >>"; +SECTION_DATA static char lit_1[] = + "<< Dolphin SDK - AI\trelease build: Apr 5 2004 04:15:02 (0x2301) >>"; /* 80450A40-80450A48 -00001 0004+04 1/1 0/0 0/0 .sdata __AIVersion */ -SECTION_SDATA static void* __AIVersion[1 + 1 /* padding */] = { - (void*)&lit_1, - /* padding */ - NULL, -}; +SECTION_SDATA static const char* __AIVersion = lit_1; /* 80451880-80451884 000D80 0004+00 3/3 0/0 0/0 .sbss __CallbackStack */ -static u8 __CallbackStack[4]; +static u8* __CallbackStack; /* 80451884-80451888 000D84 0004+00 1/1 0/0 0/0 .sbss __OldStack */ -static u8 __OldStack[4]; +static u8* __OldStack; /* 80451888-8045188C 000D88 0004+00 1/1 0/0 0/0 .sbss __AI_init_flag */ -static u8 __AI_init_flag[4]; +static volatile s32 __AI_init_flag; /* 8045188C-80451890 000D8C 0004+00 1/1 0/0 0/0 .sbss __AID_Active */ -static u8 __AID_Active[4]; +static volatile s32 __AID_Active; /* 80451890-80451894 000D90 0004+00 2/2 0/0 0/0 .sbss bound_32KHz */ -static u8 bound_32KHz[4]; - -/* 80451894-80451898 000D94 0004+00 2/2 0/0 0/0 .sbss None */ -static u8 data_80451894[4]; +static OSTime bound_32KHz; /* 80451898-8045189C 000D98 0004+00 2/2 0/0 0/0 .sbss bound_48KHz */ -static u8 bound_48KHz[4]; - -/* 8045189C-804518A0 000D9C 0004+00 2/2 0/0 0/0 .sbss None */ -static u8 data_8045189C[4]; +static OSTime bound_48KHz; /* 804518A0-804518A4 000DA0 0004+00 2/2 0/0 0/0 .sbss min_wait */ -static u8 min_wait[4]; - -/* 804518A4-804518A8 000DA4 0004+00 2/2 0/0 0/0 .sbss None */ -static u8 data_804518A4[4]; +static OSTime min_wait; /* 804518A8-804518AC 000DA8 0004+00 2/2 0/0 0/0 .sbss max_wait */ -static u8 max_wait[4]; - -/* 804518AC-804518B0 000DAC 0004+00 2/2 0/0 0/0 .sbss None */ -static u8 data_804518AC[4]; +static OSTime max_wait; /* 804518B0-804518B4 000DB0 0004+00 2/2 0/0 0/0 .sbss buffer */ -static u8 buffer[4]; - -/* 804518B4-804518B8 000DB4 0004+00 2/2 0/0 0/0 .sbss None */ -static u8 data_804518B4[4]; +static OSTime buffer; /* 80350084-803501F0 34A9C4 016C+00 0/0 1/1 0/0 .text AIInit */ +// need compiler epilogue patch #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void AIInit() { +asm void AIInit(u8* stack) { nofralloc #include "asm/dolphin/ai/ai/AIInit.s" } #pragma pop /* 803501F0-8035026C 34AB30 007C+00 1/1 0/0 0/0 .text __AISHandler */ +// need compiler epilogue patch +#ifdef NONMATCHING +void __AISHandler(s16 interrupt, OSContext* context) { + OSContext tmpContext; + __AIRegs[0] |= 8; + OSClearContext(&tmpContext); + OSSetCurrentContext(&tmpContext); + + if (__AIS_Callback != NULL) { + __AIS_Callback(__AIRegs[2]); + } + + OSClearContext(&tmpContext); + OSSetCurrentContext(context); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __AISHandler() { +asm void __AISHandler(s16 interrupt, OSContext* context) { nofralloc #include "asm/dolphin/ai/ai/__AISHandler.s" } #pragma pop +#endif /* 8035026C-80350318 34ABAC 00AC+00 1/1 0/0 0/0 .text __AIDHandler */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __AIDHandler() { - nofralloc -#include "asm/dolphin/ai/ai/__AIDHandler.s" +void __AIDHandler(s16 interrupt, OSContext* context) { + OSContext tempContext; + u32 temp = __DSPRegs[5]; + __DSPRegs[5] = (temp & ~0xA0) | 8; + OSClearContext(&tempContext); + OSSetCurrentContext(&tempContext); + + if (__AID_Callback && !__AID_Active) { + __AID_Active = TRUE; + + if (__CallbackStack) { + __AICallbackStackSwitch(__AID_Callback); + } else { + __AID_Callback(); + } + + __AID_Active = FALSE; + } + + OSClearContext(&tempContext); + OSSetCurrentContext(context); } -#pragma pop /* 80350318-80350370 34AC58 0058+00 1/1 0/0 0/0 .text __AICallbackStackSwitch */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __AICallbackStackSwitch() { - nofralloc -#include "asm/dolphin/ai/ai/__AICallbackStackSwitch.s" +// clang-format off +asm void __AICallbackStackSwitch(register AIDCallback cb) { + // Allocate stack frame + fralloc + + // Store current stack + lis r5, __OldStack@ha + addi r5, r5, __OldStack@l + stw r1, 0(r5) + + // Load stack for callback + lis r5, __CallbackStack@ha + addi r5, r5, __CallbackStack@l + lwz r1,0(r5) + + // Move stack down 8 bytes + subi r1, r1, 8 + // Call callback + mtlr cb + blrl + + // Restore old stack + lis r5, __OldStack @ha + addi r5, r5, __OldStack@l + lwz r1,0(r5) + + // Free stack frame + frfree + + blr } -#pragma pop +// clang-format on /* 80350370-80350554 34ACB0 01E4+00 3/3 0/0 0/0 .text __AI_SRC_INIT */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __AI_SRC_INIT() { - nofralloc -#include "asm/dolphin/ai/ai/__AI_SRC_INIT.s" +void __AI_SRC_INIT(void) { + OSTime rise32 = 0; + OSTime rise48 = 0; + OSTime diff = 0; + OSTime unused1 = 0; + OSTime temp = 0; + u32 temp0 = 0; + u32 temp1 = 0; + u32 done = 0; + u32 walking = 0; + u32 unused2 = 0; + u32 initCnt = 0; + + walking = 0; + initCnt = 0; + temp = 0; + + while (!done) { + __AIRegs[0] = (__AIRegs[0] & ~0x20) | 0x20; + __AIRegs[0] &= ~2; + __AIRegs[0] = (__AIRegs[0] & ~1) | 1; + + temp0 = __AIRegs[2]; + + while (temp0 == __AIRegs[2]) + ; + rise32 = OSGetTime(); + + __AIRegs[0] = (__AIRegs[0] & ~2) | 2; + __AIRegs[0] = (__AIRegs[0] & ~1) | 1; + + temp1 = __AIRegs[2]; + while (temp1 == __AIRegs[2]) + ; + + rise48 = OSGetTime(); + + diff = rise48 - rise32; + __AIRegs[0] &= ~2; + __AIRegs[0] &= ~1; + + if (diff < (bound_32KHz - buffer)) { + temp = min_wait; + done = 1; + ++initCnt; + } else if (diff >= (bound_32KHz + buffer) && diff < (bound_48KHz - buffer)) { + temp = max_wait; + done = 1; + ++initCnt; + } else { + done = 0; + walking = 1; + ++initCnt; + } + } + + while ((rise48 + temp) > OSGetTime()) + ; } -#pragma pop diff --git a/libs/dolphin/ar/Makefile b/libs/dolphin/ar/Makefile index 26a079b70e..dcf2513caa 100644 --- a/libs/dolphin/ar/Makefile +++ b/libs/dolphin/ar/Makefile @@ -11,6 +11,14 @@ LIBAR_A_O_FILES := \ $(BUILD_DIR)/libs/dolphin/ar/arq.o \ LIBAR_A_CFLAGS := \ + -Cpp_exceptions off \ + -proc gekko \ + -fp hard \ + -nodefaults \ + -str reuse \ + -RTTI off \ + -maxerrors 5 \ + -enum int $(INCLUDES) \ -O4,p \ -lang=c \ @@ -29,5 +37,5 @@ $(BUILD_DIR)/libs/dolphin/ar/%.o: libs/dolphin/ar/%.c @mkdir -p $(@D) @echo building... $< @$(ICONV) -f UTF-8 -t CP932 < $< > $(basename $@).c - @$(WINE) tools/mwcc_compiler/1.2.5/mwcceppc.exe $(CFLAGS) $(LIBAR_A_CFLAGS) -c -o $@ $(basename $@).c + @$(WINE) tools/mwcc_compiler/1.2.5/mwcceppc.exe $(LIBAR_A_CFLAGS) -c -o $@ $(basename $@).c diff --git a/libs/dolphin/ar/ar.c b/libs/dolphin/ar/ar.c index 58eae0f455..77ea7f4271 100644 --- a/libs/dolphin/ar/ar.c +++ b/libs/dolphin/ar/ar.c @@ -4,142 +4,186 @@ // #include "dolphin/ar/ar.h" +#include "MSL_C/MSL_Common/Src/string.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/base/PPCArch.h" +#include "dolphin/dsp/dsp.h" +#include "dolphin/os/OS.h" -// -// Forward References: -// - -void ARRegisterDMACallback(); -void ARGetDMAStatus(); -void ARStartDMA(); -void __ARHandler(); +void __ARHandler(s16 interrupt, OSContext* context); void __ARClearInterrupt(); void __ARGetInterruptStatus(); void __ARChecksize(); -// -// External References: -// - -SECTION_INIT void memset(); -void PPCSync(); -void OSRegisterVersion(); -void DCInvalidateRange(); -void DCFlushRange(); -void OSSetCurrentContext(); -void OSClearContext(); -void OSDisableInterrupts(); -void OSRestoreInterrupts(); -void __OSSetInterruptHandler(); -void __OSUnmaskInterrupts(); - -// -// Declarations: -// - /* ############################################################################################## */ /* 804518B8-804518BC 000DB8 0004+00 3/3 0/0 0/0 .sbss __AR_Callback */ -static u8 __AR_Callback[4]; +static ARCallback __AR_Callback; /* 80350554-80350598 34AE94 0044+00 0/0 1/1 0/0 .text ARRegisterDMACallback */ +// needs compiler epilogue patch +#ifdef NONMATCHING +ARCallback ARRegisterDMACallback(ARCallback callback) { + ARCallback oldCb; + BOOL enabled; + oldCb = __AR_Callback; + enabled = OSDisableInterrupts(); + __AR_Callback = callback; + OSRestoreInterrupts(enabled); + return oldCb; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void ARRegisterDMACallback() { +asm ARCallback ARRegisterDMACallback(ARCallback callback) { nofralloc #include "asm/dolphin/ar/ar/ARRegisterDMACallback.s" } #pragma pop +#endif /* 80350598-803505D4 34AED8 003C+00 0/0 2/2 0/0 .text ARGetDMAStatus */ +// needs compiler epilogue patch +#ifdef NONMATCHING +u32 ARGetDMAStatus() { + BOOL enabled; + u32 val; + enabled = OSDisableInterrupts(); + val = __DSPRegs[5] & 0x0200; + OSRestoreInterrupts(enabled); + return val; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void ARGetDMAStatus() { +asm u32 ARGetDMAStatus(void) { nofralloc #include "asm/dolphin/ar/ar/ARGetDMAStatus.s" } #pragma pop +#endif /* 803505D4-803506C4 34AF14 00F0+00 0/0 5/5 0/0 .text ARStartDMA */ +// needs compiler epilogue patch +#ifdef NONMATCHING +void ARStartDMA(u32 type, u32 mainmem_addr, u32 aram_addr, u32 length) { + BOOL enabled; + + enabled = OSDisableInterrupts(); + + __DSPRegs[16] = (u16)(__DSPRegs[16] & ~0x3ff) | (u16)(mainmem_addr >> 16); + __DSPRegs[17] = (u16)(__DSPRegs[17] & ~0xffe0) | (u16)(mainmem_addr & 0xffff); + __DSPRegs[18] = (u16)(__DSPRegs[18] & ~0x3ff) | (u16)(aram_addr >> 16); + __DSPRegs[19] = (u16)(__DSPRegs[19] & ~0xffe0) | (u16)(aram_addr & 0xffff); + __DSPRegs[20] = (u16)((__DSPRegs[20] & ~0x8000) | (type << 15)); + __DSPRegs[20] = (u16)(__DSPRegs[20] & ~0x3ff) | (u16)(length >> 16); + __DSPRegs[21] = (u16)(__DSPRegs[21] & ~0xffe0) | (u16)(length & 0xffff); + OSRestoreInterrupts(enabled); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void ARStartDMA() { +asm void ARStartDMA(u32 type, u32 mainmem_addr, u32 aram_addr, u32 length) { nofralloc #include "asm/dolphin/ar/ar/ARStartDMA.s" } #pragma pop +#endif /* ############################################################################################## */ /* 804518BC-804518C0 000DBC 0004+00 2/1 0/0 0/0 .sbss __AR_Size */ -static u8 __AR_Size[4]; +static u32 __AR_Size; /* 804518C0-804518C4 000DC0 0004+00 1/1 0/0 0/0 .sbss __AR_InternalSize */ -static u8 __AR_InternalSize[4]; +static u32 __AR_InternalSize; /* 804518C4-804518C8 000DC4 0004+00 1/1 0/0 0/0 .sbss __AR_ExpansionSize */ -static u8 __AR_ExpansionSize[4]; +static u32 __AR_ExpansionSize; /* 804518C8-804518CC 000DC8 0004+00 2/2 0/0 0/0 .sbss __AR_StackPointer */ -static u8 __AR_StackPointer[4]; +static u32 __AR_StackPointer; /* 804518CC-804518D0 000DCC 0004+00 2/2 0/0 0/0 .sbss __AR_FreeBlocks */ -static u8 __AR_FreeBlocks[4]; +static u32 __AR_FreeBlocks; /* 804518D0-804518D4 000DD0 0004+00 2/2 0/0 0/0 .sbss __AR_BlockLength */ -static u8 __AR_BlockLength[4]; +static u32* __AR_BlockLength; /* 803506C4-8035072C 34B004 0068+00 0/0 1/1 0/0 .text ARAlloc */ +// needs compiler epilogue patch +#ifdef NONMATCHING +u32 ARAlloc(u32 length) { + u32 tmp; + BOOL enabled; + + enabled = OSDisableInterrupts(); + tmp = __AR_StackPointer; + __AR_StackPointer += length; + *__AR_BlockLength = length; + __AR_BlockLength++; + __AR_FreeBlocks--; + OSRestoreInterrupts(enabled); + + return tmp; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm u32 ARAlloc(u32) { +asm u32 ARAlloc(u32 length) { nofralloc #include "asm/dolphin/ar/ar/ARAlloc.s" } #pragma pop +#endif /* ############################################################################################## */ /* 803D1BE8-803D1C30 02ED08 0044+04 1/0 0/0 0/0 .data @1 */ -SECTION_DATA static char lit_1[] = "<< Dolphin SDK - AR\trelease build: Apr 5 2004 04:15:03 (0x2301) >>"; +SECTION_DATA static char lit_1[] = + "<< Dolphin SDK - AR\trelease build: Apr 5 2004 04:15:03 (0x2301) >>"; /* 80450A48-80450A50 -00001 0004+04 1/1 0/0 0/0 .sdata __ARVersion */ -SECTION_SDATA static void* __ARVersion[1 + 1 /* padding */] = { - (void*)&lit_1, - /* padding */ - NULL, -}; +SECTION_SDATA static const char* __ARVersion = lit_1; /* 804518D4-804518D8 000DD4 0004+00 1/1 0/0 0/0 .sbss __AR_init_flag */ -static u8 __AR_init_flag[4]; +static volatile BOOL __AR_init_flag; /* 8035072C-803507F0 34B06C 00C4+00 0/0 1/1 0/0 .text ARInit */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm u32 ARInit(u32*, u32) { +asm u32 ARInit(u32* stack_index_addr, u32 num_entries) { nofralloc #include "asm/dolphin/ar/ar/ARInit.s" } #pragma pop /* 803507F0-803507F8 -00001 0008+00 0/0 0/0 0/0 .text ARGetSize */ -u32 ARGetSize() { - return *(u32*)(&__AR_Size); +u32 ARGetSize(void) { + return __AR_Size; } /* 803507F8-80350870 34B138 0078+00 1/1 0/0 0/0 .text __ARHandler */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __ARHandler() { - nofralloc -#include "asm/dolphin/ar/ar/__ARHandler.s" +static void __ARHandler(s16 interrupt, OSContext* context) { + OSContext exceptionContext; + u16 tmp; + + tmp = __DSPRegs[5]; + tmp = (u16)((tmp & ~0x00000088) | 0x20); + __DSPRegs[5] = tmp; + + OSClearContext(&exceptionContext); + OSSetCurrentContext(&exceptionContext); + + if (__AR_Callback) { + (*__AR_Callback)(); + } + + OSClearContext(&exceptionContext); + OSSetCurrentContext(context); } -#pragma pop /* 80350870-80350890 34B1B0 0020+00 0/0 2/2 0/0 .text __ARClearInterrupt */ #pragma push diff --git a/libs/dolphin/base/Makefile b/libs/dolphin/base/Makefile index 96c4fd0c8e..a165ad6da0 100644 --- a/libs/dolphin/base/Makefile +++ b/libs/dolphin/base/Makefile @@ -18,8 +18,6 @@ LIBBASE_A_LDFLAGS := \ -proc gekko \ -linkmode moreram \ -$(BUILD_DIR)/libs/dolphin/base/PPCArch.o: MWCC_VERSION := 1.2.5 - $(BUILD_DIR)/libbase.a: $(LIBBASE_A_O_FILES) @echo linking... $(BUILD_DIR)/libbase.a @echo $(LIBBASE_A_O_FILES) > build/LIBBASE_A_ofiles @@ -29,5 +27,5 @@ $(BUILD_DIR)/libs/dolphin/base/%.o: libs/dolphin/base/%.c @mkdir -p $(@D) @echo building... $< @$(ICONV) -f UTF-8 -t CP932 < $< > $(basename $@).c - @$(CC) $(CFLAGS) $(LIBBASE_A_CFLAGS) -c -o $@ $(basename $@).c + @$(WINE) tools/mwcc_compiler/1.2.5/mwcceppc.exe $(CFLAGS) $(LIBBASE_A_CFLAGS) -c -o $@ $(basename $@).c diff --git a/libs/dolphin/base/PPCArch.c b/libs/dolphin/base/PPCArch.c index bc7319b47b..a3254d92ca 100644 --- a/libs/dolphin/base/PPCArch.c +++ b/libs/dolphin/base/PPCArch.c @@ -1,248 +1,171 @@ -// -// Generated By: dol2asm -// Translation Unit: PPCArch -// - #include "dolphin/base/PPCArch.h" -#include "dol2asm.h" -#include "dolphin/types.h" - -// -// Forward References: -// - -extern void PPCMfmsr(); -extern void PPCMtmsr(); -extern void PPCMfhid0(); -extern void PPCMthid0(); -extern void PPCMfl2cr(); -extern void PPCMtl2cr(); -extern void PPCMtdec(); -extern void PPCSync(); -extern void PPCHalt(); -extern void PPCMtmmcr0(); -extern void PPCMtmmcr1(); -extern void PPCMtpmc1(); -extern void PPCMtpmc2(); -extern void PPCMtpmc3(); -extern void PPCMtpmc4(); -extern u32 PPCMffpscr(); -extern void PPCMtfpscr(); -extern void PPCMfhid2(); -extern void PPCMthid2(); -extern void PPCMtwpar(); -extern void PPCDisableSpeculation(); -extern void PPCSetFpNonIEEEMode(); - -// -// External References: -// - -// -// Declarations: -// +// clang-format off /* 80339CC0-80339CC8 -00001 0008+00 0/0 0/0 0/0 .text PPCMfmsr */ -asm void PPCMfmsr() { - // clang-format off +asm u32 PPCMfmsr(void) { nofralloc mfmsr r3 blr - // clang-format on } /* 80339CC8-80339CD0 -00001 0008+00 0/0 0/0 0/0 .text PPCMtmsr */ -asm void PPCMtmsr() { - // clang-format off +asm void PPCMtmsr(register u32 newMSR) { nofralloc - mtmsr r3 + mtmsr newMSR blr - // clang-format on } /* 80339CD0-80339CD8 -00001 0008+00 0/0 0/0 0/0 .text PPCMfhid0 */ -asm void PPCMfhid0() { - // clang-format off +asm u32 PPCMfhid0(void) { nofralloc - mfspr r3, 0x3f0 + mfspr r3, HID0 blr - // clang-format on } /* 80339CD8-80339CE0 -00001 0008+00 0/0 0/0 0/0 .text PPCMthid0 */ -asm void PPCMthid0() { - // clang-format off +asm void PPCMthid0(register u32 newHID0) { nofralloc - mtspr 0x3f0, r3 + mtspr HID0, newHID0 blr - // clang-format on } /* 80339CE0-80339CE8 -00001 0008+00 0/0 0/0 0/0 .text PPCMfl2cr */ -asm void PPCMfl2cr() { - // clang-format off +asm u32 PPCMfl2cr(void) { nofralloc - mfspr r3, 0x3f9 + mfspr r3, L2CR blr - // clang-format on } /* 80339CE8-80339CF0 -00001 0008+00 0/0 0/0 0/0 .text PPCMtl2cr */ -asm void PPCMtl2cr() { - // clang-format off +asm void PPCMtl2cr(register u32 newL2cr) { nofralloc - mtspr 0x3f9, r3 + mtspr L2CR, newL2cr blr - // clang-format on } /* 80339CF0-80339CF8 -00001 0008+00 0/0 0/0 0/0 .text PPCMtdec */ -asm void PPCMtdec() { - // clang-format off +asm void PPCMtdec(register u32 newDec) { nofralloc - mtspr 0x16, r3 + mtdec newDec blr - // clang-format on } /* 80339CF8-80339D00 -00001 0008+00 0/0 0/0 0/0 .text PPCSync */ -asm void PPCSync() { - // clang-format off +asm void PPCSync(void) { nofralloc sc blr - // clang-format on } /* 80339D00-80339D14 334640 0014+00 0/0 7/7 0/0 .text PPCHalt */ asm void PPCHalt(void) { - // clang-format off nofralloc sync + _spin: nop li r3, 0 nop b _spin - // clang-format on } /* 80339D14-80339D1C -00001 0008+00 0/0 0/0 0/0 .text PPCMtmmcr0 */ -asm void PPCMtmmcr0() { - // clang-format off +asm void PPCMtmmcr0(register u32 newMmcr0) { nofralloc - mtspr 0x3b8, r3 + mtspr MMCR0, newMmcr0 blr - // clang-format on } /* 80339D1C-80339D24 -00001 0008+00 0/0 0/0 0/0 .text PPCMtmmcr1 */ -asm void PPCMtmmcr1() { - // clang-format off +asm void PPCMtmmcr1(register u32 newMmcr1) { nofralloc - mtspr 0x3bc, r3 + mtspr MMCR1, newMmcr1 blr - // clang-format on } /* 80339D24-80339D2C -00001 0008+00 0/0 0/0 0/0 .text PPCMtpmc1 */ -asm void PPCMtpmc1() { - // clang-format off +asm void PPCMtpmc1(register u32 newPmc1) { nofralloc - mtspr 0x3b9, r3 + mtspr PMC1, newPmc1 blr - // clang-format on } /* 80339D2C-80339D34 -00001 0008+00 0/0 0/0 0/0 .text PPCMtpmc2 */ -asm void PPCMtpmc2() { - // clang-format off +asm void PPCMtpmc2(register u32 newPmc2) { nofralloc - mtspr 0x3ba, r3 + mtspr PMC2, newPmc2 blr - // clang-format on } /* 80339D34-80339D3C -00001 0008+00 0/0 0/0 0/0 .text PPCMtpmc3 */ -asm void PPCMtpmc3() { - // clang-format off +asm void PPCMtpmc3(register u32 newPmc3) { nofralloc - mtspr 0x3bd, r3 + mtspr PMC3, newPmc3 blr - // clang-format on } /* 80339D3C-80339D44 -00001 0008+00 0/0 0/0 0/0 .text PPCMtpmc4 */ -asm void PPCMtpmc4() { - // clang-format off +asm void PPCMtpmc4(register u32 newPmc4) { nofralloc - mtspr 0x3be, r3 + mtspr PMC4, newPmc4 blr - // clang-format on } /* 80339D44-80339D64 334684 0020+00 0/0 2/2 0/0 .text PPCMffpscr */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm u32 PPCMffpscr() { - nofralloc -#include "asm/dolphin/base/PPCArch/PPCMffpscr.s" +u32 PPCMffpscr(void) { + union FpscrUnion m; + + asm { + mffs fp31 + stfd fp31, m.f; + } + + return m.u.fpscr; } -#pragma pop /* 80339D64-80339D8C 3346A4 0028+00 0/0 2/2 0/0 .text PPCMtfpscr */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void PPCMtfpscr() { - nofralloc -#include "asm/dolphin/base/PPCArch/PPCMtfpscr.s" +void PPCMtfpscr(register u32 newFPSCR) { + union FpscrUnion m; + + asm { + li r4, 0 + stw r4, m.u.fpscr_pad; + stw newFPSCR, m.u.fpscr + lfd fp31, m.f + mtfsf 0xff, fp31 + } } -#pragma pop /* 80339D8C-80339D94 -00001 0008+00 0/0 0/0 0/0 .text PPCMfhid2 */ -asm void PPCMfhid2() { - // clang-format off +asm u32 PPCMfhid2(void) { nofralloc - mfspr r3, 0x398 + mfspr r3, HID2 blr - // clang-format on } /* 80339D94-80339D9C -00001 0008+00 0/0 0/0 0/0 .text PPCMthid2 */ -asm void PPCMthid2() { - // clang-format off +asm void PPCMthid2(register u32 newhid2) { nofralloc - mtspr 0x398, r3 + mtspr HID2, newhid2 blr - // clang-format on } /* 80339D9C-80339DA4 -00001 0008+00 0/0 0/0 0/0 .text PPCMtwpar */ -asm void PPCMtwpar() { - // clang-format off +asm void PPCMtwpar(register u32 newwpar) { nofralloc - mtspr 0x399, r3 + mtspr WPAR, newwpar blr - // clang-format on } /* 80339DA4-80339DCC 3346E4 0028+00 0/0 1/1 0/0 .text PPCDisableSpeculation */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void PPCDisableSpeculation() { - nofralloc -#include "asm/dolphin/base/PPCArch/PPCDisableSpeculation.s" +void PPCDisableSpeculation(void) { + PPCMthid0(PPCMfhid0() | HID0_SPD); } -#pragma pop /* 80339DCC-80339DD4 -00001 0008+00 0/0 0/0 0/0 .text PPCSetFpNonIEEEMode */ asm void PPCSetFpNonIEEEMode() { - // clang-format off nofralloc - mtfsb1 0x1d + mtfsb1 4*7+1 blr - // clang-format on } +// clang-format on diff --git a/libs/dolphin/card/CARDBios.c b/libs/dolphin/card/CARDBios.c index c4c2bcada9..88d3da301b 100644 --- a/libs/dolphin/card/CARDBios.c +++ b/libs/dolphin/card/CARDBios.c @@ -3,160 +3,247 @@ // Translation Unit: CARDBios // -#include "dolphin/card/CARDBios.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/card/card.h" +#include "dolphin/dsp/dsp.h" +#include "dolphin/dvd/dvd.h" +#include "dolphin/exi/EXIBios.h" + +#include "dolphin/card/CARDPriv.h" // // Forward References: // - -void __CARDDefaultApiCallback(); -void __CARDSyncCallback(); -void __CARDExtHandler(); -void __CARDExiHandler(); -void __CARDTxHandler(); -void __CARDUnlockedHandler(); -void __CARDEnableInterrupt(); -void __CARDReadStatus(); -void __CARDReadVendorID(); -void __CARDClearStatus(); -static void TimeoutHandler(); -static void Retry(); -static void UnlockedCallback(); -void __CARDStart(); -void __CARDReadSegment(); -void __CARDWritePage(); -void __CARDEraseSector(); -void CARDInit(); -void __CARDGetFontEncode(); -void __CARDSetDiskID(); -void __CARDGetControlBlock(); -void __CARDPutControlBlock(); -void CARDFreeBlocks(); -void __CARDSync(); -static void OnReset(); -void CARDGetFastMode(); +static s32 OnReset(s32); +static void TimeoutHandler(OSAlarm* alarm, OSContext* context); +static s32 Retry(s32 chan); +static void UnlockedCallback(s32 chan, s32 result); // // External References: // -void OSRegisterVersion(); -void OSInitAlarm(); -void OSCreateAlarm(); -void OSSetAlarm(); -void OSCancelAlarm(); -void OSGetFontEncode(); -void OSDisableInterrupts(); -void OSRestoreInterrupts(); -void OSRegisterResetFunction(); -void OSInitThreadQueue(); -void OSSleepThread(); -void OSWakeupThread(); -void EXIImm(); -void EXIImmEx(); -void EXIDma(); -void EXISync(); -void EXISetExiCallback(); -void EXIProbe(); -void EXISelect(); -void EXIDeselect(); -void EXILock(); -void EXIUnlock(); void DSPInit(); -void __CARDGetFatBlock(); -void __CARDGetDirBlock(); -void CARDUnmount(); // // Declarations: // /* 80352A30-80352A34 34D370 0004+00 0/0 5/5 0/0 .text __CARDDefaultApiCallback */ -void __CARDDefaultApiCallback() { - /* empty function */ -} +void __CARDDefaultApiCallback(s32 chan, s32 result) {} /* ############################################################################################## */ /* 8044CDE0-8044CE00 079B00 0020+00 0/1 3/3 0/0 .bss __CARDDiskNone */ -extern u8 __CARDDiskNone[32]; -u8 __CARDDiskNone[32]; +DVDDiskID __CARDDiskNone; /* ############################################################################################## */ /* 8044CBC0-8044CDE0 0798E0 0220+00 16/16 27/27 0/0 .bss __CARDBlock */ -extern u8 __CARDBlock[544]; -u8 __CARDBlock[544]; +CARDControl __CARDBlock[2]; /* 80352A34-80352A68 34D374 0034+00 0/0 7/7 0/0 .text __CARDSyncCallback */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __CARDSyncCallback() { - nofralloc -#include "asm/dolphin/card/CARDBios/__CARDSyncCallback.s" +void __CARDSyncCallback(s32 chan, s32 result) { + OSWakeupThread(&__CARDBlock[chan].threadQueue); } -#pragma pop /* 80352A68-80352B40 34D3A8 00D8+00 0/0 1/1 0/0 .text __CARDExtHandler */ +// needs compiler epilogue patch +#ifdef NONMATCHING +void __CARDExtHandler(s32 chan, OSContext* context) { + CARDControl* card; + CARDCallback callback; + + card = &__CARDBlock[chan]; + if (card->attached) { + card->attached = FALSE; + EXISetExiCallback(chan, 0); + OSCancelAlarm(&card->alarm); + callback = card->exiCallback; + + if (callback) { + card->exiCallback = 0; + callback(chan, CARD_RESULT_NOCARD); + } + + if (card->result != CARD_RESULT_BUSY) { + card->result = CARD_RESULT_NOCARD; + } + + callback = card->extCallback; + if (callback && CARD_MAX_MOUNT_STEP <= card->mountStep) { + card->extCallback = 0; + callback(chan, CARD_RESULT_NOCARD); + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __CARDExtHandler() { +asm void __CARDExtHandler(s32 chan, OSContext* context) { nofralloc #include "asm/dolphin/card/CARDBios/__CARDExtHandler.s" } #pragma pop +#endif /* 80352B40-80352C58 34D480 0118+00 0/0 1/1 0/0 .text __CARDExiHandler */ +// needs compiler epilogue patch +#ifdef NONMATCHING +void __CARDExiHandler(s32 chan, OSContext* context) { + CARDControl* card; + CARDCallback callback; + u8 status; + s32 result; + + card = &__CARDBlock[chan]; + + OSCancelAlarm(&card->alarm); + + if (!card->attached) { + return; + } + + if (!EXILock(chan, 0, 0)) { + result = CARD_RESULT_FATAL_ERROR; + goto fatal; + } + + if ((result = __CARDReadStatus(chan, &status)) < 0 || (result = __CARDClearStatus(chan)) < 0) { + goto error; + } + + if ((result = (status & 0x18) ? CARD_RESULT_IOERROR : CARD_RESULT_READY) == + CARD_RESULT_IOERROR && + --card->retry > 0) { + result = Retry(chan); + if (result >= 0) { + return; + } + goto fatal; + } + +error: + EXIUnlock(chan); + +fatal: + callback = card->exiCallback; + if (callback) { + card->exiCallback = 0; + callback(chan, result); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __CARDExiHandler() { +asm void __CARDExiHandler(s32 chan, OSContext* context) { nofralloc #include "asm/dolphin/card/CARDBios/__CARDExiHandler.s" } #pragma pop +#endif /* 80352C58-80352D00 34D598 00A8+00 3/3 0/0 0/0 .text __CARDTxHandler */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __CARDTxHandler() { - nofralloc -#include "asm/dolphin/card/CARDBios/__CARDTxHandler.s" +void __CARDTxHandler(s32 chan, OSContext* context) { + CARDControl* card; + CARDCallback callback; + BOOL err; + + card = &__CARDBlock[chan]; + err = !EXIDeselect(chan); + EXIUnlock(chan); + callback = card->txCallback; + + if (callback) { + card->txCallback = 0; + callback(chan, (!err && EXIProbe(chan)) ? CARD_RESULT_READY : CARD_RESULT_NOCARD); + } } -#pragma pop /* 80352D00-80352D84 34D640 0084+00 2/2 2/2 0/0 .text __CARDUnlockedHandler */ +// needs compiler epilogue patch +#ifdef NONMATCHING +void __CARDUnlockedHandler(s32 chan, OSContext* context) { + CARDControl* card; + CARDCallback callback; + + card = &__CARDBlock[chan]; + callback = card->unlockCallback; + if (callback) { + card->unlockCallback = 0; + callback(chan, EXIProbe(chan) ? CARD_RESULT_UNLOCKED : CARD_RESULT_NOCARD); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __CARDUnlockedHandler() { +asm void __CARDUnlockedHandler(s32 chan, OSContext* context) { nofralloc #include "asm/dolphin/card/CARDBios/__CARDUnlockedHandler.s" } #pragma pop +#endif /* 80352D84-80352E44 34D6C4 00C0+00 0/0 1/1 0/0 .text __CARDEnableInterrupt */ +// needs compiler epilogue patch +#ifdef NONMATCHING +s32 __CARDEnableInterrupt(s32 chan, BOOL enable) { + BOOL err; + u32 cmd; + + if (!EXISelect(chan, 0, 4)) { + return CARD_RESULT_NOCARD; + } + + cmd = enable ? 0x81010000 : 0x81000000; + err = FALSE; + err |= !EXIImm(chan, &cmd, 2, 1, NULL); + err |= !EXISync(chan); + err |= !EXIDeselect(chan); + return err ? CARD_RESULT_NOCARD : CARD_RESULT_READY; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __CARDEnableInterrupt() { +asm s32 __CARDEnableInterrupt(s32 chan, BOOL enable) { nofralloc #include "asm/dolphin/card/CARDBios/__CARDEnableInterrupt.s" } #pragma pop +#endif /* 80352E44-80352F34 34D784 00F0+00 1/1 2/2 0/0 .text __CARDReadStatus */ +// needs compiler epilogue patch +#ifdef NONMATCHING +s32 __CARDReadStatus(s32 chan, u8* status) { + BOOL err; + u32 cmd; + + if (!EXISelect(chan, 0, 4)) { + return CARD_RESULT_NOCARD; + } + + cmd = 0x83000000; + err = FALSE; + err |= !EXIImm(chan, &cmd, 2, 1, NULL); + err |= !EXISync(chan); + err |= !EXIImm(chan, status, 1, 0, NULL); + err |= !EXISync(chan); + err |= !EXIDeselect(chan); + return err ? CARD_RESULT_NOCARD : CARD_RESULT_READY; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __CARDReadStatus() { +asm s32 __CARDReadStatus(s32 chan, u8* status) { nofralloc #include "asm/dolphin/card/CARDBios/__CARDReadStatus.s" } #pragma pop +#endif /* 80352F34-80353024 34D874 00F0+00 0/0 1/1 0/0 .text __CARDReadVendorID */ #pragma push @@ -169,80 +256,243 @@ asm void __CARDReadVendorID() { #pragma pop /* 80353024-803530D0 34D964 00AC+00 1/1 1/1 0/0 .text __CARDClearStatus */ +// needs compiler epilogue patch +#ifdef NONMATCHING +s32 __CARDClearStatus(s32 chan) { + BOOL err; + u32 cmd; + + if (!EXISelect(chan, 0, 4)) { + return CARD_RESULT_NOCARD; + } + + cmd = 0x89000000; + err = FALSE; + err |= !EXIImm(chan, &cmd, 1, 1, 0); + err |= !EXISync(chan); + err |= !EXIDeselect(chan); + + return err ? CARD_RESULT_NOCARD : CARD_RESULT_READY; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __CARDClearStatus() { +asm s32 __CARDClearStatus(s32 chan) { nofralloc #include "asm/dolphin/card/CARDBios/__CARDClearStatus.s" } #pragma pop +#endif /* 803530D0-80353174 34DA10 00A4+00 2/2 0/0 0/0 .text TimeoutHandler */ +// needs compiler epilogue patch +#ifdef NONMATCHING +static void TimeoutHandler(OSAlarm* alarm, OSContext* context) { + s32 chan; + CARDControl* card; + CARDCallback callback; + for (chan = 0; chan < 2; ++chan) { + card = &__CARDBlock[chan]; + if (alarm == &card->alarm) { + break; + } + } + + if (!card->attached) { + return; + } + + EXISetExiCallback(chan, NULL); + callback = card->exiCallback; + if (callback) { + card->exiCallback = 0; + callback(chan, CARD_RESULT_IOERROR); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void TimeoutHandler() { +static asm void TimeoutHandler(OSAlarm* alarm, OSContext* context) { nofralloc #include "asm/dolphin/card/CARDBios/TimeoutHandler.s" } #pragma pop +#endif /* 80353174-80353414 34DAB4 02A0+00 2/2 0/0 0/0 .text Retry */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void Retry() { +static asm s32 Retry(s32 chan) { nofralloc #include "asm/dolphin/card/CARDBios/Retry.s" } #pragma pop /* 80353414-80353524 34DD54 0110+00 1/1 0/0 0/0 .text UnlockedCallback */ +// needs compiler epilogue patch +#ifdef NONMATCHING +static void UnlockedCallback(s32 chan, s32 result) { + CARDCallback callback; + CARDControl* card; + + card = &__CARDBlock[chan]; + if (result >= 0) { + card->unlockCallback = UnlockedCallback; + if (!EXILock(chan, 0, __CARDUnlockedHandler)) { + result = CARD_RESULT_READY; + } else { + card->unlockCallback = 0; + result = Retry(chan); + } + } + + if (result < 0) { + switch (card->cmd[0]) { + case 0x52: + callback = card->txCallback; + if (callback) { + card->txCallback = 0; + callback(chan, result); + } + + break; + case 0xF2: + case 0xF4: + case 0xF1: + callback = card->exiCallback; + if (callback) { + card->exiCallback = 0; + callback(chan, result); + } + break; + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void UnlockedCallback() { +static asm void UnlockedCallback(s32 chan, s32 result) { nofralloc #include "asm/dolphin/card/CARDBios/UnlockedCallback.s" } #pragma pop +#endif /* 80353524-80353748 34DE64 0224+00 3/3 0/0 0/0 .text __CARDStart */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __CARDStart() { +asm s32 __CARDStart(s32 chan, CARDCallback txCallback, CARDCallback exiCallback) { nofralloc #include "asm/dolphin/card/CARDBios/__CARDStart.s" } #pragma pop +#define AD1(x) ((u8)(((x) >> 17) & 0x7f)) +#define AD1EX(x) ((u8)(AD1(x) | 0x80)); +#define AD2(x) ((u8)(((x) >> 9) & 0xff)) +#define AD3(x) ((u8)(((x) >> 7) & 0x03)) +#define BA(x) ((u8)((x)&0x7f)) + /* 80353748-8035387C 34E088 0134+00 0/0 2/2 0/0 .text __CARDReadSegment */ +// needs compiler epilogue patch +#ifdef NONMATCHING +s32 __CARDReadSegment(s32 chan, CARDCallback callback) { + CARDControl* card; + s32 result; + + card = &__CARDBlock[chan]; + card->cmd[0] = 0x52; + card->cmd[1] = AD1(card->addr); + card->cmd[2] = AD2(card->addr); + card->cmd[3] = AD3(card->addr); + card->cmd[4] = BA(card->addr); + card->cmdlen = 5; + card->mode = 0; + card->retry = 0; + + result = __CARDStart(chan, callback, 0); + if (result == CARD_RESULT_BUSY) { + result = CARD_RESULT_READY; + } else if (result >= 0) { + if (!EXIImmEx(chan, card->cmd, card->cmdlen, 1) || + !EXIImmEx(chan, (u8*)card->workArea + sizeof(CARDID), card->latency, + 1) || // XXX use DMA if possible + !EXIDma(chan, card->buffer, 512, card->mode, __CARDTxHandler)) { + card->txCallback = 0; + EXIDeselect(chan); + EXIUnlock(chan); + result = CARD_RESULT_NOCARD; + } else { + result = CARD_RESULT_READY; + } + } + return result; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __CARDReadSegment() { +asm s32 __CARDReadSegment(s32 chan, CARDCallback callback) { nofralloc #include "asm/dolphin/card/CARDBios/__CARDReadSegment.s" } #pragma pop +#endif /* 8035387C-803539B8 34E1BC 013C+00 0/0 2/2 0/0 .text __CARDWritePage */ +// needs compiler epilogue patch +#ifdef NONMATCH +s32 __CARDWritePage(s32 chan, CARDCallback callback) { + CARDControl* card; + s32 result; + + card = &__CARDBlock[chan]; + card->cmd[0] = 0xF2; + card->cmd[1] = AD1(card->addr); + card->cmd[2] = AD2(card->addr); + card->cmd[3] = AD3(card->addr); + card->cmd[4] = BA(card->addr); + card->cmdlen = 5; + card->mode = 1; + card->retry = 3; + + result = __CARDStart(chan, 0, callback); + if (result == CARD_RESULT_BUSY) { + result = CARD_RESULT_READY; + } else if (result >= 0) { + if (!EXIImmEx(chan, card->cmd, card->cmdlen, 1) || + !EXIDma(chan, card->buffer, 128, card->mode, __CARDTxHandler)) { + card->exiCallback = 0; + EXIDeselect(chan); + EXIUnlock(chan); + result = CARD_RESULT_NOCARD; + } else { + result = CARD_RESULT_READY; + } + } + return result; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __CARDWritePage() { +asm s32 __CARDWritePage(s32 chan, CARDCallback callback) { nofralloc #include "asm/dolphin/card/CARDBios/__CARDWritePage.s" } #pragma pop +#endif /* 803539B8-80353AC8 34E2F8 0110+00 0/0 6/6 0/0 .text __CARDEraseSector */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __CARDEraseSector() { +asm s32 __CARDEraseSector(s32 chan, u32 addr, CARDCallback callback) { nofralloc #include "asm/dolphin/card/CARDBios/__CARDEraseSector.s" } @@ -250,78 +500,120 @@ asm void __CARDEraseSector() { /* ############################################################################################## */ /* 803D1E38-803D1E80 02EF58 0046+02 1/0 0/0 0/0 .data @1 */ -SECTION_DATA static char lit_1[] = "<< Dolphin SDK - CARD\trelease build: Apr 5 2004 04:15:35 (0x2301) >>"; +SECTION_DATA static char lit_1[] = + "<< Dolphin SDK - CARD\trelease build: Apr 5 2004 04:15:35 (0x2301) >>"; /* 803D1E80-803D1EA0 -00001 0010+10 1/1 0/0 0/0 .data ResetFunctionInfo */ -SECTION_DATA static void* ResetFunctionInfo[4 + 4 /* padding */] = { - (void*)OnReset, - (void*)0x0000007F, - (void*)NULL, - (void*)NULL, - /* padding */ - NULL, - NULL, +SECTION_DATA static OSResetFunctionInfo ResetFunctionInfo = { + OnReset, + 127, NULL, NULL, }; /* 80450A60-80450A68 -00001 0004+04 1/1 0/0 0/0 .sdata __CARDVersion */ -SECTION_SDATA static void* __CARDVersion[1 + 1 /* padding */] = { - (void*)&lit_1, - /* padding */ - NULL, -}; +SECTION_SDATA static const char* __CARDVersion = lit_1; /* 80451918-80451920 -00001 0004+04 3/3 0/0 0/0 .sbss None */ /* 80451918 0002+00 data_80451918 __CARDEncode */ +static u16 __CARDEncode; + /* 8045191A 0002+00 data_8045191A __CARDFastMode */ -static u8 struct_80451918[4 + 4 /* padding */]; +static u16 __CARDFastMode; /* 80353AC8-80353B74 34E408 00AC+00 0/0 1/1 0/0 .text CARDInit */ +// needs compiler epilogue patch +#ifdef NONMATCHING +void CARDInit(void) { + int chan; + + if (__CARDBlock[0].diskID && __CARDBlock[1].diskID) { + return; + } + + __CARDEncode = OSGetFontEncode(); + + OSRegisterVersion(__CARDVersion); + + DSPInit(); + OSInitAlarm(); + + for (chan = 0; chan < 2; ++chan) { + CARDControl* card = &__CARDBlock[chan]; + + card->result = CARD_RESULT_NOCARD; + OSInitThreadQueue(&card->threadQueue); + OSCreateAlarm(&card->alarm); + } + __CARDSetDiskID((DVDDiskID*)OSPhysicalToCached(0x0)); + + OSRegisterResetFunction(&ResetFunctionInfo); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void CARDInit() { +asm void CARDInit(void) { nofralloc #include "asm/dolphin/card/CARDBios/CARDInit.s" } #pragma pop +#endif /* 80353B74-80353B7C 34E4B4 0008+00 0/0 2/2 0/0 .text __CARDGetFontEncode */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __CARDGetFontEncode() { - nofralloc -#include "asm/dolphin/card/CARDBios/__CARDGetFontEncode.s" +u16 __CARDGetFontEncode(void) { + return __CARDEncode; } -#pragma pop /* 80353B7C-80353BB4 34E4BC 0038+00 1/1 0/0 0/0 .text __CARDSetDiskID */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __CARDSetDiskID() { - nofralloc -#include "asm/dolphin/card/CARDBios/__CARDSetDiskID.s" +void __CARDSetDiskID(const DVDDiskID* id) { + __CARDBlock[0].diskID = id ? id : &__CARDDiskNone; + __CARDBlock[1].diskID = id ? id : &__CARDDiskNone; } -#pragma pop /* 80353BB4-80353C6C 34E4F4 00B8+00 1/1 10/10 0/0 .text __CARDGetControlBlock */ +// needs compiler epilogue patch +#ifdef NONMATCHING +s32 __CARDGetControlBlock(s32 chan, CARDControl** pcard) { + BOOL enabled; + s32 result; + CARDControl* card; + + card = &__CARDBlock[chan]; + if (chan < 0 || chan >= 2 || card->diskID == NULL) { + return CARD_RESULT_FATAL_ERROR; + } + + enabled = OSDisableInterrupts(); + if (!card->attached) { + result = CARD_RESULT_NOCARD; + } else if (card->result == CARD_RESULT_BUSY) { + result = CARD_RESULT_BUSY; + } else { + card->result = CARD_RESULT_BUSY; + result = CARD_RESULT_READY; + card->apiCallback = 0; + *pcard = card; + } + OSRestoreInterrupts(enabled); + return result; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __CARDGetControlBlock() { +asm s32 __CARDGetControlBlock(s32 chan, CARDControl** pcard) { nofralloc #include "asm/dolphin/card/CARDBios/__CARDGetControlBlock.s" } #pragma pop +#endif /* 80353C6C-80353CD0 34E5AC 0064+00 0/0 24/24 0/0 .text __CARDPutControlBlock */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __CARDPutControlBlock() { +asm s32 __CARDPutControlBlock(CARDControl* card, s32 result) { nofralloc #include "asm/dolphin/card/CARDBios/__CARDPutControlBlock.s" } @@ -331,7 +623,7 @@ asm void __CARDPutControlBlock() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void CARDFreeBlocks() { +asm s32 CARDFreeBlocks(s32 chan, s32* byteNotUsed, s32* filesNotUsed) { nofralloc #include "asm/dolphin/card/CARDBios/CARDFreeBlocks.s" } @@ -341,28 +633,28 @@ asm void CARDFreeBlocks() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __CARDSync() { +asm s32 __CARDSync(s32 chan) { nofralloc #include "asm/dolphin/card/CARDBios/__CARDSync.s" } #pragma pop /* 80353EB8-80353F08 34E7F8 0050+00 1/0 0/0 0/0 .text OnReset */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void OnReset() { - nofralloc -#include "asm/dolphin/card/CARDBios/OnReset.s" +static s32 OnReset(s32 f) { + if (!f) { + if (CARDUnmount(0) == CARD_RESULT_BUSY || CARDUnmount(1) == CARD_RESULT_BUSY) { + return FALSE; + } + } + + return TRUE; } -#pragma pop /* 80353F08-80353F24 34E848 001C+00 0/0 1/1 0/0 .text CARDGetFastMode */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void CARDGetFastMode() { - nofralloc -#include "asm/dolphin/card/CARDBios/CARDGetFastMode.s" +BOOL CARDGetFastMode(void) { + if (__CARDFastMode != 0) { + return TRUE; + } + + return FALSE; } -#pragma pop diff --git a/libs/dolphin/card/CARDBlock.c b/libs/dolphin/card/CARDBlock.c index 9fd492ece3..b733a54c2d 100644 --- a/libs/dolphin/card/CARDBlock.c +++ b/libs/dolphin/card/CARDBlock.c @@ -4,80 +4,152 @@ // #include "dolphin/card/CARDBlock.h" +#include "MSL_C/MSL_Common/Src/string.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/card/card.h" +#include "dolphin/dsp/dsp.h" +#include "dolphin/dvd/dvd.h" + +#include "dolphin/card/CARDPriv.h" // // Forward References: // -void __CARDGetFatBlock(); -static void WriteCallback(); -static void EraseCallback(); -void __CARDAllocBlock(); -void __CARDUpdateFatBlock(); - -// -// External References: -// - -SECTION_INIT void memcpy(); -void DCStoreRange(); -void __CARDEraseSector(); -void __CARDPutControlBlock(); -void __CARDWrite(); -void __CARDCheckSum(); -extern u8 __CARDBlock[544]; +static void WriteCallback(s32 chan, s32 result); +static void EraseCallback(s32 chan, s32 result); // // Declarations: // /* 80355414-8035541C 34FD54 0008+00 0/0 5/5 0/0 .text __CARDGetFatBlock */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __CARDGetFatBlock() { - nofralloc -#include "asm/dolphin/card/CARDBlock/__CARDGetFatBlock.s" +u16* __CARDGetFatBlock(CARDControl* card) { + return card->currentFat; } -#pragma pop /* 8035541C-803554F0 34FD5C 00D4+00 1/1 0/0 0/0 .text WriteCallback */ +// needs compiler epilogue patch +#ifdef NONMATCHING +static void WriteCallback(s32 chan, s32 result) { + CARDControl* card; + CARDCallback callback; + u16* fat; + u16* fatBack; + + card = &__CARDBlock[chan]; + + if (result >= 0) { + fat = (u16*)((u8*)card->workArea + 0x6000); + fatBack = (u16*)((u8*)card->workArea + 0x8000); + + if (card->currentFat == fat) { + card->currentFat = fatBack; + memcpy(fatBack, fat, 0x2000); + } else { + card->currentFat = fat; + memcpy(fat, fatBack, 0x2000); + } + } + + if (card->apiCallback == NULL) { + __CARDPutControlBlock(card, result); + } + + callback = card->eraseCallback; + if (callback) { + card->eraseCallback = NULL; + callback(chan, result); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void WriteCallback() { +static asm void WriteCallback(s32 chan, s32 result) { nofralloc #include "asm/dolphin/card/CARDBlock/WriteCallback.s" } #pragma pop +#endif /* 803554F0-803555B8 34FE30 00C8+00 1/1 0/0 0/0 .text EraseCallback */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void EraseCallback() { +static asm void EraseCallback(s32 chan, s32 result) { nofralloc #include "asm/dolphin/card/CARDBlock/EraseCallback.s" } #pragma pop /* 803555B8-803556D0 34FEF8 0118+00 0/0 1/1 0/0 .text __CARDAllocBlock */ +// needs compiler epilogue patch +#ifdef NONMATCHING +s32 __CARDAllocBlock(s32 chan, u32 cBlock, CARDCallback callback) { + CARDControl* card; + u16* fat; + u16 iBlock; + u16 startBlock; + u16 prevBlock; + u16 count; + + card = &__CARDBlock[chan]; + if (!card->attached) { + return CARD_RESULT_NOCARD; + } + + fat = __CARDGetFatBlock(card); + if (fat[3] < cBlock) { + return CARD_RESULT_INSSPACE; + } + + fat[3] -= cBlock; + startBlock = 0xFFFF; + iBlock = fat[4]; + count = 0; + while (0 < cBlock) { + if (card->cBlock - 5 < ++count) { + return CARD_RESULT_BROKEN; + } + + iBlock++; + if (!CARDIsValidBlockNo(card, iBlock)) { + iBlock = 5; + } + + if (fat[iBlock] == 0x0000u) { + if (startBlock == 0xFFFF) { + startBlock = iBlock; + } else { + fat[prevBlock] = iBlock; + } + prevBlock = iBlock; + fat[iBlock] = 0xFFFF; + --cBlock; + } + } + fat[4] = iBlock; + card->startBlock = startBlock; + + return __CARDUpdateFatBlock(chan, fat, callback); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __CARDAllocBlock() { +asm s32 __CARDAllocBlock(s32 chan, u32 cBlock, CARDCallback callback) { nofralloc #include "asm/dolphin/card/CARDBlock/__CARDAllocBlock.s" } #pragma pop +#endif /* 803556D0-8035577C 350010 00AC+00 1/1 1/1 0/0 .text __CARDUpdateFatBlock */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __CARDUpdateFatBlock() { +asm s32 __CARDUpdateFatBlock(s32 chan, u16* fat, CARDCallback callback) { nofralloc #include "asm/dolphin/card/CARDBlock/__CARDUpdateFatBlock.s" } diff --git a/libs/dolphin/card/CARDCheck.c b/libs/dolphin/card/CARDCheck.c index 12531f4116..43cbd129af 100644 --- a/libs/dolphin/card/CARDCheck.c +++ b/libs/dolphin/card/CARDCheck.c @@ -4,60 +4,59 @@ // #include "dolphin/card/CARDCheck.h" +#include "MSL_C/MSL_Common/Src/string.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/card/card.h" +#include "dolphin/dsp/dsp.h" +#include "dolphin/dvd/dvd.h" + +#include "dolphin/card/CARDPriv.h" // // Forward References: // -void __CARDCheckSum(); -static void VerifyID(); -static void VerifyDir(); -static void VerifyFAT(); -void __CARDVerify(); -static void CARDCheckExAsync(); -void CARDCheck(); +static s32 VerifyID(CARDControl* card); +static s32 VerifyDir(CARDControl* card, int* outCurrent); +static s32 VerifyFAT(CARDControl* card, int* outCurrent); // // External References: // -SECTION_INIT void memset(); -SECTION_INIT void memcpy(); -void OSDisableInterrupts(); -void OSRestoreInterrupts(); -void __OSLockSramEx(); -void __OSUnlockSramEx(); -void __CARDSyncCallback(); -void __CARDGetFontEncode(); -void __CARDGetControlBlock(); -void __CARDPutControlBlock(); -void __CARDSync(); -void __CARDUpdateFatBlock(); -void __CARDUpdateDir(); void __shr2i(); -extern u8 __CARDBlock[544]; // // Declarations: // /* 803559E0-80355B90 350320 01B0+00 0/0 3/3 0/0 .text __CARDCheckSum */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __CARDCheckSum() { - nofralloc -#include "asm/dolphin/card/CARDCheck/__CARDCheckSum.s" +void __CARDCheckSum(void* ptr, int length, u16* checksum, u16* checksumInv) { + u16* p; + int i; + + length /= sizeof(u16); + *checksum = *checksumInv = 0; + + for (i = 0, p = ptr; i < length; i++, p++) { + *checksum += *p; + *checksumInv += ~*p; + } + + if (*checksum == 0xFFFF) { + *checksum = 0; + } + + if (*checksumInv == 0xFFFF) { + *checksumInv = 0; + } } -#pragma pop /* 80355B90-80355E14 3504D0 0284+00 2/2 0/0 0/0 .text VerifyID */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void VerifyID() { +static asm s32 VerifyID(CARDControl* card) { nofralloc #include "asm/dolphin/card/CARDCheck/VerifyID.s" } @@ -67,7 +66,7 @@ static asm void VerifyID() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void VerifyDir() { +static asm s32 VerifyDir(CARDControl* card, int* outCurrent) { nofralloc #include "asm/dolphin/card/CARDCheck/VerifyDir.s" } @@ -77,38 +76,200 @@ static asm void VerifyDir() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void VerifyFAT() { +static asm s32 VerifyFAT(CARDControl* card, int* outCurrent) { nofralloc #include "asm/dolphin/card/CARDCheck/VerifyFAT.s" } #pragma pop /* 803562D8-80356364 350C18 008C+00 0/0 1/1 0/0 .text __CARDVerify */ +// needs compiler epilogue patch +#ifdef NONMATCHING +s32 __CARDVerify(CARDControl* card) { + s32 result; + int errors; + + result = VerifyID(card); + if (result < 0) { + return result; + } + + errors = VerifyDir(card, NULL); + errors += VerifyFAT(card, NULL); + switch (errors) { + case 0: + return CARD_RESULT_READY; + case 1: + return CARD_RESULT_BROKEN; + default: + return CARD_RESULT_BROKEN; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __CARDVerify() { +asm s32 __CARDVerify(CARDControl* card) { nofralloc #include "asm/dolphin/card/CARDCheck/__CARDVerify.s" } #pragma pop +#endif /* 80356364-803568F4 350CA4 0590+00 1/1 0/0 0/0 .text CARDCheckExAsync */ +#ifdef NONMATCHING +s32 CARDCheckExAsync(s32 chan, s32* xferBytes, CARDCallback callback) { + CARDControl* card; + CARDDir* dir[2]; + u16* fat[2]; + u16* map; + s32 result; + int errors; + int currentFat; + int currentDir; + s32 fileNo; + u16 iBlock; + u16 cBlock; + u16 cFree; + BOOL updateFat = FALSE; + BOOL updateDir = FALSE; + BOOL updateOrphan = FALSE; + + if (xferBytes) { + *xferBytes = 0; + } + + result = __CARDGetControlBlock(chan, &card); + if (result < 0) { + return result; + } + + result = VerifyID(card); + if (result < 0) { + return __CARDPutControlBlock(card, result); + } + + errors = VerifyDir(card, ¤tDir); + errors += VerifyFAT(card, ¤tFat); + if (1 < errors) { + return __CARDPutControlBlock(card, CARD_RESULT_BROKEN); + } + + dir[0] = (CARDDir*)((u8*)card->workArea + (1 + 0) * CARD_SYSTEM_BLOCK_SIZE); + dir[1] = (CARDDir*)((u8*)card->workArea + (1 + 1) * CARD_SYSTEM_BLOCK_SIZE); + fat[0] = (u16*)((u8*)card->workArea + (3 + 0) * CARD_SYSTEM_BLOCK_SIZE); + fat[1] = (u16*)((u8*)card->workArea + (3 + 1) * CARD_SYSTEM_BLOCK_SIZE); + + switch (errors) { + case 0: + break; + case 1: + if (!card->currentDir) { + card->currentDir = dir[currentDir]; + memcpy(dir[currentDir], dir[currentDir ^ 1], CARD_SYSTEM_BLOCK_SIZE); + updateDir = TRUE; + } else { + card->currentFat = fat[currentFat]; + memcpy(fat[currentFat], fat[currentFat ^ 1], CARD_SYSTEM_BLOCK_SIZE); + updateFat = TRUE; + } + break; + } + + map = fat[currentFat ^ 1]; + memset(map, 0, CARD_SYSTEM_BLOCK_SIZE); + + for (fileNo = 0; fileNo < CARD_MAX_FILE; fileNo++) { + CARDDir* ent; + + ent = &card->currentDir[fileNo]; + if (ent->gameName[0] == 0xff) { + continue; + } + + for (iBlock = ent->startBlock, cBlock = 0; iBlock != 0xFFFF && cBlock < ent->length; + iBlock = card->currentFat[iBlock], ++cBlock) { + if (!CARDIsValidBlockNo(card, iBlock) || 1 < ++map[iBlock]) { + return __CARDPutControlBlock(card, CARD_RESULT_BROKEN); + } + } + if (cBlock != ent->length || iBlock != 0xFFFF) { + return __CARDPutControlBlock(card, CARD_RESULT_BROKEN); + } + } + + cFree = 0; + for (iBlock = CARD_NUM_SYSTEM_BLOCK; iBlock < card->cBlock; iBlock++) { + u16 nextBlock; + + nextBlock = card->currentFat[iBlock]; + if (map[iBlock] == 0) { + if (nextBlock != CARD_FAT_AVAIL) { + card->currentFat[iBlock] = CARD_FAT_AVAIL; + updateOrphan = TRUE; + } + cFree++; + } else if (!CARDIsValidBlockNo(card, nextBlock) && nextBlock != 0xFFFF) { + return __CARDPutControlBlock(card, CARD_RESULT_BROKEN); + } + } + if (cFree != card->currentFat[CARD_FAT_FREEBLOCKS]) { + card->currentFat[CARD_FAT_FREEBLOCKS] = cFree; + updateOrphan = TRUE; + } + if (updateOrphan) { + __CARDCheckSum(&card->currentFat[CARD_FAT_CHECKCODE], CARD_SYSTEM_BLOCK_SIZE - sizeof(u32), + &card->currentFat[CARD_FAT_CHECKSUM], + &card->currentFat[CARD_FAT_CHECKSUMINV]); + } + + memcpy(fat[currentFat ^ 1], fat[currentFat], CARD_SYSTEM_BLOCK_SIZE); + + if (updateDir) { + if (xferBytes) { + *xferBytes = CARD_SYSTEM_BLOCK_SIZE; + } + return __CARDUpdateDir(chan, callback); + } + + if (updateFat | updateOrphan) { + if (xferBytes) { + *xferBytes = CARD_SYSTEM_BLOCK_SIZE; + } + return __CARDUpdateFatBlock(chan, card->currentFat, callback); + } + + __CARDPutControlBlock(card, CARD_RESULT_READY); + if (callback) { + BOOL enabled = OSDisableInterrupts(); + callback(chan, CARD_RESULT_READY); + OSRestoreInterrupts(enabled); + } + return CARD_RESULT_READY; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void CARDCheckExAsync() { +static asm s32 CARDCheckExAsync(s32 chan, s32* xferBytes, CARDCallback callback) { nofralloc #include "asm/dolphin/card/CARDCheck/CARDCheckExAsync.s" } #pragma pop +#endif /* 803568F4-80356948 351234 0054+00 0/0 2/2 0/0 .text CARDCheck */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void CARDCheck() { - nofralloc -#include "asm/dolphin/card/CARDCheck/CARDCheck.s" +s32 CARDCheck(s32 chan) { + s32 xferBytes; + + s32 result = CARDCheckExAsync(chan, &xferBytes, __CARDSyncCallback); + if (result >= 0) { + if (&xferBytes == NULL) { + return result; + } + + return __CARDSync(chan); + } + + return result; } -#pragma pop diff --git a/libs/dolphin/card/CARDCreate.c b/libs/dolphin/card/CARDCreate.c index 4b96229d48..01caf4025c 100644 --- a/libs/dolphin/card/CARDCreate.c +++ b/libs/dolphin/card/CARDCreate.c @@ -4,69 +4,135 @@ // #include "dolphin/card/CARDCreate.h" +#include "MSL_C/MSL_Common/Src/mem.h" +#include "MSL_C/MSL_Common/Src/string.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/card/card.h" +#include "dolphin/dsp/dsp.h" +#include "dolphin/dvd/dvd.h" -// -// Forward References: -// +#include "dolphin/card/CARDPriv.h" -static void CreateCallbackFat(); -static void CARDCreateAsync(); -void CARDCreate(); - -// -// External References: -// - -SECTION_INIT void memcpy(); -void OSGetTime(); -void __CARDDefaultApiCallback(); -void __CARDSyncCallback(); -void __CARDGetControlBlock(); -void __CARDPutControlBlock(); -void __CARDSync(); -void __CARDGetFatBlock(); -void __CARDAllocBlock(); -void __CARDGetDirBlock(); -void __CARDUpdateDir(); -void __CARDCompareFileName(); -void __div2i(); -void memcmp(); -void strncpy(); -void strlen(); -extern u8 __CARDBlock[544]; - -// -// Declarations: -// +static void CreateCallbackFat(s32 chan, s32 result); /* 80358108-80358238 352A48 0130+00 1/1 0/0 0/0 .text CreateCallbackFat */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void CreateCallbackFat() { - nofralloc -#include "asm/dolphin/card/CARDCreate/CreateCallbackFat.s" +static void CreateCallbackFat(s32 chan, s32 result) { + CARDControl* card; + CARDDir* dir; + CARDDir* ent; + CARDCallback callback; + + card = &__CARDBlock[chan]; + callback = card->apiCallback; + card->apiCallback = 0; + if (result < 0) { + goto error; + } + + dir = __CARDGetDirBlock(card); + ent = &dir[card->freeNo]; + memcpy(ent->gameName, card->diskID->game_name, sizeof(ent->gameName)); + memcpy(ent->company, card->diskID->company, sizeof(ent->company)); + ent->permission = CARD_ATTR_PUBLIC; + ent->copyTimes = 0; + ent->startBlock = card->startBlock; + + ent->bannerFormat = 0; + ent->iconAddr = 0xFFFFFFFF; + ent->iconFormat = 0; + ent->iconSpeed = 0; + ent->commentAddr = 0xFFFFFFFF; + + CARDSetIconSpeed(ent, 0, CARD_STAT_SPEED_FAST); + + card->fileInfo->offset = 0; + card->fileInfo->iBlock = ent->startBlock; + + ent->time = (u32)OSTicksToSeconds(OSGetTime()); + result = __CARDUpdateDir(chan, callback); + if (result < 0) { + goto error; + } + return; + +error: + __CARDPutControlBlock(card, result); + if (callback) { + callback(chan, result); + } } -#pragma pop /* 80358238-80358458 352B78 0220+00 1/1 0/0 0/0 .text CARDCreateAsync */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void CARDCreateAsync() { - nofralloc -#include "asm/dolphin/card/CARDCreate/CARDCreateAsync.s" +s32 CARDCreateAsync(s32 chan, const char* fileName, u32 size, CARDFileInfo* fileInfo, + CARDCallback callback) { + CARDControl* card; + CARDDir* dir; + CARDDir* ent; + s32 result; + u16 fileNo; + u16 freeNo; + u16* fat; + + if (strlen(fileName) > (u32)CARD_FILENAME_MAX) { + return CARD_RESULT_NAMETOOLONG; + } + + result = __CARDGetControlBlock(chan, &card); + if (result < 0) { + return result; + } + + if (size <= 0 || (size % card->sectorSize) != 0) { + return CARD_RESULT_FATAL_ERROR; + } + + freeNo = (u16)-1; + dir = __CARDGetDirBlock(card); + for (fileNo = 0; fileNo < CARD_MAX_FILE; fileNo++) { + ent = &dir[fileNo]; + if (ent->gameName[0] == 0xff) { + if (freeNo == (u16)-1) { + freeNo = fileNo; + } + } else if (memcmp(ent->gameName, card->diskID->game_name, sizeof(ent->gameName)) == 0 && + memcmp(ent->company, card->diskID->company, sizeof(ent->company)) == 0 && + __CARDCompareFileName(ent, fileName)) { + return __CARDPutControlBlock(card, CARD_RESULT_EXIST); + } + } + + if (freeNo == (u16)-1) { + return __CARDPutControlBlock(card, CARD_RESULT_NOENT); + } + + fat = __CARDGetFatBlock(card); + if (card->sectorSize * fat[CARD_FAT_FREEBLOCKS] < size) { + return __CARDPutControlBlock(card, CARD_RESULT_INSSPACE); + } + + card->apiCallback = callback ? callback : __CARDDefaultApiCallback; + card->freeNo = freeNo; + ent = &dir[freeNo]; + ent->length = (u16)(size / card->sectorSize); + strncpy((char*)ent->fileName, fileName, CARD_FILENAME_MAX); + + card->fileInfo = fileInfo; + fileInfo->chan = chan; + fileInfo->fileNo = freeNo; + + result = __CARDAllocBlock(chan, size / card->sectorSize, CreateCallbackFat); + if (result < 0) { + return __CARDPutControlBlock(card, result); + } + return result; } -#pragma pop /* 80358458-803584A0 352D98 0048+00 0/0 1/1 0/0 .text CARDCreate */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void CARDCreate() { - nofralloc -#include "asm/dolphin/card/CARDCreate/CARDCreate.s" +s32 CARDCreate(s32 chan, const char* fileName, u32 size, CARDFileInfo* fileInfo) { + s32 result = CARDCreateAsync(chan, fileName, size, fileInfo, __CARDSyncCallback); + if (result < 0) { + return result; + } + + return __CARDSync(chan); } -#pragma pop diff --git a/libs/dolphin/card/CARDDir.c b/libs/dolphin/card/CARDDir.c index 0bd2900be9..94277558ef 100644 --- a/libs/dolphin/card/CARDDir.c +++ b/libs/dolphin/card/CARDDir.c @@ -4,70 +4,144 @@ // #include "dolphin/card/CARDDir.h" +#include "MSL_C/MSL_Common/Src/string.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/card/card.h" +#include "dolphin/dsp/dsp.h" +#include "dolphin/dvd/dvd.h" -// -// Forward References: -// +#include "dolphin/card/CARDPriv.h" -void __CARDGetDirBlock(); -static void WriteCallback(); -static void EraseCallback(); -void __CARDUpdateDir(); - -// -// External References: -// - -SECTION_INIT void memcpy(); -void DCStoreRange(); -void __CARDEraseSector(); -void __CARDPutControlBlock(); -void __CARDWrite(); -void __CARDCheckSum(); -extern u8 __CARDBlock[544]; +static void WriteCallback(s32 chan, s32 result); +static void EraseCallback(s32 chan, s32 result); // // Declarations: // /* 8035577C-80355784 3500BC 0008+00 0/0 10/10 0/0 .text __CARDGetDirBlock */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __CARDGetDirBlock() { - nofralloc -#include "asm/dolphin/card/CARDDir/__CARDGetDirBlock.s" +CARDDir* __CARDGetDirBlock(CARDControl* card) { + return card->currentDir; } -#pragma pop /* 80355784-80355854 3500C4 00D0+00 1/1 0/0 0/0 .text WriteCallback */ +// needs compiler epilogue patch +#ifdef NONMATCHING +static void WriteCallback(s32 chan, s32 result) { + CARDControl* card; + CARDCallback callback; + + card = &__CARDBlock[chan]; + if (0 <= result) { + CARDDir* dir0 = (CARDDir*)((u8*)card->workArea + 0x2000); + CARDDir* dir1 = (CARDDir*)((u8*)card->workArea + 0x4000); + + if (card->currentDir == dir0) { + card->currentDir = dir1; + memcpy(dir1, dir0, 0x2000); + } else { + card->currentDir = dir0; + memcpy(dir0, dir1, 0x2000); + } + } + +error: + if (card->apiCallback == 0) { + __CARDPutControlBlock(card, result); + } + callback = card->eraseCallback; + if (callback) { + card->eraseCallback = 0; + callback(chan, result); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void WriteCallback() { +static asm void WriteCallback(s32 chan, s32 result) { nofralloc #include "asm/dolphin/card/CARDDir/WriteCallback.s" } #pragma pop +#endif /* 80355854-8035591C 350194 00C8+00 1/1 0/0 0/0 .text EraseCallback */ +// needs compiler epilogue patch +#ifdef NONMATCHING +static void EraseCallback(s32 chan, s32 result) { + CARDControl* card; + CARDCallback callback; + CARDDir* dir; + u32 tmp[2]; + u32 addr; + + card = &__CARDBlock[chan]; + if (result < 0) { + goto error; + } + + dir = __CARDGetDirBlock(card); + addr = ((u32)dir - (u32)card->workArea) / 0x2000 * card->sectorSize; + result = __CARDWrite(chan, addr, 0x2000, dir, WriteCallback); + if (result < 0) { + goto error; + } + + return; + +error: + if (card->apiCallback == 0) { + __CARDPutControlBlock(card, result); + } + callback = card->eraseCallback; + if (callback) { + card->eraseCallback = 0; + callback(chan, result); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void EraseCallback() { +static asm void EraseCallback(s32 chan, s32 result) { nofralloc #include "asm/dolphin/card/CARDDir/EraseCallback.s" } #pragma pop +#endif /* 8035591C-803559E0 35025C 00C4+00 0/0 4/4 0/0 .text __CARDUpdateDir */ +#ifdef NONMATCHING +s32 __CARDUpdateDir(s32 chan, CARDCallback callback) { + CARDControl* card; + CARDDirCheck* check; + u32 tmp[2]; + u32 addr; + CARDDir* dir; + + card = &__CARDBlock[chan]; + if (!card->attached) { + return CARD_RESULT_NOCARD; + } + + dir = __CARDGetDirBlock(card); + check = __CARDGetDirCheck(dir); + ++check->checkCode; + __CARDCheckSum(dir, 0x2000 - sizeof(u32), &check->checkSum, &check->checkSumInv); + DCStoreRange(dir, 0x2000); + + card->eraseCallback = callback; + addr = ((u32)dir - (u32)card->workArea) / 0x2000 * card->sectorSize; + return __CARDEraseSector(chan, addr, EraseCallback); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __CARDUpdateDir() { +asm s32 __CARDUpdateDir(s32 chan, CARDCallback callback) { nofralloc #include "asm/dolphin/card/CARDDir/__CARDUpdateDir.s" } #pragma pop +#endif diff --git a/libs/dolphin/card/CARDFormat.c b/libs/dolphin/card/CARDFormat.c index b5c87f0dcb..dacd4b1b1f 100644 --- a/libs/dolphin/card/CARDFormat.c +++ b/libs/dolphin/card/CARDFormat.c @@ -4,71 +4,97 @@ // #include "dolphin/card/CARDFormat.h" +#include "MSL_C/MSL_Common/Src/string.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/card/card.h" +#include "dolphin/dsp/dsp.h" +#include "dolphin/dvd/dvd.h" + +#include "dolphin/card/CARDPriv.h" // // Forward References: // -static void FormatCallback(); -void __CARDFormatRegionAsync(); -void CARDFormat(); +static void FormatCallback(s32 chan, s32 result); // // External References: // -SECTION_INIT void memset(); -SECTION_INIT void memcpy(); -void DCStoreRange(); -void __OSLockSram(); -void __OSLockSramEx(); -void __OSUnlockSram(); -void __OSUnlockSramEx(); -void OSGetTime(); -void __CARDDefaultApiCallback(); -void __CARDSyncCallback(); -void __CARDEraseSector(); -void __CARDGetFontEncode(); -void __CARDGetControlBlock(); -void __CARDPutControlBlock(); -void __CARDSync(); -void __CARDWrite(); -void __CARDCheckSum(); void __shr2i(); -extern u8 __CARDBlock[544]; // // Declarations: // /* 80357484-803575C8 351DC4 0144+00 1/1 0/0 0/0 .text FormatCallback */ +// needs compiler epilogue patch +#ifdef NONMATCHING +static void FormatCallback(s32 chan, s32 result) { + CARDControl* card; + CARDCallback callback; + + card = &__CARDBlock[chan]; + if (result < 0) { + goto error; + } + + ++card->formatStep; + if (card->formatStep < CARD_NUM_SYSTEM_BLOCK) { + result = __CARDEraseSector(chan, (u32)card->sectorSize * card->formatStep, FormatCallback); + if (0 <= result) { + return; + } + } else if (card->formatStep < 2 * CARD_NUM_SYSTEM_BLOCK) { + int step = card->formatStep - CARD_NUM_SYSTEM_BLOCK; + result = __CARDWrite(chan, (u32)card->sectorSize * step, CARD_SYSTEM_BLOCK_SIZE, + (u8*)card->workArea + (CARD_SYSTEM_BLOCK_SIZE * step), FormatCallback); + if (result >= 0) { + return; + } + } else { + card->currentDir = (CARDDir*)((u8*)card->workArea + (1 + 0) * CARD_SYSTEM_BLOCK_SIZE); + memcpy(card->currentDir, (u8*)card->workArea + (1 + 1) * CARD_SYSTEM_BLOCK_SIZE, + CARD_SYSTEM_BLOCK_SIZE); + card->currentFat = (u16*)((u8*)card->workArea + (3 + 0) * CARD_SYSTEM_BLOCK_SIZE); + memcpy(card->currentFat, (u8*)card->workArea + (3 + 1) * CARD_SYSTEM_BLOCK_SIZE, + CARD_SYSTEM_BLOCK_SIZE); + } + +error: + callback = card->apiCallback; + card->apiCallback = 0; + __CARDPutControlBlock(card, result); + callback(chan, result); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void FormatCallback() { +static asm void FormatCallback(s32 chan, s32 result) { nofralloc #include "asm/dolphin/card/CARDFormat/FormatCallback.s" } #pragma pop +#endif /* 803575C8-80357C20 351F08 0658+00 1/1 0/0 0/0 .text __CARDFormatRegionAsync */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __CARDFormatRegionAsync() { +asm s32 __CARDFormatRegionAsync(s32 chan, u16 encode, CARDCallback callback) { nofralloc #include "asm/dolphin/card/CARDFormat/__CARDFormatRegionAsync.s" } #pragma pop /* 80357C20-80357C74 352560 0054+00 0/0 1/1 0/0 .text CARDFormat */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void CARDFormat() { - nofralloc -#include "asm/dolphin/card/CARDFormat/CARDFormat.s" +s32 CARDFormat(s32 chan) { + s32 result = __CARDFormatRegionAsync(chan, __CARDGetFontEncode(), __CARDSyncCallback); + if (result < 0) { + return result; + } + + return __CARDSync(chan); } -#pragma pop diff --git a/libs/dolphin/card/CARDMount.c b/libs/dolphin/card/CARDMount.c index 88cc8d4163..18ed0344e5 100644 --- a/libs/dolphin/card/CARDMount.c +++ b/libs/dolphin/card/CARDMount.c @@ -5,59 +5,22 @@ #include "dolphin/card/CARDMount.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/card/card.h" +#include "dolphin/dsp/dsp.h" +#include "dolphin/dvd/dvd.h" +#include "dolphin/exi/EXIBios.h" + +#include "dolphin/card/CARDPriv.h" + +u8 GameChoice : 0x800030E3; // // Forward References: // -static void IsCard(); -void CARDProbe(); -void CARDProbeEx(); -static void DoMount(); -void __CARDMountCallback(); -static void CARDMountAsync(); -void CARDMount(); -static void DoUnmount(); -void CARDUnmount(); - -// -// External References: -// - -void OSCancelAlarm(); -void DCInvalidateRange(); -void OSDisableInterrupts(); -void OSRestoreInterrupts(); -void __OSLockSramEx(); -void __OSUnlockSramEx(); -void EXISetExiCallback(); -void EXIProbe(); -void EXIProbeEx(); -void EXIAttach(); -void EXIDetach(); -void EXILock(); -void EXIUnlock(); -void EXIGetState(); -void EXIGetID(); -void __CARDDefaultApiCallback(); -void __CARDSyncCallback(); -void __CARDExtHandler(); -void __CARDExiHandler(); -void __CARDUnlockedHandler(); -void __CARDEnableInterrupt(); -void __CARDReadStatus(); -void __CARDReadVendorID(); -void __CARDClearStatus(); -void __CARDGetControlBlock(); -void __CARDPutControlBlock(); -void __CARDSync(); -void CARDGetFastMode(); -void __CARDUnlock(); -void __CARDRead(); -void __CARDVerify(); -extern u8 __CARDBlock[544]; -extern u8 struct_80450A70[8]; +static BOOL IsCard(u32 id); +static s32 DoMount(s32 chan); +static void DoUnmount(s32 chan, s32 result); // // Declarations: @@ -65,103 +28,290 @@ extern u8 struct_80450A70[8]; /* ############################################################################################## */ /* 803D2000-803D2020 02F120 0020+00 3/3 0/0 0/0 .data SectorSizeTable */ -SECTION_DATA static u8 SectorSizeTable[32] = { - 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +static u32 SectorSizeTable[8] = { + 8 * 1024, 16 * 1024, 32 * 1024, 64 * 1024, 128 * 1024, 256 * 1024, 0, 0, }; /* 80356948-80356A14 351288 00CC+00 2/2 0/0 0/0 .text IsCard */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void IsCard() { - nofralloc -#include "asm/dolphin/card/CARDMount/IsCard.s" +static BOOL IsCard(u32 id) { + u32 size; + s32 sectorSize; + if (id & (0xFFFF0000) && (id != 0x80000004 || __CARDVendorID == 0xFFFF)) { + return FALSE; + } + + if ((id & 3) != 0) { + return FALSE; + } + + size = id & 0xfc; + switch (size) { + case 4: + case 8: + case 16: + case 32: + case 64: + case 128: + break; + default: + return FALSE; + break; + } + + sectorSize = SectorSizeTable[(id & 0x00003800) >> 11]; + if (sectorSize == 0) { + return FALSE; + } + + if ((size * 1024 * 1024 / 8) / sectorSize < 8) { + return FALSE; + } + + return TRUE; } -#pragma pop /* 80356A14-80356A4C 351354 0038+00 0/0 1/1 0/0 .text CARDProbe */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void CARDProbe() { - nofralloc -#include "asm/dolphin/card/CARDMount/CARDProbe.s" +s32 CARDProbe(s32 chan) { + s32 result; + + if (GameChoice & 0x80) { + result = 0; + } else { + result = EXIProbe(chan); + } + + return result; } -#pragma pop /* 80356A4C-80356BC8 35138C 017C+00 0/0 1/1 0/0 .text CARDProbeEx */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void CARDProbeEx() { - nofralloc -#include "asm/dolphin/card/CARDMount/CARDProbeEx.s" +s32 CARDProbeEx(s32 chan, s32* memSize, s32* sectorSize) { + u32 id; + CARDControl* card; + BOOL enabled; + s32 result; + int probe; + + if (chan < 0 || 2 <= chan) { + return CARD_RESULT_FATAL_ERROR; + } + + if (GameChoice & 0x80) { + return CARD_RESULT_NOCARD; + } + + card = &__CARDBlock[chan]; + enabled = OSDisableInterrupts(); + + probe = EXIProbeEx(chan); + if (probe == -1) { + result = CARD_RESULT_NOCARD; + } else if (probe == 0) { + result = CARD_RESULT_BUSY; + } else if (card->attached) { + if (card->mountStep < 1) { + result = CARD_RESULT_BUSY; + } else { + if (memSize) { + *memSize = card->size; + } + if (sectorSize) { + *sectorSize = card->sectorSize; + } + result = CARD_RESULT_READY; + } + } else if ((EXIGetState(chan) & 8)) { + result = CARD_RESULT_WRONGDEVICE; + } else if (!EXIGetID(chan, 0, &id)) { + result = CARD_RESULT_BUSY; + } else if (IsCard(id)) { + if (memSize) { + *memSize = (s32)(id & 0xfc); + } + if (sectorSize) { + *sectorSize = SectorSizeTable[(id & 0x00003800) >> 11]; + } + result = CARD_RESULT_READY; + } else { + result = CARD_RESULT_WRONGDEVICE; + } + + OSRestoreInterrupts(enabled); + return result; } -#pragma pop /* ############################################################################################## */ /* 803D2020-803D2040 02F140 0020+00 1/1 0/0 0/0 .data LatencyTable */ -SECTION_DATA static u8 LatencyTable[32] = { - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, +static u32 LatencyTable[8] = { + 4, 8, 16, 32, 64, 128, 256, 512, }; /* 80356BC8-8035701C 351508 0454+00 2/2 0/0 0/0 .text DoMount */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void DoMount() { +static asm s32 DoMount(s32 chan) { nofralloc #include "asm/dolphin/card/CARDMount/DoMount.s" } #pragma pop /* 8035701C-80357154 35195C 0138+00 2/2 1/1 0/0 .text __CARDMountCallback */ +// needs compiler epilogue patch +#ifdef NONMATCHING +void __CARDMountCallback(s32 chan, s32 result) { + CARDControl* card; + CARDCallback callback; + + card = &__CARDBlock[chan]; + + switch (result) { + case CARD_RESULT_READY: + if (++card->mountStep < CARD_MAX_MOUNT_STEP) { + result = DoMount(chan); + if (0 <= result) { + return; + } + } else { + result = __CARDVerify(card); + } + break; + case CARD_RESULT_UNLOCKED: + card->unlockCallback = __CARDMountCallback; + if (!EXILock(chan, 0, __CARDUnlockedHandler)) { + return; + } + card->unlockCallback = 0; + + result = DoMount(chan); + if (0 <= result) { + return; + } + break; + case CARD_RESULT_IOERROR: + case CARD_RESULT_NOCARD: + DoUnmount(chan, result); + break; + } + + callback = card->apiCallback; + card->apiCallback = 0; + __CARDPutControlBlock(card, result); + callback(chan, result); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __CARDMountCallback() { +asm void __CARDMountCallback(s32 chan, s32 result) { nofralloc #include "asm/dolphin/card/CARDMount/__CARDMountCallback.s" } #pragma pop +#endif /* 80357154-803572F4 351A94 01A0+00 1/1 0/0 0/0 .text CARDMountAsync */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void CARDMountAsync() { - nofralloc -#include "asm/dolphin/card/CARDMount/CARDMountAsync.s" +s32 CARDMountAsync(s32 chan, void* workArea, CARDCallback detachCallback, + CARDCallback attachCallback) { + CARDControl* card; + BOOL enabled; + + if (chan < 0 || 2 <= chan) { + return CARD_RESULT_FATAL_ERROR; + } + + if (GameChoice & 0x80) { + return CARD_RESULT_NOCARD; + } + + card = &__CARDBlock[chan]; + + enabled = OSDisableInterrupts(); + if (card->result == CARD_RESULT_BUSY) { + OSRestoreInterrupts(enabled); + return CARD_RESULT_BUSY; + } + + if (!card->attached && (EXIGetState(chan) & 0x08)) { + OSRestoreInterrupts(enabled); + return CARD_RESULT_WRONGDEVICE; + } + + card->result = CARD_RESULT_BUSY; + card->workArea = workArea; + card->extCallback = detachCallback; + card->apiCallback = attachCallback ? attachCallback : __CARDDefaultApiCallback; + card->exiCallback = 0; + + if (!card->attached && !EXIAttach(chan, __CARDExtHandler)) { + card->result = CARD_RESULT_NOCARD; + OSRestoreInterrupts(enabled); + return CARD_RESULT_NOCARD; + } + + card->mountStep = 0; + card->attached = TRUE; + EXISetExiCallback(chan, 0); + OSCancelAlarm(&card->alarm); + + card->currentDir = 0; + card->currentFat = 0; + + OSRestoreInterrupts(enabled); + + card->unlockCallback = __CARDMountCallback; + if (!EXILock(chan, 0, __CARDUnlockedHandler)) { + return CARD_RESULT_READY; + } + card->unlockCallback = 0; + + return DoMount(chan); } -#pragma pop /* 803572F4-8035733C 351C34 0048+00 0/0 1/1 0/0 .text CARDMount */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void CARDMount() { - nofralloc -#include "asm/dolphin/card/CARDMount/CARDMount.s" +s32 CARDMount(s32 chan, void* workArea, CARDCallback attachCb) { + s32 result = CARDMountAsync(chan, workArea, attachCb, __CARDSyncCallback); + if (result < 0) { + return result; + } + + return __CARDSync(chan); } -#pragma pop /* 8035733C-803573D8 351C7C 009C+00 2/2 0/0 0/0 .text DoUnmount */ +// needs compiler epilogue patch +#ifdef NONMATCHING +static void DoUnmount(s32 chan, s32 result) { + CARDControl* card; + BOOL enabled; + + card = &__CARDBlock[chan]; + enabled = OSDisableInterrupts(); + if (card->attached) { + EXISetExiCallback(chan, 0); + EXIDetach(chan); + OSCancelAlarm(&card->alarm); + card->attached = FALSE; + card->result = result; + card->mountStep = 0; + } + OSRestoreInterrupts(enabled); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void DoUnmount() { +static asm void DoUnmount(s32 chan, s32 result) { nofralloc #include "asm/dolphin/card/CARDMount/DoUnmount.s" } #pragma pop +#endif /* 803573D8-80357484 351D18 00AC+00 0/0 2/2 0/0 .text CARDUnmount */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void CARDUnmount() { +asm s32 CARDUnmount(s32 chan) { nofralloc #include "asm/dolphin/card/CARDMount/CARDUnmount.s" } diff --git a/libs/dolphin/card/CARDNet.c b/libs/dolphin/card/CARDNet.c index 8c87a4acc4..1ce5bcf2c1 100644 --- a/libs/dolphin/card/CARDNet.c +++ b/libs/dolphin/card/CARDNet.c @@ -5,48 +5,40 @@ #include "dolphin/card/CARDNet.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/card/card.h" +#include "dolphin/dsp/dsp.h" +#include "dolphin/dvd/dvd.h" -// -// Forward References: -// +#include "dolphin/card/CARDPriv.h" -void CARDGetSerialNo(); -extern u8 struct_80450A70[8]; +/* 80450A70 0002+00 data_80450A70 __CARDVendorID */ +SECTION_SDATA u16 __CARDVendorID = 0xFFFF; -// -// External References: -// - -void __CARDGetControlBlock(); -void __CARDPutControlBlock(); - -// -// Declarations: -// +/* 80450A72 0006+00 data_80450A72 None */ +SECTION_SDATA u8 data_80450A72 = 0x1C; /* 80359158-8035921C 353A98 00C4+00 0/0 1/1 0/0 .text CARDGetSerialNo */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void CARDGetSerialNo() { - nofralloc -#include "asm/dolphin/card/CARDNet/CARDGetSerialNo.s" -} -#pragma pop +s32 CARDGetSerialNo(s32 chan, u64* serialNo) { + CARDControl* card; + CARDID* id; + int i; + u64 code; + s32 result; -/* ############################################################################################## */ -/* 80450A70-80450A78 -00001 0008+00 0/0 4/4 0/0 .sdata None */ -SECTION_SDATA extern u8 struct_80450A70[8]; -SECTION_SDATA u8 struct_80450A70[8] = { - /* 80450A70 0002+00 data_80450A70 __CARDVendorID */ - 0xFF, - 0xFF, - /* 80450A72 0006+00 data_80450A72 None */ - 0x1C, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, -}; + if (!(0 <= chan && chan < 2)) { + return CARD_RESULT_FATAL_ERROR; + } + + result = __CARDGetControlBlock(chan, &card); + if (result < 0) { + return result; + } + + id = (CARDID*)card->workArea; + for (code = 0, i = 0; i < sizeof(id->serial) / sizeof(u64); ++i) { + code ^= *(u64*)&id->serial[sizeof(u64) * i]; + } + *serialNo = code; + + return __CARDPutControlBlock(card, CARD_RESULT_READY); +} diff --git a/libs/dolphin/card/CARDOpen.c b/libs/dolphin/card/CARDOpen.c index 78b2264e9c..a492ad9ab2 100644 --- a/libs/dolphin/card/CARDOpen.c +++ b/libs/dolphin/card/CARDOpen.c @@ -4,60 +4,73 @@ // #include "dolphin/card/CARDOpen.h" +#include "MSL_C/MSL_Common/Src/mem.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/card/card.h" +#include "dolphin/dsp/dsp.h" +#include "dolphin/dvd/dvd.h" -// -// Forward References: -// - -void __CARDCompareFileName(); -void __CARDAccess(); -void __CARDIsWritable(); -void __CARDIsReadable(); -void CARDOpen(); -void CARDClose(); - -// -// External References: -// - -void __CARDGetControlBlock(); -void __CARDPutControlBlock(); -void __CARDGetDirBlock(); -void memcmp(); -extern u8 __CARDDiskNone[32]; -extern u8 struct_80450A70[8]; +#include "dolphin/card/CARDPriv.h" // // Declarations: // /* 80357C74-80357CDC 3525B4 0068+00 1/1 1/1 0/0 .text __CARDCompareFileName */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __CARDCompareFileName() { - nofralloc -#include "asm/dolphin/card/CARDOpen/__CARDCompareFileName.s" +BOOL __CARDCompareFileName(CARDDir* ent, const char* fileName) { + char* entName; + char c1; + char c2; + int n; + + entName = (char*)ent->fileName; + n = CARD_FILENAME_MAX; + while (0 <= --n) { + if ((c1 = *entName++) != (c2 = *fileName++)) { + return FALSE; + } else if (c2 == '\0') { + return TRUE; + } + } + + if (*fileName == '\0') { + return TRUE; + } + + return FALSE; } -#pragma pop /* 80357CDC-80357D70 35261C 0094+00 2/2 0/0 0/0 .text __CARDAccess */ +#ifdef NONMATCHING +s32 __CARDAccess(CARDControl* card, CARDDir* ent) { + if (ent->gameName[0] == 0xFF) { + return CARD_RESULT_NOFILE; + } + + if (card->diskID == &__CARDDiskNone || + (memcmp(ent->gameName, card->diskID->game_name, 4) == 0 && + memcmp(ent->company, card->diskID->company, 2) == 0)) { + return CARD_RESULT_READY; + } + + return CARD_RESULT_NOPERM; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __CARDAccess() { +asm s32 __CARDAccess(CARDControl* card, CARDDir* ent) { nofralloc #include "asm/dolphin/card/CARDOpen/__CARDAccess.s" } #pragma pop +#endif /* 80357D70-80357EA4 3526B0 0134+00 0/0 2/2 0/0 .text __CARDIsWritable */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __CARDIsWritable() { +asm s32 __CARDIsWritable(CARDControl* card, CARDDir* ent) { nofralloc #include "asm/dolphin/card/CARDOpen/__CARDIsWritable.s" } @@ -67,7 +80,7 @@ asm void __CARDIsWritable() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __CARDIsReadable() { +asm s32 __CARDIsReadable(CARDControl* card, CARDDir* ent) { nofralloc #include "asm/dolphin/card/CARDOpen/__CARDIsReadable.s" } @@ -77,18 +90,22 @@ asm void __CARDIsReadable() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void CARDOpen() { +asm s32 CARDOpen(s32 chan, const char* fileName, CARDFileInfo* fileInfo) { nofralloc #include "asm/dolphin/card/CARDOpen/CARDOpen.s" } #pragma pop /* 803580B4-80358108 3529F4 0054+00 0/0 3/3 0/0 .text CARDClose */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void CARDClose() { - nofralloc -#include "asm/dolphin/card/CARDOpen/CARDClose.s" +s32 CARDClose(CARDFileInfo* fileInfo) { + CARDControl* card; + s32 result; + + result = __CARDGetControlBlock(fileInfo->chan, &card); + if (result < 0) { + return result; + } + + fileInfo->chan = -1; + return __CARDPutControlBlock(card, CARD_RESULT_READY); } -#pragma pop diff --git a/libs/dolphin/card/CARDRdwr.c b/libs/dolphin/card/CARDRdwr.c index 5e2565a384..af9cb5f078 100644 --- a/libs/dolphin/card/CARDRdwr.c +++ b/libs/dolphin/card/CARDRdwr.c @@ -5,66 +5,108 @@ #include "dolphin/card/CARDRdwr.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/card/card.h" +#include "dolphin/dsp/dsp.h" +#include "dolphin/dvd/dvd.h" + +#include "dolphin/card/CARDPriv.h" // // Forward References: // -static void BlockReadCallback(); -void __CARDRead(); -static void BlockWriteCallback(); -void __CARDWrite(); - -// -// External References: -// - -void __CARDReadSegment(); -void __CARDWritePage(); -void __CARDPutControlBlock(); -extern u8 __CARDBlock[544]; +static void BlockReadCallback(s32 chan, s32 result); +static void BlockWriteCallback(s32 chan, s32 result); // // Declarations: // /* 80355184-80355260 34FAC4 00DC+00 1/1 0/0 0/0 .text BlockReadCallback */ +// needs compiler epilogue patch +#ifdef NONMATCHING +static void BlockReadCallback(s32 chan, s32 result) { + CARDControl* card; + CARDCallback callback; + + card = &__CARDBlock[chan]; + if (result < 0) { + goto error; + } + + card->xferred += CARD_SEG_SIZE; + + card->addr += CARD_SEG_SIZE; + (u8*)card->buffer += CARD_SEG_SIZE; + if (--card->repeat <= 0) { + goto error; + } + + result = __CARDReadSegment(chan, BlockReadCallback); + if (result < 0) { + goto error; + } + return; + +error: + if (card->apiCallback == 0) { + __CARDPutControlBlock(card, result); + } + callback = card->xferCallback; + if (callback) { + card->xferCallback = 0; + callback(chan, result); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void BlockReadCallback() { +static asm void BlockReadCallback(s32 chan, s32 result) { nofralloc #include "asm/dolphin/card/CARDRdwr/BlockReadCallback.s" } #pragma pop +#endif /* 80355260-803552C4 34FBA0 0064+00 0/0 3/3 0/0 .text __CARDRead */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __CARDRead() { - nofralloc -#include "asm/dolphin/card/CARDRdwr/__CARDRead.s" +s32 __CARDRead(s32 chan, u32 addr, s32 length, void* dst, CARDCallback callback) { + CARDControl* card; + card = &__CARDBlock[chan]; + if (!card->attached) { + return CARD_RESULT_NOCARD; + } + + card->xferCallback = callback; + card->repeat = (int)(length / CARD_SEG_SIZE); + card->addr = addr; + card->buffer = dst; + + return __CARDReadSegment(chan, BlockReadCallback); } -#pragma pop /* 803552C4-803553AC 34FC04 00E8+00 1/1 0/0 0/0 .text BlockWriteCallback */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void BlockWriteCallback() { +static asm void BlockWriteCallback(s32 chan, s32 result) { nofralloc #include "asm/dolphin/card/CARDRdwr/BlockWriteCallback.s" } #pragma pop /* 803553AC-80355414 34FCEC 0068+00 0/0 4/4 0/0 .text __CARDWrite */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __CARDWrite() { - nofralloc -#include "asm/dolphin/card/CARDRdwr/__CARDWrite.s" +s32 __CARDWrite(s32 chan, u32 addr, s32 length, void* dst, CARDCallback callback) { + CARDControl* card; + card = &__CARDBlock[chan]; + if (!card->attached) { + return CARD_RESULT_NOCARD; + } + + card->xferCallback = callback; + card->repeat = (int)(length / card->pageSize); + card->addr = addr; + card->buffer = dst; + + return __CARDWritePage(chan, BlockWriteCallback); } -#pragma pop diff --git a/libs/dolphin/card/CARDRead.c b/libs/dolphin/card/CARDRead.c index 3f6ae72bb9..0d8f13b2e8 100644 --- a/libs/dolphin/card/CARDRead.c +++ b/libs/dolphin/card/CARDRead.c @@ -5,73 +5,190 @@ #include "dolphin/card/CARDRead.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/card/card.h" +#include "dolphin/dsp/dsp.h" +#include "dolphin/dvd/dvd.h" + +#include "dolphin/card/CARDPriv.h" // // Forward References: // -void __CARDSeek(); -static void ReadCallback(); -static void CARDReadAsync(); -void CARDRead(); - -// -// External References: -// - -void DCInvalidateRange(); -void __CARDDefaultApiCallback(); -void __CARDSyncCallback(); -void __CARDGetControlBlock(); -void __CARDPutControlBlock(); -void __CARDSync(); -void __CARDRead(); -void __CARDGetFatBlock(); -void __CARDGetDirBlock(); -void __CARDIsReadable(); -extern u8 __CARDBlock[544]; +static void ReadCallback(s32 chan, s32 result); // // Declarations: // /* 803584A0-80358658 352DE0 01B8+00 1/1 1/1 0/0 .text __CARDSeek */ +// needs compiler epilogue patch +#ifdef NONMATCHING +s32 __CARDSeek(CARDFileInfo* fileInfo, s32 length, s32 offset, CARDControl** pcard) { + CARDControl* card; + CARDDir* dir; + CARDDir* ent; + s32 result; + u16* fat; + + result = __CARDGetControlBlock(fileInfo->chan, &card); + if (result < 0) { + return result; + } + + if (!CARDIsValidBlockNo(card, fileInfo->iBlock) || + card->cBlock * card->sectorSize <= fileInfo->offset) { + return __CARDPutControlBlock(card, CARD_RESULT_FATAL_ERROR); + } + + dir = __CARDGetDirBlock(card); + ent = &dir[fileInfo->fileNo]; + if (ent->length * card->sectorSize <= offset || + ent->length * card->sectorSize < offset + length) { + return __CARDPutControlBlock(card, CARD_RESULT_LIMIT); + } + + card->fileInfo = fileInfo; + fileInfo->length = length; + if (offset < fileInfo->offset) { + fileInfo->offset = 0; + fileInfo->iBlock = ent->startBlock; + if (!CARDIsValidBlockNo(card, fileInfo->iBlock)) { + return __CARDPutControlBlock(card, CARD_RESULT_BROKEN); + } + } + fat = __CARDGetFatBlock(card); + while (fileInfo->offset < TRUNC(offset, card->sectorSize)) { + fileInfo->offset += card->sectorSize; + fileInfo->iBlock = fat[fileInfo->iBlock]; + if (!CARDIsValidBlockNo(card, fileInfo->iBlock)) { + return __CARDPutControlBlock(card, CARD_RESULT_BROKEN); + } + } + + fileInfo->offset = offset; + + *pcard = card; + return CARD_RESULT_READY; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __CARDSeek() { +asm s32 __CARDSeek(CARDFileInfo* fileInfo, s32 length, s32 offset, CARDControl** pcard) { nofralloc #include "asm/dolphin/card/CARDRead/__CARDSeek.s" } #pragma pop +#endif /* 80358658-80358788 352F98 0130+00 1/1 0/0 0/0 .text ReadCallback */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void ReadCallback() { - nofralloc -#include "asm/dolphin/card/CARDRead/ReadCallback.s" +static void ReadCallback(s32 chan, s32 result) { + CARDControl* card; + CARDCallback callback; + u16* fat; + CARDFileInfo* fileInfo; + s32 length; + + card = &__CARDBlock[chan]; + if (result < 0) { + goto error; + } + + fileInfo = card->fileInfo; + if (fileInfo->length < 0) { + result = CARD_RESULT_CANCELED; + goto error; + } + + length = (s32)TRUNC(fileInfo->offset + card->sectorSize, card->sectorSize) - fileInfo->offset; + fileInfo->length -= length; + if (fileInfo->length <= 0) { + goto error; + } + + fat = __CARDGetFatBlock(card); + fileInfo->offset += length; + fileInfo->iBlock = fat[fileInfo->iBlock]; + if (!CARDIsValidBlockNo(card, fileInfo->iBlock)) { + result = CARD_RESULT_BROKEN; + goto error; + } + + result = __CARDRead(chan, card->sectorSize * (u32)fileInfo->iBlock, + (fileInfo->length < card->sectorSize) ? fileInfo->length : card->sectorSize, + card->buffer, ReadCallback); + if (result < 0) { + goto error; + } + + return; + +error: + callback = card->apiCallback; + card->apiCallback = 0; + __CARDPutControlBlock(card, result); + callback(chan, result); } -#pragma pop /* 80358788-803588CC 3530C8 0144+00 1/1 0/0 0/0 .text CARDReadAsync */ +#ifdef NONMATCHING +s32 CARDReadAsync(CARDFileInfo* fileInfo, void* buf, s32 length, s32 offset, + CARDCallback callback) { + CARDControl* card; + s32 result; + CARDDir* dir; + CARDDir* ent; + + if (OFFSET(offset, CARD_SEG_SIZE) != 0 || OFFSET(length, CARD_SEG_SIZE) != 0) { + return CARD_RESULT_FATAL_ERROR; + } + result = __CARDSeek(fileInfo, length, offset, &card); + if (result < 0) { + return result; + } + + dir = __CARDGetDirBlock(card); + ent = &dir[fileInfo->fileNo]; + result = __CARDAccess(card, ent); + if (result == CARD_RESULT_NOPERM) { + result = __CARDIsWritable(ent); + } + + if (result < 0) { + return __CARDPutControlBlock(card, result); + } + + DCInvalidateRange(buf, (u32)length); + card->apiCallback = callback ? callback : __CARDDefaultApiCallback; + + offset = (s32)OFFSET(fileInfo->offset, card->sectorSize); + length = (length < card->sectorSize - offset) ? length : card->sectorSize - offset; + result = __CARDRead(fileInfo->chan, card->sectorSize * (u32)fileInfo->iBlock + offset, length, + buf, ReadCallback); + if (result < 0) { + __CARDPutControlBlock(card, result); + } + return result; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void CARDReadAsync() { +static asm s32 CARDReadAsync(CARDFileInfo* fileInfo, void* buf, s32 length, s32 offset, + CARDCallback callback) { nofralloc #include "asm/dolphin/card/CARDRead/CARDReadAsync.s" } #pragma pop +#endif /* 803588CC-80358914 35320C 0048+00 0/0 2/2 0/0 .text CARDRead */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void CARDRead() { - nofralloc -#include "asm/dolphin/card/CARDRead/CARDRead.s" +s32 CARDRead(CARDFileInfo* fileInfo, void* buf, s32 length, s32 offset) { + s32 result = CARDReadAsync(fileInfo, buf, length, offset, __CARDSyncCallback); + if (result < 0) { + return result; + } + + return __CARDSync(fileInfo->chan); } -#pragma pop diff --git a/libs/dolphin/card/CARDStat.c b/libs/dolphin/card/CARDStat.c index 340690a561..2d5531682e 100644 --- a/libs/dolphin/card/CARDStat.c +++ b/libs/dolphin/card/CARDStat.c @@ -5,31 +5,19 @@ #include "dolphin/card/CARDStat.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/card/card.h" +#include "dolphin/dsp/dsp.h" +#include "dolphin/dvd/dvd.h" -// -// Forward References: -// +#include "dolphin/card/CARDPriv.h" -static void UpdateIconOffsets(); -void CARDGetStatus(); -static void CARDSetStatusAsync(); -void CARDSetStatus(); +static void UpdateIconOffsets(CARDDir* ent, CARDStat* stat); // // External References: // SECTION_INIT void memcpy(); -void OSGetTime(); -void __CARDSyncCallback(); -void __CARDGetControlBlock(); -void __CARDPutControlBlock(); -void __CARDSync(); -void __CARDGetDirBlock(); -void __CARDUpdateDir(); -void __CARDIsWritable(); -void __CARDIsReadable(); void __div2i(); // @@ -37,41 +25,176 @@ void __div2i(); // /* 80358C90-80358E88 3535D0 01F8+00 2/2 0/0 0/0 .text UpdateIconOffsets */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void UpdateIconOffsets() { - nofralloc -#include "asm/dolphin/card/CARDStat/UpdateIconOffsets.s" +static void UpdateIconOffsets(CARDDir* ent, CARDStat* stat) { + u32 offset; + BOOL iconTlut; + int i; + + offset = ent->iconAddr; + if (offset == 0xFFFFFFFF) { + stat->bannerFormat = 0; + stat->iconFormat = 0; + stat->iconSpeed = 0; + offset = 0; + } + + iconTlut = FALSE; + switch (CARDGetBannerFormat(ent)) { + case CARD_STAT_BANNER_C8: + stat->offsetBanner = offset; + offset += CARD_BANNER_WIDTH * CARD_BANNER_HEIGHT; + stat->offsetBannerTlut = offset; + offset += 2 * 256; + break; + case CARD_STAT_BANNER_RGB5A3: + stat->offsetBanner = offset; + offset += 2 * CARD_BANNER_WIDTH * CARD_BANNER_HEIGHT; + stat->offsetBannerTlut = 0xFFFFFFFF; + break; + default: + stat->offsetBanner = 0xFFFFFFFF; + stat->offsetBannerTlut = 0xFFFFFFFF; + break; + } + + for (i = 0; i < CARD_ICON_MAX; ++i) { + switch (CARDGetIconFormat(ent, i)) { + case CARD_STAT_ICON_C8: + stat->offsetIcon[i] = offset; + offset += CARD_ICON_WIDTH * CARD_ICON_HEIGHT; + iconTlut = TRUE; + break; + case CARD_STAT_ICON_RGB5A3: + stat->offsetIcon[i] = offset; + offset += 2 * CARD_ICON_WIDTH * CARD_ICON_HEIGHT; + break; + default: + stat->offsetIcon[i] = 0xFFFFFFFF; + break; + } + } + + if (iconTlut) { + stat->offsetIconTlut = offset; + offset += 2 * 256; + } else { + stat->offsetIconTlut = 0xFFFFFFFF; + } + stat->offsetData = offset; } -#pragma pop /* 80358E88-80358F9C 3537C8 0114+00 0/0 2/2 0/0 .text CARDGetStatus */ +#ifdef NONMATCHING +s32 CARDGetStatus(s32 chan, s32 fileNo, CARDStat* stat) { + CARDControl* card; + CARDDir* dir; + CARDDir* ent; + s32 result; + + if (fileNo < 0 || CARD_MAX_FILE <= fileNo) { + return CARD_RESULT_FATAL_ERROR; + } + result = __CARDGetControlBlock(chan, &card); + if (result < 0) { + return result; + } + + dir = __CARDGetDirBlock(card); + ent = &dir[fileNo]; + result = __CARDAccess(card, ent); + if (result == CARD_RESULT_NOPERM) { + result = __CARDIsWritable(ent); + } + + if (result >= 0) { + memcpy(stat->gameName, ent->gameName, sizeof(stat->gameName)); + memcpy(stat->company, ent->company, sizeof(stat->company)); + stat->length = (u32)ent->length * card->sectorSize; + memcpy(stat->fileName, ent->fileName, CARD_FILENAME_MAX); + stat->time = ent->time; + + stat->bannerFormat = ent->bannerFormat; + stat->iconAddr = ent->iconAddr; + stat->iconFormat = ent->iconFormat; + stat->iconSpeed = ent->iconSpeed; + stat->commentAddr = ent->commentAddr; + + UpdateIconOffsets(ent, stat); + } + return __CARDPutControlBlock(card, result); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void CARDGetStatus() { +asm s32 CARDGetStatus(s32 chan, s32 fileNo, CARDStat* stat) { nofralloc #include "asm/dolphin/card/CARDStat/CARDGetStatus.s" } #pragma pop +#endif /* 80358F9C-80359110 3538DC 0174+00 1/1 0/0 0/0 .text CARDSetStatusAsync */ +#ifdef NONMATCHING +s32 CARDSetStatusAsync(s32 chan, s32 fileNo, CARDStat* stat, CARDCallback callback) { + CARDControl* card; + CARDDir* dir; + CARDDir* ent; + s32 result; + + if (fileNo < 0 || CARD_MAX_FILE <= fileNo || + (stat->iconAddr != 0xffffffff && CARD_READ_SIZE <= stat->iconAddr) || + (stat->commentAddr != 0xffffffff && + CARD_SYSTEM_BLOCK_SIZE - CARD_COMMENT_SIZE < stat->commentAddr % CARD_SYSTEM_BLOCK_SIZE)) { + return CARD_RESULT_FATAL_ERROR; + } + result = __CARDGetControlBlock(chan, &card); + if (result < 0) { + return result; + } + + dir = __CARDGetDirBlock(card); + ent = &dir[fileNo]; + result = __CARDAccess(card, ent); + if (result < 0) { + return __CARDPutControlBlock(card, result); + } + + ent->bannerFormat = stat->bannerFormat; + ent->iconAddr = stat->iconAddr; + ent->iconFormat = stat->iconFormat; + ent->iconSpeed = stat->iconSpeed; + ent->commentAddr = stat->commentAddr; + UpdateIconOffsets(ent, stat); + + if (ent->iconAddr == 0xffffffff) { + CARDSetIconSpeed(ent, 0, CARD_STAT_SPEED_FAST); + } + + ent->time = (u32)OSTicksToSeconds(OSGetTime()); + result = __CARDUpdateDir(chan, callback); + if (result < 0) { + __CARDPutControlBlock(card, result); + } + return result; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void CARDSetStatusAsync() { +static asm s32 CARDSetStatusAsync(s32 chan, s32 fileNo, CARDStat* stat, CARDCallback callback) { nofralloc #include "asm/dolphin/card/CARDStat/CARDSetStatusAsync.s" } #pragma pop +#endif /* 80359110-80359158 353A50 0048+00 0/0 1/1 0/0 .text CARDSetStatus */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void CARDSetStatus() { - nofralloc -#include "asm/dolphin/card/CARDStat/CARDSetStatus.s" +s32 CARDSetStatus(s32 chan, s32 fileNo, CARDStat* stat) { + s32 result = CARDSetStatusAsync(chan, fileNo, stat, __CARDSyncCallback); + if (result < 0) { + return result; + } + + return __CARDSync(chan); } -#pragma pop diff --git a/libs/dolphin/card/CARDUnlock.c b/libs/dolphin/card/CARDUnlock.c index 9a039ba191..20b38c35f8 100644 --- a/libs/dolphin/card/CARDUnlock.c +++ b/libs/dolphin/card/CARDUnlock.c @@ -5,18 +5,22 @@ #include "dolphin/card/CARDUnlock.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/card/card.h" +#include "dolphin/dsp/dsp.h" +#include "dolphin/dvd/dvd.h" +#include "dolphin/exi/EXIBios.h" + +#include "dolphin/card/CARDPriv.h" // // Forward References: // -static void bitrev(); -static void ReadArrayUnlock(); -static void DummyLen(); -void __CARDUnlock(); -static void InitCallback(); -static void DoneCallback(); +static u32 bitrev(u32 data); +static s32 ReadArrayUnlock(s32 chan, u32 data, void* rbuf, s32 rlen, s32 mode); +static s32 DummyLen(void); +static void InitCallback(void* _task); +static void DoneCallback(void* _task); // // External References: @@ -24,57 +28,83 @@ static void DoneCallback(); SECTION_INIT void memset(); void DSPAddTask(); -void DCInvalidateRange(); -void DCFlushRange(); -void OSGetTick(); -void EXIImmEx(); -void EXIProbe(); -void EXISelect(); -void EXIDeselect(); -void EXIUnlock(); -void DSPCheckMailToDSP(); void DSPSendMailToDSP(); -void __CARDReadStatus(); -void __CARDMountCallback(); -extern u8 __CARDBlock[544]; // // Declarations: // /* 80353F24-80354090 34E864 016C+00 1/1 0/0 0/0 .text bitrev */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void bitrev() { - nofralloc -#include "asm/dolphin/card/CARDUnlock/bitrev.s" +static u32 bitrev(u32 data) { + u32 wk; + u32 i; + u32 k = 0; + u32 j = 1; + + wk = 0; + for (i = 0; i < 32; i++) { + if (i > 15) { + if (i == 31) { + wk |= (((data & (0x01 << 31)) >> 31) & 0x01); + } else { + wk |= ((data & (0x01 << i)) >> j); + j += 2; + } + } else { + wk |= ((data & (0x01 << i)) << (31 - i - k)); + k++; + } + } + return wk; } -#pragma pop + +#define SEC_AD1(x) ((u8)(((x) >> 29) & 0x03)) +#define SEC_AD2(x) ((u8)(((x) >> 21) & 0xff)) +#define SEC_AD3(x) ((u8)(((x) >> 19) & 0x03)) +#define SEC_BA(x) ((u8)(((x) >> 12) & 0x7f)) /* 80354090-803541D4 34E9D0 0144+00 2/2 0/0 0/0 .text ReadArrayUnlock */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void ReadArrayUnlock() { - nofralloc -#include "asm/dolphin/card/CARDUnlock/ReadArrayUnlock.s" +static s32 ReadArrayUnlock(s32 chan, u32 data, void* rbuf, s32 rlen, s32 mode) { + CARDControl* card; + BOOL err; + u8 cmd[5]; + + card = &__CARDBlock[chan]; + if (!EXISelect(chan, 0, 4)) { + return CARD_RESULT_NOCARD; + } + + data &= 0xfffff000; + memset(cmd, 0, 5); + cmd[0] = 0x52; + if (mode == 0) { + cmd[1] = SEC_AD1(data); + cmd[2] = SEC_AD2(data); + cmd[3] = SEC_AD3(data); + cmd[4] = SEC_BA(data); + } else { + cmd[1] = (u8)((data & 0xff000000) >> 24); + cmd[2] = (u8)((data & 0x00ff0000) >> 16); + } + + err = FALSE; + err |= !EXIImmEx(chan, cmd, 5, 1); + err |= !EXIImmEx(chan, (u8*)card->workArea + (u32)sizeof(CARDID), card->latency, 1); + err |= !EXIImmEx(chan, rbuf, rlen, 0); + err |= !EXIDeselect(chan); + + return err ? CARD_RESULT_NOCARD : CARD_RESULT_READY; } -#pragma pop /* ############################################################################################## */ /* 80450A68-80450A70 0004E8 0004+04 2/2 0/0 0/0 .sdata next */ -SECTION_SDATA static u32 next[1 + 1 /* padding */] = { - 0x00000001, - /* padding */ - 0x00000000, -}; +static unsigned long int next = 1; /* 803541D4-80354298 34EB14 00C4+00 2/2 0/0 0/0 .text DummyLen */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void DummyLen() { +static asm s32 DummyLen(void) { nofralloc #include "asm/dolphin/card/CARDUnlock/DummyLen.s" } @@ -82,7 +112,7 @@ static asm void DummyLen() { /* ############################################################################################## */ /* 803D1EA0-803D2000 02EFC0 0160+00 1/1 0/0 0/0 .data CardData */ -SECTION_DATA static u8 CardData[352] = { +SECTION_DATA static u8 CardData[352] ALIGN_DECL(32) = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x02, 0xFF, 0x00, 0x21, 0x13, 0x06, 0x12, 0x03, 0x12, 0x04, 0x13, 0x05, 0x00, 0x92, 0x00, 0xFF, 0x00, 0x88, 0xFF, 0xFF, @@ -111,7 +141,7 @@ SECTION_DATA static u8 CardData[352] = { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __CARDUnlock() { +asm s32 __CARDUnlock(s32 chan, u8 flashID[12]) { nofralloc #include "asm/dolphin/card/CARDUnlock/__CARDUnlock.s" } @@ -121,7 +151,7 @@ asm void __CARDUnlock() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void InitCallback() { +static asm void InitCallback(void* _task) { nofralloc #include "asm/dolphin/card/CARDUnlock/InitCallback.s" } @@ -131,7 +161,7 @@ static asm void InitCallback() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void DoneCallback() { +static asm void DoneCallback(void* _task) { nofralloc #include "asm/dolphin/card/CARDUnlock/DoneCallback.s" } diff --git a/libs/dolphin/card/CARDWrite.c b/libs/dolphin/card/CARDWrite.c index 144e7d3080..a020c7c209 100644 --- a/libs/dolphin/card/CARDWrite.c +++ b/libs/dolphin/card/CARDWrite.c @@ -5,36 +5,24 @@ #include "dolphin/card/CARDWrite.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/card/card.h" +#include "dolphin/dsp/dsp.h" +#include "dolphin/os/OS.h" + +#include "dolphin/card/CARDPriv.h" // // Forward References: // -static void WriteCallback(); -static void EraseCallback(); -static void CARDWriteAsync(); -void CARDWrite(); +static void WriteCallback(s32 chan, s32 result); +static void EraseCallback(s32 chan, s32 result); // // External References: // -void DCStoreRange(); -void OSGetTime(); -void __CARDDefaultApiCallback(); -void __CARDSyncCallback(); -void __CARDEraseSector(); -void __CARDPutControlBlock(); -void __CARDSync(); -void __CARDWrite(); -void __CARDGetFatBlock(); -void __CARDGetDirBlock(); -void __CARDUpdateDir(); -void __CARDIsWritable(); -void __CARDSeek(); void __div2i(); -extern u8 __CARDBlock[544]; // // Declarations: @@ -44,7 +32,7 @@ extern u8 __CARDBlock[544]; #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void WriteCallback() { +static asm void WriteCallback(s32 chan, s32 result) { nofralloc #include "asm/dolphin/card/CARDWrite/WriteCallback.s" } @@ -54,28 +42,53 @@ static asm void WriteCallback() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void EraseCallback() { +static asm void EraseCallback(s32 chan, s32 result) { nofralloc #include "asm/dolphin/card/CARDWrite/EraseCallback.s" } #pragma pop /* 80358B34-80358C48 353474 0114+00 1/1 0/0 0/0 .text CARDWriteAsync */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void CARDWriteAsync() { - nofralloc -#include "asm/dolphin/card/CARDWrite/CARDWriteAsync.s" +s32 CARDWriteAsync(CARDFileInfo* fileInfo, const void* buf, s32 length, s32 offset, + CARDCallback callback) { + CARDControl* card; + s32 result; + CARDDir* dir; + CARDDir* ent; + + result = __CARDSeek(fileInfo, length, offset, &card); + if (result < 0) { + return result; + } + + if (OFFSET(offset, card->sectorSize) != 0 || OFFSET(length, card->sectorSize) != 0) { + return __CARDPutControlBlock(card, CARD_RESULT_FATAL_ERROR); + } + + dir = __CARDGetDirBlock(card); + ent = &dir[fileInfo->fileNo]; + result = __CARDIsWritable(card, ent); + if (result < 0) { + return __CARDPutControlBlock(card, result); + } + + DCStoreRange((void*)buf, (u32)length); + card->apiCallback = callback ? callback : __CARDDefaultApiCallback; + card->buffer = (void*)buf; + result = + __CARDEraseSector(fileInfo->chan, card->sectorSize * (u32)fileInfo->iBlock, EraseCallback); + if (result < 0) { + __CARDPutControlBlock(card, result); + } + return result; } -#pragma pop /* 80358C48-80358C90 353588 0048+00 0/0 2/2 0/0 .text CARDWrite */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void CARDWrite() { - nofralloc -#include "asm/dolphin/card/CARDWrite/CARDWrite.s" +s32 CARDWrite(CARDFileInfo* fileInfo, const void* buf, s32 length, s32 offset) { + s32 result = CARDWriteAsync(fileInfo, buf, length, offset, __CARDSyncCallback); + if (result < 0) { + return result; + } + + return __CARDSync(fileInfo->chan); } -#pragma pop diff --git a/libs/dolphin/card/Makefile b/libs/dolphin/card/Makefile index 962ff91442..f33f44d580 100644 --- a/libs/dolphin/card/Makefile +++ b/libs/dolphin/card/Makefile @@ -35,6 +35,14 @@ LIBCARD_A_O_FILES := \ $(BUILD_DIR)/libs/dolphin/card/CARDNet.o \ LIBCARD_A_CFLAGS := \ + -Cpp_exceptions off \ + -proc gekko \ + -fp hard \ + -nodefaults \ + -str reuse \ + -RTTI off \ + -maxerrors 5 \ + -enum int $(INCLUDES) \ -O4,p \ -lang=c \ @@ -53,5 +61,5 @@ $(BUILD_DIR)/libs/dolphin/card/%.o: libs/dolphin/card/%.c @mkdir -p $(@D) @echo building... $< @$(ICONV) -f UTF-8 -t CP932 < $< > $(basename $@).c - @$(WINE) tools/mwcc_compiler/1.2.5/mwcceppc.exe $(CFLAGS) $(LIBCARD_A_CFLAGS) -c -o $@ $(basename $@).c + @$(WINE) tools/mwcc_compiler/1.2.5/mwcceppc.exe $(LIBCARD_A_CFLAGS) -c -o $@ $(basename $@).c diff --git a/libs/dolphin/db/Makefile b/libs/dolphin/db/Makefile index 4bcef9c0fb..cb448e6cca 100644 --- a/libs/dolphin/db/Makefile +++ b/libs/dolphin/db/Makefile @@ -9,6 +9,14 @@ LIBDB_A_O_FILES := \ $(BUILD_DIR)/libs/dolphin/db/db.o \ LIBDB_A_CFLAGS := \ + -Cpp_exceptions off \ + -proc gekko \ + -fp hard \ + -nodefaults \ + -str reuse \ + -RTTI off \ + -maxerrors 5 \ + -enum int $(INCLUDES) \ -O4,p \ -lang=c \ @@ -27,5 +35,5 @@ $(BUILD_DIR)/libs/dolphin/db/%.o: libs/dolphin/db/%.c @mkdir -p $(@D) @echo building... $< @$(ICONV) -f UTF-8 -t CP932 < $< > $(basename $@).c - @$(WINE) tools/mwcc_compiler/1.2.5/mwcceppc.exe $(CFLAGS) $(LIBDB_A_CFLAGS) -c -o $@ $(basename $@).c + @$(WINE) tools/mwcc_compiler/1.2.5/mwcceppc.exe $(LIBDB_A_CFLAGS) -c -o $@ $(basename $@).c diff --git a/libs/dolphin/db/db.c b/libs/dolphin/db/db.c index 66f131c1d1..1e7d5f8149 100644 --- a/libs/dolphin/db/db.c +++ b/libs/dolphin/db/db.c @@ -4,88 +4,51 @@ // #include "dolphin/db/db.h" -#include "dol2asm.h" -#include "dolphin/types.h" - -// -// Forward References: -// - -void DBInit(); -void __DBExceptionDestinationAux(); -void __DBExceptionDestination(); -void __DBIsExceptionMarked(); -void DBPrintf(); - -// -// External References: -// - -void OSReport(); -void PPCHalt(); -void OSDumpContext(); - -// -// Declarations: -// +#include "dolphin/base/PPCArch.h" +#include "dolphin/os/OS.h" /* ############################################################################################## */ /* 80451708-8045170C 000C08 0004+00 2/2 0/0 0/0 .sbss __DBInterface */ -static u8 __DBInterface[4]; +static DBInterface* __DBInterface; /* 8045170C-80451710 000C0C 0004+00 1/1 0/0 0/0 .sbss DBVerbose */ -static u8 DBVerbose[4]; +static int DBVerbose; /* 80346398-803463C0 340CD8 0028+00 0/0 1/1 0/0 .text DBInit */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void DBInit() { - nofralloc -#include "asm/dolphin/db/db/DBInit.s" +void DBInit(void) { + __DBInterface = (DBInterface*)OSPhysicalToCached(OS_DBINTERFACE_ADDR); + __DBInterface->ExceptionDestination = (void (*)())OSCachedToPhysical(__DBExceptionDestination); + DBVerbose = TRUE; } -#pragma pop - -/* ############################################################################################## */ -/* 803D1368-803D1380 02E488 0018+00 1/1 0/0 0/0 .data @9 */ -SECTION_DATA static char lit_9[] = "DBExceptionDestination\n";; /* 803463C0-80346408 340D00 0048+00 1/1 0/0 0/0 .text __DBExceptionDestinationAux */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __DBExceptionDestinationAux() { - nofralloc -#include "asm/dolphin/db/db/__DBExceptionDestinationAux.s" +void __DBExceptionDestinationAux(void) { + u32* contextAddr = (void*)0x00C0; + OSContext* context = (OSContext*)OSPhysicalToCached(*contextAddr); + + OSReport("DBExceptionDestination\n"); + OSDumpContext(context); + PPCHalt(); } -#pragma pop /* 80346408-80346418 340D48 0010+00 1/1 0/0 0/0 .text __DBExceptionDestination */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __DBExceptionDestination() { +/* clang-format off */ +asm void __DBExceptionDestination(void) { nofralloc -#include "asm/dolphin/db/db/__DBExceptionDestination.s" + mfmsr r3 + ori r3, r3, 0x10|0x20 + mtmsr r3 + + b __DBExceptionDestinationAux } -#pragma pop +/* clang-format on */ /* 80346418-80346434 340D58 001C+00 0/0 1/1 0/0 .text __DBIsExceptionMarked */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __DBIsExceptionMarked() { - nofralloc -#include "asm/dolphin/db/db/__DBIsExceptionMarked.s" +BOOL __DBIsExceptionMarked(__OSException exception) { + u32 mask = 1 << exception; + + return (BOOL)(__DBInterface->exceptionMask & mask); } -#pragma pop /* 80346434-80346484 340D74 0050+00 0/0 4/4 0/0 .text DBPrintf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void DBPrintf() { - nofralloc -#include "asm/dolphin/db/db/DBPrintf.s" -} -#pragma pop +void DBPrintf(char* format, ...) {} diff --git a/libs/dolphin/dsp/Makefile b/libs/dolphin/dsp/Makefile index e4040f765b..ee6ca8279c 100644 --- a/libs/dolphin/dsp/Makefile +++ b/libs/dolphin/dsp/Makefile @@ -13,6 +13,14 @@ LIBDSP_A_O_FILES := \ $(BUILD_DIR)/libs/dolphin/dsp/dsp_task.o \ LIBDSP_A_CFLAGS := \ + -Cpp_exceptions off \ + -proc gekko \ + -fp hard \ + -nodefaults \ + -str reuse \ + -RTTI off \ + -maxerrors 5 \ + -enum int $(INCLUDES) \ -O4,p \ -lang=c \ @@ -31,5 +39,5 @@ $(BUILD_DIR)/libs/dolphin/dsp/%.o: libs/dolphin/dsp/%.c @mkdir -p $(@D) @echo building... $< @$(ICONV) -f UTF-8 -t CP932 < $< > $(basename $@).c - @$(WINE) tools/mwcc_compiler/1.2.5/mwcceppc.exe $(CFLAGS) $(LIBDSP_A_CFLAGS) -c -o $@ $(basename $@).c + @$(WINE) tools/mwcc_compiler/1.2.5/mwcceppc.exe $(LIBDSP_A_CFLAGS) -c -o $@ $(basename $@).c diff --git a/libs/dolphin/dsp/dsp.c b/libs/dolphin/dsp/dsp.c index 4e1118a6fe..0feefca3ac 100644 --- a/libs/dolphin/dsp/dsp.c +++ b/libs/dolphin/dsp/dsp.c @@ -1,131 +1,90 @@ -// -// Generated By: dol2asm -// Translation Unit: dsp -// - #include "dolphin/dsp/dsp.h" -#include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/dsp/dsp_debug.h" +#include "dolphin/dsp/dsp_task.h" -// -// Forward References: -// +/* 80450A58-80450A60 -00001 0004+04 1/1 0/0 0/0 .sdata __DSPVersion */ +static char* __DSPVersion = "<< Dolphin SDK - DSP\trelease build: Apr 5 2004 04:15:32 (0x2301) >>"; -void DSPCheckMailToDSP(); -void DSPCheckMailFromDSP(); -void DSPReadMailFromDSP(); -void DSPSendMailToDSP(); -void DSPAssertInt(); -void DSPInit(); +/* 80451900-80451908 000E00 0004+04 1/1 0/0 0/0 .sbss __DSP_init_flag */ +static s32 __DSP_init_flag; // // External References: // -void __DSPHandler(); -void OSRegisterVersion(); -void OSDisableInterrupts(); -void OSRestoreInterrupts(); -void __OSSetInterruptHandler(); -void __OSUnmaskInterrupts(); -void __DSP_debug_printf(); -extern u8 __DSP_tmp_task[4]; -extern u8 __DSP_last_task[4]; -extern u8 __DSP_first_task[4]; -extern u8 __DSP_curr_task[4]; +void __DSPHandler(s16 interrupt, OSContext* context); // // Declarations: // /* 80352430-80352440 34CD70 0010+00 0/0 5/5 0/0 .text DSPCheckMailToDSP */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void DSPCheckMailToDSP() { - nofralloc -#include "asm/dolphin/dsp/dsp/DSPCheckMailToDSP.s" +u32 DSPCheckMailToDSP(void) { + return (__DSPRegs[0] >> 0xF) & 1; } -#pragma pop /* 80352440-80352450 34CD80 0010+00 0/0 4/4 0/0 .text DSPCheckMailFromDSP */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void DSPCheckMailFromDSP() { - nofralloc -#include "asm/dolphin/dsp/dsp/DSPCheckMailFromDSP.s" +u32 DSPCheckMailFromDSP(void) { + return (__DSPRegs[2] >> 0xF) & 1; } -#pragma pop /* 80352450-80352468 34CD90 0018+00 0/0 4/4 0/0 .text DSPReadMailFromDSP */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void DSPReadMailFromDSP() { - nofralloc -#include "asm/dolphin/dsp/dsp/DSPReadMailFromDSP.s" +u32 DSPReadMailFromDSP(void) { + u16 reg1; + u16 reg2; + reg1 = __DSPRegs[2]; + reg2 = __DSPRegs[3]; + return reg1 << 16 | reg2; } -#pragma pop /* 80352468-8035247C 34CDA8 0014+00 0/0 5/5 0/0 .text DSPSendMailToDSP */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void DSPSendMailToDSP() { - nofralloc -#include "asm/dolphin/dsp/dsp/DSPSendMailToDSP.s" +void DSPSendMailToDSP(u32 mail) { + __DSPRegs[0] = mail >> 16; + __DSPRegs[1] = mail; } -#pragma pop /* 8035247C-803524BC 34CDBC 0040+00 0/0 1/1 0/0 .text DSPAssertInt */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void DSPAssertInt() { - nofralloc -#include "asm/dolphin/dsp/dsp/DSPAssertInt.s" +void DSPAssertInt(void) { + u32 oldInt; + u16 reg; + + oldInt = OSDisableInterrupts(); + + reg = __DSPRegs[5]; + reg = (reg & ~0xA8) | 0x2; + __DSPRegs[5] = reg; + + OSRestoreInterrupts(oldInt); } -#pragma pop - -/* ############################################################################################## */ -/* 803D1C78-803D1CC0 02ED98 0045+03 2/1 0/0 0/0 .data @1 */ -SECTION_DATA static char lit_1[] = "<< Dolphin SDK - DSP\trelease build: Apr 5 2004 04:15:32 (0x2301) >>"; - -/* 803D1CC0-803D1CE0 02EDE0 001E+02 0/1 0/0 0/0 .data @19 */ -#pragma push -#pragma force_active on -SECTION_DATA static char lit_19[] = "DSPInit(): Build Date: %s %s\n"; -#pragma pop - -/* 803D1CE0-803D1CEC 02EE00 000C+00 0/1 0/0 0/0 .data @20 */ -#pragma push -#pragma force_active on -SECTION_DATA static char lit_20[] = "Apr 5 2004"; -#pragma pop - -/* 803D1CEC-803D1CF8 02EE0C 0009+03 0/1 0/0 0/0 .data @21 */ -#pragma push -#pragma force_active on -SECTION_DATA static char lit_21[] = "04:15:32"; -#pragma pop - -/* 80450A58-80450A60 -00001 0004+04 1/1 0/0 0/0 .sdata __DSPVersion */ -SECTION_SDATA static void* __DSPVersion[1 + 1 /* padding */] = { - (void*)&lit_1, - /* padding */ - NULL, -}; - -/* 80451900-80451908 000E00 0004+04 1/1 0/0 0/0 .sbss __DSP_init_flag */ -static u8 __DSP_init_flag[4 + 4 /* padding */]; /* 803524BC-80352580 34CDFC 00C4+00 0/0 2/2 0/0 .text DSPInit */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void DSPInit() { - nofralloc -#include "asm/dolphin/dsp/dsp/DSPInit.s" +void DSPInit(void) { + u32 oldInt; + u16 reg; + __DSP_debug_printf("DSPInit(): Build Date: %s %s\n", "Apr 5 2004", "04:15:32"); + + if (__DSP_init_flag == 1) { + return; + } + + OSRegisterVersion(__DSPVersion); + oldInt = OSDisableInterrupts(); + + __OSSetInterruptHandler(7, __DSPHandler); + __OSUnmaskInterrupts(0x1000000); + + reg = __DSPRegs[5]; + reg = (reg & ~0xA8) | 0x800; + __DSPRegs[5] = reg; + reg = __DSPRegs[5]; + reg = reg & ~0xAC; + __DSPRegs[5] = reg; + + __DSP_tmp_task = NULL; + __DSP_curr_task = NULL; + __DSP_last_task = NULL; + __DSP_first_task = NULL; + __DSP_init_flag = 1; + + OSRestoreInterrupts(oldInt); } -#pragma pop diff --git a/libs/dolphin/dsp/dsp_debug.c b/libs/dolphin/dsp/dsp_debug.c index 8255a1a364..1a184ed7c9 100644 --- a/libs/dolphin/dsp/dsp_debug.c +++ b/libs/dolphin/dsp/dsp_debug.c @@ -1,32 +1,5 @@ -// -// Generated By: dol2asm -// Translation Unit: dsp_debug -// - #include "dolphin/dsp/dsp_debug.h" -#include "dol2asm.h" #include "dolphin/types.h" -// -// Forward References: -// - -void __DSP_debug_printf(); - -// -// External References: -// - -// -// Declarations: -// - /* 80352580-803525D0 34CEC0 0050+00 0/0 2/2 0/0 .text __DSP_debug_printf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __DSP_debug_printf() { - nofralloc -#include "asm/dolphin/dsp/dsp_debug/__DSP_debug_printf.s" -} -#pragma pop +void __DSP_debug_printf(const char* fmt, ...) {} \ No newline at end of file diff --git a/libs/dolphin/dsp/dsp_task.c b/libs/dolphin/dsp/dsp_task.c index 032a0357b4..0e1c1ceb50 100644 --- a/libs/dolphin/dsp/dsp_task.c +++ b/libs/dolphin/dsp/dsp_task.c @@ -5,7 +5,20 @@ #include "dolphin/dsp/dsp_task.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/dsp/dsp_debug.h" + +/* ############################################################################################## */ +/* 80451914-80451918 000E14 0004+00 2/2 2/2 0/0 .sbss __DSP_curr_task */ +DSPTaskInfo* __DSP_curr_task; + +/* 80451910-80451914 000E10 0004+00 2/2 2/2 0/0 .sbss __DSP_first_task */ +DSPTaskInfo* __DSP_first_task; + +/* 8045190C-80451910 000E0C 0004+00 2/2 1/1 0/0 .sbss __DSP_last_task */ +DSPTaskInfo* __DSP_last_task; + +/* 80451908-8045190C 000E08 0004+00 0/0 1/1 0/0 .sbss __DSP_tmp_task */ +DSPTaskInfo* __DSP_tmp_task; // // Forward References: @@ -16,29 +29,86 @@ void __DSP_boot_task(); void __DSP_insert_task(); void __DSP_remove_task(); -// -// External References: -// - -void DSPCheckMailToDSP(); -void DSPCheckMailFromDSP(); -void DSPReadMailFromDSP(); -void DSPSendMailToDSP(); -void __DSP_debug_printf(); - // // Declarations: // /* 803525D0-80352770 34CF10 01A0+00 0/0 1/1 0/0 .text __DSP_exec_task */ +// needs compiler epilogue patch +#ifdef NONMATCHING +void __DSP_exec_task(DSPTaskInfo* curr, DSPTaskInfo* next) { + if (curr) { + DSPSendMailToDSP((u32)(curr->dram_mmem_addr)); + while (DSPCheckMailToDSP()) + ; + DSPSendMailToDSP((u32)(curr->dram_length)); + while (DSPCheckMailToDSP()) + ; + DSPSendMailToDSP((u32)(curr->dram_addr)); + while (DSPCheckMailToDSP()) + ; + } else { + DSPSendMailToDSP((u32)(0)); + while (DSPCheckMailToDSP()) + ; + DSPSendMailToDSP((u32)(0)); + while (DSPCheckMailToDSP()) + ; + DSPSendMailToDSP((u32)(0)); + while (DSPCheckMailToDSP()) + ; + } + + DSPSendMailToDSP((u32)(next->iram_mmem_addr)); + while (DSPCheckMailToDSP()) + ; + DSPSendMailToDSP((u32)(next->iram_length)); + while (DSPCheckMailToDSP()) + ; + DSPSendMailToDSP((u32)(next->iram_addr)); + while (DSPCheckMailToDSP()) + ; + + if (DSP_TASK_STATE_INIT == next->state) { + DSPSendMailToDSP((u32)(next->dsp_init_vector)); + while (DSPCheckMailToDSP()) + ; + DSPSendMailToDSP((u32)(0)); + while (DSPCheckMailToDSP()) + ; + DSPSendMailToDSP((u32)(0)); + while (DSPCheckMailToDSP()) + ; + DSPSendMailToDSP((u32)(0)); + while (DSPCheckMailToDSP()) + ; + } else { + DSPSendMailToDSP((u32)(next->dsp_resume_vector)); + while (DSPCheckMailToDSP()) + ; + DSPSendMailToDSP((u32)(next->dram_mmem_addr)); + while (DSPCheckMailToDSP()) + ; + + DSPSendMailToDSP((u32)(next->dram_length)); + while (DSPCheckMailToDSP()) + ; + + DSPSendMailToDSP((u32)(next->dram_addr)); + while (DSPCheckMailToDSP()) + ; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __DSP_exec_task() { +asm void __DSP_exec_task(DSPTaskInfo* curr, DSPTaskInfo* next) { nofralloc #include "asm/dolphin/dsp/dsp_task/__DSP_exec_task.s" } #pragma pop +#endif /* ############################################################################################## */ /* 803D1CF8-803D1D18 02EE18 001D+03 1/1 0/0 0/0 .data @266 */ @@ -74,55 +144,135 @@ SECTION_DATA static char lit_270[] = "__DSP_boot_task() : DRAM MMEM ADDR: 0x%08 SECTION_DATA static char lit_271[] = "__DSP_boot_task() : Start Vector : 0x%08X\n"; #pragma pop +#define MSG_BASE 0x80F30000 + /* 80352770-803528FC 34D0B0 018C+00 0/0 1/1 0/0 .text __DSP_boot_task */ +// needs compiler epilogue patch +#ifdef NONMATCHING +void __DSP_boot_task(DSPTaskInfo* task) { + volatile u32 mail; + + while (!DSPCheckMailFromDSP()) + ; + + mail = DSPReadMailFromDSP(); + + DSPSendMailToDSP(MSG_BASE | 0xA001); + while (DSPCheckMailToDSP()) { + } + DSPSendMailToDSP((u32)(task->iram_mmem_addr)); + while (DSPCheckMailToDSP()) { + } + + DSPSendMailToDSP(MSG_BASE | 0xC002); + while (DSPCheckMailToDSP()) { + } + DSPSendMailToDSP((u32)(task->iram_addr & 0xffff)); + while (DSPCheckMailToDSP()) { + } + + DSPSendMailToDSP(MSG_BASE | 0xA002); + while (DSPCheckMailToDSP()) { + } + DSPSendMailToDSP(task->iram_length); + while (DSPCheckMailToDSP()) { + } + + DSPSendMailToDSP(MSG_BASE | 0xB002); + while (DSPCheckMailToDSP()) { + } + DSPSendMailToDSP(0x00000000); + while (DSPCheckMailToDSP()) { + } + + DSPSendMailToDSP(MSG_BASE | 0xD001); + while (DSPCheckMailToDSP()) { + } + DSPSendMailToDSP((u32)(0xffff & task->dsp_init_vector)); + while (DSPCheckMailToDSP()) { + } + + __DSP_debug_printf("DSP is booting task: 0x%08X\n", task); + __DSP_debug_printf("__DSP_boot_task() : IRAM MMEM ADDR: 0x%08X\n", + (u32)(task->iram_mmem_addr)); + __DSP_debug_printf("__DSP_boot_task() : IRAM DSP ADDR : 0x%08X\n", (u32)(task->iram_addr)); + __DSP_debug_printf("__DSP_boot_task() : IRAM LENGTH : 0x%08X\n", (u32)(task->iram_length)); + __DSP_debug_printf("__DSP_boot_task() : DRAM MMEM ADDR: 0x%08X\n", (u32)(task->dram_length)); + __DSP_debug_printf("__DSP_boot_task() : Start Vector : 0x%08X\n", + (u32)(task->dsp_init_vector)); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __DSP_boot_task() { +asm void __DSP_boot_task(DSPTaskInfo* task) { nofralloc #include "asm/dolphin/dsp/dsp_task/__DSP_boot_task.s" } #pragma pop - -/* ############################################################################################## */ -/* 80451914-80451918 000E14 0004+00 2/2 2/2 0/0 .sbss __DSP_curr_task */ -extern u8 __DSP_curr_task[4]; -u8 __DSP_curr_task[4]; - -/* 80451910-80451914 000E10 0004+00 2/2 2/2 0/0 .sbss __DSP_first_task */ -extern u8 __DSP_first_task[4]; -u8 __DSP_first_task[4]; - -/* 8045190C-80451910 000E0C 0004+00 2/2 1/1 0/0 .sbss __DSP_last_task */ -extern u8 __DSP_last_task[4]; -u8 __DSP_last_task[4]; - -/* 80451908-8045190C 000E08 0004+00 0/0 1/1 0/0 .sbss __DSP_tmp_task */ -extern u8 __DSP_tmp_task[4]; -u8 __DSP_tmp_task[4]; +#endif /* 803528FC-8035299C 34D23C 00A0+00 0/0 1/1 0/0 .text __DSP_insert_task */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __DSP_insert_task() { - nofralloc -#include "asm/dolphin/dsp/dsp_task/__DSP_insert_task.s" +void __DSP_insert_task(DSPTaskInfo* task) { + DSPTaskInfo* temp; + + if (__DSP_first_task == NULL) { + __DSP_first_task = __DSP_last_task = __DSP_curr_task = task; + task->next = task->prev = NULL; + } else { + temp = __DSP_first_task; + + while (temp) { + if (task->priority < temp->priority) { + task->prev = temp->prev; + temp->prev = task; + task->next = temp; + if (task->prev == NULL) { + __DSP_first_task = task; + } else { + (task->prev)->next = task; + } + break; + } + temp = temp->next; + } + + if (temp == NULL) { + __DSP_last_task->next = task; + task->next = NULL; + task->prev = __DSP_last_task; + __DSP_last_task = task; + } + } } -#pragma pop /* 8035299C-80352A30 34D2DC 0094+00 0/0 1/1 0/0 .text __DSP_remove_task */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __DSP_remove_task() { - nofralloc -#include "asm/dolphin/dsp/dsp_task/__DSP_remove_task.s" +void __DSP_remove_task(DSPTaskInfo* task) { + task->flags = DSP_TASK_FLAG_CLEARALL; + task->state = DSP_TASK_STATE_DONE; + + if (__DSP_first_task == task) { + if (task->next) { + __DSP_first_task = (task->next); + task->next->prev = NULL; + } else { + __DSP_first_task = __DSP_last_task = __DSP_curr_task = NULL; + } + } else if (__DSP_last_task == task) { + __DSP_last_task = (task->prev); + task->prev->next = NULL; + __DSP_curr_task = __DSP_first_task; + + } else { + __DSP_curr_task = task->next; + task->prev->next = task->next; + task->next->prev = task->prev; + } } -#pragma pop /* ############################################################################################## */ /* 803D1E08-803D1E38 02EF28 002B+05 0/0 0/0 0/0 .data @294 */ +// used in stripped `__DSP_add_task` function #pragma push #pragma force_active on SECTION_DATA static char lit_294[] = "__DSP_add_task() : Added task : 0x%08X\n"; diff --git a/libs/dolphin/dvd/Makefile b/libs/dolphin/dvd/Makefile index cc820f8960..7137466f6c 100644 --- a/libs/dolphin/dvd/Makefile +++ b/libs/dolphin/dvd/Makefile @@ -23,6 +23,14 @@ LIBDVD_A_O_FILES := \ $(BUILD_DIR)/libs/dolphin/dvd/fstload.o \ LIBDVD_A_CFLAGS := \ + -Cpp_exceptions off \ + -proc gekko \ + -fp hard \ + -nodefaults \ + -str reuse \ + -RTTI off \ + -maxerrors 5 \ + -enum int $(INCLUDES) \ -O4,p \ -lang=c \ @@ -41,5 +49,5 @@ $(BUILD_DIR)/libs/dolphin/dvd/%.o: libs/dolphin/dvd/%.c @mkdir -p $(@D) @echo building... $< @$(ICONV) -f UTF-8 -t CP932 < $< > $(basename $@).c - @$(WINE) tools/mwcc_compiler/1.2.5/mwcceppc.exe $(CFLAGS) $(LIBDVD_A_CFLAGS) -c -o $@ $(basename $@).c + @$(WINE) tools/mwcc_compiler/1.2.5/mwcceppc.exe $(LIBDVD_A_CFLAGS) -c -o $@ $(basename $@).c diff --git a/libs/dolphin/dvd/dvd.c b/libs/dolphin/dvd/dvd.c index 1167b07ae1..7f15fe80a6 100644 --- a/libs/dolphin/dvd/dvd.c +++ b/libs/dolphin/dvd/dvd.c @@ -4,8 +4,10 @@ // #include "dolphin/dvd/dvd.h" +#include "MSL_C/MSL_Common/Src/mem.h" +#include "MSL_C/MSL_Common/Src/string.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/os/OS.h" // // Forward References: @@ -17,7 +19,7 @@ static void cbForStateReadingFST(); static void cbForStateError(); static void stateTimeout(); static void stateGettingError(); -static void CategorizeError(); +static u32 CategorizeError(u32 error); static void cbForStateGettingError(); static void cbForUnrecoveredError(); static void cbForUnrecoveredErrorRetry(); @@ -40,40 +42,16 @@ static void cbForStateMotorStopped(); static void stateReady(); static void stateBusy(); static void cbForStateBusy(); -void DVDReadAbsAsyncPrio(); -void DVDReadAbsAsyncForBS(); -void DVDReadDiskID(); -void DVDCancelStreamAsync(); -void DVDInquiryAsync(); -void DVDReset(); -void DVDSetAutoInvalidation(); -void DVDResume(); -static void DVDCancelAsync(); -void DVDCancel(); -static void cbForCancelSync(); -void __DVDPrepareResetAsync(); -void __DVDTestAlarm(); +static void cbForCancelSync(s32 result, DVDCommandBlock* block); +void __DVDPrepareResetAsync(DVDCBCallback callbac); +BOOL __DVDTestAlarm(OSAlarm* alarm); // // External References: // -SECTION_INIT void memcpy(); -void OSReport(); -void OSPanic(); -void OSRegisterVersion(); -void OSCreateAlarm(); -void OSSetAlarm(); -void DCInvalidateRange(); -void OSDisableInterrupts(); -void OSRestoreInterrupts(); -void __OSSetInterruptHandler(); -void __OSUnmaskInterrupts(); -void OSInitThreadQueue(); -void OSSleepThread(); -void OSWakeupThread(); void __DVDInitWA(); -void __DVDInterruptHandler(); +void __DVDInterruptHandler(s16 interrupt, OSContext* context); void DVDLowRead(); void DVDLowSeek(); void DVDLowWaitCoverClose(); @@ -87,94 +65,123 @@ void DVDLowAudioBufferConfig(); void DVDLowReset(); void DVDLowBreak(); void DVDLowClearCallback(); -void __DVDLowTestAlarm(); +BOOL __DVDLowTestAlarm(OSAlarm* alarm); void __DVDFSInit(); void __DVDClearWaitingQueue(); -void __DVDPushWaitingQueue(); -void __DVDPopWaitingQueue(); -void __DVDCheckWaitingQueue(); +BOOL __DVDPushWaitingQueue(); +DVDCommandBlock* __DVDPopWaitingQueue(); +BOOL __DVDCheckWaitingQueue(); void __DVDDequeueWaitingQueue(); void __DVDStoreErrorCode(); -void DVDCompareDiskID(); +BOOL DVDCompareDiskID(DVDDiskID*, DVDDiskID*); void __DVDPrintFatalMessage(); void __fstLoad(); -void memcmp(); -extern u8 __DVDThreadQueue[8]; +extern OSThreadQueue __DVDThreadQueue; // // Declarations: // /* 803490EC-803490F0 343A2C 0004+00 1/0 0/0 0/0 .text defaultOptionalCommandChecker */ -static void defaultOptionalCommandChecker() { - /* empty function */ -} +static void defaultOptionalCommandChecker() {} /* ############################################################################################## */ /* 803D1520-803D1568 02E640 0045+03 1/0 0/0 0/0 .data @1 */ -SECTION_DATA static char lit_1[] = "<< Dolphin SDK - DVD\trelease build: Apr 5 2004 04:14:51 (0x2301) >>"; +SECTION_DATA static char lit_1[] = + "<< Dolphin SDK - DVD\trelease build: Apr 5 2004 04:14:51 (0x2301) >>"; + +/* 804509E8-804509EC -00001 0004+00 1/1 0/0 0/0 .sdata __DVDVersion */ +SECTION_SDATA static char* __DVDVersion = lit_1; /* 803D1568-803D1574 02E688 000A+02 1/1 0/0 0/0 .data @18 */ SECTION_DATA static char lit_18[] = "load fst\n"; -/* 804509E8-804509EC -00001 0004+00 1/1 0/0 0/0 .sdata __DVDVersion */ -SECTION_SDATA static void* __DVDVersion = (void*)&lit_1; - /* 80451778-8045177C 000C78 0004+00 24/24 0/0 0/0 .sbss executing */ -static u8 executing[4]; +static DVDCommandBlock* executing; /* 8045177C-80451780 000C7C 0004+00 4/4 0/0 0/0 .sbss IDShouldBe */ -static u8 IDShouldBe[4]; +static DVDDiskID* IDShouldBe; /* 80451780-80451784 000C80 0004+00 3/3 0/0 0/0 .sbss bootInfo */ -static u8 bootInfo[4]; +static OSBootInfo* bootInfo; /* 80451784-80451788 000C84 0004+00 8/8 0/0 0/0 .sbss PauseFlag */ -static u8 PauseFlag[4]; +static volatile BOOL PauseFlag; /* 80451788-8045178C 000C88 0004+00 5/5 0/0 0/0 .sbss PausingFlag */ -static u8 PausingFlag[4]; +static volatile BOOL PausingFlag; /* 8045178C-80451790 000C8C 0004+00 2/2 0/0 0/0 .sbss AutoFinishing */ -static u8 AutoFinishing[4]; +static volatile BOOL AutoFinishing; /* 80451790-80451794 000C90 0004+00 4/4 0/0 0/0 .sbss FatalErrorFlag */ -static u8 FatalErrorFlag[4]; +static volatile BOOL FatalErrorFlag; /* 80451794-80451798 000C94 0004+00 6/6 0/0 0/0 .sbss CurrCommand */ -static u8 CurrCommand[4]; +static volatile u32 CurrCommand; /* 80451798-8045179C 000C98 0004+00 8/8 0/0 0/0 .sbss Canceling */ -static u8 Canceling[4]; +static volatile u32 Canceling; /* 8045179C-804517A0 000C9C 0004+00 8/8 0/0 0/0 .sbss CancelCallback */ -static u8 CancelCallback[4]; +static DVDCBCallback CancelCallback; /* 804517A0-804517A4 000CA0 0004+00 9/9 0/0 0/0 .sbss ResumeFromHere */ -static u8 ResumeFromHere[4]; +static volatile u32 ResumeFromHere; /* 804517A4-804517A8 000CA4 0004+00 1/1 0/0 0/0 .sbss CancelLastError */ -static u8 CancelLastError[4]; +static volatile u32 CancelLastError; /* 804517A8-804517AC 000CA8 0004+00 1/1 0/0 0/0 .sbss LastError */ -static u8 LastError[4]; +static volatile u32 LastError; /* 804517AC-804517B0 000CAC 0004+00 9/9 0/0 0/0 .sbss NumInternalRetry */ -static u8 NumInternalRetry[4]; +static volatile s32 NumInternalRetry; /* 804517B0-804517B4 000CB0 0004+00 3/3 0/0 0/0 .sbss ResetRequired */ -static u8 ResetRequired[4]; +static volatile BOOL ResetRequired; /* 804517B4-804517B8 000CB4 0004+00 1/1 0/0 0/0 .sbss FirstTimeInBootrom */ -static u8 FirstTimeInBootrom[4]; +static volatile BOOL FirstTimeInBootrom; /* 804517B8-804517BC 000CB8 0004+00 5/5 0/0 0/0 .sbss MotorState */ -static u8 MotorState[4]; +static u32 MotorState; /* 804517BC-804517C0 000CBC 0004+00 1/1 0/0 0/0 .sbss DVDInitialized */ -static u8 DVDInitialized[4]; +static BOOL DVDInitialized; /* 803490F0-803491C8 343A30 00D8+00 0/0 3/3 0/0 .text DVDInit */ +// needs compiler epilogue patch +#ifdef NONMATCHING +void DVDInit(void) { + if (DVDInitialized) { + return; + } + + OSRegisterVersion(__DVDVersion); + DVDInitialized = TRUE; + __DVDFSInit(); + __DVDClearWaitingQueue(); + __DVDInitWA(); + + bootInfo = (OSBootInfo*)OSPhysicalToCached(0x0000); + MotorState = 0; + IDShouldBe = &(bootInfo->disk_info); + __OSSetInterruptHandler(21, __DVDInterruptHandler); + __OSUnmaskInterrupts(0x400); + OSInitThreadQueue(&__DVDThreadQueue); + + __DIRegs[0] = 0x2A; + __DIRegs[1] = 0; + + if (bootInfo->boot_code == 0xE5207C22) { + OSReport("load fst\n"); + __fstLoad(); + } else if (bootInfo->boot_code != 0xD15EA5E) { + FirstTimeInBootrom = TRUE; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -183,31 +190,33 @@ asm void DVDInit(void) { #include "asm/dolphin/dvd/dvd/DVDInit.s" } #pragma pop +#endif /* ############################################################################################## */ /* 803D1574-803D15A8 02E694 0034+00 2/2 0/0 0/0 .data @24 */ SECTION_DATA static char lit_24[] = "DVDChangeDisk(): FST in the new disc is too big. "; /* 8044C900-8044C920 079620 0020+00 8/8 0/0 0/0 .bss BB2 */ -static u8 BB2[32]; +static DVDBB2 BB2 ALIGN_DECL(32); /* 804509EC-804509F0 00046C 0004+00 6/6 0/0 0/0 .sdata autoInvalidation */ SECTION_SDATA static u32 autoInvalidation = 0x00000001; /* 804509F0-804509F4 -00001 0004+00 1/1 0/0 0/0 .sdata checkOptionalCommand */ -SECTION_SDATA static void* checkOptionalCommand = (void*)defaultOptionalCommandChecker; +SECTION_SDATA static DVDOptionalCommandChecker checkOptionalCommand = defaultOptionalCommandChecker; /* 804509F4-804509FC 000474 0006+02 2/2 0/0 0/0 .sdata @23 */ SECTION_SDATA static char lit_23[] = "dvd.c"; +typedef void (*stateFunc)(DVDCommandBlock* block); /* 804517C0-804517C8 000CC0 0004+04 6/6 0/0 0/0 .sbss LastState */ -static u8 LastState[4 + 4 /* padding */]; +static stateFunc LastState; /* 803491C8-8034925C 343B08 0094+00 1/1 0/0 0/0 .text stateReadingFST */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void stateReadingFST() { +static asm void stateReadingFST(void) { nofralloc #include "asm/dolphin/dvd/dvd/stateReadingFST.s" } @@ -215,323 +224,736 @@ static asm void stateReadingFST() { /* ############################################################################################## */ /* 8044C920-8044C940 079640 0020+00 2/3 0/0 0/0 .bss CurrDiskID */ -static u8 CurrDiskID[32]; +static DVDDiskID CurrDiskID ALIGN_DECL(32); /* 8044C940-8044C970 079660 0030+00 10/14 0/0 0/0 .bss DummyCommandBlock */ -static u8 DummyCommandBlock[48]; +static DVDCommandBlock DummyCommandBlock; /* 8034925C-803492DC 343B9C 0080+00 2/2 0/0 0/0 .text cbForStateReadingFST */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void cbForStateReadingFST() { - nofralloc -#include "asm/dolphin/dvd/dvd/cbForStateReadingFST.s" +static void cbForStateReadingFST(u32 intType) { + DVDCommandBlock* finished; + + if (intType == 16) { + stateTimeout(); + return; + } + + if (intType & 1) { + NumInternalRetry = 0; + __DVDFSInit(); + finished = executing; + executing = &DummyCommandBlock; + finished->state = 0; + if (finished->callback) { + (finished->callback)(0, finished); + } + + stateReady(); + + } else { + stateGettingError(); + } } -#pragma pop /* 803492DC-80349388 343C1C 00AC+00 12/12 0/0 0/0 .text cbForStateError */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void cbForStateError() { - nofralloc -#include "asm/dolphin/dvd/dvd/cbForStateError.s" +static void cbForStateError(u32 intType) { + DVDCommandBlock* finished; + executing->state = -1; + + if (intType == 16) { + stateTimeout(); + return; + } + + __DVDPrintFatalMessage(); + + FatalErrorFlag = TRUE; + finished = executing; + executing = &DummyCommandBlock; + if (finished->callback) { + (finished->callback)(-1, finished); + } + + if (Canceling) { + Canceling = FALSE; + if (CancelCallback) + (CancelCallback)(0, finished); + } + + stateReady(); } -#pragma pop /* 80349388-803493BC 343CC8 0034+00 2/2 0/0 0/0 .text stateTimeout */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void stateTimeout() { - nofralloc -#include "asm/dolphin/dvd/dvd/stateTimeout.s" +static void stateTimeout(void) { + __DVDStoreErrorCode(0x1234568); + DVDReset(); + cbForStateError(0); } -#pragma pop /* 803493BC-803493E4 343CFC 0028+00 1/1 0/0 0/0 .text stateGettingError */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void stateGettingError() { - nofralloc -#include "asm/dolphin/dvd/dvd/stateGettingError.s" +static inline void stateGettingError(void) { + DVDLowRequestError(cbForStateGettingError); } -#pragma pop /* 803493E4-80349498 343D24 00B4+00 1/1 0/0 0/0 .text CategorizeError */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void CategorizeError() { - nofralloc -#include "asm/dolphin/dvd/dvd/CategorizeError.s" +static u32 CategorizeError(u32 error) { + if (error == 0x20400) { + LastError = error; + return 1; + } + + error &= 0xffffff; + + if ((error == 0x62800) || (error == 0x23a00) || (error == 0xb5a01)) { + return 0; + } + + ++NumInternalRetry; + if (NumInternalRetry == 2) { + if (error == LastError) { + LastError = error; + return 1; + } else { + LastError = error; + return 2; + } + } else { + LastError = error; + + if ((error == 0x31100) || (executing->command == 5)) { + return 2; + } else { + return 3; + } + } +} + +inline static BOOL CheckCancel(u32 resume) { + DVDCommandBlock* finished; + + if (Canceling) { + ResumeFromHere = resume; + Canceling = FALSE; + + finished = executing; + executing = &DummyCommandBlock; + + finished->state = 10; + if (finished->callback) + (*finished->callback)(-3, finished); + if (CancelCallback) + (CancelCallback)(0, finished); + stateReady(); + return TRUE; + } + return FALSE; } -#pragma pop /* 80349498-803496FC 343DD8 0264+00 6/6 0/0 0/0 .text cbForStateGettingError */ +// needs compiler epilogue patch +#ifdef NONMATCHING +static void cbForStateGettingError(u32 intType) { + u32 error; + u32 status; + u32 errorCategory; + u32 resume; + + if (intType == 16) { + __DVDStoreErrorCode(0x1234568); + DVDReset(); + cbForStateError(0); + return; + } + + if (intType & 2) { + __DVDStoreErrorCode(0x1234567); + DVDLowStopMotor(cbForStateError); + return; + } + + error = __DIRegs[8]; + status = error & 0xff000000; + + errorCategory = CategorizeError(error); + + if (errorCategory == 1) { + __DVDStoreErrorCode(error); + DVDLowStopMotor(cbForStateError); + return; + } + + if ((errorCategory == 2) || (errorCategory == 3)) { + resume = 0; + } else { + if (status == 0x01000000) + resume = 4; + else if (status == 0x02000000) + resume = 6; + else if (status == 0x03000000) + resume = 3; + else + resume = 5; + } + + if (CheckCancel(resume)) + return; + + if (errorCategory == 2) { + __DVDStoreErrorCode(error); + stateGoToRetry(); + return; + } + + if (errorCategory == 3) { + if ((error & 0x00ffffff) == 0x00031100) { + DVDLowSeek(executing->offset, cbForUnrecoveredError); + } else { + LastState(executing); + } + return; + } + + if (status == 0x01000000) { + executing->state = 5; + stateMotorStopped(); + return; + } else if (status == 0x02000000) { + executing->state = 3; + stateCoverClosed(); + return; + } else if (status == 0x03000000) { + executing->state = 4; + stateMotorStopped(); + return; + } else { + __DVDStoreErrorCode(0x1234567); + DVDLowStopMotor(cbForStateError); + return; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void cbForStateGettingError() { +static asm void cbForStateGettingError(u32 intType) { nofralloc #include "asm/dolphin/dvd/dvd/cbForStateGettingError.s" } #pragma pop +#endif /* 803496FC-80349758 34403C 005C+00 1/1 0/0 0/0 .text cbForUnrecoveredError */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void cbForUnrecoveredError() { - nofralloc -#include "asm/dolphin/dvd/dvd/cbForUnrecoveredError.s" +static void cbForUnrecoveredError(u32 intType) { + if (intType == 16) { + __DVDStoreErrorCode(0x1234568); + DVDReset(); + cbForStateError(0); + return; + } + + if (intType & 1) { + stateGoToRetry(); + return; + } + + DVDLowRequestError(cbForUnrecoveredErrorRetry); } -#pragma pop /* 80349758-803497D8 344098 0080+00 1/1 0/0 0/0 .text cbForUnrecoveredErrorRetry */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void cbForUnrecoveredErrorRetry() { - nofralloc -#include "asm/dolphin/dvd/dvd/cbForUnrecoveredErrorRetry.s" +static void cbForUnrecoveredErrorRetry(u32 intType) { + if (intType == 16) { + __DVDStoreErrorCode(0x1234568); + DVDReset(); + cbForStateError(0); + return; + } + + if (intType & 2) { + __DVDStoreErrorCode(0x1234567); + DVDLowStopMotor(cbForStateError); + return; + } + + __DVDStoreErrorCode(__DIRegs[8]); + DVDLowStopMotor(cbForStateError); } -#pragma pop /* 803497D8-80349800 344118 0028+00 2/2 0/0 0/0 .text stateGoToRetry */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void stateGoToRetry() { - nofralloc -#include "asm/dolphin/dvd/dvd/stateGoToRetry.s" +static void stateGoToRetry(void) { + DVDLowStopMotor(cbForStateGoToRetry); } -#pragma pop /* 80349800-80349940 344140 0140+00 1/1 0/0 0/0 .text cbForStateGoToRetry */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void cbForStateGoToRetry() { - nofralloc -#include "asm/dolphin/dvd/dvd/cbForStateGoToRetry.s" +static void cbForStateGoToRetry(u32 intType) { + if (intType == 16) { + __DVDStoreErrorCode(0x1234568); + DVDReset(); + cbForStateError(0); + return; + } + + if (intType & 2) { + __DVDStoreErrorCode(0x1234567); + DVDLowStopMotor(cbForStateError); + return; + } + + NumInternalRetry = 0; + + if ((CurrCommand == 4) || (CurrCommand == 5) || (CurrCommand == 13) || (CurrCommand == 15)) { + ResetRequired = TRUE; + } + + if (!CheckCancel(2)) { + executing->state = 11; + stateMotorStopped(); + } } -#pragma pop /* 80349940-80349A20 344280 00E0+00 1/1 0/0 0/0 .text stateCheckID */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void stateCheckID() { - nofralloc -#include "asm/dolphin/dvd/dvd/stateCheckID.s" +static void stateCheckID(void) { + switch (CurrCommand) { + case 3: + if (DVDCompareDiskID(&CurrDiskID, executing->disk_id)) { + memcpy(IDShouldBe, &CurrDiskID, sizeof(DVDDiskID)); + + executing->state = 1; + DCInvalidateRange(&BB2, sizeof(DVDBB2)); + LastState = stateCheckID2a; + stateCheckID2a(executing); + return; + } else { + DVDLowStopMotor(cbForStateCheckID1); + } + break; + + default: + if (memcmp(&CurrDiskID, IDShouldBe, sizeof(DVDDiskID))) { + DVDLowStopMotor(cbForStateCheckID1); + } else { + LastState = stateCheckID3; + stateCheckID3(executing); + } + break; + } } -#pragma pop /* 80349A20-80349A54 344360 0034+00 1/1 0/0 0/0 .text stateCheckID3 */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void stateCheckID3() { - nofralloc -#include "asm/dolphin/dvd/dvd/stateCheckID3.s" +static void stateCheckID3(void) { + DVDLowAudioBufferConfig(IDShouldBe->is_streaming, 10, cbForStateCheckID3); } -#pragma pop /* 80349A54-80349A88 344394 0034+00 1/1 0/0 0/0 .text stateCheckID2a */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void stateCheckID2a() { - nofralloc -#include "asm/dolphin/dvd/dvd/stateCheckID2a.s" +static void stateCheckID2a(void) { + DVDLowAudioBufferConfig(IDShouldBe->is_streaming, 10, cbForStateCheckID2a); } -#pragma pop /* 80349A88-80349AF0 3443C8 0068+00 1/1 0/0 0/0 .text cbForStateCheckID2a */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void cbForStateCheckID2a() { - nofralloc -#include "asm/dolphin/dvd/dvd/cbForStateCheckID2a.s" +static void cbForStateCheckID2a(u32 intType) { + if (intType == 16) { + __DVDStoreErrorCode(0x1234568); + DVDReset(); + cbForStateError(0); + return; + } + + if (intType & 1) { + NumInternalRetry = 0; + stateCheckID2(executing); + return; + } + + DVDLowRequestError(cbForStateGettingError); } -#pragma pop /* 80349AF0-80349B28 344430 0038+00 1/1 0/0 0/0 .text stateCheckID2 */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void stateCheckID2() { - nofralloc -#include "asm/dolphin/dvd/dvd/stateCheckID2.s" +static void stateCheckID2() { + DVDLowRead(&BB2, OSRoundUp32B(sizeof(BB2)), 0x420, cbForStateCheckID2); } -#pragma pop /* 80349B28-80349C24 344468 00FC+00 1/1 0/0 0/0 .text cbForStateCheckID1 */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void cbForStateCheckID1() { - nofralloc -#include "asm/dolphin/dvd/dvd/cbForStateCheckID1.s" +static void cbForStateCheckID1(u32 intType) { + if (intType == 16) { + __DVDStoreErrorCode(0x1234568); + DVDReset(); + cbForStateError(0); + return; + } + + if (intType & 2) { + __DVDStoreErrorCode(0x1234567); + DVDLowStopMotor(cbForStateError); + return; + } + + NumInternalRetry = 0; + + if (!CheckCancel(1)) { + executing->state = 6; + stateMotorStopped(); + } } -#pragma pop /* 80349C24-80349CFC 344564 00D8+00 1/1 0/0 0/0 .text cbForStateCheckID2 */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void cbForStateCheckID2() { +static asm void cbForStateCheckID2(u32 intType) { nofralloc #include "asm/dolphin/dvd/dvd/cbForStateCheckID2.s" } #pragma pop /* 80349CFC-80349DEC 34463C 00F0+00 1/1 0/0 0/0 .text cbForStateCheckID3 */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void cbForStateCheckID3() { - nofralloc -#include "asm/dolphin/dvd/dvd/cbForStateCheckID3.s" +static void cbForStateCheckID3(u32 intType) { + if (intType == 16) { + __DVDStoreErrorCode(0x1234568); + DVDReset(); + cbForStateError(0); + return; + } + + if (intType & 1) { + NumInternalRetry = 0; + + if (!CheckCancel(0)) { + executing->state = 1; + stateBusy(executing); + } + } else { + stateGettingError(); + } } -#pragma pop /* 80349DEC-80349E30 34472C 0044+00 3/3 0/0 0/0 .text AlarmHandler */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void AlarmHandler() { - nofralloc -#include "asm/dolphin/dvd/dvd/AlarmHandler.s" +static void AlarmHandler(OSAlarm* alarm, OSContext* context) { + DVDReset(); + DCInvalidateRange(&CurrDiskID, sizeof(DVDDiskID)); + LastState = stateCoverClosed_CMD; + stateCoverClosed_CMD(executing); } -#pragma pop /* ############################################################################################## */ /* 8044C970-8044C998 079690 0028+00 1/4 0/0 0/0 .bss ResetAlarm */ -static u8 ResetAlarm[40]; +static OSAlarm ResetAlarm; /* 80349E30-80349F04 344770 00D4+00 1/1 0/0 0/0 .text stateCoverClosed */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void stateCoverClosed() { - nofralloc -#include "asm/dolphin/dvd/dvd/stateCoverClosed.s" +static void stateCoverClosed(void) { + DVDCommandBlock* finished; + + switch (CurrCommand) { + case 5: + case 4: + case 13: + case 15: + __DVDClearWaitingQueue(); + finished = executing; + executing = &DummyCommandBlock; + if (finished->callback) { + (finished->callback)(-4, finished); + } + stateReady(); + break; + + default: + MotorState = 0; + DVDReset(); + OSCreateAlarm(&ResetAlarm); + OSSetAlarm(&ResetAlarm, OSMillisecondsToTicks(1150), AlarmHandler); + break; + } } -#pragma pop /* 80349F04-80349F34 344844 0030+00 1/1 0/0 0/0 .text stateCoverClosed_CMD */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void stateCoverClosed_CMD() { - nofralloc -#include "asm/dolphin/dvd/dvd/stateCoverClosed_CMD.s" +static void stateCoverClosed_CMD(DVDCommandBlock* block) { + DVDLowReadDiskID(&CurrDiskID, cbForStateCoverClosed); } -#pragma pop /* 80349F34-80349F98 344874 0064+00 1/1 0/0 0/0 .text cbForStateCoverClosed */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void cbForStateCoverClosed() { - nofralloc -#include "asm/dolphin/dvd/dvd/cbForStateCoverClosed.s" +static void cbForStateCoverClosed(u32 intType) { + if (intType == 16) { + __DVDStoreErrorCode(0x1234568); + DVDReset(); + cbForStateError(0); + return; + } + + if (intType & 1) { + NumInternalRetry = 0; + stateCheckID(); + } else { + stateGettingError(); + } } -#pragma pop /* 80349F98-80349FC0 3448D8 0028+00 3/3 0/0 0/0 .text stateMotorStopped */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void stateMotorStopped() { - nofralloc -#include "asm/dolphin/dvd/dvd/stateMotorStopped.s" +static void stateMotorStopped(void) { + DVDLowWaitCoverClose(cbForStateMotorStopped); } -#pragma pop /* 80349FC0-8034A0AC 344900 00EC+00 4/4 0/0 0/0 .text cbForStateMotorStopped */ +// needs stateCoverClosed converted to static inline +#ifdef NONMATCHING +static void cbForStateMotorStopped(u32 intType) { + __DIRegs[1] = 0; + executing->state = 3; + stateCoverClosed(); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void cbForStateMotorStopped() { +static asm void cbForStateMotorStopped(u32 intType) { nofralloc #include "asm/dolphin/dvd/dvd/cbForStateMotorStopped.s" } #pragma pop +#endif /* 8034A0AC-8034A394 3449EC 02E8+00 18/18 0/0 0/0 .text stateReady */ +#ifdef NONMATCHING +static void stateReady() { + DVDCommandBlock* finished; + + if (!__DVDCheckWaitingQueue()) { + executing = (DVDCommandBlock*)NULL; + return; + } + + if (PauseFlag) { + PausingFlag = TRUE; + executing = (DVDCommandBlock*)NULL; + return; + } + + executing = __DVDPopWaitingQueue(); + + if (FatalErrorFlag) { + executing->state = -1; + finished = executing; + executing = &DummyCommandBlock; + if (finished->callback) { + (finished->callback)(-1, finished); + } + stateReady(); + return; + } + + CurrCommand = executing->command; + + if (ResumeFromHere) { + switch (ResumeFromHere) { + case 1: + executing->state = 1; + stateCoverClosed(); + break; + case 2: + executing->state = 11; + stateMotorStopped(); + break; + + case 3: + executing->state = 4; + stateMotorStopped(); + break; + + case 4: + executing->state = 5; + stateMotorStopped(); + break; + case 7: + case 6: + executing->state = 3; + stateCoverClosed(); + break; + + case 5: + executing->state = -1; + break; + } + + ResumeFromHere = 0; + } else { + executing->state = 1; + stateBusy(executing); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void stateReady() { +static asm void stateReady(void) { nofralloc #include "asm/dolphin/dvd/dvd/stateReady.s" } #pragma pop - -/* ############################################################################################## */ -/* 803D15A8-803D15EC -00001 0044+00 1/1 0/0 0/0 .data @359 */ -SECTION_DATA static void* lit_359[17] = { - (void*)(((char*)stateBusy) + 0x318), (void*)(((char*)stateBusy) + 0x6C), - (void*)(((char*)stateBusy) + 0x10C), (void*)(((char*)stateBusy) + 0x130), - (void*)(((char*)stateBusy) + 0x6C), (void*)(((char*)stateBusy) + 0x40), - (void*)(((char*)stateBusy) + 0x150), (void*)(((char*)stateBusy) + 0x1B4), - (void*)(((char*)stateBusy) + 0x1E0), (void*)(((char*)stateBusy) + 0x214), - (void*)(((char*)stateBusy) + 0x238), (void*)(((char*)stateBusy) + 0x25C), - (void*)(((char*)stateBusy) + 0x280), (void*)(((char*)stateBusy) + 0x2A4), - (void*)(((char*)stateBusy) + 0x2CC), (void*)(((char*)stateBusy) + 0x140), - (void*)(((char*)stateBusy) + 0x2F8), -}; +#endif /* 8034A394-8034A6D4 344CD4 0340+00 4/3 0/0 0/0 .text stateBusy */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void stateBusy() { - nofralloc -#include "asm/dolphin/dvd/dvd/stateBusy.s" +#define MIN(a, b) (((a) > (b)) ? (b) : (a)) +static void stateBusy(DVDCommandBlock* block) { + DVDCommandBlock* finished; + LastState = stateBusy; + switch (block->command) { + case 5: + __DIRegs[1] = __DIRegs[1]; + block->current_transfer_size = sizeof(DVDDiskID); + DVDLowReadDiskID(block->buffer, cbForStateBusy); + break; + case 1: + case 4: + if (!block->length) { + finished = executing; + executing = &DummyCommandBlock; + finished->state = 0; + if (finished->callback) { + finished->callback(0, finished); + } + stateReady(); + } else { + __DIRegs[1] = __DIRegs[1]; + block->current_transfer_size = MIN(block->length - block->transferred_size, 0x80000); + DVDLowRead((void*)((u8*)block->buffer + block->transferred_size), + block->current_transfer_size, block->offset + block->transferred_size, + cbForStateBusy); + } + break; + case 2: + __DIRegs[1] = __DIRegs[1]; + DVDLowSeek(block->offset, cbForStateBusy); + break; + case 3: + DVDLowStopMotor(cbForStateBusy); + break; + case 15: + DVDLowStopMotor(cbForStateBusy); + break; + case 6: + __DIRegs[1] = __DIRegs[1]; + if (AutoFinishing) { + executing->current_transfer_size = 0; + DVDLowRequestAudioStatus(0, cbForStateBusy); + } else { + executing->current_transfer_size = 1; + DVDLowAudioStream(0, block->length, block->offset, cbForStateBusy); + } + break; + case 7: + __DIRegs[1] = __DIRegs[1]; + DVDLowAudioStream(0x10000, 0, 0, cbForStateBusy); + break; + case 8: + __DIRegs[1] = __DIRegs[1]; + AutoFinishing = TRUE; + DVDLowAudioStream(0, 0, 0, cbForStateBusy); + break; + case 9: + __DIRegs[1] = __DIRegs[1]; + DVDLowRequestAudioStatus(0, cbForStateBusy); + break; + case 10: + __DIRegs[1] = __DIRegs[1]; + DVDLowRequestAudioStatus(0x10000, cbForStateBusy); + break; + case 11: + __DIRegs[1] = __DIRegs[1]; + DVDLowRequestAudioStatus(0x20000, cbForStateBusy); + break; + case 12: + __DIRegs[1] = __DIRegs[1]; + DVDLowRequestAudioStatus(0x30000, cbForStateBusy); + break; + case 13: + __DIRegs[1] = __DIRegs[1]; + DVDLowAudioBufferConfig(block->offset, block->length, cbForStateBusy); + break; + case 14: + __DIRegs[1] = __DIRegs[1]; + block->current_transfer_size = sizeof(DVDDriveInfo); + DVDLowInquiry(block->buffer, cbForStateBusy); + break; + case 16: + __DIRegs[1] = __DIRegs[1]; + DVDLowStopMotor(cbForStateBusy); + break; + default: + checkOptionalCommand(block, cbForStateBusy); + break; + } } -#pragma pop - /* ############################################################################################## */ /* 803D15EC-803D15F8 02E70C 000C+00 1/1 0/0 0/0 .data ImmCommand */ -SECTION_DATA static u8 ImmCommand[12] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, -}; +static u32 ImmCommand[] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF}; /* 804509FC-80450A00 00047C 0004+00 1/1 0/0 0/0 .sdata DmaCommand */ -SECTION_SDATA static u32 DmaCommand = 0xFFFFFFFF; +SECTION_SDATA static u32 DmaCommand[] = {0xFFFFFFFF}; /* 8034A6D4-8034AD2C 345014 0658+00 1/1 0/0 0/0 .text cbForStateBusy */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void cbForStateBusy() { +static asm void cbForStateBusy(u32 intType) { nofralloc #include "asm/dolphin/dvd/dvd/cbForStateBusy.s" } #pragma pop +static inline BOOL issueCommand(s32 prio, DVDCommandBlock* block) { + BOOL level; + BOOL result; + + if (autoInvalidation && (block->command == 1 || block->command == 4 || block->command == 5 || + block->command == 14)) { + DCInvalidateRange(block->buffer, block->length); + } + + level = OSDisableInterrupts(); + + block->state = 2; + result = __DVDPushWaitingQueue(prio, block); + + if ((executing == (DVDCommandBlock*)NULL) && (PauseFlag == FALSE)) { + stateReady(); + } + + OSRestoreInterrupts(level); + + return result; +} + /* 8034AD2C-8034AE08 34566C 00DC+00 0/0 5/5 0/0 .text DVDReadAbsAsyncPrio */ +#ifdef NONMATCHING +BOOL DVDReadAbsAsyncPrio(DVDCommandBlock* block, void* addr, s32 length, s32 offset, + DVDCBCallback callback, s32 prio) { + BOOL idle; + block->command = 1; + block->buffer = addr; + block->length = length; + block->offset = offset; + block->transferred_size = 0; + block->callback = callback; + + idle = issueCommand(prio, block); + return idle; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void DVDReadAbsAsyncPrio() { +asm BOOL DVDReadAbsAsyncPrio(DVDCommandBlock* block, void* addr, s32 length, s32 offset, + DVDCBCallback callback, s32 prio) { nofralloc #include "asm/dolphin/dvd/dvd/DVDReadAbsAsyncPrio.s" } #pragma pop +#endif /* 8034AE08-8034AED8 345748 00D0+00 0/0 1/1 0/0 .text DVDReadAbsAsyncForBS */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void DVDReadAbsAsyncForBS() { +asm BOOL DVDReadAbsAsyncForBS(DVDCommandBlock* block, void* addr, s32 length, s32 offset, + DVDCBCallback callback) { nofralloc #include "asm/dolphin/dvd/dvd/DVDReadAbsAsyncForBS.s" } @@ -541,7 +963,7 @@ asm void DVDReadAbsAsyncForBS() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void DVDReadDiskID() { +asm BOOL DVDReadDiskID(DVDCommandBlock* block, DVDDiskID* diskID, DVDCBCallback callback) { nofralloc #include "asm/dolphin/dvd/dvd/DVDReadDiskID.s" } @@ -551,7 +973,7 @@ asm void DVDReadDiskID() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void DVDCancelStreamAsync() { +asm BOOL DVDCancelStreamAsync(DVDCommandBlock* block, DVDCBCallback callback) { nofralloc #include "asm/dolphin/dvd/dvd/DVDCancelStreamAsync.s" } @@ -561,67 +983,87 @@ asm void DVDCancelStreamAsync() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void DVDInquiryAsync() { +asm BOOL DVDInquiryAsync(DVDCommandBlock* block, DVDDriveInfo* info, DVDCBCallback callback) { nofralloc #include "asm/dolphin/dvd/dvd/DVDInquiryAsync.s" } #pragma pop /* 8034B138-8034B17C 345A78 0044+00 15/15 2/2 0/0 .text DVDReset */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void DVDReset() { - nofralloc -#include "asm/dolphin/dvd/dvd/DVDReset.s" +void DVDReset(void) { + DVDLowReset(); + __DIRegs[0] = 0x2A; + __DIRegs[1] = __DIRegs[1]; + ResetRequired = FALSE; + ResumeFromHere = 0; } -#pragma pop /* 8034B17C-8034B1C8 345ABC 004C+00 0/0 6/6 0/0 .text DVDGetCommandBlockStatus */ +// needs compiler epilogue patch +#ifdef NONMATCHING +s32 DVDGetCommandBlockStatus(const DVDCommandBlock* block) { + BOOL enabled; + s32 retVal; + + enabled = OSDisableInterrupts(); + + if (block->state == 3) { + retVal = 1; + } else { + retVal = block->state; + } + + OSRestoreInterrupts(enabled); + + return retVal; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm int DVDGetCommandBlockStatus(DVDCommandBlock*) { +asm s32 DVDGetCommandBlockStatus(const DVDCommandBlock* block) { nofralloc #include "asm/dolphin/dvd/dvd/DVDGetCommandBlockStatus.s" } #pragma pop +#endif /* 8034B1C8-8034B274 345B08 00AC+00 0/0 7/7 0/0 .text DVDGetDriveStatus */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm DVDState DVDGetDriveStatus() { +asm s32 DVDGetDriveStatus(void) { nofralloc #include "asm/dolphin/dvd/dvd/DVDGetDriveStatus.s" } #pragma pop /* 8034B274-8034B284 345BB4 0010+00 0/0 1/1 0/0 .text DVDSetAutoInvalidation */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void DVDSetAutoInvalidation() { - nofralloc -#include "asm/dolphin/dvd/dvd/DVDSetAutoInvalidation.s" +BOOL DVDSetAutoInvalidation(BOOL autoInval) { + BOOL prev; + prev = autoInvalidation; + autoInvalidation = autoInval; + return prev; } -#pragma pop /* 8034B284-8034B2D4 345BC4 0050+00 0/0 1/1 0/0 .text DVDResume */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void DVDResume() { - nofralloc -#include "asm/dolphin/dvd/dvd/DVDResume.s" +void DVDResume(void) { + BOOL level; + level = OSDisableInterrupts(); + PauseFlag = FALSE; + if (PausingFlag) { + PausingFlag = FALSE; + stateReady(); + } + OSRestoreInterrupts(level); } -#pragma pop /* ############################################################################################## */ /* 803D15F8-803D163C 02E718 0041+03 0/0 0/0 0/0 .data @789 */ #pragma push #pragma force_active on -SECTION_DATA static char lit_789[] = "DVDChangeDiskAsync(): You can't specify NULL to company name. \n"; +SECTION_DATA static char lit_789[] = + "DVDChangeDiskAsync(): You can't specify NULL to company name. \n"; #pragma pop /* 803D163C-803D1670 -00001 0034+00 1/1 0/0 0/0 .data @956 */ @@ -636,44 +1078,172 @@ SECTION_DATA static void* lit_956[13] = { }; /* 8034B2D4-8034B550 345C14 027C+00 3/2 0/0 0/0 .text DVDCancelAsync */ +// needs compiler epilogue patch +#ifdef NONMATCHING +BOOL DVDCancelAsync(DVDCommandBlock* block, DVDCBCallback callback) { + BOOL enabled; + DVDLowCallback old; + + enabled = OSDisableInterrupts(); + + switch (block->state) { + case -1: + case 0: + case 10: + if (callback) + (*callback)(0, block); + break; + + case 1: + if (Canceling) { + OSRestoreInterrupts(enabled); + return FALSE; + } + + Canceling = TRUE; + CancelCallback = callback; + if (block->command == 4 || block->command == 1) { + DVDLowBreak(); + } + break; + + case 2: + __DVDDequeueWaitingQueue(block); + block->state = 10; + if (block->callback) + (block->callback)(-3, block); + if (callback) + (*callback)(0, block); + break; + + case 3: + switch (block->command) { + case 5: + case 4: + case 13: + case 15: + if (callback) + (*callback)(0, block); + break; + + default: + if (Canceling) { + OSRestoreInterrupts(enabled); + return FALSE; + } + Canceling = TRUE; + CancelCallback = callback; + break; + } + break; + + case 4: + case 5: + case 6: + case 7: + case 11: + old = DVDLowClearCallback(); + if (old != cbForStateMotorStopped) { + OSRestoreInterrupts(enabled); + return FALSE; + } + + if (block->state == 4) + ResumeFromHere = 3; + if (block->state == 5) + ResumeFromHere = 4; + if (block->state == 6) + ResumeFromHere = 1; + if (block->state == 11) + ResumeFromHere = 2; + if (block->state == 7) + ResumeFromHere = 7; + + executing = &DummyCommandBlock; + + block->state = 10; + if (block->callback) { + (block->callback)(-3, block); + } + if (callback) { + (callback)(0, block); + } + stateReady(); + break; + } + + OSRestoreInterrupts(enabled); + return TRUE; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void DVDCancelAsync() { +static asm BOOL DVDCancelAsync(DVDCommandBlock* block, DVDCBCallback callback) { nofralloc #include "asm/dolphin/dvd/dvd/DVDCancelAsync.s" } #pragma pop +#endif /* 8034B550-8034B5FC 345E90 00AC+00 0/0 1/1 1/1 .text DVDCancel */ +// needs compiler epilogue patch +#ifdef NONMATCHING +s32 DVDCancel(DVDCommandBlock* block) { + BOOL result; + s32 state; + u32 command; + BOOL enabled; + + result = DVDCancelAsync(block, cbForCancelSync); + + if (result == FALSE) { + return -1; + } + + enabled = OSDisableInterrupts(); + + for (;;) { + state = ((volatile DVDCommandBlock*)block)->state; + + if ((state == 0) || (state == -1) || (state == 10)) { + break; + } + + if (state == 3) { + command = ((volatile DVDCommandBlock*)block)->command; + + if ((command == 4) || (command == 5) || (command == 13) || (command == 15)) { + break; + } + } + + OSSleepThread(&__DVDThreadQueue); + } + + OSRestoreInterrupts(enabled); + return 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void DVDCancel() { +asm s32 DVDCancel(DVDCommandBlock* block) { nofralloc #include "asm/dolphin/dvd/dvd/DVDCancel.s" } #pragma pop +#endif /* 8034B5FC-8034B620 345F3C 0024+00 1/1 0/0 0/0 .text cbForCancelSync */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void cbForCancelSync() { - nofralloc -#include "asm/dolphin/dvd/dvd/cbForCancelSync.s" +static void cbForCancelSync(s32 result, DVDCommandBlock* block) { + OSWakeupThread(&__DVDThreadQueue); } -#pragma pop /* 8034B620-8034B628 345F60 0008+00 0/0 3/3 0/0 .text DVDGetCurrentDiskID */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm DVDDiskID* DVDGetCurrentDiskID() { - nofralloc -#include "asm/dolphin/dvd/dvd/DVDGetCurrentDiskID.s" +DVDDiskID* DVDGetCurrentDiskID(void) { + return (DVDDiskID*)OSPhysicalToCached(0); } -#pragma pop /* ############################################################################################## */ /* 803D1670-803D16A8 -00001 0034+04 1/1 0/0 0/0 .data @1060 */ @@ -696,31 +1266,88 @@ SECTION_DATA static void* lit_1060[13 + 1 /* padding */] = { }; /* 8034B628-8034B720 345F68 00F8+00 1/0 4/4 0/0 .text DVDCheckDisk */ +// needs compiler epilogue patch +#ifdef NONMATCHING +BOOL DVDCheckDisk(void) { + BOOL enabled; + s32 retVal; + s32 state; + u32 coverReg; + + enabled = OSDisableInterrupts(); + + if (FatalErrorFlag) { + state = -1; + } else if (PausingFlag) { + state = 8; + } else { + if (executing == (DVDCommandBlock*)NULL) { + state = 0; + } else if (executing == &DummyCommandBlock) { + state = 0; + } else { + state = executing->state; + } + } + + switch (state) { + case 1: + case 9: + case 10: + case 2: + retVal = TRUE; + break; + + case -1: + case 11: + case 7: + case 3: + case 4: + case 5: + case 6: + retVal = FALSE; + break; + + case 0: + case 8: + coverReg = __DIRegs[1]; + if (((coverReg >> 2) & 1) || (coverReg & 1)) { + retVal = FALSE; + } else { + retVal = TRUE; + } + } + + OSRestoreInterrupts(enabled); + + return retVal; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm BOOL DVDCheckDisk() { +asm BOOL DVDCheckDisk(void) { nofralloc #include "asm/dolphin/dvd/dvd/DVDCheckDisk.s" } #pragma pop +#endif /* 8034B720-8034B83C 346060 011C+00 0/0 1/1 0/0 .text __DVDPrepareResetAsync */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __DVDPrepareResetAsync() { +asm void __DVDPrepareResetAsync(DVDCBCallback callback) { nofralloc #include "asm/dolphin/dvd/dvd/__DVDPrepareResetAsync.s" } #pragma pop /* 8034B83C-8034B874 34617C 0038+00 0/0 1/1 0/0 .text __DVDTestAlarm */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __DVDTestAlarm() { - nofralloc -#include "asm/dolphin/dvd/dvd/__DVDTestAlarm.s" +BOOL __DVDTestAlarm(OSAlarm* alarm) { + if (alarm == &ResetAlarm) { + return TRUE; + } + + return __DVDLowTestAlarm(alarm); } -#pragma pop diff --git a/libs/dolphin/dvd/dvdidutils.c b/libs/dolphin/dvd/dvdidutils.c index 5b5b1cc636..8e5cd49734 100644 --- a/libs/dolphin/dvd/dvdidutils.c +++ b/libs/dolphin/dvd/dvdidutils.c @@ -1,34 +1,39 @@ -// -// Generated By: dol2asm -// Translation Unit: dvdidutils -// - #include "dolphin/dvd/dvdidutils.h" -#include "dol2asm.h" -#include "dolphin/types.h" - -// -// Forward References: -// - -void DVDCompareDiskID(); - -// -// External References: -// - -void strncmp(); - -// -// Declarations: -// +#include "MSL_C/MSL_Common/Src/string.h" +#include "dolphin/dvd/dvd.h" /* 8034BC04-8034BCFC 346544 00F8+00 0/0 1/1 0/0 .text DVDCompareDiskID */ +// needs compiler epilogue patch +#ifdef NONMATCHING +BOOL DVDCompareDiskID(DVDDiskID* id1, DVDDiskID* id2) { + if (id1->game_name[0] && id2->game_name[0] && + strncmp(&id1->game_name[0], &id2->game_name[0], 4)) { + return FALSE; + } + + if (!id1->company[0] || !id2->company[0] || strncmp(&id1->company[0], &id2->company[0], 2)) { + return FALSE; + } + + if (id1->disk_number != 0xff && id2->disk_number != 0xff && + id1->disk_number != id2->disk_number) { + return FALSE; + } + + if (id1->game_version != 0xff && id2->game_version != 0xff && + id1->game_version != id2->game_version) { + return FALSE; + } + + return TRUE; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void DVDCompareDiskID() { +asm BOOL DVDCompareDiskID(DVDDiskID* id1, DVDDiskID* id2) { nofralloc #include "asm/dolphin/dvd/dvdidutils/DVDCompareDiskID.s" } #pragma pop +#endif diff --git a/libs/dolphin/dvd/fstload.c b/libs/dolphin/dvd/fstload.c index 80795a70a1..e207c4deaf 100644 --- a/libs/dolphin/dvd/fstload.c +++ b/libs/dolphin/dvd/fstload.c @@ -4,8 +4,10 @@ // #include "dolphin/dvd/fstload.h" +#include "MSL_C/MSL_Common/Src/string.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/dvd/dvd.h" +#include "dolphin/os/OS.h" // // Forward References: @@ -14,42 +16,40 @@ static void cb(); void __fstLoad(); -// -// External References: -// - -SECTION_INIT void memcpy(); -void OSReport(); -void OSGetArenaHi(); -void OSSetArenaHi(); -void DVDReadAbsAsyncForBS(); -void DVDReadDiskID(); -void DVDReset(); -void DVDGetDriveStatus(); - // // Declarations: // /* ############################################################################################## */ /* 804517D0-804517D4 000CD0 0004+00 1/1 0/0 0/0 .sbss status */ -static u8 status[4]; +static s32 status; /* 804517D4-804517D8 000CD4 0004+00 2/2 0/0 0/0 .sbss bb2 */ -static u8 bb2[4]; +static DVDBB2* bb2; /* 804517D8-804517E0 000CD8 0004+04 2/2 0/0 0/0 .sbss idTmp */ -static u8 idTmp[4 + 4 /* padding */]; +static DVDDiskID* idTmp; /* 8034BD2C-8034BE04 34666C 00D8+00 1/1 0/0 0/0 .text cb */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void cb() { - nofralloc -#include "asm/dolphin/dvd/fstload/cb.s" +static void cb(s32 result, DVDCommandBlock* block) { + if (result > 0) { + switch (status) { + case 0: + status = 1; + DVDReadAbsAsyncForBS(block, bb2, OSRoundUp32B(sizeof(bb2)), 0x420, cb); + break; + case 1: + status = 2; + DVDReadAbsAsyncForBS(block, bb2->FSTAddress, OSRoundUp32B(bb2->FSTLength), + bb2->FSTPosition, cb); + } + } else if (result == -1) { + } else if (result == -4) { + status = 0; + DVDReset(); + DVDReadDiskID(block, idTmp, cb); + } } -#pragma pop /* ############################################################################################## */ /* 803D16F0-803D170C 02E810 001A+02 1/1 0/0 0/0 .data @38 */ @@ -80,7 +80,7 @@ SECTION_DATA static char lit_44[] = " Streaming ... %s\n"; #pragma pop /* 8044C9B8-8044C9F8 0796D8 003F+01 1/1 0/0 0/0 .bss bb2Buf */ -static u8 bb2Buf[63 + 1 /* padding */]; +static u8 bb2Buf[OSRoundUp32B(sizeof(DVDBB2)) + 31]; /* 8044C9F8-8044CA28 079718 0030+00 1/1 0/0 0/0 .bss block$18 */ static u8 block[48]; @@ -95,11 +95,49 @@ SECTION_SDATA static char lit_42[] = "OFF"; SECTION_SDATA static char lit_43[] = "ON"; /* 8034BE04-8034BF6C 346744 0168+00 0/0 1/1 0/0 .text __fstLoad */ +// needs compiler epilogue patch +#ifdef NONMATCHING +void __fstLoad(void) { + OSBootInfo* bootInfo; + DVDDiskID* id; + u8 idTmpBuf[sizeof(DVDDiskID) + 31]; + static DVDCommandBlock block; + void* arenaHi; + + arenaHi = OSGetArenaHi(); + bootInfo = (OSBootInfo*)OSPhysicalToCached(0); + + idTmp = (DVDDiskID*)(OSRoundUp32B(idTmpBuf)); + bb2 = (DVDBB2*)(OSRoundUp32B(bb2Buf)); + + DVDReset(); + DVDReadDiskID(&block, idTmp, cb); + while (DVDGetDriveStatus() != 0) + ; + + bootInfo->fst_location = bb2->FSTAddress; + bootInfo->fst_max_length = bb2->FSTMaxLength; + + id = &bootInfo->disk_info; + + memcpy(id, idTmp, sizeof(DVDDiskID)); + OSReport("\n"); + OSReport(" Game Name ... %c%c%c%c\n", id->game_name[0], id->game_name[1], id->game_name[2], + id->game_name[3]); + OSReport(" Company ..... %c%c\n", id->company[0], id->company[1]); + OSReport(" Disk # ...... %d\n", id->disk_number); + OSReport(" Game ver .... %d\n", id->game_version); + OSReport(" Streaming ... %s\n", (id->is_streaming == 0) ? "OFF" : "ON"); + OSReport("\n"); + OSSetArenaHi(bb2->FSTAddress); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __fstLoad() { +asm void __fstLoad(void) { nofralloc #include "asm/dolphin/dvd/fstload/__fstLoad.s" } #pragma pop +#endif diff --git a/libs/exi/EXIBios.c b/libs/dolphin/exi/EXIBios.c similarity index 61% rename from libs/exi/EXIBios.c rename to libs/dolphin/exi/EXIBios.c index b857b70927..2b872e18ee 100644 --- a/libs/exi/EXIBios.c +++ b/libs/dolphin/exi/EXIBios.c @@ -3,54 +3,31 @@ // Translation Unit: EXIBios // -#include "exi/EXIBios.h" +#include "dolphin/exi/EXIBios.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/os/OS.h" + +#define REG_MAX 5 +#define REG(chan, idx) (__EXIRegs[((chan)*REG_MAX) + (idx)]) + +#define EXI_0CR(tstart, dma, rw, tlen) \ + ((((u32)(tstart)) << 0) | (((u32)(dma)) << 1) | (((u32)(rw)) << 2) | (((u32)(tlen)) << 4)) // // Forward References: // -static void SetExiInterruptMask(); -void EXIImm(); -void EXIImmEx(); -void EXIDma(); -void EXISync(); -static void EXIClearInterrupts(); -void EXISetExiCallback(); -void __EXIProbe(); -void EXIProbe(); -void EXIProbeEx(); -void EXIAttach(); -void EXIDetach(); -void EXISelect(); -void EXIDeselect(); -static void EXIIntrruptHandler(); -static void TCIntrruptHandler(); -static void EXTIntrruptHandler(); -void EXIInit(); -void EXILock(); -void EXIUnlock(); -void EXIGetState(); -static void UnlockedHandler(); -void EXIGetID(); +static void SetExiInterruptMask(s32 chan, EXIControl* exi); +BOOL __EXIProbe(s32 chan); +static u32 EXIClearInterrupts(s32 chan, BOOL exi, BOOL tc, BOOL ext); +static void EXIIntrruptHandler(s16 interrupt, OSContext* context); +static void TCIntrruptHandler(s16 interrupt, OSContext* context); +static void EXTIntrruptHandler(s16 interrupt, OSContext* context); // // External References: // -void OSGetConsoleType(); -void __OSGetDIConfig(); -void OSRegisterVersion(); -void OSSetCurrentContext(); -void OSClearContext(); -void OSDisableInterrupts(); -void OSRestoreInterrupts(); -void __OSSetInterruptHandler(); -void __OSGetInterruptHandler(); -void __OSMaskInterrupts(); -void __OSUnmaskInterrupts(); -void OSGetTime(); void __OSEnableBarnacle(); void __div2i(); void memmove(); @@ -62,53 +39,176 @@ extern u8 __OSInIPL[4 + 4 /* padding */]; /* ############################################################################################## */ /* 8044C570-8044C630 079290 00C0+00 20/20 0/0 0/0 .bss Ecb */ -static u8 Ecb[192]; +static EXIControl Ecb[3]; /* 80342C0C-80342D00 33D54C 00F4+00 4/4 0/0 0/0 .text SetExiInterruptMask */ +#ifdef NONMATCHING +static void SetExiInterruptMask(s32 chan, EXIControl* exi) { + EXIControl* exi2; + + exi2 = &Ecb[2]; + switch (chan) { + case 0: + if ((exi->exiCallback == 0 && exi2->exiCallback == 0) || (exi->state & STATE_LOCKED)) { + __OSMaskInterrupts(OS_INTERRUPTMASK_EXI_0_EXI | OS_INTERRUPTMASK_EXI_2_EXI); + } else { + __OSUnmaskInterrupts(OS_INTERRUPTMASK_EXI_0_EXI | OS_INTERRUPTMASK_EXI_2_EXI); + } + break; + case 1: + if (exi->exiCallback == 0 || (exi->state & STATE_LOCKED)) { + __OSMaskInterrupts(OS_INTERRUPTMASK_EXI_1_EXI); + } else { + __OSUnmaskInterrupts(OS_INTERRUPTMASK_EXI_1_EXI); + } + break; + case 2: + if (__OSGetInterruptHandler(OS_INTR_PI_DEBUG) == 0 || (exi->state & STATE_LOCKED)) { + __OSMaskInterrupts(OS_INTERRUPTMASK_PI_DEBUG); + } else { + __OSUnmaskInterrupts(OS_INTERRUPTMASK_PI_DEBUG); + } + break; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void SetExiInterruptMask() { +static asm void SetExiInterruptMask(s32 chan, EXIControl* exi) { nofralloc #include "asm/exi/EXIBios/SetExiInterruptMask.s" } #pragma pop +#endif /* 80342D00-80342F5C 33D640 025C+00 2/2 9/9 0/0 .text EXIImm */ +#ifdef NONMATCHING +s32 EXIImm(s32 chan, void* buf, s32 len, u32 type, EXICallback callback) { + EXIControl* exi = &Ecb[chan]; + BOOL enabled; + + enabled = OSDisableInterrupts(); + if ((exi->state & EXI_STATE_BUSY) || !(exi->state & EXI_STATE_SELECTED)) { + OSRestoreInterrupts(enabled); + return FALSE; + } + + exi->tcCallback = callback; + if (exi->tcCallback) { + EXIClearInterrupts(chan, FALSE, TRUE, FALSE); + __OSUnmaskInterrupts(OS_INTERRUPTMASK_EXI_0_TC >> (3 * chan)); + } + + exi->state |= EXI_STATE_IMM; + + if (type != EXI_READ) { + u32 data; + int i; + + data = 0; + for (i = 0; i < len; i++) { + data |= ((u8*)buf)[i] << ((3 - i) * 8); + } + REG(chan, 4) = data; + } + + exi->immBuf = buf; + exi->immLen = (type != EXI_WRITE) ? len : 0; + + REG(chan, 3) = EXI_0CR(1, 0, type, len - 1); + + OSRestoreInterrupts(enabled); + + return TRUE; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void EXIImm() { +asm s32 EXIImm(s32 chan, void* buf, s32 len, u32 type, EXICallback callback) { nofralloc #include "asm/exi/EXIBios/EXIImm.s" } #pragma pop +#endif /* 80342F5C-80342FFC 33D89C 00A0+00 0/0 7/7 0/0 .text EXIImmEx */ +// needs compiler lmw/lwz order patch +#ifdef NONMATCHING +BOOL EXIImmEx(s32 chan, void* buf, s32 len, u32 mode) { + s32 xLen; + + while (len) { + xLen = (len < 4) ? len : 4; + if (!EXIImm(chan, buf, xLen, mode, NULL)) { + return FALSE; + } + + if (!EXISync(chan)) { + return FALSE; + } + + (u8*)buf += xLen; + len -= xLen; + } + return TRUE; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void EXIImmEx() { +asm s32 EXIImmEx(s32 chan, void* buf, s32 len, u32 mode) { nofralloc #include "asm/exi/EXIBios/EXIImmEx.s" } #pragma pop +#endif /* 80342FFC-803430E8 33D93C 00EC+00 0/0 4/4 0/0 .text EXIDma */ +#ifdef NONMATCHING +BOOL EXIDma(s32 chan, void* buf, s32 len, u32 type, EXICallback callback) { + EXIControl* exi = &Ecb[chan]; + BOOL enabled; + + enabled = OSDisableInterrupts(); + if ((exi->state & EXI_STATE_BUSY) || !(exi->state & EXI_STATE_SELECTED)) { + OSRestoreInterrupts(enabled); + return FALSE; + } + + exi->tcCallback = callback; + if (exi->tcCallback) { + EXIClearInterrupts(chan, FALSE, TRUE, FALSE); + __OSUnmaskInterrupts(OS_INTERRUPTMASK_EXI_0_TC >> (3 * chan)); + } + + exi->state |= EXI_STATE_DMA; + + REG(chan, 1) = (u32)buf & 0x3ffffe0; + REG(chan, 2) = (u32)len; + REG(chan, 3) = EXI_0CR(1, 1, type, 0); + + OSRestoreInterrupts(enabled); + + return TRUE; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void EXIDma() { +asm BOOL EXIDma(s32 chan, void* buf, s32 len, u32 type, EXICallback callback) { nofralloc #include "asm/exi/EXIBios/EXIDma.s" } #pragma pop +#endif /* 803430E8-80343334 33DA28 024C+00 2/2 9/9 0/0 .text EXISync */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void EXISync() { +asm BOOL EXISync(s32 chan) { nofralloc #include "asm/exi/EXIBios/EXISync.s" } @@ -118,7 +218,7 @@ asm void EXISync() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void EXIClearInterrupts() { +static asm u32 EXIClearInterrupts(s32 chan, BOOL exi, BOOL tc, BOOL ext) { nofralloc #include "asm/exi/EXIBios/EXIClearInterrupts.s" } @@ -128,7 +228,7 @@ static asm void EXIClearInterrupts() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void EXISetExiCallback() { +asm EXICallback EXISetExiCallback(s32 chan, EXICallback exiCallback) { nofralloc #include "asm/exi/EXIBios/EXISetExiCallback.s" } @@ -138,7 +238,7 @@ asm void EXISetExiCallback() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __EXIProbe() { +asm BOOL __EXIProbe(s32 chan) { nofralloc #include "asm/exi/EXIBios/__EXIProbe.s" } @@ -148,7 +248,7 @@ asm void __EXIProbe() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void EXIProbe() { +asm BOOL EXIProbe(s32 chan) { nofralloc #include "asm/exi/EXIBios/EXIProbe.s" } @@ -158,7 +258,7 @@ asm void EXIProbe() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void EXIProbeEx() { +asm s32 EXIProbeEx(s32 chan) { nofralloc #include "asm/exi/EXIBios/EXIProbeEx.s" } @@ -168,7 +268,7 @@ asm void EXIProbeEx() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void EXIAttach() { +asm BOOL EXIAttach(s32 chan, EXICallback extCallback) { nofralloc #include "asm/exi/EXIBios/EXIAttach.s" } @@ -178,7 +278,7 @@ asm void EXIAttach() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void EXIDetach() { +asm BOOL EXIDetach(s32 chan) { nofralloc #include "asm/exi/EXIBios/EXIDetach.s" } @@ -188,7 +288,7 @@ asm void EXIDetach() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void EXISelect() { +asm BOOL EXISelect(s32 chan, u32 dev, u32 freq) { nofralloc #include "asm/exi/EXIBios/EXISelect.s" } @@ -198,7 +298,7 @@ asm void EXISelect() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void EXIDeselect() { +asm BOOL EXIDeselect(s32 chan) { nofralloc #include "asm/exi/EXIBios/EXIDeselect.s" } @@ -208,7 +308,7 @@ asm void EXIDeselect() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void EXIIntrruptHandler() { +static asm void EXIIntrruptHandler(s16 interrupt, OSContext* context) { nofralloc #include "asm/exi/EXIBios/EXIIntrruptHandler.s" } @@ -218,7 +318,7 @@ static asm void EXIIntrruptHandler() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void TCIntrruptHandler() { +static asm void TCIntrruptHandler(s16 interrupt, OSContext* context) { nofralloc #include "asm/exi/EXIBios/TCIntrruptHandler.s" } @@ -228,7 +328,7 @@ static asm void TCIntrruptHandler() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void EXTIntrruptHandler() { +static asm void EXTIntrruptHandler(s16 interrupt, OSContext* context) { nofralloc #include "asm/exi/EXIBios/EXTIntrruptHandler.s" } @@ -236,14 +336,11 @@ static asm void EXTIntrruptHandler() { /* ############################################################################################## */ /* 803D10A8-803D10F0 02E1C8 0045+03 1/0 0/0 0/0 .data @1 */ -SECTION_DATA static char lit_1[] = "<< Dolphin SDK - EXI\trelease build: Apr 5 2004 04:14:14 (0x2301) >>"; +SECTION_DATA static char lit_1[] = + "<< Dolphin SDK - EXI\trelease build: Apr 5 2004 04:14:14 (0x2301) >>"; /* 804509C0-804509C8 -00001 0004+04 1/1 0/0 0/0 .sdata __EXIVersion */ -SECTION_SDATA static void* __EXIVersion[1 + 1 /* padding */] = { - (void*)&lit_1, - /* padding */ - NULL, -}; +SECTION_SDATA static const char* __EXIVersion = lit_1; /* 804516D8-804516E0 000BD8 0004+04 2/2 0/0 0/0 .sbss IDSerialPort1 */ static u8 IDSerialPort1[4 + 4 /* padding */]; @@ -252,7 +349,7 @@ static u8 IDSerialPort1[4 + 4 /* padding */]; #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void EXIInit() { +asm void EXIInit(void) { nofralloc #include "asm/exi/EXIBios/EXIInit.s" } @@ -262,7 +359,7 @@ asm void EXIInit() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void EXILock() { +asm BOOL EXILock(s32 chan, u32 dev, EXICallback unlockedCallback) { nofralloc #include "asm/exi/EXIBios/EXILock.s" } @@ -272,7 +369,7 @@ asm void EXILock() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void EXIUnlock() { +asm BOOL EXIUnlock(s32 chan) { nofralloc #include "asm/exi/EXIBios/EXIUnlock.s" } @@ -282,7 +379,7 @@ asm void EXIUnlock() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void EXIGetState() { +asm u32 EXIGetState(s32 chan) { nofralloc #include "asm/exi/EXIBios/EXIGetState.s" } @@ -292,7 +389,7 @@ asm void EXIGetState() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void UnlockedHandler() { +static asm void UnlockedHandler(s32 chan, OSContext* context) { nofralloc #include "asm/exi/EXIBios/UnlockedHandler.s" } @@ -302,7 +399,7 @@ static asm void UnlockedHandler() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void EXIGetID() { +asm s32 EXIGetID(s32 chan, u32 dev, u32* id) { nofralloc #include "asm/exi/EXIBios/EXIGetID.s" } diff --git a/libs/exi/EXIUart.c b/libs/dolphin/exi/EXIUart.c similarity index 98% rename from libs/exi/EXIUart.c rename to libs/dolphin/exi/EXIUart.c index 16da2210a0..e030d9b939 100644 --- a/libs/exi/EXIUart.c +++ b/libs/dolphin/exi/EXIUart.c @@ -3,7 +3,7 @@ // Translation Unit: EXIUart // -#include "exi/EXIUart.h" +#include "dolphin/exi/EXIUart.h" #include "dol2asm.h" #include "dolphin/types.h" diff --git a/libs/exi/Makefile b/libs/dolphin/exi/Makefile similarity index 54% rename from libs/exi/Makefile rename to libs/dolphin/exi/Makefile index f8ea01c439..b41c182494 100644 --- a/libs/exi/Makefile +++ b/libs/dolphin/exi/Makefile @@ -3,14 +3,22 @@ # LIBEXI_A_CPP_FILES := \ - libs/exi/EXIBios.c \ - libs/exi/EXIUart.c \ + libs/dolphin/exi/EXIBios.c \ + libs/dolphin/exi/EXIUart.c \ LIBEXI_A_O_FILES := \ - $(BUILD_DIR)/libs/exi/EXIBios.o \ - $(BUILD_DIR)/libs/exi/EXIUart.o \ + $(BUILD_DIR)/libs/dolphin/exi/EXIBios.o \ + $(BUILD_DIR)/libs/dolphin/exi/EXIUart.o \ LIBEXI_A_CFLAGS := \ + -Cpp_exceptions off \ + -proc gekko \ + -fp hard \ + -nodefaults \ + -str reuse \ + -RTTI off \ + -maxerrors 5 \ + -enum int $(INCLUDES) \ -O4,p \ -lang=c \ @@ -25,9 +33,9 @@ $(BUILD_DIR)/libexi.a: $(LIBEXI_A_O_FILES) @echo $(LIBEXI_A_O_FILES) > build/LIBEXI_A_ofiles @$(LD) -xm l $(LIBEXI_A_LDFLAGS) -o $(BUILD_DIR)/libexi.a @build/LIBEXI_A_ofiles -$(BUILD_DIR)/libs/exi/%.o: libs/exi/%.c +$(BUILD_DIR)/libs/dolphin/exi/%.o: libs/dolphin/exi/%.c @mkdir -p $(@D) @echo building... $< @$(ICONV) -f UTF-8 -t CP932 < $< > $(basename $@).c - @$(WINE) tools/mwcc_compiler/1.2.5/mwcceppc.exe $(CFLAGS) $(LIBEXI_A_CFLAGS) -c -o $@ $(basename $@).c + @$(WINE) tools/mwcc_compiler/1.2.5/mwcceppc.exe $(LIBEXI_A_CFLAGS) -c -o $@ $(basename $@).c diff --git a/libs/dolphin/gd/Makefile b/libs/dolphin/gd/Makefile index 630a6cf106..d82b1e7c29 100644 --- a/libs/dolphin/gd/Makefile +++ b/libs/dolphin/gd/Makefile @@ -11,6 +11,14 @@ LIBGD_A_O_FILES := \ $(BUILD_DIR)/libs/dolphin/gd/GDGeometry.o \ LIBGD_A_CFLAGS := \ + -Cpp_exceptions off \ + -proc gekko \ + -fp hard \ + -nodefaults \ + -str reuse \ + -RTTI off \ + -maxerrors 5 \ + -enum int $(INCLUDES) \ -O4,p \ -lang=c \ @@ -29,5 +37,5 @@ $(BUILD_DIR)/libs/dolphin/gd/%.o: libs/dolphin/gd/%.c @mkdir -p $(@D) @echo building... $< @$(ICONV) -f UTF-8 -t CP932 < $< > $(basename $@).c - @$(WINE) tools/mwcc_compiler/1.2.5/mwcceppc.exe $(CFLAGS) $(LIBGD_A_CFLAGS) -c -o $@ $(basename $@).c + @$(WINE) tools/mwcc_compiler/1.2.5/mwcceppc.exe $(LIBGD_A_CFLAGS) -c -o $@ $(basename $@).c diff --git a/libs/dolphin/os/Makefile b/libs/dolphin/os/Makefile index 916f20e5ba..7341c22bc0 100644 --- a/libs/dolphin/os/Makefile +++ b/libs/dolphin/os/Makefile @@ -53,6 +53,14 @@ LIBOS_A_O_FILES := \ $(BUILD_DIR)/libs/dolphin/os/__ppc_eabi_init.o \ LIBOS_A_CFLAGS := \ + -Cpp_exceptions off \ + -proc gekko \ + -fp hard \ + -nodefaults \ + -str reuse \ + -RTTI off \ + -maxerrors 5 \ + -enum int $(INCLUDES) \ -O4,p \ -lang=c \ @@ -71,5 +79,5 @@ $(BUILD_DIR)/libs/dolphin/os/%.o: libs/dolphin/os/%.c @mkdir -p $(@D) @echo building... $< @$(ICONV) -f UTF-8 -t CP932 < $< > $(basename $@).c - @$(WINE) tools/mwcc_compiler/1.2.5/mwcceppc.exe $(CFLAGS) $(LIBOS_A_CFLAGS) -c -o $@ $(basename $@).c + @$(WINE) tools/mwcc_compiler/1.2.5/mwcceppc.exe $(LIBOS_A_CFLAGS) -c -o $@ $(basename $@).c diff --git a/libs/dolphin/os/OS.c b/libs/dolphin/os/OS.c index ba545478b6..4d884b53f0 100644 --- a/libs/dolphin/os/OS.c +++ b/libs/dolphin/os/OS.c @@ -5,7 +5,16 @@ #include "dolphin/os/OS.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/base/PPCArch.h" +#include "dolphin/db/db.h" +#include "dolphin/dvd/dvd.h" + +#define OS_CURRENTCONTEXT_PADDR 0x00C0 +#define OS_EXCEPTIONTABLE_ADDR 0x3000 +#define OS_DBJUMPPOINT_ADDR 0x60 +#define OS_BI2_DEBUG_ADDRESS 0x800000F4 +#define OS_DEBUG_ADDRESS_2 0x800030E9 +#define DEBUGFLAG_ADDR 0x800030E8 // // External References: @@ -19,7 +28,6 @@ void PPCMtpmc1(); void PPCMtpmc2(); void PPCMtpmc3(); void PPCMtpmc4(); -void PPCMfhid2(); void PPCMthid2(); void PPCDisableSpeculation(); void PPCSetFpNonIEEEMode(); @@ -36,13 +44,10 @@ void __OSInitSystemCall(); void __OSThreadInit(); void EXIInit(); void SIInit(); -void __DBIsExceptionMarked(); -void DBPrintf(); -void DVDInit(); -void DVDInquiryAsync(); +BOOL __DBIsExceptionMarked(__OSException); void EnableMetroTRKInterrupts(); -extern u8 __DVDLongFileNameFlag[4]; -extern u8 __PADSpec[4 + 4 /* padding */]; +extern u32 __DVDLongFileNameFlag; +extern u32 __PADSpec; void _epilog(); void regist__9daBgObj_cFP4dBgW(); @@ -61,7 +66,6 @@ static volatile u32* BI2DebugFlag; static u32* BI2DebugFlagHolder; /* 80451630-80451634 000B30 0004+00 1/1 1/1 0/0 .sbss __OSStartTime */ -extern OSTime __OSStartTime; OSTime __OSStartTime; /* 80451628-80451630 000B28 0004+04 1/1 1/1 0/0 .sbss __OSInIPL */ @@ -178,7 +182,7 @@ skip_ps_init: /* 80339EFC-80339F24 33483C 0028+00 0/0 5/5 0/0 .text OSGetConsoleType */ u32 OSGetConsoleType(void) { if (BootInfo == NULL || BootInfo->console_type == 0) { - return 0x10000002; // default console type + return OS_CONSOLE_ARTHUR; } return BootInfo->console_type; @@ -188,6 +192,38 @@ u32 OSGetConsoleType(void) { /* 8044BA60-8044BA80 078780 0020+00 2/2 0/0 0/0 .bss DriveInfo */ static DVDDriveInfo DriveInfo; +void* __OSSavedRegionStart; +void* __OSSavedRegionEnd; + +extern u32 BOOT_REGION_START : 0x812FDFF0; //(*(u32 *)0x812fdff0) +extern u32 BOOT_REGION_END : 0x812FDFEC; //(*(u32 *)0x812fdfec) + +inline void ClearArena(void) { + if ((u32)(OSGetResetCode() + 0x80000000) != 0U) { + __OSSavedRegionStart = 0U; + __OSSavedRegionEnd = 0U; + memset(OSGetArenaLo(), 0U, (u32)OSGetArenaHi() - (u32)OSGetArenaLo()); + return; + } + __OSSavedRegionStart = (void*)BOOT_REGION_START; + __OSSavedRegionEnd = (void*)BOOT_REGION_END; + if (BOOT_REGION_START == 0U) { + memset(OSGetArenaLo(), 0U, (u32)OSGetArenaHi() - (u32)OSGetArenaLo()); + return; + } + + if ((u32)OSGetArenaLo() < (u32)__OSSavedRegionStart) { + if ((u32)OSGetArenaHi() <= (u32)__OSSavedRegionStart) { + memset((u32)OSGetArenaLo(), 0U, (u32)OSGetArenaHi() - (u32)OSGetArenaLo()); + return; + } + memset(OSGetArenaLo(), 0U, (u32)__OSSavedRegionStart - (u32)OSGetArenaLo()); + if ((u32)OSGetArenaHi() > (u32)__OSSavedRegionEnd) { + memset((u32)__OSSavedRegionEnd, 0, (u32)OSGetArenaHi() - (u32)__OSSavedRegionEnd); + } + } +} + /* 80339F24-80339F60 334864 003C+00 1/1 0/0 0/0 .text InquiryCallback */ static void InquiryCallback(u32 result, DVDCommandBlock* block) { switch (block->state) { @@ -290,8 +326,8 @@ static u8 DriveBlock[48]; #pragma pop /* 8044BAB0-8044BAD0 0787D0 001C+04 0/1 1/1 0/0 .bss __OSRebootParams */ -extern u8 __OSRebootParams[28 + 4 /* padding */]; -u8 __OSRebootParams[28 + 4 /* padding */]; +extern OSExecParams __OSRebootParams; +OSExecParams __OSRebootParams; /* 80450980-80450984 -00001 0004+00 1/1 0/0 0/0 .sdata __OSVersion */ SECTION_SDATA static void* __OSVersion = (void*)&lit_1; @@ -301,8 +337,180 @@ SECTION_SDATA static char lit_116[6] = "%08x\n"; extern void* __ArenaHi; extern void* _stack_end; +extern char _db_stack_end[]; /* 80339F60-8033A440 3348A0 04E0+00 0/0 2/2 0/0 .text OSInit */ +#ifdef NONMATCHING +void OSInit(void) { + /* + Initializes the Dolphin operating system. + - most of the main operations get farmed out to other functions + - loading debug info and setting up heap bounds largely happen here + - a lot of OS reporting also gets controlled here + */ + // pretty sure this is the min(/max) amount of pointers etc for the stack to match + BI2Debug* DebugInfo; + void* debugArenaLo; + u32 inputConsoleType; + u32 tdev; + + // check if we've already done all this or not + if ((BOOL)AreWeInitialized == FALSE) { // fantastic name + AreWeInitialized = TRUE; // flag to make sure we don't have to do this again + + // SYSTEM // + __OSStartTime = __OSGetSystemTime(); + OSDisableInterrupts(); + + __OSGetExecParams(&__OSRebootParams); + PPCMtmmcr0(0); + PPCMtmmcr1(0); + PPCMtpmc1(0); + PPCMtpmc2(0); + PPCMtpmc3(0); + PPCMtpmc4(0); + + // set some PPC things + PPCDisableSpeculation(); + PPCSetFpNonIEEEMode(); + + // DEBUG // + // load some DVD stuff + BI2DebugFlag = 0; // debug flag from the DVD BI2 header + BootInfo = (OSBootInfo*)OS_BASE_CACHED; // set pointer to BootInfo + + __DVDLongFileNameFlag = + (u32)0; // flag to tell us whether we make it through the debug loading + + // time to grab a bunch of debug info from the DVD + // the address for where the BI2 debug info is, is stored at OS_BI2_DEBUG_ADDRESS + DebugInfo = (BI2Debug*)*((u32*)OS_BI2_DEBUG_ADDRESS); + + // if the debug info address exists, grab some debug info + if (DebugInfo != NULL) { + BI2DebugFlag = &DebugInfo->debugFlag; // debug flag from DVD BI2 + __PADSpec = (u32)DebugInfo->padSpec; // some other info from DVD BI2 + *((u8*)DEBUGFLAG_ADDR) = (u8)*BI2DebugFlag; // store flag in mem + *((u8*)OS_DEBUG_ADDRESS_2) = (u8)__PADSpec; // store other info in mem + } else if (BootInfo->arena_hi) { // if the top of the heap is already set + BI2DebugFlagHolder = + (u32*)*((u8*)DEBUGFLAG_ADDR); // grab whatever's stored at 0x800030E8 + BI2DebugFlag = (u32*)&BI2DebugFlagHolder; // flag is then address of flag holder + __PADSpec = (u32) * ((u8*)OS_DEBUG_ADDRESS_2); // pad spec is whatever's at 0x800030E9 + } + + __DVDLongFileNameFlag = 1; // we made it through debug! + + // HEAP // + // set up bottom of heap (ArenaLo) + // grab address from BootInfo if it exists, otherwise use default __ArenaLo + OSSetArenaLo((BootInfo->arena_lo == NULL) ? /* __ArenaLo */ 0 : BootInfo->arena_lo); + + // if the input arenaLo is null, and debug flag location exists (and flag is < 2), + // set arenaLo to just past the end of the db stack + if ((BootInfo->arena_lo == NULL) && (BI2DebugFlag != 0) && (*BI2DebugFlag < 2)) { + debugArenaLo = (char*)(((u32)_db_stack_end + 0x1f) & ~0x1f); + OSSetArenaLo(debugArenaLo); + } + + // set up top of heap (ArenaHi) + // grab address from BootInfo if it exists, otherwise use default __ArenaHi + OSSetArenaHi((BootInfo->arena_hi == NULL) ? /* __ArenaHi */ 0 : BootInfo->arena_hi); + + // OS INIT AND REPORT // + // initialise a whole bunch of OS stuff + OSExceptionInit(); + __OSInitSystemCall(); + OSInitAlarm(); + __OSModuleInit(); + __OSInterruptInit(); + __OSSetInterruptHandler(OS_INTR_PI_RSW, (void*)__OSResetSWInterruptHandler); + __OSContextInit(); + __OSCacheInit(); + EXIInit(); + SIInit(); + __OSInitSram(); + __OSThreadInit(); + __OSInitAudioSystem(); + PPCMthid2(PPCMfhid2() & 0xBFFFFFFF); + if ((BOOL)__OSInIPL == FALSE) { + __OSInitMemoryProtection(); + } + + // begin OS reporting + OSReport("\nDolphin OS\n"); + OSReport("Kernel built : %s %s\n", "Nov 10 2004", "06:26:41"); + OSReport("Console Type : "); + + // this is a function in the same file, but it doesn't seem to match + // inputConsoleType = OSGetConsoleType(); + + // inputConsoleType = (BootInfo == NULL || (inputConsoleType = BootInfo->consoleType) == 0) + // ? 0x10000002 : BootInfo->consoleType; + if (BootInfo == NULL || (inputConsoleType = BootInfo->console_type) == 0) { + inputConsoleType = OS_CONSOLE_ARTHUR; // default console type + } else { + inputConsoleType = BootInfo->console_type; + } + + // work out what console type this corresponds to and report it + // consoleTypeSwitchHi = inputConsoleType & 0xF0000000; + switch (inputConsoleType & 0xffff0000) { // check "first" byte + case OS_CONSOLE_RETAIL: + OSReport("Retail %d\n", inputConsoleType); + break; + default: + switch (inputConsoleType & 0x0000ffff) { // if "first" byte is 2, check "the rest" + case OS_CONSOLE_EMULATOR: + OSReport("Mac Emulator\n"); + break; + case OS_CONSOLE_PC_EMULATOR: + OSReport("PC Emulator\n"); + break; + case OS_CONSOLE_ARTHUR: + OSReport("EPPC Arthur\n"); + break; + case OS_CONSOLE_MINNOW: + OSReport("EPPC Minnow\n"); + break; + default: + tdev = ((u32)inputConsoleType & 0x0000ffff); + OSReport("Development HW%d (%08x)\n", tdev - 3, inputConsoleType); + break; + } + break; + } + + // report memory size + OSReport("Memory %d MB\n", (u32)BootInfo->memory_size >> 0x14U); + // report heap bounds + OSReport("Arena : 0x%x - 0x%x\n", OSGetArenaLo(), OSGetArenaHi()); + // report OS version + OSRegisterVersion(__OSVersion); + + // if location of debug flag exists, and flag is >= 2, enable MetroTRKInterrupts + if (BI2DebugFlag && ((*BI2DebugFlag) >= 2)) { + EnableMetroTRKInterrupts(); + } + + // free up memory and re-enable things + ClearArena(); + OSEnableInterrupts(); + + // check if we can load OS from IPL; if not, grab it from DVD (?) + if ((BOOL)__OSInIPL == FALSE) { + DVDInit(); + if ((BOOL)__OSIsGcam) { + __OSDeviceCode = 0x9000; + return; + } + DCInvalidateRange(&DriveInfo, sizeof(DriveInfo)); + DVDInquiryAsync((DVDCommandBlock*)&DriveBlock, &DriveInfo, + (DVDCBCallback)InquiryCallback); + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -311,11 +519,10 @@ asm void OSInit(void) { #include "asm/dolphin/os/OS/OSInit.s" } #pragma pop +#endif /* ############################################################################################## */ /* 803CF3AC-803CF3E8 02C4CC 003C+00 0/1 0/0 0/0 .data __OSExceptionLocations */ -#pragma push -#pragma force_active on SECTION_DATA static u32 __OSExceptionLocations[] = { 0x00000100, // 0 System reset 0x00000200, // 1 Machine check @@ -333,47 +540,103 @@ SECTION_DATA static u32 __OSExceptionLocations[] = { 0x00001400, // 13 System management interrupt 0x00001700 // 14 Thermal interrupt }; -#pragma pop -/* 803CF3E8-803CF404 02C508 001B+01 0/1 0/0 0/0 .data @152 */ -#pragma push -#pragma force_active on -SECTION_DATA static char lit_152[27] = "Installing OSDBIntegrator\n"; -#pragma pop +// dummy entry points to the OS Exception vector +void __OSEVStart(void); +void __OSDBINTSTART(void); +void __OSDBINTEND(void); +void __OSDBJUMPSTART(void); +void __OSDBJUMPEND(void); -/* 803CF404-803CF434 02C524 002E+02 0/1 0/0 0/0 .data @153 */ -#pragma push -#pragma force_active on -SECTION_DATA static char lit_153[46] = ">>> OSINIT: exception %d commandeered by TRK\n"; -#pragma pop - -/* 803CF434-803CF464 02C554 002F+01 0/1 0/0 0/0 .data @154 */ -#pragma push -#pragma force_active on -SECTION_DATA static char lit_154[47] = ">>> OSINIT: exception %d vectored to debugger\n"; -#pragma pop - -/* 803CF464-803CF480 02C584 001B+01 0/1 0/0 0/0 .data @155 */ -#pragma push -#pragma force_active on -SECTION_DATA static char lit_155[27] = "Exceptions initialized...\n"; -#pragma pop +#define NOP 0x60000000 /* 8033A440-8033A6C0 334D80 0280+00 1/1 0/0 0/0 .text OSExceptionInit */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void OSExceptionInit(void) { - nofralloc -#include "asm/dolphin/os/OS/OSExceptionInit.s" +static void OSExceptionInit(void) { + __OSException exception; + void* destAddr; + + // These two vars help us change the exception number embedded + // in the exception handler code. + u32* opCodeAddr; + u32 oldOpCode; + + // Address range of the actual code to be copied. + u8* handlerStart; + u32 handlerSize; + + // Install the first level exception vector. + opCodeAddr = (u32*)__OSEVSetNumber; + oldOpCode = *opCodeAddr; + handlerStart = (u8*)__OSEVStart; + handlerSize = (u32)((u8*)__OSEVEnd - (u8*)__OSEVStart); + + // Install the DB integrator, only if we are the first OSInit to be run + destAddr = (void*)OSPhysicalToCached(OS_DBJUMPPOINT_ADDR); + if (*(u32*)destAddr == 0) // Lomem should be zero cleared only once by BS2 + { + DBPrintf("Installing OSDBIntegrator\n"); + memcpy(destAddr, (void*)__OSDBINTSTART, (u32)__OSDBINTEND - (u32)__OSDBINTSTART); + DCFlushRangeNoSync(destAddr, (u32)__OSDBINTEND - (u32)__OSDBINTSTART); + __sync(); + ICInvalidateRange(destAddr, (u32)__OSDBINTEND - (u32)__OSDBINTSTART); + } + + // Copy the right vector into the table + for (exception = 0; exception < 15; exception++) { + if (BI2DebugFlag && (*BI2DebugFlag >= 2) && __DBIsExceptionMarked(exception)) { + // this DBPrintf is suspicious. + DBPrintf(">>> OSINIT: exception %d commandeered by TRK\n", exception); + continue; + } + + // Modify the copy of code in text before transferring + // to the exception table. + *opCodeAddr = oldOpCode | exception; + + // Modify opcodes at __DBVECTOR if necessary + if (__DBIsExceptionMarked(exception)) { + DBPrintf(">>> OSINIT: exception %d vectored to debugger\n", exception); + memcpy((void*)__DBVECTOR, (void*)__OSDBJUMPSTART, + (u32)__OSDBJUMPEND - (u32)__OSDBJUMPSTART); + } else { + // make sure the opcodes are still nop + u32* ops = (u32*)__DBVECTOR; + int cb; + + for (cb = 0; cb < (u32)__OSDBJUMPEND - (u32)__OSDBJUMPSTART; cb += sizeof(u32)) { + *ops++ = NOP; + } + } + + // Install the modified handler. + destAddr = (void*)OSPhysicalToCached(__OSExceptionLocations[(u32)exception]); + memcpy(destAddr, handlerStart, handlerSize); + DCFlushRangeNoSync(destAddr, handlerSize); + __sync(); + ICInvalidateRange(destAddr, handlerSize); + } + + // initialize pointer to exception table + OSExceptionTable = OSPhysicalToCached(OS_EXCEPTIONTABLE_ADDR); + + // install default exception handlers + for (exception = 0; exception < 15; exception++) { + __OSSetExceptionHandler(exception, OSDefaultExceptionHandler); + } + + // restore the old opcode, so that we can re-start an application without + // downloading the text segments + *opCodeAddr = oldOpCode; + + DBPrintf("Exceptions initialized...\n"); } -#pragma pop /* 8033A6C0-8033A6E4 335000 0024+00 1/1 0/0 0/0 .text __OSDBIntegrator */ asm void __OSDBIntegrator(void) { // clang-format off nofralloc +entry __OSDBINTSTART li r5, 0x40 mflr r3 stw r3, 0xc(r5) @@ -383,6 +646,7 @@ asm void __OSDBIntegrator(void) { li r3, 0x30 mtmsr r3 blr +entry __OSDBINTEND // clang-format on } @@ -391,7 +655,9 @@ asm void __OSDBJump(void){ // clang-format off nofralloc +entry __OSDBJUMPSTART bla 0x60 +entry __OSDBJUMPEND // clang-format on } @@ -412,57 +678,80 @@ static asm void OSExceptionVector(void) { // clang-format off nofralloc - mtspr 0x110, r4 +entry __OSEVStart + // Save r4 into SPRG0 + mtsprg 0, r4 - lwz r4, 0xc0(r0) + // Load current context physical address into r4 + lwz r4, OS_CURRENTCONTEXT_PADDR - stw r3, 0xc(r4) - mfspr r3, 0x110 - stw r3, 0x10(r4) - stw r5, 0x14(r4) + // Save r3 - r5 into the current context + stw r3, OS_CONTEXT_R3(r4) + mfsprg r3, 0 + stw r3, OS_CONTEXT_R4(r4) + stw r5, OS_CONTEXT_R5(r4) - lhz r3, 0x1a2(r4) - ori r3, r3, 2 - sth r3, 0x1a2(r4) + lhz r3, OS_CONTEXT_STATE(r4) + ori r3, r3, OS_CONTEXT_STATE_EXC + sth r3, OS_CONTEXT_STATE(r4) + // Save misc registers mfcr r3 - stw r3, 0x80(r4) + stw r3, OS_CONTEXT_CR(r4) mflr r3 - stw r3, 0x84(r4) + stw r3, OS_CONTEXT_LR(r4) mfctr r3 - stw r3, 0x88(r4) + stw r3, OS_CONTEXT_CTR(r4) mfxer r3 - stw r3, 0x8c(r4) - mfspr r3, 0x1a - stw r3, 0x198(r4) - mfspr r3, 0x1b - stw r3, 0x19c(r4) + stw r3, OS_CONTEXT_XER(r4) + mfsrr0 r3 + stw r3, OS_CONTEXT_SRR0(r4) + mfsrr1 r3 + stw r3, OS_CONTEXT_SRR1(r4) mr r5, r3 entry __DBVECTOR nop + // Set SRR1[IR|DR] to turn on address + // translation at the next RFI mfmsr r3 ori r3, r3, 0x30 - mtspr 0x1b, r3 + mtsrr1 r3 + // This lets us change the exception number based on the + // exception we're installing. entry __OSEVSetNumber li r3, 0 + // Load current context virtual address into r4 lwz r4, 0xd4(r0) - rlwinm. r5, r5, 0, 0x1e, 0x1e + // Check non-recoverable interrupt + rlwinm. r5, r5, 0, MSR_RI_BIT, MSR_RI_BIT bne recoverable lis r5, OSDefaultExceptionHandler@ha addi r5, r5, OSDefaultExceptionHandler@l - mtspr 0x1a, r5 + mtsrr0 r5 rfi + // NOT REACHED HERE recoverable: - rlwinm r5, r3, 2, 0x16, 0x1d - lwz r5, 0x3000(r5) - mtspr 0x1a, r5 + // Locate exception handler. + rlwinm r5, r3, 2, 0x16, 0x1d // r5 contains exception*4 + lwz r5, OS_EXCEPTIONTABLE_ADDR(r5) + mtsrr0 r5 + + // Final state + // r3 - exception number + // r4 - pointer to context + // r5 - garbage + // srr0 - exception handler + // srr1 - address translation enabled, not yet recoverable + rfi + // NOT REACHED HERE + // The handler will restore state entry __OSEVEnd nop @@ -503,7 +792,7 @@ static asm void OSDefaultExceptionHandler(register __OSException exception, } /* 8033A80C-8033A860 33514C 0054+00 0/0 1/1 0/0 .text __OSPSInit */ -asm void __OSPSInit(void) { +asm void __OSPSInit(void){ // clang-format off nofralloc @@ -533,26 +822,16 @@ asm void __OSPSInit(void) { // clang-format on } -/* 8033A860-8033A874 3351A0 0014+00 0/0 1/1 0/0 .text __OSGetDIConfig */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __OSGetDIConfig(void) { - nofralloc -#include "asm/dolphin/os/OS/__OSGetDIConfig.s" -} -#pragma pop +vu32 __DIRegs[16] : 0xCC006000; +#define DI_CONFIG_IDX 0x9 +#define DI_CONFIG_CONFIG_MASK 0xFF -/* ############################################################################################## */ -/* 8045098C-80450990 00040C 0004+00 1/1 0/0 0/0 .sdata @163 */ -SECTION_SDATA static char lit_163[4] = "%s\n"; +/* 8033A860-8033A874 3351A0 0014+00 0/0 1/1 0/0 .text __OSGetDIConfig */ +u32 __OSGetDIConfig(void) { + return (__DIRegs[DI_CONFIG_IDX] & DI_CONFIG_CONFIG_MASK); +} /* 8033A874-8033A8A0 3351B4 002C+00 1/1 11/11 0/0 .text OSRegisterVersion */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void OSRegisterVersion(char* version) { - nofralloc -#include "asm/dolphin/os/OS/OSRegisterVersion.s" +void OSRegisterVersion(char* version) { + OSReport("%s\n", version); } -#pragma pop diff --git a/libs/dolphin/os/OSAlarm.c b/libs/dolphin/os/OSAlarm.c index 3ae3df79fb..ff0cf84529 100644 --- a/libs/dolphin/os/OSAlarm.c +++ b/libs/dolphin/os/OSAlarm.c @@ -5,25 +5,16 @@ #include "dolphin/os/OSAlarm.h" #include "dol2asm.h" +#include "dolphin/base/PPCArch.h" +#include "dolphin/os/OS.h" #include "dolphin/os/OSReset.h" -#include "dolphin/types.h" + +static s32 OnReset(s32 param_0); // // External References: // -void PPCMtdec(); -void __OSSetExceptionHandler(); -void __OSGetExceptionHandler(); -void OSSetCurrentContext(); -void OSLoadContext(); -void OSClearContext(); -void OSDisableInterrupts(); -void OSRestoreInterrupts(); -void OSRegisterResetFunction(); -void OSDisableScheduler(); -void OSEnableScheduler(); -void __OSReschedule(); void __DVDTestAlarm(); void __div2i(); @@ -41,17 +32,16 @@ static OSResetFunctionInfo ResetFunctionInfo = { }; /* 80451638-80451640 000B38 0008+00 5/5 0/0 0/0 .sbss AlarmQueue */ -static u8 AlarmQueue[8]; +static OSAlarmQueue AlarmQueue; /* 8033A8A0-8033A8F8 3351E0 0058+00 0/0 3/3 0/0 .text OSInitAlarm */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void OSInitAlarm(void) { - nofralloc -#include "asm/dolphin/os/OSAlarm/OSInitAlarm.s" +void OSInitAlarm(void) { + if (__OSGetExceptionHandler(8) != DecrementerExceptionHandler) { + AlarmQueue.head = AlarmQueue.tail = NULL; + __OSSetExceptionHandler(8, DecrementerExceptionHandler); + OSRegisterResetFunction(&ResetFunctionInfo); + } } -#pragma pop /* 8033A8F8-8033A908 335238 0010+00 0/0 17/17 0/0 .text OSCreateAlarm */ void OSCreateAlarm(OSAlarm* alarm) { @@ -59,37 +49,119 @@ void OSCreateAlarm(OSAlarm* alarm) { alarm->tag = 0; } -/* 8033A908-8033AB58 335248 0250+00 3/3 0/0 0/0 .text InsertAlarm */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void InsertAlarm(OSAlarm* alarm, s64 time, OSAlarmHandler* handler) { - nofralloc -#include "asm/dolphin/os/OSAlarm/InsertAlarm.s" +static inline SetTimer(OSAlarm* alarm) { + OSTime delta; + + delta = alarm->fire_time - __OSGetSystemTime(); + if (delta < 0) { + PPCMtdec(0); + } else if (delta < 0x80000000) { + PPCMtdec((u32)delta); + } else { + PPCMtdec(0x7fffffff); + } +} + +/* 8033A908-8033AB58 335248 0250+00 3/3 0/0 0/0 .text InsertAlarm */ +static void InsertAlarm(OSAlarm* alarm, OSTime fire, OSAlarmHandler handler) { + OSAlarm* next; + OSAlarm* prev; + + if (0 < alarm->period_time) { + OSTime time = __OSGetSystemTime(); + + fire = alarm->start_time; + if (alarm->start_time < time) { + fire += alarm->period_time * ((time - alarm->start_time) / alarm->period_time + 1); + } + } + + alarm->handler = handler; + alarm->fire_time = fire; + + for (next = AlarmQueue.head; next; next = next->link.next) { + if (next->fire_time <= fire) { + continue; + } + + alarm->link.prev = next->link.prev; + next->link.prev = alarm; + alarm->link.next = next; + prev = alarm->link.prev; + if (prev) { + prev->link.next = alarm; + } else { + AlarmQueue.head = alarm; + SetTimer(alarm); + } + return; + } + + alarm->link.next = 0; + prev = AlarmQueue.tail; + AlarmQueue.tail = alarm; + alarm->link.prev = prev; + + if (prev) { + prev->link.next = alarm; + } else { + AlarmQueue.head = AlarmQueue.tail = alarm; + SetTimer(alarm); + } } -#pragma pop /* 8033AB58-8033ABC0 335498 0068+00 0/0 18/18 0/0 .text OSSetAlarm */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void OSSetAlarm(OSAlarm* alarm, s64 time, OSAlarmHandler* handler) { - nofralloc -#include "asm/dolphin/os/OSAlarm/OSSetAlarm.s" +void OSSetAlarm(OSAlarm* alarm, OSTime tick, OSAlarmHandler handler) { + BOOL enabled; + enabled = OSDisableInterrupts(); + alarm->period_time = 0; + InsertAlarm(alarm, __OSGetSystemTime() + tick, handler); + OSRestoreInterrupts(enabled); } -#pragma pop /* 8033ABC0-8033AC3C 335500 007C+00 0/0 1/1 0/0 .text OSSetPeriodicAlarm */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void OSSetPeriodicAlarm(OSAlarm* alarm, s64 start, s64 period, OSAlarmHandler* handler) { - nofralloc -#include "asm/dolphin/os/OSAlarm/OSSetPeriodicAlarm.s" +void OSSetPeriodicAlarm(OSAlarm* alarm, OSTime start, OSTime period, OSAlarmHandler handler) { + BOOL enabled; + enabled = OSDisableInterrupts(); + alarm->period_time = period; + alarm->start_time = __OSTimeToSystemTime(start); + InsertAlarm(alarm, 0, handler); + OSRestoreInterrupts(enabled); } -#pragma pop /* 8033AC3C-8033AD58 33557C 011C+00 1/1 11/11 0/0 .text OSCancelAlarm */ +// need compiler epilogue patch +#ifdef NONMATCHING +void OSCancelAlarm(OSAlarm* alarm) { + OSAlarm* next; + BOOL enabled; + + enabled = OSDisableInterrupts(); + + if (alarm->handler == 0) { + OSRestoreInterrupts(enabled); + return; + } + + next = alarm->link.next; + if (next == 0) { + AlarmQueue.tail = alarm->link.prev; + } else { + next->link.prev = alarm->link.prev; + } + if (alarm->link.prev) { + alarm->link.prev->link.next = next; + } else { + AlarmQueue.head = next; + if (next) { + SetTimer(next); + } + } + alarm->handler = 0; + + OSRestoreInterrupts(enabled); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -98,8 +170,58 @@ asm void OSCancelAlarm(OSAlarm* alarm) { #include "asm/dolphin/os/OSAlarm/OSCancelAlarm.s" } #pragma pop +#endif /* 8033AD58-8033AF88 335698 0230+00 1/1 0/0 0/0 .text DecrementerExceptionCallback */ +// need compiler epilogue patch +#ifdef NONMATCHING +static void DecrementerExceptionCallback(register __OSException exception, + register OSContext* context) { + OSAlarm* alarm; + OSAlarm* next; + OSAlarmHandler handler; + OSTime time; + OSContext exceptionContext; + time = __OSGetSystemTime(); + alarm = AlarmQueue.head; + if (alarm == 0) { + OSLoadContext(context); + } + + if (time < alarm->fire_time) { + SetTimer(alarm); + OSLoadContext(context); + } + + next = alarm->link.next; + AlarmQueue.head = next; + if (next == 0) { + AlarmQueue.tail = 0; + } else { + next->link.prev = 0; + } + + handler = alarm->handler; + alarm->handler = 0; + if (0 < alarm->period_time) { + InsertAlarm(alarm, 0, handler); + } + + if (AlarmQueue.head) { + SetTimer(AlarmQueue.head); + } + + OSDisableScheduler(); + OSClearContext(&exceptionContext); + OSSetCurrentContext(&exceptionContext); + handler(alarm, context); + OSClearContext(&exceptionContext); + OSSetCurrentContext(context); + OSEnableScheduler(); + __OSReschedule(); + OSLoadContext(context); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -108,6 +230,7 @@ static asm void DecrementerExceptionCallback(__OSException exception, OSContext* #include "asm/dolphin/os/OSAlarm/DecrementerExceptionCallback.s" } #pragma pop +#endif /* 8033AF88-8033AFD8 3358C8 0050+00 1/1 0/0 0/0 .text DecrementerExceptionHandler */ static asm void DecrementerExceptionHandler(register __OSException exception, diff --git a/libs/dolphin/os/OSAudioSystem.c b/libs/dolphin/os/OSAudioSystem.c index 2e851bb3cf..37ebe8a59f 100644 --- a/libs/dolphin/os/OSAudioSystem.c +++ b/libs/dolphin/os/OSAudioSystem.c @@ -5,16 +5,14 @@ #include "dolphin/os/OSAudioSystem.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/dsp/dsp.h" +#include "dolphin/os/OS.h" // // External References: // SECTION_INIT void memcpy(); -void OSGetArenaHi(); -void DCFlushRange(); -void OSGetTick(); // // Declarations: @@ -33,17 +31,100 @@ static u8 DSPInitCode[128] = { 0x02, 0xFF, 0x02, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; +#define __DSPWorkBuffer (void*)0x81000000 + /* 8033B2D8-8033B494 335C18 01BC+00 0/0 1/1 0/0 .text __OSInitAudioSystem */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __OSInitAudioSystem(void) { - nofralloc -#include "asm/dolphin/os/OSAudioSystem/__OSInitAudioSystem.s" +void __OSInitAudioSystem(void) { + u32 r28; + u16 r3; + + u32 padding; + + memcpy((void*)((u8*)OSGetArenaHi() - 128), __DSPWorkBuffer, 128); + memcpy(__DSPWorkBuffer, (void*)DSPInitCode, 128); + + DCFlushRange(__DSPWorkBuffer, 128); + + __DSPRegs[9] = 0x43; + __DSPRegs[5] = 0x8AC; + __DSPRegs[5] |= 1; + while (__DSPRegs[5] & 1) + ; + __DSPRegs[0] = 0; + while (((__DSPRegs[2] << 16) | __DSPRegs[3]) & 0x80000000) + ; + *(u32*)&__DSPRegs[16] = 0x1000000; + *(u32*)&__DSPRegs[18] = 0; + *(u32*)&__DSPRegs[20] = 0x20; + + r3 = __DSPRegs[5]; + while (!(r3 & 0x20)) + r3 = __DSPRegs[5]; + __DSPRegs[5] = r3; + + r28 = OSGetTick(); + while ((s32)(OSGetTick() - r28) < 0x892) + ; + + *(u32*)&__DSPRegs[16] = 0x1000000; + *(u32*)&__DSPRegs[18] = 0; + *(u32*)&__DSPRegs[20] = 0x20; + + r3 = __DSPRegs[5]; + while (!(r3 & 0x20)) + r3 = __DSPRegs[5]; + __DSPRegs[5] = r3; + + __DSPRegs[5] &= ~0x800; + while ((__DSPRegs[5]) & 0x400) + ; + __DSPRegs[5] &= ~4; + + r3 = __DSPRegs[2]; + + while (!(r3 & 0x8000)) + r3 = __DSPRegs[2]; + + (void)__DSPRegs[3]; + r3 != 42069; + __DSPRegs[5] |= 4; + __DSPRegs[5] = 0x8AC; + __DSPRegs[5] |= 1; + while (__DSPRegs[5] & 1) + ; + memcpy(__DSPWorkBuffer, (void*)((u8*)OSGetArenaHi() - 128), 128); } -#pragma pop /* 8033B494-8033B56C 335DD4 00D8+00 0/0 1/1 0/0 .text __OSStopAudioSystem */ +#ifdef NONMATCHING +void __OSStopAudioSystem(void) { + u32 r28; + +#define waitUntil(load, mask) \ + r28 = (load); \ + while (r28 & (mask)) { \ + r28 = (load); \ + } + + __DSPRegs[5] = 0x804; + r28 = __DSPRegs[27]; + __DSPRegs[27] = r28 & ~0x8000; + waitUntil(__DSPRegs[5], 0x400); + waitUntil(__DSPRegs[5], 0x200); + __DSPRegs[5] = 0x8ac; + __DSPRegs[0] = 0; + + while (((__DSPRegs[2] << 16) | __DSPRegs[3]) & 0x80000000) + ; + r28 = OSGetTick(); + while ((s32)(OSGetTick() - r28) < 0x2c) + ; + __DSPRegs[5] |= 1; + waitUntil(__DSPRegs[5], 0x001); + +#undef waitUntil +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -52,3 +133,4 @@ asm void __OSStopAudioSystem(void) { #include "asm/dolphin/os/OSAudioSystem/__OSStopAudioSystem.s" } #pragma pop +#endif diff --git a/libs/dolphin/os/OSContext.c b/libs/dolphin/os/OSContext.c index f07a80e95d..35d64ddf1a 100644 --- a/libs/dolphin/os/OSContext.c +++ b/libs/dolphin/os/OSContext.c @@ -1,25 +1,10 @@ -// -// Generated By: dol2asm -// Translation Unit: OSContext -// - #include "dolphin/os/OSContext.h" -#include "dol2asm.h" +#include "dolphin/db/db.h" #include "dolphin/os/OS.h" #include "dolphin/os/OSInterrupt.h" -#include "dolphin/types.h" -// -// External References: -// - -void __RAS_OSDisableInterrupts_end(); -void DBPrintf(); -void __cvt_fp2unsigned(); - -// -// Declarations: -// +volatile OSContext* __OSCurrentContext : (OS_BASE_CACHED | 0x00D4); +volatile OSContext* __OSFPUContext : (OS_BASE_CACHED | 0x00D8); /* 8033BBE4-8033BD08 336524 0124+00 1/1 0/0 0/0 .text __OSLoadFPUContext */ asm void __OSLoadFPUContext(void) { @@ -244,7 +229,7 @@ OSContext* OSGetCurrentContext(void) { } /* 8033BEA0-8033BF20 3367E0 0080+00 0/0 1/1 0/0 .text OSSaveContext */ -asm void OSSaveContext(register OSContext* context) { +asm u32 OSSaveContext(register OSContext* context) { // clang-format off nofralloc @@ -377,7 +362,7 @@ void OSClearContext(OSContext* context) { } /* 8033C024-8033C0E0 336964 00BC+00 0/0 1/1 0/0 .text OSInitContext */ -asm void OSInitContext(register OSContext* context, register u32 srr0, register u32 stack){ +asm void OSInitContext(register OSContext* context, register u32 srr0, register u32 stack) { // clang-format off nofralloc @@ -432,85 +417,73 @@ asm void OSInitContext(register OSContext* context, register u32 srr0, register // clang-format on } -/* ############################################################################################## */ -/* 803CF740-803CF784 02C860 0044+00 1/1 0/0 0/0 .data @61 */ -SECTION_DATA - static char lit_61[] = "------------------------- Context 0x%08x -------------------------\n"; +// inline duplicates for OSDumpContext to match +// maybe need to change inlining compiler flag for better match? +inline void i_OSClearContext(OSContext* context) { + context->mode = 0; + context->state = 0; -/* 803CF784-803CF7B4 02C8A4 0030+00 0/1 0/0 0/0 .data @62 */ -#pragma push -#pragma force_active on -SECTION_DATA static char lit_62[] = "r%-2d = 0x%08x (%14d) r%-2d = 0x%08x (%14d)\n"; + if (context == OS_CURRENT_FPU_CONTEXT) { + OS_CURRENT_FPU_CONTEXT = NULL; + } +} -/* 803CF7B4-803CF7E4 02C8D4 002F+01 0/1 0/0 0/0 .data @63 */ -#pragma push -#pragma force_active on -SECTION_DATA static char lit_63[] = "LR = 0x%08x CR = 0x%08x\n"; -#pragma pop - -/* 803CF7E4-803CF814 02C904 002F+01 0/1 0/0 0/0 .data @64 */ -#pragma push -#pragma force_active on -SECTION_DATA static char lit_64[] = "SRR0 = 0x%08x SRR1 = 0x%08x\n"; -#pragma pop - -/* 803CF814-803CF828 02C934 0011+03 0/1 0/0 0/0 .data @65 */ -#pragma push -#pragma force_active on -SECTION_DATA static char lit_65[] = "\nGQRs----------\n"; -#pragma pop - -/* 803CF828-803CF84C 02C948 0021+03 0/1 0/0 0/0 .data @66 */ -#pragma push -#pragma force_active on -SECTION_DATA static char lit_66[] = "gqr%d = 0x%08x \t gqr%d = 0x%08x\n"; -#pragma pop - -/* 803CF84C-803CF860 02C96C 0012+02 0/1 0/0 0/0 .data @67 */ -#pragma push -#pragma force_active on -SECTION_DATA static char lit_67[] = "\n\nFPRs----------\n"; -#pragma pop - -/* 803CF860-803CF87C 02C980 0019+03 0/1 0/0 0/0 .data @68 */ -#pragma push -#pragma force_active on -SECTION_DATA static char lit_68[] = "fr%d \t= %d \t fr%d \t= %d\n"; -#pragma pop - -/* 803CF87C-803CF890 02C99C 0012+02 0/1 0/0 0/0 .data @69 */ -#pragma push -#pragma force_active on -SECTION_DATA static char lit_69[] = "\n\nPSFs----------\n"; -#pragma pop - -/* 803CF890-803CF8B0 02C9B0 001D+03 0/1 0/0 0/0 .data @70 */ -#pragma push -#pragma force_active on -SECTION_DATA static char lit_70[] = "ps%d \t= 0x%x \t ps%d \t= 0x%x\n"; -#pragma pop - -/* 803CF8B0-803CF8D8 02C9D0 0026+02 0/1 0/0 0/0 .data @71 */ -#pragma push -#pragma force_active on -SECTION_DATA static char lit_71[] = "\nAddress: Back Chain LR Save\n"; -#pragma pop - -/* 803CF8D8-803CF8F4 02C9F8 001C+00 0/1 0/0 0/0 .data @72 */ -#pragma push -#pragma force_active on -SECTION_DATA static char lit_72[] = "0x%08x: 0x%08x 0x%08x\n"; -#pragma pop +inline OSContext* i_OSGetCurrentContext(void) { + return OS_CURRENT_CONTEXT; +} /* 8033C0E0-8033C388 336A20 02A8+00 0/0 3/3 0/0 .text OSDumpContext */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void OSDumpContext(OSContext* context) { - nofralloc -#include "asm/dolphin/os/OSContext/OSDumpContext.s" +void OSDumpContext(OSContext* context) { + u32 i; + u32* p; + + OSReport("------------------------- Context 0x%08x -------------------------\n", context); + + for (i = 0; i < 16; ++i) { + OSReport("r%-2d = 0x%08x (%14d) r%-2d = 0x%08x (%14d)\n", i, context->gpr[i], + context->gpr[i], i + 16, context->gpr[i + 16], context->gpr[i + 16]); + } + + OSReport("LR = 0x%08x CR = 0x%08x\n", context->lr, context->cr); + OSReport("SRR0 = 0x%08x SRR1 = 0x%08x\n", context->srr0, context->srr1); + + OSReport("\nGQRs----------\n"); + for (i = 0; i < 4; ++i) { + OSReport("gqr%d = 0x%08x \t gqr%d = 0x%08x\n", i, context->gqr[i], i + 4, + context->gqr[i + 4]); + } + + if (context->state & OS_CONTEXT_STATE_FPSAVED) { + OSContext* currentContext; + OSContext fpuContext; + BOOL enabled; + + enabled = OSDisableInterrupts(); + currentContext = i_OSGetCurrentContext(); + i_OSClearContext(&fpuContext); + OSSetCurrentContext(&fpuContext); + + OSReport("\n\nFPRs----------\n"); + for (i = 0; i < 32; i += 2) { + OSReport("fr%d \t= %d \t fr%d \t= %d\n", i, (u32)context->fpr[i], i + 1, + (u32)context->fpr[i + 1]); + } + OSReport("\n\nPSFs----------\n"); + for (i = 0; i < 32; i += 2) { + OSReport("ps%d \t= 0x%x \t ps%d \t= 0x%x\n", i, (u32)context->ps[i], i + 1, + (u32)context->ps[i + 1]); + } + + i_OSClearContext(&fpuContext); + OSSetCurrentContext(currentContext); + OSRestoreInterrupts(enabled); + } + + OSReport("\nAddress: Back Chain LR Save\n"); + for (i = 0, p = (u32*)context->gpr[1]; p && (u32)p != 0xffffffff && i++ < 16; p = (u32*)*p) { + OSReport("0x%08x: 0x%08x 0x%08x\n", p, p[0], p[1]); + } } -#pragma pop /* 8033C388-8033C40C 336CC8 0084+00 1/1 0/0 0/0 .text OSSwitchFPUContext */ static asm void OSSwitchFPUContext(register u8 err, register OSContext* context) { @@ -557,19 +530,12 @@ context_is_curr_fpu_context: // clang-format on } -/* ############################################################################################## */ -/* 803CF8F4-803CF918 02CA14 0023+01 1/1 0/0 0/0 .data @76 */ -SECTION_DATA static char lit_76[] = "FPU-unavailable handler installed\n"; - /* 8033C40C-8033C454 336D4C 0048+00 0/0 1/1 0/0 .text __OSContextInit */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __OSContextInit(void) { - nofralloc -#include "asm/dolphin/os/OSContext/__OSContextInit.s" +void __OSContextInit(void) { + __OSSetExceptionHandler(EXCEPTION_FLOATING_POINT, OSSwitchFPUContext); + __OSFPUContext = NULL; + DBPrintf("FPU-unavailable handler installed\n"); } -#pragma pop /* 8033C454-8033C580 336D94 012C+00 0/0 1/1 0/0 .text OSFillFPUContext */ asm void OSFillFPUContext(register OSContext* context) { diff --git a/libs/dolphin/os/OSError.c b/libs/dolphin/os/OSError.c index e3c503ffba..dfd56d764f 100644 --- a/libs/dolphin/os/OSError.c +++ b/libs/dolphin/os/OSError.c @@ -5,27 +5,18 @@ #include "dolphin/os/OSError.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/base/PPCArch.h" +#include "dolphin/os/OS.h" +#include "dolphin/dsp/dsp.h" + +OSThread* __OSCurrentThread : (OS_BASE_CACHED | 0x00E4); +OSThreadQueue __OSActiveThreadQueue : (OS_BASE_CACHED | 0x00DC); +volatile OSContext* __OSFPUContext : (OS_BASE_CACHED | 0x00D8); // // External References: // -void OSReport(); -void PPCMfmsr(); -void PPCMtmsr(); -void PPCHalt(); -void PPCMffpscr(); -void PPCMtfpscr(); -void OSSaveFPUContext(); -void OSLoadContext(); -void OSDumpContext(); -void OSDisableInterrupts(); -void OSRestoreInterrupts(); -void OSDisableScheduler(); -void OSEnableScheduler(); -void __OSReschedule(); -void OSGetTime(); extern u8 __OSLastInterruptSrr0[4]; extern u8 __OSLastInterrupt[2 + 6 /* padding */]; extern u8 __OSLastInterruptTime[4]; @@ -37,11 +28,12 @@ extern u8 data_80451684[4]; /* ############################################################################################## */ /* 8044BAD0-8044BB20 0787F0 0044+0C 2/2 2/2 0/0 .bss __OSErrorTable */ -extern OSErrorHandler __OSErrorTable[17 + 3 /* padding */]; -OSErrorHandler __OSErrorTable[17 + 3 /* padding */]; +extern OSErrorHandler __OSErrorTable[17]; +OSErrorHandler __OSErrorTable[17]; /* 804509A0-804509A4 000420 0004+00 1/1 2/2 0/0 .sdata __OSFpscrEnableBits */ -SECTION_SDATA extern u32 __OSFpscrEnableBits = 0xF8; +#define FPSCR_ENABLE (FPSCR_VE | FPSCR_OE | FPSCR_UE | FPSCR_ZE | FPSCR_XE) +SECTION_SDATA extern u32 __OSFpscrEnableBits = FPSCR_ENABLE; /* 8033C580-8033C798 336EC0 0218+00 0/0 4/4 0/0 .text OSSetErrorHandler */ #pragma push @@ -96,25 +88,29 @@ SECTION_DATA static char lit_78[] = "TB = 0x%016llx\n"; /* 803CF9F0-803CFA50 02CB10 0060+00 0/1 0/0 0/0 .data @79 */ #pragma push #pragma force_active on -SECTION_DATA static char lit_79[] = "\nInstruction at 0x%x (read from SRR0) attempted to access invalid address 0x%x (read from DAR)\n"; +SECTION_DATA static char lit_79[] = "\nInstruction at 0x%x (read from SRR0) attempted to access " + "invalid address 0x%x (read from DAR)\n"; #pragma pop /* 803CFA50-803CFA9C 02CB70 004C+00 0/0 0/0 0/0 .data @80 */ #pragma push #pragma force_active on -SECTION_DATA static char lit_80[] = "\nAttempted to fetch instruction from invalid address 0x%x (read from SRR0)\n"; +SECTION_DATA static char lit_80[] = + "\nAttempted to fetch instruction from invalid address 0x%x (read from SRR0)\n"; #pragma pop /* 803CFA9C-803CFB00 02CBBC 0062+02 0/0 0/0 0/0 .data @81 */ #pragma push #pragma force_active on -SECTION_DATA static char lit_81[] = "\nInstruction at 0x%x (read from SRR0) attempted to access unaligned address 0x%x (read from DAR)\n"; +SECTION_DATA static char lit_81[] = "\nInstruction at 0x%x (read from SRR0) attempted to access " + "unaligned address 0x%x (read from DAR)\n"; #pragma pop /* 803CFB00-803CFB60 02CC20 0060+00 0/0 0/0 0/0 .data @82 */ #pragma push #pragma force_active on -SECTION_DATA static char lit_82[] = "\nProgram exception : Possible illegal instruction/operation at or around 0x%x (read from SRR0)\n"; +SECTION_DATA static char lit_82[] = "\nProgram exception : Possible illegal instruction/operation " + "at or around 0x%x (read from SRR0)\n"; #pragma pop /* 803CFB60-803CFB80 02CC80 001F+01 0/0 0/0 0/0 .data @83 */ @@ -167,11 +163,120 @@ SECTION_DATA static void* lit_87[16 + 1 /* padding */] = { SECTION_SDATA static char lit_76[] = "\n"; /* 8033C798-8033CA80 3370D8 02E8+00 1/0 2/2 0/0 .text __OSUnhandledException */ +#ifdef NONMATCHING +void __OSUnhandledException(__OSException exception, OSContext* context, u32 dsisr, u32 dar) { + OSTime now; + + now = OSGetTime(); + + if (!(context->srr1 & MSR_RI)) { + OSReport("Non-recoverable Exception %d", exception); + } else { + if (exception == EXCEPTION_PROGRAM && (context->srr1 & (0x80000000 >> 11)) && + __OSErrorTable[EXCEPTION_FLOATING_POINT_EXCEPTION] != 0) { + u32 fpscr; + u32 msr; + + exception = EXCEPTION_FLOATING_POINT_EXCEPTION; + + msr = PPCMfmsr(); + PPCMtmsr(msr | MSR_FP); + + if (__OSFPUContext) { + OSSaveFPUContext((OSContext*)__OSFPUContext); + } + + fpscr = PPCMffpscr(); + fpscr &= ~(FPSCR_VXVC | FPSCR_VXIMZ | FPSCR_VXZDZ | FPSCR_VXIDI | FPSCR_VXISI | + FPSCR_VXSNAN | FPSCR_VXSOFT | FPSCR_VXSQRT | FPSCR_VXCVI | FPSCR_XX | + FPSCR_ZX | FPSCR_UX | FPSCR_OX | FPSCR_FX | FPSCR_FI); + PPCMtfpscr(fpscr); + + PPCMtmsr(msr); + + if (__OSFPUContext == context) { + OSDisableScheduler(); + __OSErrorTable[exception](exception, context, dsisr, dar); + context->srr1 &= ~MSR_FP; + __OSFPUContext = NULL; + + context->fpscr &= + ~(FPSCR_VXVC | FPSCR_VXIMZ | FPSCR_VXZDZ | FPSCR_VXIDI | FPSCR_VXISI | + FPSCR_VXSNAN | FPSCR_VXSOFT | FPSCR_VXSQRT | FPSCR_VXCVI | FPSCR_XX | + FPSCR_ZX | FPSCR_UX | FPSCR_OX | FPSCR_FX | FPSCR_FI); + OSEnableScheduler(); + __OSReschedule(); + } else { + context->srr1 &= ~MSR_FP; + __OSFPUContext = NULL; + } + + OSLoadContext(context); + } + + if (__OSErrorTable[exception]) { + OSDisableScheduler(); + __OSErrorTable[exception](exception, context, dsisr, dar); + OSEnableScheduler(); + __OSReschedule(); + OSLoadContext(context); + } + + if (exception == OS_ERROR_DECREMENTER) { + OSLoadContext(context); + } + + OSReport("Unhandled Exception %d", exception); + } + + OSReport("\n"); + OSDumpContext(context); + OSReport("\nDSISR = 0x%08x DAR = 0x%08x\n", dsisr, dar); + OSReport("TB = 0x%016llx\n", now); + + switch (exception) { + case EXCEPTION_DSI: + OSReport("\nInstruction at 0x%x (read from SRR0) attempted to access " + "invalid address 0x%x (read from DAR)\n", + context->srr0, dar); + break; + case EXCEPTION_ISI: + OSReport("\nAttempted to fetch instruction from invalid address 0x%x " + "(read from SRR0)\n", + context->srr0); + break; + case EXCEPTION_ALIGNMENT: + OSReport("\nInstruction at 0x%x (read from SRR0) attempted to access " + "unaligned address 0x%x (read from DAR)\n", + context->srr0, dar); + break; + case EXCEPTION_PROGRAM: + OSReport("\nProgram exception : Possible illegal instruction/operation " + "at or around 0x%x (read from SRR0)\n", + context->srr0, dar); + break; + case EXCEPTION_MEMORY_PROTECTION: + OSReport("\n"); + OSReport("AI DMA Address = 0x%04x%04x\n", __DSPRegs[0x00000018], + __DSPRegs[0x00000018 + 1]); + OSReport("ARAM DMA Address = 0x%04x%04x\n", __DSPRegs[0x00000010], + __DSPRegs[0x00000010 + 1]); + OSReport("DI DMA Address = 0x%08x\n", __DIRegs[0x00000005]); + break; + } + + OSReport("\nLast interrupt (%d): SRR0 = 0x%08x TB = 0x%016llx\n", __OSLastInterrupt, + __OSLastInterruptSrr0, __OSLastInterruptTime); + + PPCHalt(); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __OSUnhandledException(OSException exception, OSContext* context, u32 dsisr, u32 dar) { +asm void __OSUnhandledException(__OSException exception, OSContext* context, u32 dsisr, u32 dar) { nofralloc #include "asm/dolphin/os/OSError/__OSUnhandledException.s" } #pragma pop +#endif diff --git a/libs/dolphin/os/OSInterrupt.c b/libs/dolphin/os/OSInterrupt.c index e888111599..10d1d807e6 100644 --- a/libs/dolphin/os/OSInterrupt.c +++ b/libs/dolphin/os/OSInterrupt.c @@ -5,16 +5,19 @@ #include "dolphin/os/OSInterrupt.h" #include "dol2asm.h" +#include "dolphin/ai/ai.h" +#include "dolphin/dsp/dsp.h" +#include "dolphin/exi/EXIBios.h" #include "dolphin/os/OS.h" -#include "dolphin/types.h" + +vu32 __PIRegs[12] : 0xCC003000; +vu16 __MEMRegs[64] : 0xCC004000; // // External References: // SECTION_INIT void memset(); -void OSLoadContext(); -void __OSReschedule(); // // Declarations: @@ -98,26 +101,182 @@ OSInterruptHandler __OSGetInterruptHandler(OSInterrupt type) { } /* 8033D770-8033D7E4 3380B0 0074+00 0/0 1/1 0/0 .text __OSInterruptInit */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __OSInterruptInit(void) { - nofralloc -#include "asm/dolphin/os/OSInterrupt/__OSInterruptInit.s" +void __OSInterruptInit(void) { + InterruptHandlerTable = OSPhysicalToCached(0x3040); + memset(InterruptHandlerTable, 0, 32 * sizeof(OSInterruptHandler)); + + *(OSInterruptMask*)OSPhysicalToCached(0x00C4) = 0; + + *(OSInterruptMask*)OSPhysicalToCached(0x00C8) = 0; + + __PIRegs[1] = 0xf0; + + __OSMaskInterrupts(OS_INTERRUPTMASK_MEM | OS_INTERRUPTMASK_DSP | OS_INTERRUPTMASK_AI | + OS_INTERRUPTMASK_EXI | OS_INTERRUPTMASK_PI); + + __OSSetExceptionHandler(4, (OSExceptionHandler)ExternalInterruptHandler); } -#pragma pop /* 8033D7E4-8033DABC 338124 02D8+00 2/2 0/0 0/0 .text SetInterruptMask */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm OSInterruptMask SetInterruptMask(OSInterruptMask param_0, OSInterruptMask param_1) { - nofralloc -#include "asm/dolphin/os/OSInterrupt/SetInterruptMask.s" +u32 SetInterruptMask(OSInterruptMask mask, OSInterruptMask current) { + u32 reg; + + switch (__cntlzw(mask)) { + case OS_INTR_MEM_0: + case OS_INTR_MEM_1: + case OS_INTR_MEM_2: + case OS_INTR_MEM_3: + case OS_INTR_MEM_ADDRESS: + reg = 0; + if (!(current & OS_INTERRUPTMASK_MEM_0)) + reg |= 0x1; + if (!(current & OS_INTERRUPTMASK_MEM_1)) + reg |= 0x2; + if (!(current & OS_INTERRUPTMASK_MEM_2)) + reg |= 0x4; + if (!(current & OS_INTERRUPTMASK_MEM_3)) + reg |= 0x8; + if (!(current & OS_INTERRUPTMASK_MEM_ADDRESS)) + reg |= 0x10; + __MEMRegs[0x0000000e] = (u16)reg; + mask &= ~OS_INTERRUPTMASK_MEM; + break; + case OS_INTR_DSP_AI: + case OS_INTR_DSP_ARAM: + case OS_INTR_DSP_DSP: + reg = __DSPRegs[0x00000005]; + reg &= ~0x1F8; + if (!(current & OS_INTERRUPTMASK_DSP_AI)) + reg |= 0x10; + if (!(current & OS_INTERRUPTMASK_DSP_ARAM)) + reg |= 0x40; + if (!(current & OS_INTERRUPTMASK_DSP_DSP)) + reg |= 0x100; + __DSPRegs[0x00000005] = (u16)reg; + mask &= ~OS_INTERRUPTMASK_DSP; + break; + case OS_INTR_AI_AI: + reg = __AIRegs[0]; + reg &= ~0x2C; + if (!(current & OS_INTERRUPTMASK_AI_AI)) + reg |= 0x4; + __AIRegs[0] = reg; + mask &= ~OS_INTERRUPTMASK_AI; + break; + case OS_INTR_EXI_0_EXI: + case OS_INTR_EXI_0_TC: + case OS_INTR_EXI_0_EXT: + reg = __EXIRegs[0]; + reg &= ~0x2C0F; + if (!(current & OS_INTERRUPTMASK_EXI_0_EXI)) + reg |= 0x1; + if (!(current & OS_INTERRUPTMASK_EXI_0_TC)) + reg |= 0x4; + if (!(current & OS_INTERRUPTMASK_EXI_0_EXT)) + reg |= 0x400; + __EXIRegs[0] = reg; + mask &= ~OS_INTERRUPTMASK_EXI_0; + break; + case OS_INTR_EXI_1_EXI: + case OS_INTR_EXI_1_TC: + case OS_INTR_EXI_1_EXT: + reg = __EXIRegs[5]; + reg &= ~0xC0F; + + if (!(current & OS_INTERRUPTMASK_EXI_1_EXI)) + reg |= 0x1; + if (!(current & OS_INTERRUPTMASK_EXI_1_TC)) + reg |= 0x4; + if (!(current & OS_INTERRUPTMASK_EXI_1_EXT)) + reg |= 0x400; + __EXIRegs[5] = reg; + mask &= ~OS_INTERRUPTMASK_EXI_1; + break; + case OS_INTR_EXI_2_EXI: + case OS_INTR_EXI_2_TC: + reg = __EXIRegs[10]; + reg &= ~0xF; + if (!(current & OS_INTERRUPTMASK_EXI_2_EXI)) + reg |= 0x1; + if (!(current & OS_INTERRUPTMASK_EXI_2_TC)) + reg |= 0x4; + + __EXIRegs[10] = reg; + mask &= ~OS_INTERRUPTMASK_EXI_2; + break; + case OS_INTR_PI_CP: + case OS_INTR_PI_SI: + case OS_INTR_PI_DI: + case OS_INTR_PI_RSW: + case OS_INTR_PI_ERROR: + case OS_INTR_PI_VI: + case OS_INTR_PI_DEBUG: + case OS_INTR_PI_PE_TOKEN: + case OS_INTR_PI_PE_FINISH: + case OS_INTR_PI_HSP: + reg = 0xF0; + + if (!(current & OS_INTERRUPTMASK_PI_CP)) { + reg |= 0x800; + } + if (!(current & OS_INTERRUPTMASK_PI_SI)) { + reg |= 0x8; + } + if (!(current & OS_INTERRUPTMASK_PI_DI)) { + reg |= 0x4; + } + if (!(current & OS_INTERRUPTMASK_PI_RSW)) { + reg |= 0x2; + } + if (!(current & OS_INTERRUPTMASK_PI_ERROR)) { + reg |= 0x1; + } + if (!(current & OS_INTERRUPTMASK_PI_VI)) { + reg |= 0x100; + } + if (!(current & OS_INTERRUPTMASK_PI_DEBUG)) { + reg |= 0x1000; + } + if (!(current & OS_INTERRUPTMASK_PI_PE_TOKEN)) { + reg |= 0x200; + } + if (!(current & OS_INTERRUPTMASK_PI_PE_FINISH)) { + reg |= 0x400; + } + if (!(current & OS_INTERRUPTMASK_PI_HSP)) { + reg |= 0x2000; + } + __PIRegs[1] = reg; + mask &= ~OS_INTERRUPTMASK_PI; + break; + default: + break; + } + return mask; } -#pragma pop /* 8033DABC-8033DB44 3383FC 0088+00 1/1 15/15 0/0 .text __OSMaskInterrupts */ +// need compiler epilogue patch +#ifdef NONMATCHING +OSInterruptMask __OSMaskInterrupts(OSInterruptMask global) { + BOOL enabled; + OSInterruptMask prev; + OSInterruptMask local; + OSInterruptMask mask; + + enabled = OSDisableInterrupts(); + prev = *(OSInterruptMask*)OSPhysicalToCached(0x00C4); + local = *(OSInterruptMask*)OSPhysicalToCached(0x00C8); + mask = ~(prev | local) & global; + global |= prev; + *(OSInterruptMask*)OSPhysicalToCached(0x00C4) = global; + while (mask) { + mask = SetInterruptMask(mask, global | local); + } + OSRestoreInterrupts(enabled); + return prev; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -126,8 +285,30 @@ asm OSInterruptMask __OSMaskInterrupts(OSInterruptMask mask) { #include "asm/dolphin/os/OSInterrupt/__OSMaskInterrupts.s" } #pragma pop +#endif /* 8033DB44-8033DBCC 338484 0088+00 0/0 18/18 0/0 .text __OSUnmaskInterrupts */ +// need compiler epilogue patch +#ifdef NONMATCHING +OSInterruptMask __OSUnmaskInterrupts(OSInterruptMask global) { + BOOL enabled; + OSInterruptMask prev; + OSInterruptMask local; + OSInterruptMask mask; + + enabled = OSDisableInterrupts(); + prev = *(OSInterruptMask*)OSPhysicalToCached(0x00C4); + local = *(OSInterruptMask*)OSPhysicalToCached(0x00C8); + mask = (prev | local) & global; + global = prev & ~global; + *(OSInterruptMask*)OSPhysicalToCached(0x00C4) = global; + while (mask) { + mask = SetInterruptMask(mask, global | local); + } + OSRestoreInterrupts(enabled); + return prev; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -136,6 +317,7 @@ asm OSInterruptMask __OSUnmaskInterrupts(OSInterruptMask mask) { #include "asm/dolphin/os/OSInterrupt/__OSUnmaskInterrupts.s" } #pragma pop +#endif /* ############################################################################################## */ /* 803D0758-803D0788 02D878 002C+04 1/1 0/0 0/0 .data InterruptPrioTable */ @@ -157,14 +339,136 @@ extern u32 __OSLastInterruptSrr0; u32 __OSLastInterruptSrr0; /* 8033DBCC-8033DF10 33850C 0344+00 1/1 0/0 0/0 .text __OSDispatchInterrupt */ +// need compiler epilogue patch +#ifdef NONMATCHING +void __OSDispatchInterrupt(__OSException exception, OSContext* context) { + u32 intsr; + u32 reg; + OSInterruptMask cause; + OSInterruptMask unmasked; + OSInterruptMask* prio; + OSInterrupt interrupt; + OSInterruptHandler handler; + intsr = __PIRegs[0]; + intsr &= ~0x00010000; + + if (intsr == 0 || (intsr & __PIRegs[1]) == 0) { + OSLoadContext(context); + } + + cause = 0; + + if (intsr & 0x00000080) { + reg = __MEMRegs[15]; + if (reg & 0x1) + cause |= OS_INTERRUPTMASK_MEM_0; + if (reg & 0x2) + cause |= OS_INTERRUPTMASK_MEM_1; + if (reg & 0x4) + cause |= OS_INTERRUPTMASK_MEM_2; + if (reg & 0x8) + cause |= OS_INTERRUPTMASK_MEM_3; + if (reg & 0x10) + cause |= OS_INTERRUPTMASK_MEM_ADDRESS; + } + + if (intsr & 0x00000040) { + reg = __DSPRegs[5]; + if (reg & 0x8) + cause |= OS_INTERRUPTMASK_DSP_AI; + if (reg & 0x20) + cause |= OS_INTERRUPTMASK_DSP_ARAM; + if (reg & 0x80) + cause |= OS_INTERRUPTMASK_DSP_DSP; + } + + if (intsr & 0x00000020) { + reg = __AIRegs[0]; + if (reg & 0x8) + cause |= OS_INTERRUPTMASK_AI_AI; + } + + if (intsr & 0x00000010) { + reg = __EXIRegs[0]; + if (reg & 0x2) + cause |= OS_INTERRUPTMASK_EXI_0_EXI; + if (reg & 0x8) + cause |= OS_INTERRUPTMASK_EXI_0_TC; + if (reg & 0x800) + cause |= OS_INTERRUPTMASK_EXI_0_EXT; + reg = __EXIRegs[5]; + if (reg & 0x2) + cause |= OS_INTERRUPTMASK_EXI_1_EXI; + if (reg & 0x8) + cause |= OS_INTERRUPTMASK_EXI_1_TC; + if (reg & 0x800) + cause |= OS_INTERRUPTMASK_EXI_1_EXT; + reg = __EXIRegs[10]; + if (reg & 0x2) + cause |= OS_INTERRUPTMASK_EXI_2_EXI; + if (reg & 0x8) + cause |= OS_INTERRUPTMASK_EXI_2_TC; + } + + if (intsr & 0x00002000) + cause |= OS_INTERRUPTMASK_PI_HSP; + if (intsr & 0x00001000) + cause |= OS_INTERRUPTMASK_PI_DEBUG; + if (intsr & 0x00000400) + cause |= OS_INTERRUPTMASK_PI_PE_FINISH; + if (intsr & 0x00000200) + cause |= OS_INTERRUPTMASK_PI_PE_TOKEN; + if (intsr & 0x00000100) + cause |= OS_INTERRUPTMASK_PI_VI; + if (intsr & 0x00000008) + cause |= OS_INTERRUPTMASK_PI_SI; + if (intsr & 0x00000004) + cause |= OS_INTERRUPTMASK_PI_DI; + if (intsr & 0x00000002) + cause |= OS_INTERRUPTMASK_PI_RSW; + if (intsr & 0x00000800) + cause |= OS_INTERRUPTMASK_PI_CP; + if (intsr & 0x00000001) + cause |= OS_INTERRUPTMASK_PI_ERROR; + + unmasked = cause & ~(*(OSInterruptMask*)OSPhysicalToCached(0x00C4) | + *(OSInterruptMask*)OSPhysicalToCached(0x00C8)); + if (unmasked) { + for (prio = InterruptPrioTable;; ++prio) { + if (unmasked & *prio) { + interrupt = (OSInterrupt)__cntlzw(unmasked & *prio); + break; + } + } + + handler = __OSGetInterruptHandler(interrupt); + if (handler) { + if (OS_INTR_MEM_ADDRESS < interrupt) { + __OSLastInterrupt = interrupt; + __OSLastInterruptTime = OSGetTime(); + __OSLastInterruptSrr0 = context->srr0; + } + + OSDisableScheduler(); + handler(interrupt, context); + OSEnableScheduler(); + __OSReschedule(); + OSLoadContext(context); + } + } + + OSLoadContext(context); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __OSDispatchInterrupt(OSInterrupt interrupt, OSContext* context) { +asm void __OSDispatchInterrupt(__OSException exception, OSContext* context) { nofralloc #include "asm/dolphin/os/OSInterrupt/__OSDispatchInterrupt.s" } #pragma pop +#endif /* 8033DF10-8033DF60 338850 0050+00 1/1 0/0 0/0 .text ExternalInterruptHandler */ static asm void ExternalInterruptHandler(register OSInterrupt type, register OSContext* context) { diff --git a/libs/dolphin/os/OSLink.c b/libs/dolphin/os/OSLink.c index 371d33dfd2..d5f5e37a12 100644 --- a/libs/dolphin/os/OSLink.c +++ b/libs/dolphin/os/OSLink.c @@ -7,6 +7,113 @@ #include "dol2asm.h" #include "dolphin/types.h" +#define SHN_UNDEF 0 +#define SHN_LORESERVE 0xff00 +#define SHN_LOPROC 0xff00 +#define SHN_HIPROC 0xff1f +#define SHN_ABS 0xfff1 +#define SHN_COMMON 0xfff2 +#define SHN_HIRESERVE 0xffff + +#define ELF32_R_SYM(i) ((i) >> 8) +#define ELF32_R_TYPE(i) ((unsigned char)(i)) +#define ELF32_R_INFO(s, t) (((s) << 8) + (unsigned char)(t)) + +// Name Value Field Calculation +#define R_PPC_NONE 0 // none none +#define R_PPC_ADDR32 1 // word32 S + A +#define R_PPC_ADDR24 2 // low24* (S + A) >> 2 +#define R_PPC_ADDR16 3 // half16* S + A +#define R_PPC_ADDR16_LO 4 // half16 #lo(S + A) +#define R_PPC_ADDR16_HI 5 // half16 #hi(S + A) +#define R_PPC_ADDR16_HA 6 // half16 #ha(S + A) +#define R_PPC_ADDR14 7 // low14* (S + A) >> 2 +#define R_PPC_ADDR14_BRTAKEN 8 // low14* (S + A) >> 2 +#define R_PPC_ADDR14_BRNTAKEN 9 // low14* (S + A) >> 2 +#define R_PPC_REL24 10 // low24* (S + A - P) >> 2 +#define R_PPC_REL14 11 // low14* (S + A - P) >> 2 +#define R_PPC_REL14_BRTAKEN 12 // low14* (S + A - P) >> 2 +#define R_PPC_REL14_BRNTAKEN 13 // low14* (S + A - P) >> 2 + +#define R_PPC_GOT16 14 // half16* G + A +#define R_PPC_GOT16_LO 15 // half16 #lo(G + A) +#define R_PPC_GOT16_HI 16 // half16 #hi(G + A) +#define R_PPC_GOT16_HA 17 // half16 #ha(G + A) +#define R_PPC_PLTREL24 18 // low24* (L + A - P) >> 2 +#define R_PPC_COPY 19 // none none +#define R_PPC_GLOB_DAT 20 // word32 S + A +#define R_PPC_JMP_SLOT 21 // none +#define R_PPC_RELATIVE 22 // word32 B + A + +#define R_PPC_LOCAL24PC 23 // low24* + +#define R_PPC_UADDR32 24 // word32 S + A +#define R_PPC_UADDR16 25 // half16* S + A +#define R_PPC_REL32 26 // word32 S + A - P + +#define R_PPC_PLT32 27 // word32 L + A +#define R_PPC_PLTREL32 28 // word32 L + A - P +#define R_PPC_PLT16_LO 29 // half16 #lo(L + A) +#define R_PPL_PLT16_HI 30 // half16 #hi(L + A) +#define R_PPC_PLT16_HA 31 // half16 #ha(L + A) + +#define R_PPC_SDAREL16 32 // half16* S + A - _SDA_BASE_ +#define R_PPC_SECTOFF 33 // half16* R + A +#define R_PPC_SECTOFF_LO 34 // half16 #lo(R + A) +#define R_PPC_SECTOFF_HI 35 // half16 #hi(R + A) +#define R_PPC_SECTOFF_HA 36 // half16 #ha(R + A) +#define R_PPC_ADDR30 37 // word30 (S + A - P) >> 2 + +#define R_PPC_EMB_NADDR32 101 // uword32 N (A - S) +#define R_PPC_EMB_NADDR16 102 // uhalf16 Y (A - S) +#define R_PPC_EMB_NADDR16_LO 103 // uhalf16 N #lo(A - S) +#define R_PPC_EMB_NADDR16_HI 104 // uhalf16 N #hi(A - S) +#define R_PPC_EMB_NADDR16_HA 105 // uhalf16 N #ha(A - S) +#define R_PPC_EMB_SDAI16 106 // uhalf16 Y T +#define R_PPC_EMB_SDA2I16 107 // uhalf16 Y U +#define R_PPC_EMB_SDA2REL 108 // uhalf16 Y S + A - _SDA2_BASE_ +#define R_PPC_EMB_SDA21 109 // ulow21 N +#define R_PPC_EMB_MRKREF 110 // none N +#define R_PPC_EMB_RELSEC16 111 // uhalf16 Y V + A +#define R_PPC_EMB_RELST_LO 112 // uhalf16 N #lo(W + A) +#define R_PPC_EMB_RELST_HI 113 // uhalf16 N #hi(W + A) +#define R_PPC_EMB_RELST_HA 114 // uhalf16 N #ha(W + A) +#define R_PPC_EMB_BIT_FLD 115 // uword32 Y +#define R_PPC_EMB_RELSDA 116 // uhalf16 Y + +#define EnqueueTail(queue, moduleInfo, link) \ + do { \ + OSModuleInfo* __prev; \ + \ + __prev = (queue)->tail; \ + if (__prev == NULL) \ + (queue)->head = (moduleInfo); \ + else \ + __prev->link.next = (moduleInfo); \ + (moduleInfo)->link.prev = __prev; \ + (moduleInfo)->link.next = NULL; \ + (queue)->tail = (moduleInfo); \ + } while (0) + +#define DequeueItem(queue, moduleInfo, link) \ + do { \ + OSModuleInfo* __next; \ + OSModuleInfo* __prev; \ + \ + __next = (moduleInfo)->link.next; \ + __prev = (moduleInfo)->link.prev; \ + \ + if (__next == NULL) \ + (queue)->tail = __prev; \ + else \ + __next->link.prev = __prev; \ + \ + if (__prev == NULL) \ + (queue)->head = __next; \ + else \ + __prev->link.next = __next; \ + } while (0) + // // External References: // diff --git a/libs/dolphin/os/OSMemory.c b/libs/dolphin/os/OSMemory.c index 14b9398454..1ffd8a4ccb 100644 --- a/libs/dolphin/os/OSMemory.c +++ b/libs/dolphin/os/OSMemory.c @@ -5,18 +5,19 @@ #include "dolphin/os/OSMemory.h" #include "dol2asm.h" +#include "dolphin/os/OS.h" #include "dolphin/os/OSReset.h" -#include "dolphin/types.h" + +#define TRUNC(n, a) (((u32)(n)) & ~((a)-1)) +#define ROUND(n, a) (((u32)(n) + (a)-1) & ~((a)-1)) + +vu16 __MEMRegs[64] : 0xCC004000; // // External References: // -void DCInvalidateRange(); -void DCFlushRange(); -void __OSUnhandledException(); -void OSRegisterResetFunction(); -extern u8 __OSErrorTable[68 + 12 /* padding */]; +extern OSErrorHandler __OSErrorTable[16]; // // Declarations: @@ -33,6 +34,24 @@ static asm s32 OnReset(s32 param_0) { #pragma pop /* 8033ECA8-8033ED14 3395E8 006C+00 1/1 0/0 0/0 .text MEMIntrruptHandler */ +#ifdef NONMATCHING +static void MEMIntrruptHandler(OSInterrupt interrupt, OSContext* context) { + u32 addr; + u32 cause; + + cause = __MEMRegs[0xf]; + addr = (((u32)__MEMRegs[0x12] & 0x3ff) << 16) | __MEMRegs[0x11]; + __MEMRegs[0x10] = 0; + + if (__OSErrorTable[EXCEPTION_MEMORY_PROTECTION]) { + __OSErrorTable[EXCEPTION_MEMORY_PROTECTION](EXCEPTION_MEMORY_PROTECTION, context, cause, + addr); + return; + } + + __OSUnhandledException(EXCEPTION_MEMORY_PROTECTION, context, cause, addr); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -41,16 +60,44 @@ static asm void MEMIntrruptHandler(OSInterrupt interrupt, struct OSContext* cont #include "asm/dolphin/os/OSMemory/MEMIntrruptHandler.s" } #pragma pop +#endif /* 8033ED14-8033EDD8 339654 00C4+00 0/0 1/1 0/0 .text OSProtectRange */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void OSProtectRange(u32 channel, void* address, u32 nBytes, u32 control) { - nofralloc -#include "asm/dolphin/os/OSMemory/OSProtectRange.s" +void OSProtectRange(u32 chan, void* addr, u32 nBytes, u32 control) { + BOOL enabled; + u32 start; + u32 end; + u16 reg; + if (4 <= chan) { + return; + } + + control &= OS_PROTECT_CONTROL_RDWR; + + end = (u32)addr + nBytes; + start = TRUNC(addr, 1u << 10); + end = ROUND(end, 1u << 10); + + DCFlushRange((void*)start, end - start); + + enabled = OSDisableInterrupts(); + + __OSMaskInterrupts(OS_INTERRUPTMASK(OS_INTR_MEM_0 + chan)); + + __MEMRegs[0 + 2 * chan] = (u16)(start >> 10); + __MEMRegs[1 + 2 * chan] = (u16)(end >> 10); + + reg = __MEMRegs[8]; + reg &= ~(OS_PROTECT_CONTROL_RDWR << 2 * chan); + reg |= control << 2 * chan; + __MEMRegs[8] = reg; + + if (control != OS_PROTECT_CONTROL_RDWR) { + __OSUnmaskInterrupts(OS_INTERRUPTMASK(OS_INTR_MEM_0 + chan)); + } + + OSRestoreInterrupts(enabled); } -#pragma pop /* 8033EDD8-8033EE58 339718 0080+00 1/1 0/0 0/0 .text Config24MB */ static asm void Config24MB(void) { @@ -133,7 +180,7 @@ static asm void Config48MB(void) { } /* 8033EED8-8033EEF0 339818 0018+00 1/1 0/0 0/0 .text RealMode */ -static asm void RealMode(register void* config){ +static asm void RealMode(register u32 config) { // clang-format off nofralloc @@ -155,12 +202,46 @@ static OSResetFunctionInfo ResetFunctionInfo = { NULL, }; -/* 8033EEF0-8033F008 339830 0118+00 0/0 1/1 0/0 .text __OSInitMemoryProtection */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __OSInitMemoryProtection(void) { - nofralloc -#include "asm/dolphin/os/OSMemory/__OSInitMemoryProtection.s" +inline u32 OSGetPhysicalMemSize() { + return *(u32*)(OSPhysicalToCached(0x0028)); +} + +inline u32 OSGetConsoleSimulatedMemSize() { + return *(u32*)(OSPhysicalToCached(0x00F0)); +} + +/* 8033EEF0-8033F008 339830 0118+00 0/0 1/1 0/0 .text __OSInitMemoryProtection */ +void __OSInitMemoryProtection() { + u32 padding[8]; + u32 simulatedSize; + BOOL enabled; + simulatedSize = OSGetConsoleSimulatedMemSize(); + enabled = OSDisableInterrupts(); + + __MEMRegs[16] = 0; + __MEMRegs[8] = 0xFF; + + __OSMaskInterrupts(OS_INTERRUPTMASK_MEM_0 | OS_INTERRUPTMASK_MEM_1 | OS_INTERRUPTMASK_MEM_2 | + OS_INTERRUPTMASK_MEM_3); + __OSSetInterruptHandler(OS_INTR_MEM_0, MEMIntrruptHandler); + __OSSetInterruptHandler(OS_INTR_MEM_1, MEMIntrruptHandler); + __OSSetInterruptHandler(OS_INTR_MEM_2, MEMIntrruptHandler); + __OSSetInterruptHandler(OS_INTR_MEM_3, MEMIntrruptHandler); + __OSSetInterruptHandler(OS_INTR_MEM_ADDRESS, MEMIntrruptHandler); + OSRegisterResetFunction(&ResetFunctionInfo); + + if (OSGetConsoleSimulatedMemSize() < OSGetPhysicalMemSize() && + OSGetConsoleSimulatedMemSize() == 0x1800000) { + DCInvalidateRange((void*)0x81800000, 0x1800000); + __MEMRegs[20] = 2; + } + + if (simulatedSize <= 0x1800000) { + RealMode((u32)&Config24MB); + } else if (simulatedSize <= 0x3000000) { + RealMode((u32)&Config48MB); + } + + __OSUnmaskInterrupts(OS_INTERRUPTMASK_MEM_ADDRESS); + OSRestoreInterrupts(enabled); } -#pragma pop diff --git a/libs/dolphin/os/OSMessage.c b/libs/dolphin/os/OSMessage.c index 024b6f3d02..0759648ac5 100644 --- a/libs/dolphin/os/OSMessage.c +++ b/libs/dolphin/os/OSMessage.c @@ -5,30 +5,50 @@ #include "dolphin/os/OSMessage.h" #include "dol2asm.h" -#include "dolphin/types.h" - -// -// External References: -// - -void OSDisableInterrupts(); -void OSRestoreInterrupts(); +#include "dolphin/os/OS.h" // // Declarations: // /* 8033E994-8033E9F4 3392D4 0060+00 0/0 13/13 5/5 .text OSInitMessageQueue */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void OSInitMessageQueue(OSMessageQueue* queue, OSMessage* msgArray, s32 msgCount) { - nofralloc -#include "asm/dolphin/os/OSMessage/OSInitMessageQueue.s" +void OSInitMessageQueue(OSMessageQueue* mq, OSMessage* msgArray, s32 msgCount) { + OSInitThreadQueue(&mq->sending_queue); + OSInitThreadQueue(&mq->receiving_queue); + mq->message_array = msgArray; + mq->num_messages = msgCount; + mq->first_index = 0; + mq->num_used = 0; } -#pragma pop /* 8033E9F4-8033EABC 339334 00C8+00 0/0 21/21 9/9 .text OSSendMessage */ +// needs compiler epilogue patch +#ifdef NONMATCHING +BOOL OSSendMessage(OSMessageQueue* mq, OSMessage msg, s32 flags) { + BOOL enabled; + s32 lastIndex; + + enabled = OSDisableInterrupts(); + + while (mq->num_messages <= mq->num_used) { + if (!(flags & OS_MESSAGE_BLOCK)) { + OSRestoreInterrupts(enabled); + return FALSE; + } else { + OSSleepThread(&mq->sending_queue); + } + } + + lastIndex = (mq->first_index + mq->num_used) % mq->num_messages; + mq->message_array[lastIndex] = msg; + mq->num_used++; + + OSWakeupThread(&mq->receiving_queue); + + OSRestoreInterrupts(enabled); + return TRUE; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -37,8 +57,37 @@ asm BOOL OSSendMessage(OSMessageQueue* queue, OSMessage msg, s32 flags) { #include "asm/dolphin/os/OSMessage/OSSendMessage.s" } #pragma pop +#endif /* 8033EABC-8033EB98 3393FC 00DC+00 0/0 15/15 9/9 .text OSReceiveMessage */ +// needs compiler epilogue patch +#ifdef NONMATCHING +BOOL OSReceiveMessage(OSMessageQueue* mq, OSMessage* msg, s32 flags) { + BOOL enabled; + + enabled = OSDisableInterrupts(); + + while (mq->num_used == 0) { + if (!(flags & OS_MESSAGE_BLOCK)) { + OSRestoreInterrupts(enabled); + return FALSE; + } else { + OSSleepThread(&mq->receiving_queue); + } + } + + if (msg != NULL) { + *msg = mq->message_array[mq->first_index]; + } + mq->first_index = (mq->first_index + 1) % mq->num_messages; + mq->num_used--; + + OSWakeupThread(&mq->sending_queue); + + OSRestoreInterrupts(enabled); + return TRUE; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -47,6 +96,7 @@ asm BOOL OSReceiveMessage(OSMessageQueue* queue, OSMessage* msg, s32 flags) { #include "asm/dolphin/os/OSMessage/OSReceiveMessage.s" } #pragma pop +#endif /* 8033EB98-8033EC6C 3394D8 00D4+00 0/0 1/1 0/0 .text OSJamMessage */ #pragma push diff --git a/libs/dolphin/os/OSMutex.c b/libs/dolphin/os/OSMutex.c index a6a8cb80b0..ad538a75d8 100644 --- a/libs/dolphin/os/OSMutex.c +++ b/libs/dolphin/os/OSMutex.c @@ -5,54 +5,136 @@ #include "dolphin/os/OSMutex.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/os/OS.h" -// -// External References: -// +#define PushTail(queue, mutex, link) \ + do { \ + OSMutex* __prev; \ + \ + __prev = (queue)->tail; \ + if (__prev == NULL) \ + (queue)->head = (mutex); \ + else \ + __prev->link.next = (mutex); \ + (mutex)->link.prev = __prev; \ + (mutex)->link.next = NULL; \ + (queue)->tail = (mutex); \ + } while (0) -void OSDisableInterrupts(); -void OSRestoreInterrupts(); +#define PopHead(queue, mutex, link) \ + do { \ + OSMutex* __next; \ + \ + (mutex) = (queue)->head; \ + __next = (mutex)->link.next; \ + if (__next == NULL) \ + (queue)->tail = NULL; \ + else \ + __next->link.prev = NULL; \ + (queue)->head = __next; \ + } while (0) + +#define PopItem(queue, mutex, link) \ + do { \ + OSMutex* __next; \ + OSMutex* __prev; \ + \ + __next = (mutex)->link.next; \ + __prev = (mutex)->link.prev; \ + \ + if (__next == NULL) \ + (queue)->tail = __prev; \ + else \ + __next->link.prev = __prev; \ + \ + if (__prev == NULL) \ + (queue)->head = __next; \ + else \ + __prev->link.next = __next; \ + } while (0) // // Declarations: // /* 8033F008-8033F040 339948 0038+00 0/0 12/12 0/0 .text OSInitMutex */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void OSInitMutex(struct OSMutex* mutex) { - nofralloc -#include "asm/dolphin/os/OSMutex/OSInitMutex.s" +void OSInitMutex(OSMutex* mutex) { + OSInitThreadQueue(&mutex->queue); + mutex->thread = 0; + mutex->count = 0; } -#pragma pop /* 8033F040-8033F11C 339980 00DC+00 1/1 62/62 0/0 .text OSLockMutex */ +// needs compiler epilogue patch +#ifdef NONMATCHING +void OSLockMutex(OSMutex* mutex) { + BOOL enabled = OSDisableInterrupts(); + OSThread* currentThread = OSGetCurrentThread(); + OSThread* ownerThread; + + while (TRUE) { + ownerThread = ((OSMutex*)mutex)->thread; + if (ownerThread == 0) { + mutex->thread = currentThread; + mutex->count++; + PushTail(¤tThread->owned_mutexes, mutex, link); + break; + } else if (ownerThread == currentThread) { + mutex->count++; + break; + } else { + currentThread->mutex = mutex; + __OSPromoteThread(mutex->thread, currentThread->effective_priority); + OSSleepThread(&mutex->queue); + currentThread->mutex = 0; + } + } + OSRestoreInterrupts(enabled); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void OSLockMutex(struct OSMutex* mutex) { +asm void OSLockMutex(OSMutex* mutex) { nofralloc #include "asm/dolphin/os/OSMutex/OSLockMutex.s" } #pragma pop +#endif /* 8033F11C-8033F1E4 339A5C 00C8+00 0/0 71/71 0/0 .text OSUnlockMutex */ +#ifdef NONMATCHING +void OSUnlockMutex(OSMutex* mutex) { + BOOL enabled = OSDisableInterrupts(); + OSThread* currentThread = OSGetCurrentThread(); + + if (mutex->thread == currentThread && --mutex->count == 0) { + PopItem(¤tThread->owned_mutexes, mutex, link); + mutex->thread = NULL; + if (currentThread->effective_priority < currentThread->base_priority) { + currentThread->effective_priority = __OSGetEffectivePriority(currentThread); + } + + OSWakeupThread(&mutex->queue); + } + OSRestoreInterrupts(enabled); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void OSUnlockMutex(struct OSMutex* mutex) { +asm void OSUnlockMutex(OSMutex* mutex) { nofralloc #include "asm/dolphin/os/OSMutex/OSUnlockMutex.s" } #pragma pop +#endif /* 8033F1E4-8033F254 339B24 0070+00 0/0 2/2 0/0 .text __OSUnlockAllMutex */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __OSUnlockAllMutex(struct OSThread* thread) { +asm void __OSUnlockAllMutex(OSThread* thread) { nofralloc #include "asm/dolphin/os/OSMutex/__OSUnlockAllMutex.s" } @@ -62,7 +144,7 @@ asm void __OSUnlockAllMutex(struct OSThread* thread) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm s32 OSTryLockMutex(struct OSMutex* mutex) { +asm s32 OSTryLockMutex(OSMutex* mutex) { nofralloc #include "asm/dolphin/os/OSMutex/OSTryLockMutex.s" } @@ -72,7 +154,7 @@ asm s32 OSTryLockMutex(struct OSMutex* mutex) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void OSInitCond(struct OSCond* cond) { +asm void OSInitCond(OSCond* cond) { nofralloc #include "asm/dolphin/os/OSMutex/OSInitCond.s" } @@ -82,7 +164,7 @@ asm void OSInitCond(struct OSCond* cond) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void OSWaitCond(struct OSCond* cond, struct OSMutex* mutex) { +asm void OSWaitCond(OSCond* cond, OSMutex* mutex) { nofralloc #include "asm/dolphin/os/OSMutex/OSWaitCond.s" } @@ -92,7 +174,7 @@ asm void OSWaitCond(struct OSCond* cond, struct OSMutex* mutex) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void OSSignalCond(struct OSCond* con) { +asm void OSSignalCond(OSCond* con) { nofralloc #include "asm/dolphin/os/OSMutex/OSSignalCond.s" } @@ -102,7 +184,7 @@ asm void OSSignalCond(struct OSCond* con) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm s32 __OSCheckMutex(struct OSThread* thread) { +asm s32 __OSCheckMutex(OSThread* thread) { nofralloc #include "asm/dolphin/os/OSMutex/__OSCheckMutex.s" } @@ -112,7 +194,7 @@ asm s32 __OSCheckMutex(struct OSThread* thread) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm BOOL __OSCheckDeadLock(struct OSThread* thread) { +asm BOOL __OSCheckDeadLock(OSThread* thread) { nofralloc #include "asm/dolphin/os/OSMutex/__OSCheckDeadLock.s" } @@ -122,7 +204,7 @@ asm BOOL __OSCheckDeadLock(struct OSThread* thread) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm BOOL __OSCheckMutexes(struct OSThread* thread) { +asm BOOL __OSCheckMutexes(OSThread* thread) { nofralloc #include "asm/dolphin/os/OSMutex/__OSCheckMutexes.s" } diff --git a/libs/dolphin/os/OSReset.c b/libs/dolphin/os/OSReset.c index f3b5332749..c3a06a0211 100644 --- a/libs/dolphin/os/OSReset.c +++ b/libs/dolphin/os/OSReset.c @@ -5,26 +5,17 @@ #include "dolphin/os/OSReset.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/os/OS.h" + +vu16 __VIRegs[59] : 0xCC002000; +OSThreadQueue __OSActiveThreadQueue : (OS_BASE_CACHED | 0x00DC); // // External References: // SECTION_INIT void memset(); -void OSReport(); -void __OSStopAudioSystem(); -void ICFlashInvalidate(); -void LCDisable(); -void OSDisableInterrupts(); -void __OSReboot(); -void __OSLockSram(); -void __OSUnlockSram(); -void __OSSyncSram(); -void OSDisableScheduler(); -void OSEnableScheduler(); -void OSCancelThread(); -void __PADDisableRecalibration(); +int __PADDisableRecalibration(); extern u8 __OSRebootParams[28 + 4 /* padding */]; // @@ -33,27 +24,66 @@ extern u8 __OSRebootParams[28 + 4 /* padding */]; /* ############################################################################################## */ /* 80451690-80451698 000B90 0008+00 2/2 0/0 0/0 .sbss ResetFunctionQueue */ -static u8 ResetFunctionQueue[8]; +static OSResetQueue ResetFunctionQueue; /* 8033F660-8033F6E4 339FA0 0084+00 0/0 5/5 0/0 .text OSRegisterResetFunction */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void OSRegisterResetFunction(OSResetFunctionInfo* info) { - nofralloc -#include "asm/dolphin/os/OSReset/OSRegisterResetFunction.s" +void OSRegisterResetFunction(OSResetFunctionInfo* func) { + OSResetFunctionInfo* tmp; + OSResetFunctionInfo* iter; + + for (iter = ResetFunctionQueue.first; iter && iter->priority <= func->priority; + iter = iter->next) + ; + + if (iter == NULL) { + tmp = ResetFunctionQueue.last; + if (tmp == NULL) { + ResetFunctionQueue.first = func; + } else { + tmp->next = func; + } + func->prev = tmp; + func->next = NULL; + ResetFunctionQueue.last = func; + return; + } + + func->next = iter; + tmp = iter->prev; + iter->prev = func; + func->prev = tmp; + if (tmp == NULL) { + ResetFunctionQueue.first = func; + return; + } + tmp->next = func; } -#pragma pop /* 8033F6E4-8033F78C 33A024 00A8+00 1/1 0/0 0/0 .text __OSCallResetFunctions */ +#ifdef NONMATCHING +BOOL __OSCallResetFunctions(u32 arg0) { + OSResetFunctionInfo* iter; + s32 retCode = 0; + + for (iter = ResetFunctionQueue.first; iter != NULL; iter = iter->next) { + retCode |= !iter->func(arg0); + } + retCode |= !__OSSyncSram(); + if (retCode) { + return 0; + } + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm BOOL __OSCallResetFunctions(s32 param_0) { +asm BOOL __OSCallResetFunctions(u32 param_0) { nofralloc #include "asm/dolphin/os/OSReset/__OSCallResetFunctions.s" } #pragma pop +#endif /* 8033F78C-8033F7FC 33A0CC 0070+00 2/2 0/0 0/0 .text Reset */ static asm void Reset(register s32 param_0) { @@ -120,31 +150,77 @@ static asm void KillThreads(void) { #pragma pop /* 8033F864-8033F8AC 33A1A4 0048+00 0/0 3/3 0/0 .text __OSDoHotReset */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __OSDoHotReset(s32 param_0) { - nofralloc -#include "asm/dolphin/os/OSReset/__OSDoHotReset.s" +void __OSDoHotReset(s32 arg0) { + OSDisableInterrupts(); + __VIRegs[1] = 0; + ICFlashInvalidate(); + Reset(arg0 * 8); } -#pragma pop /* ############################################################################################## */ /* 803D07E8-803D0838 02D908 004E+02 1/1 0/0 0/0 .data @153 */ -SECTION_DATA static char lit_153[] = "OSResetSystem(): You can't specify TRUE to forceMenu if you restart. Ignored\n"; +SECTION_DATA static char lit_153[] = + "OSResetSystem(): You can't specify TRUE to forceMenu if you restart. Ignored\n"; /* 80451698-804516A0 000B98 0004+04 1/1 0/0 0/0 .sbss bootThisDol */ static u8 bootThisDol[4 + 4 /* padding */]; /* 8033F8AC-8033FAAC 33A1EC 0200+00 0/0 5/5 0/0 .text OSResetSystem */ +#ifdef NONMATCHING +void OSResetSystem(int reset, u32 resetCode, BOOL forceMenu) { + BOOL rc; + BOOL disableRecalibration; + u32 unk[3]; + OSDisableScheduler(); + __OSStopAudioSystem(); + + if (reset == OS_RESET_SHUTDOWN) { + disableRecalibration = __PADDisableRecalibration(TRUE); + } + + while (!__OSCallResetFunctions(FALSE)) + ; + + if (reset == OS_RESET_HOTRESET && forceMenu) { + OSSram* sram; + + sram = __OSLockSram(); + sram->flags |= 0x40; + __OSUnlockSram(TRUE); + + while (!__OSSyncSram()) + ; + } + OSDisableInterrupts(); + __OSCallResetFunctions(TRUE); + LCDisable(); + if (reset == OS_RESET_HOTRESET) { + __OSDoHotReset(resetCode); + } else if (reset == OS_RESET_RESTART) { + KillThreads(); + OSEnableScheduler(); + __OSReboot(resetCode, forceMenu); + } + KillThreads(); + memset(OSPhysicalToCached(0x40), 0, 0xcc - 0x40); + memset(OSPhysicalToCached(0xd4), 0, 0xe8 - 0xd4); + memset(OSPhysicalToCached(0xf4), 0, 0xf8 - 0xf4); + memset(OSPhysicalToCached(0x3000), 0, 0xc0); + memset(OSPhysicalToCached(0x30c8), 0, 0xd4 - 0xc8); + memset(OSPhysicalToCached(0x30e2), 0, 1); + + __PADDisableRecalibration(disableRecalibration); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void OSResetSystem(s32 reset, u32 resetCode, BOOL forceMenu) { +asm void OSResetSystem(int reset, u32 resetCode, BOOL forceMenu) { nofralloc #include "asm/dolphin/os/OSReset/OSResetSystem.s" } #pragma pop +#endif /* 8033FAAC-8033FAE4 33A3EC 0038+00 0/0 3/3 0/0 .text OSGetResetCode */ #pragma push diff --git a/libs/dolphin/os/OSResetSW.c b/libs/dolphin/os/OSResetSW.c index d6c7707ae6..7b65a5e594 100644 --- a/libs/dolphin/os/OSResetSW.c +++ b/libs/dolphin/os/OSResetSW.c @@ -5,18 +5,19 @@ #include "dolphin/os/OSResetSW.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/os/OS.h" + +u8 GameChoice : (OS_BASE_CACHED | 0x30E3); + +vu32 __PIRegs[12] : 0xCC003000; + +void __OSResetSWInterruptHandler(OSInterrupt interrupt, OSContext* context); // // External References: // -void OSDisableInterrupts(); -void OSRestoreInterrupts(); -void __OSMaskInterrupts(); -void __OSGetSystemTime(); void __div2i(); -extern u8 __OSStartTime[4]; // // Declarations: @@ -24,35 +25,51 @@ extern u8 __OSStartTime[4]; /* ############################################################################################## */ /* 804516A0-804516A4 000BA0 0004+00 1/1 0/0 0/0 .sbss ResetCallback */ -static u8 ResetCallback[4]; +static OSResetCallback ResetCallback; /* 804516A4-804516A8 000BA4 0004+00 2/2 0/0 0/0 .sbss Down */ -static u8 Down[4]; +static BOOL Down; /* 804516A8-804516B0 000BA8 0004+04 2/2 0/0 0/0 .sbss LastState */ -static u8 LastState[4 + 4 /* padding */]; +static BOOL LastState; /* 804516B0-804516B4 000BB0 0004+00 1/1 0/0 0/0 .sbss HoldUp */ -static u8 HoldUp[4]; - -/* 804516B4-804516B8 000BB4 0004+00 1/1 0/0 0/0 .sbss None */ -static u8 data_804516B4[4]; +static OSTime HoldUp; /* 804516B8-804516BC 000BB8 0004+00 2/2 0/0 0/0 .sbss HoldDown */ -static u8 HoldDown[4]; - -/* 804516BC-804516C0 000BBC 0004+00 2/2 0/0 0/0 .sbss None */ -static u8 data_804516BC[4]; +static OSTime HoldDown; /* 8033FAE4-8033FBD8 33A424 00F4+00 0/0 1/1 0/0 .text __OSResetSWInterruptHandler */ +#ifdef NONMATCHING +void __OSResetSWInterruptHandler(OSInterrupt interrupt, OSContext* context) { + OSResetCallback callback; + + HoldDown = __OSGetSystemTime(); + while (__OSGetSystemTime() - HoldDown < OSMicrosecondsToTicks(100) && + !(__PIRegs[0] & 0x00010000)) { + ; + } + if (!(__PIRegs[0] & 0x00010000)) { + LastState = Down = TRUE; + __OSMaskInterrupts(OS_INTERRUPTMASK_PI_RSW); + if (ResetCallback) { + callback = ResetCallback; + ResetCallback = NULL; + callback(); + } + } + __PIRegs[0] = 2; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __OSResetSWInterruptHandler(void) { +asm void __OSResetSWInterruptHandler(OSInterrupt interrupt, OSContext* context) { nofralloc #include "asm/dolphin/os/OSResetSW/__OSResetSWInterruptHandler.s" } #pragma pop +#endif /* 8033FBD8-8033FE70 33A518 0298+00 1/1 0/0 0/0 .text OSGetResetButtonState */ #pragma push @@ -65,11 +82,6 @@ static asm BOOL OSGetResetButtonState(void) { #pragma pop /* 8033FE70-8033FE90 33A7B0 0020+00 0/0 1/1 0/0 .text OSGetResetSwitchState */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm BOOL OSGetResetSwitchState(void) { - nofralloc -#include "asm/dolphin/os/OSResetSW/OSGetResetSwitchState.s" +BOOL OSGetResetSwitchState(void) { + return OSGetResetButtonState(); } -#pragma pop diff --git a/libs/dolphin/os/OSRtc.c b/libs/dolphin/os/OSRtc.c index 9b84faf09a..9e10d56335 100644 --- a/libs/dolphin/os/OSRtc.c +++ b/libs/dolphin/os/OSRtc.c @@ -5,23 +5,12 @@ #include "dolphin/os/OSRtc.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/exi/EXIBios.h" +#include "dolphin/os/OS.h" -// -// External References: -// - -void DCInvalidateRange(); -void OSDisableInterrupts(); -void OSRestoreInterrupts(); -void EXIImm(); -void EXIImmEx(); -void EXIDma(); -void EXISync(); -void EXISelect(); -void EXIDeselect(); -void EXILock(); -void EXIUnlock(); +static void WriteSramCallback(s32 chan, OSContext* context); +static BOOL WriteSram(void* buffer, u32 offset, u32 size); +static BOOL UnlockSram(BOOL commit, u32 offset); // // Declarations: @@ -29,29 +18,101 @@ void EXIUnlock(); /* ############################################################################################## */ /* 8044BB20-8044BB78 078840 0054+04 14/14 0/0 0/0 .bss Scb */ -static u8 Scb[84 + 4 /* padding */]; +static SramControlBlock Scb ALIGN_DECL(32); /* 8033FE90-8033FEF0 33A7D0 0060+00 2/2 0/0 0/0 .text WriteSramCallback */ +// needs compiler epilogue patch +#ifdef NONMATCHING +static void WriteSramCallback(s32 chan, OSContext* context) { + Scb.sync = WriteSram(Scb.sram + Scb.offset, Scb.offset, RTC_SRAM_SIZE - Scb.offset); + if (Scb.sync) { + Scb.offset = RTC_SRAM_SIZE; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void WriteSramCallback(void) { +static asm void WriteSramCallback(s32 chan, OSContext* context) { nofralloc #include "asm/dolphin/os/OSRtc/WriteSramCallback.s" } #pragma pop +#endif + +static inline BOOL ReadSram(void* buffer) { + BOOL err; + u32 cmd; + + DCInvalidateRange(buffer, RTC_SRAM_SIZE); + + if (!EXILock(RTC_CHAN, RTC_DEV, 0)) { + return FALSE; + } + if (!EXISelect(RTC_CHAN, RTC_DEV, RTC_FREQ)) { + EXIUnlock(RTC_CHAN); + return FALSE; + } + + cmd = RTC_CMD_READ | RTC_SRAM_ADDR; + err = FALSE; + err |= !EXIImm(RTC_CHAN, &cmd, 4, 1, NULL); + err |= !EXISync(RTC_CHAN); + err |= !EXIDma(RTC_CHAN, buffer, RTC_SRAM_SIZE, 0, NULL); + err |= !EXISync(RTC_CHAN); + err |= !EXIDeselect(RTC_CHAN); + EXIUnlock(RTC_CHAN); + + return !err; +} /* 8033FEF0-80340008 33A830 0118+00 1/1 0/0 0/0 .text WriteSram */ +// needs compiler epilogue patch +#ifdef NONMATCHING +BOOL WriteSram(void* buffer, u32 offset, u32 size) { + BOOL err; + u32 cmd; + + if (!EXILock(RTC_CHAN, RTC_DEV, WriteSramCallback)) { + return FALSE; + } + if (!EXISelect(RTC_CHAN, RTC_DEV, RTC_FREQ)) { + EXIUnlock(RTC_CHAN); + return FALSE; + } + + offset <<= 6; + cmd = RTC_CMD_WRITE | RTC_SRAM_ADDR + offset; + err = FALSE; + err |= !EXIImm(RTC_CHAN, &cmd, 4, 1, NULL); + err |= !EXISync(RTC_CHAN); + err |= !EXIImmEx(RTC_CHAN, buffer, (s32)size, 1); + err |= !EXIDeselect(RTC_CHAN); + EXIUnlock(RTC_CHAN); + + return !err; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm u8 WriteSram(u8* param_0, u32 param_1, u32 param_2) { +static asm BOOL WriteSram(void* buffer, u32 offset, u32 size) { nofralloc #include "asm/dolphin/os/OSRtc/WriteSram.s" } #pragma pop +#endif /* 80340008-80340144 33A948 013C+00 0/0 1/1 0/0 .text __OSInitSram */ +// needs compiler epilogue patch +#ifdef NONMATCHING +void __OSInitSram(void) { + Scb.locked = Scb.enabled = FALSE; + Scb.sync = ReadSram(Scb.sram); + Scb.offset = RTC_SRAM_SIZE; + OSSetGbsMode(OSGetGbsMode()); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -60,12 +121,13 @@ asm void __OSInitSram(void) { #include "asm/dolphin/os/OSRtc/__OSInitSram.s" } #pragma pop +#endif /* 80340144-803401A0 33AA84 005C+00 0/0 3/3 0/0 .text __OSLockSram */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm u16* __OSLockSram(void) { +asm OSSram* __OSLockSram(void) { nofralloc #include "asm/dolphin/os/OSRtc/__OSLockSram.s" } @@ -75,7 +137,7 @@ asm u16* __OSLockSram(void) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm u16* __OSLockSramEx(void) { +asm OSSramEx* __OSLockSramEx(void) { nofralloc #include "asm/dolphin/os/OSRtc/__OSLockSramEx.s" } @@ -85,7 +147,7 @@ asm u16* __OSLockSramEx(void) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm u32 UnlockSram(s32 param_0, u32 param_1) { +static asm BOOL UnlockSram(BOOL commit, u32 offset) { nofralloc #include "asm/dolphin/os/OSRtc/UnlockSram.s" } @@ -95,7 +157,7 @@ static asm u32 UnlockSram(s32 param_0, u32 param_1) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm u32 __OSUnlockSram(s32 param_0) { +asm BOOL __OSUnlockSram(BOOL commit) { nofralloc #include "asm/dolphin/os/OSRtc/__OSUnlockSram.s" } @@ -105,21 +167,16 @@ asm u32 __OSUnlockSram(s32 param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm u32 __OSUnlockSramEx(s32 param_0) { +asm BOOL __OSUnlockSramEx(BOOL commit) { nofralloc #include "asm/dolphin/os/OSRtc/__OSUnlockSramEx.s" } #pragma pop /* 80340580-80340590 33AEC0 0010+00 0/0 2/2 0/0 .text __OSSyncSram */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm u32 __OSSyncSram(void) { - nofralloc -#include "asm/dolphin/os/OSRtc/__OSSyncSram.s" +BOOL __OSSyncSram(void) { + return Scb.sync; } -#pragma pop /* 80340590-80340610 33AED0 0080+00 0/0 4/4 0/0 .text OSGetSoundMode */ #pragma push @@ -165,21 +222,36 @@ asm void OSSetProgressiveMode(u32 mode) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm u16 OSGetWirelessID(s32 index) { +asm u16 OSGetWirelessID(s32 channel) { nofralloc #include "asm/dolphin/os/OSRtc/OSGetWirelessID.s" } #pragma pop /* 8034084C-803408F8 33B18C 00AC+00 0/0 4/4 0/0 .text OSSetWirelessID */ +#ifdef NONMATCHING +void OSSetWirelessID(s32 channel, u16 id) { + OSSramEx* sram; + + sram = __OSLockSramEx(); + if (sram->wirelessPadID[channel] != id) { + sram->wirelessPadID[channel] = id; + __OSUnlockSramEx(TRUE); + return; + } + + __OSUnlockSramEx(FALSE); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void OSSetWirelessID(s32 index, u16 id) { +asm void OSSetWirelessID(s32 channel, u16 id) { nofralloc #include "asm/dolphin/os/OSRtc/OSSetWirelessID.s" } #pragma pop +#endif /* 803408F8-80340968 33B238 0070+00 1/1 0/0 0/0 .text OSGetGbsMode */ #pragma push diff --git a/libs/dolphin/os/OSSync.c b/libs/dolphin/os/OSSync.c index 2a38584f78..55fa3765f7 100644 --- a/libs/dolphin/os/OSSync.c +++ b/libs/dolphin/os/OSSync.c @@ -1,48 +1,35 @@ -// -// Generated By: dol2asm -// Translation Unit: OSSync -// - #include "dolphin/os/OSSync.h" -#include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/base/PPCArch.h" +#include "dolphin/os/OS.h" -// -// External References: -// - -SECTION_INIT void memcpy(); -void DCFlushRangeNoSync(); -void ICInvalidateRange(); - -// -// Declarations: -// +void __OSSystemCallVectorStart(); +void __OSSystemCallVectorEnd(); /* 80340A20-80340A3C 33B360 001C+00 1/1 0/0 0/0 .text SystemCallVector */ static asm void SystemCallVector(void) { // clang-format off nofralloc - mfspr r9, 0x3F0 +entry __OSSystemCallVectorStart + mfspr r9, HID0 ori r10, r9, 8 - mtspr 0x3F0, r10 + mtspr HID0, r10 isync sync - mtspr 0x3F0, r9 + mtspr HID0, r9 rfi - entry __OSSystemCallVectorEnd +entry __OSSystemCallVectorEnd nop // clang-format on } /* 80340A40-80340AA4 33B380 0064+00 0/0 1/1 0/0 .text __OSInitSystemCall */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __OSInitSystemCall(void) { - nofralloc -#include "asm/dolphin/os/OSSync/__OSInitSystemCall.s" +void __OSInitSystemCall(void) { + void* addr = OSPhysicalToCached(0x00C00); + memcpy(addr, __OSSystemCallVectorStart, + (size_t)__OSSystemCallVectorEnd - (size_t)__OSSystemCallVectorStart); + DCFlushRangeNoSync(addr, 0x100); + __sync(); + ICInvalidateRange(addr, 0x100); } -#pragma pop diff --git a/libs/dolphin/os/OSThread.c b/libs/dolphin/os/OSThread.c index 8553c04032..3519272ce2 100644 --- a/libs/dolphin/os/OSThread.c +++ b/libs/dolphin/os/OSThread.c @@ -5,19 +5,80 @@ #include "dolphin/os/OSThread.h" #include "dol2asm.h" +#include "dolphin/os/OS.h" #include "dolphin/os/OSMutex.h" -#include "dolphin/types.h" + +OSThread* __OSCurrentThread : OS_BASE_CACHED + 0x00E4; +OSThreadQueue __OSActiveThreadQueue : OS_BASE_CACHED + 0x00DC; +volatile OSContext __OSCurrentContext : OS_BASE_CACHED + 0x00D4; +volatile OSContext* __OSFPUContext : OS_BASE_CACHED + 0x00D8; + +#define AddTail(queue, thread, link) \ + do { \ + OSThread* prev; \ + \ + prev = (queue)->tail; \ + if (prev == NULL) \ + (queue)->head = (thread); \ + else \ + prev->link.next = (thread); \ + (thread)->link.prev = prev; \ + (thread)->link.next = NULL; \ + (queue)->tail = (thread); \ + } while (0) + +#define AddPrio(queue, thread, link) \ + do { \ + OSThread *prev, *next; \ + \ + for (next = (queue)->head; next && next->effective_priority <= thread->effective_priority; \ + next = next->link.next) \ + ; \ + if (next == NULL) \ + AddTail(queue, thread, link); \ + else { \ + (thread)->link.next = next; \ + prev = next->link.prev; \ + next->link.prev = (thread); \ + (thread)->link.prev = prev; \ + if (prev == NULL) \ + (queue)->head = (thread); \ + else \ + prev->link.next = (thread); \ + } \ + } while (0) + +#define RemoveItem(queue, thread, link) \ + do { \ + OSThread *next, *prev; \ + next = (thread)->link.next; \ + prev = (thread)->link.prev; \ + if (next == NULL) \ + (queue)->tail = prev; \ + else \ + next->link.prev = prev; \ + if (prev == NULL) \ + (queue)->head = next; \ + else \ + prev->link.next = next; \ + } while (0) + +#define RemoveHead(queue, thread, link) \ + do { \ + OSThread* __next; \ + (thread) = (queue)->head; \ + __next = (thread)->link.next; \ + if (__next == NULL) \ + (queue)->tail = NULL; \ + else \ + __next->link.prev = NULL; \ + (queue)->head = __next; \ + } while (0) // // External References: // -void OSReport(); -void OSPanic(); -void OSGetStackPointer(); -void OSDisableInterrupts(); -void OSEnableInterrupts(); -void OSRestoreInterrupts(); extern u8 __OSErrorTable[68 + 12 /* padding */]; extern u32 __OSFpscrEnableBits; void _epilog(); @@ -72,12 +133,57 @@ static u32 RunQueueBits; static BOOL RunQueueHint; /* 804516C8-804516D0 000BC8 0004+04 4/4 0/0 0/0 .sbss Reschedule */ -static u8 Reschedule[4 + 4 /* padding */]; - -/* 80340B1C-80340C74 33B45C 0158+00 0/0 1/1 0/0 .text __OSThreadInit */ +static volatile s32 Reschedule; extern void* _stack_end; +static inline void OSInitMutexQueue(OSMutexQueue* queue) { + queue->head = queue->tail = NULL; +} + +static inline void OSSetCurrentThread(OSThread* thread) { + SwitchThreadCallback(__OSCurrentThread, thread); + __OSCurrentThread = thread; +} + +/* 80340B1C-80340C74 33B45C 0158+00 0/0 1/1 0/0 .text __OSThreadInit */ +#ifdef NONMATCHING +void __OSThreadInit() { + OSThread* thread = &DefaultThread; + int prio; + + thread->state = OS_THREAD_STATE_RUNNING; + thread->attributes = OS_THREAD_ATTR_DETACH; + thread->effective_priority = thread->base_priority = 16; + thread->suspend_count = 0; + thread->exit_value = (void*)-1; + thread->mutex = NULL; + OSInitThreadQueue(&thread->join_queue); + OSInitMutexQueue(&thread->owned_mutexes); + + __OSFPUContext = &thread->context; + + OSClearContext(&thread->context); + OSSetCurrentContext(&thread->context); + /* thread->stack_base = (void*)_stack_addr; + thread->stack_end = (void*)_stack_end; */ + *(thread->stack_end) = OS_THREAD_STACK_MAGIC; + + OSSetCurrentThread(thread); + OSClearStack(0); + + RunQueueBits = 0; + RunQueueHint = FALSE; + for (prio = OS_PRIORITY_MIN; prio <= OS_PRIORITY_MAX; ++prio) { + OSInitThreadQueue(&RunQueue[prio]); + } + + OSInitThreadQueue(&__OSActiveThreadQueue); + AddTail(&__OSActiveThreadQueue, thread, active_threads_link); + OSClearContext(&IdleContext); + Reschedule = 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -86,6 +192,7 @@ asm void __OSThreadInit(void) { #include "asm/dolphin/os/OSThread/__OSThreadInit.s" } #pragma pop +#endif /* 80340C74-80340C84 33B5B4 0010+00 1/1 9/9 0/0 .text OSInitThreadQueue */ void OSInitThreadQueue(OSThreadQueue* queue) { @@ -125,26 +232,33 @@ asm s32 OSEnableScheduler(void) { } #pragma pop +static inline void SetRun(OSThread* thread) { + thread->queue = &RunQueue[thread->effective_priority]; + AddTail(thread->queue, thread, link); + RunQueueBits |= 1u << (OS_PRIORITY_MAX - thread->effective_priority); + RunQueueHint = TRUE; +} + /* 80340D44-80340DAC 33B684 0068+00 3/3 0/0 0/0 .text UnsetRun */ static void UnsetRun(OSThread* thread) { OSThreadQueue* queue; OSThread* next; OSThread* prev; - prev = thread->link.prev; + prev = thread->link.next; queue = thread->queue; - next = thread->link.next; + next = thread->link.prev; if (prev == NULL) { queue->tail = next; } else { - prev->link.next = next; + prev->link.prev = next; } if (next == NULL) { queue->head = prev; } else { - next->link.prev = prev; + next->link.next = prev; } if (queue->head == NULL) { @@ -159,7 +273,7 @@ s32 __OSGetEffectivePriority(OSThread* thread) { s32 prio = thread->base_priority; OSMutex* mutex; - for (mutex = thread->owned_mutexes.prev; mutex != NULL; mutex = mutex->link.prev) { + for (mutex = thread->owned_mutexes.head; mutex != NULL; mutex = mutex->link.prev) { OSThread* mutexThread = mutex->queue.head; if (mutexThread != NULL && mutexThread->effective_priority < prio) { prio = mutexThread->effective_priority; @@ -170,14 +284,40 @@ s32 __OSGetEffectivePriority(OSThread* thread) { } /* 80340DE8-80340FA8 33B728 01C0+00 5/5 0/0 0/0 .text SetEffectivePriority */ +// needs compiler epilogue patch +#ifdef NONMATCHING +static OSThread* SetEffectivePriority(OSThread* thread, s32 priority) { + switch (thread->state) { + case OS_THREAD_STATE_READY: + UnsetRun(thread); + thread->effective_priority = priority; + SetRun(thread); + break; + case OS_THREAD_STATE_WAITING: + RemoveItem(thread->queue, thread, link); + thread->effective_priority = priority; + AddPrio(thread->queue, thread, link); + if (thread->mutex) { + return thread->mutex->thread; + } + break; + case OS_THREAD_STATE_RUNNING: + RunQueueHint = TRUE; + thread->effective_priority = priority; + break; + } + return NULL; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void SetEffectivePriority(OSThread* thread, s32 priority) { +static asm OSThread* SetEffectivePriority(OSThread* thread, s32 priority) { nofralloc #include "asm/dolphin/os/OSThread/SetEffectivePriority.s" } #pragma pop +#endif /* 80340FA8-80340FF8 33B8E8 0050+00 0/0 1/1 0/0 .text __OSPromoteThread */ #pragma push @@ -189,35 +329,107 @@ asm void __OSPromoteThread(OSThread* thread, s32 priority) { } #pragma pop +static inline void __OSSwitchThread(OSThread* nextThread) { + OSSetCurrentThread(nextThread); + OSSetCurrentContext(&nextThread->context); + OSLoadContext(&nextThread->context); +} + /* 80340FF8-80341220 33B938 0228+00 9/9 0/0 0/0 .text SelectThread */ +#ifdef NONMATCHING +inline OSThread* i_OSGetCurrentThread(void) { + return OS_CURRENT_THREAD; +} + +static OSThread* SelectThread(BOOL yield) { + OSContext* currentContext; + OSThread* currentThread; + OSThread* nextThread; + OSPriority priority; + OSThreadQueue* queue; + + if (0 < Reschedule) { + return 0; + } + + currentContext = OSGetCurrentContext(); + currentThread = i_OSGetCurrentThread(); + if (currentContext != ¤tThread->context) { + return 0; + } + + if (currentThread) { + if (currentThread->state == OS_THREAD_STATE_RUNNING) { + if (!yield) { + priority = __cntlzw(RunQueueBits); + if (currentThread->effective_priority <= priority) { + return 0; + } + } + currentThread->state = OS_THREAD_STATE_READY; + SetRun(currentThread); + } + + if (!(currentThread->context.state & OS_CONTEXT_STATE_EXC) && + OSSaveContext(¤tThread->context)) { + return 0; + } + } + + OSSetCurrentThread(NULL); + if (RunQueueBits == 0) { + OSSetCurrentContext(&IdleContext); + do { + OSEnableInterrupts(); + while (RunQueueBits == 0) + ; + OSDisableInterrupts(); + } while (RunQueueBits == 0); + + OSClearContext(&IdleContext); + } + + RunQueueHint = FALSE; + + priority = __cntlzw(RunQueueBits); + queue = &RunQueue[priority]; + RemoveHead(queue, nextThread, link); + if (queue->head == 0) { + RunQueueBits &= ~(1u << (OS_PRIORITY_MAX - priority)); + } + nextThread->queue = NULL; + nextThread->state = OS_THREAD_STATE_RUNNING; + __OSSwitchThread(nextThread); + return nextThread; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void SelectThread(OSThread* thread) { +static asm OSThread* SelectThread(BOOL yield) { nofralloc #include "asm/dolphin/os/OSThread/SelectThread.s" } #pragma pop +#endif /* 80341220-80341250 33BB60 0030+00 0/0 3/3 0/0 .text __OSReschedule */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __OSReschedule(void) { - nofralloc -#include "asm/dolphin/os/OSThread/__OSReschedule.s" +void __OSReschedule(void) { + if (!RunQueueHint) { + return; + } + + SelectThread(FALSE); } -#pragma pop /* 80341250-8034128C 33BB90 003C+00 0/0 2/2 0/0 .text OSYieldThread */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void OSYieldThread(void) { - nofralloc -#include "asm/dolphin/os/OSThread/OSYieldThread.s" +void OSYieldThread(void) { + BOOL enabled; + + enabled = OSDisableInterrupts(); + SelectThread(TRUE); + OSRestoreInterrupts(enabled); } -#pragma pop /* 8034128C-80341474 33BBCC 01E8+00 0/0 5/5 3/3 .text OSCreateThread */ #pragma push @@ -327,7 +539,8 @@ static asm s32 CheckThreadQueue(OSThread* thread) { /* ############################################################################################## */ /* 803D0838-803D0898 02D958 005F+01 1/1 0/0 0/0 .data @831 */ -SECTION_DATA static char lit_831[] = "OSCheckActiveThreads: Failed RunQueue[prio].head != NULL && RunQueue[prio].tail != NULL in %d\n"; +SECTION_DATA static char lit_831[] = "OSCheckActiveThreads: Failed RunQueue[prio].head != NULL && " + "RunQueue[prio].tail != NULL in %d\n"; /* 803D0898-803D08A4 02D9B8 000B+01 0/1 0/0 0/0 .data @832 */ #pragma push @@ -338,49 +551,62 @@ SECTION_DATA static char lit_832[] = "OSThread.c"; /* 803D08A4-803D0904 02D9C4 005F+01 0/1 0/0 0/0 .data @834 */ #pragma push #pragma force_active on -SECTION_DATA static char lit_834[] = "OSCheckActiveThreads: Failed RunQueue[prio].head == NULL && RunQueue[prio].tail == NULL in %d\n"; +SECTION_DATA static char lit_834[] = "OSCheckActiveThreads: Failed RunQueue[prio].head == NULL && " + "RunQueue[prio].tail == NULL in %d\n"; #pragma pop /* 803D0904-803D094C 02DA24 0046+02 0/1 0/0 0/0 .data @835 */ #pragma push #pragma force_active on -SECTION_DATA static char lit_835[] = "OSCheckActiveThreads: Failed CheckThreadQueue(&RunQueue[prio]) in %d\n"; +SECTION_DATA static char lit_835[] = + "OSCheckActiveThreads: Failed CheckThreadQueue(&RunQueue[prio]) in %d\n"; #pragma pop /* 803D094C-803D09CC 02DA6C 007E+02 0/1 0/0 0/0 .data @836 */ #pragma push #pragma force_active on -SECTION_DATA static char lit_836[] = "OSCheckActiveThreads: Failed __OSActiveThreadQueue.head == NULL || __OSActiveThreadQueue.head->linkActive.prev == NULL in %d\n"; +SECTION_DATA static char lit_836[] = + "OSCheckActiveThreads: Failed __OSActiveThreadQueue.head == NULL || " + "__OSActiveThreadQueue.head->linkActive.prev == NULL in %d\n"; #pragma pop /* 803D09CC-803D0A4C 02DAEC 007E+02 0/1 0/0 0/0 .data @837 */ #pragma push #pragma force_active on -SECTION_DATA static char lit_837[] = "OSCheckActiveThreads: Failed __OSActiveThreadQueue.tail == NULL || __OSActiveThreadQueue.tail->linkActive.next == NULL in %d\n"; +SECTION_DATA static char lit_837[] = + "OSCheckActiveThreads: Failed __OSActiveThreadQueue.tail == NULL || " + "__OSActiveThreadQueue.tail->linkActive.next == NULL in %d\n"; #pragma pop /* 803D0A4C-803D0AC8 02DB6C 007A+02 0/1 0/0 0/0 .data @838 */ #pragma push #pragma force_active on -SECTION_DATA static char lit_838[] = "OSCheckActiveThreads: Failed thread->linkActive.next == NULL || thread == thread->linkActive.next->linkActive.prev in %d\n"; +SECTION_DATA static char lit_838[] = + "OSCheckActiveThreads: Failed thread->linkActive.next == NULL || thread == " + "thread->linkActive.next->linkActive.prev in %d\n"; #pragma pop /* 803D0AC8-803D0B44 02DBE8 007A+02 0/1 0/0 0/0 .data @839 */ #pragma push #pragma force_active on -SECTION_DATA static char lit_839[] = "OSCheckActiveThreads: Failed thread->linkActive.prev == NULL || thread == thread->linkActive.prev->linkActive.next in %d\n"; +SECTION_DATA static char lit_839[] = + "OSCheckActiveThreads: Failed thread->linkActive.prev == NULL || thread == " + "thread->linkActive.prev->linkActive.next in %d\n"; #pragma pop /* 803D0B44-803D0B98 02DC64 0051+03 0/1 0/0 0/0 .data @840 */ #pragma push #pragma force_active on -SECTION_DATA static char lit_840[] = "OSCheckActiveThreads: Failed *(thread->stackEnd) == OS_THREAD_STACK_MAGIC in %d\n"; +SECTION_DATA static char lit_840[] = + "OSCheckActiveThreads: Failed *(thread->stackEnd) == OS_THREAD_STACK_MAGIC in %d\n"; #pragma pop /* 803D0B98-803D0C0C 02DCB8 0071+03 0/1 0/0 0/0 .data @841 */ #pragma push #pragma force_active on -SECTION_DATA static char lit_841[] = "OSCheckActiveThreads: Failed OS_PRIORITY_MIN <= thread->priority && thread->priority <= OS_PRIORITY_MAX+1 in %d\n"; +SECTION_DATA static char lit_841[] = + "OSCheckActiveThreads: Failed OS_PRIORITY_MIN <= thread->priority && thread->priority <= " + "OS_PRIORITY_MAX+1 in %d\n"; #pragma pop /* 803D0C0C-803D0C48 02DD2C 0039+03 0/1 0/0 0/0 .data @842 */ @@ -392,31 +618,36 @@ SECTION_DATA static char lit_842[] = "OSCheckActiveThreads: Failed 0 <= thread-> /* 803D0C48-803D0C94 02DD68 0049+03 0/1 0/0 0/0 .data @843 */ #pragma push #pragma force_active on -SECTION_DATA static char lit_843[] = "OSCheckActiveThreads: Failed CheckThreadQueue(&thread->queueJoin) in %d\n"; +SECTION_DATA static char lit_843[] = + "OSCheckActiveThreads: Failed CheckThreadQueue(&thread->queueJoin) in %d\n"; #pragma pop /* 803D0C94-803D0CE8 02DDB4 0051+03 0/1 0/0 0/0 .data @844 */ #pragma push #pragma force_active on -SECTION_DATA static char lit_844[] = "OSCheckActiveThreads: Failed thread->queue == &RunQueue[thread->priority] in %d\n"; +SECTION_DATA static char lit_844[] = + "OSCheckActiveThreads: Failed thread->queue == &RunQueue[thread->priority] in %d\n"; #pragma pop /* 803D0CE8-803D0D3C 02DE08 0052+02 0/1 0/0 0/0 .data @845 */ #pragma push #pragma force_active on -SECTION_DATA static char lit_845[] = "OSCheckActiveThreads: Failed IsMember(&RunQueue[thread->priority], thread) in %d\n"; +SECTION_DATA static char lit_845[] = + "OSCheckActiveThreads: Failed IsMember(&RunQueue[thread->priority], thread) in %d\n"; #pragma pop /* 803D0D3C-803D0D98 02DE5C 0059+03 0/1 0/0 0/0 .data @846 */ #pragma push #pragma force_active on -SECTION_DATA static char lit_846[] = "OSCheckActiveThreads: Failed thread->priority == __OSGetEffectivePriority(thread) in %d\n"; +SECTION_DATA static char lit_846[] = + "OSCheckActiveThreads: Failed thread->priority == __OSGetEffectivePriority(thread) in %d\n"; #pragma pop /* 803D0D98-803D0DDC 02DEB8 0042+02 0/1 0/0 0/0 .data @847 */ #pragma push #pragma force_active on -SECTION_DATA static char lit_847[] = "OSCheckActiveThreads: Failed !IsSuspended(thread->suspend) in %d\n"; +SECTION_DATA static char lit_847[] = + "OSCheckActiveThreads: Failed !IsSuspended(thread->suspend) in %d\n"; #pragma pop /* 803D0DDC-803D0E18 02DEFC 003A+02 0/1 0/0 0/0 .data @848 */ @@ -434,13 +665,15 @@ SECTION_DATA static char lit_849[] = "OSCheckActiveThreads: Failed thread->queue /* 803D0E54-803D0E98 02DF74 0044+00 0/1 0/0 0/0 .data @850 */ #pragma push #pragma force_active on -SECTION_DATA static char lit_850[] = "OSCheckActiveThreads: Failed CheckThreadQueue(thread->queue) in %d\n"; +SECTION_DATA static char lit_850[] = + "OSCheckActiveThreads: Failed CheckThreadQueue(thread->queue) in %d\n"; #pragma pop /* 803D0E98-803D0EDC 02DFB8 0044+00 0/1 0/0 0/0 .data @851 */ #pragma push #pragma force_active on -SECTION_DATA static char lit_851[] = "OSCheckActiveThreads: Failed IsMember(thread->queue, thread) in %d\n"; +SECTION_DATA static char lit_851[] = + "OSCheckActiveThreads: Failed IsMember(thread->queue, thread) in %d\n"; #pragma pop /* 803D0EDC-803D0F18 02DFFC 003B+01 0/1 0/0 0/0 .data @852 */ @@ -452,25 +685,29 @@ SECTION_DATA static char lit_852[] = "OSCheckActiveThreads: Failed thread->prior /* 803D0F18-803D0F58 02E038 003F+01 0/1 0/0 0/0 .data @853 */ #pragma push #pragma force_active on -SECTION_DATA static char lit_853[] = "OSCheckActiveThreads: Failed !__OSCheckDeadLock(thread) in %d\n"; +SECTION_DATA static char lit_853[] = + "OSCheckActiveThreads: Failed !__OSCheckDeadLock(thread) in %d\n"; #pragma pop /* 803D0F58-803D0FC0 02E078 0067+01 0/1 0/0 0/0 .data @854 */ #pragma push #pragma force_active on -SECTION_DATA static char lit_854[] = "OSCheckActiveThreads: Failed thread->queueMutex.head == NULL && thread->queueMutex.tail == NULL in %d\n"; +SECTION_DATA static char lit_854[] = "OSCheckActiveThreads: Failed thread->queueMutex.head == NULL " + "&& thread->queueMutex.tail == NULL in %d\n"; #pragma pop /* 803D0FC0-803D1008 02E0E0 0045+03 0/1 0/0 0/0 .data @855 */ #pragma push #pragma force_active on -SECTION_DATA static char lit_855[] = "OSCheckActiveThreads: Failed. unkown thread state (%d) of thread %p\n"; +SECTION_DATA static char lit_855[] = + "OSCheckActiveThreads: Failed. unkown thread state (%d) of thread %p\n"; #pragma pop /* 803D1008-803D1048 02E128 003D+03 0/1 0/0 0/0 .data @856 */ #pragma push #pragma force_active on -SECTION_DATA static char lit_856[] = "OSCheckActiveThreads: Failed __OSCheckMutexes(thread) in %d\n"; +SECTION_DATA static char lit_856[] = + "OSCheckActiveThreads: Failed __OSCheckMutexes(thread) in %d\n"; #pragma pop /* 804509BC-804509C0 00043C 0001+03 1/1 0/0 0/0 .sdata @833 */ @@ -499,4 +736,4 @@ static asm void OSClearStack(u32 value) { /* ############################################################################################## */ /* 804516D0-804516D8 000BD0 0008+00 0/0 2/1 0/0 .sbss None */ extern u8 data_804516D0[8]; -u8 data_804516D0[8]; +u8 data_804516D0[8] ALIGN_DECL(8); diff --git a/libs/dolphin/os/OSTime.c b/libs/dolphin/os/OSTime.c index 0d7b86abe0..3193a01a7f 100644 --- a/libs/dolphin/os/OSTime.c +++ b/libs/dolphin/os/OSTime.c @@ -5,8 +5,13 @@ #include "dolphin/os/OSTime.h" #include "dol2asm.h" +#include "dolphin/os/OS.h" #include "dolphin/os/OSInterrupt.h" +#define OS_TIME_MONTH_MAX 12 +#define OS_TIME_WEEK_DAY_MAX 7 +#define OS_TIME_YEAR_DAY_MAX 365 + // // External References: // @@ -35,7 +40,7 @@ asm OSTime OSGetTime(void) { } /* 80342714-8034271C -00001 0008+00 0/0 0/0 0/0 .text OSGetTick */ -asm OSTick OSGetTick(void){ +asm OSTick OSGetTick(void) { // clang-format off nofralloc @@ -44,15 +49,21 @@ asm OSTick OSGetTick(void){ // clang-format on } +#define OS_SYSTEMTIME_BASE 0x30D8 + /* 8034271C-80342780 33D05C 0064+00 0/0 16/16 0/0 .text __OSGetSystemTime */ -// matches with mwcc 1.2.5e +// needs compiler epilogue patch #ifdef NONMATCHING OSTime __OSGetSystemTime(void) { - s32 pad; - const BOOL intr = OSDisableInterrupts(); - const OSTime time = OSGetTime() + OS_SYSTEM_TIME; - OSRestoreInterrupts(intr); - return time; + BOOL enabled; + OSTime* timeAdjustAddr = (OSTime*)(OS_BASE_CACHED + OS_SYSTEMTIME_BASE); + OSTime result; + + enabled = OSDisableInterrupts(); + result = *timeAdjustAddr + OSGetTime(); + OSRestoreInterrupts(enabled); + + return result; } #else #pragma push @@ -66,6 +77,20 @@ asm OSTime __OSGetSystemTime(void) { #endif /* 80342780-803427D8 33D0C0 0058+00 0/0 1/1 0/0 .text __OSTimeToSystemTime */ +// needs compiler epilogue patch +#ifdef NONMATCHING +OSTime __OSTimeToSystemTime(OSTime time) { + BOOL enabled; + OSTime* timeAdjustAddr = (OSTime*)(OS_BASE_CACHED + OS_SYSTEMTIME_BASE); + OSTime result; + + enabled = OSDisableInterrupts(); + result = *timeAdjustAddr + time; + OSRestoreInterrupts(enabled); + + return result; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -74,6 +99,7 @@ asm OSTime __OSTimeToSystemTime(OSTime time) { #include "asm/dolphin/os/OSTime/__OSTimeToSystemTime.s" } #pragma pop +#endif /* ############################################################################################## */ /* 803D1048-803D1078 02E168 0030+00 1/1 0/0 0/0 .data YearDays */ @@ -88,17 +114,78 @@ static s32 LeapYearDays[] = { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, }; -/* 803427D8-80342974 33D118 019C+00 1/1 0/0 0/0 .text GetDates */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void GetDates(OSTime ticks, OSCalendarTime* ct) { - nofralloc -#include "asm/dolphin/os/OSTime/GetDates.s" +static inline BOOL IsLeapYear(s32 year) { + return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); } -#pragma pop + +static inline s32 GetYearDays(s32 year, s32 mon) { + return (IsLeapYear(year) ? LeapYearDays : YearDays)[mon]; +} + +static inline s32 GetLeapDays(s32 year) { + if (year < 1) { + return 0; + } + return (year + 3) / 4 - (year - 1) / 100 + (year - 1) / 400; +} + +/* 803427D8-80342974 33D118 019C+00 1/1 0/0 0/0 .text GetDates */ +static void GetDates(s32 days, OSCalendarTime* cal) { + s32 year; + s32 totalDays; + s32* p_days; + s32 month; + cal->week_day = (days + 6) % OS_TIME_WEEK_DAY_MAX; + + for (year = days / OS_TIME_YEAR_DAY_MAX; + days < (totalDays = year * OS_TIME_YEAR_DAY_MAX + GetLeapDays(year));) { + year--; + } + + days -= totalDays; + cal->year = year; + cal->year_day = days; + + p_days = IsLeapYear(year) ? LeapYearDays : YearDays; + month = OS_TIME_MONTH_MAX; + while (days < p_days[--month]) { + ; + } + cal->month = month; + cal->day_of_month = days - p_days[month] + 1; +} + +#define BIAS (2000 * 365 + (2000 + 3) / 4 - (2000 - 1) / 100 + (2000 - 1) / 400) /* 80342974-80342B78 33D2B4 0204+00 0/0 4/4 0/0 .text OSTicksToCalendarTime */ +#ifdef NONMATCHING +void OSTicksToCalendarTime(OSTime ticks, OSCalendarTime* td) { + int days; + int secs; + OSTime d; + + d = ticks % OSSecondsToTicks(1); + if (d < 0) { + d += OSSecondsToTicks(1); + } + td->microseconds = (int)(OSTicksToMicroseconds(d) % 1000); + td->milliseconds = (int)(OSTicksToMilliseconds(d) % 1000); + + ticks -= d; + days = (int)(OSTicksToSeconds(ticks) / 86400 + BIAS); + secs = (int)(OSTicksToSeconds(ticks) % 86400); + if (secs < 0) { + days -= 1; + secs += 24 * 60 * 60; + } + + GetDates(days, td); + + td->hours = secs / 60 / 60; + td->minutes = (secs / 60) % 60; + td->seconds = secs % 60; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -107,3 +194,4 @@ asm void OSTicksToCalendarTime(OSTime ticks, OSCalendarTime* ct) { #include "asm/dolphin/os/OSTime/OSTicksToCalendarTime.s" } #pragma pop +#endif diff --git a/libs/dolphin/os/__ppc_eabi_init.c b/libs/dolphin/os/__ppc_eabi_init.c index 8aef493899..ce4cac67fe 100644 --- a/libs/dolphin/os/__ppc_eabi_init.c +++ b/libs/dolphin/os/__ppc_eabi_init.c @@ -5,7 +5,7 @@ #include "dolphin/os/__ppc_eabi_init.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/base/PPCArch.h" // // Forward References: @@ -19,7 +19,6 @@ void _ExitProcess(); // External References: // -void PPCHalt(); SECTION_CTORS10 extern void* const __init_cpp_exceptions_reference; // @@ -27,31 +26,21 @@ SECTION_CTORS10 extern void* const __init_cpp_exceptions_reference; // /* 80342B78-80342B98 33D4B8 0020+00 0/0 1/1 0/0 .text __init_user */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __init_user() { - nofralloc -#include "asm/dolphin/os/__ppc_eabi_init/__init_user.s" +void __init_user(void) { + __init_cpp(); } -#pragma pop /* 80342B98-80342BEC 33D4D8 0054+00 1/1 0/0 0/0 .text __init_cpp */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __init_cpp() { +asm void __init_cpp(void) { nofralloc #include "asm/dolphin/os/__ppc_eabi_init/__init_cpp.s" } #pragma pop /* 80342BEC-80342C0C 33D52C 0020+00 0/0 2/2 0/0 .text _ExitProcess */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void _ExitProcess() { - nofralloc -#include "asm/dolphin/os/__ppc_eabi_init/_ExitProcess.s" +void _ExitProcess(void) { + PPCHalt(); } -#pragma pop diff --git a/libs/dolphin/pad/Makefile b/libs/dolphin/pad/Makefile index 18a8251032..35c76f5386 100644 --- a/libs/dolphin/pad/Makefile +++ b/libs/dolphin/pad/Makefile @@ -11,6 +11,14 @@ LIBPAD_A_O_FILES := \ $(BUILD_DIR)/libs/dolphin/pad/Pad.o \ LIBPAD_A_CFLAGS := \ + -Cpp_exceptions off \ + -proc gekko \ + -fp hard \ + -nodefaults \ + -str reuse \ + -RTTI off \ + -maxerrors 5 \ + -enum int $(INCLUDES) \ -O4,p \ -lang=c \ @@ -29,5 +37,5 @@ $(BUILD_DIR)/libs/dolphin/pad/%.o: libs/dolphin/pad/%.c @mkdir -p $(@D) @echo building... $< @$(ICONV) -f UTF-8 -t CP932 < $< > $(basename $@).c - @$(WINE) tools/mwcc_compiler/1.2.5/mwcceppc.exe $(CFLAGS) $(LIBPAD_A_CFLAGS) -c -o $@ $(basename $@).c + @$(WINE) tools/mwcc_compiler/1.2.5/mwcceppc.exe $(LIBPAD_A_CFLAGS) -c -o $@ $(basename $@).c diff --git a/libs/dolphin/pad/Pad.c b/libs/dolphin/pad/Pad.c index 98e8ca4aac..fce1c3f050 100644 --- a/libs/dolphin/pad/Pad.c +++ b/libs/dolphin/pad/Pad.c @@ -4,155 +4,241 @@ // #include "dolphin/pad/Pad.h" +#include "MSL_C/MSL_Common/Src/string.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/si/SIBios.h" +#include "dolphin/si/SISamplingRate.h" + +u8 UnkVal : (OS_BASE_CACHED | 0x30e3); +u16 __OSWirelessPadFixMode : (OS_BASE_CACHED | 0x30E0); + +/* 80450A20-80450A24 -00001 0004+00 1/1 0/0 0/0 .sdata __PADVersion */ +static char* __PADVersion = "<< Dolphin SDK - PAD\trelease build: Apr 5 2004 04:14:49 (0x2301) >>"; // // Forward References: // -static void UpdateOrigin(); -static void PADOriginCallback(); -static void PADOriginUpdateCallback(); -static void PADProbeCallback(); -static void PADTypeAndStatusCallback(); -static void PADReceiveCheckCallback(); -static void SPEC0_MakeStatus(); -static void SPEC1_MakeStatus(); -static void SPEC2_MakeStatus(); -static void OnReset(); -static void SamplingHandler(); -static void PADSetSamplingCallback(); -void __PADDisableRecalibration(); +static void UpdateOrigin(s32 chan); +static void SPEC0_MakeStatus(s32 chan, PADStatus* status, u32 data[2]); +static void SPEC1_MakeStatus(s32 chan, PADStatus* status, u32 data[2]); +static void SPEC2_MakeStatus(s32 chan, PADStatus* status, u32 data[2]); +static s32 OnReset(s32 final); +static void SamplingHandler(OSInterrupt interrupt, OSContext* context); +static PADSamplingCallback PADSetSamplingCallback(PADSamplingCallback callback); +BOOL __PADDisableRecalibration(BOOL disable); // // External References: // -SECTION_INIT void memset(); -void OSRegisterVersion(); -void OSSetCurrentContext(); -void OSClearContext(); -void OSDisableInterrupts(); -void OSRestoreInterrupts(); -void OSRegisterResetFunction(); -void OSSetWirelessID(); -void OSGetTime(); -void SIBusy(); -void SIIsChanBusy(); -void SIRegisterPollingHandler(); -void SIUnregisterPollingHandler(); -void SIGetStatus(); -void SISetCommand(); -void SITransferCommands(); -void SIEnablePolling(); -void SIDisablePolling(); -void SIGetResponse(); -void SITransfer(); -void SIGetType(); -void SIGetTypeAsync(); -void SIRefreshSamplingRate(); void __shr2i(); -extern u8 __PADFixBits[4 + 4 /* padding */]; +extern u32 __PADFixBits; // // Declarations: // /* ############################################################################################## */ -/* 803D1B48-803D1B90 02EC68 0045+03 1/0 0/0 0/0 .data @1 */ -SECTION_DATA static char lit_1[] = "<< Dolphin SDK - PAD\trelease build: Apr 5 2004 04:14:49 (0x2301) >>"; - /* 8044CB70-8044CB80 079890 0010+00 3/3 0/0 0/0 .bss Type */ -static u8 Type[16]; +static u32 Type[4]; /* 8044CB80-8044CBB0 0798A0 0030+00 8/8 0/0 0/0 .bss Origin */ -static u8 Origin[48]; - -/* 80450A20-80450A24 -00001 0004+00 1/1 0/0 0/0 .sdata __PADVersion */ -SECTION_SDATA static void* __PADVersion = (void*)&lit_1; +static PADStatus Origin[4]; /* 80450A24-80450A28 0004A4 0004+00 7/7 0/0 0/0 .sdata ResettingChan */ -SECTION_SDATA static u32 ResettingChan = 0x00000020; +SECTION_SDATA static s32 ResettingChan = 0x00000020; /* 80450A28-80450A2C 0004A8 0004+00 1/1 0/0 0/0 .sdata XPatchBits */ -SECTION_SDATA static u32 XPatchBits = 0xF0000000; +SECTION_SDATA static u32 XPatchBits = PAD_CHAN0_BIT | PAD_CHAN1_BIT | PAD_CHAN2_BIT | PAD_CHAN3_BIT; /* 80450A2C-80450A30 0004AC 0004+00 7/7 0/0 0/0 .sdata AnalogMode */ SECTION_SDATA static u32 AnalogMode = 0x00000300; /* 8034E2B4-8034E458 348BF4 01A4+00 2/2 0/0 0/0 .text UpdateOrigin */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void UpdateOrigin() { - nofralloc -#include "asm/dolphin/pad/Pad/UpdateOrigin.s" +static void UpdateOrigin(s32 chan) { + PADStatus* origin; + u32 chanBit = (u32)PAD_CHAN0_BIT >> chan; + + origin = &Origin[chan]; + switch (AnalogMode & 0x00000700u) { + case 0x00000000u: + case 0x00000500u: + case 0x00000600u: + case 0x00000700u: + origin->trigger_left &= ~15; + origin->trigger_right &= ~15; + origin->analog_a &= ~15; + origin->analog_b &= ~15; + break; + case 0x00000100u: + origin->substick_x &= ~15; + origin->substick_y &= ~15; + origin->analog_a &= ~15; + origin->analog_b &= ~15; + break; + case 0x00000200u: + origin->substick_x &= ~15; + origin->substick_y &= ~15; + origin->trigger_left &= ~15; + origin->trigger_right &= ~15; + break; + case 0x00000300u: + break; + case 0x00000400u: + break; + } + + origin->stick_x -= 128; + origin->stick_y -= 128; + origin->substick_x -= 128; + origin->substick_y -= 128; + + if (XPatchBits & chanBit) { + if (64 < origin->stick_x && (SIGetType(chan) & 0xFFFF0000) == SI_GC_CONTROLLER) { + origin->stick_x = 0; + } + } } -#pragma pop /* ############################################################################################## */ /* 80451848-8045184C 000D48 0004+00 1/1 0/0 0/0 .sbss Initialized */ -static u8 Initialized[4]; +static BOOL Initialized; /* 8045184C-80451850 000D4C 0004+00 10/10 0/0 0/0 .sbss EnabledBits */ -static u8 EnabledBits[4]; +static u32 EnabledBits; /* 80451850-80451854 000D50 0004+00 7/7 0/0 0/0 .sbss ResettingBits */ -static u8 ResettingBits[4]; +static u32 ResettingBits; + +inline void PADEnable(s32 chan) { + u32 cmd; + u32 chanBit; + u32 data[2]; + + chanBit = (u32)PAD_CHAN0_BIT >> chan; + EnabledBits |= chanBit; + SIGetResponse(chan, data); + cmd = (0x40 << 16) | AnalogMode; + SISetCommand(chan, cmd); + SIEnablePolling(EnabledBits); +} + +inline void DoReset(void) { + u32 chanBit; + + ResettingChan = __cntlzw(ResettingBits); + if (ResettingChan == 32) { + return; + } + + chanBit = (u32)PAD_CHAN0_BIT >> ResettingChan; + ResettingBits &= ~chanBit; + + memset(&Origin[ResettingChan], 0, sizeof(PADStatus)); + SIGetTypeAsync(ResettingChan, PADTypeAndStatusCallback); +} /* 8034E458-8034E51C 348D98 00C4+00 1/1 0/0 0/0 .text PADOriginCallback */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void PADOriginCallback() { - nofralloc -#include "asm/dolphin/pad/Pad/PADOriginCallback.s" +static void PADOriginCallback(s32 chan, u32 error, OSContext* context) { + if (!(error & + (SI_ERROR_UNDER_RUN | SI_ERROR_OVER_RUN | SI_ERROR_NO_RESPONSE | SI_ERROR_COLLISION))) { + UpdateOrigin(ResettingChan); + PADEnable(ResettingChan); + } + DoReset(); } -#pragma pop /* ############################################################################################## */ /* 80451854-80451858 000D54 0004+00 4/4 0/0 0/0 .sbss RecalibrateBits */ -static u8 RecalibrateBits[4]; +static u32 RecalibrateBits; /* 80451858-8045185C 000D58 0004+00 7/7 0/0 0/0 .sbss WaitingBits */ -static u8 WaitingBits[4]; +static u32 WaitingBits; /* 8045185C-80451860 000D5C 0004+00 6/6 0/0 0/0 .sbss CheckingBits */ -static u8 CheckingBits[4]; +static u32 CheckingBits; /* 80451860-80451864 000D60 0004+00 6/6 0/0 0/0 .sbss PendingBits */ -static u8 PendingBits[4]; +static u32 PendingBits; /* 80451864-80451868 000D64 0004+00 6/6 0/0 0/0 .sbss BarrelBits */ -static u8 BarrelBits[4]; +static u32 BarrelBits; + +inline void PADDisable(s32 chan) { + BOOL enabled; + u32 chanBit; + + enabled = OSDisableInterrupts(); + + chanBit = (u32)PAD_CHAN0_BIT >> chan; + SIDisablePolling(chanBit); + EnabledBits &= ~chanBit; + WaitingBits &= ~chanBit; + CheckingBits &= ~chanBit; + PendingBits &= ~chanBit; + BarrelBits &= ~chanBit; + OSSetWirelessID(chan, 0); + + OSRestoreInterrupts(enabled); +} /* 8034E51C-8034E5E8 348E5C 00CC+00 2/2 0/0 0/0 .text PADOriginUpdateCallback */ +// needs compiler epilogue patch +#ifdef NONMATCHING +static void PADOriginUpdateCallback(s32 chan, u32 error, OSContext* context) { + if (!(EnabledBits & ((u32)PAD_CHAN0_BIT >> chan))) { + return; + } + + if (!(error & + (SI_ERROR_UNDER_RUN | SI_ERROR_OVER_RUN | SI_ERROR_NO_RESPONSE | SI_ERROR_COLLISION))) { + UpdateOrigin(chan); + } + + if (error & SI_ERROR_NO_RESPONSE) { + PADDisable(chan); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void PADOriginUpdateCallback() { +static asm void PADOriginUpdateCallback(s32 chan, u32 error, OSContext* context) { nofralloc #include "asm/dolphin/pad/Pad/PADOriginUpdateCallback.s" } #pragma pop +#endif /* 8034E5E8-8034E6C0 348F28 00D8+00 1/1 0/0 0/0 .text PADProbeCallback */ +// needs compiler epilogue patch +#ifdef NONMATCHING +static void PADProbeCallback(s32 chan, u32 error, OSContext* context) { + if (!(error & + (SI_ERROR_UNDER_RUN | SI_ERROR_OVER_RUN | SI_ERROR_NO_RESPONSE | SI_ERROR_COLLISION))) { + PADEnable(ResettingChan); + WaitingBits |= (u32)PAD_CHAN0_BIT >> ResettingChan; + } + DoReset(); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void PADProbeCallback() { +static asm void PADProbeCallback(s32 chan, u32 error, OSContext* context) { nofralloc #include "asm/dolphin/pad/Pad/PADProbeCallback.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80450A30-80450A34 0004B0 0004+00 4/4 0/0 0/0 .sdata Spec */ -SECTION_SDATA static u32 Spec = 0x00000005; +SECTION_SDATA static u32 Spec = 5; /* 80450A34-80450A38 -00001 0004+00 2/2 0/0 0/0 .sdata MakeStatus */ -SECTION_SDATA static void* MakeStatus = (void*)SPEC2_MakeStatus; +SECTION_SDATA static void (*MakeStatus)(s32, PADStatus*, u32[2]) = SPEC2_MakeStatus; /* 80450A38-80450A3C 0004B8 0004+00 3/3 0/0 0/0 .sdata CmdReadOrigin */ SECTION_SDATA static f32 CmdReadOrigin = 8.0f; @@ -160,27 +246,119 @@ SECTION_SDATA static f32 CmdReadOrigin = 8.0f; /* 80450A3C-80450A40 0004BC 0004+00 1/1 0/0 0/0 .sdata CmdCalibrate */ SECTION_SDATA static f32 CmdCalibrate = 32.0f; +/* 8044CBB0-8044CBC0 0798D0 0010+00 0/1 0/0 0/0 .bss CmdProbeDevice */ +#pragma push +#pragma force_active on +static u32 CmdProbeDevice[4]; +#pragma pop + /* 8034E6C0-8034E9EC 349000 032C+00 4/4 0/0 0/0 .text PADTypeAndStatusCallback */ +// needs compiler epilogue patch +#ifdef NONMATCHING +static void PADTypeAndStatusCallback(s32 chan, u32 type) { + u32 chanBit; + u32 recalibrate; + BOOL rc = TRUE; + u32 error; + chanBit = (u32)PAD_CHAN0_BIT >> ResettingChan; + error = type & 0xFF; + recalibrate = RecalibrateBits & chanBit; + RecalibrateBits &= ~chanBit; + + if (error & + (SI_ERROR_UNDER_RUN | SI_ERROR_OVER_RUN | SI_ERROR_NO_RESPONSE | SI_ERROR_COLLISION)) { + DoReset(); + return; + } + + type &= ~0xFF; + + Type[ResettingChan] = type; + + if ((type & SI_TYPE_MASK) != SI_TYPE_GC || !(type & SI_GC_STANDARD)) { + DoReset(); + return; + } + + if (Spec < PAD_SPEC_2) { + PADEnable(ResettingChan); + DoReset(); + return; + } + + if (!(type & SI_GC_WIRELESS) || (type & SI_WIRELESS_IR)) { + if (recalibrate) { + rc = SITransfer(ResettingChan, &CmdCalibrate, 3, &Origin[ResettingChan], 10, + PADOriginCallback, 0); + } else { + rc = SITransfer(ResettingChan, &CmdReadOrigin, 1, &Origin[ResettingChan], 10, + PADOriginCallback, 0); + } + } else if ((type & SI_WIRELESS_FIX_ID) && (type & SI_WIRELESS_CONT_MASK) == SI_WIRELESS_CONT && + !(type & SI_WIRELESS_LITE)) { + if (type & SI_WIRELESS_RECEIVED) { + rc = SITransfer(ResettingChan, &CmdReadOrigin, 1, &Origin[ResettingChan], 10, + PADOriginCallback, 0); + } else { + rc = SITransfer(ResettingChan, &CmdProbeDevice[ResettingChan], 3, + &Origin[ResettingChan], 8, PADProbeCallback, 0); + } + } + if (!rc) { + PendingBits |= chanBit; + DoReset(); + return; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void PADTypeAndStatusCallback() { +static asm void PADTypeAndStatusCallback(s32 chan, u32 type) { nofralloc #include "asm/dolphin/pad/Pad/PADTypeAndStatusCallback.s" } #pragma pop +#endif /* 8034E9EC-8034EB2C 34932C 0140+00 1/1 0/0 0/0 .text PADReceiveCheckCallback */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void PADReceiveCheckCallback() { +static asm void PADReceiveCheckCallback(s32 chan, u32 type) { nofralloc #include "asm/dolphin/pad/Pad/PADReceiveCheckCallback.s" } #pragma pop /* 8034EB2C-8034EC3C 34946C 0110+00 2/2 1/1 0/0 .text PADReset */ +#ifdef NONMATCHING +BOOL PADReset(u32 mask) { + BOOL enabled; + u32 diableBits; + + enabled = OSDisableInterrupts(); + + mask |= PendingBits; + PendingBits = 0; + mask &= ~(WaitingBits | CheckingBits); + ResettingBits |= mask; + diableBits = ResettingBits & EnabledBits; + EnabledBits &= ~mask; + + if (Spec == PAD_SPEC_4) { + RecalibrateBits |= mask; + } + + SIDisablePolling(diableBits); + + if (ResettingChan == 32) { + DoReset(); + } + OSRestoreInterrupts(enabled); + return TRUE; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -189,8 +367,36 @@ asm BOOL PADReset(u32 mask) { #include "asm/dolphin/pad/Pad/PADReset.s" } #pragma pop +#endif /* 8034EC3C-8034ED50 34957C 0114+00 1/1 1/1 0/0 .text PADRecalibrate */ +#ifdef NONMATCHING +BOOL PADRecalibrate(u32 mask) { + BOOL enabled; + u32 disableBits; + + enabled = OSDisableInterrupts(); + + mask |= PendingBits; + PendingBits = 0; + mask &= ~(WaitingBits | CheckingBits); + ResettingBits |= mask; + BarrelBits &= ~mask; + disableBits = ResettingBits & EnabledBits; + EnabledBits &= ~mask; + + if (!(UnkVal & 0x40)) { + RecalibrateBits |= mask; + } + + SIDisablePolling(disableBits); + if (ResettingChan == 32) { + DoReset(); + } + OSRestoreInterrupts(enabled); + return TRUE; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -199,53 +405,186 @@ asm BOOL PADRecalibrate(u32 mask) { #include "asm/dolphin/pad/Pad/PADRecalibrate.s" } #pragma pop +#endif /* ############################################################################################## */ /* 803D1B90-803D1BA0 -00001 0010+00 1/1 0/0 0/0 .data ResetFunctionInfo */ -SECTION_DATA static void* ResetFunctionInfo[4] = { - (void*)OnReset, - (void*)0x0000007F, - (void*)NULL, - (void*)NULL, +SECTION_DATA static OSResetFunctionInfo ResetFunctionInfo = { + OnReset, + 0x0000007F, + NULL, + NULL, }; -/* 8044CBB0-8044CBC0 0798D0 0010+00 0/1 0/0 0/0 .bss CmdProbeDevice */ -#pragma push -#pragma force_active on -static u8 CmdProbeDevice[16]; -#pragma pop - /* 80451868-8045186C 000D68 0004+00 3/3 0/0 0/0 .sbss SamplingCallback */ -static u8 SamplingCallback[4]; +static void (*SamplingCallback)(void); /* 8045186C-80451870 000D6C 0004+00 1/1 0/0 0/0 .sbss recalibrated$388 */ -static u8 recalibrated[4]; +static BOOL recalibrated; /* 80451870-80451878 000D70 0004+04 2/2 1/1 0/0 .sbss __PADSpec */ -extern u8 __PADSpec[4 + 4 /* padding */]; -u8 __PADSpec[4 + 4 /* padding */]; +extern u32 __PADSpec; +u32 __PADSpec; /* 8034ED50-8034EEA0 349690 0150+00 0/0 1/1 0/0 .text PADInit */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm u32 PADInit() { - nofralloc -#include "asm/dolphin/pad/Pad/PADInit.s" +BOOL PADInit() { + s32 chan; + if (Initialized) { + return TRUE; + } + + OSRegisterVersion(__PADVersion); + + if (__PADSpec) { + PADSetSpec(__PADSpec); + } + + Initialized = TRUE; + + if (__PADFixBits != 0) { + OSTime time = OSGetTime(); + __OSWirelessPadFixMode = (u16)((((time)&0xffff) + ((time >> 16) & 0xffff) + + ((time >> 32) & 0xffff) + ((time >> 48) & 0xffff)) & + 0x3fffu); + RecalibrateBits = PAD_CHAN0_BIT | PAD_CHAN1_BIT | PAD_CHAN2_BIT | PAD_CHAN3_BIT; + } + + for (chan = 0; chan < SI_MAX_CHAN; ++chan) { + CmdProbeDevice[chan] = + (0x4D << 24) | (chan << 22) | ((__OSWirelessPadFixMode & 0x3fffu) << 8); + } + + SIRefreshSamplingRate(); + OSRegisterResetFunction(&ResetFunctionInfo); + + return PADReset(PAD_CHAN0_BIT | PAD_CHAN1_BIT | PAD_CHAN2_BIT | PAD_CHAN3_BIT); } -#pragma pop + +#define offsetof(type, memb) ((u32) & ((type*)0)->memb) /* 8034EEA0-8034F1A0 3497E0 0300+00 0/0 1/1 0/0 .text PADRead */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm u32 PADRead(PADStatus* status) { - nofralloc -#include "asm/dolphin/pad/Pad/PADRead.s" +u32 PADRead(PADStatus* status) { + BOOL enabled; + s32 chan; + u32 data[2]; + u32 chanBit; + u32 sr; + int chanShift; + u32 motor; + + enabled = OSDisableInterrupts(); + + motor = 0; + for (chan = 0; chan < SI_MAX_CHAN; chan++, status++) { + chanBit = (u32)PAD_CHAN0_BIT >> chan; + chanShift = 8 * (SI_MAX_CHAN - 1 - chan); + + if (PendingBits & chanBit) { + PADReset(0); + status->error = PAD_ERR_NOT_READY; + memset(status, 0, offsetof(PADStatus, error)); + continue; + } + + if ((ResettingBits & chanBit) || ResettingChan == chan) { + status->error = PAD_ERR_NOT_READY; + memset(status, 0, offsetof(PADStatus, error)); + continue; + } + + if (!(EnabledBits & chanBit)) { + status->error = (s8)PAD_ERR_NO_CONTROLLER; + memset(status, 0, offsetof(PADStatus, error)); + continue; + } + + if (SIIsChanBusy(chan)) { + status->error = PAD_ERR_TRANSFER; + memset(status, 0, offsetof(PADStatus, error)); + continue; + } + + sr = SIGetStatus(chan); + if (sr & SI_ERROR_NO_RESPONSE) { + SIGetResponse(chan, data); + + if (WaitingBits & chanBit) { + status->error = (s8)PAD_ERR_NONE; + memset(status, 0, offsetof(PADStatus, error)); + + if (!(CheckingBits & chanBit)) { + CheckingBits |= chanBit; + SIGetTypeAsync(chan, PADReceiveCheckCallback); + } + continue; + } + + PADDisable(chan); + + status->error = (s8)PAD_ERR_NO_CONTROLLER; + memset(status, 0, offsetof(PADStatus, error)); + continue; + } + + if (!(SIGetType(chan) & SI_GC_NOMOTOR)) { + motor |= chanBit; + } + + if (!SIGetResponse(chan, data)) { + status->error = PAD_ERR_TRANSFER; + memset(status, 0, offsetof(PADStatus, error)); + continue; + } + + if (data[0] & 0x80000000) { + status->error = PAD_ERR_TRANSFER; + memset(status, 0, offsetof(PADStatus, error)); + continue; + } + + MakeStatus(chan, status, data); + + // Check and clear PAD_ORIGIN bit + if (status->button & 0x2000) { + status->error = PAD_ERR_TRANSFER; + memset(status, 0, offsetof(PADStatus, error)); + + // Get origin. It is okay if the following transfer fails + // since the PAD_ORIGIN bit remains until the read origin + // command complete. + SITransfer(chan, &CmdReadOrigin, 1, &Origin[chan], 10, PADOriginUpdateCallback, 0); + continue; + } + + status->error = PAD_ERR_NONE; + + // Clear PAD_INTERFERE bit + status->button &= ~0x0080; + } + + OSRestoreInterrupts(enabled); + return motor; } -#pragma pop /* 8034F1A0-8034F258 349AE0 00B8+00 0/0 2/2 0/0 .text PADControlMotor */ +#ifdef NONMATCHING +void PADControlMotor(s32 chan, u32 command) { + BOOL enabled; + u32 chanBit; + + enabled = OSDisableInterrupts(); + chanBit = (u32)PAD_CHAN0_BIT >> chan; + if ((EnabledBits & chanBit) && !(SIGetType(chan) & SI_GC_NOMOTOR)) { + if (Spec < PAD_SPEC_2 && command == PAD_MOTOR_STOP_HARD) { + command = PAD_MOTOR_STOP; + } + + SISetCommand(chan, (0x40 << 16) | AnalogMode | (command & (0x00000001 | 0x00000002))); + SITransferCommands(); + } + OSRestoreInterrupts(enabled); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -254,82 +593,267 @@ asm void PADControlMotor(s32 channel, u32 command) { #include "asm/dolphin/pad/Pad/PADControlMotor.s" } #pragma pop +#endif /* 8034F258-8034F2B8 349B98 0060+00 1/1 1/1 0/0 .text PADSetSpec */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void PADSetSpec(int spec) { - nofralloc -#include "asm/dolphin/pad/Pad/PADSetSpec.s" +void PADSetSpec(u32 spec) { + __PADSpec = 0; + switch (spec) { + case PAD_SPEC_0: + MakeStatus = SPEC0_MakeStatus; + break; + case PAD_SPEC_1: + MakeStatus = SPEC1_MakeStatus; + break; + case PAD_SPEC_2: + case PAD_SPEC_3: + case PAD_SPEC_4: + case PAD_SPEC_5: + MakeStatus = SPEC2_MakeStatus; + break; + } + Spec = spec; } -#pragma pop /* 8034F2B8-8034F42C 349BF8 0174+00 1/1 0/0 0/0 .text SPEC0_MakeStatus */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void SPEC0_MakeStatus() { - nofralloc -#include "asm/dolphin/pad/Pad/SPEC0_MakeStatus.s" +static void SPEC0_MakeStatus(s32 chan, PADStatus* status, u32 data[2]) { + status->button = 0; + status->button |= ((data[0] >> 16) & 0x0008) ? PAD_BUTTON_A : 0; + status->button |= ((data[0] >> 16) & 0x0020) ? PAD_BUTTON_B : 0; + status->button |= ((data[0] >> 16) & 0x0100) ? PAD_BUTTON_X : 0; + status->button |= ((data[0] >> 16) & 0x0001) ? PAD_BUTTON_Y : 0; + status->button |= ((data[0] >> 16) & 0x0010) ? PAD_BUTTON_START : 0; + + status->stick_x = (s8)(data[1] >> 16); + status->stick_y = (s8)(data[1] >> 24); + + status->substick_x = (s8)(data[1]); + status->substick_y = (s8)(data[1] >> 8); + + status->trigger_left = (u8)(data[0] >> 8); + status->trigger_right = (u8)data[0]; + + status->analog_a = 0; + status->analog_b = 0; + + if (170 <= status->trigger_left) { + status->button |= PAD_TRIGGER_L; + } + + if (170 <= status->trigger_right) { + status->button |= PAD_TRIGGER_R; + } + + status->stick_x -= 128; + status->stick_y -= 128; + + status->substick_x -= 128; + status->substick_y -= 128; } -#pragma pop /* 8034F42C-8034F5A0 349D6C 0174+00 1/1 0/0 0/0 .text SPEC1_MakeStatus */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void SPEC1_MakeStatus() { - nofralloc -#include "asm/dolphin/pad/Pad/SPEC1_MakeStatus.s" +static void SPEC1_MakeStatus(s32 chan, PADStatus* status, u32 data[2]) { + status->button = 0; + status->button |= ((data[0] >> 16) & 0x0080) ? PAD_BUTTON_A : 0; + status->button |= ((data[0] >> 16) & 0x0100) ? PAD_BUTTON_B : 0; + status->button |= ((data[0] >> 16) & 0x0020) ? PAD_BUTTON_X : 0; + status->button |= ((data[0] >> 16) & 0x0010) ? PAD_BUTTON_Y : 0; + status->button |= ((data[0] >> 16) & 0x0200) ? PAD_BUTTON_START : 0; + + status->stick_x = (s8)(data[1] >> 16); + status->stick_y = (s8)(data[1] >> 24); + status->substick_x = (s8)(data[1]); + status->substick_y = (s8)(data[1] >> 8); + + status->trigger_left = (u8)(data[0] >> 8); + status->trigger_right = (u8)data[0]; + + status->analog_a = 0; + status->analog_b = 0; + + if (170 <= status->trigger_left) { + status->button |= PAD_TRIGGER_L; + } + + if (170 <= status->trigger_right) { + status->button |= PAD_TRIGGER_R; + } + + status->stick_x -= 128; + status->stick_y -= 128; + status->substick_x -= 128; + status->substick_y -= 128; } -#pragma pop + +inline s8 ClampS8(s8 var, s8 org) { + if (0 < org) { + s8 min = (s8)(-128 + org); + if (var < min) { + var = min; + } + } else if (org < 0) { + s8 max = (s8)(127 + org); + if (max < var) { + var = max; + } + } + return var -= org; +} + +inline u8 ClampU8(u8 var, u8 org) { + if (var < org) { + var = org; + } + return var -= org; +} + +#define PAD_ALL \ + (PAD_BUTTON_LEFT | PAD_BUTTON_RIGHT | PAD_BUTTON_DOWN | PAD_BUTTON_UP | PAD_TRIGGER_Z | \ + PAD_TRIGGER_R | PAD_TRIGGER_L | PAD_BUTTON_A | PAD_BUTTON_B | PAD_BUTTON_X | PAD_BUTTON_Y | \ + PAD_BUTTON_MENU | 0x2000 | 0x0080) /* 8034F5A0-8034FA10 349EE0 0470+00 2/1 0/0 0/0 .text SPEC2_MakeStatus */ +#ifdef NONMATCHING +static void SPEC2_MakeStatus(s32 chan, PADStatus* status, u32 data[2]) { + PADStatus* origin; + + status->button = (u16)((data[0] >> 16) & PAD_ALL); + status->stick_x = (s8)(data[0] >> 8); + status->stick_y = (s8)(data[0]); + + switch (AnalogMode & 0x00000700) { + case 0x00000000: + case 0x00000500: + case 0x00000600: + case 0x00000700: + status->substick_x = (s8)(data[1] >> 24); + status->substick_y = (s8)(data[1] >> 16); + status->trigger_left = (u8)(((data[1] >> 12) & 0x0f) << 4); + status->trigger_right = (u8)(((data[1] >> 8) & 0x0f) << 4); + status->analog_a = (u8)(((data[1] >> 4) & 0x0f) << 4); + status->analog_b = (u8)(((data[1] >> 0) & 0x0f) << 4); + break; + case 0x00000100: + status->substick_x = (s8)(((data[1] >> 28) & 0x0f) << 4); + status->substick_y = (s8)(((data[1] >> 24) & 0x0f) << 4); + status->trigger_left = (u8)(data[1] >> 16); + status->trigger_right = (u8)(data[1] >> 8); + status->analog_a = (u8)(((data[1] >> 4) & 0x0f) << 4); + status->analog_b = (u8)(((data[1] >> 0) & 0x0f) << 4); + break; + case 0x00000200: + status->substick_x = (s8)(((data[1] >> 28) & 0x0f) << 4); + status->substick_y = (s8)(((data[1] >> 24) & 0x0f) << 4); + status->trigger_left = (u8)(((data[1] >> 20) & 0x0f) << 4); + status->trigger_right = (u8)(((data[1] >> 16) & 0x0f) << 4); + status->analog_a = (u8)(data[1] >> 8); + status->analog_b = (u8)(data[1] >> 0); + break; + case 0x00000300: + status->substick_x = (s8)(data[1] >> 24); + status->substick_y = (s8)(data[1] >> 16); + status->trigger_left = (u8)(data[1] >> 8); + status->trigger_right = (u8)(data[1] >> 0); + status->analog_a = 0; + status->analog_b = 0; + break; + case 0x00000400: + status->substick_x = (s8)(data[1] >> 24); + status->substick_y = (s8)(data[1] >> 16); + status->trigger_left = 0; + status->trigger_right = 0; + status->analog_a = (u8)(data[1] >> 8); + status->analog_b = (u8)(data[1] >> 0); + break; + } + + status->stick_x -= 128; + status->stick_y -= 128; + status->substick_x -= 128; + status->substick_y -= 128; + + origin = &Origin[chan]; + status->stick_x = ClampS8(status->stick_x, origin->stick_x); + status->stick_y = ClampS8(status->stick_y, origin->stick_y); + status->substick_x = ClampS8(status->substick_x, origin->substick_x); + status->substick_y = ClampS8(status->substick_y, origin->substick_y); + status->trigger_left = ClampU8(status->trigger_left, origin->trigger_left); + status->trigger_right = ClampU8(status->trigger_right, origin->trigger_right); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void SPEC2_MakeStatus() { +static asm void SPEC2_MakeStatus(s32 chan, PADStatus* status, u32 data[2]) { nofralloc #include "asm/dolphin/pad/Pad/SPEC2_MakeStatus.s" } #pragma pop +#endif /* 8034FA10-8034FA84 34A350 0074+00 0/0 2/2 0/0 .text PADSetAnalogMode */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void PADSetAnalogMode(u32 mode) { - nofralloc -#include "asm/dolphin/pad/Pad/PADSetAnalogMode.s" +void PADSetAnalogMode(u32 mode) { + BOOL enabled; + u32 mask; + + enabled = OSDisableInterrupts(); + AnalogMode = mode << 8; + mask = EnabledBits; + + EnabledBits &= ~mask; + WaitingBits &= ~mask; + CheckingBits &= ~mask; + + SIDisablePolling(mask); + OSRestoreInterrupts(enabled); +} + +inline BOOL PADSync(void) { + return ResettingBits == 0 && ResettingChan == 32 && !SIBusy(); } -#pragma pop /* 8034FA84-8034FB40 34A3C4 00BC+00 1/0 0/0 0/0 .text OnReset */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void OnReset() { - nofralloc -#include "asm/dolphin/pad/Pad/OnReset.s" +static s32 OnReset(s32 f) { + static BOOL recalibrated = FALSE; + BOOL sync; + + if (SamplingCallback) { + PADSetSamplingCallback(NULL); + } + + if (!f) { + sync = PADSync(); + if (!recalibrated && sync) { + recalibrated = + PADRecalibrate(PAD_CHAN0_BIT | PAD_CHAN1_BIT | PAD_CHAN2_BIT | PAD_CHAN3_BIT); + return FALSE; + } + return sync; + } else { + recalibrated = FALSE; + } + + return TRUE; } -#pragma pop /* 8034FB40-8034FBA0 34A480 0060+00 1/1 0/0 0/0 .text SamplingHandler */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void SamplingHandler() { - nofralloc -#include "asm/dolphin/pad/Pad/SamplingHandler.s" +static void SamplingHandler(OSInterrupt interrupt, OSContext* context) { + OSContext exceptionContext; + + if (SamplingCallback) { + OSClearContext(&exceptionContext); + OSSetCurrentContext(&exceptionContext); + SamplingCallback(); + OSClearContext(&exceptionContext); + OSSetCurrentContext(context); + } } -#pragma pop /* 8034FBA0-8034FBF4 34A4E0 0054+00 1/1 0/0 0/0 .text PADSetSamplingCallback */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void PADSetSamplingCallback() { +static asm PADSamplingCallback PADSetSamplingCallback(PADSamplingCallback callback) { nofralloc #include "asm/dolphin/pad/Pad/PADSetSamplingCallback.s" } @@ -339,7 +863,7 @@ static asm void PADSetSamplingCallback() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __PADDisableRecalibration() { +asm BOOL __PADDisableRecalibration(BOOL disable) { nofralloc #include "asm/dolphin/pad/Pad/__PADDisableRecalibration.s" } diff --git a/libs/dolphin/pad/Padclamp.c b/libs/dolphin/pad/Padclamp.c index aa5e4a5136..656f1dc8f4 100644 --- a/libs/dolphin/pad/Padclamp.c +++ b/libs/dolphin/pad/Padclamp.c @@ -3,36 +3,76 @@ // Translation Unit: Padclamp // +#include "dolphin/pad/Pad.h" #include "dolphin/pad/Padclamp.h" #include "dol2asm.h" -#include "dolphin/types.h" // // Forward References: // -static void ClampStick(); -static void ClampCircle(); -void PADClamp(); -void PADClampCircle(); - -// -// External References: -// +static void ClampStick(s8* px, s8* py, s8 max, s8 xy, s8 min); +static void ClampCircle(s8* px, s8* py, s8 radius, s8 min); // // Declarations: // /* 8034DDBC-8034DEEC 3486FC 0130+00 1/1 0/0 0/0 .text ClampStick */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void ClampStick() { - nofralloc -#include "asm/dolphin/pad/Padclamp/ClampStick.s" +static void ClampStick(s8* px, s8* py, s8 max, s8 xy, s8 min) { + int x = *px; + int y = *py; + int signX; + int signY; + int d; + + if (0 <= x) { + signX = 1; + } else { + signX = -1; + x = -x; + } + + if (0 <= y) { + signY = 1; + } else { + signY = -1; + y = -y; + } + + if (x <= min) { + x = 0; + } else { + x -= min; + } + if (y <= min) { + y = 0; + } else { + y -= min; + } + + if (x == 0 && y == 0) { + *px = *py = 0; + return; + } + + if (xy * y <= xy * x) { + d = xy * x + (max - xy) * y; + if (xy * max < d) { + x = (s8)(xy * max * x / d); + y = (s8)(xy * max * y / d); + } + } else { + d = xy * y + (max - xy) * x; + if (xy * max < d) { + x = (s8)(xy * max * x / d); + y = (s8)(xy * max * y / d); + } + } + + *px = (s8)(signX * x); + *py = (s8)(signY * y); } -#pragma pop /* ############################################################################################## */ /* 80456560-80456568 004B60 0004+04 1/1 0/0 0/0 .sdata2 @160 */ @@ -55,7 +95,7 @@ SECTION_SDATA2 static f64 lit_164 = 4503601774854144.0 /* cast s32 to float */; #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void ClampCircle() { +static asm void ClampCircle(s8* px, s8* py, s8 radius, s8 min) { nofralloc #include "asm/dolphin/pad/Padclamp/ClampCircle.s" } @@ -63,43 +103,90 @@ static asm void ClampCircle() { /* ############################################################################################## */ /* 803A2170-803A2180 02E7D0 000A+06 2/2 0/0 0/0 .rodata ClampRegion */ -SECTION_RODATA static u8 const ClampRegion[10 + 6 /* padding */] = { - 0x1E, - 0xB4, - 0x0F, - 0x48, - 0x28, - 0x0F, - 0x3B, - 0x1F, - 0x38, - 0x2C, - /* padding */ - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, +static const PADClampRegion ClampRegion = { + // Triggers + 30, + 180, + + // Left stick + 15, + 72, + 40, + + // Right stick + 15, + 59, + 31, + + // Stick radii + 56, + 44, }; -COMPILER_STRIP_GATE(0x803A2170, &ClampRegion); + +inline void ClampTrigger(u8* trigger, u8 min, u8 max) { + if (*trigger <= min) { + *trigger = 0; + } else { + if (max < *trigger) { + *trigger = max; + } + *trigger -= min; + } +} /* 8034E094-8034E1A8 3489D4 0114+00 0/0 1/1 0/0 .text PADClamp */ +// needs compiler epilogue patch +#ifdef NONMATCHING +void PADClamp(PADStatus* status) { + int i; + for (i = 0; i < 4; i++, status++) { + if (status->error != PAD_ERR_NONE) { + continue; + } + + ClampStick(&status->stick_x, &status->stick_y, ClampRegion.maxStick, ClampRegion.xyStick, + ClampRegion.minStick); + ClampStick(&status->substick_x, &status->substick_y, ClampRegion.maxSubstick, + ClampRegion.xySubstick, ClampRegion.minSubstick); + ClampTrigger(&status->trigger_left, ClampRegion.minTrigger, ClampRegion.maxTrigger); + ClampTrigger(&status->trigger_right, ClampRegion.minTrigger, ClampRegion.maxTrigger); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void PADClamp() { +asm void PADClamp(PADStatus* status) { nofralloc #include "asm/dolphin/pad/Padclamp/PADClamp.s" } #pragma pop +#endif /* 8034E1A8-8034E2B4 348AE8 010C+00 0/0 1/1 0/0 .text PADClampCircle */ +// needs compiler epilogue patch +#ifdef NONMATCHING +void PADClampCircle(PADStatus* status) { + u32 i; + for (i = 0; i < 4; ++i, status++) { + if (status->error != PAD_ERR_NONE) { + continue; + } + + ClampCircle(&status->stick_x, &status->stick_y, ClampRegion.radStick, ClampRegion.minStick); + ClampCircle(&status->substick_x, &status->substick_y, ClampRegion.radSubstick, + ClampRegion.minSubstick); + ClampTrigger(&status->trigger_left, ClampRegion.minTrigger, ClampRegion.maxTrigger); + ClampTrigger(&status->trigger_right, ClampRegion.minTrigger, ClampRegion.maxTrigger); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void PADClampCircle() { +asm void PADClampCircle(PADStatus* status) { nofralloc #include "asm/dolphin/pad/Padclamp/PADClampCircle.s" } #pragma pop +#endif diff --git a/libs/dolphin/si/Makefile b/libs/dolphin/si/Makefile index f79ca0af02..b67c017057 100644 --- a/libs/dolphin/si/Makefile +++ b/libs/dolphin/si/Makefile @@ -11,6 +11,14 @@ LIBSI_A_O_FILES := \ $(BUILD_DIR)/libs/dolphin/si/SISamplingRate.o \ LIBSI_A_CFLAGS := \ + -Cpp_exceptions off \ + -proc gekko \ + -fp hard \ + -nodefaults \ + -str reuse \ + -RTTI off \ + -maxerrors 5 \ + -enum int $(INCLUDES) \ -O4,p \ -lang=c \ @@ -29,5 +37,5 @@ $(BUILD_DIR)/libs/dolphin/si/%.o: libs/dolphin/si/%.c @mkdir -p $(@D) @echo building... $< @$(ICONV) -f UTF-8 -t CP932 < $< > $(basename $@).c - @$(WINE) tools/mwcc_compiler/1.2.5/mwcceppc.exe $(CFLAGS) $(LIBSI_A_CFLAGS) -c -o $@ $(basename $@).c + @$(WINE) tools/mwcc_compiler/1.2.5/mwcceppc.exe $(LIBSI_A_CFLAGS) -c -o $@ $(basename $@).c diff --git a/libs/dolphin/si/SIBios.c b/libs/dolphin/si/SIBios.c index 3b9e8044a6..0267d771c2 100644 --- a/libs/dolphin/si/SIBios.c +++ b/libs/dolphin/si/SIBios.c @@ -5,352 +5,800 @@ #include "dolphin/si/SIBios.h" #include "dol2asm.h" -#include "dolphin/types.h" +#include "dolphin/si/SISamplingRate.h" +#include "dolphin/vi/vi.h" + +/* 803D11B8-803D11FC 02E2D8 0044+00 4/3 0/0 0/0 .data @1 */ +SECTION_DATA static char lit_1[] = + "<< Dolphin SDK - SI\trelease build: Apr 5 2004 04:14:16 (0x2301) >>"; + +/* 804509C8-804509D0 -00001 0004+04 1/1 0/0 0/0 .sdata __SIVersion */ +SECTION_SDATA static char* __SIVersion = lit_1; // // Forward References: // -void SIBusy(); -void SIIsChanBusy(); -static void CompleteTransfer(); -static void SIInterruptHandler(); -static void SIEnablePollingInterrupt(); -void SIRegisterPollingHandler(); -void SIUnregisterPollingHandler(); -void SIInit(); -void __SITransfer(); -void SIGetStatus(); -void SISetCommand(); -void SITransferCommands(); -void SISetXY(); -void SIEnablePolling(); -void SIDisablePolling(); -static void SIGetResponseRaw(); -void SIGetResponse(); -static void AlarmHandler(); -void SITransfer(); -static void GetTypeCallback(); -void SIGetType(); -void SIGetTypeAsync(); +static u32 CompleteTransfer(void); +BOOL __SITransfer(s32 chan, void* output, u32 outputBytes, void* input, u32 inputBytes, + SICallback callback); +static void AlarmHandler(OSAlarm* alarm, OSContext* context); +static void GetTypeCallback(s32 chan, u32 error, OSContext* context); // // External References: // -void OSRegisterVersion(); -void OSSetAlarm(); -void OSCancelAlarm(); -void OSDisableInterrupts(); -void OSRestoreInterrupts(); -void __OSSetInterruptHandler(); -void __OSUnmaskInterrupts(); -void OSGetWirelessID(); -void OSSetWirelessID(); -void __OSGetSystemTime(); -void SISetSamplingRate(); -void VIGetCurrentLine(); +u32 VIGetCurrentLine(); // // Declarations: // -/* ############################################################################################## */ -/* 803D11B8-803D11FC 02E2D8 0044+00 4/3 0/0 0/0 .data @1 */ -SECTION_DATA static char lit_1[] = "<< Dolphin SDK - SI\trelease build: Apr 5 2004 04:14:16 (0x2301) >>"; - /* 803D11FC-803D1210 02E31C 0014+00 8/11 0/0 0/0 .data Si */ -SECTION_DATA static u8 Si[20] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +static SIControl Si = { + -1, 0, 0, NULL, NULL, +}; + +/* ############################################################################################## */ +/* 803D1210-803D1220 02E330 0010+00 5/5 0/0 0/0 .data Type */ +static u32 Type[SI_MAX_CHAN] = { + SI_ERROR_NO_RESPONSE, + SI_ERROR_NO_RESPONSE, + SI_ERROR_NO_RESPONSE, + SI_ERROR_NO_RESPONSE, }; /* 80344BA0-80344BC0 33F4E0 0020+00 0/0 1/1 0/0 .text SIBusy */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void SIBusy() { - nofralloc -#include "asm/dolphin/si/SIBios/SIBusy.s" +BOOL SIBusy() { + return Si.chan != -1 ? TRUE : FALSE; } -#pragma pop /* ############################################################################################## */ /* 8044C630-8044C6B0 079350 0080+00 9/9 0/0 0/0 .bss Packet */ -static u8 Packet[128]; +static SIPacket Packet[SI_MAX_CHAN]; /* 80344BC0-80344BFC 33F500 003C+00 0/0 1/1 0/0 .text SIIsChanBusy */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void SIIsChanBusy() { - nofralloc -#include "asm/dolphin/si/SIBios/SIIsChanBusy.s" +BOOL SIIsChanBusy(s32 chan) { + return (Packet[chan].chan != -1 || Si.chan == chan); } -#pragma pop /* ############################################################################################## */ /* 8044C6B0-8044C750 0793D0 00A0+00 1/1 0/0 0/0 .bss Alarm */ -static u8 Alarm[160]; +static OSAlarm Alarm[SI_MAX_CHAN]; /* 8044C750-8044C770 079470 0020+00 2/2 0/0 0/0 .bss TypeTime */ -static u8 TypeTime[32]; +static OSTime TypeTime[SI_MAX_CHAN]; /* 8044C770-8044C790 079490 0020+00 1/1 0/0 0/0 .bss XferTime */ -static u8 XferTime[32]; +static OSTime XferTime[SI_MAX_CHAN]; + +static inline void SIClearTCInterrupt() { + u32 reg; + + reg = __SIRegs[13]; + reg |= 0x80000000; + reg &= ~0x00000001; + __SIRegs[13] = reg; +} /* 80344BFC-80344EF8 33F53C 02FC+00 1/1 0/0 0/0 .text CompleteTransfer */ +// needs compiler epilogue patch +#ifdef NONMATCHING +static u32 CompleteTransfer() { + u32 sr; + u32 i; + u32 rLen; + u8* input; + + sr = __SIRegs[14]; + + SIClearTCInterrupt(); + + if (Si.chan != -1) { + XferTime[Si.chan] = __OSGetSystemTime(); + + input = Si.input; + + rLen = Si.inputBytes / 4; + for (i = 0; i < rLen; i++) { + *(u32*)input = __SIRegs[32 + i]; + input += 4; + } + + rLen = Si.inputBytes & 3; + if (rLen) { + u32 temp = __SIRegs[32 + i]; + for (i = 0; i < rLen; i++) { + *input++ = (u8)((temp >> ((3 - i) * 8)) & 0xff); + } + } + + if (__SIRegs[13] & 0x20000000) { + sr >>= 8 * (3 - Si.chan); + sr &= 0xf; + + if ((sr & SI_ERROR_NO_RESPONSE) && !(Type[Si.chan] & SI_ERROR_BUSY)) { + Type[Si.chan] = SI_ERROR_NO_RESPONSE; + } + if (sr == 0) { + sr = SI_ERROR_COLLISION; + } + } else { + TypeTime[Si.chan] = __OSGetSystemTime(); + sr = 0; + } + + Si.chan = -1; + } + return sr; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void CompleteTransfer() { +static asm u32 CompleteTransfer(void) { nofralloc #include "asm/dolphin/si/SIBios/CompleteTransfer.s" } #pragma pop +#endif /* ############################################################################################## */ /* 8044C790-8044C7D0 0794B0 0040+00 1/1 0/0 0/0 .bss TypeCallback */ -static u8 TypeCallback[64]; +static SITypeAndStatusCallback TypeCallback[SI_MAX_CHAN][4]; /* 8044C7D0-8044C7E0 0794F0 0010+00 2/3 0/0 0/0 .bss RDSTHandler */ -static u8 RDSTHandler[16]; +static OSInterruptHandler RDSTHandler[4]; /* 8044C7E0-8044C7F0 079500 0010+00 0/0 0/0 0/0 .bss InputBufferValid */ #pragma push #pragma force_active on -static u8 InputBufferValid[16]; +static BOOL InputBufferValid[SI_MAX_CHAN]; #pragma pop /* 8044C7F0-8044C810 079510 0020+00 0/0 0/0 0/0 .bss InputBuffer */ #pragma push #pragma force_active on -static u8 InputBuffer[32]; +static u32 InputBuffer[SI_MAX_CHAN][2]; #pragma pop /* 8044C810-8044C820 079530 0010+00 0/2 0/0 0/0 .bss InputBufferVcount */ #pragma push #pragma force_active on -static u8 InputBufferVcount[16]; +static volatile u32 InputBufferVcount[SI_MAX_CHAN]; #pragma pop +inline void SITransferNext(s32 chan) { + int i; + SIPacket* packet; + + for (i = 0; i < SI_MAX_CHAN; ++i) { + ++chan; + chan %= SI_MAX_CHAN; + packet = &Packet[chan]; + if (packet->chan != -1 && packet->fire <= __OSGetSystemTime()) { + if (__SITransfer(packet->chan, packet->output, packet->outputBytes, packet->input, + packet->inputBytes, packet->callback)) { + OSCancelAlarm(&Alarm[chan]); + packet->chan = -1; + } + break; + } + } +} + /* 804516F0-804516F4 000BF0 0004+00 1/1 0/0 0/0 .sbss cmdTypeAndStatus$78 */ static u8 cmdTypeAndStatus_78[4]; /* 80344EF8-8034523C 33F838 0344+00 1/1 0/0 0/0 .text SIInterruptHandler */ +#ifdef NONMATCHING +static void SIInterruptHandler(OSInterrupt interrupt, OSContext* context) { + u32 reg; + + reg = __SIRegs[13]; + + if ((reg & 0xc0000000) == 0xc0000000) { + s32 chan; + u32 sr; + SICallback callback; + + chan = Si.chan; + sr = CompleteTransfer(); + callback = Si.callback; + Si.callback = 0; + + SITransferNext(chan); + + if (callback) { + callback(chan, sr, context); + } + + sr = __SIRegs[14]; + sr &= 0xf000000 >> (8 * chan); + __SIRegs[14] = sr; + + if (Type[chan] == SI_ERROR_BUSY && !SIIsChanBusy(chan)) { + static u32 cmdTypeAndStatus = 0 << 24; + SITransfer(chan, &cmdTypeAndStatus, 1, &Type[chan], 3, GetTypeCallback, + OSMicrosecondsToTicks(65)); + } + } + + if ((reg & 0x18000000) == 0x18000000) { + int i; + u32 vcount; + u32 x; + + vcount = VIGetCurrentLine() + 1; + x = (Si.poll & 0x03ff0000) >> 16; + + for (i = 0; i < SI_MAX_CHAN; ++i) { + if (SIGetResponseRaw(i)) { + InputBufferVcount[i] = vcount; + } + } + + for (i = 0; i < SI_MAX_CHAN; ++i) { + if (!(Si.poll & (SI_CHAN0_BIT >> (31 - 7 + i)))) { + continue; + } + if (InputBufferVcount[i] == 0 || InputBufferVcount[i] + (x / 2) < vcount) { + return; + } + } + + for (i = 0; i < SI_MAX_CHAN; ++i) { + InputBufferVcount[i] = 0; + } + + for (i = 0; i < 4; ++i) { + if (RDSTHandler[i]) { + RDSTHandler[i](interrupt, context); + } + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void SIInterruptHandler() { +static asm void SIInterruptHandler(OSInterrupt interrupt, OSContext* context) { nofralloc #include "asm/dolphin/si/SIBios/SIInterruptHandler.s" } #pragma pop +#endif /* 8034523C-803452D4 33FB7C 0098+00 2/2 0/0 0/0 .text SIEnablePollingInterrupt */ +// needs compiler epilogue patch +#ifdef NONMATCHING +static BOOL SIEnablePollingInterrupt(BOOL enable) { + BOOL enabled; + BOOL rc; + u32 reg; + int i; + + enabled = OSDisableInterrupts(); + reg = __SIRegs[13]; + rc = (reg & 0x08000000) ? TRUE : FALSE; + if (enable) { + reg |= 0x08000000; + for (i = 0; i < SI_MAX_CHAN; ++i) { + InputBufferVcount[i] = 0; + } + } else { + reg &= ~0x08000000; + } + reg &= ~0x80000001; + __SIRegs[13] = reg; + OSRestoreInterrupts(enabled); + return rc; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void SIEnablePollingInterrupt() { +static asm BOOL SIEnablePollingInterrupt(BOOL enable) { nofralloc #include "asm/dolphin/si/SIBios/SIEnablePollingInterrupt.s" } #pragma pop +#endif /* 803452D4-803453A0 33FC14 00CC+00 0/0 1/1 0/0 .text SIRegisterPollingHandler */ +// needs compiler epilogue patch +#ifdef NONMATCHING +BOOL SIRegisterPollingHandler(__OSInterruptHandler handler) { + BOOL enabled; + int i; + + enabled = OSDisableInterrupts(); + for (i = 0; i < 4; ++i) { + if (RDSTHandler[i] == handler) { + OSRestoreInterrupts(enabled); + return TRUE; + } + } + for (i = 0; i < 4; ++i) { + if (RDSTHandler[i] == 0) { + RDSTHandler[i] = handler; + SIEnablePollingInterrupt(TRUE); + OSRestoreInterrupts(enabled); + return TRUE; + } + } + OSRestoreInterrupts(enabled); + return FALSE; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void SIRegisterPollingHandler() { +asm BOOL SIRegisterPollingHandler(OSInterruptHandler handler) { nofralloc #include "asm/dolphin/si/SIBios/SIRegisterPollingHandler.s" } #pragma pop +#endif /* 803453A0-80345494 33FCE0 00F4+00 0/0 1/1 0/0 .text SIUnregisterPollingHandler */ +// needs compiler epilogue patch +#ifdef NONMATCHING +BOOL SIUnregisterPollingHandler(OSInterruptHandler handler) { + BOOL enabled; + int i; + + enabled = OSDisableInterrupts(); + for (i = 0; i < 4; ++i) { + if (RDSTHandler[i] == handler) { + RDSTHandler[i] = 0; + for (i = 0; i < 4; ++i) { + if (RDSTHandler[i]) { + break; + } + } + if (i == 4) { + SIEnablePollingInterrupt(FALSE); + } + OSRestoreInterrupts(enabled); + return TRUE; + break; + } + } + OSRestoreInterrupts(enabled); + return FALSE; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void SIUnregisterPollingHandler() { +asm BOOL SIUnregisterPollingHandler(OSInterruptHandler handler) { nofralloc #include "asm/dolphin/si/SIBios/SIUnregisterPollingHandler.s" } #pragma pop - -/* ############################################################################################## */ -/* 804509C8-804509D0 -00001 0004+04 1/1 0/0 0/0 .sdata __SIVersion */ -SECTION_SDATA static void* __SIVersion[1 + 1 /* padding */] = { - (void*)&lit_1, - /* padding */ - NULL, -}; +#endif /* 80345494-80345548 33FDD4 00B4+00 0/0 1/1 0/0 .text SIInit */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void SIInit() { - nofralloc -#include "asm/dolphin/si/SIBios/SIInit.s" +void SIInit(void) { + OSRegisterVersion(__SIVersion); + + Packet[0].chan = Packet[1].chan = Packet[2].chan = Packet[3].chan = -1; + + Si.poll = 0; + SISetSamplingRate(0); + + while (__SIRegs[13] & 1) + ; + + __SIRegs[13] = 0x80000000; + + __OSSetInterruptHandler(OS_INTR_PI_SI, SIInterruptHandler); + __OSUnmaskInterrupts(OS_INTERRUPTMASK_PI_SI); + + SIGetType(0); + SIGetType(1); + SIGetType(2); + SIGetType(3); } -#pragma pop + +#define ROUND(n, a) (((u32)(n) + (a)-1) & ~((a)-1)) /* 80345548-80345754 33FE88 020C+00 3/3 0/0 0/0 .text __SITransfer */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __SITransfer() { - nofralloc -#include "asm/dolphin/si/SIBios/__SITransfer.s" -} -#pragma pop +static BOOL __SITransfer(s32 chan, void* output, u32 outputBytes, void* input, u32 inputBytes, + SICallback callback) { + BOOL enabled; + u32 rLen; + u32 i; + u32 sr; + SIComm_u comcsr; -/* ############################################################################################## */ -/* 803D1210-803D1220 02E330 0010+00 5/5 0/0 0/0 .data Type */ -SECTION_DATA static u8 Type[16] = { - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, -}; + enabled = OSDisableInterrupts(); + if (Si.chan != -1) { + OSRestoreInterrupts(enabled); + return FALSE; + } + + sr = __SIRegs[14]; + sr &= (0xf000000) >> (8 * chan); + __SIRegs[14] = sr; + + Si.chan = chan; + Si.callback = callback; + Si.inputBytes = inputBytes; + Si.input = input; + + rLen = ROUND(outputBytes, 4) / 4; + for (i = 0; i < rLen; i++) { + __SIRegs[32 + i] = ((u32*)output)[i]; + } + + comcsr.val = __SIRegs[13]; + comcsr.f.tcint = 1; + comcsr.f.tcintmsk = callback ? 1 : 0; + comcsr.f.outlngth = (outputBytes == SI_MAX_COMCSR_OUTLNGTH) ? 0 : outputBytes; + comcsr.f.inlngth = (inputBytes == SI_MAX_COMCSR_INLNGTH) ? 0 : inputBytes; + comcsr.f.channel = chan; + comcsr.f.tstart = 1; + __SIRegs[13] = comcsr.val; + + OSRestoreInterrupts(enabled); + + return TRUE; +} /* 80345754-803457D0 340094 007C+00 1/1 1/1 0/0 .text SIGetStatus */ +// needs compiler epilogue patch +#ifdef NONMATCHING +u32 SIGetStatus(s32 chan) { + BOOL enabled; + u32 sr; + int chanShift; + + enabled = OSDisableInterrupts(); + sr = __SIRegs[14]; + chanShift = 8 * (SI_MAX_CHAN - 1 - chan); + sr >>= chanShift; + if (sr & SI_ERROR_NO_RESPONSE) { + if (!(Type[chan] & SI_ERROR_BUSY)) { + Type[chan] = SI_ERROR_NO_RESPONSE; + } + } + OSRestoreInterrupts(enabled); + return sr; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void SIGetStatus() { +asm u32 SIGetStatus(s32 chan) { nofralloc #include "asm/dolphin/si/SIBios/SIGetStatus.s" } #pragma pop +#endif /* 803457D0-803457E4 340110 0014+00 0/0 4/4 0/0 .text SISetCommand */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void SISetCommand() { - nofralloc -#include "asm/dolphin/si/SIBios/SISetCommand.s" +void SISetCommand(s32 chan, u32 command) { + __SIRegs[3 * chan] = command; } -#pragma pop /* 803457E4-803457F4 340124 0010+00 0/0 1/1 0/0 .text SITransferCommands */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void SITransferCommands() { - nofralloc -#include "asm/dolphin/si/SIBios/SITransferCommands.s" +void SITransferCommands(void) { + __SIRegs[14] = 0x80000000; } -#pragma pop /* 803457F4-80345860 340134 006C+00 0/0 1/1 0/0 .text SISetXY */ +// needs compiler epilogue patch +#ifdef NONMATCHING +u32 SISetXY(u32 x, u32 y) { + u32 poll; + BOOL enabled; + + poll = x << 16; + poll |= y << 8; + + enabled = OSDisableInterrupts(); + Si.poll &= ~(0x03ff0000 | 0x0000ff00); + Si.poll |= poll; + poll = Si.poll; + __SIRegs[12] = poll; + OSRestoreInterrupts(enabled); + return poll; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void SISetXY() { +asm u32 SISetXY(u32 x, u32 y) { nofralloc #include "asm/dolphin/si/SIBios/SISetXY.s" } #pragma pop +#endif /* 80345860-803458FC 3401A0 009C+00 0/0 3/3 0/0 .text SIEnablePolling */ +#ifdef NONMATCHING +u32 SIEnablePolling(u32 poll) { + BOOL enabled; + u32 en; + + if (poll == 0) { + return Si.poll; + } + + enabled = OSDisableInterrupts(); + + poll >>= (31 - 7); + en = poll & 0xf0; + + poll &= (en >> 4) | 0x03fffff0; + + poll &= ~0x03ffff00; + + Si.poll &= ~(en >> 4); + + Si.poll |= poll; + + poll = Si.poll; + + SITransferCommands(); + + __SIRegs[12] = poll; + + OSRestoreInterrupts(enabled); + + return poll; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void SIEnablePolling() { +asm u32 SIEnablePolling(u32 poll) { nofralloc #include "asm/dolphin/si/SIBios/SIEnablePolling.s" } #pragma pop +#endif /* 803458FC-80345968 34023C 006C+00 0/0 6/6 0/0 .text SIDisablePolling */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void SIDisablePolling() { - nofralloc -#include "asm/dolphin/si/SIBios/SIDisablePolling.s" +u32 SIDisablePolling(u32 poll) { + BOOL enabled; + + if (poll == 0) { + return Si.poll; + } + + enabled = OSDisableInterrupts(); + + poll >>= (31 - 7); + poll &= 0xf0; + + poll = Si.poll & ~poll; + + __SIRegs[12] = poll; + Si.poll = poll; + + OSRestoreInterrupts(enabled); + return poll; } -#pragma pop /* 80345968-80345A3C 3402A8 00D4+00 1/1 0/0 0/0 .text SIGetResponseRaw */ +#ifdef NONMATCHING +static BOOL SIGetResponseRaw(s32 chan) { + u32 sr; + + sr = SIGetStatus(chan); + if (sr & SI_ERROR_RDST) { + InputBuffer[chan][0] = __SIRegs[3 * chan + 1]; + InputBuffer[chan][1] = __SIRegs[3 * chan + 2]; + InputBufferValid[chan] = TRUE; + return TRUE; + } + return FALSE; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void SIGetResponseRaw() { +static asm BOOL SIGetResponseRaw(s32 chan) { nofralloc #include "asm/dolphin/si/SIBios/SIGetResponseRaw.s" } #pragma pop +#endif /* 80345A3C-80345B00 34037C 00C4+00 0/0 4/4 0/0 .text SIGetResponse */ +#ifdef NONMATCHING +BOOL SIGetResponse(s32 chan, void* data) { + BOOL rc; + BOOL enabled; + + enabled = OSDisableInterrupts(); + SIGetResponseRaw(chan); + rc = InputBufferValid[chan]; + InputBufferValid[chan] = FALSE; + if (rc) { + ((u32*)data)[0] = InputBuffer[chan][0]; + ((u32*)data)[1] = InputBuffer[chan][1]; + } + OSRestoreInterrupts(enabled); + return rc; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void SIGetResponse() { +asm BOOL SIGetResponse(s32 chan, void* data) { nofralloc #include "asm/dolphin/si/SIBios/SIGetResponse.s" } #pragma pop +#endif /* 80345B00-80345B8C 340440 008C+00 1/1 0/0 0/0 .text AlarmHandler */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void AlarmHandler() { - nofralloc -#include "asm/dolphin/si/SIBios/AlarmHandler.s" +static void AlarmHandler(OSAlarm* alarm, OSContext* context) { + s32 chan; + SIPacket* packet; + + chan = alarm - Alarm; + packet = &Packet[chan]; + if (packet->chan != -1) { + if (__SITransfer(packet->chan, packet->output, packet->outputBytes, packet->input, + packet->inputBytes, packet->callback)) { + packet->chan = -1; + } + } } -#pragma pop /* 80345B8C-80345CF8 3404CC 016C+00 3/3 3/3 0/0 .text SITransfer */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void SITransfer() { - nofralloc -#include "asm/dolphin/si/SIBios/SITransfer.s" +BOOL SITransfer(s32 chan, void* output, u32 outputBytes, void* input, u32 inputBytes, + SICallback callback, OSTime delay) { + BOOL enabled; + SIPacket* packet = &Packet[chan]; + OSTime now; + OSTime fire; + + enabled = OSDisableInterrupts(); + if (packet->chan != -1 || Si.chan == chan) { + OSRestoreInterrupts(enabled); + return FALSE; + } + + now = __OSGetSystemTime(); + if (delay == 0) { + fire = now; + } else { + fire = XferTime[chan] + delay; + } + if (now < fire) { + delay = fire - now; + OSSetAlarm(&Alarm[chan], delay, AlarmHandler); + } else if (__SITransfer(chan, output, outputBytes, input, inputBytes, callback)) { + OSRestoreInterrupts(enabled); + return TRUE; + } + + packet->chan = chan; + packet->output = output; + packet->outputBytes = outputBytes; + packet->input = input; + packet->inputBytes = inputBytes; + packet->callback = callback; + packet->fire = fire; + + OSRestoreInterrupts(enabled); + return TRUE; } -#pragma pop /* ############################################################################################## */ /* 804516F4-804516F8 000BF4 0004+00 1/1 0/0 0/0 .sbss cmdTypeAndStatus$372 */ static u8 cmdTypeAndStatus_372[4]; /* 804516F8-80451700 000BF8 0004+04 1/1 1/1 0/0 .sbss __PADFixBits */ -extern u8 __PADFixBits[4 + 4 /* padding */]; -u8 __PADFixBits[4 + 4 /* padding */]; +extern u32 __PADFixBits; +u32 __PADFixBits; /* 80345CF8-80345F90 340638 0298+00 2/2 0/0 0/0 .text GetTypeCallback */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void GetTypeCallback() { +static asm void GetTypeCallback(s32 chan, u32 error, OSContext* context) { nofralloc #include "asm/dolphin/si/SIBios/GetTypeCallback.s" } #pragma pop /* 80345F90-80346154 3408D0 01C4+00 2/2 3/3 0/0 .text SIGetType */ +#ifdef NONMATCHING +u32 SIGetType(s32 chan) { + static u32 cmdTypeAndStatus; + BOOL enabled; + u32 type; + OSTime diff; + + enabled = OSDisableInterrupts(); + + type = Type[chan]; + diff = __OSGetSystemTime() - TypeTime[chan]; + if (Si.poll & (0x80 >> chan)) { + if (type != SI_ERROR_NO_RESPONSE) { + TypeTime[chan] = __OSGetSystemTime(); + OSRestoreInterrupts(enabled); + return type; + } else { + type = Type[chan] = SI_ERROR_BUSY; + } + } else if (diff <= OSMillisecondsToTicks(50) && type != SI_ERROR_NO_RESPONSE) { + OSRestoreInterrupts(enabled); + return type; + } else if (diff <= OSMillisecondsToTicks(75)) { + Type[chan] = SI_ERROR_BUSY; + } else { + type = Type[chan] = SI_ERROR_BUSY; + } + TypeTime[chan] = __OSGetSystemTime(); + + SITransfer(chan, &cmdTypeAndStatus, 1, &Type[chan], 3, GetTypeCallback, + OSMicrosecondsToTicks(65)); + + OSRestoreInterrupts(enabled); + return type; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void SIGetType() { +asm u32 SIGetType(s32 chan) { nofralloc #include "asm/dolphin/si/SIBios/SIGetType.s" } #pragma pop +#endif /* 80346154-80346290 340A94 013C+00 0/0 6/6 0/0 .text SIGetTypeAsync */ +// needs compiler epilogue patch +#ifdef NONMATCHING +u32 SIGetTypeAsync(s32 chan, SITypeAndStatusCallback callback) { + BOOL enabled; + u32 type; + + enabled = OSDisableInterrupts(); + type = SIGetType(chan); + if (Type[chan] & SI_ERROR_BUSY) { + int i; + + for (i = 0; i < 4; ++i) { + if (TypeCallback[chan][i] == callback) { + break; + } + if (TypeCallback[chan][i] == 0) { + TypeCallback[chan][i] = callback; + break; + } + } + } else { + callback(chan, type); + } + OSRestoreInterrupts(enabled); + return type; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void SIGetTypeAsync() { +asm u32 SIGetTypeAsync(s32 chan, SITypeAndStatusCallback callback) { nofralloc #include "asm/dolphin/si/SIBios/SIGetTypeAsync.s" } #pragma pop +#endif /* ############################################################################################## */ /* 803D1220-803D122C 02E340 000C+00 0/0 0/0 0/0 .data @457 */ + +// All of these strings are from the stripped `SIGetTypeString` function #pragma push #pragma force_active on SECTION_DATA static char lit_457[] = "No response"; diff --git a/libs/dolphin/si/SISamplingRate.c b/libs/dolphin/si/SISamplingRate.c index 4bf5ca3d4a..7a6ff1a28b 100644 --- a/libs/dolphin/si/SISamplingRate.c +++ b/libs/dolphin/si/SISamplingRate.c @@ -5,24 +5,14 @@ #include "dolphin/si/SISamplingRate.h" #include "dol2asm.h" -#include "dolphin/types.h" - -// -// Forward References: -// - -void SISetSamplingRate(); -void SIRefreshSamplingRate(); +#include "dolphin/si/SIBios.h" +#include "dolphin/vi/vi.h" // // External References: // -void OSReport(); -void OSDisableInterrupts(); -void OSRestoreInterrupts(); -void SISetXY(); -void VIGetTvFormat(); +u32 VIGetTvFormat(); // // Declarations: @@ -30,19 +20,17 @@ void VIGetTvFormat(); /* ############################################################################################## */ /* 803D12D0-803D1300 02E3F0 0030+00 1/1 0/0 0/0 .data XYNTSC */ -SECTION_DATA static u8 XYNTSC[48] = { - 0x00, 0xF6, 0x02, 0x00, 0x00, 0x0E, 0x13, 0x00, 0x00, 0x1E, 0x09, 0x00, 0x00, 0x2C, 0x06, 0x00, - 0x00, 0x34, 0x05, 0x00, 0x00, 0x41, 0x04, 0x00, 0x00, 0x57, 0x03, 0x00, 0x00, 0x57, 0x03, 0x00, - 0x00, 0x57, 0x03, 0x00, 0x00, 0x83, 0x02, 0x00, 0x00, 0x83, 0x02, 0x00, 0x00, 0x83, 0x02, 0x00, +static XY XYNTSC[12] = { + {263 - 17, 2}, {14, 19}, {30, 9}, {44, 6}, {52, 5}, {65, 4}, + {87, 3}, {87, 3}, {87, 3}, {131, 2}, {131, 2}, {131, 2}, }; /* 803D1300-803D1330 02E420 0030+00 0/1 0/0 0/0 .data XYPAL */ #pragma push #pragma force_active on -SECTION_DATA static u8 XYPAL[48] = { - 0x01, 0x28, 0x02, 0x00, 0x00, 0x0F, 0x15, 0x00, 0x00, 0x1D, 0x0B, 0x00, 0x00, 0x2D, 0x07, 0x00, - 0x00, 0x34, 0x06, 0x00, 0x00, 0x3F, 0x05, 0x00, 0x00, 0x4E, 0x04, 0x00, 0x00, 0x68, 0x03, 0x00, - 0x00, 0x68, 0x03, 0x00, 0x00, 0x68, 0x03, 0x00, 0x00, 0x68, 0x03, 0x00, 0x00, 0x9C, 0x02, 0x00, +static XY XYPAL[12] = { + {313 - 17, 2}, {15, 21}, {29, 11}, {45, 7}, {52, 6}, {63, 5}, + {78, 4}, {104, 3}, {104, 3}, {104, 3}, {104, 3}, {156, 2}, }; #pragma pop @@ -53,24 +41,54 @@ SECTION_DATA static char lit_16[] = "SISetSamplingRate: unknown TV format. Use d #pragma pop /* 80451700-80451708 000C00 0004+04 2/2 0/0 0/0 .sbss SamplingRate */ -static u8 SamplingRate[4 + 4 /* padding */]; +static u32 SamplingRate; /* 80346290-80346374 340BD0 00E4+00 1/1 1/1 0/0 .text SISetSamplingRate */ +// needs compiler epilogue patch +#ifdef NONMATCHING +void SISetSamplingRate(u32 msec) { + XY* xy; + BOOL enabled; + + if (msec > 11) { + msec = 11; + } + + enabled = OSDisableInterrupts(); + + SamplingRate = msec; + + switch (VIGetTvFormat()) { + case VI_NTSC: + case VI_MPAL: + case VI_EURGB60: + xy = XYNTSC; + break; + case VI_PAL: + xy = XYPAL; + break; + default: + OSReport("SISetSamplingRate: unknown TV format. Use default."); + msec = 0; + xy = XYNTSC; + break; + } + + SISetXY((__VIRegs[54] & 1 ? 2u : 1u) * xy[msec].line, xy[msec].count); + OSRestoreInterrupts(enabled); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void SISetSamplingRate() { +asm void SISetSamplingRate(u32 msec) { nofralloc #include "asm/dolphin/si/SISamplingRate/SISetSamplingRate.s" } #pragma pop +#endif /* 80346374-80346398 340CB4 0024+00 0/0 2/2 0/0 .text SIRefreshSamplingRate */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void SIRefreshSamplingRate() { - nofralloc -#include "asm/dolphin/si/SISamplingRate/SIRefreshSamplingRate.s" +void SIRefreshSamplingRate() { + SISetSamplingRate(SamplingRate); } -#pragma pop diff --git a/libs/dolphin/vi/Makefile b/libs/dolphin/vi/Makefile index 08cfcd0805..a196a51ffa 100644 --- a/libs/dolphin/vi/Makefile +++ b/libs/dolphin/vi/Makefile @@ -9,6 +9,14 @@ LIBVI_A_O_FILES := \ $(BUILD_DIR)/libs/dolphin/vi/vi.o \ LIBVI_A_CFLAGS := \ + -Cpp_exceptions off \ + -proc gekko \ + -fp hard \ + -nodefaults \ + -str reuse \ + -RTTI off \ + -maxerrors 5 \ + -enum int $(INCLUDES) \ -O4,p \ -lang=c \ @@ -27,5 +35,5 @@ $(BUILD_DIR)/libs/dolphin/vi/%.o: libs/dolphin/vi/%.c @mkdir -p $(@D) @echo building... $< @$(ICONV) -f UTF-8 -t CP932 < $< > $(basename $@).c - @$(WINE) tools/mwcc_compiler/1.2.5/mwcceppc.exe $(CFLAGS) $(LIBVI_A_CFLAGS) -c -o $@ $(basename $@).c + @$(WINE) tools/mwcc_compiler/1.2.5/mwcceppc.exe $(LIBVI_A_CFLAGS) -c -o $@ $(basename $@).c diff --git a/rel/d/a/d_a_movie_player/d_a_movie_player.cpp b/rel/d/a/d_a_movie_player/d_a_movie_player.cpp index 404daa344f..56804c2584 100644 --- a/rel/d/a/d_a_movie_player/d_a_movie_player.cpp +++ b/rel/d/a/d_a_movie_player/d_a_movie_player.cpp @@ -224,7 +224,6 @@ extern "C" void free__7JKRHeapFPvP7JKRHeap(); extern "C" void PPCMfhid2(); extern "C" void LCEnable(); extern "C" void LCDisable(); -extern "C" void DVDCancel(); extern "C" void VISetPostRetraceCallback(); extern "C" void VIGetNextField(); extern "C" void VIGetTvFormat(); diff --git a/src/d/a/d_a_alink_hook.inc b/src/d/a/d_a_alink_hook.inc index 6e6f036a87..ad5abe3635 100644 --- a/src/d/a/d_a_alink_hook.inc +++ b/src/d/a/d_a_alink_hook.inc @@ -313,46 +313,161 @@ void daAlink_c::setHookshotReadyMaterial() { } /* 801090EC-80109170 103A2C 0084+00 8/8 0/0 0/0 .text initHookshotUpperAnimeSpeed__9daAlink_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::initHookshotUpperAnimeSpeed(int param_0) { - nofralloc -#include "asm/d/a/d_a_alink/initHookshotUpperAnimeSpeed__9daAlink_cFi.s" +int daAlink_c::initHookshotUpperAnimeSpeed(int param_0) { + if (checkHookshotWait()) { + if (param_0) { + f32 tmp_0 = FLOAT_LABEL(lit_6108); + mUpperFrameCtrl[2].setRate(tmp_0); + mUpperFrameCtrl[2].setFrame(tmp_0); + getNowAnmPackUpper(UPPER_2)->setFrame(tmp_0); + } else { + setWaterInAnmRate(&mUpperFrameCtrl[2], daAlinkHIO_hookshot_c0::m.mWaitAnmSpeed); + } + + return 1; + } + + return 0; } -#pragma pop /* 80109170-801091E4 103AB0 0074+00 4/4 0/0 0/0 .text initHookshotReady__9daAlink_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::initHookshotReady() { - nofralloc -#include "asm/d/a/d_a_alink/initHookshotReady__9daAlink_cFv.s" +void daAlink_c::initHookshotReady() { + mItemMode = 1; + + f32 tmp_0 = FLOAT_LABEL(lit_6108); + field_0x33e0 = tmp_0; + + dComIfGp_getVibration().StartShock(1, 1, cXyz(tmp_0, lit_6040, tmp_0)); + + field_0x3018 = 3; + field_0x3494 = lit_6041; } -#pragma pop /* 801091E4-80109284 103B24 00A0+00 1/1 0/0 0/0 .text setHookshotReadyAnime__9daAlink_cFv */ #pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daAlink_c::setHookshotReadyAnime() { - nofralloc -#include "asm/d/a/d_a_alink/setHookshotReadyAnime__9daAlink_cFv.s" +#pragma optimization_level 2 +void daAlink_c::setHookshotReadyAnime() { + f32 speed; + if (!i_checkAttentionLock() && mFastShotTime == 0) { + speed = FLOAT_LABEL(lit_6108); + } else { + speed = daAlinkHIO_hookshot_c0::m.mWaitAnmSpeed; + } + + setUpperAnimeBaseSpeed(0x18D, speed, lit_6109); + field_0x3020 = 0; + initHookshotReady(); } #pragma pop /* 80109284-801095C8 103BC4 0344+00 3/3 0/0 0/0 .text checkUpperItemActionHookshot__9daAlink_cFv */ +// checkAttentionLock +#ifdef NONMATCHING +int daAlink_c::checkUpperItemActionHookshot() { + if (checkHookshotWait()) { + mSearchBallScale = __float_max[0]; + } + + if (mItemMode == 1) { + if (!itemButton() && field_0x3018 == 0 && checkReadyItem()) { + mItemMode = 2; + field_0x3026 = 0; + field_0x3494 = lit_6041; + field_0x284c.clearData(); + cancelLockAt(); + field_0x2804 = NULL; + + if (mProcID == PROC_HOOKSHOT_ROOF_SHOOT || mProcID == PROC_HOOKSHOT_WALL_SHOOT) { + daAlink_ANM anmID; + if (mProcID == PROC_HOOKSHOT_ROOF_SHOOT) { + if (field_0x3020 == 0) { + anmID = ANM_HOOKSHOT_HANG_SHOOT_RIGHT; + } else { + anmID = ANM_HOOKSHOT_HANG_SHOOT_LEFT; + } + } else if (field_0x3020 == 0) { + anmID = ANM_HOOKSHOT_WALL_SHOOT_RIGHT; + } else { + anmID = ANM_HOOKSHOT_WALL_SHOOT_LEFT; + } + + setSingleAnimeBaseMorf(anmID, FLOAT_LABEL(lit_6108)); + } else if (i_checkModeFlg(0x40400)) { + setUpperAnimeParam(0x18C, UPPER_2, &daAlinkHIO_hookshot_c0::m.mShootAnm); + + if (i_checkModeFlg(0x40000)) { + mNormalSpeed = FLOAT_LABEL(lit_6108); + } + } else { + f32 tmp_0 = FLOAT_LABEL(lit_6108); + mUpperFrameCtrl[2].setRate(tmp_0); + mUpperFrameCtrl[2].setFrame(tmp_0); + getNowAnmPackUpper(UPPER_2)->setFrame(tmp_0); + + mNormalSpeed = tmp_0; + onModeFlg(1); + mSpeedModifier = tmp_0; + mNowAnmPackUpper[2].setRatio(tmp_0); + + setSingleAnimeParam(ANM_HOOKSHOT_SHOOT, &daAlinkHIO_hookshot_c0::m.mShootAnm); + } + + if (!i_checkNoResetFlg3(FLG3_UNK_4)) { + f32 tmp_0 = FLOAT_LABEL(lit_6108); + dComIfGp_getVibration().StartQuake(1, 1, cXyz(tmp_0, lit_6040, tmp_0)); + i_onNoResetFlg3(FLG3_UNK_4); + } + + return 1; + } + } else if (mItemMode == 0) { + if (i_checkModeFlg(0x400) && i_checkAttentionLock() && mTargetedActor == NULL) { + resetUpperAnime(UPPER_2, lit_6109); + dComIfGp_clearPlayerStatus0(0, 0x4000); + return 1; + } + + if (checkReadyItem() && itemButton()) { + initHookshotReady(); + } + } else if (mItemMode == 3) { + if (checkReadyItem() && itemTrigger()) { + mItemMode = 6; + } + + checkNextActionHookshot(); + return 1; + } else if (mItemMode == 6) { + checkNextActionHookshot(); + return 1; + } else if (mItemMode == 5 || mItemMode == 4) { + if (field_0x3026 != 0) { + field_0x3026--; + setHookshotTopPosFly(); + return 1; + } + + return procHookshotFlyInit(); + } + + if (field_0x3018 > 0) { + field_0x3018--; + } + + return cancelUpperItemReadyAnime(0); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daAlink_c::checkUpperItemActionHookshot() { +asm int daAlink_c::checkUpperItemActionHookshot() { nofralloc #include "asm/d/a/d_a_alink/checkUpperItemActionHookshot__9daAlink_cFv.s" } #pragma pop +#endif /* 801095C8-801097A0 103F08 01D8+00 7/7 0/0 0/0 .text checkNextActionHookshot__9daAlink_cFv */ #pragma push diff --git a/src/d/com/d_com_inf_game.cpp b/src/d/com/d_com_inf_game.cpp index d85e252e31..1c6dfc1dcb 100644 --- a/src/d/com/d_com_inf_game.cpp +++ b/src/d/com/d_com_inf_game.cpp @@ -438,701 +438,647 @@ void dComIfG_play_c::setStartStage(dStage_startStage_c* i_startStage) { } /* 8002B3F4-8002B434 025D34 0040+00 1/1 0/0 0/0 .text dComIfG_get_timelayer__FPi */ -void dComIfG_get_timelayer(int* i_layer) { +void dComIfG_get_timelayer(int* o_layer) { if (dKy_daynight_check()) { - *i_layer += 1; + *o_layer += 1; } } -/* ############################################################################################## */ -/* 80378F38-80378F38 005598 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80378F38 = "D_MN11"; -SECTION_DEAD static char const* const stringBase_80378F3F = "F_SP114"; -SECTION_DEAD static char const* const stringBase_80378F47 = "F_SP108"; -SECTION_DEAD static char const* const stringBase_80378F4F = "R_SP108"; -SECTION_DEAD static char const* const stringBase_80378F57 = "F_SP109"; -SECTION_DEAD static char const* const stringBase_80378F5F = "F_SP111"; -SECTION_DEAD static char const* const stringBase_80378F67 = "R_SP109"; -SECTION_DEAD static char const* const stringBase_80378F6F = "R_SP209"; -SECTION_DEAD static char const* const stringBase_80378F77 = "F_SP110"; -SECTION_DEAD static char const* const stringBase_80378F7F = "R_SP110"; -SECTION_DEAD static char const* const stringBase_80378F87 = "F_SP115"; -SECTION_DEAD static char const* const stringBase_80378F8F = "F_SP116"; -SECTION_DEAD static char const* const stringBase_80378F97 = "R_SP116"; -SECTION_DEAD static char const* const stringBase_80378F9F = "R_SP115"; -SECTION_DEAD static char const* const stringBase_80378FA7 = "F_SP113"; -SECTION_DEAD static char const* const stringBase_80378FAF = "F_SP126"; -SECTION_DEAD static char const* const stringBase_80378FB7 = "F_SP124"; -SECTION_DEAD static char const* const stringBase_80378FBF = "F_SP112"; -SECTION_DEAD static char const* const stringBase_80378FC7 = "F_SP103"; -SECTION_DEAD static char const* const stringBase_80378FCF = "R_SP01"; -SECTION_DEAD static char const* const stringBase_80378FD6 = "F_SP104"; -SECTION_DEAD static char const* const stringBase_80378FDE = "F_SP00"; -SECTION_DEAD static char const* const stringBase_80378FE5 = "F_SP121"; -SECTION_DEAD static char const* const stringBase_80378FED = "F_SP122"; -SECTION_DEAD static char const* const stringBase_80378FF5 = "F_SP128"; -SECTION_DEAD static char const* const stringBase_80378FFD = "R_SP160"; -SECTION_DEAD static char const* const stringBase_80379005 = "F_SP117"; -SECTION_DEAD static char const* const stringBase_8037900D = "F_SP118"; -SECTION_DEAD static char const* const stringBase_80379015 = "D_SB10"; -SECTION_DEAD static char const* const stringBase_8037901C = "R_SP107"; -SECTION_DEAD static char const* const stringBase_80379024 = "D_MN09"; -SECTION_DEAD static char const* const stringBase_8037902B = "F_SP127"; -SECTION_DEAD static char const* const stringBase_80379033 = "R_SP127"; -SECTION_DEAD static char const* const stringBase_8037903B = "D_MN08A"; -#pragma pop - /* 8002B434-8002C950 025D74 151C+00 1/1 1/1 0/0 .text * getLayerNo_common_common__14dComIfG_play_cFPCcii */ -// only issue should be regalloc -#ifdef NONMATCHING -int dComIfG_play_c::getLayerNo_common_common(const char* stageName, int roomId, int layer) { - if (layer < 0) { - layer = -1; +int dComIfG_play_c::getLayerNo_common_common(const char* i_stageName, int i_roomNo, int o_layer) { + if (o_layer < 0) { + o_layer = -1; // Stage is in a Twilight state - if (dKy_darkworld_stage_check(stageName, roomId) == 1) { - layer = 14; + if (dKy_darkworld_stage_check(i_stageName, i_roomNo) == TRUE) { + o_layer = 14; } - if (layer < 13) { + if (o_layer < 13) { // Stage is Snowpeak Ruins or Snowpeak - if (!strcmp(stageName, "D_MN11") || !strcmp(stageName, "F_SP114")) { + if (!strcmp(i_stageName, "D_MN11") || !strcmp(i_stageName, "F_SP114")) { // Cleared Snowpeak Ruins if (i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[266])) { - layer = 3; + o_layer = 3; } // Talked with Yeta after giving Cheese else if (i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[163])) { - layer = 2; + o_layer = 2; } // Talked with Yeta after giving Pumpkin else if (i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[162])) { - layer = 1; + o_layer = 1; } } // Stage is Faron Woods - else if (!strcmp(stageName, "F_SP108")) { + else if (!strcmp(i_stageName, "F_SP108")) { // Cleared Snowpeak Ruins if (i_dComIfGs_isEventBit(0x2008)) { - layer = 5; + o_layer = 5; } // Completed Midna's Desperate Hour else if (i_dComIfGs_isEventBit(0x1E08)) { - layer = 3; + o_layer = 3; } // Cleared Forest Temple else if (i_dComIfGs_isEventBit(0x0602)) { - layer = 2; + o_layer = 2; } // Haven't finished Ordon Day 2 else if (!i_dComIfGs_isEventBit(0x4510)) { - layer = 1; + o_layer = 1; } } // Stage is Faron Woods Interiors - else if (!strcmp(stageName, "R_SP108")) { + else if (!strcmp(i_stageName, "R_SP108")) { // Cleared Forest Temple if (i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[55])) { - layer = 2; + o_layer = 2; } // Haven't finished Ordon Day 2 else if (!i_dComIfGs_isEventBit(0x4510)) { - layer = 1; + o_layer = 1; } } // Stage is Kakariko Village or Kakariko Graveyard - else if (!strcmp(stageName, "F_SP109") || !strcmp(stageName, "F_SP111")) { + else if (!strcmp(i_stageName, "F_SP109") || !strcmp(i_stageName, "F_SP111")) { // Obtained Zora's Armor if (i_dComIfGs_isEventBit(0x0804)) { - layer = 2; - dComIfG_get_timelayer(&layer); + o_layer = 2; + dComIfG_get_timelayer(&o_layer); } // Finished Telma Wagon Escort else if (i_dComIfGs_isEventBit(0x0810)) { - layer = 4; + o_layer = 4; } // Watched cutscene after leaving Goron Mines else if (i_dComIfGs_isEventBit(0x1320)) { - layer = 2; - dComIfG_get_timelayer(&layer); + o_layer = 2; + dComIfG_get_timelayer(&o_layer); } // Cleared Goron Mines else if (i_dComIfGs_isEventBit(0x0701)) { - layer = 12; + o_layer = 12; } // Defeated King Bulblin 1 else if (i_dComIfGs_isEventBit(0x0A08)) { - layer = 2; - dComIfG_get_timelayer(&layer); + o_layer = 2; + dComIfG_get_timelayer(&o_layer); } // King Bulblin 1 trigger activated else if (i_dComIfGs_isEventBit(0x0608)) { - layer = 1; + o_layer = 1; } } // Stage is Kakariko Village Interiors or Graveyard Interiors - else if (!strcmp(stageName, "R_SP109") || !strcmp(stageName, "R_SP209")) { + else if (!strcmp(i_stageName, "R_SP109") || !strcmp(i_stageName, "R_SP209")) { // Stage is Kakariko Interiors and room is Barnes shop and Cleared Lakebed Temple - if (!strcmp(stageName, "R_SP109") && roomId == 1 && i_dComIfGs_isEventBit(0x0904)) { - layer = 4; - dComIfG_get_timelayer(&layer); - + if (!strcmp(i_stageName, "R_SP109") && i_roomNo == 1 && i_dComIfGs_isEventBit(0x0904)) { + o_layer = 4; + dComIfG_get_timelayer(&o_layer); } else { // Defeated King Bulblin 1 if (i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[85])) { - layer = 2; - dComIfG_get_timelayer(&layer); + o_layer = 2; + dComIfG_get_timelayer(&o_layer); } // King Bulblin 1 trigger activated else if (i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[53])) { - layer = 1; + o_layer = 1; } } } // Stage is Death Mountain - else if (!strcmp(stageName, "F_SP110")) { + else if (!strcmp(i_stageName, "F_SP110")) { // Cleared Goron Mines if (i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[64])) { - layer = 2; + o_layer = 2; } } // Stage is Death Mountain Interiors - else if (!strcmp(stageName, "R_SP110")) { + else if (!strcmp(i_stageName, "R_SP110")) { // Returned Wood Statue to Ilia if (i_dComIfGs_isEventBit(0x2320)) { - layer = 3; + o_layer = 3; } // Cleared Temple of Time else if (i_dComIfGs_isEventBit(0x2004)) { - layer = 4; + o_layer = 4; } // Obtained Master Sword else if (i_dComIfGs_isEventBit(0x2020)) { - layer = 2; + o_layer = 2; } // Cleared Goron Mines else if (i_dComIfGs_isEventBit(0x0701)) { - layer = 1; + o_layer = 1; } } // Stage is Lake Hylia, Castle Town, Telma's Bar, or R_SP115 (removed) - else if (!strcmp(stageName, "F_SP115") || !strcmp(stageName, "F_SP116") || - (!strcmp(stageName, "R_SP116") && roomId == 5) || - !strcmp(stageName, "R_SP115")) { + else if (!strcmp(i_stageName, "F_SP115") || !strcmp(i_stageName, "F_SP116") || + (!strcmp(i_stageName, "R_SP116") && i_roomNo == 5) || + !strcmp(i_stageName, "R_SP115")) { // Stage is Lake Hylia and room is Lake - if (!strcmp(stageName, "F_SP115") && roomId == 0) { + if (!strcmp(i_stageName, "F_SP115") && i_roomNo == 0) { // Repaired Sky Cannon if (i_dComIfGs_isEventBit(0x3B08)) { - layer = 3; + o_layer = 3; } // Warped Sky Cannon to Lake Hylia else if (i_dComIfGs_isEventBit(0x3120)) { - layer = 1; + o_layer = 1; } // Cleared Lakebed Temple else if (i_dComIfGs_isEventBit(0x0904)) { - layer = 2; + o_layer = 2; } } // Stage is Telma's Bar and room is Bar and Obtained Master Sword - else if (!strcmp(stageName, "R_SP116") && roomId == 5 && + else if (!strcmp(i_stageName, "R_SP116") && i_roomNo == 5 && i_dComIfGs_isEventBit(0x2020)) { - layer = 4; + o_layer = 4; } // Completed Midna's Desperate Hour and Stage is Castle Town - else if (i_dComIfGs_isEventBit(0x1E08) && !strcmp(stageName, "F_SP116")) { + else if (i_dComIfGs_isEventBit(0x1E08) && !strcmp(i_stageName, "F_SP116")) { // Room is not East, South, or North Castle Town - if (roomId != 4 && roomId != 3 && roomId != 1) { - layer = 0; + if (i_roomNo != 4 && i_roomNo != 3 && i_roomNo != 1) { + o_layer = 0; } else { - layer = 1; + o_layer = 1; } } else { // Cleared Lakebed Temple if (i_dComIfGs_isEventBit(0x0904)) { // Stage is Lake Hylia and room is Fountain and haven't started Midna's // Desperate Hour - if ((!strcmp(stageName, "F_SP115") && roomId == 1) && + if ((!strcmp(i_stageName, "F_SP115") && i_roomNo == 1) && !i_dComIfGs_isEventBit(0x0C01)) { - layer = 9; + o_layer = 9; } else { - layer = 2; + o_layer = 2; } } else { // Stage is Castle Town and room is South Castle Town and Finished Telma // Wagon Escort - if ((!strcmp(stageName, "F_SP116") && roomId == 3) && + if ((!strcmp(i_stageName, "F_SP116") && i_roomNo == 3) && i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[68])) { - layer = 1; + o_layer = 1; } } } } // Stage is Zora's Domain - else if (!strcmp(stageName, "F_SP113")) { + else if (!strcmp(i_stageName, "F_SP113")) { // Cleared Snowpeak Ruins if (i_dComIfGs_isEventBit(0x2008)) { - layer = 2; + o_layer = 2; } } // Stage is Upper Zora's River - else if (!strcmp(stageName, "F_SP126")) { + else if (!strcmp(i_stageName, "F_SP126")) { // Unlocked Iza's River Ride (1) if (i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[95])) { - layer = 1; + o_layer = 1; } } // Stage is Gerudo Desert and room is Desert - else if (!strcmp(stageName, "F_SP124") && roomId == 0) { - layer = 8; + else if (!strcmp(i_stageName, "F_SP124") && i_roomNo == 0) { + o_layer = 8; // Used Sky Cannon to go to Desert if (i_dComIfGs_isEventBit(0x4008)) { - layer = 0; + o_layer = 0; } } // Stage is Zora's River - else if (!strcmp(stageName, "F_SP112")) { + else if (!strcmp(i_stageName, "F_SP112")) { // Unlocked Iza's River Ride (1) if (i_dComIfGs_isEventBit(0x0B01)) { - layer = 1; + o_layer = 1; } // Started Iza's River Ride (1) else if (i_dComIfGs_isEventBit(0x0902)) { - layer = 2; + o_layer = 2; } } // Stage is Ordon Village - else if (!strcmp(stageName, "F_SP103")) { + else if (!strcmp(i_stageName, "F_SP103")) { // Room is Main Village - if (roomId == 0) { + if (i_roomNo == 0) { // Tamed Epona if (i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[56])) { - layer = 4; - dComIfG_get_timelayer(&layer); + o_layer = 4; + dComIfG_get_timelayer(&o_layer); } // Cleared Faron Twilight else if (dComIfGs_isDarkClearLV(0)) { - layer = 2; - dComIfG_get_timelayer(&layer); + o_layer = 2; + dComIfG_get_timelayer(&o_layer); } // Escaped Hyrule Castle Sewers (1st Time) else if (i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[47])) { - layer = 1; + o_layer = 1; } // Finished Ordon Day 2 else if (i_dComIfGs_isEventBit(0x4510)) { - layer = 7; + o_layer = 7; } // Finished Ordon Day 1 else if (i_dComIfGs_isEventBit(0x4A40)) { - layer = 0; + o_layer = 0; } else { - layer = 6; + o_layer = 6; } } // Room is Outside Link's House - else if (roomId == 1) { + else if (i_roomNo == 1) { // Cleared Faron Twilight if (dComIfGs_isDarkClearLV(0)) { - layer = 2; + o_layer = 2; } // Escaped Hyrule Castle Sewers (1st Time) else if (i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[47])) { - layer = 1; + o_layer = 1; } // Finished Ordon Day 2 else if (i_dComIfGs_isEventBit(0x4510)) { - layer = 0; + o_layer = 0; } // Finished Ordon Day 1 else if (i_dComIfGs_isEventBit(0x4A40)) { - layer = 4; + o_layer = 4; } else { - layer = 3; + o_layer = 3; } } } // Stage is Ordon Village Interiors - else if (!strcmp(stageName, "R_SP01")) { + else if (!strcmp(i_stageName, "R_SP01")) { // Room is Sera's Shop - if (roomId == 1) { + if (i_roomNo == 1) { // Cleared Faron Twilight if (dComIfGs_isDarkClearLV(0)) { - layer = 2; + o_layer = 2; } } // Room is Shield house - else if (roomId == 2) { + else if (i_roomNo == 2) { // Watched cutscene after defeating King Bulblin 1 if (i_dComIfGs_isEventBit(0x0780)) { - layer = 3; + o_layer = 3; } // Cleared Faron Twilight else if (dComIfGs_isDarkClearLV(0)) { - layer = 2; + o_layer = 2; } // Escaped Hyrule Castle Sewers (1st Time) else if (i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[47])) { - layer = 1; + o_layer = 1; } } // Room is Rusl and Uli's house - else if (roomId == 5) { + else if (i_roomNo == 5) { // Tamed Epona if (i_dComIfGs_isEventBit(0x0601)) { - layer = 4; + o_layer = 4; } // Cleared Faron Twilight else if (dComIfGs_isDarkClearLV(0)) { - layer = 2; + o_layer = 2; } } } // Stage is Ordon Spring - else if (!strcmp(stageName, "F_SP104")) { + else if (!strcmp(i_stageName, "F_SP104")) { // Room is Ordon Spring - if (roomId == 1) { + if (i_roomNo == 1) { // Cleared Faron Twilight if (dComIfGs_isDarkClearLV(0)) { - layer = 2; + o_layer = 2; } // Escaped Hyrule Castle Sewers (1st Time) else if (i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[47])) { - layer = 4; + o_layer = 4; } // Finished Ordon Day 2 else if (i_dComIfGs_isEventBit(0x4510)) { - layer = 0; + o_layer = 0; } // Finished Ordon Day 1 else if (i_dComIfGs_isEventBit(0x4A20)) { - layer = 3; + o_layer = 3; } else { - layer = 1; + o_layer = 1; } } // Cleared Faron Twilight else if (dComIfGs_isDarkClearLV(0)) { - layer = 2; + o_layer = 2; } // Escaped Hyrule Castle Sewers (1st Time) else if (i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[47])) { - layer = 4; + o_layer = 4; } } // Stage is Ordon Ranch - else if (!strcmp(stageName, "F_SP00")) { + else if (!strcmp(i_stageName, "F_SP00")) { // Cleared Faron Twilight if (dComIfGs_isDarkClearLV(0)) { - layer = 2; - dComIfG_get_timelayer(&layer); + o_layer = 2; + dComIfG_get_timelayer(&o_layer); } // Escaped Hyrule Castle Sewers (1st Time) else if (i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[47])) { - layer = 1; + o_layer = 1; } // Watched cutscene after herding goats on Ordon Day 3 else if (i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[169])) { - layer = 10; + o_layer = 10; } // Finished Ordon Day 2 else if (i_dComIfGs_isEventBit(0x4510)) { - layer = 9; + o_layer = 9; } // Finished Ordon Day 1 else if (i_dComIfGs_isEventBit(0x4A40)) { - layer = 11; + o_layer = 11; } else { - layer = 12; + o_layer = 12; } } // Stage is Hyrule Field - else if (!strcmp(stageName, "F_SP121")) { + else if (!strcmp(i_stageName, "F_SP121")) { // Completed Midna's Desperate Hour if (i_dComIfGs_isEventBit(0x1E08)) { - layer = 6; + o_layer = 6; } // Started Midna's Desperate Hour else if (i_dComIfGs_isEventBit(0x0C01)) { - layer = 4; + o_layer = 4; } // Finished Telma Wagon Escort else if (i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[68])) { - layer = 0; + o_layer = 0; } else if (dComIfGs_isTmpBit(0x0601)) { if (dComIfGs_isTmpBit(0x0602)) { - layer = 2; + o_layer = 2; } else { - layer = 3; + o_layer = 3; } } } // Stage is Outside Castle Town - else if (!strcmp(stageName, "F_SP122")) { + else if (!strcmp(i_stageName, "F_SP122")) { // Room is Outside Castle Town - West - if (roomId == 8) { + if (i_roomNo == 8) { // Completed Midna's Desperate Hour if (i_dComIfGs_isEventBit(0x1E08)) { - layer = 6; + o_layer = 6; } // Started Midna's Desperate Hour else if (i_dComIfGs_isEventBit(0x0C01)) { - layer = 4; + o_layer = 4; } } // Room is Outside Castle Town - South - else if (roomId == 16) { + else if (i_roomNo == 16) { // Obtained Wood Statue if (i_dComIfGs_isEventBit(0x2204)) { - layer = 6; + o_layer = 6; } // Talked to Louise after getting Medicine Scent else if (i_dComIfGs_isEventBit(0x2102)) { - layer = 1; + o_layer = 1; } // Completed Midna's Desperate Hour else if (i_dComIfGs_isEventBit(0x1E08)) { - layer = 6; + o_layer = 6; } // Started Midna's Desperate Hour else if (i_dComIfGs_isEventBit(0x0C01)) { - layer = 4; + o_layer = 4; } } // Room is Outside Castle Town - East - else if (roomId == 17) { + else if (i_roomNo == 17) { // Completed Midna's Desperate Hour if (i_dComIfGs_isEventBit(0x1E08)) { - layer = 0; + o_layer = 0; } // Started Midna's Desperate Hour else if (i_dComIfGs_isEventBit(0x0C01)) { - layer = 4; + o_layer = 4; } } } // Stage is Hidden Village - else if (!strcmp(stageName, "F_SP128")) { + else if (!strcmp(i_stageName, "F_SP128")) { if (i_dComIfGs_isEventBit(0x2320)) { - layer = 1; + o_layer = 1; } } // Stage is Castle Town Interiors - else if (!strcmp(stageName, "R_SP160")) { + else if (!strcmp(i_stageName, "R_SP160")) { // Room is Jovani's house - if (roomId == 5) { + if (i_roomNo == 5) { // Completed Midna's Desperate Hour if (i_dComIfGs_isEventBit(0x1E08)) { - layer = 0; + o_layer = 0; } else { - layer = 1; + o_layer = 1; } } // Fundraised Malo Mart Castle Town branch else if (i_dComIfGs_isEventBit(0x2210)) { - layer = 1; + o_layer = 1; } } // Stage is Sacred Grove - else if (!strcmp(stageName, "F_SP117")) { + else if (!strcmp(i_stageName, "F_SP117")) { // Cleared Snowpeak Ruins if (i_dComIfGs_isEventBit(0x2008)) { - layer = 2; + o_layer = 2; } } // Stage is Bulblin Camp - else if (!strcmp(stageName, "F_SP118")) { + else if (!strcmp(i_stageName, "F_SP118")) { // Fixed the Mirror of Twilight if (i_dComIfGs_isEventBit(0x2B08)) { - layer = 3; + o_layer = 3; } // Cleared Arbiter's Grounds else if (i_dComIfGs_isEventBit(0x2010)) { - layer = 2; + o_layer = 2; } // Escaped the burning tent else if (i_dComIfGs_isEventBit(0x0B40)) { - layer = 1; + o_layer = 1; } } // Stage is Faron Woods Cave - else if (!strcmp(stageName, "D_SB10")) { + else if (!strcmp(i_stageName, "D_SB10")) { // Finished Ordon Day 2 if (i_dComIfGs_isEventBit(0x4510)) { - layer = 1; + o_layer = 1; } } // Stage is Hyrule Castle Sewers - else if (!strcmp(stageName, "R_SP107")) { + else if (!strcmp(i_stageName, "R_SP107")) { if (dComIfGs_isTransformLV(3)) { - layer = 13; + o_layer = 13; } } // Stage is Hyrule Castle - else if (!strcmp(stageName, "D_MN09")) { + else if (!strcmp(i_stageName, "D_MN09")) { // Room is not Entrance, Outside Left Wing, or Outside Right Wing - if (roomId != 11 && roomId != 13 && roomId != 14) { - layer = 1; + if (i_roomNo != 11 && i_roomNo != 13 && i_roomNo != 14) { + o_layer = 1; } } // Stage is Fishing Pond or Hena's Hut - else if (!strcmp(stageName, "F_SP127") || !strcmp(stageName, "R_SP127")) { + else if (!strcmp(i_stageName, "F_SP127") || !strcmp(i_stageName, "R_SP127")) { switch (g_env_light.field_0x12fe) { case 1: - layer = 0; + o_layer = 0; break; case 2: - layer = 1; + o_layer = 1; break; case 3: - layer = 2; + o_layer = 2; break; case 4: - layer = 3; + o_layer = 3; break; } } } } - if (layer == 14) { - int tmp = layer; + if (o_layer == 14) { + int roomNo = i_roomNo; // Warped meteor to Zora's Domain if (i_dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[65])) { // Stage is Zora's River, Zora's Domain, Lake Hylia, Castle Town, Telma's Bar, R_SP115, // Hyrule Field, Upper Zora's River, or Outside Castle Town - if (!strcmp(stageName, "F_SP112") || !strcmp(stageName, "F_SP113") || - !strcmp(stageName, "F_SP115") || !strcmp(stageName, "F_SP116") || - (!strcmp(stageName, "R_SP116") && roomId == 5) || !strcmp(stageName, "R_SP115") || - !strcmp(stageName, "F_SP121") || !strcmp(stageName, "F_SP126") || - !strcmp(stageName, "F_SP122")) { + if (!strcmp(i_stageName, "F_SP112") || !strcmp(i_stageName, "F_SP113") || + !strcmp(i_stageName, "F_SP115") || !strcmp(i_stageName, "F_SP116") || + (!strcmp(i_stageName, "R_SP116") && i_roomNo == 5) || !strcmp(i_stageName, "R_SP115") || + !strcmp(i_stageName, "F_SP121") || !strcmp(i_stageName, "F_SP126") || + !strcmp(i_stageName, "F_SP122")) { // Stage is Hyrule Field - if (!strcmp(stageName, "F_SP121")) { - if (tmp >= 9 && tmp <= 14) { - layer = 13; + if (!strcmp(i_stageName, "F_SP121")) { + if (roomNo >= 9 && roomNo <= 14) { + o_layer = 13; } } else { - layer = 13; + o_layer = 13; } } } // Stage is Hyrule Castle Sewers and room is Prison Cell - if (!strcmp(stageName, "R_SP107") && roomId == 0) { + if (!strcmp(i_stageName, "R_SP107") && i_roomNo == 0) { // Haven't been to Hyrule Castle Sewers if (!i_dComIfGs_isEventBit(0x4D08)) { - layer = 11; + o_layer = 11; } } // Stage and room is Zant Throne Room - else if (!strcmp(stageName, "D_MN08A") && roomId == 10) { + else if (!strcmp(i_stageName, "D_MN08A") && i_roomNo == 10) { // Defeated Zant if (i_dComIfGs_isEventBit(0x5410)) { - layer = 1; + o_layer = 1; } else { - layer = 0; + o_layer = 0; } } } - return layer; + return o_layer; } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int dComIfG_play_c::getLayerNo_common_common(char const* i_stageName, int i_roomID, - int i_layerOverride) { - nofralloc -#include "asm/d/com/d_com_inf_game/getLayerNo_common_common__14dComIfG_play_cFPCcii.s" -} -#pragma pop -#endif /* 8002C950-8002C97C 027290 002C+00 1/1 3/3 0/0 .text getLayerNo_common__14dComIfG_play_cFPCcii */ int dComIfG_play_c::getLayerNo_common(char const* i_stageName, int i_roomID, int i_layerOverride) { diff --git a/src/d/kankyo/d_kankyo.cpp b/src/d/kankyo/d_kankyo.cpp index 6dbee8d36e..d90843e3b8 100644 --- a/src/d/kankyo/d_kankyo.cpp +++ b/src/d/kankyo/d_kankyo.cpp @@ -3865,9 +3865,9 @@ static int dKy_F_SP121Check(char const* stageName, int roomNo, u8* out_darkLv, i * cleared it, else FALSE. */ /* 801AC70C-801AC7E0 1A704C 00D4+00 0/0 2/2 0/0 .text dKy_darkworld_stage_check__FPCci */ -BOOL dKy_darkworld_stage_check(char const* stageName, int roomNo) { +u8 dKy_darkworld_stage_check(char const* stageName, int roomNo) { dKydata_darkworldInfo_c* darkworldTbl = dKyd_darkworld_tbl_getp(); - BOOL result = FALSE; + u8 result = FALSE; u8 darkLv[1]; for (int i = 0; i < 34; i++) { diff --git a/src/d/save/d_save.cpp b/src/d/save/d_save.cpp index 37014fdffc..d4f2605ca3 100644 --- a/src/d/save/d_save.cpp +++ b/src/d/save/d_save.cpp @@ -1173,12 +1173,12 @@ void dSv_player_info_c::init() { void dSv_player_config_c::init() { unk0 = 1; - if (OSGetSoundMode() == SOUND_MODE_MONO) { - mSoundMode = SOUND_MODE_MONO; - Z2AudioMgr::mAudioMgrPtr->setOutputMode(SOUND_MODE_MONO); + if (OSGetSoundMode() == OS_SOUND_MODE_MONO) { + mSoundMode = OS_SOUND_MODE_MONO; + Z2AudioMgr::mAudioMgrPtr->setOutputMode(OS_SOUND_MODE_MONO); } else { - mSoundMode = SOUND_MODE_STEREO; - Z2AudioMgr::mAudioMgrPtr->setOutputMode(SOUND_MODE_STEREO); + mSoundMode = OS_SOUND_MODE_STEREO; + Z2AudioMgr::mAudioMgrPtr->setOutputMode(OS_SOUND_MODE_STEREO); } mAttentionType = 0; @@ -1828,9 +1828,9 @@ SECTION_DEAD static char const* const stringBase_8037927A = "LOAD size:%d\n"; int dSv_info_c::card_to_memory(char* card_ptr, int dataNum) { memcpy(dComIfGs_getSaveData(), card_ptr + dataNum * 0xa94, sizeof(dSv_save_c)); - if (OSGetSoundMode() == SOUND_MODE_MONO) { - g_dComIfG_gameInfo.info.getPlayer().getConfig().setSound(SOUND_MODE_MONO); - Z2AudioMgr::mAudioMgrPtr->setOutputMode(SOUND_MODE_MONO); + if (OSGetSoundMode() == OS_SOUND_MODE_MONO) { + g_dComIfG_gameInfo.info.getPlayer().getConfig().setSound(OS_SOUND_MODE_MONO); + Z2AudioMgr::mAudioMgrPtr->setOutputMode(OS_SOUND_MODE_MONO); } else if (g_dComIfG_gameInfo.info.getPlayer().getConfig().getSound() == 2) { Z2AudioMgr::mAudioMgrPtr->setOutputMode(2); } else { diff --git a/src/m_Do/m_Do_DVDError.cpp b/src/m_Do/m_Do_DVDError.cpp index 004f7a5f74..34af3543ac 100644 --- a/src/m_Do/m_Do_DVDError.cpp +++ b/src/m_Do/m_Do_DVDError.cpp @@ -38,7 +38,7 @@ void mDoDvdErr_ThdInit() { sizeof(DvdErr_stack), priority - 3, 1); OSResumeThread(&DvdErr_thread); OSCreateAlarm(&Alarm); - OSSetPeriodicAlarm(&Alarm, time, OS_BUS_CLOCK / 4, (OSAlarmHandler*)AlarmHandler); + OSSetPeriodicAlarm(&Alarm, time, OS_BUS_CLOCK / 4, AlarmHandler); mDoDvdErr_initialized = true; } diff --git a/src/m_Do/m_Do_MemCard.cpp b/src/m_Do/m_Do_MemCard.cpp index b75099e0ca..3ee1f43620 100644 --- a/src/m_Do/m_Do_MemCard.cpp +++ b/src/m_Do/m_Do_MemCard.cpp @@ -164,7 +164,7 @@ void mDoMemCd_Ctrl_c::restore() { field_0x1fc8 = 0; s32 card_state = CARDOpen(mChannel, "gczelda2", &file); - if (card_state == CARD_ERROR_READY) { + if (card_state == CARD_RESULT_READY) { if (!mDoMemCdRWm_Restore(&file, this, sizeof(mData))) { mCardState = 3; } else { @@ -221,7 +221,7 @@ void mDoMemCd_Ctrl_c::store() { if (mCardState == 2) { card_state = CARDCreate(mChannel, "gczelda2", 0x8000, &file); - if (card_state == CARD_ERROR_READY || card_state == CARD_ERROR_EXIST) { + if (card_state == CARD_RESULT_READY || card_state == CARD_RESULT_EXIST) { mCardState = 1; } else { setCardState(card_state); @@ -230,9 +230,9 @@ void mDoMemCd_Ctrl_c::store() { if (mCardState == 1) { card_state = CARDOpen(mChannel, "gczelda2", &file); - if (card_state == CARD_ERROR_READY) { + if (card_state == CARD_RESULT_READY) { card_state = mDoMemCdRWm_Store(&file, this, sizeof(mData)); - if (card_state != CARD_ERROR_READY) { + if (card_state != CARD_RESULT_READY) { setCardState(card_state); } else { mCardState = 4; @@ -343,7 +343,7 @@ void mDoMemCd_Ctrl_c::format() { s32 card_state = CARDFormat(mChannel); if (OSTryLockMutex(&mMutex)) { - if (card_state == CARD_ERROR_READY) { + if (card_state == CARD_RESULT_READY) { mCardState = 5; } else { setCardState(card_state); @@ -478,12 +478,12 @@ s32 mDoMemCd_Ctrl_c::loadfile() { CARDFileInfo file; s32 card_state = CARDOpen(mChannel, "gczelda2", &file); - if (card_state == CARD_ERROR_READY) { + if (card_state == CARD_RESULT_READY) { CARDClose(&file); - return CARD_ERROR_UNLOCKED; + return CARD_RESULT_UNLOCKED; } else { setCardState(card_state); - return CARD_ERROR_READY; + return CARD_RESULT_READY; } } diff --git a/src/m_Do/m_Do_printf.cpp b/src/m_Do/m_Do_printf.cpp index 3880b2d23f..6b3fb09e84 100644 --- a/src/m_Do/m_Do_printf.cpp +++ b/src/m_Do/m_Do_printf.cpp @@ -246,50 +246,27 @@ void OSReport_System(char* fmt, ...) { } } -/* ############################################################################################## */ -/* 80373CB0-80373CB0 000310 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80373D10 = " in \"%s\" on line %d.\n"; -SECTION_DEAD static char const* const stringBase_80373D26 = - "\nAddress: Back Chain LR Save\n"; -SECTION_DEAD static char const* const stringBase_80373D4C = "0x%08x: 0x%08x 0x%08x\n"; -#pragma pop - /* 80006E7C-80006FB4 0017BC 0138+00 0/0 9/9 0/0 .text OSPanic */ -// loop stuff / ending -#ifdef NONMATCHING void OSPanic(char* file, s32 line, char* fmt, ...) { - OSDisableInterrupts(); - va_list args; + u32 i; + u32* p; + u32* tmp; + + OSDisableInterrupts(); va_start(args, fmt); - mDoPrintf_vprintf(fmt, args); - OSAttention(" in \"%s\" on line %d.\n", file, line); - OSAttention("\nAddress: Back Chain LR Save\n"); - - u32 tmp = 0; - u8* stackPtr = OSGetStackPointer(); - while (stackPtr != NULL && tmp < 0x10) { - OSAttention("0x%08x: 0x%08x 0x%08x\n", stackPtr, *(u32*)stackPtr, - *(u32*)(stackPtr + 4)); - stackPtr++; - tmp++; - } - PPCHalt(); - va_end(args); + OSAttention(" in \"%s\" on line %d.\n", file, line); + + OSAttention("\nAddress: Back Chain LR Save\n"); + for (i = 0, p = (u32*)OSGetStackPointer(); p && (u32)p != 0xFFFFFFFF && i++ < 16; p = (u32*)*p) { + OSAttention("0x%08x: 0x%08x 0x%08x\n", p, p[0], p[1]); + } + + tmp = (u32*)0x1234567; // ?????? + *tmp = 0x1234567; + PPCHalt(); } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void OSPanic(char* file, s32 line, char* fmt, ...) { - nofralloc -#include "asm/m_Do/m_Do_printf/OSPanic.s" -} -#pragma pop -#endif /* 80373CB0-80373CB0 000310 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */