Commit Graph

2165 Commits

Author SHA1 Message Date
Jakly
29c67f2140
implement 16 bit r/w IF and DISPCAPCNT (#2061) 2024-08-01 22:41:21 +02:00
Jesse Talavera
327ce45124
Refactor network implementations to be more reusable and less buggy (#2107)
encapsulate network interfaces
2024-08-01 22:02:45 +02:00
Jesse Talavera
c6bf5d5181
Allow AREngine to be used independently of ARCodeFile (#2108)
* Make `EmuInstance::cheatFile` use a `unique_ptr`

- Fixes a memory leak, as the cheat file wasn't cleaned up in the destructor

* Split `AREngine` and `ARCodeFile` apart

- Suitable for frontends that have their own way of storing cheats
- Store the cheats in `AREngine` in a `std::vector`
- Apparently cheats are _supposed_ to be executed each frame; I didn't understand this until recently
2024-08-01 22:01:00 +02:00
Nadia Holmquist Pedersen
f3f6a6a194 Fix building on i686 Linux
I doubt anyone actually cares about support for it but hey may as well?
2024-08-01 21:57:32 +02:00
pants64DS
37c0320cbe
Fix an inaccuracy with the No$gba debug registers 04fffa14 and 04fffa18 (#2119)
Writing to either of the two registers would print one newline too many

Co-authored-by: pants64DS <pants64DS@users.noreply.github.com>
2024-07-31 01:13:06 +02:00
RSDuck
b778fbaad1 attempt at correct utf8 decoding for toml config file path 2024-07-30 17:48:41 +02:00
Nadia Holmquist Pedersen
01c2d65f07 Explicitly include QModernWindowsStylePlugin in static builds
I hope this'll make it look right.
2024-07-30 03:10:01 +02:00
RSDuck
12563fb636 use platform file functions for savestates and NAND importing file check
should fix character encoding issues on Windows
2024-07-29 00:15:19 +02:00
Nadia Holmquist Pedersen
d31eabb6fa Don't disable firmware settings controls when override external firmware
settings is disabled
2024-07-27 16:56:29 +02:00
Jesse Talavera
837a582087
Expose some fields of DSi_BPTWL needed to support direct boot (#2103)
expose boot flag
2024-07-21 17:23:19 +02:00
Jesse Talavera
821f5f5f29
Allow frontends to use different headers for OpenGL declarations (#2102) 2024-07-21 17:02:31 +02:00
BueniaDev
9b828c2cde
Implement Rumble Pak support. (#2101) 2024-07-21 17:01:30 +02:00
Jaklyy
7cd50e7b56 fix some multiply timings 2024-07-19 17:56:43 -04:00
Jaklyy
13578a3cc9 Revert "improve timings for S variants of multiply instructions on arm9"
This reverts commit 789ef21c70.
2024-07-19 17:52:28 -04:00
Jaklyy
36f4f2c5d3 Revert "improve timings further"
This reverts commit 764ee9ea1a.
2024-07-19 17:52:26 -04:00
Jaklyy
4f6db5a173 Merge remote-tracking branch 'upstream/master' into jump-after-writeback 2024-07-17 21:42:21 -04:00
Nadia Holmquist Pedersen
5eadd67df6 EmuInstance: Use GetLocalFilePath to get the wfcsettings path
Fixes the file being created in the current working directory.
2024-07-17 15:44:47 +02:00
Nadia Holmquist Pedersen
4b17de7e8c Fix annoying Qt touch event deprecations for real this time 2024-07-15 14:37:37 +02:00
Nadia Holmquist Pedersen
71f4d7b222 deviceType doesn't exist in Qt5 apparently 2024-07-15 14:04:40 +02:00
Nadia Holmquist Pedersen
6d2ad2a3f0 Ignore touch events originating from trackpads
Fixes multi-finger gestures causing spurious touch screen presses
Also fix some deprecations when we're at it anyway
2024-07-15 13:57:21 +02:00
Arisotura
2031f491f0 fix some Qt6 bugs (buttonClicked -> idClicked) 2024-07-15 13:00:40 +02:00
Arisotura
d92c9fcd90 do not immediately create a core when creating an EmuInstance. fixes some nasty potential bugs. watch out for bugs this may introduce though... 2024-07-15 12:57:18 +02:00
Jesse Talavera
94ba7c1594
Split networking code into its own target (#2091) 2024-07-14 17:03:21 +02:00
Jaklyy
764ee9ea1a improve timings further 2024-07-13 09:35:12 -04:00
Jaklyy
789ef21c70 improve timings for S variants of multiply instructions on arm9
behavior seems to be a quirk of the way they made the interlock cycle mandatory
2024-07-12 23:11:46 -04:00
Jaklyy
4fcd52ed16 someday i will learn to test things before pushing them 2024-07-11 20:19:25 -04:00
Jaklyy
038ffa3a35 revert the *entire* interlock implemention
too slow, not accurate enough.
we need to do a *lot* more research into the specifics of how this works with all the various aspects of the cpu's timings before we can make a good implementation
2024-07-11 20:08:35 -04:00
Jaklyy
1fdac1d489 ...why am i checking for dtcm? 2024-07-11 16:18:55 -04:00
CasualPokePlayer
a812a43bda
Fix various issues with firmware generation (#2058) 2024-07-11 15:55:06 +02:00
OverdueWeevil2
a82b5758bc
Update EmuInstance.cpp (#2090) 2024-07-11 13:48:27 +02:00
Jaklyy
e2be0b4f93 actually no it was not more correct
undo previous commit because actually code cycles *do* matter
2024-07-07 15:42:10 -04:00
Nadia Holmquist Pedersen
b55eb431bd ensure that we actually link the OpenGL library on macOS 2024-07-07 13:45:45 +02:00
Nadia Holmquist Pedersen
1302cbdd64 frontend: Restore linear interpolation for audio output resampling
Also, do it smarter this time. This seems to have gone missing with the
doublemelon merge.
2024-07-07 08:19:49 +02:00
Jaklyy
383750692e doesn't really matter but idk it's more correct? 2024-07-06 12:38:39 -04:00
Jaklyy
0f02c0bbba disable interlock emulation again again
our understanding of how it works is just too incomplete to be worth implementing yet
2024-07-06 12:14:35 -04:00
Jaklyy
ea429a1b8d improve interlock emulation
add cycles to the instruction execution time rather than the timestamp directly.
2024-07-04 12:58:58 -04:00
Jaklyy
bd1665c1d3 minor timing tweaks 2024-07-04 12:41:09 -04:00
Jaklyy
a549977eb0 fix clz for realsies 2024-07-04 11:04:38 -04:00
Antonio Niño Díaz
25b5ac91bd
Fix horizontal mosaic on sprites (#2084)
The code itself is correct, but the variable being read is the Y mosaic
coordinate, not the X coordinate.
2024-07-04 00:24:29 +02:00
Jaklyy
0060958fed Merge remote-tracking branch 'upstream/master' into jump-after-writeback 2024-07-03 15:26:58 -04:00
RSDuck
613569a2ab append newline to nocash logging
makes behaviour consistent with no$gba
2024-07-02 19:09:32 +02:00
Nadia Holmquist Pedersen
4e3592f2d4 Fix loading GBA carts
UpdateConsole forgot to reinsert it when messing with the NDS.
2024-07-02 08:18:44 +02:00
Nadia Holmquist Pedersen
f2611680ca EmuInstance: check consoleType from NDS rather than the instance's when
updating console, fixes crash on console type switch

EmuInstance::consoleType is already updated, so the check for whether we
should recreate the NDS to switch console type never succeeds.
2024-07-02 06:23:21 +02:00
Jaklyy
88e5584b5f fix clz r15 2024-06-27 15:33:24 -04:00
Jaklyy
c5b035a973 SWP and SWPB use the same behavior as STR on the ARM9 2024-06-25 11:20:01 -04:00
Jaklyy
541e1e6388 proper timings for ldr/str 2024-06-25 09:08:11 -04:00
Jaklyy
dbe00e72dd improve stm timings
need to verify if they apply to all store instructions
2024-06-24 22:50:04 -04:00
Jaklyy
109bbed3d0 improve ldm timings
I believe this also applies to other loads as well, but currently untested.
2024-06-24 20:22:38 -04:00
Jaklyy
3583d8222f disable interlock emulation, needs more research 2024-06-24 16:17:04 -04:00
Jaklyy
f1b71fe5a9 implement configurable vram bus width
not implemented for direct boot
2024-06-24 16:15:04 -04:00
Nadia Holmquist Pedersen
db20771ef3 slirp: Add -fvisibility=hidden to glib stub
On Linux, our stubbed glib functions were conflicting with the ones from
real glib, which gets used by Qt when we're running on a GTK-based
desktop. Avoid a crash by not exposing them.
2024-06-24 05:25:00 +02:00
Jaklyy
e6ba4075b9 correct interlocked reg for umlal 2024-06-18 11:12:05 -04:00
Nadia Holmquist Pedersen
cbb0f4b872 Tell the compiler that we want wrapping signed arithmetic
The core relies on this and without -fwrapv there will be rendering
issues on some targets. Thanks CasualPokePlayer for noticing this.
2024-06-18 15:51:08 +02:00
Arisotura
e234385c20 OpenGL: add support for changing BG0HOFS midframe. fixes #2072 2024-06-18 13:11:42 +02:00
Jaklyy
c5258d6377 verify interlocks for alu and load/store
remove some checks for interlock that im pretty sure can't trigger
2024-06-17 18:07:53 -04:00
Arisotura
626d2379bc * fix default for audio volume
* add default bools for battery settings
2024-06-17 14:51:32 +02:00
Jaklyy
a9e2c7e047 implement two regs i missed 2024-06-16 23:24:20 -04:00
Jaklyy
f00f1f6ca4 im smart 2024-06-16 20:50:42 -04:00
Jaklyy
5b37ca70d1 implement correct/guess interlocks for remaining instructions 2024-06-16 20:47:01 -04:00
Jaklyy
debaaa0425 fix performance regression for disabling interlock emulation path 2024-06-15 21:16:12 -04:00
Jaklyy
449557624d don't do interlocks for the arm7 2024-06-15 18:37:31 -04:00
Jaklyy
a973c0bf5b initial implementation of interlock cycles 2024-06-15 16:07:36 -04:00
Nadia Holmquist Pedersen
eb2bd73c7d ensure teakra is always static linked even in dynamically linked builds 2024-06-15 21:31:23 +02:00
Arisotura
ae44ba2475 blarg 2024-06-15 21:01:27 +02:00
Arisotura
649462ff5c fix more bugs and crap 2024-06-15 20:57:26 +02:00
Arisotura
890dc4f228 fix other bugs with these regexes 2024-06-15 19:23:18 +02:00
Arisotura
d449888405 fix up the regexes in Config.cpp 2024-06-15 19:10:28 +02:00
Arisotura
ccc5c955e9 fix one potential crash bug 2024-06-15 17:42:26 +02:00
Arisotura
8fc403cdad update copyright headers 2024-06-15 17:01:19 +02:00
Arisotura
25a7b1ca1d
merge doublemelon (#2067)
non-exhaustive (but exhausting) list of changes:

* base laid for multiple window support, but will likely require more work to work correctly
* encapsulation of frontend state for proper multi-instance support
* (JIT still needs a fix for the NDS::Current workaround but we can get there later)
* new, more flexible configuration system
2024-06-15 13:52:47 +02:00
Jaklyy
aa1217af0a track interlock cycles for the ALU 2024-06-14 11:47:42 -04:00
Jaklyy
5a174a2ce3 track interlock cycles for load instructions 2024-06-14 00:51:55 -04:00
Jaklyy
42218106b0 verify writable msr bits 2024-06-11 10:30:30 -04:00
Jaklyy
048b0b8878 swp/swpb jumps work on the arm 7? 2024-06-10 18:03:56 -04:00
Jaklyy
3ddccde5b9 verified
also remove no longer needed variable
2024-06-10 13:23:18 -04:00
Jaklyy
ca04710deb ldrd is just ldm 2024-06-09 22:31:10 -04:00
Jaklyy
ae0824fdd3 it all makes sense now... 2024-06-09 19:10:43 -04:00
Jaklyy
b90d5c2320 what the actual F*** is going on 2024-06-09 12:18:31 -04:00
Jaklyy
be60c68aeb more weirdness 2024-06-09 07:25:42 -04:00
Jaklyy
b846c6f100 remove out of date comments 2024-06-08 22:17:07 -04:00
Jaklyy
849d4e51ac imma be real, i have no idea what is going on here 2024-06-08 22:12:44 -04:00
Jaklyy
659763f903 clarification 2024-06-08 16:15:02 -04:00
CasualPokePlayer
8e9b88d01d
Actually generate DownscaleFramebuffer (#2059) 2024-06-08 20:48:42 +02:00
Jaklyy
3699768ac9 most cpsr bits can't actually be updated (or at least can't be read?) 2024-06-08 14:01:54 -04:00
Jaklyy
5f97dfc1ab fix bits fixed to 0 for pu region sizing being set 2024-06-08 10:53:22 -04:00
Jaklyy
8191f92bb6 mcr is also affected 2024-06-08 10:42:19 -04:00
Jaklyy
0c887202e7 fix some more instructions? 2024-06-08 10:40:23 -04:00
Jaklyy
73507621f5 idk why it took me two tries to get these instructions to work properly 2024-06-07 23:50:31 -04:00
Jaklyy
2b0ed459e1 fully implement r15 stores being +12 of addr 2024-06-07 23:46:49 -04:00
Jaklyy
bd3611b51d unaligned registers with strd/ldrd raise an exception 2024-06-07 20:43:02 -04:00
Jaklyy
8bc7e4591c thumb ldmia/pop data aborts 2024-06-06 19:05:28 -04:00
Jaklyy
d6cd189455 rework data abort handling for ldm/stm; implement thumb stmia+push 2024-06-06 18:58:43 -04:00
Jaklyy
13ae96b4e3 simple thumb instructions (untested but probably right) 2024-06-05 14:32:12 -04:00
Jaklyy
7c3108e20f handle swp instruction aborts 2024-06-05 14:31:44 -04:00
Jaklyy
1871c48849 fix double data aborts with strd 2024-06-05 10:28:51 -04:00
Jaklyy
317a8c61e5 data abort handling for (almost) all (arm) instructions
full list: strb, ldrb, strh, ldrd, strd, ldrh, ldrsb, ldrsh
2024-06-05 00:14:14 -04:00
Jaklyy
1e8194e367 fix ldr and str 2024-06-04 19:06:54 -04:00
Jaklyy
c2a57b79a0 fix stmd(a/b) writeback 2024-06-02 22:41:01 -04:00
Jaklyy
5e760a1536 slightly cleaner code 2024-06-02 19:34:29 -04:00
Jaklyy
b5c1ee33fb implement stm 2024-06-02 10:33:29 -04:00
Jaklyy
63d4b78733 improve implementation 2024-06-02 10:13:50 -04:00
Jaklyy
960f063eaa improve data aborts for ldm 2024-06-02 00:11:01 -04:00
Jaklyy
065573f316 fix writebacks overwriting registers swapped with spsr
fixes gbarunner3
2024-05-31 18:09:45 -04:00
Nadia Holmquist Pedersen
a72b79a55a that needs to be public actually 2024-05-15 19:43:34 +02:00
Nadia Holmquist Pedersen
cfc49eb286 Revert slirp dynamic/static check, and make it not use dllimport/export
when building statically
2024-05-15 19:37:14 +02:00
Nadia Holmquist Pedersen
d21bc64cb3 MinGW build portability fixes
AKA you can build melonDS for Windows on Fedora now
2024-05-15 18:57:49 +02:00
Nadia Holmquist Pedersen
a2406e3c0e
Vendored libslirp (#2045)
Add vendored libslirp into the repo with a shim to remove its dependency on glib.
2024-05-15 18:00:55 +02:00
Nadia Holmquist Pedersen
5ab8161a21 Prevent turning on compute renderer on macOS 2024-05-14 11:39:06 +02:00
RSDuck
442661747e add assert to make sure all shaders were compiled 2024-05-14 04:09:20 +02:00
RSDuck
5df83c97c7 bump up compute shader renderer tile amount factor to 16
also why did I think DS could render 4096 polygons? Use that extra bit for larger work offset
2024-05-13 19:15:48 +02:00
RSDuck
347f4a79fd Fix division by zero 2024-05-13 17:23:05 +02:00
RSDuck
043244a56d
Compute shader renderer (#2041)
* nothing works yet

* don't double buffer 3D framebuffers for the GL Renderer
looks like leftovers from when 3D+2D composition was done in the frontend

* oops

* it works!

* implement display capture for compute renderer
it's actually just all stolen from the regular OpenGL renderer

* fix bad indirect call

* handle cleanup properly

* add hires rendering to the compute shader renderer

* fix UB
also misc changes to use more unsigned multiplication
also fix framebuffer resize

* correct edge filling behaviour when AA is disabled

* fix full color textures

* fix edge marking (polygon id is 6-bit not 5)
also make the code a bit nicer

* take all edge cases into account for XMin/XMax calculation

* use hires coordinate again

* stop using fixed size buffers based on scale factor in shaders
this makes shader compile times tolerable on Wintel
- beginning of the shader cache
- increase size of tile idx in workdesc to 20 bits

* apparently & is not defined on bvec4
why does this even compile on Intel and Nvidia?

* put the texture cache into it's own file

* add compute shader renderer properly to the GUI
also add option to toggle using high resolution vertex coordinates

* unbind sampler object in compute shader renderer

* fix GetRangedBitMask for 64 bit aligned 64 bits
pretty embarassing

* convert NonStupidBitfield.h back to LF only new lines

* actually adapt to latest changes

* fix stupid merge

* actually make compute shader renderer work with newest changes

* show progress on shader compilation

* remove merge leftover
2024-05-13 17:17:39 +02:00
Nadia Holmquist Pedersen
c85a2103bb Allow adding a suffix to the displayed melonDS version 2024-05-11 22:40:45 +02:00
Nadia Holmquist Pedersen
35cea5e1d7 Fix zstd ROM loading issues
* fix use-after-free of inContent
* don't try to free the DStream twice
2024-05-04 18:16:24 +02:00
Jakly
6112aa120a
Pu region sizing/bounds fix (#2024)
* fix the pu region's end point overflowing

According to gericom it cannot overflow at all

* set a minimum and a better maximum for the pu region size

* fix pu logging

* PU regions with a size of 31 always take up the entire address space

also tweak some logging a little more

* start is actually force aligned by size, oops

* small tweaks

* hopefully more clear code

* math is for nerds
2024-05-02 17:44:59 +02:00
RealAstolfo
84474105e2
ssize_t is not defined in stddef.h (#1999)
i had to add sys/types.h and patch my gentoo ebuilds for a successful compilation.
2024-04-18 13:40:38 +02:00
Rayyan Ansari
5a852cb00d
ROMManager: optimise ROMIcon function
Precompute all 16 5-bit RGB palette colours into 8-bit RGBA to avoid
repeated and superfluous calculation within the nested loop at the
point of index lookup.

A speedup was observed, from ~7ms, to a consistent 1ms
(i.e. now practically instantaneous) through timing with
std::chrono::high_resolution_clock.

Also improve comprehensibility, by using meaningful names, where
appropriate, for loop counter variables.
2024-04-16 23:39:22 +01:00
Arisotura
95adc87f6d wifi: try ignoring MP frames if not engaging in MP comm 2024-04-13 12:17:16 +02:00
Arisotura
8feeee6103 Input: only check joystick input if a joystick actually exists 2024-04-12 20:02:16 +02:00
Arisotura
d99c571f94 FATStorage: make sure to always properly unmount the volume (fixes evil bug) 2024-04-12 19:43:02 +02:00
Arisotura
111dc7a563 wifi improvements:
* implement channels
* rework power-down support, fixing bugs
* fix bug when W_BeaconInterval is zero
* fix potential missing IRQs when writing to W_IE
2024-04-12 17:28:51 +02:00
Arisotura
0b87dd5fa6 fix touchscreen bug on Wayland 2024-04-09 12:54:31 +02:00
Arisotura
968bd26d85 fix generation of instance-unique MAC address when using an external firmware 2024-04-09 11:38:38 +02:00
Jesse Talavera
31a7f53282
Fix a crash when using DSi mode in debug builds on macOS (#1976)
Store the BIOS images in `NDSArgs`/`DSiArgs` through pointers, not directly

- This will make it easier to keep such objects on the stack
2024-03-13 14:55:20 +01:00
RSDuck
ea1755bed0 call Start again NDS object after Reset
fixes issue where game doesn't properly start after changing settings
2024-03-12 09:23:20 +01:00
RSDuck
5fdd285c9a fix aarch64 build 2024-03-12 08:41:42 +01:00
RSDuck
18d1df606f fix #1959
Use QT again for opening file so that we don't depend on locale
2024-03-12 08:35:56 +01:00
Nadia Holmquist Pedersen
b117bb8f58 that should be 0x8000 2024-03-08 16:59:31 +01:00
Nadia Holmquist Pedersen
faf3c0f2e0 Add Gaussian (SNES) audio interpolation
Probably not a good choice for most DS games unless you really want a
very soft sound, but it could be fun if you wanted to run lolSnes in
melonDS :p
2024-03-08 16:36:00 +01:00
Nadia Holmquist Pedersen
e227902cec Util_Audio: use basic linear interpolation
Should remove the artifacts caused by the previous nearest
resampling. May be worth replacing with something better in the
future, but this is an improvement for now.
2024-03-03 16:58:59 +01:00
Nadia Holmquist Pedersen
67ca4997e2 Release all keyboard keys on focus loss (fixes #1987) 2024-02-25 14:25:50 +01:00
Nadia Holmquist Pedersen
21e2a876ec build teakra's test_generator.cpp only if building its unit tests is
enabled

speeds up builds a bit
2024-02-24 01:47:04 +01:00
λP.(P izzy)
9430502b16
fix malloc on OpenBSD targets (#1979) 2024-02-20 03:33:39 +01:00
Jaklyy
a8429af131
dont make a save file on launching a game (#1974)
avoids the issue of saves being created for roms that dont use save files.
2024-02-13 20:17:29 +01:00
Luca D'Amico
646ed3cb32
Add Haiku (BeOS-like OS) support (#1858) 2024-02-07 23:15:30 +01:00
Jaklyy
5ffa642980
Check for write permissions for some key files (#1972)
* check if an nds save file can be opened for writing

also add the ability to open a file in append mode

* fix multi-instance saves

also move the check for file writability into a separate function (probably uneeded?)

* implement check for gba roms

* move rom load error messages into the functions

also finish gba slot (oops)

* improve error string

* check write perms before saving path settings

* fix memory leak

* check for writability of firmware/nand/sds

* add secondary checks for nand/firmware

* add check for config file being writable

* Return the file write error as a QString to avoid the invalid char*
causing a garbled error message.

Qt wants it as QString either way.
2024-02-07 23:04:36 +01:00
Nadia Holmquist Pedersen
a7575ec7b3 Allow the user to choose the UI theme
Mainly useful for those who want dark mode on Windows.
2024-02-07 20:20:54 +01:00
Jesse Talavera
d48e5f2da0
Fix DSiWare detection (#1969)
- According to GBATek, all DSiWare games have a high title ID of 0x00030004
- Some homebrew apps set the Unitcode bits to DSi mode to enable support of DSi features
2024-02-01 14:36:35 +01:00
Nadia Holmquist Pedersen
7dd4152d67 Add MaxFPS setting 2024-01-26 13:06:32 +01:00
Steveice10
4b576d066e
Add support for using a portable directory without special build flags. (#1956) 2024-01-24 10:27:25 +01:00
Arisotura
7897bd387b also add writes while we're at it, we know Gericom's gonna abuse them someday :P 2024-01-17 18:54:48 +01:00
Arisotura
f4c8202b1a add missing 8/16-bit reads to ROMCnt and ROM SPICnt 2024-01-17 18:50:08 +01:00
Jesse Talavera
740305cc25
Don't reset the VRAM cache if saving a state (#1944)
- This fixes a flickering bug in melonDS DS
2024-01-08 15:20:48 +01:00
Jesse Talavera
8143f54956
Protect savestates while the threaded software renderer is running (#1864)
* First crack at ensuring the render thread doesn't touch GPU state while it's being serialized

* Get rid of the semaphore wait

* Add some extra fields into GPU3D's serialization

* Oops, TempVertexBuffer is already serialized

* Move vertex serialization into its own method

* Lock the GPU3D state when rendering on the render thread or serializing it

* Revert "Lock the GPU3D state when rendering on the render thread or serializing it"

This reverts commit 2f49a551c1.

* Add comments that describe the synchronization within GPU3D_Soft

- I need to understand it before I can solve my actual problem
- Now I do

* Revert "Revert "Lock the GPU3D state when rendering on the render thread or serializing it""

This reverts commit 1977566a6d.

* Let's try locking the GPU3D state throughout NDS::RunFrame

- Just to see what happens

* Slim down the lock's scope

* Narrow the lock's scope some more

* Remove the lock entirely

* Try protecting the GPU3D state with just a mutex

- I'll clean this up once I know it works

* Remove a duplicate method definition

* Add a missing `noexcept` specifier

* Remove an unused function

* Cut some non-hardware state from `GPU3D`'s savestate

* Assume that the next frame after loading a savestate won't be identical

* Actually, it _is_ worth it

* Don't serialize the clip matrix

- It's recalculated anyway

* Serialize `RenderPolygonRAM` as an array of indexes

* Clean up some comments

- I liked the dialogue style, but oh well

* Try restarting the render thread instead of using the lock

- Let's see what happens

* Put the lock back

* Fix some polygon and vertex indexes being saved incorrectly

- Taking the difference between two pointers results in the number of elements, not the number of bytes

* Remove `SoftRenderer::StateBusy` since it turns out we don't need it

- The real synchronization was the friends we made along the way
2024-01-07 23:39:43 +01:00
Eric Warmenhoven
f68f55d002
Reset the JIT when loading savestate (#1937)
The effect of this change is simply to call JitEnableWrite(), which is
necessary on apple silicon
2024-01-03 14:42:08 +01:00
Jesse Talavera
d1cbc41115
Slight fixups with FATStorage (#1934)
* Reload the SD card for `CartSD` and all subclasses

* Make `ROMManager::LoadDLDISDCard` delegate to `GetDLDISDCardArgs`

* Add a method overload for `CartSD::SetSDCard`

* Initialize new SD card images with the correct size

* Sync the old card to the host (if applicable) when move-assigning a new one

* Only sync the old card to the host if it's not read-only

* Remove static state in `FATStorage`

- Replace `FF_ReadStorage` and `FF_WriteStorage` with lambda functions
- Keep open and use the single `File` handle throughout the `FATStorage`'s life
2024-01-03 13:32:17 +01:00
Nadia Holmquist Pedersen
8bfc6df8de TitleManagerDialog: Fix wrong color format 2023-12-31 13:52:58 +01:00
Jesse Talavera
a4b2b0c40d
Resolve or silence some warnings (#1905)
* Resolve some warnings

- Their frequent appearance in the build logs is driving me nuts

* Silence warnings about `offsetof`

* Don't apply `-Wno-invalid-offset` to C, only to C++
2023-12-28 14:54:31 +01:00
Arisotura
345b7439e4 integrate OSD into ScreenPanel and make it nicer 2023-12-28 14:40:37 +01:00
Arisotura
5a08118c87 sfjsh 2023-12-27 21:28:03 +01:00
Jesse Talavera
cbd65a131e
Add alignas specifiers to some arrays based on how they're accessed (#1933)
* Align some two-element `u32` arrays as `u64`s

- To pacify "unaligned read/write" warnings from UBSan

* Align some more arrays based on how they're accessed
2023-12-26 22:09:39 +01:00
Arisotura
ab8938a695 fix OSD scaling on hiDPI screens 2023-12-26 19:32:38 +01:00
Arisotura
f905b6fb93 separate EmuThread to its own file 2023-12-26 19:24:14 +01:00
Arisotura
fd1e4379b9 Merge branch 'master' of github.com:melonDS-emu/melonDS 2023-12-26 19:04:31 +01:00
Arisotura
7f437d48db start cleaning up: move OpenGL stuff out of EmuThread 2023-12-26 19:04:01 +01:00
Jesse Talavera
d55a384c88
Apply some quick hotfixes (#1931) 2023-12-26 16:34:04 +01:00
Nadia Holmquist Pedersen
740489f7a4 Don't call Reset on nullptr 2023-12-26 08:49:02 +01:00
Nadia Holmquist Pedersen
ac3153d86b "Incorrectly" link libslirp to stop its broken build system fucking up
our linker flags
2023-12-26 08:14:30 +01:00
Nadia Holmquist Pedersen
f16de402cf Screen.cpp: include missing headers 2023-12-26 04:26:38 +01:00
Arisotura
5c90cb939d oops 2023-12-25 22:52:44 +01:00
Arisotura
80c6dd524b add convenience method to Window class for OSD messages 2023-12-25 16:34:29 +01:00
Arisotura
6a1232b9a9 move MainWindow and Screen stuff to separate files; WIP 2023-12-24 15:11:30 +01:00
Samuel Magnan
f580d20a7b
Support GBA .sav file with appended .rtc (#1927)
* Support GBA .sav file with appended .rtc

* Change comment
2023-12-24 01:09:43 +01:00
Arisotura
de4ae9dd92 fix possible crash 2023-12-23 23:59:59 +01:00
RSDuck
989b93c92a do not access NDS object emulation is paused 2023-12-22 23:30:59 +01:00
Nadia Holmquist Pedersen
521fc249a3 Don't try to call transferLayout on non-GL ScreenPanel 2023-12-22 02:17:26 +01:00
Nadia Holmquist Pedersen
752b37ed82 Attempt to get rid of leftover QSharedMemory instance after crash 2023-12-22 01:35:45 +01:00
RSDuck
084747abc5 Reset DS object directly after creation 2023-12-21 22:15:12 +01:00
RSDuck
ed650f2b46 call Reset on 3D renderer object 2023-12-21 21:43:57 +01:00
Nadia Holmquist Pedersen
fd3c349735 Check Q_OS_UNIX define instead 2023-12-20 21:38:55 +01:00
Daniel Simon
6c6318b63b Fix generic icon when using Wayland 2023-12-20 21:38:55 +01:00
Jesse Talavera
01f8ad009e
Wrap the EnableJIT initialization in an #ifdef (#1922) 2023-12-20 14:25:49 +01:00
Jesse Talavera
4b4239de62
Set NDS::EnableJIT in the constructor (#1921) 2023-12-19 15:15:35 +01:00
Jesse Talavera
1bec2a9293
Fix an incorrect use of std::move (#1919)
- When I adapted `GBACart::ParseROM` to use `unique_ptr` instead of a plain pointer, I forgot to remove the code that copied the SRAM data
- That code was made unnecessary because of the move
2023-12-16 00:05:43 +01:00
Jesse Talavera
eedb0ba478
Add a call to std::move that I missed (#1917) 2023-12-15 20:52:35 +01:00
Jesse Talavera
e1821d0023
Simplify the SRAM's representation in NDSCartArgs (#1914)
* Simplify the SRAM's representation in  `NDSCartArgs`

- I overthought this one.
- I could've just checked `args && args->SRAM`, but then some other poor bastard might make this mistake.
- Don't mix `pair`, `optional`, and `unique_ptr` all at once, kids.

* Fix a `nullptr` read
2023-12-15 14:56:10 +01:00
Jesse Talavera
24c402af51
Fix detection of native NDS ARM BIOS images (#1910)
* Fix detection of native NDS ARM BIOS images

- Instead of checking for built-in BIOS images, now the altered methods check for native ones
- The CRC32 must match exactly; patched BIOS images will result in `false`

* Encapsulate `NDS::ARM9BIOS` and `ARM7BIOS`

- Also compute the checksum only when setting the BIOS
2023-12-15 14:54:41 +01:00
Jesse Talavera
c867a7f1c0
Make the initial 3D renderer configurable via NDSArgs (#1913)
* Allow 3D renderers to be created without passing `GPU` to the constructor

* Make the initial 3D renderer configurable via `NDSArgs`

* Fix a compiler error
2023-12-15 14:53:31 +01:00
Adrian Siekierka
6f47c9ed4c
Support emulating R4 Revolution/M3DS Simply cartridges. (#1854)
* Support emulating R4 Revolution/M3DS Simply cartridges.

* NDSCartR4: Write state information to savestate file.

* NDSCart: Use strncmp instead of strcmp for R4 detection.

* NDSCartR4: stylistic improvements

* NDSCartR4: rudimentary Ace3DS support

* NDSCartR4: fix boot when firmware enabled

* NDSCartR4: Fix for namespace changes

---------

Co-authored-by: RSDuck <RSDuck@users.noreply.github.com>
2023-12-15 08:19:53 +01:00
Jesse Talavera
9bfc9c08ff
Sprinkle const around where appropriate (#1909)
* 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
2023-12-12 11:07:22 +01:00
Jaklyy
2cba2e783a
fix default emu settings tab (#1912) 2023-12-12 00:04:04 +01:00
Nadia Holmquist Pedersen
81219a9f5d Fix some conflicts with windows.h in some configurations
Fixes build in the MSYS2 Clang/ClangARM64 environments.
2023-12-11 10:59:05 +01:00
RSDuck
082310d5d5 hopefully reset all GPU3D attributes properly 2023-12-08 23:42:08 +01:00
Nadia Holmquist Pedersen
6949100446 Fix GBA<->DS comm not working when using FreeBIOS
Thanks CasualPokePlayer for pointing this out
2023-12-08 18:34:38 +01:00
Nadia Holmquist Pedersen
5ef35a4ccf Don't try to poke at the header on deinit if MPQueue is nullptr 2023-12-08 17:39:56 +01:00
Jesse Talavera-Greenberg
5dac65f52e Fix some minor instances of undefined behavior 2023-12-08 17:19:00 +01:00
Jesse Talavera-Greenberg
bbecab6cb0 Correctly use the refactored JitEnableWrite 2023-12-08 17:19:00 +01:00
Jesse Talavera-Greenberg
72d4eba477 Rearrange some #includes 2023-12-08 17:19:00 +01:00
Jesse Talavera-Greenberg
7cef13031f Add some headers that were transitively included by the JIT 2023-12-08 17:19:00 +01:00
Jesse Talavera-Greenberg
399a6af91c Move some constants to MemConstants.h 2023-12-08 17:19:00 +01:00
Jesse Talavera-Greenberg
53e5aa6298 Exclude JIT-related declarations more aggressively 2023-12-08 17:19:00 +01:00
Jesse Talavera-Greenberg
733769303c Add override to the ARM64 JIT's destructor 2023-12-08 17:19:00 +01:00
Jesse Talavera-Greenberg
582a421447 Don't set the JIT args if the JIT is off 2023-12-08 17:19:00 +01:00
Jesse Talavera-Greenberg
644d190e98 Add stubs for NDS::IsJITEnabled and SetJITArgs for when the JIT is excluded 2023-12-08 17:19:00 +01:00
Jesse Talavera-Greenberg
f4377e4f0f Remove a loose qualifier 2023-12-08 17:19:00 +01:00
Jesse Talavera-Greenberg
2a35af5bb9 Soften restrictions around ARMJIT_Memory::RemapNWRAM
- If in NDS mode, return instead of `assert`ing
- Use `static_cast` and `ConsoleType` instead of `dynamic_cast`
2023-12-08 17:19:00 +01:00
CasualPokePlayer
1b7b5106e2 FreeBIOS: Ensure upper 16 bits are cleared in the initial crc16 value.
Fixes Castlevania: Dawn of Sorrow's checksumming which uses crc16 swi and has garbage in the upper 16 bits of r0.
The official BIOS would seem to implicitly clear these upper 16 bits.
2023-12-06 16:51:22 +01:00
Jesse Talavera
090627b3c1
Remove the last ConfigEntry state (#1902)
* 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
2023-12-05 16:47:16 +01:00
Jesse Talavera
ae91d89f7c
Use a constexpr-friendly cosine implementation (#1903) 2023-12-05 12:41:28 +01:00
Jesse Talavera
2e8cca9ca1
Initialize the framebuffers within the constructor (#1901) 2023-12-04 17:57:51 +01:00