Est. 1983 Intermediate

Action!

Clinton Parker's cartridge-based compiled language for the Atari 8-bit computers, an ALGOL-like systems language with a built-in full-screen editor whose programs ran within reach of hand-written 6502 assembly in contemporary magazine benchmarks.

Created by Clinton Parker (published by Optimized Systems Software)

Paradigm Procedural, Structured
Typing Static (BYTE, CARD and INT integer types, pointers, arrays and records; no built-in floating point)
First Appeared 1983
Latest Version Version 3.6 (final OSS cartridge revision, c. 1983–84; source released under the GPL in 2015)

Action! is a compiled, procedural programming language and integrated development environment for the Atari 8-bit home computers, written by Clinton Parker and sold on cartridge by Optimized Systems Software (OSS) starting in August 1983. It combined a full-screen editor, a fast compiler, a monitor/debugger and a run-time library on a single ROM cartridge. Its ALGOL-family language was designed from the start around the MOS Technology 6502 processor.

In an era when most Atari owners chose between slow, interpreted Atari BASIC and tedious hand-written assembly language, Action! offered a third option: structured, readable code that compiled in seconds and ran many times faster than BASIC. Reviewers of the time were enthusiastic. Its speed and 6502-friendly design made it one of the few languages besides BASIC and assembly to gain real popularity on the platform.

History & Origins

From Xerox Alto microcode to the Atari

Before Action!, Clinton Parker worked on compilers in a very different setting. Together with Henry Baker he wrote Micro-SPL, documented in a September 1979 report from Synapse Computer Services. Micro-SPL was “a high level programming language similar to Algol” whose compiler turned programs directly into microcode for the Xerox Alto. It automatically generated an interface so that BCPL programs could call Micro-SPL routines as if they were external BCPL routines.

The report made bold claims for this approach. It said Micro-SPL microcode took only 30–50% as long to write as hand microcode and 10% as long to debug, and ran “over ten times faster than an equivalent BCPL program and perhaps half as fast as good hand written microcode.” These were the authors’ own estimates, not the results of a published benchmark. Micro-SPL’s syntax already used many words Action! programmers would recognise: routines introduced by PROC or FUNC, INT and INT ARRAY declarations, and EXIT and RETURN statements.

In a 2015 interview with the ANTIC Atari podcast, Parker recalled buying an Atari computer for home use and being disappointed by the lack of development tools for it. That was the spark for Action!. He considered selling it himself but partnered with OSS, the company founded by the authors of Atari BASIC and Atari DOS, which already specialised in languages and utilities such as BASIC A+ and the MAC/65 assembler.

Release and reception

Action! reached the market in August 1983. OSS packaged it in what Brian Moriarty memorably called a “hideous orange cartridge”. This was one of the company’s 16K bank-switched “SuperCartridges”, which appeared to the computer as an ordinary 8K cartridge and switched blocks of ROM in and out as needed, leaving more RAM free for user programs.

The cartridge went through several revisions early on. Moriarty’s February 1984 review in ANALOG Computing explained that the original release was Version 3.1, that Version 3.3 corrected a number of minor bugs, and that the final Version 3.6 “should be ready soon after you read this.” (Owners could check their version by examining cartridge address $B000 from the monitor.) The 3.6 ROM images preserved today reportedly carry a 1983 copyright notice.

The press response was strongly positive:

  • ANALOG Computing (Brian Moriarty, February 1984) wrote that the language’s claims to be the fastest high-level language on the Atari “appear to be totally justified” and called Action! “one of the most valuable development tools ever published for the Atari.” Its main criticism was the manual, which “suffers from lack of confidence, uncertain organization and a shortage of good, hard technical data.”
  • Hi-Res (Leo Laporte, May/June 1984) reviewed the $99 cartridge and summed it up: “This language is like a finely tuned racing car. There’s a lot that can go wrong and it may take a little more skill to drive.”
  • BYTE (Ed Schneeflock, March 1985) ran a sidebar titled “Action! A Poor Man’s C?” and concluded that “Action! puts programming for the Atari in a whole new dimension.”
  • Mapping the Atari (Ian Chadwick, revised edition, 1985): “Action! is probably the best language yet for the Atari; it’s a bit like C and Pascal, with a dash of Forth. I recommend it.”

Parker told the ANTIC podcast that Action! “was selling well enough that I was able to for several years to pretty much make a living off the royalties.”

Design Philosophy

Action! was built around one idea: a high-level language should compile to machine code that fits the processor it runs on. Rather than relying on a sophisticated optimiser, the language constructs were designed to map cleanly onto 6502 instructions.

The clearest example is how Action! handles variables. The 6502 has a hardware stack of only 256 bytes, which makes stack-based activation records expensive. So Action! gives every variable, including the locals of procedures and functions, a fixed address in memory. That removes a lot of overhead from procedure calls, but it has a well-known price. As BYTE noted, “All variables are static, so writing recursive routines requires explicit stack manipulation.”

Moriarty disassembled the output of a compiled Action! benchmark and praised the result as “pure in-line machine code with an occasional JSR into a cartridge library routine… simple, clean, and very, very swift. The output of a typical C or Pascal compiler looks like spaghetti by comparison.”

The designers also made it easy for BASIC programmers to switch. Many library routines deliberately echo Atari BASIC commands (Graphics, Plot, DrawTo, Poke, Peek, Stick), and part of the manual explained language features in terms of their BASIC equivalents.

Key Features

An integrated environment

The Action! cartridge contained four cooperating parts:

ComponentRole
EditorFull-screen, scrolling text editor with no line numbers, two windows, block operations and global search and replace
CompilerCompiles source directly from the editor or from disk into memory, fast enough that small programs were compiled “before you take your finger off the RETURN key” (Moriarty)
MonitorCommand shell for switching between editor and compiler, running programs or individual routines, and examining and changing memory
Run-time libraryInput/output, graphics, sound and utility routines stored in the cartridge ROM

The editor was so well regarded that Batteries Included later built the Atari version of its PaperClip word processor around it.

Data types

Action! has three fundamental numeric types, plus arrays, pointers and user-defined record types:

TypeRepresentationRange
BYTE (also CHAR)Unsigned 8-bit0 to 255
CARD (cardinal)Unsigned 16-bit0 to 65,535
INTSigned 16-bit−32,768 to 32,767

The cartridge library has no floating-point support. Moriarty called this “a mysterious lack of support for the Atari’s built-in floating point math package,” and OSS supplied floating-point routines on a separate disk.

A variable can be initialised either with a value (in brackets) or with a memory address. The address form makes Atari hardware registers and operating-system variables directly usable as ordinary variables:

BYTE age=[21]        ; a variable initialised to 21
BYTE leftMargin=82   ; a variable located at address 82 (LMARGN)
CARD population=$600 ; a 16-bit variable at address $600

TYPE CORD=[CARD x,y] ; a user-defined record type
CORD point

PROC Main()
  point.x=42
  point.y=23
  PrintE("Hello, World!")
RETURN

Structured control flow

Action! uses an ALGOL-like keyword syntax, with blocks closed by reversed keywords in the ALGOL 68 style (IF ... FI, DO ... OD). It supports IF/ELSEIF/ELSE, FOR ... TO ... STEP, WHILE and UNTIL loops, and EXIT to leave a loop early. Procedures (PROC) and functions (FUNC) take parameters passed by value, and pointers stand in when pass-by-reference is needed. The ==+ style operators update a variable in place (K==+PRIME adds PRIME to K).

