To handle faults such as data aborts, alignment faults, or supervisor
calls, the CPU must transition from the guest's context into a
privileged exception handler. This patch emulates the hardware sequence
for this entry process.
1. The vcpu_state_t struct includes the essential EL1 system registers
required for exception handling (ELR_EL1, SPSR_EL1, ESR_EL1, FAR_EL1,
and VBAR_EL1).
2. A new function, take_synchronous_exception(), is introduced. It
models the requirements for entering an exception targeting EL1:
- Saves the return address (PC) into ELR_EL1.
- Saves the current proccess state (PSTATE) into SPSR_EL1.
- Contructs the Exception Syndrome Register (ESR_EL1) from the
provided Exception Class and ISS.
- Saves the faulting address to FAR_EL1 for data aborts.
- Updates the live PSTATE to a safe state for the handler.
This implementation is intentially partial. The final step of updating the
PC to jump to a handler in the guest's vector table (using VBAR_EL1) is
stubbed out. The vector table will contain assembly instructions so a
functional instruction decoder is required to fully complete the
exception handler.
Signed-off-by: Ronald Caesar <github43132@proton.me>
|
||
|---|---|---|
| .github/workflows | ||
| 3rd_Party | ||
| android/app/src/main/cpp/org/pound/poundemu | ||
| core | ||
| gui | ||
| resources | ||
| WIP/fs | ||
| .clang-format | ||
| .gitignore | ||
| .gitmodules | ||
| CMakeLists.txt | ||
| CMakeSettings.json | ||
| Compatibility | ||
| CONTRIBUTING.md | ||
| LICENSE | ||
| README.md | ||
Pound
“i think of getting pounded when i see that [name]” – Satisfied Customer
Note
This project is still being worked on, and we really need help as we only have a few developers.
If you know C++ and think you can help out, hop into the Discord and let us know. :)
Overview
Join the Pound Discord Server!
Pound is an early-stage emulator for the Nintendo Switch 2, targeting Windows, Linux and macOS ( Intel and Apple Silicon).
Initial focus is on implementing the architectural similarities to the original Nintendo Switch. Later stages of development will address differences in hardware between the two console generations.
Disclaimer
The goal of this project is to experiment, research, and educate on the topic of emulation of modern devices and operating systems. It is not for enabling illegal activity. All information is obtained via reverse engineering of legally purchased devices and games and information made public on the internet (you'd be surprised what's indexed on Google...). We are not any way affiliated with Nintendo or NVidia.
How to Compile Pound
See the compilation guide for detailed instructions on how to compile Pound.
Codebase
Pound reuses selected components from existing Nintendo Switch 1 emulators, primarily Yuzu.
All third-party code is clearly documented and properly attributed in the relevant parts of the repository.
Contributing
See here before submitting a pull request.
License
- Distributed under the GNU GPL-2.0 license
Credits
- Parts of the emulator are based on code from the Yuzu project.