What's new
I took a semi-break from this to work on the GD-EMU tray but I ordered some shift registers and 7-segment displays and was able to write a small program that simulates the demo loop of the VS cabs. you can see my setup and a small portion of the loop here:
https://www.instagram.com/p/BFt09XmzGLq/?taken-by=twistedchu

The timing is all done by eye/guessing so I'm sure it's off a bit but most of the sequences look right except for the "blinking eyes" animation (just because the timing is different for every frame and I couldn't be bothered to figure it out).
------------
That didn't really help with interpreting the billboard output data but it did help me get an understanding on how to output to a 7-segment.

The last couple of days I wrote another program that polls the data on the pins and writes out the to the serial console in the Arduino IDE. this lets me compile output data identical to what MetalliC provided above only from actual hardware. I also have the added benefit of placing a time stamp on every record so I can better understand the timing.

I've discovered that data that comes out in "groups" are typically spaced about 16ms apart (give or take 1ms). I also discovered that the Arduino is fast enough that (though rare) I would sometimes get an erroneous reading when only some of the pins had switched to the next value. so I added some error checking code where if it determine the pins changed states it would read it twice and only write out if both new reads matched. I haven't had a single bad read since.

I've run this through the test modes in Virtua Striker and VOOT.. .Virtua Striker just sends 2 codes during the "check" for each side and then stops one of them on each side is different from any of the Virtua Tennis codes I believe it's related to the winner lamp. I also noticed that the clear codes are in a different order than Virtua tennis but they're all the same codes.

in VOOT test mode it sends codes out like crazy but looking at the data it's just sending "8" to all of the displays over and over again, there are a couple of codes in there that I don't understand 0x76 and 0xFE which I believe are both related to the winner lamps since they end in binary 110.

I also saw 0x00 pop up a few times when the output test is first activated, though 0x00 is what the pins normally output for games that don't support the billboard so who knows if this is a valid code or just something that pops up when initialized.

The next step is hooking this up to the model 3PCBs then I'm going to modify my write out code a bit to highly any unknown codes, hook this up to the model 3 board and play a complete game and a few VS rounds to see what comes up.

I might do the same with the NAOMI games as well, hopefully we can compile a list of all valid billboard codes and then work on figuring out what they mean.
 
Here are some Logs:
I've taken to labeling Player 1 7-segments "A" and "B" and player 2 segments "C" and "D" (left to right).
the number at the beginning of each line is the Arduino time stamp in milliseconds.

Virtua Striker 2 Ver.2000 (Virtua Striker 3 seems to have the exact same output):
Attract mode loop, runs about once per loop
108880 0x05 Digit D - clear
108898 0x07 Digit B - clear
108914 0x01 Digit C - clear
108931 0x03 Digit A - clear
108948 0x06 Winner Lamps - P2 Winner Lamp Off
----------
109004 0x0E Winner Lamps - (unknown) clear?
----------
112141 0x07 Digit B - clear
112157 0x05 Digit D - clear
112175 0x03 Digit A - clear
112191 0x01 Digit C - clear
112207 0x16 Winner Lamps - P1 Winner Lamp Off
----------
112265 0x0E Winner Lamps - (unknown) clear?

Output Test - "1P Side Check"
438679 0xF0 UNKNOWN
438695 0x76 Winner Lamps - (unknown)

Output Test - "2P Side Check"
469874 0x60 UNKNOWN
469892 0x66 Winner Lamps - (unknown)

Output Test - "Clear Check"
369550 0x07 Digit B - clear
369566 0x03 Digit A - clear
369583 0x05 Digit D - clear
369600 0x01 Digit C - clear
369616 0x16 Winner Lamps - P1 Winner Lamp Off
----------
369674 0x0E Winner Lamps - (unknown) clear?



Virtua Tennis (Virtua Tennis 2 seems to have the exact same output):
When first booted:
656878 0x0E Winner Lamps - (unknown) clear?
656894 0x16 Winner Lamps - P1 Winner Lamp Off
----------
656926 0x06 Winner Lamps - P2 Winner Lamp Off
Attract mode loop, runs about once per loop
842634 0x03 Digit A - clear
842650 0x07 Digit B - clear
842668 0x01 Digit C - clear
842684 0x05 Digit D - clear
842700 0x0E Winner Lamps - (unknown) clear?
----------
842756 0x06 Winner Lamps - P2 Winner Lamp Off

Output Test - "1P Side Check" (continues looping until cleared)
950706 0x03 Digit A - clear
950722 0xFF Digit B - 0
950738 0x16 Winner Lamps - P1 Winner Lamp Off
----------
951725 0x7B Digit A - 1
951742 0x5F Digit B - 5
----------
952744 0x3B Digit A - 3
952762 0xFF Digit B - 0
----------
953764 0xDB Digit A - 4
953781 0xFF Digit B - 0
----------
954784 0x03 Digit A - clear
954801 0xAF Digit B - A
----------
955804 0xFB Digit A - 0
955821 0xFF Digit B - 0
955838 0x36 Winner Lamps - P1 Winner Lamp Flashing
----------
956824 0x7B Digit A - 1
956840 0x7F Digit B - 1
----------
957844 0xBB Digit A - 2
957860 0xBF Digit B - 2
----------
958864 0x3B Digit A - 3
958880 0x3F Digit B - 3
----------
959884 0xDB Digit A - 4
959900 0xDF Digit B - 4
----------
960904 0x5B Digit A - 5
960920 0x5F Digit B - 5
----------
961923 0x9B Digit A - 6
961940 0x9F Digit B - 6
----------
962942 0x1B Digit A - 7
962960 0x1F Digit B - 7
----------
963962 0xEB Digit A - 8
963979 0xEF Digit B - 8
----------
964982 0x6B Digit A - 9
964999 0x6F Digit B - 9
----------
966002 0x03 Digit A - clear
966019 0xFF Digit B - 0
966036 0x16 Winner Lamps - P1 Winner Lamp Off

Output Test - "2P Side Check" (continues looping until cleared):
1136827 0x01 Digit C - clear
1136843 0xFD Digit D - 0
1136861 0x06 Winner Lamps - P2 Winner Lamp Off
----------
1137847 0x79 Digit C - 1
1137863 0x5D Digit D - 5
----------
1138867 0x39 Digit C - 3
1138883 0xFD Digit D - 0
----------
1139887 0xD9 Digit C - 4
1139903 0xFD Digit D - 0
----------
1140907 0x01 Digit C - clear
1140923 0xAD Digit D - A
----------
1141926 0xF9 Digit C - 0
1141943 0xFD Digit D - 0
1141959 0x26 Winner Lamps - P2 Winner Lamp Flashing
----------
1142946 0x79 Digit C - 1
1142963 0x7D Digit D - 1
----------
1143966 0xB9 Digit C - 2
1143983 0xBD Digit D - 2
----------
1144985 0x39 Digit C - 3
1145003 0x3D Digit D - 3
----------
1146005 0xD9 Digit C - 4
1146022 0xDD Digit D - 4
----------
1147025 0x59 Digit C - 5
1147041 0x5D Digit D - 5
----------
1148045 0x99 Digit C - 6
1148061 0x9D Digit D - 6
----------
1149065 0x19 Digit C - 7
1149081 0x1D Digit D - 7
----------
1150085 0xE9 Digit C - 8
1150101 0xED Digit D - 8
----------
1151105 0x69 Digit C - 9
1151121 0x6D Digit D - 9
----------
1152124 0x01 Digit C - clear
1152141 0xFD Digit D - 0
1152157 0x06 Winner Lamps - P2 Winner Lamp Off

Output Test - "Clear Check"
1153111 0x07 Digit B - clear
1153127 0x03 Digit A - clear
1153144 0x05 Digit D - clear
1153161 0x01 Digit C - clear
1153179 0x0E Winner Lamps - (unknown) clear?
----------
1153238 0x06 Winner Lamps - P2 Winner Lamp Off
 
Virtual On OT 5.66:
When output test is selected:
1493708 0x16 Winner Lamps - P1 Winner Lamp Off
1493725 0x06 Winner Lamps - P2 Winner Lamp Off
----------
1493762 0x07 Digit B - clear
----------
1493804 0x01 Digit C - clear
----------
1493847 0x00 UNKNOWN

The output test then loops (sort of) the following:
1493879 0xEF Digit B - 8
----------
1493918 0xF6 Winner Lamps - (unknown)
----------
1493969 0xED Digit D - 8
----------
1494007 0xF6 Winner Lamps - (unknown)
----------
1494059 0xEF Digit B - 8
----------
1494097 0xEB Digit A - 8
----------
1494135 0xED Digit D - 8
----------
1494174 0xF6 Winner Lamps - (unknown)
----------
1494225 0xEF Digit B - 8
----------
1494263 0xEB Digit A - 8
----------
1494302 0xED Digit D - 8
----------
1494340 0xF6 Winner Lamps - (unknown)
----------
1494391 0xEF Digit B - 8
----------
1494430 0xEB Digit A - 8
----------
1494468 0xED Digit D - 8
----------
1494507 0xF6 Winner Lamps - (unknown)
----------
1494558 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1494618 0x03 Digit A - clear
----------
1494661 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1494721 0x0E Winner Lamps - (unknown) clear?
----------
1494779 0x03 Digit A - clear
----------
1494822 0x05 Digit D - clear
----------
1494864 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1494929 0x05 Digit D - clear
----------
1494968 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1495029 0x03 Digit A - clear
----------
1495070 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1495131 0xF6 Winner Lamps - (unknown)
----------
1495182 0xEB Digit A - 8
----------
1495221 0xF6 Winner Lamps - (unknown)
----------
1495271 0xFE Winner Lamps - (unknown)
----------
1495322 0xF6 Winner Lamps - (unknown)
----------
1495373 0xED Digit D - 8
----------
1495411 0xF6 Winner Lamps - (unknown)
----------
1495462 0xEB Digit A - 8
----------
1495501 0xED Digit D - 8
----------
1495539 0xFE Winner Lamps - (unknown)
----------
1495590 0xF6 Winner Lamps - (unknown)
----------
1495642 0xED Digit D - 8
----------
1495680 0xF6 Winner Lamps - (unknown)
----------
1495731 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1495791 0x01 Digit C - clear
----------
1495834 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1495899 0x01 Digit C - clear
----------
1495937 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1495999 0x05 Digit D - clear
----------
1496040 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1496100 0x03 Digit A - clear
----------
1496142 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1496203 0xF6 Winner Lamps - (unknown)
----------
1496254 0xEB Digit A - 8
----------
1496293 0xF6 Winner Lamps - (unknown)
----------
1496343 0xFE Winner Lamps - (unknown)
----------
1496394 0xEB Digit A - 8
----------
1496433 0xED Digit D - 8
----------
1496471 0xFE Winner Lamps - (unknown)
----------
1496522 0xF6 Winner Lamps - (unknown)
----------
1496573 0xED Digit D - 8
----------
1496611 0xF6 Winner Lamps - (unknown)
----------
1496663 0xEB Digit A - 8
----------
1496701 0xED Digit D - 8
----------
1496739 0xFE Winner Lamps - (unknown)
----------
1496791 0x07 Digit B - clear
----------
1496834 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1496894 0x07 Digit B - clear
----------
1496936 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1497001 0x07 Digit B - clear
----------
1497039 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1497102 0x01 Digit C - clear
----------
1497142 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1497202 0x05 Digit D - clear
----------
1497245 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1497306 0xEF Digit B - 8
----------
1497344 0xEB Digit A - 8
----------
1497382 0xF6 Winner Lamps - (unknown)
----------
1497434 0xEF Digit B - 8
----------
1497472 0xEB Digit A - 8
----------
1497510 0xED Digit D - 8
----------
1497549 0xF6 Winner Lamps - (unknown)
----------
1497600 0xEB Digit A - 8
----------
1497638 0xED Digit D - 8
----------
1497676 0xFE Winner Lamps - (unknown)
----------
1497728 0xF6 Winner Lamps - (unknown)
----------
1497779 0xED Digit D - 8
----------
1497818 0xF6 Winner Lamps - (unknown)
----------
1497868 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1497928 0x01 Digit C - clear
----------
1497971 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1498032 0x05 Digit D - clear
----------
1498074 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1498138 0x05 Digit D - clear
----------
1498177 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1498238 0x03 Digit A - clear
----------
1498279 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1498340 0xF6 Winner Lamps - (unknown)
----------
1498391 0xEB Digit A - 8
----------
1498430 0xF6 Winner Lamps - (unknown)
----------
1498481 0xFE Winner Lamps - (unknown)
----------
1498531 0xF6 Winner Lamps - (unknown)
----------
1498583 0xED Digit D - 8
----------
1498621 0xF6 Winner Lamps - (unknown)
----------
1498672 0xEB Digit A - 8
----------
1498711 0xED Digit D - 8
----------
1498749 0xFE Winner Lamps - (unknown)
----------
1498800 0xF6 Winner Lamps - (unknown)
----------
1498851 0xED Digit D - 8
----------
1498890 0xF6 Winner Lamps - (unknown)
----------
1498940 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1499000 0x01 Digit C - clear
----------
1499043 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1499108 0x01 Digit C - clear
----------
1499147 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1499208 0x05 Digit D - clear
----------
1499249 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1499310 0x03 Digit A - clear
----------
1499353 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1499413 0xF6 Winner Lamps - (unknown)
----------
1499463 0xEB Digit A - 8
----------
1499502 0xF6 Winner Lamps - (unknown)
----------
1499553 0xFE Winner Lamps - (unknown)
----------
1499603 0xF6 Winner Lamps - (unknown)
----------
1499660 0xFE Winner Lamps - (unknown)
----------
1499706 0xEF Digit B - 8
----------
1499744 0xEB Digit A - 8
----------
1499783 0xED Digit D - 8
----------
1499822 0xFE Winner Lamps - (unknown)
----------
1499872 0xEB Digit A - 8
----------
1499911 0xED Digit D - 8
----------
1499950 0xFE Winner Lamps - (unknown)
----------
1500000 0x07 Digit B - clear
----------
1500043 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1500103 0x07 Digit B - clear
----------
1500146 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1500212 0x07 Digit B - clear
----------
1500249 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1500312 0x01 Digit C - clear
----------
1500352 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1500412 0x05 Digit D - clear
----------
1500454 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1500515 0xEF Digit B - 8
----------
1500554 0xEB Digit A - 8
----------
1500592 0xF6 Winner Lamps - (unknown)
----------
1500643 0xEF Digit B - 8
----------
1500682 0xEB Digit A - 8
----------
1500720 0xED Digit D - 8
----------
1500759 0xF6 Winner Lamps - (unknown)
----------
1500809 0xEB Digit A - 8
----------
1500848 0xED Digit D - 8
----------
1500887 0xFE Winner Lamps - (unknown)
----------
1500937 0xF6 Winner Lamps - (unknown)
----------
1500988 0xED Digit D - 8
----------
1501027 0xF6 Winner Lamps - (unknown)
----------
1501078 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1501137 0x01 Digit C - clear
----------
1501180 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1501241 0x05 Digit D - clear
----------
1501284 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1501348 0x05 Digit D - clear
----------
1501386 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1501449 0x03 Digit A - clear
----------
1501490 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1501550 0xF6 Winner Lamps - (unknown)
----------
1501600 0xEB Digit A - 8
----------
1501639 0xF6 Winner Lamps - (unknown)
----------
1501690 0xFE Winner Lamps - (unknown)
----------
1501741 0xF6 Winner Lamps - (unknown)
----------
1501792 0xED Digit D - 8
----------
1501831 0xF6 Winner Lamps - (unknown)
----------
1501882 0xEB Digit A - 8
----------
1501920 0xED Digit D - 8
----------
1501959 0xFE Winner Lamps - (unknown)
----------
1502010 0xF6 Winner Lamps - (unknown)
----------
1502060 0xED Digit D - 8

When you exit output test mode:
1509637 0x16 Winner Lamps - P1 Winner Lamp Off
----------
1509697 0x03 Digit A - clear
----------
1509740 0x0E Winner Lamps - (unknown) clear?
----------
1509798 0x00 UNKNOWN


When first boot up and also when going back into attract mode after a game over:
37833 0x16 Winner Lamps - P1 Winner Lamp Off
37850 0x07 Digit B - clear
37866 0x03 Digit A - clear
37883 0x0E Winner Lamps - (unknown) clear?
----------
37938 0x00 UNKNOWN
----------
40107 0xFA UNKNOWN
40123 0x00 UNKNOWN

Nothing else happens during the attract mode loop

When you coin up, loops until you enter game play mode and then stops
396151 0x16 Winner Lamps - P1 Winner Lamp Off
396169 0x00 UNKNOWN
----------
396436 0xF6 Winner Lamps - (unknown)
396452 0x00 UNKNOWN
----------
396687 0x16 Winner Lamps - P1 Winner Lamp Off
396703 0x00 UNKNOWN
----------
396971 0xF6 Winner Lamps - (unknown)
396988 0x00 UNKNOWN

After losing a match against the CPU:
397432 0x00 UNKNOWN
----------
398459 0x9A UNKNOWN
398476 0x00 UNKNOWN
----------
398676 0x16 Winner Lamps - P1 Winner Lamp Off
398693 0x00 UNKNOWN
 
Last edited:
EDIT: The first 5 bits reversed AND inverted gives us this:
11111 blank
01010 A
01001 9
01000 8
00111 7
00110 6
00101 5
00100 4
00011 3
00010 2
00001 1
00000 0
Playing a few games of Virtua Tennis and Virtua Striker I captured a number of additional (likely Winner Lamp) codes that I hadn't seen before. However I continually saw a single unknown letter pop up on the opposite players screen whenever I won. Based on context I'd assume this is the letter "P" as it would flash 1(P) _1 for Player 1, 1 point, or 1 win.

In virtua striker when you score the scoreboard scrolls ? 0 A ? which I'm assuming is GOAL looking at the codes for these unknown letter and putting them in the above patern they fall exactly where you'd expect:

11111 blank - verified
11110 y
11101 ?
11100 ?
11011 ?
11010 ?
11001 ?
11000 P- single letter that accompanies a 1 or a 2
10111 n
10110 M
10101 L- Last Letter in VS "? 0 A ?" Pattern
10100 K
10011 J
10010 I
10001 H
10000 G - First Letter in VS "? 0 A ?" Pattern
01111 F
01110 E
01101 d
01100 C
01011 b
01010 A- verified
01001 9- verified
01000 8- verified
00111 7- verified
00110 6- verified
00101 5- verified
00100 4- verified
00011 3- verified
00010 2- verified
00001 1- verified
00000 0 - verified

notice there is no Letter "O" above, when VS spelled out "GOAL" it used the number 0 instead. After P there are 10 letters left but only 6 slots left in the bit spacing Q R S T U V W X Y Z I'd suspect that the letter S and the letter Z are similarly substituted with 5 and 2 however there needs to be at least 2 more missing letters after P in order to fit into the remaining bit combinations. we know from the attract mode loop that r T U v and y are all available and use their own unique 7-segment pattern which leaves Q W and X ... two of those aren't used or share patterns with other letters. Maybe X and H? or O and Q?
I've also seen a "-" used in one of the attract mode scrolls and two of the animations illumintates the "." on each display, so there might be other codes for special characters?

So far the other unknown command I've come across are as follows:
Virtual On:
0x00 UNKNOWN - maybe nothing, it seems to issue this after just about every other command so it could just be an idle state.
0xF6 Winner Lamps - (unknown) p1 winner lamp on?
0xFA UNKNOWN (appears after boot up or after Game Over before going back to attract loop)
0xFE Winner Lamps - (unknown) p2 winner lamp on?
0x9A UNKNOWN (at start of match)

Virtua Striker 2000/3:
0xF0 UNKNOWN (1P side check)
0x76 Winner Lamps? - (unknown) (1P side check)
0x60 UNKNOWN (2P side check)
0x66 Winner Lamps? - (unknown) (2P side check)

Virtua Tennis:
0x46 Winner Lamps? - (unknown) P2 related occurs after winning a serve
0x86 Winner Lamps? - (unknown) P2 related occurs after winning a set

0x56 Winner Lamps? - (unknown) P1 related occurs after winning a serve
0x96 Winner Lamps? - (unknown) P1 related occurs after winning a set

used by all:
0x0E Winner Lamps? - (unknown) related to clearing


Some Speculation:
In virtual on the entire time you're selecting a character, have more health than your opponent or are moving on to the next match after winning the game repeats:
878318 0xF6 Winner Lamps - (unknown)
878334 0x00 UNKNOWN
----------
878569 0x16 Winner Lamps - P1 Winner Lamp Off
878585 0x00 UNKNOWN
----------
878854 0xF6 Winner Lamps - (unknown)
878870 0x00 UNKNOWN
----------
879121 0x16 Winner Lamps - P1 Winner Lamp Off
879137 0x00 UNKNOWN
I'm assuming that this is a simple Winner Lamp on and then issue a winner lamp off (0x16)

it's possible that the first 4 bits represent a "blink speed" with 1111 being a solid ON and 0000 being a solid OFF, bit 5 seems to be a P1 or P2 selector. Another possibility is that there are different flashing patterns (like a long, short, long, short; or three fast blinks and a pause). it's hard to say because we only have the 2 codes from the VT test mode to speculate with.

My theory on the 0xFA, 0x9A, 0xF0 and 0x60 codes is that they might be related to animations that can be displayed on the 7-segment. again this is just speculation on my part though since i can't think of anything else they might be used for.

I played VO 5.66 all the way to the end and ironically despite having flashed the billboard light through just about the entire game when I defeated the final boss it cleared the billboard and did nothing through the entire end-sequence or credits.
 
Last edited:
Awesome news. I've always been fascinated by the vs city counters as well as the matrix screen on the Namco cyberlead cabs
 
Here's where I'm at.
I used off the shelf 7-segment displays each driven by a 74595 shift-register
I left pins 0 and 1 open to provide serial communication with a PC so information can be output there in real time.
pins 2-7 are used to drive the 4 shift registers (1 shared clock pin, 1 shared data pin and 1 unique latch pin for each display/shift register)
pins 8 and 9 are for winner lamp output for each player
and pins 12-19 are for the billboard data input

billboard_circuit.jpg


The only other components needed is a 1uf Cap for each shift register and a resistor for each LED. The circuit looks a mess because of all the resistors but if anyone were to make a nice board for this we'd be better serviced getting a proper LED driver IC/shift register combo so you'd only need 1 resistor per shift register.

Here's a demo video of it working with the Virtua Tennis test mode. Note that each winner lamp is able to blink with it's own timing separate from the changes in the 7-segments as well. the timing should be exactly the same as the demo mode on the real Versus City PCB.


Here's a demo of it working during gameplay of Virtua Striker 3 (probably the most exciting use of the billboard out of the NAOMI games that support it).



This is about as complete as I'm able to make it without more gameplay footage or physical access to an original PCB.
There are about a dozen or so commands that I've observed but don't know what they do. I have some theories about what they might dobut without seeing what the billboard is supposed to do with them I can't really emulate them with my setup.

There is 1 bug that I'm not sure if it's in my code or just a flaw in the game but Virtua Tennis seems to neglect to send the clear player 1 winner lamp command in test mode when you select "clear check". I have some error checking code that reads the billboard data lines twice and doesn't follow the command until it sees the same command on both reads. I do this because the Arduino is so fast it often reads mid-command change. Disabling my check I get the clear command but I also get a lot of garbage data because of all the mid-change command reads, this means that the clear command is only available for 1 or 2ms where as every other command sticks around for 16ms or so AT MINIMUM. It seems to only happen in the test mode clear check the clear command in the P1 Side check and even during game play works perfect every time. I have an idea for an alternative verification method but I'm unsure if it will be any better or worse.

So for now this project is "done" until I get more information to work with.

If someone out there actually is willing to put in the effort of building a display and wants to run this one some Model 2 3 or ST-V games let me know and I'll shoot you the code. I don't really want to share it publicly until it's in a more complete state though.
 
an ArcadeOtaku member by the name corn owns a Blast City Billboard kit and was kind enough to send me a pic of the control PCB. it's a very different design and it seems... incomplete. The output rather than having discrete outputs for each segment of the displays it seems t only have some serial data wires, which means there's likely another PCB somewhere, or the display it self has some logic to interpret the incoming serial data.

... no dips and only a small number of jumpers... and it seems designed for just 1 game board and display instead of 2 (which makes sense).

I've asked him if he'd be willing to dump the IC but I haven't heard back yet.

EDIT: I'd been scratching my head over how this outputs to the 7-segment displays... looking up the connectors we have:
CN1 (NH08P) - unpopulated
CN2 (NH12P) - billboard data input
CN3 (NH10P) - unpopulated
CN4 (NH04P) - +15V input
CN5 (VH07P) - Winner Lamp (100V AC) output
CN6 (VH03P) - 100V AC input

Notice there is no LED or 7-segment outputs on any of those connectors. What I didn't realize is that this PCB is attached directly to the back of the 7-segment displays. If you notice in the PCB there are some 5-pin solder points labeled "LED#" two along the top and two along the bottom. This is a standard 7-segment pin layout, 10-pins with 5 along the top and 5 along the bottom... so it looks like the display and the PCB is all one unit on the blast city cabs.
 

Attachments

  • blast_city_billboard.jpg
    blast_city_billboard.jpg
    252.8 KB · Views: 735
  • blast_city_billboard_pcb.jpg
    blast_city_billboard_pcb.jpg
    185.4 KB · Views: 1,250
Last edited:
corn was kind enough to have a friend of his dump the EPR-19158 ROM on the board above. It's very small (32KB) and about half of it is just FF filler. Unfortunately looking through the hex I can't make heads or tales of anything in it. I thought I'd at least find some header text or some of the scrolling text from attract mode but no such luck.

if anyone wants this file or has any ideas as to how to decipher it please PM me.
 
I was double checking the schematics in the Blast City kit manual (link on the first page). and noticed that it included a diagram for New Versus City cabs as well

So while the Blast City Kit uses the 837-12792-02 PCB, which is soldered directly to the back of the 7-Segment Displays

the New Versus city uses 837-12792 on the 1 Player side, which is also soldered directly to the 7-segment displays and it simply has a Pass through connection to send the billboard data to the 2 Player side, which uses a 837-12792-01 PCB, again directly soldered to the 7-Segment displays.

These boards are likely nearly identical to the 837-12792-02 PCB used in the Blast kit with the exception of the pass through connector on the 837-12792 variant.

This manual had a Megalo 410 diagram as well but for some reason the billboard PCB area was blank (it was marked out on the diagram but there was just a big empty space. However, I'd suspect that it uses the same 837-12792-02 PCB as the blast kit.

So this means we likely have all of the PCB variants identified:
837-11854 -> Versus City P1 & 2P2
837-12792 -> New Versus City P1
837-12792-01 -> New Versus City P2
837-12792-02 -> Blast City (possibly also Megalo 410) Kit P1 or P2

I believe P1 or P2 is set by way of an extra pin in the data input connector looped back from ground labeled "P1-Bit" I'd suspect if tided to ground it identifies the P1 side, and if disconnected it will denote the P2 side. I'm honestly not sure why this isn't just a jumper or dip-switch on the PCB.


I'll be getting an ST-V multi kit in soon and I'm building a supergun for my bench top. once that's one I'll be able to test the billboard output of some ST-V games, which could provide some new insights.
 
Anyone with a Blast City who wants their own billboard the glass is for sale on YAJ right now cheap: http://page11.auctions.yahoo.co.jp/jp/auction/n196898945
$10 with 0 bids... 1 day left. only time I've ever seen one up for sale.

I have a billboard PCB on it's way to me right now so I should be able to complete this project soon.

That means if you buy that Blast City billboard glass you could buy an Arduino, some 7-segment displays and some LEDs (for the winner lamp) and have a fully working billboard display :)
 
@XeD was kind enough to let me borrow the billboard PCB out of one of the Blast City cabinets he picked up recently and it arrived in the post today

Here's a high resolution photo I snapped
836-12792-02_billboard_pcb.jpg


Now that I have physical access to some billboard hardware my plan is to run through all 255 possible commands and determine what each of them do. I'm hoping this will also help me nail down the timing of the various animations. In any case my first order of business is identifying all the pins and figuring out how to power the PCB. The PDF manual for the Blast City billboard unit is linked back on first page of this thread but the most relevant bit is this:
836-12792-02_billboard_pcb_pinout.jpg


This version of the billboard PC has the 7-segment displays soldered directly to it, so it's impossible for me to see the backside of the PCB without de-soldering them (which I'm not going to do).

