Skip to content
Print a picture from a modern PC with an old-fashioned Commodore MPS 803 compatible printer
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
binaries Binary for win32 Jun 4, 2018

cbmage 0.2

Print a picture from a modern PC with an old-fashioned Commodore MPS 803 compatible printer


This utility outputs raw bytes for printing on a Commodore MPS 803 compatible printer. It should be used with opencbm package by Spiro Trikaliotis to redirect the output to the printer, connected through a XUM1541 cable, such as ZoomFloppy.

Contents of package


  • macOS or Windows (32/64 bit) or Linux
  • an MPS 803 printer or a compatible one
  • XUM1541 / ZoomFloppy
  • opencbm package installed (a.k.a. cbm4win)
  • gcc if you want to compile from sources

Install opencbm

To install opencbm you can use the installer from its website, or if you use a debian-based version of Linux, follow these instructions:

On macOS you can use this command (with the help of Homebrew Package Manager):

brew install opencbm

Compiling cbmage

Once you have gcc installed, enter the "source" directory and launch:


An executable file named "cbmage" will be generated: it's ready to use.

Using cbmage


cbmage <image file name>

This is the basic syntax: it will write on stdout (i.e. the terminal window) the raw bytes that will be interpreted by the MPS 803 printer. Quite useless if not redirected to a real printer.

Let's use it with opencbm

The typical sequence of commands you should use to do the task is the following:

cbmctrl reset
cbmctrl lock
cbmctrl listen 4 0
./cbmage picture.png | cbmctrl write
cbmctrl unlisten
cbmctrl unlock

In particular, the 4th line (./cbmage picture.png | cbmctrl write) produces the raw bytes (launch it without "./" if you run it on Windows), which are redirected to the printer through the piped cbmctrl write command.


  • Maximum width on a Commodore MPS 803 is 480 dots per row. Therefore the image will be automatically resized to that width if it exceeds that size.
  • The printer is a black and white one. The recommended format is PNG: every single dot which is white (total white: #ffffff in hex) will be left blank, while any other pixel color will result in a black dot on the printer.


Thanks to Spiro Trikaliotis for the opencbm package, to Till Harbaum for the initial case study of the XU1541 (and also for the fantastic MIST) and to Sean Barrett for his powerful and effective STB Image Library.

Sample printed PNG files

MPS 803 - 1 MPS 803 - 2 MPS 803 - 3 MPS 803 - 4 MPS 803 - 5 MPS 803 - 6

You can’t perform that action at this time.