Action!#

Clinton Parker, OSS, 1983

Background#

Action! is an Atari-specific programming language written by Clinton Parker and sold by Optimized Systems Software (OSS) in ROM cartridge form starting in August 1983. It is the only language other than BASIC and assembler) that had real popularity on the platform and saw any significant coverage in the Atari press; type-in programs and various technical articles were found in most magazines. In comparison, languages like Forth and Logo saw much less use and almost no press coverage.

Reviewers at the time gushed about the system. They noted that practically every aspect was superior to anything available at the time; compiling was almost instantaneous, the resulting code ran almost as fast as hand-coded assembler, the full-screen editor was universally loved, and the entire system took up only 8k due to clever memory management. The only complaint, also universal, was the poor quality of the original manual set.

Action! uses a greatly cut-down version of the ALGOL syntax, and thus bears strong similarities with Pascal and C, which were also derived from ALGOL. Like those languages, Action! is procedural, with programs essentially consisting of a large collection of functions that call each other. It lacked encapsulation or data hiding, but that is not a serious concern in the limited program sizes available on an 8-bit machine. Syntactically it looks very similar to Pascal, with the exception that it uses ALGOL 68 DO/OD style bracketing rather than Pascal's BEGIN/END.

Action! included a number of features to allow it to run as fast as possible. Notably, it's main data types were BYTE, INT and CARD, 8-bit and 16-bit signed and unsigned values, respectively. These map directly onto the basic 6502-types. The language also included a syntax to directly refer to these objects in memory so they could be mapped into hardware registers. For instance, one could set a variable to BYTE RTCLOK=20 which defined the 8-bit value at memory location 20 to be the value of the real-time clock. The user could then read or write to that register using the name RTCLOK.

Action! had a number of limitations, none of them very serious. Variables were assigned to memory in procedures, not on a stack, so recursion was not supported internally. Curiously, Action! did not include support for floating point types, although such support is built into the machine's OS ROM (see Atari BASIC for details) and available to any programming language. This is a significant limitation in some roles, although perhaps not for its target market. It also lacked most string handling, but made up for this somewhat with a series of PRINT commands that made formatted output easy.

Generally, Action! programs had performance on-par with reasonable-quality assembler, while being much easier to program. In one review, it ran Byte's Sieve of Eratosthenes 219 times faster than Atari BASIC, while its source was only a few lines longer. In comparison, the assembler version's source ran on for several pages. Such performance, combined with terse code and library functions to access much of the platform's hardware, made it suitable for action games while still having a simple source format suitable for type-in programs. It deserved to be much more popular, and may have been had it been released earlier, or by Atari itself.

Action! inspired several similar languages that differ largely in syntax and various features that they do or do not support. Examples include PL65 and Quick.

Examples#

; Hello world in Action! programming language for the Atari 8-Bit computers
PROC Hello()
   PrintE("Hello World!")
RETURN

The ; is a comment marker, which was a commonly used as the comment marker in assembler as well. The PROC is the start of a PROCedure, which ends (perhaps oddly) with RETURN. In Action!, the last PROC in the program is the one that runs first, in this case "Hello". This is something of a mix between Pascal where the "global code" defines the program entry point, and C, where the function called "Main" is the entry point. The only line of code in this example is PrintE, which simply prints a string, while the more common PrintF is a formatted print similar to printf in C.

Like assembler, it was common for variables to be specified at a particular address that mapped onto one of the Atari's "shadow registers" that were used to communicate between the hardware and user programs. Here is a simple variation on Hello World that demonstrates this concept, as well as a basic loop:

; Hello world in a loop
PROC Hello()
BYTE RTCLOK=20,       ; decimal address of system timer
     CONSOL=$D01F     ; hex address of the key-pressed register
CARD TIME
     
    RTCLOK=0 ; reset the clock
    WHILE CONSOL>6 ; did the user press a key?
    DO
        PRINTE("Hello World!")
    OD
    TIME = RTCLOK
    PRINTF("Ran for %E %U jiffies",TIME)
RETURN
Note that the definitions of RTCLOK and CONSOL are not setting the values, but stating that they are at those memory locations. The syntax changes when those variables are accessed; the RTCLOK=0 does set the value of that location. Also notice the syntax of loops, which work similarly to Pascal's BEGIN/END but use DO/OD.

There is a clever trick in this code. Note that RTCLOK is defined as a BYTE but TIME is defined as a CARD, a 16-bit value. This is because the clock value is stored in three bytes, 18, 19 and 20. By defining TIME as a CARD, when that value is read it automatically reads two bytes, thereby getting a value from both 20 and 19. This solution ignores the third byte, but since the value is from 0 to 65535 jiffies, about 36 minutes, this can safely be ignored for a program that is likely to run for a few seconds. This solution avoids the need to read two bytes and manipulate them into a 16-bit value, something that is commonly found in BASIC programs.

ACTION! source code #

at that point AtariWiki must give the highest award possible:

Thanks#

Thank you so much Mr. Parker, we can't thank you enough for what you have done for us.

Thank you so much Mr. Parker

Further thank you Alfred from AtariAge for preserving the source code for generations to come. We are deep in your debt.

Thank you Alfred

  • Action-Editor.asm(info) ; Source code for the ACTION! editor extracted out of the ACTION! source code. Mega-thanks to Alfred from AtariAge. :-)))

Blogs#

Manuals and Docs#

New ACTION! versions > 3.6#

  • Action! greater than version 3.6 ; thanks to JAC! for compiling and fixing the known bugs. Please go ahead with your outstanding work in this, we really appreciate your help and work very much.

CAR-Images#

ROM-Images#

Runtimes#

XEX-Files#

  • ACTION.XEX(info) ; Thanks goes to Peter Dell for making the XEX-file out of the above source code. Peter, we owe you so much, please go ahead! :-)
  • Action_Editor-MADS.xex(info) ; If you rename the file to E.COM, you can even use it under SpartaDOS I for example with D1:E MYSRC.ACT to direct load the MYSRC.ACT file into the editor. Further, this editor can even be used for BASIC, PASCAL, FORTH etc... A Giga-thanks goes to Alfred from AtariAge for extracting the source code from Clinton Parker's original source code and JAC! from AtariAge for building the xex file from that very source code, while adapting to MADS. Great job, not only for Action! :-)))

Mini-LIBs (and/or independant Runtime Parts)#

Functions#

Code#

Tools#

Misc#

Still missing: Graphics Utilities Library and Shape Editor#

Now just these two are missing. Any hint, any help is welcome at any time. We would really appreciate your help in that case.

Graphics Utilities Library for ACTION! screen 1

Graphics Utilities Library for ACTION! screen 2

Shape Editor and Animator for ACTION!

Action Articles in Magzines#

Analog#

TitleIssueLanguageComment
Review Action!#16 (02/ 84)enreview
An Introduction to ACTION! #17 + #18 (03+ 04/ 84)entutorial
Stars in 3D#20 (07/ 84)endemo
Bounce in ACTION!#20 (07/ 84)engame
Pulse in ACTION!#26 (01/ 85)endemo
More Fun with Bounce!#27 (02/ 85)engame
Demon Birds#28 (03/ 85)engame
Roto#31 (06/ 85)engame
Color the shapes#32 (07/ 85)engame
Getting in on the Action! 1#32 (07/ 85)enON-LINE Action! Tutorial
Getting in on the Action! 2#35 (10/ 85)enON-LINE Action! Tutorial
Sneak attack#36 (11/ 85)engame
Air hockey#38 (01/ 86)engame
D-Check#44 (07/ 86)entool
Trails#50 (01/ 87)en
ACTION! Zero Free#54 (05/ 87) entool

Antic#

TitleIssueLanguageComment
Interrupts in ACTION!Vol. 3 #3 (07/ 84)en
Demo PrettyVol. 3 #7 (11/ 84)endemo from Antic I/O-Board
SPLASH in ACTION!Vol. 3 #12 (04/ 85)endemo
Game AMAZING in ACTION!Vol. 4 #1 (05/ 85)engame
View 3DVol. 4 #2 (06/ 85)entool
Dark StarVol. 4 #3 (07/ 85)engame:Zapping Aliens With Radioactive Waste
Display MasterVol. 4 #4 (08/ 85)en
Eight QueensVol. 4 #5 (09/ 85)en92 chess solutions in 40 seconds
Video StretchVol. 5 #6 (10/ 86)entool
Killer ChessVol. 6 #10 (02/ 88)engame
ReardoorVol. 6 #10 (02/ 88)engame
FrogVol. 6 #10 (02/ 88)engame
ACTION! ToolboxVol. 7 #6 (10/ 88)enLightning-fast command finder (Wordfind and Matchup)

ATARImagazin#

TitleIssueLanguageComment
Schnelle Vektoren in ACTION!#1 (1-2/ 87)getutorial:Action!-Center Teil 1
Schnelle Umwege in ACTION!#2 (3-4/ 87)getutorial:Action!-Center Teil 2
Interne Variablen#3 (5-6/ 87)getutorial:Action!-Center Teil 3
Was ist dran an Action!?#4 (7-8/ 87)getutorial:Action!-Center Teil 4

CK Computer Kontakt#

TitleIssueLanguageComment
Musik in ACTION #10/85ge tutorial
ACTION! noch schneller #6-7/86ge tutorial

Atari Magazine#

TitleIssueLanguageComment
ACTION! Deel nlA collection of ACTION! Articles

Add new attachment

Only authorized users are allowed to upload new attachments.

List of attachments

