History - Fri, Apr 3, 2020
MadMac / smac / rmac
The story of rmac is a long one. Initially started by an Atari employee by the name of Landon M. Dyer as an in-house tool to replace the Atari ST devkit assembler AS68 (by Digital Design). Landon was not happy with AS68: that assembler was meant to be a back end to their C compiler, hence it lacked a lot of things. Speed is one of the things; AS68 was written for correctness, not speed. So developers had to wait unreasonable amounts of time for their assembly code to be generated. Another major factor was features. A backend assembler has no need for macros, nor directives like rept.
Landon, having worked on 8 bit computers and knowing the true potential of good tools, took it upon himself to rectify the situation. Hence MadMac was born. It must have caused a sensation inside Atari because eventually it ended up in the official Atari SDK. Judging from the official manual, this was around 1986, roughly one year after the initial release of the 520ST. (The manual mentions speed times on a DEC VAX 11⁄780, so it is safe to assume that MadMac was written during the time where the Atari ST was still on prototype/design phase).
Some more info can be found on this blog post by Landon: Some assembly required.
MadMac was supported long after Landon had left Atari, reportedly by Eric R. Smith (the man synonymous with MiNT) and Brainstorm. Especially Brainstorm added a lot of the Jaguar extensions which ended up on the official Jaguar SDK.
Fast forward to 2008 when Mr. Dyer gracefully released the source code to MadMac! This was a boon to the community, especially to Jaguar developers who were trying to get rid of the old Atari SDK tools and would resort to emulation in order run the old tools in order to assemble and link their code. Specifically one developer called SubQMod (AKA RealityMan) took the old sources, fixed them and recreated the missing functionality (mostly the Jaguar extensions). Hence smac was born. Here is the smac page as preserved by archive.org since the original pages are now defunct.
smac soon became the go-to tool for assembling Jaguar source, and with the help of some people reporting issues (often comparing smac and madmac outputs) it became a very robust tool. Sadly SubQMod lost interest in the Jaguar altogether so smac was abandoned. Thankfully he released the source code so his work could be continued.
Bugs were still being discovered and patched by individuals, but there was not a central distro nor a maintainer to keep everything in one place. So a few volunteers led by James “Shamus” Hammons took it upon themselves to continue and improve smac. In order to differentiate the new versions from the old ones, changing the name was proposed. Thus in 2011 rmac was born.
While smac was pretty robust, it had a few weird quirks. Bugs aside, including binary files was noticeably slow for example. This meant slow assembly times. For a while people were simply happy to use rmac and didn’t mind the speed. But then the slowdowns started annoying the rmac users, so this was addressed. Then suddenly rmac became really fast. So fast in fact that assembly times take less time than it takes the user to lift their finger from the build button. So fast that the regression suite that counts thousands of lines of code spread across many files and projects takes less than a second to finish (on a modern PC). Landon’s brilliant engineering started to shine again. To paraphrase landon “waiting for things to build is dying by degrees” - we took that to heart!
Fast forward a few years when George “GGN” Nakos was suddenly in need for a 68k cross assembler, since none of the existing options satisfied him any more. By studying the original MadMac source code he discovered that there was support for outputting Atari TOS binaries which was stripped out of smac/rmac. Adding that back (with help from Shamus), rmac was able to emit ST and compatible binaries.
6502 was soon added back to the project.
Then people asked if there could be 68020+ support in rmac. This also happened.
Then Jaguar Object Processor (OP) was added, in order to make creation of Object Lists easier. Up until then no tool was able to generate Object lists and the programmer was left to his own devices to create said lists (usually at runtime).
Shortly after, Motorola DSP 56001 mode was added to enable people programming on the Atari Falcon easier.
Lastly, binaries assembled at absolute address output option was added to rmac.
And the story continues…
aln / sln / rln
rln has a similar story to rmac, but less details are known about its past. All we know is that it began life as aln, written by Allan Pratt at Atari. Its source code was surfaced in a CDROM of a series called “Jaguar Extremist Pack”. SubQMod then rebuilt aln, fixed it and named it sln. Finally the same collective of users continued the work, renaming sln to rln.