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

Re: Apple Graphics Tablet



tom charlesworth <tomch@macgui.com> wrote:
> Michael J. Mahon wrote:
>> Marc S Ressl <mressl@macgui.com> wrote:
>>> 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.-
>> 
>> Nice job, Marc!  I'd always wondered about that tuned circuit. ;-)
>> 
>> -michael - NadaNet 3.1 and AppleCrate II: http://home.comcast.net/~mjmahon
>> 
> 
> Hi Michael,
> 
> I thought this sort of LC circuit was reasonably common back in the 80s?
> EG. The Phasor card uses it to generate a 2MHz clock.
> 
> Tom

Isn't a 2MHz clock available?  The Disk ][ Controller uses it to clock the
state machine. 

Also a 3.5MHz and a 7MHz clock...

-michael - NadaNet 3.1 and AppleCrate II: http://home.comcast.net/~mjmahon