Jump to content
IGNORED

Adapting Jaguar controller to use on Intellivision for about $5


Uzumaki

Recommended Posts

post-11037-0-80941700-1368812791_thumb.jpg

 

I got the boards in today. It took a bit over 2 weeks total from when I sent the gerber until I got it so pretty decent speed for oversea service. USA has lax custom so that probably helped a lot :D

 

I did find 3 mistakes. © is missing, I think it's font issue so I'd have to use © instead. A few text were cut off at the edge of the board so I'd need to reposition the text a bit. And I'm missing one ground via, my fault. I also forgot a capacitor for the chip, I soldered one on the socket pin on the bottom. I'd need to add a proper spot in the revision.

 

My camera's battery died so I used crappy cell cam for pictures.

 

Partial completed:

post-11037-0-34939300-1368812826_thumb.jpg

post-11037-0-90507000-1368812850_thumb.jpg

 

 

post-11037-0-55676700-1368812907_thumb.jpg

The cable that plugs into Intellivision controller. I found colored ribbon cable that has the same color order as original, convenient. But a pain in the butt to solder those. Anyone know of a 1x9 connector with 0.1" (2.54mm) spacing that uses press wire to assemble? Like the original controller plug?

 

post-11037-0-05074000-1368813056_thumb.jpg

Completed save for power wires for the board.

 

And I'm going to bed. My guild pulled a rare all nighter raid and I was about to sleep when the mail came. I've been up since about 7 AM May 16th... :sleep:

Link to comment
Share on other sites

Hooked it to Inty, it works. The controller passthrough is working fine. The Jag adapter isn't getting the right behavior so I think I got a crossed wire or missed solder spot somewhere but it does work in some way.

 

I picked up eBay Auction -- Item Number: 2611031386711?ff3=2&pub=5574883395&toolid=10001&campid=5336500554&customid=&item=261103138671&mpt=[CACHEBUSTER] so I could see how the controller respond more accurately, then I can figure out which wire is faulty or if it's the code that needs to be adjusted.

 

IMG_8589_zps228111ed.jpg

 

And still have room for second one for the other controller. The chip wasn't installed when I took the picture, I wanted to make sure the wiring for original controller worked first.

Link to comment
Share on other sites

