The Tabby graphics tablet serial protocol

Version 1.1 - November 5, 2005

Background

The Tabby graphics tablet was produced by a British company, Micrograf International, in the early 90s. It connected to the serial port on Atari ST series computers. Versions were produced for other platforms as well. An updated version, the Tabby 2, was later produced. It used a different protocol. This page describes the protocol; click here if you're looking for the X11 driver.
Documentation for the original Tabby tablet is non-existant and the company that produced it appears to have gone out of business. The protocol was reverse-engineered and virtually all details of the protocol are presented below.

Protocol

The original Tabby runs at 9600 baud 8N1 (8 data bits, no parity bit, one stop bit), no flow control. Data is sent as a continuous stream of 3 byte packets. The high 3 bits in each byte are used as a datum ID with the low 5 bits containing data.
A stylus X or Y position is sent as an 11 bit number split over the three bytes. The X and Y positions are sent in alternate packets. The values sent do not cover the entire possible range of values. X values range from about 1230 (left) to 200 (right) while Y values range from around 1000 (top) to about 180 (bottom). On the tablet used for testing, the corners of the grooved, rectangular 'drawing area' on the tablet's surface have the following coordinates:
Corner X Y
Top left 1242 986
Top right 207 912
Bottom left 1223 213
Bottom right 267 210
The state of the stylus button is sent as a single bit in each packet. A value of 0 indicates that the stylus button is pressed, while a 1 indicates that it is released.
A 3 bit (8 level) proximity is also sent. Values for this range 0 (fully up) and 7 (fully down). In practice, values of 0 or 1 are seen when the stylus is up and values between 4 and 6 are seen when it is in contact with the tablet's surface.
It should be noted that each button and proximity values are independant from one another; values in successive X and Y packets may well differ.
The data sent is very noisy so averaging and other methods need to be applied to obtain usable data.
The format of the packet bytes are as follows:
bit:   7 6 5 4 3 2 1 0
byte 0 datum id (0 0 0) button proximity x10
byte 1 datum id (0 1 0) x9 x8 x7 x6 x5
byte 2 datum id (1 0 0) x4 x3 x2 x1 x0
byte 3 datum id (0 0 1) button proximity y10
byte 4 datum id (0 1 1) y9 y8 y7 y6 y5
byte 5 datum id (1 0 1) y4 y3 y2 y1 y0
The tablet also sends a two byte sequence when it first receives power. The meaning of these is unknown. The bytes sent are:
hex decimal binary
0x1F 31 00011111
0x3C 60 00111100
Additionally, the data of the first byte of the first packet sent is always the value 0x0f. The reason for this is unknown.
hex decimal binary
0x0F 15 00001111

Specifications (per the manual)

Physical dimensions

Active area:28mm x 96mm
Tablet dimensions:170mm x 145mm
Weight:250g
Tilt angle:5 [sic]

Functional

Resolution:2048x1536 @ 16 points per mm
Sampling:165 points per second
Transfer rate:9600 baud
Proximity:6mm
Interface:RS232C

Technology

Capacitive coupling

Electrical

Power source:Via RS232C connection to host computer
(No additional power source required)
Current drawn:4mA