Assembly is a low-level programming language that many video game music composers used in order to make music on the early video game systems. These languages are different for every major chip set and model, so many early composers had to became fluent in various dialects of assembly. Some larger companies could afford to hire programmers to write intricate audio drivers, and then the composers would only have to learn a custom form of Music Macro Language.
As the processing power of video game hardware increased over the years, composers were able to use more conventional music composition software for their music. These days, very few composers learn assembly to write video game music.
Two kinds of people use assembly:
- Sound programmers make any music in games possible in the first place. On every platform, they must understand the CPU, audio hardware, get a programming tool, program a driver, keep it fast and short so it fits in the game, and explain arrangers how to enter music.
- Arrangers enter notes, durations and other settings (like instrument changes and pitch bends) as numerical code (often hexadecimal numbers, where digits don't go 0–9, but 0–9A–F). Arrangers do not actually have to understand assembly, but they must learn what numbers mean what, and where and how to enter them.
In their early days, programmers tended to write everything directly into the computer's RAM, in pairs of eight hexadecimal numbers in a row.
Most commonly, a note is denoted by its chromatic height and its duration. An F scale for example, where the penultimate note is twice as long and the last note eight times as long, would be typed like this:
29 02 2B 02 2D 02 2E 02 30 02 32 02 34 04 35 10
Some programmers frantically tried to save space, like subtracting 1 from every duration, and entering the duration only when it changes (in following example denoted by numbers over E0):
E1 29 2B 2D 2E 30 32 E3 34 EF 35
An assembler allows to enter music, in a much more structured way, into source code. You can put line breaks wherever you want. On top, you can make up labels and assign numbers to them, so for an F scale, you can in fact type:
Every time you want to test your music, you use the Assemble or Compile function, and the assembler converts your source code nearly 1-to-1 into machine code, ready to run. However, your code can still get lost to crashes.
Assembly is generally abbreviated as asm. Some non-English developers naively abbreviated it as ass. Popular assemblers included Mikro Assembler, Turbo Ass, Laser Genius and Devpac.
A cross assembler allows to use two separate computers (even completely different platforms) for programming and testing. Every time you want to test your music, the source computer compiles it, and transfers it to the target computer, again ready to run. If it crashes, your source code is safe. Obviously, cross development is also the only option for consoles with their little RAM and no keyboard.
Today, everyone can download free assemblers that save the compiled music on their PC or Mac hard drive, for use in an emulator.
In 1985, Mike Webb programmed an assembler that ran on Einstein computers. Ocean Software (where he was employed), Binary Design, Software Creations (which he both co-founded), and Musicon Design (unknown relation) used it altogether for games and music on the Amstrad CPC, Atari 8-bit, Commodore 64, MSX, and ZX Spectrum.
The following composers used assembler or hex:
- Barry Leitch
- Charles Deenen
- Chris Stamper
- David Whittaker
- David Wise
- Hirohiko Takayama
- Hirokazu Tanaka
- Jason Brooke
- Jeroen Tel
- Johannes Bjerregaard
- Jonathan Dunn
- Julie Dunn
- Junko Ozawa
- Kazuo Sawa
- Keiji Yamagishi
- Koichi Sugiyama
- Mark Betteridge
- Mark Cooksey
- Martin Galway
- Matt Gray
- Matthew Cannon
- Michiharu Hasuya
- Mikio Saito
- Paul Norman
- Paul Webb
- Peter Clarke
- Rob Hubbard
- Thomas Petersen
- Toshiaki Sakoda
- Yoshiaki Inose