836-12792-02_billboard_digits.jpg


Power Connections:
The main 12pin connector (CN2) has a +5V pin so I was hoping that this was to power the logic on the PCB, unfortunately probing the board has revealed that this pin is only used to drive the pull-up resistors attached to the input pins and nothing else. There is a separate power connector for a +15V input (CN4) it looks like this powers the 7-Segment displays as the 15V pins are run straight to the top center pin of both displays (Common Anode setup). The 15V line is also routed to a sharp 05SZ11 Voltage Converter, the output of which is used to drive all of the board logic.

The ground on the Voltage converter is separated from the rest of the power circuity through a cap... weirdly however it the voltage converter ground is also routed directly to pin 12 of the main connector (identified in the wiring diagram as unused) this seems a bizarre design choice to me, then again I'm not an EE.

AC Connections:
The 3-pin AC input connector (CN6) has pin 1 connected directly to pins 3 and 7 of the lamp output connector (CN5), there is a solid state relay on the PCB that connects/disconnect input pin 3 with output pin 1, there is also an empty slot on the PCB for a second relay that connects input pin 3 to output pin 5. So it looks like this one PCB could potentially control 2 separate winner lamps independently. Thankfully the AC power routed through this board is only passed through the relay and nothing else. Contrary to the diagram the AC input and output pins are directly beside each other and well separated from the rest of the PCB's logic.

