Rotary & Cabinet Linking

Rotary & Cabinet Linking

JVS-PAC 2 supports spinners and trackballs through a rotary-capable JVS I/O board. It can also link two cabinets for two- or four-player games. Rotary input is only available with a single cabinet.

Spinners and trackballs

Use Keyboard or XInput mode. Rotary input is disabled by default and requires an I/O board with encoder inputs. A typical connection is:

JVS-PAC 2 → cabinet I/O → rotary I/O

On the OLED, use B to move to the rotary menu and A to select a profile:

ProfileMouse 1Mouse 2
1 spinnerChannel 0: XDisabled
1 trackballChannel 0: X
Channel 1: Y
Disabled
2 spinnerChannel 0: XChannel 2: X
2 trackballChannel 0: X
Channel 1: Y
Channel 2: X
Channel 3: Y

X is horizontal movement and Y is vertical. Channels 0–3 are the board’s first four encoder inputs. For two spinners, use the first and third inputs, not the first and second.

RotarySpeed sets both mice to 1x (default), 2x, 4x or 8x. Changes take effect immediately. Use SAVE CONFIG to keep them after power-off.

Mouse buttons

By default, mouse 1 uses P1 Left, Up and Right as mouse buttons. Those directions stop working as joystick inputs while mouse 1 is enabled.

Mouse buttonMouse 1Mouse 2
LeftP1 LeftP2 Button 1
RightP1 UpP2 Button 2
MiddleP1 RightNone

For a conventional button panel, change the [mouse] section in jvspac2.ini to use Button 1 and Button 2:

[mouse]
mouse1left=M_P1B1
mouse1right=M_P1B2
mouse1middle=none
mouse2left=M_P2B1
mouse2right=M_P2B2
mouse2middle=none

Use SAVE CONFIG to create the file on the SD card, then power off before removing it. Edit the file on your computer, safely eject the card and put it back before powering on.

You can use input names from the [keyboard] section, or none to leave a mouse button unassigned. Assigned inputs are removed from keyboard, gamepad and shift handling while that mouse is enabled. Missing or invalid entries use the defaults above.

Switches on Sega rotary boards are not read. Connect mouse buttons through the cabinet I/O board.

Cabinet linking

One JVS-PAC 2 can handle two linked cabinets. Connect the boards in this order:

JVS-PAC 2 → cabinet 1 I/O → cabinet 2 I/O

The Cab link menu appears when two coin-capable I/O boards are detected. The one closest to JVS-PAC 2 is cabinet 1. Auxiliary rotary or analog boards do not count as another cabinet.

Use B to find Cab link and A to choose 2 player or 4 player. Use SAVE CONFIG to keep the setting.

Cabinet input2 player4 player
Cabinet 1, P1Player 1Player 1
Cabinet 1, P2IgnoredPlayer 2
Cabinet 2, P1Player 2Player 3
Cabinet 2, P2IgnoredPlayer 4

2 player is the default. Each cabinet supplies one player, and coin slots 1 and 2 are shared between the cabinets.

4 player requires Keyboard mode. Cabinet 1 supplies coin slots 1 and 2; cabinet 2 supplies coin slots 3 and 4. The default coin keys are 5, 6, 7 and 8. Only the first two coin slots on each linked board are used.

Linked cabinets support buttons and coins only. Analog and rotary movement is not sent to the computer when two cabinet I/O boards are linked, even if it comes from a separate auxiliary board.

Four players on one Capcom I/O

A single Capcom I/O board set to four-player mode can supply all four players and coin slots directly. Select Keyboard mode on JVS-PAC 2. There is no need to change Cab link when using one cabinet I/O board.

Gamepads & Analog

Gamepads & Analog

The JVS-PAC 2 can work as two gamepads instead of a keyboard. Choose XInput for computer games and emulators, Switch for Nintendo Switch, or PS3 for PlayStation 3. You can select the mode in the OLED USB mode menu.

Changing between Keyboard and XInput takes effect immediately. Changing to, from, or between Switch and PS3 requires SAVE+REBOOT. For the menu controls and saving settings, see Setup & Operation.

XInput

XInput mode sends each player’s controls to a separate gamepad. Directions use the D-pad, Start sends Start, and a coin sends Back. The default button layout is shown below.

MAME and MiSTer shift shortcuts still work in this mode. The keyboard remains available for those shortcuts, and configured spinners or trackballs continue to work as mice.

