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