GS WorldView: July MM
 back to GSWV main contents page

Give your Applesoft BASIC programs a speed boost!
The Einstein Compiler
  by Charles T. 'Dr. Tom' Turley
The Einstein Compiler Version: 5.2, copyright 1983, The Enistein Corporation
program by Dennis Goodrow and Shmuel Einstein
Status: Freeware

The compiler may be distributed as non-commercial in the Apple II ShrinkIt disk archive
file format for Apple II computers and disk image format for use with Apple II emulators.

I will gladly furnish telephone contact information for Dennis Goodrow to anybody who
sends an email requesting varification of the program's freeware status and authorization
allowing it's online distribution by me from this folder.

Cheers & Enjoy!

View Mini-Manual


Einstein Compiler Mini-Manual
  by Rubywand

About Einstein

Copyright 1983, The Enistein Corporation
program by  Dennis Goodrow and Shmuel Einstein



     Compiling an Applesoft BASIC program creates a much faster running program.
Einstein offers an easy to use, yet flexible, way to compile Applesoft BASIC
programs intended to run under DOS 3.3.

     The Einstein compiler requires an Apple II with at least 48k RAM and Applesoft
in ROM (or available via a RAM card or ROM card).  The DOS used should be
standard DOS 3.3. (Prontodos or EsDOS are faster and probably okay; but, I do not
know for certain.)

     Einstein does permit creation of global variables for use by several program
modules. At present, this doc does not supply details for use of global variables.

Disk Contents

EINSTEIN- the compiler

REMARK REMOVER- utility which removes REMs from your source program

REMAKE COMPILER DISK- utility for restoring compiler disk should  power
fail or the user make a destructive error during compilation

The Einstein disk does not include DOS 3.3 and is not bootable.

Getting Started

     First, boot DOS 3.3 and start a whole-disk copier such as Disk Muncher or
Copy II Plus. Make a copy of your Einstein disk and place a write protect tab on
the copy.

     Since Einstein uses its disk for information storage during compilation, your
'working copy' of Einstein should not be write protected.

Compiling a Program

o- Boot DOS 3.3

o- If you do not have a Save Disk for your compiled programs,
    INIT a diskette and label it "COMPILED". (You can save a
    compiled program on any DOS 3.3 disk; mainly, you want to
    be sure to have a disk ready with enough space.)

o- LOAD the program (called a "source program") you want to
    compile. Suppose the source program is named "NARFGAME".

o- If you have two drives, insert the Einstein disk into Drive 2
    and enter BRUN EINSTEIN, D2.  If you have one drive, swap
    the Einstein disk into Drive 1 and enter BRUN EINSTEIN.

o- After about 10 seconds the compiler asks if you want to use
    the Standard Parameters. Often, you will enter "Y" for Yes.

o- When the compile is done you should be at the usual Applesoft
    prompt. Insert (or swap in) your "COMPILED" save disk and
    enter SAVE NARFGAME.COMP (or whatever name you like).
    Usually. it is a good idea to settle on some naming convention
    that lets you tell that a file is a compiled program.


Stopping a compile: If for some reason you want to stop and exit the
compilation process, press CONTROL-C.

Warning: Do not turn off power or press Reset or open the disk drive
door in order to interrupt a compilation. Doing so could corrupt your
working copy of the compiler disk. (An I/O ERROR during compilation
could indicate a corrupted compiler disk.) To fix a corrupted compiler
disk, you can recopy it from your backup or boot DOS 3.3, insert the
corrupted compiler disk, and BRUN the REMAKE COMPILER DISK utility.