The compiler directives DEFINE (much like C’s #define), INCLUDE and SET cover macros, multi-file programs and direct memory changes at compile time.

Performance: the benchmarks

Speed was Action!’s selling point, and contemporary reviewers measured it carefully. All of the figures below come from 1980s magazine reviews on real hardware. They compare Action! against Atari BASIC, and in one case against assembly:

SourceBenchmark and conditionsAtari BASICAction!
ANALOG Computing, Feb 1984Sieve of Eratosthenes (1,899 primes), one pass, unmodified 48K Atari 800, ANTIC display turned off19,490 jiffies (about 5½ minutes)89 jiffies (just under 1½ seconds), about 219 times faster
ANALOG Computing, Feb 1984Moriarty’s “Screen-Fill” test, filling a GRAPHICS 24 screen one byte at a time, 48K Atari 8004,025 jiffies (about 67 seconds)32 jiffies (slightly more than half a second), 126 times faster
Hi-Res, May/June 1984Sieve (1,899 primes) run 10 times“nearly an hour”18 seconds (“about 200 times faster”)
BYTE, Mar 1985Ten iterations of the Sieve; the reviewer’s own assembly version took 10 seconds38 minutesunder 18 seconds

Moriarty noted that his BASIC versions favoured clarity over speed, and that he had improved the BASIC Sieve by more than 30% with “tricky recoding”. By replacing the Screen-Fill loops with the library call SETBLOCK, he got the Action! time down to five jiffies, “essentially the same amount of time it takes the equivalent machine-language code to do the same job.”

The sieve program OSS shipped with the language shows typical Action! code, including its direct use of hardware addresses:

BYTE RTCLOK=20, ; addr of sys timer
     SDMCTL=559 ; DMA control

BYTE ARRAY FLAGS(8190)

CARD COUNT,I,K,PRIME,TIME

PROC SIEVE()

  SDMCTL=0 ; shut off Antic
  RTCLOK=0 ; only one timer needed

  COUNT=0         ; init count
  FOR I=0 TO 8190 ; and flags
    DO
    FLAGS(I)='T
    OD

  FOR I=0 TO 8190
    DO
    IF FLAGS(I)='T THEN
      PRIME=I+I+3
      K=I+PRIME
      WHILE K<=8190
        DO
        FLAGS(K)='F
        K==+PRIME
        OD
      COUNT==+1
    FI
    OD
  TIME=RTCLOK ; get timer reading
  SDMCTL=34   ; restore screen

  PRINTF("%E %U PRIMES IN",COUNT)
  PRINTF("%E %U JIFFIES",TIME)
RETURN

Limitations

Contemporary reviewers were clear about its weak points:

  • Programs need the cartridge. Compiled code calls library routines inside the ROM, so a program could not run on a machine without Action! until OSS offered its run-time packages.
  • No recursion without extra work, because all variables are static.
  • No separate linking. BYTE noted that Action! “can’t link separately compiled routines.”
  • Limited data structures. You “cannot have records of arrays or arrays of records,” although pointers could work around this.
  • Thin graphics and memory-management support in the cartridge library, which Moriarty said offered “exactly the same (limited) access to the hardware as Atari BASIC.”

Evolution

Action! was never a moving target the way modern languages are. After the quick succession of cartridge versions 3.1, 3.3 and 3.6, OSS expanded it with add-on disks rather than new language versions:

  • Programmer’s Aid Disk (PAD), about $30 according to ANALOG, was later known as the Action! Toolkit. It added library routines for player/missile graphics, memory management and floating-point maths, plus demonstration programs.
  • Run-time packages. Moriarty reported plans for a Personal Run-Time Package for licensed users at around $30 and a commercial run-time licence at approximately $300. These let compiled programs run without the cartridge, making commercial distribution practical.

Parker told the ANTIC podcast that he saw no point in porting Action! to the IBM PC, since C compilers were already available there, so the language stayed Atari-only. As the Atari 8-bit market declined in North America, so did OSS. Wikipedia, citing the same interview, says distribution moved late in the product’s life to Electronic Arts, which did little with it. In January 1988 OSS merged with ICD, the maker of SpartaDOS and Atari hardware add-ons.

Open source and new tools

Interest in Action! outlived its commercial life. In 2015 Clinton Parker released the Action! 3.6 assembly-language source code under the GNU General Public License. The copy that surfaced on the AtariAge forums was described as the original source as received from ICD, written for ICD’s own cross-assembler. The SourceForge project Action! Programming Language (atari-action), registered on 2 February 2015, was set up “to preserve the Action! source code, provide fixes for known bugs, and add new features in version 3.7.”

Several tools now let developers write Action! code on modern computers:

  • Effectus, by Bostjan Gorisek, began as a cross-compiler posted in alpha form on AtariAge, reportedly around 2007. Later versions translate Action! source into Mad Pascal, which Tomasz Biela’s Mad Pascal and Mad Assembler (MADS) then turn into an Atari executable. Its goal is to “emulate Action! language as close as possible.” Version 0.5.6 is dated 18 August 2024.
  • atari_action_compiler, published by Jakub Husak in 2026, takes a different approach. It runs the original Action! cartridge code inside an emulated 6502 to compile source files from the command line, producing Atari .xex executables.

Current Relevance

Action! is a historical language. No new Atari 8-bit hardware is sold and there is no official modern release. It still has an active retro-computing following, though. The AtariWiki Action page collects the original cartridge images, the Programmer’s Aid Disk, run-time sources, manuals and magazine articles. The community has held dedicated Action! workshops, including three in Essen, Germany, in October 2010, 2011 and 2012.

Today the practical way to use Action! is in an Atari 8-bit emulator such as Altirra or Atari800 with a Version 3.6 cartridge image, or with one of the cross-compilers above. No official or widely used Docker image exists. In his 2015 interview Parker said he was surprised by the level of interest the language still attracted, which he thought was greater than it had been in the late 1980s.

Why It Matters

Action! showed that a home computer with a slow 8-bit processor and a few dozen kilobytes of RAM could support a genuinely productive, structured, compiled language. The trick was to design the language for the hardware instead of porting a large-machine language down to it. Its fixed-address variables, integer-only core types and direct access to hardware registers were all deliberate trade-offs that put execution speed and small code first.

It also shipped as a complete environment on a cartridge, with editor, compiler and debugger available the moment the machine powered on. Commercial products including HomePak were built with it, and its editor became the core of the Atari PaperClip word processor. More than four decades after its release, its GPL-licensed source code and new cross-compilers keep it alive for people writing new software for the Atari 8-bit computers.

Timeline

1979
Henry Baker and Clinton Parker document Micro-SPL (Synapse Computer Services, September 1979), an ALGOL-like language that compiles directly to Xerox Alto microcode and uses the PROC/FUNC, INT and EXIT vocabulary Action! would later share
1983
Optimized Systems Software (OSS) ships Action! in August on a 16K bank-switched orange "SuperCartridge" for the Atari 8-bit computers, combining an editor, compiler, monitor and run-time library. Version 3.1 is soon followed by bug-fix release 3.3
1984
Brian Moriarty's February review in ANALOG Computing calls Action! "one of the most valuable development tools ever published for the Atari" and reports the final Version 3.6 as due soon. Leo Laporte reviews the $99 cartridge in the May/June issue of Hi-Res
1984
Batteries Included publishes Russ Wetmore's HomePak, written in Action!. Ian Chadwick later notes that even its Commodore 64 version was written in Action! on the Atari
1985
Batteries Included tells ROM magazine (interview of 24 January 1985) that its forthcoming Atari version of PaperClip is built around the Action! editor, developed with Clinton Parker's involvement. In March, BYTE runs Ed Schneeflock's sidebar "Action! A Poor Man's C?"
1988
OSS merges with ICD, the maker of SpartaDOS, in January. The Action! source later circulated by the community is described as the copy received from ICD
2007
Bostjan Gorisek (Gury) posts Effectus, a PC cross-compiler for Action! syntax, in alpha form on the AtariAge forums (approximate date; the forum thread is the only record)
2015
Clinton Parker releases the Action! 3.6 assembly source code under the GNU General Public License. The atari-action SourceForge project is registered on 2 February 2015 to preserve it, fix known bugs and work toward a version 3.7
2015
Parker is interviewed for ANTIC The Atari 8-bit Podcast (Interview 111, recorded 6 September and published 31 December), recalling that Action! royalties let him make a living for several years
2026
Jakub Husak publishes atari_action_compiler, a command-line cross-compiler that runs the original Action! cartridge code inside a 6502 emulator to compile Action! source on modern machines

Notable Uses & Legacy

HomePak (Batteries Included, 1984)

Russ Wetmore's integrated word processor (HomeText), database (HomeFind) and terminal program (HomeTerm) was written in Action! for the Atari 8-bit computers. Ian Chadwick's revised Mapping the Atari (1985) adds that even the Commodore 64 version was written in Action! on the Atari.

PaperClip for the Atari 8-bit computers

In a 1985 interview with ROM magazine, a Batteries Included executive explained that the Atari version of the best-selling PaperClip word processor was built with the editor from the Action! cartridge at its core, after the company approached Clinton Parker to make that editor available for a full word processor.

Type-in programs in ANALOG Computing and Antic

Action! was one of the few Atari languages besides BASIC and assembly to get regular coverage in the Atari press. Programs and tutorials in ANALOG Computing and Antic gave readers source code to type in and compile.

Hobbyist utilities and games

BYTE reviewer Ed Schneeflock described using Action! for a terminal program, a program that compared two BASIC programs, a disk catalogue printer and several games, and said he was writing a compiler for a subset of Pascal in it.

Present-day Atari 8-bit development

The GPL source release, the Effectus cross-compiler and German Action! workshops held at the Unperfekthaus in Essen (2010–2012) have kept the language in use among retro-computing developers writing new Atari software.

Language Influence

Influenced By

Micro-SPL ALGOL

Running Today

Run examples using the official Docker image:

docker pull
Last updated: