BallyAlley_r1_c1.gif BallyAlley_r1_c2.gif BallyAlley_r1_c4.gif
BallyAlley_r2_c1.gif Astrocade Machine Language Documentation BallyAlley_r2_c4.gif

'An In-Depth Look At...' Series An In-Depth Look At... Series: A Supplement to the "Nutting Manual"
for the Bally/Astrocade Computer
By MCM Design

This multi-part programming tutorial series, first "published" online in July 2019, focuses on programming in Z80 assembly language and machine language. Special attention is paid to specifically programming the Bally Arcade/Astrocade.

Astrocade Screen Layout Sheet "Astrocade Screen Layout: 102 x 160 Graph Paper."
By Adam Trionfo.
April 12, 2016.

Use Bally Arcade/Astrocade screenshots taken from the Astrocade emulator included with MAME to create screen layouts on "graph paper." These can then be used to help understand how an Astrocade program functions (such as how the screen is built or laid-out). Included are several graphic files that require a graphics editor (such as Photoshop or GIMP) that can deal with TIFF files that have layers. Instructions explain how to combine a screenshot as a separate layer on the "graph paper."

The instructions on how to do this are available here:
  1. "Astrocade Screen Layout: 102 x 160 Graph Paper" - Documentation (Text).
Astrocade Screen Layout Sheet (Cosmic Raiders Example) "Astrocade Screen Layout: 102 x 160 Graph Paper."
(Cosmic Raiders Example Sheet)
By Adam Trionfo.
September 8, 2016.

This is an example of using the Astrocade Screen Layout: 102 x 160 Graph Paper (above). This image was created by taking a screenshot of Cosmic Raiders in MAME. The screenshot's size was changed to match the required resolution of the Astrocade Screen Layout "graph paper." This image is the end result when screenshot is pasted "behind" the graph paper.

Studying this image gives you some details about the game very quickly. For example, notice that 96 vertical lines are displayed on the screen. This translates to VERBL being set in the program to blank after the 96'th line-- which is exactly what this image shows.

Astrocade Screen Layout Sheet "Astrocade Screen Layout Sheet"
By Adam Trionfo.
March 23, 2002.

     Once you are programming the Astrocade a bit, and setting up a screen, you may find that this sheet, created for personal use, may come in handy. The text version is useful, but it needs a bit of tweaking in order to fit onto one page. To avoid this, a pdf version is also available:
  1. Astrocade Screen Layout Sheet - PDF
Astrocade html color palette "Bally Astrocade Color Table"
Frank Palazzolo.
March 21, 2002.

     Bally Arcade/Astrocade color table as seen on an NTSC television (256 unique colors).

Bally System Description "Bally System Description"
By Dave Nutting Associates.

     This is part of the "Nutting" Manual that was excerpted by the "Cursor" newsletter and released as a separate document through its newsletter in about 1980. This document contains a massive amount of useful, well presented, understandable information. If you want a slightly technical, yet general overview of the way that the Bally Arcade/Astrocade works, then read this. If it interests you, then move on to the full "Nutting" Manual, which explains how to program the Astrocade using the On-Board ROM subroutines.
  1. Bally System Description - Searchable Document
Bit Fidder's Corner, Andy Guevara "Bit Fiddler's Corner, The"
By Andy Guevara.

     The Bit Fiddler's Corner is an Astrocade machine language programming tutorial that ran as a series of serialized articles in the Arcadian newsletter in 1983 and 1984. The Author, Andy Guevara, programmed the "Machine Language Manager" cartridge for the Bally Arcade/Astrocade. This tutorial complements that cartridge, but has a general focus so this information can be used without reinterpretation by Astrocade assembly programmers, or those wishing to learn about the machine.

     The tutorial is also available in a couple of other formats:
  1. Bit Fiddler's Corner - Rich Text Format
  2. Bit Fiddler's Corner - Text Format
Cartridge Making Instructions, Leroy Flamm "Cartridge Making Instructions"
By Leroy Flamm.
September 12, 1985.

     This document explains how to make a cartridge from a tape program.

Code Translation Table "Code Translation Table"
By Ed Horger

This is a code translation table for conversion between decimal, hex and Binary. Ed created this so that he could program in machine language using the Bally BASIC cartridge.

