- [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions). - [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md) - [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability. ------------------- Problem: In cyrilic idioms, Absolum won't past beyond 1st area (intro miniboss). From the user panic i`ve extracted these strings: > GlobalState.request_next() > save_state_to_saveGame(...) > platform.ProcessSave() > bin_serialize_to_file(...) > StandaloneTypeModel.Write(SaveGame, ...) > Write(SaveGame.AdventureSaveSlot, ...) > Write(PlayerState, ...) > ProtoBuf.ProtoWriter.WriteString(...) + 0xcc > ProtoBuf.Helpers.DebugAssert(...) > Debug.Fail(...) By debugging ProtoBuf.ProtoWriter.WriteString(...) argument it was found that the string Отлично! (Great! expression for combos between 6 and 30 iirc) was reaching a size comparison of different values and causing an assert in guest side.. It seems the game tries to save highest combo level. I've managed to skip this bug by doing a perfect combo for entire level, so that the problematic word never was generated or attempted to be saved. After further research, the issue chain was identified: Game maths literal string size via two ways and compare, and one of them was getting replaced by a wrong value due to Eden letting the literal string be interpreted as a real instruction. Logic added: const bool pair = decltype(l)::ExtractValue(raw) & 1; const bool fixed_rt2 = decltype(rt2)::ExtractValue(raw) == 0b11111; return pair || fixed_rt2; - pair checks bit 21 (L & 1): register-pair instructions actually use Rt2, so they remain accepted. - For single-register forms, require Rt2 == 31. The table word fails this check, so NCE leaves it intact. Sources https://www.scs.stanford.edu/~zyedidia/arm64/stxrb.html https://www.scs.stanford.edu/~zyedidia/arm64/stxp.html https://github.com/qemu/qemu/blob/master/target/arm/tcg/a64.decode#L344 Altough the solution is a case specific guard, it is data agnostic: This is a true fix to avoid a specific case in which a literal may be interpreted as a valid instruction, without interfering with other true instruction cases. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4369 Reviewed-by: lizzie <lizzie@eden-emu.dev> Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
Eden
Eden is a free and open-source (FOSS) Switch 1 emulator started by developer Camille LaVey.
Written in C++, with builds for Windows, Linux, macOS, Android, FreeBSD and more.
Compatibility | Development | Building | Download | Support | License
Compatibility
The emulator is capable of running most commercial games at full speed, provided you meet the necessary hardware requirements.
A list of supported games will be available in future. Please be patient.
Check out our website for the latest news on exciting features, monthly progress reports, and more!
Contribute
To contribute to Eden; be it financially, code, bug reports, or otherwise, see our Contributing guidelines.
Documentation
We have a user manual! See our User Handbook.
Building
See the General Build Guide
For information on provided development tooling, see the Tools directory
Download
You can download the latest releases from our release page.
Save us some bandwidth! We have mirrors available as well.
License
Eden is licensed under the GPLv3 (or any later version). Refer to the LICENSE.txt file.
Special thanks
Super special thanks to Cloudflare for preventing the git server from blowing up.
- Yuzu
- Ryujinx
- Sudachi
- Citron
- Torzu
- Suyu
- Ryubing
And everyone who continues or had contributed to the project! <3