Coder Social home page Coder Social logo

wheremyfoodat / panda3ds Goto Github PK

View Code? Open in Web Editor NEW
762.0 24.0 48.0 22.96 MB

HLE 3DS emulator

Home Page: https://panda3ds.com/

License: GNU General Public License v3.0

CMake 0.72% C++ 90.28% Makefile 1.31% C 0.39% GLSL 0.56% Java 6.74%
arm emulation nintendo-3ds recompilation c-plus-plus emulator 3ds lua scripting

panda3ds's Introduction

Panda3DS

Windows Build MacOS Build Linux Build AUR Package

Panda3DS is an HLE, red-panda-themed Nintendo 3DS emulator written in C++ which started out as a fun project out of curiosity, but evolved into something that can sort of play games!

Experimenting with new methods in emulation and unique features such as Lua scripting, we're here to make a difference!

Discussion

Join our Discord server by pressing on the banner below, or find us on other platforms via our website!

Discord Banner 2

screenshot1 screenshot2 screenshot3

Download

You can download stable builds from the Releases tab, or you can download the latest build from the tables below. Additionally, Panda3DS comes in 2 flavours on PC: A minimal SDL frontend, which does not have a GUI, and an experimental Qt 6 frontend with a proper user interface.

SDL builds (No GUI):

Platform Status Download
Windows build Windows Build Windows Executable
MacOS build MacOS Build MacOS App Bundle
Linux build Linux Build Linux AppImage

Qt builds:

Platform Status Download
Windows build Qt Build Windows Executable
MacOS build Qt Build MacOS App Bundle
Linux build Qt Build Linux AppImage

Compatibility

Panda3DS is still in the early stages of development. Many games boot, many don't. Lots of games have at least some hilariously broken graphics, audio is not supported, and some QoL features (including a GUI) are missing. However, even more things are implemented, such as most of the 3DS core required to play games, and various neat features, such as Lua scripting, discord bot support, support for some system apps, cheats, controller support, WIP amiibo support and many more! The emulator is constantly evolving, so make sure to take a peek every now and then!

For documenting game compatibility, make sure to visit the games list repository. For miscellaneous issues or more technical issues, feel free to use this repo's issues tab.

Why?

The 3DS emulation scene is already pretty mature, with offerings such as Citra which can offer a great playing experience for most games in the library, Corgi3DS, an innovative LLE emulator, or Mikage. However, there's always room for more emulators! While Panda3DS was initially a mere curiosity, there's many different concepts I would like to explore with it in the future, such as:

  • Virtualization. What motivated the creation of this emulator was actually a discussion on whether it is possible to get fast 3DS emulation on low-end hardware such as the Raspberry Pi 4, using the KVM API. At the moment, Panda3DS is powered by Dynarmic rather than using virtualization, but this is definitely a concept I want to explore in the future.

  • Debugging, reverse engineering and modding tools. While contributing to PCSX-Redux and collaborating with the other developers, I had the chance to find out how useful tools like these can be. They can serve as indispensable tools for the homebrew devs, modders, reverse engineers, as well as emulator developers themselves. Some tools can even become fun toys the casual user can mess around with. As such, I think they can really improve the experience in a project like this. Of course, I'd like to thank @nicolasnoble and the entire Redux team for helping me learn the value of these tools, as well as making me improve as a programmer.

  • Trying out various other unique features, such as different graphics or audio enhancements, or supporting other niche things such as amiibo.

  • Fun. Writing code is fun and I strongly encourage anyone to do it.

Keep in mind, these are all long-term plans. Until then, the main focus is just improving compatibility

How to build

Panda3DS compiles on Windows, Linux and MacOS, with only 1 (optional) system dependency, the Vulkan SDK. If you don't want to install the Vulkan SDK you can always build the emulator with only OpenGL support, by adding -DENABLE_VULKAN=OFF to the cmake command

All you need is CMake and a generator of your choice (Make, Visual Studio, Ninja, etc). Simply clone the repo recursively and build it like your average CMake project.

git clone https://github.com/wheremyfoodat/Panda3DS --recursive

cd Panda3DS && mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DENABLE_USER_BUILD=ON  # Set up compilers etc here if you'd like

<Invoke Make, Visual Studio, or whatever you would like to use>

*If you want to contribute to the project, you may not want to enable the ENABLE_USER_BUILD option and instead familiarize yourself with the various CMake options provided in the root CMakeLists.txt

How to use

Simply drag and drop a ROM to the executable if supported, or invoke the executable from the command line with the path to the ROM as the first argument like: Alber.exe MyGame.3ds
Panda3DS can load ROMs in the following formats:

  • .3ds/.cci
  • .cxi/.app
  • .elf/.axf
  • .3dsx

Both decrypted and encrypted dumps are supported. However for encrypted dumps you must provide your AES keys file by adding a sysdata folder to the emulator's app data directory with a file called aes_keys.txt including your keys. Currently .cia files are not supported yet (support is planned for the future), however if you want you can usually use Citra to extract the .app/.cxi file out of your .cia and run that.

Controls

Keyboard & Mouse

  • Up analog W
  • Down analog S
  • Left analog A
  • Right analog D
  • D-pad Arrows
  • A button L
  • B button K
  • X button O
  • Y button I
  • L button Q
  • R button P
  • Start button Enter
  • Select button Backspace
  • Touch Screen Left click
  • Gyroscope Hold right click and swipe your mouse left and right (support is kind of shaky atm, but games that require gyro here and there like Kirby should work)
  • Pause/Resume F4
  • Reload F5

Panda3DS also supports controller input using the SDL2 GameController API.

Acknowledgements

  • 3DBrew, a wiki full of 3DS information and the main source of documentation used.

  • GBATek, a GBA, DS and 3DS reference which provided insights on some pieces of hardware as well as neatly documenting things like certain file formats used in games.

  • Libctru, the most well-known 3DS homebrew SDK. Used for developing test ROMs, as well as a source of documentation thanks to its doxygen wiki.

  • ctru-rs, a wrapper around libctru for writing 3DS homebrew in Rust.

  • Citra, an HLE 3DS emulator. Very useful as a reference, with some code snippets inspired or adapted from it.

  • 3dmoo, an HLE 3DS emulator which helped similarly to Citra

  • Corgi3DS, an LLE 3DS emulator which both served as an inspiration, as well as a nice source of documentation for some PICA200-related things

Sister Projects

  • Dynarmic: An arm32/arm64 to x86-64/ARMv8 recompiler
  • PCSX-Redux: A PlayStation 1 emulator targetting developers, reverse engineers and regular PS1 fans alike
  • SkyEmu: A seagull-themed low-level GameBoy, GameBoy Color, GameBoy Advance and Nintendo DS emulator that is designed to be easy to use, cross platform and accurate.
  • NanoBoyAdvance: A Game Boy Advance emulator focusing on hardware research and cycle-accurate emulation
  • Dust: Nintendo DS emulator for desktop devices and the web
  • MelonDS: "DS emulator, sorta" - Arisotura
  • Kaizen: Experimental work-in-progress low-level N64 emulator
  • ChonkyStation: Work-in-progress PlayStation emulator
  • shadPS4: Work-in-progress PS4 emulator by the founder of PCSX, PCSX2 and more
  • Hydra: Cross-platform GameBoy, NES, N64 and Chip-8 emulator

Support

If you find this project exciting and want to support the founder, check out his Patreon or Ko-fi
Keep in mind that funding is only aimed to cover various life costs and support development. Panda3DS is a free product and on no occasion will official builds ever be made private or limited to sponsors! Any donation is much appreciated!

Nintendo 3DS is a registered trademark of Nintendo Co., Ltd.

panda Here's a panda it go blep

panda3ds's People

Contributors

auxy6858 avatar caldog20 avatar fleroviux avatar gabrielbrdeveloper avatar georgemoralis avatar ishan09811 avatar kostasaizo7 avatar liquidfenrir avatar liuk7071 avatar marysaka avatar merryhime avatar nadiaholmquist avatar nl255 avatar noumidev avatar offtkp avatar psi-rockin avatar raphaelthegreat avatar simonen64 avatar skylersaleh avatar spikehd avatar tgp17 avatar wheremyfoodat avatar wunkolo avatar xkevio avatar yretenai avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