Check the player assignments in Windows, Steam or the game if the players are swapped. XInput mode does not support Xbox consoles. Four-player setups require Keyboard mode.

On MiSTer, XInput needs the supplied user-startup.sh script installed as /media/fat/linux/user-startup.sh on MiSTer’s SD card, followed by a reboot. If you already have that file, merge the supplied block before its final exit rather than replacing your script. Use Unix LF line endings. Keyboard mode needs no script.

Nintendo Switch

Select Switch in the USB mode menu, then SAVE+REBOOT. In the Switch Change Grip/Order screen, press panel buttons 3 and 6 together. These are L and R with the default mappings.

A normal tap on P1 Start sends Plus on release. Hold it for two seconds, then release it to send Home. P2 Start sends Plus, and each player’s coin sends Minus.

Switch mode uses digital panel controls. Keyboard shift shortcuts, rotary mice and JVS analog controls are not active.

PlayStation 3

Select PS3 in the USB mode menu, then SAVE+REBOOT. Each player’s Start button sends Start on a normal tap. Hold it for two seconds, then release it to send PS on that player’s controller. Coins send Select.

As with Switch mode, keyboard shift shortcuts, rotary mice and JVS analog controls are not active. Other PlayStation consoles are not supported.

Button layout

The six panel buttons use the following defaults. Both players share the same layout.

Panel buttonXInputSwitchPS3
1 — top leftXYSquare
2 — top middleYXTriangle
3 — top rightLBLL1
4 — bottom leftABCross
5 — bottom middleBACircle
6 — bottom rightRBRR1

Changing the buttons

If the default layout suits you, there is nothing to edit. Otherwise, choose SAVE CONFIG, power off, and edit jvspac2.ini on the microSD card. Safely eject the card before putting it back. Changes take effect at startup.

Each output mode has its own section. These are the defaults:

[xinput]
button1=X
button2=Y
button3=LB
button4=A
button5=B
button6=RB

XInput choices are A, B, X, Y, LB, RB or none. The six mappings apply to both players. Start and Back cannot be remapped here, and LT/RT are not available as panel-button assignments.

[switch]
button1=Y
button2=X
button3=L
button4=B
button5=A
button6=R
start=plus
coin=minus

Switch choices are A, B, X, Y, L, R, ZL, ZR, minus, plus, left_stick, right_stick, home, capture or none. Names follow the Switch Pro Controller layout. P1 Start’s long press still sends Home; its normal tap uses the start setting.

[ps3]
button1=square
button2=triangle
button3=L1
button4=cross
button5=circle
button6=R1
start=start
coin=select

PS3 choices are square, cross, circle, triangle, L1, R1, L2, R2, select, start, left_stick, right_stick, ps or none. A long press on either player’s Start still sends PS; a normal tap uses the start setting. Both players share the button, start and coin settings in each mode.

Analog controls

Analog controls require XInput mode and a JVS I/O board with analog inputs. They are off by default. Select a profile in the OLED Analog menu: racing, 2player or custom.

The channel numbers below start at zero, so channel 0 is the first analog input on the I/O board.

JVS channelRacing2player
0SteeringP1 stick vertical
1AcceleratorP1 stick horizontal
2BrakeUnused
3UnusedUnused
4UnusedP2 stick vertical
5UnusedP2 stick horizontal
6–7UnusedUnused

Racing sends steering to controller 1’s left-stick X axis, accelerator to the right trigger, and brake to the left trigger. The presets assume low JVS values at left/up or with pedals released, and high values at right/down or with pedals pressed. Use custom if your cabinet is wired differently.

Cabinet linking currently supports buttons and coins only. Analog inputs are not passed through when two cabinet I/O boards are linked, including inputs from a separate analog board.

Custom analog mapping

Custom lets you assign up to eight JVS analog inputs to the two XInput controllers. Edit the [xinput-analog] section of jvspac2.ini. This example assigns the first input to controller 1’s steering axis and reverses its direction:

[xinput-analog]
profile=custom
analog0=left_thumb_x
analog0invert=true
analog0controller=1

Use analog0 through analog7 for the eight channels. Each has a destination, an invert setting (true or false), and a controller number (1 or 2).

DestinationControl
left_thumb_xLeft stick horizontal
left_thumb_yLeft stick vertical
right_thumb_xRight stick horizontal
right_thumb_yRight stick vertical
left_triggerLeft trigger
right_triggerRight trigger
noneUnused

