Jump to content
Sign in to follow this  
brpocock

Expanded controllers for 2600

Recommended Posts

I heard a rumour this was being discussed elsewheres, but I couldn't find the forum topic ... so please excuse me if I'm repeating something here.

 

The question was, "how could one pack a modern-like game pad onto a 2600's controller port?"

 

And my suggestion:

 

This is working from the model of a Game Cube controller, with the exception of entire inability to actually use that physical device -- just one with the same controls.

 

Those controls are, basically:

 

* Basic pushbuttons: A, B, X, Y, and (on the shoulder) Z

* Analogue shoulder switches: L, R

* Analogue sticks: D-stick and C-stick

* Digital joystick cross: D +

* Rumble pack activation: pulse the rumble core "up" or "down"

 

To distinguish the analogue stick from the D+ I'll call it just "the stick."

 

Well, suppose you could gut a GCN gamepad and remove all its electronics. The current electronics are based on a smart serial design that would be a royal pain in the ass to link up to poor Stella.

 

Now, we take four joystick lines (Up/Down/Left/Right, let's call them j0,j1,j2,j3 because I don't have the pinouts handy) and wire them up so that we can read them as inputs.

 

At startup, we remain in "2600 original mode" until we see a signal on "j3." In "original mode" we take the D+ and feed it back into the j0..j3 lines, the A button goes to Fire, and the stick feeds the two paddle controls.

 

If we detect that both paddle ports are scanned at the same time as j0..j2 are low and j3 is high, we enter the "enhanced mode." From then, on, we treat j0..j2 as addressing lines whenever j3 is high.

 

The software brings up j0..j3 together, where j3 is always 1 to indicate "select." j0..j1 address keys as follows:

 

   j1 j0        j0      j1      j2      j3      fire      p0      p1
   0  0     --------------- D+ ---------------   A       D-stick H&V
   0  1           B       X      Y       Z      START     L       R
   1  0           B       X      Y       Z       A       C-stick H&V
   1  1           B       X      Y       Z       A       D-stick H&V   

 

The strange-looking arrangements with buttons repeating is meant to make it easier for software to scan more frequently-used keys together. For example, the "00" setting is good for current Atari games, but the "11" setting scans the most important keys for typical GCN games. Scanning the "START" button only on alternate frames, for example, would be valid.

 

Once j3 returns to 0, the "selected" controls should remain connected until j3 is brought back to 1 by the Atari. That's particularly important for reading the analogue controls.

 

j2 could then be used to select a second gamepad on the same controller port, making the 2600 the equal of the GCN (four gamepads), or, use j2 to select Rumble functions: e.g. while j2=1, swing the rumble device's state based on the value of j1, so, to make it shake, send a series of signals such as: [j3,j2,j1] = [1,1,1], [1,1,0], [1,1,1], [1,1,0] ... with appropriate timing intervals.

 