panda3ds's Issues

[Feature Request] Add the ability the view the FPS and VPS

This would not only be great to determine which frame rate limit the game has, it would also be great if we could see if the game itself lags just like it would on console (FPS). It would also be great to know what the emulation speed the game is running in (VPS)

Game compatibility from my testing

I'll try to test as many games as possible

  • Donkey Kong Country Returns 3D gets stuck in black screen at boot
  • Luigi's Mansion gets stuck in black screen at boot (exclusive to PAL version)
  • Sonic Boom: Shattered Crystal gets stuck in black screen at boot after the ring animation
  • Sonic Boom: Fire & Ice gets stuck in black screen at boot after the ring animation
  • Sonic Lost World gets stuck in black screen at boot
  • Rayman Origins gets stuck in black screen at boot
  • Kirby's Blowout Blast gets ingame with minor graphical issues
  • Kirby Fighters Deluxe gets ingame with minor graphical issues
  • Dedede's Drum Dash Deluxe gets ingame with minor graphical glitches
  • Sonic Generations gets ingame with minor graphical issues
  • Luigi's Mansion 2 gets ingame with major graphical issues
  • Kirby Battle Royale crashes with [FATAL] Unimplemented 8-bit write, addr: 00000000, val: 58
  • Kirby's Extra Epic Yarn crashes with [FATAL] Unimplemented svc: 3C @ 00104550
  • Kirby Planet Robobot crashes with [FATAL] FS service requested. Command: 08520100
  • Mario & Luigi Dream Team Bros crashes with [FATAL] LDR::RO service requested. Command: 000402C2
  • Mario & Luigi Paper Jam Bros crashes with [FATAL] Thrown fatal error
  • The 2 Mario & Luigi remakes crash with [FATAL] LDR::RO service requested. Command: 000902C2
  • Paper Mario Sticker Star crashes with [FATAL] Thrown fatal error
  • Ultimate NES Remix crashes with [FATAL] Thrown fatal error
  • Yo-Kai Watch crashes with [FATAL] WaitSynchronizationN: Bad object handle FFFF8008

errors occuring using both your appimages:

/tmp/.mount_Alber-8bDuN0/AppRun.wrapped: error while loading shared libraries: libOpenGL.so.0: cannot open shared object file: No such file or directory

and this:

../Linux-SDL/Alber-x86_64.AppImage: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by ../Linux-SDL/Alber-x86_64.AppImage)

The first is the qt version and the second is the regular sdl version.

Would it be possible to not have such restrictive dependencies and just say its unsupported at worst and still have it be possible to run the appimage with older libraries?

If possible, better yet, just be able to use it.
By libgcc is a bit old I will however admit. Its 2-30 supposedly. So you tell me if you can/are willing.

Flatpak

Having a Flatpak build would be nice for Linux, especially since almost all modern emulators support it.

Benefits of Flatpak:

  • The user doesn't need to worry about dependencies.
  • Easy to install and uninstall.
  • Universal format.
  • Sandboxed/isolated from your system, so your install won't break as easily.
  • Easier to solve issues because every Flatpak install will be identical.

GUI

Title. Know this won't happen for a while.

Who is Alber?

I thought the emulator was called Panda3DS. But the window title mentions Alber? Who is Alber? And what is he doing on my PC?

[Feature Request] Add support for the home menu

I know that this won't happen for a while, but it would be still cool to have it. Of course, either the user needs to provide the files or implement a way to download the firmware files with encryption keys like Citra does. If the user doesn't provide encryption keys the files cannot be downloaded, just like Citra

[CI] Linux builds don't work

Currently, Linux Panda3DS needs to be self-built, CI builds don't work.

This has been known for a while but I thought it'd be nice to have it in an issue

About Controller Mapping

back in ye olden days of citra, you used to be able to remap the controls, please implement this as a gui option...

Pandroid

Hello, the first version of pandroid in apk arm64 version installs perfectly but it closes when opening said apk, is it because they are tests and is it the first version?

