https://github.com/gerph/riscos-joystick-parallel
A RISC OS driver for a parallel port joystick for Atari style 9-pin joysticks for the A5000
https://github.com/gerph/riscos-joystick-parallel
riscos riscos-ci
Last synced: 2 months ago
JSON representation
A RISC OS driver for a parallel port joystick for Atari style 9-pin joysticks for the A5000
- Host: GitHub
- URL: https://github.com/gerph/riscos-joystick-parallel
- Owner: gerph
- License: bsd-2-clause
- Created: 2021-12-04T15:43:45.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2026-01-11T01:13:31.000Z (2 months ago)
- Last Synced: 2026-01-11T09:18:06.945Z (2 months ago)
- Topics: riscos, riscos-ci
- Homepage:
- Size: 14.6 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Codeowners: CODEOWNERS
Awesome Lists containing this project
README
# Parallel Port Joystick
This repository provides a simple driver for a 9-pin joystick that can
be connected to a parallel port. I built this for the A5000 so that I
could play Elite with the same joystick I'd used on the BBC.
The module provides only the 8bit interface, but as a switched joystick,
this is all that is necessary.
## Building the driver
The driver builds automatically on pushes using the RISC OS Build service.
To manually build the module, push the code to the server using the `riscos-build-online` tool. For example:
```
curl -s -L -o riscos-build-online https://github.com/gerph/robuild-client/releases/download/v0.05/riscos-build-online && chmod +x riscos-build-online
zip -q9r /tmp/source-archive.zip * .robuild.yaml
./riscos-build-online -i /tmp/source-archive.zip -a off -t 60 -o archive
```
This will produce a binary called `archive,a91` which is a RISC OS zip archive containing the module.
## Constructing the "Interface"
This is not really an interface, just a one-to-one relationship for the
connectors.
You require a 9-pin joystick like this :
```
1 2 3 4 5
6 7 8 9
```
and a printer lead. The printer lead must have the printer end removed so
that all the wires are accessable.
You may need to open the computer end to note the colours of the leads so
that you can connect the correct wire to each hole.
At the computer end the first wire on my lead is brown, then red, orange,
pink. The wires are labelled (with my colours) :
| Pin | Colour | Name | Direction
| --- | --------------- | -------------- | ---------
| 1 | Brown | Strobe | I/O
| 2 | Red | D0 | I/O
| 3 | Orange | D1 | I/O
| 4 | Pink | D2 | I/O
| 5 | Yellow | D3 | I/O
| 6 | Dark Green | D4 | I/O
| 7 | Cyan | D5 | I/O
| 8 | Blue | D6 | I/O
| 9 | Blue (Stripe) | D7 | I/O
| 10 | Purple | Ack | I
| 11 | Grey | Busy | I
| 12 | White | Paper Error | I
| 13 | Black | Select | I
| 14 | Brown (Stripe) | Auto feed | O
| 15 | Red (Stripe) | Error | I
| 16 | Orange (Stripe) | Reset | O
| 17 | Green (Stripe) | Select In | O
| 18 | Black (Stripe) | Ground | N/A
Directions relative to computer.
Connect the following :
| Computer | 9-pin
| --------- | ------
| 2 | 2
| 3 | 3
| 4 | 4
| 5 | 5
| 16 | 7
| 6 | 9
So, if you have the same lead as me the lead should read (left to right) :
* Nothing, Red, Orange, Pink, Yellow
* Nothing, Orange (Stripe), Nothing, Green
And connect 12, 13, and 15 to 14 in the Computer lead. The reason for this is
to allow some simple testing of the parallel port to see if the Joystick is
connected or not. What should happen is that when the AutoFeed line is
toggled, so should the PaperError, Select, and Error return lines be toggled.
I have used bits D0-D4 to mark up, down, left, right and fire, and used Reset
to provide the power for the joystick. Therefore, reset must always be kept
high. As the parallel port retains settings and the joystick never clears set
bits after each read the joystick should be cleared. To be exact, the value
read will be that of the directions moved /since the last clear/ and it is
possible that all directions could be set. To alleviate this the read code
might be placed on an interrupt, but I'm not bothered, as most games read the
joystick regularly.