Kind Attachment Name Size Version Date Modified Author Change note
xex
ACTION.XEX 16.2 kB 1 06-Apr-2015 03:49 Roland B. Wassenberg ACTION.XEX
car
ACTION_Version_3.6_(C)_1983_AC... 16.4 kB 1 06-Apr-2015 03:48 Roland B. Wassenberg ACTION_Version_3.6_(C)_1983_ACS_034M CAR
rom
ACTION_Version_3.6_(C)_1983_AC... 16.4 kB 1 06-Apr-2015 03:55 Roland B. Wassenberg ACTION_Version_3.6_(C)_1983_ACS_034M.rom
car
ACTION_Version_3.6_(C)_1983_AC... 16.4 kB 1 06-Apr-2015 03:49 Roland B. Wassenberg ACTION_Version_3.6_(C)_1983_ACS_M091.car
rom
ACTION_Version_3.6_(C)_1983_AC... 16.4 kB 1 06-Apr-2015 03:55 Roland B. Wassenberg ACTION_Version_3.6_(C)_1983_ACS_M091.rom
asm
Action-Editor.asm 61.0 kB 1 07-Jun-2018 02:51 Roland B. Wassenberg Action-Editor.asm
pdf
Action-Handbuch-komplett_2016_... 967.3 kB 1 26-Jun-2016 20:57 Roland B. Wassenberg Action-Handbuch-komplett_2016_von_GBXL
xex
Action_Editor-MADS.xex 5.6 kB 1 07-Jun-2018 02:36 Roland B. Wassenberg Action_Editor-MADS.xex
pdf
Action_manual_3rd-revised_edit... 884.8 kB 1 26-Jun-2016 20:56 Roland B. Wassenberg Action_manual_3rd-revised_edition_2015_by_GBXL
jpg
Graphics Utilities Library 1.j... 31.6 kB 1 01-Feb-2015 16:28 Roland B. Wassenberg Graphics Utilities Library 1
jpg
Graphics Utilities Library 2.j... 31.7 kB 1 01-Feb-2015 16:28 Roland B. Wassenberg Graphics Utilities Library 2
atr
OSS_ACTION_3.6_and_REAL_files_... 92.2 kB 1 06-Apr-2015 03:49 Roland B. Wassenberg OSS_ACTION_3.6_and_REAL_files_with_DOS_XL_2.30p_Color
atr
OSS_ACTION_Programmers_Aid_Dis... 92.2 kB 1 24-Feb-2014 20:28 Roland B. Wassenberg OSS ACTION! Programmers' Aid Disk 1.00
pdf
Optimized_Systems_Software_Sof... 351.2 kB 1 19-Oct-2017 22:54 Roland B. Wassenberg Optimized_Systems_Software_Software_License_Agreement.pdf
jpg
Shape Editor and Animator.jpg 30.6 kB 1 01-Feb-2015 16:28 Roland B. Wassenberg Shape Editor and Animator
atr
TURBO-DOS_XE_with_ACTION_Disk_... 92.2 kB 1 06-Apr-2015 03:49 Roland B. Wassenberg TURBO-DOS_XE_with_ACTION_Disk_1.atr
atr
TURBO-DOS_XE_with_ACTION_Disk_... 92.2 kB 1 06-Apr-2015 03:49 Roland B. Wassenberg TURBO-DOS_XE_with_ACTION_Disk_2.atr
jpg
Thank you Alfred.jpg 14.6 kB 1 04-Feb-2015 03:22 Roland B. Wassenberg Thank you Alfred
jpg
Thank you Mr. Parker.jpg 16.2 kB 1 04-Feb-2015 03:22 Roland B. Wassenberg Thank you Mr. Parker
pdf
The ACTION Run Time Package-A ... 240.5 kB 1 24-Feb-2014 20:50 Roland B. Wassenberg The ACTION! Run Time Package-A Reference GUIDE
pdf
The ACTION! Run Time Package-A... 160.8 kB 2 16-Mar-2014 23:49 Roland B. Wassenberg The ACTION! Run Time Package-A Reference GUIDE.pdf
atr
The ACTION! RunTime Disk.atr 92.2 kB 1 30-Jan-2014 05:18 Roland B. Wassenberg The ACTION! RunTime Disk
atr
The ACTION! Toolkit.atr 92.2 kB 1 30-Jan-2014 05:19 Roland B. Wassenberg The ACTION! Toolkit
atr
The Action RunTime Disk-Origin... 92.2 kB 1 06-Feb-2014 19:11 Roland B. Wassenberg The Action RunTime Disk-Original
pdf
The Action! Toolkit.pdf 892.3 kB 1 30-Jan-2014 05:14 Roland B. Wassenberg The Action! Toolkit
pdf
The_Action!_Toolkit_Allan.pdf 4,556.2 kB 1 05-Jul-2015 14:18 Roland B. Wassenberg The_Action!_Toolkit_Allan.pdf
pdf
The_Action!_Toolkit_AtariAge.p... 7,386.0 kB 1 05-Jul-2015 14:18 Roland B. Wassenberg The_Action!_Toolkit_AtariAge.pdf
pdf
The_Action_Toolkit.pdf 240.5 kB 1 24-Feb-2014 19:24 Roland B. Wassenberg The ACTION! Run Time Package-A Reference GUIDE
txt
acsterm.txt 38.9 kB 1 16-Jun-2017 13:16 Roland B. Wassenberg acsterm.txt
pdf
action_rev_3-5_GBXL_2018.pdf 918.2 kB 2 01-Aug-2018 20:06 Roland B. Wassenberg action_rev_3-5_GBXL_2018.pdf
pdf
action_rev_3-6_GBXL_2018.pdf 987.4 kB 1 05-Nov-2018 21:03 Roland B. Wassenberg action_rev_3-6_GBXL_2018.pdf
« This page (revision-230) was last changed on 05-Nov-2018 21:04 by Roland B. Wassenberg