<< Previous Message Main Index Next Message >>
<< Previous Message in Thread This Month Next Message in Thread >>
Date   : Wed, 07 May 1986 16:29:32 GMT
From   : Dave Haynie <daveh%cbmvax.cbm.uucp@BRL.ARPA>
Subject: Re: Commodore 128 Mouse Interface

In article <290@encore.UUCP> corbin@encore.UUCP (Steve Corbin) writes:
>I have just purchased a Commodore 128 mouse with the hopes of connecting
>it to my Z80/CPM machine.  The only documentation supplied in the package
>is the connector pinout.  Does anyone know where I can get the full
>technical details for this device?  Items of interest would be schematics,
>electrical and timing characteristics, suggested hardware interfaces, and
>software drivers.
>
>....
>
>The little I could tell about these signals is:
>
>BUTTON #1, BUTTON #2
>
>These lines are connected to one contact of the pushbuttons with the other
>contacts to GND.  No pull-up or debounce circuitry.

On the C128, one of the buttons is sensed though a 6526 CIA, the other 
though a port on the SID chip.  Essentially what happens is that one bit
of a parallel output port is used to read in each button press.  Bouncing
has not been a problem, as the port device has a degree of internal pullup,
and scanning this at a 250KHz rate, or thereabouts, at most, we've found
no need for debouncing.  Also, the first button is completely compatible
with the C128/C64 joystick fire button; a large portion of the total
design is based on necessary compatibility with the joystick.

>UP, DOWN, LEFT, RIGHT

These pins emulate the four switches in the standard C128/C64 digital
joystick.

>Active low signals indicating direction(s) of movement.  UP/LEFT, UP/RIGHT,
>DOWN/LEFT and DOWN/RIGHT may be simultaneous and asynchronous with respect
>to each other.  Questions are:
>
>   1.  Are these lines pulsed for each 'step' of movement?

Yes, the lines are pulsed; faster movement results in greater "active" time.
There's a tiny, dedicated microprocessor in the mouse that does the "vane"
pulse to joystick pulse conversion.  These lines are attached to the same
parallel port in the C128/C64 as is the fire button.  

>   2.  What is the resolution of movement? (i.e. steps/inch)
>   3.  What is the minimum/maximum pulse width?

Not sure about these.

>   4.  What is the minimum/maximum high time between pulses?

I think you can "saturate" the pulsing, i.e., if you move it fast enough,
you can get a continuous active output.

>   5.  What is the output voltage levels?

The voltage level into the mouse should be 5v +/- 5% regulated DC, the 
output will be standard TTL levels.

>Thanks in advance,
>Steve Corbin
>
>Usenet: corbin@encore
>        {ihnp4, allegra, linus}!encore!corbin

As for programming it, there's a short machine program (6502 code of course)
in the C64 Programmer's Reference Guide, intended for joysticks, which could
be modified for optimal mouse performance.  In the example, $DC00 is the
location of the memory-mapped port.

       ;Program to read the direction change from a joystick or mouse.

       DX = $C110              ;X direction
       DY = $C111              ;Y direction

DJRR   LDA $DC00               ;Read port
DJRRB  LDY #$00                ;Decode it, buy shifting values right
       LDX #$00                ;and testing for the carry bit.
       LSR A                   ;Bits 0 and 1 modify the Y direction
       BCS DJR0
       DEY
DJR0   LSR A
       BCS DJR1
       INY
DJR1   LSR A                   ;Bits 2 and 3 modify the X direction
       BCS DJR2
       DEX
DJR2   LSR A
       BCS DJR3
       INX
DJR3   LSR A                   ;Bit 4 is the fire button.

       STX DX                  ;Exit here with X,Y directions stored, and
       STY DY                  ;the fire button status in the carry bit.
       RTS

-- 

Dave Haynie    {caip,inhp4,allegra,seismo}!cbmvax!daveh
               "There, beyond the bounds of your weak imagination
                Lie the noble towers of my city, bright and gold"
                                                               -Genesis
<< Previous Message Main Index Next Message >>
<< Previous Message in Thread This Month Next Message in Thread >>