Space Invaders sound emulation

Space Invaders uses discrete circuits for most of its sound generation. So far, this has made it difficult to emulate those sounds efficiently and all the emulators I know use predigitized samples that are simply played back at the proper time.

I have recently started to study the feasibility of getting rid of samples in my own emulator, Tickle, and I think the results so far are encouraging. In these pages I will collect information about how those circuits work, with special emphasys on information that is useful for emulation.

Keep in mind that at the beginning of this journey I barely knew what a resistor was, so although I've been studying at a good pace in the last couple of weeks or so there may be errors, misconceptions and other silly things in the following pages... please bear with me and I would really appreciate to receive additional information, corrections, suggestions and criticism. Just send me an email.

Anyway, one thing I have learned is that electronic circuits, like programs if you want, are mostly assembled from modules.

Modules are smaller circuits that take some input and produce an output according to some specifications. For example, a square waveform generator uses power to produce a square wave signal with frequency f.

Most time an engineer will not spend time to research and develop a new circuit. Rather, he will look around for existing modules and circuits that can be combined to achieve the desired result. In fact, it's quite common for the maker of a non-trivial discrete component to publish some "application notes" that contains ideas and typical applications for the component that others can reuse.

On the wave of this "discovery", I have started to examine more closely the circuits in the Space Invaders soundboard, trying to decompose them back into their basic modules. So far this has proved to be less difficult than expected, with actually a lot of stuff coming straight out of the official application notes of the LM3900.

This provide a very good opportunity for emulation, because often these "stock" modules are described with formulae that help engineer determine the module output, and these formulae are all is needed for software emulation. So, as long as I know that a module produces a square waveform with frequency f, I can emulate it by simply generating a square wave of said frequency. With respect to full, component-by-component emulation (à la Spice), this approach is much simpler and cheaper, though in a sense it could be considered less faithful to the original.

Ok, to the board then. There are eight important circuits on it, not counting the amplifier:

Clicking on one of these names will take you to a page with the information I have collected about the corresponding circuit, with special emphasys on emulating it in software.

Note: descriptions usually contain lots of references to the documents listed below, so make sure you always have them handy!


[1] National Semiconductor - LM2900/LM3900/LM3301 Quad Amplifiers

[2] National Semiconductor - Application Note 72 (The LM3900)

[3] Texas Instruments - SN76477 Complex Sound Generator (cannot find an "official" link... use a search engine!)

[4] National Semiconductor - LM555 Timer

[5] Julius O. Smith III - Introduction to Digital Filters

[6] Richard A. Quinnel - Designing Digital Filters

[7] Fairchild Semiconductors - Application Note 118 (CMOS Oscillators)

Copyright (c) 2004 Alessandro Scotti. All rights reserved.

 Home :: Computer Programming

Site Map