My semi-lucid ramblings which get shouted into the void (ie. a somewhat monthly journal).
But Why?#
Well… why not?
The less sarcastic answer is that I’m human, and have a tendency to forget things that happen to me.
I want to create a memory palace so that I have something to look back on once I’m older. These writings serve that purpose.
These journal entries also serve the dual purpose of letting me document longer running projects of mine. Hopefully, having an imminent deadline of writing a substantial monthly post motivates me to stop procrastinating.
The bad news:
Finals are coming up. I’m seeing much cramming and hastily written code in my future. The good news:
I finished my LoxVM (see here for the repository). I ended up giving up on writing a garbage collector for the VM, since it turns out to be kind of hard to do graph problems in Rust. Not impossible, but more work that I expected. Schoolwork also started piling up, so I really wanted to finish this project so that I could focus on that stuff....
The good news:
I managed to get a deeper understanding of the GBA architecture. This entailed reworking the memory and ownership model that I had previously sketched out. I also got a better feel for how to synchronize all of the different hardware pieces together (namely, that the CPU executes a single instruction which takes X cycles to complete. Each piece of hardware then banks X internally. After each piece of hardware updates it’s internal state, it determines if it needs to perform any actions....
The good news: I managed to make progress on some of the goals I set for myself last month.
The bad news: I didn’t get as far along as I thought I would since I got… distracted.
Here are the things that I made progress on:
GBA Emulator: I did neither the ARM CPU implementation nor the PPU. What I did do was
finish up the address space mapping (ie. I transcribed the register masks from GBATek into C++ source) setting up the memory access system of the emulator (each piece of hardware gets an ID, and each address in memory grants read/write access to only certain IDs) integrating the desktop GUI framework (imgui) and refactoring the codebase to separate the core emulator functionality from the UI (this allows me to build for both desktop via imgui and the web via emscripten) Maybe this time, I’ll actually implement the CPU instruction set and PPU like I said I would?...