
49-way Hardware
There are two versions of the 49-way joystick. The first was for a few Williams games such as Sinistar or Arch Rivals. It is also often called the Sinistar 49-way stick, I'll call it the "williams49" in this page. The second was by Atari/Midway, but now is being sold under the Happ Controls brand. I'll call this the "happs49". They are very similar with only two major differences. The first is how they center. The williams49 centers with a rubber "spider"; it makes the stick act like it is centered with four strong rubber bands, one in each cardinal direction, and gives it a distinct feel. The happs49 centers with a rubber grommet around the joystick shaft and feels much like the perfect 360.
The second difference is the output; they output exact complements of each other. A centered williams outputs no current, current, current, current, no current, current, current, current (or NC C C C NC C C C; or 01110111), while a centered happs49 outputs C NC NC NC C NC NC NC (or 10001000). Where the williams49 has current the happs49 does not, and visa versa. Otherwise, the two 49-way sticks work much the the same way. Each axis has 3 optical sensors, each with it's own pin for the joystick output. Each axis' circuit tracks which side of center the stick is located, giving a fourth output pin per axis; the total is like 8 switches per joystick. The shaft moves two plates, one for each axis. Each plate has three "teeth" sticking out, one sensor watches it's own tooth. Centered, all teeth block are blocking all sensors. As the stick is moved, the sensors are unblocked in sequence the farther from center the stick is moved. The circuit tracks which side the stick is on, making it possible for all sensors to be uncovered on each side. So each side of each axis can have one, two or all three sensors open. For positions, that gives: 3 (one side) + 1 (center) + 3 (other side), or a total of 7 per axis. The following table shows how one axis' sensors are blocked/unblocked as the stick is moved. "B" is a blocked sensor, "O" is an open (unblocked) one.
Notice the ends: both ends are the same: all sensors unblocked. How does the game know which side it's on? The "side" pin mentioned earlier tracks this on the joystick. The the side pin is added to the one axis table:
Happs49 outputs an "O" as current flowing, and a "B" as an open circuit. Williams49 output the opposite: an "O" as an open circuit and a "B" with current flowing. Since one axis takes four pins, the two axes joystick would take eight pins. Connecting a 49-way Direct InputSince each pin either has a current or doesn't, they can be treated like buttons. In fact, you can think the williams49 as 6 NC (normally closed) and 2 NO (Normally Open) buttons, and the happs49 as 6 NO and 2 NC buttons. (However, all keyboard encoders and most PC joysticks (to hack) consider a current (closed) as "pressed" and an open circuit as "not pressed"; see next section..) Thus you can connect a 49-way stick as 8 unused keys or buttons, sending the joystick's output raw to the computer. Official Mame, however, isn't set up to send raw 49-way input directly to a 49-way game. MameAnalog+ adds this feature to the Williams' 49-way games Sinistar, Blaster, Arch Rivals, and Pigskin 621AD (the Atari/Midway 49-way games don't emulate 49-way joystick yet). Using a Raw Happs49 stick as an 8wayI made a bunch of ctrlr ini files that make happs 49-way joystick outputs work like 8-way or 4-way joysticks. These ctrlr ini files will work in both official Mame and MameAnalog+. There are two different ctrlr ini files for 49-to-8-way, and five ctrlr ini files for 49-to-4-way. Some of the 4-way ctrlr allow one or four out of the 49 directions to be a diagonal. They just use the standard mame input sequence logic to map the 7x7 grid to 4 or 8 directions. A Mame sequence must list at least one button pressed (IOW, the sequence can't be all not pressed). One out of the seven levels in a williams49 axis is all 4 pins open, and so if connected to a keyboard encoder or joystick buttons, than one time will look like nothing is pressed, so williams49 raw output cannot be directly translated to an 8 or 4 way joystick. (WIP to add williams49 to 4/8-way support in MameAnalog+). Happs49, OTOH, can do just fine when hooked as 8 keys/buttons (aka raw). Below are 7x7 grids showing how the the different ctrlr ini files map a happs49 to 4 or 8 way joysticks:
49-way sticks connected as Analog JoysticksRather than attaching a 49-way stick directly, it can also be connected to the computer as an analog joystick. You can build your own circuit, or buy one from Dave Electronics. If you connect it like this, official Mame can convert the analog input for Sinistar and Blaster. MameAnalog+ adds analog joystick support to Arch Rivals and Pigskin. Note: when you do this for 49-way games, you are translating the 49-way's 7x7 grid into an analog joystick's (usually) 256x256 grid, which is stored internally in Mame/MameAnalog+ in a 257x257 (yes, that's a seven) grid, which is translated into a 111x111 game driver specific grid, which is translated back into a 7x7 grid by mame's game driver. It is possible that after the four translations the game might not be able to get one or more of the 7 levels, reducing the joystick to less than a 49-way joystick in the 49-way games. If the 49-to-analog circuit's analog output spacing is setup correctly, you don't need to worry about this, though. (See How..., below) The nicest thing about being hooked up as an analog joystick, a 49-way can be used for most 8-way and many analog joystick games in official Mame and PC games. How well depends on the game. If hooked up this way, the 49-way joystick will be seen as a normal analog joystick, and used as such. How an analog joystick or analoged 49-way joystick is translated in Mame(Or, way does Sinistar need Dave's SJC to be set to exponential scaling?) linear: SJC outputs Mame's internal Mame's sinistar driver interal Sinistar sees exponential: SJC outputs Mame's internal Mame's sinistar driver internal Sinistar sees MameAnalog+ 49-way FeaturesMameAnalog+ adds a couple features to official mame to 49-way games, and in using 49-way joysticks. The first is adding support for analog joysticks to Arch Rivals and Pigskin 621AD. This is for using any analog joystick, including a 49-to-analog stick, in these games. To use this, make sure the palyer 1 & 2 AD_STICK X & Y are mapped to the analog stick(s) you want to use. It is also a good idea to unmap the player's up down left right inputs, since the AD_STICK will be used instead. At bottom of this page are ctrlr ini file that are set up to do this; they probably need to be edited. The second is support for raw 49-way inputs straight from the joystick for Sinistar, Blaster, Arch Rivals and Pigskin 621AD. To use this, attach the joystick's 8 data pins to any unused button or key, the GND pin to ground, and the power pin to a 5v+ power source. You then need to map these inputs to player 5 buttons 1-8 (for the first player, p6b1-8 for the second player). At bottom of this page are ctrlr ini that are set up to do this; they need to be edited because I have no idea what you are going to hook the 8 pins to. 49-way ctrlr ini Downloads
49-way Arcade Games NotesA few notes on what I know about the few games that used 49-way joysticks. If I'm missing any let me know
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Main Site: Mirrors: |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
WIP