Crime Stopper Tips, Mike Skala "Crime Stopper Tips"
By Mike Skala.

     This article enables the programmer to use Hook Vectors to protect, as best possible, any software written in AstroBASIC from being copied, disassembled, etc.

Entering Machine Language into Blue Ram BASIC "Entering Machine Language into Blue Ram BASIC"
Paul Thacker.
May 22, 2013.

     Here is a definitive technique for making hybrid machine language/Bally BASIC programs.

Machine Language Manager, by The Bit Fiddlers "Machine Language Manager User's Manual"
By The Bit Fiddlers (Andy Guevara).

     This manual explains how to program in machine language using the "MLM" cartridge. There is also plenty of information that explains how to program the Bally Arcade/Astrocade in general. The complete source code listing for the cartridge is included.

Machine Language Programming The Bally Arcade "Machine Language Programming the Bally Arcade"
(Bare Bones-BASIC Only)
By Larry Smith

The Z-80 operates on POKed in data, 16 bits at a time, two bytes in reverse order. For instance, if you had poked in the opcodes 0F D3, the processor reads it as D3 0F. Since Bally BASIC does not understand hex code, the opcodes must first be converted to decimal notation. Say you wanted to POKE in D5 00. First the bytes are swapped (00 D5), then the decimal value of the text digit is multiplied by its column position and the results added together.
  1. Star Graphoids/Rainbow Display - These two programs supplement this ML programming article.
Using EEPROMS Using EEPROMS: A Commentary from MCM Design.
By MCM Design (Michael Matte).
November 2019.

This 10-page commentary, saved as a RTF (Rich Text Format) document, includes how to turn on (or off) a data write protection feature for the newer EEPROMs that offer this option. When this feature is turned on, the EEPROM acts like an EPROM. It's a cool option. Michael used it on one of his 32KB Xicor EEPROMs which now contains my BalcheckHR package to run on my BalcheckHR board. Included are several assembly language examples of how to program an EPROM for the Bally Arcade/Astrocade.

This commentary will help someone interested in using EEPROMs. The reader should have some experience with the old EPROMs, static RAM and ML programming to follow the commentary. Michael just wanted to share what he has learned about EEPROMs because, as he says, "I like EEPROMs."

Peek 'n Poke Manual, by Brett Bilbrey, Edited by Cursor Group "Peek 'n Poke Manual"
By Brett Bilbrey, Edited by Cursor Group.

     An introduction to Astrocade machine language programming in Bally BASIC. Although the manual doesn't credit Brett Bilbrey, he gave all this information to Fred Cornett of the "Cursor Group."

This manual was originally written for the first version of Bally BASIC (the cartridge that requires the Bally Tape Interface). However, almost everything in here is still applicable to the second version of Bally BASIC (the cartridge with the built-in microphone jack-- also referred to as Astro BASIC). The manual includes the machine language program "Critter," which was written for use with Bally BASIC-- and won't run correctly in AstroBASIC without slight modification. An AstroBASIC version of "Critter" can be downloaded here (an explanation of the conversion process is included):
  1. Critter for AstroBASIC
The "Peek n' Poke" manual has some minor errors, the most significant of which is the the "Critter" program's source code has some typos in it. The manual was retyped, reformatted, and had some additional changes made to it in October of 2000 . This updated version is available here:"
  1. "Peek 'n Poke Manual" (OCRed and Edited, pdf)
  2. "Peek 'n Poke Manual" (OCRed and Edited, RTF)
Hacking "Astro Battle" ("Space Invaders") on the Bally Arcade/Astrocade.
By Adam Trionfo.
March 3, 2020.

This article is an edited and expanded collection of postings originally made to the Bally Alley discussion group in August of 2011 that give an overview of how to modify the "Astro Battle" game cartridge, which is Astrocade, Inc.'s 1979 version of "Space Invaders." Included is the binary ROM image for a hack to get rid of the bunkers in the game as well as explanations on how to hack the ROM or use an available Z80 disassembly of the game to make more modifications, such as adding up to 255 lives.

