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: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

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:

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)

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.

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

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.

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.

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.

@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

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:

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).

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 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.

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.

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)

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.

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.

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.