Jump to content
Pixelboy

4-player adaptor for ColecoVision?

Recommended Posts

If you're okay with 4 directions and 1 button, but no keypad, you can easily have 2 controllers on the same chip.  You wouldn't use the standard joystick polling routine though.  You'd activate the first side and read your directions+fire, then activate the other side and read your directions+fire.

 

You can, of course, be more complicated, like have it toggle joysticks whenever the keypad read is activated.  Then as long as the game can keep track of which joystick it's reading, it would work.  A more complex signaling protocol may be useful to reset the read to a known state though, like holding it in keypad read for a longer period to reset to the first controller.

Share this post


Link to post
Share on other sites

A little more info on my thoughts.  So you have two DB9s wired to the Arduino something like this:

    JS1            JS2           CV1

5 4 3 2 1    E D C B A   U T S R Q

 9 8 7 6       I H G F       Y X W V

 

1/A - Pin x and Pin y - UP

2/B - Pin x1 & Pin y1 - DOWN

3/C - Pin x2 & Pin y2 - LEFT

4/D - Pin x3 & Pin y3 - RIGHT

6/F - Pin x4 & Pin y4 - FIRE

7/B - +5V 

 

CV

Q - player 1bit 0

R- player 1 bit 1

S- player 1 bit 2

T- player 1 bit 3

U- player 2 bit 0

V- player 2 bit 1

W - common

X- player 2 bit 2

Y- player 2 bit 3

 

All pins set low.

Arduino would read the values and determine the state of each JS, this is very high level idea.

int jsvalue =0

If JS1 Pin x High and Pin y Hight

  int player1 = 0001

  int player2 = 0001

  shift player1 left 4 times

  jsvalue = player1 | player2 // 00010001

This value would be used to set the state of the Arduino pins, which open the optocoupler on the CV side

all pins set low

pin z3 = high

pin z7 = high

The arudino is hooked to two 4x optocouplers to separate the arduino circuit from the CV, like I did with the paddle controllers.

so CV would would see Pin U and Pin Y as high, convert to binary:

JSvalues = 00010001

player1 = JSvalues&11110000 and shift right 4 times

player2 = JSvalues&00001111

use figure out the direction based on player1 and player2 values.

 

 

N    0001

S    0010

E    0100

W   1000

NE  0101

NW 1001

SE  0110

SW 1010

F    1111

 

Would require 2 Arduinos for 4 players

would need 4 input DB9s, 2 output DB9s, 4 4x optocouplers, 4 470 OHM network resistors, 2 Arduinos, power supply. Maybe an power switch and power led

Because of this setup you could use a Y connector to connect a standard controller, just like if you wanted to have it to choose the game or something. But your program would have to know it's time to read the normal controller.

 

Hope this kind of makes sense.

 

 

 

 

 

 

Share this post


Link to post
Share on other sites

So last post I made some mistakes on the info as I started wiring a sample of the theory.  Unfortunately, Taking into account no input and all 8 directions I'm off by one bit since you can fire and move at the same time.  If you leave off the diagonals, then my idea might work.

Share this post


Link to post
Share on other sites

If a solution to this requires a power supply, one may as well create a small expansion module, with two extra DB9 connectors, that draws power from the ColecoVision.

 

That wouldn't be a bad idea in itself, but then it would need to be a pass-through device so that you'd be able to use it together with the Super Game Module (assuming there would be no hardware conflict). Otherwise, games designed for the 4-player adaptor would be limited to 1K of RAM.

 

Share this post


Link to post
Share on other sites
3 hours ago, Pixelboy said:

If a solution to this requires a power supply, one may as well create a small expansion module, with two extra DB9 connectors, that draws power from the ColecoVision.

 

That wouldn't be a bad idea in itself, but then it would need to be a pass-through device so that you'd be able to use it together with the Super Game Module (assuming there would be no hardware conflict). Otherwise, games designed for the 4-player adaptor would be limited to 1K of RAM.

 

Yeah, it could add another controller port for software to read.

Share this post


Link to post
Share on other sites
7 hours ago, evg2000 said:

A little more info on my thoughts.  So you have two DB9s wired to the Arduino something like this:

    JS1            JS2           CV1

5 4 3 2 1    E D C B A   U T S R Q

 9 8 7 6       I H G F       Y X W V

The problem there is that pins 5 and 8 are outputs from the CV.  They select which half of the joystick you want to read according to which is low.  Pins 7 and 9 are spinner inputs and act differently.  One of them will trigger a CPU interrupt and the other has a "left/right" indicator for the direction of the spin.  So you can only read one of them directly (pin 7 I think).  So you really only have 5 general inputs per channel:  Pins 1-4 and 6.  Note that you have no ground or VCC either.  That's why the steering wheel needs batteries.

Share this post


Link to post
Share on other sites
51 minutes ago, ChildOfCv said:

The problem there is that pins 5 and 8 are outputs from the CV.  They select which half of the joystick you want to read according to which is low.  Pins 7 and 9 are spinner inputs and act differently.  One of them will trigger a CPU interrupt and the other has a "left/right" indicator for the direction of the spin.  So you can only read one of them directly (pin 7 I think).  So you really only have 5 general inputs per channel:  Pins 1-4 and 6.  Note that you have no ground or VCC either.  That's why the steering wheel needs batteries.

Thanks, I appreciate the information.  Just starting to learn about how the CV accesses information.  Only understood the standard Atari JS part of the CV port.  I'm working on a joystick tester, could read NSEWF on the CV, didn't know how to read F2 and keypad.  Now I think I have a better understand.  Intellivision, 2600 and NES are easier to read than the CV!  At least in the JS tester I'm designing.

Share this post


Link to post
Share on other sites
8 minutes ago, evg2000 said:

Thanks, I appreciate the information.  Just starting to learn about how the CV accesses information.  Only understood the standard Atari JS part of the CV port.  I'm working on a joystick tester, could read NSEWF on the CV, didn't know how to read F2 and keypad.  Now I think I have a better understand.  Intellivision, 2600 and NES are easier to read than the CV!  At least in the JS tester I'm designing.

Yeah, the keypad activates a combination of the directions when a button is pressed.  Here's the diagram.1093964647_ScreenShot2020-04-20at5_26_04PM.thumb.png.0b59802bc429053f010dac9b65622ff4.png

  • Thanks 1

Share this post


Link to post
Share on other sites



If a solution to this requires a power supply, one may as well create a small expansion module, with two extra DB9 connectors, that draws power from the ColecoVision.
 


Instead of using the expansion port for power, could you do what was done for the Roller Controller? Roller Controller had a cable that plugged in the back of the Colecovision, between the system and the power supply cord.

Sent from my SM-G975U using Tapatalk

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.
Note: Your post will require moderator approval before it will be visible.

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

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...