TILT!Audio the new audio experience for your pinball

Welcome to TILT!Audio. TILT!Audio is an alternative sound system that offers much better sound experience than original sound hardware. Its build based on a Raspberry Pi and replaces the original sound board of your game.

TILT!Audio is the successor of RasPiSound so don’t get confused when in some forums or on my youtube channel it is called RasPiSound.

Wanna see it in action? Check out my youtube channel.

TILT!Audio is not a ready to use product that offers simple plug’n’play by simply replacing the old sound card. However you can easily build it for yourself (see Quick Start).

Order Now!

You do not even need to buy every little piece of hardware on your own, instead you can simply order DIY kits on my shop, that makes assembly very easy. For pinheads in the US you can also reach out to Charlie.

You can even take a look at the schematics and the latest pcb or export gerbers to build the board on your own. Everything you need is hosted on OSHWLab.

Whitestar Test Modul

This adapter simply decodes parts of the 6809 address bus: A8 – A15. More fine grained decoding is not necessary as the peripheral address mapping is done by the upper 8 bit only.

So write access to 0b00111000???????? = 0x38?? will be recognized as a sound command.

Looking at the bus timing of the 6809 see https://github.com/cavnex/mc6809/blob/master/documentation/6809Details.md the data bus is latched on the adapter with the falling edge of Q, and written (strobed) to the data east compatible connect STB pin with the rising edge of E.

That is basically all the whitestar adapter does.

To simulate a cpu writing sound commands we can use an arduino mega, that provides a “8 bit data bus”  = PORT A. Two outputs to drive Q and E and one additional output that toggles one of the address bits, e.g. A15. all in all 1 data bit plus common ground / 5V.

All other address bits are just hard wired to high or low to match the required bit pattern for 0x38??.

Pinout Arduino Mega

So using the lower end 2×18 connector we have all we need to connect to a DIP20 socket that the whitestar adapter is plugged in.

Full schematic for WS adapter

Looking at the schematic, one can easily see that the falling edge of “Q” will latch the data and the rising edge of “E” will trigger the “strobe” (also rising) on the data bus to data east.

Of course this will only happen if the address decoder detects a 0x38 for A8-A15 on the address bus.

Based on this I created a small sketch for the arduino mega (see … ) that sends a few bytes in a loop, which should result in some sounds on the TILT!Audio board.

Code snippet:

The test adapter looks like this:

Full source code of the sketch can be found at https://github.com/sker65/Whitestar-Tester

Lua scripting with modules

TILT!Audio features a lua runtime 5.2 to control additional extensions like shakers, LED-lights and also servos.

To make this possible TILT!Audio firmware embeds a lua runtime (lua virtual machine) and loads a “init.lua” script from the sound directory.

The init.lua script already has access to all core lua language features and also the TILT!Audio bindings see lua reference. The binding allows access to the sound engine, communicate via i2c, logging messages and get information about the current installation.

Lua in its language ecosystem also offers modules and package managers that allows installing and managing modules that extend lua features. One of this package managers is luarocks.


Using luarocks as package manager to install a new module together with TILT!Audio is not so straight forward as you can read it on most websites, because the linux running on a TILT!Audio card is tailored down to a minimum to run as efficient as it should to produce sound and nothing else.

What is missing for example is a c compiler that most lua modules require as they come as a combination of lua code and c code.

Also luarocks requires a certain directory structure that is aware of the different lua versions and different places in the system where the lua runtime should look for “modules” (which is *.so and *.lua files).

The TILT!Audio start script does set the required environment variables to let lua runtime find modules, but still not in that way that a module installed by luarocks would expect.

Continue reading “Lua scripting with modules”