Jump to content
Sign in to follow this  
Cupcakus

Ive got it!

Recommended Posts

About a week or so ago, I posted a question to the list.... wondering what I should do with my four player game... I couldn't figure out if the 4 players should just trade off the regular joysticks when it wasn't their turn... or if I should use the 4 paddle controllers and limit the excitement of the game due to each player only having one axis of movement.

 

It came to me in a dream....

 

I designed a four port extention for the 2600... It allows four players to play simultaniously! It cost me about $3.00 to make the prototype and with some fancy code work I got four controllers working at once... I'll post pictures as soon as I find where I packed my camera. Reading every joystick is not super fast so a big 4 player fast action game won't work, but it will work for just about everything else. My test went very smooth with four Combat tank sprites.

 

I plan to package it with the game when all is said and done...

 

If anyone might want to write their own 4p game, let me know and when I get some time between everything else, I'll get a site up showing how to build the extension and code for it.

Share this post


Link to post
Share on other sites

So your adapter allows four people to play at once, and all their movements are independent of one another? That's pretty cool, and seems like such an obvious idea that you wonder why no one else has done it before. :) There are many games that would be well suited for up to four players, such as Combat. If you can produce this adapter inexpensively enough that it can be included with homebrew games, maybe other authors will dream up uses for it!

 

..Al

Share this post


Link to post
Share on other sites

Yes in-deed that is what it does. I'ts not very reliable at the moment though, it's hard to get the atari to sync with it. I'll spend a few days refining it and then I'll post the results.

Share this post


Link to post
Share on other sites

Cool ... a VCS multitap. Now that I think about it it does seem like the sort of idea that seems like it should have been obvious. All you need is for the multitap to send different signals for players 2 and 4 than are sent for 1 and 3, and have the game recognize the different signals and treat them appropriately. There are enough pins to accomplish this, and there are more than enough unused joystick combinations to do the job. (N+S, E+W, NE+SW, NE+SE, NE+NW, NW+SW, NW+SE, SW+SE, plus combinations including N+?, S+?, E+? and W+?) All you'd need to do to get a second joystick with its own independent movement signals on the same port is to have the multitap map the normal 8 cardinal directions on ports 2 and 4 to one of the 8 above unused combinations and have the game interpret them accordingly.

 

Its simplicity is brilliant, and I think it'd work perfectly. And if I'm not mistaken, the Atari would still technically only be polling one stick at a time. It will probably have to poll faster than normal, though, to keep up with double the workload, and the game would have to have a method of sorting out multiple simultaneous signals and figuring out which signal belongs to which stick. That could probably be worked out by sending alternating signals every blank (or twice per VBL if possible) and having the game send each signal to the appropriate sprite. There are ways to accomplish this, I'm sure.

 

You just need games to take advantage of it - and I'm sure we'll start seeing those. :-)

Share this post


Link to post
Share on other sites
So your adapter allows four people to play at once, and all their movements are independent of one another?  That's pretty cool, and seems like such an obvious idea that you wonder why no one else has done it before.  :)  

 

Actually ABBUC has an eight player adapter for the Atari 8-bit computer, that would work on the 2600 and 7800 too. The problem with it is that they designed a PCB for it and put it in a case, so that an assembled unit cost something like 40 Euro plus shipping. You can build one of those yourself without the PCB, but it would be an awfull lot of wiring to be done.

 

The way it works is that the eight joysticks are all read through port one, and three bits in port two are set to output to select the joystick to be read. That way reading the joysticks is only a little bit more difficult than normal, and it would work for all types of games.

 

So Cupcakus, why is your adapter so complicated to read, and why is it so cheap? ;)

 

 

Ciao, Eckhard Stolberg

Share this post


Link to post
Share on other sites

Basically here is how it works technically.

 

We'll use only the left controller port for this example. (Left nibble of SWCHA)

 

I set D7 of SWCHA to output, which when a 1 is written to, causes +5v to emit from the D7 pin.

 

The switch has 4 simple transistors for each input on each controller. If D7 is +5v then the transistor lets Player 3's inputs into D7 D6 and D5 of SWCHA. If D7 is 0, then the transistor allows current to flow from Player 1's controller. It's a brutally simple circuit. I originally was looking for a cheap IC that did this, but I realised the circuit is so simple, why not just do it myself with cheapo Radio Shack stuff. The player 2 and 4 switch is the same. And it does take a little bit of wiring. But much cheaper than manufacturing a PCB

 

And because now the inputs are only 3 bits wide, I had to change how you check for inputs.

 

U X100

D X010

L X001

R X110

P3 Fire --> The switch doesn't support this yet.

The X is the output bit

 