that auction is for a box, not a cart :(

 

BAH I blame sneaky picture showing cart. Any idea where I could get one without CC3? I don't have CPLD programmer and building one out of discrete logic chips is a lot of work and would be large. Maybe someone here who does reproduction cart or homebrewn cart can make a MTE-201 cart at reasonable cost?

 

A search of the forum suggested using baseball cart. I don't have that one so what other common cart uses all button and can be easy to use as controller tester? AD&D Cloudy Mountain doesn't use button 5 at all.

 

Do you have oscilloscope, channel 1 make input, channel 2 make output wire to Intv.

 

Mine doesn't have output option. It's an older budget model with dual trace and variety of setting but nothing for output.

 

I played with the controller some more and wrote down what was expected and what I got instead. Then I looked at the table for Jag controller and Inty controller and I was able to match up all of the error to 3 lines on Jag side. I just need to switch around 3 wires and it should work.

Link to comment
Share on other sites

BAH I blame sneaky picture showing cart. Any idea where I could get one without CC3? I don't have CPLD programmer and building one out of discrete logic chips is a lot of work and would be large. Maybe someone here who does reproduction cart or homebrewn cart can make a MTE-201 cart at reasonable cost?

 

A search of the forum suggested using baseball cart. I don't have that one so what other common cart uses all button and can be easy to use as controller tester? AD&D Cloudy Mountain doesn't use button 5 at all.

 

 

Mine doesn't have output option. It's an older budget model with dual trace and variety of setting but nothing for output.

 

I played with the controller some more and wrote down what was expected and what I got instead. Then I looked at the table for Jag controller and Inty controller and I was able to match up all of the error to 3 lines on Jag side. I just need to switch around 3 wires and it should work.

 

 

I first built using 74xx IC chips (besides keyboard) - way to much to vero / breadboard . I then tried the Arduino and had mixed results, most likely due to my poor programming. I then implemented in Altera Max V CPLD dev kit and got 100% perfect results.

 

Issue with Max V is the EQPF-64 package. Price point of ~1 USD is great, but you need to add AP1120SB and some 100uf caps to power it (1.8v and 3.3v). I'm also checking to see if the bottom thermal is really needed or not.

 

Max 7000S is PLCC-44 and has a nice cheap socket, but cost is like ~9 USD, but it works with 5v natively, however its missing internal pull up resistor option on the inputs, hence external resistor array is needed. This is cheap to add.

 

Both chips have tri state output buffer and this interfaces well to Intv.

 

I'm now trying to get Quartus II to program Max 7000S and I'm having some issues with the cheapo USB Blaster I bought. I'm going to try to figure it out this weekend.

 

If you do get MLB cart, put your controller into port 2, this will allow all keypad buttons to be tested. I use Tron DD for direction testing. For buttons 1-3 I use Astrosmash. I wish I just had a test cart for this.

Edited by grips03
Link to comment
Share on other sites

Fixed the wires, put together a second one for second controller, mounted the port on the system shell. Plugged the system back together and turned it on.

 

SNOW.

 

Checked and rechecked, power plug in, cable connected to power supply pcb, cable from mobo to power supply pcb. Still snow. I think I broke something :/ I'd have to check with my meter after some sleep. It could be loose wire from transformer, switch, or mobo power cable. It could be bad switch. It could be blown diode or something. No smoke and no funny smell I don't think I shorted something.

Link to comment
Share on other sites

Bad resistor, I replaced it and it's working once again. It seems to work 100% with 2 adapter boards in for both controller ports. I've gone ahead and sent the revised board design for another run of 10 boards. The 2 prototypes will probably remain permanently in my Intellivision 3 and I'm putting together 2 more, without the external clock to see if it works fine and installing it in my other Intellivision.

 

I can do a video of it later if I get my area cleaned up.

Link to comment
Share on other sites

  • 3 weeks later...

Still trying to clean up the mess to take video of Jag pad working but I got new boards in today.

 

IMG_9123_zps90f40899.jpg

Error from the first version were fixed. I forgot to remove the vegistial resistor to pin 1. I originally included them so if I crashed the chip trying to test it on Intellivision, I could just short pin 1 to ground to reset it. Since it seems running, no need to manually reset it and can be permanently tied to +5v. A jumper wire is all it needs in place of resistor R1

 

IMG_9128_zpsbe7fa59b.jpg

Populated and ready but without Jaguar controller port wired in yet.

 

IMG_9129_zps8ff248b5.jpg

Back side with a decoupling cap for the chip.

 

IMG_9124_zps631c55ba.jpg2 controller cables ready to be soldered on the board. I found it'd be easier to cut hole in Intellivision, install it with the tabs on the outside, run the wire in then solder it. If it is soldered on before it goes in the hole, it might not fit through and you'd have to make a bigger, uglier hole. Unless you're very good at cutting plastic and making it look very neat for inside mounting.

 

The fixes include extra +5v and ground via for hooking up to Inty power supply, and for connecting second board to the first one. The second board can use the extra pad to run wire to a power LED.

 

If I can find a supply of VGA style port that is pre-wired (saving me about 30 minutes of cutting, trimming, soldering, and checking per port) then it'd be wonderful. I could revise the board if needed for easier connection if the VGA cable has 0.1" plug at the end.

 

Attached zip files contains code for Arduino and Eagle schematic/board if you want to make your own adapter.

 

What to call this?

Jaguar_final.zip

Link to comment
Share on other sites

DB9 won't fit Jaguar controller though. VGA style which is DE-15 is what I need. Since it has 3 rows, ribbon crimped version probably won't work.

 

useless trivial: DB-9 is technically incorrect term that was never corrected for decades. D refers to D shell. Second letter A-E is the physical size. DB-25 is correct for large connector with 25 pins but 9 pins should have been DE-9 as the shell was E sized. The number refers to total pins, and may have P or S to indicate plug (male) or socket (female). DE-15 is high density 15 pins in a small E sized shell.

Link to comment
Share on other sites

  • 4 months later...
  • 4 months later...

DB9 won't fit Jaguar controller though. VGA style which is DE-15 is what I need. Since it has 3 rows, ribbon crimped version probably won't work.

 

useless trivial: DB-9 is technically incorrect term that was never corrected for decades. D refers to D shell. Second letter A-E is the physical size. DB-25 is correct for large connector with 25 pins but 9 pins should have been DE-9 as the shell was E sized. The number refers to total pins, and may have P or S to indicate plug (male) or socket (female). DE-15 is high density 15 pins in a small E sized shell.

 

Is this project dead?

Link to comment
Share on other sites

  • 9 months later...

 

Is this project dead?

 

 

Anybody interested in picking up where Uzumaki left off?

 

Jag controller pinout:

https://web.archive.org/web/20030421222414/http://users.erols.com/tiltonj/games/tech/jagcont.html

 

INTV controller pinout:

https://web.archive.org/web/20030421222613/http://users.erols.com/tiltonj/games/tech/intvcont.html

 

INTV stick adapter:

https://web.archive.org/web/20030421223502/http://users.erols.com/tiltonj/games/tech/intvsticky.html

 

EDIT: I just dug up an old thread of mine that appears to contain all the info we need for this.

http://forum.digitpress.com/forum/showthread.php?60817-Anybody-modded-an-INTV-to-use-a-Jaguar-controller&highlight=jaguar

Edited by DeputyMoniker
Link to comment
Share on other sites

  • 1 year later...

Time to cast Reanimation on this project.

 

I am still busy with a couple of current projects involving my Duo and TurboExpress but this seems easy enough. I copied the code into my Arduino and checked it, it passes so nothing critical had changed with Arduino IDE that could break old code.

 

To answer someone's request there's the exported HEX file: https://www.dropbox.com/s/la8cwmwded8py2q/Jaguar.ino.standard.zip?dl=0 I haven't tried hex upload so I don't know if either works or not. It does expect to be used on ATMega328.

 

I also copied the PCB layout since the original didn't provide any file I could use, and I'll have it mailed off. Some cleaning up.

  • Like 1
Link to comment
Share on other sites

Colecovision is a bit trickier than Intellivision. 2 pins control the controller's mode. When pin 5 goes high and 8 goes low, 7 lines are scanned for the 4 direction joystick, left fire (or yellow on SAC), and 2 rotary encoder (rollerball). When pin 5 goes low and 8 goes high, the same 7 lines are checked for keypad and right fire button (or other 3 SAC buttons).

 

Trying to cram 2 fire buttons, 12 button keypad, and 4 directions over 9 wires using weird encoding matrix and a shitload of diodes (28 if I counted right) is crazy. Intellivision did it with 8 lines plus common ground and didn't need diodes.

 

I would have to think about how to code this one, my best guess would be to watch pin 5 and 8 of CV controller port and set output for direction and 1 fire button in one mode, and the keypad and other buttons in other mode. Jaguar controller has option button and 3 fire buttons, I could probably have left fire (yellow) to C, right fire (red) to A, and map blue and purple to B and option.

 

I do need to question why Coleco didn't use 15-pin connector like Atari did for the 5200 to simplify the design. A 15 pin connector would probably cost less than 28 diodes per controller.

 

Unfortunately I have no way to test CV controller adapter. I don't have a CV system, they are oddly rare around here even though games, controllers, and huge power bricks turned up a few times. Checking eBay, a tested working system seems to be rather expensive.

  • Like 1
Link to comment
Share on other sites

Tamed the Colecvision controller scheme with a thorned whip and came up with a viable solution:

/*
  Jaguar controller pinout
  pin  1 = Col (option, 3, 6, 9, #)
  pin  2 = Col (C, 2, 5, 8, 0)
  pin  3 = Col (B, 1, 4, 7, *)
  pin  4 = Col (Pause, A, N, S, E, W)
  pin  6 = Row (pause) There seems to be room for 3 more buttons, maybe Pro controller uses it on this row?
  pin  7 = +5VDC Source  (typical VGA video extension cable has this pin missing, BEWARE!!)
  pin  9  = GND
  pin 10 = Row (A, B, C, Option)
  pin 11 = Row (E, 1, 2, 3)
  pin 12 = Row (W, 4, 5, 6)
  pin 13 = Row (S, 7, 8, 9)
  pin 14 = Row (N, *, 0, #)
  Pin 5, 8, and 15 are not used
  See http://emu-docs.org/Jaguar/Controllers/jagcont.html for pinout info and details
  I have seen a couple diagram that has pin 6 and 9 flipped but a test run of this code confirms the above seems correct.

  Jaguar controller has negative logic. The row line goes low when a button is pressed.
*/

/*
  Colecovision pins
  Colecovision used funky weird encoding scheme to get all stuff over 5 lines. Pin 5 and 8 sets the controller "mode"
  (for lack of better word). When pin 5 is low, direction and one fire button is used and it is exactly same as Atari
  2600 joystick (delibrate so CV controller can work on 2600 modules) when pin 5 is high and 8 is low, the other fire
  buttons and keypad matrix are scanned, and Coleco used assload of diodes to encode 15 buttons over 5 wires.
*/

int CVUp = LOW; // up button
int CVDo = LOW; // down burron
int CVLe = LOW; // left, obviously
int CVRi = LOW; // right
int CV0 = LOW; // button 0, et al.
int CV1 = LOW;
int CV2 = LOW;
int CV3 = LOW;
int CV4 = LOW;
int CV5 = LOW;
int CV6 = LOW;
int CV7 = LOW;
int CV8 = LOW;
int CV9 = LOW; // button 9
int CVCl = LOW; // clear button from Jaguar * button
int CVEn = LOW; // enter button from Jaguar # button
int CVS1 = LOW; // SAC purple button, Jaguar B button
int CVS2 = LOW; // left side button or yellow SAC, Jaguar C button
int CVS3 = LOW; // right side button or red SAC button, Jaguar A button
int CVS4 = LOW; // SAC blue button from Jaguar Option
int CVOut1 = 12;
int CVOut2 = 13;
int CVOut3 = A0;
int CVOut4 = A1;
int CVOut6 = A3;
int CVIN5 = A2;
int CVIN8 = A4;
int CVMode5;
int CVMode8;

// pin 0, 1, and A5 are not used. Maybe CV rotary encoder but this is not on stock Jaguar pad.

void setup()
{
  for (int i = 2; i <= 5; i++)
  {
    pinMode(i, OUTPUT);    // set some pins output for column
    digitalWrite(i, HIGH); // sets the 4 column high for the moment.
  }
  for (int i = 6; i <= 11; i++)
  {
    pinMode(i, INPUT);     // set some pins input for rows
    digitalWrite(i, HIGH); // enable pullup resistor internally
  }
  pinMode(CVOut1, INPUT);   // CV controller pin 1, sets Colecovison to no button "down" atm.
  pinMode(CVOut2, INPUT);
  pinMode(CVOut3, INPUT);
  pinMode(CVOut4, INPUT);   // CV controller pin 4
  pinMode(CVOut6, INPUT);   // CV controller pin 6
  pinMode(CVIN5, INPUT);
  pinMode(CVIN8, INPUT);
  digitalWrite(CVOut1, LOW);  // 
  digitalWrite(CVOut2, LOW);
  digitalWrite(CVOut3, LOW);
  digitalWrite(CVOut4, LOW);
  digitalWrite(CVOut6, LOW);
}
void loop()
{
  digitalWrite(2, LOW);   // enable column 1
  CVS4 = digitalRead(7);  // option for SAC button
  CV3 = digitalRead(;   // 3 button
  CV6 = digitalRead(9);   // 6 button
  CV9 = digitalRead(10);  // 9 button
  CVEn = digitalRead(11); // # button
  digitalWrite(2, HIGH);  // turn off column 1

  digitalWrite(3, LOW);   // enable column 2
  CVS2 = digitalRead(7);  // C button
  CV2 = digitalRead(;   // 2 button
  CV5 = digitalRead(9);   // 5 button
  CV8 = digitalRead(10);  // 8 button
  CV0 = digitalRead(11);  // 0 button
  digitalWrite(3, HIGH);  // turn off column 2

  digitalWrite(4, LOW);   // enable column 3
  CVS1 = digitalRead(7);  // B button
  CV1 = digitalRead(;   // 1 button
  CV4 = digitalRead(9);   // 4 button
  CV7 = digitalRead(10);  // 7 button
  CVCl = digitalRead(11); // * button
  digitalWrite(4, HIGH);  // turn off column 4

  digitalWrite(5, LOW);   // enable column 4
  // pause button on pin 6, not used in CV mode
  CVS3 = digitalRead(7);  // A button
  CVRi = digitalRead(;  // East button
  CVLe = digitalRead(9);  // West button
  CVDo = digitalRead(10); // South button
  CVUp = digitalRead(11); // North button
  digitalWrite(5, HIGH);  // turn off column 4

  /* I am using input and output vs writing high and low. Arduino retains the low state even when the
    pin mode is changed. Making the pin input has the added benefit of making that line high impedence, that is
    no signal from the chip. This should allow users to use original controller along with Jaguar controller
    at the same time.
  */

  CVMode5 = digitalRead(CVIN5);
  CVMode8 = digitalRead(CVIN8); // checks both pins to determine what mode CV console is reading at
  if (CVMode5 = LOW) {
    CVfive();
  } else if (CVMode8 = LOW) {
    CVeight();
  }  // both was high. cable not plugged in? If not plugged in, no power so this isn't possible anyway
}

void CVfive() {                // we are in joystick mode
  if (CVUp) {                  // if all variables are high, assume no button was pressed
    pinMode(CVOut1, INPUT);    // high-Z mode for no button
  } else {
    pinMode(CVOut1, OUTPUT);   // else one button was pressed, make a low signal
  }
  if (CVDo) {                  // if all variables are high, assume no button was pressed
    pinMode(CVOut2, INPUT);    // high-Z mode for no button
  } else {
    pinMode(CVOut2, OUTPUT);   // else one button was pressed, make a low signal
  }
  if (CVLe) {                  // if all variables are high, assume no button was pressed
    pinMode(CVOut3, INPUT);    // high-Z mode for no button
  } else {
    pinMode(CVOut3, OUTPUT);   // else one button was pressed, make a low signal
  }
  if (CVRi) {                  // if all variables are high, assume no button was pressed
    pinMode(CVOut4, INPUT);    // high-Z mode for no button
  } else {
    pinMode(CVOut4, OUTPUT);   // else one button was pressed, make a low signal
  }
  if (CVS2) {                  // if all variables are high, assume no button was pressed
    pinMode(CVOut6, INPUT);    // high-Z mode for no button
  } else {
    pinMode(CVOut6, OUTPUT);   // else one button was pressed, make a low signal
  }
}

void CVeight() {                                          //We are in keypad mode
  if (CV1 && CV3 && CV7 && CV8 && CVCl && CVS1 && CVS4) { // if all variables are high, assume no button was pressed
    pinMode(CVOut1, INPUT);                               // high-Z mode for no button
  } else {
    pinMode(CVOut1, OUTPUT);                              // else one button was pressed, make a low signal
  }
  if (CV2 && CV4 && CV5 && CV7 && CV8 && CVEn && CVS4) {  // if all variables are high, assume no button was pressed
    pinMode(CVOut2, INPUT);                               // high-Z mode for no button
  } else {
    pinMode(CVOut2, OUTPUT);                              // else one button was pressed, make a low signal
  }
  if (CV4 && CV5 && CV8 && CV9 && CVCl && CV0 && CVS3) {  // if all variables are high, assume no button was pressed
    pinMode(CVOut3, INPUT);                               // high-Z mode for no button
  } else {
    pinMode(CVOut3, OUTPUT);                              // else one button was pressed, make a low signal
  }
  if (CV3 && CV4 && CV6 && CV0 && CVEn && CVS1 && CVS4) { // if all variables are high, assume no button was pressed
    pinMode(CVOut4, INPUT);                               // high-Z mode for no button
  } else {
    pinMode(CVOut4, OUTPUT);                              // else one button was pressed, make a low signal
  }
  if (CVS3) {                                             // if all variables are high, assume no button was pressed
    pinMode(CVOut6, INPUT);                               // high-Z mode for no button
  } else {
    pinMode(CVOut6, OUTPUT);                              // else one button was pressed, make a low signal
  }
}

I don't have CV system to test this but I can try the LED test to see if the output matches truth table. Rotary encoder isn't included since it's not present on stock Jaguar pad. If it looks good, I'd need to find a cheap CV console.

 

I also looked at 5200 but I can't do it on the tiny ATMega328. I can do all the buttons but there will be no pin left to handle the 2 analog controller position. I would need 4 more pins to simulate analog output. I'd have to pick up the next size: ATMega 1284 which has 39 IO pins which I don't have on hand so I'd need to pick it up eventually. For another day as I also don't have working 5200 console for final testing,

 

Jaguar A and C button works for Right and Left respectively. Also A is red on Super Action Controller, B is purple, C is Yellow, and Option is blue. I can't change red and yellow without making left and right backward. But I can switch blue and purple.

Edited by 7800fan
Link to comment
Share on other sites

  • 4 weeks later...

Have a CV system in the mail, got it cheap off eBay. Seller said it worked but had trouble with some game, and I suspect it needs a new cart slot. I already grabbed a new one of digi-key.

 

The Intellivision adapter works fine but a few picky games like Vectron doesn't do well with 8-direction control pad so I'm looking for analog stick hack. I have the basics of CV code done and ready, waiting for the system to come in so I can test em.

  • Like 1
Link to comment
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...