(Topic ID: 291839)

Controlling the SB-300

By DickHamill

3 years ago


Topic Heartbeat

Topic Stats

  • 37 posts
  • 6 Pinsiders participating
  • Latest reply 1 year ago by barakandl
  • Topic is favorited by 11 Pinsiders

You

Linked Games

  • Meteor Stern Electronics, 1979

Topic Gallery

View topic image gallery

pasted_image (resized).png
pasted_image (resized).png
Screen Shot 2021-04-17 at 3.15.10 PM (resized).png
Screen Shot 2021-04-17 at 3.14.58 PM (resized).png
IMG_2709 (resized).jpg
#1 3 years ago

Summary:
This past year, I've been working on changing the gameplay of early Bally/Stern SS pinball machines by plugging an Arduino into J5 of the MPU. Recently, I coded new rules for Stern Meteor. Because my hardware was not able to address the SB-300 board, all the audio on my Meteor rewrite was passed through to a Wav Trigger board. Over the past couple of days, I've been working with new hardware that can also talk to the SB-300.

#2 3 years ago

Hardware:
The original board I developed to interface the Arduino Nano to the MPU was only able to talk to the PIA chips U10 & U11. The address pins controlled were A12 & A9 (always grounded), A7 (always high), A4 (CS for U11), A3 (CS for U10), and A1 & A0 (Register select). The next version also addressed A5 in order to talk to the SB-100.
The new version (BALLY_STERN_OS_HARDWARE_REV 2) controls address pins A3, A4, A5 & A6 using a demultiplexer to control those four pins with two. That pin-savings allows the Nano to control the address lines A0-A6, and gain access to the SB-300.
Once I was able to easily address the SB-300, I was able to create a detailed picture of how to use it.

IMG_2709 (resized).jpgIMG_2709 (resized).jpg
#3 3 years ago

Thanks to RoyGBev for fabricating the board and sending it to me. I drafted the new design based on a conversation we had, but I didn't get around to actually working on it until he sent it to me.

#4 3 years ago

SB-300 Features:
The SB-300 has three 16-bit timers on a 6840. This timer chip is selected with A5 & A7 (A9 & A12 have to be low) at addresses $00A0 through $00A7.
Timer 1 is used for square wave generation. When used, the waveform is always full volume.
Timer 2 is used for square wave generation that is then volume-regulated by a counter on U12 (16 different levels of volume that control U2 & U3).
Timer 3 controls the counter of U12. Volume can be ramped up or ramped down and the speed of that change is triggered by the output of Timer 3.

The SB-300 also has what I call an Effects Control Byte that is latched with A6 & A7 (A9 & A12 have to be low) at address $00C0.
The Effects Control Byte can ramp volume of Timer 2 up/down, or add noise to the signal (also volume controlled). The frequencies of the noise have 16 settings (bright to dark).

#5 3 years ago

Setting Up the Timers:
The three timers have different features & uses on the SB-300. To access their control bytes or latch countdown values, the following addresses are used.
$00A0 - Write Control Register 1 or 3 (depends on the last latched value of Control Register 2-bit0, aka CR20)
$00A1 - Write Control Register 2
$00A2 and $00A3 - Timer 1 ($00A2 is MSB)
$00A4 and $00A5 - Timer 2 ($00A4 is MSB)
$00A6 and $00A6 - Timer 3 ($00A6 is MSB)
The latch bytes are sequential so that they can easily be set with register X commands. For example,
LDX #M0200
STX M00A4

#6 3 years ago

The Control Register bits are mostly the same for each timer.
CRX7 = Timer X (1, 2, or 3) output enable
CRX6 = Timer X interrupt enable (interrupts are not used by Stern)
CRX5,4,3 = operating mode (example 010 is continuous, 100 is single-shot)
CRX2 = 0 is 16-bit, 1 is 8-bit
CRX1 = clock source (MPU clock is 1, on-board terrible clock is 0)
CRX0 = is different for each.
For Timer 1, CR10 is a master control for all timers (0 is on, 1 is hold).
For Timer 2, CR20 controls which CR will be written to the next time we write to $00A0
For Timer 3, CR30 turned on will prescale the timer to divide by 8.

#7 3 years ago

Here's a set of commands that will setup all three timers and play the "diagnostic" beep. This plays 7 times when the machine boots.

1) Write 0x00 to $00A1 - this disables Timer 2 and tells the 6840 that the next Control Register we write to at $00A0 will be CR3 (because CR20 is zero).

2) Write 0x92 to $00A0 - this enables Timer 3 (CR37 is on), makes Timer 3 continuous (CR35 through CR33 are 010), and tells Timer 3 to use the MPU's clock from pin 27 of J5.

3) Write 0x93 to $00A1 - this enables Timer 2 (same as Timer 3), but also points $00A0 to CR1 the next time it's written.

4) Write 0x00 to $00A0 - this disables Timer 1. It's not used for the test ping.

5) Write 0x8000 to $00A6:$00A7 to initialize Timer 3 with 0x8000. Timer 3 controls volume ramps through U12, so this means that the volume will change every time Timer 3 counts down from 0x8000 twice. Q3 (the output of Timer 3) is the CLK input of U12, and Q3 will toggle every time Timer 3 resets. Therefore it has to countdown twice to clock U12. This will happen every 75ms (2 * 32768 / 866k). U12 has 16 volume levels, so the whole ramp will take 16 * 75ms or 1.21 seconds.

6) Write 0x0200 to $00A4:$00A5 to initialize Timer 2 with 0x0200. The frequency of this square wave is calculated the same way as above. Frequency = (866kHz/0x0200)/2 = 845 Hz (about a G#5).

7) Write a 0x02 to $00C0 - this tells the Effects Control to reset the counter at U12 to full volume and count down from there to off. The volume changes with each full cycle of Timer 3.

With that setup of the three timers, every time a 0x02 is written to $00C0, U12 will be reset to ramp from full volume back to off. In this way, the first beep takes all 7 steps, but the following beeps only require a repeat of step 7.

#8 3 years ago

In the Meteor code, the setup of the diagnostic beep happens at $5C53:

Screen Shot 2021-04-17 at 3.14.58 PM (resized).pngScreen Shot 2021-04-17 at 3.14.58 PM (resized).png
#9 3 years ago

Other uses of the Effects Control Byte:
As shown above, sending a 0x02 to $00C0 play a single downward volume ramp timed by Timer 3. There are 255 other values recognized.
0x00 = ramp down and then hold
0x01 = ramp up and stop
0x02 = ramp down and stop
0x03 = ramp up and hold
0x04 = ramp down and then repeat
0x05 = ramp up and then repeat
0x06 = ramp down and then ramp up & repeat
0x07 = ramp up and then ramp down & repeat

Bit 4 of the EC byte turns on noise:
0x08 = play noise - the noise plays at the same time as anything from Timer 2 and is also volume-controlled by the same mechanism described above. With Timer 3 configured, sending 0x0F will play a continuos swell & ebb of white noise.

The upper four bits of the EC byte control the "color" of the white noise.
0x08 is the brightest, and 0xA8 is the darkest white noise the card can make. Anything higher than A for the uppper nibble just comes out as clicks.

#10 3 years ago

Meteor's Drone:
The constant drone in the background of Meteor (phased tones that ramp up during game play) are created by setting Timer 1 and Timer 2 to slightly different values. For the background sounds, the volume of Timer 2 is not altered by Timer 3 through U12. When other sound effects are played, it sounds like Timer 1 continues the drone while Timer 2, Timer 3, and the white noise generator create the other effects.

The drone sounds are initialized to 0x3010 (Timer 1) and 0x3000 (Timer 2).
Here's the code that initializes and then ramps up the drones:

Screen Shot 2021-04-17 at 3.15.10 PM (resized).pngScreen Shot 2021-04-17 at 3.15.10 PM (resized).png
#11 3 years ago

