As you may have noticed above there are 2 versions of the Basic Cartridge, and possibly 3 Labels. So what's the difference & why should I care?
The original Bally Basic is a robust & serviceable programming language. The only complaints could be the extra purchase of an audio cassette interface. The package came with a ring bound manual & Tutorial. The "Basic Expansion Kit" included a tape library pak with some programming demos, and the audio cassette interface. The interface saved data at 300 baud.
The Second release of Bally Basic, later called Astrocade Basic, Had the tape interface built in! The speed of the interface was also increased to 2000 baud. This made the Old Bally Demo tapes virtually useless, but allowed more data to be stored on a tape & shorter load times!
For the sake of ease of identification the news letters & Tape manufactures referred to any Basic Cart with the built-in Audio cassette interface as AstroBasic or AB for short.
Other new features to Astro Basic were the introduction of Music Processor Commands, allowing direct control of the sound chip without using the memory consuming port access array. The "$" command using features of the built-in calculator program was removed.
Why with 4K of Ram does the Bally/Astrocade only get about 1800 Bytes of program space, when a PET or TRS-80 had a lot more?
The Graphics. Both the PET and TRS-80 use character based graphics and were only B+W. The Bally/Astrocade uses Bitmaped graphics in 4 colours.
Lets look at the PET first. 40 columns by 25? rows equals 1000 Bytes used for screen display. This leaves 3096 minus operating expense (say 16 Bytes or more). With the TRS-80, 64x25?=1600 Bytes leaving 2496 minus operating expense.(BTW within 2 months My TRS-80 got a RAM expansion!)
Now the Bally. 160x102x4, 160 pixels at 4 colours a pixel(2 Bits) = 40 Bytes, (But Astro Basic only gets 2 colours! Ya, Ya, I'll get back to that.) 40x102=4080 Bytes leaving 16 BYTES! That IS the operating Expense!
THERE IS NO FREE MEMORY!!!
NOW The Wizardry of Jay Fenton......
..........................or How to get 1800 Bytes out of 0!
This must have been the question when Mr. Fenton took to programming the original Bally Basic Cart. The answer IS use every other bit for code. This would leave a terrible mess on the screen, and it does. So you hide it!
Set & keep the colour palette so Code+Graf=Grafcolour, NoCode+Graf=Grafcolour, Code+NoGraf=Background and NoCode+NoGraf=Background. Or simply Colour1&2 are always the same, as are Colour 3&4. If you have a Bally/Astrocade you can set &(9)=80 and half the screen will show the program underneath.
As this is not the place for a tutorial of Bally/Astro Basic, I shall simply include the entire list of Astro Basic commands. For those who have the cart and no manual to try out, and those familiar with other Basics to marvel at! Or you can see a PDF version of the manual on BallyAlley!
Basic Statements & Commands BOX X,Y,A,B,1 Draw a box at position X,Y of Width A and Height B, Mode 1 Modes available: 1 Foreground Colour 2 Background Colour 3 Reverse box (xor) 4 Invisible (Useful?) LINE X,Y,1 Line to X,Y, mode 1 (See above) from last Pixel location. Use BOX, XY or mode 4 to set start location. CLEAR Clears screen. Not memory. FOR/TO/STEP/NEXT Same as any For/Next loop function IF NO THEN E.G.: IF A=5GOTO20 is not only valid but actually preferred to save ram!!! INPUT A Wait for Keypad Input INPUT "HOW MANY?"A Prints message & waits for input LIST AS all Basics LIST ,5 List the FIRST 5 basic lines LIST 100 List starting at line 100 LIST 100,5 Start at line 100 list next 5 lines PRINT "A" Print Character A PRINT A Print Value of A PRINT #A,B Print A spaces then B value GOTO A Goto line number A GOSUB 100 Gosub line 100 RETURN Return to GOSUB RND(A) Generate number between 1 and A RUN Execute program General Functions ABS(A) Absolute Value of A CALL(A) Goto assembly routine at A RM Remainder of last division SM=A Scroll Mode A Modes: 0 Normal 1 No Scroll 2 Clear screen, Cursor at bottom 3 Clear screen, Cursor at top 4 Auto Pause. press key to continue STOP Stop program here SZ SiZe of available programming space XY Location of last Box or LINE command PX(X,Y) Is PiXel on or off? Input Output Functions JX(1) Joystick 1 horizontal position -0+ + JY(1) Joystick 1 Vertical Position 0 - TR(1) Trigger for Joy 1 KN(1) Knob (Paddle) position for Joy 1 A=KP Wait for key press, store ASCII in A TV=A Display ASCII character A to TV MU=A Play MUsical Note value A MU="A" Play same note as character A (All characters in Bally Basic Produce a Tone when displayed unless NT=0) FC Foreground Colour BC Background Colour NT Note Time, Duration of note play CX Cursor X position CY Cursor Y position Tape Commands :PRINT Save Program/Variables & Screen to tape :PRINT @(0),100 Save contents of @ array 0-99 :INPUT Load program from tape :INPUT @(0),100 Load data into @ array locations 0,99 :LIST Check stored program against memory. Used to confirm saves. :RUN Load & execute ML programs Punctuation and Operators +,-,Multiply and Divide symbols Standard math functions ; Separate multiple statements on same line , Continue printing on same line. E.g.: 10 PRINT "A", 20 PRINT "B" Gives AB . REM statement # NOT equal to B=%(A) PEEK A,B %(A)=B POKE A,B @(N) First array in Bally Basic *(N) Second Array Astro Basic Only &(N) Read/write port N Down Arrow Stop ALL sounds Music Processor Commands Astro Basic ONLY MO Master Oscillator Freq. NM Noise Mode NV Noise Volume NM must be 1 VR Vibrato Range NM must be 0 VF Vibrato Frequency TA TB TC Tone A,B or C VA VB VC Volume A,B or C Error Messages WHAT? Syntax error SORRY Out of Memory HOW? Catch all Error Code E.G.: GOTO 50 No line 50 HOW? GOSUB A A=10 NO line 10 HOW? NEXT Y NO FOR Y HOW?
Most keys on the keypad have 5 functions. Except for the 4 bottom keys which are your shift keys.
The linked image is setup to be printed and used as a replacement overlay.