[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Apple Graphics Tablet



Hello everyone:

I just managed to emulate the Apple Graphics Tablet on OpenEmulator! I am
not releasing this yet, but I thought it would be worth to open-source my
findings:

The tablet is based on the BitPad by Summagraphics Corp. It works by using
the magneto-strictive effect, of which I knew nothing a week ago :-).

In short: when you open the tablet there are two overlapping arrays of
wires, one arranged in the horizontal sense and the other in the vertical.
It looks like this (for the X and Y axis, respectively):

(X)
|---------------
|---------------
|---------------
|---------------
|---------------
|---------------
|---------------

(Y)
----------------
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |

So in order to measure the X-position of the pen, a copper wire
perpendicular to the X axis is energized, and a short electromagnetic pulse
is produced that induces a mechanical wave in the X-axis wire array. The
mechanical wave propagates at the speed of sound in this array, which is
then converted back to electromagnetic energy and detected with a coil in
the pen.

In short, you generate a pulse in the X-axis, and measure the time it takes
to be received at the pen.

The same is done for Y-axis.

The pen also can be pressed, and this is sensed with a simple switch.

Now comes the interesting part... how does the AppleGraphics Tablet
Interface work? Schematics are available on the Apple II Documentation
Project, but it is not very obvious:

First, there are three 4-bit counters that are in a cascade. As expected,
they are of two different types (here starts my irony). The first counter is
fed with a clock signal that is derived from the 7MHz Apple II slot signal.
Here comes a really crazy part. They implemented a digital frequency
multiplier using an LC circuit. With my present knowledge of electronics
this seems archaic, but I was surprised to notice it works by implementing
an LC-tuned amplifier that seems to be tuned to the 7th harmonic of the 7
MHz square wave. Out comes a sinusoidal wave, that is then rectified. I
found this very creative!

Next, how are the counters reset? IMHO: this is absolutely awful. Reset is
wired to the flip flop that enables the $C800 memory range, so you have to
disable that range to reset the counters. And only the first and second
counter is reset, not the third.

Also, the counters only work while $C800 memory is enabled.

The Apple Graphics Tablet I/O uses the following I/O addresses:

(X is the slot plus 8)
$C0X0: for sending a short pulse to the X-axis
$C0X1: for sending a short pulse to the Y-axis
$C0X2: writes on the data bus lines D0 to D3 the least significant 4 bits of
the count.
$C0X3: writes on the data bus lines D0 to D7 the most significant 8 bits of
the count.

Both $C0X0 and $C0X1 also set the third 4-bit counter to state 1111. The
access to $C0X3 also presets the first counter, and set the state of the pen
on the least significant bit.

So, how does everything come together?

* To reset the counters $C800 access must be disabled and enabled again. The
code that does this in the ROM is quite awful.
* To read the X-axis, $C0X0 must be accessed. Likewise $C0X1 for the Y-axis.
* A delay is necessary so that the pulse arrives at the pen.
* $C0X2 is accessed, to determine the lower 4-bits of the count.
* $C0X3 is accessed, to determine the higher 8-bits of the count. This also
puts the state of the pen switch on the least significant bit of the count.
* $C0X2 is accessed, to determine the state of the pen in the least
significant bit.

Voila. I'm tired now. And I am also sure this causes a lot of
electromagnetic interference :-).

With the best wishes!

Marc.-