← All Series
MIPS
3 parts · ~87 min total
March 17, 2026 · 33 min read
MerakiMR18MIPSAssemblyJTAGOpenWrtdeep-dive
Encoding instructions by hand like it’s 1985
Post 4 mentioned that I hand-encoded every MIPS instruction as hex constants directly in Python. Here’s what that actually looks like in practice—every trampoline, every encoding decision, and the one-bit typo that almost ruined everything.
Read more →
March 21, 2026 · 30 min read
MerakiMR18PythonJTAGOpenWrtMIPSdeep-dive
CPU-executed XOR verification
Post 10 covered phases 0 through 2—flush, load, flush again. At that point we have 6.9 MB of initramfs sitting in DRAM, and now we need to answer a simple question: is it correct? This post covers phase 3, the XOR verification pipeline, including the approach that didn’t work and the one that does.
Read more →
March 23, 2026 · 24 min read
MerakiMR18CMIPSAssemblyAR8035PHYdeep-dive
Writing a PHY driver without libc
Post 6 mentioned a standalone C program that pokes two MDIO registers to fix the AR8035 PHY’s broken RGMII RX clock delay. This deep dive rips open the actual source—ar8035_start.S, ar8035.c, and the Makefile—and walks through every layer from the assembly entry point down to the register writes that make Ethernet work. If you’ve ever wondered what bare-metal Linux userspace programming looks like on MIPS with zero library dependencies, this is it.
Read more →