What's new
Pinball info

Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

Bally 6 to 7 digit score display project

AlanJ

Site Supporter
Joined
Dec 27, 2017
Messages
7,723
Location
Leeds, West Yorkshire
Alias
Alan
I’ve decided to start a project to create a plug and play upgrade to allow us to easily upgrade a bally ss machine with 6 digit score displays to a 7 digit version.

I know there is already a number of solutions but none are really satisfactory to me.

Here are the two i’ve come across:
1. this involves a rom upgrade to a 7 digit version of the game code.
It then also requires hardware modifications - on some machines this is stringing a new cable to the score displays and changing the header wiring on j1 to the mpu. On certain games it’s even more complex requiring additional components. In a nutshell it’s a whole load of hassle and hard to reverse. on the plus side: it’s cheap! it works with existing 7 digit score displays.

2. xpin in usa do their 7volution product. this is a simple plug and play upgrade. you plug in the 5 new supplied led score displays and also plug in a controller board to the mpu. it’s easy to install and reversible. no wiring changes. it only works with the supplied displays. downside: expensive. starts at $299. by the time you add shipping and import duty vat then it’s a £350 spend. but you do get a set of brand new led displays as well.

3.EDIT: Thanks to @Neil McRae for this one. There is a divide by 10 rom hack for some games. (There are also some hardware based divide by 10 ideas too. ). Might suit some folk but again for me i want a solution i can just plug into any 6 digit machine

So my aim is to create something that:
1. follows the xpin model of simple plug n play
2. no hardware changes needed (apart from new score displays)
3. no rom or software modifications needed
4. a lot cheaper than £350

I’m going to be venturing into areas of technical challenges that i have not, as yet, come across. So there is a big chance of failure!
 
Last edited:
First job is to create something that can pickup the score display signals from the mpu. on the bally’s these are all in the 28 pin header J1 of the mpu board, so i plan to put an arduino in between the output from the mpu so i can pick up the score display into, then pass it on to the displays but add in the extra digit

i hacked up a connector socket and header pins, but soon realised i’m going to have a lot of jumper wires:
1F330AB8-7232-4E65-8ED2-8FF3F8EA0BE1.jpeg
38DD98CC-4A95-456F-91CA-C96D3B789ABB.jpeg
16 wires out and 16 back in then a breadboard with an arduino on it and several other chips. it’s a nightmare. I could probably get it all working on the bench but when it’s all hanging out the back of a pinball machine, it’s not going to be very stable (ie one loose wire will cause me no end of issues)

So instead i’ve had a stab at designing what i need into a simple board:
C095CE1A-240F-499E-B0F0-B5D7BCC068EF.jpeg
659CFCAE-A710-4010-A339-BC7D2476C134.jpeg
The board will have a 28 pin socket to connect onto the mpu, a 28 pin header to connect up to the wiring loom. it will pass straight through any pins i’m not interested in eg the lamp data.

the data i do want will be fed into arduino via shift registers. and then put back out again via another set of shift registers. so i’ve wired that all up on the board and hopefully it will give me a good starter for 10.

Board design sent to china. now wait a week or three for it to arrive.

In the meantime i can have a think about the next stage which is how to program this up.

I also need to figure out how to control 7 digits with only 6 wires. i think i have a solution which is to use 3 of the existing 6 wires but binary encode them to give me 8 values. then i’ll need a new type of score display board that can decode those signals. So plenty to be going on with!
 
I am a fully paid up member of the Bally SS club.

I must ask though, is there any marketplace for this 7 digit display upgrade ?

You have to be seriously good to roll the score on a 6 digit pinball. I don't recall it ever happening at any league meetings I have been to.

My Paragon is a 6 digit game, I would never look to turn it into a 7 digit one from an originality perspective, let alone the cost
 
Liberal settings 5 ball games with extra balls and you easily roll a lot of games.

i regularly roll space invaders

i guess there must be a market as there are the solutions i mentioned available.

i’m not doing this as a commercial venture. more as a technical challenge and learning experience. plus hopefully i get out of it at the end an upgraded 7 digit space invaders and a few other machines. goldball. hgot, meteor.

