It's... been a while since I last added a log. The great news is that I once again have DOOM running on the platform, this time using the DE10-standard. I also made substantial improvements to all the interconnects and modules:
- Wishbone compliant interfaces, including many that pipeline and block transfer
- Update code style to reflect some additional experience on my part
- Updates to use SystemVerilog at least to the degree I know it
- Switch system from Princeton to Harvard architecture
- More implicit synthesis of Intel's IP, to make things like FIFOs and dual port RAM more portable
- Some of the core elements (mostly the CPU) have Verilator tests and an easy to use test suite
I also took the opportunity to aggressively cut down sections of the DOOM code that aren't relevant to my port (at least right now). That included all of the sound support, argument parsing, and anything related to the game mode - it's hardcoded to retail. Removing all of the parsing, strings and conditional logic stripped down the binary by a fairly large amount.
I can post another video, but at the moment it's not really too different than the old one.
What this really gives me is a better baseline to experiment with things that will improve performance of the game. In particular, I'm looking at a few options right now fairly carefully:
- Modify gcc to pass at least some arguments in registers instead of always on the stack. Memory access is expensive, even with a cache.
- Finishing the pipelined version of the CPU. It's mostly there, but it fails certain regression tests related to exceptions and I need to find the deadlocks.
- Adding a DMA controller that will allow for fast block transfers between regular and video memory without the CPU.
- Profiling the game to see where most of the time is spent. I've already done this is a crude way, and not surprisingly, it seems like most of the time is recursively evaluating the players visual field to determine what needs to be rendered (thus the arg handling above). There may be other places that jump out if I did more profiling.
So that's about where we are right now. If you've been watching this project for a while, thanks! Let me know if there's anything in particular you are interested in seeing, or if you have any ideas on where to go from here.
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.