From 1f5630246e6d14ad257dcd1c0e6e7931bde25acf Mon Sep 17 00:00:00 2001 From: Pheenoh Date: Tue, 22 Mar 2022 23:41:57 -0400 Subject: [PATCH 1/2] Update README and Contributing (#185) --- README.md | 156 ++++++++++++++++++++++++++++++++++--------- docs/Contributing.md | 57 ++++++++++++++++ docs/ghidra.png | Bin 0 -> 14827 bytes 3 files changed, 182 insertions(+), 31 deletions(-) create mode 100644 docs/Contributing.md create mode 100644 docs/ghidra.png diff --git a/README.md b/README.md index faacd2159c9..5d7377926f4 100644 --- a/README.md +++ b/README.md @@ -2,46 +2,140 @@ This repo contains a WIP decompilation of The Legend of Zelda: Twilight Princess (GCN USA). -It builds the following DOL: + +* [Project Setup](#project-setup) +* [Building The Game](#build-game) +* [Extract Game Assets](#extract-game-assets) +* [Create Expected Directory](#create-expected-directory) +* [Clean Directories](#clean-directories) +* [Project Overview](#project-overview) +* [Contributing](./docs/Contributing.md) +* [FAQ](https://zelda64.dev/games/tp) + + -main.dol - `sha1: 4997D93B9692620C40E90374A0F1DBF0E4889395` +Project Setup +================= -And will eventually build all the [RELs](./docs/rels_sha1.md). - -## Windows Prerequisites - -1. Download and run the latest release of the [Windows devkitpro installer](https://github.com/devkitPro/installer/releases) -2. Run the executable located at `devkitPro\msys2\msys2.exe` -3. Update pacman by running the following command: `pacman -Syu` -4. Install the necessary dependencies by running the following command: `pacman -S python3-pip base-devel gcc vim cmake` -5. Change to the directory of where you cloned this repository -6. Install the required python dependencies with `python3 -mpip install -r tools/requirements.txt` - -## Build Instructions - -1. Obtain a clean DOL of TP (GCN USA) and place it at the root of the repo and name it `baserom.dol`. -2. Obtain a copy of the MWCC PowerPC compiler (version 2.7 to be exact). See below for a link to our Discord server which has the CodeWarrior compilers pinned in the #tp-decomp channel. -3. Replace `tools/mwcc_compiler/2.7/mwcceppc.exe` with the custom one also pinned in the #tp-decomp channel. -4. Run `make` at the root of the repo. - -## Dump Assets - -1. Place a vanilla copy of the NTSC-U version at the root of the folder and call it `gz2e01.iso`. -2. Make the game directory. +1. Clone down project ```bash -mkdir game +$ git clone https://github.com/zeldaret/tp ``` -3. Run make assets. +2. Setup compiler directory ```bash -make assets -```` +$ mkdir -p tools/mwcc_compiler/ +``` + +3. Download `GC_COMPILERS.zip` from the [Discord](https://discord.gg/Nshw5pHS4h) server. See the pins in the `#tp-decomp` channel under the Twilight Princess group. + +4. Extract `GC_COMPILERS.zip` into the previously created `mwcc_compiler` directory + +```bash +$ unzip GC_COMPILERS.zip -d tools/mwcc_compiler/ +``` + +5. Place a copy of NTSC-U GCN Twilight Princess in the root directory and call it `gz2e01.iso` (find this on your own) + +6. Setup the project + +```bash +$ ./tp setup +``` + +Building The Game +----- + +1. To build a playable game, complete the [Project Setup](#project-setup) steps, then run + +```bash +$ make game +``` + +The completed build is under `build/dolzel2/game/sys/main.dol` + +Build DOL + +```bash +$ make +``` + +Build RELs + +```bash +$ make rels +``` + +The completed RELs will be under `build/dolzel2/rel` + +Extract Game Assets + +```bash +$ make assets +``` + +Create Expected Directory + +1. [Build the DOL](#build-dol) +2. Run: + +```bash +$ ./tp expected +``` -## Contributions +Clean Directories +----- -All contributions are welcome. This is a group effort, and even small contributions can make a difference. Some tasks also don't require much knowledge to get started. +Clean RELs -Most discussions happen on our [Discord Server](https://discord.zelda64.dev/), where you are welcome to ask if you need help getting started, or if you have any questions regarding this project and other decompilation projects. \ No newline at end of file +```bash +$ make clean_rels +``` + +Clean Game Directory + +```bash +$ make clean_game +``` + +Clean Build Directory + +```bash +$ make clean_all +``` + +Clean everything + +```bash +$ make clean +``` + + +Project Overview +================= +``` +tp/ +├── .github # Github actions for this project. +├── asm # The assembly for unmatched functions. +├── defs # Python modules used by dol2asm. +├── docs # Notes and documentation about this project. +├── include # Header files used by this project. +├── libs # Source code for the libraries based on the symbol map. +├── rel # Source code for the game RELs. +├── src # Source code for the main game. +├── tools # Various tools to support the project. +├── .clang-format # Clang format file. +├── .gitignore # Files/folders to ignore changes to when making commits. +├── Doxyfile # Doxygen configuration file. +├── Makefile # Makefile for the project containing various targets. +├── README.md # The file you're currently reading. +├── diff.py # Python script to diff two functions. +├── diff_settings.py # Settings for the diff.py script. +├── dolzel2.sha1 # SHA1 of the dol. +├── include_link.mk # Makefiles to include in the main Makefile. +├── obj_files.mk # Object files to include in the main Makefile. +└── tp # Bash script used to call the main tp python script in tools directory. +``` \ No newline at end of file diff --git a/docs/Contributing.md b/docs/Contributing.md new file mode 100644 index 00000000000..941ca655cc1 --- /dev/null +++ b/docs/Contributing.md @@ -0,0 +1,57 @@ +Contributing +================= +Ghidra Setup +----- +1. Install [Java 11 64-bit Runtime and Development Kit](https://www.oracle.com/java/technologies/javase/jdk11-archive-downloads.html). +2. Download Ghidra from [here](https://github.com/NationalSecurityAgency/ghidra/releases). +3. Request an account from Pheenoh#0001 on Discord (either ping him in one of the [Discord](https://discord.gg/Nshw5pHS4h) channeld or DM directly). +4. Login using the following server info: + +``` +Server: ghidra.tpgz.io +Port: 13100 +Username: +Password: +``` + +After logging in you will see a list of all the Twilight Princess DOLs for each version. + +![](./ghidra.png) + +Getting Started +----- +To begin, select a file to begin work on. You can check what files are available on [Trello](https://trello.com/b/Y04SAxbw/twilight-princess-decompilation). + +This project has been automatically generated using `dol2asm`. This process generates blank headers for every source file, default includes, necessary types to be used within the file, forward references, and external references of data / functions used within the file's functions. Additionally, all data and functions have been split and generated with default types. + +When decompiling a file, you will need to manually fix structs/classes, function return types, data types, and data definitions. Parameters are already setup for any function with a mangled name. Some functions / data may need to be changed to be auto-generated by the compiler, such as by inlining functions or making data in-function static. + +The TP Nvidia Shield Debug Rom contains extra useful info, as it was compiled with less aggressive function inlining, and also contains debug tools / debug strings. While the primary focus currently is on the NTSC-U GameCube version, it is highly recommended to reference the Debug rom for help / documentation. + +### diff.py +`diff.py` is the tool we use to fix matching errors. You can invoke `diff.py` from command line like: + `python diff.py -mwo mangled_symbol_name` +- `-m` will run make before opening diff. +- `-w` will automatically update the diff when you save your changes. +- `-o` will diff only the necessary `.o` file, which is recommended for this project. +- You can find the mangled symbol name in the function info comment. (Ex. `onEventBit__11dSv_event_cFUs`) + +NOTE: You must run `./tp expected` with an OK build before diffing to have a correct binary to compare to. + +You can install the requirements for `diff.py` by running `pip install -r tools/requirements.txt`. + +### tp.py +`tp.py` is a multi-purpose tool that can be used for things such as checking SHA1 checksums, current decompilation progress, and removing unused assembly files. +You can invoke `tp.py` from command line either directly in the `tools/` folder, or by running the `tp` bash script. +Useful commands: +- `check` - Compares the SHA1 checksums of your current build to the ones of the expected build. Add `--rels` to check rel checksums. +- `expected` - Copies your current build folder to the expected build folder. +- `progress` - Calculates and displays the decompilation progress of the main dol. Add `--rels` to calculate rel progress. +- `remove-unused-asm` - Finds and removes all assembly files that are no longer being used. +- `pull-request` - Verifies that everything is OK before you set up a pull request. + +### decomp.me +[decomp.me](https://decomp.me/) is a very useful website for sharing individual functions with other contributers. +To use decomp.me with TP, select the `GameCube / Wii` platform and `Twilight Princess` compiler preset. Enter your function's mangled name under `Function name`, and copy / paste the function assembly from the project into the `Target assembly` box. Provide any necessary context within the provided box, then create your scratch. + +From here you can use the built-in editor to write your function code. Make sure to save the scratch when you are done, then you can copy and share the URL to receive help matching the function. diff --git a/docs/ghidra.png b/docs/ghidra.png new file mode 100644 index 0000000000000000000000000000000000000000..460c6d4ea90697f386a9b092e884c8b39226a321 GIT binary patch literal 14827 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%0DbOVa!|YtCx}lV8G&iFpFe+o{P^+LFO3AH zpZ-|Lcj<5O^m7q<6_vZqNEfa5)$(M{n}9RJQy9q^Xg#% zxQK_3lbf6SufHB~#Js2Fm(9}vMnlp_BtTlkSUeuDo5e2fn7+R;J?d6Wq{&kL4$qhw z3u4P&wF1A=33(t07obBaWRO+E@TfyWFJR)83;!Ud$u(${Bhv`SIqe7VnK4a4{5M0|RygPCzM8bDTb42UWs=yxoGb zV!0ZLYl#mS+YJ2FYr)(ZS$n!S5=y~diADpqTn8phKu`wRk}~4;NPz0of;!sm=_ILi zTO9_-%b?EhbUw}B&A|ci7han;8+QWs03rYcz*9Lzl!}aOa&{I7bA>=ykYs0XE+THo zfQIq^_W16BL8;S`iL(I*$%~(Y>iMu%Q!qt0i+9s8_AbBx(*wB^m9EyNrkTCF(YK!^ zegdBKhYuhbcK1f?EzHb1(eAO1E5q_0`ti4pLXlW5ejoU>EGhXi!*K`_Bk^ zJovh>A{g!l{XSy+B^@zOFLC6QJNR`l2Q&}VgM0Dlr6GFUX`pw5v5fGbPq!Wte)a`3 zXTVjxOWAfi5V6^+k9hn=O#lor5!*hpgE=_dFIBXI4HoFPYT3oWk*7z?g@CYda&UxL z{tTxD>g76s&*_ zc7nSFMgC-;De|6f*~#Q}{|Am!Z}UDXV0Vaz3%f&$ Date: Tue, 22 Mar 2022 20:42:16 -0700 Subject: [PATCH 2/2] m_Do_MemCard / m_Do_MemCardRWmng (#184) * memcard wip * format / asm * fix includes Co-authored-by: TakaRikka --- .../FormatSync__15mDoMemCd_Ctrl_cFv.s | 41 -- .../LoadSync__15mDoMemCd_Ctrl_cFPvUlUl.s | 48 -- .../SaveSync__15mDoMemCd_Ctrl_cFv.s | 44 -- .../ThdInit__15mDoMemCd_Ctrl_cFv.s | 41 -- .../command_attach__15mDoMemCd_Ctrl_cFv.s | 24 - .../command_format__15mDoMemCd_Ctrl_cFv.s | 22 - .../detach__15mDoMemCd_Ctrl_cFv.s | 15 - .../format__15mDoMemCd_Ctrl_cFv.s | 37 -- .../getStatus__15mDoMemCd_Ctrl_cFUl.s | 61 -- .../m_Do_MemCard/load__15mDoMemCd_Ctrl_cFv.s | 24 - .../loadfile__15mDoMemCd_Ctrl_cFv.s | 27 - asm/m_Do/m_Do_MemCard/mDoMemCd_main__FPv.s | 22 - .../m_Do_MemCard/main__15mDoMemCd_Ctrl_cFv.s | 60 -- .../restore__15mDoMemCd_Ctrl_cFv.s | 46 -- .../save__15mDoMemCd_Ctrl_cFPvUlUl.s | 33 -- .../m_Do_MemCard/store__15mDoMemCd_Ctrl_cFv.s | 76 --- .../update__15mDoMemCd_Ctrl_cFv.s | 76 --- ..._BuildHeader__FP22mDoMemCdRWm_HeaderData.s | 91 --- .../mDoMemCdRWm_SetCheckSumGameData__FPUcUc.s | 18 - .../mDoMemCdRWm_TestCheckSumGameData__FPv.s | 20 - include/JSystem/JUtility/JUTTexture.h | 4 +- include/dolphin/card/card.h | 74 +++ include/dolphin/mtx/mtx.h | 49 +- include/dolphin/mtx/mtx44.h | 6 +- include/dolphin/mtx/quat.h | 6 +- include/dolphin/mtx/vec.h | 43 +- include/dolphin/os/OS.h | 34 +- include/m_Do/m_Do_MemCard.h | 42 +- include/m_Do/m_Do_MemCardRWmng.h | 24 + libs/JSystem/JParticle/JPABaseShape.cpp | 1 - src/m_Do/m_Do_MemCard.cpp | 554 ++++++++++++------ src/m_Do/m_Do_MemCardRWmng.cpp | 174 ++++-- 32 files changed, 682 insertions(+), 1155 deletions(-) delete mode 100644 asm/m_Do/m_Do_MemCard/FormatSync__15mDoMemCd_Ctrl_cFv.s delete mode 100644 asm/m_Do/m_Do_MemCard/LoadSync__15mDoMemCd_Ctrl_cFPvUlUl.s delete mode 100644 asm/m_Do/m_Do_MemCard/SaveSync__15mDoMemCd_Ctrl_cFv.s delete mode 100644 asm/m_Do/m_Do_MemCard/ThdInit__15mDoMemCd_Ctrl_cFv.s delete mode 100644 asm/m_Do/m_Do_MemCard/command_attach__15mDoMemCd_Ctrl_cFv.s delete mode 100644 asm/m_Do/m_Do_MemCard/command_format__15mDoMemCd_Ctrl_cFv.s delete mode 100644 asm/m_Do/m_Do_MemCard/detach__15mDoMemCd_Ctrl_cFv.s delete mode 100644 asm/m_Do/m_Do_MemCard/format__15mDoMemCd_Ctrl_cFv.s delete mode 100644 asm/m_Do/m_Do_MemCard/getStatus__15mDoMemCd_Ctrl_cFUl.s delete mode 100644 asm/m_Do/m_Do_MemCard/load__15mDoMemCd_Ctrl_cFv.s delete mode 100644 asm/m_Do/m_Do_MemCard/loadfile__15mDoMemCd_Ctrl_cFv.s delete mode 100644 asm/m_Do/m_Do_MemCard/mDoMemCd_main__FPv.s delete mode 100644 asm/m_Do/m_Do_MemCard/main__15mDoMemCd_Ctrl_cFv.s delete mode 100644 asm/m_Do/m_Do_MemCard/restore__15mDoMemCd_Ctrl_cFv.s delete mode 100644 asm/m_Do/m_Do_MemCard/save__15mDoMemCd_Ctrl_cFPvUlUl.s delete mode 100644 asm/m_Do/m_Do_MemCard/store__15mDoMemCd_Ctrl_cFv.s delete mode 100644 asm/m_Do/m_Do_MemCard/update__15mDoMemCd_Ctrl_cFv.s delete mode 100644 asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_BuildHeader__FP22mDoMemCdRWm_HeaderData.s delete mode 100644 asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_SetCheckSumGameData__FPUcUc.s delete mode 100644 asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_TestCheckSumGameData__FPv.s create mode 100644 include/dolphin/card/card.h diff --git a/asm/m_Do/m_Do_MemCard/FormatSync__15mDoMemCd_Ctrl_cFv.s b/asm/m_Do/m_Do_MemCard/FormatSync__15mDoMemCd_Ctrl_cFv.s deleted file mode 100644 index 372aeb6fea3..00000000000 --- a/asm/m_Do/m_Do_MemCard/FormatSync__15mDoMemCd_Ctrl_cFv.s +++ /dev/null @@ -1,41 +0,0 @@ -lbl_80016F2C: -/* 80016F2C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80016F30 7C 08 02 A6 */ mflr r0 -/* 80016F34 90 01 00 14 */ stw r0, 0x14(r1) -/* 80016F38 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80016F3C 93 C1 00 08 */ stw r30, 8(r1) -/* 80016F40 7C 7E 1B 78 */ mr r30, r3 -/* 80016F44 3B E0 00 00 */ li r31, 0 -/* 80016F48 80 03 1F C8 */ lwz r0, 0x1fc8(r3) -/* 80016F4C 2C 00 00 00 */ cmpwi r0, 0 -/* 80016F50 40 82 00 0C */ bne lbl_80016F5C -/* 80016F54 38 60 00 00 */ li r3, 0 -/* 80016F58 48 00 00 48 */ b lbl_80016FA0 -lbl_80016F5C: -/* 80016F5C 38 7E 1F CC */ addi r3, r30, 0x1fcc -/* 80016F60 48 32 82 F5 */ bl OSTryLockMutex -/* 80016F64 2C 03 00 00 */ cmpwi r3, 0 -/* 80016F68 41 82 00 34 */ beq lbl_80016F9C -/* 80016F6C 80 1E 1F C4 */ lwz r0, 0x1fc4(r30) -/* 80016F70 2C 00 00 0D */ cmpwi r0, 0xd -/* 80016F74 41 82 00 20 */ beq lbl_80016F94 -/* 80016F78 2C 00 00 05 */ cmpwi r0, 5 -/* 80016F7C 40 82 00 14 */ bne lbl_80016F90 -/* 80016F80 38 00 00 02 */ li r0, 2 -/* 80016F84 90 1E 1F C4 */ stw r0, 0x1fc4(r30) -/* 80016F88 3B E0 00 01 */ li r31, 1 -/* 80016F8C 48 00 00 08 */ b lbl_80016F94 -lbl_80016F90: -/* 80016F90 3B E0 00 02 */ li r31, 2 -lbl_80016F94: -/* 80016F94 38 7E 1F CC */ addi r3, r30, 0x1fcc -/* 80016F98 48 32 81 85 */ bl OSUnlockMutex -lbl_80016F9C: -/* 80016F9C 7F E3 FB 78 */ mr r3, r31 -lbl_80016FA0: -/* 80016FA0 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80016FA4 83 C1 00 08 */ lwz r30, 8(r1) -/* 80016FA8 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80016FAC 7C 08 03 A6 */ mtlr r0 -/* 80016FB0 38 21 00 10 */ addi r1, r1, 0x10 -/* 80016FB4 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/LoadSync__15mDoMemCd_Ctrl_cFPvUlUl.s b/asm/m_Do/m_Do_MemCard/LoadSync__15mDoMemCd_Ctrl_cFPvUlUl.s deleted file mode 100644 index 0057509f888..00000000000 --- a/asm/m_Do/m_Do_MemCard/LoadSync__15mDoMemCd_Ctrl_cFPvUlUl.s +++ /dev/null @@ -1,48 +0,0 @@ -lbl_80016AB0: -/* 80016AB0 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 80016AB4 7C 08 02 A6 */ mflr r0 -/* 80016AB8 90 01 00 24 */ stw r0, 0x24(r1) -/* 80016ABC 39 61 00 20 */ addi r11, r1, 0x20 -/* 80016AC0 48 34 B7 15 */ bl _savegpr_27 -/* 80016AC4 7C 7B 1B 78 */ mr r27, r3 -/* 80016AC8 7C 9C 23 78 */ mr r28, r4 -/* 80016ACC 7C BD 2B 78 */ mr r29, r5 -/* 80016AD0 7C DE 33 78 */ mr r30, r6 -/* 80016AD4 3B E0 00 00 */ li r31, 0 -/* 80016AD8 80 03 1F C8 */ lwz r0, 0x1fc8(r3) -/* 80016ADC 2C 00 00 00 */ cmpwi r0, 0 -/* 80016AE0 40 82 00 0C */ bne lbl_80016AEC -/* 80016AE4 38 60 00 00 */ li r3, 0 -/* 80016AE8 48 00 00 58 */ b lbl_80016B40 -lbl_80016AEC: -/* 80016AEC 38 7B 1F CC */ addi r3, r27, 0x1fcc -/* 80016AF0 48 32 87 65 */ bl OSTryLockMutex -/* 80016AF4 2C 03 00 00 */ cmpwi r3, 0 -/* 80016AF8 41 82 00 44 */ beq lbl_80016B3C -/* 80016AFC 80 1B 1F C4 */ lwz r0, 0x1fc4(r27) -/* 80016B00 2C 00 00 03 */ cmpwi r0, 3 -/* 80016B04 40 82 00 24 */ bne lbl_80016B28 -/* 80016B08 7F 83 E3 78 */ mr r3, r28 -/* 80016B0C 7C 9B F2 14 */ add r4, r27, r30 -/* 80016B10 7F A5 EB 78 */ mr r5, r29 -/* 80016B14 4B FE CA 2D */ bl memcpy -/* 80016B18 38 00 00 01 */ li r0, 1 -/* 80016B1C 90 1B 1F C4 */ stw r0, 0x1fc4(r27) -/* 80016B20 3B E0 00 01 */ li r31, 1 -/* 80016B24 48 00 00 10 */ b lbl_80016B34 -lbl_80016B28: -/* 80016B28 38 00 00 02 */ li r0, 2 -/* 80016B2C 90 1B 1F C4 */ stw r0, 0x1fc4(r27) -/* 80016B30 3B E0 00 02 */ li r31, 2 -lbl_80016B34: -/* 80016B34 38 7B 1F CC */ addi r3, r27, 0x1fcc -/* 80016B38 48 32 85 E5 */ bl OSUnlockMutex -lbl_80016B3C: -/* 80016B3C 7F E3 FB 78 */ mr r3, r31 -lbl_80016B40: -/* 80016B40 39 61 00 20 */ addi r11, r1, 0x20 -/* 80016B44 48 34 B6 DD */ bl _restgpr_27 -/* 80016B48 80 01 00 24 */ lwz r0, 0x24(r1) -/* 80016B4C 7C 08 03 A6 */ mtlr r0 -/* 80016B50 38 21 00 20 */ addi r1, r1, 0x20 -/* 80016B54 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/SaveSync__15mDoMemCd_Ctrl_cFv.s b/asm/m_Do/m_Do_MemCard/SaveSync__15mDoMemCd_Ctrl_cFv.s deleted file mode 100644 index 9e3150d393e..00000000000 --- a/asm/m_Do/m_Do_MemCard/SaveSync__15mDoMemCd_Ctrl_cFv.s +++ /dev/null @@ -1,44 +0,0 @@ -lbl_80016CE0: -/* 80016CE0 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80016CE4 7C 08 02 A6 */ mflr r0 -/* 80016CE8 90 01 00 14 */ stw r0, 0x14(r1) -/* 80016CEC 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80016CF0 93 C1 00 08 */ stw r30, 8(r1) -/* 80016CF4 7C 7E 1B 78 */ mr r30, r3 -/* 80016CF8 3B E0 00 00 */ li r31, 0 -/* 80016CFC 80 03 1F C8 */ lwz r0, 0x1fc8(r3) -/* 80016D00 2C 00 00 00 */ cmpwi r0, 0 -/* 80016D04 40 82 00 0C */ bne lbl_80016D10 -/* 80016D08 38 60 00 00 */ li r3, 0 -/* 80016D0C 48 00 00 50 */ b lbl_80016D5C -lbl_80016D10: -/* 80016D10 38 7E 1F CC */ addi r3, r30, 0x1fcc -/* 80016D14 48 32 85 41 */ bl OSTryLockMutex -/* 80016D18 2C 03 00 00 */ cmpwi r3, 0 -/* 80016D1C 41 82 00 3C */ beq lbl_80016D58 -/* 80016D20 80 1E 1F C4 */ lwz r0, 0x1fc4(r30) -/* 80016D24 2C 00 00 04 */ cmpwi r0, 4 -/* 80016D28 40 82 00 14 */ bne lbl_80016D3C -/* 80016D2C 38 00 00 01 */ li r0, 1 -/* 80016D30 90 1E 1F C4 */ stw r0, 0x1fc4(r30) -/* 80016D34 3B E0 00 01 */ li r31, 1 -/* 80016D38 48 00 00 18 */ b lbl_80016D50 -lbl_80016D3C: -/* 80016D3C 2C 00 00 01 */ cmpwi r0, 1 -/* 80016D40 40 82 00 0C */ bne lbl_80016D4C -/* 80016D44 3B E0 00 00 */ li r31, 0 -/* 80016D48 48 00 00 08 */ b lbl_80016D50 -lbl_80016D4C: -/* 80016D4C 3B E0 00 02 */ li r31, 2 -lbl_80016D50: -/* 80016D50 38 7E 1F CC */ addi r3, r30, 0x1fcc -/* 80016D54 48 32 83 C9 */ bl OSUnlockMutex -lbl_80016D58: -/* 80016D58 7F E3 FB 78 */ mr r3, r31 -lbl_80016D5C: -/* 80016D5C 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80016D60 83 C1 00 08 */ lwz r30, 8(r1) -/* 80016D64 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80016D68 7C 08 03 A6 */ mtlr r0 -/* 80016D6C 38 21 00 10 */ addi r1, r1, 0x10 -/* 80016D70 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/ThdInit__15mDoMemCd_Ctrl_cFv.s b/asm/m_Do/m_Do_MemCard/ThdInit__15mDoMemCd_Ctrl_cFv.s deleted file mode 100644 index dc967ac9322..00000000000 --- a/asm/m_Do/m_Do_MemCard/ThdInit__15mDoMemCd_Ctrl_cFv.s +++ /dev/null @@ -1,41 +0,0 @@ -lbl_80016730: -/* 80016730 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80016734 7C 08 02 A6 */ mflr r0 -/* 80016738 90 01 00 14 */ stw r0, 0x14(r1) -/* 8001673C 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80016740 7C 7F 1B 78 */ mr r31, r3 -/* 80016744 48 33 D3 85 */ bl CARDInit -/* 80016748 38 60 00 00 */ li r3, 0 -/* 8001674C 98 7F 1F BD */ stb r3, 0x1fbd(r31) -/* 80016750 38 00 00 02 */ li r0, 2 -/* 80016754 98 1F 1F BE */ stb r0, 0x1fbe(r31) -/* 80016758 90 7F 1F C4 */ stw r3, 0x1fc4(r31) -/* 8001675C 90 7F 1F C0 */ stw r3, 0x1fc0(r31) -/* 80016760 98 7F 1F BC */ stb r3, 0x1fbc(r31) -/* 80016764 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 80016768 48 32 88 A1 */ bl OSInitMutex -/* 8001676C 38 7F 1F E4 */ addi r3, r31, 0x1fe4 -/* 80016770 48 32 8B A1 */ bl OSInitCond -/* 80016774 48 32 A5 11 */ bl OSGetCurrentThread -/* 80016778 48 32 B6 E5 */ bl OSGetThreadPriority -/* 8001677C 7C 68 1B 78 */ mr r8, r3 -/* 80016780 3C 60 80 3E */ lis r3, MemCardThread@ha /* 0x803E0C20@ha */ -/* 80016784 38 63 0C 20 */ addi r3, r3, MemCardThread@l /* 0x803E0C20@l */ -/* 80016788 3C 80 80 01 */ lis r4, mDoMemCd_main__FPv@ha /* 0x8001741C@ha */ -/* 8001678C 38 84 74 1C */ addi r4, r4, mDoMemCd_main__FPv@l /* 0x8001741C@l */ -/* 80016790 38 A0 00 00 */ li r5, 0 -/* 80016794 3C C0 80 3E */ lis r6, MemCardStack@ha /* 0x803DFC20@ha */ -/* 80016798 38 C6 FC 20 */ addi r6, r6, MemCardStack@l /* 0x803DFC20@l */ -/* 8001679C 38 C6 10 00 */ addi r6, r6, 0x1000 -/* 800167A0 38 E0 10 00 */ li r7, 0x1000 -/* 800167A4 39 08 00 01 */ addi r8, r8, 1 -/* 800167A8 39 20 00 01 */ li r9, 1 -/* 800167AC 48 32 AA E1 */ bl OSCreateThread -/* 800167B0 3C 60 80 3E */ lis r3, MemCardThread@ha /* 0x803E0C20@ha */ -/* 800167B4 38 63 0C 20 */ addi r3, r3, MemCardThread@l /* 0x803E0C20@l */ -/* 800167B8 48 32 AF FD */ bl OSResumeThread -/* 800167BC 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 800167C0 80 01 00 14 */ lwz r0, 0x14(r1) -/* 800167C4 7C 08 03 A6 */ mtlr r0 -/* 800167C8 38 21 00 10 */ addi r1, r1, 0x10 -/* 800167CC 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/command_attach__15mDoMemCd_Ctrl_cFv.s b/asm/m_Do/m_Do_MemCard/command_attach__15mDoMemCd_Ctrl_cFv.s deleted file mode 100644 index d29d891ff33..00000000000 --- a/asm/m_Do/m_Do_MemCard/command_attach__15mDoMemCd_Ctrl_cFv.s +++ /dev/null @@ -1,24 +0,0 @@ -lbl_800170B8: -/* 800170B8 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 800170BC 7C 08 02 A6 */ mflr r0 -/* 800170C0 90 01 00 14 */ stw r0, 0x14(r1) -/* 800170C4 93 E1 00 0C */ stw r31, 0xc(r1) -/* 800170C8 7C 7F 1B 78 */ mr r31, r3 -/* 800170CC 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 800170D0 48 32 81 85 */ bl OSTryLockMutex -/* 800170D4 2C 03 00 00 */ cmpwi r3, 0 -/* 800170D8 41 82 00 24 */ beq lbl_800170FC -/* 800170DC 38 00 00 0D */ li r0, 0xd -/* 800170E0 90 1F 1F C4 */ stw r0, 0x1fc4(r31) -/* 800170E4 38 00 00 04 */ li r0, 4 -/* 800170E8 90 1F 1F C0 */ stw r0, 0x1fc0(r31) -/* 800170EC 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 800170F0 48 32 80 2D */ bl OSUnlockMutex -/* 800170F4 38 7F 1F E4 */ addi r3, r31, 0x1fe4 -/* 800170F8 48 32 83 0D */ bl OSSignalCond -lbl_800170FC: -/* 800170FC 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80017100 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80017104 7C 08 03 A6 */ mtlr r0 -/* 80017108 38 21 00 10 */ addi r1, r1, 0x10 -/* 8001710C 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/command_format__15mDoMemCd_Ctrl_cFv.s b/asm/m_Do/m_Do_MemCard/command_format__15mDoMemCd_Ctrl_cFv.s deleted file mode 100644 index 1cde52c3cad..00000000000 --- a/asm/m_Do/m_Do_MemCard/command_format__15mDoMemCd_Ctrl_cFv.s +++ /dev/null @@ -1,22 +0,0 @@ -lbl_80016E58: -/* 80016E58 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80016E5C 7C 08 02 A6 */ mflr r0 -/* 80016E60 90 01 00 14 */ stw r0, 0x14(r1) -/* 80016E64 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80016E68 7C 7F 1B 78 */ mr r31, r3 -/* 80016E6C 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 80016E70 48 32 83 E5 */ bl OSTryLockMutex -/* 80016E74 2C 03 00 00 */ cmpwi r3, 0 -/* 80016E78 41 82 00 1C */ beq lbl_80016E94 -/* 80016E7C 38 00 00 03 */ li r0, 3 -/* 80016E80 90 1F 1F C0 */ stw r0, 0x1fc0(r31) -/* 80016E84 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 80016E88 48 32 82 95 */ bl OSUnlockMutex -/* 80016E8C 38 7F 1F E4 */ addi r3, r31, 0x1fe4 -/* 80016E90 48 32 85 75 */ bl OSSignalCond -lbl_80016E94: -/* 80016E94 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80016E98 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80016E9C 7C 08 03 A6 */ mtlr r0 -/* 80016EA0 38 21 00 10 */ addi r1, r1, 0x10 -/* 80016EA4 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/detach__15mDoMemCd_Ctrl_cFv.s b/asm/m_Do/m_Do_MemCard/detach__15mDoMemCd_Ctrl_cFv.s deleted file mode 100644 index 8898b99c755..00000000000 --- a/asm/m_Do/m_Do_MemCard/detach__15mDoMemCd_Ctrl_cFv.s +++ /dev/null @@ -1,15 +0,0 @@ -lbl_80017110: -/* 80017110 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80017114 7C 08 02 A6 */ mflr r0 -/* 80017118 90 01 00 14 */ stw r0, 0x14(r1) -/* 8001711C 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80017120 7C 7F 1B 78 */ mr r31, r3 -/* 80017124 88 63 1F BC */ lbz r3, 0x1fbc(r3) -/* 80017128 48 34 02 B1 */ bl CARDUnmount -/* 8001712C 38 00 00 00 */ li r0, 0 -/* 80017130 90 1F 1F C4 */ stw r0, 0x1fc4(r31) -/* 80017134 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80017138 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8001713C 7C 08 03 A6 */ mtlr r0 -/* 80017140 38 21 00 10 */ addi r1, r1, 0x10 -/* 80017144 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/format__15mDoMemCd_Ctrl_cFv.s b/asm/m_Do/m_Do_MemCard/format__15mDoMemCd_Ctrl_cFv.s deleted file mode 100644 index 2fcca809de7..00000000000 --- a/asm/m_Do/m_Do_MemCard/format__15mDoMemCd_Ctrl_cFv.s +++ /dev/null @@ -1,37 +0,0 @@ -lbl_80016EA8: -/* 80016EA8 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80016EAC 7C 08 02 A6 */ mflr r0 -/* 80016EB0 90 01 00 14 */ stw r0, 0x14(r1) -/* 80016EB4 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80016EB8 93 C1 00 08 */ stw r30, 8(r1) -/* 80016EBC 7C 7E 1B 78 */ mr r30, r3 -/* 80016EC0 38 00 00 00 */ li r0, 0 -/* 80016EC4 90 03 1F C8 */ stw r0, 0x1fc8(r3) -/* 80016EC8 88 63 1F BC */ lbz r3, 0x1fbc(r3) -/* 80016ECC 48 34 0D 55 */ bl CARDFormat -/* 80016ED0 7C 7F 1B 78 */ mr r31, r3 -/* 80016ED4 38 7E 1F CC */ addi r3, r30, 0x1fcc -/* 80016ED8 48 32 83 7D */ bl OSTryLockMutex -/* 80016EDC 2C 03 00 00 */ cmpwi r3, 0 -/* 80016EE0 41 82 00 34 */ beq lbl_80016F14 -/* 80016EE4 2C 1F 00 00 */ cmpwi r31, 0 -/* 80016EE8 40 82 00 10 */ bne lbl_80016EF8 -/* 80016EEC 38 00 00 05 */ li r0, 5 -/* 80016EF0 90 1E 1F C4 */ stw r0, 0x1fc4(r30) -/* 80016EF4 48 00 00 10 */ b lbl_80016F04 -lbl_80016EF8: -/* 80016EF8 7F C3 F3 78 */ mr r3, r30 -/* 80016EFC 7F E4 FB 78 */ mr r4, r31 -/* 80016F00 48 00 04 61 */ bl setCardState__15mDoMemCd_Ctrl_cFl -lbl_80016F04: -/* 80016F04 38 00 00 01 */ li r0, 1 -/* 80016F08 90 1E 1F C8 */ stw r0, 0x1fc8(r30) -/* 80016F0C 38 7E 1F CC */ addi r3, r30, 0x1fcc -/* 80016F10 48 32 82 0D */ bl OSUnlockMutex -lbl_80016F14: -/* 80016F14 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80016F18 83 C1 00 08 */ lwz r30, 8(r1) -/* 80016F1C 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80016F20 7C 08 03 A6 */ mtlr r0 -/* 80016F24 38 21 00 10 */ addi r1, r1, 0x10 -/* 80016F28 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/getStatus__15mDoMemCd_Ctrl_cFUl.s b/asm/m_Do/m_Do_MemCard/getStatus__15mDoMemCd_Ctrl_cFUl.s deleted file mode 100644 index 617f1ab8b33..00000000000 --- a/asm/m_Do/m_Do_MemCard/getStatus__15mDoMemCd_Ctrl_cFUl.s +++ /dev/null @@ -1,61 +0,0 @@ -lbl_80016D74: -/* 80016D74 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80016D78 7C 08 02 A6 */ mflr r0 -/* 80016D7C 90 01 00 14 */ stw r0, 0x14(r1) -/* 80016D80 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80016D84 93 C1 00 08 */ stw r30, 8(r1) -/* 80016D88 7C 7E 1B 78 */ mr r30, r3 -/* 80016D8C 38 7E 1F CC */ addi r3, r30, 0x1fcc -/* 80016D90 48 32 84 C5 */ bl OSTryLockMutex -/* 80016D94 2C 03 00 00 */ cmpwi r3, 0 -/* 80016D98 41 82 00 A4 */ beq lbl_80016E3C -/* 80016D9C 80 1E 1F C4 */ lwz r0, 0x1fc4(r30) -/* 80016DA0 28 00 00 0D */ cmplwi r0, 0xd -/* 80016DA4 41 81 00 88 */ bgt lbl_80016E2C -/* 80016DA8 3C 60 80 3A */ lis r3, lit_3770@ha /* 0x803A34F8@ha */ -/* 80016DAC 38 63 34 F8 */ addi r3, r3, lit_3770@l /* 0x803A34F8@l */ -/* 80016DB0 54 00 10 3A */ slwi r0, r0, 2 -/* 80016DB4 7C 03 00 2E */ lwzx r0, r3, r0 -/* 80016DB8 7C 09 03 A6 */ mtctr r0 -/* 80016DBC 4E 80 04 20 */ bctr -/* 80016DC0 3B E0 00 02 */ li r31, 2 -/* 80016DC4 48 00 00 68 */ b lbl_80016E2C -/* 80016DC8 3B E0 00 01 */ li r31, 1 -/* 80016DCC 48 00 00 60 */ b lbl_80016E2C -/* 80016DD0 3B E0 00 03 */ li r31, 3 -/* 80016DD4 48 00 00 58 */ b lbl_80016E2C -/* 80016DD8 3B E0 00 04 */ li r31, 4 -/* 80016DDC 48 00 00 50 */ b lbl_80016E2C -/* 80016DE0 3B E0 00 05 */ li r31, 5 -/* 80016DE4 48 00 00 48 */ b lbl_80016E2C -/* 80016DE8 3B E0 00 00 */ li r31, 0 -/* 80016DEC 48 00 00 40 */ b lbl_80016E2C -/* 80016DF0 3B E0 00 07 */ li r31, 7 -/* 80016DF4 48 00 00 38 */ b lbl_80016E2C -/* 80016DF8 3B E0 00 06 */ li r31, 6 -/* 80016DFC 48 00 00 30 */ b lbl_80016E2C -/* 80016E00 3B E0 00 0B */ li r31, 0xb -/* 80016E04 48 00 00 28 */ b lbl_80016E2C -/* 80016E08 3B E0 00 0C */ li r31, 0xc -/* 80016E0C 48 00 00 20 */ b lbl_80016E2C -/* 80016E10 3B E0 00 09 */ li r31, 9 -/* 80016E14 48 00 00 18 */ b lbl_80016E2C -/* 80016E18 3B E0 00 0A */ li r31, 0xa -/* 80016E1C 48 00 00 10 */ b lbl_80016E2C -/* 80016E20 3B E0 00 08 */ li r31, 8 -/* 80016E24 48 00 00 08 */ b lbl_80016E2C -/* 80016E28 3B E0 00 0E */ li r31, 0xe -lbl_80016E2C: -/* 80016E2C 38 7E 1F CC */ addi r3, r30, 0x1fcc -/* 80016E30 48 32 82 ED */ bl OSUnlockMutex -/* 80016E34 7F E3 FB 78 */ mr r3, r31 -/* 80016E38 48 00 00 08 */ b lbl_80016E40 -lbl_80016E3C: -/* 80016E3C 38 60 00 0E */ li r3, 0xe -lbl_80016E40: -/* 80016E40 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80016E44 83 C1 00 08 */ lwz r30, 8(r1) -/* 80016E48 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80016E4C 7C 08 03 A6 */ mtlr r0 -/* 80016E50 38 21 00 10 */ addi r1, r1, 0x10 -/* 80016E54 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/load__15mDoMemCd_Ctrl_cFv.s b/asm/m_Do/m_Do_MemCard/load__15mDoMemCd_Ctrl_cFv.s deleted file mode 100644 index fd340074e88..00000000000 --- a/asm/m_Do/m_Do_MemCard/load__15mDoMemCd_Ctrl_cFv.s +++ /dev/null @@ -1,24 +0,0 @@ -lbl_800169B4: -/* 800169B4 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 800169B8 7C 08 02 A6 */ mflr r0 -/* 800169BC 90 01 00 14 */ stw r0, 0x14(r1) -/* 800169C0 93 E1 00 0C */ stw r31, 0xc(r1) -/* 800169C4 7C 7F 1B 78 */ mr r31, r3 -/* 800169C8 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 800169CC 48 32 88 89 */ bl OSTryLockMutex -/* 800169D0 2C 03 00 00 */ cmpwi r3, 0 -/* 800169D4 41 82 00 24 */ beq lbl_800169F8 -/* 800169D8 38 00 00 00 */ li r0, 0 -/* 800169DC 90 1F 1F C8 */ stw r0, 0x1fc8(r31) -/* 800169E0 38 00 00 01 */ li r0, 1 -/* 800169E4 90 1F 1F C0 */ stw r0, 0x1fc0(r31) -/* 800169E8 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 800169EC 48 32 87 31 */ bl OSUnlockMutex -/* 800169F0 38 7F 1F E4 */ addi r3, r31, 0x1fe4 -/* 800169F4 48 32 8A 11 */ bl OSSignalCond -lbl_800169F8: -/* 800169F8 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 800169FC 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80016A00 7C 08 03 A6 */ mtlr r0 -/* 80016A04 38 21 00 10 */ addi r1, r1, 0x10 -/* 80016A08 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/loadfile__15mDoMemCd_Ctrl_cFv.s b/asm/m_Do/m_Do_MemCard/loadfile__15mDoMemCd_Ctrl_cFv.s deleted file mode 100644 index a814af9ce44..00000000000 --- a/asm/m_Do/m_Do_MemCard/loadfile__15mDoMemCd_Ctrl_cFv.s +++ /dev/null @@ -1,27 +0,0 @@ -lbl_80017274: -/* 80017274 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 80017278 7C 08 02 A6 */ mflr r0 -/* 8001727C 90 01 00 34 */ stw r0, 0x34(r1) -/* 80017280 93 E1 00 2C */ stw r31, 0x2c(r1) -/* 80017284 7C 7F 1B 78 */ mr r31, r3 -/* 80017288 88 63 1F BC */ lbz r3, 0x1fbc(r3) -/* 8001728C 3C 80 80 37 */ lis r4, m_Do_m_Do_MemCard__stringBase0@ha /* 0x803743F8@ha */ -/* 80017290 38 84 43 F8 */ addi r4, r4, m_Do_m_Do_MemCard__stringBase0@l /* 0x803743F8@l */ -/* 80017294 38 A1 00 08 */ addi r5, r1, 8 -/* 80017298 48 34 0D 01 */ bl CARDOpen -/* 8001729C 7C 64 1B 79 */ or. r4, r3, r3 -/* 800172A0 40 82 00 14 */ bne lbl_800172B4 -/* 800172A4 38 61 00 08 */ addi r3, r1, 8 -/* 800172A8 48 34 0E 0D */ bl CARDClose -/* 800172AC 38 60 00 01 */ li r3, 1 -/* 800172B0 48 00 00 10 */ b lbl_800172C0 -lbl_800172B4: -/* 800172B4 7F E3 FB 78 */ mr r3, r31 -/* 800172B8 48 00 00 A9 */ bl setCardState__15mDoMemCd_Ctrl_cFl -/* 800172BC 38 60 00 00 */ li r3, 0 -lbl_800172C0: -/* 800172C0 83 E1 00 2C */ lwz r31, 0x2c(r1) -/* 800172C4 80 01 00 34 */ lwz r0, 0x34(r1) -/* 800172C8 7C 08 03 A6 */ mtlr r0 -/* 800172CC 38 21 00 30 */ addi r1, r1, 0x30 -/* 800172D0 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/mDoMemCd_main__FPv.s b/asm/m_Do/m_Do_MemCard/mDoMemCd_main__FPv.s deleted file mode 100644 index d7e36606c51..00000000000 --- a/asm/m_Do/m_Do_MemCard/mDoMemCd_main__FPv.s +++ /dev/null @@ -1,22 +0,0 @@ -lbl_8001741C: -/* 8001741C 94 21 FF 70 */ stwu r1, -0x90(r1) -/* 80017420 7C 08 02 A6 */ mflr r0 -/* 80017424 90 01 00 94 */ stw r0, 0x94(r1) -/* 80017428 48 32 98 5D */ bl OSGetCurrentThread -/* 8001742C 7C 64 1B 78 */ mr r4, r3 -/* 80017430 38 61 00 08 */ addi r3, r1, 8 -/* 80017434 38 A0 00 00 */ li r5, 0 -/* 80017438 48 2B A2 81 */ bl __ct__9JKRThreadFP8OSThreadi -/* 8001743C 38 61 00 08 */ addi r3, r1, 8 -/* 80017440 38 80 FF FF */ li r4, -1 -/* 80017444 48 2B A3 15 */ bl __dt__9JKRThreadFv -/* 80017448 4B FF 78 9D */ bl mDoExt_getAssertHeap__Fv -/* 8001744C 48 2B 6F ED */ bl becomeCurrentHeap__7JKRHeapFv -/* 80017450 3C 60 80 3F */ lis r3, g_mDoMemCd_control@ha /* 0x803EAF40@ha */ -/* 80017454 38 63 AF 40 */ addi r3, r3, g_mDoMemCd_control@l /* 0x803EAF40@l */ -/* 80017458 4B FF F3 79 */ bl main__15mDoMemCd_Ctrl_cFv -/* 8001745C 38 60 00 00 */ li r3, 0 -/* 80017460 80 01 00 94 */ lwz r0, 0x94(r1) -/* 80017464 7C 08 03 A6 */ mtlr r0 -/* 80017468 38 21 00 90 */ addi r1, r1, 0x90 -/* 8001746C 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/main__15mDoMemCd_Ctrl_cFv.s b/asm/m_Do/m_Do_MemCard/main__15mDoMemCd_Ctrl_cFv.s deleted file mode 100644 index ce5a4fe75b6..00000000000 --- a/asm/m_Do/m_Do_MemCard/main__15mDoMemCd_Ctrl_cFv.s +++ /dev/null @@ -1,60 +0,0 @@ -lbl_800167D0: -/* 800167D0 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 800167D4 7C 08 02 A6 */ mflr r0 -/* 800167D8 90 01 00 14 */ stw r0, 0x14(r1) -/* 800167DC 93 E1 00 0C */ stw r31, 0xc(r1) -/* 800167E0 7C 7F 1B 78 */ mr r31, r3 -lbl_800167E4: -/* 800167E4 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 800167E8 48 32 88 59 */ bl OSLockMutex -/* 800167EC 48 00 00 10 */ b lbl_800167FC -lbl_800167F0: -/* 800167F0 38 7F 1F E4 */ addi r3, r31, 0x1fe4 -/* 800167F4 38 9F 1F CC */ addi r4, r31, 0x1fcc -/* 800167F8 48 32 8B 39 */ bl OSWaitCond -lbl_800167FC: -/* 800167FC 80 1F 1F C0 */ lwz r0, 0x1fc0(r31) -/* 80016800 2C 00 00 00 */ cmpwi r0, 0 -/* 80016804 41 82 FF EC */ beq lbl_800167F0 -/* 80016808 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 8001680C 48 32 89 11 */ bl OSUnlockMutex -/* 80016810 80 1F 1F C0 */ lwz r0, 0x1fc0(r31) -/* 80016814 2C 00 00 03 */ cmpwi r0, 3 -/* 80016818 41 82 00 40 */ beq lbl_80016858 -/* 8001681C 40 80 00 14 */ bge lbl_80016830 -/* 80016820 2C 00 00 01 */ cmpwi r0, 1 -/* 80016824 41 82 00 1C */ beq lbl_80016840 -/* 80016828 40 80 00 24 */ bge lbl_8001684C -/* 8001682C 48 00 00 4C */ b lbl_80016878 -lbl_80016830: -/* 80016830 2C 00 00 05 */ cmpwi r0, 5 -/* 80016834 41 82 00 3C */ beq lbl_80016870 -/* 80016838 40 80 00 40 */ bge lbl_80016878 -/* 8001683C 48 00 00 28 */ b lbl_80016864 -lbl_80016840: -/* 80016840 7F E3 FB 78 */ mr r3, r31 -/* 80016844 48 00 01 C9 */ bl restore__15mDoMemCd_Ctrl_cFv -/* 80016848 48 00 00 30 */ b lbl_80016878 -lbl_8001684C: -/* 8001684C 7F E3 FB 78 */ mr r3, r31 -/* 80016850 48 00 03 85 */ bl store__15mDoMemCd_Ctrl_cFv -/* 80016854 48 00 00 24 */ b lbl_80016878 -lbl_80016858: -/* 80016858 7F E3 FB 78 */ mr r3, r31 -/* 8001685C 48 00 06 4D */ bl format__15mDoMemCd_Ctrl_cFv -/* 80016860 48 00 00 18 */ b lbl_80016878 -lbl_80016864: -/* 80016864 7F E3 FB 78 */ mr r3, r31 -/* 80016868 48 00 07 51 */ bl attach__15mDoMemCd_Ctrl_cFv -/* 8001686C 48 00 00 0C */ b lbl_80016878 -lbl_80016870: -/* 80016870 7F E3 FB 78 */ mr r3, r31 -/* 80016874 48 00 08 9D */ bl detach__15mDoMemCd_Ctrl_cFv -lbl_80016878: -/* 80016878 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 8001687C 48 32 87 C5 */ bl OSLockMutex -/* 80016880 38 00 00 00 */ li r0, 0 -/* 80016884 90 1F 1F C0 */ stw r0, 0x1fc0(r31) -/* 80016888 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 8001688C 48 32 88 91 */ bl OSUnlockMutex -/* 80016890 4B FF FF 54 */ b lbl_800167E4 diff --git a/asm/m_Do/m_Do_MemCard/restore__15mDoMemCd_Ctrl_cFv.s b/asm/m_Do/m_Do_MemCard/restore__15mDoMemCd_Ctrl_cFv.s deleted file mode 100644 index 2615719c8b3..00000000000 --- a/asm/m_Do/m_Do_MemCard/restore__15mDoMemCd_Ctrl_cFv.s +++ /dev/null @@ -1,46 +0,0 @@ -lbl_80016A0C: -/* 80016A0C 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 80016A10 7C 08 02 A6 */ mflr r0 -/* 80016A14 90 01 00 34 */ stw r0, 0x34(r1) -/* 80016A18 93 E1 00 2C */ stw r31, 0x2c(r1) -/* 80016A1C 93 C1 00 28 */ stw r30, 0x28(r1) -/* 80016A20 7C 7E 1B 78 */ mr r30, r3 -/* 80016A24 38 00 00 00 */ li r0, 0 -/* 80016A28 90 03 1F C8 */ stw r0, 0x1fc8(r3) -/* 80016A2C 88 63 1F BC */ lbz r3, 0x1fbc(r3) -/* 80016A30 3C 80 80 37 */ lis r4, m_Do_m_Do_MemCard__stringBase0@ha /* 0x803743F8@ha */ -/* 80016A34 38 84 43 F8 */ addi r4, r4, m_Do_m_Do_MemCard__stringBase0@l /* 0x803743F8@l */ -/* 80016A38 38 A1 00 08 */ addi r5, r1, 8 -/* 80016A3C 48 34 15 5D */ bl CARDOpen -/* 80016A40 7C 7F 1B 79 */ or. r31, r3, r3 -/* 80016A44 40 82 00 40 */ bne lbl_80016A84 -/* 80016A48 38 61 00 08 */ addi r3, r1, 8 -/* 80016A4C 7F C4 F3 78 */ mr r4, r30 -/* 80016A50 38 A0 1F BC */ li r5, 0x1fbc -/* 80016A54 48 00 0C 49 */ bl mDoMemCdRWm_Restore__FP12CARDFileInfoPvUl -/* 80016A58 2C 03 00 00 */ cmpwi r3, 0 -/* 80016A5C 40 82 00 10 */ bne lbl_80016A6C -/* 80016A60 38 00 00 03 */ li r0, 3 -/* 80016A64 90 1E 1F C4 */ stw r0, 0x1fc4(r30) -/* 80016A68 48 00 00 10 */ b lbl_80016A78 -lbl_80016A6C: -/* 80016A6C 7F C3 F3 78 */ mr r3, r30 -/* 80016A70 7F E4 FB 78 */ mr r4, r31 -/* 80016A74 48 00 08 ED */ bl setCardState__15mDoMemCd_Ctrl_cFl -lbl_80016A78: -/* 80016A78 38 61 00 08 */ addi r3, r1, 8 -/* 80016A7C 48 34 16 39 */ bl CARDClose -/* 80016A80 48 00 00 10 */ b lbl_80016A90 -lbl_80016A84: -/* 80016A84 7F C3 F3 78 */ mr r3, r30 -/* 80016A88 7F E4 FB 78 */ mr r4, r31 -/* 80016A8C 48 00 08 D5 */ bl setCardState__15mDoMemCd_Ctrl_cFl -lbl_80016A90: -/* 80016A90 38 00 00 01 */ li r0, 1 -/* 80016A94 90 1E 1F C8 */ stw r0, 0x1fc8(r30) -/* 80016A98 83 E1 00 2C */ lwz r31, 0x2c(r1) -/* 80016A9C 83 C1 00 28 */ lwz r30, 0x28(r1) -/* 80016AA0 80 01 00 34 */ lwz r0, 0x34(r1) -/* 80016AA4 7C 08 03 A6 */ mtlr r0 -/* 80016AA8 38 21 00 30 */ addi r1, r1, 0x30 -/* 80016AAC 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/save__15mDoMemCd_Ctrl_cFPvUlUl.s b/asm/m_Do/m_Do_MemCard/save__15mDoMemCd_Ctrl_cFPvUlUl.s deleted file mode 100644 index c33d12c6548..00000000000 --- a/asm/m_Do/m_Do_MemCard/save__15mDoMemCd_Ctrl_cFPvUlUl.s +++ /dev/null @@ -1,33 +0,0 @@ -lbl_80016B58: -/* 80016B58 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 80016B5C 7C 08 02 A6 */ mflr r0 -/* 80016B60 90 01 00 24 */ stw r0, 0x24(r1) -/* 80016B64 39 61 00 20 */ addi r11, r1, 0x20 -/* 80016B68 48 34 B6 71 */ bl _savegpr_28 -/* 80016B6C 7C 7C 1B 78 */ mr r28, r3 -/* 80016B70 7C 9D 23 78 */ mr r29, r4 -/* 80016B74 7C BE 2B 78 */ mr r30, r5 -/* 80016B78 7C DF 33 78 */ mr r31, r6 -/* 80016B7C 38 7C 1F CC */ addi r3, r28, 0x1fcc -/* 80016B80 48 32 86 D5 */ bl OSTryLockMutex -/* 80016B84 2C 03 00 00 */ cmpwi r3, 0 -/* 80016B88 41 82 00 34 */ beq lbl_80016BBC -/* 80016B8C 7C 7C FA 14 */ add r3, r28, r31 -/* 80016B90 7F A4 EB 78 */ mr r4, r29 -/* 80016B94 7F C5 F3 78 */ mr r5, r30 -/* 80016B98 4B FE C9 A9 */ bl memcpy -/* 80016B9C 38 00 00 00 */ li r0, 0 -/* 80016BA0 90 1C 1F C8 */ stw r0, 0x1fc8(r28) -/* 80016BA4 38 00 00 02 */ li r0, 2 -/* 80016BA8 90 1C 1F C0 */ stw r0, 0x1fc0(r28) -/* 80016BAC 38 7C 1F CC */ addi r3, r28, 0x1fcc -/* 80016BB0 48 32 85 6D */ bl OSUnlockMutex -/* 80016BB4 38 7C 1F E4 */ addi r3, r28, 0x1fe4 -/* 80016BB8 48 32 88 4D */ bl OSSignalCond -lbl_80016BBC: -/* 80016BBC 39 61 00 20 */ addi r11, r1, 0x20 -/* 80016BC0 48 34 B6 65 */ bl _restgpr_28 -/* 80016BC4 80 01 00 24 */ lwz r0, 0x24(r1) -/* 80016BC8 7C 08 03 A6 */ mtlr r0 -/* 80016BCC 38 21 00 20 */ addi r1, r1, 0x20 -/* 80016BD0 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/store__15mDoMemCd_Ctrl_cFv.s b/asm/m_Do/m_Do_MemCard/store__15mDoMemCd_Ctrl_cFv.s deleted file mode 100644 index 2cdb8685890..00000000000 --- a/asm/m_Do/m_Do_MemCard/store__15mDoMemCd_Ctrl_cFv.s +++ /dev/null @@ -1,76 +0,0 @@ -lbl_80016BD4: -/* 80016BD4 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 80016BD8 7C 08 02 A6 */ mflr r0 -/* 80016BDC 90 01 00 34 */ stw r0, 0x34(r1) -/* 80016BE0 93 E1 00 2C */ stw r31, 0x2c(r1) -/* 80016BE4 93 C1 00 28 */ stw r30, 0x28(r1) -/* 80016BE8 7C 7E 1B 78 */ mr r30, r3 -/* 80016BEC 38 00 00 00 */ li r0, 0 -/* 80016BF0 90 03 1F C8 */ stw r0, 0x1fc8(r3) -/* 80016BF4 80 03 1F C4 */ lwz r0, 0x1fc4(r3) -/* 80016BF8 2C 00 00 02 */ cmpwi r0, 2 -/* 80016BFC 40 82 00 48 */ bne lbl_80016C44 -/* 80016C00 88 7E 1F BC */ lbz r3, 0x1fbc(r30) -/* 80016C04 3C 80 80 37 */ lis r4, m_Do_m_Do_MemCard__stringBase0@ha /* 0x803743F8@ha */ -/* 80016C08 38 84 43 F8 */ addi r4, r4, m_Do_m_Do_MemCard__stringBase0@l /* 0x803743F8@l */ -/* 80016C0C 3C A0 00 01 */ lis r5, 0x0001 /* 0x00008000@ha */ -/* 80016C10 38 A5 80 00 */ addi r5, r5, 0x8000 /* 0x00008000@l */ -/* 80016C14 38 C1 00 08 */ addi r6, r1, 8 -/* 80016C18 48 34 18 41 */ bl CARDCreate -/* 80016C1C 7C 7F 1B 79 */ or. r31, r3, r3 -/* 80016C20 41 82 00 0C */ beq lbl_80016C2C -/* 80016C24 2C 1F FF F9 */ cmpwi r31, -7 -/* 80016C28 40 82 00 10 */ bne lbl_80016C38 -lbl_80016C2C: -/* 80016C2C 38 00 00 01 */ li r0, 1 -/* 80016C30 90 1E 1F C4 */ stw r0, 0x1fc4(r30) -/* 80016C34 48 00 00 10 */ b lbl_80016C44 -lbl_80016C38: -/* 80016C38 7F C3 F3 78 */ mr r3, r30 -/* 80016C3C 7F E4 FB 78 */ mr r4, r31 -/* 80016C40 48 00 07 21 */ bl setCardState__15mDoMemCd_Ctrl_cFl -lbl_80016C44: -/* 80016C44 80 1E 1F C4 */ lwz r0, 0x1fc4(r30) -/* 80016C48 2C 00 00 01 */ cmpwi r0, 1 -/* 80016C4C 40 82 00 68 */ bne lbl_80016CB4 -/* 80016C50 88 7E 1F BC */ lbz r3, 0x1fbc(r30) -/* 80016C54 3C 80 80 37 */ lis r4, m_Do_m_Do_MemCard__stringBase0@ha /* 0x803743F8@ha */ -/* 80016C58 38 84 43 F8 */ addi r4, r4, m_Do_m_Do_MemCard__stringBase0@l /* 0x803743F8@l */ -/* 80016C5C 38 A1 00 08 */ addi r5, r1, 8 -/* 80016C60 48 34 13 39 */ bl CARDOpen -/* 80016C64 7C 7F 1B 79 */ or. r31, r3, r3 -/* 80016C68 40 82 00 3C */ bne lbl_80016CA4 -/* 80016C6C 38 61 00 08 */ addi r3, r1, 8 -/* 80016C70 7F C4 F3 78 */ mr r4, r30 -/* 80016C74 38 A0 1F BC */ li r5, 0x1fbc -/* 80016C78 48 00 08 21 */ bl mDoMemCdRWm_Store__FP12CARDFileInfoPvUl -/* 80016C7C 7C 64 1B 79 */ or. r4, r3, r3 -/* 80016C80 41 82 00 10 */ beq lbl_80016C90 -/* 80016C84 7F C3 F3 78 */ mr r3, r30 -/* 80016C88 48 00 06 D9 */ bl setCardState__15mDoMemCd_Ctrl_cFl -/* 80016C8C 48 00 00 0C */ b lbl_80016C98 -lbl_80016C90: -/* 80016C90 38 00 00 04 */ li r0, 4 -/* 80016C94 90 1E 1F C4 */ stw r0, 0x1fc4(r30) -lbl_80016C98: -/* 80016C98 38 61 00 08 */ addi r3, r1, 8 -/* 80016C9C 48 34 14 19 */ bl CARDClose -/* 80016CA0 48 00 00 20 */ b lbl_80016CC0 -lbl_80016CA4: -/* 80016CA4 7F C3 F3 78 */ mr r3, r30 -/* 80016CA8 7F E4 FB 78 */ mr r4, r31 -/* 80016CAC 48 00 06 B5 */ bl setCardState__15mDoMemCd_Ctrl_cFl -/* 80016CB0 48 00 00 10 */ b lbl_80016CC0 -lbl_80016CB4: -/* 80016CB4 7F C3 F3 78 */ mr r3, r30 -/* 80016CB8 7F E4 FB 78 */ mr r4, r31 -/* 80016CBC 48 00 06 A5 */ bl setCardState__15mDoMemCd_Ctrl_cFl -lbl_80016CC0: -/* 80016CC0 38 00 00 01 */ li r0, 1 -/* 80016CC4 90 1E 1F C8 */ stw r0, 0x1fc8(r30) -/* 80016CC8 83 E1 00 2C */ lwz r31, 0x2c(r1) -/* 80016CCC 83 C1 00 28 */ lwz r30, 0x28(r1) -/* 80016CD0 80 01 00 34 */ lwz r0, 0x34(r1) -/* 80016CD4 7C 08 03 A6 */ mtlr r0 -/* 80016CD8 38 21 00 30 */ addi r1, r1, 0x30 -/* 80016CDC 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCard/update__15mDoMemCd_Ctrl_cFv.s b/asm/m_Do/m_Do_MemCard/update__15mDoMemCd_Ctrl_cFv.s deleted file mode 100644 index 1c82cbe017f..00000000000 --- a/asm/m_Do/m_Do_MemCard/update__15mDoMemCd_Ctrl_cFv.s +++ /dev/null @@ -1,76 +0,0 @@ -lbl_80016894: -/* 80016894 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80016898 7C 08 02 A6 */ mflr r0 -/* 8001689C 90 01 00 14 */ stw r0, 0x14(r1) -/* 800168A0 93 E1 00 0C */ stw r31, 0xc(r1) -/* 800168A4 7C 7F 1B 78 */ mr r31, r3 -/* 800168A8 80 8D 86 F8 */ lwz r4, mResetData__6mDoRst(r13) -/* 800168AC 80 04 00 00 */ lwz r0, 0(r4) -/* 800168B0 2C 00 00 00 */ cmpwi r0, 0 -/* 800168B4 41 82 00 30 */ beq lbl_800168E4 -/* 800168B8 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 800168BC 48 32 87 85 */ bl OSLockMutex -/* 800168C0 38 00 00 05 */ li r0, 5 -/* 800168C4 90 1F 1F C0 */ stw r0, 0x1fc0(r31) -/* 800168C8 38 00 00 03 */ li r0, 3 -/* 800168CC 98 1F 1F BE */ stb r0, 0x1fbe(r31) -/* 800168D0 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 800168D4 48 32 88 49 */ bl OSUnlockMutex -/* 800168D8 38 7F 1F E4 */ addi r3, r31, 0x1fe4 -/* 800168DC 48 32 8B 29 */ bl OSSignalCond -/* 800168E0 48 00 00 C0 */ b lbl_800169A0 -lbl_800168E4: -/* 800168E4 38 80 00 00 */ li r4, 0 -/* 800168E8 48 00 04 8D */ bl getStatus__15mDoMemCd_Ctrl_cFUl -/* 800168EC 28 03 00 0E */ cmplwi r3, 0xe -/* 800168F0 41 82 00 B0 */ beq lbl_800169A0 -/* 800168F4 38 60 00 00 */ li r3, 0 -/* 800168F8 48 34 01 1D */ bl CARDProbe -/* 800168FC 2C 03 00 00 */ cmpwi r3, 0 -/* 80016900 41 82 00 4C */ beq lbl_8001694C -/* 80016904 7F E3 FB 78 */ mr r3, r31 -/* 80016908 38 80 00 00 */ li r4, 0 -/* 8001690C 48 00 04 69 */ bl getStatus__15mDoMemCd_Ctrl_cFUl -/* 80016910 28 03 00 00 */ cmplwi r3, 0 -/* 80016914 40 82 00 38 */ bne lbl_8001694C -/* 80016918 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 8001691C 48 32 87 25 */ bl OSLockMutex -/* 80016920 38 00 00 00 */ li r0, 0 -/* 80016924 98 1F 1F BE */ stb r0, 0x1fbe(r31) -/* 80016928 38 00 00 0D */ li r0, 0xd -/* 8001692C 90 1F 1F C4 */ stw r0, 0x1fc4(r31) -/* 80016930 38 00 00 04 */ li r0, 4 -/* 80016934 90 1F 1F C0 */ stw r0, 0x1fc0(r31) -/* 80016938 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 8001693C 48 32 87 E1 */ bl OSUnlockMutex -/* 80016940 38 7F 1F E4 */ addi r3, r31, 0x1fe4 -/* 80016944 48 32 8A C1 */ bl OSSignalCond -/* 80016948 48 00 00 58 */ b lbl_800169A0 -lbl_8001694C: -/* 8001694C 38 60 00 00 */ li r3, 0 -/* 80016950 48 34 00 C5 */ bl CARDProbe -/* 80016954 2C 03 00 00 */ cmpwi r3, 0 -/* 80016958 40 82 00 48 */ bne lbl_800169A0 -/* 8001695C 7F E3 FB 78 */ mr r3, r31 -/* 80016960 38 80 00 00 */ li r4, 0 -/* 80016964 48 00 04 11 */ bl getStatus__15mDoMemCd_Ctrl_cFUl -/* 80016968 28 03 00 00 */ cmplwi r3, 0 -/* 8001696C 41 82 00 34 */ beq lbl_800169A0 -/* 80016970 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 80016974 48 32 86 CD */ bl OSLockMutex -/* 80016978 38 00 00 01 */ li r0, 1 -/* 8001697C 98 1F 1F BE */ stb r0, 0x1fbe(r31) -/* 80016980 38 00 00 0D */ li r0, 0xd -/* 80016984 90 1F 1F C4 */ stw r0, 0x1fc4(r31) -/* 80016988 38 00 00 05 */ li r0, 5 -/* 8001698C 90 1F 1F C0 */ stw r0, 0x1fc0(r31) -/* 80016990 38 7F 1F CC */ addi r3, r31, 0x1fcc -/* 80016994 48 32 87 89 */ bl OSUnlockMutex -/* 80016998 38 7F 1F E4 */ addi r3, r31, 0x1fe4 -/* 8001699C 48 32 8A 69 */ bl OSSignalCond -lbl_800169A0: -/* 800169A0 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 800169A4 80 01 00 14 */ lwz r0, 0x14(r1) -/* 800169A8 7C 08 03 A6 */ mtlr r0 -/* 800169AC 38 21 00 10 */ addi r1, r1, 0x10 -/* 800169B0 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_BuildHeader__FP22mDoMemCdRWm_HeaderData.s b/asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_BuildHeader__FP22mDoMemCdRWm_HeaderData.s deleted file mode 100644 index 51fd86f348e..00000000000 --- a/asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_BuildHeader__FP22mDoMemCdRWm_HeaderData.s +++ /dev/null @@ -1,91 +0,0 @@ -lbl_8001787C: -/* 8001787C 94 21 FF C0 */ stwu r1, -0x40(r1) -/* 80017880 7C 08 02 A6 */ mflr r0 -/* 80017884 90 01 00 44 */ stw r0, 0x44(r1) -/* 80017888 39 61 00 40 */ addi r11, r1, 0x40 -/* 8001788C 48 34 A9 4D */ bl _savegpr_28 -/* 80017890 7C 7F 1B 78 */ mr r31, r3 -/* 80017894 38 7F 24 00 */ addi r3, r31, 0x2400 -/* 80017898 38 80 00 20 */ li r4, 0x20 -/* 8001789C 3C A0 80 37 */ lis r5, m_Do_m_Do_MemCardRWmng__stringBase0@ha /* 0x80374408@ha */ -/* 800178A0 38 A5 44 08 */ addi r5, r5, m_Do_m_Do_MemCardRWmng__stringBase0@l /* 0x80374408@l */ -/* 800178A4 4C C6 31 82 */ crclr 6 -/* 800178A8 48 34 ED 15 */ bl snprintf -/* 800178AC 48 32 AE 51 */ bl OSGetTime -/* 800178B0 38 A1 00 08 */ addi r5, r1, 8 -/* 800178B4 48 32 B0 C1 */ bl OSTicksToCalendarTime -/* 800178B8 38 7F 24 20 */ addi r3, r31, 0x2420 -/* 800178BC 38 80 00 20 */ li r4, 0x20 -/* 800178C0 3C A0 80 37 */ lis r5, m_Do_m_Do_MemCardRWmng__stringBase0@ha /* 0x80374408@ha */ -/* 800178C4 38 A5 44 08 */ addi r5, r5, m_Do_m_Do_MemCardRWmng__stringBase0@l /* 0x80374408@l */ -/* 800178C8 38 A5 00 19 */ addi r5, r5, 0x19 -/* 800178CC 80 C1 00 18 */ lwz r6, 0x18(r1) -/* 800178D0 38 C6 00 01 */ addi r6, r6, 1 -/* 800178D4 80 E1 00 14 */ lwz r7, 0x14(r1) -/* 800178D8 4C C6 31 82 */ crclr 6 -/* 800178DC 48 34 EC E1 */ bl snprintf -/* 800178E0 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 800178E4 3B 83 61 C0 */ addi r28, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 800178E8 80 7C 5C F0 */ lwz r3, 0x5cf0(r28) -/* 800178EC 3C 80 80 37 */ lis r4, m_Do_m_Do_MemCardRWmng__stringBase0@ha /* 0x80374408@ha */ -/* 800178F0 38 84 44 08 */ addi r4, r4, m_Do_m_Do_MemCardRWmng__stringBase0@l /* 0x80374408@l */ -/* 800178F4 38 84 00 29 */ addi r4, r4, 0x29 -/* 800178F8 81 83 00 00 */ lwz r12, 0(r3) -/* 800178FC 81 8C 00 14 */ lwz r12, 0x14(r12) -/* 80017900 7D 89 03 A6 */ mtctr r12 -/* 80017904 4E 80 04 21 */ bctrl -/* 80017908 7C 7D 1B 78 */ mr r29, r3 -/* 8001790C 80 7C 5C F0 */ lwz r3, 0x5cf0(r28) -/* 80017910 3C 80 80 37 */ lis r4, m_Do_m_Do_MemCardRWmng__stringBase0@ha /* 0x80374408@ha */ -/* 80017914 38 84 44 08 */ addi r4, r4, m_Do_m_Do_MemCardRWmng__stringBase0@l /* 0x80374408@l */ -/* 80017918 38 84 00 3E */ addi r4, r4, 0x3e -/* 8001791C 81 83 00 00 */ lwz r12, 0(r3) -/* 80017920 81 8C 00 14 */ lwz r12, 0x14(r12) -/* 80017924 7D 89 03 A6 */ mtctr r12 -/* 80017928 4E 80 04 21 */ bctrl -/* 8001792C 7C 7E 1B 78 */ mr r30, r3 -/* 80017930 7F E3 FB 78 */ mr r3, r31 -/* 80017934 80 1D 00 1C */ lwz r0, 0x1c(r29) -/* 80017938 7C 9D 02 14 */ add r4, r29, r0 -/* 8001793C A0 1D 00 0A */ lhz r0, 0xa(r29) -/* 80017940 54 05 08 3C */ slwi r5, r0, 1 -/* 80017944 38 A5 0C 00 */ addi r5, r5, 0xc00 -/* 80017948 4B FE BB F9 */ bl memcpy -/* 8001794C 38 7F 0E 00 */ addi r3, r31, 0xe00 -/* 80017950 80 1E 00 1C */ lwz r0, 0x1c(r30) -/* 80017954 7C 9E 02 14 */ add r4, r30, r0 -/* 80017958 38 A0 04 00 */ li r5, 0x400 -/* 8001795C 4B FE BB E5 */ bl memcpy -/* 80017960 38 7F 12 00 */ addi r3, r31, 0x1200 -/* 80017964 80 1E 00 1C */ lwz r0, 0x1c(r30) -/* 80017968 7C 9E 02 14 */ add r4, r30, r0 -/* 8001796C 38 A0 04 00 */ li r5, 0x400 -/* 80017970 4B FE BB D1 */ bl memcpy -/* 80017974 38 7F 16 00 */ addi r3, r31, 0x1600 -/* 80017978 80 1E 00 1C */ lwz r0, 0x1c(r30) -/* 8001797C 7C 9E 02 14 */ add r4, r30, r0 -/* 80017980 38 A0 04 00 */ li r5, 0x400 -/* 80017984 4B FE BB BD */ bl memcpy -/* 80017988 38 7F 1A 00 */ addi r3, r31, 0x1a00 -/* 8001798C 80 1E 00 1C */ lwz r0, 0x1c(r30) -/* 80017990 7C 9E 02 14 */ add r4, r30, r0 -/* 80017994 38 A0 04 00 */ li r5, 0x400 -/* 80017998 4B FE BB A9 */ bl memcpy -/* 8001799C 38 7F 1E 00 */ addi r3, r31, 0x1e00 -/* 800179A0 80 1E 00 1C */ lwz r0, 0x1c(r30) -/* 800179A4 7C 9E 02 14 */ add r4, r30, r0 -/* 800179A8 A0 1E 00 0A */ lhz r0, 0xa(r30) -/* 800179AC 54 05 08 3C */ slwi r5, r0, 1 -/* 800179B0 38 A5 04 00 */ addi r5, r5, 0x400 -/* 800179B4 4B FE BB 8D */ bl memcpy -/* 800179B8 80 7C 5C F0 */ lwz r3, 0x5cf0(r28) -/* 800179BC 81 83 00 00 */ lwz r12, 0(r3) -/* 800179C0 81 8C 00 24 */ lwz r12, 0x24(r12) -/* 800179C4 7D 89 03 A6 */ mtctr r12 -/* 800179C8 4E 80 04 21 */ bctrl -/* 800179CC 39 61 00 40 */ addi r11, r1, 0x40 -/* 800179D0 48 34 A8 55 */ bl _restgpr_28 -/* 800179D4 80 01 00 44 */ lwz r0, 0x44(r1) -/* 800179D8 7C 08 03 A6 */ mtlr r0 -/* 800179DC 38 21 00 40 */ addi r1, r1, 0x40 -/* 800179E0 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_SetCheckSumGameData__FPUcUc.s b/asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_SetCheckSumGameData__FPUcUc.s deleted file mode 100644 index b5a13597cda..00000000000 --- a/asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_SetCheckSumGameData__FPUcUc.s +++ /dev/null @@ -1,18 +0,0 @@ -lbl_80017D38: -/* 80017D38 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80017D3C 7C 08 02 A6 */ mflr r0 -/* 80017D40 90 01 00 14 */ stw r0, 0x14(r1) -/* 80017D44 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80017D48 54 80 06 3E */ clrlwi r0, r4, 0x18 -/* 80017D4C 1C 00 0A 94 */ mulli r0, r0, 0xa94 -/* 80017D50 7F E3 02 14 */ add r31, r3, r0 -/* 80017D54 7F E3 FB 78 */ mr r3, r31 -/* 80017D58 38 80 0A 8C */ li r4, 0xa8c -/* 80017D5C 4B FF FF 59 */ bl mDoMemCdRWm_CalcCheckSumGameData__FPvUl -/* 80017D60 90 9F 0A 90 */ stw r4, 0xa90(r31) -/* 80017D64 90 7F 0A 8C */ stw r3, 0xa8c(r31) -/* 80017D68 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80017D6C 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80017D70 7C 08 03 A6 */ mtlr r0 -/* 80017D74 38 21 00 10 */ addi r1, r1, 0x10 -/* 80017D78 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_TestCheckSumGameData__FPv.s b/asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_TestCheckSumGameData__FPv.s deleted file mode 100644 index f5cd97de9d6..00000000000 --- a/asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_TestCheckSumGameData__FPv.s +++ /dev/null @@ -1,20 +0,0 @@ -lbl_80017CEC: -/* 80017CEC 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80017CF0 7C 08 02 A6 */ mflr r0 -/* 80017CF4 90 01 00 14 */ stw r0, 0x14(r1) -/* 80017CF8 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80017CFC 7C 7F 1B 78 */ mr r31, r3 -/* 80017D00 38 80 0A 8C */ li r4, 0xa8c -/* 80017D04 4B FF FF B1 */ bl mDoMemCdRWm_CalcCheckSumGameData__FPvUl -/* 80017D08 80 1F 0A 8C */ lwz r0, 0xa8c(r31) -/* 80017D0C 80 BF 0A 90 */ lwz r5, 0xa90(r31) -/* 80017D10 7C 84 2A 78 */ xor r4, r4, r5 -/* 80017D14 7C 60 02 78 */ xor r0, r3, r0 -/* 80017D18 7C 80 03 78 */ or r0, r4, r0 -/* 80017D1C 7C 00 00 34 */ cntlzw r0, r0 -/* 80017D20 54 03 DE 3E */ rlwinm r3, r0, 0x1b, 0x18, 0x1f -/* 80017D24 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80017D28 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80017D2C 7C 08 03 A6 */ mtlr r0 -/* 80017D30 38 21 00 10 */ addi r1, r1, 0x10 -/* 80017D34 4E 80 00 20 */ blr diff --git a/include/JSystem/JUtility/JUTTexture.h b/include/JSystem/JUtility/JUTTexture.h index 901503df7e2..d2832d81d72 100644 --- a/include/JSystem/JUtility/JUTTexture.h +++ b/include/JSystem/JUtility/JUTTexture.h @@ -28,8 +28,8 @@ struct ResTIMG { /* Acts as the header to image data. Usually texture data immed /* 0x18 */ u8 mipmapCount; /* 0x19 */ u8 unknown; /* 0x1A */ s16 LODBias; - /* 0x1B */ u32 texDataOffset; -}; // Size: 0x1C + /* 0x1C */ u32 texDataOffset; +}; // Size: 0x20 class JUTTexture { public: diff --git a/include/dolphin/card/card.h b/include/dolphin/card/card.h new file mode 100644 index 00000000000..04fa0f03eb2 --- /dev/null +++ b/include/dolphin/card/card.h @@ -0,0 +1,74 @@ +#ifndef CARD_H +#define CARD_H + +#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); + +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 /* CARD_H */ diff --git a/include/dolphin/mtx/mtx.h b/include/dolphin/mtx/mtx.h index 721d861cb3e..0cf5da75ff7 100644 --- a/include/dolphin/mtx/mtx.h +++ b/include/dolphin/mtx/mtx.h @@ -1,38 +1,43 @@ #ifndef MTX_H #define MTX_H +#include "dolphin/mtx/mtx44.h" #include "dolphin/mtx/quat.h" #include "dolphin/mtx/vec.h" #include "dolphin/types.h" -typedef float Mtx[3][4]; -typedef float Mtx33[3][3]; -typedef float Mtx23[2][3]; +typedef f32 Mtx[3][4]; +typedef f32 Mtx33[3][3]; +typedef f32 Mtx23[2][3]; typedef f32 (*MtxP)[4]; typedef const f32 (*CMtxP)[4]; // Change name later? extern "C" { -void PSMTXIdentity(Mtx matrix); +void PSMTXIdentity(Mtx m); void PSMTXCopy(const Mtx src, Mtx dst); -void PSMTXConcat(const Mtx src_a, const Mtx src_b, Mtx dst); -u32 PSMTXInverse(const Mtx src, Mtx dst); -void PSMTXRotRad(Mtx matrix, u8 axis, float rad); -void PSMTXRotTrig(Mtx matrix, u8 axis, float sin, float cos); -double __PSMTXRotAxisRadInternal(double param_1, double param_2, int param_3, int param_4); -void PSMTXRotAxisRad(Mtx matrix, const Vec* axis, float rad); -void PSMTXTrans(Mtx matrix, float x_trans, float y_trans, float z_trans); -void PSMTXTransApply(const Mtx src, Mtx dst, float x, float y, float z); -void PSMTXScale(Mtx matrix, float x_scale, float y_scale, float z_scale); -void PSMTXScaleApply(const Mtx src, Mtx dst, float x_scale, float y_scale, float z_scale); -void PSMTXQuat(Mtx matrix, const Quaternion* quat); -void PSMTXMultVec(const Mtx matrix, const Vec* src, Vec* dst); -void PSMTXMultVecSR(const Mtx matrix, const Vec* src, Vec* dst); +void PSMTXConcat(const Mtx a, const Mtx b, Mtx ab); +u32 PSMTXInverse(const Mtx src, Mtx inv); +void PSMTXRotRad(Mtx m, u8 axis, f32 rad); +void PSMTXRotTrig(Mtx m, u8 axis, f32 sin, f32 cos); +f64 __PSMTXRotAxisRadInternal(f64 param_1, f64 param_2, int param_3, int param_4); +void PSMTXRotAxisRad(Mtx m, const Vec* axis, f32 rad); +void PSMTXTrans(Mtx m, f32 x_trans, f32 y_trans, f32 z_trans); +void PSMTXTransApply(const Mtx src, Mtx dst, f32 x, f32 y, f32 z); +void PSMTXScale(Mtx m, f32 x_scale, f32 y_scale, f32 z_scale); +void PSMTXScaleApply(const Mtx src, Mtx dst, f32 x_scale, f32 y_scale, f32 z_scale); +void PSMTXQuat(Mtx m, const Quaternion* q); +void PSMTXMultVec(const Mtx m, const Vec* src, Vec* dst); +void PSMTXMultVecSR(const Mtx m, const Vec* src, Vec* dst); +void PSMTXMultVec(const Mtx m, const Vec* src, Vec* dst); +void PSMTXMultVecArray(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count); +void PSMTXMultVecSR(const Mtx m, const Vec* src, Vec* dst); +void PSMTXMultVecArraySR(const Mtx m, const Vec* srcBase, Vec* dstBase, u32 count); -void C_MTXLookAt(Mtx param_1, const Vec* param_2, const Vec* param_3, const Vec* param_4); -void C_MTXLightPerspective(Mtx matrix, float fov_y, float aspect, float scale_s, float scale_t, - float trans_s, float trans_t); -void C_MTXLightOrtho(Mtx matrix, float top, float bottom, float left, float right, float scale_s, - float scale_t, float trans_s, float trans_t); +void C_MTXLookAt(Mtx m, const Vec* camPos, const Vec* camUp, const Vec* target); +void C_MTXLightPerspective(Mtx m, f32 fovY, f32 aspect, f32 scale_s, f32 scale_t, f32 trans_s, + f32 trans_t); +void C_MTXLightOrtho(Mtx m, f32 top, f32 bottom, f32 left, f32 right, f32 scale_s, f32 scale_t, + f32 trans_s, f32 trans_t); } #endif /* MTX_H */ diff --git a/include/dolphin/mtx/mtx44.h b/include/dolphin/mtx/mtx44.h index 12fd1b93390..69e2cc84f78 100644 --- a/include/dolphin/mtx/mtx44.h +++ b/include/dolphin/mtx/mtx44.h @@ -6,10 +6,8 @@ typedef float Mtx44[4][4]; extern "C" { - -void C_MTXPerspective(Mtx44 matrix, float fov_y, float aspect, float near, float far); -void C_MTXOrtho(Mtx44 matrix, float top, float bottom, float left, float right, float near, - float far); +void C_MTXPerspective(Mtx44 m, f32 fovy, f32 aspect, f32 near, f32 far); +void C_MTXOrtho(Mtx44 m, f32 top, f32 bottom, f32 left, f32 right, f32 near, f32 far); } #endif /* MTX44_H */ diff --git a/include/dolphin/mtx/quat.h b/include/dolphin/mtx/quat.h index 7cb4f0abe32..832c04eef11 100644 --- a/include/dolphin/mtx/quat.h +++ b/include/dolphin/mtx/quat.h @@ -5,13 +5,13 @@ #include "dolphin/types.h" struct Quaternion { - float x, y, z, w; + f32 x, y, z, w; }; extern "C" { void PSQUATMultiply(const Quaternion* src_a, const Quaternion* src_b, Quaternion* dst); -void C_QUATRotAxisRad(Quaternion* quat, const Vec* axis, float rad); -void C_QUATSlerp(const Quaternion* p, const Quaternion* q, Quaternion* r, float t); +void C_QUATRotAxisRad(Quaternion* q, const Vec* axis, f32 rad); +void C_QUATSlerp(const Quaternion* p, const Quaternion* q, Quaternion* r, f32 t); } #endif /* QUAT_H */ diff --git a/include/dolphin/mtx/vec.h b/include/dolphin/mtx/vec.h index a1accce9bcd..2b8091fb5a5 100644 --- a/include/dolphin/mtx/vec.h +++ b/include/dolphin/mtx/vec.h @@ -4,13 +4,13 @@ #include "dolphin/types.h" struct Vec { - float x, y, z; - float GetX() const { return x; } - float GetY() const { return y; } - float GetZ() const { return z; } - float getXDiff(const Vec* other) const { return x - other->x; } - float getYDiff(const Vec* other) const { return y - other->y; } - float getZDiff(const Vec* other) const { return z - other->z; } + f32 x, y, z; + f32 GetX() const { return x; } + f32 GetY() const { return y; } + f32 GetZ() const { return z; } + f32 getXDiff(const Vec* other) const { return x - other->x; } + f32 getYDiff(const Vec* other) const { return y - other->y; } + f32 getZDiff(const Vec* other) const { return z - other->z; } void set(f32 pX, f32 pY, f32 pZ) { x = pX; y = pY; @@ -23,6 +23,10 @@ struct Vec { } }; +typedef Vec* VecPtr; +typedef Vec Point3d; +typedef Vec* Point3dPtr; + struct SVec { s16 x, y, z; @@ -34,18 +38,19 @@ struct SVec { }; extern "C" { -void PSVECAdd(const Vec* src_a, const Vec* src_b, Vec* dst); -void PSVECSubtract(const Vec* a, const Vec* b, Vec* dst); -void PSVECScale(const Vec* src, Vec* dst, float scale); -void PSVECNormalize(const Vec* src, Vec* dst); -float PSVECSquareMag(const Vec* vec); -float PSVECMag(const Vec* data); -float PSVECDotProduct(const Vec* a, const Vec* b); -void PSVECCrossProduct(const Vec* src_a, const Vec* src_b, Vec* dst); -void C_VECHalfAngle(const Vec* incident, const Vec* line_of_sight, Vec* out_half); -void C_VECReflect(const Vec* src, const Vec* surface_normal, Vec* dst); -float PSVECSquareDistance(const Vec* a, const Vec* b); -float PSVECDistance(const Vec* a, const Vec* b); +void PSVECAdd(const Vec* a, const Vec* b, Vec* ab); +void PSVECSubtract(const Vec* a, const Vec* b, Vec* a_b); +void PSVECScale(const Vec* src, Vec* dst, f32 scale); +void PSVECNormalize(const Vec* src, Vec* unit); +f32 PSVECSquareMag(const Vec* v); +f32 PSVECMag(const Vec* v); +f32 PSVECDotProduct(const Vec* a, const Vec* b); +void PSVECCrossProduct(const Vec* a, const Vec* b, Vec* axb); +f32 PSVECSquareDistance(const Vec* a, const Vec* b); +f32 PSVECDistance(const Vec* a, const Vec* b); + +void C_VECHalfAngle(const Vec* a, const Vec* b, Vec* half); +void C_VECReflect(const Vec* src, const Vec* normal, Vec* dst); } #endif /* VEC_H */ diff --git a/include/dolphin/os/OS.h b/include/dolphin/os/OS.h index eab991f6250..51aff6b9cf4 100644 --- a/include/dolphin/os/OS.h +++ b/include/dolphin/os/OS.h @@ -137,7 +137,7 @@ struct OSAlarmLink { /* 0x4 */ OSAlarm* next; }; -typedef void (*OSAlarmHandler)(OSAlarm*, OSContext*); +typedef void (*OSAlarmHandler)(OSAlarm* alarm, OSContext* context); struct OSAlarm { /* 0x00 */ OSAlarmHandler handler; @@ -157,13 +157,13 @@ OSThread* OSGetCurrentThread(void); s32 OSSuspendThread(OSThread* thread); s32 OSSetThreadPriority(OSThread* thread, u32 pri); s32 OSGetThreadPriority(OSThread* thread); -s32 OSCreateThread(OSThread* thread, void* func, void* param, void* stack, u32 stackSize, - int param_6, int param_7); +BOOL OSCreateThread(OSThread* thread, void* func, void* param, void* stack, u32 stackSize, + int priority, int attr); void OSCancelThread(OSThread* thread); void OSDetachThread(OSThread* thread); s32 OSResumeThread(OSThread* thread); void OSExitThread(void* exit_val); -bool OSIsThreadSuspended(OSThread* thread); +BOOL OSIsThreadSuspended(OSThread* thread); BOOL OSIsThreadTerminated(OSThread* thread); OSSwitchThreadCallback OSSetSwitchThreadCallback(OSSwitchThreadCallback callback); @@ -197,21 +197,19 @@ OSTick OSGetTick(void); u32 OSGetArenaLo(); u32 OSGetArenaHi(); -u32 OSInitAlloc(u32 low, u32 high, int param_3); -void OSSetArenaLo(u32 param_1); -void OSSetArenaHi(u32 param_1); +u32 OSInitAlloc(u32 low, u32 high, int maxHeaps); +void OSSetArenaLo(u32 newLo); +void OSSetArenaHi(u32 newHi); void* OSAllocFromArenaLo(u32 size, int alignment); -// void OSCancelAlarm(OSAlarm *alarm); - void OSInitMutex(OSMutex* mutex); void OSLockMutex(OSMutex* mutex); -void OSTryLockMutex(OSMutex* mutex); +BOOL OSTryLockMutex(OSMutex* mutex); void OSUnlockMutex(OSMutex* mutex); -s32 OSDisableInterrupts(); -s32 OSEnableInterrupts(); -s32 OSRestoreInterrupts(s32 level); +BOOL OSDisableInterrupts(); +BOOL OSEnableInterrupts(); +BOOL OSRestoreInterrupts(s32 level); void OSResetSystem(s32 param_1, u32 param_2, s32 param_3); @@ -223,9 +221,13 @@ void OSReportInit__Fv(void); // needed for inline asm u8* OSGetStackPointer(void); -void OSCreateAlarm(OSAlarm*); -void OSCancelAlarm(OSAlarm*); -void OSSetAlarm(OSAlarm*, OSTime, OSAlarmHandler); +void OSCreateAlarm(OSAlarm* alarm); +void OSCancelAlarm(OSAlarm* alarm); +void OSSetAlarm(OSAlarm* alarm, OSTime time, OSAlarmHandler handler); + +void OSInitCond(OSCond* cond); +void OSWaitCond(OSCond* cond, OSMutex* mutex); +void OSSignalCond(OSCond* cond); inline s16 __OSf32tos16(register f32 inF) { register s16 out; diff --git a/include/m_Do/m_Do_MemCard.h b/include/m_Do/m_Do_MemCard.h index e432e003025..b91cb63326e 100644 --- a/include/m_Do/m_Do_MemCard.h +++ b/include/m_Do/m_Do_MemCard.h @@ -4,47 +4,59 @@ #include "dolphin/os/OS.h" #include "dolphin/types.h" #include "global.h" +#include "m_Do/m_Do_MemCardRWmng.h" class mDoMemCd_Ctrl_c { public: + enum CardCommand { + CARD_NO_COMMAND, + CARD_RESTORE, + CARD_STORE, + CARD_FORMAT, + CARD_ATTACH, + CARD_DETACH, + }; + /* 8001672C */ mDoMemCd_Ctrl_c(); /* 80016730 */ void ThdInit(); /* 800167D0 */ void main(); /* 80016894 */ void update(); /* 800169B4 */ void load(); /* 80016A0C */ void restore(); - /* 80016AB0 */ void LoadSync(void*, u32, u32); + /* 80016AB0 */ s32 LoadSync(void*, u32, u32); /* 80016B58 */ void save(void*, u32, u32); /* 80016BD4 */ void store(); - /* 80016CE0 */ void SaveSync(); - /* 80016D74 */ void getStatus(u32); + /* 80016CE0 */ s32 SaveSync(); + /* 80016D74 */ u32 getStatus(u32); /* 80016E58 */ void command_format(); /* 80016EA8 */ void format(); - /* 80016F2C */ void FormatSync(); + /* 80016F2C */ s32 FormatSync(); /* 80016FB8 */ void attach(); /* 800170B8 */ void command_attach(); /* 80017110 */ void detach(); - /* 80017148 */ void mount(); - /* 80017274 */ void loadfile(); - /* 800172D4 */ void checkspace(); + /* 80017148 */ s32 mount(); + /* 80017274 */ s32 loadfile(); + /* 800172D4 */ s32 checkspace(); /* 80017360 */ void setCardState(s32); - /* 0x0000 */ u8 field_0x0[0x1FBC]; - /* 0x1FBC */ u8 field_0x1fbc; + /* 0x0000 */ u8 mData[0x1FBC]; + /* 0x1FBC */ u8 mChannel; /* 0x1FBD */ u8 mCopyToPos; /* 0x1FBE */ u8 mProbeStat; - /* 0x1FC0 */ u32 field_0x1fc0; - /* 0x1FC4 */ u32 field_0x1fc4; - /* 0x1FC8 */ u32 field_0x1fc8; - /* 0x1FCC */ OSMutex field_0x1fcc; - /* 0x1FE4 */ OSCond field_0x1fe4; + /* 0x1FC0 */ s32 mCardCommand; + /* 0x1FC4 */ s32 mCardState; + /* 0x1FC8 */ s32 field_0x1fc8; + /* 0x1FCC */ OSMutex mMutex; + /* 0x1FE4 */ OSCond mCond; /* 0x1FEC */ u32 mNandState; - /* 0x1FF0 */ u64 field_0x1ff0; + /* 0x1FF0 */ u64 mSerialNo; /* 0x1FF8 */ u32 mDataVersion; }; // Size: 0x2000 STATIC_ASSERT(sizeof(mDoMemCd_Ctrl_c) == 8192); +static int mDoMemCd_main(void*); + extern mDoMemCd_Ctrl_c g_mDoMemCd_control; #endif /* M_DO_M_DO_MEMCARD_H */ diff --git a/include/m_Do/m_Do_MemCardRWmng.h b/include/m_Do/m_Do_MemCardRWmng.h index eb8b1082669..935ef9dd4ac 100644 --- a/include/m_Do/m_Do_MemCardRWmng.h +++ b/include/m_Do/m_Do_MemCardRWmng.h @@ -1,6 +1,30 @@ #ifndef M_DO_M_DO_MEMCARDRWMNG_H #define M_DO_M_DO_MEMCARDRWMNG_H +#include "dolphin/card/card.h" #include "dolphin/types.h" +struct mDoMemCdRWm_HeaderData { + /* 0x0000 */ u8 mBannerTexData[0xC00]; + /* 0x0C00 */ u8 mBannerPalData[0x200]; + /* 0x0E00 */ u8 mIconTexData0[0x400]; + /* 0x1200 */ u8 mIconTexData1[0x400]; + /* 0x1600 */ u8 mIconTexData2[0x400]; + /* 0x1A00 */ u8 mIconTexData3[0x400]; + /* 0x1E00 */ u8 mIconTexData4[0x400]; + /* 0x2200 */ u8 mIconPalData[0x200]; + /* 0x2400 */ char mTitle[0x20]; + /* 0x2420 */ char mComment[0x20]; +}; + +s32 mDoMemCdRWm_Restore(CARDFileInfo* param_0, void* param_1, u32 param_2); +s32 mDoMemCdRWm_Store(CARDFileInfo* param_0, void* param_1, u32 param_2); +static void mDoMemCdRWm_BuildHeader(mDoMemCdRWm_HeaderData* header); +static void mDoMemCdRWm_SetCardStat(CARDFileInfo* file); +static BOOL mDoMemCdRWm_CheckCardStat(CARDFileInfo* file); +static u32 mDoMemCdRWm_CalcCheckSum(void* data, u32 size); +static u64 mDoMemCdRWm_CalcCheckSumGameData(void* data, u32 size); +BOOL mDoMemCdRWm_TestCheckSumGameData(void* data); +void mDoMemCdRWm_SetCheckSumGameData(u8* data, u8 dataNum); + #endif /* M_DO_M_DO_MEMCARDRWMNG_H */ diff --git a/libs/JSystem/JParticle/JPABaseShape.cpp b/libs/JSystem/JParticle/JPABaseShape.cpp index 158ac11b4fe..1f28bc8c1c2 100644 --- a/libs/JSystem/JParticle/JPABaseShape.cpp +++ b/libs/JSystem/JParticle/JPABaseShape.cpp @@ -114,7 +114,6 @@ extern "C" void setGX__12JPABaseShapeCFP18JPAEmitterWorkData(); extern "C" void func_8027EEB0(); extern "C" void alloc__7JKRHeapFUliP7JKRHeap(); extern "C" void load__10JUTTextureF11_GXTexMapID(); -extern "C" void PSMTXMultVecArraySR(); extern "C" void _savegpr_22(); extern "C" void _savegpr_24(); extern "C" void _savegpr_28(); diff --git a/src/m_Do/m_Do_MemCard.cpp b/src/m_Do/m_Do_MemCard.cpp index 329695f0fff..55dfb43baab 100644 --- a/src/m_Do/m_Do_MemCard.cpp +++ b/src/m_Do/m_Do_MemCard.cpp @@ -4,27 +4,12 @@ // #include "m_Do/m_Do_MemCard.h" +#include "JSystem/JKernel/JKRThread.h" +#include "MSL_C/MSL_Common/Src/string.h" #include "dol2asm.h" #include "dolphin/types.h" - -// -// Types: -// - -struct mDoRst { - static u8 mResetData[4 + 4 /* padding */]; -}; - -struct JKRThread { - /* 802D16B8 */ JKRThread(OSThread*, int); - /* 802D1758 */ ~JKRThread(); -}; - -struct JKRHeap { - /* 802CE438 */ void becomeCurrentHeap(); -}; - -struct CARDFileInfo {}; +#include "m_Do/m_Do_Ext.h" +#include "m_Do/m_Do_Reset.h" // // Forward References: @@ -59,27 +44,12 @@ extern "C" extern char const* const m_Do_m_Do_MemCard__stringBase0; // External References: // -SECTION_INIT void memcpy(); extern "C" void mDoExt_getAssertHeap__Fv(); extern "C" void mDoMemCdRWm_Store__FP12CARDFileInfoPvUl(); extern "C" void mDoMemCdRWm_Restore__FP12CARDFileInfoPvUl(); extern "C" void becomeCurrentHeap__7JKRHeapFv(); extern "C" void __ct__9JKRThreadFP8OSThreadi(); extern "C" void __dt__9JKRThreadFv(); -extern "C" void OSInitCond(); -extern "C" void OSWaitCond(); -extern "C" void OSSignalCond(); -extern "C" void CARDInit(); -extern "C" void CARDFreeBlocks(); -extern "C" void CARDCheck(); -extern "C" void CARDProbe(); -extern "C" void CARDProbeEx(); -extern "C" void CARDMount(); -extern "C" void CARDUnmount(); -extern "C" void CARDFormat(); -extern "C" void CARDOpen(); -extern "C" void CARDClose(); -extern "C" void CARDCreate(); extern "C" void _savegpr_27(); extern "C" void _savegpr_28(); extern "C" void _restgpr_27(); @@ -91,178 +61,359 @@ extern "C" u8 mResetData__6mDoRst[4 + 4 /* padding */]; // /* 8001672C-80016730 01106C 0004+00 1/1 0/0 0/0 .text __ct__15mDoMemCd_Ctrl_cFv */ -mDoMemCd_Ctrl_c::mDoMemCd_Ctrl_c() { - /* empty function */ -} +mDoMemCd_Ctrl_c::mDoMemCd_Ctrl_c() {} /* ############################################################################################## */ /* 803DFC20-803E0C20 00C940 1000+00 1/1 0/0 0/0 .bss MemCardStack */ static u8 MemCardStack[4096]; /* 803E0C20-803E0F40 00D940 0318+08 1/1 0/0 0/0 .bss MemCardThread */ -static u8 MemCardThread[792 + 8 /* padding */]; +static OSThread MemCardThread; /* 80016730-800167D0 011070 00A0+00 0/0 1/1 0/0 .text ThdInit__15mDoMemCd_Ctrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::ThdInit() { - nofralloc -#include "asm/m_Do/m_Do_MemCard/ThdInit__15mDoMemCd_Ctrl_cFv.s" +void mDoMemCd_Ctrl_c::ThdInit() { + CARDInit(); + mCopyToPos = 0; + mProbeStat = 2; + mCardState = 0; + mCardCommand = CARD_NO_COMMAND; + mChannel = 0; + + OSInitMutex(&mMutex); + OSInitCond(&mCond); + + int priority = OSGetThreadPriority(OSGetCurrentThread()); + OSCreateThread(&MemCardThread, mDoMemCd_main, NULL, MemCardStack + sizeof(MemCardStack), + sizeof(MemCardStack), priority + 1, 1); + OSResumeThread(&MemCardThread); } -#pragma pop /* 800167D0-80016894 011110 00C4+00 1/1 0/0 0/0 .text main__15mDoMemCd_Ctrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::main() { - nofralloc -#include "asm/m_Do/m_Do_MemCard/main__15mDoMemCd_Ctrl_cFv.s" +void mDoMemCd_Ctrl_c::main() { + do { + OSLockMutex(&mMutex); + while (mCardCommand == CARD_NO_COMMAND) { + OSWaitCond(&mCond, &mMutex); + } + OSUnlockMutex(&mMutex); + + switch (mCardCommand) { + case CARD_RESTORE: + restore(); + break; + case CARD_STORE: + store(); + break; + case CARD_FORMAT: + format(); + break; + case CARD_ATTACH: + attach(); + break; + case CARD_DETACH: + detach(); + break; + } + + OSLockMutex(&mMutex); + mCardCommand = CARD_NO_COMMAND; + OSUnlockMutex(&mMutex); + } while (true); } -#pragma pop /* 80016894-800169B4 0111D4 0120+00 0/0 1/1 0/0 .text update__15mDoMemCd_Ctrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::update() { - nofralloc -#include "asm/m_Do/m_Do_MemCard/update__15mDoMemCd_Ctrl_cFv.s" +void mDoMemCd_Ctrl_c::update() { + if (mDoRst::isReset()) { + OSLockMutex(&mMutex); + mCardCommand = CARD_DETACH; + mProbeStat = 3; + OSUnlockMutex(&mMutex); + OSSignalCond(&mCond); + } else if (getStatus(0) != 14) { + if (CARDProbe(0) && getStatus(0) == 0) { + OSLockMutex(&mMutex); + mProbeStat = 0; + mCardState = 13; + mCardCommand = CARD_ATTACH; + OSUnlockMutex(&mMutex); + OSSignalCond(&mCond); + } else if (!CARDProbe(0) && getStatus(0) != 0) { + OSLockMutex(&mMutex); + mProbeStat = 1; + mCardState = 13; + mCardCommand = CARD_DETACH; + OSUnlockMutex(&mMutex); + OSSignalCond(&mCond); + } + } } -#pragma pop /* 800169B4-80016A0C 0112F4 0058+00 0/0 2/2 0/0 .text load__15mDoMemCd_Ctrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::load() { - nofralloc -#include "asm/m_Do/m_Do_MemCard/load__15mDoMemCd_Ctrl_cFv.s" +void mDoMemCd_Ctrl_c::load() { + if (OSTryLockMutex(&mMutex)) { + field_0x1fc8 = 0; + mCardCommand = CARD_RESTORE; + OSUnlockMutex(&mMutex); + OSSignalCond(&mCond); + } } -#pragma pop - -/* ############################################################################################## */ -/* 803743F8-803743F8 000A58 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_803743F8 = "gczelda2"; -/* @stringBase0 padding */ -SECTION_DEAD static char const* const pad_80374401 = "\0\0\0\0\0\0"; -#pragma pop /* 80016A0C-80016AB0 01134C 00A4+00 1/1 0/0 0/0 .text restore__15mDoMemCd_Ctrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::restore() { - nofralloc -#include "asm/m_Do/m_Do_MemCard/restore__15mDoMemCd_Ctrl_cFv.s" +void mDoMemCd_Ctrl_c::restore() { + CARDFileInfo file; + field_0x1fc8 = 0; + + s32 card_state = CARDOpen(mChannel, "gczelda2", &file); + if (card_state == CARD_ERROR_READY) { + if (!mDoMemCdRWm_Restore(&file, this, sizeof(mData))) { + mCardState = 3; + } else { + setCardState(card_state); + } + CARDClose(&file); + } else { + setCardState(card_state); + } + + field_0x1fc8 = 1; } -#pragma pop /* 80016AB0-80016B58 0113F0 00A8+00 0/0 2/2 0/0 .text LoadSync__15mDoMemCd_Ctrl_cFPvUlUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::LoadSync(void* param_0, u32 param_1, u32 param_2) { - nofralloc -#include "asm/m_Do/m_Do_MemCard/LoadSync__15mDoMemCd_Ctrl_cFPvUlUl.s" +s32 mDoMemCd_Ctrl_c::LoadSync(void* buffer, u32 size, u32 index) { + int ret = 0; + + if (field_0x1fc8 == 0) { + return 0; + } + + if (OSTryLockMutex(&mMutex)) { + if (mCardState == 3) { + memcpy(buffer, &mData[index], size); + mCardState = 1; + ret = 1; + } else { + mCardState = 2; + ret = 2; + } + OSUnlockMutex(&mMutex); + } + + return ret; } -#pragma pop /* 80016B58-80016BD4 011498 007C+00 0/0 2/2 0/0 .text save__15mDoMemCd_Ctrl_cFPvUlUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::save(void* param_0, u32 param_1, u32 param_2) { - nofralloc -#include "asm/m_Do/m_Do_MemCard/save__15mDoMemCd_Ctrl_cFPvUlUl.s" +void mDoMemCd_Ctrl_c::save(void* buffer, u32 size, u32 index) { + if (OSTryLockMutex(&mMutex)) { + memcpy(&mData[index], buffer, size); + field_0x1fc8 = 0; + mCardCommand = CARD_STORE; + OSUnlockMutex(&mMutex); + OSSignalCond(&mCond); + } } -#pragma pop /* 80016BD4-80016CE0 011514 010C+00 1/1 0/0 0/0 .text store__15mDoMemCd_Ctrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::store() { - nofralloc -#include "asm/m_Do/m_Do_MemCard/store__15mDoMemCd_Ctrl_cFv.s" +void mDoMemCd_Ctrl_c::store() { + CARDFileInfo file; + s32 card_state; + field_0x1fc8 = 0; + + if (mCardState == 2) { + card_state = CARDCreate(mChannel, "gczelda2", 0x8000, &file); + if (card_state == CARD_ERROR_READY || card_state == CARD_ERROR_EXIST) { + mCardState = 1; + } else { + setCardState(card_state); + } + } + + if (mCardState == 1) { + card_state = CARDOpen(mChannel, "gczelda2", &file); + if (card_state == CARD_ERROR_READY) { + card_state = mDoMemCdRWm_Store(&file, this, sizeof(mData)); + if (card_state != CARD_ERROR_READY) { + setCardState(card_state); + } else { + mCardState = 4; + } + CARDClose(&file); + } else { + setCardState(card_state); + } + } else { + setCardState(card_state); + } + + field_0x1fc8 = 1; } -#pragma pop /* 80016CE0-80016D74 011620 0094+00 0/0 6/6 0/0 .text SaveSync__15mDoMemCd_Ctrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::SaveSync() { - nofralloc -#include "asm/m_Do/m_Do_MemCard/SaveSync__15mDoMemCd_Ctrl_cFv.s" -} -#pragma pop +s32 mDoMemCd_Ctrl_c::SaveSync() { + int ret = 0; -/* ############################################################################################## */ -/* 803A34F8-803A3530 -00001 0038+00 1/1 0/0 0/0 .data @3770 */ -SECTION_DATA static void* lit_3770[14] = { - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0x74), - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0x4C), - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0x54), - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0x5C), - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0x64), - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0x6C), - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0x7C), - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0x84), - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0x8C), - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0x94), - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0x9C), - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0xA4), - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0xAC), - (void*)(((char*)getStatus__15mDoMemCd_Ctrl_cFUl) + 0xB4), -}; + if (field_0x1fc8 == 0) { + return 0; + } + + if (OSTryLockMutex(&mMutex)) { + if (mCardState == 4) { + mCardState = 1; + ret = 1; + } else if (mCardState == 1) { + ret = 0; + } else { + ret = 2; + } + OSUnlockMutex(&mMutex); + } + + return ret; +} /* 80016D74-80016E58 0116B4 00E4+00 2/1 2/2 0/0 .text getStatus__15mDoMemCd_Ctrl_cFUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::getStatus(u32 param_0) { - nofralloc -#include "asm/m_Do/m_Do_MemCard/getStatus__15mDoMemCd_Ctrl_cFUl.s" +u32 mDoMemCd_Ctrl_c::getStatus(u32) { + u32 status; + if (OSTryLockMutex(&mMutex)) { + switch (mCardState) { + case 1: + status = 2; + break; + case 2: + status = 1; + break; + case 3: + status = 3; + break; + case 4: + status = 4; + break; + case 5: + status = 5; + break; + case 0: + status = 0; + break; + case 6: + status = 7; + break; + case 7: + status = 6; + break; + case 8: + status = 11; + break; + case 9: + status = 12; + break; + case 10: + status = 9; + break; + case 11: + status = 10; + break; + case 12: + status = 8; + break; + case 13: + status = 14; + break; + } + + OSUnlockMutex(&mMutex); + return status; + } + + return 14; } -#pragma pop /* 80016E58-80016EA8 011798 0050+00 0/0 2/2 0/0 .text command_format__15mDoMemCd_Ctrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::command_format() { - nofralloc -#include "asm/m_Do/m_Do_MemCard/command_format__15mDoMemCd_Ctrl_cFv.s" +void mDoMemCd_Ctrl_c::command_format() { + if (OSTryLockMutex(&mMutex)) { + mCardCommand = CARD_FORMAT; + OSUnlockMutex(&mMutex); + OSSignalCond(&mCond); + } } -#pragma pop /* 80016EA8-80016F2C 0117E8 0084+00 1/1 0/0 0/0 .text format__15mDoMemCd_Ctrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::format() { - nofralloc -#include "asm/m_Do/m_Do_MemCard/format__15mDoMemCd_Ctrl_cFv.s" +void mDoMemCd_Ctrl_c::format() { + field_0x1fc8 = 0; + + s32 card_state = CARDFormat(mChannel); + if (OSTryLockMutex(&mMutex)) { + if (card_state == CARD_ERROR_READY) { + mCardState = 5; + } else { + setCardState(card_state); + } + + field_0x1fc8 = 1; + OSUnlockMutex(&mMutex); + } } -#pragma pop /* 80016F2C-80016FB8 01186C 008C+00 0/0 2/2 0/0 .text FormatSync__15mDoMemCd_Ctrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::FormatSync() { - nofralloc -#include "asm/m_Do/m_Do_MemCard/FormatSync__15mDoMemCd_Ctrl_cFv.s" +s32 mDoMemCd_Ctrl_c::FormatSync() { + int ret = 0; + + if (field_0x1fc8 == 0) { + return 0; + } + + if (OSTryLockMutex(&mMutex)) { + if (mCardState != 13) { + if (mCardState == 5) { + mCardState = 2; + ret = 1; + } else { + ret = 2; + } + } + OSUnlockMutex(&mMutex); + } + + return ret; } -#pragma pop /* 80016FB8-800170B8 0118F8 0100+00 1/1 0/0 0/0 .text attach__15mDoMemCd_Ctrl_cFv */ +// switch has case issues +#ifdef NONMATCHING +void mDoMemCd_Ctrl_c::attach() { + s32 mem_size; + s32 sect_size; + + s32 card_state = CARDProbeEx(mChannel, &mem_size, §_size); + if (card_state == CARD_ERROR_NOCARD) { + mCardState = 0; + } else if (card_state == CARD_ERROR_FATAL_ERROR) { + mCardState = 12; + } else if (card_state == CARD_ERROR_WRONGDEVICE) { + mCardState = 10; + } else if (sect_size != 0x2000) { + mCardState = 11; + } else { + if (mount()) { + if (loadfile()) { + mCardState = 1; + } else { + switch (checkspace()) { + case 0: + mCardState = 2; + break; + case 1: + mCardState = 8; + break; + case 2: + mCardState = 9; + break; + } + } + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -271,27 +422,24 @@ asm void mDoMemCd_Ctrl_c::attach() { #include "asm/m_Do/m_Do_MemCard/attach__15mDoMemCd_Ctrl_cFv.s" } #pragma pop +#endif /* 800170B8-80017110 0119F8 0058+00 0/0 1/1 0/0 .text command_attach__15mDoMemCd_Ctrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::command_attach() { - nofralloc -#include "asm/m_Do/m_Do_MemCard/command_attach__15mDoMemCd_Ctrl_cFv.s" +void mDoMemCd_Ctrl_c::command_attach() { + if (OSTryLockMutex(&mMutex)) { + mCardState = 13; + mCardCommand = CARD_ATTACH; + OSUnlockMutex(&mMutex); + OSSignalCond(&mCond); + } } -#pragma pop /* 80017110-80017148 011A50 0038+00 1/1 0/0 0/0 .text detach__15mDoMemCd_Ctrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::detach() { - nofralloc -#include "asm/m_Do/m_Do_MemCard/detach__15mDoMemCd_Ctrl_cFv.s" +void mDoMemCd_Ctrl_c::detach() { + CARDUnmount(mChannel); + mCardState = 0; } -#pragma pop /* ############################################################################################## */ /* 803A3530-803A3568 -00001 0038+00 1/1 0/0 0/0 .data @3850 */ @@ -313,33 +461,37 @@ SECTION_DATA static void* lit_3850[14] = { }; /* 803E0F40-803EAF40 00DC60 A000+00 1/1 0/0 0/0 .bss MemCardWorkArea0 */ -static u8 MemCardWorkArea0[40960]; +static u8 MemCardWorkArea0[5 * 8 * 1024] ALIGN_DECL(32); /* 80017148-80017274 011A88 012C+00 2/1 0/0 0/0 .text mount__15mDoMemCd_Ctrl_cFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::mount() { +asm s32 mDoMemCd_Ctrl_c::mount() { nofralloc #include "asm/m_Do/m_Do_MemCard/mount__15mDoMemCd_Ctrl_cFv.s" } #pragma pop /* 80017274-800172D4 011BB4 0060+00 1/1 0/0 0/0 .text loadfile__15mDoMemCd_Ctrl_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::loadfile() { - nofralloc -#include "asm/m_Do/m_Do_MemCard/loadfile__15mDoMemCd_Ctrl_cFv.s" +s32 mDoMemCd_Ctrl_c::loadfile() { + CARDFileInfo file; + + s32 card_state = CARDOpen(mChannel, "gczelda2", &file); + if (card_state == CARD_ERROR_READY) { + CARDClose(&file); + return CARD_ERROR_UNLOCKED; + } else { + setCardState(card_state); + return CARD_ERROR_READY; + } } -#pragma pop /* 800172D4-80017360 011C14 008C+00 1/1 0/0 0/0 .text checkspace__15mDoMemCd_Ctrl_cFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void mDoMemCd_Ctrl_c::checkspace() { +asm s32 mDoMemCd_Ctrl_c::checkspace() { nofralloc #include "asm/m_Do/m_Do_MemCard/checkspace__15mDoMemCd_Ctrl_cFv.s" } @@ -347,6 +499,31 @@ asm void mDoMemCd_Ctrl_c::checkspace() { /* 80017360-8001741C 011CA0 00BC+00 5/5 0/0 0/0 .text setCardState__15mDoMemCd_Ctrl_cFl */ +// cases aren't fully correct +#ifdef NONMATCHING +void mDoMemCd_Ctrl_c::setCardState(s32 param_0) { + switch (param_0) { + case CARD_ERROR_IOERROR: + case CARD_ERROR_FATAL_ERROR: + mCardState = 12; + break; + case CARD_ERROR_NOCARD: + mCardState = 0; + break; + case CARD_ERROR_READY: + if (CARDCheck(mChannel) != 0) { + mCardState = 7; + } + break; + case CARD_ERROR_ENCODING: + mCardState = 6; + break; + case CARD_ERROR_BROKEN: + mCardState = 2; + break; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -355,19 +532,20 @@ asm void mDoMemCd_Ctrl_c::setCardState(s32 param_0) { #include "asm/m_Do/m_Do_MemCard/setCardState__15mDoMemCd_Ctrl_cFl.s" } #pragma pop +#endif /* ############################################################################################## */ /* 803EAF40-803ECF40 017C60 2000+00 2/2 27/27 0/0 .bss g_mDoMemCd_control */ mDoMemCd_Ctrl_c g_mDoMemCd_control; /* 8001741C-80017470 011D5C 0054+00 1/1 0/0 0/0 .text mDoMemCd_main__FPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void mDoMemCd_main(void* param_0) { - nofralloc -#include "asm/m_Do/m_Do_MemCard/mDoMemCd_main__FPv.s" +static int mDoMemCd_main(void*) { + { JKRThread thread(OSGetCurrentThread(), 0); } + + mDoExt_getAssertHeap()->becomeCurrentHeap(); + + g_mDoMemCd_control.main(); + return 0; } -#pragma pop /* 803743F8-803743F8 000A58 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/m_Do/m_Do_MemCardRWmng.cpp b/src/m_Do/m_Do_MemCardRWmng.cpp index 4b54218bd36..8f656bd41e4 100644 --- a/src/m_Do/m_Do_MemCardRWmng.cpp +++ b/src/m_Do/m_Do_MemCardRWmng.cpp @@ -4,16 +4,12 @@ // #include "m_Do/m_Do_MemCardRWmng.h" +#include "MSL_C/MSL_Common/Src/printf.h" +#include "MSL_C/MSL_Common/Src/string.h" +#include "d/com/d_com_inf_game.h" #include "dol2asm.h" #include "dolphin/types.h" - -// -// Types: -// - -struct mDoMemCdRWm_HeaderData {}; - -struct CARDFileInfo {}; +#include "m_Do/m_Do_MemCard.h" // // Forward References: @@ -34,22 +30,10 @@ extern "C" extern char const* const m_Do_m_Do_MemCardRWmng__stringBase0; // External References: // -SECTION_INIT void memset(); -SECTION_INIT void memcpy(); -extern "C" void OSGetTime(); -extern "C" void OSTicksToCalendarTime(); -extern "C" void CARDRead(); -extern "C" void CARDWrite(); -extern "C" void CARDGetStatus(); -extern "C" void CARDSetStatus(); -extern "C" void CARDGetSerialNo(); extern "C" void _savegpr_20(); extern "C" void _savegpr_28(); extern "C" void _restgpr_20(); extern "C" void _restgpr_28(); -extern "C" void snprintf(); -extern "C" extern u8 g_mDoMemCd_control[8192]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; // // Declarations: @@ -57,50 +41,95 @@ extern "C" extern u8 g_dComIfG_gameInfo[122384]; /* ############################################################################################## */ /* 803ECF40-803F0F40 019C60 4000+00 2/2 0/0 0/0 .bss sTmpBuf */ -static u8 sTmpBuf[16384]; +static u8 sTmpBuf[0x4000]; /* 80017498-8001769C 011DD8 0204+00 0/0 1/1 0/0 .text mDoMemCdRWm_Store__FP12CARDFileInfoPvUl */ +#ifdef NONMATCHING +void mDoMemCdRWm_Store(CARDFileInfo* file, void* data, u32 length) { + mDoMemCdRWm_BuildHeader((mDoMemCdRWm_HeaderData*)sTmpBuf); + + s32 card_state = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf), 0); + if (card_state != CARD_ERROR_READY) { + if (!mDoMemCdRWm_CheckCardStat(file)) { + memset(sTmpBuf, 0, sizeof(sTmpBuf)); + + card_state = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x4000); + if (card_state == CARD_ERROR_READY) { + return; + } + + card_state = CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x6000); + if (card_state == CARD_ERROR_READY) { + return; + } + } + + memset(sTmpBuf, 0, sizeof(sTmpBuf)); + *(int*)(sTmpBuf + 4) = 6; + memcpy(sTmpBuf + 8, data, length); + *(int*)(sTmpBuf) = 0; + u32 checksum = mDoMemCdRWm_CalcCheckSum(sTmpBuf, 0x1FFC); + *(u32*)(sTmpBuf + 0x1FFC) = checksum; + + if (CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x4000) == CARD_ERROR_READY && + CARDRead(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x4000) == CARD_ERROR_READY) { + if (checksum == mDoMemCdRWm_CalcCheckSum(sTmpBuf, 0x1FFC)) { + if (CARDWrite(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x6000) == CARD_ERROR_READY && + CARDRead(file, sTmpBuf, sizeof(sTmpBuf) / 2, 0x6000) == CARD_ERROR_READY) { + if (checksum == mDoMemCdRWm_CalcCheckSum(sTmpBuf, 0x1FFC)) { + mDoMemCdRWm_SetCardStat(file); + } + } + } + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void mDoMemCdRWm_Store(CARDFileInfo* param_0, void* param_1, u32 param_2) { +asm s32 mDoMemCdRWm_Store(CARDFileInfo* param_0, void* param_1, u32 param_2) { nofralloc #include "asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_Store__FP12CARDFileInfoPvUl.s" } #pragma pop +#endif /* 8001769C-8001787C 011FDC 01E0+00 0/0 1/1 0/0 .text mDoMemCdRWm_Restore__FP12CARDFileInfoPvUl */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void mDoMemCdRWm_Restore(CARDFileInfo* param_0, void* param_1, u32 param_2) { +asm s32 mDoMemCdRWm_Restore(CARDFileInfo* param_0, void* param_1, u32 param_2) { nofralloc #include "asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_Restore__FP12CARDFileInfoPvUl.s" } #pragma pop -/* ############################################################################################## */ -/* 80374408-80374408 000A68 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80374408 = "Zelda: Twilight Princess"; -SECTION_DEAD static char const* const stringBase_80374421 = "%d/%d Save Data"; -SECTION_DEAD static char const* const stringBase_80374431 = "zelda2_gc_banner.bti"; -SECTION_DEAD static char const* const stringBase_80374446 = "zelda2_gc_icon.bti"; -/* @stringBase0 padding */ -SECTION_DEAD static char const* const pad_80374459 = "\0\0\0\0\0\0"; -#pragma pop - /* 8001787C-800179E4 0121BC 0168+00 1/1 0/0 0/0 .text * mDoMemCdRWm_BuildHeader__FP22mDoMemCdRWm_HeaderData */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void mDoMemCdRWm_BuildHeader(mDoMemCdRWm_HeaderData* param_0) { - nofralloc -#include "asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_BuildHeader__FP22mDoMemCdRWm_HeaderData.s" +static void mDoMemCdRWm_BuildHeader(mDoMemCdRWm_HeaderData* header) { + snprintf(header->mTitle, sizeof(header->mTitle), "Zelda: Twilight Princess"); + + OSCalendarTime time; + OSTicksToCalendarTime(OSGetTime(), &time); + snprintf(header->mComment, sizeof(header->mComment), "%d/%d Save Data", time.month + 1, + time.day_of_month); + + ResTIMG* banner_data = + (ResTIMG*)g_dComIfG_gameInfo.play.mCardIconResArchive->getResource("zelda2_gc_banner.bti"); + ResTIMG* icon_data = + (ResTIMG*)g_dComIfG_gameInfo.play.mCardIconResArchive->getResource("zelda2_gc_icon.bti"); + + memcpy(header->mBannerTexData, (u8*)banner_data + banner_data->texDataOffset, + (banner_data->paletteCount * 2) + 0xC00); + memcpy(header->mIconTexData0, (u8*)icon_data + icon_data->texDataOffset, 0x400); + memcpy(header->mIconTexData1, (u8*)icon_data + icon_data->texDataOffset, 0x400); + memcpy(header->mIconTexData2, (u8*)icon_data + icon_data->texDataOffset, 0x400); + memcpy(header->mIconTexData3, (u8*)icon_data + icon_data->texDataOffset, 0x400); + memcpy(header->mIconTexData4, (u8*)icon_data + icon_data->texDataOffset, + (icon_data->paletteCount * 2) + 0x400); + g_dComIfG_gameInfo.play.mCardIconResArchive->removeResourceAll(); } -#pragma pop /* 800179E4-80017B4C 012324 0168+00 1/1 0/0 0/0 .text mDoMemCdRWm_SetCardStat__FP12CARDFileInfo */ #pragma push @@ -117,50 +146,77 @@ static asm void mDoMemCdRWm_SetCardStat(CARDFileInfo* param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void mDoMemCdRWm_CheckCardStat(CARDFileInfo* param_0) { +static asm BOOL mDoMemCdRWm_CheckCardStat(CARDFileInfo* param_0) { nofralloc #include "asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_CheckCardStat__FP12CARDFileInfo.s" } #pragma pop /* 80017C74-80017CB4 0125B4 0040+00 1/1 0/0 0/0 .text mDoMemCdRWm_CalcCheckSum__FPvUl */ +// matches except regalloc in the beginning +#ifdef NONMATCHING +static u32 mDoMemCdRWm_CalcCheckSum(void* data, u32 size) { + u16 high = 0; + u16 low = 0; + + u16* d = (u16*)data; + for (int i = 0; i < size / 2; i++) { + high += *d; + low += ~*d; + d++; + } + + return high << 16 | low; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void mDoMemCdRWm_CalcCheckSum(void* param_0, u32 param_1) { +static asm u32 mDoMemCdRWm_CalcCheckSum(void* param_0, u32 param_1) { nofralloc #include "asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_CalcCheckSum__FPvUl.s" } #pragma pop +#endif /* 80017CB4-80017CEC 0125F4 0038+00 2/2 0/0 0/0 .text mDoMemCdRWm_CalcCheckSumGameData__FPvUl */ +// same beginning regalloc issue +#ifdef NONMATCHING +static u64 mDoMemCdRWm_CalcCheckSumGameData(void* data, u32 size) { + u32 high = 0; + u32 low = 0; + + u8* d = (u8*)data; + for (int i = 0; i < size; i++) { + high += *d; + low += ~*d; + d++; + } + + return (u64)high << 32 | low; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void mDoMemCdRWm_CalcCheckSumGameData(void* param_0, u32 param_1) { +static asm u64 mDoMemCdRWm_CalcCheckSumGameData(void* param_0, u32 param_1) { nofralloc #include "asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_CalcCheckSumGameData__FPvUl.s" } #pragma pop +#endif /* 80017CEC-80017D38 01262C 004C+00 1/1 4/4 0/0 .text mDoMemCdRWm_TestCheckSumGameData__FPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCdRWm_TestCheckSumGameData(void* param_0) { - nofralloc -#include "asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_TestCheckSumGameData__FPv.s" +BOOL mDoMemCdRWm_TestCheckSumGameData(void* data) { + u64 checksum = mDoMemCdRWm_CalcCheckSumGameData(data, 0xA8C); + return checksum == *(u64*)((u8*)data + 0xA8C); } -#pragma pop /* 80017D38-80017D7C 012678 0044+00 0/0 4/4 0/0 .text mDoMemCdRWm_SetCheckSumGameData__FPUcUc */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoMemCdRWm_SetCheckSumGameData(u8* param_0, u8 param_1) { - nofralloc -#include "asm/m_Do/m_Do_MemCardRWmng/mDoMemCdRWm_SetCheckSumGameData__FPUcUc.s" +void mDoMemCdRWm_SetCheckSumGameData(u8* data, u8 dataNum) { + u8* file_ptr = data + (dataNum * 0xA94); + + *(u64*)(file_ptr + 0xA8C) = mDoMemCdRWm_CalcCheckSumGameData(file_ptr, 0xA8C); } -#pragma pop /* 80374408-80374408 000A68 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */