Writing Music as Text
Music Macro Language describes a score as characters, a tradition older than the console and still used for chip work.

MML and the Character-Based Score
There is a tradition in machine music older than the NES, older than the home computer boom, that turns notation into text: a pitch letter, a duration number, an octave marker, concatenated into a string the hardware or a driver can parse. Music Macro Language — MML — is not a single specification but a family of conventions, most of them sharing enough syntax that a musician fluent in one can read another with modest effort. Its roots reach back to BASIC implementations on late-1970s microcomputers, where a PLAY statement accepted a short string of characters to sound simple tunes through a built-in beeper.
By the time Ricoh's 2A03 was in production, the idea of describing music as parseable text was already domestic common sense in Japan. Famicom composers at Nintendo and elsewhere wrote driver code that consumed exactly this kind of data — channel by channel, note by note — and the boundary between "writing the music" and "writing the code" was blurry enough that some early staff were credited as both programmers and composers. Koji Kondo and Hirokazu Tanaka both worked inside driver frameworks where musical intent had to be expressed as structured data before it became sound. Whether the interface was raw hex tables, proprietary macros, or something recognisably MML-adjacent depended on the studio; the underlying principle was the same.

The Language Under the Chip
MML maps naturally onto the 2A03's architecture. Each channel gets its own string. A pulse channel entry might specify a duty cycle macro before its first note, then proceed through pitches and rests in rhythmic order; the triangle channel, with its locked volume, needs only pitch and duration; noise entries substitute period values for pitch names. The chip's channel model — discrete voices, each with its own register set — and MML's channel-per-string model are almost the same abstraction, which is part of why the format persisted in chip work long after sequencers and DAWs had displaced it everywhere else.
It is worth separating MML from the tracker paradigm that also writes for this hardware.
The limitations, too, rhyme. MML is sequential: you write events in time order, loop points aside. The 2A03 plays events in time order, hardware aside. There is no mixer view, no vertical slice of a moment. A composer working in MML thinks horizontally, one channel at a time, and then assembles the mental image of the whole from those separate lines — exactly the discipline the chip enforces anyway. Where expansion audio like Konami's VRC6 or Namco's 163 added extra voices, MML-based drivers simply gained more channel strings. The formalism scaled without changing shape.
Trackers and MML: Adjacent, Not Identical
It is worth separating MML from the tracker paradigm that also writes for this hardware. A tracker — FamiTracker and its 0CC fork being the tools the current scene actually uses — presents music in a vertical, time-downward grid: rows are ticks, columns are channels, and a composer sees all voices simultaneously. That spatial metaphor is quite different from reading a text string left to right. Trackers borrow ideas from MML (pattern loops, instrument macros) but their interface is graphical and their primary unit is the pattern, not the character.

MML remains active because certain workflows suit it: it versions cleanly in plain text, it diffs, it can be generated programmatically, and it is the native format for several Japanese homebrew and doujin (independent fan-produced) driver ecosystems that never migrated to graphical tools. Compilers such as PPMCK, which is aimed at NES work, carry the tradition forward in explicitly text-based form. For composers who want to treat a score as source code — to branch it, template it, or produce variations algorithmically — the text string is not a constraint; it is the feature.

What MML demonstrates, finally, is that the 2A03's design was low-level enough to be approached from almost any abstraction layer. The chip only knows register writes; everything above that is software. Whether the path from intention to register was a text string compiled into a driver, a tracker pattern converted to a sequence, or hand-assembled hex in a ROM, the hardware was indifferent. The sound it made was the same. The distance between the composer's idea and the chip's output is where all the craft lived.