I've been resuming work on a Zig library for developing N64 homebrew¹. Previous milestone was getting a framebuffer onto the screen, and after achieving that I took an overly-long break.
Current goal, which I've been working on for a bit more than a week now, is to add support for controlling the RDP (the part of the N64's GPU that actually does all the rasterization), such that programs can actually draw triangles. I'd already implemented the control registers, so the current work is defining all the RDP commands, along with documenting what they do and how to use them — which means that I need to fully understand what they do and how to use them, and that's been a fun rabbit hole to explore.
I'm currently about halfway to two-thirds of the way through defining packed structs for all the RDP commands, then the plan is to build a CommandList struct with methods to build RDP command lists and validate that they make sense (make sure all the triangle/rectangle rendering commands have all their subcommands in the right order, make sure you ain't calling them without there being a framebuffer defined as the rendering target, make sure the needed synchronization commands are in place where needed, etc.). Then that should hopefully be enough for Zig64 to draw its first triangle :)
----