Use each destination only once per controller. Leave channels your I/O board does not have set to none. Unavailable channels do not automatically reset their assigned controls to neutral.

If a wheel or stick moves backwards, or a pedal reads pressed when released, change that channel’s invert setting. Save the file and restart to test. The USB output mode must still be XInput.

MiSTer for JVS CRT cabinets

Introduction

This page is about getting MiSTer running in your 31KHz/Tri-Sync JVS cabinet as quickly as possible.  

Hardware

  • DE10-Nano kit
  • SDRAM module
  • micro SD card, I use a 16GB card that has 14GB unused
  • HDMI to VGA dongle, with analog audio out.
  • JVS-PAC 2 🙂
  • USB OTG adapter
  • 3.5mm to RCA adapter for Audio

In other words, the only MiSTer specific hardware you need is the SDRAM module.

Part 1 – Installing MiSTer

Step 1 – Preparing the SD card

First you need to install “Mr. Fusion – Universal MiSTer installation image” on an SD card, https://github.com/MiSTer-devel/mr-fusion.  You do this from a normal computer.
 

Step 2 – Power up and update MiSTer 

For the initial setup, it’s probably best to do it on a desk with a keyboard, an ethernet cable and a normal HDMI monitor.

Boot up MiSTer, press F12, navigate to “Scripts”, and choose “update”, let it do it’s thing.

Step 3 – Making MiSTer useful

How MiSTer organizes cores, roms, launching files etc is a bit of a moving target and can be confusing and frustrating to set up from scratch.   Luckily, there is a script that does everything for you:

https://github.com/theypsilon/Update_All_MiSTer

Run this script, and it should take care of making your MiSTer useful.

Part 2 – Getting your MiSTer cab ready

Step 1 – Configure video

Before running the DE10-Nano in your cab, you will need to do a couple of changes.  Boot up MiSTer, press F12, navigate to “ini settings” and make the following changes:

video_mode=640×480 60Hz 

vsync_adjust=low_lag

vscale_mode=Use integer scale only

direct_video=on

video_info=10 seconds

For 31kHz only cabinets, also set

forced_scandoubler=on

The video mode setting above is just for the menu when booting, games will run at native resolutions, or line-doubled for 31kHz only cabinets.

Step 2 – Hardware installation

This is pretty straight forward, plop the RAM module in place if you haven’t already and just connect everything together.  

Power

DE10 power should be sourced from the same source as your cabinets DC power supply, or better yet – use your cabinets DC supply directly.  

The HDMI to VGA dongle should work without any external supply, the one I got works just fine without connecting an external power supply.

Audio & Video

Both Audio & Video will go through the HDMI dongle, use the 3.5mm to RCA adapter for audio.

Controls

Use a USB OTG adapter between the DE10-Nano and the  JVS-PAC 2.  The JVS-PAC 2 has a specific shift mode for mister that lets you switches cores and change settings without using a separate keyboard.

 

 

 

Part 3 – Details for the technically inclined

MiSTer input system (stuff doesn’t work..!)

The input system of MiSTer is a bit of a mess when it comes to arcade cores.  MiSTer cores can consume gamepad and/or keyboard input from the Linux subsystem, which makes sense from a console/retro-computer perspective, but no so much for arcade, where you have one cabinet.  It’s not obvious where an arcade core should look for things like TEST, SERVICE, TILT etc, so naturally, it’s either not implemented or varies from core to core.

Gamepad input

For a console/computer core, one physical USB device will be player 1, another physical device can be player 2.  This is all strongly tied to low-level USB workings, so input from one USB device is constrained to one player. 

Since gamepads are not equal, you will also have to remap your gamepad.  To complicate matters further, MiSTer can take input from a physical USB keyboard and present it to a core as ONE gamepad, not two..  There is a hack to get around this, but I will not get into that.

Keyboard

To avoid the complexities of the MiSTer input system, arcade cores can also consume keyboard input where there is no artificial player1/player2/cabinet limitations.  Most cores support this, and most cores use the standard MAME mapping.

Getting out of trouble / limitations

If you for whatever reason used the “Define joystick buttons” of MiSTer and and pressed something on your cab – you now have a virtual gamepad, which will cause issues with things that consume keyboard input, like arcade cores. 