Hello World ML Tutorial "'Hello, World!' Tutorial"
By Adam Trionfo.
December 2011.

     This tutorial describes how to get a machine language "Hello World" program running on a Bally Arcade / Astrocade. This article is aimed at those who want to get started programming the Astrocade using an assembler.

     For those people playing with classic systems, the words "assembler" and "assembly language" are thrown around rather often with little or no explanation of what the words mean. If you're just playing cartridges on your Bally/Astrocade, or loading a few BASIC programs, then there is no reason to understand how the game cartridges work. However, if the idea of what is going on DOES interest you, then this article will benefit you. After you finish reading, you will not only have a better understanding of an assembler, but you will also know how to use one.

     The latest version of the source code for this tutorial is also available:
  1. hello.asm - "Hello, World!" Tutorial Source Code
PLAY Command Tutorial "How to Use the Blue Ram Basic "PLAY%( ) Command"
By George Moses.
Arcadian, June 1983, Page 128 and August 1983, Page 156.

     This tutorial has minor revisions and corrections by Richard Degler and Adam Trionfo. The PLAY command can be directly related to machine language programming and the music synthesizer. This article makes a perfect companion piece to the "Nutting Manual's" Music Processor section (pages 56-60) and Bally Arcade's audio information (103-105).

     This revised tutorial is also available as a Rich Text Document. The contents are the same, but the sections are broken up a bit and some bolding is used.
  1. How to Use the Blue Ram Basic "PLAY%( ) Command - RTF
     The original version, scanned from the Arcadian newsletter, is available:
  1. How to Use the Blue Ram Basic "PLAY%( ) Command - Original Scan from "Arcadian" Newsletter
     The original version is available in text format
  1. How to Use the Blue Ram Basic "PLAY%( ) Command - Text Version
Bally Arcade / Astrocade Programming Sheets Programming and Blank Graph Sheets

     Nine Programming and Graph sheets specifically for use with the Bally Arcade/Astrocade. Many of these were created by Spectre Systems in 1982. The different sheets contain:
  1. BASIC Programmer's Sheet
  2. Z-80 Programmer's Sheet
  3. Screen Map (Type 1, Character Number CX, CY Value)
  4. Screen Map (Type 2, FC/BC Color Map)
  5. Screen Map (Type 3, Right/Left Color Map)
  6. Screen Map (Type 4, Totally Blank)
  7. Screen Map (Type 5, Blank, No Map Key)
  8. Screen Map (Type 6, Blank Character Graph Paper)
  9. Screen Map (Type 7, Character Graph Paper, With Color Key)
Programming the Bally Arcade/Astrocade "Programming the Bally Arcade/Astrocade"
By Adam Trionfo.
April 12, 2016.

This article explains how to set up the PS Pad text editor so that it will automatically assemble the source code of a program that runs on the Zilog Z80 CPU of the Bally Arcade/Astrocade. We'll be using the Zmac z80 cross-assembler, which is a command line-only program.

More specifically, you'll be guided through the process required to make Zmac the default editor for assembling Bally Arcade/Astrocade programs. Once these step-by-step directions are completed, PS Pad will be more than just a text editor; it will become a nearly complete Integrated Development Environment (IDE).

Here is what is covered in this article:
  1. Introduction
  2. Astrocade Programming Using the "Nutting Manual"
  3. Download the Zmac Assembler
  4. Download PS Pad and z80.ini
  5. Download the "Home Video-Game Library" Equates (HVGLIB.H)
  6. Set Up PS Pad for Use with the Zmac Assembler
  7. Test PS Pad by Assembling Z80 Source Code
  8. Summary
