Jump to content

Photo

Flashback to ColecoVision controller


18 replies to this topic

#1 towmater OFFLINE  

towmater

    Moonsweeper

  • 426 posts

Posted Sat Oct 25, 2014 11:22 AM

"They said it shouldn't be done"

 

My original controllers were trashed. So I repurposed the Flashback controllers.

 

There are just enough pins on an Atmega 168 to make one controller convertor, plus 10 3041 chips-thanks to Coleco's arcane wiring scheme, I couldn't just use a series of transistors - so at a minimum one could do this for about $30 if you already have an Arduino board to program the Atmega chip. (Assuming you didn't want to devote an Arduino board to this.)

 

So I would likely have been better off just sourcing some reasonably usable original controllers.

 

 

Attached Thumbnails

  • WP_20141025_08_20_36_Raw.jpg


#2 towmater OFFLINE  

towmater

    Moonsweeper

  • Topic Starter
  • 426 posts

Posted Sat Oct 25, 2014 11:26 AM

The current Arduino sketch: at this point I have not found enough 3041's to finish the keypad translation. I've found about 1-2 chips at every Fry's I've visited.

 

void setup() {

  //flashback pins also include analog 0-3
  Serial.begin(9600);
  pinMode(2, INPUT_PULLUP);//B     DB-9 Pin 1
  pinMode(3, INPUT_PULLUP);//D     DB-9 Pin 4
  pinMode(4, INPUT_PULLUP);//C     DB-9 Pin 8
  pinMode(5, INPUT_PULLUP); //E    DB-9 Pin 9
  //db9 pin3 to v++
 
  //output to coleco:
  pinMode(6, OUTPUT); //=Brown Coleco pin 1
  pinMode(7, OUTPUT); //=Red Coleco pin 2
  pinMode(8, OUTPUT); //=Orange Coleco pin 3
  pinMode(9, OUTPUT); //=Yellow Coleco pin 4
  pinMode(10, OUTPUT); //=Blue Coleco pin 6
  pinMode(11, OUTPUT); //=Green Coleco pin 5
  pinMode(12, OUTPUT); //=Grey Coleco pin 8
  //defaults:
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
 
 
 
 
}
 
void loop() {
  int A0;
  int A1;
  int A2;
  int A3;
 
  int D2;
  int D3;
  int D4;
  int D5;
 
  A0 = analogRead(0); //up     DB-9 Pin 2 + 10k pulldown
  A1 = analogRead(1); //down    DB-9 Pin 5+ 10k pulldown
  A2 = analogRead(2); //left    DB-9 Pin 6+ 10k pulldown
  A3 = analogRead(3); //right    DB-9 Pin 7+ 10k pulldown
  D2 = digitalRead(2); //B     DB-9 Pin 1
  D3 = digitalRead(3); //D     DB-9 Pin 4
  D4 = digitalRead(4); //C     DB-9 Pin 8
  D5 = digitalRead(5); //E    DB-9 Pin 9
 
  if (A0 > 500 && A2 == 0 && A3 == 0) {
    digitalWrite(6, HIGH);
    while (analogRead(0) > 500 && analogRead(2) == 0 && analogRead(3) == 0) //up and not LR
    { }
  }
  digitalWrite(6, LOW);
 
  if (A1 > 500 && A2 == 0 && A3 == 0) {
    digitalWrite(7, HIGH);
    while (analogRead(1) > 500 && analogRead(2) == 0 && analogRead(3) == 0) //down and not LR
    { }
  }
  digitalWrite(7, LOW);
 
  if (A2 > 500 && A1 == 0 && A0 == 0) {
    digitalWrite(8, HIGH);
    while (analogRead(2) > 500 && analogRead(1) == 0 && analogRead(0) == 0) //right
    { }
  }
  digitalWrite(8, LOW);
 
  if (A3 > 500 && A1 == 0 && A0 == 0) {
    digitalWrite(9, HIGH);
    while (analogRead(3) > 500 && analogRead(1) == 0 && analogRead(0) == 0) //left
    { }
  }
  digitalWrite(9, LOW);
 
  //diagonally
  if (A0 > 500 && A2 > 500 && A3 == 0) {
    digitalWrite(6, HIGH);
    digitalWrite(8, HIGH);
    while (analogRead(0) > 500 && analogRead(2) > 500) //up+left
    { }
  }
  digitalWrite(6, LOW);
  digitalWrite(8, LOW);
 
  if (A0 > 500 && A2 == 0 && A3 > 500) {
    digitalWrite(6, HIGH);
    digitalWrite(9, HIGH);
    while (analogRead(0) > 500 && analogRead(3) > 500) //up+right
    { }
  }
  digitalWrite(6, LOW);
  digitalWrite(9, LOW);
 
  if (A1 > 500 && A2 > 500 && A3 == 0) {
    digitalWrite(7, HIGH);
    digitalWrite(8, HIGH);
    while (analogRead(1) > 500 && analogRead(2) > 500) //down+left
    { }
  }
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
 
  if (A1 > 500 && A2 == 0 && A3 > 500) {
    digitalWrite(7, HIGH);
    digitalWrite(9, HIGH);
    while (analogRead(1) > 500 && analogRead(3) > 500) //down+right
    { }
  }
  digitalWrite(7, LOW);
  digitalWrite(9, LOW);
 
 
  //triggers
  if (A0 < 500 && A0 > 1 && D2 == 0) { //ltrigger
    digitalWrite(10, HIGH);
    while (analogRead(0) < 500 && analogRead(0) > 1 && digitalRead(2) == 0) //up and not LR
    { }
  }
  digitalWrite(10, LOW);
 
 
 
 
 
  String diagnostic = "A0=";
  diagnostic.concat(A0);
  diagnostic.concat("\t");
 
  diagnostic.concat("A1=");
  diagnostic.concat(A1);
  diagnostic.concat("\t");
 
  diagnostic.concat("A2=");
  diagnostic.concat(A2);
  diagnostic.concat("\t");
 
  diagnostic.concat("A3=");
  diagnostic.concat(A3);
  diagnostic.concat("\t");
 
 
  diagnostic.concat("D2=");
  diagnostic.concat(D2);
  diagnostic.concat("\t");
 
  diagnostic.concat("D3=");
  diagnostic.concat(D3);
  diagnostic.concat("\t");
 
  diagnostic.concat("D4=");
  diagnostic.concat(D4);
  diagnostic.concat("\t");
 
  diagnostic.concat("D5=");
  diagnostic.concat(D5);
  diagnostic.concat("\t");
 
 
 
  Serial.print(diagnostic);
  Serial.println("");
 
}


#3 NIAD OFFLINE  

NIAD

    Quadrunner

  • 5,817 posts
  • Location:Chicago Suburb

Posted Sat Oct 25, 2014 11:27 AM

Where there's a will, there's a way! But like you said, some reasonable usable original controllers are easy enough to find and can be easily refurbished to working almost like new and seeing as you seem to have some skills... a shaft extension and ball knob mod will make the original controllers a dream to play with.



#4 thevnaguy OFFLINE  

thevnaguy

    Stargunner

  • 1,030 posts
  • Need more Retro games!

Posted Sun Oct 26, 2014 7:59 PM

Ya, I pretty much came to this conclusion some time ago when I saw the Atgames using 9 lines of communication while the original ColecoVision used 7.  The logic of the keypad is all done via diodes in the controller whereas on the Atgames flashback part of the keyboard decoding is being done in the unit itself and not the controller.  I made a interface cable using a Basic Stamp from Parallax, not very cost effective.   So I just continue on modding any controller I get with microswitches :)



