Apple did make some changes to AppleSoft BASIC over the years between the first version on the Apple II and the last version on the Enhanced IIe and IIe card. What are the differences between the versions of AppleSoft BASIC?
3 Answers
The Wikipedia entry is a bit jumbled, ambiguous, and in some cases wrong.
Perhaps it makes more sense to list changes by Apple II model, as documented by the fantastic Apple II History site. (The book has even more detail.)
Apple II (1977)
- APPLESOFT I, based on Microsoft 6502 BASIC version 1.1
- Documented in the November 1977 "Blue Book"
- Available on tape
- Loaded into memory at $800-$29FF (8.5k)
- Program and variables at $2A00 up
- No built-in commands to manage hi-res graphics
- Option of allowing either LET and REM statements or the use of lo-res graphics
- Lo-res graphics commands: PLTG, TEX, PLTC, PLTP, PLTH, PLTV
- AND, OR and NOT perform bitwise operations
Apple II Plus (1979)
- APPLESOFT II, based on Microsoft 6502 BASIC version 2
- Documented in the August 1978 "Blue Book"
- In mainboard ROM (also available on tape, disk, firware card ROM)
- Tape version loaded into memory at $800-$2FFF (10k)
- Tape version programs and variables at $3000 up
- ROM version in memory at $D000-$F7FF (10k)
- ROM version program and variables at $800 up
- Added commands for hi-res graphics: HGR, HPLOT ETC
- Lo-res graphics commands renamed to Integer BASIC keywords: GR, PLOT etc
- AND, OR and NOT perform boolean operations
- Many new commands:
- Error-trapping: ONERR...GOTO and RESUME
- Machine-routine shorthand call: &
- Screen-clearing: HOME
- Text-output control: NORMAL, INVERSE, FLASH and SPEED=
- The print-space function: SPC()
- Cassette tape storage of numerical arrays: STORE and RECALL
- Device response: WAIT
- Program-line deletion: DEL
- Machine-routine access: CALL
- Peripheral device access: IN# and PR#
- Memory range control: HIMEM: and LOMEM:
- Execution tracking for debugging: TRACE and NOTRACE
- Screen-positioning: HTAB and VTAB
- Subroutine aborting: POP
- Read the analog controllers: PDL()
- Read the low-resolution graphics screen: SCRN()
Apple //e (1983)
Same as the Apple II Plus version
Apple //e Enhanced (1985)
Same as the Apple //e version, except:
- Allowed entry of lowercase commands
- Screen output commands (PRINT, TAB, HTAB, etc.) more properly handle the 80-column screen
- Program listings were changed to begin in column 2, making screen editing easier
Apple //c (1984) and //c Plus (1988)
Same as the Apple //e enhanced version, except:
- All of the cassette tape routines (LOAD, SAVE, SHLOAD, STORE, and RECALL) were removed
- The lo-res graphics commands (GR, HLIN, VLIN, PLOT, and SCRN) work with double lo-res
- PLOT had a destructive range bug
Apple IIgs (1986)
Same as the Apple //c version, except:
- Fixed the PLOT range bug
-
@Nick_Westgate thanks for the comprehensive answer that corrects the Wikipedia page. I've seen at least two versions of the IIgs Applesoft BASIC, any idea what changed, maybe just the PLOT bug fix? Commented May 4, 2016 at 13:48
-
I've just summarized the changes as documented by the Apple II History site and the two blue books, and borrowed some textual descriptions from Wikipedia. But I maintain my answers, so I'll have a look through the ROMs when I have time to correct and elaborate. What do you mean by "two versions of the IIgs Applesoft"? Different ROM revisions? Commented May 4, 2016 at 22:16
-
@Nick_Westgate I stand corrected, I compared the BASIC.system file from GSOS 3.x and GSOS 6.0.1 and they are the same except for one byte. So all version of AppleSoft BASIC supplied with GSOS are the same. Commented May 5, 2016 at 14:01
-
1@JosephCarter [link]fileformats.archiveteam.org/wiki/… Two things I notice about its list: at B8 184, which says "DEF FN", the token is just for DEF because FN has a separate token. At CC 204 it shows a semicolon; it should be a caret mark ^ (exponentiation).– Alan RatCommented May 12, 2017 at 22:47
-
2@MichaelShopsin Applesoft BASIC is contained in ROM on the IIgs, not in the file named BASIC.system; the latter is just the code that acts as an intermediate between BASIC and Apple ProDOS, allowing the entry of ProDOS command at the BASIC prompt and the use of ProDOS commands from within BASIC programs using the same PRINT CHR$(4)+<command string> method as in Apple DOS. (and yes I know this is an old discussion, just to set the record straight).– TeaRexCommented Nov 18, 2023 at 9:42
The AppleSoft BASIC Wikipedia page has quite a bit of info on this:
Not really a feature, but the RAM footprint changed between the 1 & 2.
- AppleSoft I - 8.5 kb
- AppleSoft II - 10 kb
AppleSoft I had these features over the "Integer BASIC" (which Woz had written):
- Atomic strings: A string is no longer an array of characters (as in Integer BASIC and C); it is instead a garbage-collected object (as in Scheme and Java). - This allows for string arrays;
DIM A$(10)
resulted in a vector of eleven string variables numbered 0–10.- Multidimensional arrays (numbers or strings)
- Single-precision floating point variables with an 8-bit exponent and a 31-bit significand and improved math capabilities, including trigonometry and logarithmic functions
DATA
statements, withREAD
andRESTORE
commands, for representing numerical and string values in quantityCHR$
,STR$
, andVAL
functions for converting between string and numeric types (both languages did have theASC
function)- User-defined functions: simple one-line functions written in BASIC, with a single parameter
Additionally, AppleSoft II had these feature improvements over AppleSoft I:
- All commands supporting Apple's "high resolution" graphics (9 total)
- Error-trapping with
ONERR...GOTO
andRESUME
- Machine-routine shorthand call
&
- Screen-clearing
HOME
(a call to a system ROM routine)- Text-output control
NORMAL
,INVERSE
,FLASH
andSPEED=
- The print-space function
SPC()
is listed among reserved words in the Applesoft I manual, but is not otherwise documented (theTAB()
print-function is documented in it)- Cassette tape storage of numerical arrays:
STORE
andRECALL
- Device response:
WAIT
Apple III Microsoft BASIC added:
INPUT$()
function to replace Applesoft'sGET
command.LINE INPUT
statement to input an entire line of text, regardless of punctuation, into a single string variable.LPRINT
andLPRINT USING
statements to automatically direct output to paper.LSET
andRSET
statements to left- or right-justify a string expression within a given string variable's character length.OCT$()
function for output, and&
- or&O
-formatted expressions, for manipulating octal notation.SPACE$()
function for generating blank spaces outside of aSTRING$()
function to do likewise with any character.WHILE
...WEND
statements, for loop structures built on general Boolean conditions without an index variable.- Bitwise Boolean (16-bit) operations (
AND
,OR
,NOT
), with additional operatorsXOR
,EQV
,IMP
.- Line number specification in the
RESTORE
command.RESUME
options ofNEXT
(to skip to the statement after that which caused the error) or a specified line number (which replaces the idea of exiting error-handling byGOTO
-line, thus avoiding Applesoft II's stack error problem).- Multiple parameters in user-defined (
DEF FN
) functions.- A return to the old Applesoft One concept of having multiple
USR()
functions at different addresses, by establishing ten differentUSR
functions, numberedUSR0
toUSR9
, with separateDEF
USRx
statements to define the address of each. The argument passed to aUSRx
function can be of any specific type, including string. The returned value can also be of any type, by default the same type as the argument passed.
Apple Business BASIC had big changes around direct memory access, and even removed PEEK
and POKE
from the language. Their provided functionality was replaced with functions like:
BUTTON()
function to read game-controller buttons.WINDOW
statement to define the active window of the text screen by its coordinates.- Use of the
KBD
,HPOS
, andVPOS
system variables.
-
1You don't think of Applesoft as having evolved over time at all, but it did, at least a little. Commented May 4, 2016 at 2:54
-
@Aaron thanks for your overview of the changes in Applesoft BASIC over time. Nick_Westgate gave a more model specific answer but your information is great too. Commented May 4, 2016 at 13:50
There was a lot of material quoted VERBATIM from the Wikipedia article that was "a bit jumbled, ambiguous, and in some cases wrong". I might ask what elements of the article these terms apply to.
Judging from the respective Applesoft I and II "blue books", it's not really possible to assert with certainty that the print-space function SPC() was added with Applesoft II. In the Applesoft I manual, it's never discussed, but "SPC" IS listed among "reserved words". What sounds likely is that the function did exist in Applesoft I, but they simply forgot to document it in the manual. But this can only be speculation.
Similarly, Applesoft I did not have commands called IN# and PR#, but among its reserved words were IN and OUT, not otherwise discussed in the manual. These MAY have been Applesoft I's equivalents of IN# and PR#, just as its lores graphics commands had different names.
One other point is that in Applesoft I, the argument for the USR function was the address to be called for its machine-language routine, not an argument "for the function" to utilize in calculating the function's value, as it was in Applesoft II. It's odd that in the Applesoft I manual, there is not one word said about having USR return a useful value of its own. Whenever an example in the manual employs USR to obtain a value, it just depicts the user-routine storing the value in some location that is PEEKed in a later statement.