Previous File   Multiple Pages   Next File

* NAME: BASIC-16A DOC 70181826000 REV A PAGE 1

0002 * NAME: BASIC-16A DOC 70181826000 REV A 0006 * 0008 * DESCRIPTION: STAND ALONE INTERPRETER FOR THE BASIC LANGUAGE 0012 * 0013 * REVISION HISTORY 0014 * REV DATE ECO NO 0015 * 0016 * A ---- RELEASED 0017 * 0018 * DOCUMENTATION REFERENCES 0019 * TITLE DOC NO 0020 * 0021 * BASIC USER'S MANUAL 70130072543 0025 * 0026 * *************************************************************** 0027 * * * 0028 * * ***** PROPRIETARY INFORMATION ***** * 0029 * * * 0030 * * ***** DO NOT DUPLICATE ***** * 0031 * * * 0032 * * COPY NUMBER:---- ISSUED TO:------------------ * 0033 * * * 0034 * * THIS DOCUMENT CONTAINS PROPRIETARY INFORMATION OF * 0035 * * HONEYWELL INFORMATION SYSTEMS INC. THE INFORMATION * 0036 * * CONTAINED HEREIN IS TO BE USED SOLELY FOR THE PURPOSE * 0037 * * SUBMITTED AND NO PART OF THIS DOCUMENT OF ITS CON- * 0038 * * TENTS SHALL BE REPRODUCED, PUBLISHED, OR DISCLOSED * 0039 * * TO A THIRD PARTY WITHOUT THE EXPRESS WRITTEN * 0040 * * PERMISSION OF HONEYWELL INFORMATION SYSTEMS INC. * 0041 * * * 0042 * * RETURN TO: * 0043 * * HONEYWELL INFORMATION SYSTEMS INC. * 0044 * * CSD FRAMINGHAM * 0045 * * SMALL COMPUTER STANDARD SOFTWARE * 0046 * * DEPT 653 * 0047 * * * 0048 * *************************************************************** 0049 * 0050 * COPYRIGHT 1971 BY HONEYWELL INFORMATION SYSTEMS INC., 0051 * COMPUTER SYSTEMS DIVISION, FRAMINGHAM, MASSACHUSETTS. 0052 * CONTENTS OF THIS PUBLICATION MAY NOT BE REPRODUCED IN 0053 * WHOLE OR IN PART, WITHOUT WRITTEN PERMISSION OF THE 0054 * COPYRIGHT OWNER. ALL RIGHTS RESERVED. 0055 ************************************************************************ 0056 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 2

0057 * 0058 * 0059 * 0060 * 0061 * 0062 * 0063 * BBBBBBB AAAAAA SSSSSS IIIIII CCCCCC 0064 * BBBBBBBB AAAAAAAA SSSSSSSS IIIIII CCCCCCCC 0065 * BB BB AA AA SS SS II CC CC 0066 * BBBBBBB AA AA SSS II CC 0067 * BBBBBBB AAAAAAAA SSSSS II CC 0068 * BB BB AAAAAAAA SSSS II CC 0069 * BB BB AA AA SS SS II CC CC 0070 * BBBBBBBB AA AA SSSSSSSS IIIIII CCCCCCCC 0071 * BBBBBBB AA AA SSSSSS IIIIII CCCCCC 0072 * 0073 * 0074 * 0075 * 0076 * 0077 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 3

0078 * MEMORY ORGANIZATION AND TABLE FORMATS 0079 * 0080 * GENERAL ORGANIZATION 0081 * 0082 * ................................ 0083 * : : 0084 * : : 0085 * : BASIC-16 INTERPRETER : 0086 * : : 0087 * : : 0088 * :..............................: 0089 * : : 0090 * : MATH PACKAGE : 0091 * : : 0092 * :..............................: ......... 0093 * : : . 0094 * : : . 0095 * : PROGRAM TEXT STORAGE : . 0096 * : : . 0097 * : : . THESE TABLES 0098 * :..............................: . EXTEND UPWARD 0099 * : : . DYNAMICALLY 0100 * : DEFINED FUNCTION INDEX : . FROM THE TOP 0101 * : : . OF THE MATH 0102 * :..............................: . PACKAGE 0103 * : : . 0104 * : FOR-NEXT STACK : . 0105 * : : . 0106 * :..............................: . 0107 * : : . . . 0108 * : : . . . 0109 * : PUSH DOWN STACK : . . . 0110 * : : ... 0111 * : : . 0112 * :..............................: ......... 0113 * : : . 0114 * : SIMPLE VARIABLE STORAGE : ... 0115 * : : . . . 0116 * :..............................: . . . 0117 * : : . . . 0118 * : DIMENSIONED VARIABLE STORAGE : . 0119 * : : . THESE TABLES 0120 * :..............................: . EXTEND 0121 * : : . DOWNWARD 0122 * : : . DYNAMICALLY 0123 * : STATEMENT INDEX : . FROM THE TOP 0124 * : : . OF CORE 0125 * : : . 0126 * :..............................: ......... 0127 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 4

0128 * PROGRAM TEXT STQRAGE FORMAT 0129 * 0130 * 0131 * 0132 * PURPOSE: TO STORE THE USERS SOURCE PROGRAM. 0133 * 0134 * ENTRY LENGTH: VARIABLE, ONE WORD MINIMUM. 0135 * 0136 * ENTRY FORMAT: EACH ENTRY IS A BYTE STRING CORRESPONDING 0137 * TO THE USERS SOURCE STATEMENT, WITH THE 0138 * LINE NUMBER REMOVED. IF A STATEMENT HAS 0139 * AN ODD NUMBER OF BYTES, AN EXTRA BYTE WILL 0140 * BE ADDED TO IT TO FILL UP THE LAST WORD 0141 * THAT THE STRING OCCUPIES. 0142 * 0143 * POINTERS: 0144 * 0145 * PTB - ADDRESS OF LOWEST WORD IN THE TABLE, 0146 * INITIALIZED TO THE ADDRESS OF THE 0147 * FIRST WORD ABOVE THE MATH PACKAGE, 0148 * PTB IS NEVER ALTERED. 0149 * 0150 * PTH - ADDRESS OF THE LAST WORD IN THE TABLE 0151 * +1, IS INITIALLY SET TO THE SAME 0152 * VALUE AS PTB. 0153 * 0154 * 0155 * 0156 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 5

0157 * DEFINED FUNCTION INDEX 0158 * 0159 * 0160 * PURPOSE: TO SAVE THE ADDRESS OF THE PROTOTYPE EXPRESSION 0161 * AND THE DUMMY VARIABLE NAME FOR THE DEFINED 0162 * EXRRESSION. 0163 * 0164 * ENTRY LENGTH: THREE WORDS 0165 * 0166 * ENTRY FORMAT: 0167 * 0168 * 0169 * ....................................... ......... 0170 * : : : . 0171 * : 00000000 : FUNCTION NAME : . 0172 * : : : . 0173 * :..................:..................: . 0174 * : : . 0175 * : DUMMY VARIABLE NAME : . 0176 * : : . 0177 * :.....................................: . . . 0178 * : : . . . 0179 * : POINTER TO FIRST BYTE OF EXPRESSION : . . . 0180 * : : ... 0181 * :.....................................: . 0182 * 0183 * 0184 * POINTERS: 0185 * 0186 * DFB - POINTER TO FIRST WORD OF FIRST 0187 * ENTRY IN THE INDEX. IF INDEX 0188 * IS EMPTY, DFB=0. 0189 * 0190 * DFT - POINTER TO LAST WORD OF LAST 0191 * ENTRY IN THE INDEX. IF INDEX 0192 * IS EMPTY, DFT=0. 0193 * 0194 * 0195 * 0196 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 6

0197 * FOR-NEXT STACK FORMAT 0198 * 0199 * 0200 * PURPOSE: TO SAVE LOOP CONTROL INFORMATION FOR 0201 * FOR-NEXT LOOPS. 0202 * 0203 * ENTRY LENGTH: NINE WORDS 0204 * 0205 * ENTRY FORMAT: 0206 * 0207 * 0208 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 7

0209 * .............................. ......... 0210 * : : . 0211 * : INDEX VARIABLE POINTER : . 0212 * : : . 0213 * :............................: . 0214 * : : . 0215 * : LOW RANGE VALUE - WORD 1 : . 0216 * : : . 0217 * :............................: . 0218 * : : . 0219 * : LOW RANGE VALUE - WORD 2 : . 0220 * : : . 0221 * :............................: . 0222 * : : . 0223 * : HIGH RANGE VALUE - WORD 1 : . 0224 * : : . 0225 * :............................: . 0226 * : : . 0227 * : HIGH RANGE VALUE - WORD 2 : . 0228 * : : . 0229 * :............................: . 0230 * : : . 0231 * : INCREMENT VALUE - WORD 1 : . 0232 * : : . 0233 * :............................: . 0234 * : : . 0235 * : INCREMENT VALUE - WORD 2 : . 0236 * : : . 0237 * :............................: . 0238 * : : . 0239 * : SI POINTER TO FOR STMT : . 0240 * : : . 0241 * :............................: . 0242 * : : . 0243 * : SBP TO STMT FOLLOWING FOR, : . . . 0244 * : OR ZERO IF FOR IS LAST : . . . 0245 * : STMT ON ITS LINE. : . . . 0246 * : : ... 0247 * :............................: . 0248 * 0249 * 0250 * NOTE: THE INDEX VARIABLE POINTER IS THE 0251 * DIFFERENCE BETWEEN THE TOP OF THE 0252 * SIMPLE VARIABLE STORAGE TABLE AND 0253 * THE FIRST WORD CONTAINING THE 0254 * VALUE OF THE INDEX VARIABLE. 0255 * 0256 * 0257 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 8

0258 * POINTERS: 0259 * 0260 * FNB - ADDRESS OF THE FIRST WORD OF THE 0261 * FIRST ENTRY IN THE FOR-NEXT 0262 * TABLE. IF THE TABLE IS EMPTY, 0263 * FNB=0. 0264 * 0265 * FNT - ADDRESS OF THE LAST WORD OF THE 0266 * LAST ENTRY IN THE FOR-NEXT 0267 * TABLE. IF THE TABLE IS EMPTY, 0268 * FNT=0. 0269 * 0270 * 0271 * 0272 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 9

0273 * PUSH DOWN STACK FORMAT 0274 * 0275 * 0276 * 0277 * PURPOSE: TO HOLD RETURN ADDRESSES AND INTERMEDIATE 0278 * RESULTS FOR RE-ENTRANT SUBROUTINES. 0279 * 0280 * ENTRY LENGTH: ONE WORD 0281 * 0282 * ENTRY FORMAT: THERE IS NO FIXED FORMAT FOR PUSH 0283 * DOWN STACK ENTRIES, OTHER THAN THE 0284 * FACT THAT EACH ENTRY OCCUPIES ONE 0285 * WORD. 0286 * 0287 * POINTERS: 0288 * 0289 * PDLP - POINTS TO THE FREE WORD 0290 * AT THE TOP OF THE STACK. IT 0291 * IS INITIALIZED TO THE ADDRESS 0292 * OF THE FIRST FREE WORD ABOVE 0293 * THE TABLES BELOW THE PUSH 0294 * DOWN STACK. 0295 * 0296 * 0297 * 0298 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 10

0299 * SIMPLE VARIABLE STORAGE FORMAT 0300 * 0301 * 0302 * PURPOSE: TO HOLD THE VALUES OF SIMPLE VARIABLES 0303 * USED IN A BASIC PROGRAM. 0304 * 0305 * ENTRY LENGTH: THREE WORDS 0306 * 0307 * ENTRY FORMAT: 0308 * 0309 * 0310 * .............................. ......... 0311 * : : . 0312 * : VARIABLE NAME : . 0313 * : : . 0314 * :............................: . 0315 * : : . 0316 * : VARIABLE VALUE - WORD 1 : . 0317 * : : . 0318 * :............................: . . . 0319 * : : . . . 0320 * : VARIABLE VALUE - WORD 2 : . . . 0321 * : : ... 0322 * :............................: . 0323 * 0324 * 0325 * POINTERS: 0326 * 0327 * SVB - POINTS TO THE FIRST WORD OF THE 0328 * FIRST ENTRY IN THE TABLE. IF 0329 * THE TABLE IS EMPTY, SVB=0. 0330 * 0331 * SVT - POINTS TO THE LAST WORD OF THE 0332 * LAST ENTRY IN THE TABLE. IF 0333 * THE TABLE IS EMPTY, SVT=0. 0334 * 0335 * 0336 * 0337 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 11

0338 * DIMENSIONED VARIABLE STORAGE FORMAT 0339 * 0340 * 0341 * PURPOSE: TO HOLD SUBSCRIPT BOUNDS AND TO PROVIDE 0342 * STORAGE FOR ARRAY ELEMENTS OF DIMENSIONED 0343 * VARIABLES. 0344 * 0345 * ENTRY LENGTH: 0346 * THE ENTRY LENGTH FOR A GIVEN ARRAY MAY BE 0347 * CALCULATED BY THE FOLLOWING FORMULAR: 0348 * 0349 * GIVEN: 0350 * 0351 * N = NUMBER OF DIMENSIONS 0352 * L(X) = UPPER BOUND OF DIMENSION X + 1 0353 * 0354 * THEN: 0355 * 0356 * ENTRY LENGTH = L(1)*L(2)*...*L(N)*2+N+3 0357 * 0358 * 0359 * ENTRY FORMAT: 0360 * 0361 * 0362 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 12

0363 * :........................................ ......... 0364 * : : . 0365 * : : . 0366 * : L(1)*L(2)*...*L(N)*2 WORDS OF STORAGE : . 0367 * : FOR ARRAY ELEMENTS. : . 0368 * : : . 0369 * : : . 0370 * :.......................................: . 0371 * : : . 0372 * : UPPER BOUND + 1 OF DIMENSION N : . 0373 * : : . 0374 * :.......................................: . 0375 * : . : . 0376 * : . : . 0377 * : . : . 0378 * :.......................................: . 0379 * : : . 0380 * : UPPER BOUND + 1 OF DIMENSION 1 : . 0381 * : : . 0382 * :.......................................: . 0383 * : : . 0384 * : ADDRESS OF FIRST WORD OF THIS ENTRY : . 0385 * : : . 0386 * :.......................................: . 0387 * : : . 0388 * : ADDRESS OF THE LAST WORD OF THE NEXT : . 0389 * : LOWER ENTRY IN THIS TABLE, ZERO IF : . 0390 * : THIS IS THE LOWEST ENTRY. : . 0391 * : : . 0392 * :.......................................: . . . 0393 * : . : . . . 0394 * : VARIABLE NAME . NO. OF DIMENSIONS : . . . 0395 * : . : ... 0396 * :.......................................: . 0397 * 0398 * 0399 * POINTERS: 0400 * 0401 * DVB - ADDRESS OF THE FIRST WORD OF THE 0402 * FIRST ENTRY IN THE TABLE. IF THE 0403 * TABLE IS EMPTY, DVB=0. 0404 * 0405 * DVT - ADDRESS OF THE LAST WORD OF THE 0406 * LAST ENTRY IN THE TABLE. IF THE 0407 * TABLE IS EMPTY, DVT=0. 0408 * 0409 * 0410 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 13

0411 * STATEMENT INDEX FORMAT 0412 * 0413 * 0414 * PURPOSE: TO MAINTAIN A SEOUENTIAL LIST OF ALL 0415 * STATEMENT NUMBERS IN A BASIC PROGRAM 0416 * AND POINTERS TO THE CORRESPONDING 0417 * STATEMENT TEXT IN THE PROGRAM TEXT 0418 * TABLE. 0419 * 0420 * ENTRY LENGTH: TWO WORDS 0421 * 0422 * ENTRY FORMAT: 0423 * 0424 * 0425 * ............................... ......... 0426 * : : . 0427 * : BINARY REPRESENTATION OF : . 0428 * : STATEMENT NUMBER : . 0429 * : : . 0430 * :.............................: . 0431 * : : . 0432 * : POINTER TO FIRST BYTE OF : . 0433 * : THIS STATEMENT IN THE : . . . 0434 * : PROGRAM TEXT TABLE. : . . . 0435 * : : ... 0436 * :.............................: . 0437 * 0438 * 0439 * POINTERS: 0440 * 0441 * SIB - POINTER TO THE FIRST WORD OF THE FIRST 0442 * ENTRY IN THE INDEX. IF THE INDEX IS 0443 * EMPTY, SIB=SIT+1. 0444 * 0445 * SIT - POINTS TO THE LAST WORD OF THE LAST 0446 * ENTRY IN THE INDEX. SIT IS INITIALLY 0447 * SET TO THE ADDRESS OF THE LAST AVAILABLE 0448 * MEMORY LOCATION, AND IS NEVER ALTERED. 0449 * 0450 * SIP - POINTS TO THE FIRST WORD OF THE 0451 * INDEX ENTRY FOR THE STATEMENT 0452 * CURRENTLY BEING EXECUTED. IF, 0453 * THE CURRENT STATEMENT 0454 * IS BEING EXECUTED IN THE IMMEADIATE 0455 * MODE, SIP=0. 0456 * 0457 * 0458 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 14

0459 * RETURN STACK FORMAT 0460 * 0461 * 0462 * PURPOSE: TO HOLD RETURN INFORMATION FOR 0463 * GOSUB+RETURN SEQUENCES. 0464 * 0465 * TABLE SIZE: FIXED LENGTH, 16 WORDS 0466 * 0467 * ENTRY LENGTH: TWO WORDS 0468 * 0469 * ENTRY FORMAT: 0470 * 0471 * 0472 * ................................. ......... 0473 * : : . 0474 * : SI POINTER TO GOSUB STATEMENT : . 0475 * : : . 0476 * :...............................: . 0477 * : : . 0478 * : SBP TO STATEMENT FOLLOWING : . 0479 * : GOSUB, OR ZERO IF GOSUB IS : . . . 0480 * : LAST STATEMENT ON ITS LINE : . . . 0481 * : : ... 0482 * :...............................: . 0483 * 0484 * 0485 * POINTERS: 0486 * 0487 * RTB - POINTER TO THE FIRST WORD OF 0488 * THE FIRST AVAILABLE ENTRY, 0489 * NEVER IS ALTERED. 0490 * 0491 * RTM - POINTER TO THE LAST WORD OF 0492 * THE LAST AVAILABLE ENTRY, 0493 * NEVER IS ALTERED. 0494 * 0495 * RTR - POINTER TO THE FIRST WORD OF 0496 * THE NEXT FREE ENTRY. IF THE 0497 * TABLE IS EMRTY. RTP=RTB. IF 0498 * THE TABLE IS FULL, RTP=RTM+1. 0499 * 0500 * 0501 * 0502 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 15

0503 * SYSTEM CONFIGURATION 0504 * 0505 * 0506 * THE SYMBOL OP16 IS USED TO CONFIGURE 0507 * THE ASSEMBLY FUR EITHER OP16 OR STAND ALONE 0508 * USE. IF IT IS SET TO ZERO, A STAND ALONE VERSION 0509 * WILL BE ASSEMBLED. IF NON-ZERO, AN OP16 VERSION 0510 * WILL BE ASSEMBLED. 0511 * 0512 * 0513 000000 OP16 SET 0 STAND ALONE VERSION 0514 * 0515 * 0516 * 0517 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 16

0518 * EXTERNAL LINKAGE DECLARATIONS 0519 * 0520 * 0521 * 0522 ENT ERR WE SUPPLY THE ERROR REPORTING ROUTINE 0523 ENT TYPE MESSAGE TYPER 0524 ENT LODF LOAD MODE FLAG 0525 ENT LSTF PUNCH MODE FLAG 0526 ENT CPOS ASR POSITION COUNTER 0527 ENT BRKF PROGRAM BREAK FLAGS 0528 ENT SBP SOURCE BYTE POINTER 0529 ENT DBP DESTINATION BYTE POINTER 0530 ENT SCHR CHARACTER STORE ROUTINE 0531 ENT JOB JOB COMMAND PROCESSOR 0532 ENT GNBC GETS NEXT NON-BLANK CHARACTER 0533 ENT GCHR GETS NEXT CHARACTER 0534 ENT PTB PROGRAM TEXT BASE ADDRESS (LOW POINTER) 0535 ENT SIT STATEMENT INDEX TABLE ADDRESS(HIGH POINTER) 0536 ENT SBUF USED AS INPUT BUFFER FOR-INITIALIZATION 0537 ENT ATND ADDRESS OF ARCTANGENT FUNCTION 0538 ENT TAND ADDRESS OF TANGENT FUNCTION 0539 ENT SIND ADDRESS OF SINE FUNCTION 0540 ENT COSD ADDRESS OF COSINE FUNCTION 0541 ENT SQRD ADDRESS OF SQUARE ROOT FUNCTION 0542 ENT DELT ROUTINE TO FLAG ERROR DF 0543 ENT SCVL STORES A AND B REGISTERS INTO THE FLOATING POINT 0544 * ACCUMULATOR 0545 ENT PCVL PRINTS CONTENTS OF THE FLOATING POINT 0546 * ACCUMULATOR 0547 ENT IDMS ID MESSAGE 0548 ENT DFQ MEESAGE FOR LIBRARY FUNCTION DELETION 0549 ENT SQRQ MESSAGE ABOUT DELETING SQUARE ROOT FUNCTION 0550 ENT SCTQ MESSAGE ABOUT DELETING SIN, COS, TAN 0551 ENT ATNQ MESSAGE ABOUT DELESIMG +QBS+MFDMS 0552 ENT AYON MESSAGE REQUESTS A YES OR NO ANSWER 0553 ENT HMAM MESSAGE TO SET HIGH POINTER-SIT 0554 ENT AYOH REQUESTS A YES OR A HIGH ADDRESS 0555 ENT USPM MESSAGE TO INDICATE AMOUNT OF USER SPACE 0556 ENT ISSM FLAG INSUFFICIENT USER SPACE 0557 ENT C215 0558 ENT C300 0559 ENT C337 0560 ENT C1 0561 ENT C10 0562 ENT C221 0563 ENT C223 0564 ENT C240 0565 ENT C241 0566 ENT C260 0567 ENT C307
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 17

0568 ENT M1 0569 ENT M12 0570 ENT M100 0571 ENT F1 0572 ENT FM1 0573 ENT CLST SUBROUTINE CALL LIST 0578 * 0579 EXT INIT 0580 EXT LFCR ASR LINE ADVANCE 0581 EXT IPUT INPUT LINE 0582 EXT INA1 INPUT ONE CHARACTER 0583 EXT OTA1 OUTPUT ONE CHARACTER 0584 EXT BRKC PROGRAM BREAK CHECK 0585 EXT ITAPE INTIIALIZE PAPER TAPE PUNCHING 0586 EXT ETAPE TERMINATE PAPER TAPE PUNCHING 0587 EXT SINF SINE FUNCTION 0588 EXT COSF COSINE FUNCTION 0589 EXT TANF TANGENT FUNCTION 0590 EXT ATNF ARCTANGENT FUNCTION 0591 EXT EXPF EXPONENTIATION FUNCTION 0592 EXT ABSF ABSOLUTE VALUE FUNCTION 0593 EXT LOGF LOGARITHM FUNCTION 0594 EXT SQRF SQUARE ROOT FUNCTION 0595 EXT RNDF RANDOM NUMBER FUNCTION 0596 EXT SGNF SIGN FUNCTION 0597 EXT L$22 FLOATING POINT LOAD 0598 EXT H$22 FLOATING POINT STORE 0599 EXT M$11 INTEGER MULTIPLY 0600 EXT A$22 FLOATING POINT ADDITION 0601 EXT S$22 FLOATING POINT SUBTRACTION 0602 EXT M$22 FLOATING POINT MULTIPLY 0603 EXT D$22 FLOATING POINT DIVISION 0604 EXT N$22 FLOATING POINT TWOS COMPLEMENT 0605 EXT E$22 FLOATING POINT EXPONENTIATION 0606 EXT TINT FLOATING POINT INTEGER TEST 0607 EXT IFLT FLOATING POINT TO INTEGER CONVERSION 0608 EXT FINT INTEGER TO FLOATING POINT CONVERSION 0609 EXT CSRH FORCES SPECIAL CROSS SECTOR LINK 0610 * 0611 * 0612 * 0613 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 18

0614 * TEMPORARY STORAGE 0615 * 0616 * 0617 * 0618 * 0619 ORG '20 START WAY DOWN LOW 0625 * 0626 SETB SZHG INSURE ADDR. CONS. GO IN RIGHT PLACE 0627 * 0628 * 0629 * 0630 * TABLE POINTERS 0631 * 0632 * 0633 00020 000000 PTB BSZ 1 PROGRAM TEXT TABLE BASE POINTER 0634 00021 000000 PTH BSZ 1 PROGRAM TEXT TABLE HIGH POINTER 0635 00022 000000 DFB BSZ 1 DEFINED FUNCTION INDEX BASE POINTER 0636 00023 000000 DFT BSZ 1 DEFINED FUNCTION INDEX HIGH POINTER 0637 00024 000000 FNB BSZ 1 FOR-NEXT TABLE BASE POINTER 0638 00025 000000 FNT BSZ 1 FOR-NEXT TABLE HIGH POINTER 0639 00026 000000 SVB BSZ 1 SIMPLE VARIABLE STORAGE BASE POINTER 0640 00027 000000 SVT BSZ 1 SIMPLE VARIABLE STORAGE HIGH POINTER 0641 00030 000000 DVB BSZ 1 DIMENSIONED VARIABLE STORAGE BASE POINTER 0642 00031 000000 DVT BSZ 1 FIMENSIONEF VARIABLE STORAGE HIGH POINTER 0643 00032 000000 SIB BSZ 1 STATEMENT INDEX BASE POINTER 0644 00033 000000 SIT BSZ 1 STATEMENT INDEX HIGH POINTER 0645 00034 000000 SIP BSZ 1 CURRENT STATEMENT POINTER 0646 00035 000000 PDLP BSZ 1 PUSH DOWN STACK POINTER 0647 00036 000000 RTP BSZ 1 RETURN STACK POINTER 0648 * 0649 * PRIMARY BYTE POINTERS 0650 * 0651 00037 000000 SBP BSZ 1 PRIMARY BYTE FETCH POINTER 0652 00040 000000 DBP BSZ 1 PRIMARY BYTE STORE POINTER 0653 * 0654 * FLOATING POINT ACCUMULATORS 0655 * 0656 00041 000000 CVAL BSZ 2 PRIMARY FLOATING POINT ACCUMULATOR 0657 00043 000000 LVAL BSZ 2 SECONDARY FLOATING POINT ACCUMULATOR 0658 * 0659 * MISCELLANEOUS TEMPORARY STORAGE 0660 * 0661 00045 000000 CPOS BSZ 1 CURRENT CARRIAGE POSITION COUNTER 0662 00046 000000 RDT1 BSZ 1 READ STMT 0663 00047 000000 FSC BSZ 1 FREE SPACE COUNTER 0664 00050 000000 SNUM BSZ 1 STATEMENT NUMBER SAVE 0665 00051 000000 SEQI BSZ 1 SEQUENCING INHIBITION FLAG 0666 00052 000000 DEFN BSZ 1 DUMMY VARIABLE NAME 0667 00053 000000 DEFV BSZ 2 DUMMY VARIABLE VALUE 0668 00055 000000 LOP BSZ 1 LAST OPERATOR PRECEDENCE
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 19

0669 00056 000000 ILT1 BSZ 1 INPUT EDITOR 0670 00057 000000 ILT2 BSZ 1 DITTO 0671 00060 000000 ILT3 BSZ 1 DITTO 0672 00061 000000 ADT1 BSZ 1 ASSIGN DIMENSIONED VARIABLE 0673 00062 000000 ADT2 BSZ 1 DITTO 0674 00063 000000 ADT3 BSZ 1 DITTO 0675 00064 000000 ADT4 BSZ 1 DITTO 0676 00065 000000 ADT5 BSZ 1 DITTO 0677 00066 000000 ADT6 BSZ 1 DITTO 0678 00067 000000 ADT7 BSZ 1 DITTO 0679 00070 000000 ADT8 BSZ 1 DITTO 0680 00071 000000 DPTR BSZ 1 LOCATE DIMENSIONED VARIABLE 0681 00072 000000 DCT1 BSZ 1 DITTO 0682 00073 000000 DCT2 BSZ 1 DITTO 0683 00074 000000 CHAR BSZ 1 LAST CHARACTER FETCHED 0684 00075 000000 LCHR BSZ 1 LAST CHARACTER STORED 0685 00076 000000 TMP1 BSZ 1 MISCELLANEOUS 0686 00077 000000 TMP2 BSZ 1 MISCELLANEOUS 0687 00100 000000 TMP3 BSZ 1 MISCELLANEOUS 0688 00101 000000 CON1 BSZ 1 PROGRAM BREAK POINT SAVE 0689 00102 000000 CON2 BSZ 1 PROGRAM BREAK POINT SAVE 0690 00103 000000 BRKF BSZ 1 PROGRAM BREAK FLAG 0691 00104 000000 DIMF BSZ 1 DIMENSION STATEMENT FLAG 0692 00105 000001 LODF OCT 1 MUST BE INITIALLY NONZERO OR ELSE!!!! 0693 00106 000000 LSTF BSZ 1 LIST MODE FLAG 0694 00107 VARN BSS 1 VARIABLE NAME STORAGE 0698 * 0699 * BUFFERS 0700 * 0701 00110 000000 SBUF BSZ 80 COMMAND INPUT BUFFER 0702 00230 000000 IBUF BSZ 80 DATA INPUT BUFFER 0703 000231 WORK EQU IBUF+1 OUTPUT EDITOR SCRATCH AREA 0704 00350 000000 RSTK BSZ 16 RETURN STACK 0705 * 0706 * 0707 * 0708 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 20

0709 * SPECIAL TEMPORARY STORAGE 0710 * 0711 * 0712 * THE FOLLOWING DEFINES NON-CONFLICTING GROUPS 0713 * OF TEMPORARY STORAGE THAT ARE ONLY USED WHEN 0714 * THE CONTENTS OF THE LAST 30 WORDS OF THE INPUT BUFFER, 0715 * IBUF, ARE INDETERMINANT. 0716 * 0717 * 0718 * 0719 000312 TMPL SET IBUF+50 LOW LIMIT OF STORAGE AREA 0720 000370 TMPH SET * CURRENT LOCATION 0721 * 0722 * 0723 * 0724 ORG TMPL 0725 * 0726 00312 IFT1 BSS 1 IF STATEMENT 0727 00313 IFT2 BSS 1 DITTO 0728 * 0729 * 0730 ORG TMPL 0731 * 0732 000034 LTT1 EQU SIP LIST COMMAND 0733 00312 LTT2 BSS 1 DITTO 0734 00313 LTT3 BSS 1 DITTO 0735 00314 LTT4 BSS 1 DITTO 0736 00315 LTT5 BSS 1 DITTO 0737 * 0738 * 0739 ORG TMPL 0740 * 0741 00312 STT1 BSS 1 SOURCE TEXT EDITOR 0742 00313 STT2 BSS 1 DITTO 0743 00314 STT3 BSS 1 DITTO 0744 00315 STT4 BSS 1 DITTO 0745 00316 STT5 BSS 1 DITTO 0746 00317 STT6 BSS 1 DITTO 0747 00320 STT7 BSS 1 DITTO 0748 * 0749 * 0750 ORG TMPL 0751 * 0752 00312 CLT1 BSS 1 CALL STATEMENT 0753 00313 CLT2 BSS 1 DITTO 0754 00314 CLT3 BSS 1 DITTO 0755 * 0756 * 0757 ORG TMPL+20 THIS GROUP MAYNOT OVERLAP THE LIST 0758 * COMMAND TEMPORARY STORAGE
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 21

0759 * 0760 * 0761 00336 SIGN BSS 1 OUTPUT EDITOR 0762 00337 EXP BSS 1 DITTO 0763 00340 ECTR BSS 1 DITTO 0764 00341 INHC BSS 1 DITTO 0765 * 0766 * 0767 ORG TMPL 0768 * 0769 00312 PRT1 BSS 1 PRINTS STATEMENT 0770 * 0771 ORG TMPH END OF DEFINITIONS 0772 * 0773 * 0774 * 0775 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 22

0776 * THE FOLLOWING MESSAGES ARE USED BY THE INITIALIZATION 0777 * ROUTINE WHICH SETS THE HIGH AND LOW POINTERS(SIT AND PTB). THE 0778 * SPACE USED BY THE MESSAGES IS LATER USED FOR INPUT AND OUTPUT 0779 * BUFFERS. 0780 000370 HERE SET * 0782 ORG *-130 0783 00166 141301 IDMS BCI 13,BASIC-16A REV. A 01-21-7 00167 151711 00170 141655 00171 130666 00172 140640 00173 120322 00174 142726 00175 127240 00176 140640 00177 120260 00200 130655 00201 131261 00202 126667 0784 00203 130400 VFD 8,'261,8,'000 0789 00204 120314 USPM BCI 19, LOCATIONS FOR USER STORAGE AND TABLES 00205 147703 00206 140724 00207 144717 00210 147323 00211 120306 00212 147722 00213 120325 00214 151705 00215 151240 00216 151724 00217 147722 00220 140707 00221 142640 00222 140716 00223 142240 00224 152301 00225 141314 00226 142723 0790 00227 000000 OCT 0 0791 00230 120301 ATNQ BCI 2, ATN 00231 152316 0792 00232 137640 VFD 8,'277,8,'240 0793 00233 124301 AYON BCI 9,(ANSWER YES OR NO) 00234 147323 00235 153705 00236 151240 00237 154705 00240 151640 00241 147722
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 23

00242 120316 00243 147651 0794 00244 000000 OCT 0 0795 00245 151640 SCTQ BCI 8,S SIN, COS, TAN 00246 151711 00247 147254 00250 120303 00251 147723 00252 126240 00253 152301 00254 147240 0796 00255 137400 VFD 8,'277,8,0 0797 00256 120323 SQRQ BCI 2, SQR 00257 150722 0798 00260 137400 VFD 8,'277,8,0 0799 00261 142317 DFQ BCI 19,DO YOU WISH TO DELETE LIBRARY FUNCTION 00262 120331 00263 147725 00264 120327 00265 144723 00266 144240 00267 152317 00270 120304 00271 142714 00272 142724 00273 142640 00274 146311 00275 141322 00276 140722 00277 154640 00300 143325 00301 147303 00302 152311 00303 147716 0800 00304 000000 OCT 0 0801 00305 147713 HMAM BCI 10,OK TO USE ALL OF COR 00306 120324 00307 147640 00310 152723 00311 142640 00312 140714 00313 146240 00314 147706 00315 120303 00316 147722 0802 00317 142677 VFD 8,'305,8,'277 0803 00320 000000 VFD 8,'000 0804 00321 124301 AYOH BCI 20,(ANSWER YES OR GIVE HIGH OCTAL ADDRESS) 00322 147323 00323 153705
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 24

