jkua / wheelwriter-interface

Low-level IBM Wheelwriter interface
BSD 3-Clause "New" or "Revised" License
7 stars 0 forks source link
arduino typewriter wheelwriter

Low-level IBM Wheelwriter interface

This project is to build a low-level interface for an IBM Wheelwriter typewriter. This builds on work by tofergregg, RussellSenior, and jim11662418 who figured out the internal serial communication bus and the protocol it uses.

This project was built and tested on an IBM Wheelwriter 3. Likely this will work on at least Series I Wheelwriters (3/5/6), and possibly later models as well.

Architecture

This project consists of:

  1. Hardware interface module - this attaches to the back of the Wheelwriter as the OEM printer option did, and connect to the 10-pin option connector located behind the 70 mm-wide hinged panel on the top rear of the typewriter. The core electronics are an Arduino Nano RP2040 Connect mounted on a custom PCB to interface with the Wheelwriter's option connector.

  2. Arduino Wheelwriter driver - this communicates with the Wheelwriter over the serial bus and provide low-level control of the typewriter, including platen and carriage positioning and typehead imprinting.

  3. REST API service - the built-in WiFi connectivity on the Nano supports a web server which allows a modern computer, smartphone, or tablet to control the typewriter via the interface module.

  4. Python serial client - PC client to talk to the Arduino and allow it to send text to print as well as relay raw Wheelwriter commands.

  5. REST Client software - this software will demonstrate the use of the REST API

Related work

IBM-Wheelwriter-Hack by Chris Gregg/tofergregg is what initially inspired me to look into Wheelwriters. His videos on YouTube showed his work on reverse engineering the Wheelwriter's bus with a logic analyzer in about 2017. His implementation bit-bangs a TX line to drive a N-channel MOSFET.

Be sure to check out his Smith Corona typewriter to printer conversion!

Ryan Jarvis/Cabalist provided a complete printwheel mapping for US language printwheels.

Russell Senior made the connection that this is an Intel 8051 9-bit serial bus in mode 2 and provided a great wiki page describing a great deal of the command set.

jim11662418 created implementations for the 8051 compatible Dallas Semi DS89C440 and STC Micro STC15W4K32S4 that are very nice.

MicroCoreLabs created an Lattice FPGA implementation and an Arduino Leonardo implementation. Both implement a serial port that translates an ASCII character stream to motor controller commands. The Arduino implementation directly uses the ATmega32u4's UART an interestingly toggles the transmitter off when not sending. Here's a YouTube video of the FPGA version running.

CadetWriter is an effort by Dave Babcock and Stephen Casner to interface to a Wheelwriter 1000 by instead sitting between the keyboard and the logic controller. This work was developed to build a general-purpose ASCII terminal.

Generative Daily Planner (Github) by Josh Sucher, is a "GPT-4-powered bot that ingests email, calendar and contacts from a range of sources (mainly Gmail, Gcal and iCloud) and outputs a daily agenda" and utilizes code from this repo.