To fix this, have a look in the “config/input” directory on the MiSTer SD card, and delete the .map files you have there.  

Unfortunately a keyboard device like the JVS-PAC 2 can’t be both a “virtual gamepad” and a keyboard, unless you are super careful how you set up the mapping in MiSTer, so the JVS-PAC 2 is probably not a great option if you want to run retro-computers/consoles AND arcade cores in your cabinet – something you shouldn’t try in the first place, as it’s frowned upon by purists 🙂

In the absence of an arcade specific input system in MiSTer, I suspect MAME keyboard input will be the standard going forward.

If the particular core you want doesn’t support keyboard input or it uses strange keys, support the developer via Patreon and tell them you want standard MAME keyboard input.  

Video output

In the early days of MiSTer, there was a need for analog RGB output.  This was solved by making an open source “IO board” that connects to the 40 pin GPIO1 header on the DE10-nano, using 20 pins for video – 18 bits for RGB and 2 for sync.  There are a couple of issues with this and the current implementation

  • No video DAC, analog RGB is generated simply by using resistors on the GPIO signals, without an op-amp to ensure correct output impedance.
  • No buffer on sync lines, it will be 3.3V instead of 5V – this is usually not an issue
  • Although the datasheet for the DE10-nano states the GPIO 1 pins are protected, there is nothing in the schematic that reflects this
  • As the number of available GPIO pins on the header is limited, you “only” get 18 bit RGB, i.e. 262k colors vs 16.7m with the HDMI dongle.

The first three points can be solved with better hardware on the IO board, but it’s not really needed as you have the direct_video option via HDMI.

HDMI and direct_video to RGB

The FPGA on the DE10-Nano has 24 pins routed to an ADV7513 HDMI transmitter.  This is just a transmitter, it’s the FPGA’s job, i.e. the core, to make sure that what’s transmitted is HDMI compliant when it comes to resolutions and refresh rates.  This fact is utilized with direct_video, where it violates HDMI resolutions and refresh rates and simply transmits core native video.  Your HDMI flat panel monitor will not like this, but the HDMI-to-VGA dongle doesn’t care and will output a 24 bit RGB signal.

Apart from more colors and a proper video signal, the benefits of the dongle is they’re very cheap and do not risk damaging the FPGA due to mishaps when hooking up a monitor.

Audio output

The DE10-nano does not have a dedicated audio output, apart from digital audio via HDMI.  The open source “IO board”  provides analog audio utilizing an incredibly simple circuit consisting of 6 capacitors and 4 resistors, which is not known for stellar audio quality. The IO board also has the option of outputting TOSlink, that you can feed to an external audio DAC if you get a special 3.5mm cable or adapter.

Analog audio from HDMI

Utilizing a HDMI to VGA dongle as described above, it will extract the digital audio from the HDMI stream and convert it to analog using a DAC.

 

 

MAME for 31kHz Cabinets

Introduction

This little write-up aims to take the magic out of this fantastic setup, make it accessible for everyone, and get you up to speed in a couple of hours instead of a couple of days.

The goal of this MAME setup is:

  • Ease of setup and use, something that works as much of out the box as possible
  • “Perfect” Image quality 
  • Optimal for 31 kHz monitors, like the monitor in my Naomi Universal cabinet 🙂

Hardware

I bought a refurbished Dell Optiplex 9010 SFF, Quad Core i5-3570 3.4GHz / Radeon 6450 1GB / 8GB RAM.  It’s almost ideal, except that it’s too wide to fit through the base door of the cab.  I chose this model for a couple of reasons:

  • Has ‘built-in’ Windows 7 license, most name-brand PC’s do.
  • Plenty fast enough
  • Has a crt-emudriver compatible video card
  • Quiet

To make it a little snapper to boot and work with, I installed a Crucial BX500 240GB 2,5″ SSD.

A JVS-PAC 2 goes without saying 🙂

Part 1 – Windows, GroovyMAME & CRT Emudriver

Step 1 – Install Windows

I found a torrent that had updated versions of Windows 7 ISO images, made a USB key and picked Win 7 Professional OEM x86.  Update late 2023: Activation of windows 7 was only possible using the phone service. I also had to manually download two windows update patches to get the network driver package from Dell installed and to get Windows update running.

A few post-install steps:

  • Press left shift until a popup about sticky keys appear – disable everything.
  • Make sure device manager has drivers for the hardware you’re running (except video card)
  • Control Panel\Hardware and Sound\Power Options\Edit Plan Settings – disable sleep and turning off display
  • Install chrome
  • Run windows update until it’s happy

