Project Status
From NerdConsole
Jump to navigationJump to search
The NerdConsole project is a monstrously large hobby project being done entirely by one person. That means a lot to do, a lot to learn, and a lot of things to make work together. It also means that at any given time I may be working on any number of different parts of the project. To help make it as straightforward as possible to figure out what's going on, this page presents a high level list of activities.
PPU Software
- (In Progress) Rewriting the PPU software from scratch. Previously the PPU was written in Java, but I kept running into issues caused by the language design. Specifically the extra work caused by the lack of unsigned data types. I'm rewriting it in C++, but not just for access to unsigned integer types. It was also the most straightforward way to get access to proper libraries for graphics (SDL3 - Simple DirectMedia Layer 3.0) and GPIO (libgpiod).
- I tried creating unions to allow for bytewise setting of complex register and table types with useful access to sub-values. This ended up not working because the level of control available when creating unions and the ways the compiler does automatic bit packing caused impossible data arrangements.
- Instead I made a collection of POCOs that do this job, but I won't deny I was hoping to not have to.
PCB Work
- Need to redesign the Video Logic Level board to put the pins in a new order. This was the realization that GPIO pins are not logically ordered in a sane way that lines up with the physical layout. As it turns out, the way I was doing this was going to result in massively inefficient value loading that required a ton of bit shifting and masking and simply putting things in a different order improved this situation a ton.
- Need to come up with a solution for YM-3812 FM Synthesizer chips being either expensive or fake (or both). My current theory is a software based approach that runs on a RP2040 (Raspberry Pi Pico) and emulates the YM-3812, or some other audio solution built into the PPU program. The hope is that the emulated audio solution is as close to a drop in replacement for the YM-3812 as possible, but I'm not guessing the standard YM-2014 DAC will work so another solution will probably be required. This change requires spatial changes due to differences in DAC, amplification, and chip size difference between Pi Pico and YM-3812. A PPU emulated approach would require remapping the PPU pins again, which I would like to avoid.
- Need to redesign the Main Board since so many things have changed in the plan since the last time I ordered boards. Prototype 2 is an almost complete redesign.
- The Raspberry Pi was changed to be a full sized Raspberry Pi 4 instead of the smaller Raspberry Pi 3A+.
- The cartridge connector was changed for one with a smaller pin pitch (2.54mm instead of 3.96mm) to make inserting and removing cartridges easier. This obviously changed the entire middle of the board.
- The User Port support was removed entirely. This means the removal of the VIA chip and several supporting chips for interrupt control, as well as expansion headers on the main board and the external DB-25 connector.
- Optional extra controller ports are now supported (to better use the bus lanes available on the joystick buffer). This means additional connectors need to be available to support that.
3D Modelling
- Need to design several case parts. These are fairly self explanatory but also depend on how various PCBs end up looking.
- Main Case
- Bottom
- Top
- Cartridge Guide
- Switch and Button Adapters
- Video Board Supports
- Cartridge Case
- Bottom
- Top
- Extra Controllers Breakout
- Bottom
- Top
- Main Case
Other Software
NerdSembler
- I hope to one day be able to get my brain around making an assembler for the 65xx family of CPUs. I'd already written the lexer and part of the parser when I ran into difficulties with parsing complex expressions that would be very handy to support.
- I started coding NerdSembler in Java, but similar to the PPU project I was running into problems with Java and started over from scratch in C++. I've gotten the lexer and several parts of the abstract syntax tree and parser working. Next is the emitter.
Graphics Tiles
- I have written a tool that uses standard .png files to produce binary graphical tile data. This tool will need to be revisited to support other binary representations and to have better documentation.