reicast-emulator
reicast-emulator copied to clipboard
JIT/Core restructuring, refactoring and improvements masterlist
Large parts of the JIT code are archaic and extremely hard to understand. We also need support for more platforms
Here are various proposals on how to improve things. Many of these already have separate tickets,
Small-ish tasks
- [ ] Implement more instructions for x64 (see rec-x86 and rec-x64 for details)
- [x] Use context parameter for arm7di jit instead of globals (#1109)
- [ ] Implement pause / resume functionality for android (#940, possibly others?)
Medium-ish tasks
- [ ] Cleanup existing armv7 and x86 backends. There's a ton of dead experiments there.
- [ ] Implement an aarch64 minimal backend
- [ ] Implement more aarch64 instructions once we have minimal backend
- [ ] Cleanup vmem and sh4 memory mappings
- [ ] Optimize vmem for 64-bit architectures
- [ ] Implement a basic sh4 test harness
- [ ] Implement a basic arm test harness
- [x] Clean emulator shutdown (#868, #917, possibly more tickets)
- [x] Get WinCE games and linux for dreamcast running in interpreter (#53, somewhat done)
- [x] Investigate why videos are choppy
Large-ish tasks
- [ ] Implement an arm7di interpreter (We use one from VBA atm. It works, but i'm not fond of it)
- [ ] Refactor arm7di "jit". Can we merge the sh4 and armv7 backends like redream does? What about arm7di to armv7 special casing?
- [ ] Redesign IL to something that is ssa-based
- [ ] Rewrite the JIT driver code
- [x] Add support for SMC. nullDC used page watches for it, probably we can do the same
- [ ] Add save/load state support (#522, #1017, #301, #825. This is really a popular one)
- [ ] Cleanup oslib/gui interfaces (#473)
- [ ] Cleanup logging (old poc: #677)
Huge tasks
- [ ] Refactor the codebase to not use globals. Probably best done module-by-module (#1140)
- [ ] Write a debugger (#447, #70). We can start with sh4, then arm, then pvr, then ...
(I'll add more things to the list as I come up with more ideas. Got anything more to propose?)
Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.
For tests maybe we can reuse the extensive tests lxdream has. Would something like play-codegen be usable/desirable https://github.com/jpd002/Play--CodeGen ?
The short answer is that it would be more trouble than it's worth to use it.
The long answer involves citing how the project is bottlenecked by piping every change through a single individual, the most assertive of the contributors being extremely inexperienced, and much of the code being overly specialized for the project. It would probably be easier to build from scratch.
@LoungeKatt all valid points :)
@skmp In terms of tests for sh4 and arm http://www.lxdream.org/hg/lxdream/file/765e514f99a6/test . Afaik it isn't possible to run binaries/elf on reicast or is it?
Investigate why videos are choppy
is done in #1165, right?
Also Refactor the codebase to not use globals. Probably best done module-by-module (#1140)
should probably be done before the savestates are started.
From my background with agile methods i would suggest, focusing first on those that bring immediate value to the costumer (end user), perhaps that can increase the visibility of the work being done and bring more chances of bounties. This said, i'd consider:
- Get WinCE games and linux for dreamcast running in interpreter (#53, somewhat done) - the most important -Add support for SMC. nullDC used page watches for it, probably we can do the same
before all the others
@skmp @baka0815 @dmiller423 Seems like a great list of things to do
@rcaridade145 (two years later lol) I've run some of the lxdream tests - some fail some pass. We could def. make use of that as a start. SMC and WinCE on interpreter work now.