Assembly
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.
Several people like Rob Hubbard and Hirokazu Tanaka were composers and programmers at the same time.
Contents
Editors
Monitor
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
Assembler
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:
.byte f3,g3,a3,as3,c4,d4,e4,f4
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.
Cross assembler
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.
Several companies like Lucasfilm Games and Ocean Software had their own cross assemblers. A company developed and published the very popular Programmers Development System for DOS.
Today, everyone can download free assemblers that save the compiled music on their PC or Mac hard drive, for use in an emulator.
Mikes Assembler
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.
Composers
The following composers used assembler or hex:
- Aleksi Eeben
- Barry Leitch
- Charles Deenen
- Chris Stamper
- David Whittaker
- David Wise
- Hirohiko Takayama
- Hirokazu Tanaka
- Jason Brooke
- Jeremy Evers
- Jeroen Tel
- Johannes Bjerregaard
- Jonathan Dunn
- Jon Wells
- Julie Dunn
- Junko Ozawa
- Kazuo Sawa
- Keiji Yamagishi
- Koichi Sugiyama
- Manfred Linzner
- Mark Betteridge
- Mark Cooksey
- Martin Galway
- Martin Wodok
- Matt Gray
- Matthew Cannon
- Michiharu Hasuya
- Mikio Saito
- Paul Norman
- Paul Webb
- Peter Clarke
- Rob Hubbard
- Stéphane Hockenhull
- Thomas Petersen
- Toshiaki Sakoda
- Yoshiaki Inose
Links
- en.wikipedia.org/wiki/Machine_code_monitor - Wikipedia on monitors.
- en.wikipedia.org/wiki/Assembly_language - Wikipedia on assemblers.