Machine Language Manager, "Software and Hardware for the Bally Arcade - A Technical Description"
(aka "Nutting Manual" and/or "The Handbook of Hardware & Software")
Dave Nutting Associates, Inc.

     This manual is called "Software and Hardware for the Bally Arcade - A Technical Description," but it is nicknamed (and most often referred to as) the "Nutting Manual" because it was created by Dave Nutting Associates, Inc. in 1978.

     The "Nutting Manual" includes the information needed to program the Bally Arcade/Astrocade using the many On-Board subroutines built into the 8K ROM. Included are the complete source code listings for the four built-in programs (Calculator, Checkmate, Gunfight, and Scribbling), as well as all of the code for the On-Board subroutines.

     The Bally FAQ has this to say, "["The Nutting Manual" is the] source of most of the programming support for most of the arcade quality games made for the Bally/Astrocade systems." That's a mighty strong recommendation for reading and using it.

     The default version of the "Nutting Manual" that is downloaded is the one that has been retyped and is the easiest to use-- however, many of the graphics in it were recreated in ASCII. That is the preferred version to use for searches. Other versions of the manual are available if you have a different preference:
  1. Software and Hardware for the Bally Arcade - A Technical Description

    This was a color scan of the original "Nutting manual" that had the red "DAVE NUTTING ASSOCIATES, INC." watermark on each page. The watermarks have been removed, and each page has been saved as grayscale. This document most closely resembles the original manual. The drawback is that this manual is not searchable. Since the file is so large (179MB), this is an offsite link to, which hosts the file.

  2. Software and Hardware for the Bally Arcade - A Technical Description

    This is the retyped version of the "Nutting Manual." It is a Microsoft Word document (.doc), and it was used to create the searchable version of the pdf.

  3. Software and Hardware for the Bally Arcade - A Technical Description

    "Nutting Manual" (Original B&W scan with annoying watermark overlay, includes Z80 assembly source-code listing for 8K Bally Arcade ROM, 23MB)

  4. Nutting Manual ++

    Any improvements to the "Nutting Manual" were to go in here. This project was never pursued and it never reached past version 1.0. (Word .doc File)

ALTNAME "Star Graphoids/Rainbow Display"
By Larry Smith

This document is a supplant for Larry Smith's "Machine Language Programming the Bally Arcade (Bare Bones-BASIC Only)." Included here are two type-in programs and some information on how to record graphics to tape.
  1. "Star Graphoids" - Ever-changing display of Star of David on a star-field. BASIC Type-in listing.
  2. "Rainbow Display" (Parts 1 and 2) - Machine language program with A short BASIC loader program with required decimal values for input. Z-80 source code of "Rainbow Display" is provided.
Also in this document is a "method of recording graphics on tape." If you want to record a graphics picture (or anything that's on the screen), then add this line to the program that produces it first.
  1. "Machine Language Programming the Bally Arcade (Bare Bones-BASIC Only)" - "Star Graphoids" and "Rainbow Display" supplement this ML programming article.
Vector Animation Tutorial, by Lance F Squire "Vector Animation Tutorial"
By Lance F. Squire.

     A step-by-step tutorial on using the vector animation subroutines built into the Bally Arcade/Astrocade. These same routines are used by many of the cartridges that were released for the system. Z80 assembly language source code is included in the tutorial. This tutorial does presume an understanding of Z80 programming and a read-through of the "Nutting Manual."

     A zipped archive that includes Word, pdf and odt versions of the vector tutorial is also available:
  1. Vector Animation Tutorial - Zipped Archive
     Lance frequents the Bally Alley Discussion Group. If you have any questions about this tutorial, then you can ask Lance about them there.

Astrocade Z-80 Mini-Course, by Larry Simioni "Z-80 Mini Course" for Bally Arcade/Astrocade.
By Larry Simioni.

     "Z80 Mini Course" was written specifically for use with Bally BASIC. The introduction to the book explains more details.

  1. Z80 Mini Course Introduction - Text Format
     All of the programs included in the "Z80 Mini Course" have been digitally archived in Bally BASIC's 300-Baud format:
  1. "Z80 Mini Course" Programs - 300-Baud BASIC
     There is some confusion that Barry Ellerson wrote this manual because Barry's name is the mailing address used in the Arcadian in 1982 (see ARCADIAN 7, no. 7 (May 7, 1982): 69). According to an October 1982 letter to the "Arcadian" that Larry wrote, it seems that Larry Simioni was probably living with Barry at the time (he was very surely working with or beside him). It is possible that Barry did contribute some programs to the "Z80 Mini Course," but there is no direct evidence of this and only Larry's name is in the "Z80 Mini Course."

Z80 Source-Code Tips "Z80 Source-Code Tips"
By Richard Degler.
March 2010.

     A few tips on creating easy-to-read source code for the Bally Arcade/Astrocade.

BallyAlley_r4_c1.gif pic BallyAlley_r4_c4.gif