ChildOfCv Posted April 20, 2020 Share Posted April 20, 2020 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. Quote Link to comment Share on other sites More sharing options...
+evg2000 Posted April 20, 2020 Share Posted April 20, 2020 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. Quote Link to comment Share on other sites More sharing options...
+evg2000 Posted April 20, 2020 Share Posted April 20, 2020 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. Quote Link to comment Share on other sites More sharing options...
Pixelboy Posted April 20, 2020 Author Share Posted April 20, 2020 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. Quote Link to comment Share on other sites More sharing options...
ChildOfCv Posted April 20, 2020 Share Posted April 20, 2020 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. Quote Link to comment Share on other sites More sharing options...
ChildOfCv Posted April 20, 2020 Share Posted April 20, 2020 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. Quote Link to comment Share on other sites More sharing options...
+evg2000 Posted April 20, 2020 Share Posted April 20, 2020 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. Quote Link to comment Share on other sites More sharing options...
ChildOfCv Posted April 20, 2020 Share Posted April 20, 2020 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. 1 Quote Link to comment Share on other sites More sharing options...
slamthedoor Posted April 25, 2020 Share Posted April 25, 2020 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 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.