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

Great project and good work.

I have always used "FreePCB" for layout work. It isn't bloated like almost all of the packages out there including most of the popular hobby ones.

You don't need a component library because it is dead easy to create them as you need them and then they are EXACTLY as YOU want them - I always use larger pads and sometimes slightly larger holes for pins than standard libraries available for most PCB programs.

Sadly the software isn't supported any longer but then, it's so simple it rally doesn't need any upgrades. One thing I really have a peeve about is all of these "software upgrades for the sake of it" and this mentality seems to have crept into peoples expectations now.

Even in pinball. In the past you bought a machine - and played it! None of this software updates all the time rubbish. I know some will disagree with me but I feel it is a step backwards updating software all the time "just because".

Anyway, have a look at FreePCB if you are still looking for a free and easy to use program with almost no limitations.

DISCLAIMER: Homepin has used FreePCB almost exclusively to design all of our boards for many years, including some exceptionally complex ones. On occassions we used Altium but seriously, what a PITA that program is not to mention stupidly expensive.



As an example please tell me what program would give you the footprints for some of the parts on this new Homepin board below? None would that's how many. I created the needed ones in minutes using the component builder which is included as part of the program.


1615509703190.png
 
Bingo - got a program now that can read the display data and successfully put it back out. it has taken a lot of work to get the timing right. Basically I need to read very fast the grab a chunk of display data (basically enough data so I have a full set of 5 score displays single digits data). if I try do anything else during this data collection, I lose data! So thats the way it needs to be. Once I have a set of data I can update the displays by writing it out.

Now I have this, I can get onto the more interesting stuff - starting with figuring out what the HSTD data is and substituting it with a new replacement HSTD value. I also need to figure out when I am in attract mode, in a game and when a game has just ended. it would also be nice to figure out if the machine has beeen put into self test mode (important to know as the displays are tested - 111111, 222222, 333333 etc - dont want to end up setting one of those as a high score!


PS thanks for all the ideas on different pcb s/w - I'm sticking with Eagle for now. Interesting points you raise though Mike @Homepin
 
I'm not familiar with the bus protocol you're reading (any datasheet out there?), but couldn't you set up an interrupt on any of the data lines changing their value?

Another option might be to get the DMA controller to do the data shuffling for you.

Sounds like you're making good progress though - enjoying this thread :thumbs:
 
The data lines are changing so fast that there is no point setting up an interrupt - you just need to grab all the data, and it needs to be grabbed over several cycles. I check it as fast as I can and only do something if it has changed, so it's pretty fast.
 
not been in a mood for any more coding so turned my attention to the 7 digit score displays
445EA869-3D23-4E82-816B-21AC6BBA90D1.jpegE14683AE-8FA8-4E9D-8FB8-45B1E77C1B04.jpeg5A0D65C8-3486-49AF-9914-D9867B980BF9.jpeg
I vexalready designed and produced these. they work in 6 and 7 digit version. got a variety of colours. red, blue, white, amber, yelllow and green.

i’ve created versions of the controller board to handle common anode and common cathode 7 segment leds. The common anode version now has a brightness control.

In order to facilitate a 7 digit display that is controlled by wiring for 6 digit displays. i’m going to have to create a new version of the controller, one that encoded the digit number over 3 wires (rather than using the existing 6 wires). ill use a decoder chip. 74ls138 or similar. this decided a 3 wire binary number into 8 outputs. so enough to drive my 7 digits.
 
+1 for using a interrupt if you can it would almost certainly solve any timing / missing data issues. Even if you just tie it to the bus clock or something? And if you can get DMA to update the displays the cpu will not even be involved :) DMA is never really covered on these micro controllers but is so incredibly powerful and efficient. Just the documentation can be a little tricky to understand sometimes. Project looks fantastic so far :)
 
I’m not reading the data bus just the display outputs from one of the pia.

on the connector i am hooked into there is no clock signal either.

there is a display interruption circuit on the mpu but not sure if it’s exposed in and of the header pins. i’ll check.

I could switch my whole design to instead read the data bus, it’s worth considering as an option, j5 on the mpu board has more stuff exposed but then i will be into multiple connections to the mpu board.
 
Got a bit waylaid with other project. my harlem globetrotters refurb, making up led score displays & playing rick n morty. 👍😂

Managed to substitute in a new HSTD - that’s easy at the start of power on as can pick up the hstd before a game starts.