The results are unreliable unless you give at least a blank of time between resetting D7, so the movement has to be interlaced between frames, which makes super fast games hard to accomplish. I'll post my circuit in the next couple days...

 

Now the trick is making it affordable. The radio shack parts are like $2.50, the problem is the Atari ports and cables, I used ports from a junk atari I had, does anyone know where i can get super cheap ports and cables compatible with the 2600?

 

PS. I said fancy coding because it didn't work until I interlaced it... I'm sure a code wiz could make it work faster, but I couldn't.

Share this post


Link to post
Share on other sites

It would be real awesome to make a Bomberman for 4 players. Not sure if his circuitry could handle it in a timely fashion to get all 4 players to move quickly and let people drop bombs. Of course, I figure it may have to remain simple, blowing up walls similar to breakout. Maybe put in the kick feature and flame feature. Not sure if it could handle increased speed or actually picking up the bomb and tossing it. I figure scrolling isn't that hard since it happens in a lot of games such as Air Sea Battle and even Combat when you get blown through the wall to the other side.

 

But I'd leave that to the programmers to decide. Anyone ever makes a Bomber Man for the 2600, I'd definitely buy it along with the 4 joystick port.

 

Phil

Share this post


Link to post
Share on other sites

I'm sure a simplified Bomberman would be entirely possible. Four single-colour sprites for each of the 4 players that would probably look rather like the main character from Dig Dug, simple blocks for walls ... the bombs would be a bit of a bother, as you'd have to share sprites for that, and it'd probably be impossible to have bomb powerups (for more than 1 bomb per person). Explosions might be a problem, too ... but it could be done, I think. And a great party game with a multitap, to boot. :-)

 

Getting back to the multitap idea, though... it sounds fairly simplistic, but I'm wondering why it's necessary to strip down directional signals to 3 bits. Wouldn't it be simpler (and maybe even cheaper) to simply make the multitap "rewire" incoming signals from ports 2 and 4 to convert them from normal cardinal directions to directional combinations that the VCS is capable of recieving anyway? i.e.

 

Player 1 pushes up. Signal heads to the multitap and passes straight through with no translation ("rewiring").

Player 2 pushes up. Signal heads to the multitap where the signal is then translated from normal "up" to "up+down" (or any desired combination). Signal is then passed on as up+down to the VCS, leaving the game to simply determine what to do with an up+down signal. The only other thing you'd have to do is possibly interlace polling between ports so that the game only recieves one signal from each real port at a time. (i.e. poll VCS stick during the first VBL to recieve signals from multitap sticks 1 and 3, then poll again during the next VBL to obtain data from sticks 2 and 4). With a little fancy footwork you could even poll twice per VBL for double the sampling rate. (I don't know enough about the VCS' innards to know how many cycles it takes to poll and deal with joystick data, then clear the registers for a new poll, but it must be faster than one per VBL, and if you count your scanlines well enough you could probably squeeze a couple of polls into one VBL, thus opening the door for 4 player games that are still fully responsive at 60Hz)

 

Whaddya think? Again, I don't know enough of the VCS' innards to know how possible this is, but I've done 8-bit Atari coding, and though I know the VCS' extreme limitations by comparison, I've seen what you can do in a single VBL, and I can't imagine joystick polling requires that many cycles.

Share this post


Link to post
Share on other sites
Actually ABBUC has an eight player adapter for the Atari 8-bit computer, that would work on the 2600 and 7800 too. The problem with it is that they designed a PCB for it and put it in a case, so that an assembled unit cost something like 40 Euro plus shipping. You can build one of those yourself without the PCB, but it would be an awfull lot of wiring to be done.

 

The way it works is that the eight joysticks are all read through port one, and three bits in port two are set to output to select the joystick to be read. That way reading the joysticks is only a little bit more difficult than normal, and it would work for all types of games.

*mind boggles at thought of 16-player Warlords or Video Olympics* :o

Share this post


Link to post
Share on other sites

Well, it is really simple it's insane no one came up with it before. A simple multiplexing circuit can work. If you take 5 inputs (4 direction and fire button) you can have up to 32 combinations. A joystick has a total of 8 directions plus fire button plus one more for neutural input (when the stick's centered and fire's not pressed) for a minimum of 10. With multiplexing, it is possible to cram up to 3 joysrticks per port (6 per 2600)

 

This can go even higher if you take what Booster Grip controller did and take 2 POT line and treat it as if it has digital rather than analog input, giving you 7 bits input per port for a total of 128 combinations or 12 Joysticks.

 