00324 151240 00325 154705 00326 151640 00327 147722 00330 120307 00331 144726 00332 142640 00333 144311 00334 143710 00335 120317 00336 141724 00337 140714 00340 120301 00341 142304 00342 151305 00343 151723 00344 124640 0805 00345 000000 OCT 0 0806 00346 144716 ISSM BCI 12,INSUFFICIENT USER SPACE 00347 151725 00350 143306 00351 144703 00352 144705 00353 147324 00354 120325 00355 151705 00356 151240 00357 151720 00360 140703 00361 142640 0807 00362 000000 OCT 0 0808 ORG HERE 0809 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 25

0810 * CONSTANTS AND FIXED POINTERS 0811 * 0812 * 0813 * 0814 00370 000000 C0 OCT 0 0815 00371 000001 C1 OCT 1 0816 00372 000010 C10 OCT 10 0817 00373 000011 C11 OCT 11 0818 00374 000012 C12 OCT 12 0819 00375 000016 C16 OCT 16 0820 00376 000002 C2 OCT 2 0821 00377 000020 C20 OCT 20 0822 00400 000212 C212 OCT 212 0823 00401 000215 C215 OCT 215 0824 00402 000221 C221 OCT 221 0825 00403 000223 C223 OCT 223 0826 00404 000023 C23 OCT 23 0827 00405 000240 C240 OCT 240 0828 00406 000241 C241 OCT 241 0829 00407 000242 C242 OCT 242 0830 00410 000250 C250 OCT 250 0831 00411 000251 C251 OCT 251 0832 00412 000252 C252 OCT 252 0833 00413 000253 C253 OCT 253 0834 00414 000254 C254 OCT 254 0835 00415 000255 C255 OCT 255 0836 00416 000256 C256 OCT 256 0837 00417 000257 C257 OCT 257 0838 00420 000260 C260 OCT 260 0839 00421 000261 C261 OCT 261 0840 00422 000272 C272 OCT 272 0841 00423 000273 C273 OCT 273 0842 00424 000275 C275 OCT 275 0843 00425 000277 C277 OCT 277 0844 00426 000003 C3 OCT 3 0845 00427 000300 C300 OCT 300 0846 00430 000305 C305 OCT 305 0847 00431 000307 C307 OCT 307 0848 00432 000333 C333 OCT 333 0849 00433 000336 C336 OCT 336 0850 00434 000337 C337 OCT 337 0851 00435 000004 C4 OCT 4 0852 00436 000043 C43 OCT 43 0853 00437 000005 C5 OCT 5 0854 00440 000050 C50 OCT 50 0855 00441 000054 C54 OCT 54 0856 00442 000013 CMAX DEC 11 MAXIMUM SUBROUTINE IDENTIFIER + 1 0857 00443 000021 DTAC OCT 21 'DATA' 0858 00444 040300 F1 DEC 1.0 00445 000000
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 26

0859 00446 041120 F10 DEC 10.0 00447 000000 0860 00450 022134 F10R DEC 1.0E-17 USED IN CONVERSION OF VERY SMALL CONSTANTS 00451 035725 0861 00452 137500 FM1 DEC -1.0 00453 000000 0862 00454 000006 GTC OCT 6 'GOTO' 0863 00455 000176 INTF OCT 176 INTEGER CONSTANT FLAG 0864 00456 000177 RELF OCT 177 REAL CONSTANT FLAG 0865 00457 040511 LE10 OCT 040511,127307 NATURAL LOG OF 10 00460 127307 0867 00461 0 004016 LSBP DAC IDNT+IDNT POINTER TO RESERVED NAME LIST 0871 00462 177777 M1 OCT -1 0872 00463 177770 M10 OCT -10 0873 00464 177700 M100 OCT -100 0874 00465 177766 M12 OCT -12 0875 00466 177776 M2 OCT -2 0876 00467 177757 M21 OCT -21 0877 00470 177773 M5 OCT -5 0878 00471 177725 M53 OCT -53 0879 00472 177772 M6 OCT -6 0880 00473 000105 MCOL DEC 69 MAX NO. OF ASR COLUMNS - 2 0881 00474 033723 ROND DEC .000005 ROUNDING FACTOR 00475 161326 0882 00476 0 000350 RTB DAC RSTK RETURN STACK BASE POINTER 0883 00477 0 000367 RTM DAC RSTK+15 RETURN STACK HIGH POINTER 0884 00500 177751 SMAX OCT -27 POINTER TO IDENTIFIERS THAT REQUIRE SPACES 0885 00501 023417 SNMX DEC 9999 LARGEST LEGAL STATEMENT NUMBER 0886 00502 000025 STPC OCT 25 'STEP' 0887 00503 000043 TABC OCT 43 'TAB(' 0888 00504 000026 THNC OCT 26 'THEN' 0889 00505 000024 TOC OCT 24 'TO' 0890 00506 000022 DIMC OCT 22 'DIM' 0891 00507 000042 FNC OCT 42 'FN' 0892 000507 DEFF EQU FNC 0893 00510 000026 SYSL OCT 26 PNTR TO FIRST SYS FUNCTION - 1 0894 00511 000042 SYSH OCT 42 PNTR TO LAST SYS FUNCTION + 1 0895 00512 0 000231 WRKD DAC WORK POINTER TO OUTPUT EDITOR SCRATCH AREA 0896 00513 0 000237 WKD7 DAC WORK+6 POINTER TO 7TH WORD OF SCRATCH AREA 0897 000375 REMF EQU C16 'REM' 0898 00514 0 000053 DFVD DAC DEFV POINTER TO DUMMY VARIABLE VALUE 0899 00515 -0 10 00515 CJST JST* * PROTOTYPE CALL 0900 00516 0 004063 CLST DAC CL01-1 SUBROUTINE LINKAGE ADDRESS 0901 00517 0 004063 DAC CL01-1 SUBROUTINE LINKAGE ADDRESS 0902 00520 0 004063 DAC CL01-1 SUBROUTINE LINKAGE ADDRESS 0903 00521 0 004063 DAC CL01-1 SUBROUTINE LINKAGE ADDRESS 0904 00522 0 004063 DAC CL01-1 SUBROUTINE LINKAGE ADDRESS 0905 00523 0 004063 DAC CL01-1 SUBROUTINE LINKAGE ADDRESS 0906 00524 0 004063 DAC CL01-1 SUBROUTINE LINKAGE ADDRESS 0907 00525 0 004063 DAC CL01-1 SUBROUTINE LINKAGE ADDRESS
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 27

0908 00526 0 004063 DAC CL01-1 SUBROUTINE LINKAGE ADDRESS 0909 00527 0 004063 DAC CL01-1 SUBROUTINE LINKAGE ADDRESS 0910 00530 0 01 04013 CJMP JMP CL06 SUBROUTINE RETURN COMMAND 0911 * 0912 * 0913 * 0914 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 28

0915 * SYSTEM FUNCTION ADDRESS LIST 0916 * 0917 * 0918 * 0919 * 0920 000530 SFNL EQU *-1 0921 00531 0 000000 SIND DAC SINF SINE FUNCTION 0922 00532 0 000000 COSD DAC COSF COSINE FUNCTION 0923 00533 0 000000 TAND DAC TANF TANGENT FUNCTION 0924 00534 0 000000 ATND DAC ATNF ARCTANGENT FUNCTION 0925 00535 0 000000 DAC EXPF EXPONENTIAL FUNCTION 0926 00536 0 000000 DAC ABSF ABSOLUTE VALUE FUNCTION 0927 00537 0 000000 DAC LOGF NATURAL LOGARITHM FUNCTION 0928 00540 0 000000 SQRD DAC SQRF SQUARE ROOT FUNCTION 0929 00541 0 000000 XAC INTF INTEGER PART FUNCTION 0930 00542 0 000000 DAC RNDF RANDOM NUMBER FUNCTION 0931 00543 0 000000 DAC SGNF SIGN FUNCTION 0932 * 0933 * 0934 * 0935 00544 0 000545 DELT DAC *+1 0936 00545 0 000000 DAC ** DELETED FUNCTION ERROR ROUTINE 0937 00546 0 10 05243 JST ERR FLAG ERROR 0938 00547 142306 BCI 1,DF DF 0939 * 0940 * 0941 000550 SZHG SET * ADDRESS CONSTANTS START HERE 0942 * 0943 * 0944 ORG '776 PUT 2 POINTERS IN A KNOWN LOCATIONS 0945 00776 0 000516 DAC CLST ADDRESS OF 'CALL' LINKAGE TABLE 0946 00777 0 00 00000 PZE CSRH ADDRESS GF HIGHEST CROSS SECTOR LINK 0947 * 0948 * 0949 * 0950 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 29

0951 * COMMAND INPUT DISCRIMINATOR 0952 * 0953 * 0954 * THIS ROUTINE WILL OUTPUT A QUESTION MARK AND 0955 * THEN INPUT A USER RESPONSE LINE. DEPENDING ON THE 0956 * USERS INPUT, THE FOLLOWING ACTION WILL BE TAKEN: 0957 * 0958 * 1) IF A LINE NUMBER STARTS THE INPUT LINE, 0959 * CONTROL WILL BE PASSED TO THE SOURCE TEXT EDITOR. 0960 * 0961 * 2) IF THE INPUT IS A SYSTEM COMMAND, CONTROL 0962 * WILL BE PASSED TO THE APPROPRIATE PROCESSING ROUTINE. 0963 * 0964 * 3) IF NONE OF THE ABOVE IT WILL BE EXECUTED 0965 * AS AN IMMEADIATE MODE STATEMENT. 0966 * 0967 * 0968 ORG '1000 MAIN BODY OF PROGRAM STARTS HERE 0969 * 0971 01000 0 10 00000 CMOD JST INIT FIRST TIME INITIALIZATION 0972 * 0973 * THE PREVIOUS INSTRUCTION WILL RE REPLACED WITH 0974 * A 'CRA' BY THE INITIALIZATION ROUTINE 0975 * 0982 01001 0 04 00034 STA SIP SET SIP TO INDICATE A COMMAND LINE 0983 01002 0 02 00045 LDA CPOS IF NOT AT START OF ASR LINE, 0984 01003 100040 SZE OUTPUT CARRIAGE RETURN, LINE FEED 0985 01004 0 10 00000 JST LFCR X 0986 01005 0 02 00425 LDA C277 REQUEST USER INPUT 0987 01006 0 10 01504 JST ILIN X 0989 01007 0 000220 SSBP DAC SBUF+SBUF BYTE POINTER TO SYSTEM INPUT BUFFER 0993 01010 0 02 01007 LDA SSBP SET POINTER TO FIRST CHARACTER OF 0997 01011 0 04 00037 STA SBP THE INPUT BUFFER 0998 01012 140040 CRA RESET THE PROGRAM BREAK FLAG 0999 01013 0 04 00103 STA BRKF X 1000 01014 0 10 03054 JST XCHR EXAMINE FIRST INPUT ITEM 1001 01015 0 11 00455 CAS INTF TEST FOR LINE NUMBER 1002 01016 100000 SKP NO 1003 01017 0 01 01313 JMP STMT YES ... GO TO TEXT EDITOR 1004 01020 0 04 00105 STA LODF NO ... RESET LOAD MODE FLAG 1005 01021 0 11 00456 CAS RELF DOES LINE START WITH A REAL CONSTANT? 1006 01022 100000 SKP X 1007 01023 0 01 04572 JMP ISN1 YES ... REPORT STATEMENT NUMBER ERROR 1008 01024 0 10 03173 JST DLCK NULL LINE ? 1009 01025 100000 SKP NO 1010 01026 0 01 01000 JMP CMOD YES ... GET ANOTHER INPUT LINE 1011 01027 0 11 00436 CAS C43 TEST FOR SYSTEM COMMAND 1012 01030 0 11 00441 CAS C54 X 1013 01031 0 01 03213 JMP ESMT NO....EXECUTE IMMEADIATE COMMAND 1014 01032 0 01 03213 JMP ESMT NO....EXECUTE IMMEADIATE COMMAND
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 30

1015 01033 0 04 00000 STA 0 POINTER TO SYSTEM FUNCTION IN INDEX 1016 01034 -1 01 00771 JMP* *-'43,1 BRANCH TO PROCESS A SYSTEM FUNCTION 1017 01035 0 001045 DAC JOB JOB COMMAND 1018 01036 0 001052 DAC CLER CLEAR COMNAND 1019 01037 0 001054 DAC RUN RUN COMMAND 1020 01040 0 001137 DAC LIST LIST COMMAND 1021 01041 0 001121 DAC CONT CONTINUE COMMAND 1022 01042 0 001130 DAC QUIT QUIT COMMAND 1023 01043 0 001132 DAC LOAD LOAD COMMAND 1024 01044 0 001135 DAC PNCH PUNCH COMMAND 1025 * 1026 * 1027 * 1028 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 31

1029 * JOB COMMAND PROCESSOR 1030 * 1031 * 1032 * THE JOB COMMAND CLEARS ALL TABLES INCLUDING THE 1033 * PROGRAM STORAGE AREA. 1034 * 1035 * 1036 * 1037 01045 0 02 00020 JOB LDA PTB CLEAR THE PROGRAM TEXT TABLE 1038 01046 0 04 00021 STA PTH X 1039 01047 0 02 00033 LDA SIT DELETE ALL ENTRIES IN THE 1040 01050 141206 AOA STATEMENT INDEX 1041 01051 0 04 00032 STA SIB X 1042 * 1043 * FALL THROUGH TO 'CLEAR' PR0CESSOR 1044 * 1045 * 1046 * 1047 * 1048 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 32

1049 * CLEAR COMMAND PROCESSOR 1050 * 1051 * 1052 * THE CLEAR COMMAND INITIALIZES ALL TABLES EXECPT 1053 * THE PROGRAM TEXT STORAGE AREA AND THE STATEMENT INDEX. 1054 * 1055 * 1056 01052 0 10 02770 CLER JST CLRT CLEAR THE TABLES 1057 01053 0 01 01000 JMP CMOD GO PROCESS NEXT COMMAND 1058 * 1059 * 1060 * 1061 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 33

1062 * RUN COMMAND PROCESSOR 1063 * 1064 * 1065 * ALL USERS TABLES WILL BE CLEARED, ALL DIM STATEMENTS 1066 * WILL BE PROCESSED, AND THEN PROGRAM EXECUTION WILL BE STARTED 1067 * AT THE LOWEST NUMBERED STATEMENT. 1068 * 1069 * 1070 * 1071 01054 0 10 02770 RUN JST CLRT CLEAR USER TABLES 1072 01055 0 04 00051 STA SEQI RESET SEQUENCING INIBITION FLAG 1073 01056 0 04 00104 STA DIMF SET DIMENSION STATEMENT FLAG 1074 01057 0 10 03011 JST IPDS SET UP THE PUSH DOWN STACK 1075 01060 0 02 00032 LDA SIB SETIP TO PROCESS ALL DIM STMTS 1076 01061 0 07 00376 SUB C2 X 1077 01062 0 04 00034 STA SIP X 1078 01063 0 02 00506 RN01 LDA DIMC FIND THE NEXT DIMENSION STATEMENT 1079 01064 0 10 04457 JST SSR X 1080 01065 0 01 01100 JMP RN02 ALL DIMENSION STMTS HAVE BEEN PROCESSED 1081 01066 0 10 04632 RN03 JST PVN ISOLATE VARIABLE NAME 1082 01067 0 10 04751 JST ADV CREATE TABLE ENTRY FOR THIS VARIABLE 1083 01070 0 01 01117 JMP RN04 ERROR...ILLEGAL DIMENSIONED VARIABLE NAME 1084 01071 0 10 03047 JST GCHR FETCH ITEM TERMINATOR 1085 01072 0 11 00414 CAS C254 IF COMMA, THEN MORE NAMES FOLLOW 1086 01073 100000 SKP NO 1087 01074 0 01 01066 JMP RN03 GO PROCESS NEXT VARIABLE 1088 01075 0 10 03065 JST UCHR NOT COMMA, MUST BE : OR C/R 1089 01076 0 10 03116 JST GDLM X 1090 01077 0 01 01063 JMP RN01 GO CHECK FOR MORE DIMENSION STMTS 1091 * 1092 01100 0 02 01007 RN02 LDA SSBP RESTORE POINTER TO COMMAND LINE 1096 01101 0 04 00037 STA SBP X 1097 01102 0 02 00032 LDA SIB SET SI POINTER TO START 1098 01103 0 07 00376 SUB C2 EXECUTION AT LOWEST NUMBERED 1099 01104 0 04 00034 STA SIP X 1100 01105 0 02 00374 LDA C12 RESET DIMENSION STMT FLAG 1101 01106 0 04 00104 STA DIMF X 1102 01107 0 10 03047 JST GCHR STEP OVER 'RUN' 1103 01110 0 10 03054 JST XCHR TEST FOR STARTING LINE NUMBER 1104 01111 0 10 03173 JST DLCK X 1105 01112 100000 SKP MAYBE 1106 01113 0 01 04600 JMP ASQ NO ... START AT LOWEST NUMBERED LINE 1107 01114 140040 CRA SIP=0 SO THAT ERROR DIAGNOSTICS 1108 01115 0 04 00034 STA SIP WILL COME OUT RIGHT 1109 01116 0 01 03324 JMP GOTO EXECUTE A 'GOTO' STATEMENT 1110 * 1111 01117 0 10 05243 RN04 JST ERR REPORT DIMENSION VARIBALE NAME ERROR 1112 01120 142316 BCI 1,DN 1113 * 1114 *
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 34

1115 * 1116 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 35

1117 * CONTINUE COMMAND PROCESSOR 1118 * 1119 * 1120 * IF A PREVIOUS BREAK OPERATION HAS BEEN 1121 * PERFORMED AND IF SEQUENCING HAS NOT BEEN INHIBITED, 1122 * STATEMENT EXECUTION WILL BE RESUMED AT THE POINT 1123 * WHERE IT WAS INTERRUPTED. 1124 * 1125 * 1126 * 1127 01121 0 02 00101 CONT LDA CON1 IS THERE A BREAK OUTSTANDING 1128 01122 101040 SNZ X 1129 01123 0 01 01000 JMP CMOD NO....GO GET NEXT COMMAND 1130 01124 0 04 00034 STA SIP YES...SET POINTER TO STMT WE WERE AT 1131 01125 0 02 00102 LDA CON2 SET BYTE POINTER TO THE FIRST 1132 01126 0 04 00037 STA SBP CHARACTER OF THAT STATEMENT 1133 01127 0 01 03213 JMP ESMT GO CONTINUE EXECUTION 1134 * 1135 * 1136 * 1137 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 36

1138 * QUIT COMMAND PROCESSOR 1139 * 1140 * 1142 * THIS ROUTINE WILL HALT THE CENTRAL 1143 * PROCESSOR. IF THE START BUTTON IS DEPRESSED, 1144 * CONTROL WILL BE RETURNED TO COMMAND MODE. 1152 * 1153 * 1154 * 1156 01130 000000 QUIT HLT STOP THE COMPUTER 1157 01131 0 01 01000 JMP CMOD ON RESTART, GET THE NEXT COMMAND 1165 * 1166 * 1167 * 1168 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 37

1169 * LOAD COMNAND PROCE$SSOR 1170 * 1171 * 1172 * WHEN IN LOAD MOQE THE PAPER TAPE READER WILL BE 1173 * TURNED ON WHEN EACH LINE IS REQUESTED, AND THE INPUT 1174 * PREFIX CHARACTER WILL NOT BE PRINTED. 1175 * 1176 * 1177 * 1178 01132 140040 LOAD CRA SET THE LOAD FLAG 1179 01133 0 04 00105 STA LODF X 1180 01134 0 01 01000 JMP CMOD START READING IN TEXT 1181 * 1182 * 1183 * 1184 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 38

1185 * PUNCH COMMAND PROCESSOR 1186 * 1187 * 1188 * 1189 01135 0 10 00000 PNCH JST ITAPE INITIALIZE TAPE OUTPUT 1190 01136 0 12 00106 IRS LSTF TURN ON PUNCH FLAG 1191 * 1192 * FALL THROUGH TO LIST PROCESSOR 1193 * 1194 * 1195 * 1196 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 39

1197 * LIST COMMAND PROCESSOR 1198 * 1199 * 1200 * THIS ROUTINE PRINTS A SOURCE LISTING 1201 * OF THE PROGRAM THAT IS CURRENTLY STORED. THE LISTING 1202 * IS PRECEEDED AND FOLLOWED BY TWO BLANK LINES. 1203 * 1204 * 1205 01137 0 02 00400 LIST LDA C212 PRINT A COUPLE OF BLANK LINES 1206 01140 0 10 00000 JST OTA1 X 1207 01141 0 10 00000 JST OTA1 X 1208 01142 140040 CRA 1209 01143 0 04 00314 STA LTT4 INITIALIZE LOW LIST RANGE POINTER 1210 01144 0 02 00444 LDA F1 INITILAIZE HIGH LIST RANGE POINTER TO 1211 01145 0 04 00315 STA LTT5 SOME VALUE > 9999 1212 01146 0 10 03047 JST GCHR STEP OVER 'LIST' 1213 01147 0 10 03054 JST XCHR TEST FOR LIST PARAMETERS 1214 01150 0 10 03173 JST DLCK X 1215 01151 100000 SKP ......YES...... 1216 01152 0 01 01170 JMP LT11 NO ... START LISTING 1217 01153 0 11 00414 CAS C254 IS FIRST PARAMETER MISSING ? 1218 01154 100000 SKP NO 1219 01155 0 01 01161 JMP LT13 YES ... LIST UPTO SECOND PARAMETER 1220 01156 0 10 04556 JST ISN INPUT LOW RANGE PARAMETER 1221 01157 0 07 00371 SUB C1 ADJUST AS RANGE CHECK IN EXCLUSIVE 1222 01160 0 04 00314 STA LTT4 SAVE IT 1223 01161 0 10 03047 LT13 JST GCHR GET PARAMETER DELIMITER 1224 01162 0 10 03173 JST DLCK SECOND PARAMETER MISSING ? 1225 01163 100000 SKP NO 1226 01164 0 01 01170 JMP LT11 YES ... START LISTING 1227 01165 0 10 04556 JST ISN INPUT THE SECOND PARAMETER 1228 01166 141206 AOA ADJUST AS RANGE CHECK IS EXCLUSIVE 1229 01167 0 04 00315 STA LTT5 SAVE IT 1230 01170 0 02 00032 LT11 LDA SIB START SCAN AT LOWEST NUMBERED STATEMENT 1231 01171 0 11 00033 LT01 CAS SIT ARE WE PAST END OF TABLE? 1232 01172 0 01 01305 JMP LT02 YES...GO FINISH UP 1233 01173 000000 OCT 0 NEVER CAN EXECUTE THIS WORD 1234 01174 0 04 00034 STA LTT1 SAVE POINTER IN SAFE PLACE 1235 01175 -0 02 00034 LDA* SIP GET NO. OF CURRENT STATEMENT 1236 01176 0 11 00314 CAS LTT4 IS IT IN LISTING RANGE ? 1237 01177 0 11 00315 CAS LTT5 X 1238 01200 0 01 01302 JMP LT14 ....NO....MOVE ON TO NEXT STATEMENT 1239 01201 0 01 01302 JMP LT14 ....NO....MOVE ON TO NEXT STATEMENT 1240 01202 0 10 02736 JST PLN PRINT LINE NUMBER OF THIS STATEMENT 1241 01203 0 35 00034 LDX LTT1 X POINTS TO SI ENTRY FOR THIS STATEMENT 1243 01204 1 02 00001 LDA 1,1 SET SBP TO START OF SOURCE FOR THIS 1248 01205 0 04 00037 STA SBP STATEMENT 1249 01206 0 10 03054 JST XCHR IF NEXT CHARACTER IS NOT A 1250 01207 0 11 00401 CAS C215 SPECIAL IDENTIFIER, PRINT A 1251 01210 0 10 02764 JST SPAC SPACE TO MAKE THE LISTING LINE UP
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 40

1252 01211 101000 NOP 1253 01212 0 10 02764 LT12 JST SPAC X 1254 01213 0 10 03047 LT03 JST GCHR GET THE NEXT SOURCE CHARACTER 1255 01214 0 11 00455 CAS INTF TEST FOR INTEGER CONSTANT 1256 01215 100000 SKP NO 1257 01216 0 01 01257 JMP LT04 YES...GO PRINT IT 1258 01217 0 11 00456 CAS RELF NO...TEST FOR REAL CONSTANT 1259 01220 100000 SKP NO 1260 01221 0 01 01262 JMP LT05 YES...GO RRINT IT 1261 01222 0 11 00401 CAS C215 TEST FOR NORMAL CHARACTER 1262 01223 0 10 00000 JST OTA1 YES...PRINT IT 1263 01224 0 01 01274 JMP LT06 GO SEE IF IT WAS CARRIAGE RETURN 1264 01225 140407 TCA SPECIAL IDENTIFIER...NEGATE FOR TABLE SCAN 1265 01226 0 04 00312 STA LTT2 SAVE FOR LATER REFERENCE 1266 01227 0 04 00313 STA LTT3 SAVE FOR COUNTING 1267 01230 0 11 00500 CAS SMAX DOES THIS IDENTIFIER REQUIRE A LEADING SPACE? 1268 01231 0 10 02764 JST SPAC YES...PRINT ONE 1269 01232 101000 NOP NO 1270 01233 0 35 00037 LDX SBP SAVE POINTER TO CURRENT STATEMENT 1271 01234 0 02 00461 LDA LSBP SET POINTER TO START OF THE 1275 01235 0 04 00037 STA SBP IDENTIFIER LIST 1276 01236 0 12 00313 LT09 IRS LTT3 ARE WE AT THE CORRECT ENTRY? 1277 01237 0 01 01253 JMP LT07 NO...GO FEED THROUGH CURRENT ENTRY 1278 01240 0 10 03047 LT08 JST GCHR GET CHARACTER OF EXPANSION 1279 01241 100040 SZE DO NOT PRINT IT IF IDENTIFIER MARK 1280 01242 0 10 00000 JST OTA1 PRINT CHARACTER OF IDENTIFIER EXPANSION 1281 01243 100040 SZE HAS ALL OF THE IDENTIFIER BEEN PRINTED? 1282 01244 0 01 01240 JMP LT08 NO...GO PRINT NEXT CHARACTER OF IDENTIFIER 1283 01245 0 15 00037 STX SBP RESTORE POINTER TO STMT WE ARE PRINTING 1284 01246 0 02 00312 LDA LTT2 PRINT TRAILING SPACE 1285 01247 0 11 00500 CAS SMAX IF REQUIRED 1286 01250 0 01 01212 JMP LT12 REQUIRED...GO PRINT SPACE 1287 01251 0 01 01213 JMP LT03 NOT REQUIRED 1288 01252 0 01 01213 JMP LT03 NOT REQUIRED 1289 01253 0 10 03047 LT07 JST GCHR STEP THROUGH CURRENT IDENTIFIER 1290 01254 100040 SZE END OF IDENTIFIER? 1291 01255 0 01 01253 JMP LT07 NO...CONTINUE SCAN 1292 01256 0 01 01236 JMP LT09 HIT THE END OF IT 1293 * 1294 * HERE TO PRINT CONSTANTS 1295 * 1296 01257 0 10 03077 LT04 JST GCPK PACK THE INTEGER CONSTANT 1297 01260 0 10 00000 JST FINT FLOAT IT 1298 01261 0 01 01266 JMP LT10 NOW TREAT AS REAL 1299 01262 0 10 03077 LT05 JST GCPK PACK FIRST WORD OF REAL CONSTANT 1300 01263 000201 IAB X 1301 01264 0 10 03077 JST GCPK PACK SECOND WORD OF THE-CONSTANT 1302 01265 000201 IAB PUT NUMBER IN NORMAL FORM 1303 01266 0 10 03207 LT10 JST SCVL PRINT ROUTINE LOOKS FOR NUMBER IN CVAL 1304 01267 140040 CRA CLEAR CARRIAGE POSITION COUNTER TO
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 41

1305 01270 0 04 00045 STA CPOS PREVENT A C/R-L/F FROM BEING GENERATED 1306 01271 0 02 00405 LDA C240 SURPASS ALL SPACES IN NUMBER 1307 01272 0 10 02154 JST PCVL PRINT THE NUMBERS 1308 01273 0 01 01213 JMP LT03 A GO WORK ON NEXT CHARACTER 1309 * 1310 * HERE FOR END FOR LINE TEST 1311 * 1312 01274 0 11 00401 LT06 CAS C215 IS CURRENT CHAR A C/R ? 1313 01275 0 01 01213 JMP LT03 NO...GO PROCESS NEXT ITEM 1314 01276 0 10 00000 JST LFCR ADVANCE ASR LINE 1315 01277 0 13 00103 IMA BRKF HAS THE USER HAD ENOUGH ? 1316 01300 100040 SZE X 1317 01301 0 01 01305 JMP LT02 YES ... RETURN TO COMMAND MODE 1318 01302 0 02 00034 LT14 LDA LTT1 UPDATE SI POINTER TO 1319 01303 0 06 00376 ADD C2 NEXT ENTRY 1320 01304 0 01 01171 JMP LT01 GO TEST FOR END OF LISTING 1321 * 1322 * HERE AT END OF LISTING 1323 * 1324 01305 0 10 00000 LT02 JST LFCR PRINT A COUPLE OF BLANK LINES 1325 01306 0 10 00000 JST LFCR X 1326 01307 0 13 00106 IMA LSTF FETCH AND CLEAR PUNCH FLAG 1327 01310 100040 SZE WERE WE PUNCHING ? 1328 01311 0 10 00000 JST ETAPE YES ... PUNCH TRAILER 1329 01312 0 01 01000 JMP CMOD GO PROCESS NEXT COMMAND 1330 * 1331 * 1332 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 42

1333 * SOURCE TEXT EDITOR 1334 * 1335 * 1336 * FUNCTION: 1337 * 1338 * THIS RQUTINE IS CALLED BY THE COMMAND LINE 1339 * RESPONSE ROUTINE WHEN A STATEMENT NUMBER IS DETECTED AT 1340 * THE BEGINNING OF A RESPONSE LINE. DEPENDING ON THE 1341 * LINE ENTERED, THE FOLLOWING ACTIONS MAY BE TAKEN: 1342 * 1343 * 1. IF IT IS A LINE NUMBER IMMEDIATELY FOLLOWED BY A 1344 * CARRIAGE RETURN, ANY EXISTING LINE WITH THAT NUMBER WILL 1345 * BE DELETED FROM STORAGE. 1346 * 2. IF A CARRIAGE RETURN DOES NOT IMMEDIATELY FOLLOW 1347 * THE LINE NUMBER, AND A STATEMENT WITH THAT NUMBER ALREADY 1348 * EXISTS, THE PREVIOUS COPY WILL BE DELETED AND THE NEW TEXT 1349 * WILL BE INSERT IN ITS PLACE. 1350 * 3. IF A CARRIAGE RETURN DOES NOT IMMEDIAIELY FOLLOW 1351 * THE LINE NUMBER, AND A STATEMENT WITH THAT NUMBER DOES 1352 * NOT EXIST, THE NEW LINE WILL BE ADDED TO THE PROGRAM. 1353 * 1354 * 1355 * 1356 01313 0 10 02770 STMT JST CLRT CLEAR ALL TABLES EXECPT PROGRAM TEXT AND SI 1357 01314 0 04 00320 STA STT7 CLEAR MEMORY OVERFLOW FLAG 1358 01315 0 10 04556 JST ISN GET THE STATEMENT NUMBER IN SNUM 1359 01316 0 02 00037 LDA SBP SAVE POINTER TO NEW STATEMENT 1360 01317 0 04 00312 STA STT1 A UNTIL WE ARE READY FOR IT 1361 01320 0 10 04475 JST SISR DO WE ALREADY HAVE A STMT WITH THAT NUMEER? 1362 01321 0 01 01450 JMP ST01 NO...GO APPEND A STATEMENT 1363 01322 0 10 04540 ST02 JST SES FIND END OF STATEMENT 1364 01323 0 11 00401 CAS C215 IS IT ACTUAL END OF LINE? 1365 01324 0 01 01322 JMP ST02 NO... CONTINUE SCAN 1366 01325 0 02 00037 LDA SBP CALCULATE THE NUMBER OF 1367 01326 141206 AOA BYTES IN THE LINE TO BE 1368 01327 1 07 00001 SUB 1,1 DELETED, ROUNDING UP IF IT ENDS 1369 01330 0 03 00466 ANA M2 ON A HALF WORD BOUNDRY 1370 01331 0 04 00313 STA STT2 X 1371 01332 1 06 00001 ADD 1,1 GET ADDRESS OF FIRST WORD OF 1372 01333 0404 77 LGR 1 NEXT STATEMENT 1373 01334 0 07 00371 SUB C1 1374 01335 0 04 00315 STA STT4 IT IS FIRST SOURCE ADDRESS-1 FOR TABLE MOVE 1375 01336 1 02 00001 LDA 1,1 A GET ADDRESS OF FIRST WORD OF STATEMENT 1376 01337 0404 77 LGR 1 IT IS FIRST DESTINATION ADDRESS FOR 1377 01340 0 04 00316 STA STT5 TABLE MOVE 1378 01341 0 02 00315 ST04 LDA STT4 ANY MORE TEXT TO 1379 01342 0 11 00021 CAS PTH BE MOVED? 1380 01343 000000 OCT 0 NEVER CAN EXECUTE THIS WORD A 1381 01344 0 01 01352 JMP ST03 NO...HOLE IN TABLE IS FILLED 1382 01345 0 12 00315 IRS STT4 GET ADDRESS OF NEXT SOURCE WORD
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 43

1383 01346 -0 02 00315 LDA* STT4 MOVE NEXT WORD 1384 01347 -0 04 00316 STA* STT5 X 1385 01350 0 12 00316 IRS STT5 A BUMP DESTINATION ADDRESS POINTER 1386 01351 0 01 01341 JMP ST04 GO CHECK FOR COMPLETION 1387 01352 0 02 00316 ST03 LDA STT5 UPDATE PROGRAM TEXT HIGH POINTER 1388 01353 0 04 00021 STA PTH X 1389 01354 0 15 00316 STX STT5 SAVE INDEX AS CLRT DESTROYS IT 1390 01355 0 10 02770 JST CLRT ACCOUNT FOR THE SPACE WE OPENED UP 1391 01356 0 35 00316 LDX STT5 RE$TORE INDEX AS CLRT HAS DONE ITS THING 1392 * 1393 * UPDATE STATEMENT INDEX POINTERS 1394 * 1395 * ALL POINTERS TO STATEMENTS THAT WERE PHYSICALLY 1396 * LOCATED ABOVE THE STATEMENT THAT WAS DELETED MUST BE 1397 * ADJUSTED TO POINT TO THE NEW LOCATION OF THE STATEMENTS. 1398 * 1399 01357 0 02 00032 LDA SIB START SCAN AT BASE OF TABLE 1400 01360 0 11 00033 ST06 CAS SIT PAST END OF INDEX ? 1401 01361 0 01 01375 JMP ST05 YES...STATEMENT INDEX IS UPDATED 1402 01362 000000 OCT 0 NEVER CAN EXECUTE THIS WORD 1403 01363 141206 AOA GET POINTER TO SBP OF CURRENT ENTRY 1404 01364 0 04 00315 STA STT4 X 1405 01365 -0 02 00315 LDA* STT4 DOES SBP IN CURRENT ENTRY POINT TO 1406 01366 1 11 00001 CAS 1,1 STATEMENT ABOVE THE DELETED ONE? 1407 01367 0 07 00313 SUB STT2 YES...CORRECT THE POINTER 1408 01370 101000 NOP X 1409 01371 -0 04 00315 STA* STT4 SET CORRECT POINTER VALUE 1410 01372 0 02 00315 LDA STT4 UPDATE STATEMENT INDEX POINTER 1411 01373 141206 AOA X 1412 01374 0 01 01360 JMP ST06 CONTINUE SCAN 1413 * 1414 * DELETION/REPLACEMENT CHECK 1415 * 1416 01375 0 02 00312 ST05 LDA STT1 RESTORE POINTER TO THE NEW 1417 01376 0 04 00037 STA SBP LINE 1418 01377 0 10 03054 JST XCHR DOES A CARRIAGE RETURN 1419 01400 0 05 00401 ERA C215 IMMEDIATELY FOLLOW THE 1420 01401 100040 SZE LINE NUMBER? 1421 01402 0 01 01421 JMP ST07 NO...GO APPEND A STATEMENT 1422 * 1423 * HERE TO DELETE STATEMENT INDEX ENTRY 1424 * 1426 01403 1 02 77777 ST08 LDA -1,1 MOVE ENTRY BELOW CURRENT 1430 01404 1 04 00001 STA 1,1 ENTRY INTO POSITION OF 1432 01405 1 02 77776 LDA -2,1 THE CURRENT ENTRY 1436 01406 1 04 00000 STA 0,1 X 1437 01407 0 02 00000 LDA 0 HAVE ALL ENTRIES BELOW THE 1441 01410 0 11 00032 CAS SIB DELETED ENTRY BEEN MOVED UP? 1442 01411 100000 SKP NO...KEEP GOING 1443 01412 0 01 01416 JMP ST09 YES...WRAP UP
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 44

1447 01413 0 07 00376 SUB C2 DECREMENT THE TABLE POINTER 1448 01414 0 04 00000 STA 0 X 1449 01415 0 01 01403 JMP ST08 CONTINUE WITH TABLE COMPRESSION 1450 01416 0 12 00032 ST09 IRS SIB CORRECT THE STATEMENT INDEX 1451 01417 0 12 00032 IRS SIB BASE POINTER 1452 01420 0 01 01443 JMP ST10 GO CLOSE OUT THIS OPERATION 1453 * 1454 * ADD STATEMENT TEXT TO TOP OF PROGRAM TEXT TABLE 1455 * 1456 01421 0 02 00021 ST07 LDA PTH PUT BYTE POINTER TO NEW STATEMENT IN 1457 01422 0414 77 LGL 1 SECOND WORD OF THE 1458 01423 1 04 00001 STA 1,1 STATEMENT INDEX ENTRY 1459 01424 0 02 00040 LDA DBP CALCULATE NUMBER OF 1460 01425 0 07 00037 SUB SBP WORDS IN THE STATEMENT 1461 01426 0 07 00371 SUB C1 X 1462 01427 0404 77 LGR 1 X 1463 01430 140401 CMA X 1464 01431 0 04 00312 STA STT1 SAVE FOR COUNTING 1465 01432 140407 TCA MAKE SURE THERE IS ENOUGH FREE 1466 01433 0 06 00047 ADD FSC SPACE FOR THE STATEMENT 1467 01434 101400 SMI X 1468 01435 0 01 01502 JMP ST14 NO ... FAIL SOFT PROCESSING REQUIRED 1469 01436 0 10 03077 ST11 JST GCPK MOVE TWO CHARACTERS TO 1470 01437 -0 04 00021 STA* PTH THE PROGRAM TEXT TABLE 1471 01440 0 12 00021 IRS PTH BUMP THE TABLE POINTER 1472 01441 0 12 00312 IRS STT1 BUMP THE WORD COUNTER 1473 01442 0 01 01436 JMP ST11 MORE TO MOVE 1474 * 1475 * HERE FOR FINAL WRAP UP 1476 * 1477 01443 0 04 00051 ST10 STA SEQI SET EXECUTION INHIBITION TRIGGER 1478 01444 0 02 00320 LDA STT7 HAS MEMORY OVERFLOW BEEN DETECTED 1479 01445 101040 SNZ X 1480 01446 0 01 01052 JMP CLER NO .... GO PROCESS NEXT COMMAND LINE 1481 01447 0 01 03027 JMP MEMO YES ... REPORT IT 1482 * 1483 * HERE FOR NEW STATEMENT ADDITION 1484 * 1485 01450 0 02 00376 ST01 LDA C2 MAKE SURE THAT THEREIS ROOM FOR 1486 01451 0 10 03041 JST UFSC A NEW STATEMENT INDEX ENTRY 1488 01452 0 35 00032 LDX SIB START SEARCH TO FIND POSITION OF THIS ENTRY 1489 01453 0 02 00000 ST13 LDA 0 ARE WE AT THE END OF THE TABLE? 1490 01454 0 11 00033 CAS SIT X 1498 01455 0 01 01471 JMP ST12 YES...ADD ENTRY TO TOP OF TABLE 1499 01456 000000 OCT 0 NEVER CAN EXECUTE THIS WORD 1504 01457 1 02 00000 LDA 0,1 COMPARE NUMBER OF THIS ENTRY 1505 01460 0 11 00050 CAS SNUM WITH NUMBER OF LINE TO BE INSERTED 1506 01461 0 01 01471 JMP ST12 NEW ENTRY GOES JUST BEFORE THIS ENTRY 1507 01462 000000 OCT 0 NEVER CAN EXECUTE THIS WORD 1509 01463 1 04 77776 STA -2,1 NEW ENTRY GOES ABOVE THIS...MOVE THIS
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 45

1513 01464 1 02 00001 LDA 1,1 ENTRY INTO VACATED POSITION 1515 01465 1 04 77777 STA -1,1 BELOW IT. 1520 01466 0 12 00000 IRS 0 BUMP TABLE POINTER TO NEXT ENTRY 1521 01467 0 12 00000 IRS 0 X 1522 01470 0 01 01453 JMP ST13 X 1530 01471 0 02 00000 ST12 LDA 0 SET POINTER TO ENTRY 1531 01472 0 07 00376 SUB C2 BEING CREATED 1532 01473 0 04 00000 STA 0 X 1533 01474 0 02 00050 LDA SNUM STATEMENT NUMBER GOES INTO 1534 01475 1 04 00000 STA 0,1 THE FIRST WORD OF THE ENTRY 1535 01476 0 02 00032 LDA SIB UPDATE STATEMENT INDEX BASE 1536 01477 0 07 00376 SUB C2 POINTER TO ACCOUNT FOR 1537 01500 0 04 00032 STA SIB THE NEW ENTRY 1538 01501 0 01 01375 JMP ST05 GO ADD LINE TO TEXT STORAGE 1539 * 1540 * 1541 01502 0 12 00320 ST14 IRS STT7 SET MEMORY OVERFLOW FLAG 1542 01503 0 01 01403 JMP ST08 GO DELETE HANGING SI ENTRY 1543 * 1544 * 1545 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 46

1546 * USER INPUT PROCESSOR 1547 * 1548 * 1549 * CALLING SEQUENCE: 1550 * 1551 * LDA CHAR INPUT REQUEST CHAR...SEE BELOW 1552 * JST ILIN 1553 * DAC BUF+BUF 80 WORD BUFFER ... SEE BELOW 1554 * ......RETURN 1555 * 1556 * THIS ROUTINE WILL CALL THE ROUTINE IPUT TO INPUT 1557 * A SOURCE LINE INTO THE PROVIDED BUFFER, STARTING AT 1558 * WORD 41. THE CARRIAGE RETURN THAT TERMINATES THE RECORD IS 1559 * ASSUMED TO BE PLACED INTO THE BUFFER. 1560 * AFTER THE LINE HAS BEEN INPUT, A LEXICAL SCAN 1561 * OF THE LINE IS PERFORMED TO DO THE FOLLOWING FUNCTIONS: 1562 * 1563 * 1) REMOVE ALL NONSIGNIFICANT SPACES 1564 * 2) CONVERT ALL CONSTANTS TO THEIR BINARY EQUIVILANTS 1565 * 3) TO REPLACE ALL RESERVED IDENTIFIERS WITH THEIR ONE 1566 * BYTE REPRESENTATIONS 1567 * 1568 * THE EXTRA 40 WORDS OF BUFFER-SPACE IS REQUIRED 1569 * FOR-CASES WHEN THE COMPRESSED TEXT IS LARGER THAN THE 1570 * ORIGINAL TEXT. THIS WILL OCCUR PRIMARILY AS A RESULT 1571 * OF CONSTANT CONVERSIONS. 1572 * 1573 * 1574 * 1575 01504 0 000000 ILIN DAC ** 1576 01505 000201 IAB PREFIX CHARACTER TO B 1578 01506 -0 02 01504 LDA* ILIN GET ADDRESS OF 1579 01507 0404 77 LGR 1 41ST WORD OF THE 1583 01510 0 06 00440 ADD C50 PROVIDED BUFFER 1584 01511 0 04 01514 STA *+3 X 1585 01512 000201 IAB RETRIEVE THE PREFIX CHARACTER 1586 01513 0 10 00000 JST IPUT INPUT LINE 1587 01514 0 000000 DAC ** X 1588 * 1589 * HERE FOR LEXICAL SCAN OF NEW LINE 1590 * 1591 01515 -0 02 01504 LDA* ILIN SET POINTER TO ACTUAL START OF BUFFER 1595 01516 0 04 00040 STA DBP X 1596 01517 0 10 03125 IL32 JST GNBC GET NEXT NON-BLANK CHARACTER 1597 01520 0 11 00407 CAS C242 IS IT START OF TEXT STRING ^ 1598 01521 100000 SKP NO 1599 01522 0 01 01542 JMP IL05 YES...GO PACK IT WITHOUT COMPRESSION 1600 01523 0 11 00416 CAS C256 IS IT A DECIMAL POINT ^ 1601 01524 100000 SKP NO 1602 01525 0 01 01553 JMP IL06 YES...GO CONVERT A NUMBER
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 47

1603 01526 0 10 03164 JST NUMC IS IT A DIGIT (0-9) ^ 1604 01527 100000 SKP NO 1605 01530 0 01 01553 JMP IL06 YES---GO CONVERT A NUMBER 1606 01531 0 10 03155 JST ALFA IS IT A ALPHABETIC CHARACTER 1607 01532 100000 SKP NO 1608 01533 0 01 01732 JMP IL07 YES...GO SEE IF IT'S A RESERVED WORD 1609 01534 0 10 03133 IL22 JST SCHR PUT THE CHARACTER IN THE BUFFER 1610 01535 0 05 00401 ERA C215 A TEST FOR END OF LINE 1611 01536 100040 SZE X 1612 01537 0 01 01517 JMP IL32 NO...GO PROCESS NEXT CHARACTER 1613 01540 0 12 01504 IRS ILIN YES...INCREMENT RETURN ADDRESS 1614 01541 -0 01 01504 JMP* ILIN AND EXIT 1615 * 1616 * HERE TO PACK LITERAL TEXT STRING 1617 * 1618 01542 0 10 03133 IL05 JST SCHR PLACE THE CHARACTER IN THE BUFFER 1619 01543 0 10 03047 JST GCHR GET THE NEXT CHARACTER 1620 01544 0 11 00401 CAS C215 C/R ILLEGAL WITHIN A STRING 1621 01545 100000 SKP OK 1622 01546 0 01 02005 JMP IL08 ERROR...UNCLOSED TEXT STRING 1623 01547 0 11 00407 CAS C242 TEST FOR END OF STRING 1624 01550 0 01 01542 JMP IL05 NO...CONT1NUE PACKING 1625 01551 0 01 01534 JMP IL22 YES...REVERT TO NORMAL MODE 1626 01552 0 01 01542 JMP IL05 NO....CONTINUE PACKING 1627 * 1628 * HERE TO CONVERT CONSTANTS 1629 * 1630 01553 0 02 00075 IL06 LDA LCHR IT LAST CHARACTER WAS ALPHABETIC, 1631 01554 0 10 03155 JST ALFA THEN THE CURRENT DIGIT 1632 01555 0 01 01560 JMP *+3 IS PART OF A VARIABLE NAME 1633 01556 0 02 00074 LDA CHAR GO STORE PART OF A NAME 1634 01557 0 01 01534 JMP IL22 X 1635 * 1636 01560 0 10 03065 JST UCHR BACK UP OVER FIRST CHAR OF NUMBER 1637 01561 140040 CRA CLEAR DECIMAL POINT DETECTED FLAG 1638 01562 0 04 00056 STA ILT1 X 1639 01563 0 04 00057 STA ILT2 CLEAR DECIMAL POINT POSITIQN COUNTER 1640 01564 0 04 00041 STA CVAL CLEAR NUMERIC ACCUMULATOR 1641 01565 0 04 00042 STA CVAL+1 X 1642 01566 0 10 03125 IL10 JST GNBC GET NEXT NON-BLANK CHARACTER 1643 01567 0 10 03164 JST NUMC TEST FOR NUMERIC 1644 01570 0 01 01607 JMP IL11 NO....GO CHECK FOR SPECIAL CHARACTER 1645 01571 0 07 00420 SUB C260 CONVERT DIGIT TO BINARY 1646 01572 0 10 00000 JST FINT FLOAT IT 1647 01573 0 10 00000 JST H$22 SAVE NEW DIGIT 1648 01574 0 000043 DAC LVAL X 1649 01575 0 10 03203 JST LCVL GET PREVIOUS ACCUMULATION 1650 01576 0 10 00000 JST M$22 MULTIPLY BY POSITIONAL BIAS 1651 01577 0 000446 DAC F10 (BASE 10) 1652 01600 0 10 00000 JST A$22 ADD IN NEW DIGIT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 48

1653 01601 0 000043 DAC LVAL X 1654 01602 0 10 03207 JST SCVL SAVE THE NEW RESULT 1655 01603 0 02 00056 LDA ILT1 UPDATE DECIMAL POINT LOCATION COUNTER 1656 01604 0 06 00057 ADD ILT2 X 1657 01605 0 04 00057 STA ILT2 1658 01606 0 01 01566 JMP IL10 GO PROCESS NEXT CHARACTER 1659 * 1660 01607 0 11 00416 IL11 CAS C256 TEST FOR DECIMAL POINT 1661 01610 100000 SKP NO 1662 01611 0 01 01646 JMP IL12 YES...GO RECORD ITS LOCATION 1663 01612 0 05 00430 ERA C305 TEST FOR 'E' (START OF EXPONENT) 1664 01613 100040 SZE X 1665 01614 0 01 01661 JMP IL13 NO...GO CLOSE UP 1666 * 1667 * HERE TO PROCESS EXPONENT 1668 * 1669 01615 0 04 00060 STA ILT3 CLEAR EXPONENT SIGN FLAG 1670 01616 0 13 00056 IL15 IMA ILT1 CLEAR EXPONENT VALUE, GET DECIMAL POINT FLAG 1671 01617 101040 SNZ IF NO DEC PNT, THEN EXPONENT NOT ALLOWED 1672 01620 0 01 01661 JMP IL13 THIS 'E' MUST BE PART OF SOMETHING ELSE 1673 01621 0 10 03125 IL31 JST GNBC SEE IF EXPLICIT EXPONENT SIGN 1674 01622 0 11 00413 CAS C253 A '+' ? 1675 01623 100000 SKP NO 1676 01624 0 01 01631 JMP IL39 YES ... IGNORE IT 1677 01625 0 11 00415 CAS C255 A '-' ? 1678 01626 100000 SKP NO 1679 01627 0 01 01643 JMP IL14 YES ... SET FLAG FOR LATER USE 1680 01630 0 10 03065 JST UCHR NO SIGN ... CHAR IS PART OF SOMETHING ELSE 1681 01631 0 10 03125 IL39 JST GNBC GET CHARACTER 1682 01632 0 10 03164 JST NUMC IS IT NUMERIC DIGIT ^ 1683 01633 0 01 01654 JMP IL16 NO....WE'VE HIT THE END OF THE EXPONENT 1684 01634 0 07 00420 SUB C260 YES...CONVERT TO INTEGER 1685 01635 0 13 00056 IMA ILT1 SWAP WITH PREVIOUS ACCUMULATION 1686 01636 0 10 00000 JST M$11 UPDATE PREVIOUS SUMMATION 1687 01637 0 000374 DAC C12 X 1688 01640 0 06 00056 ADD ILT1 INSERT NEW DIGIT 1689 01641 0 04 00056 STA ILT1 SAVE NEW ACCUMULATION 1690 01642 0 01 01631 JMP IL39 CONTINUE SCAN 1691 * 1692 01643 0 02 00462 IL14 LDA M1 SET NEGITIVE EXPONENT FLAG 1693 01644 0 04 00060 STA ILT3 X 1694 01645 0 01 01631 JMP IL39 NOW GET EXPONENT VALUE 1695 * 1696 01646 0 02 00462 IL12 LDA M1 SET DECIMAL POINT DETECTED FLAG 1697 01647 0 13 00056 IMA ILT1 X 1698 01650 101040 SNZ WAS IT ALREADY SET ^ 1699 01651 0 01 01566 JMP IL10 NO....OK 1700 01652 0 10 05243 JST ERR YES4...REPORT ERROR 1701 01653 142320 BCI 1,DP TOO MANY DECIMAL POINTS 1702 *
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 49

1703 * HERE T0 CLOSE OUT EXPONENT PROCESSING 1704 * 1705 01654 0 02 00056 IL16 LDA ILT1 GET EXPONENT VALUE 1706 01655 0 12 00060 IRS ILT3 TEST FOR NEGITIVE EXPONENT 1707 01656 100000 SKP NO 1708 01657 140407 TCA YES...NEGATE THE EXPONENT 1709 01660 100000 SKP A GO FINISH UP 1710 * 1711 * HERE TO CLOSE OUT CONSTANT CONVERSION 1712 * 1713 01661 140040 IL13 CRA ZERO EXPONENT BY DEFAULT 1714 01662 0 06 00057 ADD ILT2 PUT IN DECIMAL POINT DISPLACEMENT 1715 01663 0 11 00467 CAS M21 CAN ERRONEOUS UNDERFLOW RESULT ? 1716 01664 0 01 01675 JMP IL24 NO 1717 01665 0 01 01675 JMP IL24 NO 1718 01666 0 04 00056 STA ILT1 YES ... DO THE REDUCTION IN TWO STEPS 1719 01667 0 10 03203 JST LCVL CVAL = CVAL*10**(-17) 1720 01670 0 10 00000 JST M$22 X 1721 01671 0 000450 DAC F10R X 1722 01672 0 10 03207 JST SCVL X 1723 01673 0 02 00056 LDA ILT1 ADJUST EXPONENT TO COVER ADJUSTMENT 1724 01674 0 07 00467 SUB M21 X 1725 01675 0 10 00000 IL24 JST FINT FLOAT FINAL EXPONENT 1726 01676 0 10 00000 JST H$22 SAVE THE TRUE EXPONENT 1727 01677 0 000043 DAC LVAL X 1728 01700 0 10 00000 JST L$22 RAISE 10 TO THE PROPER POWER 1729 01701 0 000446 DAC F10 X 1730 01702 0 10 00000 JST E$22 X 1731 01703 0 000043 DAC LVAL X 1732 01704 0 10 00000 JST M$22 GET TRUE VALUE OF THE CONSTANT 1733 01705 0 000041 DAC CVAL X 1734 01706 0 10 00000 JST TINT IS THE NUMBER AN INTEGER ? 1735 01707 0 01 01727 JMP IL17 YES...GO STORE IT 1736 * 1737 01710 0 04 00041 STA CVAL NO...STORE REAL NUMBERS 1738 01711 0 02 00456 LDA RELF PLACE REAL CONSTANT FLAG IN BUFFER 1739 01712 0 10 03133 JST SCHR 1740 01713 0 02 00041 LDA CVAL GET FIRST WORD OF CONSTANT 1741 01714 141340 ICA POSITION FIRST BYTE 1742 01715 0 10 03133 JST SCHR STORE IT 1743 01716 141340 ICA POSITION 2ND BYTE 1744 01717 0 10 03133 IL18 JST SCHR STORE IT 1745 01720 000201 IAB GET NEXT WORD OF VALUE 1746 01721 141340 ICA POSITION FIRST BYTE 1747 01722 0 10 03133 JST SCHR STORE IT 1748 01723 141340 ICA POSITON SECOND BYTE 1749 01724 0 10 03133 JST SCHR STORE IT 1750 01725 0 10 03065 JST UCHR BACK UP OVER UNPROCESSED CHARACTERS 1751 01726 0 01 01517 JMP IL32 GO CONTINUE SCAN 1752 *
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 50

1753 01727 000201 IL17 IAB SAVE INTEGER VALUE IN B 1754 01730 0 02 00455 LDA INTF PUT INTEGER CONSTANT FLAG IN TEXT 1755 01731 0 01 01717 JMP IL18 GO PUT VALUE IN TEXT 1756 * 1757 * 1758 * HERE TO CHECK FOR RESERVED IDENTIFIER 1759 * 1760 01732 0 10 03065 IL07 JST UCHR BACK UR OVER LEADING CHARACTER 1761 01733 0 02 00461 LDA LSBP SET PRINTER TO START OF 1765 01734 0 04 00060 STA ILT3 RESERVED IDENTIFIER LIST 1766 01735 0 02 00037 LDA SBP SAVE POINTER TO CURRENT ROSITION IN 1767 01736 0 04 00056 STA ILT1 THE SOURCE STREAM 1768 01737 0 35 00471 LDX M53 SET COUNTER TO - NO. OF ENTRIES IN LIST 1769 01740 0 02 00037 IL20 LDA SBP SWAP SOURCE POINTER WITH RESERVED 1770 01741 0 13 00060 IMA ILT3 NAME LIST POINTER 1771 01742 0 04 00037 STA SBP X 1772 01743 0 10 03047 JST GCHR GET NEXT CHAR FROM RESERVED NAME LIST 1773 01744 0 13 00037 IMA SBP SWAP BACK THE POINTERS LEAVING 1774 01745 0 13 00060 IMA ILT3 THE CHAR IN A 1775 01746 0 13 00037 IMA SBP X 1776 01747 101040 SNZ HAS A NAME BEEN RECOGNIZED ^ 1777 01750 0 01 01772 JMP IL21 YES!!!! 1778 01751 0 04 00057 STA ILT2 SAVE TARGET CHAR WHILE GETTING SOURCE CHAR 1779 01752 0 10 03125 JST GNBC GET THE NEXT SOURCE CHAR (WE IGNORE SPACES) 1780 01753 0 05 00057 ERA ILT2 COMPARE WITH TARGET 1781 01754 101040 SNZ DO THEY MATCH ^ 1782 01755 0 01 01740 JMP IL20 YES...CONTINUE CHECK 1783 * 1784 * RUNOUT NON-MATCHING LIST ENTRY 1785 * 1786 01756 0 02 00060 LDA ILT3 SET BYTE POINTER TO NEXT 1787 01757 0 04 00037 STA SBP BYTE IN NON-MATCHING NAME 1788 01760 0 10 03047 JST GCHR GET NEXT CHARACTER OF IT 1789 01761 100040 SZE END OF THE NAME ^ 1790 01762 0 01 01760 JMP *-2 NO...KEEP TRYING 1791 01763 0 02 00056 LDA ILT1 RESTORE POINTER TO START OF NAME 1792 01764 0 13 00037 IMA SBP IN SOURCE STREAM 1793 01765 0 04 00060 STA ILT3 SAVE POINTER TO NEXT NAME IN TARGET LIST 1794 01766 0 12 00000 IRS 0 BUMP COUNT OF IDENTIFIERS SKIPPED 1795 01767 0 01 01740 JMP IL20 STILL MORE TO CHECK 1796 01770 0 10 03047 JST GCHR NOT A RESERVED NAME...STORE 1797 01771 0 01 01534 JMP IL22 THE CHARACTER LITERALLY 1798 * 1799 * HERE WHEN RESERVED NAME IS RECOGNIZED 1800 * 1801 01772 0 02 00000 IL21 LDA 0 GET LIST POSITION OF 1802 01773 0 06 00441 ADD C54 THE IDENTIFIER 1803 01774 0 11 00375 CAS REMF IS IT START OF A REMARK ^ 1804 01775 0 01 01534 JMP IL22 A NO...GO 1805 01776 100000 SKP YES...NO COMPRESSION UNTIL NEXT ; OR C/R
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 51

1806 01777 0 01 01534 JMP IL22 NO....GO STORE THE IDENTIFIER CODES 1807 * 1808 * HERE TO RUN THROUGH A REMARK STATEMENT 1809 * 1810 02000 0 10 03133 JST SCHR STORE CHARACTER OF THE REMARK 1811 02001 0 10 03047 JST GCHR GET THE NEXT CHARACTER 1812 02002 0 10 03173 JST DLCK END OF REMARK ^ 1813 02003 0 01 02000 JMP *-3 NO...CONTINUE SCAN 1814 02004 0 01 01534 JMP IL22 YES...REVERT TO NORMAL COMPRESSION 1815 * 1816 02005 0 10 05243 IL08 JST ERR UNCLOSED TEXT STRING 1817 02006 152330 BCI 1,TX X 1818 * 1819 * 1820 * 1821 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 52

1822 * RESERVED IDENTIFIER LIST 1823 * 1824 * 1825 * THE FOLLOWING LIST CONTAINS ALL RESERVED 1826 * IDENTIFIERS PERM1TTED IN BASIC-16. WHEN THESE 1827 * IDENTIFIERS ARE DETECTED IN THE SOURCE STREAM, 1828 * THEY ARE REPLACED BY A SINGLE BYTE THAT CONTAINS 1829 * THE POSITION IN THE TABLE OF THE PARTICULAR IDENTIFIER. 1830 * THE FOLLOWING TABLE GIVES THE SEQUENCE OF THE IDENTIFIERS 1831 * IN THE LIST: 1832 * 1833 * 01. LET 12. RETURN 23. SIN 34. FN 1834 * 02. READ 13. CALL 24. COS 35. TAB( 1835 * 03. INPUT 14. REM 25. TAN 36. JOB 1836 * 04. RESTORE 15. STOP 26. ATN 37. CLEAR 1837 * 05. PRINT 16. END 27. EXP 38. RUN 1838 * 06. GOTO 17. DATA 28. ABS 39. LIST 1839 * 07. IF 18. DIM 29. LOG 40. CONTINUE 1840 * 08. ON 19. DEF 30. SQR 41. QUIT 1841 * 09. FOR 20. TO 31. INT 42. LOAD 1842 * 10. NEXT 21. STEP 32. RND 43. PUNCH 1843 * 11. GOSUB 22. THEN 33. SGN 1844 * 1845 * 1846 02007 146305 IDNT HEX CCC5 LE 1847 02010 152000 HEX D400 T^ 1848 02011 151305 HEX D2C5 RE 1849 02012 140704 HEX C1C4 AD 1850 02013 000311 HEX 00C9 ^I 1851 02014 147320 HEX CED0 NP 1852 02015 152724 HEX D5D4 UT 1853 02016 000322 HEX 00D2 ^R 1854 02017 142723 HEX C5D3 ES 1855 02020 152317 HEX D4CF TO 1856 02021 151305 HEX D2C5 RE 1857 02022 000320 HEX 00D0 ^P 1858 02023 151311 HEX D2C9 RI 1859 02024 147324 HEX CED4 NT 1860 02025 000307 HEX 00C7 ^G 1861 02026 147724 HEX CFD4 OT 1862 02027 147400 HEX CF00 O^ 1863 02030 144706 HEX C9C6 IF 1864 02031 000317 HEX 00CF ^O 1865 02032 147000 HEX CE00 N^ 1866 02033 143317 HEX C6CF FO 1867 02034 151000 HEX D200 R^ 1868 02035 147305 HEX CEC5 NE 1869 02036 154324 HEX D8D4 XT 1870 02037 000307 HEX 00C7 ^G 1871 02040 147723 HEX CFD3 OS
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 53

1872 02041 152702 HEX D5C2 UB 1873 02042 000322 HEX 00D2 ^R 1874 02043 142724 HEX C5D4 ET 1875 02044 152722 HEX D5D2 UR 1876 02045 147000 HEX CE00 N^ 1877 02046 141701 HEX C3C1 CA 1878 02047 146314 HEX CCCC LL 1879 02050 000322 HEX 00D2 ^R 1880 02051 142715 HEX C5CD EM 1881 02052 000323 HEX 00D3 ^S 1882 02053 152317 HEX D4CF TO 1883 02054 150000 HEX D000 P^ 1884 02055 142716 HEX C5CE EN 1885 02056 142000 HEX C400 D^ 1886 02057 142301 HEX C4C1 DA 1887 02060 152301 HEX D4C1 TA 1888 02061 000304 HEX 00C4 ^D 1889 02062 144715 HEX C9CD IM 1890 02063 000304 HEX 00C4 ^D 1891 02064 142706 HEX C5C6 EF 1892 02065 000324 HEX 00D4 ^T 1893 02066 147400 HEX CF00 O^ 1894 02067 151724 HEX D3D4 ST 1895 02070 142720 HEX C5D0 EP 1896 02071 000324 HEX 00D4 ^T 1897 02072 144305 HEX C8C5 HE 1898 02073 147000 HEX CE00 N^ 1899 02074 151711 HEX D3C9 SI 1900 02075 147000 HEX CE00 N^ 1901 02076 141717 HEX C3CF CO 1902 02077 151400 HEX D300 S^ 1903 02100 152301 HEX D4C1 TA 1904 02101 147000 HEX CE00 N^ 1905 02102 140724 HEX C1D4 AT 1906 02103 147000 HEX CE00 N^ 1907 02104 142730 HEX C5D8 EX 1908 02105 150000 HEX D000 P^ 1909 02106 140702 HEX C1C2 AB 1910 02107 151400 HEX D300 S^ 1911 02110 146317 HEX CCCF LO 1912 02111 143400 HEX C700 G^ 1913 02112 151721 HEX D3D1 SQ 1914 02113 151000 HEX D200 R^ 1915 02114 144716 HEX C9CE IN 1916 02115 152000 HEX D400 T^ 1917 02116 151316 HEX D2CE RN 1918 02117 142000 HEX C400 D^ 1919 02120 151707 HEX D3C7 SG 1920 02121 147000 HEX CE00 N^ 1921 02122 143316 HEX C6CE FN
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 54

1922 02123 000324 HEX 00D4 ^T 1923 02124 140702 HEX C1C2 AB 1924 02125 124000 HEX A800 (^ 1925 02126 145317 HEX CACF JO 1926 02127 141000 HEX C200 B^ 1927 02130 141714 HEX C3CC CL 1928 02131 142701 HEX C5C1 EA 1929 02132 151000 HEX D200 R^ 1930 02133 151325 HEX D2D5 RU 1931 02134 147000 HEX CE00 N^ 1932 02135 146311 HEX CCC9 LI 1933 02136 151724 HEX D3D4 ST 1934 02137 000303 HEX 00C3 CC 1935 02140 147716 HEX CFCE ON 1936 02141 152311 HEX D4C9 TI 1937 02142 147325 HEX CED5 NU 1938 02143 142400 HEX C500 E^ 1939 02144 150725 HEX D1D5 QU 1940 02145 144724 HEX C9D4 IT 1941 02146 000314 HEX 00CC ^L 1942 02147 147701 HEX CFC1 OA 1943 02150 142000 HEX C400 D^ 1944 02151 150325 HEX D0D5 PU 1945 02152 147303 HEX CEC3 NC 1946 02153 144000 HEX C800 H^ 1947 * 1948 * 1949 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 55

1950 * FLOATING POINT OUTPUT EDITOR 1951 * 1952 * 1953 * CALLING SEQUENCE 1954 * 1955 * LDA CHAR SURPRESSION CHARACTER...SEE BELOW 1956 * JST PCVL 1957 * ......RETURN 1958 * 1959 * THE FLOATING POINT VALUE CONTAINED IN THE ACCUMULATOR 1960 * CVAL IS PRINTED IN THE FOLLOWING FORMAT: 1961 * 1962 * 1) IF CVAL = 0 OR .1<=ABS(CVAL)<10000 1963 * 1964 * SXXXX.XXXXXX 1965 * 1966 * 2) IF NOT IN ABOVE RANGE 1967 * 1968 * S.XXXXXXESYY 1969 * 1970 * LEADING AND TRAILING ZEROS ARE REPLACED WITH SPACES. THE 1971 * SIGN 1S FLOATED RIGHT TO THE LEFT OF THE FIRST SIGNIFICANT 1972 * DIGIT OR THE DECIMAL POINT, WHICHEVER OCCURS FIRST. IF IN 1973 * FORMAT 1 AND THE FRACTIONAL PART IS ZERO, THE DECIMAL 1974 * POINT WILL BE REPLACED WITH 1975 * A SPACE. IF IN FORMAT 2, THE EXPONENT FIELD WILL BE 1976 * FLOATED LEFT TO THE RIGHT OF THE LAST NONZERO DIGIT. THE 1977 * SIGN WILL BE PRINTED AS ' ' IS CVAL > 0, OR '-' IF CVAL < 0. 1978 * WHEN PRINTING, EACH CHARACTER TO BE OUTPUT WILL BE COMPARED 1979 * WITH THE INITIAL A REGISTER CONTENTS. IF THEY MATCH, THE 1980 * CHARACTER WILL NOT BE PRINTED. THIS WILL NORMALLY BE USED 1981 * TO SURPRESS SPACES FOR A PACKED LISTING. 1982 * 1983 * 1984 * 1985 02154 0 000000 PCVL DAC ** 1986 02155 0 04 00341 STA INHC SAVE THE SURPRESSION CHARACTER 1987 02156 0 35 00467 LDX M21 FILL THE WORK 1988 02157 0 02 00420 LDA C260 AREA WITH ASCII 1989 02160 1 04 00252 STA WORK+'21,1 ZEROS ('261) 1990 02161 0 12 00000 IRS 0 X 1991 02162 0 01 02160 JMP *-2 X 1992 02163 0 04 00340 STA ECTR INITIALIZE CNTR FOR EXP CONVERSION 1993 02164 140040 CRA CLEAR EXPONENT STORAGE IN 1994 02165 0 04 00337 STA EXP CASE CVAL=0 1995 02166 0 10 03203 JST LCVL GET VALUE TO BE PRINTED 1996 02167 0 04 00336 STA SIGN SAVE ORIGINAL SIGN 1997 02170 100400 SPL GET ABSOULUTE VALUE OF IT 1998 02171 0 10 00000 JST N$22 X 1999 02172 101040 SNZ IF VALUE IS ZERO,
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 56

2000 02173 0 01 02253 JMP ED01 DO NOT GO THROUGH BREAKDOWN LOOP 2001 02174 0 10 03207 JST SCVL SAVE THE VALUE 2002 02175 0 02 00472 LDA M6 SET UP LOOP TO EXTRACT 2003 02176 0 04 00076 STA TMP1 SIX DIGITS 2004 02177 0 02 00513 LDA WKD7 POINTER TO 7TH WORD OF WORK AREA 2005 02200 0 04 00077 STA TMP2 SIX ASCII DIGITS TO WORK(6-11. 2006 02201 0 10 00000 JST LOGF GET LOG BASE 10 OF VALUE 2007 02202 0 000041 DAC CVAL FOR EXPONENT 2008 02203 0 10 00000 JST D$22 X 2009 02204 0 000457 DAC LE10 =LN(10) 2010 02205 0 10 00000 JST IFLT INTERGERIZE BASE 10 EXPONENT 2011 02206 000000 OCT 0 OVERFLOW IS IMPOSSIBLE 2012 02207 141206 AOA ADJUST IT S0 THINGS COME OUT RIGHT 2013 02210 0 04 00337 STA EXP AND SAVE IT. 2014 02211 0 07 00371 SUB C1 RESTORE TO UNADJUSTED VALUE 2015 02212 0 10 00000 JST FINT FLOAT IT 2016 02213 0 10 00000 JST H$22 USE IT TO REDUCE CVAL 2017 02214 0 000043 DAC LVAL TO RANGE OF 1 TO 10 BY 2018 02215 0 10 00000 JST L$22 CVAL=CVAL/10.**A, WHERE 2019 02216 0 000446 DAC F10 A IS INT(ALOG10(CVAL)) 2020 02217 0 10 00000 JST E$22 X 2021 02220 0 000043 DAC LVAL X 2022 02221 0 10 00000 JST H$22 X 2023 02222 0 000043 DAC LVAL X 2024 02223 0 10 03203 JST LCVL X 2025 02224 0 10 00000 JST D$22 X 2026 02225 0 000043 DAC LVAL X 2027 02226 0 10 00000 JST A$22 ADD IN .000005 TO ROUND UP 2028 02227 0 000474 DAC ROND X 2029 02230 0 10 03207 ED02 JST SCVL SAVE WORKING VALUE 2030 02231 0 10 00000 JST IFLT EXTRACT INTEGER PART 2031 02232 000000 OCT 0 OVERFLOW IS IMPOSSIBLE 2032 02233 0 04 00100 STA TMP3 SAVE FOR LATER REFERENCE 2033 02234 0 11 00373 CAS C11 SEE IF WE ROUNDED FROM 9.999... TO 10 2034 02235 0 01 02420 JMP ED10 YES...SPECIAL ACTION REQUIRED 2035 02236 101000 NOP NO PROBLEM 2036 02237 0 06 00420 ED11 ADD C260 CONVERT TO ASCII 2037 02240 -0 04 00077 STA* TMP2 PLACE DIGIT IN WORK AREA 2038 02241 0 02 00100 LDA TMP3 RETRIEVE CURRENT DIGIT 2039 02242 0 10 00000 JST FINT FLOAT IT 2040 02243 0 10 00000 JST S$22 EXTRACT IT FROM CVAL 2041 02244 0 000041 DAC CVAL X 2042 02245 0 10 00000 JST N$22 X 2043 02246 0 10 00000 JST M$22 POSITION NEXT DIGIT 2044 02247 0 000446 DAC F10 X 2045 02250 0 12 00077 IRS TMP2 BUMP POINTER TO WORK AREA 2046 02251 0 12 00076 IRS TMP1 BUMP ITERATION COUNTER 2047 02252 0 01 02230 JMP ED02 CONTINUE EXTRACTION 2048 * 2049 02253 0 10 02425 ED01 JST FRNG SEE IF IT WILL FIT IN F FORMAT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 57

2050 02254 0 01 02266 JMP ED03 NO 2051 02255 140407 TCA GET NO. OF PLACES TO SHIFT THE DIGIT FIELD 2052 02256 0 06 00513 ADD WKD7 THIS GIVES DESTINATION ADDRESS 2053 02257 0 04 00076 STA TMP1 SAVE IT 2054 02260 0 35 00465 LDX M12 MOVE 10 DIGITS LEFT EXP POSITIONS 2055 02261 1 02 00251 LDA WORK+'20,1 SHIFT A DIGIT 2056 02262 -0 04 00076 STA* TMP1 X 2057 02263 0 12 00076 IRS TMP1 BUMP THE DESTINATION POINTER 2058 02264 0 12 00000 IRS 0 BUMP THE SOURCE POINTER 2059 02265 0 01 02261 JMP *-4 GO MOVE NEXT DIGIT 2060 02266 0 35 00470 ED03 LDX M5 MAKE ROOM FOR THE DECIMAL POINT 2061 02267 1 02 00237 LDA WORK+6,1 BY MOVING WORK(1-5) TO 2062 02270 1 04 00236 STA WORK+5,1 WORK(0-4) 2063 02271 0 12 00000 IRS 0 BUMP THE COUNTER 2064 02272 0 01 02267 JMP *-3 MORE TO MOVE 2065 02273 0 02 00416 LDA C256 INSERT THE DECIMAL POINT 2066 02274 0 04 00236 STA WORK+5 X 2067 02275 0 35 00470 LDX M5 ZERO SURPRESS FROM LEFT 2068 02276 1 02 00236 ED05 LDA WORK+5,1 PICK UP DIGIT FROM ARRAY 2069 02277 0 05 00420 ERA C260 TEST FOR '0' 2070 02300 100040 SZE X 2071 02301 0 01 02306 JMP ED04 FOUND 1ST NON '0' CHAR 2072 02302 0 02 00405 LDA C240 REPLACE LEADING ZERO 2073 02303 1 04 00236 STA WORK+5,1 WITH A SPACE 2074 02304 0 12 00000 IRS 0 SEE IF WE'RE DONE 2075 02305 0 01 02276 JMP ED05 NO...CONTINUE SCAN 2076 02306 0 02 00336 ED04 LDA SIGN INSET SIGN IN THE ARRAY 2077 02307 0 10 02435 JST SGN X 2078 02310 1 04 00235 STA WORK+4,1 X 2079 02311 0 35 00377 LDX C20 START TRAILING ZERO SURPRESSION 2080 02312 1 02 00231 ED07 LDA WORK,1 PICK UP DIGIT FROM HIGH END OF ARRAY 2081 02313 0 05 00420 ERA C260 TEST FOR '0' 2082 02314 100040 SZE X 2083 02315 0 01 02324 JMP ED06 FOUND LAST NONZERO CHAR 2084 02316 0 02 00405 LDA C240 REPLACE TRAILING ZERO WITH A 2085 02317 1 04 00231 STA WORK,1 SPACE 2086 02320 0 02 00000 LDA 0 STEP BACK ONE CHARACTER 2087 02321 0 07 00371 SUB C1 X 2088 02322 0 04 00000 STA 0 X 2089 02323 0 01 02312 JMP ED07 GO LOOK AT NEXT CHARACTER 2090 02324 1 02 00231 ED06 LDA WORK,1 SEE IF EVERYTHING PAST 2091 02325 0 05 00416 ERA C256 THE DECIMAL POINT HAS 2092 02326 100040 SZE BEEN SURPRESSED 2093 02327 0 01 02332 JMP *+3 NO 2094 02330 0 02 00405 LDA C240 YES...SURRRESS THE DECIMAL 2095 02331 1 04 00231 STA WORK,1 POINT ALSO 2096 02332 1 02 00230 LDA WORK-1,1 TEST FOR ALL BLANK BUFFER (VALUE ZERO) 2097 02333 0 11 00405 CAS C240 X 2098 02334 100000 SKP NO 2099 02335 0 02 00420 LDA C260 YES...LEAVE ONE ZERO
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 58

2100 02336 1 04 00230 STA WORK-1,1 REPLACE THE CHARACTER 2101 02337 0 10 02425 JST FRNG IS 'E' PROCESSING REQUIRED ^ 2102 02340 100000 SKP YES 2103 02341 0 01 02367 JMP ED08 NO...SKIP THIS 2104 02342 0 10 02435 JST SGN GET SIGN OF EXPONENT 2105 02343 1 04 00233 STA WORK+2,1 X 2106 02344 0 02 00430 LDA C305 PUT IN 'E' 2107 02345 1 04 00232 STA WORK+1,1 X 2108 02346 0 02 00337 LDA EXP CONVERT EXPONENT TO ASCII 2109 02347 100400 SPL MAKE SURE IT'S PLUS FIRST 2110 02350 140407 TCA X 2111 02351 0 07 00374 SUB C12 DIVIDE BY 10 2112 02352 100400 SPL X 2113 02353 0 01 02356 JMP *+3 X 2114 02354 0 12 00340 IRS ECTR X 2115 02355 0 01 02351 JMP *-4 X 2116 02356 0 06 00422 ADD C272 REMAINDER IS 2ND DIGIT 2117 02357 1 04 00235 STA WORK+4,1 OF EXPONENT 2118 02360 0 02 00340 LDA ECTR PUT IN FIRST DIGIT 2119 02361 1 04 00234 STA WORK+3,1 X 2120 02362 0 02 00000 LDA 0 MAKE INDEX POINT TO 2121 02363 0 06 00435 ADD C4 END OF EXPONENT 2122 02364 0 04 00000 STA 0 X 2123 02365 0 02 00435 LDA C4 START PRINTING AT 5TH CHAR OF WORK 2124 02366 100000 SKP BUFFER 2125 02367 140040 ED08 CRA 1ST CHAR OF WORK FOR F FORMAT 2126 02370 0 06 00512 ADD WRKD GET POINTER TO 1ST PRINTING CHAR 2127 02371 0 12 00000 IRS 0 X POINTS TO LAST CHAR TO PRINT 2128 02372 0 04 00337 ED09 STA EXP SAVE POINTER TO FIRST CHARACTER 2129 02373 0 02 00000 LDA 0 CALCULATE ADDRESS OF LAST CHARACTER 2130 02374 0 06 00512 ADD WRKD X 2131 02375 0 04 00340 STA ECTR SAVE IT 2132 02376 0 07 00337 SUB EXP CALCULATE NUMBER OF CHARACTERS IN STRING 2133 02377 141206 AOA X 2134 02400 0 06 00045 ADD CPOS CHECK FOR LINE FIT 2135 02401 0 11 00473 CAS MCOL X 2136 02402 0 10 00000 JST LFCR A NO...ADVANCE ASR TO NEXT LINE 2137 02403 101000 NOP IT WILL FIT 2138 02404 -0 02 00337 ED12 LDA* EXP GET NEXT CHARACTER TO BE PRINTED 2139 02405 0 11 00341 CAS INHC SEE IF IT'S SURPRESSED 2140 02406 100000 SKP NO 2141 02407 100000 SKP YES 2142 02410 0 10 00000 JST OTA1 NO...PRINT IT 2143 02411 0 02 00337 LDA EXP ADVANCE THE CHARACTER POINTER 2144 02412 141206 AOA X 2145 02413 0 04 00337 STA EXP SAVE ADDRESS OF NEXT CHARACTER 2146 02414 0 11 00340 CAS ECTR TEST FOR COMPLETION 2147 02415 -0 01 02154 JMP* PCVL YES...EXIT 2148 02416 0 01 02404 JMP ED12 NO....LOOP BACK 2149 02417 0 01 02404 JMP ED12 NO....LOOP BACK
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 59

2150 * 2151 02420 0 02 00421 ED10 LDA C261 INSERT '10' IN WORK ARRAY 2152 02421 -0 04 00077 STA* TMP2 X 2153 02422 0 12 00337 IRS EXP BUMP EXPONENT TO ACCOUNT FOR EXTRA DIGIT 2154 02423 101000 NOP NOP IN CASE EXP GOES TO ZERO 2155 02424 0 01 02253 JMP ED01 EXTRACTION COMPLETE, NOW FORMAT THE RESULT 2156 * 2157 * 2158 02425 0 000000 FRNG DAC ** TEST FOR F FORMAT 2159 02426 0 02 00337 LDA EXP GET EXPONENT 2160 02427 0 11 00462 CAS M1 EXPONENTS IN RANGE 0-4 2161 02430 0 11 00437 CAS C5 ARE PRINTED IN F FORMAT 2162 02431 -0 01 02425 JMP* FRNG E FORMAT 2163 02432 -0 01 02425 JMP* FRNG E FORMAT 2164 02433 0 12 02425 IRS FRNG F FORMAT 2165 02434 -0 01 02425 JMP* FRNG X 2166 * 2167 * 2168 02435 0 000000 SGN DAC ** GET SIGN CHARACTER 2169 02436 140320 CSA SET C IF NO. IS MINUS 2170 02437 0 02 00405 LDA C240 A SPACE FOR PLUS 2171 02440 100001 SRC TEST SIGN 2172 02441 0 02 00415 LDA C255 '-' FOR NEGITIVE 2173 02442 -0 01 02435 JMP* SGN RETURN 2174 * 2175 * 2176 * 2177 * 2178 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 60

2179 * EXPRESSION ANALYZER 2180 * 2181 * 2182 * CALLING SEQUENCE: 2183 * 2184 * LDA PTRG A CONTAINS PRECEDENCE TRIGGER...SEE BELOW 2185 * JST EXPA 2186 * ......RETURN RESULT IN CVAL 2187 * 2188 * THIS ROUTINE WILL EVALUATE THE EXPRESSION IN THE 2189 * SOURCE STREAM UNIIL AN OPERATOR OF THE SAME 2190 * OR LOWER PRECEDENCE LEVEL AS INDICATED BY THE 2191 * INITIAL A REGISTER CONTENTS AS ENCOUNTERED. 2192 * THE FOLLOWING ARE THE DEFINED PRECEDENCE LEVELS: 2193 * 0 - DELIMITERS <EXPRESSION> 2194 * 1 - +,- <MULTIPLY FACTOR> 2195 * 2 - *,/ <INVOLUTION FACTOR> 2196 * 3 - ^ <TERM> 2197 * TO EVALUATE A COMPLETE EXPRESSION, THE INITIAL 2198 * A REGISTER VALUE WOULD BE 0. THE OTHER POSSIBLE 2199 * VALUES ARE USED PRIMARILY IN RECURSIVE CALLS TO 2200 * THIS ROUTINE MADE WITHIN IT. THE RESLUT OF THE 2201 * EXPRESSION IS LEFT IN THE FLOATING POINT ACCUMULTOR, 2202 * CVAL. THE PREVIOUS CONTENTS OF CVAL ARE LEFT 2203 * IN LVAL AND THE A + B REGISTERS ON RETURN. 2204 * 2205 * 2206 * EXPRESSION SYNTAX: 2207 * 2208 * <EXPRESSION>:=<MULTIPLY FACTOR>|<SIGN><EXPRESSION>| 2209 * <EXPRESSION>[+|-]<INVOLUTION FACTOR> 2210 * 2211 * <MULTIPLY FACTOR>:=<INVOLUTION FACTOR>|<MULTIPLY FACTOR> 2212 * [*|/]<INVOLUTION FACTOR> 2213 * 2214 * <INVOLUTION FACTOR>:=<TERM>|<INVOLUTION FACTOR>[^]<TERM> 2215 * 2216 * <TERM>:=<NUMBER>|<VARIABLE>|<FUNCTION TERM>|(<EXPRESSION>) 2217 * 2218 * <FUNCTION TERM>:=<FUNCTION NAME>(<EXPRESSION>) 2219 * 2220 * <FUNCTION NAME>:=SIN|COS|TAN|ATN|EXP|ABS|LOG|SQR|INT|RND| 2221 * SGN|FN<ALPHABETIC CHARACTER> 2222 * 2223 * <VARIABLE>:=<SIMPLE VARIABLE>|<SUBSCRIPTED VARIABLE> 2224 * 2225 * 2226 * 2227 * 2228 02443 0 000000 EXPA DAC **
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 61

2229 02444 0 13 00055 IMA LOP SET NEW OPERATOR-PRECEDENCE TRIGGER 2230 02445 0 10 03022 JST PUSH PUT OLD VALUE ON STACK 2231 02446 0 02 02443 LDA EXPA SAVE RETURN ADDRESS IN CASE 2232 02447 0 10 03022 JST PUSH WE'RE RE-ENTERED 2233 02450 0 02 00041 LDA CVAL PUT THE VALUE OF THE 2234 02451 0 10 03022 JST PUSH TERM ON 2235 02452 0 02 00042 LDA CVAL+1 THE STACK 2236 02453 0 10 03022 JST PUSH X 2237 02454 0 35 00466 LDX M2 SET TRIGGER FOR UNARY MINUS-PROCESSING 2238 02455 0 10 03047 EX06 JST GCHR LOOK AT NEXT SOURCE CHARACTER 2239 02456 0 11 00413 CAS C253 TEST FOR UNARY PLUS 2240 02457 100000 SKP NO 2241 02460 0 01 02455 JMP EX06 YES ... IGNORE IT 2242 02461 0 11 00415 CAS C255 IS IT '-' ? 2243 02462 100000 SKP NO 2244 02463 0 01 02477 JMP EX01 YES...AT THIS POINT, IT MUST BE UNARY 2245 02464 0 12 00000 IRS 0 HAS A UNARY MINUS BEEN DETECTED ? 2246 02465 0 01 02512 JMP EX04 NO...GO CONTINUE ITEM DISCRIMINATION 2247 02466 0 02 00055 LDA LOP UNARY MINUS ONLY LEGAL WHEN 2248 02467 100040 SZE LOP IS EOUAL TO ZERO 2249 02470 0 10 05243 EX07 JST ERR ERROR...ILLEGAL UNARY MINUS 2250 02471 152715 BCI 1,UM (THIS WILL EXECUTE AS AN ERA) 2251 02472 0 10 00000 JST L$22 FORCE A '-1.0*' INTO SOURCE 2252 02473 0 000452 DAC FM1 X 2253 02474 0 10 03207 JST SCVL X 2254 02475 0 10 03065 JST UCHR PROCESS CURRENT CHARACTER LATER 2255 02476 0 01 02642 JMP EX05 GO WORK ON '*' THAT WE FORCED 2256 * 2257 02477 0 12 00000 EX01 IRS 0 BUMP THE MINUS COUNT 2258 02500 0 01 02455 JMP EX06 OK...THIS IS THE FIRST 2259 02501 0 01 02470 JMP EX07 TWO IN A ROW...ERROR 2260 * 2261 02502 0 10 03077 EX02 JST GCPK FORM THE INTEGER 2262 02503 0 10 00000 JST FINT FLOAT IT 2263 02504 0 01 02546 JMP EX22 GO SAVE VALUE AND WORK ON OPERATOR 2264 * 2265 02505 0 10 03077 EX03 JST GCPK A HIGH WORD OF REAL TO A 2266 02506 000201 IAB SAVE IT IN B 2267 02507 0 10 03077 JST GCPK GET LOW ORDER WORD 2268 02510 000201 IAB PUT IT IN NORMAL FORM 2269 02511 0 01 02546 JMP EX22 GO SAVE VALUE AND WORK ON OPERATOR 2270 * 2271 02512 0 11 00455 EX04 CAS INTF A TEST FOR INTEGER CONSTANT 2272 02513 100000 SKP NO 2273 02514 0 01 02502 JMP EX02 YES...GO FORM IT 2274 02515 0 11 00456 CAS RELF TEST FOR ELOATING POINT CONSTANT 2275 02516 100000 SKP NO 2276 02517 0 01 02505 JMP EX03 YES...GO FORM IT 2277 02520 0 11 00410 CAS C250 TEST FOR PARENTHETICAL TERM 2278 02521 100000 SKP NO
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 62

2279 02522 0 01 02603 JMP EX10 YES...GO EVALUATE IT 2280 02523 0 11 00510 CAS SYSL TEST FOR SYSTEM FUNCTION 2281 02524 0 11 00511 CAS SYSH ( SUCH AS SIN, COS, ECT.) 2282 02525 0 01 02530 JMP *+3 NO 2283 02526 100000 SKP NO 2284 02527 0 01 02610 JMP EX11 YES...GO PROCESS IT 2285 02530 0 11 00507 CAS DEFF TEST FOR CALL TO DEFINED FUNCTION 2286 02531 100000 SKP NO 2287 02532 0 01 02671 JMP EX30 YES...GO EVALUATE IT 2288 02533 0 10 03065 JST UCHR IT MUST BE A VARIABLE 2289 02534 0 10 04632 JST PVN PROCESS THE VARIABLE NAME 2290 02535 0 01 02542 JMP EX13 GO LOCATE SUBSCRIPTED VARIABLE 2291 02536 0 10 04721 JST LSV LOOK UP NAME IN SIMPLE VARIABLE TABLE 2292 02537 0 10 05243 EX15 JST ERR ERROR...USEd BEFORE ASSIGNED 2293 02540 152726 BCI 1,UV (THIS EXECUTES AS AN ERA) 2294 02541 0 01 02544 JMP EX14 HAVE ADDRESS OF VALUE IN X...GO GET IT 2295 02542 0 10 05135 EX13 JST LDV PROCESS SUBSCRIPT AND GET ADDR OF VALUE 2296 02543 0 01 02537 JMP EX15 ERROR...USED BEFORE ASSIGNED 2297 02544 0 10 00000 EX14 JST L$22 GET VALUE OF VARIABLE 2298 02545 -0 000000 DAC* 0 X CONTAINS THE ADDRESS 2299 02546 0 10 03207 EX22 JST SCVL LEAVE VALUE IN CVAL 2300 * 2301 * HERE TO LOOK FOR AN OPERATOR 2302 * 2303 02547 0 10 03047 EX09 JST GCHR GET NEXT CHAR (IT MUST BE AN OPERATOR) 2304 02550 0 11 00413 CAS C253 TEST FOR '+' 2305 02551 100000 SKP NO 2306 02552 0 01 02625 JMP EX16 YES...GO PROCESS ADDITION OP 2307 02553 0 11 00415 CAS C255 TEST FOR '*' 2308 02554 100000 SKP NO 2309 02555 0 01 02634 JMP EX17 YES...GO PROCESS SUBTRACTION OP 2310 02556 0 11 00412 CAS C252 TEST FOR '*' 2311 02557 100000 SKP NO 2312 02560 0 01 02642 JMP EX05 YES...GO PROCESS MULTIPLICATION OP 2313 02561 0 11 00417 CAS C257 TEST FOR '/' 2314 02562 100000 SKP NO 2315 02563 0 01 02650 JMP EX19 YES...GO PROCESS DIVISION OP 2316 02564 0 11 00433 CAS C336 TEST FOR '^' 2317 02565 000000 OCT 0 NEVER CAN EXECUTE THIS WORD 2318 02566 0 01 02656 JMP EX20 YES...GO PROCESS EXPONENTIATION OP 2319 * 2320 * BY PROCESS OF ELIMINATION, CURRENT CHARACTER 2321 * MUST BE A TERMINAL DELIMITER (OR USER SYNTAX ERROR, IN 2322 * WHICH CASE THE LAST ZERO LEVEL CALLER WILL DETECT IT). 2323 * 2324 02567 0 10 03065 JST UCHR BACK UP 1 CHAR FOR EASE ELSEWHERE 2325 * 2326 * EXIT PROCESSING 2327 * 2328 02570 0 10 03031 EX21 JST POP LEAVE VALUE THAT WAS PUT ON STACK
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 63

2329 02571 0 04 00044 STA LVAL+1 ON ENTRY IN LVAL 2330 02572 0 10 03031 JST POP X 2331 02573 0 04 00043 STA LVAL X 2332 02574 0 10 03031 JST POP GET RETURN ADDRESS 2333 02575 0 04 02443 STA EXPA X 2334 02576 0 10 03031 JST POP GET PRECEDENCE TRIGGER FOR OPERATOR 2335 02577 0 04 00055 STA LOP PRECEEDING CURRENT ONE 2336 02600 0 10 00000 JST L$22 LEAVE LVAL IN A + B 2337 02601 0 000043 DAC LVAL X 2338 02602 -0 01 02443 JMP* EXPA AND EXIT 2339 * 2340 * EVALUATE PARENTHETICAL TERM 2341 * 2342 02603 140040 EX10 CRA EVALUATE EXPRESSION WITHIN 2343 02604 0 10 02443 JST EXPA THE PARENTHESIS 2344 02605 0 02 00411 LDA C251 MAKE SURE DELIMITER IS ')' 2345 02606 0 10 03104 JST GCCK X 2346 02607 0 01 02547 JMP EX09 NOW WORK ON OPERATOR THAT FOLLOWS 2347 * 2348 * HERE FOR PROCESSING SYSTEM FUNCTION 2349 * 2350 02610 0 10 03022 EX11 JST PUSH CHAR IS FUNCTION IDENTIFIER 2351 02611 0 02 00410 LDA C250 MAKE SURE '(' AFETER FUNCTION NAME 2352 02612 0 10 03104 JST GCCK X 2353 02613 140040 CRA EVALUATE THE ARGUMENT 2354 02614 0 10 02443 JST EXPA X 2355 02615 0 02 00411 LDA C251 MAKE SURE IT ENDS WITH A ')' 2356 02616 0 10 03104 JST GCCK X 2357 02617 0 10 03031 JST POP FETCH THE FUNCTION IDENTIFIER 2358 02620 0 07 00510 SUB SYSL REDUCE IT FOR TABLE ACCESSING 2359 02621 0 04 00000 STA 0 X 2360 02622 -1 10 00530 JST* SFNL,1 EVALAUTE THE FUNCTION 2361 02623 0 000041 DAC CVAL ARGUMENT WAS LEFT IN CVAL 2362 02624 0 01 02546 JMP EX22 GO SAVE CVAL AND CONTINUE 2363 * 2364 * HERE FOR ADDITION OPERATOR 2365 * 2366 02625 0 02 00371 EX16 LDA C1 + IS AT PRECEDENCE LEVEL 1 2367 02626 0 10 02664 JST EXPC TEST FOR PRECEEDING HIGHER OP 2368 02627 0 10 02443 JST EXPA EVALUATE UNTIL = OR < PRTY. OP 2369 02630 0 10 00000 JST A$22 CVAL=LVAL+CVAL 2370 02631 0 000041 DAC CVAL X 2371 02632 0 10 03207 EX24 JST SCVL SAVE THE RESULT 2372 02633 0 01 02547 JMP EX09 CONTINUE 2373 * 2374 * HERE FOR SUBTRACTION OPERATOR 2375 * 2376 02634 0 02 00371 EX17 LDA C1 - IS AT PRECEDENCE LEVEL 1 2377 02635 0 10 02664 JST EXPC TEST FOR PRECEEDING HIGHER OP 2378 02636 0 10 02443 JST EXPA EVALUATE UNTIL = 0R < PRTY. OP
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 64

2379 02637 0 10 00000 JST S$22 CVAL=LVAL-CVAL 2380 02640 0 000041 DAC CVAL X 2381 02641 0 01 02632 JMP EX24 GO SAVE RESULT AND CONTINUE 2382 * 2383 * HERE FOR MULTIPLICATION OPERATOR 2384 * 2385 02642 0 02 00376 EX05 LDA C2 * IS AT PRECEDENCE LEVEL 2 2386 02643 0 10 02664 JST EXPC TEST FOR PRECEEDING HIGHER OP 2387 02644 0 10 02443 JST EXPA EVALUATE UNTIL = OT < PRTY. OP 2388 02645 0 10 00000 JST M$22 CVAL=LVAL*CVAL 2389 02646 0 000041 DAC CVAL X 2390 02647 0 01 02632 JMP EX24 GO SAVE RESULT AND CONTINUE 2391 * 2392 * HERE FOR DIVISION OPERATOR 2393 * 2394 02650 0 02 00376 EX19 LDA C2 / IS AT PRECEDENCE LEVEL 2 2395 02651 0 10 02664 JST EXPC TEST FOR PRECEEDING HIGHER OP 2396 02652 0 10 02443 JST EXPA EVALAUATE UNTIL = OT < PRTY. OP 2397 02653 0 10 00000 JST D$22 CVAL=LVAL/CVAL 2398 02654 0 000041 DAC CVAL X 2399 02655 0 01 02632 JMP EX24 SAVE RESULT AND CONTINUE 2400 * 2401 * HERE FOR EXPONENTIATION OPERATOR 2402 * 2403 02656 0 02 00426 EX20 LDA C3 ^ IS AT PRECEDENCE LEVEL 3 2404 02657 0 10 02664 JST EXPC TEST FOR PRECEEDING ^ 2405 02660 0 10 02443 JST EXPA EVALAUTE UNTIL = OR < PRTY. OP 2406 02661 0 10 00000 JST E$22 CVAL=LVAL**CVAL 2407 02662 0 000041 DAC CVAL X 2408 02663 0 01 02632 JMP EX24 SAVE THE RESULT AND CONTINUE 2409 * 2410 * PRECEDENCE COMPARISON ROUTINE 2411 * 2412 * IF THE PRECEDENCE OF THE PRECEEDING 2413 * OPERATOR IS < THAT OF THE CURRENT OPERATOR, 2414 * RETURN IS MADE FOLLOWING THE CALL. IF NOT 2415 * CONTROL IS TRANSFERED TO THE NORMAL EXPA 2416 * EXIT SEQUENCE. 2417 * 2418 02664 0 000000 EXPC DAC ** 2419 02665 0 11 00055 CAS LOP COMPARE THE PRECEDENCE LEVELS 2420 02666 -0 01 02664 JMP* EXPC CURRENT OP IS GREATER 2421 02667 0 01 02567 JMP EX21-1 LAST OP WAS THE SAME 2422 02670 0 01 02567 JMP EX21-1 LAST OP WAS HIGHER 2423 * 2424 * 2425 * PROCESS CALL TO PROGRAMMER DEFINED FUNCTION 2426 * 2427 * 2428 02671 0 10 04606 EX30 JST SDFI LOOK UP FUNCTION NAME IN TABLE
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 65

2429 02672 0 10 05243 JST ERR ERROR...FUNCTION HAS NOT BEEN DEFINED 2430 02673 152706 BCI 1,UF (THIS EXECUTES AS AN ERA) 2431 02674 0 02 00410 LDA C250 '(' MUST FOLLOW FUNCTION NAME 2432 02675 0 10 03104 JST GCCK X 2433 02676 0 02 00000 LDA 0 SAVE TABLE POINTER IN CASE 2434 02677 0 10 03022 JST PUSH THERE IS A PDF IN ARGUMENT 2435 02700 140040 CRA EVALUATE THE FUNCTION ARGUMENT 2436 02701 0 10 02443 JST EXPA X 2437 02702 0 02 00411 LDA C251 MAKE SURE IT'S FOLLOWED BY ')' 2438 02703 0 10 03104 JST GCCK X 2439 02704 0 10 03031 JST POP FETCH THE TABLE POINTER 2440 02705 0 04 00000 STA 0 X 2441 02706 1 02 00001 LDA 1,1 GET DUMMY ARGUMENT NAME 2442 02707 0 13 00052 IMA DEFN SWAP WITH CURRENT DUMMY NAME 2443 02710 0 10 03022 JST PUSH LEAVE PREVIOUS NAME ON STACK 2444 02711 0 02 00041 LDA CVAL CVAL IS NEW D 2445 02712 0 13 00053 IMA DEFV OLD VALUE GOES ON STACK 2446 02713 0 10 03022 JST PUSH X 2447 02714 0 02 00042 LDA CVAL+1 X 2448 02715 0 13 00054 IMA DEFV+1 X 2449 02716 0 10 03022 JST PUSH X 2450 02717 1 02 00002 LDA 2,1 GET POINTER TO FUNCTION EXPRESSION 2451 02720 0 13 00037 IMA SBP SWAP WITH CURRENT EXPRESSION POINTER 2452 02721 0 10 03022 JST PUSH LEAVE OLD POINTER ON STACK 2453 02722 140040 CRA EVALUATE THE FUNCTION 2454 02723 0 10 02443 JST EXPA X 2455 02724 0 10 03116 JST GDLM IT MUST END IN : OR C/R 2456 02725 0 10 03031 JST POP RESTORE POINTER TO ORIGINAL EXPR 2457 02726 0 04 00037 STA SBP X 2458 02727 0 10 03031 JST POP RESTORE PREVIOUS DUMMY 2459 02730 0 04 00054 STA DEFV+1 VARIABLE VALUE 2460 02731 0 10 03031 JST POP X 2461 02732 0 04 00053 STA DEFV X 2462 02733 0 10 03031 JST POP RESTORE PREVIOUS DUMMY 2463 02734 0 04 00052 STA DEFN VARIABLE NAME 2464 02735 0 01 02547 JMP EX09 NOW CONTINUE WITH ORIGINAL EXPRESSION 2465 * 2466 * 2467 * 2468 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 66

2469 * PRINT LINE NUMBER 2470 * 2471 * 2472 * CALLING SEQUENCE: 2473 * 2474 * JST PLN 2475 * ......RETURN 2476 * 2477 * THE LINE NUMBER OF THE CURRENT STATEMENT 2478 * (OR ZERO IF EXECUTING AN IMMEADIATE MODE STMT) 2479 * IS PRINTED WITH BLANK SURPRESSION. 2480 * 2481 * 2482 * 2483 02736 0 000000 PLN DAC ** 2484 02737 0 02 00034 LDA SIP GET SI POINTER TO CURRENT STMT 2485 02740 100040 SZE ZERO IF IN IMMEADIATE MODE 2486 02741 -0 02 00034 LDA* SIP NOT IMMEADIATE MODE...GET LINE NO. FROM SI 2487 02742 0 10 00000 JST FINT FLOAT IT FOR THE OUTPUT EDITOR 2488 02743 0 10 03207 JST SCVL IT PRINTS THE FLT PNT NO. IN CVAL 2489 02744 0 02 00405 LDA C240 SURPRESS BLANKS 2490 02745 0 10 02154 JST PCVL PRINT THE NUMBER 2491 02746 -0 01 02736 JMP* PLN AND RETURN 2492 * 2493 * 2494 * 2495 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 67

2496 * INPUT/OUTPUT ROUTINES 2497 * 2498 * 2499 * TYPE - OUTPUT MESSAGE 2500 * 2501 * 2502 * CALLING SEQUENCE: 2503 * 2504 * JST TYPE 2505 * DAC MESG ADDRESS OF MESSAGE 2506 *........RETURN A REGISTER ZERO 2507 * 2508 * THIS ROUTINE WILL OUTPUT THE MESSAGE UNTIL A BYTE 2509 * CONTAINING ZERO IS ENCOUNTERED. 2510 * 2511 * 2512 02747 0 000000 TYPE DAC ** 2513 02750 -0 02 02747 LDA* TYPE FETCH MESSAGE POINTER 2514 02751 0414 77 LGL 1 MAKE IT A BYTE POINTER 2515 02752 0 13 00037 IMA SBP SWAP WITH CURRENT SOURCE BYTE POINTER 2516 02753 0 04 00000 STA 0 A LEAVE SBP IN A SAFE PLACE 2517 02754 0 12 02747 IRS TYPE SET PROPER RETURN ADDRESS 2518 02755 0 10 03047 TYP1 JST GCHR GET NEXT CHARACTER OF MESSAGE 2519 02756 101040 SNZ END OF MESSAGE ? 2520 02757 0 01 02762 JMP TYP2 YES...GO RESTORE SBP AND EXIT 2521 02760 0 10 00000 JST OTA1 OUTPUT THE CHARACTER 2522 02761 0 01 02755 JMP TYP1 CONTINUE 2523 * 2524 02762 0 15 00037 TYP2 STX SBP RESTORE SBP 2525 02763 -0 01 02747 JMP* TYPE AND EXIT 2526 * 2527 * 2528 * SPAC - OUTPUT SPACE CHARACTER 2529 * 2530 * 2531 * CALLING SEQUENCE: 2532 * 2533 * JST SPAC 2534 * ......RETURN 2535 * 2536 * 2537 02764 0 000000 SPAC DAC ** 2538 02765 0 02 00405 LDA C240 GET SPACE CODE 2539 02766 0 10 00000 JST OTA1 OUTPUT IT 2540 02767 -0 01 02764 JMP* SPAC RETURN 2541 * 2542 * 2543 * 2544 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 68

2545 * TABLE POINTER INITIALIZATION ROUTINE 2546 * 2547 * 2548 * CALLING SEQUENCE: 2549 * 2550 * JST CLRT 2551 * ......RETURN 2552 * 2553 * THE FOLLOWING OPERATIONS ARE PERFORMED BY 2554 * THIS ROUTINE: 2555 * 2556 * 1) THE DEFINED FUNCTION INDEX, THE FOR-NEXT STACK, 2557 * THE SIMPLE VARIABLE TABLE, THE DIMENSIONED VARIABLE TABLE, 2558 * AND THE RETURN STACK ARE CLEARED. 2559 * 2560 * 2) THE 'CONTINUE' POINTER IS RESET 2561 * 2562 * 3) THE READ STATEMENT DATA POINTER IS INITIALIZED. 2563 * 2564 * 4) THE AMOUT OF FREE SPACE IS CALCULATED. 2565 * 2566 * 2567 * 2568 02770 0 000000 CLRT DAC ** 2569 02771 0 35 00463 LDX M10 CLEAR DFI, FN, SV, 2570 02772 140040 CRA AND DV TABLES. 2571 02773 1 04 00032 STA DFB+'10,1 X 2572 02774 0 12 00000 IRS 0 X 2573 02775 0 01 02773 JMP *-2 X 2574 02776 0 04 00101 STA CON1 CLEAR 'CONTINUE' POINTER 2575 02777 0 07 00032 SUB SIB CALUCLATE NO. OF WORDS 2576 03000 0 06 00021 ADD PTH OF USER SPACE ARE AVAILABLE 2577 03001 0 06 00376 ADD C2 ALLOW A SLIGHT MARGIN 2578 03002 101400 SMI ANY WORDS AVAILABLE ? 2579 03003 0 01 03027 JMP MEMO .....NO..... REPORT MEMORY OVERFLOW 2580 03004 0 04 00047 STA FSC SET THE COUNTER 2581 03005 0 02 00476 LDA RTB INITIALIZE THE RETURN STACK 2582 03006 0 04 00036 STA RTP X 2583 03007 0 10 04202 JST REST GO INITIALIZE DATA STMT POINTERS 2584 03010 -0 01 02770 JMP* CLRT RETURN 2585 * 2586 * 2587 * 2588 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 69

2589 * INITIALIZE PUSH DOWN STACK 2590 * 2591 * 2592 * CALLING SEQUENCE: 2593 * 2594 * JST IPDS 2595 * ......RETURN 2596 * 2597 * THE PUSH DOWN STACK POINTER, PDSP, IS SET TO THE 2598 * FIRST FREE WORD ABOVE THE TABLES THAT EXTEND FROM THE TOP 2599 * OF THE COMPILER. 2600 * 2601 * 2602 * 2603 03011 0 000000 IPDS DAC ** 2604 03012 0 02 00025 LDA FNT USE FOR-NEXT TABLE TOP 2605 03013 101040 SNZ UNLESS IT IS EMPTY, IN WHICH CASE 2606 03014 0 02 00023 LDA DFT USE DEFINED FUNCTION TABLE TOP 2607 03015 101040 SNZ UNLESS IT IS EMPTY, IN WHICH CASE 2608 03016 0 02 00021 LDA PTH USE PROGRAM TEXT TOP. 2609 03017 141206 AOA +1 TO GET ADDRESS OF FREE WORD 2610 03020 0 04 00035 STA PDLP SET THE POINTER 2611 03021 -0 01 03011 JMP* IPDS AND RETURN 2612 * 2613 * 2614 * 2615 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 70

2616 * PUSH DOWN STACK HANDLING ROUTINES 2617 * 2618 * 2619 * PUSH - ADD ENTRY TO SLACK 2620 * 2621 * 2622 * CALLING SEQUENCE: 2623 * 2624 * LDA WORD A CONTAINS WORD TO BE ADDED TO STACK 2625 * JST PUSH 2626 * ......RETURN UNLESS STACK OVERFLOW 2627 * 2628 * 2629 03022 0 000000 PUSH DAC ** 2630 03023 -0 04 00035 STA* PDLP PLACE ENTRY IN THE STACK. 2631 03024 0 12 00035 IRS PDLP UPDATE THE STACK POINTER 2632 03025 0 12 00047 IRS FSC UPDATE THE FREE STORAGE COUNT 2633 03026 -0 01 03022 JMP* PUSH NO OVERFLOW...RETURN 2634 03027 0 10 05243 MEMO JST ERR REPORT MEMQRY OVERFLOW 2635 03030 146717 BCI 1,MO X 2636 * 2637 * 2638 * POP - REMOVE ENTRY FROM THE PUSH DOWN STACK 2639 * 2640 * 2641 * CALLING SEQUENCE85 2642 * 2643 * JST POP 2644 * ......RETURN TOP STACK ENTRY IN A 2645 * 2646 * 2647 03031 0 000000 POP DAC ** 2648 03032 0 02 00035 LDA PDLP DECREMENT THE STACK POINTER 2649 03033 0 07 00371 SUB C1 X 2650 03034 0 04 00035 STA PDLP X 2651 03035 0 02 00462 LDA M1 A UPDATE THE FREE STORAGE COUNT 2652 03036 0 10 03041 JST UFSC X 2653 03037 -0 02 00035 LDA* PDLP REMOVE TOP ENTRY FROM THE STACK 2654 03040 -0 01 03031 JMP* POP AND RETURN 2655 * 2656 * 2657 * 2658 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 71

2659 * UPDATE FREE STORAGE COUNT 2660 * 2661 * 2662 * CALLING SEQUENCE: 2663 * 2664 * LDA NWRD A CONTAINS NO. OF WORDS REQUIRED 2665 * JST UFSC 2666 * ......RETURN IF REQUIRED NO. OF WORDS ARE AVAILABLE 2667 * 2668 * THIS ROUTINE MAY BE USED TO REMOVE WORDS FROM THE 2669 * FREE STORAGE AREA (IF A IS +) OR TO RELEASE WORDS TO 2670 * THE FREE STORAGE AREA (IF A IS -). 2671 * 2672 * 2673 03041 0 000000 UFSC DAC ** 2674 03042 0 06 00047 ADD FSC UPDATE THE FREE STORAGE COUNT 2675 03043 101400 SMI TEST FOR MEMORY OVERFLOW 2676 03044 0 01 03027 JMP MEMO YES...GO TELL THE USER 2677 03045 0 04 00047 STA FSC NO....SAVE THE UPDATED COUNT 2678 03046 -0 01 03041 JMP* UFSC AND RETURN 2679 * 2680 * 2681 * 2682 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 72

2683 * CHARACTER HANDLING ROUTINES 2684 * 2685 * 2686 * GCHR - GET NEXT SOURCE CHARACTER 2687 * 2688 * 2689 * CALLING SEQUENCE: 2690 * 2691 * JST GCHR 2692 * ......RETURN 2693 * 2694 * THE NEXT SOURCE CHARACTER IS LEFT IN 2695 * THE A REGISTER AND CHAR, AND THE SOURCE 2696 * BYTE POINTER, SBP, IS INCREMENTED. 2697 * 2698 * 2699 03047 0 000000 GCHR DAC ** 2700 03050 0 10 03054 JST XCHR GET CHARACTER POINTED TO BY SBP 2701 03051 0 04 00074 STA CHAR LEAVE IT IN CHAR 2702 03052 0 12 00037 IRS SBP BUMP THE 2703 03053 -0 01 03047 JMP* GCHR AND RETURN 2704 * 2705 * 2706 * XCHR - EXAMINE NEXT SOURCE CHARACTER 2707 * 2708 * 2709 * CALLING SEQUENCE: 2710 * 2711 * JST XCHR 2712 * ......RETURN 2713 * 2714 * THE CHARACTER POINTED TO BY SBP IS RETURNED 2715 * IN THE A REGISTER, SBP AND CHAR ARE NOT ALTERED. 2716 * 2717 * 2718 03054 0 000000 XCHR DAC ** 2719 03055 0 02 00037 LDA SBP GET THE BYTE POINTER 2720 03056 0404 77 LGR 1 /2 TO GET WORD NO., BYTE INDICATOR IN C 2721 03057 0 04 00076 STA TMP1 X 2722 03060 -0 02 00076 LDA* TMP1 PICK UP WORD CONTAINING BYTE WE WANT 2723 03061 101001 SSC SKIP IF LOW ORDER BYTE IS REQUESTED 2724 03062 141340 ICA HIGH ORDER BYTE..POSITION IT 2725 03063 141050 CAL ISOLATE THE BYTE 2726 03064 -0 01 03054 JMP* XCHR RETURN 2727 * 2728 * 2729 * UCHR - BACK UP ONE CHARACTER 2730 * 2731 * 2732 * CALLING SEQUENCE:
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 73

2733 * 2734 * JST UCHR 2735 * ......RETURN 2736 * 2737 * THE SOURCE BYTE POINTER, SBP, IS DECREMENTED 2738 * BY ONE. 2739 * 2740 * 2741 03065 0 000000 UCHR DAC ** 2742 03066 0 13 00037 IMA SBP DECREMENT THE SOURCE BYTE 2743 03067 0 07 00371 SUB C1 POINTER BY ONE 2744 03070 0 13 00037 IMA SBP AND REPLACE IT 2745 03071 -0 01 03065 JMP* UCHR RETURN 2746 * 2747 * 2748 * GCHX - EXCLUSIVE OR NEXT CHARACTER TO A 2749 * 2750 * 2751 * CALLING SEQUENCE: 2752 * 2753 * JST GCHX 2754 * ......RETURN 2755 * 2756 * THE NEXT CHARACTER IS XOR'ED TO A AND 2757 * THE RESULT IS LEFT IN A. SBP IS INCREMENTED 2758 * AND THE CHARACTER IS LEFT IN CHAR. 2759 * 2760 * 2761 03072 0 000000 GCHX DAC ** 2762 03073 0 04 00077 STA TMP2 SAVE A WHILE GETTING CHARACTER 2763 03074 0 10 03047 JST GCHR GET THE NEXT SOURCE CHARACTER 2764 03075 0 05 00077 ERA TMP2 XOR PREVIOUS 2765 03076 -0 01 03072 JMP* GCHX RETURN 2766 * 2767 * 2768 * GCPK - PACK NEXT TWO SOURCE CHARACTERS 2769 * 2770 * 2771 * CALLING SEQUENCE: 2772 * 2773 * JST GCPK 2774 * ......RETURN 2775 * 2776 * THE NEXT TWO CHARACTERS ARE FETCHED AND 2777 * LEFT IN A (FIRST CHARACTER IN A(1-8), SECOND 2778 * CHARACTER IN A(9-16)). 2779 * 2780 * 2781 03077 0 000000 GCPK DAC ** 2782 03100 0 10 03047 JST GCHR GET THE FIRST CHARACTER
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 74

2783 03101 141240 ICR PUT IT A(1-8) 2784 03102 0 10 03072 JST GCHX PUT NEXT CHARACTER IN A(9-16) 2785 03103 -0 01 03077 JMP* GCPK RETURN 2786 * 2787 * 2788 * GCCK - GET CRARACTER AND CHECK 2789 * 2790 * 2791 * CALLING SEQUENCE: 2792 * 2793 * LDA CHAR A CONTAINS CHARACTER EXPECTED 2794 * JST QCCK 2795 * ......RETURN IF CHAR FOUND (A ZERO) 2796 * 2797 * THE NEXT CHARACTER IS FETCHED, AND IF IT 2798 * DOES NOT MATCH THE CONTENTS OF A, A 'MX' ERROR 2799 * IS REPORTED, WHERE X IS THE CHARACTER IN A ON ENTRY. 2800 * 2801 * 2802 03104 0 000000 GCCK DAC ** 2803 03105 0 05 03115 ERA GCC1 FORM ERROR DIAGNOSTIC 2804 03106 0 04 03114 STA GCC2 SAVE IT IN CASE IT'S NEEDED 2805 03107 0 05 03115 ERA GCC1 RESTORE A 2806 03110 0 10 03072 JST GCHX XOR NEXT CHARACTER WITH IT 2807 03111 101040 SNZ A ZERO IF THEY MATCH 2808 03112 -0 01 03104 JMP* GCCK MATCH!!!...RETURN 2809 03113 0 10 05243 JST ERR DIFFERENT...REPORT ERROR 2810 03114 146730 GCC2 BCI 1,MX 2811 * 2812 03115 146400 GCC1 HEX CD00 ASCII M IN BITS -*8, ZERO IN BITS 9-16 2813 * 2814 * 2815 * GDLM - GET TERMINAL DELIMITER 2816 * 2817 * 2818 * CALLING SEQUENCE: 2819 * 2820 * JST GDLM 2821 * ......RETURN IF NEXT CHARACTER IS : OR C/R 2822 * 2823 * THE NEXT CHARACTER IS FETCHED AND IF IT IS 2824 * EITHER A : OR C/R, RETURN IS MADE WITH THE 2825 * DELIMITER CODE IN A. IF IT IS NOT A : OR C/R, 2826 * A 'DL' ERROR IS REPORTED. 2827 * 2828 * 2829 03116 0 000000 GDLM DAC ** 2830 03117 0 10 03047 JST GCHR GET THE NEXT CHARACTER 2831 03120 0 10 03173 JST DLCK TEST FOR : OR C/R 2832 03121 100000 SKP NO....ERROR
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 75

2833 03122 -0 01 03116 JMP* GDLM YES...RETURN 2834 03123 0 10 05243 JST ERR REPORT THE ERROR 2835 03124 142314 BCI 1,DL X 2836 * 2837 * 2838 * GNBC - GET NEXT NON-BLANK CHARACTER 2839 * 2840 * 2841 * CALLING SEQUENCE: 2842 * 2843 * JST GNBC 2844 * ......RETURN CHARACTER IN A AND CHAR 2845 * 2846 * THE NEXT NON BLANK CHARACTER (<> '240) IS 2847 * FETCHED AND LEFT IN A AND CHAR. 2848 * 2849 * 2850 * 2851 03125 0 000000 GNBC DAC ** 2852 03126 0 10 03047 JST GCHR GET THE NEXT CHARACTER 2853 03127 0 11 00405 CAS C240 TEST FOR BLANK 2854 03130 -0 01 03125 JMP* GNBC NO...RETURN 2855 03131 0 01 03126 JMP *-3 YES...TRY NEXT CHARACTER 2856 03132 -0 01 03125 JMP* GNBC NO...RETURN 2857 * 2858 * 2859 * 2860 * SCHR - STORE CHARACTER 2861 * 2862 * 2863 * CALLING SEQUENCE: 2864 * 2865 * LDA CHAR A CONTAINS CHARACTER TO BE STORED 2866 * JST SCHR 2867 * ......RETURN A UNCHANGED 2868 * 2869 * THE CHARACTER IN A IS TRUNCATED TO 8 BITS AND LEFT 2870 * IN THE LOCATION LCHR. IT IS THEN INSERTED IN THE BYTE 2871 * POINTED TO BY DBP WITHOUT DESTROYING THE OTHER BYTE IN 2872 * THE TARGET WORD. DBP IS INCREMENTED FOLLOWING THE 2873 * INSETION. THE INITIAL A REGISTER CONTENTS ARE RETURNED 2874 * UNCHANGED. 2875 * 2876 * 2877 03133 0 000000 SCHR DAC ** 2878 03134 0 04 00077 STA TMP2 SAVE INITIAL A CONTENTS 2879 03135 141050 CAL TRUNCATE TO 8 BITS 2880 03136 0 04 00075 STA LCHR SAVE FOR LATER REFERENCE 2881 03137 0 02 00040 LDA DBP GET POINTER TO TARGET BYTE 2882 03140 0404 77 LGR 1 WORD NO. IN A, BYTE INDICATOR IN C
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 76

2883 03141 0 04 00076 STA TMP1 SAVE TARGET WORD POINTER 2884 03142 -0 02 00076 LDA* TMP1 GET CURRENT CONTENTS OF TARGET WORD 2885 03143 101001 SSC PUT TARGET BYTE IN A(9-16) 2886 03144 141340 ICA X 2887 03145 141044 CAR CLEAR POSITION FOR NEW BYTE 2888 03146 0 05 00075 ERA LCHR INSERT THE NEW CHARACETR 2889 03147 101001 SSC REPOSITIDN THE BYTES IF NECESSARY 2890 03150 141340 ICA X 2891 03151 -0 04 00076 STA* TMP1 RESTORE THE BYTE PAIR 2892 03152 0 12 00040 IRS DBP INCREMENT THE DESTINATION BYTE POINTER 2893 03153 0 02 00077 LDA TMP2 RESTORE A 2894 03154 -0 01 03133 JMP* SCHR AND EXIT 2895 * 2896 * 2897 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 77

2898 * CHARACTER CHECK ROUTINES 2899 * 2900 * 2901 * ALFA - ALPHABETIC CHARACTER TEST ROUTINE 2902 * 2903 * 2904 * CALLING SEQUENCE: 2905 * 2906 * LDA CHAR A CONTAINS CHARACTER TO BE TESTED 2907 * JST ALFA 2908 * ......RETURN IF NOT ALPHABETIC CHARACTER 2909 * ......RETURN IF ALPHABETIC CHARACTER 2910 * 2911 * 2912 03155 0 000000 ALFA DAC ** 2913 03156 0 11 00427 CAS C300 LOW ALPHABETCI RANGE - 1 2914 03157 0 11 00432 CAS C333 HIGH ALPHABETIC TANGE + 1 2915 03160 -0 01 03155 JMP* ALFA RETURN 1 ... NOT ALPHABETIC 2916 03161 -0 01 03155 JMP* ALFA RETURN 1 ... NOT ALPHABETIC 2917 03162 0 12 03155 IRS ALFA ALPHABETIC ... TAKE SECOND RETURN 2918 03163 -0 01 03155 JMP* ALFA X 2919 * 2920 * 2921 * NUMC - NUMERIC CHARACTER TEST ROUTINE 2922 * 2923 * 2924 * CALLING SEQUENCE: 2925 * 2926 * LDA CHAR A CONTAINS CHARACTER TO BE TESTED 2927 * JST NUMC 2928 * ......RETURN IF NOT NUMERIC CHARACTER 2929 * ......REOURN IF NUMERIC CHARACTER 2930 * 2931 * 2932 03164 0 000000 NUMC DAC ** 2933 03165 0 11 00417 CAS C257 LOW NUMERIC RANGE - 1 2934 03166 0 11 00422 CAS C272 HIGH NUMERIC RANGE + 1 2935 03167 -0 01 03164 JMP* NUMC RETURN 1 ... NOT NUMERIC 2936 03170 -0 01 03164 JMP* NUMC RETURN 1 ... NOT NUMERIC 2937 03171 0 12 03164 IRS NUMC NUMERIC ... TAKE SECOND RETURN 2938 03172 -0 01 03164 JMP* NUMC 2939 * 2940 * 2941 * DLCK - TERMINAL DELIMITER TEST ROUTINE 2942 * 2943 * 2944 * CALLING SEQUENCE: 2945 * 2946 * LDA CHAR A CONTAINS CHARACTER TO BE TESTED 2947 * JST DLCK
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 78

2948 * ......RETURN IF NOT TERMINAL DELIMITER (: OR C/R) 2949 * ......RETURN IF TERMINAL DELIMITER (: OR C/R) 2950 * 2951 * 2952 03173 0 000000 DLCK DAC ** 2953 03174 0 11 00422 CAS C272 TEST FOR COLON 2954 03175 -0 01 03173 JMP* DLCK NO....TAKE FIRST RETURN 2955 03176 0 12 03173 IRS DLCK YES...INCREMENT TO TAKE SECOND RETURN 2956 03177 0 11 00401 CAS C215 TEST FOR CARRIAGE RETURN 2957 03200 -0 01 03173 JMP* DLCK NO....RETURN 2958 03201 0 12 03173 IRS DLCK YES...INCRENENT FOR SECOND RETURN 2959 03202 -0 01 03173 JMP* DLCK RETURN 2960 * 2961 * 2962 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 79

2963 * FLOATING POINT ACCUMULATOR LOAD AND STORE ROUTINES 2964 * 2965 * 2966 * LCVL - LOAD A+B FROM FLOATING POINT ACCUMULATOR 2967 * 2968 * 2969 * CALLING SEQUENCE: 2970 * 2971 * JST LCVL 2972 * ......RETURN CONTENTS OF CVAL IN A+B 2973 * 2974 * 2975 03203 0 000000 LCVL DAC ** 2976 03204 0 10 00000 JST L$22 LOAD A+B FROM 2977 03205 0 000041 DAC CVAL X 2978 03206 -0 01 03203 JMP* LCVL RETURN 2979 * 2980 * 2981 * SCVL - STORE A+B IN FLOATING POINT ACCUMULATOR 2982 * 2983 * 2984 * CALLING SEQUENCE: 2985 * 2986 * JST SCVL 2987 * ......RETURN CVAL SET TO CONTENTS OF A+B 2988 * 2989 * 2990 03207 0 000000 SCVL DAC ** 2991 03210 0 10 00000 JST H$22 STORE A+B IN CVAL 2992 03211 0 000041 DAC CVAL X 2993 03212 -0 01 03207 JMP* SCVL RETURN 2994 * 2995 * 2996 * 2997 EJCT NOT MUCH TO THESE ROUTINES, IS THERE ?
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 80

2998 * EXECUTE NEXT SOURCE STATEMENT 2999 * 3000 * 3001 * THIS ROUTINE WILL DETERMINE THE TYPE OF THE 3002 * STATEMENT POINTED TO BY SBP AND BRANCH TO THE PROPER 3003 * STATEMENT PROCESSER. THE POINTER SIP IS ASSUMED TO 3004 * BE SET TO POINT TO THE STATEMENT INDEX ENTRY FOR THE 3005 * STATEMENT BEING PROCESSED, UNLESS IT IS AN IMMEADIATE 3006 * MODE STATEMENT, IN WHICH CASE SIP SHOULD BE ZERO. 3007 * BEFORE THE STATEMENT IS EXECUTED, A CHECK FOR PROGRAM 3008 * BREAK IS MADE. IF THE BREAK FLAG, BRKF, IS SET, 3009 * THE MESSAGE 'XXXX BREAK' IS PRINTED, WHERE XXXX IS THE 3010 * CURRENT LINE NUMEER, AND THE POINTERS TO THE STATEMENT 3011 * ARE SAVED FOR USE BY A FUTURE CONTINUE COMMAND. 3012 * 3013 * 3014 * 3015 03213 140040 ESMT CRA INITIALIZE THE DUMMY VARIABLE NAME CELL 3016 03214 0 04 00052 STA DEFN X 3017 03215 0 10 00000 JST BRKC CHECK FOR PROGRAM BREAK 3018 03216 0 13 00103 IMA BRKF GET THE BREAK FLAG, ALSO CLEAR IT 3019 03217 100040 SZE X 3020 03220 0 01 03255 JMP ES01 GO PROCESS PROGRAM BREAKS 3021 03221 0 10 03011 JST IPDS INITIALIZE THE PUSH DOWN STACK 3022 03222 0 10 03047 JST GCHR LOOK AT 1ST CHAR OF STMT TO GET STMT TYPE 3023 03223 0 11 00404 CAS C23 TEST FOR IMPLIED 'LET' STATEMENT 3024 03224 0 01 03253 JMP ES02 YES...GO PROCESS IT 3025 03225 101000 NOP NO 3026 03226 0 04 00000 STA 0 SET STATEMENT BRANCH LIST POINTER 3027 03227 -1 01 03227 JMP* *,1 BRANCH TO THE PROPER STATEMENT PROCESSGR 3028 * 3029 03230 0 003274 DAC ASNM LET STATEMENT 3030 03231 0 004072 DAC READ READ STATEMENT 3031 03232 0 004066 DAC INPT INPUT STATEMENT 3032 03233 0 004177 DAC RSTR RESTORE STATEMENT 3033 03234 0 004211 DAC PRNT PRINT STATEMENT 3034 03235 0 003324 DAC GOTO GOTO STATEMENT 3035 03236 0 003365 DAC IF IF STATEMENT 3036 03237 0 003340 DAC ON ON STATEMENT 3037 03240 0 003472 DAC FOR FOR STATEMENT 3038 03241 0 003622 DAC NEXT NEXT STATEMENT 3039 03242 0 003720 DAC GOSB GOSUB STATEMENT 3040 03243 0 003737 DAC RTRN RETURN STATEMENT 3041 03244 0 003752 DAC CALL CALL STATEMENT 3042 03245 0 004425 DAC REM REM STATEMENT 3043 03246 0 004427 DAC EXIT STOP STATEMENT 3044 03247 0 004427 DAC EXIT END STATEMENT 3045 03250 0 004425 DAC REM DATA STATEMENT 3046 03251 0 004425 DAC REM DIM STATEMENT 3047 03252 0 004325 DAC DEF DEF STATEMENT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 81

3048 * 3049 03253 0 10 03065 ES02 JST UCHR BACK UP OVER THE FIRST CHAR OF THE STMT 3050 03254 0 01 03274 JMP ASNM GO PROCESS ASSIGNMENT STATEMENT 3051 * 3052 * HERE IF PROGRAM BREAK 3053 * 3054 03255 0 02 00034 ES01 LDA SIP DO NOT RECORD BREAK INFO IF IN COMMAND MODE 3055 03256 101040 SNZ X 3056 03257 0 01 01000 JMP CMOD RETURN TO PROCESS NEXT SYSTEM COMMAND 3057 03260 0 04 00101 STA CON1 SAVE POINTERS TO INTERRUPT POINT 3058 03261 0 02 00037 LDA SBP X 3059 03262 0 04 00102 STA CON2 X 3060 03263 0 10 00000 JST LFCR PRINT 'XXXX BREAK' 3061 03264 0 10 02736 JST PLN X 3062 03265 0 10 02747 JST TYPE X 3063 03266 0 003270 DAC BKMS 3064 03267 0 01 01000 JMP CMOD RETURN TO COMMAND MODE 3065 * 3066 * 3067 03270 120302 BKMS BCI 3, BREAK BREAK MESSAGE 03271 151305 03272 140713 3068 03273 000000 OCT 0 MESSAGE TERMINATOR 3069 * 3070 * 3071 * 3072 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 82

3073 * ASSIGNNENT STATEMENT PROCESSOR 3074 * 3075 * 3076 * STATEMENT SYNTAX: 3077 * 3078 * <ASSIGNMENT STATEMENT>:=[LET<VARIABLE>=<EXPRESSION>| 3079 * <VARIABLE>=<EXPRESSION>][:|C/R] 3080 * 3081 * 3082 * 3083 03274 140040 ASNM CRA PUT EOL MARK ON THE STACK 3084 03275 0 10 03022 JST PUSH X 3085 03276 0 10 04632 ASN2 JST PVN INPUT/CLASSIFY VARIABLE NAME 3086 03277 0 10 04751 JST ADV LOCATE/ASSIGN DIMENSIONED VARIABLE 3087 03300 0 10 04671 JST ASV LOCATE/ASSIGN SIMPLE VARIABLE 3088 03301 0 02 00000 LDA 0 PUT VARIABLE ADDRESS ON THE STACK 3089 03302 0 10 03022 JST PUSH X 3090 03303 0 10 03047 JST GCHR HAS ASSIGNMENT LIST BEEN PROCESSED ? 3091 03304 0 11 00414 CAS C254 (COMMA MEANS NO) 3092 03305 100000 SKP X 3093 03306 0 01 03276 JMP ASN2 NO ... GO PROCESS NEXT NAME 3094 03307 0 10 03065 JST UCHR NOT COMMA, SO IT MUST BE '=' OR ELSE 3095 03310 0 02 00424 LDA C275 X 3096 03311 0 10 03104 JST GCCK X 3097 03312 0 10 02443 JST EXPA EVALUATE THE EXPRE$SION 3098 03313 0 10 03116 JST GDLM MAKE SURE IT END WITH A C/R OR : 3099 03314 0 10 03031 ASN3 JST POP GET VARIABLE ADDRESS FROM THE STACK 3100 03315 101040 SNZ IS IT END OF STACK MARKER ? 3101 03316 0 01 04574 JMP SEX .....YES..... PROCEED TO NEXT STATEMENT 3102 03317 0 04 03322 STA ASN1 SET ADDRESS IN STORE CALLING SEQUENCE 3103 03320 0 10 03203 JST LCVL GET VALUE OF THE EXPRESSION 3104 03321 0 10 00000 JST H$22 ASSIGN THE VALUE TO LIST VARIABLE 3105 03322 0 000000 ASN1 DAC ** X 3106 03323 0 01 03314 JMP ASN3 GO TRY FOR ANOTHER LIST ELEMENT 3107 * 3108 * 3109 * 3110 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 83

3111 * GOTO STATEMENT PROCESSOR 3112 * 3113 * 3114 * STATEMENT SYNTAX: 3115 * 3116 * <GOTO STATEMENT>:=GOTO<LINE NUMBER>[:|C/R] 3117 * 3118 * 3119 * 3120 03324 0 10 04556 GOTO JST ISN GET THE STATEMENT NUMBER 3121 03325 0 10 03116 JST GDLM MAKE SURE NEXT CHARACTER IS : OR C/R 3122 03326 0 35 00034 GOT2 LDX SIP PROTECT SI PNTR DURING STMT SEARCH 3123 03327 0 10 04475 JST SISR LOOK UP THE NUMBER IN THE STATEMENT INDEX 3124 03330 0 01 03335 JMP GOT3 ERROR ... UNDEFINED STATEMENT NUMBER 3125 03331 0 02 00051 LDA SEQI SEE IF STMT SEQUENCING IS INHIBITED 3126 03332 101040 SNZ X 3127 03333 0 01 03213 JMP ESMT NO...GO EXECUTED THE REQUESTED STATEMENT 3128 03334 0 01 01000 JMP CMOD YES...IGNORE AND RETURN T0 COMMAND MODE 3129 * 3130 03335 0 15 00034 GOT3 STX SIP RESTORE SI PNTR TO CURRENT LINE 3131 03336 0 10 05243 JST ERR REPORT UNDEFINED STATEMENT NO. ERROR 3132 03337 152723 BCI 1,US X 3133 * 3134 * 3135 * 3136 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 84

3137 * ON STATEMENT PROCESSOR 3138 * 3139 * 3140 * STATEMENT SYNTAX: 3141 * 3142 * <ON STATEMENT>:=ON<EXPRESSION>GOTO<LINE NUMBER> 3143 * [,<LINE NUMBER>](0,*)[:C/R] 3144 * 3145 * 3146 * AN 'ON' ERROR MESSAGE WILL BE ISSUED 3147 * ON THE FOLLOWING CONDITIONS: 3148 * 3149 * 1) 'GOTO' MISSING 3150 * 2) EXRRESSION ZERO OR MINUS 3151 * 3152 * 3153 03340 140040 ON CRA EVALUATE THE EXPRESSION 3154 03341 0 10 02443 JST EXPA X 3155 03342 0 10 03047 JST GCHR TEST FOR 'GOTO' 3156 03343 0 05 00454 ERA GTC ('GOTO' IS COMPRESSED TO 1 BYTE) 3157 03344 100040 SZE X 3158 03345 0 10 05243 ON1 JST ERR 'ON' STATEMENT ERROR 3159 03346 147716 BCI 1,ON (THIS WILL EXECUTE AS AN ANA) 3160 03347 0 10 03203 JST LCVL TRUNCATE EXPRESSION TO AN INTEGER 3161 03350 0 10 00000 JST IFLT X 3162 03351 0 01 03345 JMP ON1 ERROR...NUMBER TOO LARGE 3163 03352 140407 ON3 TCA TEST FOR VALUE < 1 3164 03353 101400 SMI X 3165 03354 0 01 03345 JMP ON1 ERROR ... EXPRESSION <= 0 3166 03355 0 04 00000 STA 0 SAVE VALUE FOR STEPPING THROUGH LIST 3167 03356 0 10 04556 ON2 JST ISN GET NEXT STMT NO. FROM THE LIST 3168 03357 0 12 00000 IRS 0 IS THIS THE ONE WE WANT | 3169 03360 100000 SKP NO 3170 03361 0 01 03326 JMP GOT2 YES...NOW PROCESS LIKE A GOTO 3171 03362 0 02 00414 LDA C254 TEST FOR COMMA SEPERATING THE 3172 03363 0 10 03104 JST GCCK STATEMENT NUMBERS 3173 03364 0 01 03356 JMP ON2 CONTINUE SCAN 3174 * 3175 * 3176 * 3177 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 85

3178 * IF STATEMENT PROCESSOR 3179 * 3180 * 3181 * STATEMENT SYNTAX: 3182 * 3183 * <IF STATEMENT>:=<LOGICAL IF STATEMENT>| 3184 * <ARITHMETIC IF STATEMENT> 3185 * 3186 * <LOGICAL IF STATEMENT>:=IF<EXPRESSION><RELATIONAL OPERATOR> 3187 * <EXPRESSION>[TEN<STATEMENT BODY> 3188 * [:<STATEMENT BODY>]|$TEN<LINE NUMBER> 3189 * |GOTO<LINE NUMBER>] 3190 * 3191 * <RELATIONAL OPERATOR]:=>|>=|=|=<|<|<> 3192 * 3193 * <ARITHMETIC IF STATEMENT>:=IF<EXPRESSION>,<LINE NUMBER>, 3194 * <LINE NUMBER>,<LINE NUMBER>[:|C/R] 3195 * 3196 * 3197 03365 140040 IF CRA CLEAR TEMP. REGISTERS USED IN 3198 03366 0 04 00312 STA IFT1 PROCESSING RELATIONAL OPS 3199 03367 0 04 00313 STA IFT2 X 3200 03370 0 10 02443 JST EXPA EVALUATE FIRST EXPRESSION 3201 03371 0 10 03054 JST XCHR TEST FOR ARITHMETIC IF 3202 03372 0 05 00414 ERA C254 BY LOOKING FOR COMMA FOLLOWING 3203 03373 101040 SNZ FIRST EXPRESSION 3204 03374 0 01 03463 JMP IF01 GO PROCESS ARITHMETIC IF 3205 * 3206 * HERE FOR LOGICAL IF 3207 * 3208 03375 0 10 03047 IF02 JST GCHR TEST NEXT CHARACTER FOR RELATIONAL OP. 3209 03376 0 11 00423 CAS C273 < ('274), = ('275), AND > ('276) ARE 3210 03377 0 11 00425 CAS C277 LEGAL REL. OPS. 3211 03400 0 01 03416 JMP IF03 NOT RELATIONAL OP 3212 03401 0 01 03416 JMP IF03 DITTO 3213 03402 0 07 00423 SUB C273 TRANSPOSE CODE TO 1 FOR <, 2 FOR =, 3214 03403 0 11 00376 CAS C2 OR 4 FOR > 3215 03404 0 02 00435 LDA C4 X 3216 03405 101000 NOP X 3217 03406 0 13 00312 IMA IFT1 CODE TO FIRST REL. OP. ACCUM. 3218 03407 101040 SNZ WAS THIS IHE FIRST REL. OP. | 3219 03410 0 01 03375 JMP IF02 YES...GO CHECK FOR ANOTHER 3220 03411 0 13 00313 IMA IFT2 MOVE 1ST REL. OP. CODE TO 2ND ACCUM. 3221 03412 101040 SNZ WAS THIS THE 2ND REL. OP. | 3222 03413 0 01 03375 JMP IF02 YES...MAKE SURE ANOTHER DOES NOT FOLLOW 3223 03414 0 10 05243 IF04 JST ERR IF STATEMENT CONDITION ERROR 3224 03415 144703 BCI 1,IC X 3225 * 3226 03416 0 10 03065 IF03 JST UCHR MOVE BACK TO 1ST NON REL. OP. CHAR. 3227 03417 0 02 00312 LDA IFT1 COMBINE THE REL. OP. CODES
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 86

3228 03420 0 05 00313 ERA IFT2 X 3229 03421 101040 SNZ TEST FOR NO CONDITION SELECTED OR 3230 03422 0 01 03414 JMP IF04 THE SAME CONDITION SELECTED TWICE 3231 03423 0 04 00312 STA IFT1 SAVE THE COND1TION CODE 3232 03424 140040 CRA EVALUATE THE SECOND EXPRESSION 3233 03425 0 10 02443 JST EXPA X 3234 03426 0 10 00000 JST S$22 COMPARE THE TWO EXPRESSIONS 3235 03427 0 000041 DAC CVAL X 3236 03430 0 10 03207 JST SCVL REDUCE TO -1 IF 1ST EXPR IS >, 3237 03431 0 10 00000 JST SGNF -2 IF 2ST EXPR EQUALS 2ND EXPR, OR 3238 03432 0 000041 DAC CVAL -3 IF 2ND EXPR IS > 3239 03433 0 10 00000 JST IFLT X 3240 03434 000000 OCT 0 NEVER CAN EXECUTE THIS WORD 3241 03435 0 07 00376 SUB C2 X 3242 03436 0 04 00000 STA 0 X 3243 03437 0 02 00312 LDA IFT1 MOVE REL. OP. CODE BIT FOR THE RESULT 3244 03440 0414 64 LGL 12 TO A(1) 3245 03441 0414 77 LGL 1 X 3246 03442 0 12 00000 IRS 0 X 3247 03443 0 01 03441 JMP *-2 X 3248 03444 101400 SMI WAS THE RESULT CONDITION SELECTED | 3249 03445 0 01 04600 JMP ASQ NO....ADVANCE TO NEXT LINE 3250 03446 0 10 03047 JST GCHR YES...TEST FOR 'GOTO' 3251 03447 0 11 00454 CAS GTC X 3252 03450 100000 SKP NO 3253 03451 0 01 03324 JMP GOTO YES...PROCESS GOTO STATEMENT 3254 03452 0 05 00504 ERA THNC NO....THIS CHARACTER MUST BE 'THEN' 3255 03453 100040 SZE X 3256 03454 0 10 05243 JST ERR NO...REPORT SYNTAX ERROR 3257 03455 152310 BCI 1,TH COULD NOT FIND 'THEN' 3258 03456 0 10 03054 JST XCHR SEE WHETHER LINE NO. OF STATEMENT 3259 03457 0 11 00455 CAS INTF FOLLOWS 3260 03460 0 01 03213 JMP ESMT STATEMENT...GO PROCESS IT 3261 03461 0 01 03324 JMP GOTO LINE NUMEBR...EXECUTE 'GOTO' 3262 03462 0 01 03213 JMP ESMT STATEMENT...G0 PROCESS IT 3263 * 3264 * HERE FOR ARITHMETIC IF STATEMENT 3265 * 3266 03463 0 10 03047 IF01 JST GCHR STEP PAST THE COMMA 3267 03464 0 10 00000 JST SGNF SET A = -1 IF EXPT < 0, 0 IF 3268 03465 0 000041 DAC CVAL EXPR = 0, +1 IF EXPR > 0 3269 03466 0 10 00000 JST IFLT X 3270 03467 000000 OCT 0 NEVER CAN EXECUTE THIS WORD 3271 03470 0 06 00376 ADD C2 A MAKE THIS LOOK LIKE AN 'ON' STATEMENT 3272 03471 0 01 03352 JMP ON3 AND GO PROCESS IT 3273 * 3274 * 3275 * 3276 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 87

3277 * FOR STATEMENT PROCESSOR 3278 * 3279 * 3280 * STATEMENT SYNTAX: 3281 * 3282 * <FOR STATEMENT>:=<SIMPLE VARIABLE>=<EXPRESSION> 3283 * [TO|,]<EXPRESSION>[[STEP|,] 3284 * <EXPRESSION>](0,1) 3285 * 3286 * 3287 03472 0 02 00373 FOR LDA C11 MAKE SURE NINE WORDS ARE 3288 03473 0 10 03041 JST UFSC AVAILABLE FOR STACK ENTRY 3289 03474 0 02 00024 LDA FNB IS FOR STACK INITIALIZATION 3290 03475 100040 SZE REQUIRED? 3291 03476 0 01 03505 JMP FR01 NO...GO APPEND ENTRY 3292 03477 0 02 00023 LDA DFT START FOR STACK ABOVE LOW 3293 03500 101040 SNZ CORE TABLES 3294 03501 0 02 00021 LDA PTH X 3295 03502 141206 AOA X 3296 03503 0 04 00024 STA FNB X 3297 03504 0 01 03507 JMP FR06 X 3298 03505 0 02 00025 FR01 LDA FNT GET PREVIOUS STACK TOP 3299 03506 141206 AOA GET FIRST WORD FOR NEW ENTRY 3300 03507 0 04 03616 FR06 STA FRT1 SAVE IT 3301 03510 0 06 00372 ADD C10 GET NEW STACK TOP 3302 03511 0 04 00025 STA FNT SAVE IT 3303 03512 0 10 03011 JST IPDS SET UP THE PDS ABOVE NEW ENTRY 3304 03513 0 10 04632 JST PVN PROCESS INDEX VARIABLE NAME 3305 03514 0 01 03612 JMP FR07 CANNOT HAVE SUBSCRIPTED VARIABLE AS INDEX 3306 03515 0 10 04671 JST ASV LOCATE/ASSIGN THE VARIASLE 3307 03516 0 15 03530 STX FRT2 SAVE THE POINTER 3308 03517 0 02 00000 LDA 0 GET ITS DISPLACEMENT FROM SVT 3309 03520 0 07 00027 SUB SVT X 3310 03521 -0 04 03616 STA* FRT1 PUT IT IN FIRST WORD OF FN ENTRY 3311 03522 0 12 03616 IRS FRT1 X 3312 03523 0 02 00424 LDA C275 MAKE SURE '=' IS NEXT 3313 03524 0 10 03104 JST GCCK X 3314 03525 0 10 02443 JST EXPA EVALUATE THE FIRST EXPRESSION 3315 03526 0 10 03203 JST LCVL RESULT TO A 3316 03527 0 10 00000 JST H$22 ASSIGN THE VALUE TO THE VARIABLE 3317 03530 0 000000 FRT2 DAC ** 3318 03531 0 10 03047 JST GCHR NEXT CHARACTER MUST BE 3319 03532 0 11 00414 CAS C254 ',' OR 'TO' 3320 03533 100000 SKP X 3321 03534 0 01 03542 JMP FR02 IT'S A COMNA 3322 03535 0 11 00505 CAS TOC NOT COMMA, MAYBE 'TO' 3323 03536 100000 SKP NO 3324 03537 0 01 03542 JMP FR02 IT'S 'TO' 3325 03540 0 10 05243 JST ERR ERROR...FOR DELIMITER 3326 03541 143304 BCI 1,FD
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 88

3327 * 3328 03542 140040 FR02 CRA EVALUATE THE SECOND EXPRESSION 3329 03543 0 10 02443 JST EXPA X 3330 03544 0 10 00000 JST S$22 COMPARE SECOND WITH FIRST 3331 03545 0 000041 DAC CVAL X 3332 03546 100400 SPL X 3333 03547 0 01 03556 JMP FR03 FIRST IS SMALLER, OK 3334 03550 0 02 00041 LDA CVAL SWAP THE VALUES 3335 03551 0 13 00043 IMA LVAL X 3336 03552 0 04 00041 STA CVAL X 3337 03553 0 02 00042 LDA CVAL+1 X 3338 03554 0 13 00044 IMA LVAL+1 X 3339 03555 0 04 00042 STA CVAL+1 X 3340 03556 0 10 00000 FR03 JST L$22 PUT LOW VALUE EXPRESSION IN 2ND AND 3RD 3341 03557 0 000043 DAC LVAL WORDS OF ENTRY 3342 03560 0 10 03614 JST FRST X 3343 03561 0 10 03203 JST LCVL PUT HIGH VALUE EXPRESSION IN 4TH AND 5TH 3344 03562 0 10 03614 JST FRST WORDS OF ENTRY 3345 03563 0 10 03047 JST GCHR SEE IF A THIRD EXPRESSION IS COMING 3346 03564 0 11 00414 CAS C254 TEST FOR ',' 3347 03565 100000 SKP NO 3348 03566 0 01 03576 JMP FR04 YES 3349 03567 0 11 00502 CAS STPC MAYBE 'STEP' 3350 03570 100000 SKP NO 3351 03571 0 01 03576 JMP FR04 YES 3352 03572 0 10 03065 JST UCHR LOOK AT CURRENT CHARACTER LATER 3353 03573 0 10 00000 JST L$22 SET STEP =1 BY DEFAULT 3354 03574 0 000444 DAC F1 X 3355 03575 0 01 03601 JMP FR05 X 3356 03576 140040 FR04 CRA EVALUATE THE THIRD EXPRESSION 3357 03577 0 10 02443 JST EXPA X 3358 03600 0 10 03203 JST LCVL GET THE RESULT 3359 03601 0 10 03614 FR05 JST FRST STEP VALUE TO WORDS 6 + 7 OF ENTRY 3360 03602 0 10 03116 JST GDLM DELIMITER MUST BE NEXT (: OR C/R) 3361 03603 0 07 00401 SUB C215 IF C/R, THEN LAST WORD OF ENTRY IS 3362 03604 100040 SZE ZERO, ELSE IT IS CURRENT SBP 3363 03605 0 02 00037 LDA SBP X 3364 03606 000201 IAB X 3365 03607 0 02 00034 LDA SIP 8TH WORD OF ENTRY IS POINTER TO THIS LINE 3366 03610 0 10 03614 JST FRST SET 8TH AND 9TH WORDS 3367 03611 0 01 04574 JMP SEX GO PROCESS NEXT STATEMENT 3368 * 3369 * 3370 03612 0 10 05243 FR07 JST ERR REPQRT INDEX VARIABLE ERROR 3371 03613 144726 BCI 1,IV X 3372 * 3373 * 3374 * FRST: STORE WORD-PAIR 3375 * 3376 * THE WORD PAIR IN A + B ARE STORED IN THE
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 89

3377 * TABLE STARTING AT THE ADDRESS IN FRT1. FRT1 IS THEN 3378 * INCREMENTED BY TWO. 3379 * 3380 * 3381 03614 0 000000 FRST DAC ** 3382 03615 0 10 00000 JST H$22 STORE THE WORD PAIR 3383 03616 0 000000 FRT1 DAC ** X 3384 03617 0 12 03616 IRS FRT1 BUMP THE TABLE POINTER 3385 03620 0 12 03616 IRS FRT1 X 3386 03621 -0 01 03614 JMP* FRST RETURN 3387 * 3388 * 3389 * 3390 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 90

3391 * NEXT STATEMENT PROCESSOR 3392 * 3393 * 3394 * STATEMENT SYNTAX: 3395 * 3396 * <NEXT STATEMENT>:=NEXT<SIMPLE VARIABLE>[:|CIR] 3397 * 3398 * 3399 03622 0 10 04632 NEXT JST PVN PROCESS INDEX VARIABLE NAME 3400 03623 0 01 03612 JMP FR07 SUBSCRIPTED VARIABLE IS ILLEGAL INDEX 3401 03624 0 10 04721 JST LSV FIND NAME IN TABLE 3402 03625 0 01 03700 JMP NX01 ERROR ... UNDEFINED VARIABLE MEANS 3403 * THAT THIS IS AN UNMATCHED 'NEXT' 3404 03626 0 10 03116 JST GDLM CHECK FOR : OR C/R 3405 03627 0 02 00025 NX04 LDA FNT IS THE TABLE EMPTY ? 3406 03630 101040 SNZ 3407 03631 0 01 03700 JMP NX01 YES....NO 'FOR' FOR NEXT 3408 03632 0 07 00372 SUB C10 GET ADDRESS OF FIRST WORD OF TOP ENTRY 3409 03633 0 13 00000 IMA 0 SWAP WITH INDEX VARIABLE ADDRESS 3410 03634 0 04 03643 STA NXT1 SET LINKAGE TO VARIABLE IN A COUPLE 3411 03635 0 04 03647 STA NXT2 OF LOAD AND STORE CALLING SEQUENCES 3412 03636 0 07 00027 SUB SVT GET THIS VARIABLES DISP. FROM SVT 3413 03637 -0 07 00000 SUB* 0 DOES THIS 'NEXT' MATCH THE 3414 03640 100040 SZE LAST 'FOR'? 3415 03641 0 01 03675 JMP NX03 ....NO.... GO ABORT MOST RECENT FOR 3416 * AND TRY THE NEXT LOWER LEVEL 3417 03642 0 10 00000 JST L$22 GET CURRENT VALUE OF INDEX VARIABLE 3418 03643 0 000000 NXT1 DAC ** X 3419 03644 0 10 00000 JST A$22 ADD THE INCREMENT 3420 03645 1 000005 DAC 5,1 X 3421 03646 0 10 00000 JST H$22 SAVE THE NEW INDEX VARIABLE VALUE 3422 03647 0 000000 NXT2 DAC ** X 3423 03650 0 10 03207 JST SCVL IN CVAL ALSO FOR LATER REFERENCE 3424 03651 0 10 00000 JST S$22 IS IT GREATER THAN LOW 3425 03652 1 000001 DAC 1,1 RANGE VALUE? 3426 03653 100400 SPL X 3427 03654 0 01 03673 JMP NX02 NO....GO TERMINATE THE LOOP 3428 03655 0 10 00000 JST L$22 IS IT LESS THAN HIGH 3429 03656 1 000003 DAC 3,1 RANGE VALUE? 3430 03657 0 10 00000 JST S$22 X 3431 03660 0 000041 DAC CVAL X 3432 03661 100400 SPL X 3433 03662 0 01 03673 JMP NX02 NO....GO TERMINATE LOOP 3434 03663 0 10 00000 JST L$22 GET POINTERS TO BEGINNING OF RANGE 3435 03664 1 000007 DAC 7,1 X 3436 03665 0 04 00034 NX05 STA SIP SET STATEMENT INDEX POINTER 3437 03666 000201 IAB SET SOURCE BYTE POINTER 3438 03667 0 04 00037 STA SBP X 3439 03670 101040 SNZ IS THE 'FOR' THE LAST START ON ITS LINE? 3440 03671 0 01 04600 JMP ASQ YES.. GO PROCESS AT LINE FOLLOWING THE FOR
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 91

3441 03672 0 01 03213 JMP ESMT NO..GO EXECUTE NEXT STMT ON SAME LINE 3442 * 3443 03673 0 10 03702 NX02 JST DFSE DELETE USED UP FOR STACK ENTRY 3444 03674 0 01 04574 JMP SEX PROCEED TO THE NEXT STATEMENT 3445 * 3446 * 3447 03675 0 10 03702 NX03 JST DFSE ABORT HIGHEST 'FOR' 3448 03676 0 35 03643 LDX NXT1 RESTORE X TO AVOID TROUBLE 3449 03677 0 01 03627 JMP NX04 GO TEST THIS FOR LEVEL FOR A MATCH 3450 * 3451 * 3452 03700 0 10 05243 NX01 JST ERR REPORT 'NEXT' ERROR 3453 03701 147330 BCI 1,NX X 3454 * 3455 * 3456 * DFSE - DELETE HIGHEST FOR STACK ENTRY 3457 * 3458 * 3459 03702 0 000000 DFSE DAC ** 3460 03703 0 02 03711 LDA M11 RETURN 9 WORDS TO FREE STORAGE 3461 03704 0 10 03041 JST UFSC X 3462 03705 0 02 00025 LDA FNT DECREMENT FOR STACK HIGH POINTER 3463 03706 0 07 00373 SUB C11 X 3464 03707 0 11 00024 CAS FNB IS THE STACK NOW EMPTY ? 3465 03710 0 01 03713 JMP *+3 ........NO........ 3466 03711 177767 M11 OCT -11 NEVER CAN EXECUTE THIS WORD 3467 03712 140040 CRA YES ... POINTERS MUST BE CLEARED 3468 03713 0 04 00025 STA FNT SET STACK HIGH POINTER 3469 03714 101040 SNZ IF STACK NOW EMPTY, CLEAR STACK 3470 03715 0 04 00024 STA FNB LOW POINTER 3471 03716 0 10 03011 JST IPDS RE-INITIALIZE THE PUSH DOWN STACK 3472 03717 -0 01 03702 JMP* DFSE RETURN FROM WHENCE WE CAME 3473 * 3474 * 3475 * 3476 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 92

3477 * GOSUB STATEMENT PROCESSOR 3478 * 3479 * 3480 * STATEMENT SYNTAX: 3481 * 3482 * <GOSUB STATEMENT>:=GOSUB<LINE NUMBER>[:|C/R] 3483 * 3484 * 3485 * 3486 03720 0 02 00036 GOSB LDA RTP SEE IF RETURN STACK IS FULL 3487 03721 0 11 00477 CAS RTM X 3488 03722 0 10 05243 JST ERR YES...>8 OUTSTANDING GOSUBS 3489 03723 143723 BCI 1,GS X 3490 03724 0 10 04556 JST ISN GET STMT NUMBER AND LEAVE IT IN SNUM 3491 03725 0 02 00034 LDA SIP FIRST WORD OF ENTRY IS 3492 03726 -0 04 00036 STA* RTP POINTER TO THIS STATEMENT 3493 03727 0 10 03116 JST GDLM MAKE SURE : OR C/R IS NEXT 3494 03730 0 05 00401 ERA C215 TEST FOR CARRIAGE RETURN 3495 03731 100040 SZE IF IT IS, SECOND WORD OF ENTRY = 0 3496 03732 0 02 00037 LDA SBP OTHERWISE SBP TO NEXT STMT ON THIS LINE 3497 03733 0 12 00036 IRS RTP X 3498 03734 -0 04 00036 STA* RTP 3499 03735 0 12 00036 IRS RTP X 3500 03736 0 01 03326 JMP GOT2 NOW HANDLE LIKE A 'GOTO' 3501 * 3502 * 3503 * 3504 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 93

3505 * RETURN STATEMENT PROCESSOR 3506 * 3507 * 3508 * STATEMENT SYNTAX: 3509 * 3510 * <RETURN STATEMENT>:=RETURN[:|C/R] 3511 * 3512 * 3513 * 3514 03737 0 10 03116 RTRN JST GDLM MAKE SURE : OR C/R IS NEXT 3515 03740 0 02 00036 LDA RTP GET RETURN STACK POINTER 3516 03741 0 11 00476 CAS RTB CHECK FOR EMPTY STACK 3517 03742 0 01 03745 JMP *+3 TABLE NOT EMPTY 3518 03743 0 10 05243 JST ERR ERROR...RETURN WITHOUT A GOSUB 3519 03744 151324 BCI 1,RT X 3520 03745 0 07 00376 SUB C2 DELETE LAST ENTRY 3521 03746 0 04 00036 STA RTP SAVE UPDATED POINTER 3522 03747 0 10 00000 JST L$22 FETCH SIP AND SBP TO LAST 3523 03750 -0 000036 DAC* RTP GOSUB STATEMENT 3524 03751 0 01 03665 JMP NX05 GO EXECUTE PROGRAM TRANSFER SEQUENCE 3525 * 3526 * 3527 * 3528 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 94

3529 * CALL STATEMENT PROCESSOR 3530 * 3531 * 3532 * STATEMENT SYNTAX: 3533 * 3534 * <CALL STATEMENT>:=CALL(<SUBROUTINE IDENTIFIER<[, 3535 * <SUBROUTINE PARAMETER>](0,*)) 3536 * 3537 * <SUBROUTINE IDENTIFIER>:=<EXPRESSION> 3538 * 3539 * <SUBROUTINE PARAMETER>:=<VARIABLE NAME>|<EXPRESSION> 3540 * 3541 * 3542 * 3543 03752 0 02 00410 CALL LDA C250 GET LEFT PAREN 3544 03753 0 10 03104 JST GCCK X 3545 03754 0 04 00312 STA CLT1 CLEAR ARGUMENT COUNTER 3546 03755 0 04 00313 STA CLT2 CLEAR <EXPRESSION> COUNTER 3547 03756 0 10 02443 JST EXPA EVALUATE SUBROUTINE IDENTIFIER 3548 03757 0 10 03203 JST LCVL CONVERT RESULT TO INTEGER 3549 03760 0 10 00000 JST IFLT X 3550 03761 0 01 04064 JMP CL01 ERROR ... IDENTIFIER OUT OF RANGE 3551 03762 0 11 00370 CAS C0 PERFORM EXCLUSIVE RANGE CHECK 3552 03763 0 11 00442 CAS CMAX X 3553 03764 0 01 04064 JMP CL01 ERROR ... OUT OF RANGE 3554 03765 0 01 04064 JMP CL01 ERROR ... OUT OF RANGE 3555 03766 0 06 00515 ADD CJST FORM SUBROUTINE CALL 3556 03767 0 04 00230 STA IBUF PUT IT AT START OF CALLING SEQUENCE 3557 03770 0 10 03047 CL05 JST GCHR CHECK EXPRESSION DELIMITER 3558 03771 0 11 00414 CAS C254 COMMA ? 3559 03772 100000 SKP NO 3560 03773 0 01 04025 JMP CL02 ......YES...... MORE ARGUMENTS FOLLOW 3561 03774 0 10 03065 JST UCHR NOT COMMA, MUST BE RIGHT PAREN 3562 03775 0 02 00411 LDA C251 X 3563 03776 0 10 03104 JST GCCK X 3564 03777 0 10 03116 JST GDLM C/R OR : MUST FOLLOW RIGHT PAREN 3565 04000 0 02 00312 LDA CLT1 GET ARGUMENT COUNT 3566 04001 0 04 00000 STA 0 IN X TO GET AT END OF PARAMETER LIST 851356603 3567 04002 0 07 00376 SUB C2 MORE THAN ONE ARGUMENT ? 3568 04003 100400 SPL X 3569 04004 0 01 04010 JMP *+4 ...NO... LIST TERMINATOR NOT NEEDED 3570 04005 140040 CRA INSERT ZERO WORD AT END OF PARAMETER LIST 3571 04006 1 04 00231 STA WORK,1 FOR FORTRAN COMPATIBILITY 3572 04007 0 12 00000 IRS 0 ACCOUNT FOR WORD JUST INSERTED 3573 04010 0 02 00530 LDA CJMP INSERT RETURN JUMP AT 3574 04011 1 04 00231 STA WORK,1 OF CALLING SEQUENCE 3575 04012 0 01 00230 JMP IBUF GO CALL THE SUBROUTINE 3576 * 3577 * HERE WHEN SUBROUTINE RETURNS 3578 *
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 95

3579 04013 0 02 00313 CL06 LDA CLT2 ANY JUNK ON THE PUSH DOWN STACK ? 3580 04014 101040 SNZ X 3581 04015 0 01 04574 JMP SEX ...NO... PROCEED TO THE NEXT STATEMENT 3582 04016 140407 TCA ESTABLISH COUNTER TO CLEAR THE STACK 3583 04017 0 04 00000 STA 0 X 3584 04020 0 10 03031 JST POP REMOVE A REAL NUMBER FROM THE STACK 3585 04021 0 10 03031 JST POP X 3586 04022 0 12 00000 IRS 0 BUMPT THE COUNTER 3587 04023 0 01 04020 JMP *-3 MORE TO GO 3588 04024 0 01 04574 JMP SEX PROCEED TO THE NEXT STATEMENT 3589 * 3590 04025 0 10 03054 CL02 JST XCHR SEE IF ISOLATED VARIABLE NAME 3591 04026 0 10 03155 JST ALFA X 3592 04027 0 01 04046 JMP CL03 NO ... IT MUST BE AN EXPRESSION 3593 04030 0 02 00037 LDA SBP MARK START OF NAME 3594 04031 0 04 00314 STA CLT3 X 3595 04032 0 10 04632 JST PVN ISOLATE/CLASSIFY VARIABLE NAME 3596 04033 0 10 04751 JST ADV LOCATE/ASSIGN DIMENSIONED VARIABLE 3597 04034 0 10 04671 JST ASV LOCATE/ASSIGN SIMPLE VARIABLE 3598 04035 0 10 03054 JST XCHR SEE IF VARIABLE NAME IS PART OF A 3599 04036 0 11 00414 CAS C254 BIGGER EXPRESSION 3600 04037 100000 SKP POSSIBLE 3601 04040 0 01 04056 JMP CL04 NO ... WE HAVE ISOLATED A PARAMETER 3602 04041 0 05 00411 ERA C251 TRY FOR ')' 3603 04042 101040 SNZ X 3604 04043 0 01 04056 JMP CL04 VARIABLE NAME STANDS ALONE 3605 04044 0 02 00314 LDA CLT3 IT'S PART OF AN EXPRESSION .... 3606 04045 0 04 00037 STA SBP ....RESET TO START OF NAME 3607 04046 140040 CL03 CRA EVALUATE EXPRESSION 3608 04047 0 10 02443 JST EXPA X 3609 04050 0 35 00035 LDX PDLP SET PARAMETER ADDRESS IN X 3610 04051 0 10 03203 JST LCVL PUT PARAMETER VALUE ON THE STACK 3611 04052 0 10 03022 JST PUSH X 3612 04053 000201 IAB X 3613 04054 0 10 03022 JST PUSH X 3614 04055 0 12 00313 IRS CLT2 BUMP <EXPRESSION> COUNT 3615 04056 0 02 00000 CL04 LDA 0 GET PARAMETER ADDRESS 3616 04057 0 35 00312 LDX CLT1 X POINTS TO NEXT WORD IN CALLING SEQ) 3617 04060 1 04 00231 STA WORK,1 SET PARAMETER ADDRESS IN CALLING SEQ. 3618 04061 0 12 00312 IRS CLT1 BUMP PARAMETER COUNT 3619 04062 0 01 03770 JMP CL05 GO TEST DELIMITER 3620 * 3621 04063 0 000000 DAC ** UNDEFINED SUBROUTINE ENTRY 3622 04064 0 10 05243 CL01 JST ERR REPORT SUBROUTINE SELECTION ERROR 3623 04065 151723 BCI 1,SS X 3624 * 3625 * 3626 * 3627 * 3628 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 96

3629 * READ AND INPUT STATEMENT PROCESSOR 3630 * 3631 * 3632 * STATEMENT SYNTAX: 3633 * 3634 * <READ STATEMENT>:=READ<READ LIST>[:|C/R] 3635 * 3636 * <INPUT STATEMENT>:=INPUT<READ LIST>[:|C/R] 3637 * 3638 * <READ LIST>:=<VARIABLE>[,<VARIABLE>](0,*) 3639 * 3640 * 3641 * 3642 04066 140040 INPT CRA CLEAR DATA AVAILIBILITY POINTER 3643 04067 0 04 04137 STA ISBP X 3644 04070 0 02 04136 LDA IDAC SET LINKAGE TO INPT DATA AND TO DATA FETCH 3645 04071 100000 SKP X 3646 04072 0 02 04151 READ LDA RDAC SET LINKAGE TO READ DATA AND DATA FETCH 3647 04073 0 04 00046 STA RDT1 SAVE PARAMETER LINKAGE 3648 04074 0 10 04632 RD02 JST PVN PROCESS LIST VARIABLE NAME 3649 04075 0 10 04751 JST ADV LOCATE/ASSIGN SUBSCRIPTED VARIABEL 3650 04076 0 10 04671 JST ASV LOCATE/ASSIGN SIMPLE VARIABLE 3651 04077 0 15 04121 STX RDT2 SAVE THE VARIABLE POINTER 3652 04100 0 35 00046 LDX RDT1 RDT1 POINTS TO DATA SBP 3653 04101 -0 02 00000 LDA* 0 IS DATA AVAILABLE ? 3654 04102 101040 SNZ X 3656 04103 1 01 00001 JMP 1,1 NO ... GO GET SOME MORE 3660 04104 0 02 00037 RD04 LDA SBP SWAP STMT POINTER WITH 3661 04105 -0 13 00046 IMA* RDT1 DATA POINTER 3662 04106 0 04 00037 STA SBP X 3663 04107 140040 CRA EVALUATE THE NEXT DATA ITEM 3664 04110 0 10 02443 JST EXPA X 3665 04111 0 10 03047 JST GCHR TEST FOR END OF DATA LIST 3666 04112 0 10 03173 JST DLCK X 3667 04113 0 01 04131 JMP RD01 NO....GO INSURE THAT SEPERATOR IS A COMMA 3668 04114 140040 CRA YES...CLEAR DATA AVAILIBILITY INDICATOR 3669 04115 -0 13 00046 RD03 IMA* RDT1 X 3670 04116 0 04 00037 STA SBP AND RESTORE STATEMENT POINTER 3671 04117 0 10 03203 JST LCVL GET VALUE OF DATA ITEM 3672 04120 0 10 00000 JST H$22 ASSIGN IT TO READ LIST ITEM 3673 04121 0 000000 RDT2 DAC ** X 3674 04122 0 10 03047 JST GCHR AT END OF STATEMENT ? 3675 04123 0 11 00414 CAS C254 X 3676 04124 100000 SKP X 3677 04125 0 01 04074 JMP RD02 NO....GO PROCESS NEXT LIST ITEM 3678 04126 0 10 03065 JST UCHR YES...MAKE SURE DELIMITER IS : OR C/R 3679 04127 0 10 03116 JST GDLM X 3680 04130 0 01 04574 JMP SEX GO PROCESS NEXT STATEMENT 3681 * 3682 04131 0 10 03065 RD01 JST UCHR IF NOT DELIMITER, IT MUST BE A COMMA
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 97

3683 04132 0 02 00414 LDA C254 X 3684 04133 0 10 03104 JST GCCK X 3685 04134 0 02 00037 LDA SBP UPDATE DATA POINTER 3686 04135 0 01 04115 JMP RD03 X 3687 * 3688 04136 0 004137 IDAC DAC *+1 LINKAGE TO INPUT DATA PARAMETERS 3689 04137 000000 ISBP OCT 0 POINTER TO INPUT DATA 3690 * 3691 * HERE TO READ DATA LIST FROM ASR 3692 * 3693 04140 0 02 00037 LDA SBP SAVE CURRENT STATEMENT BYTE POINTER DURING 3694 04141 0 04 04137 STA ISBP THE DATA FETCH 3695 04142 0 02 00406 LDA C241 PERFIX LINE WITH '!' 3696 04143 0 10 01504 JST ILIN INPUT LINE FROM ASR 3698 04144 0 000460 INT1 DAC IBUF+IBUF READ INTO DATA INPUT BUFFER 3702 04145 0 02 04144 LDA INT1 CALCULATE SBP OF DATA LINE 3706 04146 0 13 04137 IMA ISBP SWAP WITH CURRENT STMT BYTE POINTER 3707 04147 0 04 00037 STA SBP RESTORE CURRENT STATEMENT POINTER 3708 04150 0 01 04104 JMP RD04 RETURN TO INPUT PROCESSING 3709 * 3710 * HERE FOR READ STATEMENT DATA FETCH 3711 * 3712 04151 0 004153 RDAC DAC *+2 LINKAGE TO READ PARAMETERS 3713 04152 0 000000 RSIP DAC ** POINTER TO CURRENT DATA STATEMENT 3714 04153 0 000000 RSBP DAC ** POINTER TO CURRENT DATA ITEM 3715 * 3716 04154 0 10 04167 JST RD06 SET STMT PNTRS FOR DATA STMT SEARCH 3717 04155 0 02 00443 LDA DTAC FIND THE NEXT DATA STATEMENT 3718 04156 0 10 04457 JST SSR X 3719 04157 0 01 04162 JMP RD07 RAN OUT OF DATA 3720 04160 0 10 04167 JST RD06 SWAP BACK THE POINTERS 3721 04161 0 01 04104 JMP RD04 CONTINUE WITH READ STATEMENT 3722 * 3723 04162 0 10 04167 RD07 JST RD06 RESTORE THE POINTERS 3724 04163 140040 CRA RESET DATA AVAILABILITY POINTER 3725 04164 0 04 04153 STA RSBP X 3726 04165 0 10 05243 JST ERR REPORT THE ERROR 3727 04166 142301 BCI 1,DA X 3728 * 3729 * HERE TO SWAP DATA POINTERS 3730 * 3731 04167 0 000000 RD06 DAC ** 3732 04170 0 02 04152 LDA RSIP SWAP SIP WITH RSIP 3733 04171 0 13 00034 IMA SIP X 3734 04172 0 04 04152 STA RSIP X 3735 04173 0 02 04153 LDA RSBP SWAP SBP WITH RSBP 3736 04174 0 13 00037 IMA SBP X 3737 04175 0 04 04153 STA RSBP X 3738 04176 -0 01 04167 JMP* RD06 RETURN 3745 *
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 98

3746 * 3747 * 3748 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 99

3749 * RESTORE STATEMENT PROCESSOR 3750 * 3751 * 3752 * STATEMENT SYNTAX: 3753 * 3754 * <RESTORE STATEMENT>:=RESTORE[:|C/R] 3755 * 3756 * 3757 * 3758 04177 0 10 03116 RSTR JST GDLM MAKE SURE : OR C/R IS NEXT 3759 04200 0 10 04202 JST REST INITIALIZE DATA STMT POINTERS 3760 04201 0 01 04574 JMP SEX GO PROCESS NEXT STATEMENT 3761 * 3762 * 3763 * REST - RESET DATA STATEMENT POINTERS 3764 * 3765 * 3766 04202 0 000000 REST DAC ** 3767 04203 0 02 00032 LDA SIB SET DATA STMT POINTER TO JUST BELOW START 3768 04204 0 07 00376 SUB C2 OF STMT INDEX, SO THAT THE FIRST DATA 3769 04205 0 04 04152 STA RSIP STMT WILL BE FOUND DURING THE NEXT READ 3770 04206 140040 CRA SET RSBP TO INDICATE THAT A SEARCH 3771 04207 0 04 04153 STA RSBP FOR A DATA STMT WILL HAVE TO BE PERFORMED 3772 04210 -0 01 04202 JMP* REST RETURN 3773 * 3774 * 3775 * 3776 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 100

3777 * PRINT STATEMENT PROCESSOR 3778 * 3779 * 3780 * STATEMENT SYNTAX: 3781 * 3782 * <PRINT STATEMENT>:=PRINT[<PRINT LIST>](0,1) 3783 * 3784 * <PRINT LIST>:=<PRINT ITEM>[[,|;]<PRINT ITEM>](0,*)[,|;](0,1) 3785 * 3786 * <PRINT ITEM>:=<EXPRESSION>|<MESSAGE>|<MESSAGE><EXPRESSION>| 3787 * TAB(<EXPRESSION>) 3788 * 3789 * <MESSAGE>:="[<ALPHABETIC CHARACTER>|<DIGIT>| 3790 * <SPECIAL CHARACTER>](1,*)" 3791 * 3792 * 3793 * 3794 04211 0 10 03047 PRNT JST GCHR TEST FOR EMPTY PRINT LIST 3795 04212 0 10 03173 JST DLCK (: OR C/R IMMEADIATLY FOLLOWING 'PRINT') 3796 04213 0 01 04222 JMP PR11 NOT EMPTY 3797 04214 0 10 00000 PR04 JST LFCR ADVANCE TO NEXT LINE ON ASR 3798 04215 0 01 04574 JMP SEX GO PROCESS NEXT STATEMENT 3799 * 3800 04216 0 10 03047 PR01 JST GCHR GET 1ST CHARACTER OF PRINT ITEM 3801 04217 0 10 03173 JST DLCK A WAS THERE A DANNGLING COMMA OR ; 3802 04220 100000 SKP NO 3803 04221 0 01 04574 JMP SEX YES...EXIT WITHOUT LINE ADVANCE 3804 04222 0 11 00407 PR11 CAS C242 TEST FOR QUOTED TEXT STRING 3805 04223 100000 SKP NO 3806 04224 0 01 04303 JMP PR02 YES...GO PRINT THE STRING 3807 04225 0 05 00503 ERA TABC TEST FOR TAB OPERATION 3808 04226 101040 SNZ X 3809 04227 0 01 04254 JMP PR03 YES...GO PROCESS TAB 3810 * 3811 * HERE TO PRINT VALUE OF AN EXPRESSION 3812 * 3813 04230 0 10 03065 JST UCHR STEP BACK OVER LEADING CHAR OF EXPR 3814 04231 140040 CRA EVALUATE THE EXPRESSION 3815 04232 0 10 02443 JST EXPA X 3816 04233 140040 CRA NO CHARACTER SURPRESSION FOR THIS 3817 04234 0 10 02154 JST PCVL PRINT THE RESULT 3818 * 3819 * HERE TO WORK ON PRINT ITEM DELIMITER 3820 * 3821 04235 0 10 03047 PR10 JST GCHR FETCH THE DELIMITING CHARACTER 3822 04236 0 10 03173 JST DLCK IS IT TERMINAL (: OR C/R) ? 3823 04237 100000 SKP NO 3824 04240 0 01 04214 JMP PR04 YES...ADVANCE TO NEXT LINE AND EXIT 3825 04241 0 11 00423 CAS C273 IS IT A SEMI-COLON ? 3826 04242 100000 SKP NO
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 101

3827 04243 0 01 04216 JMP PR01 YES...NO SPECIAL SPACEING REQUIRED 3828 04244 0 05 00414 ERA C254 IT MUST BE COMMA, 3829 04245 100040 SZE OR ELSE AN ERROR 3830 04246 0 01 04323 JMP PR05 GO REPORT FIELD DELIMITER ERROR 3831 04247 0 06 00375 ADD C16 FIND NEXT TAB POSITION 3832 04250 0 11 00045 CAS CPOS IS COLUMN IN A > CURRENT CARRIAGE POSITION 3833 04251 0 01 04266 JMP PR06 YES...GO ADVANCE TO POSITION IN A 3834 04252 0 01 04216 JMP PR01 NO TAB REQUIRED...PROCESS NEXT LIST ITEM 3835 04253 0 01 04247 JMP *-4 NO...TRY NEXT TAB POSITION 3836 * 3837 * HERE TO HANDLE 'TAB' FUNCTION 3838 * 3839 04254 0 10 02443 PR03 JST EXPA EVALUATE THE EXPRESSION 3840 04255 0 02 00411 LDA C251 MAKE SURE IT ENDS WITH A 3841 04256 0 10 03104 JST GCCK RIGHT PAREN 3842 04257 0 10 03047 JST GCHR IF NEXT CHARACTER IS : OR C/R, THEN NO POINT 3843 04260 0 10 03173 JST DLCK IN DOING A 'TAB', AS HE 3844 04261 100000 SKP WILL GET A C/R ANYWAY 3845 04262 0 01 04214 JMP PR04 X 3846 04263 0 10 03203 JST LCVL GET RESULT OF THE EXPRESSION 3847 04264 0 10 00000 JST IFLT CONVERT TO INTEGER 3848 04265 0 01 04301 JMP PR07 TOO BIG...GO TO NEXT LINE 3849 04266 0 11 00473 PR06 CAS MCOL IS IT TAB TO BEYOND END OF LINE ? 3850 04267 0 01 04301 JMP PR07 YES...ADVANCE TO NEXT LINE 3851 04270 101000 NOP NO 3852 04271 0 04 00312 STA PRT1 SAVE TARGET COLUMN NUMBER 3853 04272 0 11 00045 PR09 CAS CPOS COMPARE WITH CURRENT POSITION 3854 04273 0 01 04276 JMP *+3 NOT THERE YET 3855 04274 0 01 04216 JMP PR01 AT PROPER C 3856 04275 0 01 04216 JMP PR01 PAST IT...SO WHAT 3857 04276 0 10 02764 JST SPAC MOVE OVER A SPACE 3858 04277 0 02 00312 LDA PRT1 RETRIEVE TARGET COLUMN NUMBER 3859 04300 0 01 04272 JMP PR09 GO TEST FOR COMPLETION 3860 * 3861 04301 0 10 00000 PR07 JST LFCR ADVANCE TO NEXT LINE 3862 04302 0 01 04216 JMP PR01 GO LOOK AT NEXT ITEM 3863 * 3864 * HERE TO OUTPUT TEXT STRING 3865 * 3866 04303 0 10 03047 PR02 JST GCHR GET THE NEXT CHARACTER OF THE STRING 3867 04304 0 11 00407 CAS C242 END OF STRING ? 3868 04305 100000 SKP NO 3869 04306 0 01 04311 JMP PR08 YES...GO CLOSE UP 3870 04307 0 10 00000 JST OTA1 OUTPUT THE CHARACTER 3871 04310 0 01 04303 JMP PR02 CONTINUE 3872 * 3873 04311 0 10 03047 PR08 JST GCHR LOOK AT CHARACTER FOLLOWING '"' 3874 04312 0 11 00414 CAS C254 IF COMMA OR SEMI COLON, 3875 04313 100000 SKP PERFORM STANDARD INTERITEM PROCESSING 3876 04314 0 01 04236 JMP PR10+1 IT'S A COMMA
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 102

3877 04315 0 11 00423 CAS C273 MAYBE A SEMI COLON 3878 04316 100000 SKP NO 3879 04317 0 01 04236 JMP PR10+1 YES 3880 04320 0 10 03173 JST DLCK IS IT A TERMINAL DELIMITER ? 3881 04321 0 01 04222 JMP PR11 NO....IT MUST BE START OF NEXT ITEM 3882 04322 0 01 04214 JMP PR04 YES...ADVANCE ASR LINE AND EXIT 3883 * 3884 * 3885 04323 0 10 05243 PR05 JST ERR REPORT ITEM DELIMITER ERROR 3886 04324 150304 BCI 1,PD X 3887 * 3888 * 3889 * 3890 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 103

3891 * DEF STATEMENT PROCESSOR 3892 * 3893 * 3894 * STATEMENT SYNTAX: 3895 * 3896 * <DEF STATEMENT>:=DEFFN<ALPHABETIC CHARACTER> 3897 * (<SIMPLE VARIABLE>)=<EXPRESSION>[:|C/R] 3898 * 3899 * 3900 04325 0 02 00034 DEF LDA SIP ARE WE IN COMMAND MODE ? 3901 04326 101040 SNZ X 3902 04327 0 01 04425 JMP REM ......YES...... IGNORE THE DEFINITION 3903 04330 0 10 03047 JST GCHR TEST FOR 'FN' 3904 04331 0 05 00507 ERA DEFF X 3905 04332 100040 SZE X 3906 04333 0 01 04421 JMP DF01 NOT HTERE...REPORT ERROR 3907 04334 0 10 04606 JST SDFI IS NAME ALREADY IN FUNCTION INDEX ? 3908 04335 100000 SKP NO....AN ENTRY MUST BE APPENDED 3909 04336 0 01 04377 JMP DF02 YES...REDEFINE THE FUNCTION 3910 04337 0 02 00426 LDA C3 MAKE SURE THERE IS ROOM 3911 04340 0 10 03041 JST UFSC FOR ANOTHER ENTRY 3912 04341 0 02 00025 LDA FNT DOES FOR-NEXT TABLE HAVE TO BE MOVED 3913 04342 101040 SNZ X 3914 04343 0 01 04364 JMP DF03 NO 3918 04344 0 04 00000 STA 0 SET X TO ADDRESS OF FIRST WORD TO BE MOVED 3919 04345 0 06 00426 ADD C3 UPDATE THE FOR-NEXT TABLE HIGH POINTER 3923 04346 0 04 00025 STA FNT X 3924 04347 0 07 00024 SUB FNB GET NO. OF WORDS TO BE MOVED 3925 04350 0 07 00376 SUB C2 X 3926 04351 140407 TCA X 3927 04352 0 04 00076 STA TMP1 X 3928 04353 1 02 00000 DF04 LDA 0,1 MOVE A WORD UP 3 LOCATIONS 3929 04354 1 04 00003 STA 3,1 X 3930 04355 0 02 00000 LDA 0 DECREMENT THE TABLE POINTER 3931 04356 0 07 00371 SUB C1 X 3932 04357 0 04 00000 STA 0 X 3933 04360 0 12 00076 IRS TMP1 BUMP THE WORD COUNTER 3934 04361 0 01 04353 JMP DF04 MORE TO BE MOVED 3935 04362 0 12 00000 IRS 0 GET ADDRESS OF LOWEST WORD IN FOR TABLE 3937 04363 0 15 00024 STX FNB UPDATE TABLE BASE POINTER 3943 04364 0 02 00022 DF03 LDA DFB IS FUNCTION INDEX EMPTY 3944 04365 100040 SZE X 3945 04366 0 01 04416 JMP DF05 NO...GO APPEND ENTRY 3946 04367 0 02 00021 LDA PTH START FUNCTION INDEX ON TOP 3947 04370 141206 AOA OF PROGRAM TEXT STORAGE 3948 04371 0 04 00022 STA DFB X 3949 04372 0 06 00376 ADD C2 GET TABLE HIGH ADDRESS 3950 04373 0 04 00023 DF06 STA DFT SET FUNCTION TABLE HIGH 3951 04374 0 07 00376 SUB C2 GET ADDRESS OF FIRST WORD OF THIS ENTRY 3955 04375 0 04 00000 STA 0 AND LEAVE IT IN THE INDEX FOR TABLE ACCESSING
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 104

3956 04376 0 10 03011 JST IPDS REINITIALIZE THE PUSH DOWN STACK 3957 04377 0 02 00074 DF02 LDA CHAR PUT FUNCTION NAME IN FIRST WORD OF ENTRY 3958 04400 1 04 00000 STA 0,1 X 3959 04401 0 02 00410 LDA C250 MAKE SURE '(' FOLLOWS 3960 04402 0 10 03104 JST GCCK X 3961 04403 0 10 04632 JST PVN FORM THE DUMMY VARIABLE NAME 3962 04404 0 01 04423 JMP DF07 SUBSCRIPTED VARIABLES CANNOT BE DUMMY NAMES 3963 04405 0 02 00107 LDA VARN PLACE NAME IN SECOND WORD OF TBALE ENTRY 3964 04406 1 04 00001 STA 1,1 X 3965 04407 0 02 00411 LDA C251 MAKE SURE ')' IS NEXT 3966 04410 0 10 03104 JST GCCK X 3967 04411 0 02 00424 LDA C275 '=' MUST OCCUR NEXT 3968 04412 0 10 03104 JST GCCK X 3969 04413 0 02 00037 LDA SBP PLACE EXPRESSION POINTER IN 3970 04414 1 04 00002 STA 2,1 THIRD WORD OF ENTRY 3971 04415 0 01 04425 JMP REM GO PROCESS NEXT STATEMENT 3972 * 3973 04416 0 02 00023 DF05 LDA DFT APPEND ENTRY TO FUNCTION INDEX 3974 04417 0 06 00426 ADD C3 X 3975 04420 0 01 04373 JMP DF06 X 3976 * 3977 04421 0 10 05243 DF01 JST ERR REPORT MISSING 'FN' 3978 04422 143316 BCI 1,FN 3979 * 3980 * 3981 04423 0 10 05243 DF07 JST ERR REPORT DUMMY NAME ERROR 3982 04424 142326 BCI 1,DV X 3983 * 3984 * 3985 * 3986 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 105

3987 * REMARK STATEMENT PROCESSOR 3988 * 3989 * 3990 * STATEMENT SYNTAX: 3991 * <REM STATEMENT>:=REM[<ALPHABETIC CHARACTER>|<DIGIT>| 3992 * <SPECIAL CHARACTER>](0,*)[:|C/R] 3993 * 3994 * 3995 * 3996 04425 0 10 04540 REM JST SES SCAN UNTIL : OR C/R 3997 04426 0 01 04574 JMP SEX GO PROCESS NEXT STATEMENT 3998 * 3999 * 4000 * 4001 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 106

4002 * STOP AND END STATEMENT PROCESSORS 4003 * 4004 * 4005 * STATEMENT SYNTAX: 4006 * 4007 * <STOP STATEMENT>:=STOP[:|C/R] 4008 * <END STATEMENT>:=END[:|C/R] 4009 * 4010 * 4011 * 4012 04427 0 10 03116 EXIT JST GDLM GET TERMINAL DELIMITER 4013 04430 0 10 00000 EXT1 JST LFCR ADVANCE ASR LINE 4014 04431 0 10 02736 JST PLN PRINT LINE NUMBER 4015 04432 0 10 02747 JST TYPE PRINT 'EXIT' 4016 04433 0 004435 DAC EXT2 MESSAGE POINTER 4017 04434 0 01 01000 JMP CMOD RETURN TO COMMAND MODE 4018 * 4019 04435 120305 EXT2 BCI 2, EXI 04436 154311 4020 04437 152000 VFD 8,'324,8,'000 'T', MESSAGE TERMINATOR 4021 * 4022 * 4023 * 4024 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 107

4025 * ADVANCE TO NEXT SOURCE LINE 4026 * 4027 * 4028 * CALLING SEQUENCE: 4029 * 4030 * JST ADVS 4031 * ......RETURN IF BEYOND END OF SOURCE PROGRAM 4032 * ......RETURN IF NOT PAST END OF PROGRAM 4033 * 4034 * THIS RQUTINE WILL UPDATE THE STATEMENT INDEX 4035 * POINTER (SIP), AND SET THE SOURCE BYTE POINTER (SBP) 4036 * TO POINT TO THE FIRST BYTE IN THE NEW LINE. 4037 * 4038 * 4039 04440 0 000000 ADVS DAC ** 4040 04441 0 02 00034 LDA SIP UPDATE THE STATEMENT INDEX POINTER 4041 04442 0 06 00376 ADD C2 (2 WORDS PER ENTRY) 4042 04443 0 04 00034 STA SIP X 4043 04444 0 11 00033 CAS SIT TEST AGAINST TABLE TOP 4044 04445 0 01 04454 JMP AV01 TAKE OUT OF SOURCE RETURN 4045 04446 000000 OCT 0 NEVER CAN EXECUTE THIS WORD 4049 04447 0 04 00000 STA 0 SET INDEX FOR ACCESSING THE TABLE 4050 04450 1 02 00001 LDA 1,1 SET SBP FROM SECOND WORD OF ENTRY 4051 04451 0 04 00037 STA SBP X 4052 04452 0 12 04440 IRS ADVS BUMP THE RETURN POINTER 4053 04453 -0 01 04440 JMP* ADVS AND EXIT 4054 * 4055 04454 140040 AV01 CRA CLEAR SIP ON THE WAY OUT TO MAKE 4056 04455 0 04 00034 STA SIP THE MESSAGE '0 EXIT' WORK 4057 04456 -0 01 04440 JMP* ADVS AND LEAVE MOST HASTILY 4058 * 4059 * 4060 * 4061 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 108

4062 * STATEMENT SEARCH ROUTINE 4063 * 4064 * 4065 * CALLING SEQUENCE: 4066 * 4067 * LDA CODE A CONTAINS 8 BIT STATEMENT IDENTIFIER 4068 * JST SSR 4069 * ......RETURN IF STMT NOT FOUND 4070 * ......RETURN IF STMT FOUND 4071 * 4072 * THE STATEMENT IDENTIFIER IS THE NUMBER CORESPONDING TO 4073 * THE STATEMENTS NAME IS THE RESERVED IDENTIFIER LIST. THE 4074 * SEARCH IS STARTED AT THE LINE FOLLOWING THE LINE POINTED TO BY 4075 * THE STATEMENL INDEX POINTER, SIP. 4076 * 4077 * 4078 04457 0 000000 SSR DAC ** 4079 04460 0 04 00100 STA TMP3 SAVE THE TARGET 4080 04461 0 10 04440 SSR1 JST ADVS ADVANCE TO NEXT STATEMENT 4081 04462 -0 01 04457 JMP* SSR PAST END OF RROGRAM...RETURN 4082 04463 0 10 03047 SSR2 JST GCHR GET STMT IDENTIFIER 4083 04464 0 05 00100 ERA TMP3 COMPARE WITH SEARCH TARGET 4084 04465 101040 SNZ SKIP IF NOT A MATCH 4085 04466 0 01 04473 JMP SSR3 FOUND STMT OF TYPE WE'RE LOOKING FOR !!! 4086 04467 0 10 04540 JST SES SCAN FOR END OF CURRENT STATEMENT 4087 04470 0 11 00401 CAS C215 TEST FOR END OF PHYSICAL LINE 4088 04471 0 01 04463 JMP SSR2 NO....TEST NEXT STMT ON THIS LINE 4089 04472 0 01 04461 JMP SSR1 YES...GO LOOK AT NEXT LINE 4090 04473 0 12 04457 SSR3 IRS SSR BUMP RETURN POINTER TO RETURN 2 4091 04474 -0 01 04457 JMP* SSR AND EXIT 4092 * 4093 * 4094 * 4095 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 109

4096 * STATEMENT INDEX SEARCH ROUTINE 4097 * 4098 * 4099 * CALLING SEQUENCE: 4100 * 4101 * JST SISR 4102 * ......RETURN IF ENTRY NOT FOUND 4103 * ......RETURN IF FOUND 4104 * 4105 * THIS ROUTINE WILL SEARCH THE STATEMENT INDEX 4106 * FOR AN ENTRY WHOSE VALUE IS THE SAME AS SNUM. IF 4107 * A MATCH IS FOUND, SIP AND SBP ARE SET, AND THE SECOND 4108 * RETURN IS TAKEN. 4109 * 4110 * 4111 * 4112 04475 0 000000 SISR DAC ** 4113 04476 0 02 00033 LDA SIT SET TMP1 = END OF TABLE + 1 4114 04477 141206 AOA X 4115 04500 0 04 00076 STA TMP1 X 4116 04501 0 02 00032 LDA SIB GET TABLE LOW ADDRESS 4117 04502 0 11 00033 CAS SIT SEE IF TABLE IS EMPTY 4118 04503 -0 01 04475 JMP* SISR EXIT...NO MATCH IN AN EMPTY TABLE 4119 04504 000000 OCT 0 NEVER CAN EXECUTE THIS WURD 4120 04505 0 04 00077 STA TMP2 TMP2 = LOW ADDRESS OF TABLE 4121 04506 140040 CRA ZERO OUT SIP T0 ADVOID CHANCE 4122 04507 0 04 00034 STA SIP OF A FALSE EXIT 4123 04510 0 02 00076 SIS3 LDA TMP1 NEXT ENTRY TO CHECK 4124 04511 0 07 00077 SUB TMP2 IS (TMP1-TMP2)/4*2+TMP2 4125 04512 0404 76 LGR 2 X 4126 04513 0414 77 LGL 1 X 4127 04514 0 06 00077 ADD TMP2 X 4128 04515 0 13 00034 IMA SIP NEW ADDRESS IN SIP, LAST ADDR IN A 4129 04516 0 11 00034 CAS SIP IF SAME ENTRY IS CHECKED TWICE, THEN 4130 04517 100000 SKP TARGET IS NOT IN TABLE 4131 04520 -0 01 04475 JMP* SISR TAKE NOT FOUND RETURN 4132 04521 -0 02 00034 LDA* SIP GET VALUE OF THIS ENTRY 4133 04522 0 11 00050 CAS SNUM COMPARE WITH TARGET 4134 04523 0 01 04530 JMP SIS1 TOO HIGH 4135 04524 0 01 04533 JMP SIS2 FOUND IT !!! 4136 * 4137 04525 0 02 00034 LDA SIP TOO LOW..TRY REGION BETWEEN 4138 04526 0 04 00077 STA TMP2 SIP AND TMP1 NEXT 4139 04527 0 01 04510 JMP SIS3 X 4140 * 4141 04530 0 02 00034 SIS1 LDA SIP TOO HIGH...TRY REGION BETWEEN 4142 04531 0 04 00076 STA TMP1 TMP2 AND SIP NEXT 4143 04532 0 01 04510 JMP SIS3 X 4144 * 4146 04533 0 35 00034 SIS2 LDX SIP FOUND ENTRY ... PULL SOURCE BYTE
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 110

4152 04534 1 02 00001 LDA 1,1 POINTER FROM THE ENTRY 4153 04535 0 04 00037 STA SBP X 4154 04536 0 12 04475 IRS SISR BUMP THE RETURN ADDRESS 4155 04537 -0 01 04475 JMP* SISR AND EXIT 4156 * 4157 * 4158 * 4159 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 111

4160 * SCAN FOR END OF STATEMENT 4161 * 4162 * CALLING SEQUENCE: 4163 * 4164 * 4165 * JST SES 4166 * ......RETURN A CONTAINS STMT DELIMITER (: OR C/R) 4167 * 4168 * THIS ROUTINE WILL READ THROUGH THE CURRENT 4169 * SOURCE LINE UNTIL EITHER A : OR C/R IS DETECTED. 4170 * 4171 * 4172 04540 0 000000 SES DAC ** 4173 04541 0 10 03047 JST GCHR GET NEXT CHARACTER OF STMT 4174 04542 0 10 03173 JST DLCK TEST FOR : OR C/R 4175 04543 100000 SKP NO 4176 04544 -0 01 04540 JMP* SES YES...EXIT 4177 04545 0 11 00455 CAS INTF TEST FOR INTEGER CONSTANT 4178 04546 100000 SKP NO 4179 04547 0 01 04554 JMP SES1 YES...GO SKIP 2 CHARACTERS 4180 04550 0 05 00456 ERA RELF TEST FOR REAL CONSTANT 4181 04551 100040 SZE X 4182 04552 0 01 04541 JMP SES+1 NO...GO BACK TO LOOK AT NEXT CHARACTER 4183 04553 0 10 03077 JST GCPK SKIP TWO CHARACTERS 4184 04554 0 10 03077 SES1 JST GCPK DITTO 4185 04555 0 01 04541 JMP SES+1 GO LOOK AT THE NEXT CHARACTER 4186 * 4187 * 4188 * 4189 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 112

4190 * INPUT STATEMENT NUMBER 4191 * 4192 * 4193 * CALLING SEQUENCE: 4194 * 4195 * JST ISN 4196 * ......RETURN STMT NO. IN A AND SNUM 4197 * 4198 * THIS ROUTINE CHECKS TO INSURE THAT A STATEMENT 4199 * NUMBER IS NEXT IN THE SQURCE TEXT, AND IF SO FORMS 4200 * THE SINGLE WQRD BINARY REPRESENTATION AND LEAVES 4201 * IT IN A AND SNUMU. IF NOT, A 'SN' ERROR IS REPORTED 4202 * TO THE USER. 4203 * 4204 * 4205 04556 0 000000 ISN DAC ** 4206 04557 0 10 03047 JST GCHR TEST NEXT CHARACTER FOR INTEGER FLAG 4207 04560 0 05 00455 ERA INTF (STMT NUMBERS ALWAYS LOOK LIKE INTEGERS) 4208 04561 100040 SZE SKIP IF IT IS 4209 04562 0 01 04572 JMP ISN1 NOT STMT NO. ... SOMETHING IS WRONG 4210 04563 0 10 03077 JST GCPK PACK THE INTEGER 4211 04564 0 04 00050 STA SNUM LEAVE IT IN SNUM 4212 04565 100040 SZE ZERO IS NOT A LEAGL STMT NO. 4213 04566 0 11 00501 CAS SNMX MAKE SURE NUMBER IS NOT TOO BIG 4214 04567 0 01 04572 JMP ISN1 TOO BAD ... NUMBER = 0 OR > 9999 4215 04570 -0 01 04556 JMP* ISN ...OK... RETURN 4216 04571 -0 01 04556 JMP* ISN ...OK... RETURN 4217 04572 0 10 05243 ISN1 JST ERR REPORT STATEMENT NUMBER ERROR 4218 04573 151716 BCI 1,SN X 4219 * 4220 * 4221 * 4222 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 113

4223 * COMMON STATEMENT EXIT 4224 * 4225 * 4226 * 4227 04574 0 10 03065 SEX JST UCHR REFETCH LAST CHARACTER TO BE SAFE 4228 04575 0 10 03047 JST GCHR SEE IF AT END OF LINE 4229 04576 0 11 00401 CAS C215 X 4230 04577 0 01 03213 JMP ESMT NO....GO EXECUTE NEXT STMT ON THIS LINE 4231 04600 0 02 00034 ASQ LDA SIP SEE IF WE ARE IN COMMAND MODE 4232 04601 101040 SNZ X 4233 04602 0 01 01000 JMP CMOD YES...GET NEXT COMMAND FROM CONSOLE 4234 04603 0 10 04440 JST ADVS ADVANCE POINTERS TO NEXT LINE 4235 04604 0 01 04430 JMP EXT1 RAN OUT OF PROGRAM 4236 04605 0 01 03213 JMP ESMT GO EXECUTE FIRST STMT ON NEW LINE 4237 * 4238 * 4239 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 114

4240 * SEARCH DEFINED FUNCTION INDEX 4241 * 4242 * 4243 * CALLING SEQUENCE: 4244 * 4245 * JST SDFI 4246 * ......RETURN IF FUNCTION NOT FOUND 4247 * ......RETURN IF FUNCTION FOUND, X POINTS TO 4248 * FIRST WORD OF FUNCTION INDEX ENTRY 4249 * 4250 * THE NEXT CHARACTER IS FETCHED AND USED AS 4251 * THE FUNCTION NAME ( IT IS CHECKED TO INSURE 4252 * THAT IT IS ALPHABETIC). 4253 * 4254 * 4255 * 4256 04606 0 000000 SDFI DAC ** 4257 04607 0 10 03047 JST GCHR GET THE FUNCTION NAME 4258 04610 0 10 03155 JST ALFA IS IT ALPHABETIC ? 4259 04611 0 01 04421 JMP DF01 NO ... REPORT FUNCTION NAME ERROR 4260 04612 0 02 00022 LDA DFB GET FUNCTION INDEX BASE POINTER 4261 04613 101040 SNZ IS THE TABLE EMPTY ? 4262 04614 -0 01 04606 JMP* SDFI YES ... TAKE NOT FOUND RETURN 4263 04615 0 11 00023 SD01 CAS DFT ARE WE PAST TOP OF THE INDEX ? 4264 04616 -0 01 04606 JMP* SDFI YES ... TAKE NOT FOUND RETURN 4265 04617 000000 OCT 0 NEVER CAN EXECUTE THIS WORD 4269 04620 0 04 00000 STA 0 X POINTS TO FIRST WORD OF CURRENT ENTRY 4270 04621 1 02 00000 LDA 0,1 TEST ENTRY NAME AGAINST 4271 04622 0 05 00074 ERA CHAR SEARCH TARGET 4272 04623 100040 SZE DO THEY MATCH ? 4273 04624 0 01 04627 JMP SD02 NO....GO ADVANCE TO NEXT ENTRY 4274 04625 0 12 04606 IRS SDFI YES...TAKE NAME FOUND RETURN 4275 04626 -0 01 04606 JMP* SDFI X 4276 * 4277 04627 0 02 00000 SD02 LDA 0 UPDATE INDEX POINTER TO FIRST 4281 04630 0 06 00426 ADD C3 WORD OF NEXT ENTRY 4282 04631 0 01 04615 JMP SD01 CONTINUE SEARCH 4283 * 4284 * 4285 * 4286 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 115

4287 * VARIABLE NAME ISOLATION ROUTINE 4288 * 4289 * 4290 * CALLING SEQUENCE: 4291 * 4292 * JST PVN 4293 * ......RETURN IF SUBSCRIPTED VARIABLE 4294 * ......RETURN IF SIMPLE VARIABLE 4295 * 4296 * THE VARIABLE NAME IS ISOLATED AND LEFT 4297 * IN THE LOCATION VARN. 4298 * 4299 * 4300 * 4301 04632 0 000000 PVN DAC ** 4302 04633 0 10 03047 JST GCHR GET FIRST CHARACTER OF VARIABLE NAME 4303 04634 0 04 00107 STA VARN SAVE FOR NOW 4304 04635 0 10 03155 JST ALFA FIRST CHARACTER MUST BE ALPHABETIC 4305 04636 0 01 04655 JMP PV01 ITS NOT...REPORT IDENTIFIER ERROR 4306 04637 0 10 03047 JST GCHR NEXT CHARACTER MAY BE PART OF NAME 4307 04640 0 11 00410 CAS C250 TEST FOR START OF SUBSCRIPT 4308 04641 100000 SKP NO 4309 04642 -0 01 04632 JMP* PVN YES...TAKE FIRST RETURN 4310 04643 0 12 04632 IRS PVN BUMP FOR SIMPLE VARIABLE RETURN 4311 04644 0 10 03164 JST NUMC CURRENT CHAR MUST BE DIGIT IF PART OF NAME 4312 04645 0 01 04652 JMP PV02 NO....MAYBE WE HAVE GONE TOO FAR 4313 04646 141340 ICA PUT SECOND DIGIT OF NAME IN A(1-8) 4314 04647 0 05 00107 ERA VARN PUT FIRST CHARACTER IN A(9-16) 4315 04650 0 04 00107 STA VARN SAVE THE COMPLETED NAME 4316 04651 -0 01 04632 JMP* PVN AND RETURN 4317 04652 0 10 03155 PV02 JST ALFA TWO ALPHABETIC CHARS IN A ROW IS ILLEGAL 4318 04653 0 01 04667 JMP PV03 NO...GO STEP BACK OVER CURRENT CHARACTER 4319 04654 0 01 04660 JMP *+4 YES H.. REPORT ID ERROR 4320 * 4321 04655 0 11 00403 PV01 CAS C223 IS THE CHARACTER NORMAL? 4322 04656 0 01 04662 JMP PV04 YES ... OUTPUT 'X?' CLASS ERROR 4323 04657 000000 OCT 0 NEVER CAN EXECUTE THIS WORD 4324 04660 0 10 05243 JST ERR REPORT IDENTIFIER ERROR 4325 04661 144704 BCI 1,ID X 4326 * 4327 04662 141240 PV04 ICR BAD CHARACTER TO A(1-8) 4328 04663 0 05 00425 ERA C277 '?' TO A(9-1 4329 04664 0 04 04666 STA *+2 PUT DIAGNOSTIC IN ERR CALLING SEQUENCE 4330 04665 0 10 05243 JST ERR REPORT THE ERROR 4331 04666 154277 BCI 1,X? X 4332 * 4333 04667 0 10 03065 PV03 JST UCHR STEP BACK OVER CHARACTER NOT PART OF NAME 4334 04670 -0 01 04632 JMP* PVN TAKE SIMPLE VARIABLE RETURN 4335 * 4336 *
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 116

4337 * 4338 * 4339 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 117

4340 * LOCATE/ASSIGN SIMPLE VARIABLE 4341 * 4342 * 4343 * CALLING SEQUENCE: 4344 * 4345 * JST ASV 4346 * ......RETURN X POINTS TO WORD PAIR FOR VALUE 4347 * OF THE VARIABLE 4348 * 4349 * REQUIRED SETUP: 4350 * 4351 * THE VARIABLE NAME MUST HAVE PREVIOUSLY BEEN 4352 * ISOLATED AND LEFT IN LHE LOCATION VARN. 4353 * 4354 * 4355 * 4356 04671 0 000000 ASV DAC ** 4357 04672 0 10 04721 JST LSV IS NAME ALREADY IN THE TABLE ? 4358 04673 100000 SKP NO....WE MUST ADD IT 4359 04674 -0 01 04671 JMP* ASV YES...RETURN 4360 04675 0 02 00426 LDA C3 MAKE SURE THERE IS ROOM FOR 4361 04676 0 10 03041 JST UFSC ANOTHER ENTRY 4362 04677 0 02 00027 LDA SVT IS THE TABLE EMPTY ? 4363 04700 100040 SZE X 4364 04701 0 01 04711 JMP AS01 NO ... GO APPEND ENTRY 4365 04702 0 02 00030 LDA DVB GET HIGHEST UNUSED CORE LOCATION 4366 04703 101040 SNZ X 4367 04704 0 02 00032 LDA SIB X 4368 04705 0 07 00371 SUB C1 X 4369 04706 0 04 00027 STA SVT SET TABLE TOP 4370 04707 141206 AOA ADJUST SO THE TABLE 4371 04710 100000 SKP BASE COMES OUT RIGHT 4372 04711 0 02 00026 AS01 LDA SVB GET PREVIQUS TABLE BASE 4373 04712 0 07 00426 SUB C3 APPEND THREE WORDS 4374 04713 0 04 00026 STA SVB SET NEW BASE 4375 04714 0 04 00000 STA 0 X POINTS TO WORD FOR VARIABLE NAME 4376 04715 0 02 00107 LDA VARN PUT VARIABLE NAME 4377 04716 -0 04 00000 STA* 0 IN FIRST WORD OF ENTRY 4378 04717 0 12 00000 IRS 0 S POINTS TO FIRST WORD OF VARIABLE VALUE 4379 04720 -0 01 04671 JMP* ASV RETURN 4380 * 4381 * 4382 * 4383 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 118

4384 * LOCATE SIMPLE VARIABLE 4385 * 4386 * 4387 * CALLING SEQUENCE: 4388 * 4389 * JST LSV 4390 * ......RETURN IF NAME NOT FOUND 4391 * ......RETURN IF NAME FOUND 4392 * 4393 * REQUIRED SETUP: 4394 * 4395 * THE VARIASLE NAME MUST HAVE PREVIOUSLY 4396 * BEEN ISOLATED AND LEFT IN THE LOCATION VARN. 4397 * 4398 * 4399 * RETURN STATUS: 4400 * 4401 * IF THE NAME IS FOUND, THE INDEX IS 4402 * LEFT POINTING TO THE FIRST WORD OF THE 4403 * WORD PAIR CONTAINING THE VALUE OF THE 4404 * VARIABLE. 4405 * 4406 * 4407 04721 0 000000 LSV DAC ** 4408 04722 0 02 00107 LDA VARN TEST FOR REFERENCE TO THE DUMMY 4409 04723 0 11 00052 CAS DEFN VARIABLE IN A PROGRAMMER DEFINED FUNCTION 4410 04724 100000 SKP NO 4411 04725 0 01 04747 JMP LS01 YES...ITS VALUE IS IN A SPECIAL PLACE 4412 04726 0 02 00026 LDA SVB START TABLE SEARCH 4413 04727 101040 SNZ IS THE TABLE EMPTY ? 4414 04730 -0 01 04721 JMP* LSV YES...TAKE THE NOT FOUND RETURN 4415 04731 0 11 00027 LS04 CAS SVT ARE WE PAST END OF TABLE ? 4416 04732 -0 01 04721 JMP* LSV YES ... TAKE NOT FOUND RETURN 4417 04733 000000 OCT 0 A NEVER CAN EXECUTE THIS WORD 4418 04734 0 04 00000 STA 0 X POINTS TO 1ST WORD OF CURRENT ENTRY 4419 04735 -0 02 00000 LDA* 0 COMPARE NAME OF CURRENT ENTRY WITH 4420 04736 0 05 00107 ERA VARN THE SEARCH TARGET 4421 04737 100040 SZE DO THEY MATCH ? 4422 04740 0 01 04744 JMP LS02 NO....GO CHECK NEXT ENTRY 4423 04741 0 12 00000 IRS 0 YES...X POINTS TO VARIABLE VALUE 4424 04742 0 12 04721 LS03 IRS LSV TAKE NAME FOUND RETURN 4425 04743 -0 01 04721 JMP* LSV X 4426 * 4427 04744 0 02 00000 LS02 LDA 0 NOT THIS ENTRY, 4428 04745 0 06 00426 ADD C3 TRY THE NEXT 4429 04746 0 01 04731 JMP LS04 X 4430 * 4431 04747 0 35 00514 LS01 LDX DFVD X POINTS TO DUMMY VARIABLE VALUE 4432 04750 0 01 04742 JMP LS03 TAKE NAME FOUND RETURN 4433 *
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 119

4434 * 4435 * 4436 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 120

4437 * LOCATE/ASSIGN DIMENSIONED VARIABLE 4438 * 4439 * 4440 * CALLING SEQUENCE: 4441 * 4442 * JST ADV 4443 * .......... 4444 * ......RETURN SEE BELOW FOR RETURN INFORMATION 4445 * 4446 * THIS ROUTINE FIRST CHECKS TO SEE IF THE NAME 4447 * IS ALREADY IN THE TABLE. IF IT IS, RETURN IS MADE 4448 * WITH THE ADDRESS OF THE ELEMENT IN THE INDEX REGISTER. 4449 * IF NOT, AN ENTRY IS ADDED TO THE DIMENSIONED VARIABLE 4450 * TABLE. IF THE DIM STMT FLAG IS SET (=0), THEN 4451 * THE VALUE OF THE SUBSCRIPTS AS THEY APPEAR IN THE SOURCE ARE 4452 * USED AS THE DIMENSION. IF THE DIM STMT FLAG IS 4453 * RESET (='12), THEN A VALUE OF 10 IS USED FOR 4454 * EACH DIMENSION. AFTER THE ENTRY HAS BEEN ADDED, 4455 * THE DIM STMT FLAG IS CHECKED. IF IT IS SET, RETURN IS 4456 * MADE IMMEADIATLY. IF NOT, THE NAME IS REPROCESSED 4457 * AND THE LOCATION OF THE SELECTED ARRAY ITEM IS LEFT 4458 * IN THE INDEX REGISTER. 4459 * 4460 * 4461 * 4462 04751 0 000000 ADV DAC ** 4463 04752 0 12 04751 IRS ADV STEP OVER UNUSED WORD IN CALLING SEQ. 4464 04753 0 10 05135 AD07 JST LDV IS NAME ALREADY IN TABLE | 4465 04754 100000 SKP NO....IT MUST BE ADDED 4466 04755 -0 01 04751 JMP* ADV YES...RETURN, ENTRY ADDRESS IN X 4467 04756 0 02 00107 LDA VARN SAVE THE NAME OF THE VARIABLE 4468 04757 0 04 00063 STA ADT3 X 4469 04760 140040 CRA CLEAR THE DIMENSION COUNTER 4470 04761 0 04 00064 STA ADT4 X 4471 04762 141206 AOA INITIALIZE THE ARRAY SIZE COUNTER 4472 04763 0 04 00066 STA ADT6 X 4473 04764 0 15 00065 STX ADT5 SAVE X AS IT MAY HAVE THREAD TO LAST ENTRY 4474 04765 0 02 00037 LDA SBP SAVE BYTE POINTER TO START OF SUBSCRIPT 4475 04766 0 04 00070 STA ADT8 IN CASE IT HAS TO BE REPROCESSED 4476 04767 140040 AD01 CRA EVALUATE SUBSCRIPT EXPRESSION 4477 04770 0 10 02443 JST EXPA X 4478 04771 0 10 03203 JST LCVL GET THE RESULT 4479 04772 0 10 00000 JST IFLT CONVERT TO INTEGER 4480 04773 0 01 05133 JMP AD08 ERROR...SUBSCRIPT SIZE 4481 04774 000201 IAB SAVE RESULT 4482 04775 0 02 00104 LDA DIMF IS THIS A DIMENSION STMT | 4483 04776 0 11 00370 CAS C0 X 4484 04777 100000 SKP NO...USE DEFAULT VALUE OF 10 4485 05000 000201 IAB YES...USE EXPRESSION VALUE 4486 05001 100400 SPL IS IT A LEGAL SIZE |
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 121

4487 05002 0 01 05133 JMP AD08 NO...REPORT ERROR 4488 05003 141206 AOA SET TO LIMIT + 1 4489 05004 0 10 03022 JST PUSH LEAVE IT ON THE STACK 4490 05005 0 10 00000 JST M$11 UPDATE THE ARRAY SIZE COUNTER 4491 05006 0 000066 DAC ADT6 X 4492 05007 0 04 00066 STA ADT6 X 4493 05010 0 12 00064 IRS ADT4 UPDATE DIMENSION COUNT 4494 05011 000201 IAB TEST FOR GROSS SIZE ERROR 4495 05012 100040 SZE X 4496 05013 0 01 03027 JMP MEMO NO MACHINE WE SELL CAN HOLD THIS SIZE ARRAY 4497 05014 0 10 03047 JST GCHR TEST FOR END OF SUBSCRIRT LIST 4498 05015 0 11 00414 CAS C254 X 4499 05016 100000 SKP X 4500 05017 0 01 04767 JMP AD01 NO...GO PROCESS NEXT SUBSCRIPT 4501 05020 0 05 00411 ERA C251 NOT COMMA, MUST BE ')' 4502 05021 100040 SZE X 4503 05022 0 01 05133 JMP AD08 IT'S NOT...REPORT ERROR 4504 05023 0 02 00066 LDA ADT6 CALCULATE SIZE OF TABLE ENTRY 4505 05024 0414 77 LGL 1 2 WORDS PER ARRAY ELEMENT 4506 05025 0 06 00064 ADD ADT4 1 WORD PER DIMENSION 4507 05026 0 06 00426 ADD C3 3 WORDS FOR GENERAL OVERHEAD 4508 05027 0 04 00067 STA ADT7 SAVE FOR LATER REFERENCE 4509 05030 0 10 03041 JST UFSC MAKE SURE THERE IS ENOUGH FREE SPACE 4510 05031 0 02 00026 LDA SVB IS SIMPLE VARIABLE TABLE EMPTY | 4511 05032 101040 SNZ X 4512 05033 0 01 05053 JMP AD02 YES...NO TABLE MOVE NEEDED 4513 05034 0 04 00061 STA ADT1 ADDRESS OF FIRST WORD TO BE MOVED 4514 05035 0 07 00067 SUB ADT7 GET NEW TABLE BASE 4515 05036 0 04 00026 STA SVB SET SIMPLE VARIABLE BASE POINTER 4516 05037 0 04 00062 STA ADT2 SET DESTINATION POINTER FOR MOVE 4517 05040 -0 02 00061 AD03 LDA* ADT1 MOVE ONE WORD 4518 05041 -0 04 00062 STA* ADT2 X 4519 05042 0 12 00061 IRS ADT1 BUMP THE SOURCE AND DESTINATION POINTERS 4520 05043 0 12 00062 IRS ADT2 X 4521 05044 0 02 00027 LDA SVT TEST FOR MOVE COMPLETE 4522 05045 0 07 00061 SUB ADT1 X 4523 05046 101400 SMI X 4524 05047 0 01 05040 JMP AD03 NO...GO MOVE ANOTHER WORD 4525 05050 0 02 00062 LDA ADT2 UPDATE SIMPLE VARIABLE TABLE 4526 05051 0 07 00371 SUB C1 TOP POINTER 4527 05052 0 04 00027 STA SVT X 4528 05053 0 02 00031 AD02 LDA DVT IS THIS FIRST ENTRY IN DIMENSIONED 4529 05054 100040 SZE VARIABLE TABLE | 4530 05055 0 01 05126 JMP AD04 NO....LINK IN LAST ENTRY MUST BE THREADED 4531 05056 0 02 00032 LDA SIB START DIMENSIONED VARIABLE TABLE 4532 05057 0 07 00371 SUB C1 JUST BELOW THE BASE OF THE 4533 05060 0 04 00031 STA DVT STATEMENT INDEX 4534 05061 0 07 00067 AD05 SUB ADT7 GET NEW TABLE BASE ADDRESS 4535 05062 141206 AOA X 4536 05063 0 04 00030 STA DVB X
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 122

4540 05064 0 04 00000 STA 0 X 4541 05065 0 02 00066 LDA ADT6 CALCULATE - NO. OF WORDS OF ELEMENT STORAGE 4542 05066 0414 77 LGL 1 X 4543 05067 140407 TCA X 4544 05070 0 04 00061 STA ADT1 X 4545 05071 140040 CRA SET ENTIRE ARRAY TO ZERO 4546 05072 1 04 00000 STA 0,1 X 4547 05073 0 12 00000 IRS 0 X 4548 05074 0 12 00061 IRS ADT1 X 4549 05075 0 01 05072 JMP *-3 X 4550 05076 0 02 00064 LDA ADT4 SETUP TO MOVE DIMENSION LIMITS FROM 4551 05077 140407 TCA THE STACK TO THE ENTRY 4552 05100 0 04 00061 STA ADT1 X 4553 05101 0 10 03031 JST POP REMOVE DIMENSION LIMIT FROM THE STACK 4554 05102 1 04 00000 STA 0,1 PUT IT IN TABLE ENTRY 4555 05103 0 12 00000 IRS 0 BUMP TABLE ENTRY POINTER 4556 05104 0 12 00061 IRS ADT1 BUMP DIMENSION COUNT 4557 05105 0 01 05101 JMP *-4 GO MOVE ANOTHER LIMIT 4558 05106 0 02 00030 LDA DVB PUT IN ADDRESS OF FIRST WORD OF ARRAY 4559 05107 1 04 00000 STA 0,1 STORAGE FOR THIS VARIABLE 4560 05110 140040 CRA CLEAR ETNRY THREAD 4561 05111 1 04 00001 STA 1,1 X 4562 05112 0 02 00064 LDA ADT4 FIRST WORD OF ENTRY CONTAINS 4563 05113 0400 70 LRL 8 NAME IN BITS 1 TO 8 AND NUMBER 4564 05114 0 02 00063 LDA ADT3 OF DIMENSIONS IN BITS 9-16 4565 05115 0 04 00107 STA VARN X 4566 05116 0410 70 LLL 8 X 4567 05117 1 04 00002 STA 2,1 X 4568 05120 0 02 00104 LDA DIMF IS THIS A DIMENSION STATEMENT | 4569 05121 101040 SNZ X 4570 05122 -0 01 04751 JMP* ADV YES...DO NOT NEED TO LOCATE A SPECIFIC ITEM 4571 05123 0 02 00070 LDA ADT8 RESTORE BYTE POINTER TO START OF SUBSCRIPT 4572 05124 0 04 00037 STA SBP X 4573 05125 0 01 04753 JMP AD07 GO LOCATE SPECIFIC ARRAY ITEM 4574 * 4575 05126 0 35 00065 AD04 LDX ADT5 SET THREAD IN LAST ENTRY TO 4576 05127 0 02 00030 LDA DVB POINT TO THIS ENTRY 4577 05130 0 07 00371 SUB C1 X 4579 05131 1 04 77777 STA -1,1 X 4583 05132 0 01 05061 JMP AD05 GO SETUP THIS ENTRY 4584 * 4585 05133 0 10 05243 AD08 JST ERR REPORT SUBSCRIPT ERROR 4586 05134 140723 BCI 1,AS 4587 * 4588 * 4589 * 4590 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 123

4591 * LOCATE DIMENSIONED VARIABLE 4592 * 4593 * 4594 * CALLING SEQUENCE: 4595 * 4596 * JST LDV 4597 * ......RETURN IF NAME NOT IN TABLE 4598 * ......RETURN IF NAME FOUND, X POINTS TO ARRAY ELEMENT 4599 * 4600 * REQUIRED SETUP: 4601 * 4602 * THE VARIABLE NAME MUST HAVE PREVIOUSLY 4603 * BEEN ISOLATED AND LEFT IN THE LOCATION VARN. 4604 * 4605 * IF THE NAME IS IN THE TABLE, THE SUBSCRIPT 4606 * WILL BE EVALUATED AND THE INDEX REGISTER WILL BE SET 4607 * TO THE ADDRESS OF THE SELECTED ARRAY ELEMENT. 4608 * 4609 * 4610 * 4611 05135 0 000000 LDV DAC ** 4612 05136 0 02 00031 LDA DVT PICK UP THREAD TO FIRST ENTRY 4613 05137 101040 LD02 SNZ AT END OF TABLE | 4614 05140 -0 01 05135 JMP* LDV YES...TAKE NOT FOUND RETURN 4618 05141 0 04 00000 STA 0 X POINTS TO TOP WORD OF ENTRY 4619 05142 1 02 00000 LDA 0,1 GET WORD CONTAINING NAME 4620 05143 0400 70 LRL 8 NO. OF DIMS TO B, NAME IN A 4621 05144 0 05 00107 ERA VARN COMPARE WITH TARGET 4622 05145 101040 SNZ X 4623 05146 0 01 05151 JMP LD01 FOUND ENTRY !!! 4625 05147 1 02 77777 LDA -1,1 PICK UP LINK TO NEXT ENTRY 4629 05150 0 01 05137 JMP LD02 GO CHECK IT 4630 * 4631 05151 0 12 05135 LD01 IRS LDV BUMP RETURN ADDRESS TO FOUND RETURN 4632 05152 0 02 05135 LDA LDV PUT RETURN ADDRESS ON THE STACK 4633 05153 0 10 03022 JST PUSH X 4634 05154 0 02 00071 LDA DPTR PUT EXISTING VALUES OF THE TEMP 4635 05155 0 10 03022 JST PUSH STORAGE LOCATIONS THAT THIS ROUTINE USES 4636 05156 0 02 00072 LDA DCT1 ON THE STACK, AS THIS IS A RE-ENTRANT 4637 05157 0 10 03022 JST PUSH ROUTINE 4638 05160 0 02 00073 LDA DCT2 X 4639 05161 0 10 03022 JST PUSH X 4640 05162 140040 CRA NO. OF DIMENSIONS TO A 4641 05163 0410 70 LLL 8 X 4642 05164 140407 TCA NEGATE FOR COUN 4643 05165 0 04 00072 STA DCT1 SAVE FOR TWO LOOPS THROUGH ENTRY 4644 05166 0 04 00073 STA DCT2 X 4645 05167 0 02 00000 LDA 0 SET TABLE POINTER TO LIMIT OF 4646 05170 0 07 00426 SUB C3 DIMENSION 1 4650 05171 0 04 00071 STA DPTR X
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 124

4651 05172 0 01 05175 JMP LD03 GO EVALUATE THE SUBSCRIPTS 4652 05173 0 02 00414 LD04 LDA C254 MAKE SURE ',' SEPERATES 4653 05174 0 10 03104 JST GCCK THE SUBSCRIPT EXPRESSIONS 4654 05175 140040 LD03 CRA EVALUATE THE NEXT SUBSCRIPT EXPRESSION 4655 05176 0 10 02443 JST EXPA X 4656 05177 0 10 03203 JST LCVL RESULT TO A+B 4657 05200 0 10 00000 JST IFLT MAKE IT AN INTEGER 4658 05201 0 01 05133 JMP AD08 ERROR...TOO LARGE 4659 05202 0 11 00462 CAS M1 MAKE SURE VALUE IS BETWEEN 4660 05203 -0 11 00071 CAS* DPTR ZERO AND LIMIT FOR THIS DIMENSION 4661 05204 0 01 05133 JMP AD08 ERROR...OUT OF RANGE 4662 05205 0 01 05133 JMP AD08 ERROR...OUT OF RANGE 4663 05206 0 10 03022 JST PUSH LEAVE THE SUBSCRIPT ON THE STACK 4664 05207 0 02 00071 LDA DPTR DECREMENT THE TABLE POINTER 4665 05210 0 07 00371 SUB C1 X 4666 05211 0 04 00071 STA DPTR X 4667 05212 0 12 00072 IRS DCT1 BUMP DIMENSION COUNT 4668 05213 0 01 05173 JMP LD04 GO PROCESS NEXT SUBSCRIPT 4669 05214 0 02 00411 LDA C251 MAKE SURE ')' ENDS SUBSCRIPT LIST 4670 05215 0 10 03104 JST GCCK X 4671 05216 0 12 00071 IRS DPTR BUMP TABLE POINTER TO LIMIT OF LAST DIM. 4672 05217 0 10 00000 LD06 JST M$11 PREVIOUS ACCUM. * LIMIT OF CURRENT DIM. 4673 05220 -0 000071 DAC* DPTR X 4674 05221 0 12 00071 IRS DPTR UPDATE ENTRY POINTER 4675 05222 0 04 00072 STA DCT1 SAVE PARTIAL RESULT 4676 05223 0 10 03031 JST POP GET SUBSCRIPT VALUE FOR THIS POSITION 4677 05224 0 06 00072 ADD DCT1 X 4678 05225 0 12 00073 IRS DCT2 HAVE ALL THE SUBSCRIPTS BEEN PROCESSED 4679 05226 0 01 05217 JMP LD06 NO...GO ENTER NEXT ONE 4680 05227 0414 77 LGL 1 *2 AS TWO WORDS PER ELEMENT 4681 05230 -0 06 00071 ADD* DPTR ADD TO BASE OF ARRAY STORAGE 4682 05231 0 04 00000 STA 0 LEAVE ELEMENT PNTR IN X FOR CALLER 4683 05232 0 10 03031 JST POP RESTORE THE TEMP. LOCATIONS 4684 05233 0 04 00073 STA DCT2 X 4685 05234 0 10 03031 JST POP X 4686 05235 0 04 00072 STA DCT1 X 4687 05236 0 10 03031 JST POP X 4688 05237 0 04 00071 STA DPTR X 4689 05240 0 10 03031 JST POP RETRIEVE THE RETURN ADDRESS 4690 05241 0 04 05135 STA LDV X 4691 05242 -0 01 05135 JMP* LDV AND EXIT 4692 * 4693 * 4694 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 125

4695 * ERROR REPORTING ROUTINE 4696 * 4697 * 4698 * CALLING SEQUENCE: 4699 * 4700 * JST ERR 4701 * BCI 1,XX XX IS ERROR CODE 4702 * 4703 * AFTER THE MESSAGE IS PRINTED, CONTROL 4704 * IS RETURNED TO COMMAND MODE. 4705 * 4706 * 4707 05243 0 000000 ERR DAC ** 4708 05244 0 12 00105 IRS LODF ON ERROR, TURN OFF PROGRAM LOAD MODE 4709 05245 0 10 00000 JST LFCR ADVANCE TO NEXT LINE ON ASR 4710 05246 -0 02 05243 LDA* ERR PUT ERROR CODE IN MESSAGE STRING 4711 05247 0 04 05257 STA EMST X 4712 05250 0 10 02747 JST TYPE PRINT THE MESSAGE 4713 05251 0 005254 DAC EMSG X 4714 05252 0 10 02736 JST PLN PRINT THE CURRENT LINE NUMBER 4715 05253 0 01 01000 JMP CMOD RETURN TO COMMAND MODE 4716 * 4717 05254 142722 EMSG BCI 3,ERROR 05255 151317 05256 151240 4718 05257 154330 EMST BCI 1,XX ERROR COOE GOES HERE 4719 05260 120314 BCI 3, LINE 05261 144716 05262 142640 4720 05263 000000 OCT 0 MESSAGE TERMINATOR 4721 * 4722 * 4723 * 4724 EJCT
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 126

4725 001000 EADD SET CMOD STARTING ADDRESS OF BASIC 4730 END EADD BASICALLY, THIS IS THE END A$22 000000E ABSF 000000E AD01 004767A AD02 005053A AD03 005040A AD04 005126A AD05 005061A AD07 004753A AD08 005133A ADT1 000061A ADT2 000062A ADT3 000063A ADT4 000064A ADT5 000065A ADT6 000066A ADT7 000067A ADT8 000070A ADV 004751A ADVS 004440A ALFA 003155A AS01 004711A ASN1 003322A ASN2 003276A ASN3 003314A ASNM 003274A ASQ 004600A ASV 004671A ATND 000534A ATNF 000000E ATNQ 000230A AV01 004454A AYOH 000321A AYON 000233A BKMS 003270A BRKC 000000E BRKF 000103A C0 000370A C1 000371A C10 000372A C11 000373A C12 000374A C16 000375A C2 000376A C20 000377A C212 000400A C215 000401A C221 000402A C223 000403A C23 000404A C240 000405A C241 000406A C242 000407A C250 000410A C251 000411A C252 000412A C253 000413A C254 000414A C255 000415A C256 000416A C257 000417A C260 000420A C261 000421A C272 000422A C273 000423A C275 000424A C277 000425A C3 000426A C300 000427A C305 000430A C307 000431A C333 000432A C336 000433A C337 000434A C4 000435A C43 000436A C5 000437A C50 000440A C54 000441A CALL 003752A CHAR 000074A CJMP 000530A CJST 000515A CL01 004064A CL02 004025A CL03 004046A CL04 004056A CL05 003770A CL06 004013A CLER 001052A CLRT 002770A CLST 000516A CLT1 000312A CLT2 000313A CLT3 000314A CMAX 000442A CMOD 001000A CON1 000101A CON2 000102A CONT 001121A COSD 000532A COSF 000000E CPOS 000045A CSRH 000000E CVAL 000041A D$22 000000E DBP 000040A DCT1 000072A DCT2 000073A DEF 004325A DEFF 000507A DEFN 000052A DEFV 000053A DELT 000544A DF01 004421A DF02 004377A DF03 004364A DF04 004353A DF05 004416A DF06 004373A DF07 004423A DFB 000022A DFQ 000261A DFSE 003702A DFT 000023A DFVD 000514A DIMC 000506A DIMF 000104A DLCK 003173A DPTR 000071A DTAC 000443A DVB 000030A DVT 000031A E$22 000000E EADD 001000A ECTR 000340A ED01 002253A ED02 002230A ED03 002266A ED04 002306A ED05 002276A ED06 002324A ED07 002312A ED08 002367A ED09 002372A ED10 002420A ED11 002237A ED12 002404A EMSG 005254A EMST 005257A ERR 005243A ES01 003255A ES02 003253A ESMT 003213A ETAPE 000000E EX01 002477A EX02 002502A EX03 002505A EX04 002512A EX05 002642A EX06 002455A EX07 002470A EX09 002547A EX10 002603A EX11 002610A EX13 002542A EX14 002544A EX15 002537A EX16 002625A EX17 002634A EX19 002650A EX20 002656A EX21 002570A EX22 002546A EX24 002632A EX30 002671A EXIT 004427A EXP 000337A EXPA 002443A EXPC 002664A EXPF 000000E EXT1 004430A EXT2 004435A F1 000444A F10 000446A F10R 000450A FINT 000000E FM1 000452A FNB 000024A
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 127

FNC 000507A FNT 000025A FOR 003472A FR01 003505A FR02 003542A FR03 003556A FR04 003576A FR05 003601A FR06 003507A FR07 003612A FRNG 002425A FRST 003614A FRT1 003616A FRT2 003530A FSC 000047A GCC1 003115A GCC2 003114A GCCK 003104A GCHR 003047A GCHX 003072A GCPK 003077A GDLM 003116A GNBC 003125A GOSB 003720A GOT2 003326A GOT3 003335A GOTO 003324A GTC 000454A H$22 000000E HERE 000370A HMAM 000305A IBUF 000230A IDAC 004136A IDMS 000166A IDNT 002007A IF 003365A IF01 003463A IF02 003375A IF03 003416A IF04 003414A IFLT 000000E IFT1 000312A IFT2 000313A IL05 001542A IL06 001553A IL07 001732A IL08 002005A IL10 001566A IL11 001607A IL12 001646A IL13 001661A IL14 001643A IL15 001616A IL16 001654A IL17 001727A IL18 001717A IL20 001740A IL21 001772A IL22 001534A IL24 001675A IL31 001621A IL32 001517A IL39 001631A ILIN 001504A ILT1 000056A ILT2 000057A ILT3 000060A INA1 000000E INHC 000341A INIT 000000E INPT 004066A INT1 004144A INTF 000455A IPDS 003011A IPUT 000000E ISBP 004137A ISN 004556A ISN1 004572A ISSM 000346A ITAPE 000000E JOB 001045A L$22 000000E LCHR 000075A LCVL 003203A LD01 005151A LD02 005137A LD03 005175A LD04 005173A LD06 005217A LDV 005135A LE10 000457A LFCR 000000E LIST 001137A LOAD 001132A LODF 000105A LOGF 000000E LOP 000055A LS01 004747A LS02 004744A LS03 004742A LS04 004731A LSBP 000461A LSTF 000106A LSV 004721A LT01 001171A LT02 001305A LT03 001213A LT04 001257A LT05 001262A LT06 001274A LT07 001253A LT08 001240A LT09 001236A LT10 001266A LT11 001170A LT12 001212A LT13 001161A LT14 001302A LTT1 000034A LTT2 000312A LTT3 000313A LTT4 000314A LTT5 000315A LVAL 000043A M$11 000000E M$22 000000E M1 000462A M10 000463A M100 000464A M11 003711A M12 000465A M2 000466A M21 000467A M5 000470A M53 000471A M6 000472A MCOL 000473A MEMO 003027A N$22 000000E NEXT 003622A NUMC 003164A NX01 003700A NX02 003673A NX03 003675A NX04 003627A NX05 003665A NXT1 003643A NXT2 003647A ON 003340A ON1 003345A ON2 003356A ON3 003352A OP16 000000A OTA1 000000E PCVL 002154A PDLP 000035A PLN 002736A PNCH 001135A POP 003031A PR01 004216A PR02 004303A PR03 004254A PR04 004214A PR05 004323A PR06 004266A PR07 004301A PR08 004311A PR09 004272A PR10 004235A PR11 004222A PRNT 004211A PRT1 000312A PTB 000020A PTH 000021A PUSH 003022A PV01 004655A PV02 004652A PV03 004667A PV04 004662A PVN 004632A QUIT 001130A RD01 004131A RD02 004074A RD03 004115A RD04 004104A RD06 004167A RD07 004162A RDAC 004151A RDT1 000046A RDT2 004121A READ 004072A RELF 000456A REM 004425A REMF 000375A REST 004202A RN01 001063A RN02 001100A RN03 001066A RN04 001117A RNDF 000000E
* NAME: BASIC-16A DOC 70181826000 REV A PAGE 128

ROND 000474A RSBP 004153A RSIP 004152A RSTK 000350A RSTR 004177A RTB 000476A RTM 000477A RTP 000036A RTRN 003737A RUN 001054A S$22 000000E SBP 000037A SBUF 000110A SCHR 003133A SCTQ 000245A SCVL 003207A SD01 004615A SD02 004627A SDFI 004606A SEQI 000051A SES 004540A SES1 004554A SEX 004574A SFNL 000530A SGN 002435A SGNF 000000E SIB 000032A SIGN 000336A SIND 000531A SINF 000000E SIP 000034A SIS1 004530A SIS2 004533A SIS3 004510A SISR 004475A SIT 000033A SMAX 000500A SNMX 000501A SNUM 000050A SPAC 002764A SQRD 000540A SQRF 000000E SQRQ 000256A SSBP 001007A SSR 004457A SSR1 004461A SSR2 004463A SSR3 004473A ST01 001450A ST02 001322A ST03 001352A ST04 001341A ST05 001375A ST06 001360A ST07 001421A ST08 001403A ST09 001416A ST10 001443A ST11 001436A ST12 001471A ST13 001453A ST14 001502A STMT 001313A STPC 000502A STT1 000312A STT2 000313A STT3 000314A STT4 000315A STT5 000316A STT6 000317A STT7 000320A SVB 000026A SVT 000027A SYSH 000511A SYSL 000510A SZHG 000550A TABC 000503A TAND 000533A TANF 000000E THNC 000504A TINT 000000E TMP1 000076A TMP2 000077A TMP3 000100A TMPH 000370A TMPL 000312A TOC 000505A TYP1 002755A TYP2 002762A TYPE 002747A UCHR 003065A UFSC 003041A USPM 000204A VARN 000107A WKD7 000513A WORK 000231A WRKD 000512A XCHR 003054A 0000 WARNING OR ERROR FLAGS DAP-16 MOD 2 REV. C 01-26-71
Previous File   Multiple Pages   Next File