un-populated areas:
In addition to the second relay there are two empty chip slots identified as being for MC3487 Line Drivers. These output to an un-populated 10-pin connector (CN3). There is also an un-populated 8-pin connector (CN1).

I'd suspect that perhaps the the New Versus city uses a variant of this PCB with these locations populated such that one or more of the connectors can run to the Player 2 side to a more stripped down billboard PCB.

---------
Unfortunately without a 15V power supply I can't do much with this board yet, but I ordered a Meanwell 15V PSU that should be here Tuesday.
 
I'm glad it arrived safely. If you have to desolder to see the back by all mean do, if it is a mean to further the project. I should have sent you the other pcb as well.
 
If you have to desolder to see the back by all mean do, if it is a mean to further the project. I should have sent you the other pcb as well.
I have everything I need. seeing the other side of the PCB would be more for curiosity than anything else :)
 
I got my Meanwell 15V PSU in and built a power harness. I haven't had much time to play around with it but here is what I've learned so far.

the Jumper when set to [1-2], or when removed completely causes the display to run through an attract mode loop like what you see in most videos. The loop runs through a few animations for a few seconds then pauses for a few seconds, then some more animations and so on. The total loop lasts about 5 minutes before it repeats.

I believe setting the jumper to [2-3] will put the display in "read mode" where it will take commands from the game, but I haven't confirmed this yet. with nothing connected to the data pins there is a quick flash on the display when powering up and then it remains blank.

The "1P Bit" pin (pin 2 of the 12-pin input connector) sets the display in player 1 or player two mode, tying this pin to ground puts the display in Player 1 mode, leaving this disconnected (which will pull it high) will put the display in player 2 mode.

----------
One problem I'm having is hooking up something to the "winner" lamp so that I can detect when the winner lamp is activated. There's a device labeled as an "SSR" (I'd assumed for solid state relay) that switches an AC current powering some pretty beefy bulbs in the billboard. I'd hoped to just run low voltage through this to an LED but it appears this circuit just drowns out any low voltage signals.

The SSR is a Motorola MOC2A40-5 described as a "Power Opto Isolator" and rated for AC voltages between 20V and 140V... so yeah way out of range for running an LED

I looked at tapping the inputs since it's driven by an LED but it's so tight against the board I can't get a probe in to tap the pins and I haven't found any alternative points for this yet.

Once I've got a winner lamp led figured out then the real testing can begin :)
 
I built a data harness last night to send commands to the billboard so far I've learned:

1. the number/letter outputs that I had speculated before work the way I anticipated. also the display can do any number or letter except: M, W, and X. Also S, Z don't have their own code instead just using 5 and 2. So No one will be scrolling any messages about the "X Men"

2. I discovered that the second jumper setting isn't actually for read mode, it's actually a different attract mode loop, it just starts blank for a number of seconds before it begins displaying anything.

3. the attract mode loop can be canceled at any time and put the display into read mode by simply sending any command. Setting all pins high, or leaving the port disconnected will run attract mode. anything else will cancel attract mode and start running the specified command.

4. I've found some commands for different mini attract modes, as well as commands to set the periods on the display (they control independently from the rest of the 7-segment commands)

5. Even though this is a billboard unit from a Blast City the attract mode text scroll still uses the "vErSUS CITy AdvAnCEd bATTLE CAbInET" message.

---------------
I'm still having difficultly getting tapping the the winner lamp output to know what that's doing.

I managed to figure out connections to pins 2 and 3 of the SRR which should be the trigger LED in the Opto circuit, but grabbing on to these I get a solid 5V on both pins at all times. So I really don't know why I'm not getting any signal out for it at all :-/

This troubles me as a good many of the commands are for the winner lamp. my previous research showed that commands put the lamp into different flashing patters so it's not a simple on/off.

I would have thought tapping the output of the logic side would have resolved any issues but apparently not.
 
more testing last night
the basic hex areas are laid out like this:
0x_F = Player 1 right digit alphanumerics
0x_7 = Player 1 right digit alphanumerics
0x_B = Player 1 left digit alphanumerics
0x_3 = Player 1 left digit alphanumerics
0x_D = Player 2 right digit alphanumerics
0x_5 = Player 2 right digit alphanumerics
0x_9 = Player 2 left digit alphanumerics
0x_1 = Player 2 left digit alphanumerics

0x_E = dots on the 7 segment display (both sides)

0x_6 = Winner Lamp Codes (both sides)

0x_A = Animations (both sides)

0x_2 = P1 right Activate/Deactivate individual display segments
0x_C = P1 left Activate/Deactivate individual display segments
0x_4 = P2 right Activate/Deactivate individual display segments
0x_8 = P2 left Activate/Deactivate individual display segments

0x_0 = (not fully checked yet, but seems to be various demo loops)

A few of the commands I saw frequently before but couldn't identify:
0x0E clears the dots on both sides for both players
0xF0 a demo loop (mixture of text scrolls and animations)
0xFA animation that scrolls " SEGA " over and over again.
0x9A one of the line chase animations

What's left to discover:
I haven't figured out how to tap the winner lamp outputs yet, I just know the lamp codes I identified before all fall into the 0x_6 range and so far none of those codes display anything on the 7-segments

Similarly some of the Animations or demo loops may have winner lamp output associated with them but I don't know for sure yet.

I haven't gone through all of the 0x_0 codes yet, some of them seem to be combinations of various text scrolls and animations, while others I've tested don't seem to do anything (perhaps they're winner lamp based?)

I plan on taking video of each of the animations and demo loops so that I have a reference for timing. I'll wait until after I have the winner lamp output figured out so that I can capture that as well.

So far I've just been grounding out pins on a breadboard to test out the commands. I'd like to build an Arduino control to test out some more unique interactions/combinations of commands. This will also let me see how quickly I can issue command before the board misreads the input.

Some interesting observations:

The dot control 0x_E seems to assign 1 bit for each of the decimals on the 7-segments; in effect controlling all 4 dots with a single command. Every other command for this PCB either effects the 1P side or the 2P side but these dot commands all affect both sides at the same time. This is kind of annoying because it means your control program needs to keep track of what the current output looks like and then do a bitmask with the change to determine the command for the new setting.

Interestingly the 0x_2, 0x_C, 0x_4, and 0x_8 commands to activate/deactivate each individual segment of the displays also includes the dots. However there seems to be a weird quirk where the activate command for any of the dots wont work until after one of the other segment activation or deactivation commands has been executed. I'm not sure if this quirk is intentional (I can't think of any reason why it would be). Had they fixed this quirk the whole clumsy 0x_E dot control section would become redundant and could have been utilized for something else. I'd be curious if this works the same way on the older Versus City PCBs or if this quirk only exists in the newer Net Net City/Blast PCBs

I do still need to do some more testing with the segment activation/deactivation and determine if they can interact with the alpha numeric settings (ie: set the number "8" and then deactivate segment 7 to make a "0") These commands were all new to me as none of the games I tested previously made use of these commands. One awesome thing about this is that with unique segment activation we could make our own custom animations! The only drawback would be the speed since you need to issue one command for each segment change, though if we could start with a number or letter that was close to what we wanted it could reduce the number of commands for custom animations greatly.

Finally another interesting quirk I discovered. If you have something displayed on the digits and you execute one of the 0x_A animations, as soon as you clear the animation code the display will revert back to what it was before the animation started, this is kind of cool. In the instance I tested I went from an animation code to another segment activation/deactivation code so I'll have to see how far this quirk goes.

EDIT:
One last note. nothing seem to activate the comma section of the displays. the pins are definitely soldered into the PCB but they don't seem to be included in the control scheme. This is probably for the best since finding 7-segment displays with a comma is really difficult. So without them being used it means we can easily replicate the displays with off the shelf parts.

Once I've confirmed the last of the 0x_6 and 0x_0 commands I'll post up my complete command map.
 
Last edited:
I got the Winner Lamp functioning finally. I ended up setting up an LED to be powered on and then used the LED's resistor as a pull-up for a signal tapped from a diode near the SSR.