Of couse with a measly 20% of CPU power available in a 2600, this is probably not practical for any games unless someone were to add second CPU on the cart to handle game code and leave the video to the main processors. But by then the price would really start to go up. Can anyone imagine a $100+ Atari game cart? :lol: but hey, it's an interesting challenge to prove Atari 2600 can do more than believed was possible.

 

OTOH can anyone imagine a RPG-esque game similiar to Gauntlet or Dark Chambers with 24 players at once? If this was actually accomplished, it would mean Atari 2600 would be the oldest home console capable of MMRPG. :D Making the game capable of widescreen format for widescreen TV might help a lot.

Share this post


Link to post
Share on other sites
Player 1 pushes up.  Signal heads to the multitap and passes straight through with no translation ("rewiring").

Player 2 pushes up.  Signal heads to the multitap where the signal is then translated from normal "up" to "up+down" (or any desired combination).  Signal is then passed on as up+down to the VCS, leaving the game to simply determine what to do with an up+down signal.  The only other thing you'd have to do is possibly interlace polling between ports so that the game only recieves one signal from each real port at a time.  (i.e. poll VCS stick during the first VBL to recieve signals from multitap sticks 1 and 3, then poll again during the next VBL to obtain data from sticks 2 and 4).  With a little fancy footwork you could even poll twice per VBL for double the sampling rate.

 

I tried this at first and it doesn't work in theory. The data bus for each controller's directional data is only four bits wide, (IE: Four switches in the joystick). So the only impossible combinations for the joystick are Up+Down and Left+Right. So take this example.

 

Normal Controller Output

Up 0001

Down 0010

Left 0100

Right 1000

 

Multitapped Controller on Same Port

Up 0011

Down 1100

Left ?1110

Right ?0111

 

We can use 1100 and 0011 because those are impossible combinations on a regular joystick but there are no other impossible combinations... What's worse is if player 1 presses Up and player two presses left you'll get 1111 which could mean anything, P2 right + P1 Right produces the same result. The only way to determine which stick to read is to tell the multitap to turn one of the two joysticks on the port on and the other off, then you can read everything from the on joystick and not worry about the off joystick contaminating the data. Switch the on Joystick every VBlank and you've got a working solution. The only way to tell the multitap to turn on and off the joysticks is to set at least one line to output. Make sense now? I'm not very good at explaining these things :-)

Share this post


Link to post
Share on other sites

Is the Atari cable standard DB9? Will a PC DB9F cable fit in the atari joystick port. Can someone let me know, I have no Atari's here at the office to see :-)

 

Thanks!

Share this post


Link to post
Share on other sites

Ahh, NOW I get it. I didn't realize the VCS only had 4 address lines for directional input. That definitely limits things a great deal. And now that I think about it, I forgot that VCS sticks only had 4 contacts for directional input -- I kept thinking 8, one for each direction. <shrug> Okay, so that's abundantly clear now, and it seems your solution seems the most viable for cost effectiveness.

Share this post


Link to post
Share on other sites

@The Night Phantom

The adapter is for 8 joysticks only, not for paddles. Also reading the paddles on the VCS takes a complete frame, so multiplexing the paddle input wouldn't work too well. The joystick adapter could probably be expanded to 16 inputs though, if you really wanted.

 

@Cupcakus

You don't have to design a PCB for the 8 player adapter. It just makes assembling them in greater numbers a lot easier. The circuit itself probably isn't much more complicated than your design. It only consists of a 74LS138 and 5 diodes per joystick. There is a schematic for the adapter at this page. The text is in Czech though, but maybe it gives you some inspiration for your four player adapter.

 

The advantage that it has over your design is that it would also allow diagonal movement. Also you could add support for a second joystick button through the input on the second controller, and then use Genesis joypads or Amstrad joysticks. Also you could probably toggle between the joysticks through a simple "INC SWCHA" instruction. And if you haven't factored in the cables and plugs into your calculation, then maybe building the more advanced adapter isn't that much more expensive than your design.

 

DB9 connectors would fit the 2600. But the plugs itself usually are bigger than the plugs on the Atari joystick cables. So on consoles, like the 7800, it's impossible to fit them in, since the joystick ports are under a plastic extension of the console casing. If you wanted to support this console too, but don't want to use bare connectors, you might be better off using a project case with four male DB9 connctors and two female DB9 connctors. Then you could pack the adapter with normal Genesis joystick extension cables.

 

 

Ciao, Eckhard Stolberg

Share this post


Link to post
Share on other sites
The advantage that it has over your design is that it would also allow diagonal movement. Also you could add support for a second joystick button through the input on the second controller, and then use Genesis joypads or Amstrad joysticks. Also you could probably toggle between the joysticks through a simple "INC SWCHA" instruction. And if you haven't factored in the cables and plugs into your calculation, then maybe building the more advanced adapter isn't that much more expensive than your design.

 

