|
|
1.1 ! root 1: ! 2: ! 3: Page 1 S P I T B O L -- COPYRIGHT NOTICE ! 4: ! 5: * ! 6: * COPYRIGHT (C) BY ROBERT B. K. DEWAR, 1983 ! 7: * ! 8: * THIS SOFTWARE IS THE PROPERTY OF ! 9: * PROFESSOR ROBERT B. K. DEWAR ! 10: * COURANT INSTITUTE OF MATHEMATICAL SCIENCES ! 11: * 251 MERCER STREET ! 12: * NEW YORK, NY 10012 ! 13: * U.S.A ! 14: * TEL NO - (212) 460 7497 ! 15: * ! 16: ! 17: ! 18: Page 2 S P I T B O L -- NOTES TO IMPLEMENTORS ! 19: ! 20: * ! 21: * M A C R O S P I T B O L V E R S I O N 4 . 2 ! 22: * --------------------------------------------------- ! 23: * ! 24: * DATE OF RELEASE - 01 NOV 1983 ! 25: * ! 26: * THIS PROGRAM IS MAINTAINED BY BOTH ! 27: * DR. A. P. MCCANN ! 28: * DEPARTMENT OF COMPUTER STUDIES ! 29: * UNIVERSITY OF LEEDS ! 30: * LEEDS LS2 9JT ! 31: * ENGLAND. ! 32: * TEL NO - (0532) 431751 ! 33: * ! 34: * AND ! 35: * ! 36: * DAVID SHIELDS ! 37: * COURANT INSTITUTE OF MATHEMATICAL SCIENCES ! 38: * 251 MERCER STREET ! 39: * NEW YORK, NY 10012 ! 40: * U.S.A. ! 41: * TEL NO - (212) 460 7168 ! 42: * ! 43: * WHO WILL BE GLAD TO RECEIVE REPORTS OF FAULTS FOUND ! 44: * BY USERS OR IMPLEMENTORS. ! 45: * ! 46: * PERMISSION TO USE SPITBOL MAY BE NEGOTIATED WITH ! 47: * ANY OF THE ABOVE NAMED. ! 48: * SITES WHICH HAVE OBTAINED SUCH PERMISSION MAY NOT PASS ON ! 49: * COPIES OF THE SPITBOL SYSTEM OR PARTS OF IT EXCEPT ! 50: * BY AGREEMENT WITH DEWAR. ! 51: * ! 52: * ! 53: * TO ASSIST IMPLEMENTORS A REVISION HISTORY BASED ON ! 54: * VERSION 2.7 IS BEING MAINTAINED. IN ADDITION FILE ! 55: * SBL.CHG (AVAILABLE WITH THE SOURCE FILE) INDICATES ! 56: * DETAILED CHANGES MADE FROM ONE RELEASED VERSION TO ! 57: * ANOTHER BY LISTING NEW AND CHANGED LINES IN THE CONTEXT ! 58: * OF THE TEN SURROUNDING LINES. ! 59: ! 60: ! 61: Page 3 S P I T B O L - REVISION HISTORY ! 62: ! 63: * R E V I S I O N H I S T O R Y ! 64: * ------------------------------- ! 65: * ! 66: * ! 67: * VERSION 4.1 TO 4.2 (NOV 83) ! 68: * --------------------------- ! 69: * ! 70: * BUGS FIXED ! 71: * ---------- ! 72: * ! 73: * B4.101 ERROR IN HANDLING OF STACK WHEN GTARR ! 74: * GIVEN AN EMPTY TABLE ARG. ! 75: * B4.102 OMITTED WTB IN ACESS. CAUSES ILLEGAL ON ! 76: * ACCESSING PATTERN VALUED KEYWORDS. ! 77: * B4.103 DID NOT REPORT ERROR FOR BLANKS IN ! 78: * DEFINE PROTOTYPE. FIXED BY IGNORING LEADING ! 79: * AND TRAILING BLANKS. ! 80: * B4.104 FAILURE TO IGNORE SUPERFLUOUS COMMAS IN ! 81: * ARGS, LOCALS OF DEFINE FUNCTION PROTOTYPE. ! 82: * B4.105 CORRUPTION OF PROGRAM TIMER IF IA, WC OVERLAP ! 83: * B4.106 REGISTERS NOT SET UP FOR SYSEJ CALLS. ! 84: * B4.107 MISUSE OF MFI AT ERR02+8. ! 85: * B4.108 MISUSE OF EXNUL IN TRACE PROCEDURE. ! 86: * B4.109 NO STATEMENT FAILURE IF STOPTR APPLIED TO NON- ! 87: * EXISTENT TRACE. ! 88: * B4.110 LISTING FILE PAGE OVERFLOW FOR SOME ERRORS. ! 89: * B4.111 INCORRECT TRAILING BLANK PADDING IN INSBF. ! 90: * B4.112 ERROR ON INSERTING NULL INTO A BUFFER. ! 91: * B4.113 GTNUM FAILED TO PRESERVE IA. ! 92: * ! 93: * CHANGES ! 94: * ------- ! 95: * ! 96: * C4.101 CONDITIONAL ASSEMBLY SYMBOLS IN THE /EQU */ ! 97: * SECTION ARE REMOVED. USE DUMMIES IF NECESSARY. ! 98: * VARIABLITY OF NUMBER OF EQUATES CAUSED TRANSLATOR ! 99: * PROBLEMS FOR DIFFERENT VERSIONS FOR SIMILAR C/RS. ! 100: * C4.102 POSSIBILITY OF IGNORING CASE OF IDENTIFIERS BY ! 101: * USE OF -CASEIG, -NOCASEIG CTRL CARDS INTRODUCED. ! 102: * CONDITIONAL ASSEMBLY SYMBOL .CSIG, SETS DEFAULT ! 103: * FOR IGNORING CASE IF SET. ! 104: * C4.103 DEFINITION OF .CPLC INDICATES SYSTEM PREFERENCE ! 105: * FOR LOWER CASE SO THAT SYSTEM MESSAGES, DUMPS ! 106: * ETC APPEAR IN LOWER CASE. IMPLEMENTORS DEFINING ! 107: * THIS SYMBOL MUST TRANSLATE ARGS OF ERB, ERR, DTC, ! 108: * WHICH ARE IN UPPER CASE, AS IF THEY WERE IN ! 109: * LOWER CASE. ESSENTIAL THAT .CASL BE ALSO DEFINED. ! 110: * C4.104 EJECT AT END OF COMPILATION DONE BEFORE CALL OF ! 111: * SYSBX INSTEAD OF AFTER IT. ! 112: * C4.105 BUFFER BLANKING FOR STANDARD PRINTER BUFFER NOW ! 113: * USES MVW. DONE PARTLY TO ACCOMMODATE HONEYWELL ! 114: * H66 AND PARTLY FOR EFFICIENCY. ! 115: * C4.106 IF SORT, RSORT ARGUMENTS ARE EMPTY TABLES, ! 116: * STATEMENT FAILURE OCCURS INSTEAD OF AN ERROR. ! 117: ! 118: ! 119: Page 4 S P I T B O L - REVISION HISTORY ! 120: ! 121: * C4.107 THE THREE SECTIONS OF EXECUTABLE CODE FOLLOWING ! 122: * SEC OPCODES HAVE BEEN LABELLED AS RTN-S. ! 123: * THE FEW WILD BRANCHES TO PLBLS (MAINLY FOR ! 124: * RESUMPTION AFTER ERRORS) HAVE BEEN REPLACED BY A ! 125: * NEW OPCODE ! 126: * JMG GLABL ! 127: * WHICH CAUSES A JUMP TO A GLOBAL LABEL (GLBL) ! 128: * DECLARED AS SUCH BY APPEARING IN THE PROCEDURES ! 129: * SECTION WITH THE OPCODE, GLB, AS IN ! 130: * GLABL GLB ! 131: * IMPLEMENTORS WITH ADDRESSABILITY PROBLEMS WILL ! 132: * FIND THIS ADVANTAGEOUS. OTHERS CAN IGNORE GLB AND ! 133: * TRANSLATE JMG IDENTICALLY WITH BRN. ! 134: * C4.108 ROUTINES SYSAB, SYSTU, FOR USE BY OSINT TO ! 135: * CLOSE DOWNS SPITBOL CLEANLY IN EMERGENCY ARE ! 136: * REMOVED AS BEING INSUFFICIENTLY GENERAL. ! 137: * C4.109 SPITBOL PERFORMED AN EJECT EVEN WITH OPTIONS ! 138: * SELECTED TO SUPPRESS OUTPUT TO STANDARD OUTPUT ! 139: * FILE. THIS HAS BEEN RECTIFIED. ! 140: * C4.110 SECOND OPERAND OF MINIMAL OPCODES LSX, RSX ! 141: * REDEFINED TO BE X NOT (X) FOR CONSISTENCY. ! 142: * C4.111 THE FOLLOWING FEATURES ARE REMOVED - ! 143: * CTRL CARDS - DOUBLE DUMP ERRORS EXECUTE NOERRORS ! 144: * NOEXECUTE NOOPT NOPRINT OPTIMISE PRINT SINGLE. ! 145: * FUNCTIONS - ARG FIELD ITEM LOCAL REWIND. ! 146: * KEYWORD - ABEND. ! 147: ! 148: ! 149: Page 5 S P I T B O L - REVISION HISTORY ! 150: ! 151: * C4.112 ADDED FUNCTIONS ITC(N), CTI(S) WHICH CONVERT ! 152: * INTEGER N TO NTH CHAR OF ALPHABET AND ! 153: * CHARACTER S TO CORRESPONDING INTEGER. ! 154: * C4.113 ADDED FUNCTION SET(FILETAG,RECNO,PAR3) ! 155: * WHICH MAY BE USED TO EFFECT FILE RANDOM ACCESS. ! 156: * C4.114 OPTIONAL MINIMAL OPCODES CLU, CUL TO CONVERT ! 157: * FROM LOWER TO UPPER CASE OR VICE VERSA DESCRIBED. ! 158: * MOST IMPLEMENTORS NEED NOT USE THEM. ! 159: * C4.115 ALL ERROR CODES HAVE BEEN REASSIGNED TO BRING ! 160: * THEM BELOW 256 AND TO SORT THEM IN THE SOURCE. ! 161: * THIS REPRESENTS A DISCONTINUITY WHICH IT IS ! 162: * HOPED WILL NOT BE REPEATED. ! 163: * C4.116 DEFAULT INPUT RECORD LENGTH SET TO 160 INSTEAD ! 164: * OF 72 CHARACTERS. ! 165: * C4.117 OSINT INTERFACE MASSIVELY REDEFINED. SOME ! 166: * SYS-- ROUTINES ARE REMOVED. THIS REPRESENTS AN ! 167: * ISOLATED UPHEAVAL TO REALLY ADDRESS COMPLAINTS ! 168: * FROM IMPLEMENTORS ON FILE HANDLING AND ERROR ! 169: * REPORTING. NOTE THE DISAPPEARANCE OF THE FCBLK. ! 170: ! 171: ! 172: Page 6 S P I T B O L - REVISION HISTORY ! 173: ! 174: * C4.118 SECOND ARG OF INPUT(), OUTPUT() BECOMES A ! 175: * FILETAG WHICH TYPICALLY IS A FILE NAME. ! 176: * C4.119 FUNCTIONALITY OF ENDFILE() EXTENDED. ! 177: * WHEN USED TO CLOSE A FILE, IT DOES NOT CAUSE ! 178: * DETACHING OF ASSOCIATED VARIABLES. ! 179: * C4.120 TERMINAL I/O IS PUT ON THE SAME FOOTING AS FILE ! 180: * I/O. STANDARD INPUT AND OUTPUT CAN BE OBTAINED ! 181: * FROM OR DIRECTED TO A TERMINAL. ! 182: * C4.121 THE /COMMAND LINE/ USED TO EFFECT A SPITBOL RUN ! 183: * IS MADE AVAILABLE TO THE PROGRAM VIA HOST(1). ! 184: * THIS PERMITS USER TO CHECK AND TAKE ACTION ON ! 185: * RUN OPTIONS. ! 186: * C4.122 MINIMAL OPCODES BTC AND WTC TO CONVERT FROM BAUS ! 187: * AND WORDS TO CHARACTERS INTRODUCED. ! 188: * ! 189: * DOCUMENTATION REVISIONS ! 190: * ----------------------- ! 191: * ! 192: * D4.101 RULES ABOUT NOT UPSETTING GARBAGE COLLECTOR IN ! 193: * OSINT IMPLEMENTATION MADE CLEARER. ! 194: * D4.102 MORE DETAIL ON CONDITIONAL ASSEMBLY GIVEN. ! 195: * D4.103 SYSRD AND SYSRI DESCRIPTIONS MODIFIED. ANY ! 196: * PADDING CHARS USED SHOULD BE BLANKS NOT ZEROES. ! 197: * D4.104 MOTIVATION FOR CSC CLARIFIED. ! 198: * D4.105 DESCRIPTION OF EXP CORRECTED. ! 199: * ! 200: * ! 201: * ! 202: * VERSION 4.0 TO 4.1 (JUL 80) ! 203: * --------------------------- ! 204: * ! 205: * BUGS FIXED ! 206: * ---------- ! 207: * ! 208: * B4.001 ERROR IN CONVERT(ARRAY,/TABLE/) - TFIND MESSED WB ! 209: * B4.002 SORTH IS N-TYPE PROCEDURE. ! 210: * B4.003 ERROR PROC COULD TRY LISTING ABSENT SOURCE LINE. ! 211: * B4.004 REF TO UNDEFINED B$RCL IF .CNRA DEFINED. ! 212: * B4.005 LEX COMPARISONS ON NULL STRINGS FIXED. ! 213: * ! 214: * CHANGES ! 215: * ------- ! 216: * ! 217: * C4.001 DEFINITION OF .CNLD OMITS MORE EXTERNAL FN CODE. ! 218: ! 219: ! 220: Page 7 S P I T B O L - REVISION HISTORY ! 221: ! 222: * ! 223: * VERSION 3.5 TO 3.6 (JUN 83) ! 224: * --------------------------- ! 225: * ! 226: * OVER THE PERIOD 1979 TO 1983 TWO SEPARATE MAINTENANCE ! 227: * AND ENHANCEMENT ROUTES COEXISTED. WHAT IS RECORDED HERE ! 228: * RELATING TO VERSION 3.6 RESULTS PRINCIPALLY FROM THE ! 229: * EFFORTS OF DAVE SHIELDS, STEVE DUFF AND ROBERT ! 230: * GOLDBERG, COORDINATED AT NYU. ! 231: * THE OTHER EFFORT BY TONY MCCANN AT LEEDS TOOK PLACE AT ! 232: * TWO DISCRETE TIMES DURING THE PERIOD, ULTIMATELY GIVING ! 233: * THE CONSOLIDATED VERSION 4.2 WHICH INCORPORATES V3.6 ! 234: * CHANGES. NOTATION (C4.XXX) MEANS THAT C4.XXX ALSO ! 235: * EFFECTED THIS CHANGE OR PROVIDES A SIMILAR FEATURE. ! 236: * CODES USED TO IDENTIFY AUTHORS ARE (SGD) FOR DUFF, ! 237: * (REG) FOR GOLDBERG, AND (LDS) FOR SHIELDS. ! 238: * ! 239: * BUGS FIXED ! 240: * ---------- ! 241: * ! 242: * B3.601 (SGD) TO FIX MULTIPLE TRAP BLOCK ERROR IN ASIGN. ! 243: * B3.602 (SGD) PATCH GTARR TO FIX NULL CONVERT (B4.101). ! 244: * B3.603 (SGD) INSERTED MISSING WTB AFTER SYSMM CALLS. ! 245: * B3.604 (SGD) USE STRING LENGTH IN HASHS. ! 246: * B3.605 (SGD) FIXED SERIOUS PARSER PROBLEM ! 247: * RELATING TO (X Y) ON LINE BEING VIEWED AS PATTERN ! 248: * MATCH. FIXED BY ADDITION OF NEW CMTYP VALUE ! 249: * C$CNP (CONCATENATION - NOT PATTERN MATCH). ! 250: * B3.606 (SGD) FIXED EXIT(N) RESPECIFICATION CODE ! 251: * TO PROPERLY OBSERVE HEADER SEMANTICS ON RETURN. ! 252: * B3.607 (SGD) BYPASS PRTPG CALL AT INITIALIZATION ! 253: * FOLLOWING COMPILATION IF NO OUTPUT GENERATED. ! 254: * THIS PREVENTS OUTPUT FILES CONSISTING OF THE ! 255: * HEADERS AND A FEW BLANK LINES WHEN THERE IS NO ! 256: * SOURCE LISTING AND NO COMPILATION STATS (C4.109). ! 257: * ALSO FIX TIMSX INITIALIZATION IN SAME CODE. ! 258: * B3.608 (SGD) B$EFC CODE DID NOT CHECK FOR ! 259: * UNCONVERTED RESULT RETURNING NULL STRING. ! 260: * B3.609 (SGD) LOAD PFVBL FIELD IN RETRN FOR ! 261: * RETURN TRACING. THIS WAS CAUSING BUG ON RETURN ! 262: * TRACES THAT TRIED TO ACCESS THE VARIABLE NAME. ! 263: * B3.610 (SGD) FIXED PROBLEM RELATING TO COMPILATION OF ! 264: * GOTO FIELDS CONTAINING SMALL INTEGERS. ! 265: * B3.611 (REG) PREVENT CLEAR() FROM CLOBBERING PROTECTED ! 266: * VARIABLES AT LABEL SCLR5. ! 267: * B3.612 (REG) FIXED GTEXP FROM ACCEPTING TRAILING ! 268: * SEMICOLON OR COLON. THIS IS NOT A LEGAL WAY ! 269: * TO END AN EXPRESSION. ! 270: ! 271: ! 272: Page 8 S P I T B O L - REVISION HISTORY ! 273: ! 274: * B3.613 (REG) FIXED DIFFICULTIES WITH LISTINGS DURING ! 275: * EXECUTION WHEN NO LISTING GENERATED DURING ! 276: * COMPILATION. -LIST TO CODE() CAUSED BOMB. ! 277: * FIX IS TO RESET R$TTL AND R$STL TO NULLS NOT 0 ! 278: * AFTER COMPILATION. (LISTR, LISTT EXPECT NULLS). ! 279: * WHEN LISTING AND STATISTICS ROUTED TO DIFFERENT ! 280: * FILE THAN EXECUTION OUTPUT, ERROR MESSAGE IS SENT ! 281: * TO EXECUTION OUTPUT (AND GETS SEPARATED FROM ! 282: * ... IN STATEMENT ... MSG). LABO1 CALLS SYSAX AND ! 283: * STOPR DOES NOT CALL SYSAX IF ENTERED FROM LABO1. ! 284: * B3.614 (LDS) FIX MISUSE OF WC JUST AFTER ASG10. ! 285: * B3.615 (LDS) ADD COMMENT POINTING OUT SUSPICIOUS CODE ! 286: * AFTER TFN02. EXPLANATION NOW ADDED (APM). ! 287: * B3.616 (LDS) FIX INCONSISTENT TYPE OF SORTH (B4.002). ! 288: * B3.617 (LDS) INSERT MISSING CONDITIONAL TESTS ON CNBF. ! 289: * B3.618 (LDS) FIX VIOLATIONS OF MINIMAL LANGUAGE WHICH ! 290: * HAD SLIPPED PAST SOME TRANSLATORS. ! 291: ! 292: ! 293: Page 9 S P I T B O L - REVISION HISTORY ! 294: ! 295: * CHANGES ! 296: * ------- ! 297: * ! 298: * C3.601 (SGD) ADDITION OF .CSCI AND SYSCI (INT TO STRING ! 299: * SYSTEM ROUTINE OPTION) ! 300: * C3.602 (REG) CHANGED INILN AND INILS TO 258 (C4.116). ! 301: * C3.603 (SGD) MERGED IN PROFILER PATCHES AND FIXED CODE ! 302: * C3.604 (SGD) ADDED BUFFER TYPE AND SYMBOL .CNBF ! 303: * C3.605 (SGD) ADDED CHAR FUNCTION. CHAR(N) RETURNS NTH ! 304: * CHAR OF HOST MACHINE CHAR SET (C4.112). ! 305: * C3.606 (REG) ADDED CFP$U TO EASE TRANSLATION ON SMALLER ! 306: * SYSTEMS ! 307: * C3.607 (REG) ADDED LOWER CASE SUPPORT (C4.102/3). ! 308: * C3.608 (REG) ADDED SET I/O FUNCTION - UNDER .CUST ! 309: * C3.609 (REG) CONDITIONALIZED PAGE EJECT AFTER CALL TO ! 310: * SYSBX AND ADDED ANOTHER BEFORE CALL TO SYSBX, ! 311: * SO THAT, IF DESIRED BY THE IMPLEMENTOR, ! 312: * STANDARD OUTPUT WILL REFLECT ASSIGNMENTS MADE ! 313: * BY EXECUTING PROGRAM ONLY (C4.104). ! 314: * C3.610 (LDS) INTRODUCE .CTMD TO SUPPORT SYSTM THAT ! 315: * REPORTS ELAPSED TIME IN DECISECONDS INSTEAD OF ! 316: * MILLISECONDS. ! 317: * C3.611 (LDS) PROVIDE PLACE FOR .DEF OR .UND FOR EACH ! 318: * CONDITIONAL OPTION, SO THAT SETTINGS CAN BE ! 319: * CHANGED WITHOUT CHANGING LINE NUMBERS. ! 320: * C3.612 (LDS) OBEY (NEW) RESTRICTION THAT OPERAND IN ! 321: * CONDITIONAL BRANCH INSTRUCTION CANNOT HAVE FORM ! 322: * (X)+ IN ORDER TO SIMPLIFY TRANSLATIONS FOR WHICH ! 323: * POSTINCREMENT NOT READILY AVAILABLE. ! 324: * C3.613 (REG,LDS) ADD OP ! 325: * FLC WREG ! 326: * THAT FOLDS CHAR IN WREG TO UPPER CASE (C4.114). ! 327: * C3.614 (LDS) ADD OPTION .CS16 TO ALLOW INITIALIZATION OF ! 328: * STATEMENT LIMIT VALUES TO 32767 FOR 16 BIT ! 329: * MACHINES. ! 330: * C3.615 (LDS) PERMIT RETURN POINT AND ENTRY POINT ! 331: * ADDRESSES TO BE DISTINGUISHED BY THEIR PARITY ! 332: * INSTEAD OF BY LYING WITHIN A CERTAIN RANGE ! 333: * OF VALUES. INTRODUCE CONDITIONAL SYMBOLS ! 334: * .CRPP RETURN POINTS HAVE ODD PARITY ! 335: * .CEPP ENTRY POINTS HAVE ODD PARITY ! 336: * C3.616 (LDS) INTRODUCE NEW MINIMAL OPCODES TO BRANCH ! 337: * ACCORDING TO PARITY, ! 338: * BEV OPN,PLBL BRANCH IF ADDRESS EVEN ! 339: * BOD OPN,PLBL BRANCH IF ADDRESS ODD ! 340: * AN ADDRESS IS EVEN IF IT IS A MULTIPLE OF CFP$B. ! 341: * C3.617 (SGD) OPCODE MCB (MOVE CHARS BACKWARDS) DEFINED. ! 342: * C3.618 (SGD) FUNCTION FENCE DEFINED. ! 343: ! 344: ! 345: Page 10 S P I T B O L - REVISION HISTORY ! 346: ! 347: * VERSION 3.5 TO 4.0 (JUL 79) ! 348: * --------------------------- ! 349: * ! 350: * BUGS FIXED ! 351: * ---------- ! 352: * ! 353: * B3.501 OMITTED BTW OPCODE IN IOPUT. ! 354: * B3.502 ILLEGAL ON SORTING A = ARRAY(1). ! 355: * B3.503 FAILURE TO SORT VECTOR WITH ORIGIN OTHER THAN 1. ! 356: * B3.504 INCORRECT HANDLING OF VARIABLE ALPHABET. ! 357: * B3.505 EVAL MISHANDLES DEFAULT VALUE OF TABLE ELEMENT. ! 358: * ! 359: * CHANGES ! 360: * ------- ! 361: * ! 362: * C3.501 PROFILE KEYWORD GIVES EXECUTION PROFILE. ! 363: * C3.502 NUMERIC CONSTANTS STARTING WITH . + OR - ! 364: * ARE FOLDED ON LEXICAL SCANNING. ! 365: * ! 366: * DOCUMENTATION REVISIONS ! 367: * ----------------------- ! 368: * ! 369: * D3.501 TERM BAU (BASIC ADDRESSING UNIT) INTRODUCED. ! 370: * D3.502 ERROR IN REFERENCE TO IA,WC OVERLAP IN SEC 3. ! 371: ! 372: ! 373: Page 11 S P I T B O L - REVISION HISTORY ! 374: ! 375: * VERSION 3.4 TO 3.5 (FEB 79) ! 376: * --------------------------- ! 377: * ! 378: * BUGS FIXED ! 379: * ---------- ! 380: * ! 381: * B3.401 PRTST SHOULD BE DECLARED AS AN R TYPE PROCEDURE. ! 382: * B3.402 TIMING ERROR IF SPITBOL FAILS IN DUMP. ! 383: * B3.403 ERROR IN HANDLING OMITTED ARGS OF OPERATORS. ! 384: * B3.404 TOO MANY LINES PUT ON FIRST PAGE OF LISTING. ! 385: * B3.405 LEADING UNARY OPERATOR IN EVAL ERRONEOUSLY NEEDED ! 386: * PRECEDING BLANK. ! 387: * B3.406 TAG IN DUMP OF ARRAY OR TABLE VALUES WAS OMITTED. ! 388: * B3.407 EVAL UNABLE TO RETURN A DEFERRED EXPRESSION. ! 389: * B3.408 ILLEGAL IF SETEXIT CODE BRANCHES TO RETURN, WITH ! 390: * FURTHER COMPLICATIONS IF WITHIN CALL OF EVAL. ! 391: * B3.409 ILLEGAL ON DETACHING INPUT, OUTPUT, TERMINAL. ! 392: * B3.410 PRTNL SHOULD BE DECLARED AS AN R TYPE PROCEDURE. ! 393: * B3.411 MISPLACED LCT AFTER SDF09. ! 394: * ! 395: * CHANGES ! 396: * ------- ! 397: * ! 398: * C3.401 -SEQU AND -NOSE CONTROL CARDS REMOVED. ! 399: * C3.402 OPTION PROVIDED TO SUPPRESS SYSTEM IDENTIFICATION ! 400: * ON LISTING. ! 401: * C3.403 DESCRIPTION OF SYSBX SLIGHTLY REVISED. ! 402: * C3.404 PERMISSIBLE TO MODIFY SCBLK LENGTH BEFORE TAKING ! 403: * ERROR RETURNS FROM SYSIN, SYSRD, SYSRI. ! 404: * C3.405 CONDITIONAL .CNLD MAY BE DEFINED TO OMIT LOAD(). ! 405: * C3.406 CONDITIONAL .CNEX MAY BE DEFINED TO OMIT EXIT(). ! 406: * C3.407 TABLE NOW ACCEPTS A THIRD ARGUMENT SPECIFYING ! 407: * DEFAULT INITIAL LOOKUP VALUE. ! 408: * C3.408 ROUTINES SORT, RSORT FOR SORTING ARRAYS, TABLES ! 409: * INTRODUCED. SPECIFICATION IS AS IN SITBOL. ! 410: * ROUTINES MAY BE OMITTED BY DEFINING .CNSR . ! 411: * C3.409 ERROR IN CODE(), EVAL() CALL NOW CAUSES STATEMENT ! 412: * FAILURE BUT ERRTEXT KEYWORD IS STILL SET. ! 413: * C3.410 ARG TO CODE() MAY CONTAIN EMBEDDED CONTROL CARDS ! 414: * AND COMMENT DELIMITED BY A SEMICOLON. ! 415: * ! 416: * DOCUMENTATION REVISIONS ! 417: * ----------------------- ! 418: * ! 419: * D3.401 PURPOSE OF RESTRICTION 2 IN MINIMAL SECTION -6- ! 420: * (OPERATIONS ON CHAR VALUES), ERRONEOUSLY STATED ! 421: * TO BE FOR CMC, RATHER THAN FOR CEQ, CNE. ! 422: * DESCRIPTIONS OF ABOVE OPCODES REVISED. ! 423: * D3.402 DESCRIPTION OF ENT CLARIFIED. ! 424: * D3.403 DESCRIPTIONS OF SEVERAL OPCODES REVISED TO REMOVE ! 425: * TECHNICALLY INVALID LITERALS E.G. =0 , *1. ! 426: * D3.405 RESTRICTED USE OF LETTER Z IN MINIMAL CLARIFIED. ! 427: * D3.406 DIVIDE BY ZERO EXPLICITLY MENTIONED IN RELATION ! 428: * TO OVERFLOW SETTING. ! 429: ! 430: ! 431: Page 12 S P I T B O L - REVISION HISTORY ! 432: ! 433: * VERSION 3.3 TO 3.4 (OCT 78) ! 434: * --------------------------- ! 435: * ! 436: * ! 437: * BUGS FIXED ! 438: * ---------- ! 439: * ! 440: * B3.301 ILLEGAL FOR ERRONEOUS EVAL() ARG. ! 441: * B3.302 ADDRESS ARITHMETIC OVERFLOW IN ALLOC AND ALOCS. ! 442: * B3.303 -EJECT AND -SPACE IGNORED -NOLIST OPTION. ! 443: * B3.304 ERRONEOUS ARGUMENT SCAN IN LOAD(). ! 444: * B3.305 ERRONEOUS PLC ON UNINITIALISED R$CIM IN NEXTS. ! 445: * B3.306 LDI USED INSTEAD OF MTI AFTER PRV07. ! 446: * B3.307 MISUSE OF RMI AT ERRA2. ! 447: * B3.308 MISUSE OF MTI IN HASHS. ! 448: * B3.309 BUG IN -SEQU CARD SEQUENCE NUMBER CHECKING. ! 449: * B3.310 STACK OVERFLOW ERROR MESSAGE NOT ALWAYS PRINTED. ! 450: * B3.311 CORRUPT PROTOTYPE PRINT FOR TRACED ARRAYS. ! 451: * B3.312 PATTERN FIRST ARG IN DUPL CAUSED ERROR. ! 452: * B3.313 OMITTED CSC IN S$RPD, ERRONEOUS CSC IN CONVERT. ! 453: * B3.314 MISPLACED BTW IN EXBLD. ! 454: * B3.315 INCORRECT CODE IN HASHS. ! 455: * B3.316 FAILURE OF LOAD TO SCAN INTEGER ARG. ! 456: * B3.317 TABLE ACCESS WITH NEGATIVE INTEGER ARG. FAILED. ! 457: * B3.318 ERROR IN RETURNING RESULT OF LOADED FUNCTION. ! 458: * B3.319 =E$SRS USED AFTER INI01 INSTEAD OF *E$SRS. ! 459: * B3.320 ERR USED INSTEAD OF ERB AFTER SYSTU ! 460: * B3.321 LABEL COULD START WITH DISALLOWED CHARACTER. ! 461: * B3.322 CONTINUE AFTER SETEXIT HAD BAD HEURISTIC. ! 462: ! 463: ! 464: Page 13 S P I T B O L - REVISION HISTORY ! 465: ! 466: * ! 467: * ! 468: * CHANGES ! 469: * ------- ! 470: * ! 471: * C3.301 SYSAX AND .CSAX INTRODUCED - SEE SYSAX ! 472: * IN PROCEDURES SECTION. ! 473: * C3.302 VARIABLE MXLEN INTRODUCED. CONTAINS THE MAXIMUM ! 474: * SIZE OF A SPITBOL OBJECT AND IS NOT CHANGEABLE ! 475: * AFTER INITIALISATION. MAY BE DEFAULTED OR SET ! 476: * EXPLICITLY BY SYSMX. ! 477: * C3.303 SYSHS RETURNS REVISED - SEE SYSHS. ! 478: * C3.304 NEW MINIMAL OPCODE AOV TO FIX B3.302. ! 479: * C3.305 INHIBIT STLIMIT CHECK IF STLIMIT MADE NEGATIVE. ! 480: * C3.306 CFP$M IS REQUIRED TO BE OF FORM 2**N - 1. ! 481: * C3.307 DUPL MADE TO CONFORM TO SIL SNOBOL4 STANDARD. ! 482: * C3.308 LCH AND SCH ACTIONS MORE CLOSELY DEFINED. ! 483: * C3.309 BATCH INITIALISATION CODE OMITTED IF CONDITIONAL ! 484: * ASSEMBLY SYMBOL .CNBT (NO BATCH) DEFINED. ! 485: * C3.310 (WA) CONTAINS ARGUMENT COUNT IN SYSEX CALL. ! 486: * C3.311 SYSFC MAY REQUEST ALLOCATION OF STATIC FCBLK. ! 487: * C3.312 IF IA,WC OVERLAP, RESTRICTION PUT ON DUMPING/ ! 488: * RESTORING THESE REGISTERS. ! 489: * C3.313 NEW LISTING OPTION INTERMEDIATE BETWEEN COMPACT ! 490: * AND EXTENDED PROVIDED (SEE SYSPP). ! 491: * C3.314 REVISION OF SYSXI INTERFACE TO PERMIT OPTIONS FOR ! 492: * LOAD MODULE STANDARD O/P FILE (SEE SYSXI,SYSPP). ! 493: * C3.315 LAST ARG OF SUBSTR MAY BE OMITTED - TREATED ! 494: * AS REMAINDER OF STRING. ! 495: ! 496: ! 497: Page 14 S P I T B O L - REVISION HISTORY ! 498: ! 499: * VERSION 3.2 TO 3.3 (JAN 78) ! 500: * --------------------------- ! 501: * ! 502: * BUGS FIXED ! 503: * ---------- ! 504: * ! 505: * B3.201 ARRAY REFERENCE AND EXTERNAL FUNCTION LOAD ! 506: * ROUTINES ILLEGALLY ACCESSED INFORMATION ! 507: * BEYOND THE STACK FRONT. ! 508: * SIMILAR FAULT IN UNANCHORED PATTERN MATCHING. ! 509: * B3.202 DUMP(1) PRODUCED DUMP(2) TYPE OUTPUT. ! 510: * B3.203 WTB CONVERSION OMITTED IN CODE FOLLOWING ! 511: * INI01, INI02, EXBLD. ! 512: * B3.204 INCORRECT FAIL RETURN FROM TFIND IN ARREF. ! 513: * B3.205 ENDFILE DID NOT DETACH I/O ASSOCIATED VARIABLES. ! 514: * B3.206 -SPACE WITH OMITTED ARG. FAILED ! 515: * B3.207 LOOPED IF DUMP KEYWORD NON-ZERO AFTER STACK ! 516: * OVERFLOW IN GARBAGE COLLECT FAILURE. ! 517: * B3.208 FAILURE IN READING NUMBERS WITH TRAILING BLANKS. ! 518: * ! 519: * CHANGES ! 520: * ------- ! 521: * ! 522: * THE EXTENSIVE CHANGES MADE HERE MOSTLY RESULT FROM A ! 523: * SNOBOL4 IMPLEMENTORS MEETING HELD AT NEW YORK UNIVERSITY ! 524: * IN AUGUST 1977. THEY ARE AIMED AT ! 525: * (1) HAVING SPITBOL CONFORM TO CERTAIN SNOBOL4 ! 526: * LANGUAGE STANDARDS AND ! 527: * (2) PRODUCING A STABLE DEFINITION OF MINIMAL BY ! 528: * CARRYING OUT A FEW ESSENTIAL REVISIONS IN THE LIGHT ! 529: * OF EXPERIENCE IN ITS USE. ! 530: * ! 531: * CHANGES TO SPITBOL ! 532: * ------------------ ! 533: * ! 534: * C3.201 DEFAULT VALUES FOR KEYWORDS TRIM AND ANCHOR ARE ! 535: * ZERO. ON SYSTEMS WHERE RECORDS ARE CUSTOMARILY ! 536: * HANDLED WITHOUT TRALING BLANKS, THERE IS NO ! 537: * OBLIGATION TO SUPPLY SUCH BLANKS. ! 538: * C3.202 DEFAULT VALUE OF -INXX CONTROL CARD IS -IN72. ! 539: ! 540: ! 541: Page 15 S P I T B O L - REVISION HISTORY ! 542: ! 543: * C3.203 THE SECOND ARGUMENT OF INPUT AND OUTPUT IS ! 544: * PERMITTED TO BE AN INTEGER AS IN SNOBOL4. ! 545: * IN ADDITION INPUT(), OUTPUT() NOW GIVE A SNOBOL4 ! 546: * STATEMENT FAILURE IF SYSIO USES THE FILE NOT ! 547: * FOUND RETURN. ! 548: * THE THIRD ARGUMENT HAS A RECOMMENDED FORMAT AND ! 549: * TO OVERRIDE ITS DEFAULT DELIMITER (,) A ! 550: * CONDITIONAL ASSEMBLY SYMBOL, .CIOD, IS USED. ! 551: * INTERFACES TO SYSEF,SYSEJ,SYFC,SYSIO,SYSRW ! 552: * ARE REVISED. ! 553: * WC MAY NOW BE USED TO RETURN FROM SYSIO, A MAX ! 554: * RECORD LENGTH. ! 555: * C3.204 NEW CONFIGURATION PARAMETER CFP$F (SCBLK OFFSET) ! 556: * IS INTRODUCED. CFP$U IS REMOVED. ! 557: * C3.205 IMPLEMENTATION AND VERSION IDENTIFICATION IS ! 558: * REQUIRED - SEE SYSID. ! 559: * C3.206 ROUTINE SYSMX RETURNS THE MAXIMUM LENGTH OF ! 560: * SPITBOL OBJECTS (STRINGS ARRAYS ETC). THIS ! 561: * INFORMATION IS NOT NOW NEEDED AT TIME OF ENTRY TO ! 562: * SPITBOL AND HENCE WC SHOULD BE ZERO ON ENTRY. ! 563: * C3.207 A CONDITIONAL PARAMETER .CNRA PERMITS ASSEMBLY ! 564: * OF A MORE COMPACT VERSION WITH NO REAL ! 565: * ARITHMETIC CODE. ! 566: * C3.208 TERMINAL IS A NEW PRE-ASSOCIATED VARIABLE ! 567: * CAPABLE OF PERFORMING INPUT AND OUTPUT TO AN ! 568: * ONLINE TERMINAL. ! 569: * SYSRI IS A NEW ROUTINE USED IN THE IMPLEMENTATION ! 570: * OF THIS. SEE ALSO SYSPP. ! 571: * C3.209 THE ENVIRONMENT PARAMETERS E$--- ARE NOW ! 572: * PROVIDED BY THE MINIMAL TRANSLATOR USING THE ! 573: * REVISED EQU * FORMAT (SEE C3.229 AND START ! 574: * OF SPITBOL DEFINITIONS SECTION - SOME REORDERING ! 575: * OF SYMBOLS HAS OCCURRED). ! 576: * C3.210 THE INTERFACE OF SYSXI HAS BEEN SLIGHTLY REVISED. ! 577: * UNAVAILABILITY OF I/O CHANNELS AFTER EXIT(1), ! 578: * EXIT(-1) IS DOCUMENTED TOGETHER WITH ADDITIONAL ! 579: * ERROR RETURN USAGE FOR SYSIN,SYSOU,SYSPR,SYSRD. ! 580: * C3.211 SPITBOL ERROR CODES HAVE BEEN FROZEN - SEE C3.230 ! 581: * C3.212 THE UTILITY ROUTINES ARREF ETC. ARE NOW ! 582: * INTRODUCED BY RTN STATEMENTS. ! 583: * C3.213 SYSRL (RECORD LENGTH FOR STD INPUT FILE) IS ! 584: * REMOVED. SINCE IMPLEMENTATION OF A GENERAL -INXXX ! 585: * CONTROL CARD AND AN ABILITY TO SPECIFY MAX RECORD ! 586: * LENGTH USING THE THIRD ARGUMENT OF INPUT, SYSRL ! 587: * HAS BECOME REDUNDANT. ! 588: * C3.214 SYSEJ AND SYSXI ARE NOW PASSED A CHAIN LINKING ! 589: * ALL FCBLKS IN USE. ! 590: * C3.215 A SPECIAL ENDING CODE IN SYSEJ IS USED WHEN ! 591: * ATTEMPTS TO USE STANDARD OUTPUT CHANNEL FAIL. ! 592: * C3.216 RESTRICTION C3.233 OBSERVED SO SIMPLIFYING ! 593: * OPTIMISED TRANSLATION OF ENT WITH OMITTED VAL. ! 594: ! 595: ! 596: Page 16 S P I T B O L - REVISION HISTORY ! 597: ! 598: * ! 599: * CHANGES TO MINIMAL ! 600: * ------------------ ! 601: * ! 602: * C3.220 MINIMAL OPCODES DEC, DIM, INC, AND BMP ! 603: * ARE WITHDRAWN AND REPLACED BY THE MORE CONSISTENT ! 604: * SET DCA, DCV, ICA, ICV. ! 605: * C3.221 CHS HAS BEEN REPLACED BY THE MORE GENERALLY ! 606: * USEFUL ZGB (STILL LIKELY TO BE A NO-OP FOR MOST ! 607: * IMPLEMENTATIONS HOWEVER). ! 608: * C3.222 THE SET OF CHARACTER COMPARISONS HAS BEEN ! 609: * REDUCED TO CEQ AND CNE TO EASE IMPLEMENTATION ! 610: * PROBLEMS. ! 611: * C3.223 OPCODE IRZ IS REMOVED AND DVI, RMI ORDERS ARE ! 612: * REDEFINED TO CONFORM TO MORE COMMON USAGE. ! 613: * C3.224 NEW OPCODES SSL AND SSS ARE DEFINED. THEIR USE ! 614: * PERMITS RETURN LINKS FOR N TYPE PROCEDURES TO BE ! 615: * PLACED ON A LOCAL STACK IF DESIRED. ! 616: * C3.225 OPCODE MNZ COMPLEMENTS ZER. IT MOVES A NON-ZERO ! 617: * FLAG TO ITS DESTINATION. ! 618: * C3.226 FOR SOME MACHINES IT IS PREFERABLE FOR THE STACK ! 619: * TO BUILD UP RATHER THAN DOWN. TO PERMIT THIS ! 620: * WITHOUT NEED FOR MASSIVE CHANGES IN MINIMAL AND ! 621: * RECODING OF EXISTING PROGRAMS, A SCHEME HAS BEEN ! 622: * DEVISED IN WHICH AN ADDITIONAL REGISTER NAME, XT, ! 623: * IS USED AS A SYNONYM FOR XL WHEN THIS REGISTER ! 624: * IS INVOLVED IN STACK MANIPULATION- SEE SECTION 4. ! 625: * C3.227 SECTION 0 OF A MINIMAL PROGRAM IS RENAMED THE ! 626: * PROCEDURE SECTION. IT NOW CONTAINS, IN ADDITION ! 627: * TO EXP, SPECIFICATIONS OF INTERNAL PROCEDURES ! 628: * AND ROUTINES BY MEANS OF THE INP AND INR OPCODES. ! 629: * C3.228 THE LITERAL OPERAND FORMATS =INT AND *INT HAVE ! 630: * BEEN WITHDRAWN. =DLBL AND *DLBL MUST BE USED IN ! 631: * THEIR STEAD. ! 632: * C3.229 THE FORMAT ! 633: * LABEL EQU *NN ! 634: * USED TO SPECIFY VALUES SUPPLIED BY THE MINIMAL ! 635: * TRANSLATOR FOR CHAR. CODES ETC. IS REPLACED BY ! 636: * LABEL EQU * ! 637: * WHERE THE ORDER IN WHICH THE DEFINITIONS ARE ! 638: * SUPPLIED BY THE TRANSLATOR SHOULD MATCH THE ! 639: * ORDER OF OCCURRENCE IN THE DEFINITIONS SECTION. ! 640: * C3.230 THE FORMAT OF ERR,ERB OPCODES IS CHANGED TO ! 641: * REQUIRE A NUMERIC OPERAND. ! 642: * C3.231 THE RTN OPCODE IS USED TO INTRODUCE ROUTINES ! 643: * (WHICH ARE QUITE DISTINCT FROM PROCEDURES). ! 644: * C3.232 CONDITIONAL ASSEMBLY DIRECTIVES MAY BE NESTED. ! 645: * C3.233 MINOR RESTRICTION PLACED ON THE OMISSION OF ! 646: * VAL WITH THE ENT OPCODE. ! 647: ! 648: ! 649: Page 17 S P I T B O L - REVISION HISTORY ! 650: ! 651: * VERSION 3.1 TO 3.2 (AUG 77) ! 652: * --------------------------- ! 653: * ! 654: * BUGS FIXED ! 655: * ---------- ! 656: * ! 657: * B3.101 ASTONISHING THIS WAS UNNOTICED FOR THREE YEARS. ! 658: * BAD CODE FOR SNOBOL4 INTEGER DIVIDE, /, GAVE ! 659: * WRONG RESULT FOR OPERANDS OF OPPOSITE SIGNS. ! 660: * IMPLEMENTATIONS HAVE EITHER WRONGLY TRANSLATED ! 661: * DVI AND GOT CORRECT RESULT OR CORRECTLY ! 662: * TRANSLATED DVI AND GOT WRONG RESULT - LEEDS HAD ! 663: * ONE OF EACH. SEE ALSO C3.106. ! 664: * TEST PROGRAM NO. 1 NOW EXTENDED TO CHECK / ! 665: * MORE THOROUGHLY. ! 666: * B3.102 GARBAGE COLLECTION BUG IN SCANE ! 667: * ! 668: * CHANGES ! 669: * ------- ! 670: * ! 671: * C3.101 OPTION TO USE ADDITIONAL CHARACTERS CH$HT,CH$VT ! 672: * (HORIZONTAL AND VERTICAL TAB) WITH SAME SYNTACTIC ! 673: * SIGNIFICANCE AS CH$BL (BLANK). ! 674: * C3.102 OPTION TO USE A SET OF SHIFTED CASE ALPHABETIC ! 675: * CHARACTERS CH$$A ... CH$$$. ! 676: * C3.103 CONDITIONAL ASSEMBLY FEATURES ARE INTRODUCED INTO ! 677: * MINIMAL ON ACCOUNT OF THE ABOVE. ! 678: * SEE MINIMAL DOCUMENTATION SECTION FOR DETAILS ! 679: * OF ABOVE CHANGES. ! 680: * C3.104 LCH AND SCH MAY USE AN X REGISTER FIRST ! 681: * OPERAND AS ALTERNATIVE TO A W REGISTER. ! 682: * C3.105 SPITBOL STATEMENT NUMBERS IN THE LISTING MAY ! 683: * OPTIONALLY BE PADDED TO 6 OR 8 CHARS INSTEAD OF 5 ! 684: * BY DEFINING CONDITIONAL ASSEMBLY SYMBOLS ! 685: * .CSN6 OR .CSN8 . ! 686: * C3.106 TO FIX BUG 3.101. AT MODERATE COST, ! 687: * OPCODE IRZ (BRANCH IF INTEGER DIVIDE REMAINDER ! 688: * ZERO) INTRODUCED. ! 689: * C3.107 TO HANDLE POSSIBLE MACHINE DEPENDENCY IN STRING ! 690: * HASHING, CHS (COMPLETE HASHING OF STRING) OPCODE ! 691: * IS INTRODUCED. PROBABLY A NO-OP ON MOST MACHINES ! 692: * - NOT ON THE DEC10. ! 693: * C3.108 PROCEDURES PATIN,TFIND,TRACE HAVE BEEN ! 694: * MODIFIED TO CONFORM TO THE MINIMAL STANDARD ! 695: * CALL AND RETURN REGIME. ! 696: * C3.109 SYSFC INTERFACE REVISED SLIGHTLY TO PERMIT ! 697: * OSINT TO RETURN A POINTER TO A PRIVATELY ! 698: * ALLOCATED FCBLK WHICH SPITBOL WILL RETURN ON ! 699: * SUBSEQUENT I/O - SEE SYSFC DOC. ! 700: * C3.110 TO REMOVE INCONSISTENCIES IN CALLING SEQUENCES, ! 701: * ALL SYS ROUTINES HAVING ACCESS TO A POSSIBLE ! 702: * FCBLK HAVE FCBLK PTR OR ZERO IN REG. WA ON ENTRY. ! 703: * CHANGE AFFECTS SYSEF, SYSEN, SYSIL, SYSIN, ! 704: * SYSOU, SYSRW. ! 705: * C3.111 SYSPP BIT ALLOCATED TO PROVIDE ! 706: * -NOEXEC OPTION ON ENTRY TO SPITBOL. ! 707: ! 708: ! 709: Page 18 S P I T B O L - REVISION HISTORY ! 710: ! 711: * ! 712: * DOCUMENTATION REVISIONS ! 713: * ----------------------- ! 714: * ! 715: * D3.101 NEED TO PRESERVE REGISTERS IN SYSPI, SYSPR, ! 716: * SYSRD CALLS WAS OVERSTATED. ! 717: ! 718: ! 719: Page 19 S P I T B O L - REVISION HISTORY ! 720: ! 721: * VERSION 3.0 TO 3.1 (MAR 77) ! 722: * --------------------------- ! 723: * ! 724: * BUGS FIXED ! 725: * ---------- ! 726: * ! 727: * B3.001 REPLACE() COULD FAIL DURING PRE-EVALUATION. ! 728: * SPITBOL NOW SIGNALS AN ERROR FOR NULL OR ! 729: * UNEQUALLY LONG 2ND AND 3RD ARGUMENTS. ! 730: * B3.002 NEGATIVE SECOND ARGUMENTS TO DUPL, LPAD, RPAD ! 731: * CAUSED SPITBOL TO SIGNAL AN ERROR. NOW CAUSES ! 732: * RETURN OF NULL STRING OR FIRST ARG RESPECTIVELY. ! 733: * B3.003 BRN-S USED INSTEAD OF PPM-S IN S$SUB. ! 734: * B3.004 ERR USED INSTEAD OF ERB AFTER CMP30. ! 735: * B3.005 B$PFC, S$CNV, S$DEF, ARITH AND ARREF KEPT ! 736: * INFORMATION ILLEGALLY ABOVE THE STACK TOP. ! 737: * B3.006 PRE-EVALUATION OF CONSTANT PARTS OF ! 738: * COMPLEX GOTOS WAS ERRONEOUS. ! 739: * B3.007 INCORRECT HANDLING OF LABELS COMPILED BY CODE(). ! 740: * B3.008 THE SINGLE USE OF TRC (IN S$RPL) WAS NOT IN ! 741: * ACCORD WITH ITS DEFINITION. SOME TRANSLATIONS OF ! 742: * TRC MAY NEED REVISION NOW THAT THE USE ! 743: * HAS BEEN BROUGHT INTO LINE WITH DEFINITION. ! 744: * ! 745: * CHANGES ! 746: * ------- ! 747: * ! 748: * A DEBATE ON A FEW WEAKNESSES IN MINIMAL DESIGN HAS ! 749: * BEEN RESOLVED BY INTRODUCING 4 NEW OPCODES. ! 750: * ! 751: * C3.001 NEW MINIMAL OPCODES BMP AND DIM INTRODUCED ! 752: * TO AUGMENT INC AND DEC WHICH ARE APPLICABLE ! 753: * ONLY TO ADDRESSES. ! 754: * C3.002 THE OPCODE SZC (STORE ZERO CHARACTERS) HAD ! 755: * A RESTRICTED APPLICABILITY. IT HAS BEEN ! 756: * REPLACED BY THE MORE GENERAL ZER (ZEROISE). ! 757: * C3.003 FCBLKS MAY BE OPTIONALLY ALLOCATED AS XRBLK-S OR ! 758: * XNBLK-S - SEE SYSFC FOR VITAL INFORMATION. ! 759: * C3.004 CONTROL CARD PROCESSING HAS BEEN RECODED. ! 760: * -INXXX ALLOWS SPECIFICATION OF STANDARD INPUT ! 761: * FILE RECORD LENGTHS OTHER THAN 72 OR 80, SEE ALSO ! 762: * SYSRL. -SEQU IS IGNORED UNLESS -IN80 IS IN EFFECT ! 763: * C3.005 TO ENABLE EFFICIENT BUFFERING OF CHARS ON ! 764: * MACHINES WITHOUT CHAR. HANDLING ORDERS, THE ! 765: * CSC (COMPLETE STORE CHARACTERS) INSTRUCTION ! 766: * IS INTRODUCED. CURRENT IMPLEMENTATIONS CAN ! 767: * TRANSLATE IT AS A NO-OP IF IT IS OF NO BENEFIT. ! 768: * C3.006 INTEGERS 0,1,2 ARE TREATED SPECIALLY. ! 769: * ICBLKS IN STATIC ARE USED INSTEAD OF ! 770: * ALLOCATING SPACE IN DYNAMIC. ! 771: ! 772: ! 773: Page 20 S P I T B O L - REVISION HISTORY ! 774: ! 775: * ! 776: * VERSION 2.7 (JUNE 76) TO 3.0 (JAN 77) ! 777: * ------------------------------------- ! 778: * ! 779: * BUGS FIXED ! 780: * ---------- ! 781: * ! 782: * B2.701 GOES ILLEGAL IF TIMED OUT DURING PROCESSING OF ! 783: * DUMP() CALL. ! 784: * B2.702 GOES ILLEGAL IF SPITBOL ERROR DETECTED IN ARGS OF ! 785: * CODE() OR EVAL(). BUG FIXED SO THAT USER NOW GETS ! 786: * A SPITBOL ERROR REPORT (TRAPPABLE BY SETEXIT) ! 787: * BEFORE STATEMENT FAILURE. ! 788: * B2.703 GOES ILLEGAL IN SOME CIRCUMSTANCES WHEN ! 789: * MULTIPLE COMPILATION ERRORS OCCUR IN A STATEMENT ! 790: * B2.704 GOES ILLEGAL IF GARBAGE COLLECTOR RUNS OUT OF ! 791: * STACK SPACE. ! 792: * B2.705 CONTROL CARD PROCESSING INCORRECT FOR CDC 6400. ! 793: * B2.706 INCORRECT HANDLING OF MULTIPLE OCCURRENCES OF ! 794: * CHARS IN REPLACE 2ND AND 3RD ARGS. ! 795: * B2.707 STACK OVERFLOW IN PRE-EVALUATION OF REPLACE IN ! 796: * CDC 6400 VERSION. ! 797: * B2.708 AN EXPLICIT CALL OF SYSMW WAS CODED IN S$DAT ! 798: * INSTEAD OF THE MVW OPCODE. ! 799: * B2.709 CALL OF GARBAGE COLLECTOR WHILST DUMPING ! 800: * CAUSED HAVOC. ! 801: * B2.710 SIZE RESTRICTION ON SPITBOL OBJECTS (SIZE MUST BE ! 802: * NUMERICALLY LESS THAN LOWEST DYNAMIC ADDRESS) ! 803: * WAS NOT ENFORCED, WITH POTENTIAL FOR CATASTROPHE. ! 804: * B2.711 DEFERRED EXPRESSIONS INVOLVING ALTERNATION OR ! 805: * NEGATION WERE INCORRECTLY TRANSLATED. ! 806: * B2.712 LISTING OF A COMPILATION ERROR AT THE END OF A ! 807: * LONG LINE COULD CAUSE COMPILER TO GO ILLEGAL. ! 808: * B2.713 INCORRECT -NOFAIL CODE WITH SUCCESS GOTO. ! 809: ! 810: ! 811: Page 21 S P I T B O L - REVISION HISTORY ! 812: ! 813: * ! 814: * ! 815: * CHANGES ! 816: * ------- ! 817: * ! 818: * (IT IS NOT ANTICIPATED THAT MAJOR REVISIONS ON THIS ! 819: * SCALE WILL BE FREQUENT). ! 820: * ! 821: * C2.701 DEFAULT VALUE OF ANCHOR KEYWORD IS SET TO 1. THIS ! 822: * CONFLICTS WITH SNOBOL4 PRACTICE BUT IS A ! 823: * PREFERABLE DEFAULT FOR MOST APPLICATIONS. ! 824: * C2.702 IF ERRTYPE IS OUT OF RANGE THE STRING IN KEYWORD ! 825: * ERRTEXT IS PRINTED AS THE ERROR MESSAGE. ! 826: * C2.703 IF STLIMIT IS EXCEEDED, UP TO 10 MORE STATEMENTS ! 827: * MAY BE OBEYED TO PERMIT SETEXIT TRAP TO GAIN ! 828: * CONTROL. ! 829: * C2.704 THE CONCEPT OF AN INTERACTIVE CHANNEL IS ! 830: * INTRODUCED FOR IMPLEMENTATIONS WHERE AN ONLINE ! 831: * TERMINAL MAY BE USED FOR SPITBOL. THE STANDARD ! 832: * PRINT FILE MAY BE SPECIFIED AS INTERACTIVE IN ! 833: * WHICH CASE SHORTER TITLE LINES ARE OUTPUT. ! 834: * ALTERNATIVELY COPIES OF COMPILATION AND ! 835: * EXECUTION ERRORS ONLY MAY BE SENT TO THIS CHANNEL ! 836: * C2.705 PRINTING OF COMPILATION STATISTICS MAY BE ! 837: * SUPPRESSED. ! 838: * C2.706 PRINTING OF EXECUTION STATISTICS MAY BE ! 839: * SUPPRESSED. ! 840: * C2.707 EXTENDED OR COMPACT LISTING FORMAT MAY BE ! 841: * SELECTED. ! 842: * C2.708 AN INITIAL -NOLIST OPTION MAY BE SPECIFIED ! 843: * BEFORE COMPILATION STARTS. ! 844: * C2.709 TO SPECIFY CHOICES IMPLIED BY C2.704 TO C2.708 ! 845: * SYSPP INTERFACE IS REVISED AND SYSPI IS DEFINED. ! 846: * C2.710 COMPILATION AND EXECUTION TIME STATISTICS ! 847: * MESSAGES HAVE BEEN SHORTENED. ! 848: * C2.711 THE EXIT FUNCTION AS IN SITBOL IS INTRODUCED ! 849: * TO PERMIT SAVING LOAD MODULES - SEE SYSXI, S$EXT. ! 850: * C2.712 DIAGNOSTIC ROUTINES SYSGB AND SYSGD HAVE BEEN ! 851: * REMOVED. THEY WERE USEFUL IN THE EARLY DEBUGGING ! 852: * DAYS BUT HAVE FALLEN INTO DISUSE NOW. ! 853: * C2.713 SZC MAY HAVE AN OPERAND OF TYPE OPN INSTEAD OF ! 854: * TYPE OPW ! 855: * C2.714 INPUT/OUTPUT ASSOCIATION INTERFACE HAS BEEN ! 856: * REVISED. SYSIF,SYSOF HAVE BEEN CONSOLIDATED INTO ! 857: * THE NEW SYSTEM ROUTINE , SYSIO , AND THE ! 858: * SPECIFICATION OF SYSFC HAS BEEN SLIGHTLY CHANGED. ! 859: * C2.715 CONFIGURATION PARAMETER MXLEN HAS BEEN WITHDRAWN ! 860: * AND THE MAXIMUM SIZE OF A SPITBOL OBJECT WHICH ! 861: * WAS FORMERLY FIXED AT SPITBOL COMPILE TIME BY ! 862: * REFERENCE TO IT MAY NOW BE SPECIFIED AS A RUN ! 863: * TIME OPTION BY PLACING A VALUE IN WC BEFORE ENTRY ! 864: * TO SPITBOL. (SEE COMMENT ON DYNAMIC AREA IN ! 865: * BASIC INFORMATION SECTION). ! 866: * C2.716 A FUNCTION, HOST, IS INTRODUCED WHICH YIELDS ! 867: * INFORMATION ABOUT THE HOST MACHINE - SEE SYSHS ! 868: * AND S$HST. ! 869: ! 870: ! 871: Page 22 S P I T B O L - REVISION HISTORY ! 872: ! 873: * ! 874: * DOCUMENTATION REVISIONS ! 875: * ----------------------- ! 876: * ! 877: * D2.701 THE DESCRIPTION OF MVC HAS BEEN REVISED TO ! 878: * REFLECT THE FACT THAT SOME SPITBOL CODE SEQUENCES ! 879: * RELY ON ON MVC NOT DESTROYING WB. MINOR CHANGES ! 880: * HAVE BEEN MADE TO MWB AND MVW DESCRIPTIONS TO ! 881: * EMPHASISE SIMILARITIES IN THE IMPLICIT LOOPS OF ! 882: * THESE ORDERS. ! 883: * D2.702 DESCRIPTIONS OF DVI AND RMI HAVE BEEN CLARIFIED. ! 884: * D2.703 IMPLEMENTATION OF RSX,LSX,CEQ,CGE,CGT,CHI,CLO,CLT ! 885: * IS OPTIONAL AT PRESENT SINCE THEY ARE CURRENTLY ! 886: * UNUSED. THEIR USE IN LATER VERSIONS IS NOT ! 887: * EXCLUDED. ! 888: * D2.704 IMPOSSIBILITY OF USING STACK FOR RETURN LINKS OF ! 889: * N TYPE PROCEDURES IS EMPHASISED. ! 890: * D2.705 NOTATION (XL),(WC) ETC IN LANGUAGE DESCRIPTION IS ! 891: * CLARIFIED. ! 892: * D2.706 DOCUMENTATION OF SYSFC, SYSIO HAS BEEN IMPROVED. ! 893: * D2.707 OPCODE DESCRIPTIONS ARE CROSS REFERENCED FROM ! 894: * THE ALPHABETICAL OPCODE LIST. ! 895: * D2.708 GENERAL DESCRIPTION OF COMPILER HAS BEEN MOVED TO ! 896: * THE START OF THE COMPILER PROPER. ! 897: * D2.709 DEFINITIONS OF ENVIRONMENT PARAMETERS HAVE BEEN ! 898: * PUT NEAR THE FRONT OF THE DEFINITIONS SECTION. ! 899: ! 900: ! 901: Page 23 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 902: ! 903: * THE FOLLOWING SECTIONS DESCRIBE THE IMPLEMENTATION ! 904: * LANGUAGE ORIGINALLY DEVELOPED FOR SPITBOL BUT NOW MORE ! 905: * WIDELY USED. MINIMAL IS AN ASSEMBLY LANGUAGE FOR AN ! 906: * IDEALISED MACHINE WHICH IS NOW DESCRIBED. ! 907: * ! 908: * SECTION 1 - CONFIGURATION PARAMETERS ! 909: * ! 910: * THERE ARE SEVERAL PARAMETERS WHICH MAY VARY WITH THE ! 911: * TARGET MACHINE. THE MACRO-PROGRAM IS INDEPENDENT OF THE ! 912: * ACTUAL DEFINITIONS OF THESE PARAMETERS. ! 913: * THE DEFINITIONS OF THESE PARAMETERS ARE SUPPLIED BY ! 914: * THE TRANSLATION PROGRAM TO MATCH THE TARGET MACHINE. ! 915: * ! 916: * CFP$A NUMBER OF DISTINCT CHARACTERS IN ! 917: * INTERNAL ALPHABET IN THE RANGE ! 918: * 64 LE CFP$A LE MXLEN. ! 919: * ! 920: * CFP$B NUMBER OF BAUS IN A WORD WHERE A ! 921: * BAU IS THE AMOUNT OF STORAGE ! 922: * ADDRESSED BY THE LEAST SIGNIFICANT ! 923: * ADDRESS BIT (SEE NEXT SECTION). ! 924: * ! 925: * CFP$C NUMBER OF CHARACTERS WHICH CAN ! 926: * BE STORED IN A SINGLE WORD. ! 927: * ! 928: * CFP$F BAU OFFSET FROM START OF A STRING ! 929: * BLOCK TO THE FIRST CHARACTER. ! 930: * DEPENDS BOTH ON TARGET MACHINE AND ! 931: * STRING DATA STRUCTURE. SEE PLC,PSC. ! 932: * ! 933: * CFP$I NUMBER OF WORDS IN A SIGNED ! 934: * INTEGER CONSTANT ! 935: * ! 936: * CFP$M THE LARGEST POSITIVE INTEGER ! 937: * OF FORM 2**N - 1 WHICH CAN BE ! 938: * STORED IN A SINGLE WORD. N WILL ! 939: * OFTEN BE CFP$N BUT NEED NOT BE. ! 940: * ! 941: * ! 942: * CFP$N NUMBER OF BITS WHICH CAN BE STORED ! 943: * IN A ONE WORD BIT STRING. ! 944: * ! 945: * CFP$R NUMBER OF WORDS IN A REAL CONSTANT ! 946: * ! 947: * CFP$S NUMBER OF SIGNIFICANT DIGITS TO ! 948: * BE OUTPUT IN CONVERSION OF A REAL ! 949: * QUANTITY. THE INTEGER CONSISTING OF ! 950: * THIS NUMBER OF 9S MUST NOT BE TOO ! 951: * LARGE TO FIT IN THE INTEGER ACCUM. ! 952: * ! 953: * CFP$U UPPER BOUND ON NUMBER OF CHARS IN ! 954: * THE SUBSET USED IN BSW SWITCHES IN ! 955: * RANGE 64 LE CFP$U LE CFP$A. TYPICAL ! 956: * FOR ASCII IS CFP$U, 128 CFP$A, 256 ! 957: * ! 958: * CFP$X NUMBER OF DIGITS IN REAL EXPONENT ! 959: ! 960: ! 961: Page 24 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 962: ! 963: * ! 964: * SECTION 2 - MEMORY ! 965: * ! 966: * MEMORY IS ORGANIZED INTO WORDS WHICH EACH CONTAIN CFP$B ! 967: * BAUS. THE REASONING BEHIND THIS IS THAT MINIMAL PROGRAMS ! 968: * SHOULD RUN EITHER ON MACHINES HAVING BYTE ADDRESSING ! 969: * OR THOSE HAVING WORD ADDRESSING SCHEMES. MINIMAL MOV ! 970: * INSTRUCTIONS ALWAYS OPERATE ON WORD SIZED OPERANDS OR, ! 971: * IN THE CASE OF THE CHARACTER OPCODES, ON CHARACTER ! 972: * SIZED OPERANDS. NOWHERE IN MINIMAL ARE BYTE SIZED ! 973: * OPERANDS PERMITTED. HOWEVER SINCE ADDRESSING ON BYTE ! 974: * MACHINES MUST BE CATERED FOR, THE CONCEPT OF BASIC ! 975: * ADDRESSABLE UNIT, HENCEFORTH REFERRED TO AS BAU, IS USED ! 976: * A BAU IS THAT COLLECTION OF MEMORY BITS WHICH ! 977: * CORRESPONDS TO A CHANGE OF UNITY IN THE LEAST SIGNIFICANT ! 978: * BIT OF AN ADDRESS. ON A BYTE MACHINE, A BAU WILL ! 979: * CORRESPOND TO A BYTE AND ON A WORD MACHINE TO A WORD. ! 980: * BY CONVENTION ADDRESSES ARE HELD IN BAU FORM (SINCE A ! 981: * BAU IS A BASIC ADDRESSING UNIT). HOWEVER SOME OF THE ! 982: * OPERAND FORMATS PERMIT ADDRESSING WITH WORD ! 983: * OFFSETS PAST A BAU ADDRESS IN A REGISTER. SINCE ! 984: * MEMORY ACCESSING IS IN TERMS OF WORDS, CARE IS NEEDED ! 985: * FOR EXAMPLE WHEN WORD COUNTS ARE COMPUTED FROM ADDRESSES ! 986: * AS A BAU DOES NOT NECESSARILY COINCIDE WITH A WORD. ON ! 987: * THE OTHER HAND, THE BLOCK MOVE ORDER, MVW, REQUIRES A ! 988: * COUNT IN BAUS. THE DEFINITIONS OF THE MINIMAL OPCODES ! 989: * SHOULD BE READ WITH CAREFUL ATTENTION TO THEIR ADDRESSING ! 990: * IMPLICATIONS. ! 991: * FOR WORD MACHINES CFP$B, WHICH IS A CONFIGURATION ! 992: * PARAMETER, WILL BE ONE IN WHICH CASE WORDS AND BAUS ARE ! 993: * IDENTICAL. TO EACH WORD CORRESPONDS AN ADDRESS IN BAUS, ! 994: * A NON-NEGATIVE QUANTITY WHICH IS A MULTIPLE OF CFP$B. ! 995: * DATA IS ORGANIZED INTO WORDS AS FOLLOWS. ! 996: * ! 997: * 1) A SIGNED INTEGER VALUE OCCUPIES CFP$I CONSECUTIVE ! 998: * WORDS (CFP$I IS A CONFIGURATION PARAMETER). ! 999: * THE RANGE MAY INCLUDE MORE NEGATIVE NUMBERS THAN ! 1000: * POSITIVE (E.G. THE TWOS COMPLEMENT REPRESENTATION). ! 1001: * ! 1002: * 2) A SIGNED REAL VALUE OCCUPIES CFP$R CONSECUTIVE ! 1003: * WORDS. (CFP$R IS A CONFIGURATION PARAMETER). ! 1004: * ! 1005: * 3) CFP$C CHARACTERS MAY BE STORED IN A SINGLE WORD ! 1006: * (CFP$C IS A CONFIGURATION PARAMETER). ! 1007: * ! 1008: * 4) A BIT STRING CONTAINING CFP$N BITS CAN BE STORED IN ! 1009: * A SINGLE WORD (CFP$N IS A CONFIGURATION PARAMETER). ! 1010: ! 1011: ! 1012: Page 25 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 1013: ! 1014: * ! 1015: * 5) A WORD CAN CONTAIN A NON-NEGATIVE INTEGER VALUE IN ! 1016: * THE RANGE (0 LE N LE CFP$M). THESE INTEGER VALUES ! 1017: * MAY REPRESENT ADDRESSES OF OTHER WORDS AND SOME OF ! 1018: * THE INSTRUCTIONS USE THIS FACT TO PROVIDE INDEXING ! 1019: * AND INDIRECTION FACILITIES. ! 1020: * ! 1021: * 6) PROGRAM INSTRUCTIONS OCCUPY WORDS IN AN UNDEFINED ! 1022: * MANNER. DEPENDING ON THE ACTUAL IMPLEMENTATION, ! 1023: * INSTRUCTIONS MAY OCCUPY SEVERAL WORDS, OR PART OF ! 1024: * A WORD, OR EVEN BE SPLIT OVER WORD BOUNDARIES. ! 1025: * ! 1026: * THE FOLLOWING REGIONS OF MEMORY ARE AVAILABLE TO THE ! 1027: * PROGRAM. EACH REGION CONSISTS OF A SERIES OF WORDS WITH ! 1028: * CONSECUTIVE ADDRESSES. ! 1029: * ! 1030: * 1) CONSTANT SECTION ASSEMBLED CONSTANTS ! 1031: * 2) WORKING STORAGE SECTION ASSEMBLED WORK AREAS ! 1032: * 3) PROGRAM SECTION ASSEMBLED INSTRUCTIONS ! 1033: * 4) STACK AREA ALLOCATED STACK AREA ! 1034: * 5) DATA AREA ALLOCATED DATA AREA ! 1035: * ! 1036: * SECTION 3 - REGISTERS ! 1037: * ! 1038: * THERE ARE THREE INDEX REGISTERS CALLED XR,XL,XS. IN ! 1039: * ADDITION XL MAY SOMETIMES BE REFERRED TO BY THE ALIAS ! 1040: * OF XT - SEE SECTION 4. ANY OF THE ABOVE ! 1041: * REGISTERS MAY HOLD A POSITIVE INTEGER IN THE RANGE ! 1042: * (0 LE N LE CFP$M). WHEN THE INDEX REGISTER IS USED FOR ! 1043: * INDEXING PURPOSES, THIS MUST BE AN APPROPRIATE ADDRESS ! 1044: * IN BAUS. ! 1045: * XS IS SPECIAL IN THAT IT IS USED TO POINT TO THE TOP ! 1046: * ITEM OF A STACK IN MEMORY. THE STACK MAY BUILD UP OR ! 1047: * DOWN IN MEMORY.SINCE IT IS REQUIRED THAT XS POINTS TO THE ! 1048: * STACK TOP BUT ACCESS TO ITEMS BELOW THE TOP IS PERMITTED, ! 1049: * REGISTERS XS AND XT MAY BE USED WITH SUITABLE OFFSETS ! 1050: * TO INDEX STACKED ITEMS. ONLY XS AND XT MAY BE USED FOR ! 1051: * THIS PURPOSE SINCE THE DIRECTION OF THE OFFSET IS ! 1052: * TARGET MACHINE DEPENDENT. XT IS A SYNONYM FOR XL ! 1053: * WHICH THEREFORE CANNOT BE USED IN CODE SEQUENCES ! 1054: * REFERENCING XT. ! 1055: * THE STACK IS USED FOR S-R LINKAGE AND TEMPORARY ! 1056: * DATA STORAGE FOR WHICH THE STACK ARRANGEMENT IS SUITABLE. ! 1057: * XR,XL CAN ALSO CONTAIN A CHARACTER POINTER IN CONJUNCTION ! 1058: * WITH THE CHARACTER INSTRUCTIONS (SEE DESCRIPTION OF PLC). ! 1059: ! 1060: ! 1061: Page 26 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 1062: ! 1063: * ! 1064: * THERE ARE THREE WORK REGISTERS CALLED WA,WB,WC WHICH ! 1065: * CAN CONTAIN ANY DATA ITEM WHICH CAN BE STORED IN A ! 1066: * SINGLE MEMORY WORD. IN FACT, THE WORK REGISTERS ARE JUST ! 1067: * LIKE MEMORY LOCATIONS EXCEPT THAT THEY HAVE NO ADDRESSES ! 1068: * AND ARE REFERENCED IN A SPECIAL WAY BY THE INSTRUCTIONS. ! 1069: * NOTE THAT REGISTERS WA,WB HAVE SPECIAL USES IN CONNECTION ! 1070: * WITH THE CVD, CVM, MVC, MVW, MWB, CMC, TRC INSTRUCTIONS. ! 1071: * REGISTER WC MAY OVERLAP THE INTEGER ACCUMULATOR (IA) IN ! 1072: * SOME IMPLEMENTATIONS. THUS ANY OPERATION CHANGING THE ! 1073: * VALUE IN WC LEAVES (IA) UNDEFINED AND VICE VERSA ! 1074: * EXCEPT AS NOTED IN THE FOLLOWING RESTRICTION ON SIMPLE ! 1075: * DUMP/RESTORE OPERATIONS. ! 1076: * ! 1077: * RESTRICTION ! 1078: * ----------- ! 1079: * ! 1080: * IF IA AND WC OVERLAP THEN ! 1081: * STI IASAV ! 1082: * LDI IASAV ! 1083: * DOES NOT CHANGE WC, AND ! 1084: * MOV WC,WCSAV ! 1085: * MOV WCSAV,WC ! 1086: * DOES NOT CHANGE IA. ! 1087: * ! 1088: * ! 1089: * ! 1090: * THERE IS AN INTEGER ACCUMULATOR (IA) WHICH IS CAPABLE OF ! 1091: * HOLDING A SIGNED INTEGER VALUE (CFP$I WORDS LONG). ! 1092: * REGISTER WC MAY OVERLAP THE INTEGER ACCUMULATOR (IA) IN ! 1093: * SOME IMPLEMENTATIONS. THUS ANY OPERATION CHANGING THE ! 1094: * VALUE IN WC LEAVES (IA) UNDEFINED AND VICE VERSA ! 1095: * EXCEPT AS NOTED IN THE ABOVE RESTRICTION ON SIMPLE ! 1096: * DUMP/RESTORE OPERATIONS. ! 1097: * ! 1098: * ! 1099: * ! 1100: * THERE IS A SINGLE REAL ACCUMULATOR (RA) WHICH CAN HOLD ! 1101: * ANY REAL VALUE AND IS COMPLETELY SEPARATE FROM ANY OF ! 1102: * THE OTHER REGISTERS OR PROGRAM ACCESSIBLE LOCATIONS. ! 1103: * ! 1104: * ! 1105: * ! 1106: * THE CODE POINTER REGISTER (CP) IS A SPECIAL INDEX ! 1107: * REGISTER FOR USE IN IMPLEMENTATIONS OF INTERPRETORS. ! 1108: * IT IS USED TO CONTAIN A PSEUDO-CODE POINTER AND CAN ! 1109: * ONLY BE AFFECTED BY ICP, LCP, SCP AND LCW INSTRUCTIONS. ! 1110: ! 1111: ! 1112: Page 27 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 1113: ! 1114: * SECTION 4 - THE STACK ! 1115: * ! 1116: * THE FOLLOWING NOTES ARE TO GUIDE BOTH IMPLEMENTORS OF ! 1117: * SYSTEMS WRITTEN IN MINIMAL AND MINIMAL PROGRAMMERS IN ! 1118: * DEALING WITH STACK MANIPULATION. IMPLEMENTATION OF A ! 1119: * DOWNWARDS BUILDING STACK IS EASIEST AND IN GENERAL IS ! 1120: * TO BE PREFERRED, IN WHICH CASE IT IS MERELY NECESSARY TO ! 1121: * CONSIDER XT AS AN ALTERNATIVE NAME FOR XL. ! 1122: * ! 1123: * THE MINIMAL VIRTUAL MACHINE INCLUDES A STACK AND HAS ! 1124: * OPERAND FORMATS -(XS) AND (XS)+ FOR PUSHING AND POPPING ! 1125: * ITEMS WITH AN IMPLICATION THAT THE STACK BUILDS DOWN IN ! 1126: * MEMORY (A D-STACK). HOWEVER ON SOME TARGET MACHINES IT IS ! 1127: * BETTER FOR THE STACK TO BUILD UP (A U-STACK). ! 1128: * A STACK ADDRESSED ONLY BY PUSH AND POP OPERATIONS CAN ! 1129: * BUILD IN EITHER DIRECTION WITH NO COMPLICATION BUT ! 1130: * SUCH A PURE SCHEME OF STACK ACCESS PROVES RESTRICTIVE. ! 1131: * HENCE IT IS PERMITTED TO ACCESS BURIED ITEMS USING AN ! 1132: * INTEGER OFFSET PAST THE INDEX REGISTER POINTING TO THE ! 1133: * STACK TOP. ON TARGET MACHINES THIS OFFSET WILL BE ! 1134: * POSITIVE/NEGATIVE FOR D-STACKS/U-STACKS AND THIS MUST ! 1135: * BE ALLOWED FOR IN THE TRANSLATION. ! 1136: * A FURTHER RESTRICTION IS THAT AT NO TIME MAY AN ITEM BE ! 1137: * PLACED ABOVE THE STACK TOP. FOR SOME OPERATIONS THIS ! 1138: * MAKES IT CONVENIENT TO ADVANCE THE STACK POINTER AND THEN ! 1139: * ADDRESS ITEMS BELOW IT USING A SECOND INDEX REGISTER. ! 1140: * THE PROBLEM OF SIGNED OFFSETS PAST SUCH A REGISTER THEN ! 1141: * ARISES. TO DISTINGUISH STACK OFFSETS, WHICH IN SOME ! 1142: * IMPLEMENTATIONS MAY BE NEGATIVE, FROM NON-STACK OFFSETS ! 1143: * WHICH ARE INVARIABLY POSITIVE, XT, AN ALIAS OR ! 1144: * SYNONYM FOR XL IS USED. FOR A U-STACK IMPLEMENTATION, THE ! 1145: * MINIMAL TRANSLATOR SHOULD NEGATE THE SIGN OF OFFSETS ! 1146: * APPLIED TO BOTH (XS) AND (XT). ! 1147: * PROGRAMMERS SHOULD NOTE THAT SINCE XT IS NOT A ! 1148: * SEPARATE REGISTER, XL SHOULD NOT BE USED IN CODE WHERE ! 1149: * XT IS REFERENCED. OTHER MODIFICATIONS NEEDED IN U-STACK ! 1150: * TRANSLATIONS ARE IN THE ADD, SUB, ICA, DCA OPCODES ! 1151: * APPLIED TO XS, XT. FOR EXAMPLE ! 1152: * ! 1153: * MINIMAL D-STACK TRANS. U-STACK TRANS. ! 1154: * ! 1155: * MOV WA,-(XS) SBI XS,1 ADI XS,1 ! 1156: * STO WA,(XS) STO WA,(XS) ! 1157: * MOV (XT)+,WC LOD WC,(XL) LOD WC,(XL) ! 1158: * ADI XL,1 SBI XL,1 ! 1159: * ADD =SEVEN,XS ADI XS,7 SBI XS,7 ! 1160: * MOV 2(XT),WA LOD WA,2(XL) LOD WA,-2(XL) ! 1161: * ICA XS ADI XS,1 SBI XS,1 ! 1162: * ! 1163: * NOTE THAT FORMS SUCH AS ! 1164: * MOV -(XS),WA ! 1165: * ADD WA,(XS)+ ! 1166: * ARE ILLEGAL, SINCE THEY ASSUME INFORMATION STORAGE ! 1167: * ABOVE THE STACK TOP. ! 1168: ! 1169: ! 1170: Page 28 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 1171: ! 1172: * SECTION 5 - INTERNAL CHARACTER SET ! 1173: * ! 1174: * THE INTERNAL CHARACTER SET IS REPRESENTED BY A SET OF ! 1175: * CONTIGUOUS CODES FROM 0 TO CFP$A-1. THE CODES FOR THE ! 1176: * DIGITS 0-9 MUST BE CONTIGUOUS AND IN SEQUENCE. OTHER ! 1177: * THAN THIS, THERE ARE NO RESTRAINTS. ! 1178: * ! 1179: * THE FOLLOWING SYMBOLS ARE AUTOMATICALLY DEFINED TO HAVE ! 1180: * THE VALUE OF THE CORRESPONDING INTERNAL CHARACTER CODE. ! 1181: * ! 1182: * CH$LA LETTER A ! 1183: * CH$LB LETTER B ! 1184: * . . ! 1185: * CH$L$ LETTER Z ! 1186: * ! 1187: * CH$D0 DIGIT 0 ! 1188: * . . ! 1189: * CH$D9 DIGIT 9 ! 1190: * ! 1191: * CH$AM AMPERSAND ! 1192: * CH$AS ASTERISK ! 1193: * CH$AT AT ! 1194: * CH$BB LEFT BRACKET ! 1195: * CH$BL BLANK ! 1196: * CH$BR VERTICAL BAR ! 1197: * CH$CL COLON ! 1198: * CH$CM COMMA ! 1199: * CH$DL DOLLAR SIGN ! 1200: * CH$DT DOT (PERIOD) ! 1201: * CH$DQ DOUBLE QUOTE ! 1202: * CH$EQ EQUAL SIGN ! 1203: * CH$EX EXCLAMATION MARK ! 1204: * CH$MN MINUS ! 1205: * CH$NM NUMBER SIGN ! 1206: * CH$NT NOT ! 1207: * CH$PC PERCENT ! 1208: * CH$PL PLUS ! 1209: * CH$PP LEFT PAREN ! 1210: * CH$RB RIGHT BRACKET ! 1211: * CH$RP RIGHT PAREN ! 1212: * CH$QU QUESTION MARK ! 1213: * CH$SL SLASH ! 1214: * CH$SM SEMI-COLON ! 1215: * CH$SQ SINGLE QUOTE ! 1216: * CH$UN UNDERLINE ! 1217: ! 1218: ! 1219: Page 29 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 1220: ! 1221: * ! 1222: * THE FOLLOWING OPTIONAL SYMBOLS ARE INCORPORATED ! 1223: * BY DEFINING THE CONDITIONAL ASSEMBLY SYMBOL NAMED. ! 1224: * ! 1225: * 26 SHIFTED LETTERS INCORPORATED BY DEFINING .CASL ! 1226: * ! 1227: * CH$$A SHIFTED A ! 1228: * CH$$B SHIFTED B ! 1229: * . . ! 1230: * CH$$$ SHIFTED Z ! 1231: * ! 1232: * CH$HT HORIZONTAL TAB - DEFINE .CAHT ! 1233: * CH$VT VERTICAL TAB - DEFINE .CAVT ! 1234: * ! 1235: * CASE OF SPITBOL SOURCE FILES ! 1236: * ! 1237: * ORIGINALLY, SNOBOL4 AND SPITBOL CATERED FOR THE ERA OF ! 1238: * CARD PUNCH WITH FIXED LENGTH RECORDS IN UPPER CASE ONLY. ! 1239: * MORE RECENT SYSTEMS HAVE READY USE OF LOWER CASE CHARS ! 1240: * IN THE ASCII OR EBCDIC SET AND WITH SOME SYSTEMS (NOTABLY ! 1241: * UNIX), USE OF UPPER CASE CHARS IS NOT IDIOMATIC. BY ! 1242: * SUITABLE CHOICE OF CONDITIONAL ASSEMBLY OPTIONS, A ! 1243: * SYSTEM CAN BE TAILORED TO SUIT THE PREVAILING STYLE ! 1244: * OF THE TARGET MACHINE. ADDITIONALLY SOME USER CONTROL IS ! 1245: * AVAILABLE BY USE OF CONTROL CARDS SO THAT CASE MAY BE ! 1246: * CONSIDERED SIGNIFICANT OR NOT AS DESIRED. ! 1247: * THE SPITBOL SOURCE ASSUMES THAT LOWER CASE LETTERS ARE ! 1248: * RELATED TO UPPER BY THE ADDITION OF A CONSTANT OFFSET. ! 1249: * IF THIS IS NOT SO, DEFINE TRANSLATIONS FOR CLU, CUL ! 1250: * OPCODES AND DEFINE CONDITIONAL ASSEMBLY SYMBOL .CSCV . ! 1251: ! 1252: ! 1253: Page 30 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 1254: ! 1255: * ! 1256: * SECTION 6 - CONDITIONAL ASSEMBLY FEATURES ! 1257: * ! 1258: * SOME FEATURES OF THE INTERPRETER ARE APPLICABLE TO ONLY ! 1259: * CERTAIN TARGET MACHINES. THEY MAY BE INCORPORATED OR ! 1260: * OMITTED BY USE OF CONDITIONAL ASSEMBLY. THE FULL ! 1261: * FORM OF A CONDITION IS - ! 1262: * .IF CONDITIONAL ASSEMBLY SYMBOL (CAS) ! 1263: * .THEN ! 1264: * MINIMAL STATEMENTS1 (MS1) ! 1265: * .ELSE ! 1266: * MINIMAL STATEMENTS2 (MS2) ! 1267: * .FI ! 1268: * THE FOLLOWING RULES APPLY ! 1269: * 1. THE DIRECTIVES .IF, .THEN, .ELSE, .FI MUST ! 1270: * START IN COLUMN 1. ! 1271: * 2. THE CONDITIONAL ASSEMBLY SYMBOL MUST START WITH A ! 1272: * DOT IN COLUMN 8 FOLLOWED BY 4 LETTERS OR DIGITS E.G. ! 1273: * .CA$1 ! 1274: * 3. .THEN IS REDUNDANT AND MAY BE OMITTED IF WISHED. ! 1275: * 4. MS1, MS2 ARE ARBITRARY SEQUENCES OF MINIMAL ! 1276: * STATEMENTS EITHER OF WHICH MAY BE NULL OR MAY ! 1277: * CONTAIN FURTHER CONDITIONS. ! 1278: * 5. IF MS2 IS OMITTED, .ELSE MAY ALSO BE OMITTED. ! 1279: * 6. .FI IS REQUIRED. ! 1280: * 7. CONDITIONS MAY BE NESTED TO A DEPTH DETERMINED ! 1281: * BY THE TRANSLATOR (NOT LESS THAN 20, SAY). ! 1282: * ! 1283: * SELECTION OF THE ALTERNATIVES MS1, MS2 IS BY MEANS OF THE ! 1284: * DEFINE AND UNDEFINE DIRECTIVES OF FORM - ! 1285: * .DEF CAS ! 1286: * .UNDEF CAS ! 1287: * WHICH OBEY RULES 1. AND 2. ABOVE AND MAY OCCUR AT ANY ! 1288: * POINT IN A MINIMAL PROGRAM, INCLUDING WITHIN A CONDITION. ! 1289: * MULTIPLY DEFINING A SYMBOL IS AN ERROR. ! 1290: * UNDEFINING A SYMBOL WHICH IS NOT DEFINED IS NOT AN ERROR. ! 1291: * ! 1292: * THE EFFECT IS THAT IF A SYMBOL IS CURRENTLY DEFINED, ! 1293: * THEN IN ANY CONDITION DEPENDING ON IT, MS1 WILL BE ! 1294: * PROCESSED AND MS2 OMITTED. CONVERSELY IF IT IS UNDEFINED, ! 1295: * MS1 WILL BE OMITTED AND MS2 PROCESSED. ! 1296: * NESTING OF CONDITIONS IS SUCH THAT CONDITIONS ! 1297: * IN A SECTION NOT SELECTED FOR PROCESSING MUST NOT BE ! 1298: * EVALUATED. NESTED CONDITIONS MUST REMEMBER THEIR ! 1299: * ENVIRONMENT WHILST BEING PROCESSED. EFFECTIVELY THIS ! 1300: * IMPLIES USE OF A SCHEME BASED ON A STACK WITH .IF, .FI ! 1301: * MATCHING BY THE CONDITION PROCESSOR OF THE TRANSLATOR. ! 1302: ! 1303: ! 1304: Page 31 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 1305: ! 1306: * ! 1307: * SECTION 7 - OPERAND FORMATS ! 1308: * ! 1309: * THE FOLLOWING SECTION DESCRIBES THE VARIOUS POSSIBILITIES ! 1310: * FOR OPERANDS OF INSTRUCTIONS AND ASSEMBLY OPERATIONS. ! 1311: * ! 1312: * 01 INT UNSIGNED INTEGER LE CFP$M ! 1313: * 02 DLBL SYMBOL DEFINED IN DEFINITIONS SEC ! 1314: * 03 WLBL LABEL IN WORKING STORAGE SECTION ! 1315: * 04 CLBL LABEL IN CONSTANT SECTION ! 1316: * 05 ELBL PROGRAM SECTION ENTRY LABEL ! 1317: * 06 PLBL PROGRAM SECTION LABEL (NON-ENTRY) ! 1318: * 07 X ONE OF THE THREE INDEX REGISTERS ! 1319: * 08 W ONE OF THE THREE WORK REGISTERS ! 1320: * 09 (X) LOCATION INDEXED BY X ! 1321: * 10 (X)+ LIKE (X) BUT POST INCREMENT X ! 1322: * 11 -(X) LIKE (X) BUT PREDECREMENT X ! 1323: * 12 INT(X) LOCATION INT WORDS BEYOND ADDR IN X ! 1324: * 13 DLBL(X) LOCATION DLBL WORDS PAST ADDR IN X ! 1325: * 14 CLBL(X) LOCATION (X) BAUS BEYOND CLBL ! 1326: * 15 WLBL(X) LOCATION (X) BAUS BEYOND WLBL ! 1327: * 16 INTEGER SIGNED INTEGER (DIC) ! 1328: * 17 REAL SIGNED REAL (DRC) ! 1329: * 18 =DLBL LOCATION CONTAINING DAC DLBL ! 1330: * 19 *DLBL LOCATION CONTAINING DAC CFP$B*DLBL ! 1331: * 20 =WLBL LOCATION CONTAINING DAC WLBL ! 1332: * 21 =CLBL LOCATION CONTAINING DAC CLBL ! 1333: * 22 =ELBL LOCATION CONTAINING DAC ELBL ! 1334: * 23 PNAM PROCEDURE LABEL (ON PRC INSTRUC) ! 1335: * 24 EQOP OPERAND FOR EQU INSTRUCTION ! 1336: * 25 PTYP PROCEDURE TYPE (SEE PRC) ! 1337: * 26 TEXT ARBITRARY TEXT (ERB,ERR,TTL) ! 1338: * 27 DTEXT DELIMITED TEXT STRING (DTC/DDC) ! 1339: * 28 RNAM ROUTINE NAME (ON AN RTN INSTRN) ! 1340: * 29 GLBL GLOBAL LABEL (SEE GLB) ! 1341: * ! 1342: * THE NUMBERS IN THE ABOVE LIST ARE USED IN SUBSEQUENT ! 1343: * DESCRIPTION AND IN SOME OF THE MINIMAL TRANSLATORS. ! 1344: ! 1345: ! 1346: Page 32 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 1347: ! 1348: * ! 1349: * OPERAND FORMATS (CONTINUED) ! 1350: * ! 1351: * THE FOLLOWING SPECIAL SYMBOLS REFER TO A COLLECTION OF ! 1352: * THE LISTED POSSIBILITIES ! 1353: * ! 1354: * VAL 01,02 PREDEFINED VALUE ! 1355: * ! 1356: * VAL IS USED TO REFER TO A PREDEFINED ONE WORD ! 1357: * INTEGER VALUE IN THE RANGE 0 LE N LE CFP$M. ! 1358: * ! 1359: * REG 07,08 REGISTER ! 1360: * ! 1361: * REG IS USED TO DESCRIBE AN OPERAND WHICH CAN BE ! 1362: * ANY OF THE REGISTERS (XL,XR,XS,XT,WA,WB,WC). SUCH ! 1363: * AN OPERAND CAN HOLD A ONE WORD INTEGER (ADDRESS). ! 1364: * ! 1365: * OPC 09,10,11 CHARACTER ! 1366: * ! 1367: * OPC IS USED TO DESIGNATE A SPECIFIC CHARACTER ! 1368: * OPERAND FOR USE IN THE LCH AND SCH INSTRUCTIONS. ! 1369: * THE INDEX REGISTER REFERENCED MUST BE EITHER XR OR ! 1370: * XL (NOT XS,XT). SEE SECTION ON CHARACTER OPERATIONS. ! 1371: * ! 1372: * OPS 03,04,09,12,13,14,15 MEMORY REFERENCE ! 1373: * ! 1374: * OPS IS USED TO DESCRIBE AN OPERAND WHICH IS IN ! 1375: * MEMORY. THE OPERAND MAY BE ONE OR MORE WORDS LONG ! 1376: * DEPENDING ON THE DATA TYPE. IN THE CASE OF MULTIWORD ! 1377: * OPERANDS, THE ADDRESS GIVEN IS THE FIRST WORD. ! 1378: * ! 1379: * OPW AS FOR OPS + 08,10,11 FULL WORD ! 1380: * ! 1381: * OPW IS USED TO REFER TO AN OPERAND WHOSE CAPACITY IS ! 1382: * THAT OF A FULL MEMORY WORD. OPW INCLUDES ALL THE ! 1383: * POSSIBILITIES FOR OPS (THE REFERENCED WORD IS USED) ! 1384: * PLUS THE USE OF ONE OF THE THREE WORK REGISTERS ! 1385: * (WA,WB,WC). IN ADDITION, THE FORMATS (X)+ AND -(X) ! 1386: * ALLOW INDEXED OPERATIONS IN WHICH THE INDEX REGISTER ! 1387: * IS POPPED BY ONE WORD AFTER THE REFERENCE (X)+, ! 1388: * OR PUSHED BY ONE WORD BEFORE THE REFERENCE -(X) ! 1389: * THESE LATTER TWO FORMATS PROVIDE A FACILITY FOR ! 1390: * MANIPULATION OF STACKS. THE FORMAT DOES NOT IMPLY ! 1391: * A PARTICULAR DIRECTION IN WHICH STACKS MUST BUILD - ! 1392: * IT IS USED FOR COMPACTNESS. NOTE THAT THERE IS A ! 1393: * RESTRICTION WHICH DISALLOWS AN INSTRUCTION TO USE ! 1394: * AN INDEX REGISTER IN ONE OF THESE FORMATS ! 1395: * IN SOME OTHER MANNER IN THE SAME INSTRUCTION. ! 1396: * E.G. MOV XL,(XL)+ IS ILLEGAL. ! 1397: * THE FORMATS -(X) AND (X)+ MAY ALSO BE USED IN ! 1398: * PRE-DECREMENTATION, POST-INCREMENTATION TO ACCESS ! 1399: * THE ADJACENT CHARACTER OF A STRING. ! 1400: ! 1401: ! 1402: Page 33 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 1403: ! 1404: * ! 1405: * OPERAND FORMATS (CONTINUED) ! 1406: * ! 1407: * OPN AS FOR OPW + 07 ONE WORD INTEGER ! 1408: * ! 1409: * OPN IS USED TO REPRESENT AN OPERAND LOCATION WHICH ! 1410: * CAN CONTAIN A ONE WORD INTEGER (E.G. AN ADDRESS). ! 1411: * THIS INCLUDES ALL THE POSSIBILITIES FOR OPW PLUS ! 1412: * THE USE OF ONE OF THE INDEX REGISTERS (XL,XR,XT, ! 1413: * XS). THE RANGE OF INTEGER VALUES IS 0 LE N LE CFP$M. ! 1414: * ! 1415: * OPV AS FOR OPN + 18-22 ONE WORD INTEGER VALUE ! 1416: * ! 1417: * OPV IS USED FOR AN OPERAND WHICH CAN YIELD A ONE ! 1418: * WORD INTEGER VALUE (E.G. AN ADDRESS). IT INCLUDES ! 1419: * ALL THE POSSIBILITIES FOR OPN (THE CURRENT VALUE OF ! 1420: * THE LOCATION IS USED) PLUS THE USE OF LITERALS. NOTE ! 1421: * THAT ALTHOUGH THE LITERAL FORMATS ARE DESCRIBED IN ! 1422: * TERMS OF A REFERENCE TO A LOCATION CONTAINING AN ! 1423: * ADDRESS CONSTANT, THIS LOCATION MAY NOT ACTUALLY ! 1424: * EXIST IN SOME IMPLEMENTATIONS SINCE ONLY THE VALUE ! 1425: * IS REQUIRED. A RESTRICTION IS PLACED ON LITERALS ! 1426: * WHICH MAY CONSIST ONLY OF DEFINED SYMBOLS AND ! 1427: * CERTAIN LABELS. CONSEQUENTLY SMALL INTEGERS TO BE ! 1428: * USED AS LITERALS MUST BE PRE-DEFINED, A DISCIPLINE ! 1429: * AIDING PROGRAM MAINTENANCE AND REVISION. ! 1430: * ! 1431: * ADDR 01,02,03,04,05 ADDRESS ! 1432: * ! 1433: * ADDR IS USED TO DESCRIBE AN EXPLICIT ADDRESS VALUE ! 1434: * (ONE WORD INTEGER VALUE) FOR USE WITH DAC. ! 1435: * ! 1436: * PGLB 06,29 LABEL OR GLOBAL LABEL ! 1437: * ! 1438: * **************************************************** ! 1439: * * IN THE FOLLOWING DESCRIPTIONS THE USAGE -- * ! 1440: * * (XL),(XR), ... ,(IA) * ! 1441: * * IN THE DESCRIPTIVE TEXT SIGNIFIES THE + ! 1442: * * CONTENTS OF THE STATED REGISTER. * ! 1443: * **************************************************** ! 1444: ! 1445: ! 1446: Page 34 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 1447: ! 1448: * ! 1449: * SECTION 8 - LIST OF INSTRUCTION MNEMONICS ! 1450: * ! 1451: * THE FOLLOWING LIST INCLUDES ALL INSTRUCTION AND ! 1452: * ASSEMBLY OPERATION MNEMONICS IN ALPHABETICAL ORDER. ! 1453: * THE MNEMONICS ARE PRECEDED BY A NUMBER IDENTIFYING ! 1454: * THE FOLLOWING SECTION WHERE THE INSTRUCTION IS DESCRIBED. ! 1455: * A STAR (*) IS APPENDED TO THE MNEMONIC IF THE LAST ! 1456: * OPERAND MAY OPTIONALLY BE OMITTED. ! 1457: * SEE SECTION -15- FOR DETAILS OF STATEMENT FORMAT AND ! 1458: * COMMENT CONVENTIONS. ! 1459: * ! 1460: * 2.1 ADD OPV,OPN ADD ADDRESS ! 1461: * 4.2 ADI OPS ADD INTEGER ! 1462: * 5.3 ADR OPS ADD REAL ! 1463: * 7.1 ANB OPW,W AND BIT STRING ! 1464: * 2.17 AOV OPV,OPN,PLBL ADD ADDRESS, FAIL IF OVERFLOW ! 1465: * 2.16 BCT W,PLBL BRANCH AND COUNT ! 1466: * 2.5 BEQ OPN,OPV,PLBL BRANCH IF ADDRESS EQUAL ! 1467: * 2.8 BGE OPN,OPV,PLBL BRANCH IF ADDRESS GREATER OR EQUL ! 1468: * 2.7 BGT OPN,OPV,PLBL BRANCH IF ADDRESS GREATER ! 1469: * 2.12 BHI OPN,OPV,PLBL BRANCH IF ADDRESS HIGH ! 1470: * 2.10 BLE OPN,OPV,PLBL BRANCH IF ADDRESS LESS OR EQUAL ! 1471: * 2.11 BLO OPN,OPV,PLBL BRANCH IF ADDRESS LOW ! 1472: * 2.9 BLT OPN,OPV,PLBL BRANCH IF ADDRESS LESS THAN ! 1473: * 2.6 BNE OPN,OPV,PLBL BRANCH IF ADDRESS NOT EQUAL ! 1474: * 2.13 BNZ OPN,PLBL BRANCH IF ADDRESS NON-ZERO ! 1475: * 1.2 BRN PLBL BRANCH UNCONDITIONAL ! 1476: * 1.7 BRI OPN BRANCH INDIRECT ! 1477: * 1.3 BSW* X,VAL,PLBL BRANCH ON SWITCH VALUE ! 1478: * 8.9 BTC W CONVERT BAUS TO CHAR COUNT ! 1479: * 8.2 BTW REG CONVERT BAUS TO WORDS ! 1480: * 2.14 BZE OPN,PLBL BRANCH IF ADDRESS ZERO ! 1481: * 6.6 CEQ OPW,OPW,PLBL BRANCH IF CHARACTERS EQUAL ! 1482: * 10.1 CHK CHECK STACK OVERFLOW ! 1483: * 6.10 CLU W CONVERT LOWER TO UPPER CASE ! 1484: * 7.4 CMB W COMPLEMENT BIT STRING ! 1485: * 6.8 CMC PLBL,PLBL COMPARE CHARACTER STRINGS ! 1486: * 6.7 CNE OPW,OPW,PLBL BRANCH IF CHARACTERS NOT EQUAL ! 1487: * 6.5 CSC X COMPLETE STORE CHARACTERS ! 1488: * 8.8 CTB W,VAL CONVERT CHARACTER COUNT TO BAUS ! 1489: * 8.7 CTW W,VAL CONVERT CHARACTER COUNT TO WORDS ! 1490: * 6.11 CUL W CONVERT UPPER TO LOWER CASE ! 1491: * 8.12 CVD CONVERT BY DIVISION ! 1492: * 8.11 CVM PLBL CONVERT BY MULTIPLICATION ! 1493: * 11.1 DAC ADDR DEFINE ADDRESS CONSTANT ! 1494: * 11.5 DBC VAL DEFINE BIT STRING CONSTANT ! 1495: * 2.4 DCA OPN DECREMENT ADDRESS BY ONE WORD ! 1496: * 1.17 DCV OPN DECREMENT VALUE BY ONE ! 1497: * 11.6 DDC DTEXT DEFINE DISPLAY CONSTANT ! 1498: * 11.2 DIC INTEGER DEFINE INTEGER CONSTANT ! 1499: ! 1500: ! 1501: Page 35 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 1502: ! 1503: * ! 1504: * ALPHABETICAL LIST OF MNEMONICS (CONTINUED) ! 1505: * ! 1506: * 11.3 DRC REAL DEFINE REAL CONSTANT ! 1507: * 11.4 DTC DTEXT DEFINE TEXT (CHARACTER) CONSTANT ! 1508: * 4.5 DVI OPS DIVIDE INTEGER ! 1509: * 5.6 DVR OPS DIVIDE REAL ! 1510: * 13.1 EJC EJECT ASSEMBLY LISTING ! 1511: * 14.2 END END OF ASSEMBLY ! 1512: * 1.13 ENP DEFINE END OF PROCEDURE ! 1513: * 1.6 ENT* VAL DEFINE ENTRY POINT ! 1514: * 12.1 EQU EQOP DEFINE SYMBOLIC VALUE ! 1515: * 1.15 ERB INT,TEXT ASSEMBLE ERROR CODE AND BRANCH ! 1516: * 1.14 ERR INT,TEXT ASSEMBLE ERROR CODE ! 1517: * 1.5 ESW END OF SWITCH LIST FOR BSW ! 1518: * 1.12 EXI* INT EXIT FROM PROCEDURE ! 1519: * 12.2 EXP PTYP,INT DEFINE EXTERNAL PROCEDURE ! 1520: * 2.3 ICA OPN INCREMENT ADDRESS BY ONE WORD ! 1521: * 12.5 GLB DEFINE GLOBAL LABEL ! 1522: * 3.4 ICP INCREMENT CODE POINTER ! 1523: * 1.16 ICV OPN INCREMENT VALUE BY ONE ! 1524: * 4.11 IEQ PLBL JUMP IF INTEGER ZERO ! 1525: * 1.4 IFF VAL,PLBL SPECIFY BRANCH FOR BSW ! 1526: * 4.12 IGE PLBL JUMP IF INTEGER NON-NEGATIVE ! 1527: * 4.13 IGT PLBL JUMP IF INTEGER POSITIVE ! 1528: * 4.14 ILE PLBL JUMP IF INTEGER NEGATIVE OR ZERO ! 1529: * 4.15 ILT PLBL JUMP IF INTEGER NEGATIVE ! 1530: * 4.16 INE PLBL JUMP IF INTEGER NON-ZERO ! 1531: * 4.9 INO PLBL JUMP IF NO INTEGER OVERFLOW ! 1532: * 12.3 INP PTYP,INT INTERNAL PROCEDURE ! 1533: * 12.4 INR INTERNAL ROUTINE ! 1534: * 4.10 IOV PLBL JUMP IF INTEGER OVERFLOW ! 1535: * 8.5 ITR CONVERT INTEGER TO REAL ! 1536: * 1.23 JMG GLBL JUMP TO GLOBAL LABEL ! 1537: * 1.9 JSR PNAM CALL PROCEDURE ! 1538: * 6.3 LCH REG,OPC LOAD CHARACTER ! 1539: * 3.1 LCP REG LOAD CODE POINTER REGISTER ! 1540: * 2.15 LCT W,OPV LOAD COUNTER FOR LOOP ! 1541: * 3.3 LCW REG LOAD NEXT CODE WORD ! 1542: * 4.1 LDI OPS LOAD INTEGER ! 1543: * 5.1 LDR OPS LOAD REAL ! 1544: * 1.8 LEI X LOAD ENTRY POINT ID ! 1545: * 7.6 LSH W,VAL LEFT SHIFT BIT STRING ! 1546: * 7.8 LSX W,X LEFT SHIFT INDEXED ! 1547: * 9.2 MCB MOVE CHARACTERS BACKWARDS ! 1548: * 8.4 MFI* OPN,PLBL CONVERT (IA) TO ADDRESS VALUE ! 1549: * 4.3 MLI OPS MULTIPLY INTEGER ! 1550: * 5.5 MLR OPS MULTIPLY REAL ! 1551: * 1.19 MNZ OPN MOVE NON-ZERO ! 1552: * 1.1 MOV OPV,OPN MOVE ! 1553: * 8.3 MTI OPN MOVE ADDRESS VALUE TO (IA) ! 1554: * 9.1 MVC MOVE CHARACTERS ! 1555: * 9.3 MVW MOVE WORDS ! 1556: * 9.4 MWB MOVE WORDS BACKWARDS ! 1557: * 4.8 NGI NEGATE INTEGER ! 1558: ! 1559: ! 1560: Page 36 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 1561: ! 1562: * ! 1563: * ALPHABETICAL LIST OF MNEMONICS (CONTINUED) ! 1564: * ! 1565: * 5.9 NGR NEGATE REAL ! 1566: * 7.9 NZB W,PLBL JUMP IF NOT ALL ZERO BITS ! 1567: * 7.2 ORB OPW,W OR BIT STRINGS ! 1568: * 6.1 PLC* X,OPV PREPARE TO LOAD CHARACTERS ! 1569: * 1.10 PPM* PLBL PROVIDE PROCEDURE EXIT PARAMETER ! 1570: * 1.11 PRC PTYP,VAL DEFINE START OF PROCEDURE ! 1571: * 6.2 PSC* X,OPV PREPARE TO STORE CHARACTERS ! 1572: * 5.10 REQ PLBL JUMP IF REAL ZERO ! 1573: * 5.11 RGE PLBL JUMP IF REAL POSITIVE OR ZERO ! 1574: * 5.12 RGT PLBL JUMP IF REAL POSITIVE ! 1575: * 5.13 RLE PLBL JUMP IF REAL NEGATIVE OR ZERO ! 1576: * 5.14 RLT PLBL JUMP IF REAL NEGATIVE ! 1577: * 4.6 RMI OPS REMAINDER INTEGER ! 1578: * 5.15 RNE PLBL JUMP IF REAL NON-ZERO ! 1579: * 5.8 RNO PLBL JUMP IF NO REAL OVERFLOW ! 1580: * 5.7 ROV PLBL JUMP IF REAL OVERFLOW ! 1581: * 7.5 RSH W,VAL RIGHT SHIFT BIT STRING ! 1582: * 7.7 RSX W,X RIGHT SHIFT INDEXED ! 1583: * 8.6 RTI* PLBL CONVERT REAL TO INTEGER ! 1584: * 1.22 RTN DEFINE START OF ROUTINE ! 1585: * 4.4 SBI OPS SUBTRACT INTEGER ! 1586: * 5.4 SBR OPS SUBTRACT REALS ! 1587: * 6.4 SCH REG,OPC STORE CHARACTER ! 1588: * 3.2 SCP REG STORE CODE POINTER ! 1589: * 14.1 SEC DEFINE START OF ASSEMBLY SECTION ! 1590: * 1.20 SSL OPW SUBROUTINE STACK LOAD ! 1591: * 1.21 SSS OPW SUBROUTINE STACK STORE ! 1592: * 4.7 STI OPS STORE INTEGER ! 1593: * 5.2 STR OPS STORE REAL ! 1594: * 2.2 SUB OPV,OPN SUBTRACT ADDRESS ! 1595: * 6.9 TRC TRANSLATE CHARACTER STRING ! 1596: * 13.2 TTL TEXT SUPPLY ASSEMBLY TITLE ! 1597: * 8.1 WTB REG CONVERT WORDS TO BAUS ! 1598: * 8.10 WTC W CONVERT WORDS TO CHAR COUNT ! 1599: * 7.3 XOB OPW,W EXCLUSIVE OR BIT STRINGS ! 1600: * 1.18 ZER OPN ZEROISE INTEGER LOCATION ! 1601: * 7.11 ZGB OPN ZEROISE GARBAGE BITS ! 1602: * 7.10 ZRB W,PLBL JUMP IF ALL ZERO BITS ! 1603: ! 1604: ! 1605: Page 37 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 1606: ! 1607: * ! 1608: * SECTION 9 - MINIMAL INSTRUCTIONS ! 1609: * ! 1610: * THE FOLLOWING DESCRIPTIONS ASSUME THE DEFINITIONS - ! 1611: * ! 1612: * ZEROE EQU 0 ! 1613: * UNITY EQU 1 ! 1614: * ! 1615: * -1- BASIC INSTRUCTION SET ! 1616: * ! 1617: * 1.1 MOV OPV,OPN MOVE ONE WORD VALUE ! 1618: * ! 1619: * MOV CAUSES THE VALUE OF OPERAND OPV TO BE SET AS ! 1620: * THE NEW CONTENTS OF OPERAND LOCATION OPN. IN THE ! 1621: * CASE WHERE OPN IS NOT AN INDEX REGISTER, ANY VALUE ! 1622: * WHICH CAN NORMALLY OCCUPY A MEMORY WORD (INCLUDING ! 1623: * A PART OF A MULTIWORD REAL OR INTEGER VALUE) ! 1624: * CAN BE TRANSFERRED USING MOV. IF THE TARGET LOCATION ! 1625: * OPN IS AN INDEX REGISTER, THEN OPV MUST SPECIFY AN ! 1626: * APPROPRIATE ONE WORD VALUE OR OPERAND CONTAINING ! 1627: * SUCH AN APPROPRIATE VALUE. ! 1628: * ! 1629: * 1.2 BRN PLBL UNCONDITIONAL BRANCH ! 1630: * ! 1631: * BRN CAUSES CONTROL TO BE PASSED TO THE INDICATED ! 1632: * LABEL IN THE PROGRAM SECTION. ! 1633: * ! 1634: * 1.3 BSW X,VAL,PLBL BRANCH ON SWITCH VALUE ! 1635: * 1.4 IFF VAL,PLBL PROVIDE BRANCH FOR SWITCH ! 1636: * IFF VAL,PLBL ... ! 1637: * ... ! 1638: * ... ! 1639: * 1.5 ESW END OF BRANCH SWITCH TABLE ! 1640: * ! 1641: * BSW,IFF,ESW PROVIDE A CAPABILITY FOR A SWITCHED ! 1642: * BRANCH SIMILAR TO A FORTRAN COMPUTED GOTO. THE ! 1643: * VAL ON THE BSW INSTRUCTION IS THE MAXIMUM NUMBER ! 1644: * OF BRANCHES. THE VALUE IN X RANGES FROM ZERO UP TO ! 1645: * BUT NOT INCLUDING THIS MAXIMUM. EACH IFF PROVIDES A ! 1646: * BRANCH. VAL MUST BE LESS THAN THAT GIVEN ON THE BSW ! 1647: * AND CONTROL GOES TO PLBL IF THE VALUE IN X MATCHES. ! 1648: * IF THE VALUE IN X DOES NOT CORRESPOND TO ANY OF THE ! 1649: * IFF ENTRIES, THEN CONTROL PASSES TO THE PLBL ON THE ! 1650: * BSW. THIS PLBL OPERAND MAY BE OMITTED IF THERE ARE ! 1651: * NO VALUES MISSING FROM THE LIST. ! 1652: * ! 1653: * IFF AND ESW MAY ONLY BE USED IN THIS CONTEXT. ! 1654: * EXECUTION OF BSW MAY DESTROY THE CONTENTS OF X. ! 1655: * THE IFF ENTRIES MAY BE IN ANY ORDER AND SINCE ! 1656: * A TRANSLATOR MAY THUS NEED TO STORE AND SORT THEM, ! 1657: * THE COMMENT FIELD IS RESTRICTED IN LENGTH (SEC 11). ! 1658: ! 1659: ! 1660: Page 38 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 1661: ! 1662: * ! 1663: * -1- BASIC INSTRUCTIONS (CONTINUED) ! 1664: * ! 1665: * 1.6 ENT VAL DEFINE PROGRAM ENTRY POINT ! 1666: * ! 1667: * THE SYMBOL APPEARING IN THE LABEL FIELD IS DEFINED ! 1668: * TO BE A PROGRAM ENTRY POINT (ELBL) WHICH CAN LATER ! 1669: * BE USED IN CONJUNCTION WITH THE BRI INSTRUCTION, ! 1670: * WHICH PROVIDES THE ONLY MEANS OF ENTERING THE ! 1671: * CODE. IT IS ILLEGAL TO FALL INTO CODE ! 1672: * IDENTIFIED BY AN ENTRY POINT. THE ! 1673: * ENTRY SYMBOL IS ASSIGNED AN ADDRESS WHICH NEED NOT ! 1674: * BE A MULTIPLE OF CFP$B BUT WHICH MUST BE IN THE ! 1675: * RANGE 0 LE CFP$M AND THE ADDRESS MUST NOT LIE WITHIN ! 1676: * THE ADDRESS RANGE OF THE ALLOCATED DATA AREA. ! 1677: * FURTHERMORE, ADDRESSES OF SUCCESSIVE ENTRY POINTS ! 1678: * MUST BE ASSIGNED IN SOME ASCENDING SEQUENCE SO ! 1679: * THAT THE ADDRESS COMPARISON INSTRUCTIONS CAN BE ! 1680: * USED TO TEST THE ORDER IN WHICH TWO ENTRY POINTS ! 1681: * OCCUR. THE SYMBOL VAL GIVES AN IDENTIFYING VALUE ! 1682: * TO THE ENTRY POINT WHICH CAN BE ACCESSED WITH THE ! 1683: * LEI INSTRUCTION. ! 1684: * NOTE - SUBJECT TO THE RESTRICTION BELOW, VAL MAY ! 1685: * BE OMITTED IF NO SUCH IDENTIFICATION IS NEEDED I.E. ! 1686: * IF NO LEI REFERENCES THE ENTRY POINT. FOR THIS ! 1687: * CASE, A TRANSLATION OPTIMISATION IS POSSIBLE IN ! 1688: * WHICH NO MEMORY NEED BE RESERVED FOR A NULL ! 1689: * IDENTIFICATION WHICH IS NEVER TO BE REFERENCED, BUT ! 1690: * ONLY PROVIDED THIS IS DONE SO AS NOT TO INTERFERE ! 1691: * WITH THE STRICTLY ASCENDING SEQUENCE OF ENTRY POINT ! 1692: * ADDRESSES. TO SIMPLIFY THIS OPTIMISATION FOR ALL ! 1693: * IMPLEMENTORS, THE FOLLOWING RESTRICTION IS OBSERVED ! 1694: * VAL MAY ONLY BE OMITTED IF THE ENTRY POINT IS ! 1695: * SEPARATED FROM A FOLLOWING ENTRY POINT BY A ! 1696: * NON-NULL MINIMAL CODE SEQUENCE. ! 1697: * ENTRY POINT ADDRESSES ARE ACCESSIBLE ONLY BY USE OF ! 1698: * LITERALS (=ELBL, SECTION 7) OR DAC CONSTANTS ! 1699: * (SECTION 8-11.1). ! 1700: * ! 1701: * 1.7 BRI OPN BRANCH INDIRECT ! 1702: * ! 1703: * OPN CONTAINS THE ADDRESS OF A PROGRAM ENTRY POINT ! 1704: * (SEE ENT). CONTROL IS PASSED TO THE EXECUTABLE ! 1705: * CODE STARTING AT THE ENTRY POINT ADDRESS. OPN IS ! 1706: * LEFT UNCHANGED. ! 1707: * ! 1708: * 1.8 LEI X LOAD ENTRY POINT IDENTIFICATION ! 1709: * ! 1710: * X CONTAINS THE ADDRESS OF AN ENTRY POINT FOR WHICH ! 1711: * AN IDENTIFYING VALUE WAS GIVEN ON THE THE ENT LINE. ! 1712: * LEI REPLACES THE CONTENTS OF X BY THIS VALUE. ! 1713: ! 1714: ! 1715: Page 39 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 1716: ! 1717: * ! 1718: * -1- BASIC INSTRUCTIONS (CONTINUED) ! 1719: * ! 1720: * 1.9 JSR PNAM CALL PROCEDURE PNAM ! 1721: * 1.10 PPM PLBL PROVIDE EXIT PARAMETER ! 1722: * PPM PLBL ... ! 1723: * ... ! 1724: * PPM PLBL ... ! 1725: * ! 1726: * JSR CAUSES CONTROL TO BE PASSED TO THE NAMED ! 1727: * PROCEDURE. PNAM IS THE LABEL ON A PRC STATEMENT ! 1728: * ELSEWHERE IN THE PROGRAM SECTION (SEE PRC) ! 1729: * OR HAS BEEN DEFINED USING AN EXP INSTRUCTION. ! 1730: * THE PPM EXIT PARAMETERS FOLLOWING THE CALL GIVE ! 1731: * NAMES OF PROGRAM LOCATIONS (PLBL-S) TO WHICH ! 1732: * ALTERNATIVE EXI RETURNS OF THE CALLED PROCEDURE MAY ! 1733: * PASS CONTROL. THEY MAY OPTIONALLY BE REPLACED BY ! 1734: * ERROR RETURNS (SEE ERR). THE NUMBER OF EXIT ! 1735: * PARAMETERS FOLLOWING A JSR MUST EQUAL THE INT IN THE ! 1736: * PROCEDURE DEFINITION. THE OPERAND OF PPM MAY BE ! 1737: * OMITTED IF THE CORRESPONDING EXI RETURN IS CERTAIN ! 1738: * NOT TO BE TAKEN. ! 1739: * ! 1740: * 1.11 PRC PTYP,INT DEFINE START OF PROCEDURE ! 1741: * ! 1742: * THE SYMBOL APPEARING IN THE LABEL FIELD IS DEFINED ! 1743: * AS THE NAME OF A PROCEDURE (PNAM) FOR USE WITH JSR. ! 1744: * A PROCEDURE IS A CONTIGUOUS SECTION OF INSTRUCTIONS ! 1745: * TO WHICH CONTROL MAY BE PASSED WITH A JSR ! 1746: * INSTRUCTION. THIS IS THE ONLY WAY IN WHICH THE ! 1747: * INSTRUCTIONS IN A PROCEDURE MAY BE EXECUTED. IT IS ! 1748: * NOT PERMITTED TO FALL INTO A PROCEDURE. ! 1749: * ALL PROCEDURES SHOULD BE NAMED IN SECTION 0 ! 1750: * INP STATEMENTS. ! 1751: * ! 1752: * INT IS THE NUMBER OF EXIT PARAMETERS (PPM-S) TO ! 1753: * BE USED IN JSR CALLS. ! 1754: * ! 1755: * THERE ARE THREE POSSIBILITIES FOR PTYP, EACH ! 1756: * CONSISTING OF A SINGLE LETTER AS FOLLOWS. ! 1757: * ! 1758: * R RECURSIVE ! 1759: * ! 1760: * THE RETURN POINT (ONE OR MORE WORDS) IS STORED ON ! 1761: * THE STACK AS THOUGH ONE OR MORE MOV ..,-(XS) ! 1762: * INSTRUCTIONS WERE EXECUTED. ! 1763: ! 1764: ! 1765: Page 40 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 1766: ! 1767: * ! 1768: * -1- BASIC INSTRUCTIONS (CONTINUED) ! 1769: * ! 1770: * N NON-RECURSIVE ! 1771: * ! 1772: * THE RETURN POINT IS TO BE STORED EITHER ! 1773: * (1) IN A LOCAL STORAGE WORD ASSOCIATED ! 1774: * WITH THE PROCEDURE AND NOT DIRECTLY ! 1775: * AVAILABLE TO THE PROGRAM IN ANY OTHER MANNER OR ! 1776: * (2) ON A SUBROUTINE LINK STACK QUITE DISTINCT FROM ! 1777: * THE MINIMAL STACK ADDRESSED BY XS. ! 1778: * IT IS AN ERROR TO USE THE STACK FOR N-LINKS, SINCE ! 1779: * PROCEDURE PARAMETERS OR RESULTS MAY BE PASSED VIA ! 1780: * THE STACK. ! 1781: * IF METHOD (2) IS USED FOR LINKS, ERROR EXITS ! 1782: * (ERB,ERR) FROM A PROCEDURE WILL NECESSITATE LINK ! 1783: * STACK RESETTING. THE SSL AND SSS ORDERS PROVIDED ! 1784: * FOR THIS MAY BE REGARDED AS NO-OPS FOR ! 1785: * IMPLEMENTATIONS USING METHOD (1). ! 1786: * ! 1787: * E EITHER ! 1788: * ! 1789: * THE RETURN POINT MAY BE STORED IN EITHER MANNER ! 1790: * ACCORDING TO EFFICIENCY REQUIREMENTS OF THE ACTUAL ! 1791: * PHYSICAL MACHINE USED FOR THE IMPLEMENTATION. NOTE ! 1792: * THAT PROGRAMMING OF E TYPE PROCEDURES MUST BE ! 1793: * INDEPENDENT OF THE ACTUAL IMPLEMENTATION. ! 1794: * ! 1795: * THE ACTUAL FORM OF THE RETURN POINT IS UNDEFINED. ! 1796: * HOWEVER, EACH WORD STORED ON THE STACK FOR AN ! 1797: * R-TYPE CALL MUST MEET THE FOLLOWING REQUIREMENTS. ! 1798: * ! 1799: * 1) IT CAN BE HANDLED AS AN ADDRESS ! 1800: * AND PLACED IN AN INDEX REGISTER. ! 1801: * ! 1802: * 2) WHEN USED AS AN OPERAND IN AN ! 1803: * ADDRESS COMPARISON INSTRUCTION, IT ! 1804: * MUST NOT APPEAR TO LIE WITHIN ! 1805: * THE ALLOCATED DATA AREA. ! 1806: * ! 1807: * 3) IT IS NOT REQUIRED TO APPEAR ! 1808: * TO LIE WITHIN THE PROGRAM SECTION. ! 1809: ! 1810: ! 1811: Page 41 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 1812: ! 1813: * ! 1814: * -1- BASIC INSTRUCTIONS (CONTINUED) ! 1815: * ! 1816: * 1.12 EXI INT EXIT FROM PROCEDURE ! 1817: * ! 1818: * THE PPM AND ERR PARAMETERS FOLLOWING A JSR ARE ! 1819: * NUMBERED STARTING FROM 1. EXI INT CAUSES CONTROL ! 1820: * TO BE RETURNED TO THE INT-TH SUCH PARAM. EXI 1 GIVES ! 1821: * CONTROL TO THE PLBL OF THE FIRST PPM AFTER THE JSR. ! 1822: * IF INT IS OMITTED, CONTROL IS PASSED BACK PAST THE ! 1823: * LAST EXIT PARAMETER (OR PAST THE JSR IF THERE ARE ! 1824: * NONE). FOR R AND E TYPE PROCEDURES, THE ! 1825: * STACK POINTER XS MUST BE SET TO ITS APPROPRIATE ! 1826: * ENTRY VALUE BEFORE EXECUTING AN EXI INSTRUCTION. ! 1827: * IN THIS CASE, EXI REMOVES RETURN POINTS FROM THE ! 1828: * STACK IF ANY ARE STORED THERE SO THAT THE STACK ! 1829: * POINTER IS RESTORED TO ITS CALLING VALUE. ! 1830: * ! 1831: * 1.13 ENP DEFINE END OF PROCEDURE BODY ! 1832: * ! 1833: * ENP DELIMITS A PROCEDURE BODY AND MAY NOT ACTUALLY ! 1834: * BE EXECUTED, HENCE IT MUST HAVE NO LABEL. ! 1835: * ! 1836: * 1.14 ERR INT,TEXT PROVIDE ERROR RETURN ! 1837: * ! 1838: * ERR MAY REPLACE AN EXIT PARAMETER (PPM) IN ! 1839: * ANY PROCEDURE CALL. THE INT ARGUMENT IS A UNIQUE ! 1840: * ERROR CODE IN 0 TO 899. ! 1841: * THE TEXT SUPPLIED AS THE OTHER OPERAND IS ! 1842: * ARBITRARY TEXT IN THE FORTRAN CHARACTER SET AND ! 1843: * MAY BE USED IN CONSTRUCTING A FILE OF ERROR ! 1844: * MESSAGES FOR DOCUMENTING PURPOSES OR FOR BUILDING ! 1845: * A DIRECT ACCESS OR OTHER FILE OF MESSAGES TO BE ! 1846: * USED BY THE ERROR HANDLING CODE. ! 1847: * IN THE EVENT THAT AN EXI ATTEMPTS ! 1848: * TO RETURN CONTROL VIA AN EXIT PARAMETER TO ! 1849: * AN ERR, CONTROL IS INSTEAD PASSED TO THE FIRST ! 1850: * INSTRUCTION IN THE ERROR SECTION (WHICH FOLLOWS THE ! 1851: * PROGRAM SECTION) WITH THE ERROR CODE IN WA. ! 1852: * ! 1853: * 1.15 ERB INT,TEXT ERROR BRANCH ! 1854: * ! 1855: * THIS INSTRUCTION RESEMBLES ERR EXCEPT THAT IT MAY ! 1856: * OCCUR AT ANY POINT WHERE A BRANCH IS PERMITTED. ! 1857: * IT EFFECTS A TRANSFER OF CONTROL TO THE ERROR ! 1858: * SECTION WITH THE ERROR CODE IN WA. ! 1859: * ! 1860: * 1.16 ICV OPN INCREMENT VALUE BY ONE ! 1861: * ! 1862: * ICV INCREMENTS THE VALUE OF THE OPERAND BY UNITY. ! 1863: * IT IS EQUIVALENT TO ADD =UNITY,OPN ! 1864: * ! 1865: * 1.17 DCV OPN DECREMENT VALUE BY ONE ! 1866: * ! 1867: * DCV DECREMENTS THE VALUE OF THE OPERAND BY UNITY. ! 1868: * IT IS EQUIVALENT TO SUB =UNITY,OPN ! 1869: ! 1870: ! 1871: Page 42 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 1872: ! 1873: * ! 1874: * BASIC INSTRUCTIONS (CONTINUED) ! 1875: * ! 1876: * 1.18 ZER OPN ZEROISE OPN ! 1877: * ! 1878: * ZER IS EQUIVALENT TO MOV =ZEROE,OPN ! 1879: * ! 1880: * 1.19 MNZ OPN MOVE NON-ZERO TO OPN ! 1881: * ! 1882: * ANY NON-ZERO COLLECTABLE VALUE MAY USED, FOR WHICH ! 1883: * THE OPCODES BNZ/BZE WILL BRANCH/FAIL TO BRANCH. ! 1884: * ! 1885: * 1.20 SSL OPW SUBROUTINE STACK LOAD ! 1886: * ! 1887: * 1.21 SSS OPW SUBROUTINE STACK STORE ! 1888: * ! 1889: * THIS PAIR OF OPERATIONS IS PROVIDED TO MAKE POSSIBLE ! 1890: * THE USE OF A LOCAL STACK TO HOLD SUBROUTINE (S-R) ! 1891: * RETURN LINKS FOR N-TYPE PROCEDURES. SSS STORES THE ! 1892: * S-R STACK POINTER IN OPW AND SSL LOADS THE S-R ! 1893: * STACK POINTER FROM OPW. BY USING SSS IN THE MAIN ! 1894: * PROGRAM OR ON ENTRY TO A PROCEDURE WHICH SHOULD ! 1895: * REGAIN CONTROL ON OCCURRENCE OF AN ERR OR ERB AND BY ! 1896: * USE OF SSL IN THE ERROR PROCESSING SECTIONS THE ! 1897: * S-R STACK POINTER CAN BE RESTORED GIVING A LINK ! 1898: * STACK CLEANED UP READY FOR RESUMED EXECUTION. ! 1899: * THE FORM OF THE LINK STACK POINTER IS UNDEFINED IN ! 1900: * MINIMAL (IT IS LIKELY TO BE A PRIVATE REGISTER ! 1901: * KNOWN TO THE TRANSLATOR) AND THE ONLY REQUIREMENT ! 1902: * IS THAT IT SHOULD FIT INTO A SINGLE FULL WORD. ! 1903: * SSL AND SSS ARE NO-OPS IF A PRIVATE LINK STACK IS ! 1904: * NOT USED. ! 1905: * ! 1906: * 1.22 RTN DEFINE START OF ROUTINE ! 1907: * ! 1908: * A ROUTINE IS A CODE CHUNK USED FOR SIMILAR PURPOSES ! 1909: * TO A PROCEDURE. HOWEVER IT IS ENTERED BY ANY TYPE OF ! 1910: * CONDITIONAL OR UNCONDITIONAL BRANCH (NOT BY JSR). ON ! 1911: * TERMINATION IT PASSES CONTROL BY A BRANCH (OFTEN ! 1912: * BRI THROUGH A CODE WORD) OR EVEN PERMITS CONTROL ! 1913: * TO DROP THROUGH TO ANOTHER ROUTINE. NO RETURN LINK ! 1914: * EXISTS AND THE END OF A ROUTINE IS NOT MARKED BY ! 1915: * AN EXPLICIT OPCODE (COMPARE ENP). ! 1916: * ALL ROUTINES SHOULD BE NAMED IN SECTION 0 ! 1917: * INR STATEMENTS. ! 1918: * ! 1919: * 1.23 JMG GLBL JUMP GLOBAL (I.E. NON LOCAL) ! 1920: * ! 1921: * PLBL-S ARE INTENDED FOR LOCAL BRANCHING WITHIN ! 1922: * PROCEDURES AND ROUTINES. OCCASIONALLY (EG ERROR ! 1923: * RECOVERY) IT MAY BE PERMISSIBLE TO HAVE NON LOCAL ! 1924: * BRANCHES. THE DESTINATION OF THIS INSTRUCTION IS A ! 1925: * LABEL NOTED AS BEING GLOBAL BY APPEARING IN THE ! 1926: * PROCEDURES SECTION LABELLING A GLB OPCODE. ! 1927: ! 1928: ! 1929: Page 43 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 1930: ! 1931: * ! 1932: * -2- OPERATIONS ON ONE WORD INTEGER VALUES (ADDRESSES) ! 1933: * ! 1934: * 2.1 ADD OPV,OPN ADDS OPV TO THE VALUE IN OPN AND ! 1935: * STORES THE RESULT IN OPN. UNDEFINED ! 1936: * IF THE RESULT EXCEEDS CFP$M. ! 1937: * ! 1938: * 2.2 SUB OPV,OPN SUBTRACTS OPV FROM OPN. STORES THE ! 1939: * RESULT IN OPN. UNDEFINED IF THE ! 1940: * RESULT IS NEGATIVE. ! 1941: * ! 1942: * 2.3 ICA OPN INCREMENT ADDRESS IN OPN ! 1943: * EQUIVALENT TO ADD *UNITY,OPN ! 1944: * ! 1945: * 2.4 DCA OPN DECREMENT ADDRESS IN OPN ! 1946: * EQUIVALENT TO SUB *UNITY,OPN ! 1947: * ! 1948: * 2.5 BEQ OPN,OPV,PLBL BRANCH TO PLBL IF OPN EQ OPV ! 1949: * 2.6 BNE OPN,OPV,PLBL BRANCH TO PLBL IF OPN NE OPV ! 1950: * 2.7 BGT OPN,OPV,PLBL BRANCH TO PLBL IF OPN GT OPV ! 1951: * 2.8 BGE OPN,OPV,PLBL BRANCH TO PLBL IF OPN GE OPV ! 1952: * 2.9 BLT OPN,OPV,PLBL BRANCH TO PLBL IF OPN LT OPV ! 1953: * 2.10 BLE OPN,OPV,PLBL BRANCH TO PLBL IF OPN LE OPV ! 1954: * 2.11 BLO OPN,OPV,PLBL EQUIVALENT TO BLT OR BLE ! 1955: * 2.12 BHI OPN,OPV,PLBL EQUIVALENT TO BGT OR BGE ! 1956: * ! 1957: * THE ABOVE INSTRUCTIONS COMPARE TWO ADDRESS ! 1958: * VALUES AS UNSIGNED INTEGER VALUES. ! 1959: * THE BLO AND BHI INSTRUCTIONS ARE USED IN CASES WHERE ! 1960: * THE EQUAL CONDITION EITHER DOES NOT OCCUR OR CAN ! 1961: * RESULT EITHER IN A BRANCH OR NO BRANCH. THIS AVOIDS ! 1962: * INEFFICIENT TRANSLATIONS IN SOME IMPLEMENTATIONS. ! 1963: * ! 1964: * 2.13 BNZ OPN,PLBL EQUIVALENT TO BNE OPN,=ZEROE,PLBL ! 1965: * ! 1966: * 2.14 BZE OPN,PLBL EQUIVALENT TO BEQ OPN,=ZEROE,PLBL ! 1967: * ! 1968: * ! 1969: * 2.15 LCT W,OPV LOAD COUNTER FOR BCT ! 1970: * ! 1971: * LCT LOADS A COUNTER VALUE FOR USE WITH THE BCT ! 1972: * INSTRUCTION. THE VALUE IN OPV IS THE NUMBER OF LOOPS ! 1973: * TO BE EXECUTED. THE VALUE IN W AFTER THIS OPERATION ! 1974: * IS AN UNDEFINED ONE WORD INTEGER QUANTITY. ! 1975: * ! 1976: * 2.16 BCT W,PLBL BRANCH AND COUNT ! 1977: * ! 1978: * BCT USES THE COUNTER VALUE IN W TO BRANCH THE ! 1979: * REQUIRED NUMBER OF TIMES AND THEN FINALLY TO FALL ! 1980: * THROUGH TO THE NEXT INSTRUCTION. BCT CAN ONLY BE ! 1981: * USED FOLLOWING AN APPROPRIATE LCT INSTRUCTION. ! 1982: * THE VALUE IN W AFTER EXECUTION OF BCT IS UNDEFINED. ! 1983: * ! 1984: * 2.17 AOV OPV,OPN,PLBL ADD WITH OVERFLOW TEST ! 1985: * ! 1986: * ADDS OPV TO THE VALUE IN OPN AND STORES RESULT IN ! 1987: * OPN. BRANCHES TO PLBL IF RESULT EXCEEDS CFP$M ! 1988: * WITH RESULT IN OPN UNDEFINED. CF. ADD. ! 1989: ! 1990: ! 1991: Page 44 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 1992: ! 1993: * ! 1994: * -3- OPERATIONS ON THE CODE POINTER REGISTER (CP) ! 1995: * ! 1996: * THE CODE POINTER REGISTER PROVIDES A PSUEDO ! 1997: * INSTRUCTION COUNTER FOR USE IN AN INTERPRETOR. IT ! 1998: * MAY BE IMPLEMENTED AS A REAL REGISTER OR AS A ! 1999: * MEMORY LOCATION, BUT IN EITHER CASE IT IS SEPARATE ! 2000: * FROM ANY OTHER REGISTER. THE VALUE IN THE CODE ! 2001: * POINTER REGISTER IS ALWAYS A WORD ADDRESS (I.E. ! 2002: * A ONE WORD INTEGER WHICH IS A MULTIPLE OF CFP$B). ! 2003: * ! 2004: * 3.1 LCP REG LOAD CODE POINTER REGISTER ! 2005: * THIS INSTRUCTION CAUSES THE CODE ! 2006: * POINTER REGISTER TO BE SET FROM ! 2007: * THE VALUE IN REG WHICH IS UNCHANGED ! 2008: * ! 2009: * 3.2 SCP REG STORE CODE POINTER REGISTER ! 2010: * THIS INSTRUCTION LOADS THE CURRENT ! 2011: * VALUE IN THE CODE POINTER REGISTER ! 2012: * INTO REG. (CP) IS UNCHANGED. ! 2013: * ! 2014: * 3.3 LCW REG LOAD NEXT CODE WORD ! 2015: * THIS INSTRUCTION CAUSES THE WORD ! 2016: * POINTED TO BY CP TO BE LOADED INTO ! 2017: * THE INDICATED REG. THE VALUE IN CP ! 2018: * IS THEN INCREMENTED BY ONE WORD. ! 2019: * EXECUTION OF LCW MAY DESTROY XL. ! 2020: * ! 2021: * 3.4 ICP INCREMENT CP BY ONE WORD ! 2022: * ! 2023: * ON MACHINES WITH MORE THAN THREE INDEX REGISTERS, ! 2024: * CP CAN BE TREATED SIMPLY AS AN INDEX REGISTER. ! 2025: * IN THIS CASE, THE FOLLOWING EQUIVALENCES APPLY. ! 2026: * ! 2027: * LCP REG IS LIKE MOV REG,CP ! 2028: * SCP REG IS LIKE MOV CP,REG ! 2029: * LCW REG IS LIKE MOV (CP)+,REG ! 2030: * ICP IS LIKE ICA CP ! 2031: * ! 2032: * SINCE LCW IS ALLOWED TO DESTROY XL, THE FOLLOWING ! 2033: * IMPLEMENTATION USING A WORK LOCATION CP$$$ CAN ! 2034: * ALSO BE USED. ! 2035: * ! 2036: * LCP REG MOV REG,CP$$$ ! 2037: * ! 2038: * SCP REG MOV CP$$$,REG ! 2039: * ! 2040: * LCW REG MOV CP$$$,XL ! 2041: * MOV (XL)+,REG ! 2042: * MOV XL,CP$$$ ! 2043: * ! 2044: * ICP ICA CP$$$ ! 2045: ! 2046: ! 2047: Page 45 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 2048: ! 2049: * ! 2050: * -4- OPERATIONS ON SIGNED INTEGER VALUES ! 2051: * ! 2052: * 4.1 LDI OPS LOAD INTEGER ACCUMULATOR FROM OPS ! 2053: * 4.2 ADI OPS ADD OPS TO INTEGER ACCUMULATOR ! 2054: * 4.3 MLI OPS MULTIPLY INTEGER ACCUMULATOR BY OPS ! 2055: * 4.4 SBI OPS SUBTRACT OPS FROM INT ACCUMULATOR ! 2056: * 4.5 DVI OPS DIVIDE INTEGER ACCUMULATOR BY OPS ! 2057: * 4.6 RMI OPS SET INT ACCUM TO MOD(INTACC,OPS) ! 2058: * 4.7 STI OPS STORE INTEGER ACCUMULATOR AT OPS ! 2059: * 4.8 NGI NEGATE THE VALUE IN THE INTEGER ! 2060: * ACCUMULATOR (CHANGE ITS SIGN) ! 2061: * ! 2062: * THE EQUATION SATISFIED BY OPERANDS AND RESULTS OF ! 2063: * DVI AND RMI IS ! 2064: * DIV = QOT * OPS + REM WHERE ! 2065: * DIV = DIVIDEND IN INTEGER ACCUMULATOR ! 2066: * QOT = QUOTIENT LEFT IN IA BY DIV ! 2067: * OPS = THE DIVISOR ! 2068: * REM = REMAINDER LEFT IN IA BY RMI ! 2069: * THE SIGN OF THE RESULT OF DVI IS + IF (IA) AND (OPS) ! 2070: * HAVE THE SAME SIGN AND IS - IF THEY HAVE OPPOSITE ! 2071: * SIGNS. THE SIGN OF (IA) IS ALWAYS USED AS THE SIGN ! 2072: * OF THE RESULT OF REM. ! 2073: * ASSUMING IN EACH CASE THAT IA CONTAINS THE NUMBER ! 2074: * SPECIFIED IN PARENTHESES AND THAT SEVEN AND MSEVN ! 2075: * HOLD +7 AND -7 RESP. THE ALGORITHM IS ILLUSTRATED ! 2076: * BELOW. ! 2077: * (IA = 13) ! 2078: * DVI SEVEN IA = 1 ! 2079: * RMI SEVEN IA = 6 ! 2080: * DVI MSEVN IA = -1 ! 2081: * RMI MSEVN IA = 6 ! 2082: * (IA = -13) ! 2083: * DVI SEVEN IA = -1 ! 2084: * RMI SEVEN IA = -6 ! 2085: * DVI MSEVN IA = 1 ! 2086: * RMI MSEVN IA = -6 ! 2087: ! 2088: ! 2089: Page 46 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 2090: ! 2091: * ! 2092: * THE ABOVE INSTRUCTIONS OPERATE ON A FULL RANGE OF ! 2093: * SIGNED INTEGER VALUES. WITH THE EXCEPTION OF LDI AND ! 2094: * STI, THESE INSTRUCTIONS MAY CAUSE INTEGER OVERFLOW ! 2095: * BY ATTEMPTING TO PRODUCE AN UNDEFINED OR OUT OF ! 2096: * RANGE RESULT IN WHICH CASE INTEGER OVERFLOW IS SET, ! 2097: * THE RESULT IN (IA) IS UNDEFINED AND THE FOLLOWING ! 2098: * INSTRUCTION MUST BE IOV OR INO. ! 2099: * PARTICULAR CARE MAY BE NEEDED ON TARGET MACHINES ! 2100: * HAVING DISTINCT OVERFLOW AND DIVIDE BY ZERO ! 2101: * CONDITIONS. ! 2102: * ! 2103: * 4.9 INO PLBL JUMP TO PLBL IF NO INTEGER OVERFLOW ! 2104: * 4.10 IOV PLBL JUMP TO PLBL IF INTEGER OVERFLOW ! 2105: * ! 2106: * THESE INSTRUCTIONS CAN ONLY OCCUR IMMEDIATELY ! 2107: * FOLLOWING AN INSTRUCTION WHICH CAN CAUSE INTEGER ! 2108: * OVERFLOW (ADI, SBI, MLI, DVI, RMI, NGI) AND ! 2109: * TEST THE RESULT OF THE PRECEDING INSTRUCTION. ! 2110: * IOV AND INO MAY NOT HAVE LABELS. ! 2111: * ! 2112: * 4.11 IEQ PLBL JUMP TO PLBL IF (IA) EQ 0 ! 2113: * 4.12 IGE PLBL JUMP TO PLBL IF (IA) GE 0 ! 2114: * 4.13 IGT PLBL JUMP TO PLBL IF (IA) GT 0 ! 2115: * 4.14 ILE PLBL JUMP TO PLBL IF (IA) LE 0 ! 2116: * 4.15 ILT PLBL JUMP TO PLBL IF (IA) LT 0 ! 2117: * 4.16 INE PLBL JUMP TO PLBL IF (IA) NE 0 ! 2118: * ! 2119: * THE ABOVE CONDITIONAL JUMP INSTRUCTIONS DO ! 2120: * NOT CHANGE THE CONTENTS OF THE ACCUMULATOR. ! 2121: * ON A ONES COMPLEMENT MACHINE, IT IS PERMISSIBLE TO ! 2122: * PRODUCE NEGATIVE ZERO IN IA PROVIDED THESE ! 2123: * INSTRUCTIONS OPERATE CORRECTLY WITH SUCH A VALUE. ! 2124: ! 2125: ! 2126: Page 47 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 2127: ! 2128: * ! 2129: * -5- OPERATIONS ON REAL VALUES ! 2130: * ! 2131: * 5.1 LDR OPS LOAD REAL ACCUMULATOR FROM OPS ! 2132: * 5.2 STR OPS STORE REAL ACCUMULATOR AT OPS ! 2133: * 5.3 ADR OPS ADD OPS TO REAL ACCUMULATOR ! 2134: * 5.4 SBR OPS SUBTRACT OPS FROM REAL ACCUMULATOR ! 2135: * 5.5 MLR OPS MULTIPLY REAL ACCUMULATOR BY OPS ! 2136: * 5.6 DVR OPS DIVIDE REAL ACCUMULATOR BY OPS ! 2137: * ! 2138: * IF THE RESULT OF ANY OF THE ABOVE OPERATIONS CAUSES ! 2139: * UNDERFLOW, THE RESULT YIELDED IS 0.0. ! 2140: * ! 2141: * IF THE RESULT OF ANY OF THE ABOVE OPERATIONS IS ! 2142: * UNDEFINED OR OUT OF RANGE, REAL OVERFLOW IS SET, ! 2143: * THE CONTENTS OF (RA) ARE UNDEFINED AND THE FOLLOWING ! 2144: * INSTRUCTION MUST BE EITHER ROV OR RNO. ! 2145: * PARTICULAR CARE MAY BE NEEDED ON TARGET MACHINES ! 2146: * HAVING DISTINCT OVERFLOW AND DIVIDE BY ZERO ! 2147: * CONDITIONS. ! 2148: * ! 2149: * 5.7 ROV PLBL JUMP TO PLBL IF REAL OVERFLOW ! 2150: * 5.8 RNO PLBL JUMP TO PLBL IF NO REAL OVERFLOW ! 2151: * ! 2152: * THESE INSTRUCTIONS CAN ONLY OCCUR IMMEDIATELY ! 2153: * FOLLOWING AN INSTRUCTION WHICH CAN CAUSE REAL ! 2154: * OVERFLOW (ADR,SBR,MLR,DVR). ! 2155: * ! 2156: * 5.9 NGR NEGATE REAL ACCUM (CHANGE SIGN) ! 2157: * ! 2158: * 5.10 REQ PLBL JUMP TO PLBL IF (RA) EQ 0.0 ! 2159: * 5.11 RGE PLBL JUMP TO PLBL IF (RA) GE 0.0 ! 2160: * 5.12 RGT PLBL JUMP TO PLBL IF (RA) GT 0.0 ! 2161: * 5.13 RLE PLBL JUMP TO PLBL IF (RA) LE 0.0 ! 2162: * 5.14 RLT PLBL JUMP TO PLBL IF (RA) LT 0.0 ! 2163: * 5.15 RNE PLBL JUMP TO PLBL IF (RA) NE 0.0 ! 2164: * ! 2165: * THE ABOVE CONDITIONAL INSTRUCTIONS DO NOT AFFECT ! 2166: * THE VALUE STORED IN THE REAL ACCUMULATOR. ! 2167: * ON A ONES COMPLEMENT MACHINE, IT IS PERMISSIBLE TO ! 2168: * PRODUCE NEGATIVE ZERO IN RA PROVIDED THESE ! 2169: * INSTRUCTIONS OPERATE CORRECTLY WITH SUCH A VALUE. ! 2170: ! 2171: ! 2172: Page 48 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 2173: ! 2174: * ! 2175: * -6- OPERATIONS ON CHARACTER VALUES ! 2176: * ! 2177: * CHARACTER OPERATIONS EMPLOY THE CONCEPT OF A ! 2178: * CHARACTER POINTER WHICH USES EITHER ! 2179: * INDEX REGISTER XR OR XL (NOT XS). ! 2180: * ! 2181: * A CHARACTER POINTER POINTS TO A SPECIFIC CHARACTER ! 2182: * IN A STRING OF CHARACTERS STORED CFP$C CHARS TO A ! 2183: * WORD. THE ONLY OPERATIONS PERMITTED ON A CHARACTER ! 2184: * POINTER ARE LCH AND SCH. IN PARTICULAR, A CHARACTER ! 2185: * POINTER MAY NOT EVEN BE MOVED WITH MOV. ! 2186: * ! 2187: * RESTRICTION 1. ! 2188: * -------------- ! 2189: * IT IS IMPORTANT WHEN CODING IN MINIMAL TO ENSURE ! 2190: * THAT NO ACTION OCCURRING BETWEEN THE INITIAL USE OF ! 2191: * PLC OR PSC AND THE EVENTUAL CLEARING OF XL OR XR ON ! 2192: * COMPLETION OF CHARACTER OPERATIONS CAN INITIATE A ! 2193: * GARBAGE COLLECTION. THE LATTER OF COURSE COULD CAUSE ! 2194: * THE ADDRESSED CHARACTERS TO BE MOVED LEAVING THE ! 2195: * CHARACTER POINTERS POINTING TO RUBBISH. ! 2196: * ! 2197: * RESTRICTION 2. ! 2198: * -------------- ! 2199: * A FURTHER RESTRICTION TO BE OBSERVED IN CODE ! 2200: * HANDLING CHARACTER STRINGS, IS THAT STRINGS BUILT ! 2201: * DYNAMICALLY SHOULD BE RIGHT PADDED WITH ZERO ! 2202: * CHARACTERS TO A FULL WORD BOUNDARY TO PERMIT EASY ! 2203: * HASHING AND USE OF CEQ OR CNE IN TESTING STRINGS ! 2204: * FOR EQUALITY. ! 2205: * ! 2206: * 6.1 PLC X,OPV PREPARE CH PTR FOR LCH,CMC,MVC,TRC ! 2207: * ! 2208: * 6.2 PSC X,OPV PREPARE CHAR. PTR FOR SCH,MVC. ! 2209: * ! 2210: * OPV CAN BE OMITTED IF IT IS ZERO. ! 2211: * THE CHAR. INITIALLY ADDRESSED IS DETERMINED BY THE ! 2212: * WORD ADDRESS IN X AND THE INTEGER OFFSET OPV. ! 2213: * THERE IS AN AUTOMATIC IMPLIED OFFSET OF CFP$F BAUS. ! 2214: * CFP$F IS USED TO FORMALLY INTRODUCE INTO MINIMAL A ! 2215: * VALUE NEEDED IN TRANSLATING THESE OPCODES WHICH, ! 2216: * SINCE MINIMAL ITSELF DOES NOT PRESCRIBE A STRING ! 2217: * STRUCTURE IN DETAIL, DEPENDS ON THE CHOICE OF A DATA ! 2218: * STRUCTURE FOR STRINGS IN THE MINIMAL PROGRAM. ! 2219: * E.G. IF CFP$B = CFP$C = 3, CFP$F = 6, NUM01 = 1, XL ! 2220: * POINTS TO A SERIES OF 4 WORDS, ABC/DEF/GHI/JKL, THEN ! 2221: * PLC XL,=NUM01 ! 2222: * POINTS TO H. ! 2223: ! 2224: ! 2225: Page 49 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 2226: ! 2227: * ! 2228: * -6- OPERATIONS ON CHARACTER VALUES (CONTINUED) ! 2229: * ! 2230: * 6.3 LCH REG,OPC LOAD CHARACTER INTO REG ! 2231: * ! 2232: * 6.4 SCH REG,OPC STORE CHARACTER FROM REG ! 2233: * ! 2234: * THESE OPERATIONS ARE DEFINED SUCH THAT THE CHARACTER ! 2235: * IS RIGHT JUSTIFIED IN REGISTER REG WITH ZERO BITS TO ! 2236: * THE LEFT. AFTER LCH FOR EXAMPLE, IT IS LEGITIMATE ! 2237: * TO REGARD REG AS CONTAINING THE ORDINAL INTEGER ! 2238: * CORRESPONDING TO THE CHARACTER. ! 2239: * ! 2240: * OPC IS ONE OF THE FOLLOWING THREE POSSIBILITIES. ! 2241: * ! 2242: * (X) THE CHARACTER POINTED TO BY THE ! 2243: * CHARACTER POINTER IN X. THE ! 2244: * CHARACTER POINTER IS NOT CHANGED. ! 2245: * ! 2246: * (X)+ SAME CHARACTER AS (X) BUT THE ! 2247: * CHARACTER POINTER IS INCREMENTED ! 2248: * TO POINT TO THE NEXT CHARACTER ! 2249: * FOLLOWING EXECUTION. ! 2250: * ! 2251: * -(X) THE CHARACTER POINTER IS DECRE- ! 2252: * MENTED BEFORE ACCESSING THE ! 2253: * CHARACTER SO THAT THE PREVIOUS ! 2254: * CHARACTER IS REFERENCED. ! 2255: * ! 2256: * 6.5 CSC X COMPLETE STORE CHARACTERS ! 2257: * ! 2258: * THIS INSTRUCTION MARKS COMPLETION OF A ! 2259: * PSC,SCH,SCH,...,SCH SEQUENCE INITIATED BY ! 2260: * A PSC X INSTRUCTION. NO MORE SCH INSTRUCTIONS ! 2261: * USING X SHOULD BE OBEYED UNTIL ANOTHER PSC IS ! 2262: * OBEYED. IT IS PROVIDED SOLELY AS AN EFFICIENCY AID ! 2263: * ON MACHINES WITHOUT CHARACTER ORDERS SINCE IT ! 2264: * PERMITS USE OF REGISTER BUFFERING OF CHARS IN SCH ! 2265: * SEQUENCES. WHERE CSC IS NOT A NO-OP, IT MUST OBSERVE ! 2266: * RESTRICTION 2. (E.G. IN SPITBOL, ALOCS ZEROISES THE ! 2267: * LAST WORD OF A STRING FRAME PRIOR TO SCH SEQUENCE ! 2268: * BEING STARTED SO CSC MUST NOT NULLIFY THIS ACTION.) ! 2269: * ! 2270: * THE FOLLOWING INSTRUCTIONS ARE USED TO COMPARE ! 2271: * TWO WORDS CONTAINING CFP$C CHARACTERS. ! 2272: * COMPARISONS DISTINCT FROM BEQ,BNE ARE PROVIDED AS ! 2273: * ON SOME TARGET MACHINES, THE POSSIBILITY OF THE SIGN ! 2274: * BIT BEING SET MAY REQUIRE SPECIAL ACTION. ! 2275: * NOTE THAT RESTRICTION 2 ABOVE, EASES USE OF THESE ! 2276: * ORDERS IN TESTING COMPLETE STRINGS FOR EQUALITY, ! 2277: * SINCE WHOLE WORD TESTS ARE POSSIBLE. ! 2278: * ! 2279: * 6.6 CEQ OPW,OPW,PLBL JUMP TO PLBL IF OPW EQ OPW ! 2280: * 6.7 CNE OPW,OPW,PLBL JUMP TO PLBL IF OPW NE OPW ! 2281: ! 2282: ! 2283: Page 50 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 2284: ! 2285: * ! 2286: * -6- OPERATIONS ON CHARACTER VALUES (CONTINUED) ! 2287: * ! 2288: * 6.8 CMC PLBL,PLBL COMPARE CHARACTERS ! 2289: * ! 2290: * CMC IS USED TO COMPARE TWO CHARACTER STRINGS. BEFORE ! 2291: * EXECUTING CMC, REGISTERS ARE SET UP AS FOLLOWS. ! 2292: * (XL) CHARACTER PTR FOR FIRST STRING ! 2293: * (XR) CHARACTER POINTER FOR SECOND STRING ! 2294: * (WA) CHARACTER COUNT (MUST BE .GT. ZERO) ! 2295: * XL AND XR SHOULD HAVE BEEN PREPARED BY PLC. ! 2296: * CONTROL PASSES TO FIRST PLBL IF THE FIRST STRING ! 2297: * IS LEXICALLY LESS THAN THE SECOND STRING, AND TO ! 2298: * THE SECOND PLBL IF THE FIRST STRING IS LEXICALLY ! 2299: * GREATER. CONTROL PASSES TO THE FOLLOWING INSTRUCTION ! 2300: * IF THE STRINGS ARE IDENTICAL. AFTER EXECUTING THIS ! 2301: * INSTRUCTION, THE VALUES OF XR AND XL ARE SET TO ZERO ! 2302: * AND THE VALUE IN (WA) IS UNDEFINED. ! 2303: * ARGUMENTS TO CMC MAY BE COMPLETE OR PARTIAL ! 2304: * STRINGS, SO MAKING OPTIMISATION TO USE WHOLE WORD ! 2305: * COMPARISONS DIFFICULT (DEPENDENT IN GENERAL ON ! 2306: * SHIFTS AND MASKING). ! 2307: * ! 2308: * 6.9 TRC TRANSLATE CHARACTERS ! 2309: * ! 2310: * TRC IS USED TO TRANSLATE A CHARACTER STRING USING A ! 2311: * SUPPLIED TRANSLATION TABLE. BEFORE EXECUTING TRC THE ! 2312: * REGISTERS ARE SET AS FOLLOWS. ! 2313: * (XL) CHAR PTR TO STRING TO BE TRANSLATED ! 2314: * (XR) CHAR PTR TO TRANSLATE TABLE ! 2315: * (WA) LENGTH OF STRING TO BE TRANSLATED ! 2316: * XL AND XR SHOULD HAVE BEEN PREPARED BY PLC. ! 2317: * THE TRANSLATE TABLE CONSISTS OF CFP$A CONTIGUOUS ! 2318: * CHARACTERS GIVING THE TRANSLATIONS OF THE CFP$A ! 2319: * CHARACTERS IN THE ALPHABET. ON COMPLETION, (XR) AND ! 2320: * (XL) ARE SET TO ZERO AND (WA) IS UNDEFINED. ! 2321: * ! 2322: * 6.10 CLU W CONVERT LOWER TO UPPER CASE ! 2323: * 6.11 CUL W CONVERT UPPER TO LOWER CASE ! 2324: * ! 2325: * THIS PAIR MAY BE USED FOR CASE CONVERSION OF CHARACTERS ! 2326: * IN W, WHERE THE CHARACTER SET SUPPORTS BOTH CASES. THEY ! 2327: * ARE NOT NEEDED IF THERE IS A SIMPLE RELATION BETWEEN THE ! 2328: * CASES AS IN ASCII AND EBCDIC. IN THE CASE OF SPITBOL THIS ! 2329: * ASSUMPTION IS MADE BY DEFAULT (SEE SYMBOL DFA$A) BUT THE ! 2330: * CODE INCLUDES AN OPTION SELECTABLE BY CONDITIONAL ! 2331: * ASSEMBLY ON .CSCV TO USE THESE OPCODES INSTEAD IF NEEDED ! 2332: * OR PREFERRED. ! 2333: ! 2334: ! 2335: Page 51 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 2336: ! 2337: * ! 2338: * -7- OPERATIONS ON BIT STRING VALUES ! 2339: * ! 2340: * 7.1 ANB OPW,W AND BIT STRING VALUES ! 2341: * 7.2 ORB OPW,W OR BIT STRING VALUES ! 2342: * 7.3 XOB OPW,W EXCLUSIVE OR BIT STRING VALUES ! 2343: * ! 2344: * IN THE ABOVE OPERATIONS, THE LOGICAL CONNECTIVE IS ! 2345: * APPLIED SEPARATELY TO EACH OF THE CFP$N BITS. ! 2346: * THE RESULT IS STORED IN THE SECOND OPERAND LOCATION. ! 2347: * ! 2348: * 7.4 CMB W COMPLEMENT ALL BITS IN OPW ! 2349: * ! 2350: * 7.5 RSH W,VAL RIGHT SHIFT BY VAL BITS ! 2351: * 7.6 LSH W,VAL LEFT SHIFT BY VAL BITS ! 2352: * 7.7 RSX W,X RIGHT SHIFT W NUMBER OF BITS IN X ! 2353: * 7.8 LSX W,X LEFT SHIFT W NUMBER OF BITS IN X ! 2354: * ! 2355: * THE ABOVE SHIFTS ARE LOGICAL SHIFTS IN WHICH BITS ! 2356: * SHIFTED OUT ARE LOST AND ZERO BITS SUPPLIED AS ! 2357: * REQUIRED. THE SHIFT COUNT IS IN THE RANGE 0-CFP$N. ! 2358: * ! 2359: * 7.9 NZB W,PLBL JUMP TO PLBL IF W IS NOT ! 2360: * ALL ZERO BITS. ! 2361: * ! 2362: * 7.10 ZRB W,PLBL JUMP TO PLBL IF W IS ALL ZERO BITS ! 2363: * ! 2364: * 7.11 ZGB OPN ZEROISE GARBAGE BITS ! 2365: * ! 2366: * OPN CONTAINS A BIT STRING REPRESENTING A WORD ! 2367: * OF CHARACTERS FROM A STRING OR SOME FUNCTION ! 2368: * FORMED FROM SUCH CHARACTERS (E.G. AS A RESULT OF ! 2369: * HASHING). ON A MACHINE WHERE THE WORD SIZE IS NOT A ! 2370: * MULTIPLE OF THE CHARACTER SIZE, SOME BITS IN REG MAY ! 2371: * BE UNDEFINED. THIS OPCODE REPLACES SUCH BITS BY THE ! 2372: * ZERO BIT. ZGB IS A NO-OP IF THE WORD SIZE IS A ! 2373: * MULTIPLE OF THE CHARACTER SIZE. ! 2374: ! 2375: ! 2376: Page 52 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 2377: ! 2378: * ! 2379: * -8- CONVERSION INSTRUCTIONS ! 2380: * ! 2381: * THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION ! 2382: * BETWEEN LENGTHS IN BAUS AND LENGTHS IN WORDS. ! 2383: * ! 2384: * 8.1 WTB REG CONVERT REG FROM WORDS TO BAUS. ! 2385: * THAT IS, MULTIPLY BY CFP$B. THIS IS ! 2386: * A NO-OP IF CFP$B IS ONE. ! 2387: * ! 2388: * 8.2 BTW REG CONVERT REG FROM BAUS TO WORDS ! 2389: * BY DIVIDING REG BY CFP$B DISCARDING ! 2390: * THE FRACTION. NO-OP IF CFP$B IS ONE ! 2391: * ! 2392: * THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION ! 2393: * OF ONE WORD INTEGER VALUES (ADDRESSES) TO AND ! 2394: * FROM THE FULL SIGNED INTEGER FORMAT. ! 2395: * ! 2396: * 8.3 MTI OPN THE VALUE OF OPN (AN ADDRESS) ! 2397: * IS MOVED AS A POSITIVE INTEGER ! 2398: * TO THE INTEGER ACCUMULATOR. ! 2399: * ! 2400: * 8.4 MFI OPN,PLBL THE VALUE CURRENTLY STORED IN THE ! 2401: * INTEGER ACCUMULATOR IS MOVED ! 2402: * TO OPN AS AN ADDRESS IF IT IS IN ! 2403: * THE RANGE 0 TO CFP$M INCLUSIVE. ! 2404: * IF THE ACCUMULATOR VALUE IS ! 2405: * OUTSIDE THIS RANGE, THEN THE RESULT ! 2406: * IN OPN IS UNDEFINED AND CONTROL IS ! 2407: * PASSED TO PLBL. MFI DESTROYS THE ! 2408: * VALUE OF (IA) WHETHER OR NOT ! 2409: * INTEGER OVERFLOW IS SIGNALLED. ! 2410: * PLBL MAY BE OMITTED IF OVERFLOW ! 2411: * IS IMPOSSIBLE. ! 2412: * ! 2413: * THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION ! 2414: * BETWEEN REAL VALUES AND INTEGER VALUES. ! 2415: * ! 2416: * 8.5 ITR CONVERT INTEGER VALUE IN INTEGER ! 2417: * ACCUMULATOR TO REAL AND STORE IN ! 2418: * REAL ACCUMULATOR (MAY LOSE ! 2419: * PRECISION IN SOME CASES) ! 2420: * ! 2421: * 8.6 RTI PLBL CONVERT THE REAL VALUE IN RA TO ! 2422: * AN INTEGER AND PLACE RESULT IN IA. ! 2423: * CONVERSION IS BY TRUNCATION OF THE ! 2424: * FRACTION - NO ROUNDING OCCURS. ! 2425: * JUMP TO PLBL IF OUT OF RANGE. (RA) ! 2426: * IS NOT CHANGED IN EITHER CASE. ! 2427: * PLBL MAY BE OMITTED IF OVERFLOW ! 2428: * IS IMPOSSIBLE. ! 2429: ! 2430: ! 2431: Page 53 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 2432: ! 2433: * ! 2434: * -8- CONVERSION INSTRUCTIONS (CONTINUED) ! 2435: * ! 2436: * THE FOLLOWING INSTRUCTIONS PROVIDE FOR COMPUTING ! 2437: * THE LENGTH OF STORAGE REQUIRED FOR A TEXT STRING. ! 2438: * ! 2439: * 8.7 CTW W,VAL THIS INSTRUCTION COMPUTES THE SUM ! 2440: * (NUMBER OF WORDS REQUIRED TO STORE ! 2441: * W CHARACTERS) + (VAL). THE SUM ! 2442: * IS STORED IN W. ! 2443: * FOR EXAMPLE, IF CFP$C IS 5, AND WA ! 2444: * CONTAINS 32, THEN CTW WA,2 ! 2445: * GIVES A RESULT OF 9 IN WA. ! 2446: * ! 2447: * 8.8 CTB W,VAL CTB IS EXACTLY LIKE CTW EXCEPT THAT ! 2448: * THE RESULT IS IN BAUS. IT HAS THE ! 2449: * SAME EFFECT AS CTW W,VAL WTB W ! 2450: * ! 2451: * 8.9 BTC W COMPUTE THE NUMBER OF CHARACTERS ! 2452: * WHICH CAN BE STORED IN (W) BAUS, ! 2453: * PLACING THE RESULT IN W. ! 2454: * ! 2455: * 8.10 WTC W COMPUTE THE NUMBER OF CHARACTERS ! 2456: * WHICH CAN BE STORED IN (W) WORDS, ! 2457: * PLACING THE RESULT IN W. ! 2458: * ! 2459: * THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION ! 2460: * FROM INTEGERS TO AND FROM NUMERIC DIGIT CHARACTERS ! 2461: * FOR USE IN NUMERIC CONVERSION ROUTINES. THEY EMPLOY ! 2462: * NEGATIVE INTEGER VALUES TO ALLOW FOR PROPER ! 2463: * CONVERSION OF NUMBERS WHICH CANNOT BE COMPLEMENTED. ! 2464: * ! 2465: * 8.11 CVM PLBL CONVERT BY MULTIPLICATION ! 2466: * ! 2467: * THE INTEGER ACCUMULATOR, WHICH IS ZERO OR NEGATIVE, ! 2468: * IS MULTIPLIED BY 10. WB CONTAINS THE CHARACTER ! 2469: * CODE FOR A DIGIT. THE VALUE OF THIS DIGIT IS THEN ! 2470: * SUBTRACTED FROM THE RESULT. IF THE RESULT IS OUT OF ! 2471: * RANGE, THEN CONTROL IS PASSED TO PLBL WITH THE ! 2472: * RESULT IN (IA) UNDEFINED. EXECUTION OF CVM LEAVES ! 2473: * THE RESULT IN (WB) UNDEFINED. ! 2474: * ! 2475: * 8.12 CVD CONVERT BY DIVISION ! 2476: * ! 2477: * THE INTEGER ACCUMULATOR, WHICH IS ZERO OR NEGATIVE, ! 2478: * IS DIVIDED BY 10. THE QUOTIENT (ZERO OR NEGATIVE) ! 2479: * IS REPLACED IN THE ACCUMULATOR. THE REMAINDER IS ! 2480: * CONVERTED TO THE CHARACTER CODE OF A DIGIT AND ! 2481: * PLACED IN WA. FOR EXAMPLE, AN OPERAND OF -523 GIVES ! 2482: * A QUOTIENT OF -52 AND A REMAINDER IN WA OF CH$D3. ! 2483: ! 2484: ! 2485: Page 54 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 2486: ! 2487: * ! 2488: * -9- BLOCK MOVE INSTRUCTIONS ! 2489: * ! 2490: * THE FOLLOWING INSTRUCTIONS ARE USED FOR TRANSFERRING ! 2491: * DATA FROM ONE AREA OF MEMORY TO ANOTHER IN BLOCKS. ! 2492: * THEY CAN BE IMPLEMENTED WITH THE INDICATED SERIES OF ! 2493: * OTHER MACRO-INSTRUCTIONS, BUT MORE EFFICIENT IMPLE- ! 2494: * MENTATIONS WILL BE POSSSIBLE ON MOST MACHINES. ! 2495: * BEFORE OBEYING ANY OF THESE ORDERS WA, XL, XR SHOULD HAVE ! 2496: * BEEN SET UP (USING PLC, PSC FOR THE CHARACTER MOVES). THE ! 2497: * FINAL VALUE OF WA IS UNDEFINED. ! 2498: * ! 2499: * 9.1 MVC MOVE CHARACTERS ! 2500: * ! 2501: * MVC IS EQUIVALENT TO THE SEQUENCE ! 2502: * ! 2503: * MOV WB,DUMPB ! 2504: * LCT WA,WA ! 2505: * LOOPC LCH WB,(XL)+ ! 2506: * SCH WB,(XR)+ ! 2507: * BCT WA,LOOPC ! 2508: * CSC XR ! 2509: * MOV DUMPB,WB ! 2510: * ! 2511: * THE CHARACTER POINTERS ARE BUMPED AS INDICATED ! 2512: * AND THE FINAL VALUE OF WA IS UNDEFINED. ! 2513: * ! 2514: * 9.2 MCB MOVE CHARACTERS BACKWARDS ! 2515: * ! 2516: * MCB IS EQUIVALENT TO THE SEQUENCE ! 2517: * ! 2518: * MOV WB,DUMPB ! 2519: * LCT WA,WA ! 2520: * LOOPC LCH WB,-(XL) ! 2521: * SCH WB,-(XR) ! 2522: * BCT WA,LOOPC ! 2523: * CSC XR ! 2524: * MOV DUMPB,WB ! 2525: * ! 2526: * THE CHARACTER POINTERS ARE BUMPED AS INDICATED ! 2527: * AND THE FINAL VALUE OF WA IS UNDEFINED. ! 2528: ! 2529: ! 2530: Page 55 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 2531: ! 2532: * ! 2533: * 9.3 MVW MOVE WORDS ! 2534: * ! 2535: * MVW IS EQUIVALENT TO THE SEQUENCE ! 2536: * ! 2537: * LOOPW MOV (XL)+,(XR)+ ! 2538: * DCA WA WA = BAUS TO MOVE ! 2539: * BNZ WA,LOOPW ! 2540: * ! 2541: * NOTE THAT THIS IMPLIES THAT THE VALUE IN WA IS THE ! 2542: * LENGTH IN BAUS WHICH IS A MULTIPLE OF CFP$B. ! 2543: * THE INITIAL ADDRESSES IN XR,XL ARE WORD ADDRESSES. ! 2544: * AS INDICATED, THE FINAL XR,XL VALUES POINT PAST THE ! 2545: * NEW AND OLD REGIONS OF MEMORY RESPECTIVELY. ! 2546: * THE FINAL VALUE OF WA IS UNDEFINED. ! 2547: * ! 2548: * 9.4 MWB MOVE WORDS BACKWARDS ! 2549: * ! 2550: * MWB IS EQUIVALENT TO THE SEQUENCE ! 2551: * ! 2552: * LOOPB MOV -(XL),-(XR) ! 2553: * DCA WA WA = BAUS TO MOVE ! 2554: * BNZ WA,LOOPB ! 2555: * ! 2556: * THERE IS A REQUIREMENT THAT THE INITIAL VALUE IN XL ! 2557: * BE AT LEAST 256 LESS THAN THE VALUE IN XR. THIS ! 2558: * ALLOWS AN IMPLEMENTATION IN WHICH CHUNKS OF 256 ! 2559: * BAUS ARE MOVED FORWARD (IBM 360, ICL 1900). ! 2560: * THE FINAL VALUE OF WA IS UNDEFINED. ! 2561: ! 2562: ! 2563: Page 56 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 2564: ! 2565: * ! 2566: * -10- OPERATIONS CONNECTED WITH THE STACK ! 2567: * ! 2568: * THE STACK IS AN AREA IN MEMORY WHICH IS DEDICATED FOR USE ! 2569: * IN CONJUNCTION WITH THE STACK POINTER REGISTER (XS). AS ! 2570: * PREVIOUSLY DESCRIBED, IT IS USED BY THE JSR AND EXI ! 2571: * INSTRUCTIONS AND MAY BE USED FOR STORAGE OF ANY OTHER ! 2572: * DATA AS REQUIRED. ! 2573: * ! 2574: * THE STACK BUILDS EITHER WAY IN MEMORY AND AN IMPORTANT ! 2575: * RESTRICTION IS THAT THE VALUE IN (XS) MUST BE THE ADDRESS ! 2576: * OF THE STACK FRONT AT ALL TIMES SINCE ! 2577: * SOME IMPLEMENTATIONS MAY RANDOMLY DESTROY STACK LOCATIONS ! 2578: * BEYOND (XS). ! 2579: * ! 2580: * THE STARTING STACK BASE ADDRESS IS PASSED ! 2581: * IN (XS) AT THE START OF EXECUTION. DURING EXECUTION IT ! 2582: * IS NECESSARY TO MAKE SURE THAT THE STACK DOES NOT ! 2583: * OVERFLOW. THIS IS ACHIEVED BY EXECUTING THE FOLLOWING ! 2584: * INSTRUCTION PERIODICALLY. ! 2585: * ! 2586: * 10.1 CHK CHECK STACK OVERFLOW ! 2587: * ! 2588: * AFTER SUCCESSFULLY EXECUTING CHK, IT IS PERMISSIBLE TO ! 2589: * USE UP TO 100 ADDITIONAL WORDS BEFORE ISSUING ANOTHER CHK ! 2590: * THUS CHK NEED NOT BE ISSUED EVERY TIME THE STACK IS ! 2591: * EXPANDED. IN SOME IMPLEMENTATIONS, THE CHECKING MAY BE ! 2592: * AUTOMATIC AND CHK WILL HAVE NO EFFECT. FOLLOWING THE ! 2593: * ABOVE RULE MAKES SURE THAT THE PROGRAM WILL OPERATE ! 2594: * CORRECTLY IN IMPLEMENTATIONS WITH NO AUTOMATIC CHECK. ! 2595: * ! 2596: * IF STACK OVERFLOW OCCURS (DETECTED EITHER AUTOMATICALLY ! 2597: * OR BY A CHK INSTRUCTION), THEN CONTROL IS PASSED TO THE ! 2598: * STACK OVERFLOW SECTION (SEE PROGRAM FORM). NOTE THAT THIS ! 2599: * TRANSFER MAY TAKE PLACE FOLLOWING ANY INSTRUCTION WHICH ! 2600: * STORES DATA AT A NEW LOCATION ON THE STACK. ! 2601: * AFTER STACK OVERFLOW, STACK IS ARBITRARILY POPPED ! 2602: * TO GIVE SOME SPACE IN WHICH THE ERROR PROCEDURE MAY ! 2603: * OPERATE. OTHERWISE A LOOP OF STACK OVERFLOWS MAY OCCUR. ! 2604: ! 2605: ! 2606: Page 57 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 2607: ! 2608: * ! 2609: * -11- DATA GENERATION INSTRUCTIONS ! 2610: * ! 2611: * THE FOLLOWING INSTRUCTIONS ARE USED TO GENERATE CONSTANT ! 2612: * VALUES IN THE CONSTANT SECTION AND ALSO TO ASSEMBLE ! 2613: * INITIAL VALUES IN THE WORKING STORAGE SECTION. THEY ! 2614: * MAY NOT APPEAR EXCEPT IN THESE TWO SECTIONS. ! 2615: * ! 2616: * 11.1 DAC ADDR ASSEMBLE ADDRESS CONSTANT. ! 2617: * GENERATES ONE WORD CONTAINING THE ! 2618: * SPECIFIED ONE WORD INTEGER ! 2619: * VALUE (ADDRESS). ! 2620: * ! 2621: * 11.2 DIC INTEGER GENERATES AN INTEGER VALUE WHICH ! 2622: * OCCUPIES CFP$I CONSECUTIVE WORDS. ! 2623: * THE OPERAND IS A DIGIT STRING WITH ! 2624: * A REQUIRED LEADING SIGN. ! 2625: * ! 2626: * 11.3 DRC REAL ASSEMBLES A REAL CONSTANT WHICH ! 2627: * OCCUPIES CFP$R CONSECUTIVE WORDS. ! 2628: * THE OPERAND FORM MUST OBEY THE ! 2629: * RULES FOR A FORTRAN REAL CONSTANT ! 2630: * WITH THE EXTRA REQUIREMENT THAT A ! 2631: * LEADING SIGN BE PRESENT. ! 2632: * ! 2633: * 11.4 DTC DTEXT DEFINE TEXT CONSTANT. DTEXT ! 2634: * IS STARTED AND ENDED WITH ANY ! 2635: * CHARACTER NOT CONTAINED IN THE ! 2636: * CHARACTERS TO BE ASSEMBLED. THE ! 2637: * CONSTANT OCCUPIES CONSECUTIVE WORDS ! 2638: * AS DICTATED BY THE CONFIGURATION ! 2639: * PARAMETER CFP$C. ANY UNUSED CHARS ! 2640: * IN THE LAST WORD ARE RIGHT FILLED ! 2641: * WITH ZEROS (I.E. THE CHARACTER ! 2642: * WHOSE INTERNAL CODE IS ZERO). ! 2643: * THE STRING CONTAINS A SEQUENCE OF ! 2644: * LETTERS, DIGITS, BLANKS AND ANY OF ! 2645: * THE FOLLOWING SPECIAL CHARACTERS. ! 2646: * =,$.(*)/+- ! 2647: * NO OTHER CHARACTERS ! 2648: * MAY BE USED IN A DTEXT OPERAND. ! 2649: * ! 2650: * 11.5 DBC VAL ASSEMBLE BIT STRING CONSTANT. THE ! 2651: * OPERAND IS A POSITIVE INTEGER ! 2652: * VALUE WHICH IS INTERPRETED IN ! 2653: * BINARY, RIGHT JUSTIFIED AND LEFT ! 2654: * FILLED WITH ZERO BITS. THUS 5 WOULD ! 2655: * IMPLY THE BIT STRING VALUE 00..101. ! 2656: * ! 2657: * 11.6 DDC DTEXT DEFINE DISPLAY CONSTANT. IDENTICAL ! 2658: * TO DTC (SEE ABOVE), HOWEVER ON ! 2659: * SYSTEMS SUPPORTING LOWER CASE, ! 2660: * THE TRANSLATION IS FREE TO MIX ! 2661: * CASES IN A MANNER APPROPRIATE ! 2662: * TO THE TARGET SYSTEM. ! 2663: ! 2664: ! 2665: Page 58 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 2666: ! 2667: * ! 2668: * -12- SYMBOL DEFINITION INSTRUCTIONS ! 2669: * ! 2670: * THE FOLLOWING INSTRUCTION IS USED TO DEFINE SYMBOLS ! 2671: * IN THE DEFINITIONS SECTION. IT MAY NOT BE USED ELSEWHERE. ! 2672: * ! 2673: * 12.1 EQU EQOP DEFINE SYMBOL ! 2674: * ! 2675: * THE SYMBOL WHICH APPEARS IN THE LABEL FIELD IS ! 2676: * DEFINED TO HAVE THE ABSOLUTE VALUE GIVEN ! 2677: * BY THE EQOP OPERAND. A GIVEN SYMBOL MAY BE DEFINED ! 2678: * ONLY ONCE IN THIS MANNER, AND ANY SYMBOLS OCCURING ! 2679: * IN EQOP MUST BE PREVIOUSLY DEFINED. ! 2680: * ! 2681: * THE FOLLOWING ARE THE POSSIBILITIES FOR EQOP ! 2682: * ! 2683: * VAL THE INDICATED VALUE IS USED ! 2684: * ! 2685: * VAL+VAL THE SUM OF THE TWO VALUES IS USED. ! 2686: * THIS SUM MUST NOT EXCEED CFP$M ! 2687: * ! 2688: * VAL-VAL THE DIFFERENCE BETWEEN THE TWO ! 2689: * VALUES (MUST BE POSITIVE) IS USED. ! 2690: * ! 2691: * * THIS FORMAT DEFINES THE LABEL BY ! 2692: * USING A VALUE SUPPLIED BY THE ! 2693: * MINIMAL TRANSLATOR. VALUES ARE ! 2694: * REQUIRED FOR THE ! 2695: * CFP$X (CONFIGURATION PARAMETERS) ! 2696: * E$XXX (ENVIRONMENT PARAMETERS) ! 2697: * CH$XX (CHARACTER CODES). ! 2698: * IN ORDER FOR A TRANSLATOR TO ! 2699: * HANDLE THIS FORMAT CORRECTLY THE ! 2700: * DEFINITIONS SECTION MUST BE ! 2701: * CONSULTED FOR DETAILS OF REQUIRED ! 2702: * SYMBOLS AS LISTED AT THE FRONT OF ! 2703: * THE SECTION. ! 2704: ! 2705: ! 2706: Page 59 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 2707: ! 2708: * ! 2709: * SYMBOL DEFINITION INSTRUCTIONS (CONTINUED) ! 2710: * ! 2711: * THE FOLLOWING INSTRUCTIONS MAY BE USED TO DEFINE SYMBOLS ! 2712: * IN THE PROCEDURE SECTION. THEY MAY NOT BE USED IN ! 2713: * ANY OTHER PART OF THE PROGRAM. ! 2714: * ! 2715: * 12.2 EXP PTYP,INT DEFINE EXTERNAL PROCEDURE ! 2716: * ! 2717: * EXP DEFINES THE SYMBOL IN THE LABEL FIELD AS A PLBL ! 2718: * NAMING AN EXTERNAL PROCEDURE WHICH CAN BE ! 2719: * REFERENCED IN A SUBSEQUENT JSR INSTRUCTION. THE ! 2720: * CODING FOR THE PROCEDURE IS EXTERNAL TO THE ! 2721: * CODING OF THE SOURCE PROGRAM IN THIS LANGUAGE. ! 2722: * THE CODE FOR EXTERNAL PROCEDURES MAY BE ! 2723: * REFERRED TO COLLECTIVELY AS THE OPERATING SYSTEM ! 2724: * INTERFACE, OR MORE BRIEFLY, OSINT, AND WILL ! 2725: * FREQUENTLY BE A SEPARATELY COMPILED SEGMENT OF CODE ! 2726: * LOADED WITH SPITBOL TO PRODUCE A COMPLETE SYSTEM. ! 2727: * ! 2728: * PTYP SPECIFIES THE PROCEDURE TYPE AND INT DESIGNATES ! 2729: * THE NUMBER OF EXIT PARAMETERS. ! 2730: * ! 2731: * 12.3 INP PTYP,INT DEFINE INTERNAL PROCEDURE ! 2732: * ! 2733: * INP DEFINES THE SYMBOL IN THE LABEL FIELD AS A PLBL ! 2734: * NAMING AN INTERNAL PROCEDURE AND GIVES ! 2735: * ITS TYPE AND NUMBER OF EXIT PARAMETERS. THE LABEL ! 2736: * CAN BE REFERENCED IN JSR INSTRUCTIONS AND ! 2737: * IT MUST APPEAR LABELLING A PRC INSTRUCTION IN THE ! 2738: * PROGRAM SECTION. ! 2739: * ! 2740: * 12.4 INR DEFINE INTERNAL ROUTINE ! 2741: * ! 2742: * INR DEFINES THE SYMBOL IN THE LABEL FIELD AS A RLBL ! 2743: * NAMING AN INTERNAL ROUTINE. THE ! 2744: * LABEL MAY BE REFERENCED IN ANY TYPE OF BRANCH ORDER ! 2745: * AND IT MUST APPEAR LABELLING A RTN INSTRUCTION IN ! 2746: * THE PROGRAM SECTION. ! 2747: * ! 2748: * 12.5 GLB DEFINE GLOBAL SYMBOL ! 2749: * ! 2750: * GLB DEFINES THE SYMBOL IN THE LABEL FIELD AS A GLBL ! 2751: * NAMING THE DESTINATION OF A JMG (JUMP GLOBAL) ORDER. ! 2752: * THE SYMBOL MAY ALSO BE THE DESTINATION OF LOCAL ! 2753: * BRANCHES OF ALL TYPES. ! 2754: * THE LABEL MUST APPEAR IN THE PROCEDURE SECTION ! 2755: * LABELLING AN INSTRUCTION. ! 2756: ! 2757: ! 2758: Page 60 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 2759: ! 2760: * ! 2761: * -13- ASSEMBLY LISTING LAYOUT INSTRUCTIONS ! 2762: * ! 2763: * 13.1 EJC EJECT TO NEXT PAGE ! 2764: * ! 2765: * 13.2 TTL TEXT SET NEW ASSEMBLY TITLE ! 2766: * ! 2767: * TTL IMPLIES AN IMMEDIATE EJECT OF THE ! 2768: * ASSEMBLY LISTING TO PRINT THE NEW TITLE. ! 2769: * ! 2770: * THE USE OF TTL AND EJC CARDS IS SUCH THAT THE ! 2771: * PROGRAM WILL LIST NEATLY IF THE PRINTER PRINTS ! 2772: * AS MANY AS 58 LINES PER PAGE. IN THE EVENT THAT ! 2773: * THE PRINTER DEPTH IS LESS THAN THIS, OR IF THE ! 2774: * LISTING CONTAINS INTERSPERSED LINES (SUCH AS ACTUAL ! 2775: * GENERATED CODE), THEN THE FORMAT MAY BE UPSET. ! 2776: * ! 2777: * LINES STARTING WITH AN ASTERISK ARE COMMENT LINES ! 2778: * WHICH CAUSE NO CODE TO BE GENERATED AND MAY OCCUR ! 2779: * FREELY ANYWHERE IN THE PROGRAM. THE FORMAT FOR ! 2780: * COMMENT LINES IS GIVEN IN SECTION -15-. ! 2781: ! 2782: ! 2783: Page 61 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 2784: ! 2785: * ! 2786: * -14- PROGRAM FORM ! 2787: * ! 2788: * THE PROGRAM CONSISTS OF SEPARATE SECTIONS SEPARATED ! 2789: * BY SEC OPERATIONS. THE SECTIONS MUST APPEAR IN THE ! 2790: * FOLLOWING SPECIFIED ORDER. ! 2791: * ! 2792: * 14.1 SEC START OF PROCEDURE SECTION ! 2793: * ! 2794: * (PROCEDURE SECTION) ! 2795: * ! 2796: * SEC START OF DEFINITIONS SECTION ! 2797: * ! 2798: * (DEFINITIONS SECTION) ! 2799: * ! 2800: * SEC START OF CONSTANT STORAGE SECTION ! 2801: * ! 2802: * (CONSTANT STORAGE SECTION) ! 2803: * ! 2804: * SEC START OF WORKING STORAGE SECTION ! 2805: * ! 2806: * (WORKING STORAGE SECTION) ! 2807: * ! 2808: * SEC START OF PROGRAM SECTION ! 2809: * ! 2810: * (PROGRAM SECTION) ! 2811: * ! 2812: * SEC START OF STACK OVERFLOW SECTION ! 2813: * ! 2814: * (STACK OVERFLOW SECTION) ! 2815: * ! 2816: * SEC START OF ERROR SECTION ! 2817: * ! 2818: * (ERROR SECTION) ! 2819: * ! 2820: * 14.2 END END OF ASSEMBLY ! 2821: ! 2822: ! 2823: Page 62 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 2824: ! 2825: * ! 2826: * SECTION 10 - PROGRAM FORM ! 2827: * ! 2828: * PROCEDURE SECTION ! 2829: * ! 2830: * THE PROCEDURE SECTION CONTAINS ALL THE EXP ! 2831: * INSTRUCTIONS FOR EXTERNALLY AVAILABLE PROCEDURES ! 2832: * AND INP,INR OPCODES FOR INTERNAL PROCEDURES,ROUTINES ! 2833: * SO THAT A SINGLE PASS MINIMAL TRANSLATOR HAS ADVANCE ! 2834: * KNOWLEDGE OF PROCEDURE TYPES WHEN TRANSLATING CALLS. ! 2835: * ! 2836: * DEFINITIONS SECTION ! 2837: * ! 2838: * THE DEFINITIONS SECTION CONTAINS EQU INSTRUCTIONS ! 2839: * WHICH DEFINE SYMBOLS REFERENCED LATER ON IN THE ! 2840: * PROGRAM, CONSTANT AND WORK SECTIONS. ! 2841: * ! 2842: * CONSTANT STORAGE SECTION ! 2843: * ! 2844: * THE CONSTANT STORAGE SECTION CONSISTS ENTIRELY ! 2845: * OF CONSTANTS ASSEMBLED WITH THE DAC,DDC,DIC,DRC ! 2846: * DTC,DBC ASSEMBLY OPERATIONS. THESE CONSTANTS CAN ! 2847: * BE FREELY REFERENCED BY THE PROGRAM INSTRUCTIONS. ! 2848: * ! 2849: * WORKING STORAGE SECTION ! 2850: * ! 2851: * THE WORKING STORAGE SECTION CONSISTS ENTIRELY OF ! 2852: * DAC,DDC,DIC,DRC,DBC,DTC INSTRUCTIONS TO DEFINE A ! 2853: * FIXED LENGTH WORK AREA. THE WORK LOCATIONS IN THIS ! 2854: * AREA CAN BE DIRECTLY REFERENCED IN PROGRAM ! 2855: * INSTRUCTIONS. THE AREA IS INITIALIZED IN ACCORDANCE ! 2856: * WITH THE VALUES ASSEMBLED IN THE INSTRUCTIONS. ! 2857: * ! 2858: * PROGRAM SECTION ! 2859: * ! 2860: * THE PROGRAM SECTION CONTAINS PROGRAM INSTRUCTIONS ! 2861: * AND ASSOCIATED OPERATIONS (SUCH AS PRC, ENP, ENT). ! 2862: * CONTROL IS PASSED TO THE FIRST INSTRUCTION IN THIS ! 2863: * SECTION WHEN EXECUTION IS INITIATED. ! 2864: * ! 2865: * STACK OVERFLOW SECTION ! 2866: * ! 2867: * THE STACK OVERFLOW SECTION CONTAINS INSTRUCTIONS ! 2868: * LIKE THE PROGRAM SECTION. CONTROL IS PASSED TO THE ! 2869: * FIRST INSTRUCTION IN THIS SECTION FOLLOWING THE ! 2870: * OCCURRENCE OF STACK OVERFLOW, SEE CHK INSTRUCTION. ! 2871: * ! 2872: * ERROR SECTION ! 2873: * ! 2874: * THE ERROR SECTION CONTAINS INSTRUCTIONS LIKE THE ! 2875: * PROGRAM SECTION. CONTROL IS PASSED TO THE FIRST ! 2876: * INSTRUCTION IN THIS SECTION WHEN A PROCEDURE EXIT ! 2877: * CORRESPONDS TO AN ERROR PARAMETER (SEE ERR) ! 2878: * OR WHEN AN ERB OPCODE IS OBEYED. THE ERROR CODE ! 2879: * MUST CLEAN UP THE MAIN STACK AND CATER FOR THE ! 2880: * POSSIBILITY THAT A SUBROUTINE STACK MAY NEED CLEAN ! 2881: * UP. ! 2882: ! 2883: ! 2884: Page 63 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 2885: ! 2886: * OSINT ! 2887: * ! 2888: * THOUGH NOT PART OF THE MINIMAL SOURCE, IT IS USEFUL ! 2889: * TO REFER TO THE COLLECTION OF INITIALISATION AND ! 2890: * EXP ROUTINES AS OSINT (OPERATING SYSTEM INTERFACE). ! 2891: * ERRORS OCCURRING WITHIN OSINT PROCEDURES ARE ! 2892: * USUALLY HANDLED BY MAKING AN ERROR RETURN. IF THIS ! 2893: * IS NOT FEASIBLE OR APPROPRIATE, OSINT MAY USE THE ! 2894: * MINIMAL ERROR SECTION TO REPORT ERRORS DIRECTLY BY ! 2895: * BRANCHING TO IT WITH A SUITABLE NUMERIC ERROR ! 2896: * CODE IN WA. ! 2897: ! 2898: ! 2899: Page 64 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 2900: ! 2901: * ! 2902: * SECTION 11 - STATEMENT FORMAT ! 2903: * ! 2904: * ALL LABELS ARE EXACTLY FIVE CHARACTERS LONG AND START ! 2905: * WITH THREE LETTERS (ABCDEFGHIJKLMNOPQRSTUVWXY$) FOLLOWED ! 2906: * BY TWO LETTERS OR DIGITS. ! 2907: * THE LETTER Z MAY NOT BE USED IN MINIMAL SYMBOLS BUT $ IS ! 2908: * PERMITTED. ! 2909: * FOR IMPLEMENTATIONS WHERE $ MAY NOT APPEAR IN THE ! 2910: * TARGET CODE , A SIMPLE SUBSTITUTION OF Z FOR $ ! 2911: * MAY THUS BE MADE WITHOUT RISK OF PRODUCING NON-UNIQUE ! 2912: * SYMBOLS. ! 2913: * THE LETTER Z IS HOWEVER PERMITTED IN OPCODE MNEMONICS AND ! 2914: * IN COMMENTS. ! 2915: * ! 2916: * MINIMAL STATEMENTS ARE IN A FIXED FORMAT AS FOLLOWS. ! 2917: * ! 2918: * COLS 1-5 LABEL IF ANY (ELSE BLANK) ! 2919: * ! 2920: * COLS 6-7 ALWAYS BLANK ! 2921: * ! 2922: * COLS 8-10 OPERATION MNEMONIC ! 2923: * ! 2924: * COLS 11-12 BLANKS ! 2925: * ! 2926: * COLS 13-28 OPERAND FIELD, TERMINATED BY A ! 2927: * BLANK. MAY OCCASIONALLY ! 2928: * EXTEND PAST COLUMN 28. ! 2929: * ! 2930: * COLS 30-64 COMMENT. ALWAYS SEPARATED FROM THE ! 2931: * OPERAND FIELD BY AT LEAST ONE BLANK ! 2932: * MAY OCCASIONALLY START AFTER COLUMN ! 2933: * 30 IF THE OPERAND EXTENDS PAST 28. ! 2934: * A SPECIAL EXCEPTION OCCURS FOR THE ! 2935: * IFF INSTRUCTION, WHOSE COMMENT MAY ! 2936: * BE ONLY 20 CHARACTERS LONG (30-49). ! 2937: * ! 2938: * COLS 65 ON UNUSED ! 2939: * ! 2940: * ! 2941: * COMMENT LINES HAVE THE FOLLOWING FORMAT ! 2942: * ! 2943: * COL 1 ASTERISK ! 2944: * ! 2945: * COLS 2-7 BLANK ! 2946: * ! 2947: * COLS 8-64 ARBITRARY TEXT, RESTRICTED TO THE ! 2948: * FORTRAN CHARACTER SET. ! 2949: * ! 2950: * ! 2951: * THE FORTRAN CHARACTER SET IS A-Z 0-9 =,$.(*)-/+ ! 2952: ! 2953: ! 2954: Page 65 MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 2955: ! 2956: * ! 2957: * SECTION 12 - PROGRAM EXECUTION ! 2958: * ! 2959: * EXECUTION OF THE PROGRAM BEGINS WITH THE FIRST ! 2960: * INSTRUCTION IN THE PROGRAM SECTION. ! 2961: * ! 2962: * IN ADDITION TO THE FIXED LENGTH MEMORY REGIONS DEFINED ! 2963: * BY THE ASSEMBLY, THERE ARE TWO DYNAMICALLY ALLOCATED ! 2964: * MEMORY REGIONS AS FOLLOWS. ! 2965: * ! 2966: * DATA AREA THIS IS AN AREA AVAILABLE TO THE ! 2967: * PROGRAM FOR GENERAL STORAGE OF DATA ! 2968: * ANY DATA VALUE MAY BE STORED IN ! 2969: * THIS AREA EXCEPT INSTRUCTIONS. ! 2970: * IN SOME IMPLEMENTATIONS, IT MAY BE ! 2971: * POSSIBLE TO INCREASE THE SIZE OF ! 2972: * THIS AREA DYNAMICALLY BY ADDING ! 2973: * WORDS AT THE TOP END WITH A CALL ! 2974: * TO A SYSTEM PROCEDURE. ! 2975: * ! 2976: * STACK AREA THIS REGION OF MEMORY HOLDS ! 2977: * THE STACK USED FOR SUBROUTINE CALLS ! 2978: * AND OTHER STORAGE OF ONE WORD ! 2979: * INTEGER VALUES (ADDRESSES). THIS ! 2980: * IS THE STACK ASSOCIATED WITH ! 2981: * INDEX REGISTER XS. ! 2982: * ! 2983: * THE LOCATIONS AND SIZES OF THESE AREAS ARE SPECIFIED ! 2984: * BY THE VALUES IN THE REGISTERS AT THE START OF PROGRAM ! 2985: * EXECUTION AS FOLLOWS. ! 2986: * ! 2987: * (XS) ADDRESS ONE PAST THE STACK BASE. ! 2988: * E.G. IF XS IS 23456, A D-STACK WILL ! 2989: * OCCUPY WORDS 23455,23454,... ! 2990: * WHEREAS A U-STACK WILL OCCUPY ! 2991: * 23457,23458,... ! 2992: * ! 2993: * (XR) ADDRESS OF THE FIRST WORD ! 2994: * IN THE DATA AREA ! 2995: * ! 2996: * (XL) ADDRESS OF THE LAST WORD IN THE ! 2997: * DATA AREA. ! 2998: * ! 2999: * (WA,WB,WC,IA,RA,CP) AS DEFINED BY THE PROGRAM ! 3000: * ! 3001: * THERE IS NO EXPLICIT WAY TO TERMINATE THE EXECUTION OF A ! 3002: * PROGRAM. THIS FUNCTION IS PERFORMED BY AN APPROPRIATE ! 3003: * SYSTEM PROCEDURE REFERENCED WITH THE SYSEJ INSTRUCTION. ! 3004: ! 3005: ! 3006: Page 66 S P I T B O L -- BASIC INFORMATION ! 3007: ! 3008: * ! 3009: * GENERAL STRUCTURE ! 3010: * ----------------- ! 3011: * ! 3012: * THIS PROGRAM IS A TRANSLATOR FOR A VERSION OF THE SNOBOL4 ! 3013: * PROGRAMMING LANGUAGE. LANGUAGE DETAILS ARE CONTAINED IN ! 3014: * THE MANUAL MACRO SPITBOL BY DEWAR AND MCCANN, TECHNICAL ! 3015: * REPORT 90, UNIVERSITY OF LEEDS 1976. ! 3016: * THE IMPLEMENTATION IS DISCUSSED IN DEWAR AND MCCANN, ! 3017: * MACRO SPITBOL - A SNOBOL4 COMPILER, SOFTWARE PRACTICE AND ! 3018: * EXPERIENCE, 7, 95-113, 1977. ! 3019: * THE LANGUAGE IS AS IMPLEMENTED BY THE BTL TRANSLATOR ! 3020: * (GRISWOLD, POAGE AND POLONSKY, PRENTICE HALL, 1971) ! 3021: * WITH THE FOLLOWING PRINCIPAL EXCEPTIONS. ! 3022: * ! 3023: * 1) REDEFINITION OF STANDARD SYSTEM FUNCTIONS AND ! 3024: * OPERATORS IS NOT PERMITTED. ! 3025: * ! 3026: * 2) THE VALUE FUNCTION IS NOT PROVIDED. ! 3027: * ! 3028: * 3) ACCESS TRACING IS PROVIDED IN ADDITION TO THE ! 3029: * OTHER STANDARD TRACE MODES. ! 3030: * ! 3031: * 4) THE KEYWORD STFCOUNT IS NOT PROVIDED. ! 3032: * ! 3033: * 5) THE KEYWORD FULLSCAN IS NOT PROVIDED AND ALL PATTERN ! 3034: * MATCHING TAKES PLACE IN FULLSCAN MODE (I.E. WITH NO ! 3035: * HEURISTICS APPLIED). ! 3036: * ! 3037: * 6) A SERIES OF EXPRESSIONS SEPARATED BY COMMAS MAY ! 3038: * BE GROUPED WITHIN PARENTHESES TO PROVIDE A SELECTION ! 3039: * CAPABILITY. THE SEMANTICS ARE THAT THE SELECTION ! 3040: * ASSUMES THE VALUE OF THE FIRST EXPRESSION WITHIN IT ! 3041: * WHICH SUCCEEDS AS THEY ARE EVALUATED FROM THE LEFT. ! 3042: * IF NO EXPRESSION SUCCEEDS THE ENTIRE STATEMENT FAILS ! 3043: * ! 3044: * 7) AN EXPLICIT PATTERN MATCHING OPERATOR IS PROVIDED. ! 3045: * THIS IS THE BINARY QUERY (SEE GIMPEL SIGPLAN OCT 74) ! 3046: * ! 3047: * 8) THE ASSIGNMENT OPERATOR IS INTRODUCED AS IN THE ! 3048: * GIMPEL REFERENCE. ! 3049: * ! 3050: * 9) THE EXIT FUNCTION IS PROVIDED FOR GENERATING LOAD ! 3051: * MODULES - CF. GIMPELS SITBOL. ! 3052: * ! 3053: * ! 3054: * THE METHOD USED IN THIS PROGRAM IS TO TRANSLATE THE ! 3055: * SOURCE CODE INTO AN INTERNAL PSEUDO-CODE (SEE FOLLOWING ! 3056: * SECTION). AN INTERPRETOR IS THEN USED TO EXECUTE THIS ! 3057: * GENERATED PSEUDO-CODE. THE NATURE OF THE SNOBOL4 LANGUAGE ! 3058: * IS SUCH THAT THE LATTER TASK IS MUCH MORE COMPLEX THAN ! 3059: * THE ACTUAL TRANSLATION PHASE. ACCORDINGLY, NEARLY ALL THE ! 3060: * CODE IN THE PROGRAM SECTION IS CONCERNED WITH THE ACTUAL ! 3061: * EXECUTION OF THE SNOBOL4 PROGRAM. ! 3062: ! 3063: ! 3064: Page 67 S P I T B O L -- BASIC INFORMATION ! 3065: ! 3066: * ! 3067: * INTERPRETIVE CODE FORMAT ! 3068: * ------------------------ ! 3069: * ! 3070: * THE INTERPRETIVE PSEUDO-CODE CONSISTS OF A SERIES OF ! 3071: * ADDRESS POINTERS. THE EXACT FORMAT OF THE CODE IS ! 3072: * DESCRIBED IN CONNECTION WITH THE CDBLK FORMAT. THE ! 3073: * PURPOSE OF THIS SECTION IS TO GIVE GENERAL INSIGHT INTO ! 3074: * THE INTERPRETIVE APPROACH INVOLVED. ! 3075: * ! 3076: * THE BASIC FORM OF THE CODE IS RELATED TO REVERSE POLISH. ! 3077: * IN OTHER WORDS, THE OPERANDS PRECEDE THE OPERATORS WHICH ! 3078: * ARE ZERO ADDRESS OPERATORS. THERE ARE SOME EXCEPTIONS TO ! 3079: * THESE RULES, NOTABLY THE UNARY NOT OPERATOR AND THE ! 3080: * SELECTION CONSTRUCTION WHICH CLEARLY REQUIRE ADVANCE ! 3081: * KNOWLEDGE OF THE OPERATOR INVOLVED. ! 3082: * ! 3083: * THE OPERANDS ARE MOVED TO THE TOP OF THE MAIN STACK AND ! 3084: * THE OPERATORS ARE APPLIED TO THE TOP STACK ENTRIES. LIKE ! 3085: * OTHER VERSIONS OF SPITBOL, THIS PROCESSOR DEPENDS ON ! 3086: * KNOWING WHETHER OPERANDS ARE REQUIRED BY NAME OR BY VALUE ! 3087: * AND MOVES THE APPROPRIATE OBJECT TO THE STACK. THUS NO ! 3088: * NAME/VALUE CHECKS ARE INCLUDED IN THE OPERATOR CIRCUITS. ! 3089: * ! 3090: * THE ACTUAL POINTERS IN THE CODE POINT TO A BLOCK WHOSE ! 3091: * FIRST WORD IS THE ADDRESS OF THE INTERPRETOR ROUTINE ! 3092: * TO BE EXECUTED FOR THE CODE WORD. ! 3093: * ! 3094: * IN THE CASE OF OPERATORS, THE POINTER IS TO A WORD WHICH ! 3095: * CONTAINS THE ADDRESS OF THE OPERATOR TO BE EXECUTED. IN ! 3096: * THE CASE OF OPERANDS SUCH AS CONSTANTS, THE POINTER IS TO ! 3097: * THE OPERAND ITSELF. ACCORDINGLY, ALL OPERANDS CONTAIN ! 3098: * A FIELD WHICH POINTS TO THE ROUTINE TO LOAD THE VALUE OF ! 3099: * THE OPERAND ONTO THE STACK. IN THE CASE OF A VARIABLE, ! 3100: * THERE ARE THREE SUCH POINTERS. ONE TO LOAD THE VALUE, ! 3101: * ONE TO STORE THE VALUE AND A THIRD TO JUMP TO THE LABEL. ! 3102: * ! 3103: * THE HANDLING OF FAILURE RETURNS DESERVES SPECIAL COMMENT. ! 3104: * THE LOCATION FLPTR CONTAINS THE POINTER TO THE LOCATION ! 3105: * ON THE MAIN STACK WHICH CONTAINS THE FAILURE RETURN ! 3106: * WHICH IS IN THE FORM OF A BAU OFFSET IN THE CURRENT ! 3107: * CODE BLOCK (CDBLK OR EXBLK). WHEN A FAILURE OCCURS, THE ! 3108: * STACK IS POPPED AS INDICATED BY THE SETTING OF FLPTR AND ! 3109: * CONTROL IS PASSED TO THE APPROPRIATE LOCATION IN THE ! 3110: * CURRENT CODE BLOCK WITH THE STACK POINTER POINTING TO THE ! 3111: * FAILURE OFFSET ON THE STACK AND FLPTR UNCHANGED. ! 3112: ! 3113: ! 3114: Page 68 S P I T B O L -- BASIC INFORMATION ! 3115: ! 3116: * ! 3117: * INTERNAL DATA REPRESENTATIONS ! 3118: * ----------------------------- ! 3119: * ! 3120: * REPRESENTATION OF VALUES ! 3121: * ! 3122: * A VALUE IS REPRESENTED BY A POINTER TO A BLOCK WHICH ! 3123: * DESCRIBES THE TYPE AND PARTICULARS OF THE DATA VALUE. ! 3124: * IN GENERAL, A VARIABLE IS A LOCATION CONTAINING SUCH A ! 3125: * POINTER (ALTHOUGH IN THE CASE OF TRACE ASSOCIATIONS THIS ! 3126: * IS MODIFIED, SEE DESCRIPTION OF TRBLK). ! 3127: * ! 3128: * THE FOLLOWING IS A LIST OF POSSIBLE DATATYPES SHOWING THE ! 3129: * TYPE OF BLOCK USED TO HOLD THE VALUE. THE DETAILS OF ! 3130: * EACH BLOCK FORMAT ARE GIVEN LATER. ! 3131: * ! 3132: * DATATYPE BLOCK TYPE ! 3133: * -------- ---------- ! 3134: * ! 3135: * ARRAY ARBLK OR VCBLK ! 3136: * ! 3137: * CODE CDBLK ! 3138: * ! 3139: * EXPRESSION EXBLK OR SEBLK ! 3140: * ! 3141: * INTEGER ICBLK ! 3142: * ! 3143: * NAME NMBLK ! 3144: * ! 3145: * PATTERN P0BLK OR P1BLK OR P2BLK ! 3146: * ! 3147: * REAL RCBLK ! 3148: * ! 3149: * STRING SCBLK ! 3150: * ! 3151: * TABLE TBBLK ! 3152: * ! 3153: * PROGRAM DATATYPE PDBLK ! 3154: ! 3155: ! 3156: Page 69 S P I T B O L -- BASIC INFORMATION ! 3157: ! 3158: * ! 3159: * REPRESENTATION OF VARIABLES ! 3160: * --------------------------- ! 3161: * ! 3162: * DURING THE COURSE OF EVALUATING EXPRESSIONS, IT IS ! 3163: * NECESSARY TO GENERATE NAMES OF VARIABLES (FOR EXAMPLE ! 3164: * ON THE LEFT SIDE OF A BINARY EQUALS OPERATOR). THESE ARE ! 3165: * NOT TO BE CONFUSED WITH OBJECTS OF DATATYPE NAME WHICH ! 3166: * ARE IN FACT VALUES. ! 3167: * ! 3168: * FROM A LOGICAL POINT OF VIEW, SUCH NAMES COULD BE SIMPLY ! 3169: * REPRESENTED BY A POINTER TO THE APPROPRIATE VALUE CELL. ! 3170: * HOWEVER IN THE CASE OF ARRAYS AND PROGRAM DEFINED ! 3171: * DATATYPES, THIS WOULD VIOLATE THE RULE THAT THERE MUST BE ! 3172: * NO POINTERS INTO THE MIDDLE OF A BLOCK IN DYNAMIC STORE. ! 3173: * ACCORDINGLY, A NAME IS ALWAYS REPRESENTED BY A BASE AND ! 3174: * OFFSET. THE BASE POINTS TO THE START OF THE BLOCK ! 3175: * CONTAINING THE VARIABLE VALUE AND THE OFFSET IS THE ! 3176: * OFFSET WITHIN THIS BLOCK IN BAUS. THUS THE ADDRESS ! 3177: * OF THE ACTUAL VARIABLE IS DETERMINED BY ADDING THE BASE ! 3178: * AND OFFSET VALUES. ! 3179: * ! 3180: * THE FOLLOWING ARE THE INSTANCES OF VARIABLES REPRESENTED ! 3181: * IN THIS MANNER. ! 3182: * ! 3183: * 1) NATURAL VARIABLE BASE IS PTR TO VRBLK ! 3184: * OFFSET IS *VRVAL ! 3185: * ! 3186: * 2) TABLE ELEMENT BASE IS PTR TO TEBLK ! 3187: * OFFSET IS *TEVAL ! 3188: * ! 3189: * 3) ARRAY ELEMENT BASE IS PTR TO ARBLK ! 3190: * OFFSET IS OFFSET TO ELEMENT ! 3191: * ! 3192: * 4) VECTOR ELEMENT BASE IS PTR TO VCBLK ! 3193: * OFFSET IS OFFSET TO ELEMENT ! 3194: * ! 3195: * 5) PROG DEF DTP BASE IS PTR TO PDBLK ! 3196: * OFFSET IS OFFSET TO FIELD VALUE ! 3197: * ! 3198: * IN ADDITION THERE ARE TWO CASES OF OBJECTS WHICH ARE ! 3199: * LIKE VARIABLES BUT CANNOT BE HANDLED IN THIS MANNER. ! 3200: * THESE ARE CALLED PSEUDO-VARIABLES AND ARE REPRESENTED ! 3201: * WITH A SPECIAL BASE POINTER AS FOLLOWS= ! 3202: * ! 3203: * EXPRESSION VARIABLE PTR TO EVBLK (SEE EVBLK) ! 3204: * ! 3205: * KEYWORD VARIABLE PTR TO KVBLK (SEE KVBLK) ! 3206: * ! 3207: * PSEUDO-VARIABLES ARE HANDLED AS SPECIAL CASES BY THE ! 3208: * ACCESS PROCEDURE (ACESS) AND THE ASSIGNMENT PROCEDURE ! 3209: * (ASIGN). SEE THESE TWO PROCEDURES FOR DETAILS. ! 3210: ! 3211: ! 3212: Page 70 S P I T B O L -- BASIC INFORMATION ! 3213: ! 3214: * ! 3215: * ORGANIZATION OF DATA AREA ! 3216: * ------------------------- ! 3217: * ! 3218: * THE DATA AREA IS DIVIDED INTO TWO REGIONS. ! 3219: * ! 3220: * STATIC AREA ! 3221: * ! 3222: * THE STATIC AREA BUILDS UP FROM THE BOTTOM AND CONTAINS ! 3223: * DATA AREAS WHICH ARE ALLOCATED DYNAMICALLY BUT ARE NEVER ! 3224: * DELETED OR MOVED AROUND. THE MACRO-PROGRAM ITSELF ! 3225: * USES THE STATIC AREA FOR THE FOLLOWING. ! 3226: * ! 3227: * 1) ALL VARIABLE BLOCKS (VRBLK). ! 3228: * ! 3229: * 2) THE HASH TABLE FOR VARIABLE BLOCKS. ! 3230: * ! 3231: * 3) MISCELLANEOUS BUFFERS AND WORK AREAS (SEE PROGRAM ! 3232: * INITIALIZATION SECTION). ! 3233: * ! 3234: * IN ADDITION, THE SYSTEM PROCEDURES MAY USE THIS AREA FOR ! 3235: * INPUT/OUTPUT BUFFERS, EXTERNAL FUNCTIONS ETC. SPACE IN ! 3236: * THE STATIC REGION IS ALLOCATED BY CALLING PROCEDURE ALOST ! 3237: * ! 3238: * THE FOLLOWING GLOBAL VARIABLES DEFINE THE CURRENT ! 3239: * LOCATION AND SIZE OF THE STATIC AREA. ! 3240: * ! 3241: * STATB ADDRESS OF START OF STATIC AREA ! 3242: * STATE ADDRESS+1 OF LAST WORD IN AREA. ! 3243: * ! 3244: * THE MINIMUM SIZE OF STATIC IS GIVEN APPROXIMATELY BY ! 3245: * 12 + *E$HNB + *E$STS + SPACE FOR ALPHABET STRING ! 3246: * AND STANDARD PRINT BUFFER. ! 3247: ! 3248: ! 3249: Page 71 S P I T B O L -- BASIC INFORMATION ! 3250: ! 3251: * DYNAMIC AREA ! 3252: * ! 3253: * THE DYNAMIC AREA IS BUILT UPWARDS IN MEMORY AFTER THE ! 3254: * STATIC REGION. DATA IN THIS AREA MUST ALL BE IN STANDARD ! 3255: * BLOCK FORMATS SO THAT IT CAN BE PROCESSED BY THE GARBAGE ! 3256: * COLLECTOR (PROCEDURE GBCOL). GBCOL COMPACTS BLOCKS DOWN ! 3257: * IN THIS REGION AS REQUIRED BY SPACE EXHAUSTION AND CAN ! 3258: * ALSO MOVE ALL BLOCKS UP TO ALLOW FOR EXPANSION OF THE ! 3259: * STATIC REGION. ! 3260: * WITH THE EXCEPTION OF TABLES AND ARRAYS, NO SPITBOL ! 3261: * OBJECT ONCE BUILT IN DYNAMIC MEMORY IS EVER SUBSEQUENTLY ! 3262: * MODIFIED. OBSERVING THIS RULE NECESSITATES A COPYING ! 3263: * ACTION DURING STRING AND PATTERN CONCATENATION. ! 3264: * GARBAGE COLLECTION IS FUNDAMENTAL TO THE ALLOCATION OF ! 3265: * SPACE FOR VALUES. SPITBOL USES A VERY EFFICIENT GARBAGE ! 3266: * COLLECTOR WHICH INSISTS THAT POINTERS INTO DYNAMIC STORE ! 3267: * SHOULD BE IDENTIFIABLE WITHOUT USE OF BIT TABLES, ! 3268: * MARKER BITS ETC. TO SATISFY THIS REQUIREMENT, DYNAMIC ! 3269: * MEMORY MUST NOT START AT TOO LOW AN ADDRESS AND LENGTHS ! 3270: * OF ARRAYS, TABLES, STRINGS, CODE AND EXPRESSION BLOCKS ! 3271: * MAY NOT EXCEED THE NUMERICAL VALUE OF THE LOWEST DYNAMIC ! 3272: * ADDRESS. TO AVOID EITHER PENALIZING USERS WITH MODEST ! 3273: * REQUIREMENTS OR RESTRICTING THOSE WITH GREATER NEEDS ON ! 3274: * HOST SYSTEMS WHERE DYNAMIC MEMORY IS ALLOCATED IN LOW ! 3275: * ADDRESSES, THE MINIMUM DYNAMIC ADDRESS MAY BE SPECIFIED ! 3276: * SUFFICIENTLY HIGH TO PERMIT ARBITRARILY LARGE SPITBOL ! 3277: * OBJECTS TO BE CREATED ( WITH THE POSSIBILITY IN EXTREME ! 3278: * CASES OF WASTING LARGE AMOUNTS OF MEMORY BELOW THE ! 3279: * START ADDRESS). THIS MINIMUM VALUE IS MADE AVAILABLE ! 3280: * IN VARIABLE MXLEN BY A SYSTEM ROUTINE, SYSMX. ! 3281: * ALTERNATIVELY SYSMX MAY INDICATE THAT A ! 3282: * DEFAULT MAY BE USED IN WHICH DYNAMIC IS PLACED ! 3283: * AT THE LOWEST POSSIBLE ADDRESS FOLLOWING STATIC. ! 3284: * THE FOLLOWING GLOBAL WORK CELLS DEFINE THE LOCATION AND ! 3285: * LENGTH OF THE DYNAMIC AREA. ! 3286: * ! 3287: * DNAMB START OF DYNAMIC AREA ! 3288: * DNAMP NEXT AVAILABLE LOCATION ! 3289: * DNAME LAST AVAILABLE LOCATION + 1 ! 3290: * ! 3291: * DNAMB IS ALWAYS HIGHER THAN STATE SINCE THE ALOST ! 3292: * PROCEDURE MAINTAINS SOME EXPANSION SPACE ABOVE STATE. ! 3293: * *** DNAMB MUST NEVER BE PERMITTED TO HAVE A VALUE LESS ! 3294: * THAN THAT IN MXLEN *** ! 3295: * ! 3296: * SPACE IN THE DYNAMIC REGION IS ALLOCATED BY THE ALLOC ! 3297: * PROCEDURE. THE DYNAMIC REGION MAY BE USED BY SYSTEM ! 3298: * PROCEDURES PROVIDED THAT ALL THE RULES ARE OBEYED. ! 3299: * SOME OF THE RULES ARE SUBTLE SO IT IS PREFERABLE FOR ! 3300: * OSINT TO MANAGE ITS OWN MEMORY NEEDS. SPITBOL PROCS ! 3301: * OBEY RULES TO ENSURE THAT NO ACTION CAN CAUSE A GARBAGE ! 3302: * COLLECTION EXCEPT AT SUCH TIMES AS CONTENTS OF XL, XR ! 3303: * AND THE STACK ARE +CLEAN+ (SEE COMMENT BEFORE UTILITY ! 3304: * PROCEDURES AND IN GBCOL FOR MORE DETAIL). NOTE ! 3305: * THAT CALLS OF ALOST MAY CAUSE GARBAGE COLLECTION (SHIFT ! 3306: * OF MEMORY TO FREE SPACE). SPITBOL PROCS WHICH CALL ! 3307: * SYSTEM ROUTINES ASSUME THAT THEY CANNOT PRECIPITATE ! 3308: * COLLECTION AND THIS MUST BE RESPECTED. ! 3309: ! 3310: ! 3311: Page 72 S P I T B O L -- BASIC INFORMATION ! 3312: ! 3313: * ! 3314: * REGISTER USAGE ! 3315: * -------------- ! 3316: * ! 3317: * (CP) CODE POINTER REGISTER. USED TO ! 3318: * HOLD A POINTER TO THE CURRENT ! 3319: * LOCATION IN THE INTERPRETIVE PSEUDO ! 3320: * CODE (I.E. PTR INTO A CDBLK). ! 3321: * ! 3322: * (XL,XR) GENERAL INDEX REGISTERS. USUALLY ! 3323: * USED TO HOLD POINTERS TO BLOCKS IN ! 3324: * DYNAMIC STORAGE. AN IMPORTANT ! 3325: * RESTRICTION IS THAT THE VALUE IN ! 3326: * XL MUST BE COLLECTABLE FOR ! 3327: * A GARBAGE COLLECT CALL. A VALUE ! 3328: * IS COLLECTABLE IF IT EITHER POINTS ! 3329: * OUTSIDE THE DYNAMIC AREA, OR IF IT ! 3330: * POINTS TO THE START OF A BLOCK IN ! 3331: * THE DYNAMIC AREA. ! 3332: * ! 3333: * (XS) STACK POINTER. USED TO POINT TO ! 3334: * THE STACK FRONT. THE STACK MAY ! 3335: * BUILD UP OR DOWN AND IS USED ! 3336: * TO STACK SUBROUTINE RETURN POINTS ! 3337: * AND OTHER RECURSIVELY SAVED DATA. ! 3338: * ! 3339: * (XT) AN ALTERNATIVE NAME FOR XL DURING ! 3340: * ITS USE IN ACCESSING STACKED ITEMS. ! 3341: * ! 3342: * (WA,WB,WC) GENERAL WORK REGISTERS. CANNOT BE ! 3343: * USED FOR INDEXING, BUT MAY HOLD ! 3344: * VARIOUS TYPES OF DATA. ! 3345: * ! 3346: * (IA) USED FOR ALL SIGNED INTEGER ! 3347: * ARITHMETIC, BOTH THAT USED BY THE ! 3348: * TRANSLATOR AND THAT ARISING FROM ! 3349: * USE OF SNOBOL4 ARITHMETIC OPERATORS ! 3350: * ! 3351: * (RA) REAL ACCUMULATOR. USED FOR ALL ! 3352: * FLOATING POINT ARITHMETIC. ! 3353: * ! 3354: * ENTRY VALUES ! 3355: * ! 3356: * IN ADDITION TO THE ENTRY VALUES OF XS, XL, XR AS DEFINED ! 3357: * FOR MINIMAL, THE PROGRAM-SPECIFIC ENTRY REGISTERS MUST ! 3358: * BE SET AS FOLLOWS ! 3359: * ! 3360: * (WA) INITIAL VALUE FOR CODE KEYWORD ! 3361: * ! 3362: * (WB,WC,IA,RA,CP) ZERO ! 3363: * ! 3364: ! 3365: ! 3366: Page 73 S P I T B O L -- PROCEDURES SECTION ! 3367: ! 3368: * ! 3369: * THIS SECTION STARTS WITH DESCRIPTIONS OF THE OPERATING ! 3370: * SYSTEM DEPENDENT PROCEDURES WHICH ARE USED BY THE SPITBOL ! 3371: * TRANSLATOR. ALL SUCH PROCEDURES HAVE FIVE LETTER NAMES ! 3372: * BEGINNING WITH SYS. THEY ARE LISTED IN ALPHABETICAL ! 3373: * ORDER. ! 3374: * ALL PROCEDURES HAVE A SPECIFICATION CONSISTING OF A ! 3375: * MODEL CALL, PRECEDED BY A POSSIBLY EMPTY LIST OF REGISTER ! 3376: * CONTENTS GIVING PARAMETERS AVAILABLE TO THE PROCEDURE AND ! 3377: * FOLLOWED BY A POSSIBLY EMPTY LIST OF REGISTER CONTENTS ! 3378: * REQUIRED ON RETURN FROM THE CALL OR WHICH MAY HAVE HAD ! 3379: * THEIR CONTENTS DESTROYED. ONLY THOSE REGISTERS EXPLICITLY ! 3380: * MENTIONED IN THE LIST AFTER THE CALL MAY HAVE THEIR ! 3381: * VALUES CHANGED. ! 3382: * A MODEL MINIMAL EXP PSEUDO-OP FOR EACH PROCEDURE IS ! 3383: * INCLUDED IN THE DESCRIPTION. MACHINE PROCESSABLE VERSIONS ! 3384: * OF THESE ARE COLLECTED AT THE END OF THE SECTION, ! 3385: * FOLLOWING THE SEC OPCODE. ! 3386: * THE SEGMENT OF CODE PROVIDING THE EXTERNAL PROCEDURES IS ! 3387: * CONVENIENTLY REFERRED TO AS OSINT (OPERATING SYSTEM ! 3388: * INTERFACE). THE SYSXX PROCEDURES IT CONTAINS PROVIDE ! 3389: * FACILITIES NOT USUALLY AVAILABLE AS PRIMITIVES IN ! 3390: * ASSEMBLY LANGUAGES. FOR PARTICULAR TARGET MACHINES, ! 3391: * IMPLEMENTORS MAY CHOOSE FOR SOME MINIMAL OPCODES WHICH ! 3392: * DO NOT HAVE REASONABLY DIRECT TRANSLATIONS, TO USE CALLS ! 3393: * OF ADDITIONAL PROCEDURES WHICH THEY PROVIDE IN OSINT. ! 3394: * E.G. MWB OR TRC MIGHT BE TRANSLATED AS JSR SYSMB, ! 3395: * JSR SYSTC IN SOME IMPLEMENTATIONS. ! 3396: * ! 3397: * IN THE DESCRIPTIONS, REFERENCE IS MADE TO --BLK ! 3398: * FORMATS (-- = A PAIR OF LETTERS). SEE THE SPITBOL ! 3399: * DEFINITIONS SECTION FOR DETAILED DESCRIPTIONS OF BLOCKS. ! 3400: * ! 3401: * SCBLK FORMAT IS OUTLINED HERE, SINCE STRINGS ARE OFTEN ! 3402: * PASSED AS PARAMETERS TO OSINT OR MAY BE RETURNED BY ! 3403: * OSINT. AN SCBLK CONTAINS 2 HEADER WORDS, THE FIRST OF ! 3404: * WHICH CONTAINS A VALUE ONLY OF INTEREST TO SPITBOL. ! 3405: * IT IS NOT NECESSARY TO SET THIS FIELD IN RETURNED ! 3406: * SCBLKS. ! 3407: * THE SECOND WORD CONTAINS THE NUMBER OF CHARACTERS IN THE ! 3408: * STRING AND SHOULD BE CORRECTLY SET IN RETURNED SCBLKS. ! 3409: * THE REMAINING WORDS CONTAIN THE CHARACTERS OF THE STRING, ! 3410: * PACKED CFP$C PER WORD, WITH THE LAST WORD PADDED OUT IF ! 3411: * NECESSARY WITH BLANK CHARACTERS. ! 3412: ! 3413: ! 3414: Page 74 S P I T B O L -- PROCEDURES SECTION ! 3415: ! 3416: * ! 3417: * OSINT FAILURE (FLOSI) AND ERROR (EROSI) RETURNS ! 3418: * ----- ------- ------- --- ----- ------- ------- ! 3419: * ! 3420: * WHERE IT MAKES SENSE, OSINT CALLS MAY BE ABLE TO ! 3421: * RETURN IN SUCH A WAY AS TO CAUSE SPITBOL STATEMENT ! 3422: * FAILURE SO THAT THE USER CAN REGAIN CONTROL FOR SOME ! 3423: * CONDITIONS AND ATTEMPT RECOVERY OR A RE-TRY. ! 3424: * THESE CASES ARE IDENTIFIED BY INCLUDING ! 3425: * PPM FLOSI ! 3426: * IN THE LIST OF RETURNS. ! 3427: * THE CONDITIONS ON REGISTER PRESERVATION WHEN A FLOSI ! 3428: * RETURN IS TAKEN ARE AS FOLLOWS. ! 3429: * ANY REGISTER APPEARING IN THE LIST FOLLOWING THE MODEL ! 3430: * CALL AS BEING DESTROYED ON A NORMAL RETURN, NEED NOT BE ! 3431: * PRESERVED. ADDITIONALLY ANY REGISTER CONTAINING ENTRY ! 3432: * PARAMETERS NEED NOT BE PRESERVED ON A FLOSI RETURN. ! 3433: * OTHER REGISTERS, NOT EXPLICITLY REFERENCED, MUST BE ! 3434: * PRESERVED. ! 3435: * ! 3436: * SOME OSINT CALLS ARE PERMITTED TO RETURN AN ERROR ! 3437: * CODE AND/OR MESSAGE. THIS ALLOWS REPORTING OF ERROR ! 3438: * CONDITIONS DETECTED BY THE OSINT ROUTINE IN TERMS ! 3439: * RELEVANT TO THE IMPLEMENTATION. SUCH RETURNS WILL RESULT ! 3440: * IN EXECUTION TERMINATION (UNLESS AN ERROR TRAP IS ! 3441: * OPERATIVE). IN THE DOCUMENTATION OF THE SYS-- ROUTINES ! 3442: * THEY APPEAR AS ! 3443: * PPM EROSI ! 3444: * RETURNS AND THE CONVENTIONS USED ARE AS FOLLOWS - ! 3445: * TAKE THE SPECIFIED RETURN WITH ! 3446: * (WA) SET TO 0 AS A DEFAULT ERROR CODE ! 3447: * OR (WA) SET TO ANY PRIVATE CODE IN 300 TO 999. ! 3448: * (XL) SET TO 0 IN WHICH CASE SPITBOL WILL MAKE A ! 3449: * LATER SYSEM CALL TO OBTAIN THE ERROR TEXT ! 3450: * USING THE ERROR CODE PASSED IN WA. ! 3451: * OR (WA) SET TO ANY PRIVATE CODE IN 300 TO 999. ! 3452: * (XL) POINTING TO AN SCBLK CONTAINING THE TEXT OF AN ! 3453: * ERROR MESSAGE AND WITH ITS LENGTH FIELD SET. ! 3454: * THIS WILL BE COPIED ON RETURN TO SPITBOL AND ! 3455: * USED IN THE USUAL ERROR PROCESSING. ! 3456: * IN THIS CASE, NO SYSEM CALL WILL FOLLOW. ! 3457: * ! 3458: * THE REMARKS REGARDING REGISTER PRESERVATION UNDER THE ! 3459: * FLOSI DESCRIPTION APPLY ALSO TO AN EROSI RETURN EXCEPT ! 3460: * THAT PRESCRIBED VALUES FOR WA, XL MUST BE SET UP. ! 3461: * ! 3462: ! 3463: ! 3464: Page 75 S P I T B O L -- PROCEDURES SECTION ! 3465: ! 3466: * ! 3467: * SYSAX -- AFTER EXECUTION ! 3468: * ! 3469: * SYSAX EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 3470: * ! 3471: * IF THE CONDITIONAL ASSEMBLY SYMBOL .CSAX IS DEFINED, ! 3472: * THIS ROUTINE IS CALLED IMMEDIATELY AFTER EXECUTION AND ! 3473: * BEFORE PRINTING OF EXECUTION STATISTICS OR DUMP OUTPUT. ! 3474: * PURPOSE OF CALL IS FOR IMPLEMENTOR TO DETERMINE AND ! 3475: * IF THE CALL IS NOT REQUIRED IT WILL BE OMITTED IF .CSAX ! 3476: * IS UNDEFINED. IN THIS CASE SYSAX NEED NOT BE CODED. ! 3477: * ! 3478: * JSR SYSAX CALL AFTER EXECUTION ! 3479: * ! 3480: * SYSBX -- BEFORE EXECUTION ! 3481: * ! 3482: * SYSBX EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 3483: * ! 3484: * CALLED AFTER INITIAL SPITBOL COMPILATION AND BEFORE ! 3485: * COMMENCING EXECUTION IN CASE OSINT NEEDS ! 3486: * TO ASSIGN FILES OR PERFORM OTHER NECESSARY SERVICES. ! 3487: * OSINT MAY ALSO CHOOSE TO SEND A MESSAGE TO ONLINE ! 3488: * TERMINAL (IF ANY) INDICATING THAT EXECUTION IS STARTING. ! 3489: * ! 3490: * JSR SYSBX CALL BEFORE EXECUTION STARTS ! 3491: ! 3492: ! 3493: Page 76 S P I T B O L -- PROCEDURES SECTION ! 3494: ! 3495: * ! 3496: * SYSCI -- CONVERT INTEGER ! 3497: * ! 3498: * SYSCI EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 3499: * ! 3500: * SYSCI IS AN OPTIONAL OSINT ROUTINE THAT CAUSES SPITBOL TO ! 3501: * CALL SYSCI TO CONVERT INTEGER VALUES TO STRINGS, RATHER ! 3502: * THAN USING THE SPITBOL INTERNAL CONVERSION CODE. THIS ! 3503: * CODE MAY BE LESS EFFICIENT ON MACHINES WITH HARDWARE ! 3504: * CONVERSION INSTRUCTIONS AND IN SUCH CASES, IT MAY BE AN ! 3505: * ADVANTAGE TO INCLUDE SYSCI. THE SYMBOL .CSCI MUST BE ! 3506: * DEFINED IF THIS ROUTINE IS TO BE USED. ! 3507: * ! 3508: * THE RULES FOR CONVERTING INTEGERS TO STRINGS ARE THAT ! 3509: * POSITIVE VALUES ARE REPRESENTED WITHOUT ANY SIGN, AND ! 3510: * THERE ARE NEVER ANY LEADING BLANKS OR ZEROS, EXCEPT IN ! 3511: * THE CASE OF ZERO ITSELF WHICH IS REPRESENTED AS A SINGLE ! 3512: * ZERO DIGIT. NEGATIVE NUMBERS ARE REPRESENTED WITH A ! 3513: * PRECEDING MINUS SIGN. THERE ARE NEVER ANY TRAILING ! 3514: * BLANKS, AND CONVERSION CANNOT FAIL. ! 3515: * ! 3516: * (IA) VALUE TO BE CONVERTED ! 3517: * JSR SYSCI CALL TO CONVERT INTEGER VALUE ! 3518: * (XL) POINTER TO PSEUDO-SCBLK WITH STRING ! 3519: * ! 3520: * SYSDT -- GET CURRENT DATE ! 3521: * ! 3522: * SYSDT EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 3523: * ! 3524: * SYSDT IS USED TO OBTAIN THE CURRENT DATE. THE DATE IS ! 3525: * RETURNED AS A CHARACTER STRING IN ANY FORMAT APPROPRIATE ! 3526: * TO THE OPERATING SYSTEM IN USE. IT MAY ALSO CONTAIN THE ! 3527: * CURRENT TIME OF DAY. SYSDT IS USED TO IMPLEMENT THE ! 3528: * SNOBOL4 FUNCTION DATE(). ! 3529: * ! 3530: * JSR SYSDT CALL TO GET DATE ! 3531: * (XL) POINTER TO BLOCK CONTAINING DATE ! 3532: * ! 3533: * THE FORMAT OF THE BLOCK IS LIKE AN SCBLK EXCEPT THAT ! 3534: * THE FIRST WORD NEED NOT BE SET. THE RESULT IS COPIED ! 3535: * INTO SPITBOL DYNAMIC MEMORY ON RETURN. ! 3536: ! 3537: ! 3538: Page 77 S P I T B O L -- PROCEDURES SECTION ! 3539: ! 3540: * ! 3541: * SYSEC -- END -COPY INCLUSION ! 3542: * ! 3543: * SYSEC PRC E,2 DEFINE EXTERNAL ENTRY POINT ! 3544: * ! 3545: * (WA) IOTAG FROM MATCHING SYSSC ! 3546: * JSR SYSEC CALL TO END -COPY ! 3547: * PPM DUMMY FAIL EXIT (DO NOT USE) ! 3548: * PPM EROSI ERROR EXIT ! 3549: * (WA,WB,WC) DESTRUCTABLE ! 3550: * ! 3551: * THE CALL TO SYSEC SIGNALS THE OSINT THAT INPUT IS ! 3552: * TO BE CLOSED OUT FROM THE CURRENT SYSRD -COPY FILE ! 3553: * AND INPUT RESTORED FROM THE NEXT OUTER LEVEL. WA ! 3554: * IS THE IOTAG RETURNED FROM THE MATCHING SYSSC CALL. ! 3555: * NOTE THAT SYSEC MAY BE CALLED EITHER AS A ! 3556: * CONSEQUENCE OF FLOSI EXIT FROM SYSRD, OR PREMATURELY ! 3557: * IN THE EVENT OF A CODE() COMPILATION ERROR CONTAINING ! 3558: * A -COPY, OR "END" LABEL ENCOUNTERED DURING INITIAL ! 3559: * COMPILATION. A MISSING FLOSI EXIT FOR SYSEC IS INCLUDED ! 3560: * FOR STRUCTURAL CONFORMANCE, BUT MUST NEVER BE TAKEN. ! 3561: ! 3562: ! 3563: Page 78 S P I T B O L -- PROCEDURES SECTION ! 3564: ! 3565: * ! 3566: * SYSSC -- START -COPY INCLUSION FOR SYSRD ! 3567: * ! 3568: * SYSSC PRC E,2 DEFINE EXTERNAL ENTRY POINT ! 3569: * ! 3570: * (XR) FILETAG SCBLK FOR -COPY ! 3571: * JSR SYSSC CALL TO NEST -COPY INPUT ! 3572: * PPM DUMMY FAIL EXIT (DO NOT USE) ! 3573: * PPM EROSI ERROR EXIT ! 3574: * (WA) IOTAG TO BE PRESENTED TO SYSEC ! 3575: * (WB,WC) DESTRUCTABLE ! 3576: * ! 3577: * SYSSC IS CALLED BY SPITBOL WHEN A -COPY CONTROL ! 3578: * CARD IS ENCOUNTERED, EITHER AT COMPILE TIME IN ! 3579: * THE INPUT STREAM OR AT EXECUTION TIME IN A ! 3580: * CALL TO CODE. THE INTENDED SEMANTICS ARE THAT ! 3581: * FURTHER INPUT FROM THE CURRENT STANDARD INPUT ! 3582: * FILE BE SUSPENDED AND THAT SUBSEQENT CALLS ! 3583: * TO SYSRD RETURN LINES FROM THE NEW FILE ! 3584: * IDENTIFIED BY THE SCBLK PTR GIVEN TO SYSSC IN XR. ! 3585: * THIS NEW FILE IS CLOSED AND SUSPENDED INPUT ! 3586: * RESUMED BY THE OSINT WHEN SYSEC IS CALLED. ! 3587: * ! 3588: * FAILURE TO FIND A -COPY FILE MUST BE VIEWED ! 3589: * AS AN EROSI. THE DUMMY PPM IS INCLUDED ONLY FOR ! 3590: * STRUCTURAL COMPATIBILITY WITH OTHER FLOSI/EROSI ! 3591: * OSINT ROUTINE DEFINITIONS. THE IOTAG RETURNED ! 3592: * WILL BE SAVED AND PRESENTED TO SYSEC ! 3593: * WHEN SPITBOL WISHES THIS LEVEL OF -COPY TERMINATED. ! 3594: * IT MUST BE NON-COLLECTABLE. ! 3595: * ! 3596: * IN GENERAL, SPITBOL SUPPORTS ARBITRARY NESTING ! 3597: * OF SYSSC/SYSEC IN THE NATURAL MANNER. IT IS ! 3598: * RECOGNISED THAT THE IMPLEMENTATION MAY NEED TO ! 3599: * LIMIT THE DEGREE OF NESTING. HOWEVER ! 3600: * IMPLEMENTORS ARE MOST STRONGLY ENCOURAGED TO ! 3601: * PROVIDE AT LEAST A SINGLE LEVEL OF -COPY TO GIVE ! 3602: * A DEGREE OF MODULARITY TO A LANGUAGE WHICH ! 3603: * DEFINITELY NEEDS IT. ! 3604: ! 3605: ! 3606: Page 79 S P I T B O L -- PROCEDURES SECTION ! 3607: ! 3608: * ! 3609: * SYSEF -- EJECT FILE ! 3610: * ! 3611: * SYSEF EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 3612: * ! 3613: * SYSEF IS USED TO WRITE A PAGE EJECT TO A NAMED FILE. IT ! 3614: * MAY ONLY BE USED FOR FILES WHERE THIS CONCEPT MAKES ! 3615: * SENSE. NOTE THAT SYSEF IS NOT NORMALLY USED FOR THE ! 3616: * STANDARD OUTPUT FILE (SEE SYSEP). ! 3617: * THE FAILURE RETURN SHOULD BE USED IF THE FILE DOES NOT ! 3618: * PERMIT EJECTS. ! 3619: * THE ERROR RETURN SHOULD BE USED FOR OTHER UNSPECIFIED ! 3620: * FAILURE EVENTS. ! 3621: * SEE SYSIO FOR ACCOUNT OF FILETAG, IOTAG. ! 3622: * ! 3623: * (XL) FILETAG (PTR TO SCBLK FOR ARG) ! 3624: * (WA) IOTAG FROM INITIAL SYSIO CALL ! 3625: * (WC) VALUE/0 FOR INTEGER/STRING FILETAG ! 3626: * JSR SYSEF CALL TO EJECT FILE ! 3627: * PPM FLOSI STATEMENT FAILURE RETURN ! 3628: * PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE ! 3629: * (XL,WA,WC) DESTROYED ! 3630: * ! 3631: * SYSEJ -- END OF JOB ! 3632: * ! 3633: * SYSEJ EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 3634: * ! 3635: * SYSEJ IS CALLED ONCE AT THE END OF EXECUTION TO ! 3636: * TERMINATE THE RUN. ! 3637: * RUN STATISTICS, ENDING MESSAGES ETC WILL HAVE BEEN ! 3638: * PROVIDED ALREADY BY SPITBOL BEFORE THIS CALL IS MADE. ! 3639: * ! 3640: * (WA) VALUE OF CODE KEYWORD ! 3641: * JSR SYSEJ CALL TO END JOB ! 3642: * DOES NOT RETURN TO CALLER ! 3643: * ! 3644: ! 3645: ! 3646: Page 80 S P I T B O L -- PROCEDURES SECTION ! 3647: ! 3648: * ! 3649: * SYSEM -- GET ERROR MESSAGE TEXT ! 3650: * ! 3651: * SYSEM EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 3652: * ! 3653: * SYSEM IS USED TO OBTAIN THE TEXT OF ERR, ERB CALLS IN THE ! 3654: * SOURCE PROGRAM OR OF OSINT ERROR MESSAGES. ! 3655: * THE ERROR CODE IS EITHER THAT GIVEN IN THE ERR, ERB ! 3656: * ORDER OR IS THAT RETURNED VIA THE EROSI MECHANISM OF ! 3657: * AN EARLIER OSINT CALL. ! 3658: * SYSEM SHOULD RETURN A NULL STRING (LENGTH ZERO) IF IT ! 3659: * DOES NOT SUPPORT THIS FEATURE OR NO MESSAGE CORRESPONDS ! 3660: * TO THE PRESENTED CODE. ! 3661: * IN THIS CASE, SPITBOL WILL PRINT THE STRING, IF ANY, ! 3662: * STORED IN THE ERRTEXT KEYWORD. ! 3663: * ! 3664: * (WA) ERROR CODE NUMBER ! 3665: * JSR SYSEM CALL TO GET TEXT ! 3666: * (XR) POINTER TO TEXT OF MESSAGE ! 3667: * ! 3668: * THE RETURNED VALUE IS A POINTER TO A BLOCK IN SCBLK ! 3669: * FORMAT EXCEPT THAT THE FIRST WORD NEED NOT BE SET. THE ! 3670: * STRING IS COPIED INTO DYNAMIC MEMORY ON RETURN. ! 3671: ! 3672: ! 3673: Page 81 S P I T B O L -- PROCEDURES SECTION ! 3674: ! 3675: * ! 3676: * SYSEN -- ENDFILE ! 3677: * ! 3678: * SYSEN EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 3679: * ! 3680: * SYSEN IS USED TO IMPLEMENT THE SNOBOL4 FUNCTION ENDFILE. ! 3681: * THE FILE SHOULD NORMALLY BE CLOSED BY THIS CALL (UNLESS ! 3682: * THE CALL IS INTENDED TO ACCESS, VIA THE SECOND ARGUMENT, ! 3683: * SOME SPECIAL HOST FEATURE WHICH DOES NOT IMPLY CLOSURE). ! 3684: * ANY INTERNAL BUFFERS, TABLE ENTRIES OR MARKERS RELATING ! 3685: * TO THE FILE MAY BE FREED IF FILE CLOSURE OCCURS. ! 3686: * THE SECOND ARGUMENT IS USED TO REQUEST FEATURES SUCH AS ! 3687: * FILE DELETION, RENAMING, REPROTECTION, REWINDING ETC AS ! 3688: * APPROPRIATE TO THE HOST OPERATING SYSTEM. ITS FORMAT IS ! 3689: * HOST SPECIFIC AND IT IS THE RESPONSIBILITY OF SYSEN TO ! 3690: * PARSE IT. ! 3691: * (WA) IS USED AS A CLOSURE FLAG ON RETURN. IF THE VALUE ! 3692: * IS NON-ZERO, SUBSEQUENT INPUT/OUTPUT SYS-- CALLS ! 3693: * INVOKED THROUGH ACCESS TO THE ASSOCIATED VARIABLE WILL ! 3694: * OCCUR AS THOUGH THERE HAD BEEN NO SYSEN CALL. ! 3695: * IF IT IS SET TO ZERO SPITBOL WILL CAUSE STATEMENT FAILURE ! 3696: * FOR SUBSEQUENT ATTEMPTS TO INVOKE INPUT/OUTPUT ACTIVITY ! 3697: * THROUGH THE ASSOCIATED VARIABLE (CF A READ MADE AFTER ! 3698: * PHYSICAL END OF FILE IS REACHED). THIS WILL BE DONE ! 3699: * WITHOUT ANY FURTHER INVOCATION OF SYS-- ROUTINES. ! 3700: * SEE SYSIO FOR ACCOUNT OF FILETAG, IOTAG. ! 3701: * ! 3702: * (XL) FILETAG (PTR TO SCBLK FOR 1ST ARG) ! 3703: * (XR) SCBLK PTR FOR 2ND ARG (0 IF NONE) ! 3704: * (WA) IOTAG FROM INITIAL SYSIO CALL ! 3705: * (WC) VALUE/0 FOR INTEGER/STRING FILETAG ! 3706: * JSR SYSEN CALL TO ENDFILE ! 3707: * PPM FLOSI STATEMENT FAILURE RETURN ! 3708: * PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE ! 3709: * (WA) CLOSURE FLAG (SEE ABOVE) ! 3710: * (XL,XR,WC) DESTROYED ! 3711: * ! 3712: * THE FAILURE RETURN SHOULD BE USED IF THE FILE DOES NOT ! 3713: * PERMIT ENDFILE (E.G. STANDARD INPUT AND OUTPUT FILES) ! 3714: * OR IF IT IS CLOSED ALREADY OR FOR APPROPRIATE CONDITIONS ! 3715: * WHERE A NON-NULL SECOND ARGUMENT WAS SUPPLIED. ! 3716: * THE ERROR RETURN SHOULD BE USED FOR OTHER UNSPECIFIED ! 3717: * FAILURE EVENTS. ! 3718: ! 3719: ! 3720: Page 82 S P I T B O L -- PROCEDURES SECTION ! 3721: ! 3722: * ! 3723: * SYSEP -- EJECT PRINTER PAGE ! 3724: * ! 3725: * SYSEP EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 3726: * ! 3727: * SYSEP IS CALLED TO PERFORM A PAGE EJECT ON THE STANDARD ! 3728: * PRINTER OUTPUT FILE (CORRESPONDING TO SYSPR OUTPUT). ! 3729: * IF THE STANDARD PRINTER FILE DOES NOT SUPPORT PAGE EJECTS ! 3730: * THEN THIS ROUTINE SHOULD USE THE FAILURE RETURN. ! 3731: * IF SYSPP OPTIONS ARE SET TO MAKE THE TERMINAL THE ! 3732: * STANDARD OUTPUT FILE, EITHER ENSURE THAT PAGE SIZE IS ! 3733: * SET TO AVOID EJECTS OR CODE THIS ROUTINE TO HANDLE ! 3734: * POTENTIAL EJECTS TO TERMINAL. ! 3735: * ! 3736: * JSR SYSEP CALL TO EJECT PRINTER OUTPUT ! 3737: * PPM FLOSI STATEMENT FAILURE RETURN ! 3738: * PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE ! 3739: ! 3740: ! 3741: Page 83 S P I T B O L -- PROCEDURES SECTION ! 3742: ! 3743: * ! 3744: * SYSEX -- CALL EXTERNAL FUNCTION ! 3745: * ! 3746: * SYSEX EXP E,1 DEFINE EXTERNAL ENTRY POINT ! 3747: * ! 3748: * SYSEX IS CALLED TO PASS CONTROL TO AN EXTERNAL FUNCTION ! 3749: * PREVIOUSLY LOADED WITH A CALL TO SYSLD. ! 3750: * ! 3751: * (XS) POINTER TO ARGUMENTS ON STACK ! 3752: * (XL) POINTER TO CONTROL BLOCK (EFBLK) ! 3753: * (WA) NUMBER OF ARGUMENTS ON STACK ! 3754: * JSR SYSEX CALL TO PASS CONTROL TO FUNCTION ! 3755: * PPM LOC RETURN HERE IF FUNCTION CALL FAILS ! 3756: * (XS) POPPED PAST ARGUMENTS ! 3757: * (XR) RESULT RETURNED ! 3758: * ! 3759: * THE ARGUMENTS ARE STORED ON THE STACK WITH ! 3760: * THE LAST ARGUMENT AT 0(XS). ON RETURN, XS ! 3761: * IS POPPED PAST THE ARGUMENTS. ! 3762: * ! 3763: * THE FORM OF THE ARGUMENTS AS PASSED IS THAT USED IN THE ! 3764: * SPITBOL TRANSLATOR (SEE DEFINITIONS AND DATA STRUCTURES ! 3765: * SECTION). THE CONTROL BLOCK FORMAT IS ALSO DESCRIBED ! 3766: * (UNDER EFBLK) IN THIS SECTION. ! 3767: * ! 3768: * THERE ARE TWO WAYS OF RETURNING A RESULT. ! 3769: * ! 3770: * 1) RETURN A POINTER TO A BLOCK IN DYNAMIC STORAGE. THIS ! 3771: * BLOCK MUST BE IN EXACTLY CORRECT FORMAT, INCLUDING ! 3772: * THE FIRST WORD. ONLY FUNCTIONS WRITTEN WITH INTIMATE ! 3773: * KNOWLEDGE OF THE SYSTEM WILL RETURN IN THIS WAY. ! 3774: * ! 3775: * 2) STRING, INTEGER AND REAL RESULTS MAY BE RETURNED BY ! 3776: * POINTING TO A PSEUDO-BLOCK OUTSIDE DYNAMIC MEMORY. ! 3777: * THIS BLOCK IS IN ICBLK, RCBLK OR SCBLK FORMAT EXCEPT ! 3778: * THAT THE FIRST WORD WILL BE OVERWRITTEN ! 3779: * BY A TYPE WORD ON RETURN AND SO NEED NOT ! 3780: * BE CORRECTLY SET. SUCH A RESULT IS ! 3781: * COPIED INTO MAIN STORAGE BEFORE PROCEEDING. ! 3782: * UNCONVERTED RESULTS MAY SIMILARLY BE RETURNED IN A ! 3783: * PSEUDO-BLOCK WHICH IS IN CORRECT FORMAT INCLUDING ! 3784: * TYPE WORD RECOGNISABLE BY GARBAGE COLLECTOR SINCE ! 3785: * BLOCK IS COPIED INTO DYNAMIC MEMORY. ! 3786: ! 3787: ! 3788: Page 84 S P I T B O L -- PROCEDURES SECTION ! 3789: ! 3790: * ! 3791: * SYSHS -- GIVE ACCESS TO HOST COMPUTER FEATURES ON ! 3792: * ! 3793: * SYSHS EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 3794: * ! 3795: * PROVIDES MEANS FOR IMPLEMENTING SPECIAL FEATURES ! 3796: * DIFFERENT HOST COMPUTERS. THE ONLY DEFINED ENTRIES ARE ! 3797: * (1) ALL ARGUMENTS ARE NULL IN WHICH CASE SYSHS RETURNS ! 3798: * AN SCBLK CONTAINING NAME OF COMPUTER, NAME OF ! 3799: * OPERATING SYSTEM AND NAME OF SITE SEPARATED BY COLONS. ! 3800: * (2) FIRST ARGUMENT IS 1 (AS AN INTEGER OR STRING) TO GET, ! 3801: * AS A STRING, THE JCL COMMAND LINE FOR THE SPITBOL RUN. ! 3802: * ALL ENTRY PARAMETERS ARE CONVERTED TO STRINGS BEFORE THE ! 3803: * CALL IS MADE. ! 3804: * THE RESULT RETURNED FROM ANY CALL IS A STRING IN THE FORM ! 3805: * OF AN SCBLK WITH A POINTER TO IT IN XL. A NULL STRING ! 3806: * MAY BE RETURNED BY POINTING TO AN SCBLK WITH LENGTH ! 3807: * FIELD ZERO. ! 3808: * SPITBOL COPIES THE STRING ON RETURN AND SUPPLIES THE ! 3809: * CORRECT VALUE FOR THE FIRST WORD. ! 3810: * RETURNS ARE PROVIDED TO PERMIT STATEMENT FAILURE OR ! 3811: * THE REPORTING OF ERRORS. ! 3812: * ! 3813: * (WA) ARGUMENT 1 SCBLK ! 3814: * (XL) ARGUMENT 2 SCBLK ! 3815: * (XR) ARGUMENT 3 SCBLK ! 3816: * (WB) 0 IF ALL ARGS ARE NULL ELSE NONZERO ! 3817: * JSR SYSHS CALL TO GET HOST INFORMATION ! 3818: * PPM FLOSI STATEMENT FAILURE RETURN ! 3819: * PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE ! 3820: * (XL) PTR TO SCBLK RESULT OF CALL ! 3821: * (XR,WA,WB) DESTROYED ! 3822: * ! 3823: * SYSID -- RETURN SYSTEM IDENTIFICATION ! 3824: * ! 3825: * SYSID EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 3826: * ! 3827: * THIS ROUTINE SHOULD RETURN STRINGS TO HEAD THE STANDARD ! 3828: * PRINTER OUTPUT. THE FIRST STRING WILL BE APPENDED TO ! 3829: * A HEADING LINE OF THE FORM ! 3830: * MACRO SPITBOL VERSION V.V ! 3831: * SUPPLIED BY SPITBOL ITSELF. V.V ARE DIGITS GIVING THE ! 3832: * MAJOR VERSION NUMBER AND GENERALLY AT LEAST A MINOR ! 3833: * VERSION NUMBER RELATING TO OSINT SHOULD BE SUPPLIED TO ! 3834: * GIVE SAY ! 3835: * MACRO SPITBOL VERSION V.V(M.M) ! 3836: * THE SECOND STRING SHOULD IDENTIFY AT LEAST THE MACHINE ! 3837: * AND OPERATING SYSTEM. PREFERABLY IT SHOULD INCLUDE ! 3838: * THE DATE AND TIME OF THE RUN. ! 3839: * OPTIONALLY THE STRINGS MAY INCLUDE SITE NAME OF THE ! 3840: * THE IMPLEMENTOR AND/OR MACHINE ON WHICH RUN TAKES PLACE, ! 3841: * UNIQUE SITE OR COPY NUMBER AND OTHER INFORMATION AS ! 3842: * APPROPRIATE WITHOUT MAKING IT SO LONG AS TO BE A ! 3843: * NUISANCE TO USERS. ! 3844: * ! 3845: * JSR SYSID CALL FOR SYSTEM IDENTIFICATION ! 3846: * (XR) SCBLK PTR FOR ADDITION TO HEADER ! 3847: * (XL) SCBLK PTR FOR SECOND HEADER ! 3848: ! 3849: ! 3850: Page 85 S P I T B O L -- PROCEDURES SECTION ! 3851: ! 3852: * ! 3853: * SYSIL -- GET INPUT RECORD LENGTH ! 3854: * ! 3855: * SYSIL EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 3856: * ! 3857: * SYSIL IS USED TO GET THE LENGTH OF THE NEXT INPUT RECORD ! 3858: * FROM A FILE PREVIOUSLY INPUT ASSOCIATED WITH A SYSIO ! 3859: * CALL. THE LENGTH RETURNED IS USED TO ESTABLISH A BUFFER ! 3860: * FOR A SUBSEQUENT SYSIN CALL. ! 3861: * ! 3862: * (WA) IOTAG FROM INITIAL SYSIO CALL ! 3863: * JSR SYSIL CALL TO GET RECORD LENGTH ! 3864: * (WA) LENGTH ! 3865: * ! 3866: * NO HARM IS DONE IF THE VALUE RETURNED IS TOO LONG SINCE ! 3867: * UNUSED SPACE WILL BE RECLAIMED AFTER THE SYSIN CALL. ! 3868: * SYSIL MUST NEVER REQUEST A NULL (ZERO LENGTH) BUFFER. ! 3869: * ! 3870: * SYSIN -- READ INPUT RECORD ! 3871: * ! 3872: * SYSIN EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 3873: * ! 3874: * SYSIN IS USED TO READ A RECORD FROM THE FILE WHICH WAS ! 3875: * REFERENCED IN A PRIOR CALL TO SYSIL (I.E. THESE CALLS ! 3876: * ALWAYS OCCUR IN PAIRS). THE BUFFER PROVIDED IS AN ! 3877: * SCBLK FOR A STRING OF LENGTH SET FROM THE SYSIL CALL. ! 3878: * IF THE ACTUAL LENGTH READ IS LESS THAN THIS, THE LENGTH ! 3879: * FIELD OF THE SCBLK MUST BE MODIFIED BEFORE RETURNING ! 3880: * UNLESS BUFFER IS RIGHT PADDED WITH BLANKS. ! 3881: * IT IS ALSO PERMISSIBLE TO TAKE EITHER OF THE ALTERNATIVE ! 3882: * RETURNS AFTER SCBLK LENGTH HAS BEEN MODIFIED. ! 3883: * THE FLOSI RETURN SHOULD BE TAKEN WHEN PHYSICAL END OF ! 3884: * FILE OCCURS. ! 3885: * SYSIN SHOULD BE PREPARED TO MAKE REPEATED ENDFILE RETURNS ! 3886: * BUT IN THE INTERESTS OF EFFICIENCY, IMPLEMENTORS ! 3887: * MAY CHOOSE TO LIMIT THE NUMBER OF SUCH RETURNS. ! 3888: * SEE SYSIO FOR ACCOUNT OF IOTAG. ! 3889: * ! 3890: * (XR) POINTER TO BUFFER (SCBLK PTR) ! 3891: * (WA) IOTAG FROM INITIAL SYSIO CALL ! 3892: * (WC) LENGTH OF BUFFER IN CHARACTERS ! 3893: * JSR SYSIN CALL TO READ RECORD ! 3894: * PPM FLOSI STATEMENT FAILURE RETURN (ENDFILE) ! 3895: * PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE ! 3896: * (WA,WC) DESTROYED ! 3897: ! 3898: ! 3899: Page 86 S P I T B O L -- PROCEDURES SECTION ! 3900: ! 3901: * ! 3902: * SYSIO -- INPUT/OUTPUT FILE ASSOCIATION ! 3903: * ! 3904: * SYSIO EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 3905: * ! 3906: * SYSIO IS CALLED IN RESPONSE TO A SPITBOL INPUT() OR ! 3907: * OUTPUT() CALL. ! 3908: * THE FIRST ARGUMENT TO SUCH A CALL IS THE NAME OF A ! 3909: * SPITBOL VARIABLE WHICH IS NOT PASSED TO THIS ROUTINE. ! 3910: * THE SECOND ARGUMENT OF THE CALL WILL BE REFERRED TO FOR ! 3911: * CONVENIENCE AS THE FILETAG. IT IDENTIFIES IN SOME WAY ! 3912: * APPROPRIATE TO THE HOST, THE NAME OF THE FILE TO BE ! 3913: * OPENED. SPITBOL RECOGNISES THREE FORMS OF FILETAG, ! 3914: * (1) A NON-NUMERIC STRING IN WHICH CASE WC ON ENTRY WILL ! 3915: * CONTAIN ZERO ! 3916: * (2) AN INTEGER VALUE OR A STRING REPRESENTING AN INTEGER, ! 3917: * IN WHICH CASE WC ON ENTRY HOLDS THIS NUMERIC VALUE. ! 3918: * IN BOTH CASES, XL WILL CONTAIN A POINTER TO AN SCBLK ! 3919: * GIVING THE FILETAG AS A STRING ON ENTRY TO SYSIO. ! 3920: * (3) ONE OF THE NAMES, .INPUT, .OUTPUT, .TERMINAL ! 3921: * FOR ASSOCIATING THE FIRST ARGUMENT NAME TO THE ! 3922: * RELEVANT STANDARD FILE IN WHICH CASE SYSIO IS ! 3923: * NOT CALLED. ! 3924: * THE THIRD ARGUMENT OF THE CALL WILL BE CALLED THE ! 3925: * FILEPROPS. IT IS AN OPTIONAL STRING WHICH DETAILS FILE ! 3926: * PROPERTIES OR CHARACTERISTICS RELEVANT TO THE HOST ! 3927: * OPERATING SYSTEM. IT MAY INCLUDE INFORMATION ON RECORD ! 3928: * SIZE, RECORD TYPE, PAPER FEED CONTROL CHARACTERS, ACCESS ! 3929: * MODE, CHARACTER SET ETC. SUCH INFORMATION IS VERY HOST ! 3930: * DEPENDENT SO THE FORMAT IS NOT PRESCRIBED. ! 3931: * SYSIO MUST PARSE THE FILEPROPS ARGUMENT IF THE FEATURE ! 3932: * IS SUPPORTED. ! 3933: * ! 3934: * SYSIO SHOULD ATTEMPT TO OPEN THE FILE AS REQUESTED, AND ! 3935: * SHOULD MAKE THE NORMAL RETURN IF SUCCESSFUL. ! 3936: * THE FLOSI RETURN SHOULD BE TAKEN FOR FILE NOT FOUND ON ! 3937: * INPUT() CALL, OR FOR AN OUTPUT() CALL FAILURE ON ACCOUNT ! 3938: * OF WRITE PROTECTION VIOLATION OR SIMILAR EVENTS. ! 3939: * THIS ALLOWS THE USER TO ATTEMPT RECOVERY. ! 3940: * THIS RETURN MAY BE RELEVANT FOR VARIOUS HOST ! 3941: * SPECIFIC EVENTS AT THE DISCRETION OF THE IMPLEMENTOR. ! 3942: * THE EROSI RETURN SHOULD BE USED TO REPORT THE NATURE OF ! 3943: * OTHER ERRORS. ! 3944: * IT IS THE TASK OF SYSIO TO FIND AND ADMINISTER ANY ! 3945: * BUFFER SPACE, TABLE ENTRIES OR OTHER INFORMATION NEEDED ! 3946: * FOR FILE INPUT/OUTPUT. SUCH SPACE MUST BE FOUND OUTSIDE ! 3947: * THE AREA ALLOCATED TO SPITBOL FOR STATIC AND DYNAMIC ! 3948: * STORE (UNLESS THE IMPLEMENTOR HAS INTIMATE KNOWLEDGE OF ! 3949: * THE INNER WORKINGS OF SPITBOL). ! 3950: * CORRELATION BETWEEN THE SYSIO CALL WHICH OPENS A FILE AND ! 3951: * THE SYS-- CALLS USED TO READ, WRITE AND MANIPULATE IT IS ! 3952: * BASED ON A ONE WORD VALUE REFERRED TO AS THE IOTAG. ! 3953: * THIS MUST BE PUT IN WA BEFORE MAKING A SUCCESSFUL RETURN ! 3954: * FROM SYSIO. ITS FORMAT IS ENTIRELY AT THE DISCRETION OF ! 3955: * IMPLEMENTORS WITH THE RESTRICTIONS (A) THAT IT MUST NOT ! 3956: * BE POSSIBLE FOR IT TO BE INTERPRETED AS AN ADDRESS IN ! 3957: * DYNAMIC MEMORY, SINCE THIS WILL CAUSE GARBAGE COLLECTION ! 3958: * ERRORS AND (B) IT MUST BE NON-ZERO. ! 3959: ! 3960: ! 3961: Page 87 S P I T B O L -- PROCEDURES SECTION ! 3962: ! 3963: * ! 3964: * SYSIO (CONTINUED) ! 3965: * ! 3966: * DEPENDING ON THE HOST, IT MAY OR MAY NOT BE FEASIBLE ! 3967: * TO OPEN NEW FILES CONNECTED TO, AND OR CHANGE THE ! 3968: * PROPERTIES OF THE STANDARD INPUT AND OUTPUT FILES. ! 3969: * IOTAG IS PASSED AS A PARAMETER IN ALL SYS-- CALLS ! 3970: * RELATING TO ANY FILE EXCEPT THOSE FOR THE STANDARD ! 3971: * INPUT/OUTPUT FILES WHERE ANY REQUIRED IOTAG FIELD IS ! 3972: * ALWAYS PASSED AS ZERO. NOTE THAT SPITBOL ASSUMES SYSRD ! 3973: * AND SYSPR STANDARD FILES ARE ALREADY OPEN WHEN OSINT ! 3974: * FIRST PASSES CONTROL TO IT - NO CALLS OF SYSIO ARE MADE ! 3975: * FOR INITIAL OPENING OF THESE FILES. ! 3976: * THE FOLLOWING CONVENTIONS ARE ADOPTED. ! 3977: * (1) IN ANY CALL, FILETAG ARG IS ALWAYS PRESENT. ! 3978: * IN ANY CALL, FILEPROPS MAY OR MAY NOT BE PRESENT. ! 3979: * (2) IF ANY EARLIER SYSIO CALL HAS BEEN MADE WITH A ! 3980: * PARTICULAR FILETAG THEN THE RELEVANT IOTAG IS PASSED ! 3981: * IN AS A PARAMETER. ! 3982: * (3) SPITBOL DOES NOT PRECLUDE ATTEMPTS TO OPEN A ! 3983: * FILE IDENTIFIED BY A PARTICULAR FILETAG FOR BOTH ! 3984: * INPUT AND OUTPUT BY SUCCESSIVE SYSIO CALLS. IT IS ! 3985: * FOR SYSIO TO ACCEPT OR REJECT SUCH CALLS, ALL OF ! 3986: * WHICH, SUBSEQUENT TO THE FIRST, WILL PASS THE ! 3987: * IOTAG AS A PARAMETER. ! 3988: * (4) PARAMETER WB HOLDS VALUES AS FOLLOWS - ! 3989: * 0 INPUT CALL FOR STANDARD INPUT (SYSRD) FILE ! 3990: * 1 INPUT CALL FOR ANY OTHER FILE ! 3991: * 2 OUTPUT CALL FOR STANDARD OUTPUT (SYSPR) FILE ! 3992: * 3 OUTPUT CALL FOR ANY OTHER FILE. ! 3993: * ! 3994: * (XL) FILETAG SCBLK POINTER ! 3995: * (XR) FILEPROPS SCBLK POINTER OR ZERO ! 3996: * (WA) IOTAG FROM PRIOR CALL OR ZERO ! 3997: * (WB) 0,1,2,3 FOR ASSOCIATION TYPE ! 3998: * (WC) POSSIBLY INT VALUE OF FILETAG OR 0 ! 3999: * JSR SYSIO CALL TO ASSOCIATE FILE ! 4000: * PPM FLOSI STATEMENT FAILURE RETURN ! 4001: * PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE ! 4002: * (WA) IOTAG ! 4003: * (XL,XR,WB,WC) DESTROYED ! 4004: ! 4005: ! 4006: Page 88 S P I T B O L -- PROCEDURES SECTION ! 4007: ! 4008: * THIS INTERFACE MAY BE SUMMARIZED BY THE FOLLOWING TABLE. ! 4009: * IT IS ASSUMED THAT THERE IS EXPLICIT OR IMPLICIT ! 4010: * NUMBERING OF FILE PARAMETERS APPEARING IN THE COMMAND ! 4011: * LINE USED TO INITIATE A SPITBOL RUN. IF WC CONTAINS A ! 4012: * NUMERIC ARG, /JCL $WC/ IMPLIES THE MATCHING FILE ! 4013: * PARAMETER FROM THE COMMAND LINE. ! 4014: * ! 4015: * --------------------------------------------------------- ! 4016: * I WA == 0 (FIRST CALL) I ! 4017: * --------------------------------------------------------- ! 4018: * I WC == 0 (ALPHA FILETAG) I WC /= 0 (NUMERIC FILETAG) I ! 4019: * I---------------------------I---------------------------I ! 4020: * I XR == 0 I XR /= 0 I XR == 0 I XR /= 0 I ! 4021: * I-------------I-------------I-------------I-------------I ! 4022: * I I I I I ! 4023: * I OPEN FILE, I OPEN FILE I OPEN FILE I OPEN FILE I ! 4024: * I RETURN IOTAGI WITH PROPS, I JCL $WC, I JCL $WC I ! 4025: * I I RETURN IOTAGI RETURN IOTAGI WITH PROPS,I ! 4026: * I I I I RETURN IOTAGI ! 4027: * I I I I I ! 4028: * --------------------------------------------------------- ! 4029: * ! 4030: * --------------------------------------------------------- ! 4031: * I WA /= 0 (SUBSEQUENT CALL) I ! 4032: * --------------------------------------------------------- ! 4033: * I WC == 0 (ALPHA FILETAG) I WC /= 0 (NUMERIC FILETAG) I ! 4034: * I---------------------------I---------------------------I ! 4035: * I XR == 0 I XR /= 0 I XR == 0 I XR /= 0 I ! 4036: * I-------------I-------------I-------------I-------------I ! 4037: * I I I I I ! 4038: * I CLOSE FILE, I MODIFY FILE I CLOSE FILE I MODIFY FILE I ! 4039: * IRE-OPEN FILE,I PROPS, I JCL $WC, I JCL $WC I ! 4040: * IRETURN IOTAG I IRE-OPEN FILE,I PROPS, I ! 4041: * I I IRETURN IOTAG I I ! 4042: * I I (*)I I I ! 4043: * --------------------------------------------------------- ! 4044: * ! 4045: * INPUT ASSOCIATION FOR WB == 1 ! 4046: * OUTPUT ASSOCIATION FOR WB == 3 ! 4047: * ! 4048: * IF WB == 0 OR WB == 2, THEN THE FILETAG IS .INPUT OR ! 4049: * .OUTPUT RESPECTIVELY. ! 4050: * OPTION (*) IS THE ONLY VALID OPTION IN GENERAL FOR ! 4051: * THESE CASES BUT OTHERS ARE NOT EXCLUDED IF AN ! 4052: * IMPLEMENTOR SEES SOME USE FOR THEM. ! 4053: ! 4054: ! 4055: Page 89 S P I T B O L -- PROCEDURES SECTION ! 4056: ! 4057: * ! 4058: * SYSLD -- LOAD EXTERNAL FUNCTION ! 4059: * ! 4060: * SYSLD EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 4061: * ! 4062: * SYSLD IS CALLED IN RESPONSE TO THE USE OF THE SNOBOL4 ! 4063: * LOAD FUNCTION. THE NAMED FUNCTION IS LOADED (WHATEVER ! 4064: * THIS MEANS), AND A POINTER IS RETURNED. THE POINTER WILL ! 4065: * BE USED ON SUBSEQUENT CALLS TO THE FUNCTION SEE (SYSEX). ! 4066: * THE FLOSI RETURN MAY BE TAKEN ON FAILURE TO FIND THE ! 4067: * FUNCTION AND THE EROSI RETURN TO REPORT ERRORS. ! 4068: * ! 4069: * (XR) POINTER TO FUNCTION NAME (SCBLK) ! 4070: * (XL) POINTER TO LIBRARY NAME (SCBLK) ! 4071: * JSR SYSLD CALL TO LOAD FUNCTION ! 4072: * PPM FLOSI STATEMENT FAILURE RETURN ! 4073: * PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE ! 4074: * (XR) POINTER TO LOADED CODE ! 4075: * ! 4076: * THE SIGNIFICANCE OF THE POINTER RETURNED IS UP TO THE ! 4077: * SYSTEM INTERFACE ROUTINE. THE ONLY RESTRICTION IS THAT ! 4078: * IF THE POINTER IS WITHIN DYNAMIC STORAGE, IT MUST BE ! 4079: * A PROPER BLOCK POINTER. ! 4080: * ! 4081: * SYSMM -- GET MORE MEMORY ! 4082: * ! 4083: * SYSMM EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 4084: * ! 4085: * SYSMM IS CALLED IN AN ATTEMPT TO ALLOCATE MORE DYNAMIC ! 4086: * MEMORY. THIS MEMORY MUST BE ALLOCATED CONTIGUOUSLY WITH ! 4087: * THE CURRENT DYNAMIC DATA AREA. ! 4088: * ! 4089: * THE AMOUNT ALLOCATED IS UP TO THE SYSTEM TO DECIDE. ANY ! 4090: * VALUE IS ACCEPTABLE INCLUDING ZERO IF ALLOCATION IS ! 4091: * IMPOSSIBLE. ! 4092: * ! 4093: * JSR SYSMM CALL TO GET MORE MEMORY ! 4094: * (XR) NUMBER OF ADDITIONAL WORDS OBTAINED ! 4095: ! 4096: ! 4097: Page 90 S P I T B O L -- PROCEDURES SECTION ! 4098: ! 4099: * ! 4100: * SYSMX -- SUPPLY MXLEN ! 4101: * ! 4102: * SYSMX EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 4103: * ! 4104: * BECAUSE OF THE METHOD OF GARBAGE COLLECTION, NO SPITBOL ! 4105: * OBJECT IS ALLOWED TO OCCUPY MORE BAUS OF MEMORY THAN ! 4106: * THE INTEGER GIVING THE LOWEST ADDRESS OF DYNAMIC ! 4107: * (GARBAGE COLLECTABLE) MEMORY. MXLEN IS THE NAME USED TO ! 4108: * REFER TO THIS MAXIMUM LENGTH OF AN OBJECT AND FOR MOST ! 4109: * USERS OF MOST IMPLEMENTATIONS, PROVIDED DYNAMIC MEMORY ! 4110: * STARTS AT AN ADDRESS OF AT LEAST A FEW THOUSAND WORDS, ! 4111: * THERE IS NO PROBLEM. ! 4112: * IF THE DEFAULT STARTING ADDRESS IS LESS THAN SAY 10000 OR ! 4113: * 20000, THEN A LOAD TIME OPTION SHOULD BE PROVIDED WHERE A ! 4114: * USER CAN REQUEST THAT HE BE ABLE TO CREATE LARGER ! 4115: * OBJECTS. THIS ROUTINE INFORMS SPITBOL OF THIS REQUEST IF ! 4116: * ANY. THE VALUE RETURNED IS EITHER AN INTEGER ! 4117: * REPRESENTING THE DESIRED VALUE OF MXLEN (AND HENCE THE ! 4118: * MINIMUM DYNAMIC STORE ADDRESS WHICH MAY RESULT IN ! 4119: * NON-USE OF SOME STORE) OR ZERO IF A DEFAULT IS ACCEPTABLE ! 4120: * IN WHICH MXLEN IS SET TO THE LOWEST ADDRESS ALLOCATED ! 4121: * TO DYNAMIC STORE BEFORE COMPILATION STARTS. ! 4122: * IF A NON-ZERO VALUE IS RETURNED, THIS IS USED FOR KEYWORD ! 4123: * MAXLNGTH. OTHERWISE THE INITIAL LOW ADDRESS OF DYNAMIC ! 4124: * MEMORY IS USED FOR THIS KEYWORD. ! 4125: * ! 4126: * JSR SYSMX CALL TO GET MXLEN ! 4127: * (WA) EITHER MXLEN OR 0 FOR DEFAULT ! 4128: ! 4129: ! 4130: Page 91 S P I T B O L -- PROCEDURES SECTION ! 4131: ! 4132: * ! 4133: * SYSOU -- OUTPUT RECORD ! 4134: * ! 4135: * SYSOU EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 4136: * ! 4137: * SYSOU IS USED TO WRITE A RECORD TO A FILE PREVIOUSLY ! 4138: * ASSOCIATED WITH A SYSIO CALL. ! 4139: * THE FLOSI RETURN IS TAKEN IF ANY MAXIMUM CAPACITY OF THE ! 4140: * FILE IS EXCEEDED. ! 4141: * SYSOU SHOULD BE PREPARED TO MAKE REPEATED FLOSI RETURNS ! 4142: * BUT IN THE INTERESTS OF EFFICIENCY, IMPLEMENTORS ! 4143: * MAY CHOOSE TO LIMIT THE NUMBER OF SUCH RETURNS. ! 4144: * SEE SYSIO FOR ACCOUNT OF IOTAG. ! 4145: * ! 4146: * (XR) RECORD TO BE WRITTEN (SCBLK) ! 4147: * (WA) IOTAG FROM INITIAL SYSIO CALL ! 4148: * (WC) NUMBER OF CHARACTERS TO WRITE ! 4149: * JSR SYSOU CALL TO OUTPUT RECORD ! 4150: * PPM FLOSI STATEMENT FAILURE RETURN ! 4151: * PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE ! 4152: * (WA,WC) DESTROYED ! 4153: * ! 4154: * SYSPI -- PRINT ON INTERACTIVE TERMINAL ! 4155: * ! 4156: * SYSPI EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 4157: * ! 4158: * IF SPITBOL IS RUN FROM AN ONLINE TERMINAL, OSINT CAN ! 4159: * REQUEST THAT MESSAGES SUCH AS COPIES OF COMPILATION ! 4160: * ERRORS BE SENT TO THE TERMINAL (SEE SYSPP). IF RELEVANT ! 4161: * REPLY WAS MADE BY SYSPP THEN SYSPI IS CALLED TO SEND SUCH ! 4162: * MESSAGES TO THE TERMINAL. ! 4163: * SYSPI IS ALSO USED FOR SENDING OUTPUT TO THE TERMINAL ! 4164: * THROUGH THE SPECIAL VARIABLE NAME, TERMINAL. ! 4165: * THE LINE LENGTH WILL NOT EXCEED THAT HELD IN XL ON ! 4166: * RETURN FROM SYSPP CALL AND MAY BE ZERO IN WHICH CASE A ! 4167: * BLANK LINE IS TO BE PRINTED. ! 4168: * IT IS POSSIBLE TO DIRECT STANDARD LISTING AND OTHER ! 4169: * OUTPUT TO THIS ROUTINE BY SELECTING OPTIONS IN SYSPP. ! 4170: * ! 4171: * (XR) PTR TO LINE BUFFER (SCBLK) ! 4172: * (WA) LINE LENGTH ! 4173: * (WC) NUMBER OF CHARACTERS TO WRITE ! 4174: * JSR SYSPI CALL TO PRINT LINE ! 4175: * PPM FLOSI STATEMENT FAILURE RETURN ! 4176: * PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE ! 4177: * (WA,WC) DESTROYED ! 4178: ! 4179: ! 4180: Page 92 S P I T B O L -- PROCEDURES SECTION ! 4181: ! 4182: * ! 4183: * SYSPP -- OBTAIN PRINT PARAMETERS ! 4184: * ! 4185: * SYSPP -- OBTAIN PRINT PARAMETERS ! 4186: * ! 4187: * SYSPP EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 4188: * ! 4189: * SYSPP IS CALLED ONCE DURING COMPILATION TO OBTAIN ! 4190: * PARAMETERS REQUIRED FOR CORRECT PRINTED OUTPUT FORMAT ! 4191: * AND TO SELECT OTHER OPTIONS. IT MAY ALSO BE CALLED AGAIN ! 4192: * AFTER SYSXI WHEN A LOAD MODULE IS RESUMED. IN THIS ! 4193: * CASE VALUES RETURNED IN XL, WA MAY BE LESS THAN OR EQUAL ! 4194: * TO THOSE RETURNED IN INITIAL CALL BUT MAY NOT BE ! 4195: * GREATER SINCE BUFFERS HAVE BEEN SET UP IN THE CORE IMAGE. ! 4196: * OSINT MUST ENSURE THAT NON-CONFLICTING OPTIONS ARE ! 4197: * SELECTED. ! 4198: * THE INFORMATION RETURNED IS - ! 4199: * 1. LINE LENGTH IN CHARS FOR OUTPUT TO TERMINAL. IF ZERO ! 4200: * IS RETURNED IT IS ASSUMED THERE IS NO ONLINE TERML. ! 4201: * IF A TERMINAL IS AVAILABLE ERROR MESSAGES WILL BE ! 4202: * SENT TO IT AS WELL AS TO THE LISTING FILE. ! 4203: * 2. LINE LENGTH IN CHARS FOR STANDARD PRINT FILE. ! 4204: * IF ZERO IS RETURNED IT IS ASSUMED THERE IS NO ! 4205: * STANDARD PRINT FILE. ! 4206: * IN THIS CASE SPITBOL MAY REDUCE LISTING OVERHEADS. ! 4207: * IF THIS OPTION IS SELECTED, SPECIFICATION OF OTHER ! 4208: * OPTIONS RELATING TO FILE CHARACTERISTICS IS ! 4209: * REDUNDANT (UNLESS THE OPTION TO SELECT TERMINAL ! 4210: * AS STANDARD OUTPUT FILE IS TAKEN). ! 4211: * IT IS NOT ADVISABLE TO RETURN BOTH XL AND WA AS ZERO ! 4212: * SINCE ERRORS CANNOT THEN BE REPORTED. ! 4213: * 3. NO OF LINES/PAGE. 0 IS PREFERABLE FOR A NON-PAGED ! 4214: * DEVICE (E.G. ONLINE TERMINAL) IN WHICH CASE LISTING ! 4215: * PAGE THROWS ARE SUPPRESSED. ! 4216: * 4. STANDARD INPUT MAY BE READ FROM THE TERMINAL, ! 4217: * IN WHICH CASE SYSRI WILL BE CALLED INSTEAD OF SYSRD. ! 4218: * 5. STANDARD OUTPUT MAY BE SENT TO TERMINAL, IN WHICH ! 4219: * CASE SYSPI WILL BE CALLED INSTEAD OF SYSPR. ! 4220: * 6. AN INITIAL -NOLIST OPTION WHICH SUPPRESSES LISTING ! 4221: * UNLESS THE PROGRAM CONTAINS AN EXPLICIT -LIST. ! 4222: * 7. OPTION TO SUPPRESS LISTING OF COMPILATION STATS. ! 4223: * 8. OPTION TO SUPPRESS LISTING OF EXECUTION STATS. ! 4224: * THESE OPTIONS ARE USEFUL FOR ESTABLISHED PROGRAMS. ! 4225: * 9. OPTION TO SUPPRESS EXECUTION AS THOUGH A ! 4226: * -NOEXECUTE CARD WERE SUPPLIED. ! 4227: ! 4228: ! 4229: Page 93 S P I T B O L -- PROCEDURES SECTION ! 4230: ! 4231: * ! 4232: * SYSPP (CONTINUED) ! 4233: * ! 4234: * 10. BY DEFAULT, IF AN ONLINE TERMINAL IS AVAILABLE, ! 4235: * ERROR MESSAGE COPIES ARE SENT TO IT AS WELL AS TO ! 4236: * THE REGULAR OUTPUT FILE. THIS OPTION SUPPRESSES THE ! 4237: * DEFAULT. ! 4238: * 11. OPTION TO SUPPRESS SYSID LISTING HEADER. ! 4239: * 12. TWO BITS ARE ALLOCATED TO SELECT LISTING OPTION. ! 4240: * /00/ SIGNIFIES COMPACT LISTING SUITABLE FOR TERML. ! 4241: * A FEW LINE FEEDS PRECEDE THE PRINTING OF EACH ! 4242: * OF -- LISTING, COMPILATION STATISTICS, EXECUTION ! 4243: * OUTPUT, EXECUTION STATISTICS, DUMP OUTPUT. ! 4244: * /01/ SIGNIFIES STANDARD LISTING OPTION IN WHICH ! 4245: * SOURCE LISTINGS INCLUDE SOME PAGE EJECTS BUT ! 4246: * NOT PRECEDING ALL ITEMS LISTED ABOVE. ! 4247: * /10/ MEANS AN EXTENDED LISTING WITH FULL SET OF ! 4248: * PAGE EJECTS. ! 4249: * /11/ IS REDUNDANT AND ACHIEVES SAME EFFECT AS /10/. ! 4250: * ! 4251: * JSR SYSPP CALL TO GET PRINT PARAMETERS ! 4252: * (XL) 1. TERMINAL LINE LENGTH ! 4253: * (WA) 2. PRINT LINE LENGTH IN CHARS ! 4254: * (WB) 3. NUMBER OF LINES/PAGE ! 4255: * (WC) BITS VALUE ...JIHGFEDCBA WHERE ! 4256: * 4. A = 1 STD INPUT FROM TERMINAL ! 4257: * 5. B = 1 STD OUTPUT TO TERMINAL ! 4258: * 6. C = 1 TO SUPPRESS LISTING ! 4259: * 7. D = 1 TO SUPPRESS COMPILN. STATS ! 4260: * 8. E = 1 TO SUPPRESS EXECN. STATS ! 4261: * 9. F = 1 TO SUPPRESS EXECUTION ! 4262: * 10. G = 1 TO SUPPRESS ERRORS TO TERML ! 4263: * 11. H = 1 TO SUPPRESS SYSID HEADER ! 4264: * 12. JI= 00, 01, 10 FOR LISTING OPTIONS ! 4265: ! 4266: ! 4267: Page 94 S P I T B O L -- PROCEDURES SECTION ! 4268: ! 4269: * ! 4270: * SYSPR -- PRINT LINE ON STANDARD OUTPUT FILE ! 4271: * ! 4272: * SYSPR EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 4273: * ! 4274: * SYSPR IS USED TO PRINT A SINGLE LINE ON THE STANDARD ! 4275: * OUTPUT FILE. ! 4276: * ! 4277: * (XR) POINTER TO LINE BUFFER (SCBLK) ! 4278: * (WA) LINE LENGTH ! 4279: * (WC) NUMBER OF CHARACTERS TO WRITE ! 4280: * JSR SYSPR CALL TO PRINT LINE ! 4281: * PPM FLOSI STATEMENT FAILURE RETURN ! 4282: * PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE ! 4283: * (WA,WC) DESTROYED ! 4284: * ! 4285: * THE BUFFER POINTED TO IS THE LENGTH OBTAINED FROM THE ! 4286: * SYSPP CALL AND IS FILLED OUT WITH TRAILING BLANKS. THE ! 4287: * VALUE IN WC IS THE ACTUAL LINE LENGTH WHICH MAY BE LESS ! 4288: * THAN THE MAXIMUM LINE LENGTH POSSIBLE. ! 4289: * NULL LINES (WC = 0) ARE POSSIBLE IN WHICH CASE A BLANK ! 4290: * LINE IS TO BE PRINTED. ! 4291: * IT IS POSSIBLE TO OPT FOR HAVING STANDARD OUTPUT DIRECTED ! 4292: * TO USE SYSPI INSTEAD OF SYSPR BY MAKING A PARTICULAR ! 4293: * REPLY IN SYSPP, IN WHICH CASE THIS ROUTINE IS NOT USED. ! 4294: * ! 4295: * THE FLOSI RETURN IS USED WITH SYSTEMS WHICH LIMIT THE ! 4296: * AMOUNT OF PRINTED OUTPUT TO SIGNAL THAT THE LIMIT HAS ! 4297: * BEEN REACHED. IF POSSIBLE PRINTING SHOULD BE PERMITTED ! 4298: * AFTER THIS CONDITION HAS BEEN SIGNALLED ONCE TO ! 4299: * ALLOW FOR DUMP AND OTHER DIAGNOSTIC INFORMATION. ! 4300: * ASSUMING THIS TO BE POSSIBLE, SPITBOL MAY MAKE MORE SYSPR ! 4301: * CALLS. IF SUCH CALLS ARE UNACCEPTABLE, SYSPR MUST TAKE ! 4302: * APPROPRIATE ACTION (E.G. IGNORE THE CALL, TAKE THE EROSI ! 4303: * RETURN, CLOSE THE OUTPUT FILE, TERMINATE EXECUTION WITH ! 4304: * A DIAGNOSTIC). ! 4305: ! 4306: ! 4307: Page 95 S P I T B O L -- PROCEDURES SECTION ! 4308: ! 4309: * ! 4310: * SYSRD -- READ RECORD FROM STANDARD INPUT FILE ! 4311: * ! 4312: * SYSRD EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 4313: * ! 4314: * SYSRD IS USED TO READ A RECORD FROM THE STANDARD INPUT ! 4315: * FILE. THE BUFFER PROVIDED IS AN SCBLK FOR A STRING THE ! 4316: * LENGTH OF WHICH IN CHARACTERS IS GIVEN IN WC, THIS ! 4317: * CORRESPONDING TO THE MAXIMUM LENGTH OF STRING WHICH ! 4318: * SPITBOL IS PREPARED TO RECEIVE. ! 4319: * IT CORRESPONDS TO XXX IN THE MOST RECENT -INXXX CARD ! 4320: * (DEFAULT 160). ! 4321: * IF FEWER THAN (WC) CHARACTERS ARE READ, THE LENGTH ! 4322: * FIELD OF THE SCBLK MUST BE ADJUSTED BEFORE RETURNING ! 4323: * UNLESS THE BUFFER IS RIGHT PADDED WITH BLANKS. ! 4324: * IT IS ALSO PERMISSIBLE TO TAKE THE ALTERNATIVE RETURNS ! 4325: * AFTER SUCH AN ADJUSTMENT HAS BEEN MADE. ! 4326: * SYSRD SHOULD BE PREPARED TO MAKE REPEATED ENDFILE RETURNS ! 4327: * BUT IN THE INTERESTS OF EFFICIENCY, IMPLEMENTORS ! 4328: * MAY CHOOSE TO LIMIT THE NUMBER OF SUCH RETURNS. ! 4329: * IT IS POSSIBLE TO OPT FOR READING STANDARD INPUT ! 4330: * FROM SYSRI INSTEAD OF SYSRD BY MAKING A PARTICULAR ! 4331: * REPLY IN SYSPP, IN WHICH CASE THIS ROUTINE IS NOT USED. ! 4332: * ! 4333: * (XR) POINTER TO BUFFER (SCBLK PTR) ! 4334: * (WC) LENGTH OF BUFFER IN CHARACTERS ! 4335: * JSR SYSRD CALL TO READ LINE ! 4336: * PPM FLOSI STATEMENT FAILURE RETURN (ENDFILE) ! 4337: * PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE ! 4338: * (WC) DESTROYED ! 4339: * ! 4340: * SYSRI -- READ RECORD FROM INTERACTIVE TERMINAL ! 4341: * ! 4342: * SYSRI EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 4343: * ! 4344: * READS A RECORD FROM AN ONLINE TERMINAL. ! 4345: * THE BUFFER PROVIDED IS OF LENGTH EQUAL TO THE VALUE ! 4346: * RETURNED IN XL BY SYSPP. SYSRI SHOULD REPLACE THE ! 4347: * COUNT IN THE SECOND WORD OF THE SCBLK BY THE ACTUAL ! 4348: * CHARACTER COUNT UNLESS THE BUFFER IS RIGHT ! 4349: * PADDED WITH BLANKS. ! 4350: * IT IS ALSO PERMISSIBLE TO TAKE THE ALTERNATIVE ! 4351: * RETURNS AFTER ADJUSTING THE COUNT. ! 4352: * THE END OF FILE FLOSI RETURN MAY BE USED IF THIS MAKES ! 4353: * SENSE ON THE TARGET MACHINE (E.G. IF THERE IS AN ! 4354: * EOF CHARACTER.) ! 4355: * ! 4356: * (XR) PTR TO CHAR BUFFER (SCBLK PTR) ! 4357: * (WC) LENGTH OF BUFFER IN CHARACTERS ! 4358: * JSR SYSRI CALL TO READ LINE FROM TERMINAL ! 4359: * PPM FLOSI STATEMENT FAILURE RETURN (ENDFILE) ! 4360: * PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE ! 4361: * (WC) DESTROYED ! 4362: ! 4363: ! 4364: Page 96 S P I T B O L -- PROCEDURES SECTION ! 4365: ! 4366: * ! 4367: * SYSST -- SET FILE POINTER ! 4368: * ! 4369: * SYSST EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 4370: * ! 4371: * SYSST IS CALLED TO CHANGE THE POSITION OF A FILE ! 4372: * POINTER. THIS IS ACCOMPLISHED IN A SYSTEM DEPENDENT ! 4373: * MANNER, AND THUS THE 2ND AND 3RD ARGUMENTS ARE PASSED ! 4374: * UNCONVERTED. ! 4375: * ! 4376: * (WA) IOTAG FROM INITIAL SYSIO CALL ! 4377: * (WB) 2ND ARGUMENT ! 4378: * (WC) 3RD ARGUMENT ! 4379: * JSR SYSST CALL TO SET FILE POINTER ! 4380: * PPM FLOSI FAIL RETURN ! 4381: * PPM EROSI ERROR RETURN ! 4382: * (WA,WB,WC) DESTROYED ! 4383: ! 4384: ! 4385: Page 97 S P I T B O L -- PROCEDURES SECTION ! 4386: ! 4387: * ! 4388: * SYSTM -- GET EXECUTION TIME SO FAR ! 4389: * ! 4390: * SYSTM EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 4391: * ! 4392: * SYSTM IS USED TO OBTAIN THE AMOUNT OF EXECUTION TIME ! 4393: * USED SO FAR SINCE SPITBOL WAS GIVEN CONTROL. THE UNITS ! 4394: * ARE DESCRIBED AS MILLISECONDS IN THE SPITBOL OUTPUT, BUT ! 4395: * THE EXACT MEANING IS SYSTEM DEPENDENT. ! 4396: * BY DEFINING .CTMD, THE DEFAULT UNITS CAN BE REPLACED BY ! 4397: * DECISECONDS. ! 4398: * WHERE POSSIBLE, THE VALUE SHOULD RELATE TO PROCESSOR ! 4399: * RATHER THAN CLOCK-ON-THE-WALL TIMING VALUES. ! 4400: * ! 4401: * JSR SYSTM CALL TO GET TIMER VALUE ! 4402: * (IA) TIME SO FAR IN MILLISECONDS ! 4403: * ! 4404: * SYSTT -- TRACE TOGGLE ! 4405: * ! 4406: * SYSTT EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 4407: * ! 4408: * CALLED BY SPITBOL FUNCTION TRACE() WITH NO ARGS TO ! 4409: * TOGGLE A SYSTEM TRACE SWITCH. THIS PERMITS TRACING OF ! 4410: * LABELS IN SPITBOL CODE TO BE TURNED ON OR OFF AND IS ! 4411: * INTENDED AS AN AID TO IMPLEMENTORS, NOT REGULAR USERS. ! 4412: * ! 4413: * JSR SYSTT CALL TO TOGGLE TRACE SWITCH ! 4414: * ! 4415: * SYSUL -- UNLOAD EXTERNAL FUNCTION ! 4416: * ! 4417: * SYSUL EXP E,0 DEFINE EXTERNAL ENTRY POINT ! 4418: * ! 4419: * SYSUL IS USED TO UNLOAD A FUNCTION PREVIOUSLY ! 4420: * LOADED WITH A CALL TO SYSLD. ! 4421: * ! 4422: * (XR) PTR TO CONTROL BLOCK (EFBLK) ! 4423: * JSR SYSUL CALL TO UNLOAD FUNCTION ! 4424: * ! 4425: * THE FUNCTION CANNOT BE CALLED FOLLOWING A SYSUL CALL ! 4426: * UNTIL ANOTHER SYSLD CALL IS MADE FOR THE SAME FUNCTION. ! 4427: * ! 4428: * THE EFBLK CONTAINS THE FUNCTION CODE POINTER AND ALSO A ! 4429: * POINTER TO THE VRBLK CONTAINING THE FUNCTION NAME (SEE ! 4430: * DEFINITIONS AND DATA STRUCTURES SECTION). ! 4431: ! 4432: ! 4433: Page 98 S P I T B O L -- PROCEDURES SECTION ! 4434: ! 4435: * ! 4436: * SYSXI -- EXIT TO PRODUCE LOAD MODULE ! 4437: * ! 4438: * SYSXI EXP E,2 DEFINE EXTERNAL ENTRY POINT ! 4439: * ! 4440: * WHEN SYSXI IS CALLED, XL CONTAINS EITHER A STRING POINTER ! 4441: * OR ZERO. IN THE FORMER CASE, THE STRING GIVES THE ! 4442: * CHARACTER NAME OF A PROGRAM. THE INTENTION IS THAT ! 4443: * SPITBOL EXECUTION SHOULD BE TERMINATED FORTHWITH AND ! 4444: * THE NAMED PROGRAM LOADED AND EXECUTED. NO RETURN FROM ! 4445: * SYSXI OCCURS IN THIS CASE. THIS TYPE OF CHAIN ! 4446: * EXECUTION IS VERY SYSTEM DEPENDENT AND IMPLEMENTORS MAY ! 4447: * CHOOSE TO OMIT IT OR FIND IT IMPOSSIBLE TO PROVIDE. ! 4448: * ! 4449: * IF (XL) IS ZERO,IA CONTAINS ONE OF THE FOLLOWING INTEGERS ! 4450: * ! 4451: * -1, -2, -3 ! 4452: * CREATE IF POSSIBLE A LOAD MODULE CONTAINING ONLY THE ! 4453: * IMPURE AREA OF MEMORY WHICH NEEDS TO BE LOADED WITH ! 4454: * A COMPATIBLE PURE SEGMENT FOR SUBSEQUENT EXECUTIONS. ! 4455: * VERSION NUMBERS TO CHECK COMPATIBILITY SHOULD BE ! 4456: * KEPT IN BOTH SEGMENTS AND CHECKED ON LOADING. ! 4457: * TO ASSIST WITH THIS CHECK, (XR) ON ENTRY IS A ! 4458: * POINTER TO AN SCBLK CONTAINING THE SPITBOL MAJOR ! 4459: * VERSION NUMBER V.V (SEE SYSID). ! 4460: * ! 4461: * 0 IF POSSIBLE, RETURN CONTROL TO JOB CONTROL ! 4462: * COMMAND LEVEL. THE EFFECT IF AVAILABLE WILL BE ! 4463: * SYSTEM DEPENDENT. ! 4464: * ! 4465: * +1, +2, +3 ! 4466: * CREATE IF POSSIBLE A LOAD MODULE FROM ALL OF ! 4467: * MEMORY. IT SHOULD BE POSSIBLE TO LOAD AND EXECUTE ! 4468: * THIS MODULE DIRECTLY. ! 4469: * ! 4470: * IN THE CASE OF SAVED LOAD MODULES, THE STATUS OF OPEN ! 4471: * FILES IS NOT PRESERVED AND IMPLEMENTORS MAY CHOOSE TO ! 4472: * OFFER MEANS OF ATTACHING FILES BEFORE EXECUTION OF LOAD ! 4473: * MODULES STARTS OR LEAVE IT TO THE USER TO INCLUDE ! 4474: * SUITABLE INPUT(), OUTPUT() CALLS IN HIS PROGRAM. ! 4475: * SYSXI SHOULD MAKE A NOTE THAT NO I/O FILES INCLUDING ! 4476: * THE STANDARD ONES ARE AVAILABLE SO THAT ! 4477: * CALLS OF SYSIN, SYSOU, SYSPR, SYSRD SHOULD FAIL UNLESS ! 4478: * NEW ASSOCIATIONS ARE MADE FOR THE LOAD MODULE. ! 4479: * AT LEAST IN THE CASE OF THE STANDARD OUTPUT FILE, IT IS ! 4480: * RECOMMENDED THAT EITHER THE USER BE REQUIRED TO ATTACH ! 4481: * A FILE OR THAT A DEFAULT FILE IS ATTACHED, SINCE THE ! 4482: * PROBLEM OF ERROR MESSAGES GENERATED BY THE LOAD MODULE ! 4483: * IS OTHERWISE SEVERE. ! 4484: ! 4485: ! 4486: Page 99 S P I T B O L -- PROCEDURES SECTION ! 4487: ! 4488: * ! 4489: * SYSXI (CONTINUED) ! 4490: * ! 4491: * IF THE REQUESTED SYSXI FEATURE IS NOT PROVIDED, THEN ! 4492: * THE FLOSI RETURN SHOULD BE TAKEN. ! 4493: * ! 4494: * (XL) ZERO OR SCBLK PTR ! 4495: * (XR) PTR TO V.V SCBLK ! 4496: * (IA) SIGNED INTEGER ARGUMENT ! 4497: * (WA) VALUE OF CODE KEYWORD ! 4498: * JSR SYSXI CALL TO EXIT ! 4499: * PPM FLOSI STATEMENT FAILURE RETURN ! 4500: * PPM EROSI (WA,XL) 0/CODE, 0/ERROR - SEE ABOVE ! 4501: * (REGISTERS) SHOULD BE PRESERVED OVER CALL ! 4502: * ! 4503: * LOADING AND RUNNING THE LOAD MODULE OR RETURNING FROM ! 4504: * JCL COMMAND LEVEL CAUSES EXECUTION TO RESUME AS THOUGH ! 4505: * THE NORMAL RETURN HAD BEEN TAKEN FROM THE CALL. ! 4506: * THE VALUE PASSED AS EXIT ARGUMENT IS USED TO INDICATE ! 4507: * OPTIONS REQUIRED ON RESUMPTION OF LOAD MODULE. ! 4508: * +1 OR -1 REQUIRE THAT ON RESUMPTION, SYSID AND SYSPP BE ! 4509: * CALLED AND A HEADING PRINTED ON THE STANDARD OUTPUT FILE. ! 4510: * +2 OR -2 INDICATE THAT SYSPP WILL BE CALLED BUT NOT SYSID ! 4511: * AND NO HEADING WILL BE PUT ON STANDARD OUTPUT FILE. ! 4512: * ABOVE OPTIONS HAVE THE OBVIOUS IMPLICATION THAT A ! 4513: * STANDARD O/P FILE MUST BE PROVIDED FOR THE LOAD MODULE. ! 4514: * +3 OR -3 INDICATE CALLS OF NEITHER SYSID NOR SYSPP ! 4515: * AND NO HEADING WILL BE PLACED ON STANDARD OUTPUT FILE. ! 4516: *
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.