Assembly

From Video Game Music Preservation Foundation Wiki
Jump to: navigation, search

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.

Editors

Monitor

Forbidden Forest (C64) on a typical 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

Dominator (C64) loaded into a popular 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

Alien 3 (NES) was arranged on a DOS computer.

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:

Links