In any case here is the command map. I've included both the HEX values that you'll see issued in memory from the games as well as the reverse compliment which is what you'll see on the actual wires (1= 5V 0=ground)

Here's a google docs link since it's too big to fit in a post:
https://docs.google.com/spreadsheets/d/1hm8RmbETBKiOLjxmZsnFzCKKK7aowVE2pZHGWt-ktkk/edit?usp=sharing

The Winner laps have a few modes:
-on
-slow blink (~.5 second on/.5 second off)
-medium blink (~.25 seconds on/.25 seconds off)
-fast blink (~.125 seconds on/.125 seconds off)
-double blink (medium/fast pace but blinks twice then skips 2 blinks)
-triple blink (medium/fast pace but blinks three times then skips 2 blinks)
-quadruple blink (medium/fast pace but blinks four times then skips 1 blink)

the 0x_0 codes that I hadn't completed before.... there's not much there.
There are 3 codes for each side one is a text scroll for " 5EGA vEr5U5 CITy AdvAnCEd bATTLE CAbInET "
and the other two are demo loops similar to the attract mode these loops are identical except for the "1P" or "2P" that flashes near the beginning, oddly enough you can play either version of this loop on either side of the cabinet, I don't know why you'd want to identify the 1P side as 2P just for that loop but whatever. These loops also force on the quadruple blink winner lamp patter, which is annoying because it continues to blink even after you end the loop by going to another command.

