(back to project list)

Disassembly of Micro-Painter for the Apple II

In 1980, Bob Bishop released Micro-Painter for the Apple II. This was a fairly rudimentary drawing program with some remarkable features.


One feature of note was a dithered flood fill that would expand outward, pouring around corners. Drawing programs of that era tended to use a faster but less thorough approach, requiring greater effort from the user.

flood1 flood2 flood3 flood4 flood5 flood6

Another noteworthy feature was a zoomed-in editing mode. The hi-res screen was treated as a 140x192 6-color frame buffer. An area roughly 20x20 was displayed on the lo-res screen, allowing detailed pixel editing even when the display was a cheap color television connected through an RF modulator.


I created a video with AppleWin to show these features in action.

The program has three parts:

  1. MICRO-PAINTER, a small BASIC program that provides most of the features. This was provided in both Applesoft and Integer BASIC.
  2. PAINT, a collection of machine-language subroutines.
  3. CURSOR, a machine-language subroutine for drawing crosshairs on the hi-res screen.

The machine-language components look like they might have been stand-alone routines that were pulled together. Some functions receive the X,Y coordinate through addresses 0 and 1, others use addresses 1 and 2. The zoom mode is done in two distinct passes, one to pull colors from the hi-res screen, another to render them in lo-res. Some functions take the hi-res page as an argument, even though the paint program only uses page 1.

Micro-Painter is copyright 1980 by Datasoft.

Program Usage Summary

(I can't find a scan of the manual. Here's what I know.)

The screen is regarded as 140x192 with six colors. There are two "active" colors at any time, labeled "odd" and "even". Dithering is done by alternating rows, unless one of the colors is black or white, in which case dithering is done in a checkerboard pattern.

The program is controlled with the game paddles and the keyboard. Using a joystick is a little touchy because it uses absolute position, and only part of the controller's range. When in full-screen mode, the paddle button attempts to initiate a flood-fill. When in zoomed-in mode, the buttons plot individual pixels.

The flood fill only overwrites white pixels. You can fill black regions by reversing the screen with the NEG command, but there's no way to overwrite other colors. There's an option to allow filling areas with black pixels directly, but that's unsafe: if you set the color to black/black and fill a black region, the program will hang. (Fortunately, Micro-Painter doesn't wipe the screen when it starts, so you can always pick up where you left off even if you have to hit reset.)

Keyboard commands:

Setting a color sets the odd color to the new value, and the even color to the previous odd color. So "D G" gets you black + green (dark green), and subsequently hitting "P" would get you purple + green.

The MICRO mode uses a 2x2 block of lo-res pixels for each hi-res color value.

Copyright 2019 by Andy McFadden