If you get a PROGRAM TOO LARGE error during compilation, you may be
able to significantly reduce program size by removing REM messages in your
source by BRUNing the REMARK REMOVER utility. The REMs will remain but
the messages following each REM will be removed. SAVE the reduced size
program. (To to avoid overwriting your REMed original, SAVE under a new

In a source program DATA statement, avoid mixing strings in quotes with
strings not in quotes.

If you include an HGR and/or HGR2 statement in your source program, space
will be reserved for loading in hires pics at $2000 ... and/or $4000 ...

Einstein does not accept a few Applesoft commands (see below). During
compilation the usual indication will be a TOKEN m IGNORED in n error
message, where m= decimal value of the BASIC token and n= Line number
in the source program.

Applesoft Commands Einstein Ignores

     In the listing below, the BASIC command token value in decimal is shown in

CONT(187)- Use a CALL to begin execution of code for a compiled Line. The
 address for the desired line can be found from the listing displayed and/or printed
 out during compilation.

DEL(133) and LIST(188)- neither of these is supported.

LOMEM:(164) and HIMEM:(163)- Use parameter changes to set these.

STORE(168) and RECALL(167)- These cassette tape commands are not supported.

&(175)- Einstein interprets this as a JMP to $3F5. If variable names follow the &
 they will not be found by the machine language routine.

Memory Map using Standard Compiler Parameters

$0000- $07FF is the same as usual for Applesoft with DOS 3.3:
  Zero page, Stack, Input buffer, User area, Text display area.

$0800- $12FF holds Einstein Runtime Library routines.

$1300- $95FF (DOS 3.3 default)  holds the program, String Pool, and
 Local Variables.

$9600- $FFFF is the same as usual for Applesoft with DOS 3.3:
  DOS 3.3 and buffers, I/O, Applesoft, and Monitor.


$FFFF     ____________________________________________________________

            Apple II Monitor Routines
$F800     ____________________________________________________________

$D000     ____________________________________________________________

            I/O Area
$C000     ____________________________________________________________

            DOS and buffers (default*)

$9600*    ____________________________________________________________
            Program: Local Variables
            (saved downward starting
             at $95FF*)


            Program: String Pool (Top is set just below Local
             Variables. Strings are saved downward. Base starts just
             after end of program or after the last reserved area,
             whichever is higher.)

String    ____________________________________________________________
Pool Base
            Program area (continued)

    end   ------------------------------------------------------------

            A reserved area (e.g. $2000- $3FFF for hires page 1
             as via an HGR command)

  start   ------------------------------------------------------------

            Program area

$1300     ____________________________________________________________
            Einstein Runtime Library routines

$0800     ____________________________________________________________
            System routines and Text display area

$03D0     ____________________________________________________________

            Available for user routines
$0300     ____________________________________________________________

            Reserved for System
$0000     ____________________________________________________________

Some Commonly Changed Compiler Parameters

     To modify the setting for one or more parameters, enter "N" ("No") near the
start of compilation in respose to the question asking if you want to use the
Standard Parameters.

PRINTER SLOT NUMBER (default is 0)

May change to the Slot number used by your printer interface (usually 1) in order
to obtain a printout of information displayed during compilation.

LOCAL VARIABLES (default is $9600)

May change to reduce memory allocated for DOS buffers to have more space for
your program as follows:

$9853  (and include a MAXFILES = 2 command near start of source program)
$9AA6  (and include a MAXFILES = 1 command near start of source program)

May change to effect an implicit or implied HIMEM: command.

May change to leave an area of memory open for BLOADing machine code
routines just below DOS 3.3 area.

STRING POOL BASE (normally set above end of program and any reserved areas).

This parm is meaningful only if dynamic strings are used. (Almost always they are.)

Since String Pool is linked to Local Variables area, the base address must change
if Local Variables address is changed to some place below the end of the program.

May change in order to leave an area of memory open for BLOADing machine
code routines just above the end of program (or highest reserved area if higher
than end of program).


The normal YES setting enables use of TRACE and NOTRACE commands and lets
CONTROL-C interrupt program execution. It also enables error reporting and
lets the RESUME command work.

May change to NO after program is completely debugged to save 7 bytes per line
and slightly speed program execution.

RESERVE MEMORY (default is NO)

May change to YES in order to specify one or more areas of memory which are to
be kept clear of code generated by the compiler. (Reserved areas are held free
by the compiler only with respect to the compiled program and String Pool.)

There is no need to specifically reserve memory for hi-res screen areas if the
corresponding HGR and/or HGR2 commands are present in the source.


May change to YES if all of your FOR-NEXT loops are properly structured. The
gain is more compact faster executing code.

A properly structured FOR-NEXT has just one NEXT and the NEXT is located in
the source after the FOR.


Changing to NO is usually a good idea if compilation information is being printed out.
A NO setting avoids printing out individual Line information.



EinsteinCompiler.zip contains ...

EinsteinDoc.txt (a copy of info in this file)

The .sdk file is a ShrinkIt disk archive. Use ShrinkIt v3.4 to unshrink it to a
5.25" Apple II 140k disk.

The .nib file is a disk image of the compiler for use with Apple II emulators.

Download EinsteinCompiler.zip(unzip using WinZIP or similar utility)