PASS0
Pass 0: dialog, DOS patches, tables, then runs pass 1. Each section's comment stands above it, each line's comments beside it; point at a name for its meaning; line numbers after GOTO, GOSUB and THEN are links.
Sections (23)
- 10 DECLARATIONS: INTEGER VARIABLES, ARRAYS AND THE COMMON BLOCK
- 100 PASS 0 OF THE COMPILER
- 400 TITLE AND THE SOURCE FILE QUESTION
- 600 THE SOURCE FILE'S NAME WAS CHECKED: IT MUST EXIST
- 700 THE SOURCE FILE EXISTS; THE OBJECT FILE QUESTION, ITS DEFAULT THE SOURCE NAME (UP TO 26 CH
- 900 THE OBJECT FILE'S NAME WAS CHECKED
- 960 MEMORY USAGE: THE DEFAULT, OR THE THREE ADDRESSES
- 1200 THE LIBRARY ADDRESS WAS CHECKED
- 1400 THE PROGRAM ADDRESS WAS CHECKED
- 1500 THE VARIABLES ADDRESS WAS CHECKED; SHOW THE LAYOUT AND CONFIRM IT
- 1630 OPTIONS: THE DEFAULT, OR EACH OPTION IN TURN
- 2060 THE CALL TABLE
- 2160 THE OPERATOR TABLE (TOKEN, STACK PRIORITY, ARRIVING PRIORITY) IN SC(300..350) FOR PASS 1
- 2240 THE MACHINE CODE AT $0377-$03CF
- 2310 THE SYMBOL TABLE'S CHAIN HEADS AND THE ADDRESSES OF THE MACHINE CODE ROUTINES
- 2440 CREATE THE OBJECT FILE, EMPTY THE LINE NUMBER FILE, AND RUN PASS 1
- 2570 YES/NO ANSWER
- 2700 READ A LINE FROM THE KEYBOARD INTO LU$ (CONTROL-C STOPS)
- 2800 SPLIT THE FILE SPECIFICATION IN LU$ INTO NM$ (THE NAME, LEADING SPACES REMOVED, TRAILING S
- 3200 REPORT AN ILLEGAL FILE SPECIFICATION
- 3220 CONVERT THE ADDRESS IN AB$ (DECIMAL, OR HEXADECIMAL AFTER $) INTO AD; BZ = 1 IF IT IS NOT
- 3450 CHECK AN ANSWER
- 3480 ... ENTRY
10DECLARATIONS: INTEGER VARIABLES, ARRAYS AND THE COMMON BLOCK
INTEGER VARIABLES
EL IS LIBRARY ROUTINE ($0947) THAT RESETS THE STACK, DROPPING EVERY PENDING GOSUB AND FOR, AND RESETS THE DATA POINTER; CALLED AFTER AN ERROR
MN IS DRIVE MOTOR-OFF SWITCH FOR THE BOOT SLOT
SC IS 1 IF THE SOURCE AND OBJECT FILES ARE ON THE BOOT DRIVE (MOTOR KEPT ON), ELSE 0
SC() IS SYMBOL TABLE: CHAIN HEADS, THEN ENTRIES LINKED THROUGH THEIR FIRST WORD
INTEGER VARIABLES
N1 IS RESUME/DEBUG CODE OPTION (1 = YES)
O4 IS COMPILATION LISTING OPTION (1 = YES)
OO IS PAUSE ON ERRORS OPTION (1 = YES)
P8 IS INTEGER ARITHMETIC OPTION (1 = YES)
INTEGER VARIABLES
C3 IS COMMON KIND: -1 NONE, 0 DEFINE, 255 USE
FC IS 1 ONCE A FATAL ERROR HAS BEEN REPORTED (NO MORE CODE IS WRITTEN)
KV IS ADDRESS OF THE FIVE PACKED BYTES LEFT BY THE USR ROUTINE ($0371)
QB IS ADDRESS OF THE ROUTINE THAT READS ONE BYTE FROM THE OPEN FILE INTO IX ($037E)
WS IS ADDRESS OF THE ROUTINE THAT WRITES THE BYTE IN IX TO THE OPEN FILE ($0387)
INTEGER VARIABLES
CD IS START OF THE COMMON BLOCK (THE PROGRAM START BEFORE COMMON MOVED IT)
DW IS DOS STATE BYTE AT $AA52: POKED BEFORE EACH DIRECT FILE READ OR WRITE
LB IS LIBRARY ADDRESS, STORED AS ADDRESS-32767
LH IS NUMBER OF SOURCE LINES READ
VC IS VARIABLES ADDRESS ASKED FOR, AS ADDRESS-32767, OR -32767 FOR END OF PROGRAM
INTEGER VARIABLES
CC IS ADDRESS OF THE LINK WORD OF THE LAST DATA BLOCK (DATA BLOCKS ARE CHAINED)
DP() IS DOS PATCH TABLE: DP(I,0) ADDRESS (AS A SIGNED WORD, ADDRESS-65536), DP(I,1) ORIGINAL BYTE
ED IS OBJECT FILE BASE: FILE POSITION = PC - ED (THE FILE STARTS WITH THE BSAVE HEADER)
HW IS LAST CHAIN HEAD IN SC(); ENTRIES ARE ALLOCATED ABOVE IT
IX IS ADDRESS OF THE ONE-BYTE TRANSFER CELL FOR QB AND WS ($0376)
KX IS FIRST CONSTANT CHAIN HEAD IN SC()
L IS FIRST LINE NUMBER CHAIN HEAD IN SC()
LM IS LENGTH OF THE RUNTIME LIBRARY IN BYTES (4013)
LQ IS ADDRESS OF THE ROUTINE THAT LISTS THE TOKENIZED LINE IN THE INPUT BUFFER ($038D)
MX IS DRIVE MOTOR-ON SWITCH FOR THE BOOT SLOT ($C089+SLOT*16), TOUCHED TO KEEP THE DRIVE SPINNING
NG IS NUMBER OF CONSTANT HASH CHAINS (32)
NK IS NUMBER OF LINE NUMBER HASH CHAINS (32)
NU IS NUMBER OF VARIABLE HASH CHAINS IN THE SYMBOL TABLE (32)
OH IS INTEGER CONSTANTS OPTION (1 = YES)
PC IS ADDRESS OF THE NEXT OBJECT CODE BYTE, AS ADDRESS-32767
UR IS PROGRAM START, STORED AS ADDRESS-32767; MOVED UP BY COMMON DECLARATIONS
UV IS ADDRESS OF THE USR ROUTINE THAT PACKS A NUMBER INTO FIVE BYTES ($0377)
VO IS FIRST VARIABLE CHAIN HEAD IN SC() (9; 1-4 HOLD FN AND LINE SYMBOLS, 5-8 TEMPORARIES)
COMMON BLOCK, IN THE ORDER IT IS LAID OUT: NUMBERS FIRST, THEN STRINGS. THE PASSES SHARE IT, SO EVERY PASS DECLARES IT THE SAME WAY
BP$ IS TWO BELLS, SOUNDED BEFORE EACH ERROR MESSAGE
CO$ IS DOS CLOSE COMMAND
DI$ IS CONTROL-D, THE DOS COMMAND PREFIX
DN$ IS SLOT AND DRIVE OF THE BOOT DRIVE (",S6,D1")
LN$ IS NAME OF THE LINE NUMBER FILE ("CLINENUM")
OD$ IS OBJECT FILE NAME
OO$ IS SLOT AND DRIVE OF THE OBJECT FILE
OP$ IS DOS OPEN COMMAND
RV$ IS DOS READ COMMAND
SB$ IS SLOT AND DRIVE OF THE SOURCE FILE
SI$ IS SOURCE FILE NAME
WO$ IS DOS WRITE COMMAND
100PASS 0 OF THE COMPILER: PATCHES DOS, ASKS FOR THE SOURCE AND OBJECT FILES, THE MEMORY LAYOUT AND THE OPTIONS, LOADS THE CALL TABLE, THE OPERATOR TABLE AND THE MACHINE CODE AT $0377-$03CF, SETS UP THE COMMON BLOCK AND RUNS PASS 1. SET UP DOS AND THE STRINGS
AB$ IS THE ANSWER TYPED AT A QUESTION
NO ECHO OF DOS COMMANDS, INPUT OR OUTPUT
THREE FILE BUFFERS: SOURCE, OBJECT, LINE NUMBER FILE
KEEP THE PROGRAMS' STRINGS BELOW $9600, UNDER THE DOS BUFFERS
FN SA(X): ADDRESS X AS IT IS STORED IN AN INTEGER (X-32767)
FN RA(X): THE ADDRESS STORED AS X (X+32767)
FN SW(X): ADDRESS X AS A SIGNED WORD FOR POKE AND PEEK (X-65536 ABOVE 32767)
SIX DOS PATCHES (ADDRESS, NEW BYTE, ORIGINAL BYTE) SO THAT DOS CAN READ THE TOKENIZED PROGRAM AS A TEXT FILE: $A633-$A635 BNE $A644 / JSR $A2FC BECOMES JMP $A644, SO A ZERO BYTE DOES NOT END THE DATA READ INTO THE INPUT LINE; $A649 AND #$7F BECOMES AND #$FF, SO TOKENS KEEP BIT 7; $A7C4 BECOMES RTS, SO THE FILE TYPE IS NOT CHECKED (THE APPLESOFT SOURCE FILE OPENS AS A TEXT FILE); $A96C $7F BECOMES $FF, SO THE B (BYTE POSITION) PARAMETER MAY GO UP TO 65535
GE IS LOOP INDEX; ALSO A LENGTH
THE ADDRESS, THE NEW BYTE AND THE ORIGINAL BYTE (KEPT TO UNDO THE PATCH)
AD IS AN ADDRESS: A DOS BYTE TO PATCH, OR THE ADDRESS ANSWERED
Q8 IS NEW VALUE OF A DOS BYTE BEING PATCHED
PATCH DOS
THE ADDRESS, AS A SIGNED WORD, FOR PUTTING THE BYTE BACK AT THE END OF THE COMPILATION
THE LIBRARY ROUTINE AT $0947 THAT RESETS THE STACK
RUNTIME IS 4013 BYTES LONG
THE LIBRARY NORMALLY LOADS AT $0803
DH IS DEFAULT LIBRARY ADDRESS (2051 = $0803)
TWO BELLS FOR THE ERROR MESSAGES
CONTROL-D STARTS EACH DOS COMMAND
THE LINE NUMBER FILE: PASS 1 WRITES EACH LINE'S NUMBER AND ADDRESS, PASS 2 READS THEM
THE DOS COMMANDS THE PASSES USE
DM$ IS DOS DELETE COMMAND
THE SLOT AND DRIVE DOS LAST USED: THE BOOT DRIVE
SQ IS SLOT OF THE BOOT DRIVE (DOS'S LAST SLOT USED, $AA6A)
DO IS DRIVE OF THE BOOT DRIVE (DOS'S LAST DRIVE USED, $AA68)
THE BOOT DRIVE AS ",SN,DN"
THE DRIVE'S MOTOR-ON SWITCH, $C089 + SLOT*16
DOS'S OUTPUT STATE BYTE, $AA52
400TITLE AND THE SOURCE FILE QUESTION
ASSUME THE FILES ARE ON THE BOOT DRIVE
THE ANSWER
QUESTION 2: THE SOURCE FILE
QH IS WHICH QUESTION IS BEING ANSWERED; SELECTS WHERE THE SHARED CHECKS RETURN
CHECK THE ANSWER (A LINE STARTING WITH CONTROL-D IS A DOS COMMAND)
600THE SOURCE FILE'S NAME WAS CHECKED: IT MUST EXIST
SPLIT IT INTO NAME AND SLOT/DRIVE
THE SOURCE FILE
QUESTION 1: THE SOURCE FILE'S EXISTENCE
APPEND FAILS WITH FILE NOT FOUND IF THE FILE DOES NOT EXIST
LU$ IS THE LINE TYPED AT A FILE QUESTION, THEN THE DOS COMMAND THAT CHECKS THE FILE
700THE SOURCE FILE EXISTS; THE OBJECT FILE QUESTION, ITS DEFAULT THE SOURCE NAME (UP TO 26 CHARACTERS) + .OBJ
CLOSE IT AGAIN
A NAME LONG ENOUGH TO LEAVE ROOM FOR .OBJ
ON THE SOURCE FILE'S DRIVE
A DRIVE OTHER THAN THE BOOT DRIVE IS SHOWN
QUESTION 3: THE OBJECT FILE
900THE OBJECT FILE'S NAME WAS CHECKED
NOTHING TYPED: THE DEFAULT
960MEMORY USAGE: THE DEFAULT, OR THE THREE ADDRESSES
THE DEFAULT LAYOUT: THE LIBRARY AT $0803, THE PROGRAM RIGHT AFTER IT, THE VARIABLES AFTER THE PROGRAM
NOTHING TYPED: THE DEFAULT ADDRESS
QUESTION 2 FOR THE ADDRESS CHECK: THE LIBRARY
1200THE LIBRARY ADDRESS WAS CHECKED
THE LIBRARY ADDRESS
NOTHING TYPED: THE PROGRAM FOLLOWS THE LIBRARY
HGR1: THE PROGRAM STARTS AT $4000, ABOVE HIGH-RESOLUTION PAGE 1
HGR2: AT $6000, ABOVE PAGE 2
QUESTION 1 FOR THE ADDRESS CHECK: THE PROGRAM
1400THE PROGRAM ADDRESS WAS CHECKED
THE PROGRAM ADDRESS
NOTHING TYPED: THE VARIABLES FOLLOW THE PROGRAM (STORED AS -32767)
QUESTION 3 FOR THE ADDRESS CHECK: THE VARIABLES
1500THE VARIABLES ADDRESS WAS CHECKED; SHOW THE LAYOUT AND CONFIRM IT
THE VARIABLES ADDRESS
THE ADDRESSES ARE SHOWN AS THEY ARE, NOT IN THE STORED FORM
NO: ASK FOR THE ADDRESSES AGAIN
1630OPTIONS: THE DEFAULT, OR EACH OPTION IN TURN
THE DEFAULT OPTIONS: LISTING, PAUSE, INTEGER ARITHMETIC AND INTEGER CONSTANTS ON, RESUME/DEBUG OFF
YES OR NOTHING TYPED: 1; NO: 0
ONLY YES TURNS IT ON
THE CALL TABLE, 136 ENTRIES (INDEX 0 FIRST)
2060THE CALL TABLE: ADDRESSES OF THE LIBRARY AND ROM ROUTINES THE COMPILED CODE CALLS, BY INDEX (A POSITIVE ENTRY IS AN OFFSET FROM THE LIBRARY ADDRESS, A NEGATIVE ONE MINUS A ROM ADDRESS), STORED IN SC(150..285) FOR PASS 1
THE DOS PATCH DATA COMES FIRST ...
... 18 VALUES, SKIPPED
XU IS A VALUE READ FROM A DATA TABLE
136 ENTRIES
A ROM ADDRESS: STORED AS ADDRESS-32767
A LIBRARY ROUTINE: ITS OFFSET PLUS THE LIBRARY ADDRESS
17 OPERATORS: ( ) NOT + - * / ^ AND OR > = < AND THE TWO-CHARACTER RELATIONS (235-237), THEN NEGATION (239)
2160THE OPERATOR TABLE (TOKEN, STACK PRIORITY, ARRIVING PRIORITY) IN SC(300..350) FOR PASS 1
51 VALUES
THE MACHINE CODE, 89 BYTES FOR $0377-$03CF: $0377 USR STORES THE FLOATING POINT ACCUMULATOR, ROUNDED, AS 5 PACKED BYTES AT $0371; $037E READS A BYTE (RDKEY, WHICH DOS FEEDS FROM THE OPEN FILE) INTO $0376; $0387 PRINTS THE BYTE IN $0376 (COUT, WHICH DOS SENDS TO THE OPEN FILE); $038D LISTS THE TOKENIZED LINE AT $0280, SPELLING EACH TOKEN FROM THE ROM'S KEYWORD TABLE
2240THE MACHINE CODE AT $0377-$03CF
887 TO 975 = $0377 TO $03CF
THE USR VECTOR AT $0A: JMP $0377
2310THE SYMBOL TABLE'S CHAIN HEADS AND THE ADDRESSES OF THE MACHINE CODE ROUTINES
32 CHAINS EACH FOR VARIABLES, CONSTANTS AND LINE NUMBERS
CHAIN HEADS 1-4 ARE FN SYMBOLS, 5-8 TEMPORARIES, THEN VARIABLES FROM 9, CONSTANTS AND LINE NUMBERS
THE ENTRY POINTS OF THE MACHINE CODE AND ITS DATA CELLS
ALL CHAINS EMPTY
2440CREATE THE OBJECT FILE, EMPTY THE LINE NUMBER FILE, AND RUN PASS 1
A ONE-BYTE BINARY FILE MAKES SURE THE OBJECT FILE EXISTS (AND IS A BINARY FILE)
OPEN, DELETE AND OPEN AGAIN: AN EMPTY LINE NUMBER FILE
POSITION IT AT ITS START
CLOSE ALL FILES
STRING STORAGE IS SET UP SO THAT THE COMMON STRINGS SURVIVE THE CHAIN TO PASS 1
2570YES/NO ANSWER: XB = 1 YES, 0 NO, 2 RETURN ALONE; BZ = 1 FOR ANYTHING ELSE
ACCEPTED UNLESS FOUND OTHERWISE
BZ IS 1 IF THE ANSWER WAS NOT ACCEPTED (THE QUESTION IS ASKED AGAIN)
XB IS ANSWER TO A YES/NO QUESTION: 1 YES, 0 NO, 2 NOTHING TYPED (THE DEFAULT)
ANYTHING ELSE: THE BELL, AND THE QUESTION IS ASKED AGAIN
2700READ A LINE FROM THE KEYBOARD INTO LU$ (CONTROL-C STOPS)
THE ROM'S INPUT LINE ROUTINE (INLIN, $D52C) READS INTO THE BUFFER AT $0200
CONTROL-C FIRST STOPS THE PROGRAM
COLLECT CHARACTERS UP TO THE ZERO AT THE END OF THE LINE
2800SPLIT THE FILE SPECIFICATION IN LU$ INTO NM$ (THE NAME, LEADING SPACES REMOVED, TRAILING SPACES CUT, AT MOST 30 CHARACTERS) AND SY$ (",SN,DN", THE BOOT DRIVE'S SLOT OR DRIVE FILLED IN WHERE MISSING); BZ = 1 IF IT IS NOT LEGAL
O8 IS 1 IF THE FILE SPECIFICATION HAS NO SLOT OR DRIVE PART
LOOK FOR A COMMA
NO COMMA: THE WHOLE LINE IS THE NAME, ON THE BOOT DRIVE
NM$ IS FILE NAME PART OF A FILE SPECIFICATION
SY$ IS SLOT AND DRIVE PART OF A FILE SPECIFICATION (",S6,D1")
A NAME CANNOT BE EMPTY
SKIP LEADING SPACES; A NAME OF SPACES ONLY IS ILLEGAL
LQ SERVES HERE AS SCRATCH (IT IS SET TO ITS REAL VALUE LATER): THE LAST CHARACTER THAT IS NOT A SPACE
DOS USES AT MOST 30 CHARACTERS
NO SLOT OR DRIVE GIVEN: DONE
THE SLOT AND DRIVE PART MAY HAVE AT MOST 20 CHARACTERS
IZ IS 1 IF THE SPECIFICATION GIVES A SLOT
HX IS 1 IF THE SPECIFICATION GIVES A DRIVE
AG IS 1 RIGHT AFTER A COMMA IN THE SLOT AND DRIVE PART (S OR D MAY FOLLOW)
FIND S AND D, EACH RIGHT AFTER A COMMA, AND THEIR NUMBERS
GV IS THE SLOT IT GIVES
GG IS THE DRIVE IT GIVES
A MISSING SLOT OR DRIVE IS THE BOOT DRIVE'S
A FILE ON ANOTHER SLOT OR DRIVE: THE BOOT DRIVE'S MOTOR NEED NOT BE KEPT RUNNING
3200REPORT AN ILLEGAL FILE SPECIFICATION
3220CONVERT THE ADDRESS IN AB$ (DECIMAL, OR HEXADECIMAL AFTER $) INTO AD; BZ = 1 IF IT IS NOT FROM 0 TO 49151; THEN RETURN TO THE QUESTION QH
SKIP LEADING SPACES
VAL OF A BAD NUMBER GIVES AN ERROR, CAUGHT AT 3420
TURN ONERR OFF AGAIN (ERRFLG, $D8)
HEXADECIMAL: DIGITS 0-9 AND A-F; SPACES ARE SKIPPED
CN$ IS ONE CHARACTER OF A HEXADECIMAL ADDRESS
ANY OTHER CHARACTER: NOT AN ADDRESS
49151 = $BFFF, THE TOP OF MEMORY BELOW THE I/O AREA
AN ERROR IN VAL: ONERR OFF, AND RESET THE STACK
3450CHECK AN ANSWER: A LINE LU$ THAT STARTS WITH CONTROL-D IS A DOS COMMAND (CATALOG, FOR EXAMPLE): IT IS RUN, AND THE QUESTION IS ASKED AGAIN ...
A DOS COMMAND: RUN IT, THEN ASK AGAIN (BZ = 1)
3480... ENTRY: RUN THE DOS COMMAND IN LU$; A FILE NOT FOUND OR OTHER DOS ERROR SETS BZ; THEN RETURN TO THE QUESTION QH
A DOS ERROR IS CAUGHT AT 3530
ERROR CODE 6 (ERRNUM, $DE) IS FILE NOT FOUND
RESET THE STACK AFTER THE ERROR
Variables
| NAME | TYPE | DEFINED | COMMON | MEANING |
|---|---|---|---|---|
| AB$ | STRING | 100 | THE ANSWER TYPED AT A QUESTION | |
| AD | REAL | 190 | AN ADDRESS: A DOS BYTE TO PATCH, OR THE ADDRESS ANSWERED | |
| AG | REAL | 3000 | 1 RIGHT AFTER A COMMA IN THE SLOT AND DRIVE PART (S OR D MAY FOLLOW) | |
| BP$ | STRING | 60 | 37 | TWO BELLS, SOUNDED BEFORE EACH ERROR MESSAGE |
| BZ | REAL | 2580 | 1 IF THE ANSWER WAS NOT ACCEPTED (THE QUESTION IS ASKED AGAIN) | |
| C3 | INTEGER | 30 | 34 | COMMON KIND: -1 NONE, 0 DEFINE, 255 USE |
| CC | INTEGER | 50 | 25 | ADDRESS OF THE LINK WORD OF THE LAST DATA BLOCK (DATA BLOCKS ARE CHAINED) |
| CD | INTEGER | 40 | 24 | START OF THE COMMON BLOCK (THE PROGRAM START BEFORE COMMON MOVED IT) |
| CN$ | STRING | 3320 | ONE CHARACTER OF A HEXADECIMAL ADDRESS | |
| CO$ | STRING | 60 | 40 | DOS CLOSE COMMAND |
| DH | REAL | 250 | DEFAULT LIBRARY ADDRESS (2051 = $0803) | |
| DI$ | STRING | 60 | 38 | CONTROL-D, THE DOS COMMAND PREFIX |
| DM$ | STRING | 310 | DOS DELETE COMMAND | |
| DN$ | STRING | 60 | 46 | SLOT AND DRIVE OF THE BOOT DRIVE (",S6,D1") |
| DO | REAL | 350 | DRIVE OF THE BOOT DRIVE (DOS'S LAST DRIVE USED, $AA68) | |
| DP(5,1) | INTEGER() | 50 | 35 | DOS PATCH TABLE: DP(I,0) ADDRESS (AS A SIGNED WORD, ADDRESS-65536), DP(I,1) ORIGINAL BYTE |
| DW | INTEGER | 40 | 10 | DOS STATE BYTE AT $AA52: POKED BEFORE EACH DIRECT FILE READ OR WRITE |
| ED | INTEGER | 50 | 26 | OBJECT FILE BASE: FILE POSITION = PC - ED (THE FILE STARTS WITH THE BSAVE HEADER) |
| EL | INTEGER | 10 | 11 | LIBRARY ROUTINE ($0947) THAT RESETS THE STACK, DROPPING EVERY PENDING GOSUB AND FOR, AND RESETS THE DATA POINTER; CALLED AFTER AN ERROR |
| FC | INTEGER | 30 | 33 | 1 ONCE A FATAL ERROR HAS BEEN REPORTED (NO MORE CODE IS WRITTEN) |
| GE | REAL | 180 | LOOP INDEX; ALSO A LENGTH | |
| GG | REAL | 3050 | THE DRIVE IT GIVES | |
| GV | REAL | 3040 | THE SLOT IT GIVES | |
| HW | INTEGER | 50 | 7 | LAST CHAIN HEAD IN SC(); ENTRIES ARE ALLOCATED ABOVE IT |
| HX | REAL | 2990 | 1 IF THE SPECIFICATION GIVES A DRIVE | |
| IX | INTEGER | 50 | 17 | ADDRESS OF THE ONE-BYTE TRANSFER CELL FOR QB AND WS ($0376) |
| IZ | REAL | 2980 | 1 IF THE SPECIFICATION GIVES A SLOT | |
| KV | INTEGER | 30 | 14 | ADDRESS OF THE FIVE PACKED BYTES LEFT BY THE USR ROUTINE ($0371) |
| KX | INTEGER | 50 | 5 | FIRST CONSTANT CHAIN HEAD IN SC() |
| L | INTEGER | 50 | 6 | FIRST LINE NUMBER CHAIN HEAD IN SC() |
| LB | INTEGER | 40 | 19 | LIBRARY ADDRESS, STORED AS ADDRESS-32767 |
| LH | INTEGER | 40 | 23 | NUMBER OF SOURCE LINES READ |
| LM | INTEGER | 50 | 12 | LENGTH OF THE RUNTIME LIBRARY IN BYTES (4013) |
| LN$ | STRING | 60 | 45 | NAME OF THE LINE NUMBER FILE ("CLINENUM") |
| LQ | INTEGER | 50 | 18 | ADDRESS OF THE ROUTINE THAT LISTS THE TOKENIZED LINE IN THE INPUT BUFFER ($038D) |
| LU$ | STRING | 670 | THE LINE TYPED AT A FILE QUESTION, THEN THE DOS COMMAND THAT CHECKS THE FILE | |
| MN | INTEGER | 10 | 9 | DRIVE MOTOR-OFF SWITCH FOR THE BOOT SLOT |
| MX | INTEGER | 50 | 8 | DRIVE MOTOR-ON SWITCH FOR THE BOOT SLOT ($C089+SLOT*16), TOUCHED TO KEEP THE DRIVE SPINNING |
| N1 | INTEGER | 20 | 30 | RESUME/DEBUG CODE OPTION (1 = YES) |
| NG | INTEGER | 50 | 2 | NUMBER OF CONSTANT HASH CHAINS (32) |
| NK | INTEGER | 50 | 3 | NUMBER OF LINE NUMBER HASH CHAINS (32) |
| NM$ | STRING | 2830 | FILE NAME PART OF A FILE SPECIFICATION | |
| NU | INTEGER | 50 | 1 | NUMBER OF VARIABLE HASH CHAINS IN THE SYMBOL TABLE (32) |
| O4 | INTEGER | 20 | 28 | COMPILATION LISTING OPTION (1 = YES) |
| O8 | REAL | 2810 | 1 IF THE FILE SPECIFICATION HAS NO SLOT OR DRIVE PART | |
| OD$ | STRING | 60 | 44 | OBJECT FILE NAME |
| OH | INTEGER | 50 | 32 | INTEGER CONSTANTS OPTION (1 = YES) |
| OO | INTEGER | 20 | 29 | PAUSE ON ERRORS OPTION (1 = YES) |
| OO$ | STRING | 60 | 48 | SLOT AND DRIVE OF THE OBJECT FILE |
| OP$ | STRING | 60 | 39 | DOS OPEN COMMAND |
| P8 | INTEGER | 20 | 31 | INTEGER ARITHMETIC OPTION (1 = YES) |
| PC | INTEGER | 50 | 22 | ADDRESS OF THE NEXT OBJECT CODE BYTE, AS ADDRESS-32767 |
| Q8 | REAL | 190 | NEW VALUE OF A DOS BYTE BEING PATCHED | |
| QB | INTEGER | 30 | 15 | ADDRESS OF THE ROUTINE THAT READS ONE BYTE FROM THE OPEN FILE INTO IX ($037E) |
| QH | REAL | 520 | WHICH QUESTION IS BEING ANSWERED; SELECTS WHERE THE SHARED CHECKS RETURN | |
| RV$ | STRING | 60 | 41 | DOS READ COMMAND |
| SB$ | STRING | 60 | 47 | SLOT AND DRIVE OF THE SOURCE FILE |
| SC | INTEGER | 10 | 27 | 1 IF THE SOURCE AND OBJECT FILES ARE ON THE BOOT DRIVE (MOTOR KEPT ON), ELSE 0 |
| SC(5350) | INTEGER() | 10 | 36 | SYMBOL TABLE: CHAIN HEADS, THEN ENTRIES LINKED THROUGH THEIR FIRST WORD |
| SI$ | STRING | 60 | 43 | SOURCE FILE NAME |
| SQ | REAL | 340 | SLOT OF THE BOOT DRIVE (DOS'S LAST SLOT USED, $AA6A) | |
| SY$ | STRING | 2830 | SLOT AND DRIVE PART OF A FILE SPECIFICATION (",S6,D1") | |
| UR | INTEGER | 50 | 20 | PROGRAM START, STORED AS ADDRESS-32767; MOVED UP BY COMMON DECLARATIONS |
| UV | INTEGER | 50 | 13 | ADDRESS OF THE USR ROUTINE THAT PACKS A NUMBER INTO FIVE BYTES ($0377) |
| VC | INTEGER | 40 | 21 | VARIABLES ADDRESS ASKED FOR, AS ADDRESS-32767, OR -32767 FOR END OF PROGRAM |
| VO | INTEGER | 50 | 4 | FIRST VARIABLE CHAIN HEAD IN SC() (9; 1-4 HOLD FN AND LINE SYMBOLS, 5-8 TEMPORARIES) |
| WO$ | STRING | 60 | 42 | DOS WRITE COMMAND |
| WS | INTEGER | 30 | 16 | ADDRESS OF THE ROUTINE THAT WRITES THE BYTE IN IX TO THE OPEN FILE ($0387) |
| XB | REAL | 2590 | ANSWER TO A YES/NO QUESTION: 1 YES, 0 NO, 2 NOTHING TYPED (THE DEFAULT) | |
| XU | REAL | 2080 | A VALUE READ FROM A DATA TABLE | |
| FN SA | REAL | ADDRESS X AS IT IS STORED IN AN INTEGER (X-32767) | ||
| FN RA | REAL | THE ADDRESS STORED AS X (X+32767) | ||
| FN SW | REAL | ADDRESS X AS A SIGNED WORD FOR POKE AND PEEK (X-65536 ABOVE 32767) | ||
| X | REAL | PARAMETER OF THE DEF FN FUNCTIONS (EACH FUNCTION HAS ITS OWN) |