The parallel joystick interface for TheMaze
The parallel joystick interface is used to connect a digital joystick as used
with AtariST, Commodore Amiga or C64 to a standard centronics printer
interface.
NEWS: A driver for Win2000/XP
Deon van der Westhuysen has written a joystick driver named PPJoy for
Win2000/XP which, besides many others, supports the interface presented in
this pages. See his pages about
PPJoy for more details.
The interface hardware
The interface uses some of the printer output lines to generate the supply
voltage for the joystick (cf., figure 1). Be careful not to shorten these
lines, since they are not supposed to source a great current. A simple
joystick does not need the 5V, but our adaptor uses it to drive the pullups
und some joysticks are using the 5V line to do some kind of auto fire. Be
careful with auto fire joysticks, they might need a greater current than the
printer port can handle!
Figure 1: The parallel joystick interface |
printer port joystick
Pin signal pin signal
1 /STROBE 7 +5V
10 /ACKNOWLEDGE 4 right
11 BUSY 3 left
12 PAPER END 2 down
13 SELECT 1 up
14 /AUTO FEED 7 +5V
15 /ERROR 6 fire
16 /INIT 7 +5V
17 /SELECT IN 7 +5V
25 GND 8 GND
|
Additional fire buttons
You would probably like to have a second and perhaps a third
fire button. You can add two additional fire buttons to your
joystick (or rewire existing additional buttons) by connecting
one of them with two diodes to the left and right buttons
and the second one to the up and down buttons
(cf., figure 2). Pressing the
additional buttons causes the left and right (or up and down
for the second one) direction to be activated at once. This
is impossible with unmodified joysticks. The driver may catch
these events and treat them as extra buttons. This modification
doesn't affect the normal usage, except perhaps some games may
behave strange when getting left and right or up and down
signals at the same time. I've tested this with TheMaze and
Xmame and it
works very well. While the additional buttons are pressed the
according direction switches are disabled. This limitation does
not affect the gameplay very much.
Figure 2: Two additional fire buttons
You have to translate the incoming coordinates to get the
information from the additional buttons like this:
joy_up = org_joy_up AND NOT org_joy_down
joy_down = org_joy_down AND NOT org_joy_up
joy_right = org_joy_right AND NOT org_joy_left
joy_left = org_joy_left AND NOT org_joy_right
joy_fire0 = org_joy_fire
joy_fire1 = org_joy_left AND org_joy_right
joy_fire2 = org_joy_up AND org_joy_down
The software
For linux you need a device driver. You can download it here.
Accessing this device from C under MSDOS is quite simple. Just get the port
address of the printer port you use and read in the desired
values.
/* joy.c - access parallel joystick adapter in c */
#include <dos.h>
#define BIOSVAR 0x40
#define LPT1 0x08
int get_joystick(void)
{
int back=0,port;
port = inp(*((unsigned int *)((BIOSVAR * 0x10000l) + LPT1))+1);
if(!(port&0x08)) back|=JOY_FIRE;
if(!(port&0x10)) back|=JOY_UP;
if(!(port&0x20)) back|=JOY_DOWN;
if(!(port&0x40)) back|=JOY_RIGHT;
if(port&0x80) back|=JOY_LEFT;
return(back);
}
Till Harbaum
Till@Harbaum.org