Back in 2020, I started taking a look at DirectX 9. That was interesting to me because it was the final form of the old “fixed function” graphics pipeline—DX10 was a major rupture in the API, making GPU shaders the fundamental unit of graphics work and discarding much of the older workflows. This turned into […]| Bumbershoot Software
My recent projects have obliged me to create and edit various kinds of image data. My VDP programming guide used some graphics I first created in a paint program, and which I then converted into th…| Bumbershoot Software
2 posts published by Michael Martin during September 2025| Bumbershoot Software
Most of my articles this year have revolved around the TMS9918A Video Display Processor and the systems that used it or its descendants. As of last week, we’ve now covered every feature the chip offers—four graphics modes, and a sprite system that can work in three of them. We have, however, only actually looked at […]| Bumbershoot Software
Now that I’ve gotten a handle on the ColecoVision, the SG-1000, and the MSX1, I’m in a better position to actually dig more deeply into the what the TMS9918 VDP chip they all share can …| Bumbershoot Software
An Umbrella Site for Michael Martin's software experiments| Bumbershoot Software
Over the course of the last two projects, I’ve been handling the part of the program where we take full control over the system and the part where we hand it back again afterwards by simply h…| Bumbershoot Software
It’s time to look more seriously at early Amiga GUI programming. This will end up taking a slightly different tack from our projects for more modern or ancient systems, where we first began b…| Bumbershoot Software
Visit wp.com/app, or scan the code with your mobile device| bumbershootsoft.wordpress.com
Visit wp.com/app, or scan the code with your mobile device| bumbershootsoft.wordpress.com
4 posts published by Michael Martin during December 2024| Bumbershoot Software
Visit wp.com/app, or scan the code with your mobile device| bumbershootsoft.wordpress.com
Visit wp.com/app, or scan the code with your mobile device| bumbershootsoft.wordpress.com
Visit wp.com/app, or scan the code with your mobile device| bumbershootsoft.wordpress.com
The Atari 2600 part of this took far longer than I intended it to, and looking back over the last couple of months it’s easy to lose sight of what our initial goal was: to draw a line between…| Bumbershoot Software
There’s one last thing I want to do with this “EGA palette on the Amiga” program before I call it done: I want to add keyboard handling so that we can quit with a keypress instead…| Bumbershoot Software
My first bare-metal Amiga project was pretty bare-bones: We configured a bitmap and had the system display it. For my second project, I’ll mostly recreate the display from my experiments from…| Bumbershoot Software
This week, I’ll start my journey into programming the Amiga 500 directly at the hardware level. Everyone’s got to start somewhere, so for this, I’ll start by displaying a logo ima…| Bumbershoot Software
With the basics of graphical display now under our belt, we can start implementing the functionality we’ll need for the CCA project. We’ve already done this before, on another system, s…| Bumbershoot Software
Last time we got a console program integrating well into the Workbench environment, but we had sort of glossed over getting a clickable icon on the workbench. I’ve just been copying the relev…| Bumbershoot Software
Our toolchain works. We can build and run NES programs, and we can get graphics to appear where we want them. Let’s actually start the Lights-Out project. The first goal will be to actually d…| Bumbershoot Software
I’ve decided what I want my “full” Genesis project to be: an implementation of the Cyclic Cellular Automaton. We start with a grid full of cells in random states, from 1 to N. Eac…| Bumbershoot Software
5 posts published by Michael Martin during November 2024| Bumbershoot Software
2 posts published by Michael Martin during December 2022| Bumbershoot Software
Last time we got some sound out of the Adlib part of the Adlib/Soundblaster pair. Now we finish the job. I’m not going to lie; a lot of this is very tedious. With the release of the Sound Bla…| Bumbershoot Software
8 posts published by Michael Martin during April 2018| Bumbershoot Software
The Amiga port for Simulated Evolution is making good progress, but it’s not quite in a releaseable state yet. There also, so far, isn’t much we haven’t already seen; maybe a few …| Bumbershoot Software
Last time, we talked about writing memory directly and invoking interrupts. This time, we’ll cover writing I/O ports directly and writing our own interrupts. The Project Our first draft of th…| Bumbershoot Software
4 posts published by Michael Martin during May 2025| Bumbershoot Software
We’ll wrap up our tour by looking more closely at the MSX1 system. The general structure here will be the same as the SG-1000 and the ColecoVision: we’ll look at all the parts of the system that we need to interface with in order to create the platform layer for our little shooting gallery program, […]| Bumbershoot Software
Last week’s article wrote a port of my little shooting gallery Rosetta Stone program to the SG-1000, then abstracted a more portable core that could power versions on the ColecoVision and the MSX. I glossed over the details of the actual ports, though, and the SG-1000-specific parts were largely covered in a previous post. This […]| Bumbershoot Software
Now that I’ve created a support structure for the SG-1000 with rough parity to the basics of the ColecoVision and MSX BIOS ROMs, I’m in a position to take on the first of the projects t…| Bumbershoot Software
2 posts published by Michael Martin during August 2025| Bumbershoot Software
It’s a busy month around here; we’ve had CAX a few weeks ago, Vintage Computer Fair West last week, and as this post goes live, MagWest is in progress. Of those, VCF West is the most relevant to what I do on the blog, and I did manage to attend this year. There was a […]| Bumbershoot Software
Last week I introduced three systems whose hardware was very similar to one another and also relied on chips first introduced to the market by the more ill-fated TI-99/4A. In order to get a better …| Bumbershoot Software
Before moving on to tackle the implementation of the next part of Mandala Checkers, I did a quick review of my initialization and display code to comment it more thoroughly and to see where I could…| Bumbershoot Software
I’d mentioned in the previous post that I’d now written “a program” for each of the machines I’d grown up with. This is an interesting proposition because the notion o…| Bumbershoot Software
The wallpaper program last time was just a warm-up. In this post I’ll kick off my intended rescue project. This program was published in 51 Game Programs for the Timex 1000 and 1500 as two ve…| Bumbershoot Software
Last time, we had managed to create a cartridge that ran the startup and initialization code, but did nothing else. Let’s get a real message up: If that font looks familiar, it’s becaus…| Bumbershoot Software
The Spectrum is a new platform for me, and that means that as is traditional, I’ve ported Lights-Out to it. The final tape file weighs in at 1,050 bytes, which is the largest 8-bit implementa…| Bumbershoot Software
2 posts published by Michael Martin during November 2020| Bumbershoot Software
Last year I outlined the math required to provide a consistent aspect-corrected image using OpenGL and Cairo under GTK3. I’ve been working on mastering the SDL 2 library lately—I’…| Bumbershoot Software
1 post published by Michael Martin during April 2020| Bumbershoot Software
Once I moved beyond the 6502, I ended up porting a 16-bit PRNG from 16-bit x86 to provide me with a decent source of randomness for my projects. After that, in one of my nonretrocoding endeavours, …| Bumbershoot Software
1 post published by Michael Martin during March 2020| Bumbershoot Software
This blog is mostly about my interest in how older machines were programmed, the quirks of those machines, and how those quirks were worked around or exploited. A secondary interest, however, is in…| Bumbershoot Software
Most of the writing on this blog is code walkthroughs of small programs. Some of them are extremely basic proof-of-concept programs that don’t do anything other than demonstrate some techniqu…| Bumbershoot Software
Most of what I do at Bumbershoot Software involves writing software in unusual ways, or for very old machines. In most cases, if I’m targeting a retro platform, the programs that I end up wri…| Bumbershoot Software
Last time, we dug into the binaries of a classic mac C program to determine what was imposing an OS requirement of System 4. This time, we’ll build upon that to work out what is imposing a ha…| Bumbershoot Software
Last time we got a C toolchain working on RISC OS on a Raspberry Pi 3. That worked, but it also produced a Hello World that was 3 whole kilobytes. That’s awfully excessive for the kinds of pr…| Bumbershoot Software
When last we looked at the Atari ST, we had drawn an outline of the image from Portrait of Liberty. Today we’ll be trying to fill in the shapes as quickly as possible: We’ll start with …| Bumbershoot Software
Wikipedia articles: CoCo, Dragon 32 and 64 Last Updated: 9 Mar 2024 Online Resources TRS-80 Color Computer Archive The Dragon Archive (World of Dragon) 6809.org.uk’s Dragon Computers Page, wh…| Bumbershoot Software
Last time, I put together a couple of programs that would draw Mandelbrot set images, and then put together some parameters for them that got some zoomed images I really liked. I created the images…| Bumbershoot Software
My series of TI-99/4A posts earlier this year turned out to be surprisingly popular, but I had really originally intended it as a stepping stone: its graphics and sound chips were extremely influential and either were directly included in many later systems or significantly inspired their designs. That influence runs very late: despite being introduced […]| Bumbershoot Software
This week I’m wrapping up my revisit of my Sega Genesis port of the Cyclic Cellular Automaton. There’s a fairly large grab bag of remaining tasks: The logo screen should fade out gradua…| Bumbershoot Software
Wikipedia Article: TI-99/4A Last updated: 8 Mar 2025 Texas Instruments entered the home computer market in 1979, the same year Atari did. A series of unwise-at-the-time business decisions, however,…| Bumbershoot Software
A while back I encountered LackAttack’s attempts to speedrun Jaleco’s 1985 game City Connection. Two things immediately jumped out at me: first, that City Connection was a pretty terrib…| Bumbershoot Software
Continuing on from last week’s post, this time we will be actually creating a full implementation of the Cyclic Cellular Automaton on the SNES. We will rely very heavily on our check_cell mac…| Bumbershoot Software
When I poked at developing for the SNES a year and a half ago, the capstone project was the same as it was for my much earlier Sega Genesis project: an implementation of the Cyclic Cellular Automat…| Bumbershoot Software
Wikipedia article: Amiga Last updated: 28 Dec 2024 Online Resources Amiga Forever. Cloanto’s site for emulation products. Hyperion Entertainment. Develops, maintains, and distributes the Amig…| Bumbershoot Software
Last week we set up a rendering and game-state system that should see us through even to the more sophisticated versions of the shooting gallery game we’re writing. For now, though, it’…| Bumbershoot Software
Now that we’ve gotten the Amiga 500’s sprite system to display anything at all, the next step is to use these capabilities alongside the ones we’ve already mastered to actually do…| Bumbershoot Software
Having finished with the Atari phases of the project, it’s time to return to the Amiga 500. These three systems are all very closely connected; a man named Jay Miner led the design of the gra…| Bumbershoot Software
When we added sound effects to Lights-Out, I described the NES sound system like this: This sound chip is an interesting beast: it’s got a simple synthesizer that’s comparable to the AY-3-8910, wit…| Bumbershoot Software
Let’s actually use the Genesis sound chip as intended, shall we? Let’s take a look at the Yamaha 2612. As a chip, the closest point of comparison we have is to the Creative Labs Sound B…| Bumbershoot Software
The last time I tried my hand at Sega Genesis development, I first looked at the extremely full-featured SGDK and then decided that I preferred a system where I had more explicit control over every…| Bumbershoot Software
Last time, I took a bunch of my old DOS C projects and put them through the modern Watcom cross-compiler instead of through the version of Borland Turbo C I’d originally intended them for. Th…| Bumbershoot Software
Most of the projects I’ve done on this blog are written in assembly language, and for DOS, that meant NASM. However, I learned C and Pascal on DOS, relying mostly on Borland’s compilers…| Bumbershoot Software
In theory, retro assembly language programming is pretty simple. There’s only a small number of things that an 8-bit chip can do, and each of those things is one instruction. The challenge is…| Bumbershoot Software
One of the big advantages of home computers in the early 1980s over their console counterparts was that they usually had some form of bitmap mode—a graphics mode that grants control over each pixel…| Bumbershoot Software
At the height of self-isolation during the COVID-19 pandemic, one might hope that this would give me more time to focus on my hobby projects, to keep myself sane if nothing else. No such luck. The …| Bumbershoot Software
My latest retro project, such as it is, is the resurrection of an old scientific simulation program in a way that should let it run properly on the 8-bit home computers that are my usual focus here…| Bumbershoot Software
Well, here we are. Six weeks after announcing my hiatus, and two months or so after actually writing and scheduling the announcement, and the Platform Guides page is fully updated. I’ve given…| Bumbershoot Software
Last week, I poked around in the C language at both the implementation of a simple linked-list structure and a method for allocating memory for that list without any special language or OS support.…| Bumbershoot Software
With graphics, I/O, and memory control covered, it’s time to move on to sound. The Genesis has two sound chips as part of its architecture—a Yamaha YM2612 OPN2 and a Texas Instruments SN76489…| Bumbershoot Software
Man. It has been, like, six months since we’ve made an 8-bit machine do something not in its spec sheets. So, let’s have a look at the Commodore 64’s bitmap mode. The way this wor…| Bumbershoot Software
Last week’s adventures revolved around TI BASIC and its extensions. Those extensions were shipped as cartridges, or, in TI parlance, “command modules.” This week we’ll trans…| Bumbershoot Software
It’s been awhile since I’ve looked at an architecture that’s completely new to me, and I haven’t done any since creating my new scheme for dedicated platform guides. I’…| Bumbershoot Software
I’ve now got acceptable ports of Simulated Evolution to two 8-bit platforms. I have it working on the Atari 800: Simulated Evolution on the Atari 800 And on the Commodore 64: Simulated Evolut…| Bumbershoot Software
Last week I implemented a few routines that would operate on a singly-linked list data structure on the Motorola 68000 CPU. Despite dating from 1979, the 68000 instruction set sits well enough with…| Bumbershoot Software
This week we’ll finish the little Amiga 500 shooting gallery game we’ve been writing. The last step, as it was in its Atari parallels, is to expand the animation and simulation systems …| Bumbershoot Software
Working on this Z80 project has been burning my brain a bit. I’m going to step back a bit and play around specifically with one part of it: the pseudo-random number generator. Reader alert: T…| Bumbershoot Software
Last time we worked through how to place sprites when we only cared about placing them at one specific spot on the screen. That’s not completely useless—if that sprite only ever changes…| Bumbershoot Software
I implemented my first version of the Lights-Out puzzle for the C64 in 2015. I was mostly aiming to make it be small and to be as straightforward as it could possibly be. This worked, but as it has…| Bumbershoot Software
The vast bulk of my retrocoding articles on this blog have been based on the Commodore 64—a system from 1982. Let’s step back a year to 1981, and a very different, yet also more familia…| Bumbershoot Software
Last time we laid out the playfield—static aspects of the display that aren’t really expected to change. This time we will lay out the sprites we ultimately plan to use to display the s…| Bumbershoot Software
For the next few weeks, we’ll be leaving the specifics of the SNES hardware behind and buckle down into actually implementing our project. This will split up neatly into three parts: one for …| Bumbershoot Software
Last time, we put together a smallish NES program, and I called out some of the logic as being a little hairy. Despite that, the actual complexity of the final code wasn’t all that bad at all…| Bumbershoot Software
Last time I got a C and assembly-language toolchain working for development on the Atari ST. It’s time to actually make use of them. We also got some programs running, but those don’t c…| Bumbershoot Software
There’s a bunch of heuristics and rules for getting BASIC code to run slightly faster. Some of them even actually help. The core principles, though, are that command interpretation is work an…| Bumbershoot Software
Last time, we wrote a program that boasted it was displaying 64 colors at once, but which actually was only displaying four—two, if we don’t count backgrounds. Today we’ll boost that co…| Bumbershoot Software
So far we’ve focused exclusively on the graphical capabilities of the IIgs. Before we move on, we should take a look at the sound capabilities, too. They are also quite nice. We’ll set …| Bumbershoot Software
One of the other things I’ve been doing lately is fiddling around a bit with old type-in programs. This has been amusing mostly because it’s a major part of how I learned to program in …| Bumbershoot Software
Hey everyone. It’s been quite a while since I’ve managed to actually write anything up for this blog. Sorry about that. Let’s dive into a new system and a new technology: graphics…| Bumbershoot Software
Before kicking off my second Amiga 500 hardware-programming project, let’s take a quick detour. While I was developing last week’s project, I needed to build some support programs to he…| Bumbershoot Software
It’s time I went back and finished my tour of the Amiga 500. In my previous adventures, I learned to operate it as an end user and to write and build software for it with a convenient cross-p…| Bumbershoot Software
Last time, we designed and implemented most of a line-drawing bitmap library. The overall goal was to match the system I’d used to port John Jainschigg’s Portrait of Liberty program int…| Bumbershoot Software
We’ve worked through the basics of changing the graphics mode and writing bitmap data, and we’ve taken a closer look at Bresenham’s Line Algorithm and simplified the implementatio…| Bumbershoot Software
Last time, we got some high-resolution graphics out of the Dragon. However, it was essentially only doing “blitting” operations—we were copying out neatly byte-aligned rectangles of dat…| Bumbershoot Software
So far I’ve been rather haphazard in exploring the Dragon and the Color Computer it’s based on—once I got a working toolchain, I started putting the CPU through its paces with a decentl…| Bumbershoot Software