Friday, March 9, 2018

Super Nt Firmware v4.4 - An Inadvertent Virtual Boy Compatibility Fix!

Background

A number of years back I was perusing the GamesX Nintendo controller data wiki page and noticed that the same type of signals were shared between the NES and SNES. Given that both the NES and SNES used essentially the same protocol (Clock/Latch/Data using shift registers) I figured it would be worth a try to build an adapter so that I could use my favorite SNES pad, the AsciiWare asciiPad, on the NES. After building an adapter using a NES controller cable and a SNES controller extension (socket half) I was pleased to discover that everything worked perfectly! Another pleasant surprise was that NES buttons B/A map to SNES buttons Y/B respectively!

Unfortunately, given that the SNES controller contains an extra 4021 shift register (or custom IC in later revisions) for the additional buttons, using a NES controller on the SNES doesn't work out so well. While the DPad, B, A, Select, and Start buttons function, the SNES behaves as though the right shoulder button is being held down (and possibly the other extra buttons) that results in various incompatibilities with the SNES library.

Fast forward to PRGE 2017 at the retroUSB booth. Among the giant RGB LED wall of Tetris were several AVS stations demoing new homebrew NES games. One of which was playing a Robotron/twin stick style game that had a VIRTUAL BOY controller connected to an AVS NES controller port. After confirming that the Virtual Boy uses the same type of protocol as the NES/SNES, I promptly located a spare Virtual Boy controller at the show so that I could wire up my own! I was especially interested to see how it behaves on the SNES given the possibility of working as a great option for twin stick style games.

After replacing the Virtual Boy controller cable with a SNES one I was a bit bummed with the results - NES worked as expected (tested on an Analogue NT mini), but SNES did not. Controller presses were only recognized sporadically. While I managed to verify that the button mappings were perfect for games like Total Carnage, Super Smash T.V., and Robotron 2084 (on Williams Arcade's Greatest Hits), the controller on the SNES was effectively unusable, and so the controller was shelved.

Fast forward (again), when reading the Super Nt FW v4.4 release notes I noticed an interesting bit:
NTT Data compatibility mode added under “hardware”. Turning this on will nerf the NTT data pad so that it appears to the system like a stock controller. This lets it be used on the super gameboy, street racer, starfox 2, etc. There are many games that are incompatible with it in weird ways like monopoly. Using one will cause the chance/chest cards to instantly skip.

For one reason or another I decided give my Virtual Boy SNES controller a try on the Super Nt with this new feature enabled. Lo and behold IT WORKED! While Kevtris didn't intentionally set out to "add" Virtual Boy controller support, it's a welcome surprise! There's one small quirk though - the default hotkeys for menu and reset do not respond (Select+U/D) for some unknown reason.

How-To Guide for Virtual Boy to Super Nt Controller Conversion

If you're wondering how to convert a Virtual Boy controller for use on the Super Nt or NES with adapter, here's a "How-To" guide for this particular scenario. Disclaimer: use the following information at your own risk and is provided as-is with no warranties/etc. This is a fairly basic procedure, so if you're handy with soldering tools, you shouldn't have any issues.
  1. Required parts:
    • Virtual Boy controller
      • Battery Pack or SNES AC Adapter Tap are not applicable. If connected, do not use batteries/connect to AC adapter
    • SNES/SFC controller cable donor
    • Heat shrink tubing or small zip tie (optional) for improved strain relief
  2. Verify that the Virtual Boy controller and SNES controller cable donor are in working condition
  3. Unscrew and open the Virtual Boy controller
  4. Locate, de-solder, and remove the 6 pin connector on the Virtual Boy controller PCB
  5. Prepare the SNES controller cable
    • Strip and tin the 5 conductors
    • Add a short stretch of heat shrink tubing to the SNES controller cable to provide strain relief for the cable (a small zip tie can also be used)
     
  6. Solder the 5 wires to the 5 of 6 corresponding connections on the Virtual Boy controller PCB. Use the following table for reference:
  7. Pin Name SNES Pin
    Virtual Boy PCB Pin
    Ground
    1
     6
    Data 3
    2
    N/A
    Data 2
    3
    N/A
    Data
    4
    5
    Latch
    5
    3
    Clock
    6
    4
    +5 VDC
    7
    2
    Battery DC
    N/A
    1
  8. Verify connections from the SNES controller plug to the Virtual Boy PCB
  9. Route the SNES controller cable through the Virtual Boy controller shell, and shrink the tubing so that it fits below the two walls the controller cable fits through to provide strain relief
  10. Re-assemble the Virtual Boy controller
  11. Enjoy!
The Virtual Boy triggers map to the respective SNES L/R shoulder buttons. The Right DPad maps to the respective SNES X/B/Y/A buttons.

Notes/Reminders for Super Nt usage

As previously noted, the default hotkey values for menu and reset do not work as expected on the Virtual Boy controller, and there are no plans to officially support this controller configuration in the future, despite my half-serious plea to Kevtris to add it. 😆
  1. Connect a standard SNES controller to the Super Nt 
  2. Power on the console
  3. Enable the NTT Data setting
  4. Save updated settings
  5. Turn off the Super Nt
  6. Connect Virtual Boy SNES controller to the Super Nt
  7. Power on the console!
Now You're Playing with "Virtual Boy" Power!!!

2 comments:

  1. According to the available information, Virtual Boy button inputs should map to SNES as follows :
    VB - SNES
    Right D-Pad Right - B
    Right D-Pad Up - Y
    L - Select
    R - Start
    B - Up
    A - Down
    Right D-Pad Down - A
    Right D-Pad Left - X
    Select - L
    Start - R

    The Left D-pad is mapped where the ID bits start for SNES controllers. Strange that inverting one ID bit, which appears to separate the NTT Data Controller from the Standard Controller, will make the Virtual Boy controller work with the Super Nt.

    ReplyDelete
    Replies
    1. The ID bits might explain why the hotkey doesn't work, nor does left DPad navigation on the Super Nt OSD. As for expected button mappings, see for yourself! https://www.youtube.com/watch?v=Oftxqb-aiqU

      Delete