Mine will support diagonal movement eventually. The low-performance design I'm using for my game supports all movements, but it can only poll one stick per frame. The low performance one requires only cheap wires... no circuitry or IC's, which means my cost is only for the cables, which should make it very inexpensive to reproduce.

 

7200 Support is not my top priority at all... I don't even own one... While it would be nice to have it support both consoles, the 2600 is my main objective.

 

I have already factored in DB9 cables and plugs.... I'll have to see how much Genesis cables are going to cost. The 74LS138 design you're talking about is an over complicated design of my low performance adapter. Basically all the joysticks are coming into one port on this multitap. So you have to change the SWCHA output to enable another joystick, and then read that Joystick. That is slowwwwww, the 74LS138 is a really fast chip however, and may help matters.

 

My high performance design is much faster as you can read two joysticks each time you poll, so the SWCHA bit only has to be changed once to read the other two sticks. The circuit above has to change it 8 times, once for each stick. While my design only supports 4 sticks, it should be well over twice as fast which should make upcoming killer games like true 4 player Guantlet and such, easily possible.

Share this post


Link to post
Share on other sites

I think I've seen the 74LS138 being used in some bankswitching scheme where the results need to be available at the next processor cycle, so it should be pretty fast. I think it should be possible to read all 8 joysticks in one frame. Also you can address joysticks individually, so if you don't want to use all 8 of them, you don't have to. If you wanted to you could even build the adapter to support only 4 joysticks, and save some costs that way.

 

One other advantage of this design that you can read the joystick inputs just like you normally would. That might help getting support from other programmers as well. Also, since all joysticks are read from the same port, you could probably write a generalised routine and save some ROM space.

 

 

Ciao, Eckhard Stolberg

Share this post


Link to post
Share on other sites

This is cool. It would be neat to see what games could be created with this...

Share this post


Link to post
Share on other sites
One other advantage of this design that you can read the joystick inputs just like you normally would. That might help getting support from other programmers as well. Also, since all joysticks are read from the same port, you could probably write a generalised routine and save some ROM space.

Ciao, Eckhard Stolberg

 

I'm waiting for parts to test what I think is my "slow" idea. The IC above lets you poll 8 different sticks through the same port which you may be able to do all of them during the same frame... My what I *think* is going to be slow switch works exactly the same way, but because I'm only splitting it to 4 sticks the unused port can be set to all output, eliminating the need for the IC. So for example

 

Port 2

0001 - Player 1 stick on

0010 - Player 2 stick on

0100 - Player 3 stick on

1000 - Player 4 stick on

 

You can then, inside the program, read all four joysticks as normal input, by simply enabling the one you want to read. This however seems slower to me than my original idea. It will definetly be just as fast as the above circuit that's for sure, which gives me high hopes... Maybe I won't have to design a faster version.

Share this post


Link to post
Share on other sites

All these talks made me want to have a multiplayer game more than ever. But it'd only be a fantasy until someone builds a woring multiport prototype and a demo game that works with the proto.

 

I have considerable electronics skill and I could help with the hardware prototyping. Plus with my Supercharger, I could run any basic 4 port joystick demo to see if it behaves. Plus with over a dozen working 2600 console, I can safely blow up... er... *ahem* sacrifice them in the name of science. :lol: Heck I think I could probably build a rudimentary proto right now once someone decides if it's going to be 4 ports adapter or 8 ports adapter.

Share this post


Link to post
Share on other sites

Well first of all :-) I am working on the first 4 player game to use 4 joyticks at the same time. My idea was to create a 4 player game all the time, but originally I was going to have the players switching controllers around... then it came to me to build this switch. Now that I have everything set to go I plan to release the switches as a package with the game. Kind of like the controller that came in Star Raiders. It shouldn't affect the price all that much, but it will probably be the most expensive homebrew ever sold, just due to the fact you have to buy the switch with it.

 

I will also sell the switches cheap by themselves as well as free plans to make your own, so other developers can encorporate them into their own 4 player game ideas.

 

Prototying is super easy, production is going to be a pain. :-) As far as Beta testing the game, that's a problem. The game is looking like it's going to at least be 8k. Which puts the Supercharger out as a testing device... plus, no Emulators are capable of emulating the switch... I'm going to have to get with some of the emulator developers to work it in.

 

But don't fret... In about 3 to 4 months I will *hopefully* will have the best party game the 2600 ever laid eyes on.

Share this post


Link to post
Share on other sites
Sounds awesome.  2600 party games yeah! :party:

 

You just gave me a mental image of Mario Party on a 2600. I about hacked up a furball. :P

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...