There are 10 other codes here, one of which is 0x00 which most of the time does nothing at all, though in certain instances it will cause the billboard to revert back to attract mode.

The other 0x_0 commands all do the same thing: they cause the billboard to start doing weird shit. if you're doing doing a demo scroll or animation and you enter one of these codes then the billboard will halt the animation or text scroll immediately and just display whatever was on the screen when it happened.

Now here's the weird part, you can add in new commands but they will be ignored UNTIL you enter 0x00 at which point it will execute the last command you entered before 0x00 and entering another command. I have no idea how to get the billboard out of this "mode" other than to turn it off and back on again.

The weird thing about these commands is that they're in the 11111000 to 11111111 range, which means that these are the codes that would be inadvertently "entered" if a game supported lamp output but happened to be connected to a billboard.

NAOMI Virtual on for instance if the billboard is not enabled it will use output 1 for the start lamp and output 2 or 3 (I forget which) for the winner lamps. I'm not sure how that would work in a Billboard cab since setting the output pins to those combinations would just cause the attract mode loop to hault and nothing else. It would have made more sense if Sega used these "codes" as a poor mans winner lamp control.
 
Last edited:
I got a rudimentary web interface setup on a raspberry pi for issuing commands and I created a very boring video going through the different winner lamp blink patterns, animations, text scrolls and demo loops

One issue I'm having with the Pi is that there doesn't seem to be a good way to change multiple output pins at once. normally in assembly you can push a whole byte or more to a port, it seems that there's no (apparent) way to do that on the Pi you have to set one pin at a time.

I did find that if I set them starting at billboard pin 0 and working my way up it would often cause a mis-read, but if I started on billboard pin 7 and worked down it would usually work, but you can see in the video when I issue the "clear" commands between each step there is some flashing of the display from mis-reading a command before executing the proper command.
 
Doing some research I came across this library for the Pi: http://abyz.co.uk/rpi/pigpio/index.html

the feature list states it allows for writing directly to the whole GPIO register at once which should resolve my sloppy timing issue.

My current example uses the WiringPi library with PHP controlling it via command-line, but I think with pigpio I might write a python app with a web-socket interface, that would work a lot better than php as multiple browsers could share the same persistent back-end script.

---------

In terms of interactions between commands it seems to work like this:
there are essentially 2 modes
-static mode: any of the letter/number, dots, or segment activation commands
-animation mode: attract mode, or any of the animation or text scroll commands

When powering up the billboard enters attract mode animation and will stay here until a command is issued.
if any static mode command is entered it cancels animation mode and goes into static mode.

If in static mode and entering animation mode (essentially clearing the display to show the animation) and then issuing another static command, animation mode will be canceled and the static command will be applied to whatever static mode was displaying before the animation started.

So for instance lets say you're in static mode and displaying "A.P." and entering animation mode. the display will remove "A.P." and play the animation instead, then if you issue a static command for say right digit "1", animation mode will be canceled and the display will show a static "A.1." This is because it remembered that "A.P." was on the screen before the animation and it simply replaced the P with a 1 rather than putting a 1 on a blank display.

The winner lamps are essentially completely separate, they will blink at their own timing and the only commands that change winner lamps are other winner lamp commands.

There is some other weird quirk: the 0x00 command
Sometimes this returns you to attract mode,
Sometimes this haults animations similar to the other weird 0x_0 commands.
and sometimes this command does nothing at all.

It will require more testing but i think: if you boot up and the display is showing attract mode, then you issue only static commands then you issue a 0x00 it will return to attract mode. but if at any time you enter a command based animation mode then the 0x00 will freeze a running animation. or if you enter an animation and then go back to static mode then issue the 0x00 it will do nothing. That's my best guess at the moment at least.

AFAIK most games don't issue any of the 0x00 commands with the exception of VOOT, so maybe I'll setup a test on that game and see how it uses it.
 
pretty cool, had 2 blasts and a VS kit at one point and I always want to hack sfII to send fake JVS opcodes to a jvs io in the cabs,

watching this thread
 
Back
Top