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.
Happy New Year!
The semester is over, and I passed all my classes, and that’s all that matters!
First, I finished integrating my POVFan, and it works! (see below)
It doesn’t look like a continuous image, since the frame rate of my camera is much higher than the angular frequency of the motor. But in person, you see a continuous image (the “framerate” of your eyes can’t keep up with the rotation speed of the blade)....
The bad news:
It’s midterm season ATM, so life could be better. I got my first roach. Don’t know how I haven’t encountered one in the 5 years I’ve been in New York, but here we are. Dealt with it immediately though. The good news:
With regards to the Lox Rust compiler, I managed to implement functions and closure (closures are such a pain…). I’m now starting down the barrel of writing a garbage collector for the VM, which would require a fundamental restructuring of the codebase....
The good news:
Classes are going well so far. I’m learning about classical mechanics in the framework of Lagrangians and Hamiltonians in greater depth than I have every done before. In previous classes, we just stopped at deriving Hamilton’s equations. So far, we are exploring the theorems associated with phase space in greater detail Electricity and Magnetism gives me an excuse to read Jackson Computational physics covers a smattering of numerical techniques as they are applicable to physics....
So I graduated college at the beginning of this month. It still feels kind of surreal that I’ve spent the last two decades of my life in school! Granted, I am going to NYU for another 5-6 years for grad school, hence the academic journey is not finished yet. But for now, it’s over.
I spent the last 4 summers either doing research/ working, so I’m planning on spending this summer just relaxing....
The good news:
I made good progress on writing opcode implementations for the ARM7TDMI. Got through the ALU and some branching instructions for the THUMB set. Also realized that I don’t need to provide my own stack keeping track of the order of entry of CPU modes since the SPSR registers effectively do just that when switching (if you want to do nested interrupts of the same type, that’s on the programmer, not on me)....
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?...