aboutsummaryrefslogtreecommitdiff
path: root/src/ARM.h
Commit message (Collapse)AuthorAge
* Sprinkle `const` around where appropriate (#1909)Jesse Talavera2023-12-12
| | | | | | | | | * Sprinkle `const` around where appropriate - This will make it easier to use `NDS` objects in `const` contexts (e.g. `const` parameters or methods) * Remove the `const` qualifier on `DSi_DSP::DSPRead16` - MMIO reads can be non-pure, so this may not be `const` in the future
* Move some constants to `MemConstants.h`Jesse Talavera-Greenberg2023-12-08
|
* Remove the last `ConfigEntry` state (#1902)Jesse Talavera2023-12-05
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Get rid of `ConfigEntry::ExternalBIOSEnable` - Now the BIOS files themselves are checked - The frontend's `Config::ExternalBIOSEnable` is not affected * Add `JITArgs` * Pass the JIT status to the `ARM` constructors * Encapsulate `NDS::EnableJIT` * Pass `JITArgs` to `ARMJIT`'s constructor * Remove the `JIT_*` `ConfigEntry`s in favor of members - Allow all the JIT args to be set with `NDS::SetJITArgs` - Encapsulate the JIT-related parameters in `ARMJIT` so they can reset the block cache if changed - Update the active (or newly-created) console in the frontend with adjusted JIT args * Make audio bit depth and interpolation configurable in `NDSArgs` - Define enums for both - Give those settings default values in `NDSArgs` - Remove `ConfigEntry::AudioBitDepth` - Initialize these settings in the relevant SPU constructors * Move the last DSi-specific logic in `Reset` to its own subclass * Remove `ConfigEntry::DSi_FullBIOSBoot` - Add members to `DSi` instead for getting and setting this - Update the frontend to accommodate these changes * Oops, missed a spot * Remove `ConfigEntry::Firm_MAC` and `Platform::GetConfigArray` - Also move the MAC parsing code to `ROMManager` * Remove the last `ConfigEntry` state - Make GDB support configurable via members * Add some `#ifdef`s that I'd almost forgotten
* Refactor `NDS` and `DSi` to be objects (#1893)Jesse Talavera-Greenberg2023-11-28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * First crack at refactoring NDS and DSi into objects - Remove all global/`static` variables in `NDS` and related classes - Rely more on virtual dispatch when we need to pick methods at runtime - Pass `NDS&` or `DSi&` to its constituent components where necessary - Introduce some headers or move some definitions to break `#include` cycles * Refactor the frontend to accommodate the core's changes * Move up `SchedList`'s declaration - Move it to before the components are initialized so the `map`s inside are initialized - Fields in C++ are initialized in the order they're declared * Fix a crash when allocating memory * Fix JIT-free builds * Fix GDB-free builds * Fix Linux builds - Explicitly qualify some member types in NDS, since they share the same name as their classes * Remove an unnecessary template argument - This was causing the build to fail on macOS * Fix ARM and Android builds * Rename `Constants.h` to `MemConstants.h` * Add `NDS::IsRunning()` * Use an `#include` guard instead of `#pragma once`
* Move all core types into namespaces (#1886)Jesse Talavera-Greenberg2023-11-25
| | | | | | | | * Reorganize namespaces - Most types are now moved into the `melonDS` namespace - Only good chance to do this for a while, since a big refactor is next * Fix the build
* Refactor the JIT to be object-oriented (#1879)Jesse Talavera-Greenberg2023-11-18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Move TinyVector to a new file - So it's less sensitive to #include ordering * Forgot to include assert.h * Refactor ARMJIT_Memory into an object * Oops, forgot a declaration * Refactor ARMJIT to be contained in an object * Remove an unused function declaration * Add a missing #include * Remove a now-unused global * Use ARMJIT_Memory's own memory access functions * Fix some omissions in the ARM JIT * Move libandroid to be a member of ARMJIT_Memory instead of a global * Default-initialize most fields in ARMJIT_Compiler.h * Define NOOP_IF_NO_JIT * Finish refactoring the JIT to be object-oriented
* Refactor the GPU to be object-oriented (#1873)Jesse Talavera-Greenberg2023-11-09
| | | | | | | | | | | | | | | | | * Refactor GPU3D to be an object - Who has two thumbs and is the sworn enemy of global state? This guy! * Refactor GPU itself to be an object - Wow, it's used in a lot of places - Also introduce a new `Melon` namespace for a few classes - I expect other classes will be moved into `Melon` over time * Change signature of Renderer3D::SetRenderSettings - Make it noexcept, and its argument const * Remove some stray whitespace
* update copyright yearsArisotura2023-11-04
|
* GDB stub (#1583)PoroCYon2023-10-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * gdbstub beginnings * gdbstub: finish gdb impl things, next up is integration with melonDS * holy fuck the gdbstub works * gdb breakpoints work, but there's a mysterious crash on continue * fix memory corruption that sometimes happened, and make resetting the console thru gdb work * remove some gdb debug printing * fix things in gdbstub * separate option for enabling gdbstub * add mode-dependent CPU registers * C++ize the GDBstub code * add gdbstub config in emu settings dialog * make sure gdb is disabled when jit is enabled * Remove unnecessary compiler flags, mark ARMJIT assembly code as no-execute-stack This hardens the binary a little bit against common exploitation methods * add option to wait for debugger attach on startup * only insert GNU stack notes on linux * disable gdbstub enable checkbox when jit is enabled * fix non-linux incompatibilities * enable gdbstub by default * fix issues with gdbstub settings disable stuff * format stuff * update gdb test code * Fix segfault when calling StubCallbacks->GetCPU() C++ overrides are hard. Please I'm just a lowly C programmer. * fix packet size not being sent correctly Thanks to @GlowingUmbreon on Github for troubleshooting this * fix select(2) calls (i should read docs more properly) * fix GDB command sequencing/parsing issue (hopefully) * [GDB] implement no-ack mode * fix sending ack on handshake * get lldb to work
* update copyright headersArisotura2022-01-09
|
* get rid of DTCMSizeRSDuck2021-10-29
|
* more accurate DTCM checkArisotura2021-10-28
|
* blargArisotura2021-10-28
|
* more complete (and accurate) CP15 setup for direct bootArisotura2021-10-28
|
* update copyright year and add missing GPL headersRSDuck2021-03-12
|
* remove some UBRSDuck2020-09-04
| | | | | | | - savestates used to read a four bytes from a single byte value - a few unassigned variables - some other things - also make the ROR macro an inline function
* subtract cycles after checking IRQ and HaltRSDuck2020-07-27
| | | | also switch back to adding to ARM::Cycles instead of subtracting from them
* fix build with JIT disabledRSDuck2020-07-25
| | | | fixes #675 and #674
* reconcile DSi and JIT, fastmem for x64 and WindowsRSDuck2020-06-30
|
* first steps in bringing over the JIT refactor/fastmemRSDuck2020-06-16
|
* rewrite JIT memory emulationRSDuck2020-06-16
|
* implement block linking + some refactoringRSDuck2020-06-16
| | | | currently only supported for x64
* include more information in DataRegionRSDuck2020-06-16
|
* move ARM64 JIT backend hereRSDuck2020-06-16
|
* integrate changes from ARM64 backend and moreRSDuck2020-06-16
| | | | | | | | | - better handle LDM/STM in reg alloc - unify Halted and IRQ in anticipation for branch inlining - literal optimisations can be disabled in gui - jit blocks follow simple returns - fix idle loop detection - break jit blocks on IRQ (fixes saving in Pokemon White)
* new block cache and much more...RSDuck2020-06-16
| | | | | | | | | - more reliable code invalidation detection - blocks aren't stopped at any branch, but are being followed if possible to get larger blocks - idle loop recognition - optimised literal loads, load/store cycle counting and loads/stores from constant addresses
* abandon pipelining on jitRSDuck2020-06-16
| | | | | fixes Golden Sun Dawn this makes the cpu state incompatible between interpreter and JIT. That's why switching cpu mode requires a restart(not requiring is stupid anyway) and the pipeline is manually filled when making a save state.
* jit: add compile optionRSDuck2020-06-16
|
* jit: make everything configurableRSDuck2020-06-16
|
* make it able to switch between DS and DSi modesArisotura2020-06-01
|
* Merge commit '4b57416552ec2fa95216e2b044559f215723bf70' into melonDSiArisotura2020-05-30
|\
| * update copyright yearsArisotura2020-02-14
| |
* | merge moarArisotura2020-05-30
|\|
| * smarter CP15 PU region updates. disable some useless logging.Arisotura2019-10-21
| | | | | | | | fixes #528
* | melonDSi: skeleton in placeArisotura2019-06-15
|/
* fasterer IRQ check. clean up code.Arisotura2019-06-08
|
* also, update copyright nameArisotura2019-01-22
|
* redesign main emu loop to use timestamps instead of being a trainwreckStapleButter2019-01-05
| | | | | | | | * cleaner code * faster in some cases * more accurate (on-demand compensation for timers and GPU) * less prone to desyncs * overall betterer
* add PoC ARM9 instruction cache logic. not actually in use, but it's there as ↵StapleButter2019-01-04
| | | | a reference (and if we ever need it).
* more sensible cache timingsStapleButter2018-12-11
| | | | (still a big fat hack)
* take it somewhere.StapleButter2018-12-09
| | | | still need to speed it up a tad.
* make this other branch where we're going to actually make it usableStapleButter2018-12-08
| | | | but it'll be a gross hack
* begin PU workStapleButter2018-12-04
|
* begin work on general timing renovation. way shitty because it behaves as if ↵StapleButter2018-12-04
| | | | caches were off, so everything will be slow as shit.
* make the ARM clock shift configurable. nothing fancy there, just paving the ↵StapleButter2018-11-07
| | | | way for DSi support later.
* 3D: keep the rasterizer from accidentally going out of bounds when given ↵StapleButter2018-11-04
| | | | | | | | very flat X-major edge slopes. this, by a fucking shitshow of butterfly effect, ends up fixing #234. technically, the rasterizer was going out of bounds, which, under certain circumstances, caused interpolation to shit itself and generate Z values that were out of range (but still ended up in the zbuffer). sometimes those values ended up negative, which caused these glitches when polygons had to be drawn over those. about fucking time.
* savestate shito: fix compile errors.StapleButter2018-10-18
| | | | still far from being finished, so avoid using unless you want to spawn blackholes or some pretty bad shit.
* start implementing actual shitoStapleButter2018-09-15
| | | | (also looks like the test bench in libui_sdl/main.cpp snuck in with the copyright update. shit)
* fixor copyright years.StapleButter2018-09-15
|
* fix QADD/QSUB/QDADD/QDSUB, those would write their result to the wrong register.StapleButter2017-06-13
| | | | also make them ARM9-only.