My x86 emulator now runs ROGUE (1984). New blog post about what it takes to go from raw bytes to a playable DOS game: loading MZ executables, memory management, and interrupt handling. twied.github.io/2026/08/18/m... #x86 #retrocomputing #emulation #dos
Tim Wiederhake
@twiederh.bsky.social
Senior software engineer. Linux, x86, virtualization.
I wrote an x86 emulator, from scratch, no dependencies. Full write up of what I learned at twied.github.io/2026/08/11/x... : ModRM is a tax form, instruction F6h takes 1.14 bytes of arguments on average, and you can double lock your instructions. #x86 #emulator #cplusplus #x86rme
Getting intimate with x86
When you write a compiler, your work is usually done somewhere around the generation of machine-dependent assembly. But if you are like me, leaving cans of worms unopened is hard. And so I wrote an x8...
twied.github.io
Created support for custom commands in #gitk: Define a name and shell command template and it shows up in the context menu. Placeholder substitution for commit id, author, file path, blame origin etc. Pull request: github.com/git/git/pull... #git #opensource
Switched from Xfce4-Terminal to Kitty after two decades. Wrote up the config settings that make it feel more like home for fellow Xfce expats. #xfce #kitty #terminal
Make Kitty look like Xfce Terminal
I love Xfce. In fact, Xfce is the reason I am still using X11, despite being one of Wayland’s earliest contributors. But two weeks ago I made the switch from Xfce4-Terminal to Kitty. Kitty is… “opi...
twied.github.io
Update: It landed. Sometimes one patch, two lines of documentation, needs three rounds of review. It's not glamorous, but still incremental improvement. #linux #kernel #opensource
I knew that the #Linux #Kernel review process was no joke. Still underestimated it. Round three for my two-line patch to improve some documentation of the MSR driver. #OpenSource
Show of hands: who has a std::map somewhere in their code where the key is also a field inside the value? I certainly have. Turns out C++14 std::set with std::less<> enables heterogeneous lookup. No need to construct a full object. Just requires comparison operators. #cpp #cplusplus #programming
TIL about `git absorb`. It automatically sorts your fixups into the right commits on a feature branch. Effectively `git commit --fixup` + `git rebase --autosquash` without the manual "what goes where" work, I love it. Curious what else I've been missing. #git #devtools
git-absorb(1) — Arch manual pages
man.archlinux.org
I knew that the #Linux #Kernel review process was no joke. Still underestimated it. Round three for my two-line patch to improve some documentation of the MSR driver. #OpenSource
it bears saying again: a computer can never be held accountable / therefore a computer must never make a management decision.
Dipping my toes into #FPGA development and got a Sipeed Tang Primer 20k. Programming with #OpenSource tools is possible, but there are some gotchas. I have collected some more beginner-friendly examples here: github.com/twied/TangPr...
GitHub - twied/TangPrimer-20K-example: Examples for the Sipeed Tang Primer 20K FPGA using Open Source tools under Linux
Examples for the Sipeed Tang Primer 20K FPGA using Open Source tools under Linux - twied/TangPrimer-20K-example
github.com
Trying to figure out #meshtastic. Can receive just fine, but not send. Error message is "Max Retransmission Reached".
If your installation instructions are "curl | sudo bash", I will not use your software.
I hate Gimp. There, I said it. If I need to consult a tutorial to draw a circle, that's not a useful drawing program in my book.
Once upon a time I opened a ticket in the #debian bug tracker. Eleven years later, there was a response: It was tagged "moreinfo" 🙄
Note to self: When using #podman, remember to install fuse-overlayfs, `podman info --debug | grep graphDriverName` should say "overlay", not "vfs". Container startup time went from 2:10 minutes to 0.7 seconds.