Posts

Executable Emoji

Image
Warning: This page contains hundreds of emoji. If you're using a screen reader, be sure it doesn't read them all out loud. A whole bunch of emoji. What could they mean? This particular post comes out of left field a bit. I was playing around with a web application I had made - an online disassembler for the x86  - when I noticed that emoji were being encoded into the url.  I pasted a goat emoji,  🐐   and I noticed the encoding  %F0%9F%90%90 . Now, if you're familiar with x86 assembly language at all, hexadecimal 90h is probably familiar to you. It's the opcode for a null operation or NOP . I had a brief nerd chuckle over the thought that goats were the NOP s of emoji, but then I got curious. F0h on the 8088 is the LOCK prefix. This prefix is generally used to coordinate exclusive bus access with a coprocessor such as the 8087, but otherwise does nothing for most instructions on the 8088 and is ignored (this would change on later Intel CPUs). That leaves...

60fps Video on a CGA? - The GlyphBlaster

Image
GlyphBlaster The GlyphBlaster in action - is that a cat in text mode??  There's a certain genre of retro-hardware hack that everyone recognizes is technically cheating, but has a certain audaciousness to it that merits respect regardless. I hope that this one falls into that category! A few years ago, I was impressed by TheRasteri's PiPU project - basically, a Raspberry Pi-powered mapper for the NES. Of course, it can play DOOM: The Raspberry Pi Pico and its RP2040 microcontroller have reinvigorated the retro-computing hobby quite a bit, enabling such devices as the PicoGUS , PicoMEM , PicoIDE , and most recently, the OneROM .  It was the latter device that got me thinking. I recently used a OneROM to replace the font ROM on my CGA card, and subsequently I was able to replace IBM's classic 8x8 font with a custom one. Here's Frogblock by Polyducks: The "Frogblock" font loaded onto a OneROM replacing the CGA's font ROM The programmability of the OneROM intr...

Exploring 16-bit Bus Access on the PC/AT

Image
Entering the 16-bit Era I've been adding support for the 8086 CPU to MartyPC, and looking ahead to eventual support for the 286 .  The biggest fundamental change coming from the 8088 is that the data bus width on these CPUs expands from 8 bits to 16. This ends up being a bit more complicated than I originally anticipated, but I've come to learn some interesting things about how Intel implemented the 16-bit data bus that explains some things that were long-standing mysteries to me, such as the reason for memory alignment penalties. In this article, we'll explore schematics for the IBM 5170, better known as the IBM AT. This model was arguably IBM’s most influential computer, as it established the eponymous AT standard that shaped the PC-compatible market - setting it on an evolutionary path that modern PCs continue to follow. Memory Alignment And You Modern Intel and AMD CPUs have minimal memory alignment requirements¹. Any remaining penalties for "unaligned" reads ...

Emulator Debugging: Area 5150's Lake Effect

Image
My last few   articles on bus sniffing the IBM 5150 have been building up to this one. We're going to leverage our bus sniffer and sniffer decoder to finally debug Area5150's "Lake" effect. "But wait -", you might be asking: "- doesn't MartyPC run Area5150 already?" Yes, it does, but I have a dirty little secret I need to confess to the world.  Despite all the accolades MartyPC has received about being super-accurate, it needed a special, Area5150 specific hack in order to run the final two cycle-counted effects, "Wibble" and "Lake."  "Wibble" is the scene with Charlie Chaplin, the green fellow and the elephant.  "Lake" is the final end credits scene with the water effect and the PCM audio player.   In other words, I cheated. It haven't actually tried that hard to keep it hidden, as you can see if you are watching the console while MartyPC runs: Okay, maybe I'm being a bit hard on myself. Title-s...