it’s a bit tricky to figure out when a game is over and the hstd figures are shown again. the best i can do is look for them a digit at a time. (this is because the 5 player/credit displays are all illuminated all the same time for each digit 1-6. it actually displays digit 6 then 5,4,3,2,1.

My logic goes like this:
if player 1-4 displays all have same digit 6 (and it’s not blank) and it matches the previously picked up mpu hstd digit value , then suspect it’s a hstd being displayed. dont display the digit on the output - just output what we last output. and set a “suspected hstd” flag
read the next few digits. once we get to digit 2, we will have the full hstd (digit 1 is always zero on a score)
so by then if the suspect flag is still set, then change the output displays to the new hstd.
we can now set a “deffo hstd” flag - this allows us to shortcut the substitution on the next cycle.

on the next cycle we start substituting from digit 6 if it matches .......

hopefully i’ll get more sophisticated as i progress through

still lots to do, like the real important bit - hstd tracking.
 
Is it not possible to grab the scores from memory?
 
I am sure it is but how do i go about doing that when the game is in progress?

Plus i have no experience of reading memory. can you help at all please. anyone?
 
Good question Alan I wonder if the pinmame guys would be able to help?
 
I know regular Mame supports hiscores, and I vaguely recall its just got a set of offsets to pull the Hiscore data from it. I was going look into how folks were doing about finding the addresses of them - but never got around to it.
Thinking about it though - theres a bunch of "extensions" for the virtual pin software for putting the backglass and what not onto another monitor. So they must be pulling the data out somehow. (Not sure if the source for those is available or not)
 
Won't you need to keep the hstd on your board. It will be a 7 digit score if someone rolls it, but the machine will only store the 6 digit score it knows about, not your new high score. Otherwise on power cycle you're reverting to the old 6 digit hstd.
 
yes my board is doing that, it keeps its own hstd and will substitute it every time the machine tries to display its own. it retains it even with the power off.
 
Hello, Alan,

This is very much what I'd have liked to have the ability to carry out for my Stern 'Ali' games (I had two). There was a game which needed 7-digit scoring, or even feature lamps for '1 Million', like Gold Ball. One of mine was used in competition at the Kettering POA show in 1988, and I told Dave Dutton (@DAD here) "I'll mark you in for a million, now" while he played ball 1. The other once stopped its catch-up scoring (after the final ball had drained) showing 999,990, but due to wiring peculiarities the tilt switch didn't have a capacitor fitted, so deliberately tilting it wasn't quick enough to prevent the bonus count starting.

Just out of curiosity, would a game with extra score displays such as Six Million Dollar Man, cause additional difficulties? Though I think that would be a unique case, other games with extra displays only use them for non player-score functions. Such as Elektra units, Pac man moves, Medusa status, Lightning bonus, etc, and those games have 7-digit scoring anyway.

And, in theory, are the same measures applicable to the occasional roll-capable 7-digit game, such as Beat The Clock?
 
Last edited:
there will be a bit more work involved in 6 million dollar man, because of the need to handle 6 players instead of 4

if we have a 6 game that uses another display for something else, that will need work too. i’ve yet to find one?

in theory yes could handle 7-8 digits in a similar fashion.

I’m currently coding and testing the high score substitution. it’s causing me a whole load of issues at the moment.
 
update:

the programming if this has got me stumped at the moment. i seem to be progressing backwards instead of forewords

i have a solid set of code that can read the mpu score display info and can then interpret it and put it back out in a much faster refresh rate to the score display units. thus gives a much nicer display.

my issue is when i try to interpret the data and do some substitutions. for example when the game is in attract mode. it is displaying one of three things:
1. high score to date on all 4 players
2. last game scores or “00” on player 1 (if game just switched on and no games played)
3. blanks ( as it moves between 1 and 2)

because the data is put out sequentially by the mpu a digit at a time there is quite a number of reads. 30+ 5x6 digits to get a full set of data. So it’s only at the end of the reads you can figure out what is being displayed.

ive been trying to figure out as i go along but that doesn’t work. then tried reading all the data before putting something out on the display. that partially worked.

without going into the real nitty gritty i haven’t found a reliable way to figure out what to display.

So- i’m going to change tact. for attract mode, given there is only the 3 things above to display. i’m going to control the timing of those myself. this needs a bit of a rewrite of how i’m doing things.

it’s a real time consuming project is this one.
 
Aha - A few more hours and a bit of a debug into my various versions of code, spotted an error in a nitty gritty part of it - fixed it and now getting a reasonably good stab at decoding the attract mode data.

Can now clearly see the HSTD data on player 1 - 4 scores, followed by a period of blanks (it puts out a display number of 10 - which of course the BCD decoders on the score displays interpret as a blank).
Then it puts out the 4 last game scores for players 1-4 - or "00" if no games have been played yet since powerup. then the blanks (all 10s again).

it's interesting that the mpu puts out 10's when it's blanking the whole display, yet puts out 15 if it wants to blank an individual digit. e.g. when it displays the player score of "00" it puts out 4 X 15 for the 4 digits that are blank.
I'm not sure if this is the case with all games - I will need to do some further examinations.

Anyhow - feel like I've made some real progress and can move on further with this tomorrow.
 
Had a good day on the programming. I have made good progress on sorting out the logic flow and the various tests that need to be performed.

Have got the system intercepting the scores and substituting my own tracked 7 digit HSTD. This is now put out on the displays whenever the old, MPU calculated HSTD is shown. There are a few mop up jobs to do, but I'm really pleased with progress.



Coding jobs to do:
Add the 7th digit and clock it up by +1 (1M) each time the 6th digit rolls from 9 to 0
Display this 7th digit in digit 1 spot as a temporary test
Rework all the code to compare scores to include the 7th digit (all 6 digit at the moment)
Add in read and writes for the 7th digit. (read will be a dummy read).

Save and recover the HSTD from non volatile memory on the ESP32s board

Handle the problem that could arise on Stern games, where it momentarily shows the HSTD on all 4 players scores for each player just before their last ball is served up. This could be a tricky one to deal with.

Think about how I could develop a solution for the 'self-test, red button' mode. This could really mess up things for me. I need to detect when someone enters this mode and basically shut down doing anything clever until they leave it.
Problem is - how do we know when they have left? Hmm.
 
It sounds like you're making progress, Alan, not that I fully understand the work involved. Mention of Stern games reminds me that their first game with 7-digit scoring, Big Game, made sure that everyone realised by writing 7-6-5-4-3-2-1 on the score displays, starting from the right, then changing to all 7's and flashing the displays a few times. It must've even been mentioned in the 'general operation' page of the manual - as so often with manuals, it was still there for a subsequent game, Cheetah, though it was a one game only thing. And with showing the highest score at the beginning of the last ball, I'm not sure if all the earlier 6-digit games did that, Wild Fyre (and Dracula) didn't.

With the self test, leaving it by stepping through the audit functions or simply by switching off has the same result, a repeat of the power-up test. Would that serve to show an end of test, i.e. the start of the 7-flash routine (pun non intended) could start/restart your additional components?
 
Last edited:
It sounds like you're making progress, Alan, not that I fully understand the work involved. Mention of Stern games reminds me that their first game with 7-digit scoring, Big Game, made sure that everyone realised by writing 7-6-5-4-3-2-1 on the score displays, starting from the left, then changing to all 7's and flashing the displays a few times. It must've even been mentioned in the 'general operation' page of the manual - as so often with manuals, it was still there for a subsequent game, Cheetah, though it was a one game only thing. And with showing the highest score at the beginning of the last ball, I'm not sure if all the earlier 6-digit games did that, Wild Fyre (and Dracula) didn't.

With the self test, leaving it by stepping through the audit functions or simply by switching off has the same result, a repeat of the power-up test. Would that serve to show an end of test, i.e. the start of the 7-flash routine (pun non intended) could start/restart your additional components?
Hi thanks for the info.

I have managed to detect when the machine goes into self test mode. it's a bit trickier to figure out when the self test mode has been exited. I am working on it though. Even though the machine reboots, because I am only hooked into the score display data,
my arduino still has power so is running whilst the main mpu reboots. I really don't want to have another connector onto the mpu board - as I already have 2 - but yes it would be nice to reboot my device at the same time. I'll see if I can get the software to handle it first.

Good progress today. I can now run a game and it will display my new HSTD, which now counts the rollover from 999,999 to 1 million. it will keep score up to 9,999,999 now before resetting. (I could make it go further but cant see the point in going to 8 digits!!

I've also added in a facility to reset the new 7 digit HSTD, because the reset in the std Self-Test red button menu is only resetting the MPU stored 6 digit HSTD.

I've been testing this all out on a single machine - Gold Ball - plan is to get it to a working state and then test on my other 6 digit bally and stern machines. Still a long way to go:
To do next:
1. Build some 7 digit displays that will work with the 6 digit wiring
2. Do a ton more testing on the current code, then alter that code to work with the new 7 digit display controllers.
3. Write the save to memory for the new HSTD and read from memory on startup - At the moment it loses the new 7 digit HSTD when powered off.
4. Refine the hardware board - at present it only connects to the J1 on the MPU board - which is where the score data is output, but I also need to pick up a 5v supply. I could get this off J4 which is the main power in, but have a couple of other ideas? 1. I could 'cheat' and use croc clip leads to the GND and +5v test points. But that is a stinky solution. There is also Gnd and 5v on the J5 at the top of the MPU, looks like I could also tap into one of the other pins there to reboot my device
 
I burnt the midnight oil last night on this.

I've now got some 7 digit score displays in the machine, which operate in a different way to the std score displays. i.e. the digit number to display is now controlled by 4 wires rather than the 6 existing wires, and so I can control the 7th digit.

had to change my output code to encode the digit number to be as expected by the new hardware, and to also put out the 7th digit.

So a major milestone success - I now have 7 digit scores being shown. Currently only shows for the HSTD.

Ran into some horrid timing issues again when adding in this 7th digit, but after a lot of efffing and jeffing, to and fro, I figured out a solution.

Todays tasks are to work the 7th digit display code into all the logical areas of my existing code. It's quite tricky to figure out what to put out on the 7th digit display.
The code needs to figure out what the MPU is sending to the displays, is it:
a) a players score - either in a game or at the end of a game (the in game is easy, the end of game less so).
b) the HSTD
c) blanks
d) "00" - e.g. players score at the start of a game
e) 111111,22222,333333,4444444,55555.....999999 - the test sequences in the self test red button menu
f) some other info displayed during self test mode?