Step 2 – Download GroovyMAME 0.220 & CRT Emudriver 2.0

GroovyMame and Emudriver runs in tandem.

Head over to GroovyMAME http://forum.arcadecontrols.com/index.php?board=52.0, GroovyMAME sticky topic. 

The post is a little confusing and too long, follow the links to the Eiusdemmodi forun and grab the appropriate CRT Emudriver 2.0 package for your video card.

For GroovyMAME there is a google drive link in the same topic, you will need 7Zip to extract it.

Step 3 – Install CRT Emudriver

At this point, do yourself a big favor and use a cable that only has RGB, sync and ground.  This will ensure that whatever you’re doing on your desk will be the same when you move machine to a cabinet.  If you do this, you can also ignore everything that’s written about EDID emulation, monitor detection and whatnot.  You can easily make one yourself with a couple of VGA breakout from eBay:

 The Emudriver needs to tweak windows a bit, so first time you install it will ask you to enable “TESTSIGNING”, say yes, reboot, run install again.  Your desktop should now say “Test Mode” in lower right corner.

Step 4 – install groovyMAME

Extract GroovyMame to c:\mame, create folder c:\roms and change rompath entry in mame.ini to:

rompath roms;c:\roms

Drop a few roms in the roms directory.  At this point, MAME will not run properly.

Step 5 – Make groovyMame and EmuDriver do it’s thing

Run vmmaker that came with the driver.

“Edit settings”, set monitor type to “Arcade 31.5kHz – high resolution”.  Click edit monitor presets, and change this entry (modified parameters highlighted) to:

monitor “arcade_31”, “Arcade 31.5 kHz – high resolution”, “4:3” crt_range0 31400-31500, 49.50-65.00, 0.940, 3.770, 1.890, 0.349, 0.064, 1.017, 0, 0, 384, 512, 0, 0

The changes accomplishes:

  • Vertical resolutions >480 for games that have more than 240 lines
  • Disable interlaced modes that will mess with MAME

Click the “MAME” tab, navigate to the mame64.exe you extracted in step 4.

Check Export Monitor settings to GroovyMame

Check “Get Video Modes from MAME.XML”.

Check “Generate XML from MAME executable”.

Verify that “Mode table method” is set to “Dynamic”.

OK it, back to main menu, click “Generate Modes” – this will query MAME and generate all needed video modes.

Finally, click “Install modes”

Step 6 – Verify mame

At this point, you should have a working system that will look fantastic.

Mortal Kombat 3 is a good game to test with as it has odd resolution and refresh rate.  When launching mk3, the info screen should say that switchres use “400 x 512p 54.707 Hz 31.402kHz”

Street Fighter 2 is another good game to test with, the info screen should say that switchres use “768 x 480 59.637 Hz 31.429 kHz”.  Verify that the intro sequence does not tear.

If you want scanlines (you do), change the effects line in mame.ini to:

effect scanlines.png

I find the scanlines do not look quite right, so for crisper scanlines I use this , just right-clock and save it in your C:\mame\artwork folder.

Part 2 – Attract Mode frontend

http://attractmode.org/download.html

Extract to c:\attract

Launch attract, it should ask if detected emulators should be imported – say yes.  It will now launch, and display the test roms you have in your c:\roms folder, but will not launch them properly.

[TAB] to configure , navigate to “Emulators” -> “mame”, change “Working Directory” to “c:\mame”, ESC back to game list, you should be able to launch the games.

Add more roms

After dropping some more roms into the c:\roms directory, 

[TAB] to configure, navigate to “Emulators” -> “mame”, scroll down to “Generate Collection/Rom List”, “Overwrite existing ‘mame’ list?” -> yes, 

Disable intro video

[TAB] to configure screen, “Intro”, change “Play Intro” to No.

Part 3 – Prepare PC for cabinet

This would be a good time to connect the JVS-PAC 2, you will see that windows installs drivers the first time you connect it.  Don’t worry about JVS at this point.

We want windows to run in 640×480 60Hz, and we want Attract Mode to launch automatically on boot.

Run windows in 640×480 60Hz

Right click on desktop, Screen Resolution, “Advanced settings”, “List All Modes”, pick “640 by 480, True Color (32 bit), 60 Hertz”, “OK”, “OK”.