The code around *50FB increments the drone values in M02F7-8 and M02F9-A and rolls them if necessary.
Turning off the drone could be possible by rewriting *50DE to LDX #M1213 (and then adjusting the padding for checksum). However, the code that plays the other sound effects might leave Timer 2 on, so I'm not 100% confident that this is the only place it will need to be changed.

#12 3 years ago

I've made a demonstration video of using the different timers and control bytes:

The schematic of Rev 2 is documented here:
https://ballysternos.github.io/hardware.html

#13 3 years ago

Excellent - now new sounds can be worked on! Several missing pieces posted here.

#14 3 years ago
Quoted from slochar:

Excellent - now new sounds can be worked on! Several missing pieces posted here.

I went back to your Galaxy disassembly to see if you had any tips, but I didn't find anything about sound.
I kept a list of places where sound is manipulated. I was hoping you could help me understand the sound effects portion.
50CC - play drone
5B10 - kill all sound
5C53 - beginning of code to set up SB300
5CE7 - play self-test beep
5ED0 - send next command to FX register (pointed to by X)
5F1C - beginning of code to shut down SB300

I believe the effects are stored in the ROM around here:
*175C
but I couldn't figure out the format exactly.

#15 3 years ago

Me either! I just know it's stuffing bytes in the IRQ. But you have the board part decoded..... maybe look at the pinmame sb300 driver? You have seen Oliver Kaegi's info on this on his page as well?

I'd settle for just being able to translate sounds from one game to another, or updating sb100 games to use an sb300 sound effects.

Just having the controls mapped out for the timer chips is huge.

#16 3 years ago
Quoted from slochar:

sb100 games to use an sb300 sound effects

That will be an easy upgrade, aside from the extra bytes needed.

Quoted from slochar:

You have seen Oliver Kaegi's info on this on his page as well?

No, I'll search around.

#17 3 years ago

This may help you guys. I did this work back in the early 2000's as part of the Nineball rework project. I believe Galaxy might have been the first game with the sound script processor, but I can't remember exactly.

pasted_image (resized).pngpasted_image (resized).png

pasted_image (resized).pngpasted_image (resized).png

#18 3 years ago

Meteor is the first game with a sound script processor for sb300, the problem is that there's several different versions. The goal at the time for me was to take sounds from other games and mix them into different games. (Specifically I wanted the Big Game 25k sound to use in Meteor's added feature 1-2-3 bank sweep.) Yours and Dick's information will help translate the sound data directly over I'd think, since it should be possible now to figure out the frequency and timing they were going for. (And additional information for 9 ball source code information.... at some point....)

Oddly, Meteor's sounds transplanted into a (failed) fold into the 7 digit os (meteor data to big game OS) really messed up the sounds. I'd assume although I haven't compared directly that Meteor, Galaxy, and Ali all have the same sound engine, since they re-use many of the same sounds. (Ali's 'spacy' type sounds were always odd to me and didn't fit.) The sound data into the later games was either twice the speed or 1/2 the speed, I forget which, but I had added in a skip to handle that, but it turned out to really break the background sound handling as well.

Meteor has the additional issue with boards that have nvram on first boot, it doesn't clear the registers so the sound doesn't work correctly at first until those registers get repopulated. It's really strange in that the registers are battery backed in mpu200 boards anyway, so they're not cleared there either, but it doesn't affect it when it's 5101's. That's been corrected in the modified Meteor's code for a while now, just a simple clear loop for that area on boot works fine.

#19 3 years ago
Quoted from DickHamill:

That will be an easy upgrade, aside from the extra bytes needed.

No, I'll search around.

http://www.pinball4you.ch/okaegi/

#21 3 years ago
Quoted from DickHamill:

Thanks - wish I had seen that before!

Sorry sometimes when I'm not at my main computer it's hard to cut and paste stuff.... that was likely from my tablet so I didn't have access to either the link nor the ability to paste easily.

#22 3 years ago
Quoted from slochar:

Sorry sometimes when I'm not at my main computer it's hard to cut and paste stuff.... that was likely from my tablet so I didn't have access to either the link nor the ability to paste easily.

No worries - I meant I wish I had seen that a week ago, although I might not have understood it then. It took me a couple hours of poking around before I really comprehended what each part of the SB-300 was up to. Now it makes perfect sense and I understood Oliver's descriptions.

#23 3 years ago

You got way farther than I ever did for sure, the most I deciphered was that there's a resistor ladder for the D/A converter. Hardware interfacing in the software isn't really something I'm good at, just reverse engineering game logic.

#24 3 years ago
Quoted from slochar:

reverse engineering game logic

And that's my weak part. I go back to your Galaxy thread with some regularity.

#25 3 years ago

https://sites.google.com/site/allentownpinball/galaxy-asm Grab the source code from a couple other stern games from here as well for info. The flight 2000 ones might be especially informative when you add speech control to the arduino setup, and is also a different sound engine (Pfutz modded it to make space.... even he ran out of space in the original codebase....)

Do they make arduinos yet with more ram as I think that's a limiting factor at this point with the codebase? Or is that old news at this point and the code is more efficient/more space available? I know your goal was still the $5 nano, but if you start pumping sound data in there (I've just had a vision of software enabled digitized speech, like the old 8 bit micros were able to do with some tricks.... well, not the apple 2, but the atari and c64) you're going to run out of available space quickly.....

#26 3 years ago
Quoted from slochar:

Grab the source code from a couple other stern games from here as well for info.

I will - thanks!

1 week later
#27 3 years ago

I find myself returning to CoreyStup 's post above. slochar you mentioned:

Quoted from slochar:

Meteor is the first game with a sound script processor for sb300

Do you know where the sound data is in the Meteor ROMs?

#28 3 years ago

;hardcoded sound table
L5811:
dw L5883 ;spinner
dw L58F8
dw L581D
dw L5916
dw L584F ;rocket score
dw L5831 ;pop bumper

L581D:
db $A4,$04,$C1,$A2,$00,$E4
L5823:
db $0E,$05,$02,$02,$09
L5828: ;add player sound
db $00,$03,$06,$00,$40,$03
dw L5828
db $08
pop_sound:
L5831: ;pop bumper sound
db $A2,$01,$00,$A4,$08,$00,$05,$02,$0E,$00,$03,$A2,$1C,$82,$A4,$07,$20,$02,$10
L5844:
db $00,$03,$07,$FD,$00,$FF,$D0,$03
dw L5844
db $08
L584F: ;drop target (rocket score) sound
db $A2,$02,$00,$A4,$08,$00,$0E,$05,$02,$02,$20
L585A:
db $00,$02,$07,$01,$00,$FF,$00,$03
dw L585A
db $08,$A2,$02,$3E,$A4,$00,$80,$0E,$05,$00,$00,$01,$A4
db $05,$56,$A2,$02,$D5,$02,$0A
L5878:
db $00,$03,$07,$02,$00,$00,$40,$03
dw L5878
db $08
spinner_sound:
L5883: ;spinner sound
db $A2,$00,$40,$A4,$02,$00,$05,$02,$0E,$02,$1E
L588E: ;background sound?
db $00,$01,$07,$00,$30,$02,$00,$03
dw L588E
db $00,$0A,$08,$A2,$01,$00,$A4,$80,$00,$0E,$05,$02,$02,$14
L58A6:
db $00,$02,$07,$01,$00,$F8,$00,$03
dw L58A6
db $08
tilt_sound:
L58B1: ;tilt sound
db $A2,$0A,$00,$A4,$08,$00,$0E,$05,$02,$02,$23
L58BC:
db $00,$05,$06,$00,$C0
L58C1:
db $03
dw L58BC
db $08
L58C5:
db $A2,$04,$00,$A4,$20,$00,$05,$02,$0E,$02,$0A
L58D0:
db $00
L58D1: db $02,$07,$FF,$80,$FE,$00,$03
dw L58D0
db $08
L58DB:
db $A2,$00,$9C,$A6,$C0,$00,$05,$5B,$0D,$02,$34
L58E6:
db $00,$02,$06,$00,$30,$03
dw L58E6
db $08

L58EF: ;add player sound
db $A4,$02,$8E,$A2,$05,$A8,$04
dw L5823
L58F8:
db $A2,$01,$60,$A4,$03,$A8,$05,$02,$0E,$02,$14
L5903:
db $00,$03,$06,$00,$40,$03
dw L5903
db $02,$06
L590D:
db $00,$01,$06,$FF,$E0,$03
dw L590D
db $08
L5916:
db $A2,$08,$00,$A4,$05,$FE,$0E,$05,$02,$02,$10
L5921:
db $00,$02,$06,$FF,$90,$03
dw L5921
db $02,$20
L592B:
db $00,$01,$06,$00,$D0,$03
dw L592B
db $08
coin_up_sound:
L5934:
db $A4,$26,$54,$A6,$80,$00,$0B,$05,$7A,$00,$78,$08,$A6
db $A0,$00,$A0,$01,$00,$A0,$92,$01,$05,$BA,$00,$3C,$05,$AA,$00,$20
db $05,$9A,$00,$10,$05,$8A,$00,$08,$05,$7A,$A0,$00,$01,$00,$08,$08
game_over_sound:
reset_meteor_sound:
L5961: ;reset meteor bank sound
db $A6,$A0,$00,$A0,$01,$00,$A0,$92
db $01,$05,$3A,$00,$08,$05,$4A,$00
db $0A,$05,$5A,$00,$0C,$05,$6A,$00
db $10,$05,$7A,$00,$18,$05,$8A,$00
db $20,$05,$9A,$00,$30,$05,$AA,$00
db $38,$05,$BA,$A0,$00,$01,$00,$60
db $05,$00,$08

;big game version of the same sound
; db $a6,$a0,$00,$a0,$01,$00,$05,$3a
; db $00,$10,$05,$4a,$00,$14,$05,$5a
; db $00,$18,$05,$6a,$00,$20,$05,$7a
; db $00,$30,$05,$8a,$00,$40,$05,$9a
; db $00,$60,$05,$aa,$00,$70,$05,$ba
; db $a0,$92,$01,$a0,$00,$01,$00,$fa
; db $08

;bonus countdown sound
L5994:
db $A2,$0A,$00,$A4,$06,$00,$0E,$05,$00,$01
L599E:
db $07,$FF,$D2
db $00,$00,$A4,$06,$00,$01
L59A7:
db $07,$00,$00,$FF,$D0,$01
L59AD:
db $08

#29 3 years ago
Quoted from slochar:

;hardcoded sound table
L5811:
dw L5883 ;spinner
dw L58F8
dw L581D
dw L5916
dw L584F ;rocket score
dw L5831 ;pop bumper
L581D:
db $A4,$04,$C1,$A2,$00,$E4
L5823:
db $0E,$05,$02,$02,$09
L5828: ;add player sound
db $00,$03,$06,$00,$40,$03
dw L5828
db $08
pop_sound:
L5831: ;pop bumper sound
db $A2,$01,$00,$A4,$08,$00,$05,$02,$0E,$00,$03,$A2,$1C,$82,$A4,$07,$20,$02,$10
L5844:
db $00,$03,$07,$FD,$00,$FF,$D0,$03
dw L5844
db $08
L584F: ;drop target (rocket score) sound
db $A2,$02,$00,$A4,$08,$00,$0E,$05,$02,$02,$20
L585A:
db $00,$02,$07,$01,$00,$FF,$00,$03
dw L585A
db $08,$A2,$02,$3E,$A4,$00,$80,$0E,$05,$00,$00,$01,$A4
db $05,$56,$A2,$02,$D5,$02,$0A
L5878:
db $00,$03,$07,$02,$00,$00,$40,$03
dw L5878
db $08
spinner_sound:
L5883: ;spinner sound
db $A2,$00,$40,$A4,$02,$00,$05,$02,$0E,$02,$1E
L588E: ;background sound?
db $00,$01,$07,$00,$30,$02,$00,$03
dw L588E
db $00,$0A,$08,$A2,$01,$00,$A4,$80,$00,$0E,$05,$02,$02,$14
L58A6:
db $00,$02,$07,$01,$00,$F8,$00,$03
dw L58A6
db $08
tilt_sound:
L58B1: ;tilt sound
db $A2,$0A,$00,$A4,$08,$00,$0E,$05,$02,$02,$23
L58BC:
db $00,$05,$06,$00,$C0
L58C1:
db $03
dw L58BC
db $08
L58C5:
db $A2,$04,$00,$A4,$20,$00,$05,$02,$0E,$02,$0A
L58D0:
db $00
L58D1: db $02,$07,$FF,$80,$FE,$00,$03
dw L58D0
db $08
L58DB:
db $A2,$00,$9C,$A6,$C0,$00,$05,$5B,$0D,$02,$34
L58E6:
db $00,$02,$06,$00,$30,$03
dw L58E6
db $08
L58EF: ;add player sound
db $A4,$02,$8E,$A2,$05,$A8,$04
dw L5823
L58F8:
db $A2,$01,$60,$A4,$03,$A8,$05,$02,$0E,$02,$14
L5903:
db $00,$03,$06,$00,$40,$03
dw L5903
db $02,$06
L590D:
db $00,$01,$06,$FF,$E0,$03
dw L590D
db $08
L5916:
db $A2,$08,$00,$A4,$05,$FE,$0E,$05,$02,$02,$10
L5921:
db $00,$02,$06,$FF,$90,$03
dw L5921
db $02,$20
L592B:
db $00,$01,$06,$00,$D0,$03
dw L592B
db $08
coin_up_sound:
L5934:
db $A4,$26,$54,$A6,$80,$00,$0B,$05,$7A,$00,$78,$08,$A6
db $A0,$00,$A0,$01,$00,$A0,$92,$01,$05,$BA,$00,$3C,$05,$AA,$00,$20
db $05,$9A,$00,$10,$05,$8A,$00,$08,$05,$7A,$A0,$00,$01,$00,$08,$08
game_over_sound:
reset_meteor_sound:
L5961: ;reset meteor bank sound
db $A6,$A0,$00,$A0,$01,$00,$A0,$92
db $01,$05,$3A,$00,$08,$05,$4A,$00
db $0A,$05,$5A,$00,$0C,$05,$6A,$00
db $10,$05,$7A,$00,$18,$05,$8A,$00
db $20,$05,$9A,$00,$30,$05,$AA,$00
db $38,$05,$BA,$A0,$00,$01,$00,$60
db $05,$00,$08
;big game version of the same sound
; db $a6,$a0,$00,$a0,$01,$00,$05,$3a
; db $00,$10,$05,$4a,$00,$14,$05,$5a
; db $00,$18,$05,$6a,$00,$20,$05,$7a
; db $00,$30,$05,$8a,$00,$40,$05,$9a
; db $00,$60,$05,$aa,$00,$70,$05,$ba
; db $a0,$92,$01,$a0,$00,$01,$00,$fa
; db $08
;bonus countdown sound
L5994:
db $A2,$0A,$00,$A4,$06,$00,$0E,$05,$00,$01
L599E:
db $07,$FF,$D2
db $00,$00,$A4,$06,$00,$01
L59A7:
db $07,$00,$00,$FF,$D0,$01
L59AD:
db $08

Wow! Thanks for all the info!

#30 3 years ago

Sir, you are amazing

4 months later
#31 2 years ago

Success.... replaced the coin up sound effect on dragonfist with the big game 25k 'sweep' sound.

Many thanks to DickHamill and CoreyStup for their work on documenting the sound board. I did discover a few things regarding the first sound engine in Meteor, Galaxy, and Ali - the sounds are a different format, and the commands to set the frequencies are different. This just affects the data in the rom, nothing with the sound board itself. I've also found a couple of unused sounds but they turned out to be nothing thrilling.

Some of the games definitely have a different format for their sounds - Stargazer comes to mind from a cursory glance.

Not helping me yet to discover how to change the sounds, I will have to build up the arduino setup to stick on the bench and fool around with parameters. You can't test new sound ideas in pinmame as the sb300 isn't accurate and burning up new chips to test things would get old doing that.

I've already added Corey's nomenclature (from his pics earlier) to the Galaxy disassembly and will be updating that thread in the future as well.

#32 2 years ago
Quoted from slochar:

well, not the apple 2

Actually you could with the apple II as well... I know because I did it. There was an Apple inCider article about how to do it and it worked, not all that well, but digitally creating voice on the apple speaker was possible without any additional hardware.

#33 2 years ago
Quoted from slochar:

I will have to build up the arduino setup to stick on the bench and fool around with parameters.

I have a test app I can share with you when you get up and running. With just the Arduino plugged into the SB300, I simulated the clock with a second arduino, but it could be done other ways, of course.

#34 2 years ago
Quoted from slochar:

Success.... replaced the coin up sound effect on dragonfist with the big game 25k 'sweep' sound.

That's amazing! Can't wait to see what else can be squeezed out of the SB300!

#35 2 years ago

So because Pfutz is pfutz, his sound engines are completely different. For instance, in quicksilver, he's added the ability to intersperse 6800 code in the middle of playing a sound, to do <whatever>. So, the sound effects from QS can't be yanked out and put in other games as easily as the 25k sound was pulled out.

I'm auditioning sounds for dragonfist's extra ball award (currently no sound effect IIRC) and I was going to stick in the 75k sound, but ran into the differing data.

As I move farther along in fleshing out 100% the various stern games I'll no doubt come up with more variants. I hadn't yet at this point compared directly this section of code... most of the OS code is the same between games, just in different locations (they don't use "OS ROMS" like bally and williams did, they custom compiled the code for each game so the branches end up being in different locations, etc. but still all the same logic.)

1 year later
#36 1 year ago

Just a small update on Cheetah's sound engine... yep, as I go through games more and more, there's a different sound engine with different parameters everywhere.

#37 1 year ago

The SB-300 is a great sound board. I love the noises it can make. Probably even better than the AY-3-8910 which i also enjoy.

Promoted items from Pinside Marketplace and Pinside Shops!
$ 29.00
Boards
RoyGBev Pinball
 
$ 25.00
Apparel - Men
Slipstream Mod Shop
 
From: $ 170.00
$ 130.00
Playfield - Protection
Beehive Pinball Co.
 
$ 29.00
Boards
RoyGBev Pinball
 
2,200 (OBO)
Machine - For Sale
Dow, IL
$ 199.95
$ 3.00
$ 12.00
Electronics
Third Coast Pinball
 
$ 40.00
Gameroom - Decorations
The Flipper Room
 
Wanted
Machine - Wanted
St. Louis Park, MN
From: $ 33.00
Gameroom - Decorations
Rocket City Pinball
 
$ 169.00
$ 44.00
Boards
PinballReplacementParts
 
From: $ 130.00
Boards
Troxel Repair
 
Hey modders!
Your shop name here

Reply

Wanna join the discussion? Please sign in to reply to this topic.

Hey there! Welcome to Pinside!

Donate to Pinside

Great to see you're enjoying Pinside! Did you know Pinside is able to run without any 3rd-party banners or ads, thanks to the support from our visitors? Please consider a donation to Pinside and get anext to your username to show for it! Or better yet, subscribe to Pinside+!


This page was printed from and we tried optimising it for printing. Some page elements may have been deliberately hidden.

Scan the QR code on the left to jump to the URL this document was printed from.