#5 ValkerieSilk OFFLINE  

ValkerieSilk

    Stargunner

  • 1,273 posts
  • Location:Earth

Posted Tue Oct 28, 2014 5:39 PM

eBay Seller: 231371088102



#6 KevinMos3 OFFLINE  

KevinMos3

    Stargunner

  • 1,499 posts
  • Founder of the Timothy Dalton as Bond fan club
  • Location:Behind YOU!

Posted Tue Oct 28, 2014 11:05 PM

Wait... so the Flashback controllers ARE NOT backwards compatible?  That kinda kills it for me.  I was planning to buy a CV Flashback because I read in the thread that they were backwards compatible.  :-(



#7 dashv OFFLINE  

dashv

    Moonsweeper

  • 413 posts

Posted Tue Oct 28, 2014 11:20 PM

Wait... so the Flashback controllers ARE NOT backwards compatible?  That kinda kills it for me.  I was planning to buy a CV Flashback because I read in the thread that they were backwards compatible.  :-(

 

Correct they are not compatible and apparently they did not realize this until they were too far along in production to address it.



#8 Pixelboy OFFLINE  

Pixelboy

    Quadrunner

  • 7,725 posts
  • Location:Montreal, Canada

Posted Wed Oct 29, 2014 5:23 AM

Correct they are not compatible and apparently they did not realize this until they were too far along in production to address it.


I'm sorry, but I don't believe that for a second. From what I've read in another thread, the internals of the CV FB controllers are quite different from the original Coleco controllers, and this must have been a case of the designer(s) redesigning the controller electronics from scratch to cut costs as much as possible. They must have known from the beginning that their new controller wasn't going to be compatible with the original console. So whoever AtGames employee told Bill Loguidice that the controllers were backward compatible didn't know what he/she was talking about and simply put his/her foot in his/her mouth.

#9 5-11under ONLINE  

5-11under

    River Patroller

  • 3,264 posts
  • Location:Ontario, Canada

Posted Wed Oct 29, 2014 5:28 AM

I think we knew the ColecoV

 

I'm sorry, but I don't believe that for a second. From what I've read in another thread, the internals of the CV FB controllers are quite different from the original Coleco controllers, and this must have been a case of the designer(s) redesigning the controller electronics from scratch to cut costs as much as possible. They must have known from the beginning that their new controller wasn't going to be compatible with the original console. So whoever AtGames employee told Bill Loguidice that the controllers were backward compatible didn't know what he/she was talking about and simply put his/her foot in his/her mouth.

 

This.

 

Intellivision: not sure what happened; ColecoVision: hardly a chance.


Edited by 5-11under, Wed Oct 29, 2014 5:28 AM.


#10 Greg2600 OFFLINE  

Greg2600

    River Patroller

  • 2,824 posts
  • Location:NJ

Posted Wed Oct 29, 2014 9:35 AM

Maybe they'll rectify this for version 2, if there is one....



#11 KevinMos3 OFFLINE  

KevinMos3

    Stargunner

  • 1,499 posts
  • Founder of the Timothy Dalton as Bond fan club
  • Location:Behind YOU!

Posted Wed Oct 29, 2014 2:00 PM

Maybe they'll rectify this for version 2, if there is one....


Maaaaybe... I wonder how much this will hurt sales. Probably not a lot, but I know I'm out because of it. I'll just be hoping for a second version that's geared a little more toward hobbyists. Here's to hoping.

#12 Bill Loguidice OFFLINE  

Bill Loguidice

    Quadrunner

  • 5,966 posts
  • Armchair Arcade Managing Director
  • Location:Central New Jersey, USA

Posted Wed Oct 29, 2014 2:09 PM

I'm sorry, but I don't believe that for a second. From what I've read in another thread, the internals of the CV FB controllers are quite different from the original Coleco controllers, and this must have been a case of the designer(s) redesigning the controller electronics from scratch to cut costs as much as possible. They must have known from the beginning that their new controller wasn't going to be compatible with the original console. So whoever AtGames employee told Bill Loguidice that the controllers were backward compatible didn't know what he/she was talking about and simply put his/her foot in his/her mouth.

 

It was not an employee, it was the owner of the company who I personally know as a stand up individual. There was a miscommunication from the top (management) down to engineering on the two new Flashbacks, which was exasperated by the compressed timelines. The issue was literally discovered too late to do anything about it. There's no grand conspiracy there and the issue is supposed to be addressed if there are future versions. You might have a case for something being afoot (i.e., not believing me or the best possible source) if not for the fact that both the Atari and Sega products are fully cross compatible.



#13 digress OFFLINE  

digress

    Dragonstomper

  • 916 posts
  • Location:Toronto, Ontario, Canada

Posted Wed Oct 29, 2014 4:33 PM

it looks like a nice product. Having helped developed a few things I can appreciate how hard it is to get everything just right the first time around. I hope these become available in canada eventually



#14 omf OFFLINE  

omf

    Dragonstomper

  • 729 posts

Posted Thu Oct 30, 2014 3:15 AM

im sure that the extra chips can be done away with if you used a better micro controller such as a mega for example?

 

i haven't looked at the code in much detail but i want to attempt something similar, basically a jaguar controller converter.  obviously this will need a better controller due to the amount of pins needed for the jaguar controller



#15 towmater OFFLINE  

towmater

    Moonsweeper

  • Topic Starter
  • 426 posts

Posted Sat Nov 1, 2014 3:26 PM

im sure that the extra chips can be done away with if you used a better micro controller such as a mega for example?

 

i haven't looked at the code in much detail but i want to attempt something similar, basically a jaguar controller converter.  obviously this will need a better controller due to the amount of pins needed for the jaguar controller

But the isolators are in the adapter because Coleco didn't provide a common ground. There isn't much that a microcontroller alone can do with that, and npn transistor switching requires the ground as well, in any case $1 isolators chips are a good way to protect the Coleco's io ic's.



#16 omf OFFLINE  

omf

    Dragonstomper

  • 729 posts

Posted Mon May 22, 2017 5:57 AM

 

The current Arduino sketch: at this point I have not found enough 3041's to finish the keypad translation. I've found about 1-2 chips at every Fry's I've visited.

 

void setup() {

  //flashback pins also include analog 0-3
  Serial.begin(9600);
  pinMode(2, INPUT_PULLUP);//B     DB-9 Pin 1
  pinMode(3, INPUT_PULLUP);//D     DB-9 Pin 4
  pinMode(4, INPUT_PULLUP);//C     DB-9 Pin 8
  pinMode(5, INPUT_PULLUP); //E    DB-9 Pin 9
  //db9 pin3 to v++
 
  //output to coleco:
  pinMode(6, OUTPUT); //=Brown Coleco pin 1
  pinMode(7, OUTPUT); //=Red Coleco pin 2
  pinMode(8, OUTPUT); //=Orange Coleco pin 3
  pinMode(9, OUTPUT); //=Yellow Coleco pin 4
  pinMode(10, OUTPUT); //=Blue Coleco pin 6
  pinMode(11, OUTPUT); //=Green Coleco pin 5
  pinMode(12, OUTPUT); //=Grey Coleco pin 8
  //defaults:
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
 
 
 
 
}
 
void loop() {
  int A0;
  int A1;
  int A2;
  int A3;
 
  int D2;
  int D3;
  int D4;
  int D5;
 
  A0 = analogRead(0); //up     DB-9 Pin 2 + 10k pulldown
  A1 = analogRead(1); //down    DB-9 Pin 5+ 10k pulldown
  A2 = analogRead(2); //left    DB-9 Pin 6+ 10k pulldown
  A3 = analogRead(3); //right    DB-9 Pin 7+ 10k pulldown
  D2 = digitalRead(2); //B     DB-9 Pin 1
  D3 = digitalRead(3); //D     DB-9 Pin 4
  D4 = digitalRead(4); //C     DB-9 Pin 8
  D5 = digitalRead(5); //E    DB-9 Pin 9
 
  if (A0 > 500 && A2 == 0 && A3 == 0) {
    digitalWrite(6, HIGH);
    while (analogRead(0) > 500 && analogRead(2) == 0 && analogRead(3) == 0) //up and not LR
    { }
  }
  digitalWrite(6, LOW);
 
  if (A1 > 500 && A2 == 0 && A3 == 0) {
    digitalWrite(7, HIGH);
    while (analogRead(1) > 500 && analogRead(2) == 0 && analogRead(3) == 0) //down and not LR
    { }
  }
  digitalWrite(7, LOW);
 
  if (A2 > 500 && A1 == 0 && A0 == 0) {
    digitalWrite(8, HIGH);
    while (analogRead(2) > 500 && analogRead(1) == 0 && analogRead(0) == 0) //right
    { }
  }
  digitalWrite(8, LOW);
 
  if (A3 > 500 && A1 == 0 && A0 == 0) {
    digitalWrite(9, HIGH);
    while (analogRead(3) > 500 && analogRead(1) == 0 && analogRead(0) == 0) //left
    { }
  }
  digitalWrite(9, LOW);
 
  //diagonally
  if (A0 > 500 && A2 > 500 && A3 == 0) {
    digitalWrite(6, HIGH);
    digitalWrite(8, HIGH);
    while (analogRead(0) > 500 && analogRead(2) > 500) //up+left
    { }
  }
  digitalWrite(6, LOW);
  digitalWrite(8, LOW);
 
  if (A0 > 500 && A2 == 0 && A3 > 500) {
    digitalWrite(6, HIGH);
    digitalWrite(9, HIGH);
    while (analogRead(0) > 500 && analogRead(3) > 500) //up+right
    { }
  }
  digitalWrite(6, LOW);
  digitalWrite(9, LOW);
 
  if (A1 > 500 && A2 > 500 && A3 == 0) {
    digitalWrite(7, HIGH);
    digitalWrite(8, HIGH);
    while (analogRead(1) > 500 && analogRead(2) > 500) //down+left
    { }
  }
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
 
  if (A1 > 500 && A2 == 0 && A3 > 500) {
    digitalWrite(7, HIGH);
    digitalWrite(9, HIGH);
    while (analogRead(1) > 500 && analogRead(3) > 500) //down+right
    { }
  }
  digitalWrite(7, LOW);
  digitalWrite(9, LOW);
 
 
  //triggers
  if (A0 < 500 && A0 > 1 && D2 == 0) { //ltrigger
    digitalWrite(10, HIGH);
    while (analogRead(0) < 500 && analogRead(0) > 1 && digitalRead(2) == 0) //up and not LR
    { }
  }
  digitalWrite(10, LOW);
 
 
 
 
 
  String diagnostic = "A0=";
  diagnostic.concat(A0);
  diagnostic.concat("\t");
 
  diagnostic.concat("A1=");
  diagnostic.concat(A1);
  diagnostic.concat("\t");
 
  diagnostic.concat("A2=");
  diagnostic.concat(A2);
  diagnostic.concat("\t");
 
  diagnostic.concat("A3=");
  diagnostic.concat(A3);
  diagnostic.concat("\t");
 
 
  diagnostic.concat("D2=");
  diagnostic.concat(D2);
  diagnostic.concat("\t");
 
  diagnostic.concat("D3=");
  diagnostic.concat(D3);
  diagnostic.concat("\t");
 
  diagnostic.concat("D4=");
  diagnostic.concat(D4);
  diagnostic.concat("\t");
 
  diagnostic.concat("D5=");
  diagnostic.concat(D5);
  diagnostic.concat("\t");
 
 
 
  Serial.print(diagnostic);
  Serial.println("");
 
}

 

Ok i have come back to this after all this time because i want to do a similar thing and i don't have a descent working coleco controller,  i have studied the above program and i think there is an issue, ( by this time you have probably discovered this yourself however )

it looks like the movement and a button does work, however if your pushing right for instance your stuck in the while loop and the program never gets to the part of the program that checks if a fire button is pressed.

 

it would be better to read all the buttons into variables and then apply the relevant switching at the bottom of the loop so that everything can be accounted for instead of dealing with specific button presses straight away which stops any future code from being run.

 

also something to note, analogue pins can act as digital pins if they are set as such, for example digitalWrite(A0,HIGH) / digitalRead(A0) works fine...

 

 

my plan is to do with with the jaguar controller to convert it into colecovision so no hardware modifications are required (which i have attempted before and works)

 

so save doing research and such i am asking if you could provide some details of how you connected up those opto isolator chips, i think i can get the general idea from the picture but would just like ot be sure.

 

 

obviously i cant just use a standard atmega microcontroller due to the available pins so would probably get a cheapo arduino mega clone from ebay / china to run this when i have finished development.



#17 towmater OFFLINE  

towmater

    Moonsweeper

  • Topic Starter
  • 426 posts

Posted Mon May 22, 2017 8:13 AM

Pin 1 on the OI goes through a 39Ohm resistor to an MC output. Make it high to switch the IO.

(Alternatively put P1 on VCC, hold Pin2 high and low the MC pin to make it go - that way you can limit the voltage to the OI if your MC is too high. It seemed to work either way without failure.)

Pin 2 to GND shared with MC (or alternative mentioned)

Pin 4 to common side of CV joy button

Pin 5 to floating side of CV joy button (my orig. drawing shows a diode feeding into the OI on this line, though it looks like it was unnecessary.)

 

You are right about the code, be clever with yours.



#18 omf OFFLINE  

omf

    Dragonstomper

  • 729 posts

Posted Wed Jun 7, 2017 5:45 AM

just wanted to post some progress here on my project based uppon this

 

i have a working prototype built now that converts the atari jaguar into colecovision

the option button sets the fire buttons from being either

cb

ba

ca

on the jaguar controller, which maps to left and right fire on colecovision

 

i am also incorporating a 128x64 oled screen as there are some free pins  on the mega, this screen will display some basic information about what configuration has been set up and running, i also want so save the last configuration and reload it again

 

currently the jaguar pause button although checked for does not do anything colecovision wise, perhaps use it to save the fire button configuration?



#19 omf OFFLINE  

omf

    Dragonstomper

  • 729 posts

Posted Fri Jul 14, 2017 9:27 AM

I have now finished the program to control this project  (the ability exists to reprogram the controller so future updates can be done

 

every jaguar joypad button does something

the buttons directly mapping to the colecovision joypad perform the came function.

 

the jaguar pad option button has three settings, set jaguar pad buttons c/b, b/a, c/a as colecovision left and right fire buttons

 

jaguar pad button pause saves the current fire button configuration to the controllers internal eeprom,  this is then reloaded when during the next power on, this way the user can set what is most comfortable for them

 

i need to make a prototype on strip board and give it a good test before i do anything about making this a product / kit, hopefully there will be no or very few issues uncovered,

 

power is still an issue but i have something coming that i am hoping will fix that how i want (steal power from the colecovision joypad port),  that however is still WIP

 

tests so far show this to be working correctly

 

 

 

for those of you who like numbers:

 

the controller program is 2.36k compiled

the program uses 35 bytes controller ram

the program uses 1 byte of eeprom space






0 user(s) are browsing this forum

0 members, 0 guests, 0 anonymous users