I should be able to figure this out easy enough

Ive also been looking at using the J5 top horizontal connector to pull the 5v power I need. The only issue I can see is that there is a difference between -17 and -35 MPU boards - the -35 has one more pin. But I could always have different end connectors,
depending on the type of game? The beauty of J5 is there are control wires coming off there, like the "NOT Reset" line - so I could pick that up to reboot?
 
Another long session today, but I've finally made it! Success! I've got a working prototype!

I have done a whole load of testing today and fixed all the loop holes and issues I was coming across.

In summary this is what I now have:

Hardware
======
1 X 6-2-7 processor board - this sits on top of the mpu board connected to J1 header. The existing lead from J1 plugs into the top of the 6-2-7 board. Power comes from a fly lead to J5. The board contains an esp32s (arduino type) processor and some input and output shift register chips.
1 X 6 Digit Led display -for the Credit/Match/Ball-in-play display
4 X 7 Digit Led displays for the 4 player score displays

It is totally plug and play. Remove the existing score displays and replace with the new ones, plug into the existing wiring, no mods. Plug in the processor board onto J1 mpu.

Switch on and hey presto 7 digit scoring.

Software
======
Most of this is about the software. In a nutshell:
1. it intercepts the 6 digit display data coming out of the mpu and interprets it
2. it puts out the display data to the score displays, including the ability to display 7 digit data
3. it replaces the mpu's 6 digit HSTD with its own 7 digit HSTD. This is stored in non volatile memory, so is recalled on a power cycle. New HSTD values are saved away in NV memory
4. It monitors the display data and determines if the machine is in attract mode, self-test mode, or in the middle of a game
5. If in attract mode, it allows the new 7 digit HSTD to be zeroised.
6. It can handle the stern peculiarity of displaying the HSTD values mid game, just before the last ball is served up for each player.
7. It deals with odd issues like the end of game match feature which flashes up 2 digit numbers at random on the ball in play score display (this was causing us to think a new game had started)
8. Is scalable so will be easy enough to add in other logic rules, which I expect I will need to build in as I test this out across other bally/stern 6 digit games.
9. I could facilitate a cheapo version which simply does a divide by 10 on all scores - this would mean no need to change out the 6 digit scores. - That's another project really but should be easy to do now.
 
