Commit graph

52 commits

Author SHA1 Message Date
Wiseguy d5ab74220d
Various mod fixes (#95)
* Terminate offline mod recompilation if any functions fail to recompile

* Fixed edge case with switch case jump table detection when lo16 immediate is exactly 0

* Prevent emitting duplicate reference symbol defines in offline mod recompilation

* Fix function calls and add missing runtime function pointers in offline mod recompiler
2024-09-12 18:54:08 -04:00
Wiseguy cc71b31b09
Modding Support PR 2 (Finished mod tool base feature set and improvements for use in N64ModernRuntime) (#93)
* Remove reference context from parse_mod_symbols argument

* Add support for special dependency names (self and base recomp), fix non-compliant offline mod recompiler output

* Fix export names not being set on functions when parsing mod syms, add missing returns to mod parsing

* Switch offline mod recompilation to use a base global event index instead of per-event global indices

* Add support for creating events in normal recompilation

* Output recomp API version in offline mod recompiler

* Removed dependency version from mod symbols (moved to manifest)

* Added mod manifest generation to mod tool

* Implement mod file creation in Windows

* Fixed some error prints not using stderr

* Implement mod file creation on posix systems

* De-hardcode symbol file path for offline mod recompiler

* Fix duplicate import symbols issue and prevent emitting unused imports
2024-09-09 22:49:57 -04:00
Wiseguy 5b17bf8bb5
Modding Support PR 1 (Instruction tables, modding support, mod symbol format, library conversion) (#89)
* Initial implementation of binary operation table

* Initial implementation of unary operation table

* More binary op types, moved binary expression string generation into separate function

* Added and implemented conditional branch instruction table

* Fixed likely swap on bgezal, fixed extra indent branch close and missing
indent on branch statement

* Add operands for other uses of float registers

* Added CHECK_FR generation to binary operation processing, moved float comparison instructions to binary op table

* Finished moving float arithmetic instructions to operation tables

* Added store instruction operation table

* Created Generator interface, separated operation types and tables and C generation code into new files

* Fix mov.d using the wrong input operand

* Move recompiler core logic into a core library and make the existing CLI consume the core library

* Removed unnecessary config input to recompilation functions

* Moved parts of recomp_port.h into new internal headers in src folder

* Changed recomp port naming to N64Recomp

* Remove some unused code and document which Context fields are actually required for recompilation

* Implement mod symbol parsing

* Restructure mod symbols to make replacements global instead of per-section

* Refactor elf parsing into static Context method for reusability

* Move elf parsing into a separate library

* WIP elf to mod tool, currently working without relocations or API exports/imports

* Make mod tool emit relocs and patch binary for non-relocatable symbol references as needed

* Implemented writing import and exports in the mod tool

* Add dependencies to the mod symbol format, finish exporting and importing of mod symbols

* Add first pass offline mod recompiler (generates C from mods that can be compiled and linked into a dynamic library)

* Add strict mode and ability to generate exports for normal recompilation (for patches)

* Move mod context fields into base context, move import symbols into separate vector, misc cleanup

* Some cleanup by making some Context members private

* Add events (from dependencies and exported) and callbacks to the mod symbol format and add support to them in elf parsing

* Add runtime-driven fields to offline mod recompiler, fix event symbol relocs using the wrong section in the mod tool

* Move file header writing outside of function recompilation

* Allow cross-section relocations, encode exact target section in mod relocations, add way to tag reference symbol relocations

* Add local symbol addresses array to offline mod recompiler output and rename original one to reference section addresses

* Add more comments to the offline mod recompiler's output

* Fix handling of section load addresses to match objcopy behavior, added event parsing to dependency tomls, minor cleanup

* Fixed incorrect size used for finding section segments

* Add missing includes for libstdc++

* Rework callbacks and imports to use the section name for identifying the dependency instead of relying on per-dependency tomls
2024-08-26 23:06:34 -04:00
Wiseguy f8d439aeee
Add option to output multiple functions per file, defaults to 50 (#88) 2024-08-15 00:17:09 -04:00
Mr-Wiseguy 424a509b22 Allow zero-sized symbols in a specific range for patches, fixed cases where errors didn't terminate the recompiler 2024-08-15 00:00:25 -04:00
Mr-Wiseguy 4161ef68cc Made recompilation header include configurable 2024-08-15 00:00:25 -04:00
Mr-Wiseguy dfd90057c9 Rewrote jal resolution to improve handling for overlapping overlays 2024-08-15 00:00:25 -04:00
Wiseguy ba4aede49c
Add symbol reference file mechanism for elf recompilation (#82)
* Consolidate context dumping toggle into a single bool, begin work on data symbol context dumping
* Added data symbol context dumping
* Fix mthi/mtlo implementation
* Add option to control unpaired LO16 warnings
2024-07-02 21:42:22 -04:00
Anghelo Carvajal 16819a0515
Add libgultra_d functions to ignored_funcs (#60) 2024-06-21 08:38:15 -04:00
David Chavez 2a2df89349
Remove disable_warnings header include (#75) 2024-06-05 00:02:37 +02:00
David Chavez 8dfed04919
Update headers to use new namespace in N64ModernRuntime (#74) 2024-06-03 21:46:42 +02:00
Gilles Siberlin 6eb7d5bd3e
Implement hook insertion (#73)
* Implement function hook insertion

* Fix recompiled code indentation

* Add _matherr to renamed_funcs

* Replace after_vram by before_vram

* Emit dummy value if relocatable_sections_ordered is empty
2024-05-31 23:31:50 -04:00
Mr-Wiseguy e0e52d1fc3
Symbol file toml update (#52)
* Symbol input file mechanism

* Migration to new toml lib

---------

Co-authored-by: dcvz <david@dcvz.io>
2024-05-16 22:33:08 -04:00
Anghelo Carvajal 26c5c2cbb8
Implement tail calls in the middle of functions and allow recomping libgcc math routines (#43) 2024-05-14 18:56:23 -04:00
Anghelo Carvajal 5d46de6de0
Add more renamed_funcs (#35) 2024-05-14 15:06:47 -04:00
Anghelo Carvajal d7b223fde5
Implement bgezal/bgezall (#23) 2024-05-12 22:07:46 -04:00
Tharo dbf0e623c8
Implement doubleword multiply and divide, and conversions between doubleword and single/double precision floats (#16) 2024-05-11 14:08:15 -04:00
Mr-Wiseguy 5838e4223a Add license and readme 2024-05-10 17:19:30 -04:00
Mr-Wiseguy 0f813247a1 Added CMake build system, fixed warnings on clang, removed VS solution/projects 2024-04-20 21:05:50 -04:00
Mr-Wiseguy 47c9033b61 Improved reloc pairing 2024-04-20 20:00:48 -04:00
Mr-Wiseguy 50d55bd171 Added manual sections input option, fixed bug with multiplications and added mthi/lo instructions 2024-04-20 20:00:29 -04:00
Mr-Wiseguy 72fe4ed79c Added some missing float comparison instructions and fixed functions incorrectly getting detected as the entrypoint 2024-03-11 00:15:31 -04:00
Mr-Wiseguy 9a4f650c9b Fixed relocatable section file path error using the wrong value, added an include for funcs.h to single-file output mode 2023-11-24 15:11:36 -05:00
Mr-Wiseguy be275c198a Added single-file mode and absolute symbol options (for patch recompilation) 2023-11-12 14:50:50 -05:00
Mr-Wiseguy d249363fe5 Misc upgrades including mips3 float mode support, skip overwriting existing files if they're identical to the current recompiled output 2023-10-29 20:53:17 -04:00
Mr-Wiseguy 9321a60f28 Properly implement unaligned load/store instructions 2023-05-21 17:42:25 -04:00
Mr-Wiseguy 3db07f5b26 Fixed signedness issue in formatted entrypoint address 2023-04-27 23:17:26 -04:00
M0liusX 30b1fceaf2 Fix MSVC v143 errors with fmt 2023-04-27 12:53:43 -05:00
Mr-Wiseguy 302dd091c2 Implement application of single-instruction patches 2023-03-24 20:28:36 -04:00
Mr-Wiseguy 9949813018 Implemented parsing of instruction patches in config file 2023-03-24 19:22:30 -04:00
Mr-Wiseguy 7df3e28c76 Implemented function stubbing 2023-03-24 18:04:21 -04:00
Mr-Wiseguy fba0085946 Added toml11 and implemented initial config file parsing, replaces command-line arg inputs 2023-03-24 17:11:17 -04:00
Mr-Wiseguy f4324ee599 Split OoT into its own repo 2023-03-22 01:15:04 -04:00
Mr-Wiseguy 85a04d74e7 Fixed missing rounding_mode variable in generated code 2023-03-21 23:37:52 -04:00
Mr-Wiseguy 52644095f0 Added MM aspMain parameters to rsp recomp, added voice and flash to special function lists 2023-02-19 22:43:08 -05:00
Mr-Wiseguy 7babd24bd1 Implemented audio ucode recomp and audio interface, removed restrict usage due to issues with release builds 2023-02-15 17:59:25 -05:00
Mr-Wiseguy 217a30b032 Implemented RSP microcode recompilation 2023-02-14 01:06:41 -05:00
Mr-Wiseguy fedeb72451 Fixed out of bounds error in writing section load addresses 2023-02-06 22:13:06 -05:00
Mr-Wiseguy 602be9c2c6 Implemented relocatable overlays (OoT runs) 2023-02-04 00:14:03 -05:00
Mr-Wiseguy d2603ce07c More libultra function implementations, euc-jp decoding for print output, improved build times for output project 2023-01-16 23:01:21 -05:00
Mr-Wiseguy c6de2b6189 WIP overlay support and some libultra function implementations for other games 2023-01-12 23:39:49 -05:00
Mr-Wiseguy 0af9d489b3 Made recompiled output run the game's entrypoint, various reorganization, clang warning fixes 2022-11-25 15:31:16 -05:00
Mr-Wiseguy 6e45fac005 "Fixed" implementation of lwl/swl (fixes initial test games), implemented more controller functionality 2022-11-20 22:56:13 -05:00
Mr-Wiseguy aad1bac933 Integrated SDL2 and switch to a test rom, fixed some issues in recompilation 2022-11-20 12:51:08 -05:00
Mr-Wiseguy d0c3eb73ec Integrated RT64 (not included in repo), sign extended addresses 2022-11-19 18:12:47 -05:00
Mr-Wiseguy 39b67c8468 Implemented SP, DP, and SI events
Inject a thread pause into infinite loops to allow the idle thread to
yield for event processing
Removed all preemption usage from the scheduler
2022-11-18 16:12:39 -05:00
Mr-Wiseguy 5d9ea96abc Added temp for switch case operand, fixed compilation issues in output 2022-11-15 19:55:48 -05:00
Mr-Wiseguy 2300a4b6c9 Implemented register state tracking to identify jump tables for jr instructions 2022-11-15 19:55:48 -05:00
Mr-Wiseguy 84fd433dcc Implemented jal function lookup 2022-11-15 19:55:48 -05:00
Mr-Wiseguy 8a0f0da0cc Implemented initial set of instructions and ignored functions 2022-11-15 19:55:48 -05:00