Since you earlier decided to make your life easy with a special VGA cable, this will “stick” when you move the computer to a cabinet.

Launch Attract Mode at startup

Create a batch file c:\attract\start-attract.bat (you can use notepad):

timeout 7
c:\attract\attract.exe

I experienced windows stealing focus from Attract Mode, resulting in keyboard input not working – the timeout 7 takes care of that.

Make it launch at startup:

Windows start -> All Programs -> Right click “Startup” -> “Explore”

Right click, “New” -> “Shortcut”, navigate to the batch file you just created., 

reboot machine to verify.

FAQ/Issues

Known issues / FAQ

SD-Card insertion while unit is powered on

Depending on the PC connected to the JVS-PAC 2, you may experience that the unit freezes if you insert an SD card while powered. Fix is to simply insert the SD card before connecting the unit to the PC.

Saving configuration doesn’t work

Older firmware had a bug affecting writing to cards formatted with exFAT. This is fixed in the current firmware. Update the firmware, or use a FAT32-formatted card as a workaround on older firmware.

FAQ

Do I need more than one JVS-PAC 2 for a cabinet with 2 players?

No you do not, the JVS-PAC 2 talks with the I/O board and reads both players. With cabinet linking or a Capcom I/O board in four-player mode, you get up to 4 players from the same JVS-PAC 2. Four players requires Keyboard mode; gamepad modes provide two controllers.

Does it support cabinet analog controls?

Yes, in XInput mode. Racing, two-player and custom mappings are available. Analog input is disabled by default; select a profile from the OLED menu. Analog controls are not supported when two cabinet I/O boards are linked.

Can this be used with XBOX 360?

No it can’t. XInput support on a PC does not make it compatible with an Xbox 360 console.

Can this be used with the PS3?

Yes. Select PS3 in the OLED USB mode menu, then SAVE+REBOOT. It provides two controllers using the cabinet buttons and joysticks. JVS analog controls and rotary mice are not supported in PS3 mode.

Can this be used with the PS4?

Unfortunately no.

Is XInput supported?

Yes. Select XInput in the OLED USB mode menu for two gamepads, with configurable buttons and analog mappings. Use SAVE CONFIG to keep the setting.

Setup & Operation

Setup & Operation

Introduction

Out of the box, the JVS-PAC 2 behaves like a keyboard, suitable for use with MAME without any user configuration. In other words, if you have a working MAME setup, you can simply connect the JVS-PAC 2 and things should work.

Setup and configuration

Connect the cabinet’s JVS I/O board to the JVS-PAC 2, and the JVS-PAC 2 to your computer or console using a data-capable USB cable. Power off before connecting or reseating JVS cables.

Press B to move through the OLED menus, and A to change a setting. Choose SAVE CONFIG to keep your settings on the microSD card, and wait for it to finish before powering off.

The USB mode menu lets you choose Keyboard, XInput, Switch or PS3. Keyboard uses the mappings below. XInput provides two gamepads and supports analog controls. Switch and PS3 each provide two digital controllers, without keyboard, mouse or analog output.

Changes between Keyboard and XInput take effect immediately. Changing to, from, or between Switch and PS3 requires SAVE+REBOOT. Menus for analog and rotary controls appear when suitable hardware is connected; analog also requires XInput mode.

Controlling MAME and MiSTer – shift mode

In MAME, to quit games, control volume, pause a game etc, you would normally use a keyboard. The JVS-PAC 2 makes this easy by having the 1P Start button work a little differently. Choose Off, Mame ESC, Mame Full, Mister Core or Mister Full in the OLED menu. Shift mode works with both Keyboard and XInput output.

No shift mode

If you don’t want the shift key functionality, choose Off.

Mame ESC – exit games only

This is the default shift mode. Hold 1P Start for more than two seconds, then release it to send ESC and exit the game. A normal tap sends the key configured for 1P Start on release.

Mame Full

Mame Full adds the shortcuts below to the long-press ESC function. Activate by pressing and holding 1P Start, then one of the inputs below. Using a shortcut cancels the long-press action.

