The good news:

  1. 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. If it has the available cycles to do so, it withdraws from the bank and executes the action. Otherwise, you move onto the next piece of hardware)
  2. I finished the tree-walk interpreter in Crafting Interpreters, converted it to wasm, and slapped it on this website (see here). It passed most of the public test suite; there are a couple of bugs. It works though! Interpreters previously seemed like black magic to me, so getting to build one was quite fun.
  3. With regard to the POV fan, I managed to source all of the hardware that I needed. I made a really simple schematic; the only mildly difficult part was tracking down the datasheet of the Hall effect sensor to find the pinout.

KiCadSchematic

I also designed an enclosure for the system (haven’t used Fusion in a while). Nothing has proper tolerances on it b/c I don’t have immediate access to a 3D printer, so this is just the rough draft. Once I get reliable access to one again, I will start fine tuning all of the dimensions a bit better.

Enclosure

The bad news:

  1. Writing the implementation of all of the opcodes for both ARM and THUMB instruction sets, as well as writing a full test suite for both, is extremely tedious. It’s one of those things where you need to treat the process like eating an elephant; you start at the trunk and keep chewing away until your done. I also decided to ignore interrupts in my first design pass of the CPU; now, I need to get around to incorporating those in. I do have a plan of attack; I just need to get it done.
  2. This one isn’t necessarily bad news: Crafting Interpreters has a second half to it where you create a stack-based VM to run the Lox language. I thought that I should be wholly unoriginal and try to implement the thing in Rust as many others have before me. I don’t know Rust very well, and it’s a fairly difficult language to learn, so we’ll see how that goes.
  3. I did not finish the POV fan, mostly due to procrastination :(. I also probably won’t finish next month since I have to move and situate myself at my new place for the upcoming academic year. Hopefully I make decent progress by the end of next month? I hope to at least have the hardware built. The software might take a bit of time to iron out though.

In other news:

  • I signed a lease for an apartment, so now I don’t need to worry about finding a place to live!
  • I’ve managed to keep a somewhat consistent exercise regime with regards to weightlifting (at least 3 times a week). I’ve found it difficult to transition to 4 days a week, but will endeavor to do so during the school year.
  • I stumbled across some OCW courses for analog electronics design and FPGA/digital electronic design. Considering the kind of work I’d like to do during my PhD, I’m planning on taking notes and working my way through the both labs over the course of a year. As some motivation, I decided on two projects to work towards: a theremin since they are fun to play. With regards to the digital side, I want to emulate some sort of video game system, although given the arbitrary time constraints I’ve given myself, something like implementing a small ML model or cellular automata might be better…

That’s all for now. See ya!