Applesoft programs start at location $0801 in memory (usually). If you put a nonzero value at address $0800, though, you get an error when you try to run the program:
?SYNTAX ERROR IN 65124
Why does this happen?
Retrocomputing Stack Exchange is a question and answer site for vintage-computer hobbyists interested in restoring, preserving, and using the classic computer and gaming systems of yesteryear. It only takes a minute to sign up.Sign up to join this community
RUN command ($d912) begins by calling
SETPTRS ($d665), which calls
STXTPT ($d697) to initialize
TXTPTR ($b8-b9) to the value in
TEXTTAB ($67-68) minus one. In simple terms, parsing of the program actually starts at $0800 when the program is loaded at $0801.
RUN command finishes, Applesoft falls back into its command execution loop (
NEWSTT $d7d2), which had just finished calling
EXECUTE_STATEMENT from $d820. When it jumps back to the top of the loop, it pulls the next byte from memory and evaluates it.
Normally, at the start of the program, it will read a zero, which causes it to behave is if it had reached the end of a line, and it will start processing the line. If it doesn't see a zero, it acts like it's in the middle of processing a line, and looks for a ':'. If it doesn't see that, it reports a syntax error (jump from
SYNERR_1 at $d846), because statements must be separated by a colon or line break.
Setting $0800 to $3a (':') doesn't generally work, because Applesoft will think it's mid-line, but the next things it finds in memory at $0801 are a 16-bit next-line address followed by a 16-bit line number. These are unlikely to form a valid Applesoft statement.
The syntax error message uses the contents of
CURLIN ($75-76), which was partially initialized:
CURLIN+1 ($76) is set to $ff in "command" mode, and
RUN decrements it to $fe to indicate that we're in "run" mode. The line number reported will thus be somewhere in the range $fe00-feff (65024-65279).
See also the Applesoft disassembly.