Spent most of today playing pinball - under the guise of thoroughly testing this system out. It appears to be working fine in all scenarios with Goldball, single player, multi player2, 3, 4. Handles 6 digit HSTD, handles 7 digit HSTD.
Figures out when machine goes into Self-Test mode, and then waits for this to end (if not powered of and on).

So, I think I'll move it into my Stern Meteor and see how it fares there.
 
I've played Goldball every day for a few games, single player, multi player. I've reset the 7 digit HSTD to zero a few times then tested it being broken repeatedly in single and muti player games. Also tested going over the 999,990 to 1M, then 2 and 3M (with help from having the glass off!!). All seems to be working fine.

I have some new circuit boards arriving today, so I will make a set up and test those out again in Goldball. If all is good then I will install another set in Stern meteor and test out against the Stern game code.
 
New control boards arrived

9873A0B8-AABC-48D5-9D71-002EE0241683.jpeg

So I made one up:
49CB7054-4D67-4F38-B374-061CE4BBDA21.jpeg

Fits nicely over the too left of the main mpu board

Now it gets the power from the J5 top connector.

Tested it all out and seems to be working well.

Later in the week I’ll make up one of the new display control boards:
D5883D48-0D5E-4DA5-8394-4F009371D92A.jpeg
 
Moved the working prototype into Bally Harlem - didnt work, also tried in Stern Meteor - didnt work either. Looks like the code in different games handles the score display data in different ways.

Back to the drawing board. I'll need to dis-assemble different game code now.
 
Back
Top Bottom