Shader interpreter vs JIT discrepancies

JIT works better:

  • Kirby Triple Deluxe: JIT gets correct graphics in menus, interpreter does not

Interpreter works better:

  • Mario Kart 7: JIT has broken car collisions due to not implementing exp2/log2
  • Ocarina of Time: JIT fails to render part of the bottom screen sprites

Status on New 3DS support?

This might be ridiculous but, I'm just wondering what the status is with New 3DS support, since it isn't mentioned anywhere. I have tried Minecraft New 3ds edition and it only gets to the logo, which is progress of course.

Feature request: Windows CI

I made this issue because this emulator has a Linux and Mac CI but not a Windows CI. Can there be a Windows CI in the future so users with a GitHub account can download compiled Panda3DS builds for Windows?

Missing positional lights

The current code turns fragments with positional lights enabled purple.

This is known to trigger in the following games

  • The Legend of Zelda: A Link Between Worlds
  • Captain Toad
  • (Potentially more?)

Where is TOTK PS5 Zelda (Sussy Edition)?????

i had this idea for a 3ds emulator and i think it has a lot of potential. So like what if u emulated totk on 3ds like a port but not really, its on ps5 so its like a ps5 emulator on the 3ds. But i also like among us so do u think u can put a sussy baka in totk? I know u can make it happen

Just to cite my sources this wasn't my idea it was ChatGPT's

about Citra

As of yesterday, citra was killed by nintendo in collateral damage to the yuzu switch emulator, please remove the mention of it in the info section of this repository.

Add support for "installing" Cia's

all the 3DS files I have dumped from my 3ds when it was working was in .cia format, cia support needs to be added to allow me to play my roms, kinda like how citra(RIP) used to do.

log files (feature request)

I know that you can see the console but it would help more if there were log files, because some games crash very quickly and its hard to see what it says or screenshot on the console in such little time.
And if it was added then you could have people have it when they report about a game on the compatibility list and it could be more easily understood why certain issues occur.

Qt build segfaults in debug mode

Build Qt build in debug mode (not relwithdebinfo)
Asserts are now enabled
An assert fails at:

#5  0x0000555555776232 in Zep::ZepMode::GetCurrentWindow() const (this=0x555557bb4c10) at /home/offtkp/other/Panda3DS/third_party/zep/include/../src/mode.cpp:163
#6  0x0000555555767300 in Zep::ZepEditor::SetGlobalMode(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (this=0x5555576615c0, currentMode="Standard")
    at /home/offtkp/other/Panda3DS/third_party/zep/include/../src/editor.cpp:786
#7  0x00005555558604fc in TextEditorWindow::TextEditorWindow(QWidget*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (this=0x5555579131b0, parent=0x7fffffffd8a0, filename="script.lua", initialText="")

Tracking: Thread scheduler scheduling

It is important to remember the thread scheduler only pretends to be cooperative and loves to preempt.
Particularly any sort of ARM11 timer interrupt can preempt the running process, which is important to emulate since a lot of games seem to get stuck due to multithreading issues (eg #88).

Unimplemented examples of this pre-emption can be seen in

  • ArbitrateAddress (timing out will preempt, which we don't emulate)
  • WaitSync1/WaitSyncN (timing out again)
  • SleepThread (Waking up will preempt)
  • OS timers firing
  • TBD

We do have some cases implemented (eg events firing), but it's probably not good enough and still causes bugs/games hanging.
Below I attach some relevant resources from our Discord server.

What are the requirements?

There is no list of requirements in the main page here for panda3ds, citra for example demands opengl 4 (without explaining why opengl 2 or 3 doesnt work with citra).

I hope you'll support directx in this emu ;) - i know this is on a early stage but it would nice to have an idea of what kind of computer we need for this.

making the emulator "portable"

many emulators support portablizing them(via putting all of the in-use files in the same folder) by placing a blank portable.txt file in the directory, emulators like Dolphin(GC/Wii) and Xenia(XB360) already do this.

DSP hangs

Professor Layton and the Miracle Mask hangs here, lemon emu says something something dsp :)
image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.