Commit Graph

2158 Commits

Author SHA1 Message Date
Jaklyy a0d71135a1 very minor optimization attempt 2024-09-13 07:33:18 -04:00
Jaklyy c5ac682f04 improve data abort handling further 2024-09-12 18:25:54 -04:00
RSDuck 74f479ce6d gdb stub config setup fixes 2024-09-11 14:41:22 +02:00
Jakly f719438a6e
Improve calculation of light colors (#1967)
* maintain precision until all lights are calculated

fixes lugia on the soul silver title screen

* small optimization

* small note

* small cleanup/notes

shouldn't need to check that every time, since the variable shouldn't be able to overflow

* hw doesn't cap difflevel at 255

Should it cap at all?
Can vtx colors overflow...?

* diffuse level appears to be shifted right by 9

fixes some minor inaccuracies

* improve specular lighting a little

* small improvement to diffuse lighting

fixes a few off by ones
- finding by azusa

* small tweaks

* handle overflows of diffuse lighting properly

-credits to azusa once more

* attempt at improving specular lighting calcs

still far from correct, but its a start.
fixes: https://github.com/melonDS-emu/melonDS/issues/1545

* meh

* improve specular lighting further

* add notes

* theory: add half vec instead of subt 1

* implement azusa's specular lighting algorithm

* fix minor edge case with spec lighting

* give proper credit in comments

* fix some bugs/misc tweaks

* more quirky overflow/underflow handling

* fix a spec lighting edgecase

remove some redundant parentheses

* fix an edge case with light vector calcs

* spec recip uses a different calc for light dir?

also remove a check that shouldn't be mathematically possible to trigger

* nvm that thing i thought couldn't trigger was required

also move reciprocal calc into the light vector calc function since i might as well now ig

* replace a bunch of stuff with much *much* simpler algorithms

* misc cleanup

PARENTHESES WOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO

* leave a note abt shininess table's default value being incorrect
2024-09-10 16:13:51 +02:00
Nadia Holmquist Pedersen 268c4f14c1 vcpkg: support building on Linux 2024-09-06 22:50:12 +02:00
Jaklyy f0bd2b9051 Merge remote-tracking branch 'upstream/master' into interpreter-fixes 2024-08-30 19:33:16 -04:00
Jaklyy 0003821738 apparently i never tested this 2024-08-28 22:04:22 -04:00
Jaklyy 685c4828a2 try not forgetting about stores lol 2024-08-28 13:45:46 -04:00
Jaklyy be290da23c de-duplicate swp(b) 2024-08-27 17:23:18 -04:00
Jaklyy a9aad74539 implement user mode load/stores 2024-08-26 20:43:27 -04:00
Jaklyy f692e7391a the docs lied to me (again) 2024-08-26 19:48:42 -04:00
Jaklyy 40e8e8e7bd rework single load/stores to use a shared instruction 2024-08-24 11:46:23 -04:00
Alex 4f6498c99c
Fix "Ejected GBA cart" not adding a newline (#2140) 2024-08-21 13:39:34 +02:00
Jesse Talavera 824eb370e4
Fix the build when the JIT is disabled (#2139) 2024-08-19 15:21:34 +02:00
Arisotura 0e6235a7c4 LAN: remember player name and max players setting 2024-08-15 13:34:27 +02:00
Arisotura 5b986d3111 wifi: add hack to facilitate multiplayer connections (extend post-beacon interval when connection is being initiated) 2024-08-14 16:47:08 +02:00
Nadia Holmquist Pedersen c6cab9ed41 mac-libs.rb: Make bundling a bit smarter
* Resolve symlinks to avoid including the same thing twice (like
  version-numered dylib symlinks)
* Look in all Qt prefix paths for plugins - the package may not
  necessarily have the same path
* reduce install_name_tool invocations to make it a bit faster
* change dylib IDs to remove original source path
2024-08-13 07:53:09 +02:00
Nadia Holmquist Pedersen 5598065985 Netplay.cpp should not include main.h, also fix a format warning 2024-08-11 03:14:14 +02:00
Arisotura 8d31875902
Backport LAN (#2131)
backport the old LAN feature to the modern melonDS codebase.
2024-08-10 23:20:50 +02:00
Nadia Holmquist Pedersen ec71b15505
Add a Nix flake (#2097)
Adds a Nix flake, allowing easy building and running of melonDS using the Nix package manager, as well as potentially very stable and reproducible CI in the future.
2024-08-08 05:36:06 +02:00
Nadia Holmquist Pedersen 53c58bd777 fix potential issue with glib shim min/max defines 2024-08-07 17:49:29 +02:00
Nadia Holmquist Pedersen 4359bccfcb fix the slirp shit some more 2024-08-07 17:45:56 +02:00
Nadia Holmquist Pedersen b47563e888 Apply FixInterfaceIncludes to the slirp package again to work around
package inconsistencies
2024-08-07 17:28:25 +02:00
Nadia Holmquist Pedersen a174901412 fix building with system libslirp 2024-08-07 17:24:07 +02:00
Nadia Holmquist Pedersen 8423dae6ff Add "Open melonDS directory" menu option 2024-08-07 15:53:58 +02:00
Jaklyy 332a39dbaf fix JIT being borked 2024-08-05 16:14:17 -04:00
Jaklyy a85b2bfb56 tweak when irqs are triggered and fix prefetch aborts
also ig add some comments next to the svc funcs so that someone searching for "swi" can find them easier
2024-08-05 14:57:17 -04:00
Jaklyy eedd2806f9 Reapply "Improve accuracy of prefetch aborts"
This reverts commit 0dc619d615.
2024-08-05 12:37:42 -04:00
Jaklyy 0dc619d615 Revert "Improve accuracy of prefetch aborts"
This reverts commit 587958e678.
2024-08-05 11:41:25 -04:00
Jaklyy 587958e678 Improve accuracy of prefetch aborts
comes with a small-ish performance hit
2024-08-04 23:31:20 -04:00
Jaklyy fe69cfac7d Merge remote-tracking branch 'upstream/master' into interpreter-fixes 2024-08-04 21:28:32 -04:00
RSDuck dd386d12a9 use templates to only execute GDB stub related code if enabled 2024-08-05 03:23:49 +02:00
Jaklyy 346ac1380f forgot to remove a thingy when removing timing reworks 2024-08-04 15:21:23 -04:00
Jaklyy ab2a8f128f revert timing tweaks, finish thumb interwork code 2024-08-04 14:54:36 -04:00
Jaklyy 4b703d24b5 improve msr timings for arm9 2024-08-03 16:22:14 -04:00
Jaklyy 2e421e29e3 cache should be disabled when pu is disabled 2024-08-03 16:21:17 -04:00
Jaklyy 3c936d84b3 improve mrs, mrc timings 2024-08-03 16:20:50 -04:00
pants64DS 76c2723f5c
Fix console output on Windows (#2122)
Co-authored-by: pants64DS <pants64DS@users.noreply.github.com>
2024-08-02 02:21:37 +02:00
CasualPokePlayer 757a608b6e
Fix a few compiler warnings (#2063) 2024-08-01 23:26:46 +02:00
Jakly 54e87c915f
fix a couple polygons (#1920)
hw prioritizes the earlier vertex instead of leftmost
2024-08-01 22:55:00 +02:00
Jakly 12be06beb6
fix gdb stub causing the emulator to hang on undefined instructions (#2054)
* dont hang on undefined instruction

* Add spaces

---------

Co-authored-by: Kemal Afzal <RSDuck@users.noreply.github.com>
2024-08-01 22:48:52 +02:00
Jakly 161bd9d3d2
Default zero dot display register to the 24 bit integer limit (#1968)
* 0 dot disp defaults to the 24 bit integer limit

* useless correction

it goes through the reset function to set the variable on boot anyway but why not have the initialized state be correct too
2024-08-01 22:46:05 +02:00
Jakly d0a7239f15
fix some bugs with compressed texture look up (#2051) 2024-08-01 22:44:04 +02:00
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