What's new
I'm preparing my setup to read out all the responses from my JVS cards so you can add them to your device
While it would be great to get the the replies if it's not too much trouble, it looks like many of them are posted here, per @invzim:

In regards to revisions, updates the jvs page a bit with some pics and info from jvs-pac diags:

wiki.arcadeotaku.com/w/JVS
I suspect when we run into games with specific I/O requirements, it's mainly due to the features. During the period where I was not reporting GPIO as a feature of my board, OR2SP would give a JVS device does not meet specs error. As soon as I included it in the features, the game booted without error.

I would guess, ignoring any special I/Os like track balls and such, my I/O could have maximum compatibility by simply looking through the features of all the I/Os and reporting the most robust form of each.

I'm actually surprised by the features reported by the Sega Type 3 I/O (837-14572):
JVS version 2.0
JVS command format revison 1.3
JVS communucation system version 1.0
Number of players 2
Number of inputs per player 14 - 8 buttons
Number of coinslots 2
Number of analog input channels 8
bits pr channel 10
Number of general purpose driver outputs 20
So it isn't that different from a Type 1, but has 1 extra button per player, and a lot of extra GPIO outputs. Though I'm confused about the extra button per player. Per the pinout here, I don't see extra inputs compared to the Type 1. Maybe the 8th player buttons are reported in features, but not physically implemented?

The pinout for the Sega Type 2 is listed here. It looks like it has 22 GPIO outputs, so maybe max compatibility could come from reporting 14 bits per player and 22 GPIO.
 
Last edited:
I've found a number of the io boards report button or outputs that don't actually exist on any pin header. The rotary encoder board supposidly includes pins for buttons and outputs but has no pins for it either.

I should also note that trackball games will only work if the rotary inputs are on jvs Node 2. The type 2 io has rotary inputs but none of the trackball games will accept them unless it's on the second node.
 
I've found a number of the io boards report button or outputs that don't actually exist on any pin header. The rotary encoder board supposidly includes pins for buttons and outputs but has no pins for it either.

I should also note that trackball games will only work if the rotary inputs are on jvs Node 2. The type 2 io has rotary inputs but none of the trackball games will accept them unless it's on the second node.
Interesting. I don't know if I'll personally be motivated to do it, but I suppose a single I/O could represent itself as 2 nodes. Alternatively, I could incorporate a through port that accommodates additional JVS nodes. That would require Sense line management that isn't in place right now, though.
 
Something to consider for this project is going to be power management. I was originally planning to use the same 5v connector that plugs into stock Sega I/O and supplying power to the Mega through its 5v pins. This has a risk of bypassing any of the voltage regulation built into the board so anything out of spec has the potential to ruin the board, it also potentially conflicts with using the USB port. It seems like I have to crank up the 5v for the Chihiro to boot some games properly, so perhaps there's a chance of generating a voltage that's too high for the Mega. Apparently the onboard power input can take 6-12v and allows the USB port to be used simultaneously. It might be worth it to accept the 12v input from the stock I/O in a header on my PCB that simply has a barrel plug wired to it that plugs into the Mega's power port. There is a Vin pin on the Mega, but it may bypass some of the regulation/protection circuitry and might also conflict with USB. I'll have to look into that.
 
It might be worth it to accept the 12v input from the stock I/O in a header on my PCB that simply has a barrel plug wired to it that plugs into the Mega's power port. There is a Vin pin on the Mega, but it may bypass some of the regulation/protection circuitry and might also conflict with USB. I'll have to look into that.
12v is fine for arcade purposes.
 
There is a Vin pin on the Mega, but it may bypass some of the regulation/protection circuitry and might also conflict with USB. I'll have to look into that.
I was a little confused about this one. Apparently the Vin pin still makes use of the Arduino's onboard regulator and should still be able to safely accept 6-12v and allow optional USB port usage. What it lacks vs the onboard power jack is that it bypasses the jack's reverse polarity protection.

