BallyAlley_r1_c1.gif BallyAlley_r1_c2.gif BallyAlley_r1_c4.gif
BallyAlley_r2_c1.gif An In-Depth Look At... Series
A Supplement to the "Nutting Manual"
BallyAlley_r2_c4.gif
pic
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, with an in-depth look at the "Nutting Manual." Specific
instructions, Z80 programming examples and links to useful Astrocade/Z80
documents are provided. This series is initially set up for a beginner
interested in programming in assembly language or machine language.

Note that most of these tutorials are RTF (Rich Text Format) documents. Many
common word processors (such as Microsoft Office) can open these documents,
including the freely available Open Office suites.

'An In-Depth Look At...' Series Samples An In-Depth Look At... series: A Supplement to the "Nutting Manual"
for the Bally/Astrocade Computer
Series Samples.
By Michael Matte.
October 2017.

Two samples of the kind of information not found in the "Nutting Manual" that can be expected to be seen in Michael Matte's upcoming series. First is a page from Michael's Sentry Subroutine #66 document, a Sentry breakdown listing. Second is a three-page description of Write Absolute subroutine #38.

'An In-Depth Look At...' Series - Startup-Introduction An In-Depth Look At... series: A Supplement to the "Nutting Manual"
for the Bally/Astrocade Computer
Part 0: Series Start-Up/Introduction.
By MCM Design (Michael Matte).
July 2019.

Anyone interested in writing programs for their Bally/Astrocade in machine language or programming in assembly language will eventually learn about what is commonly referred to as the "Nutting Manual". This manual is packed with programming information for the Bally/Astrocade. From a programming viewpoint, the manual does provide details on the ROM's UPI processing and on-board subroutines, but does not provide examples so the reader can acquire thorough understanding as to how the UPI and subroutines function. The details it does provide, at times, are insufficient and can leave the reader desiring more info.

The intent of this "An In-Depth Look At ..." series is to supplement the "Nutting Manual" providing missing information plus stressing ML and assembly language program examples. The series will progress towards the presentation of programs with complex graphics and motion. Programs will also include extensive programming comments.

This series is not intended to teach the reader how to create ML programs or program in assembly language. Rather, the series will show how the on-board ROM subroutines can be used to display graphics, move non-blinking graphic patterns around the screen and perform many other tasks.

'An In-Depth Look At...' Series - Pixel Color Register An In-Depth Look At... series: A Supplement to the "Nutting Manual"
for the Bally/Astrocade Computer
Part 1: Pixel Color Register.
By MCM Design (Michael Matte).
July 2019.

There are 4 screen display parameters that must be initialized when the Bally/Astrocade console is powered on. The motherboard ROM executes a power up routine to initialize these screen parameters prior to displaying the system menu. The parameters are changed or initialized in all ROM cartridges and can be changed any time during execution of a program.

The 4 parameters are the color registers, the horizontal color boundary, the border background color and vertical blanking, all of which will be described in the first 3 lessons of this series.

'An In-Depth Look At...' Series - Color Map Parameters An In-Depth Look At... series: A Supplement to the "Nutting Manual"
for the Bally/Astrocade Computer
Part 2: Color Map Parameters.
By MCM Design (Michael Matte).
July 2019.

The Bally/Astrocade color map parameters include the Horizontal Color Boundary, 8 color registers map and the border background colors. This tutorial covers these topics and includes example programs on how to use them.

'An In-Depth Look At...' Series - Vertical Blank Register An In-Depth Look At... series: A Supplement to the "Nutting Manual"
for the Bally/Astrocade Computer
Part 3: The Vertical Blank Register: Output Port 0AH.
By MCM Design (Michael Matte).
July 2019.

The only RAM in the Bally/Astrocade console is screen RAM. Unfortunately, with this situation, variables, routine flags, data blocks, the Z80 stack area, etc, must be located in the bottom of the screen RAM area plus the extra 16 bytes of scratchpad RAM at 4FF0 thru 4FFFH. The hardware allows this data to be hidden from view by setting a vertical blanking line to the desired height. The NM system description, page 90, provides some additional info on vertical blanking.

This tutorial explains how to use the Vertical Blank Register using example programs and step-by-step methods to explain how to use the register to work for the programmer.

'An In-Depth Look At...' Series - An Introduction to the Magic RAM An In-Depth Look At... series: A Supplement to the "Nutting Manual"
for the Bally/Astrocade Computer
Part 4: An Introduction to the Magic RAM.
By MCM Design (Michael Matte).
August 2019.

"The Z80 instruction set has ample amount of bit manipulation instructions to write graphics to the screen RAM display. However, this means of writing graphics is not necessary, because the Bally/Astrocade computer's motherboard includes graphic hardware to manipulate screen bits or pixels faster and with less effort."

The "Magic System is enabled when data is written to a memory location (X) from 0 to 16K. A modified form of the data is actually written in memory location X+16K. The magic register determines how the data is modified [expansion, rotating or shifting; flopping; OR or XOR.]"

This tutorial explains how to use the Magic RAM using example programs and step-by-step methods.

'An In-Depth Look At...' Series - Custom Write Pattern An In-Depth Look At... series: A Supplement to the "Nutting Manual"
for the Bally/Astrocade Computer
Part 5: Custom Write Pattern.
By MCM Design (Michael Matte).
August 2019.

The article shows how to write a "normal" pattern using a direct Z80 subroutine call (no UPI required, no UPI processing delay). A normal write is defined as a write not utilizing the magic expand, flop or rotator function. You can write a pattern in one of three ways when using a normal magic write. The Magic Register, bits 5 and 4, indicates which normal magic write is to be utilized by the magic hardware. The table below shows the set up for the Magic Register for the indicated magic write.

Here is a description of the included program example 5-1: Write a solid green reference byte at 4014H, Plop write a plane pattern beginning at address 4064H, Use standard MLM colors for this program, Plop write the pattern.
  1. Lesson 5: Custom Write Pattern (MAME Save State and Screenshots)
'An In-Depth Look At...' Series - Custom Flop Pattern An In-Depth Look At... series: A Supplement to the "Nutting Manual"
for the Bally/Astrocade Computer
Part 6: Custom Flop Pattern.
By MCM Design (Michael Matte).
August 2019.

This lesson is a continuation of the Lesson 5 example program, providing the option to flop write a pattern. Flopping a pattern requires a specific subroutine to direct the magic hardware. Like the normal write presented in LESSON 5, a flop write can also be written using one of the 3 magic functions plop,XOR,OR however, bit 6 in the Magic Register must be set to tell the magic hardware that a magic flop is being requested.

Here is a description of the included program example 6-1: This example uses the entire example program 5-1, but included with this program is the option to flop the plane pattern.
  1. Lesson 6: Custom Flop Pattern (MAME Save State and Screenshots)
pic
BallyAlley_r4_c1.gif pic BallyAlley_r4_c4.gif