Unfortunately, I don't remember enough logic gate magic to think of how to construct the encoder for this type of selection logic cheaply, and I haven't actually unscrewed a GCN controller to see if its components are even remotely plausibly decoded this way (or if they're too complex or tightly integrated or whatever). However, the same general principle should work for any modern controller type, in general, i.e. remapping the controls using output address select logic.

 

Notable exception is the Xbox, since all of its buttons are analogue and would require hellish amount of circuitry to convert to digital, I imagine (or produce rather flaky button signals). But N64, or in particular Duo (PS1/2) controllers should be fairly easily mapped this way.

 

As for NES, SNES, Genesis, and the like, the wiring and logic are easier since there are no analogue circuits:

 

NES:
   A = fire

   j0      j0      j1      j2      j3
   0       ------------ D+ ----------------
   1       Start   Select  A       B

SNES:
   A = fire

   j1 j0      j0      j1      j2      j3
   0  0       ------------ D+ ----------------
   0  1       Start   Select  L       R
   1  0       X       Y       Start   B
   1  1       X       Y       A       B

Genesis:
   B = fire

   j0      j0      j1      j2      j3
   0       ------------ D+ ----------------
   1       Start   A       B       C

Saturn:
   B = fire

   j1 j0      j0      j1      j2      j3
   0  0       ------------ D+ ----------------
   0  1       Start   A       B       C
   1  0       Start   X       Y       Z

Jaguar:
   j2 j1 j0      j0      j1      j2      j3      fire
   0  0  0       ------------ D+ ---------------- A
   0  0  1       B       C       Pause   Option   A
   1  0  0       KP9     KP6     KP3     KP+      A
   1  0  1       KP8     KP5     KP2     KP.      A
   1  1  0       KP7     KP4     KP1     KP0      A

 

Duo controllers (PS/2) are similar to GCN but harder to type "triangle" so I'll leave that as an exercise to the reader.

 

Note that, in particular, the "B" button is the usual "fire" button on Sega controllers. (e.g. on the Genesis controller there's even a "tab" on it like the ones on home row -- F and J for US/Qwerty -- on your keyboard.) Since these controllers have far fewer keys, leaving the "fire" button always available just makes the decoding logic easier. Duplicating them on the digital scan inputs (e.g. compare modes "00" and "11" on the SNES) might make some programming tasks easier, though, since the digital input lines are read from a distinct location cv. the fire button signal.

 

Any rate, that's our collective 2¢ on the subject...

 

[EDIT: HERESY! I didn't include Jaguar. Of course, I've never actually seen a Jaguar in person either :-(]

Edited by brpocock

Share this post


Link to post
Share on other sites
The Sega Genesis controllers work on an Atari already, just only one of the buttons function.

1006570[/snapback]

 

True. Genesis, SMS, and 7800 controllers, in particular, could use a cheaper rewiring scheme to acheive similar results by mapping the additional buttons to the paddle lines, but this concept is regarding getting full addressibility of the digital controls.

 

To contrast:

 

Wiring up the Genesis controller with just a pair of DB-9 ports could leave D+ and B tied to the stick and FIRE digital inputs, and tie A and C to the paddle controls, ignoring START; or, use the second port to accept A, C, and START signals.

 

Upside: this is just wire and jacks. Downside: you might lose START and make reading A and C difficult, or else lose the second controller port, and with it, any AtariVox option also.

 

However... the "address decoding" scheme above would allow full, digital decoding (avoiding messing around with pot/caps) of all eight discrete signals from the Genesis controller.

 

Downside: this requires a logic chip of some kind. Upside: it could work for two controllers (or maybe four) in one port, all digital signals remain digital (and potentially, analogue signals remain analogue), and it leaves the second port open for AtariVox, memory cards, and the like.

 

Further upside: the controller logic is similar to the address banking logic used in cartridges, so I expect some folks around here know how to do it cheaply, perhaps without requiring a PIC or FPGA.

 

If it does come to using a PIC/FPGA, though, any overhead could be used to support multiple similar controller types in one device. EG: A dongle with NES, SNES, and SMS/Genesis ports available. Similar dongles to accept various game pad devices and convert them to USB are commonly available for modern PC's.

Share this post


Link to post
Share on other sites

Can the 2600 do output to the j1-j4 lines like the computers?

 

If so, a multijoy interface could be attached, but would need 2 or more plugs connected to a custom-wired gamepad.

Share this post


Link to post
Share on other sites
Can the 2600 do output to the j1-j4 lines like the computers?

1007070[/snapback]

 

The 2600 can output on the directional pins, but not the fire button. The paddles could also be used for output purposes, but all four paddles share the same output.

 

If I were going for a mega-button controller, I'd probably have the controller drive the 2600 joyport in fairly conventional fashion but via moderate-value resistors; I'd have the wires from the 2600 also operate one or more 74HC165 shifters, which would output data to a paddle port pin. So if the 2600 is running normal software, the shifter would receive meaningless clocks as the person moved the joystick, but the 2600 would ignore the meaningless pulses on the paddle input. But if the 2600 were running special software, it could output signals to the controller port to operate the shifter and then read data from the paddle input.

Share this post


Link to post
Share on other sites

Although my understanding of the usaes of the 2600 controller ports is almost 0 a couple of basic circuit queries spring to mind.

 

1)

You appear to want to use J0 and J1 as both output strobes to the controller and inputs back from the controller, unless you incorporate some controlling mechanism such as a bidirectional tristate buffer you will constantly have conflict on the lines where you try to send control signals from the 2600 to the controller while the input device in the controller is trying to send inputs to the 2600 on the same lines. At best this will cause unstable logic values that can be misinterpreted and at worst it will lead to failure of one of the devices.

 

2)

Will you be able to provide enough power for the rumble motors?

For example the smaller motors used in some controllers have a peak (start up) current of 22mA @ 5 V and a constant current of 10mA @ 5V and the larger motor have a constant current of 110mA @ 5V, I did not measure the peak current of the larger motor as the constant current already exceeed my design specifications.

Share this post


Link to post
Share on other sites

Wouldn't the simplest thing be to have an analog stick with 5 fire buttons since the controller port already supports such a beast. Just need a game to utilize it. How much more complexity would a VCS game need anyway?

Share this post


Link to post
Share on other sites
1)

You appear to want to use J0 and J1 as both output strobes to the controller and inputs back from the controller, unless you incorporate some controlling mechanism such as a bidirectional tristate buffer

 

Yes, that's more or less what I was pitching. I'm no electronics guru, but it's how the IEC port ("serial port" for discs and printers) works on CBM machines.

 

2)

Will you be able to provide enough power for the rumble motors?

1007106[/snapback]

 

Not without external power, I'd imagine.

Share this post


Link to post
Share on other sites
Wouldn't the simplest thing be to have an analog stick with 5 fire buttons since the controller port already supports such a beast.  Just need a game to utilize it.  How much more complexity would a VCS game need anyway?

1007113[/snapback]

 

True. But nobody makes one...

 

Adapting a Genesis controller to four digital buttons and an analogue stick might be a nice simple dongle solution. A few resistors to convert the stick, yes?

 

Downside: no way to support both the standard joystick and such a beast.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...