Saturday, May 21, 2016

Apple II 4play Joystick Card RevB





Introduction:

The original 4play card was built around Atari joysticks. They were the only digital joysticks that I was familiar with and had access to. For a game like Kaboom! and the few games that I converted, this was more than adequate. However through discussions, two main issues were brought to my attention that I had not considered. One was with the renewable supply of cheap digital controllers and the other was the fact that playing with dual trigger joysticks was ingrained into Apple II culture. I looked into these issues and found that it would not be too difficult to modify the 4play card and address these limitations. A large supply of today's digital controllers could be used directly as well as still supporting many of the classic controllers. Also by looking more closely at the newer controllers I found that in their backward compatibility modes they support two triggers thereby being able to cater for the second issue. Since I only had a few pre-production cards they were all converted to 4play RevB.

To obtain the best possible experience from the 4play card it's important to select the right controller. I wanted to see for myself what the supply of digital controllers was like so I got hold of a few to test out. Not everything stood up to my expectations. I've learn't a lot about the different digital controller formats and I found that controller quality can make a big difference to how a game feels.


4play RevB Specification:

The card can be used in any Apple II model that supports slots.



Joysticks supported (using the normal extension cables ie for 2 button controllers):-

Atari Joystick
  Up, Down, Left, Right, Trigger 1

C64 Joystick
  Up, Down, Left, Right, Trigger 1

C64 Extended Joystick
  Up, Down, Left, Right, Trigger 1

C64 Extended Joystick plus adapter
  Up, Down, Left, Right, Trigger 1, Trigger 2

Amiga Joystick
  Up, Down, Left, Right, Trigger 1

Amiga Extended Joystick
  Up, Down, Left, Right, Trigger 1, Trigger 2

Amiga CD32 Joystick (Red = Trigger 1, Blue = Trigger2)
  Up, Down, Left, Right, Trigger 1, Trigger 2

Sega Genesis (Maga Drive) 3/6 button Gamepad (Button B = Trigger 1, Button C = Trigger 2)
  Up, Down, Left, Right, Trigger 1, Trigger 2

Sega Master System Gamepad
  Up, Down, Left, Right, Trigger 1, Trigger 2

If you want schematics and more information on how the controllers work then these are great staring points.
General 9pin digital joysticks. http://wiki.icomp.de/wiki/DB9-Joystick

Amiga CD32 schematics. http://gerdkautzmann.de/cd32gamepad/cd32gamepad.html

SEGA Genesis (Mega Drive) schematics - 3 button. http://gamesx.com/wiki/doku.php?id=controls:megadrive_genesis_controller_3

SEGA Genesis (Mega Drive) 6 button specification. https://www.cs.cmu.edu/~chuck/infopg/segasix.txt

Building a card that reads all the digital gamepad buttons is certainly possible. However the hardware, firmware and software becomes more complicated. The aim of this project was to keep it simple and allow anyone to feel confident in adding digital joystick support to their software (not just the software developers).


Software:

Card identifier bytes :- $20, $20, $20, $20
Status byte (MSB to LSB) :- Trigger1 : Trigger2 : Not Used (always high) : Trigger3 : Right : Left : Down : Up

Trigger2 will be zero unless joystick supports two trigger buttons.
Trigger3 will be zero unless joystick supports three buttons and the three button extension cable is used.

A simple pseudo code example :-

S = 4 :Set the slot number, 4 in this example
J1 = 49280 + (S*16) :PEEK(J1) to get the status of Joystick 1
J2 = J1 + 1 :PEEK(J2) to get the status of Joystick 2
J3 = J1 + 2 :PEEK(J3) to get the status of Joystick 3
J4 = J1 + 3 :PEEK(J4) to get the status of Joystick 4

You can find programming examples here (including how to use the identifier bytes to work out which slot the 4play card is plugged into):- https://docs.google.com/file/d/0B5PVarmqxaOnRVQxT0FLQnNoYWc

Other uses for the card:

For those who tinker with hardware and can do their own modifications.



As a special case a three button extension cable can be constructed however it will not work with the active controllers ie the Amiga CD32 or the Sega Genesis (Mega Drive).

Joysticks supported :-

Atari Joystick
  Up, Down, Left, Right, Trigger 1

C64 Joystick
  Up, Down, Left, Right, Trigger 1

C64 Extended Joystick
  Up, Down, Left, Right, Trigger 1

C64 Extended Joystick plus adapter
  Up, Down, Left, Right, Trigger 1, Trigger 2, Trigger 3

Amiga Joystick
  Up, Down, Left, Right, Trigger 1

Amiga Extended Joystick
  Up, Down, Left, Right, Trigger 1, Trigger 2, Trigger 3

Sega Master System Gamepad
  Up, Down, Left, Right, Trigger 1, Trigger 2

The design of the card was left so that with a bit of soldering one could convert the card into a 32bit digital input card.


Controller Investigations:

Classic

The classic controllers (Atari, C64, Amiga, SEGA Master System) are still supported. To cover for a broader range of joysticks which would allow direct connection, a sacrifice had to be made and that was with the multi trigger C64 joysticks which will now require adapters to work. A small price to pay when you consider the up side.

Traditionally these are single trigger joysticks but they will still have their place. Many Apple II games are single trigger and some don't rely on the trigger at all. Then there are those games that only use the second trigger for auxiliary functions ie starting or pausing a game.

If you intend on using the 4play to play multi trigger games then take note when obtaining classic joysticks. Just because you see a joystick with two buttons does not mean you will be able to play multi trigger games. Many of the joysticks with multiple buttons are actually wired up using the one trigger signal to the computer. Unless you want to do you own rewiring to split the signals check carefully that your joystick contains the independent triggers.


Active Controllers: SEGA Genesis (Mega Drive) and the Amiga CD32.

I call these active controllers because unlike the passive classic controllers, which are just switches, these babies contain chips that allow them to operate in multiplexed and special serial modes. The 4play takes advantage of the backward compatible mode these gamepads contain. To do that these gamepads need to be forced into this mode by supplying power to the pin that would normally be trigger 3 pin in a classic controller.



My first purchase was a good quality second hand SEGA Genesis SGProPad gamepad ($18 plus postage from the UK). It works extremely well. None of the cheaper controllers come close to matching this one.



I tested a cheap SEGA Genesis clone gamepad ($5 including postage) and it does work however I would not recommend it. It feels horrible. The plastic is cheap and nasty, the buttons wobble, it's very noisy when the buttons are pressed and the cord length is very short (It's about 70cm long which is a lot shorter than all my other joysticks cables. Their lengths range from 1.2m to 1.5m). I thought I did well by not picking the cheapest of the bunch in this category. The picture in the Ebay listing showed a mode button on the top ridge of the controller which I assumed would result in a better built controller. Well, I got shafted. Mine didn't come with the mode button and I suspect it's just the same cheap controller like all the others in the extra low price range. I guess in this case I got what I paid for. Because the cable is so short, practically, you need an extension cable to go with it so by the time you do that you may as well have spent the same amount of money on a better quality controller.

After being disappointed with my last purchase I ordered a better quality SEGA Genesis controller ($13 including postage). This controller comes in the same looking box as my previous purchase except it has a label saying "Made in Japan" as opposed to "Made in China". I've never used an original Sega gamepad so I can't compare it however what I can say it that it's not as nice as the SGProPad, but then again that is reflected in the price. Great mid range solution.

For the SEGA Genesis controllers the trigger 1 button is button B on the controller and trigger 2 is button C. You may be wondering why it's not buttons A and B. Well I was wondering the same thing. It's just how the designers of the gamepad decided to make the controller work in the backward compatibility mode.

Jesse tested an Amiga CD32 compatible controller for me and from all accounts it works great. Thanks Jesse.



After trying out several different controllers I found that I prefer the Nintendo style direction button layout more than the Sega one so I purchased some more SGProPad gamepads ($22 plus postage from the USA).


Custom

Even though the SEGA Genesis controllers are a great option I wanted to see how easy it would be to rewire a USB or a proprietary gamepad into a standard Atari joystick configuration. I wanted at least one controller with three trigger buttons in case an application for a three button controller ever arose. Note: To use three triggers a different connection cable going from the 4play card to the gamepad is required.







I picked up a USB gamepad of Ebay ($4 including postage) in the hope of easily rewiring it. I cut the end of a serial extension cable and used it to replace the USB cable from the controller. I wish I could say that it worked well but I can't. The plastic case didn't feel all that bad however the buttons didn't work well. I found that I had to press the buttons harder compared to other controllers. Pressing on the bottom half of the trigger button worked well however pressing the top half did not work at all. The wires I added were interfering with the membrane so I tried moving them from the copper side of the circuit board over to the other side but that did not help. I tried cleaning the contacts with PCB cleaner but that did not help. I tried adding an extra layer of contact paste to the membrane but that did not help. I tried moving the wires away from the contact points but that did not help. I tried replacing the membrane buttons with others that I found in my junk box but that just made things worse. It made the buttons sit at an angle. This last modification clearly showed me why it had not been working all along. The PCB board didn't line up with the controller case (the direction buttons were ok but the trigger buttons were way out). This controller is now destined for the bin but at least I'll be able to salvage the cable for when I get hold of a better quality SNES controller.



After reading several reviews I went with the iBUFFALO gamepad. It's amazing how much difference a little bit of quality can make. I can't be happier ($10 plus postage from Japan).


Arcade





I've been wanting to put together a handheld arcade controller for quite a while now. Especially one where I could set it up for 4way gameplay. I was going to use my ANKO controller and reuse it's tactile trigger buttons however I just couldn't bring myself to destroying a working joystick. I came across this brilliant build and constructed it using similar components. http://dannygalaga.com/db9.html. I've been looking at these project boxes for decades but never considered using them to house an arcade joystick. Not until I saw this write up. To be able to configure the josytick for 4way action I purchased the Sanwa JLF replica from here http://www.ozstick.com.au/product/sanwa-jlf-joystick/. The joystick is a bit larger than the one used in the example so it was a bit more difficult to get it to fit. It did fit but with no room to spare. I added a switch to the back of the joystick so that I could swap the buttons around. I'm stoked with the final outcome. The great thing is that it also doubles as my MAME controller (using a simple digital to USB converter).


Conclusion:

Thank-you to everyone who helped out.

Jesse has released Kaboom! v1.03 to support the new card revision. You can find it here:- http://www.ninjaforce.com/html/products_kaboom.html.

Now that I have that out of the way I can concentrate on getting a batch of production cards made up.

2 comments:

Danny Galaga said...


Hi,

Glad you liked my DB9 controller setup and I'm impressed you squeezed two buttons on there!

Lukazi said...

Hi Danny,

Thanks for the idea. This has become my favourite joystick. I tried to say thank-you in person at the last Brisbane C64 Night that I went to but for some reason I kept missing you.

Cheers,
Alex.