Preface

Ophis is an assembler for the 6502 microprocessor - the famous chip used in the vast majority of the classic 8-bit computers and consoles. Its primary design goals are code readability and output flexibility - Ophis has successfully been used to create programs for the Nintendo Entertainment System, the Atari 2600, and various 8-bit Commodore machines.

Ophis's syntax is noticably different from the formats traditionally used for these chips; it draws its syntactic inspiration primarily from the assemblers for more modern chips, where the role of tokens is determined more by what they're made of and their grammatical location on a line rather than their absolute position on a line. It also borrows the sophisticated methods of tracking the location of labels when writing relinkable code—Ophis expects that the final output it produces will have only a vague resemblance to the memory image when loaded. Most of the alternatives when Ophis was first designed would place instructions and data into a memory map and then dump that map.

That said, there remain many actively used 6502 assemblers out there. If you're already a seasoned 6502 assembly programmer, or want to get your old sources built again, Ophis is likely not for you—however, if you are writing new code, or are new to the chip while still having other experience, then Ophis is a tool built with you in mind.

History of the project

The Ophis project started on a lark back in 2001. My graduate studies required me to learn Perl and Python, and I'd been playing around with Commodore 64 emulators in my spare time, so I decided to learn both languages by writing a simple cross-assembler for the 6502 chip the C64 used in both.

The Perl one—uncreatively dubbed "Perl65"—was quickly abandoned, but the Python one saw more work. When it came time to name it, one of the things I had been hoping to do with the assembler was to produce working Apple II programs. "Ophis" is Greek for "snake", and a number of traditions also use it as the actual name of the serpent in the Garden of Eden. So, Pythons, snakes, and stories involving really old Apples all combined to name the assembler.[1]

Ophis slowly grew in scope and power over the years, and by 2005 was a very powerful, flexible macro assembler that saw more use than I'd expect. In 2007 Ophis 1.0 was formally released. However, Ophis was written for Python 2.1 and this became more and more untenable as time has gone by. As I started receiving patches for parts of Ophis, and as I used it for some projects of my own, it became clear that Ophis needed to be modernized and to become better able to interoperate with other toolchains. It was this process that led to Ophis 2.

After its release Ophis 2 was picked up by a number of developers work with actual hardware from the period, including prototype machines that never saw production. Some of their contributions have refined the code generators for version 2.1.

This is an updated edition of Programming With Ophis, including documentation for all new features introduced and expanding the examples to include simple demonstration programs for platforms besides the Commodore 64. It also includes updated versions of the To HLL and Back essays I wrote using Ophis and Perl65 as example languages.

Notes

[1]

Ironically, cross-platform development for the Apple II is extremely difficult, and while Ophis has been very successfully used to develop code for the Commodore 64, Nintendo Entertainment System, and Atari 2600, it has yet to actually be deployed on any of the Apples which inspired its name.