then if anyone else wants one i’ll make some spares.

fully understand some folk want to keep machines original. at least i’ll be supplying a stock of original score displays as i upgrade mine!!!
 
5 balls its no problem to do it. 3 less so. Embryon at the club has been rolled a couple of times same with Space Invaders but not enough that I'd do this. I roll Meteor every once in a while but Scorbit takes care of it :D see below!
 
Aha Yes the old divide by 10 one is also another solution. Probably the cheapest option but I'm not sure if it's available for all machines. Plus not all machines are capable of running modified roms.
 
whilst i’ve been screwing and soldering stuff back on my harlem globetrotters playfield today i’ve been pondering some other challenges in this project. The one that has got me a bit stumped is this: How to add a brightness control to a led score display.

I am using common cathode 7-seg led displays. the positive power comes from a logic chip 5v and i drop this down with a resistor for each segment. the common cathode is grounded for the digit that needs to be displayed 1-6 digits, using a transistor so i can’t see an easy way to introduce a single potentiometer to reduce the voltage.

Starting to think it might be better to switch to common anode leds. that means the logic chips will drive the cathode to 0v and then i can drive the anodes at whatever voltage i choose - ie add a simple variable voltage regulator circuit controlled by a potentiometer which varies the anode voltage within a range suitable to dim and brighten the displays.

The good news is that i have plenty of common anode displays, so this could be a nice way to use them up.

Then i got to thinking i could use the same technique to raise the 0v rail of my current circuit - just for the common cathode grounds. so instead of grounding to 0v, ground to a voltage slightly higher, but no more than about 3v - this varied by the potentiometer. but not sure if this will stop the grounding transistors from triggering ?

looks like i’ve got another breadboard project to build and test.......

Then i thought , why bother. just use a fixed brightness. after all the old gas displays don’t have adjustable brightness.

Maybe it’s something to consider as an enhancement.
 
5 balls its no problem to do it. 3 less so. Embryon at the club has been rolled a couple of times same with Space Invaders but not enough that I'd do this. I roll Meteor every once in a while but Scorbit takes care of it :D see below
It has the 7 digit conversion. Mark Squires did it for me.
 
Been figuring out a new circuit for the 7 segment displays. hit an issue with my circuit designer software because i can’t find the parts library for some of the chips i want to use

thus had prompted me to have a look at easyeda. circuit designer software. the big advantage is they link direct into the parts library as used by the pcb manufacturer i use. so it all ties in nicely. Again with eagle i sometimes have used parts that then are not available in the pcb manufacturers, so agin switching to easyeda would help there too

Started on the learning curve, and as usual it’s a bit overwhelming to start!
 
If you're going to learn a new PCB tool I would highly recommend checking out KiCAD! This tutorial got me started:

 
cheers but not sure if kicad links to the parts library i want to use, think it’s only easyeda that does.

i’ve spent hours with easyeda tonight. it seems ok to use but it’s not importing my existing board designs from eagle correctly. i can import the schematic and import the board layout but it’s not properly linking the 2. so useless. it’s also misplacing the drill holes for some parts.

So rather than try resolve all these issues. it’s going to be much easier to add the parts i’m missing to my eagle library. that’s the fastest way forward for me.

I’ll aim to use easyeda for a brand new project from scratch.

Well I did say i wanted this project to be a learning exercise. and it’s certainly that at the moment!!!!
 
Got my pcb printed and added all the components. this little blighter is going to sit between the mpu board and the connector that takes the signals to the score displays.
It is a processor and some input and output shift registers. The board passes through all other connections that are not score display related.

First job is the program up and test the board. ie can i read input pins and can i put stuff out on the output pins?

69B36DF8-755A-49C9-BC37-62D2EBBB9B7A.jpeg
272E1209-33B4-4E10-BF99-A92F69E88F16.jpeg
 
Fantastic project, I am a huge Altium fan boy :D If your after new pcb software :)
 
^ Thanks - I decided to "man up" and stick with Eagle. I really like it, and all I need to do is be prepared to create my own parts for the library if I can't find it. I've done this, so happy to carry on with Eagle.

This morning I've tested the board out to ensure I can read the input shift registers and write to the output shift registers.

i've connected the outputs to the inputs and then written a simple arduino sketch to write bits to the output, and then I've read these back off the input. i've used "595" output shift registers before so that was easy. The "165" input shift registers, I've not used
before, and was a little more tricky, some sample code I downloaded had a bug in it, which didnt help (always the risk with someone elses code!).
The "165" has an extra pin that needs to be enabled to load in the parallel inputs, but it's more or less the same as the "595".

So, I now have a working and tried and tested board, and I have a sample sketch that can read and write the inputs and outputs. Next I want to hook this up to one of my bally pins and do a test read of the score display info.

Stage 1. Hook it into the pinball and switch on - no code running. The game should start up - and play but there will be no scores or credit/match displays lit.

Stage 2. read the score display data from mpu and immediately output it back to the score displays - this is just to prove I can read then write properly to get the score displays to function.

Stage 3.:
find out what order the score display data is sent in - does it do a player score at a time, - ie player 1, digit 1,2,3..6, then player 2. Or does it do digits, then player = digit 1, player 1,2,3,4 ; digit 2, player 1,2,3,4 etc.
find out what it does with the credit/match - does it send 6 digits or only 4.
find out what it does with player score displays if a game in progress and that player not active (e.g. on a 2 player game what does it put out for players 3 & 4), does it still send out data or not.
Once I have answers to these I can start to build in some logical rules.

Stage 4:
Build in some logic rules. First rule is to figure out if we are displaying game score or HSTD (High Score to Date).
By looking at all 4 player display data - if it is the same for all 4 players, and it is not zero, then we can assume we are displaying HSTD. In this case we may need to substitute in our own 7 digit HSTD (will come to how we figure that later).
if it's not the same and not all zeros, then were either in a live game, or the game has ended. We can tell which by checking the scores on subsequent cycles to see if any are changing - doesn't tell us for sure we are at an ended game as the ball could be sat in
the shooter lane and nobody playing. However, if we are in a game, one of the player scores should be flashing and also, more useful the HSTD will not be being displayed - as soon as we detect a HSTD being displayed, we know we are not in a game.
We can also detect the start of a game when player 1 score goes to zero. or "00" more precisely. Might need to be quick because on a game with a stuck switch, starting a game can often immediately clock up a score - so watch out for that!

To be able to determine all of the above, I think it's going to be necessary to read in a full set of all 4 players score data, interpret what is happening, and then put out the data to the score displays. The only time we want to possibly modify the data is
a) when we are displaying HSTD and the HSTD needs to be 7 digits, not the 6 digits coming from the MPU - in this case we put out the real 7 digit HSTD
b) when we are displaying a players score, and it rolls over 999,990 - we then need to put out the 7th digit to show 1,000,000 - and count that 7th digit, just in case they roll it twice.
Initially, I am going to show the 7th digit on the first digit - just as a test - the first digit is always zero, so I can use it and modify it to show the millions - this saves me having to install any modified hardware. (I may even adopt this method - i.e. do a divide by 10 on all scores - the advantage is no new score displays - I could offer both solutions then).

Ok tons to do here.
 
Is this all with arduino. I know of them but haven't touched them at all. But I have done a spot of programming :)
 
62C246E9-A4E7-4575-AFBD-9929467842AD.jpeg
got it all hooked in

the pass through wires all seem to be good the feature lights are working well

then i added some code to read the score displays and immediately output the same values.

got some sort of timing issues. the score displays occasionally show a wrong value for a split second, and the credit/match score display is showing values in the digits that should be blank. So i’m suspicious of the blanking signal, maybe i should treat that as a special case and really take note of it. - i’ve treated it as part of the input and output shift registers.

also when a score is blinking eg to signify a players turn on a new ball the digits are all appearing at slightly different times. again seems a timing issue

but so far i’m pleased with progress
 
aha figured out what’s going on.

the blanking wire is used to switch off all displays. whilst all displays are off, the mpu then pops a bcd number on the 4 number wires representing the 0-9 number tgat is the be displayed , and then it strobes the display which that number needs to go to- there are 5 display lines, it strobes one. It repeats this for the 4 other displays. it then sets the digit number wires 1-6, and finally the blanking is switched off resulting in all the displays now showing the digit that has just been setup. so all displays will show that digit at the same time.
it then repeats for all the digits 1-6

now i know this. i can code for it
 
Is there no 7 digit Rom for EBD?


Sent from my iPhone using Tapatalk Pro
 
So been looking at the data from out of the MPU, for some reason I keep missing some, the esp32s running a lot faster than the 6800 MPU, but of course i'm using 16 bits of shift register both in and out, so that is taking up some clock cycles. but still.......Hmm

I may have to hard wire as many of the inputs and outputs as I can.

Did some tests, my read and write via the shift registers takes 14-15 microseconds to read then write. a total setup to display 1 digit on ll 5 displays from the MPU about 500 uS , so I can have about 30 read/writes, which seems to be enough, but perhaps isn't.
 
Getting nowhere with this, so going to change tack. I'll scrap the current code and start by writing a program that outputs data to the score displays. I'll setup some test data, e.g.
player 1 : score 234567
p2 : 819234
p3: 608317
P4: 457983
credit/match/ball in play: BLANK, 23, BLANK, 40 (ie. 23 credits, 40 match). To put out a blank the BCD is 1111, or 15.

lets see if I can shovel that out to reliably drive the score displays. If I can then I can then concentrate on the reads and pickup up the correct scores for each digit.
it means I can look for just the BCD data along with which digit and which display it is for.

Actually I might also write a program to see if I can just grab all the 5 displays digit values - that's 5 X 6 = 30 cycles, then at the end display them out. best way to do this is grab a load of data quickly in real time, save it into an array and then work through it later.
Thee issue is that it takes multiple reads to figure out which digit the data is for. as the BCD data is sent to a display first, locked in, that is done for all 5 displays and lastly the relevant digit is enabled.
 
I was gonna suggest something along those lines. Fire up a 4p game and give the players easily identifiable scores eg 102030, player 2 405060 or something..
Course that would mean you have to swap the displays out when its on -not sure if thats an especially bad thing to do
 
I made some progress late last night. got the data being read ok and sending it back out works 95% of the time. there are the odd glitch where a digit is incorrectly displayed, but the worst problem is the credit/match/ball-in-play display. it’s consistently showing up flashing numbers in the digit places that should always be blank. I’ve no idea why.

Anyhow it’s helped me decide how to tackle the programming side of this project.

Next job is to do what i said above and write a routine to reliably output display data.
 
Success on the write routine.

I can now reliably write out a full set of display data consistently and it works 100% reliably. my refresh rate is much faster than the mpu board so the displays are nice and crisp and fast.

here is a pic. normally when you take a pic on your phone it misses various digits due to the refresh rates. here you see all digits displayed as i’m refreshing much faster

So onto next part of project. reading the data.
i now know more about the data sequence that should be happening:
blank the displays
set a display line high, then move it low with the required digit number bcd data lines set
repeat for the other 4 displays
set a digit number 1-6 line high ,turn off blanking

so to figure out what number to display where i need to wait for the end digit number

The afternoon task therefore is to reliably read this data on every read:
i’ll always read the bcd data
look for a display line going high , then low
tgat gets me display no. and the 0-9 value to display.
get the other 5 displays
then wait for a digit line to go high. that tells me what digit this is.
once i have all this i can go and display it


E332590C-2B18-427A-B4C2-BAAC2D36C913.jpeg
 
Good progress on the data reading. i wrote a sketch to read 1,000 sets of outputs from the mpu very quickly. i then printed it all to the screen later (if you try read then print it’s too slow and you miss a lot of data)

the screen dump showed me how the mpu controls the 5 displays and 6 digits. it is consistent data and i extended the sketch to assemble a view of what each display would look like and thus matched the info i’m seeing on the displays.

So i can write data in sketch 1 and i. sketch 2 i can read data

tomorrow’s job is to merge them together and prove i can read and write together at a fast enough rate to get a nice smooth display.

Assuming i can do that then i can get onto the real interesting stuff, like figuring out if the displays are showing score, or hstd scores. also figuring out if we are in a game or attract mode. etc etc
 
Back
Top Bottom