InputKeyboard
Player 1 leftEnter
Player 1 rightTab – enter MAME menu
Player 1 upGrave (`) – adjustments in MAME
Player 1 downp – pause MAME
Player 1 button 15 – increase credit
Player 1 button 2INS – speed up MAME
Player 1 button 3F2 – MAME test key

MiSTer shift modes

Mister Core lets you open core selection by holding 1P Start for more than two seconds, then releasing it. This sends Alt+F12. Mister Full adds the shortcuts below, plus volume up and down on Player 1 up and down. Hold 1P Start, then use the input. Using a shortcut cancels the long-press action.

InputKeyboard
Player 1 leftEnter
Player 1 rightF12 – MiSTer menu

Default Keyboard Mapping

This section details the keys sent in Keyboard mode, based on cabinet input. The mapping is tailored for use with MAME. Coin slots 3 and 4 send 7 and 8, and the tilt input sends T.

Cabinet related

Cabinet InputKeyboard
credit increase slot 15
credit increase slot 26
player 1 service button9
player 2 service button0
test buttonF2

Player input

 Player 1Player 2Player 3Player 4
Start1*234
Leftleft keydiKeypad 4
Rightright keygkKeypad 6
Upup keyrjKeypad 8
Downdown keyflKeypad 2
Button 1left CTRLaright CTRLKeypad 0
Button 2left ALTsright SHIFTKeypad comma
Button 3space keyqEnterKeypad enter
Button 4left SHIFTw  
Button 5ze  
Button 6xk  
Button 7cj  
Button 8vl  

*) If a shift mode is enabled, a normal tap on 1P Start sends “1” on release.
Player 3 and 4 require either a Capcom I/O in four-player mode or a linked setup. Four-player output uses Keyboard mode.

Changing keyboard layout

If you have special needs, or want to wire up an extra button for non-game use, you can change the keyboard mapping by editing jvspac2.ini, generated when saving the configuration. Power off before removing the card. Edit the entries under [keyboard], safely eject the card, then put it back and power on.

For example, M_P1B1=KEY_Z assigns player 1 button 1 to Z. Use KEY_NONE to disable an input’s keyboard output. Shift shortcuts remain fixed. The following keys are available, along with KEY_VOLUMEUP, KEY_VOLUMEDOWN and KEY_MUTE:

KEY_NONEKEY_MKEY_3KEY_RIGHTBRACEKEY_F7KEY_LEFTKEY_KP8 KEY_KPCOMMA 
 KEY_NKEY_4KEY_BACKSLASHKEY_F8KEY_DOWNKEY_KP9KEY_LEFTCTRL
 KEY_OKEY_5KEY_HASHTILDEKEY_F9KEY_UPKEY_KP0KEY_LEFTSHIFT
 KEY_PKEY_6KEY_SEMICOLONKEY_F10KEY_NUMLOCKKEY_KPDOTKEY_LEFTALT
KEY_AKEY_QKEY_7KEY_APOSTROPHEKEY_F11KEY_KPSLASH KEY_LEFTMETA 
KEY_BKEY_RKEY_8KEY_GRAVEKEY_F12KEY_KPASTERISKKEY_COMPOSEKEY_RIGHTCTRL
KEY_CKEY_SKEY_9KEY_COMMAKEY_SYSRQKEY_KPMINUSKEY_POWERKEY_RIGHTSHIFT
KEY_DKEY_TKEY_0KEY_DOTKEY_SCROLLLOCKKEY_KPPLUSKEY_KPEQUALKEY_RIGHTALT
KEY_EKEY_UKEY_ENTERKEY_SLASHKEY_PAUSEKEY_KPENTERKEY_F13KEY_RIGHTMETA
KEY_FKEY_VKEY_ESCKEY_CAPSLOCKKEY_INSERTKEY_KP1KEY_F14 
KEY_GKEY_WKEY_BACKSPACEKEY_F1KEY_HOMEKEY_KP2 KEY_F15 
KEY_HKEY_XKEY_TABKEY_F2KEY_PAGEUPKEY_KP3KEY_F16 
KEY_IKEY_YKEY_SPACEKEY_F3KEY_DELETEKEY_KP4 KEY_F17 
KEY_JKEY_ZKEY_MINUSKEY_F4KEY_ENDKEY_KP5 KEY_F18 
KEY_KKEY_1KEY_EQUALKEY_F5KEY_PAGEDOWNKEY_KP6 KEY_F19 
KEY_LKEY_2KEY_LEFTBRACEKEY_F6KEY_RIGHTKEY_KP7 KEY_F20 

Firmware update

Firmware update

The firmware can be updated using a standard Micro SD card.  The card must be formatted with FAT filesystem.

Download zip file below, and extract files to root of sd card.

Update Procedure

  1. Keep  both A and B buttons pressed while connecting the USB cable – the display will show that firmware update is active.
  2. Follow instructions on screen

Firmware

2026-10-17 The “I’m still here release” – new JVS & USB framework, support for analog, rotary, xinput, PS3 and Switch.  Better MiSTer support.   Exa/TD-IO JVS-Dash (1000Hz).

2021-02-15 MiSTer compatibility, changed default player 2 button 5 from I to E (MAME standard).

2021-01-13 Fix bug where coin stops working if IO board is rebooted or reconnected while JVS-PAC 2 remains powered

2020-08-02 A screensaver will kick in after 5 minutes to preserve OLED, hold B button for 2 seconds to wake it up.  Internal memory optimization.

2020-06-30 Fix bugs related to 3 and 4 player inputs, added JVS input TILT1

2019-10-24 Correctly Identify IO board in G-Balance cabinets

2019-06-03 Fix bug with IO boards without any player inputs, fix IO board error counter reset, identify Taito RFID board

2019-06-02 Fix keyboard keys ALT,CTRL and SHIFT.  All users should update to this version.

2019-04-22 Initial release

Firmware update problems

Message: Blank screen on startup

Cause: You’re probably touching some of the components on the PCB

Fix: Disconnect, take care to not touch anything but the buttons and try again.

Message: card bad/missing 

Cause: There is no card inserted, or the card is not accessible on the electrical level by the JVS-PAC 2.

Fix/Solution: Try another card.

Message: card format error 

Cause: The file system is not readable by the JVS-PAC 2.

Fix/Solution: Verify that the card has a FAT filesystem on it.  The JVS-PAC 2 is not picky about which FAT version (FAT32/exFAT etc), or computer system used to prepare the card.

Introduction

JVS-PAC 2

The JVS-PAC 2 is a small device that lets you use a computer, Nintendo Switch or PlayStation 3 in your JVS cabinet with a minimum of hassle. It is the successor to the original JVS-PAC.

It talks to your cabinet’s I/O board like a JVS game, and sends the controls over USB. By default it behaves like a keyboard with standard MAME mappings, so if you already have MAME working, there is very little to set up. You can also choose two XInput gamepads, or controller output for Switch and PS3.

The idea is still the same: use the controls and wiring already in your cabinet, and make it easy to swap back to a JVS game. Your cabinet stays original 🙂

Features

  • Keyboard output with standard MAME mappings and configurable keys
  • Two XInput gamepads, with configurable panel buttons
  • Nintendo Switch and PS3 output, with two controllers and configurable buttons
  • Supports JVS-DASH (exA-Arcadia/td-io)
  • Analog controls in XInput mode: racing and two-player presets, or custom mappings for up to eight JVS analog inputs
  • Up to two spinners or trackballs as USB mice, using a rotary-capable JVS I/O board
  • MAME and MiSTer shift shortcuts, so you can use menus and quit games without reaching for a keyboard
  • Four-player keyboard output with a Capcom I/O in four-player mode, or by linking two cabinets
  • OLED menu for configuration, and firmware updates via microSD
  • Four mounting holes, with screws and PCB standoffs included

A few things to be aware of

The output modes have different uses. Analog controls require XInput, while four-player setups use keyboard output. Switch and PS3 modes use digital panel controls; Xbox consoles and other PlayStation consoles are not supported.

Spinners, trackballs and analog controls need an I/O board that can read them. Cabinet linking currently supports buttons and coins only, not analog or rotary movement.

Getting started

Have a look at operation and configuration for the settings and mappings. If you have an older firmware, visit the firmware update page first.

Short introduction to JVS

JVS, or JAMMA Video Standard, is the standard used to connect the game board and I/O board in many arcade cabinets. The I/O board reads the joysticks, buttons and coins, so the game board does not need a separate connection to every control.

JVS also specifies the video (HD-15), audio (RCA) and power (JST VL) connectors. Unlike old JAMMA, the controls go through a separate I/O board. The Japanese documentation gave Google Translate and AltaVista Babelfish a fair bit of work back when I started this 🙂

The JVS-PAC is not an ultimarc.com product – and I am not affiliated in any way with ultimarc.com. (I am however a happy customer, and Andy didn’t mind me using the name JVS-PAC)