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:
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:
datum id |
(0 0 0) |
button |
proximity |
x10 |
datum id |
(0 1 0) |
x9 |
x8 |
x7 |
x6 |
x5 |
datum id |
(1 0 0) |
x4 |
x3 |
x2 |
x1 |
x0 |
datum id |
(0 0 1) |
button |
proximity |
y10 |
datum id |
(0 1 1) |
y9 |
y8 |
y7 |
y6 |
y5 |
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:
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.