Reverse polarity is a bit of a concern because of the power connectors used on the stock I/O boards that I'm trying to make use of. Even on the stock type 1, I've accidentally reversed the 5v connector (the one that plugs into CN7, while the game was turned on. It won't plug in all the way, but it makes contact enough to put reverse voltage through the board. I quickly realized what I was doing and pulled it away, but not before smelling something burning... Fortunately the board still works and seems no worse for the wear.

Anyway, the same risk will come from the 12v connector, the one that goes to CN2. I can incorporate my own reverse voltage protection or go with an adapter that routes the power through the Arduino's power input jack. Either case requires a change to my PCB, and it looks like reverse voltage protection can be achieved with a single P-Channel MOSFET of appropriate specs, which would make for a cleaner design.

Another power consideration is going to be managing the outputs. Most cabinets probably have power hungry incandescent bulbs like these here. I believe the ones in my cabinet are #555 bulbs, so if I go by the ratings on that link, they draw .25 Amps. It looks like the Arduino's outputs max is 40 mA (.04A), so powering the lamps directly is not an option. The safest route is probably going to be using the outputs to drive transistors that power the lamps. So there's another change in my PCB.

Then there's the current draw on the Arduino's onboard regulator to consider... At 12v, the high end of the input voltage recommendations, this is going to be generating a lot of heat. Trying to power the lamps through the regulated power might be inadvisable... even if they can be made to fit within the total limit of around 900mA total, a safer route might be to have a 12v input and a 5v input (just like the stock Sega Type 1 I/O), using the onboard regulator powered by 12v to power the Arduino, and using the cabinet's 5v to power the lamps.

Ugh, that's a lot to consider... and all of this because I need to be able to optionally use the USB port to manage communication with the board in a configuration scenario, while allowing the board to be powered externally.
 
Another power consideration is going to be managing the outputs. Most cabinets probably have power hungry incandescent bulbs like these here. I believe the ones in my cabinet are #555 bulbs, so if I go by the ratings on that link, they draw .25 Amps. It looks like the Arduino's outputs max is 40 mA (.04A), so powering the lamps directly is not an option. The safest route is probably going to be using the outputs to drive transistors that power the lamps. So there's another change in my PCB.
Ok, so looking at wires going to the lamps on the control panel makes me think the I/O board is sinking the lamps rather than sourcing them. Each lamp has a yellow (5v) wire and then the wire to the I/O.

This makes things a little simpler. My PCB doesn't need the 5v connector to power the lamps, and can just make use of transistors/MOSFETs driven my Arduino outputs to sink the lamps.
 
Here's my latest PCB design:
Board.png

I'm still doing single sided to keep the CNC milling easier. Through better planning of which input on the Arduino goes to which input on the 60 pin header, I got it down to only 5 manually routed wires. I'm still just designing the board for OR2SP cabinet wiring because wiring every other potential input pin is going to over-complicate the PCB at this point and make a single sided PCB infeasible. Once the theory is proven on a custom PCB, it would just be a matter of enhancing the design to accommodate all potential inputs/outputs.

At the moment, I'm forgoing reverse voltage protection because I don't have any P-Channel MOSFETS on hand. I'll just be careful that the power connector is plugged in correctly. The other thing I realized was that the I/O board IS responsible for supplying 5v to some components from its 5v pins at the 60-pin connector. Rather than potentially overloading the Arduino's onboard regulator with whatever 5v peripherals are wired up, I've opted instead to take the 5v input connector from the original I/O and route it to the 5v pins at the 60 pin header. I haven't confirmed, but I suspect the 5v wires I'm seeing at the lamps are originating at the 5v pins on the I/O, so essentially that would mean the board is responsible for supplying 5v to the lamps, just not quite the way I was originally expecting.
 
Just a quick question, if your goal is to play other racers in your cab - and it's already JVS, could it make more sense to do it all digitally? As in jvs-in <PCB> jvs-out, and just modify things to fit the cab?
 
Just a quick question, if your goal is to play other racers in your cab - and it's already JVS, could it make more sense to do it all digitally? As in jvs-in <PCB> jvs-out, and just modify things to fit the cab?
With the addition of only a few more components, I can ditch the stock I/O altogether. And I've got the added bonus of making a sub $20 I/O for future JVS cabs I build.

Besides, routing signals would involve taking in a 60 pin and 40 pin connector at one set of headers and putting out a 60 pin and 40 pin connector at another set, greatly increasing the number of traces to route.

Or are you suggesting no wiring work, but have a JVS protocol interceptor that reads the ACKs and translates them to match the controls? That could potentially be a little complicated, maybe requiring 2 separate RS-485 busses so that the original ACKs don't make it to the main board. So in this scenario, one port for reading commands and replying to the main board, and another port for relaying commands to the stock I/O and reading replies back, and translating them accordingly to send to the main board. That could be cool, but not something I'd want to pursue since I also want a cheap I/O alternative for new cabinets.

As it is, I've got one cabinet and 5 motherboards (Naomi 1, Naomi 2, Chihiro (x2), and Lindbergh). My eventual goal is to build a 2nd driving cab, but I'd like a standard upright cab at some point too, without having to invest in all the parts generally needed. The Sega I/Os are kind of pricey for as little as I'm perceiving that they actually do. If a cheap Arduino can take their place, then why not do it?
 
Last edited:
Just a quick question, if your goal is to play other racers in your cab - and it's already JVS, could it make more sense to do it all digitally? As in jvs-in <PCB> jvs-out, and just modify things to fit the cab?
With the addition of only a few more components, I can ditch the stock I/O altogether. And I've got the added bonus of making a sub $20 I/O for future JVS cabs I build.
Besides, routing signals would involve taking in a 60 pin and 40 pin connector at one set of headers and putting out a 60 pin and 40 pin connector at another set, greatly increasing the number of traces to route.

Or are you suggesting no wiring work, but have a JVS protocol interceptor that reads the ACKs and translates them to match the controls? That could potentially be a little complicated, maybe requiring 2 separate RS-485 busses so that the original ACKs don't make it to the main board. So in this scenario, one port for reading commands and replying to the main board, and another port for relaying commands to the stock I/O and reading replies back, and translating them accordingly to send to the main board. That could be cool, but not something I'd want to pursue since I also want a cheap I/O alternative for new cabinets.

As it is, I've got one cabinet and 5 motherboards (Naomi 1, Naomi 2, Chihiro (x2), and Lindbergh). My eventual goal is to build a 2nd driving cab, but I'd like a standard upright cab at some point too, without having to invest in all the parts generally needed. The Sega I/Os are kind of pricey for as little as I'm perceiving that they actually do. If a cheap Arduino can take their place, then why not do it?
I know you are still early in your progress, would you happen to have a quick parts list of your initial hardware setup? I'm closely following your work but I am using an Uno and have less I/O to play with.
 
I posted this:
JVS Information extractor

To be honest, I'd love to see this having as an input any USB wheel/pad/HID that you can find in the shop and have JVS as an output. It will help a lot to play games for those that don't have space for a driving cabinet.
 
I know you are still early in your progress, would you happen to have a quick parts list of your initial hardware setup? I'm closely following your work but I am using an Uno and have less I/O to play with.
You can generally follow the parts listed in the TeensyJVS project. He's got a schematic in the comments at the top of the main code.

The RS-485 adapter is available on Amazon. It's generally referred to as MAX485 module after the main IC on it.
Here's a pack of 5. You can buy them individually, too, but it's only like $2 more for 5 vs 1: https://www.amazon.com/Max485-Chip-...&qid=1474914488&sr=8-2&keywords=max485+module

I'm not sure of the part number, but I'm using zener diodes for the 4 diodes for the sense line:

I'm handling sinking the Sense line differently than the TeensyJVS project, though. I've got an N-Channel MOSFET (RFP12N10L-ND) driven by an output from the Arduino to sink the Sense line, along with a 10k Ohm resistor similar to the Sense schematic listed in an earlier post. I'll be using the same MOSFETs to sink the lamps.

Other than that, it's just header pins and wires. It's not too bad to get all of it onto a breadboard, except I never did anything to adapt the cabinet's connectors to the breadboard since that would be more effort than I want to do since I'm attempting a custom prototype PCB anyway.
 
To be honest, I'd love to see this having as an input any USB wheel/pad/HID that you can find in the shop and have JVS as an output. It will help a lot to play games for those that don't have space for a driving cabinet.
That may be out of my range of capabilities and it seems like invzim's JVS project goal is to do something similar. I don't want to step on toes in that regard. I do like the idea, but I definitely don't currently know how to communicate with a USB controller as an input for the Arduino. Though I didn't know much at all about the JVS protocol even a month ago. :P

My secondary goal is to use the cabinet's controls on the PC in an emulation setup, but that will just be a matter of reading the inputs and outputting something over USB that the PC can use, not concerning myself with the JVS protocol in that implementation.
 
I know you are still early in your progress, would you happen to have a quick parts list of your initial hardware setup? I'm closely following your work but I am using an Uno and have less I/O to play with.
You can generally follow the parts listed in the TeensyJVS project. He's got a schematic in the comments at the top of the main code.
The RS-485 adapter is available on Amazon. It's generally referred to as MAX485 module after the main IC on it.
Here's a pack of 5. You can buy them individually, too, but it's only like $2 more for 5 vs 1: https://www.amazon.com/Max485-Chip-...&qid=1474914488&sr=8-2&keywords=max485+module

I'm not sure of the part number, but I'm using zener diodes for the 4 diodes for the sense line:

I'm handling sinking the Sense line differently than the TeensyJVS project, though. I've got an N-Channel MOSFET (RFP12N10L-ND) driven by an output from the Arduino to sink the Sense line, along with a 10k Ohm resistor similar to the Sense schematic listed in an earlier post. I'll be using the same MOSFETs to sink the lamps.

Other than that, it's just header pins and wires. It's not too bad to get all of it onto a breadboard, except I never did anything to adapt the cabinet's connectors to the breadboard since that would be more effort than I want to do since I'm attempting a custom prototype PCB anyway.
Cool thank you!
 
To be honest, I'd love to see this having as an input any USB wheel/pad/HID that you can find in the shop and have JVS as an output. It will help a lot to play games for those that don't have space for a driving cabinet.
That may be out of my range of capabilities and it seems like invzim's JVS project goal is to do something similar. I don't want to step on toes in that regard. I do like the idea, but I definitely don't currently know how to communicate with a USB controller as an input for the Arduino. Though I didn't know much at all about the JVS protocol even a month ago. :P
My secondary goal is to use the cabinet's controls on the PC in an emulation setup, but that will just be a matter of reading the inputs and outputting something over USB that the PC can use, not concerning myself with the JVS protocol in that implementation.
Do you mean your secondary goal is a Cabinet 2 USB adaptor, right?

@invzim sorry completely forgot about this:
Mini USB JVS IO board?
 
Do you mean your secondary goal is a Cabinet 2 USB adaptor, right?
Correct! That part I'm pretty sure I can handle. The idea being that the cabinet would be a controller for the PC, hopefully not needing any drivers.
 
To be honest, I'd love to see this having as an input any USB wheel/pad/HID that you can find in the shop and have JVS as an output. It will help a lot to play games for those that don't have space for a driving cabinet.
That may be out of my range of capabilities and it seems like invzim's JVS project goal is to do something similar. I don't want to step on toes in that regard. I do like the idea, but I definitely don't currently know how to communicate with a USB controller as an input for the Arduino. Though I didn't know much at all about the JVS protocol even a month ago. :P My secondary goal is to use the cabinet's controls on the PC in an emulation setup, but that will just be a matter of reading the inputs and outputting something over USB that the PC can use, not concerning myself with the JVS protocol in that implementation.
Do you mean your secondary goal is a Cabinet 2 USB adaptor, right?
@invzim is that right? Are you working on a USB2JVS so we can all use our digital and analog USB devices on any JVS arcade?
Yes it's correct.

Mini USB JVS IO board?
 
I'm getting better at cutting PCBs. I seem to be cursed by never having the correct sized drill bit. I thought for sure I needed .8mm, but that's apparently a little too small for my header pins. I've got .85 bits on order. For now I'm going with holes that are a little too big, leaving with with a smaller surface area for solder than I'd like. This should do for now, though. I'll put it together and test when I get a chance.
Cut pcb.png
 
I'm getting better at cutting PCBs. I seem to be cursed by never having the correct sized drill bit. I thought for sure I needed .8mm, but that's apparently a little too small for my header pins. I've got .85 bits on order. For now I'm going with holes that are a little too big, leaving with with a smaller surface area for solder than I'd like. This should do for now, though. I'll put it together and test when I get a chance.
Cut pcb.png
Nice! What are you using to create your PCBs?
 
Back
Top