|
|
1.1 ! root 1: TTL MINIMAL -- MACHINE INDEPENDENT MACRO ASSEMBLY LANG. ! 2: EJC ! 3: * ! 4: * THE FOLLOWING SECTIONS DESCRIBE THE IMPLEMENTATION ! 5: * LANGUAGE ORIGINALLY DEVELOPED FOR SPITBOL BUT NOW MORE ! 6: * WIDELY USED. MINIMAL IS AN ASSEMBLY LANGUAGE ! 7: * FOR AN IDEALIZED MACHINE. THE FOLLOWING DESCRIBES THE ! 8: * BASIC CHARACTERISTICS OF THIS MACHINE. ! 9: * ! 10: * SECTION 1 - CONFIGURATION PARAMETERS ! 11: * ! 12: * THERE ARE SEVERAL PARAMETERS WHICH MAY VARY WITH THE ! 13: * TARGET MACHINE. THE MACRO-PROGRAM IS INDEPENDENT OF THE ! 14: * ACTUAL DEFINITIONS OF THESE PARAMETERS. ! 15: * ! 16: * THE DEFINITIONS OF THESE PARAMETERS ARE SUPPLIED BY ! 17: * THE TRANSLATION PROGRAM TO MATCH THE TARGET MACHINE. ! 18: * ! 19: * CFP$A NUMBER OF DISTINCT CHARACTERS IN ! 20: * INTERNAL ALPHABET IN THE RANGE ! 21: * 64 LE CFP$A LE MXLEN. ! 22: * ! 23: * CFP$B NUMBER OF BYTES IN A WORD WHERE A ! 24: * BYTE IS THE AMOUNT OF STORAGE ! 25: * ADDRESSED BY THE LEAST SIGNIFICANT ! 26: * ADDRESS BIT. ! 27: * ! 28: * CFP$C NUMBER OF CHARACTERS WHICH CAN ! 29: * BE STORED IN A SINGLE WORD. ! 30: * ! 31: * CFP$F BYTE OFFSET FROM START OF A STRING ! 32: * BLOCK TO THE FIRST CHARACTER. ! 33: * DEPENDS BOTH ON TARGET MACHINE AND ! 34: * STRING DATA STRUCTURE. SEE PLC, PSC ! 35: * ! 36: * CFP$I NUMBER OF WORDS IN A SIGNED ! 37: * INTEGER CONSTANT ! 38: * ! 39: * CFP$M THE LARGEST POSITIVE INTEGER ! 40: * OF FORM 2**N - 1 WHICH CAN BE ! 41: * STORED IN A SINGLE WORD. N ! 42: * WILL OFTEN BE CFP$N BUT NEED NOT BE ! 43: * ! 44: * ! 45: * CFP$N NUMBER OF BITS WHICH CAN BE STORED ! 46: * IN A ONE WORD BIT STRING. ! 47: * ! 48: * CFP$R NUMBER OF WORDS IN A REAL CONSTANT ! 49: * ! 50: * CFP$S NUMBER OF SIGNIFICANT DIGITS TO ! 51: * BE OUTPUT IN CONVERSION OF A REAL ! 52: * QUANTITY. THE INTEGER CONSISTING OF ! 53: * THIS NUMBER OF 9S MUST NOT BE TOO ! 54: * LARGE TO FIT IN THE INTEGER ACCUM. ! 55: * ! 56: * CFP$X NUMBER OF DIGITS IN REAL EXPONENT ! 57: EJC ! 58: * ! 59: * SECTION 2 - MEMORY ! 60: * ! 61: * MEMORY IS ORGANIZED INTO WORDS WHICH EACH CONTAIN CFP$B ! 62: * BYTES. FOR WORD MACHINES CFP$B, WHICH IS A CONFIGURATION ! 63: * PARAMETER, MAY BE ONE IN WHICH CASE WORDS AND BYTES ARE ! 64: * IDENTICAL. TO EACH WORD CORRESPONDS AN ADDRESS WHICH IS ! 65: * A NON-NEGATIVE QUANTITY WHICH IS A MULTIPLE OF CFP$B. ! 66: * DATA IS ORGANIZED INTO WORDS AS FOLLOWS. ! 67: * ! 68: * 1) A SIGNED INTEGER VALUE OCCUPIES CFP$I CONSECUTIVE ! 69: * WORDS (CFP$I IS A CONFIGURATION PARAMETER). ! 70: * THE RANGE MAY INCLUDE MORE NEGATIVE NUMBERS THAN ! 71: * POSITIVE (E.G. THE TWOS COMPLEMENT REPRESENTATION). ! 72: * ! 73: * 2) A SIGNED REAL VALUE OCCUPIES CFP$R CONSECUTIVE ! 74: * WORDS. (CFP$R IS A CONFIGURATION PARAMETER). ! 75: * ! 76: * 3) CFP$C CHARACTERS MAY BE STORED IN A SINGLE WORD ! 77: * (CFP$C IS A CONFIGURATION PARAMETER). ! 78: * ! 79: * 4) A BIT STRING CONTAINING CFP$N BITS CAN BE STORED IN ! 80: * A SINGLE WORD (CFP$N IS A CONFIGURATION PARAMETER). ! 81: * ! 82: * 5) A WORD CAN CONTAIN A NON-NEGATIVE INTEGER VALUE IN ! 83: * THE RANGE (0 LE N LE CFP$M). THESE INTEGER VALUES ! 84: * MAY REPRESENT ADDRESSES OF OTHER WORDS AND SOME OF ! 85: * THE INSTRUCTIONS USE THIS FACT TO PROVIDE INDEXING ! 86: * AND INDIRECTION FACILITIES. ! 87: * ! 88: * 6) PROGRAM INSTRUCTIONS OCCUPY WORDS IN AN UNDEFINED ! 89: * MANNER. DEPENDING ON THE ACTUAL IMPLEMENTATION, ! 90: * INSTRUCTIONS MAY OCCUPY SEVERAL WORDS, OR PART OF ! 91: * A WORD, OR EVEN BE SPLIT OVER WORD BOUNDARIES. ! 92: * ! 93: * THE FOLLOWING REGIONS OF MEMORY ARE AVAILABLE TO THE ! 94: * PROGRAM. EACH REGION CONSISTS OF A SERIES OF WORDS WITH ! 95: * CONSECUTIVE ADDRESSES. ! 96: * ! 97: * 1) CONSTANT SECTION ASSEMBLED CONSTANTS ! 98: * 2) WORKING STORAGE SECTION ASSEMBLED WORK AREAS ! 99: * 3) PROGRAM SECTION ASSEMBLED INSTRUCTIONS ! 100: * 4) STACK AREA ALLOCATED STACK AREA ! 101: * 5) DATA AREA ALLOCATED DATA AREA ! 102: EJC ! 103: * ! 104: * SECTION 3 - REGISTERS ! 105: * ! 106: * THERE ARE THREE INDEX REGISTERS CALLED XR,XL,XS. IN ! 107: * ADDITION XL MAY SOMETIMES BE REFERRED TO BY THE ALIAS ! 108: * OF XT - SEE SECTION 4. ANY OF THE ABOVE ! 109: * REGISTERS MAY HOLD A POSITIVE INTEGER IN THE RANGE ! 110: * (0 LE N LE CFP$M). WHEN THE INDEX REGISTER IS USED FOR ! 111: * INDEXING PURPOSES, THIS MUST BE AN APPROPRIATE ADDRESS. ! 112: * XS IS SPECIAL IN THAT IT IS USED TO POINT TO THE TOP ! 113: * ITEM OF A STACK IN MEMORY. THE STACK MAY BUILD UP OR ! 114: * DOWN IN MEMORY.SINCE IT IS REQUIRED THAT XS POINTS TO THE ! 115: * STACK TOP BUT ACCESS TO ITEMS BELOW THE TOP IS PERMITTED, ! 116: * REGISTERS XS AND XT MAY BE USED WITH SUITABLE OFFSETS ! 117: * TO INDEX STACKED ITEMS. ONLY XS AND XT MAY BE USED FOR ! 118: * THIS PURPOSE SINCE THE DIRECTION OF THE OFFSET IS ! 119: * TARGET MACHINE DEPENDENT. XT IS A SYNONYM FOR XL ! 120: * WHICH THEREFORE CANNOT BE USED IN CODE SEQUENCES ! 121: * REFERENCING XT. ! 122: * THE STACK IS USED FOR S-R LINKAGE AND TEMPORARY ! 123: * DATA STORAGE FOR WHICH THE STACK ARRANGEMENT IS SUITABLE. ! 124: * XR,XL CAN ALSO CONTAIN A CHARACTER POINTER IN CONJUNCTION ! 125: * WITH THE CHARACTER INSTRUCTIONS (SEE DESCRIPTION OF PLC). ! 126: EJC ! 127: * ! 128: * THERE ARE THREE WORK REGISTERS CALLED WA,WB,WC WHICH ! 129: * CAN CONTAIN ANY DATA ITEM WHICH CAN BE STORED IN A ! 130: * SINGLE MEMORY WORD. IN FACT, THE WORK REGISTERS ARE JUST ! 131: * LIKE MEMORY LOCATIONS EXCEPT THAT THEY HAVE NO ADDRESSES ! 132: * AND ARE REFERENCED IN A SPECIAL WAY BY THE INSTRUCTIONS. ! 133: * NOTE THAT REGISTERS WA,WB HAVE SPECIAL USES IN CONNECTION ! 134: * WITH THE CVD, CVM, MVC, MVW, MWB, CMC, TRC INSTRUCTIONS. ! 135: * REGISTER WC MAY OVERLAP THE INTEGER ACCUMULATOR (IA) IN ! 136: * SOME IMPLEMENTATIONS. THUS ANY OPERATION CHANGING THE ! 137: * VALUE IN WC LEAVES (IA) UNDEFINED AND VICE VERSA ! 138: * EXCEPT AS NOTED IN THE FOLLOWING RESTRICTION ON SIMPLE ! 139: * DUMP/RESTORE OPERATIONS. ! 140: * ! 141: * RESTRICTION ! 142: * ----------- ! 143: * ! 144: * IF IA AND WA OVERLAP THEN ! 145: * STI IASAV ! 146: * LDI IASAV ! 147: * DOES NOT CHANGE WC, AND ! 148: * MOV WC,WCSAV ! 149: * MOV WCSAV,WC ! 150: * DOES NOT CHANGE IA. ! 151: * ! 152: * ! 153: * ! 154: * THERE IS AN INTEGER ACCUMULATOR (IA) WHICH IS CAPABLE OF ! 155: * HOLDING A SIGNED INTEGER VALUE (CFP$I WORDS LONG). ! 156: * REGISTER WC MAY OVERLAP THE INTEGER ACCUMULATOR (IA) IN ! 157: * SOME IMPLEMENTATIONS. THUS ANY OPERATION CHANGING THE ! 158: * VALUE IN WC LEAVES (IA) UNDEFINED AND VICE VERSA ! 159: * EXCEPT AS NOTED IN THE ABOVE RESTRICTION ON SIMPLE ! 160: * DUMP/RESTORE OPERATIONS. ! 161: * ! 162: * ! 163: * ! 164: * THERE IS A SINGLE REAL ACCUMULATOR (RA) WHICH CAN HOLD ! 165: * ANY REAL VALUE AND IS COMPLETELY SEPARATE FROM ANY OF ! 166: * THE OTHER REGISTERS OR PROGRAM ACCESSIBLE LOCATIONS. ! 167: * ! 168: * ! 169: * ! 170: * THE CODE POINTER REGISTER (CP) IS A SPECIAL INDEX ! 171: * REGISTER FOR USE IN IMPLEMENTATIONS OF INTERPRETORS. ! 172: * IT IS USED TO CONTAIN A PSEUDO-CODE POINTER AND CAN ! 173: * ONLY BE AFFECTED BY ICP, LCP, SCP AND LCW INSTRUCTIONS. ! 174: EJC ! 175: * SECTION 4 - THE STACK ! 176: * ! 177: * THE FOLLOWING NOTES ARE TO GUIDE BOTH IMPLEMENTORS OF ! 178: * SYSTEMS WRITTEN IN MINIMAL AND MINIMAL PROGRAMMERS IN ! 179: * DEALING WITH STACK MANIPULATION. IMPLEMENTATION OF A ! 180: * DOWNWARDS BUILDING STACK IS EASIEST AND IN GENERAL IS ! 181: * TO BE PREFERRED, IN WHICH CASE IT IS MERELY NECESSARY TO ! 182: * CONSIDER XT AS AN ALTERNATIVE NAME FOR XL. ! 183: * ! 184: * THE MINIMAL VIRTUAL MACHINE INCLUDES A STACK AND HAS ! 185: * OPERAND FORMATS -(XS) AND (XS)+ FOR PUSHING AND POPPING ! 186: * ITEMS WITH AN IMPLICATION THAT THE STACK BUILDS DOWN IN ! 187: * MEMORY (A D-STACK). HOWEVER ON SOME TARGET MACHINES IT IS ! 188: * BETTER FOR THE STACK TO BUILD UP (A U-STACK). ! 189: * A STACK ADDRESSED ONLY BY PUSH AND POP OPERATIONS CAN ! 190: * BUILD IN EITHER DIRECTION WITH NO COMPLICATION BUT ! 191: * SUCH A PURE SCHEME OF STACK ACCESS PROVES RESTRICTIVE. ! 192: * HENCE IT IS PERMITTED TO ACCESS BURIED ITEMS USING AN ! 193: * INTEGER OFFSET PAST THE INDEX REGISTER POINTING TO THE ! 194: * STACK TOP. ON TARGET MACHINES THIS OFFSET WILL BE ! 195: * POSITIVE/NEGATIVE FOR D-STACKS/U-STACKS AND THIS MUST ! 196: * BE ALLOWED FOR IN THE TRANSLATION. ! 197: * A FURTHER RESTRICTION IS THAT AT NO TIME MAY AN ITEM BE ! 198: * PLACED ABOVE THE STACK TOP. FOR SOME OPERATIONS THIS ! 199: * MAKES IT CONVENIENT TO ADVANCE THE STACK POINTER AND THEN ! 200: * ADDRESS ITEMS BELOW IT USING A SECOND INDEX REGISTER. ! 201: * THE PROBLEM OF SIGNED OFFSETS PAST SUCH A REGISTER THEN ! 202: * ARISES. TO DISTINGUISH STACK OFFSETS, WHICH IN SOME ! 203: * IMPLEMENTATIONS MAY BE NEGATIVE, FROM NON-STACK OFFSETS ! 204: * WHICH ARE INVARIABLY POSITIVE, XT, AN ALIAS OR ! 205: * SYNONYM FOR XL IS USED. FOR A U-STACK IMPLEMENTATION, THE ! 206: * MINIMAL TRANSLATOR SHOULD NEGATE THE SIGN OF OFFSETS ! 207: * APPLIED TO BOTH (XS) AND (XT). ! 208: * PROGRAMMERS SHOULD NOTE THAT SINCE XT IS NOT A ! 209: * SEPARATE REGISTER, XL SHOULD NOT BE USED IN CODE WHERE ! 210: * XT IS REFERENCED. OTHER MODIFICATIONS NEEDED IN U-STACK ! 211: * TRANSLATIONS ARE IN THE ADD, SUB, ICA, DCA OPCODES ! 212: * APPLIED TO XS, XT. FOR EXAMPLE ! 213: * ! 214: * MINIMAL D-STACK TRANS. U-STACK TRANS. ! 215: * ! 216: * MOV WA,-(XS) SBI XS,1 ADI XS,1 ! 217: * STO WA,(XS) STO WA,(XS) ! 218: * MOV (XT)+,WC LOD WC,(XL) LOD WC,(XL) ! 219: * ADI XL,1 SBI XL,1 ! 220: * ADD =SEVEN,XS ADI XS,7 SBI XS,7 ! 221: * MOV 2(XT),WA LOD WA,2(XL) LOD WA,-2(XL) ! 222: * ICA XS ADI XS,1 SBI XS,1 ! 223: * ! 224: * NOTE THAT FORMS SUCH AS ! 225: * MOV -(XS),WA ! 226: * ADD WA,(XS)+ ! 227: * ARE ILLEGAL, SINCE THEY ASSUME INFORMATION STORAGE ! 228: * ABOVE THE STACK TOP. ! 229: EJC ! 230: * SECTION 5 - INTERNAL CHARACTER SET ! 231: * ! 232: * THE INTERNAL CHARACTER SET IS REPRESENTED BY A SET OF ! 233: * CONTIGUOUS CODES FROM 0 TO CFP$A-1. THE CODES FOR THE ! 234: * DIGITS 0-9 MUST BE CONTIGUOUS AND IN SEQUENCE. OTHER ! 235: * THAN THIS, THERE ARE NO RESTRAINTS. ! 236: * ! 237: * THE FOLLOWING SYMBOLS ARE AUTOMATICALLY DEFINED TO HAVE ! 238: * THE VALUE OF THE CORRESPONDING INTERNAL CHARACTER CODE. ! 239: * ! 240: * CH$LA LETTER A ! 241: * CH$LB LETTER B ! 242: * . . ! 243: * CH$L$ LETTER Z ! 244: * ! 245: * CH$D0 DIGIT 0 ! 246: * . . ! 247: * CH$D9 DIGIT 9 ! 248: * ! 249: * CH$AM AMPERSAND ! 250: * CH$AS ASTERISK ! 251: * CH$AT AT ! 252: * CH$BB LEFT BRACKET ! 253: * CH$BL BLANK ! 254: * CH$BR VERTICAL BAR ! 255: * CH$CL COLON ! 256: * CH$CM COMMA ! 257: * CH$DL DOLLAR SIGN ! 258: * CH$DT DOT (PERIOD) ! 259: * CH$DQ DOUBLE QUOTE ! 260: * CH$EQ EQUAL SIGN ! 261: * CH$EX EXCLAMATION MARK ! 262: * CH$MN MINUS ! 263: * CH$NM NUMBER SIGN ! 264: * CH$NT NOT ! 265: * CH$PC PERCENT ! 266: * CH$PL PLUS ! 267: * CH$PP LEFT PAREN ! 268: * CH$RB RIGHT BRACKET ! 269: * CH$RP RIGHT PAREN ! 270: * CH$QU QUESTION MARK ! 271: * CH$SL SLASH ! 272: * CH$SM SEMI-COLON ! 273: * CH$SQ SINGLE QUOTE ! 274: * CH$UN UNDERLINE ! 275: * ! 276: * THE FOLLOWING OPTIONAL SYMBOLS ARE INCORPORATED ! 277: * BY DEFINING THE CONDITIONAL ASSEMBLY SYMBOL NAMED. ! 278: * ! 279: * 26 SHIFTED LETTERS INCORPORATED BY DEFINING .CASL ! 280: * ! 281: * CH$$A SHIFTED A ! 282: * CH$$B SHIFTED B ! 283: * . . ! 284: * CH$$$ SHIFTED Z ! 285: * ! 286: * CH$HT HORIZONTAL TAB - DEFINE .CAHT ! 287: * CH$VT VERTICAL TAB - DEFINE .CAVT ! 288: EJC ! 289: * ! 290: * SECTION 6 - CONDITIONAL ASSEMBLY FEATURES ! 291: * ! 292: * SOME FEATURES OF THE INTERPRETER ARE APPLICABLE TO ONLY ! 293: * CERTAIN TARGET MACHINES. THEY MAY BE INCORPORATED OR ! 294: * OMITTED BY USE OF CONDITIONAL ASSEMBLY. THE FULL ! 295: * FORM OF A CONDITION IS - ! 296: * .IF CONDITIONAL ASSEMBLY SYMBOL (CAS) ! 297: * .THEN ! 298: * MINIMAL STATEMENTS1 (MS1) ! 299: * .ELSE ! 300: * MINIMAL STATEMENTS2 (MS2) ! 301: * .FI ! 302: * THE FOLLOWING RULES APPLY ! 303: * 1. THE DIRECTIVES .IF, .THEN, .ELSE, .FI MUST ! 304: * START IN COLUMN 1. ! 305: * 2. THE CONDITIONAL ASSEMBLY SYMBOL MUST START WITH A ! 306: * DOT IN COLUMN 8 FOLLOWED BY 4 LETTERS OR DIGITS E.G. ! 307: * .CA$1 ! 308: * 3. .THEN IS REDUNDANT AND MAY BE OMITTED IF WISHED. ! 309: * 4. MS1, MS2 ARE ARBITRARY SEQUENCES OF MINIMAL ! 310: * STATEMENTS EITHER OF WHICH MAY BE NULL. ! 311: * 5. IF MS2 IS OMITTED, .ELSE MAY ALSO BE OMITTED. ! 312: * 6. .FI IS REQUIRED. ! 313: * 7. CONDITIONS MAY BE NESTED TO A DEPTH DETERMINED ! 314: * BY THE TRANSLATOR (NOT LESS THAN 20, SAY). ! 315: * ! 316: * SELECTION OF THE ALTERNATIVES MS1, MS2 IS BY MEANS OF THE ! 317: * DEFINE AND UNDEFINE DIRECTIVES OF FORM - ! 318: * .DEF CAS ! 319: * .UNDEF CAS ! 320: * WHICH OBEY RULES 1. AND 2. ABOVE AND MAY OCCUR AT ANY ! 321: * POINT IN A MINIMAL PROGRAM, INCLUDING WITHIN A CONDITION. ! 322: * MULTIPLY DEFINING A SYMBOL IS AN ERROR. ! 323: * UNDEFINING A SYMBOL WHICH IS NOT DEFINED IS NOT AN ERROR. ! 324: * ! 325: * THE EFFECT IS THAT IF A SYMBOL IS CURRENTLY DEFINED, ! 326: * THEN IN ANY CONDITION DEPENDING ON IT, MS1 WILL BE ! 327: * PROCESSED AND MS2 OMITTED. CONVERSELY IF IT IS UNDEFINED, ! 328: * MS1 WILL BE OMITTED AND MS2 PROCESSED. ! 329: EJC ! 330: * ! 331: * SECTION 7 - OPERAND FORMATS ! 332: * ! 333: * THE FOLLOWING SECTION DESCRIBES THE VARIOUS POSSIBILITIES ! 334: * FOR OPERANDS OF INSTRUCTIONS AND ASSEMBLY OPERATIONS. ! 335: * ! 336: * 01 INT UNSIGNED INTEGER LE CFP$M ! 337: * 02 DLBL SYMBOL DEFINED IN DEFINITIONS SEC ! 338: * 03 WLBL LABEL IN WORKING STORAGE SECTION ! 339: * 04 CLBL LABEL IN CONSTANT SECTION ! 340: * 05 ELBL PROGRAM SECTION ENTRY LABEL ! 341: * 06 PLBL PROGRAM SECTION LABEL (NON-ENTRY) ! 342: * 07 X ONE OF THE THREE INDEX REGISTERS ! 343: * 08 W ONE OF THE THREE WORK REGISTERS ! 344: * 09 (X) LOCATION INDEXED BY X ! 345: * 10 (X)+ LIKE (X) BUT POST INCREMENT X ! 346: * 11 -(X) LIKE (X) BUT PREDECREMENT X ! 347: * 12 INT(X) LOCATION INT WORDS BEYOND ADDR IN X ! 348: * 13 DLBL(X) LOCATION DLBL WORDS PAST ADDR IN X ! 349: * 14 CLBL(X) LOCATION (X) BYTES BEYOND CLBL ! 350: * 15 WLBL(X) LOCATION (X) BYTES BEYOND WLBL ! 351: * 16 INTEGER SIGNED INTEGER (DIC) ! 352: * 17 REAL SIGNED REAL (DRC) ! 353: * 18 =DLBL LOCATION CONTAINING DAC DLBL ! 354: * 19 *DLBL LOCATION CONTAINING DAC CFP$B*DLBL ! 355: * 20 =WLBL LOCATION CONTAINING DAC WLBL ! 356: * 21 =CLBL LOCATION CONTAINING DAC CLBL ! 357: * 22 =ELBL LOCATION CONTAINING DAC ELBL ! 358: * 23 PNAM PROCEDURE LABEL (ON PRC INSTRUC) ! 359: * 24 EQOP OPERAND FOR EQU INSTRUCTION ! 360: * 25 PTYP PROCEDURE TYPE (SEE PRC) ! 361: * 26 TEXT ARBITRARY TEXT (ERB,ERR,TTL) ! 362: * 27 DTEXT DELIMITED TEXT STRING (DTC) ! 363: * ! 364: * THE NUMBERS IN THE ABOVE LIST ARE USED IN SUBSEQUENT ! 365: * DESCRIPTION AND IN SOME OF THE MINIMAL TRANSLATORS. ! 366: EJC ! 367: * ! 368: * OPERAND FORMATS (CONTINUED) ! 369: * ! 370: * THE FOLLOWING SPECIAL SYMBOLS REFER TO A COLLECTION OF ! 371: * THE LISTED POSSIBILITIES ! 372: * ! 373: * VAL 01,02 PREDEFINED VALUE ! 374: * ! 375: * VAL IS USED TO REFER TO A PREDEFINED ONE WORD ! 376: * INTEGER VALUE IN THE RANGE 0 LE N LE CFP$M. ! 377: * ! 378: * REG 07,08 REGISTER ! 379: * ! 380: * REG IS USED TO DESCRIBE AN OPERAND WHICH CAN BE ! 381: * ANY OF THE REGISTERS (XL,XR,XS,XT,WA,WB,WC). SUCH ! 382: * AN OPERAND CAN HOLD A ONE WORD INTEGER (ADDRESS). ! 383: * ! 384: * OPC 09,10,11 CHARACTER ! 385: * ! 386: * OPC IS USED TO DESIGNATE A SPECIFIC CHARACTER ! 387: * OPERAND FOR USE IN THE LCH AND SCH INSTRUCTIONS. ! 388: * THE INDEX REGISTER REFERENCED MUST BE EITHER XR OR ! 389: * XL (NOT XS,XT). SEE SECTION ON CHARACTER OPERATIONS. ! 390: * ! 391: * OPS 03,04,09,12,13,14,15 MEMORY REFERENCE ! 392: * ! 393: * OPS IS USED TO DESCRIBE AN OPERAND WHICH IS IN ! 394: * MEMORY. THE OPERAND MAY BE ONE OR MORE WORDS LONG ! 395: * DEPENDING ON THE DATA TYPE. IN THE CASE OF MULTIWORD ! 396: * OPERANDS, THE ADDRESS GIVEN IS THE FIRST WORD. ! 397: * ! 398: * OPW AS FOR OPS + 08,10,11 FULL WORD ! 399: * ! 400: * OPW IS USED TO REFER TO AN OPERAND WHOSE CAPACITY IS ! 401: * THAT OF A FULL MEMORY WORD. OPW INCLUDES ALL THE ! 402: * POSSIBILITIES FOR OPS (THE REFERENCED WORD IS USED) ! 403: * PLUS THE USE OF ONE OF THE THREE WORK REGISTERS ! 404: * (WA,WB,WC). IN ADDITION, THE FORMATS (X)+ AND -(X) ! 405: * ALLOW INDEXED OPERATIONS IN WHICH THE INDEX REGISTER ! 406: * IS POPPED BY ONE WORD AFTER THE REFERENCE (X)+, ! 407: * OR PUSHED BY ONE WORD BEFORE THE REFERENCE -(X) ! 408: * THESE LATTER TWO FORMATS PROVIDE A FACILITY FOR ! 409: * MANIPULATION OF STACKS. THE FORMAT DOES NOT IMPLY ! 410: * A PARTICULAR DIRECTION IN WHICH STACKS MUST BUILD - ! 411: * IT IS USED FOR COMPACTNESS. NOTE THAT THERE IS A ! 412: * RESTRICTION WHICH DISALLOWS AN INSTRUCTION TO USE ! 413: * AN INDEX REGISTER IN ONE OF THESE FORMATS ! 414: * IN SOME OTHER MANNER IN THE SAME INSTRUCTION. ! 415: * E.G. MOV XL,(XL)+ IS ILLEGAL. ! 416: * THE FORMATS -(X) AND (X)+ MAY ALSO BE USED IN ! 417: * PRE-DECREMENTATION, POST-INCREMENTATION TO ACCESS ! 418: * THE ADJACENT CHARACTER OF A STRING. ! 419: EJC ! 420: * ! 421: * OPERAND FORMATS (CONTINUED) ! 422: * ! 423: * OPN AS FOR OPW + 07 ONE WORD INTEGER ! 424: * ! 425: * OPN IS USED TO REPRESENT AN OPERAND LOCATION WHICH ! 426: * CAN CONTAIN A ONE WORD INTEGER (E.G. AN ADDRESS). ! 427: * THIS INCLUDES ALL THE POSSIBILITIES FOR OPW PLUS ! 428: * THE USE OF ONE OF THE INDEX REGISTERS (XL,XR,XT, ! 429: * XS). THE RANGE OF INTEGER VALUES IS 0 LE N LE CFP$M. ! 430: * ! 431: * OPV AS FOR OPN + 18-22 ONE WORD INTEGER VALUE ! 432: * ! 433: * OPV IS USED FOR AN OPERAND WHICH CAN YIELD A ONE ! 434: * WORD INTEGER VALUE (E.G. AN ADDRESS). IT INCLUDES ! 435: * ALL THE POSSIBILITIES FOR OPN (THE CURRENT VALUE OF ! 436: * THE LOCATION IS USED) PLUS THE USE OF LITERALS. NOTE ! 437: * THAT ALTHOUGH THE LITERAL FORMATS ARE DESCRIBED IN ! 438: * TERMS OF A REFERENCE TO A LOCATION CONTAINING AN ! 439: * ADDRESS CONSTANT, THIS LOCATION MAY NOT ACTUALLY ! 440: * EXIST IN SOME IMPLEMENTATIONS SINCE ONLY THE VALUE ! 441: * IS REQUIRED. A RESTRICTION IS PLACED ON LITERALS ! 442: * WHICH MAY CONSIST ONLY OF DEFINED SYMBOLS AND ! 443: * CERTAIN LABELS. CONSEQUENTLY SMALL INTEGERS TO BE ! 444: * USED AS LITERALS MUST BE PRE-DEFINED, A DISCIPLINE ! 445: * AIDING PROGRAM MAINTENANCE AND REVISION. ! 446: * ! 447: * ADDR 01,02,03,04,05 ADDRESS ! 448: * ! 449: * ADDR IS USED TO DESCRIBE AN EXPLICIT ADDRESS VALUE ! 450: * (ONE WORD INTEGER VALUE) FOR USE WITH DAC. ! 451: * ! 452: * ! 453: * **************************************************** ! 454: * * IN THE FOLLOWING DESCRIPTIONS THE USAGE -- * ! 455: * * (XL),(XR), ... ,(IA) * ! 456: * * IN THE DESCRIPTIVE TEXT SIGNIFIES THE + ! 457: * * CONTENTS OF THE STATED REGISTER. * ! 458: * **************************************************** ! 459: EJC ! 460: * ! 461: * SECTION 8 - LIST OF INSTRUCTION MNEMONICS ! 462: * ! 463: * THE FOLLOWING LIST INCLUDES ALL INSTRUCTION AND ! 464: * ASSEMBLY OPERATION MNEMONICS IN ALPHABETICAL ORDER. ! 465: * THE MNEMONICS ARE PRECEDED BY A NUMBER IDENTIFYING ! 466: * THE FOLLOWING SECTION WHERE THE INSTRUCTION IS DESCRIBED. ! 467: * A STAR (*) IS APPENDED TO THE MNEMONIC IF THE LAST ! 468: * OPERAND MAY OPTIONALLY BE OMITTED. ! 469: * SEE SECTION -15- FOR DETAILS OF STATEMENT FORMAT AND ! 470: * COMMENT CONVENTIONS. ! 471: * ! 472: * 2.1 ADD OPV,OPN ADD ADDRESS ! 473: * 4.2 ADI OPS ADD INTEGER ! 474: * 5.3 ADR OPS ADD REAL ! 475: * 7.1 ANB OPW,W AND BIT STRING ! 476: * 2.17 AOV OPV,OPN,PLBL ADD ADDRESS, FAIL IF OVERFLOW ! 477: * 2.16 BCT W,PLBL BRANCH AND COUNT ! 478: * 2.5 BEQ OPN,OPV,PLBL BRANCH IF ADDRESS EQUAL ! 479: * 2.8 BGE OPN,OPV,PLBL BRANCH IF ADDRESS GREATER OR EQUL ! 480: * 2.7 BGT OPN,OPV,PLBL BRANCH IF ADDRESS GREATER ! 481: * 2.12 BHI OPN,OPV,PLBL BRANCH IF ADDRESS HIGH ! 482: * 2.10 BLE OPN,OPV,PLBL BRANCH IF ADDRESS LESS OR EQUAL ! 483: * 2.11 BLO OPN,OPV,PLBL BRANCH IF ADDRESS LOW ! 484: * 2.9 BLT OPN,OPV,PLBL BRANCH IF ADDRESS LESS THAN ! 485: * 2.6 BNE OPN,OPV,PLBL BRANCH IF ADDRESS NOT EQUAL ! 486: * 2.13 BNZ OPN,PLBL BRANCH IF ADDRESS NON-ZERO ! 487: * 1.2 BRN PLBL BRANCH UNCONDITIONAL ! 488: * 1.7 BRI OPN BRANCH INDIRECT ! 489: * 1.3 BSW* X,VAL,PLBL BRANCH ON SWITCH VALUE ! 490: * 8.2 BTW REG CONVERT BYTES TO WORDS ! 491: * 2.14 BZE OPN,PLBL BRANCH IF ADDRESS ZERO ! 492: * 6.6 CEQ OPW,OPW,PLBL BRANCH IF CHARACTERS EQUAL ! 493: * 10.1 CHK CHECK STACK OVERFLOW ! 494: * 7.4 CMB W COMPLEMENT BIT STRING ! 495: * 6.8 CMC PLBL,PLBL COMPARE CHARACTER STRINGS ! 496: * 6.7 CNE OPW,OPW,PLBL BRANCH IF CHARACTERS NOT EQUAL ! 497: * 6.5 CSC X COMPLETE STORE CHARACTERS ! 498: * 8.8 CTB W,VAL CONVERT CHARACTER COUNT TO BYTES ! 499: * 8.7 CTW W,VAL CONVERT CHARACTER COUNT TO WORDS ! 500: * 8.10 CVD CONVERT BY DIVISION ! 501: * 8.9 CVM PLBL CONVERT BY MULTIPLICATION ! 502: * 11.1 DAC ADDR DEFINE ADDRESS CONSTANT ! 503: * 11.5 DBC VAL DEFINE BIT STRING CONSTANT ! 504: * 2.4 DCA OPN DECREMENT ADDRESS BY ONE WORD ! 505: * 1.17 DCV OPN DECREMENT VALUE BY ONE ! 506: * 11.2 DIC INTEGER DEFINE INTEGER CONSTANT ! 507: EJC ! 508: * ! 509: * ALPHABETICAL LIST OF MNEMONICS (CONTINUED) ! 510: * ! 511: * 11.3 DRC REAL DEFINE REAL CONSTANT ! 512: * 11.4 DTC DTEXT DEFINE TEXT (CHARACTER) CONSTANT ! 513: * 4.5 DVI OPS DIVIDE INTEGER ! 514: * 5.6 DVR OPS DIVIDE REAL ! 515: * 13.1 EJC EJECT ASSEMBLY LISTING ! 516: * 14.2 END END OF ASSEMBLY ! 517: * 1.13 ENP DEFINE END OF PROCEDURE ! 518: * 1.6 ENT* VAL DEFINE ENTRY POINT ! 519: * 12.1 EQU EQOP DEFINE SYMBOLIC VALUE ! 520: * 1.15 ERB INT,TEXT ASSEMBLE ERROR CODE AND BRANCH ! 521: * 1.14 ERR INT,TEXT ASSEMBLE ERROR CODE ! 522: * 1.5 ESW END OF SWITCH LIST FOR BSW ! 523: * 1.12 EXI* INT EXIT FROM PROCEDURE ! 524: * 12.2 EXP DEFINE EXTERNAL PROCEDURE ! 525: * 2.3 ICA OPN INCREMENT ADDRESS BY ONE WORD ! 526: * 3.4 ICP INCREMENT CODE POINTER ! 527: * 1.16 ICV OPN INCREMENT VALUE BY ONE ! 528: * 4.11 IEQ PLBL JUMP IF INTEGER ZERO ! 529: * 1.4 IFF VAL,PLBL SPECIFY BRANCH FOR BSW ! 530: * 4.12 IGE PLBL JUMP IF INTEGER NON-NEGATIVE ! 531: * 4.13 IGT PLBL JUMP IF INTEGER POSITIVE ! 532: * 4.14 ILE PLBL JUMP IF INTEGER NEGATIVE OR ZERO ! 533: * 4.15 ILT PLBL JUMP IF INTEGER NEGATIVE ! 534: * 4.16 INE PLBL JUMP IF INTEGER NON-ZERO ! 535: * 4.9 INO PLBL JUMP IF NO INTEGER OVERFLOW ! 536: * 12.3 INP PTYP,INT INTERNAL PROCEDURE ! 537: * 12.4 INR INTERNAL ROUTINE ! 538: * 4.10 IOV PLBL JUMP IF INTEGER OVERFLOW ! 539: * 8.5 ITR CONVERT INTEGER TO REAL ! 540: * 1.9 JSR PNAM CALL PROCEDURE ! 541: * 6.3 LCH REG,OPC LOAD CHARACTER ! 542: * 2.15 LCT W,OPV LOAD COUNTER FOR LOOP ! 543: * 3.1 LCP REG LOAD CODE POINTER REGISTER ! 544: * 3.3 LCW REG LOAD NEXT CODE WORD ! 545: * 4.1 LDI OPS LOAD INTEGER ! 546: * 5.1 LDR OPS LOAD REAL ! 547: * 1.8 LEI X LOAD ENTRY POINT ID ! 548: * 7.6 LSH W,VAL LEFT SHIFT BIT STRING ! 549: * 7.8 LSX W,(X) LEFT SHIFT INDEXED ! 550: * 8.4 MFI* OPN,PLBL CONVERT (IA) TO ADDRESS VALUE ! 551: * 4.3 MLI OPS MULTIPLY INTEGER ! 552: * 5.5 MLR OPS MULTIPLY REAL ! 553: * 1.19 MNZ OPN MOVE NON-ZERO ! 554: * 1.1 MOV OPV,OPN MOVE ! 555: * 8.3 MTI OPN MOVE ADDRESS VALUE TO (IA) ! 556: * 9.1 MVC MOVE CHARACTERS ! 557: * 9.2 MVW MOVE WORDS ! 558: * 9.3 MWB MOVE WORDS BACKWARDS ! 559: * 4.8 NGI NEGATE INTEGER ! 560: EJC ! 561: * ! 562: * ALPHABETICAL LIST OF MNEMONICS (CONTINUED) ! 563: * ! 564: * 5.9 NGR NEGATE REAL ! 565: * 7.9 NZB W,PLBL JUMP IF NOT ALL ZERO BITS ! 566: * 7.2 ORB OPW,W OR BIT STRINGS ! 567: * 6.1 PLC* X,OPV PREPARE TO LOAD CHARACTERS ! 568: * 1.10 PPM* PLBL PROVIDE PROCEDURE EXIT PARAMETER ! 569: * 1.11 PRC PTYP,VAL DEFINE START OF PROCEDURE ! 570: * 6.2 PSC* X,OPV PREPARE TO STORE CHARACTERS ! 571: * 5.10 REQ PLBL JUMP IF REAL ZERO ! 572: * 5.11 RGE PLBL JUMP IF REAL POSITIVE OR ZERO ! 573: * 5.12 RGT PLBL JUMP IF REAL POSITIVE ! 574: * 5.13 RLE PLBL JUMP IF REAL NEGATIVE OR ZERO ! 575: * 5.14 RLT PLBL JUMP IF REAL NEGATIVE ! 576: * 4.6 RMI OPS REMAINDER INTEGER ! 577: * 5.15 RNE PLBL JUMP IF REAL NON-ZERO ! 578: * 5.8 RNO PLBL JUMP IF NO REAL OVERFLOW ! 579: * 5.7 ROV PLBL JUMP IF REAL OVERFLOW ! 580: * 7.5 RSH W,VAL RIGHT SHIFT BIT STRING ! 581: * 7.7 RSX W,(X) RIGHT SHIFT INDEXED ! 582: * 8.6 RTI* PLBL CONVERT REAL TO INTEGER ! 583: * 1.22 RTN DEFINE START OF ROUTINE ! 584: * 4.4 SBI OPS SUBTRACT INTEGER ! 585: * 5.4 SBR OPS SUBTRACT REALS ! 586: * 6.4 SCH REG,OPC STORE CHARACTER ! 587: * 3.2 SCP REG STORE CODE POINTER ! 588: * 14.1 SEC DEFINE START OF ASSEMBLY SECTION ! 589: * 1.20 SSL OPW SUBROUTINE STACK LOAD ! 590: * 1.21 SSS OPW SUBROUTINE STACK STORE ! 591: * 4.7 STI OPS STORE INTEGER ! 592: * 5.2 STR OPS STORE REAL ! 593: * 2.2 SUB OPV,OPN SUBTRACT ADDRESS ! 594: * 6.9 TRC TRANSLATE CHARACTER STRING ! 595: * 13.2 TTL TEXT SUPPLY ASSEMBLY TITLE ! 596: * 8.1 WTB REG CONVERT WORDS TO BYTES ! 597: * 7.3 XOB OPW,W EXCLUSIVE OR BIT STRINGS ! 598: * 1.18 ZER OPN ZEROISE INTEGER LOCATION ! 599: * 7.11 ZGB OPN ZEROISE GARBAGE BITS ! 600: * 7.10 ZRB W,PLBL JUMP IF ALL ZERO BITS ! 601: EJC ! 602: * ! 603: * SECTION 9 - MINIMAL INSTRUCTIONS ! 604: * ! 605: * THE FOLLOWING DESCRIPTIONS ASSUME THE DEFINITIONS - ! 606: * ! 607: * ZEROE EQU 0 ! 608: * UNITY EQU 1 ! 609: * ! 610: * -1- BASIC INSTRUCTION SET ! 611: * ! 612: * 1.1 MOV OPV,OPN MOVE ONE WORD VALUE ! 613: * ! 614: * MOV CAUSES THE VALUE OF OPERAND OPV TO BE SET AS ! 615: * THE NEW CONTENTS OF OPERAND LOCATION OPN. IN THE ! 616: * CASE WHERE OPN IS NOT AN INDEX REGISTER, ANY VALUE ! 617: * WHICH CAN NORMALLY OCCUPY A MEMORY WORD (INCLUDING ! 618: * A PART OF A MULTIWORD REAL OR INTEGER VALUE) ! 619: * CAN BE TRANSFERRED USING MOV. IF THE TARGET LOCATION ! 620: * OPN IS AN INDEX REGISTER, THEN OPV MUST SPECIFY AN ! 621: * APPROPRIATE ONE WORD VALUE OR OPERAND CONTAINING ! 622: * SUCH AN APPROPRIATE VALUE. ! 623: * ! 624: * 1.2 BRN PLBL UNCONDITIONAL BRANCH ! 625: * ! 626: * BRN CAUSES CONTROL TO BE PASSED TO THE INDICATED ! 627: * LABEL IN THE PROGRAM SECTION. ! 628: * ! 629: * 1.3 BSW X,VAL,PLBL BRANCH ON SWITCH VALUE ! 630: * 1.4 IFF VAL,PLBL PROVIDE BRANCH FOR SWITCH ! 631: * IFF VAL,PLBL ... ! 632: * ... ! 633: * ... ! 634: * 1.5 ESW END OF BRANCH SWITCH TABLE ! 635: * ! 636: * BSW,IFF,ESW PROVIDE A CAPABILITY FOR A SWITCHED ! 637: * BRANCH SIMILAR TO A FORTRAN COMPUTED GOTO. THE ! 638: * VAL ON THE BSW INSTRUCTION IS THE MAXIMUM NUMBER ! 639: * OF BRANCHES. THE VALUE IN X RANGES FROM ZERO UP TO ! 640: * BUT NOT INCLUDING THIS MAXIMUM. EACH IFF PROVIDES A ! 641: * BRANCH. VAL MUST BE LESS THAN THAT GIVEN ON THE BSW ! 642: * AND CONTROL GOES TO PLBL IF THE VALUE IN X MATCHES. ! 643: * IF THE VALUE IN X DOES NOT CORRESPOND TO ANY OF THE ! 644: * IFF ENTRIES, THEN CONTROL PASSES TO THE PLBL ON THE ! 645: * BSW. THIS PLBL OPERAND MAY BE OMITTED IF THERE ARE ! 646: * NO VALUES MISSING FROM THE LIST. ! 647: * ! 648: * IFF AND ESW MAY ONLY BE USED IN THIS CONTEXT. ! 649: * EXECUTION OF BSW MAY DESTROY THE CONTENTS OF X. ! 650: * THE IFF ENTRIES MAY BE IN ANY ORDER AND SINCE ! 651: * A TRANSLATOR MAY THUS NEED TO STORE AND SORT THEM, ! 652: * THE COMMENT FIELD IS RESTRICTED IN LENGTH (SEC 11). ! 653: EJC ! 654: * ! 655: * -1- BASIC INSTRUCTIONS (CONTINUED) ! 656: * ! 657: * 1.6 ENT VAL DEFINE PROGRAM ENTRY POINT ! 658: * ! 659: * THE SYMBOL APPEARING IN THE LABEL FIELD IS DEFINED ! 660: * TO BE A PROGRAM ENTRY POINT WHICH CAN SUBSEQUENTLY ! 661: * BE USED IN CONJUNCTION WITH THE BRI INSTRUCTION, ! 662: * WHICH PROVIDES THE ONLY MEANS OF ENTERING THE ! 663: * CODE. IT IS ILLEGAL TO FALL INTO CODE ! 664: * IDENTIFIED BY AN ENTRY POINT. THE ! 665: * ENTRY SYMBOL IS ASSIGNED AN ADDRESS WHICH NEED NOT ! 666: * BE A MULTIPLE OF CFP$B BUT WHICH MUST BE IN THE ! 667: * RANGE 0 LE CFP$M AND THE ADDRESS MUST NOT LIE WITHIN ! 668: * THE ADDRESS RANGE OF THE ALLOCATED DATA AREA. ! 669: * FURTHERMORE, ADDRESSES OF SUCCESSIVE ENTRY POINTS ! 670: * MUST BE ASSIGNED IN SOME ASCENDING SEQUENCE SO ! 671: * THAT THE ADDRESS COMPARISON INSTRUCTIONS CAN BE ! 672: * USED TO TEST THE ORDER IN WHICH TWO ENTRY POINTS ! 673: * OCCUR. THE SYMBOL VAL GIVES AN IDENTIFYING VALUE ! 674: * TO THE ENTRY POINT WHICH CAN BE ACCESSED WITH THE ! 675: * LEI INSTRUCTION. ! 676: * NOTE - SUBJECT TO THE RESTRICTION BELOW, VAL MAY ! 677: * BE OMITTED IF NO SUCH IDENTIFICATION IS NEEDED I.E. ! 678: * IF NO LEI REFERENCES THE ENTRY POINT. FOR THIS ! 679: * CASE, A TRANSLATION OPTIMISATION IS POSSIBLE IN ! 680: * WHICH NO MEMORY NEED BE RESERVED FOR A NULL ! 681: * IDENTIFICATION WHICH IS NEVER TO BE REFERENCED, BUT ! 682: * ONLY PROVIDED THIS IS DONE SO AS NOT TO INTERFERE ! 683: * WITH THE STRICTLY ASCENDING SEQUENCE OF ENTRY POINT ! 684: * ADDRESSES. TO SIMPLIFY THIS OPTIMISATION FOR ALL ! 685: * IMPLEMENTORS, THE FOLLOWING RESTRICTION IS OBSERVED ! 686: * VAL MAY ONLY BE OMITTED IF THE ENTRY POINT IS ! 687: * SEPARATED FROM A FOLLOWING ENTRY POINT BY A ! 688: * NON-NULL MINIMAL CODE SEQUENCE. ! 689: * ENTRY POINT ADDRESSES ARE ACCESSIBLE ONLY BY USE OF ! 690: * LITERALS (=ELBL, SECTION 7) OR DAC CONSTANTS ! 691: * (SECTION 8-11.1). ! 692: * ! 693: * 1.7 BRI OPN BRANCH INDIRECT ! 694: * ! 695: * OPN CONTAINS THE ADDRESS OF A PROGRAM ENTRY POINT ! 696: * (SEE ENT). CONTROL IS PASSED TO THE EXECUTABLE ! 697: * CODE STARTING AT THE ENTRY POINT ADDRESS. OPN IS ! 698: * LEFT UNCHANGED. ! 699: * ! 700: * 1.8 LEI X LOAD ENTRY POINT IDENTIFICATION ! 701: * ! 702: * X CONTAINS THE ADDRESS OF AN ENTRY POINT FOR WHICH ! 703: * AN IDENTIFYING VALUE WAS GIVEN ON THE THE ENT LINE. ! 704: * LEI REPLACES THE CONTENTS OF X BY THIS VALUE. ! 705: EJC ! 706: * ! 707: * -1- BASIC INSTRUCTIONS (CONTINUED) ! 708: * ! 709: * 1.9 JSR PNAM CALL PROCEDURE PNAM ! 710: * 1.10 PPM PLBL PROVIDE EXIT PARAMETER ! 711: * PPM PLBL ... ! 712: * ... ! 713: * PPM PLBL ... ! 714: * ! 715: * JSR CAUSES CONTROL TO BE PASSED TO THE NAMED ! 716: * PROCEDURE. PNAM IS THE LABEL ON A PRC STATEMENT ! 717: * ELSEWHERE IN THE PROGRAM SECTION (SEE PRC) ! 718: * OR HAS BEEN DEFINED USING AN EXP INSTRUCTION. ! 719: * THE PPM EXIT PARAMETERS FOLLOWING THE CALL GIVE ! 720: * NAMES OF PROGRAM LOCATIONS (PLBL-S) TO WHICH ! 721: * ALTERNATIVE EXI RETURNS OF THE CALLED PROCEDURE MAY ! 722: * PASS CONTROL. THEY MAY OPTIONALLY BE REPLACED BY ! 723: * ERROR RETURNS (SEE ERR). THE NUMBER OF EXIT ! 724: * PARAMETERS FOLLOWING A JSR MUST EQUAL THE INT IN THE ! 725: * PROCEDURE DEFINITION. THE OPERAND OF PPM MAY BE ! 726: * OMITTED IF THE CORRESPONDING EXI RETURN IS CERTAIN ! 727: * NOT TO BE TAKEN. ! 728: * ! 729: * 1.11 PRC PTYP,INT DEFINE START OF PROCEDURE ! 730: * ! 731: * THE SYMBOL APPEARING IN THE LABEL FIELD IS DEFINED ! 732: * TO BE THE NAME OF A PROCEDURE FOR USE WITH JSR. ! 733: * A PROCEDURE IS A CONTIGUOUS SECTION OF INSTRUCTIONS ! 734: * TO WHICH CONTROL MAY BE PASSED WITH A JSR ! 735: * INSTRUCTION. THIS IS THE ONLY WAY IN WHICH THE ! 736: * INSTRUCTIONS IN A PROCEDURE MAY BE EXECUTED. IT IS ! 737: * NOT PERMITTED TO FALL INTO A PROCEDURE. ! 738: * ALL PROCEDURES SHOULD BE NAMED IN SECTION 0 ! 739: * INP STATEMENTS. ! 740: * ! 741: * INT IS THE NUMBER OF EXIT PARAMETERS (PPM-S) TO ! 742: * BE USED IN JSR CALLS. ! 743: * ! 744: * THERE ARE THREE POSSIBILITIES FOR PTYP, EACH ! 745: * CONSISTING OF A SINGLE LETTER AS FOLLOWS. ! 746: * ! 747: * R RECURSIVE ! 748: * ! 749: * THE RETURN POINT (ONE OR MORE WORDS) IS STORED ON ! 750: * THE STACK AS THOUGH ONE OR MORE MOV ..,-(XS) ! 751: * INSTRUCTIONS WERE EXECUTED. ! 752: EJC ! 753: * ! 754: * -1- BASIC INSTRUCTIONS (CONTINUED) ! 755: * ! 756: * N NON-RECURSIVE ! 757: * ! 758: * THE RETURN POINT IS TO BE STORED EITHER ! 759: * (1) IN A LOCAL STORAGE WORD ASSOCIATED ! 760: * WITH THE PROCEDURE AND NOT DIRECTLY ! 761: * AVAILABLE TO THE PROGRAM IN ANY OTHER MANNER OR ! 762: * (2) ON A SUBROUTINE LINK STACK QUITE DISTINCT FROM ! 763: * THE MINIMAL STACK ADDRESSED BY XS. ! 764: * IT IS AN ERROR TO USE THE STACK FOR N-LINKS, SINCE ! 765: * PROCEDURE PARAMETERS OR RESULTS MAY BE PASSED VIA ! 766: * THE STACK. ! 767: * IF METHOD (2) IS USED FOR LINKS, ERROR EXITS ! 768: * (ERB,ERR) FROM A PROCEDURE WILL NECESSITATE LINK ! 769: * STACK RESETTING. THE SSL AND SSS ORDERS PROVIDED ! 770: * FOR THIS MAY BE REGARDED AS NO-OPS FOR ! 771: * IMPLEMENTATIONS USING METHOD (1). ! 772: * ! 773: * E EITHER ! 774: * ! 775: * THE RETURN POINT MAY BE STORED IN EITHER MANNER ! 776: * ACCORDING TO EFFICIENCY REQUIREMENTS OF THE ACTUAL ! 777: * PHYSICAL MACHINE USED FOR THE IMPLEMENTATION. NOTE ! 778: * THAT PROGRAMMING OF E TYPE PROCEDURES MUST BE ! 779: * INDEPENDENT OF THE ACTUAL IMPLEMENTATION. ! 780: * ! 781: * THE ACTUAL FORM OF THE RETURN POINT IS UNDEFINED. ! 782: * HOWEVER, EACH WORD STORED ON THE STACK FOR AN ! 783: * R-TYPE CALL MUST MEET THE FOLLOWING REQUIREMENTS. ! 784: * ! 785: * 1) IT CAN BE HANDLED AS AN ADDRESS ! 786: * AND PLACED IN AN INDEX REGISTER. ! 787: * ! 788: * 2) WHEN USED AS AN OPERAND IN AN ! 789: * ADDRESS COMPARISON INSTRUCTION, IT ! 790: * MUST NOT APPEAR TO LIE WITHIN ! 791: * THE ALLOCATED DATA AREA. ! 792: * ! 793: * 3) IT IS NOT REQUIRED TO APPEAR ! 794: * TO LIE WITHIN THE PROGRAM SECTION. ! 795: EJC ! 796: * ! 797: * -1- BASIC INSTRUCTIONS (CONTINUED) ! 798: * ! 799: * 1.12 EXI INT EXIT FROM PROCEDURE ! 800: * ! 801: * THE PPM AND ERR PARAMETERS FOLLOWING A JSR ARE ! 802: * NUMBERED STARTING FROM 1. EXI INT CAUSES CONTROL ! 803: * TO BE RETURNED TO THE INT-TH SUCH PARAM. EXI 1 GIVES ! 804: * CONTROL TO THE PLBL OF THE FIRST PPM AFTER THE JSR. ! 805: * IF INT IS OMITTED, CONTROL IS PASSED BACK PAST THE ! 806: * LAST EXIT PARAMETER (OR PAST THE JSR IF THERE ARE ! 807: * NONE). FOR R AND E TYPE PROCEDURES, THE ! 808: * STACK POINTER XS MUST BE SET TO ITS APPROPRIATE ! 809: * ENTRY VALUE BEFORE EXECUTING AN EXI INSTRUCTION. ! 810: * IN THIS CASE, EXI REMOVES RETURN POINTS FROM THE ! 811: * STACK IF ANY ARE STORED THERE SO THAT THE STACK ! 812: * POINTER IS RESTORED TO ITS CALLING VALUE. ! 813: * ! 814: * 1.13 ENP DEFINE END OF PROCEDURE BODY ! 815: * ! 816: * ENP DELIMITS A PROCEDURE BODY AND MAY NOT ACTUALLY ! 817: * BE EXECUTED, HENCE IT MUST HAVE NO LABEL. ! 818: * ! 819: * 1.14 ERR INT,TEXT PROVIDE ERROR RETURN ! 820: * ! 821: * ERR MAY REPLACE AN EXIT PARAMETER (PPM) IN ! 822: * ANY PROCEDURE CALL. THE INT ARGUMENT IS A UNIQUE ! 823: * ERROR CODE IN 0 TO 899. ! 824: * THE TEXT SUPPLIED AS THE OTHER OPERAND IS ! 825: * ARBITRARY TEXT IN THE FORTRAN CHARACTER SET AND ! 826: * MAY BE USED IN CONSTRUCTING A FILE OF ERROR ! 827: * MESSAGES FOR DOCUMENTING PURPOSES OR FOR BUILDING ! 828: * A DIRECT ACCESS OR OTHER FILE OF MESSAGES TO BE ! 829: * USED BY THE ERROR HANDLING CODE. ! 830: * IN THE EVENT THAT AN EXI ATTEMPTS ! 831: * TO RETURN CONTROL VIA AN EXIT PARAMETER TO ! 832: * AN ERR, CONTROL IS INSTEAD PASSED TO THE FIRST ! 833: * INSTRUCTION IN THE ERROR SECTION (WHICH FOLLOWS THE ! 834: * PROGRAM SECTION) WITH THE ERROR CODE IN WA. ! 835: * ! 836: * 1.15 ERB INT,TEXT ERROR BRANCH ! 837: * ! 838: * THIS INSTRUCTION RESEMBLES ERR EXCEPT THAT IT MAY ! 839: * OCCUR AT ANY POINT WHERE A BRANCH IS PERMITTED. ! 840: * IT EFFECTS A TRANSFER OF CONTROL TO THE ERROR ! 841: * SECTION WITH THE ERROR CODE IN WA. ! 842: * ! 843: * 1.16 ICV OPN INCREMENT VALUE BY ONE ! 844: * ! 845: * ICV INCREMENTS THE VALUE OF THE OPERAND BY UNITY. ! 846: * IT IS EQUIVALENT TO ADD =UNITY,OPN ! 847: * ! 848: * 1.17 DCV OPN DECREMENT VALUE BY ONE ! 849: * ! 850: * DCV DECREMENTS THE VALUE OF THE OPERAND BY UNITY. ! 851: * IT IS EQUIVALENT TO SUB =UNITY,OPN ! 852: EJC ! 853: * ! 854: * BASIC INSTRUCTIONS (CONTINUED) ! 855: * ! 856: * 1.18 ZER OPN ZEROISE OPN ! 857: * ! 858: * ZER IS EQUIVALENT TO MOV =ZEROE,OPN ! 859: * ! 860: * 1.19 MNZ OPN MOVE NON-ZERO TO OPN ! 861: * ! 862: * ANY NON-ZERO COLLECTABLE VALUE MAY USED, FOR WHICH ! 863: * THE OPCODES BNZ/BZE WILL BRANCH/FAIL TO BRANCH. ! 864: * ! 865: * 1.20 SSL OPW SUBROUTINE STACK LOAD ! 866: * ! 867: * 1.21 SSS OPW SUBROUTINE STACK STORE ! 868: * ! 869: * THIS PAIR OF OPERATIONS IS PROVIDED TO MAKE POSSIBLE ! 870: * THE USE OF A LOCAL STACK TO HOLD SUBROUTINE (S-R) ! 871: * RETURN LINKS FOR N-TYPE PROCEDURES. SSS STORES THE ! 872: * S-R STACK POINTER IN OPW AND SSL LOADS THE S-R ! 873: * STACK POINTER FROM OPW. BY USING SSS IN THE MAIN ! 874: * PROGRAM OR ON ENTRY TO A PROCEDURE WHICH SHOULD ! 875: * REGAIN CONTROL ON OCCURRENCE OF AN ERR OR ERB AND BY ! 876: * USE OF SSL IN THE ERROR PROCESSING SECTIONS THE ! 877: * S-R STACK POINTER CAN BE RESTORED GIVING A LINK ! 878: * STACK CLEANED UP READY FOR RESUMED EXECUTION. ! 879: * THE FORM OF THE LINK STACK POINTER IS UNDEFINED IN ! 880: * MINIMAL (IT IS LIKELY TO BE A PRIVATE REGISTER ! 881: * KNOWN TO THE TRANSLATOR) AND THE ONLY REQUIREMENT ! 882: * IS THAT IT SHOULD FIT INTO A SINGLE FULL WORD. ! 883: * SSL AND SSS ARE NO-OPS IF A PRIVATE LINK STACK IS ! 884: * NOT USED. ! 885: * ! 886: * 1.22 RTN DEFINE START OF ROUTINE ! 887: * ! 888: * A ROUTINE IS A CODE CHUNK USED FOR SIMILAR PURPOSES ! 889: * TO A PROCEDURE. HOWEVER IT IS ENTERED BY ANY TYPE OF ! 890: * CONDITIONAL OR UNCONDITIONAL BRANCH (NOT BY JSR). ON ! 891: * TERMINATION IT PASSES CONTROL BY A BRANCH (OFTEN ! 892: * BRI THROUGH A CODE WORD) OR EVEN PERMITS CONTROL ! 893: * TO DROP THROUGH TO ANOTHER ROUTINE. NO RETURN LINK ! 894: * EXISTS AND THE END OF A ROUTINE IS NOT MARKED BY ! 895: * AN EXPLICIT OPCODE (COMPARE ENP). ! 896: * ALL ROUTINES SHOULD BE NAMED IN SECTION 0 ! 897: * INR STATEMENTS. ! 898: EJC ! 899: * ! 900: * -2- OPERATIONS ON ONE WORD INTEGER VALUES (ADDRESSES) ! 901: * ! 902: * 2.1 ADD OPV,OPN ADDS OPV TO THE VALUE IN OPN AND ! 903: * STORES THE RESULT IN OPN. UNDEFINED ! 904: * IF THE RESULT EXCEEDS CFP$M. ! 905: * ! 906: * 2.2 SUB OPV,OPN SUBTRACTS OPV FROM OPN. STORES THE ! 907: * RESULT IN OPN. UNDEFINED IF THE ! 908: * RESULT IS NEGATIVE. ! 909: * ! 910: * 2.3 ICA OPN INCREMENT ADDRESS IN OPN ! 911: * EQUIVALENT TO ADD *UNITY,OPN ! 912: * ! 913: * 2.4 DCA OPN DECREMENT ADDRESS IN OPN ! 914: * EQUIVALENT TO SUB *UNITY,OPN ! 915: * ! 916: * 2.5 BEQ OPN,OPV,PLBL BRANCH TO PLBL IF OPN EQ OPV ! 917: * 2.6 BNE OPN,OPV,PLBL BRANCH TO PLBL IF OPN NE OPV ! 918: * 2.7 BGT OPN,OPV,PLBL BRANCH TO PLBL IF OPN GT OPV ! 919: * 2.8 BGE OPN,OPV,PLBL BRANCH TO PLBL IF OPN GE OPV ! 920: * 2.9 BLT OPN,OPV,PLBL BRANCH TO PLBL IF OPN LT OPV ! 921: * 2.10 BLE OPN,OPV,PLBL BRANCH TO PLBL IF OPN LE OPV ! 922: * 2.11 BLO OPN,OPV,PLBL EQUIVALENT TO BLT OR BLE ! 923: * 2.12 BHI OPN,OPV,PLBL EQUIVALENT TO BGT OR BGE ! 924: * ! 925: * THE ABOVE INSTRUCTIONS COMPARE TWO ADDRESS ! 926: * VALUES AS UNSIGNED INTEGER VALUES. ! 927: * THE BLO AND BHI INSTRUCTIONS ARE USED IN CASES WHERE ! 928: * THE EQUAL CONDITION EITHER DOES NOT OCCUR OR CAN ! 929: * RESULT EITHER IN A BRANCH OR NO BRANCH. THIS AVOIDS ! 930: * INEFFICIENT TRANSLATIONS IN SOME IMPLEMENTATIONS. ! 931: * ! 932: * 2.13 BNZ OPN,PLBL EQUIVALENT TO BNE OPN,=ZEROE,PLBL ! 933: * ! 934: * 2.14 BZE OPN,PLBL EQUIVALENT TO BEQ OPN,=ZEROE,PLBL ! 935: * ! 936: * ! 937: * 2.15 LCT W,OPV LOAD COUNTER FOR BCT ! 938: * ! 939: * LCT LOADS A COUNTER VALUE FOR USE WITH THE BCT ! 940: * INSTRUCTION. THE VALUE IN OPV IS THE NUMBER OF LOOPS ! 941: * TO BE EXECUTED. THE VALUE IN W AFTER THIS OPERATION ! 942: * IS AN UNDEFINED ONE WORD INTEGER QUANTITY. ! 943: * ! 944: * 2.16 BCT W,PLBL BRANCH AND COUNT ! 945: * ! 946: * BCT USES THE COUNTER VALUE IN W TO BRANCH THE ! 947: * REQUIRED NUMBER OF TIMES AND THEN FINALLY TO FALL ! 948: * THROUGH TO THE NEXT INSTRUCTION. BCT CAN ONLY BE ! 949: * USED FOLLOWING AN APPROPRIATE LCT INSTRUCTION. ! 950: * THE VALUE IN W AFTER EXECUTION OF BCT IS UNDEFINED. ! 951: * ! 952: * 2.17 AOV OPV,OPN,PLBL ADD WITH OVERFLOW TEST ! 953: * ! 954: * ADDS OPV TO THE VALUE IN OPN AND STORES RESULT IN ! 955: * OPN. BRANCHES TO PLBL IF RESULT EXCEEDS CFP$M ! 956: * WITH RESULT IN OPN UNDEFINED. CF. ADD. ! 957: EJC ! 958: * ! 959: * -3- OPERATIONS ON THE CODE POINTER REGISTER (CP) ! 960: * ! 961: * THE CODE POINTER REGISTER PROVIDES A PSUEDO ! 962: * INSTRUCTION COUNTER FOR USE IN AN INTERPRETOR. IT ! 963: * MAY BE IMPLEMENTED AS A REAL REGISTER OR AS A ! 964: * MEMORY LOCATION, BUT IN EITHER CASE IT IS SEPARATE ! 965: * FROM ANY OTHER REGISTER. THE VALUE IN THE CODE ! 966: * POINTER REGISTER IS ALWAYS A WORD ADDRESS (I.E. ! 967: * A ONE WORD INTEGER WHICH IS A MULTIPLE OF CFP$B). ! 968: * ! 969: * 3.1 LCP REG LOAD CODE POINTER REGISTER ! 970: * THIS INSTRUCTION CAUSES THE CODE ! 971: * POINTER REGISTER TO BE SET FROM ! 972: * THE VALUE IN REG WHICH IS UNCHANGED ! 973: * ! 974: * 3.2 SCP REG STORE CODE POINTER REGISTER ! 975: * THIS INSTRUCTION LOADS THE CURRENT ! 976: * VALUE IN THE CODE POINTER REGISTER ! 977: * INTO REG. (CP) IS UNCHANGED. ! 978: * ! 979: * 3.3 LCW REG LOAD NEXT CODE WORD ! 980: * THIS INSTRUCTION CAUSES THE WORD ! 981: * POINTED TO BY CP TO BE LOADED INTO ! 982: * THE INDICATED REG. THE VALUE IN CP ! 983: * IS THEN INCREMENTED BY ONE WORD. ! 984: * EXECUTION OF LCW MAY DESTROY XL. ! 985: * ! 986: * 3.4 ICP INCREMENT CP BY ONE WORD ! 987: * ! 988: * ON MACHINES WITH MORE THAN THREE INDEX REGISTERS, ! 989: * CP CAN BE TREATED SIMPLY AS AN INDEX REGISTER. ! 990: * IN THIS CASE, THE FOLLOWING EQUIVALENCES APPLY. ! 991: * ! 992: * LCP REG IS LIKE MOV REG,CP ! 993: * SCP REG IS LIKE MOV CP,REG ! 994: * LCW REG IS LIKE MOV (CP)+,REG ! 995: * ICP IS LIKE ICA CP ! 996: * ! 997: * SINCE LCW IS ALLOWED TO DESTROY XL, THE FOLLOWING ! 998: * IMPLEMENTATION USING A WORK LOCATION CP$$$ CAN ! 999: * ALSO BE USED. ! 1000: * ! 1001: * LCP REG MOV REG,CP$$$ ! 1002: * ! 1003: * SCP REG MOV CP$$$,REG ! 1004: * ! 1005: * LCW REG MOV CP$$$,XL ! 1006: * MOV (XL)+,REG ! 1007: * MOV XL,CP$$$ ! 1008: * ! 1009: * ICP ICA CP$$$ ! 1010: EJC ! 1011: * ! 1012: * -4- OPERATIONS ON SIGNED INTEGER VALUES ! 1013: * ! 1014: * 4.1 LDI OPS LOAD INTEGER ACCUMULATOR FROM OPS ! 1015: * 4.2 ADI OPS ADD OPS TO INTEGER ACCUMULATOR ! 1016: * 4.3 MLI OPS MULTIPLY INTEGER ACCUMULATOR BY OPS ! 1017: * 4.4 SBI OPS SUBTRACT OPS FROM INT ACCUMULATOR ! 1018: * 4.5 DVI OPS DIVIDE INTEGER ACCUMULATOR BY OPS ! 1019: * 4.6 RMI OPS SET INT ACCUM TO MOD(INTACC,OPS) ! 1020: * 4.7 STI OPS STORE INTEGER ACCUMULATOR AT OPS ! 1021: * 4.8 NGI NEGATE THE VALUE IN THE INTEGER ! 1022: * ACCUMULATOR (CHANGE ITS SIGN) ! 1023: * ! 1024: * THE EQUATION SATISFIED BY OPERANDS AND RESULTS OF ! 1025: * DVI AND RMI IS ! 1026: * DIV = QOT * OPS + REM WHERE ! 1027: * DIV = DIVIDEND IN INTEGER ACCUMULATOR ! 1028: * QOT = QUOTIENT LEFT IN IA BY DIV ! 1029: * OPS = THE DIVISOR ! 1030: * REM = REMAINDER LEFT IN IA BY RMI ! 1031: * THE SIGN OF THE RESULT OF DVI IS + IF (IA) AND (OPS) ! 1032: * HAVE THE SAME SIGN AND IS - IF THEY HAVE OPPOSITE ! 1033: * SIGNS. THE SIGN OF (IA) IS ALWAYS USED AS THE SIGN ! 1034: * OF THE RESULT OF REM. ! 1035: * ASSUMING IN EACH CASE THAT IA CONTAINS THE NUMBER ! 1036: * SPECIFIED IN PARENTHESES AND THAT SEVEN AND MSEVN ! 1037: * HOLD +7 AND -7 RESP. THE ALGORITHM IS ILLUSTRATED ! 1038: * BELOW. ! 1039: * (IA = 13) ! 1040: * DVI SEVEN IA = 1 ! 1041: * RMI SEVEN IA = 6 ! 1042: * DVI MSEVN IA = -1 ! 1043: * RMI MSEVN IA = 6 ! 1044: * (IA = -13) ! 1045: * DVI SEVEN IA = -1 ! 1046: * RMI SEVEN IA = -6 ! 1047: * DVI MSEVN IA = 1 ! 1048: * RMI MSEVN IA = -6 ! 1049: EJC ! 1050: * ! 1051: * THE ABOVE INSTRUCTIONS OPERATE ON A FULL RANGE OF ! 1052: * SIGNED INTEGER VALUES. WITH THE EXCEPTION OF LDI AND ! 1053: * STI, THESE INSTRUCTIONS MAY CAUSE INTEGER OVERFLOW ! 1054: * BY ATTEMPTING TO PRODUCE AN UNDEFINED OR OUT OF ! 1055: * RANGE RESULT IN WHICH CASE INTEGER OVERFLOW IS SET, ! 1056: * THE RESULT IN (IA) IS UNDEFINED AND THE FOLLOWING ! 1057: * INSTRUCTION MUST BE IOV OR INO. ! 1058: * PARTICULAR CARE MAY BE NEEDED ON TARGET MACHINES ! 1059: * HAVING DISTINCT OVERFLOW AND DIVIDE BY ZERO ! 1060: * CONDITIONS. ! 1061: * ! 1062: * 4.9 INO PLBL JUMP TO PLBL IF NO INTEGER OVERFLOW ! 1063: * 4.10 IOV PLBL JUMP TO PLBL IF INTEGER OVERFLOW ! 1064: * ! 1065: * THESE INSTRUCTIONS CAN ONLY OCCUR IMMEDIATELY ! 1066: * FOLLOWING AN INSTRUCTION WHICH CAN CAUSE INTEGER ! 1067: * OVERFLOW (ADI, SBI, MLI, DVI, RMI, NGI) AND ! 1068: * TEST THE RESULT OF THE PRECEDING INSTRUCTION. ! 1069: * IOV AND INO MAY NOT HAVE LABELS. ! 1070: * ! 1071: * 4.11 IEQ PLBL JUMP TO PLBL IF (IA) EQ 0 ! 1072: * 4.12 IGE PLBL JUMP TO PLBL IF (IA) GE 0 ! 1073: * 4.13 IGT PLBL JUMP TO PLBL IF (IA) GT 0 ! 1074: * 4.14 ILE PLBL JUMP TO PLBL IF (IA) LE 0 ! 1075: * 4.15 ILT PLBL JUMP TO PLBL IF (IA) LT 0 ! 1076: * 4.16 INE PLBL JUMP TO PLBL IF (IA) NE 0 ! 1077: * ! 1078: * THE ABOVE CONDITIONAL JUMP INSTRUCTIONS DO ! 1079: * NOT CHANGE THE CONTENTS OF THE ACCUMULATOR. ! 1080: * ON A ONES COMPLEMENT MACHINE, IT IS PERMISSIBLE TO ! 1081: * PRODUCE NEGATIVE ZERO IN IA PROVIDED THESE ! 1082: * INSTRUCTIONS OPERATE CORRECTLY WITH SUCH A VALUE. ! 1083: EJC ! 1084: * ! 1085: * -5- OPERATIONS ON REAL VALUES ! 1086: * ! 1087: * 5.1 LDR OPS LOAD REAL ACCUMULATOR FROM OPS ! 1088: * 5.2 STR OPS STORE REAL ACCUMULATOR AT OPS ! 1089: * 5.3 ADR OPS ADD OPS TO REAL ACCUMULATOR ! 1090: * 5.4 SBR OPS SUBTRACT OPS FROM REAL ACCUMULATOR ! 1091: * 5.5 MLR OPS MULTIPLY REAL ACCUMULATOR BY OPS ! 1092: * 5.6 DVR OPS DIVIDE REAL ACCUMULATOR BY OPS ! 1093: * ! 1094: * IF THE RESULT OF ANY OF THE ABOVE OPERATIONS CAUSES ! 1095: * UNDERFLOW, THE RESULT YIELDED IS 0.0. ! 1096: * ! 1097: * IF THE RESULT OF ANY OF THE ABOVE OPERATIONS IS ! 1098: * UNDEFINED OR OUT OF RANGE, REAL OVERFLOW IS SET, ! 1099: * THE CONTENTS OF (RA) ARE UNDEFINED AND THE FOLLOWING ! 1100: * INSTRUCTION MUST BE EITHER ROV OR RNO. ! 1101: * PARTICULAR CARE MAY BE NEEDED ON TARGET MACHINES ! 1102: * HAVING DISTINCT OVERFLOW AND DIVIDE BY ZERO ! 1103: * CONDITIONS. ! 1104: * ! 1105: * 5.7 ROV PLBL JUMP TO PLBL IF REAL OVERFLOW ! 1106: * 5.8 RNO PLBL JUMP TO PLBL IF NO REAL OVERFLOW ! 1107: * ! 1108: * THESE INSTRUCTIONS CAN ONLY OCCUR IMMEDIATELY ! 1109: * FOLLOWING AN INSTRUCTION WHICH CAN CAUSE REAL ! 1110: * OVERFLOW (ADR,SBR,MLR,DVR). ! 1111: * ! 1112: * 5.9 NGR NEGATE REAL ACCUM (CHANGE SIGN) ! 1113: * ! 1114: * 5.10 REQ PLBL JUMP TO PLBL IF (RA) EQ 0.0 ! 1115: * 5.11 RGE PLBL JUMP TO PLBL IF (RA) GE 0.0 ! 1116: * 5.12 RGT PLBL JUMP TO PLBL IF (RA) GT 0.0 ! 1117: * 5.13 RLE PLBL JUMP TO PLBL IF (RA) LE 0.0 ! 1118: * 5.14 RLT PLBL JUMP TO PLBL IF (RA) LT 0.0 ! 1119: * 5.15 RNE PLBL JUMP TO PLBL IF (RA) NE 0.0 ! 1120: * ! 1121: * THE ABOVE CONDITIONAL INSTRUCTIONS DO NOT AFFECT ! 1122: * THE VALUE STORED IN THE REAL ACCUMULATOR. ! 1123: * ON A ONES COMPLEMENT MACHINE, IT IS PERMISSIBLE TO ! 1124: * PRODUCE NEGATIVE ZERO IN RA PROVIDED THESE ! 1125: * INSTRUCTIONS OPERATE CORRECTLY WITH SUCH A VALUE. ! 1126: EJC ! 1127: * ! 1128: * -6- OPERATIONS ON CHARACTER VALUES ! 1129: * ! 1130: * CHARACTER OPERATIONS EMPLOY THE CONCEPT OF A ! 1131: * CHARACTER POINTER WHICH USES EITHER ! 1132: * INDEX REGISTER XR OR XL (NOT XS). ! 1133: * ! 1134: * A CHARACTER POINTER POINTS TO A SPECIFIC CHARACTER ! 1135: * IN A STRING OF CHARACTERS STORED CFP$C CHARS TO A ! 1136: * WORD. THE ONLY OPERATIONS PERMITTED ON A CHARACTER ! 1137: * POINTER ARE LCH AND SCH. IN PARTICULAR, A CHARACTER ! 1138: * POINTER MAY NOT EVEN BE MOVED WITH MOV. ! 1139: * ! 1140: * RESTRICTION 1. ! 1141: * -------------- ! 1142: * IT IS IMPORTANT WHEN CODING IN MINIMAL TO ENSURE ! 1143: * THAT NO ACTION OCCURRING BETWEEN THE INITIAL USE OF ! 1144: * PLC OR PSC AND THE EVENTUAL CLEARING OF XL OR XR ON ! 1145: * COMPLETION OF CHARACTER OPERATIONS CAN INITIATE A ! 1146: * GARBAGE COLLECTION. THE LATTER OF COURSE COULD CAUSE ! 1147: * THE ADDRESSED CHARACTERS TO BE MOVED LEAVING THE ! 1148: * CHARACTER POINTERS POINTING TO RUBBISH. ! 1149: * ! 1150: * RESTRICTION 2. ! 1151: * -------------- ! 1152: * A FURTHER RESTRICTION TO BE OBSERVED IN CODE ! 1153: * HANDLING CHARACTER STRINGS, IS THAT STRINGS BUILT ! 1154: * DYNAMICALLY SHOULD BE RIGHT PADDED WITH ZERO ! 1155: * CHARACTERS TO A FULL WORD BOUNDARY TO PERMIT EASY ! 1156: * HASHING AND USE OF CEQ OR CNE IN TESTING STRINGS ! 1157: * FOR EQUALITY. ! 1158: * ! 1159: * 6.1 PLC X,OPV PREPARE CH PTR FOR LCH,CMC,MVC,TRC ! 1160: * ! 1161: * 6.2 PSC X,OPV PREPARE CHAR. PTR FOR SCH,MVC. ! 1162: * ! 1163: * OPV CAN BE OMITTED IF IT IS ZERO. ! 1164: * THE CHAR. INITIALLY ADDRESSED IS DETERMINED BY THE ! 1165: * WORD ADDRESS IN X AND THE INTEGER OFFSET OPV. ! 1166: * THERE IS AN AUTOMATIC IMPLIED OFFSET OF CFP$F BYTES. ! 1167: * CFP$F IS USED TO FORMALLY INTRODUCE INTO MINIMAL A ! 1168: * VALUE NEEDED IN TRANSLATING THESE OPCODES WHICH, ! 1169: * SINCE MINIMAL ITSELF DOES NOT PRESCRIBE A STRING ! 1170: * STRUCTURE IN DETAIL, DEPENDS ON THE CHOICE OF A DATA ! 1171: * STRUCTURE FOR STRINGS IN THE MINIMAL PROGRAM. ! 1172: * E.G. IF CFP$B = CFP$C = 3, CFP$F = 6, NUM01 = 1, XL ! 1173: * POINTS TO A SERIES OF 4 WORDS, ABC/DEF/GHI/JKL, THEN ! 1174: * PLC XL,=NUM01 ! 1175: * POINTS TO H. ! 1176: EJC ! 1177: * ! 1178: * -6- OPERATIONS ON CHARACTER VALUES (CONTINUED) ! 1179: * ! 1180: * 6.3 LCH REG,OPC LOAD CHARACTER INTO REG ! 1181: * ! 1182: * 6.4 SCH REG,OPC STORE CHARACTER FROM REG ! 1183: * ! 1184: * THESE OPERATIONS ARE DEFINED SUCH THAT THE CHARACTER ! 1185: * IS RIGHT JUSTIFIED IN REGISTER REG WITH ZERO BITS TO ! 1186: * THE LEFT. AFTER LCH FOR EXAMPLE, IT IS LEGITIMATE ! 1187: * TO REGARD REG AS CONTAINING THE ORDINAL INTEGER ! 1188: * CORRESPONDING TO THE CHARACTER. ! 1189: * ! 1190: * OPC IS ONE OF THE FOLLOWING THREE POSSIBILITIES. ! 1191: * ! 1192: * (X) THE CHARACTER POINTED TO BY THE ! 1193: * CHARACTER POINTER IN X. THE ! 1194: * CHARACTER POINTER IS NOT CHANGED. ! 1195: * ! 1196: * (X)+ SAME CHARACTER AS (X) BUT THE ! 1197: * CHARACTER POINTER IS INCREMENTED ! 1198: * TO POINT TO THE NEXT CHARACTER ! 1199: * FOLLOWING EXECUTION. ! 1200: * ! 1201: * -(X) THE CHARACTER POINTER IS DECRE- ! 1202: * MENTED BEFORE ACCESSING THE ! 1203: * CHARACTER SO THAT THE PREVIOUS ! 1204: * CHARACTER IS REFERENCED. ! 1205: * ! 1206: * 6.5 CSC X COMPLETE STORE CHARACTERS ! 1207: * ! 1208: * THIS INSTRUCTION MARKS COMPLETION OF A ! 1209: * PSC,SCH,SCH,...,SCH SEQUENCE INITIATED BY ! 1210: * A PSC X INSTRUCTION. NO MORE SCH INSTRUCTIONS ! 1211: * USING X SHOULD BE OBEYED UNTIL ANOTHER PSC ! 1212: * IS OBEYED. THIS MAKES BUFFERING OF SCH CHARS ! 1213: * FEASIBLE ON MACHINES LACKING CHARACTER ORDERS. ! 1214: * IF CSC IS NOT A NO-OP, IT MUST OBSERVE RESTRICTION 2 ! 1215: * ! 1216: * THE FOLLOWING INSTRUCTIONS ARE USED TO COMPARE ! 1217: * TWO WORDS CONTAINING CFP$C CHARACTERS. ! 1218: * COMPARISONS DISTINCT FROM BEQ,BNE ARE PROVIDED AS ! 1219: * ON SOME TARGET MACHINES, THE POSSIBILITY OF THE SIGN ! 1220: * BIT BEING SET MAY REQUIRE SPECIAL ACTION. ! 1221: * NOTE THAT RESTRICTION 2 ABOVE, EASES USE OF THESE ! 1222: * ORDERS IN TESTING COMPLETE STRINGS FOR EQUALITY, ! 1223: * SINCE WHOLE WORD TESTS ARE POSSIBLE. ! 1224: * ! 1225: * 6.6 CEQ OPW,OPW,PLBL JUMP TO PLBL IF OPW EQ OPW ! 1226: * 6.7 CNE OPW,OPW,PLBL JUMP TO PLBL IF OPW NE OPW ! 1227: EJC ! 1228: * ! 1229: * -6- OPERATIONS ON CHARACTER VALUES (CONTINUED) ! 1230: * ! 1231: * 6.8 CMC PLBL,PLBL COMPARE CHARACTERS ! 1232: * ! 1233: * CMC IS USED TO COMPARE TWO CHARACTER STRINGS. BEFORE ! 1234: * EXECUTING CMC, REGISTERS ARE SET UP AS FOLLOWS. ! 1235: * (XL) CHARACTER PTR FOR FIRST STRING ! 1236: * (XR) CHARACTER POINTER FOR SECOND STRING ! 1237: * (WA) CHARACTER COUNT (MUST BE .GT. ZERO) ! 1238: * XL AND XR SHOULD HAVE BEEN PREPARED BY PLC. ! 1239: * CONTROL PASSES TO FIRST PLBL IF THE FIRST STRING ! 1240: * IS LEXICALLY LESS THAN THE SECOND STRING, AND TO ! 1241: * THE SECOND PLBL IF THE FIRST STRING IS LEXICALLY ! 1242: * GREATER. CONTROL PASSES TO THE FOLLOWING INSTRUCTION ! 1243: * IF THE STRINGS ARE IDENTICAL. AFTER EXECUTING THIS ! 1244: * INSTRUCTION, THE VALUES OF XR AND XL ARE SET TO ZERO ! 1245: * AND THE VALUE IN (WA) IS UNDEFINED. ! 1246: * ARGUMENTS TO CMC MAY BE COMPLETE OR PARTIAL ! 1247: * STRINGS, SO MAKING OPTIMISATION TO USE WHOLE WORD ! 1248: * COMPARISONS DIFFICULT (DEPENDENT IN GENERAL ON ! 1249: * SHIFTS AND MASKING). ! 1250: * ! 1251: * 6.9 TRC TRANSLATE CHARACTERS ! 1252: * ! 1253: * TRC IS USED TO TRANSLATE A CHARACTER STRING USING A ! 1254: * SUPPLIED TRANSLATION TABLE. BEFORE EXECUTING TRC THE ! 1255: * REGISTERS ARE SET AS FOLLOWS. ! 1256: * (XL) CHAR PTR TO STRING TO BE TRANSLATED ! 1257: * (XR) CHAR PTR TO TRANSLATE TABLE ! 1258: * (WA) LENGTH OF STRING TO BE TRANSLATED ! 1259: * XL AND XR SHOULD HAVE BEEN PREPARED BY PLC. ! 1260: * THE TRANSLATE TABLE CONSISTS OF CFP$A CONTIGUOUS ! 1261: * CHARACTERS GIVING THE TRANSLATIONS OF THE CFP$A ! 1262: * CHARACTERS IN THE ALPHABET. ON COMPLETION, (XR) AND ! 1263: * (XL) ARE SET TO ZERO AND (WA) IS UNDEFINED. ! 1264: EJC ! 1265: * ! 1266: * -7- OPERATIONS ON BIT STRING VALUES ! 1267: * ! 1268: * 7.1 ANB OPW,W AND BIT STRING VALUES ! 1269: * 7.2 ORB OPW,W OR BIT STRING VALUES ! 1270: * 7.3 XOB OPW,W EXCLUSIVE OR BIT STRING VALUES ! 1271: * ! 1272: * IN THE ABOVE OPERATIONS, THE LOGICAL CONNECTIVE IS ! 1273: * APPLIED SEPARATELY TO EACH OF THE CFP$N BITS. ! 1274: * THE RESULT IS STORED IN THE SECOND OPERAND LOCATION. ! 1275: * ! 1276: * 7.4 CMB W COMPLEMENT ALL BITS IN OPW ! 1277: * ! 1278: * 7.5 RSH W,VAL RIGHT SHIFT BY VAL BITS ! 1279: * 7.6 LSH W,VAL LEFT SHIFT BY VAL BITS ! 1280: * 7.7 RSX W,(X) RIGHT SHIFT W NUMBER OF BITS IN X ! 1281: * 7.8 LSX W,(X) LEFT SHIFT W NUMBER OF BITS IN X ! 1282: * ! 1283: * THE ABOVE SHIFTS ARE LOGICAL SHIFTS IN WHICH BITS ! 1284: * SHIFTED OUT ARE LOST AND ZERO BITS SUPPLIED AS ! 1285: * REQUIRED. THE SHIFT COUNT IS IN THE RANGE 0-CFP$N. ! 1286: * ! 1287: * 7.9 NZB W,PLBL JUMP TO PLBL IF W IS NOT ! 1288: * ALL ZERO BITS. ! 1289: * ! 1290: * 7.10 ZRB W,PLBL JUMP TO PLBL IF W IS ALL ZERO BITS ! 1291: * ! 1292: * 7.11 ZGB OPN ZEROISE GARBAGE BITS ! 1293: * ! 1294: * OPN CONTAINS A BIT STRING REPRESENTING A WORD ! 1295: * OF CHARACTERS FROM A STRING OR SOME FUNCTION ! 1296: * FORMED FROM SUCH CHARACTERS (E.G. AS A RESULT OF ! 1297: * HASHING). ON A MACHINE WHERE THE WORD SIZE IS NOT A ! 1298: * MULTIPLE OF THE CHARACTER SIZE, SOME BITS IN REG MAY ! 1299: * BE UNDEFINED. THIS OPCODE REPLACES SUCH BITS BY THE ! 1300: * ZERO BIT. ZGB IS A NO-OP IF THE WORD SIZE IS A ! 1301: * MULTIPLE OF THE CHARACTER SIZE. ! 1302: EJC ! 1303: * ! 1304: * -8- CONVERSION INSTRUCTIONS ! 1305: * ! 1306: * THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION ! 1307: * BETWEEN LENGTHS IN BYTES AND LENGTHS IN WORDS. ! 1308: * ! 1309: * 8.1 WTB REG CONVERT REG FROM WORDS TO BYTES. ! 1310: * THAT IS, MULTIPLY BY CFP$B. THIS IS ! 1311: * A NO-OP IF CFP$B IS ONE. ! 1312: * ! 1313: * 8.2 BTW REG CONVERT REG FROM BYTES TO WORDS ! 1314: * BY DIVIDING REG BY CFP$B DISCARDING ! 1315: * THE FRACTION. NO-OP IF CFP$B IS ONE ! 1316: * ! 1317: * THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION ! 1318: * OF ONE WORD INTEGER VALUES (ADDRESSES) TO AND ! 1319: * FROM THE FULL SIGNED INTEGER FORMAT. ! 1320: * ! 1321: * 8.3 MTI OPN THE VALUE OF OPN (AN ADDRESS) ! 1322: * IS MOVED AS A POSITIVE INTEGER ! 1323: * TO THE INTEGER ACCUMULATOR. ! 1324: * ! 1325: * 8.4 MFI OPN,PLBL THE VALUE CURRENTLY STORED IN THE ! 1326: * INTEGER ACCUMULATOR IS MOVED ! 1327: * TO OPN AS AN ADDRESS IF IT IS IN ! 1328: * THE RANGE 0 TO CFP$M INCLUSIVE. ! 1329: * IF THE ACCUMULATOR VALUE IS ! 1330: * OUTSIDE THIS RANGE, THEN THE RESULT ! 1331: * IN OPN IS UNDEFINED AND CONTROL IS ! 1332: * PASSED TO PLBL. MFI DESTROYS THE ! 1333: * VALUE OF (IA) WHETHER OR NOT ! 1334: * INTEGER OVERFLOW IS SIGNALLED. ! 1335: * PLBL MAY BE OMITTED IF OVERFLOW ! 1336: * IS IMPOSSIBLE. ! 1337: * ! 1338: * THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION ! 1339: * BETWEEN REAL VALUES AND INTEGER VALUES. ! 1340: * ! 1341: * 8.5 ITR CONVERT INTEGER VALUE IN INTEGER ! 1342: * ACCUMULATOR TO REAL AND STORE IN ! 1343: * REAL ACCUMULATOR (MAY LOSE ! 1344: * PRECISION IN SOME CASES) ! 1345: * ! 1346: * 8.6 RTI PLBL CONVERT THE REAL VALUE IN RA TO ! 1347: * AN INTEGER AND PLACE RESULT IN IA. ! 1348: * CONVERSION IS BY TRUNCATION OF THE ! 1349: * FRACTION - NO ROUNDING OCCURS. ! 1350: * JUMP TO PLBL IF OUT OF RANGE. (RA) ! 1351: * IS NOT CHANGED IN EITHER CASE. ! 1352: * PLBL MAY BE OMITTED IF OVERFLOW ! 1353: * IS IMPOSSIBLE. ! 1354: EJC ! 1355: * ! 1356: * -8- CONVERSION INSTRUCTIONS (CONTINUED) ! 1357: * ! 1358: * THE FOLLOWING INSTRUCTIONS PROVIDE FOR COMPUTING ! 1359: * THE LENGTH OF STORAGE REQUIRED FOR A TEXT STRING. ! 1360: * ! 1361: * 8.7 CTW W,VAL THIS INSTRUCTION COMPUTES THE SUM ! 1362: * (NUMBER OF WORDS REQUIRED TO STORE ! 1363: * W CHARACTERS) + (VAL). THE SUM ! 1364: * IS STORED IN W. ! 1365: * FOR EXAMPLE, IF CFP$C IS 5, AND WA ! 1366: * CONTAINS 32, THEN CTW WA,2 ! 1367: * GIVES A RESULT OF 9 IN WA. ! 1368: * ! 1369: * 8.8 CTB W,VAL CTB IS EXACTLY LIKE CTW EXCEPT THAT ! 1370: * THE RESULT IS IN BYTES. IT HAS THE ! 1371: * SAME EFFECT AS CTW W,VAL WTB W ! 1372: * ! 1373: * THE FOLLOWING INSTRUCTIONS PROVIDE FOR CONVERSION ! 1374: * FROM INTEGERS TO AND FROM NUMERIC DIGIT CHARACTERS ! 1375: * FOR USE IN NUMERIC CONVERSION ROUTINES. THEY EMPLOY ! 1376: * NEGATIVE INTEGER VALUES TO ALLOW FOR PROPER ! 1377: * CONVERSION OF NUMBERS WHICH CANNOT BE COMPLEMENTED. ! 1378: * ! 1379: * 8.9 CVM PLBL CONVERT BY MULTIPLICATION ! 1380: * ! 1381: * THE INTEGER ACCUMULATOR, WHICH IS ZERO OR NEGATIVE, ! 1382: * IS MULTIPLIED BY 10. WB CONTAINS THE CHARACTER ! 1383: * CODE FOR A DIGIT. THE VALUE OF THIS DIGIT IS THEN ! 1384: * SUBTRACTED FROM THE RESULT. IF THE RESULT IS OUT OF ! 1385: * RANGE, THEN CONTROL IS PASSED TO PLBL WITH THE ! 1386: * RESULT IN (IA) UNDEFINED. EXECUTION OF CVM LEAVES ! 1387: * THE RESULT IN (WB) UNDEFINED. ! 1388: * ! 1389: * 8.10 CVD CONVERT BY DIVISION ! 1390: * ! 1391: * THE INTEGER ACCUMULATOR, WHICH IS ZERO OR NEGATIVE, ! 1392: * IS DIVIDED BY 10. THE QUOTIENT (ZERO OR NEGATIVE) ! 1393: * IS REPLACED IN THE ACCUMULATOR. THE REMAINDER IS ! 1394: * CONVERTED TO THE CHARACTER CODE OF A DIGIT AND ! 1395: * PLACED IN WA. FOR EXAMPLE, AN OPERAND OF -523 GIVES ! 1396: * A QUOTIENT OF -52 AND A REMAINDER IN WA OF CH$D3. ! 1397: EJC ! 1398: * ! 1399: * -9- BLOCK MOVE INSTRUCTIONS ! 1400: * ! 1401: * THE FOLLOWING INSTRUCTIONS ARE USED FOR TRANSFERRING ! 1402: * DATA FROM ONE AREA OF MEMORY TO ANOTHER IN BLOCKS. ! 1403: * THEY CAN BE IMPLEMENTED WITH THE INDICATED SERIES OF ! 1404: * OTHER MACRO-INSTRUCTIONS, BUT MORE EFFICIENT IMPLE- ! 1405: * MENTATIONS WILL BE POSSSIBLE ON MOST MACHINES. ! 1406: * ! 1407: * 9.1 MVC MOVE CHARACTERS ! 1408: * ! 1409: * BEFORE OBEYING THIS ORDER WA,XL,XR SHOLD HAVE BEEN ! 1410: * SET UP, THE LATTER TWO BY PLC, PSC RESP. ! 1411: * MVC IS EQUIVALENT TO THE SEQUENCE ! 1412: * ! 1413: * MOV WB,DUMPB ! 1414: * LCT WA,WA ! 1415: * LOOPC LCH WB,(XL)+ ! 1416: * SCH WB,(XR)+ ! 1417: * BCT WA,LOOPC ! 1418: * CSC XR ! 1419: * MOV DUMPB,WB ! 1420: * ! 1421: * THE CHARACTER POINTERS ARE BUMPED AS INDICATED ! 1422: * AND THE FINAL VALUE OF WA IS UNDEFINED. ! 1423: * ! 1424: * 9.2 MVW MOVE WORDS ! 1425: * ! 1426: * MVW IS EQUIVALENT TO THE SEQUENCE ! 1427: * ! 1428: * LOOPW MOV (XL)+,(XR)+ ! 1429: * DCA WA WA = BYTES TO MOVE ! 1430: * BNZ WA,LOOPW ! 1431: * ! 1432: * NOTE THAT THIS IMPLIES THAT THE VALUE IN WA IS THE ! 1433: * LENGTH IN BYTES WHICH IS A MULTIPLE OF CFP$B. ! 1434: * THE INITIAL ADDRESSES IN XR,XL ARE WORD ADDRESSES. ! 1435: * AS INDICATED, THE FINAL XR,XL VALUES POINT PAST THE ! 1436: * NEW AND OLD REGIONS OF MEMORY RESPECTIVELY. ! 1437: * THE FINAL VALUE OF WA IS UNDEFINED. ! 1438: * WA,XL,XR MUST BE SET UP BEFORE OBEYING MVW. ! 1439: * ! 1440: * 9.3 MWB MOVE WORDS BACKWARDS ! 1441: * ! 1442: * MWB IS EQUIVALENT TO THE SEQUENCE ! 1443: * ! 1444: * LOOPB MOV -(XL),-(XR) ! 1445: * DCA WA WA = BYTES TO MOVE ! 1446: * BNZ WA,LOOPB ! 1447: * ! 1448: * THERE IS A REQUIREMENT THAT THE INITIAL VALUE IN XL ! 1449: * BE AT LEAST 256 LESS THAN THE VALUE IN XR. THIS ! 1450: * ALLOWS AN IMPLEMENTATION IN WHICH CHUNKS OF 256 ! 1451: * BYTES ARE MOVED FORWARD (IBM 360, ICL 1900). ! 1452: * THE FINAL VALUE OF WA IS UNDEFINED. ! 1453: * WA,XL,XR MUST BE SET UP BEFORE OBEYING MWB. ! 1454: EJC ! 1455: * ! 1456: * -10- OPERATIONS CONNECTED WITH THE STACK ! 1457: * ! 1458: * THE STACK IS AN AREA IN MEMORY WHICH IS DEDICATED FOR USE ! 1459: * IN CONJUNCTION WITH THE STACK POINTER REGISTER (XS). AS ! 1460: * PREVIOUSLY DESCRIBED, IT IS USED BY THE JSR AND EXI ! 1461: * INSTRUCTIONS AND MAY BE USED FOR STORAGE OF ANY OTHER ! 1462: * DATA AS REQUIRED. ! 1463: * ! 1464: * THE STACK BUILDS EITHER WAY IN MEMORY AND AN IMPORTANT ! 1465: * RESTRICTION IS THAT THE VALUE IN (XS) MUST BE THE ADDRESS ! 1466: * OF THE STACK FRONT AT ALL TIMES SINCE ! 1467: * SOME IMPLEMENTATIONS MAY RANDOMLY DESTROY STACK LOCATIONS ! 1468: * BEYOND (XS). ! 1469: * ! 1470: * THE STARTING STACK BASE ADDRESS IS PASSED ! 1471: * IN (XS) AT THE START OF EXECUTION. DURING EXECUTION IT ! 1472: * IS NECESSARY TO MAKE SURE THAT THE STACK DOES NOT ! 1473: * OVERFLOW. THIS IS ACHIEVED BY EXECUTING THE FOLLOWING ! 1474: * INSTRUCTION PERIODICALLY. ! 1475: * ! 1476: * 10.1 CHK CHECK STACK OVERFLOW ! 1477: * ! 1478: * AFTER SUCCESSFULLY EXECUTING CHK, IT IS PERMISSIBLE TO ! 1479: * USE UP TO 100 ADDITIONAL WORDS BEFORE ISSUING ANOTHER CHK ! 1480: * THUS CHK NEED NOT BE ISSUED EVERY TIME THE STACK IS ! 1481: * EXPANDED. IN SOME IMPLEMENTATIONS, THE CHECKING MAY BE ! 1482: * AUTOMATIC AND CHK WILL HAVE NO EFFECT. FOLLOWING THE ! 1483: * ABOVE RULE MAKES SURE THAT THE PROGRAM WILL OPERATE ! 1484: * CORRECTLY IN IMPLEMENTATIONS WITH NO AUTOMATIC CHECK. ! 1485: * ! 1486: * IF STACK OVERFLOW OCCURS (DETECTED EITHER AUTOMATICALLY ! 1487: * OR BY A CHK INSTRUCTION), THEN CONTROL IS PASSED TO THE ! 1488: * STACK OVERFLOW SECTION (SEE PROGRAM FORM). NOTE THAT THIS ! 1489: * TRANSFER MAY TAKE PLACE FOLLOWING ANY INSTRUCTION WHICH ! 1490: * STORES DATA AT A NEW LOCATION ON THE STACK. ! 1491: * AFTER STACK OVERFLOW, STACK IS ARBITRARILY POPPED ! 1492: * TO GIVE SOME SPACE IN WHICH THE ERROR PROCEDURE MAY ! 1493: * OPERATE. OTHERWISE A LOOP OF STACK OVERFLOWS MAY OCCUR. ! 1494: EJC ! 1495: * ! 1496: * -11- DATA GENERATION INSTRUCTIONS ! 1497: * ! 1498: * THE FOLLOWING INSTRUCTIONS ARE USED TO GENERATE CONSTANT ! 1499: * VALUES IN THE CONSTANT SECTION AND ALSO TO ASSEMBLE ! 1500: * INITIAL VALUES IN THE WORKING STORAGE SECTION. THEY ! 1501: * MAY NOT APPEAR EXCEPT IN THESE TWO SECTIONS. ! 1502: * ! 1503: * 11.1 DAC ADDR ASSEMBLE ADDRESS CONSTANT. ! 1504: * GENERATES ONE WORD CONTAINING THE ! 1505: * SPECIFIED ONE WORD INTEGER ! 1506: * VALUE (ADDRESS). ! 1507: * ! 1508: * 11.2 DIC INTEGER GENERATES AN INTEGER VALUE WHICH ! 1509: * OCCUPIES CFP$I CONSECUTIVE WORDS. ! 1510: * THE OPERAND IS A DIGIT STRING WITH ! 1511: * A REQUIRED LEADING SIGN. ! 1512: * ! 1513: * 11.3 DRC REAL ASSEMBLES A REAL CONSTANT WHICH ! 1514: * OCCUPIES CFP$R CONSECUTIVE WORDS. ! 1515: * THE OPERAND FORM MUST OBEY THE ! 1516: * RULES FOR A FORTRAN REAL CONSTANT ! 1517: * WITH THE EXTRA REQUIREMENT THAT A ! 1518: * LEADING SIGN BE PRESENT. ! 1519: * ! 1520: * 11.4 DTC DTEXT DEFINE TEXT CONSTANT. DTEXT ! 1521: * IS STARTED AND ENDED WITH ANY ! 1522: * CHARACTER NOT CONTAINED IN THE ! 1523: * CHARACTERS TO BE ASSEMBLED. THE ! 1524: * CONSTANT OCCUPIES CONSECUTIVE WORDS ! 1525: * AS DICTATED BY THE CONFIGURATION ! 1526: * PARAMETER CFP$C. ANY UNUSED CHARS ! 1527: * IN THE LAST WORD ARE RIGHT FILLED ! 1528: * WITH ZEROS (I.E. THE CHARACTER ! 1529: * WHOSE INTERNAL CODE IS ZERO). ! 1530: * THE STRING CONTAINS A SEQUENCE OF ! 1531: * LETTERS, DIGITS, BLANKS AND ANY OF ! 1532: * THE FOLLOWING SPECIAL CHARACTERS. ! 1533: * =,$.(*)/+- ! 1534: * NO OTHER CHARACTERS ! 1535: * MAY BE USED IN A DTEXT OPERAND. ! 1536: * ! 1537: * 11.5 DBC VAL ASSEMBLE BIT STRING CONSTANT. THE ! 1538: * OPERAND IS A POSITIVE INTEGER ! 1539: * VALUE WHICH IS INTERPRETED IN ! 1540: * BINARY, RIGHT JUSTIFIED AND LEFT ! 1541: * FILLED WITH ZERO BITS. THUS 5 WOULD ! 1542: * IMPLY THE BIT STRING VALUE 00..101. ! 1543: EJC ! 1544: * ! 1545: * -12- SYMBOL DEFINITION INSTRUCTIONS ! 1546: * ! 1547: * THE FOLLOWING INSTRUCTION IS USED TO DEFINE SYMBOLS ! 1548: * IN THE DEFINITIONS SECTION. IT MAY NOT BE USED ELSEWHERE. ! 1549: * ! 1550: * 12.1 EQU EQOP DEFINE SYMBOL ! 1551: * ! 1552: * THE SYMBOL WHICH APPEARS IN THE LABEL FIELD IS ! 1553: * DEFINED TO HAVE THE ABSOLUTE VALUE GIVEN ! 1554: * BY THE EQOP OPERAND. A GIVEN SYMBOL MAY BE DEFINED ! 1555: * ONLY ONCE IN THIS MANNER, AND ANY SYMBOLS OCCURING ! 1556: * IN EQOP MUST BE PREVIOUSLY DEFINED. ! 1557: * ! 1558: * THE FOLLOWING ARE THE POSSIBILITIES FOR EQOP ! 1559: * ! 1560: * VAL THE INDICATED VALUE IS USED ! 1561: * ! 1562: * VAL+VAL THE SUM OF THE TWO VALUES IS USED. ! 1563: * THIS SUM MUST NOT EXCEED CFP$M ! 1564: * ! 1565: * VAL-VAL THE DIFFERENCE BETWEEN THE TWO ! 1566: * VALUES (MUST BE POSITIVE) IS USED. ! 1567: * ! 1568: * * THIS FORMAT DEFINES THE LABEL BY ! 1569: * USING A VALUE SUPPLIED BY THE ! 1570: * MINIMAL TRANSLATOR. VALUES ARE ! 1571: * REQUIRED FOR THE ! 1572: * CFP$X (CONFIGURATION PARAMETERS) ! 1573: * E$XXX (ENVIRONMENT PARAMETERS) ! 1574: * CH$XX (CHARACTER CODES). ! 1575: * IN ORDER FOR A TRANSLATOR TO ! 1576: * HANDLE THIS FORMAT CORRECTLY THE ! 1577: * DEFINITIONS SECTION MUST BE ! 1578: * CONSULTED FOR DETAILS OF REQUIRED ! 1579: * SYMBOLS AS LISTED AT THE FRONT OF ! 1580: * THE SECTION. ! 1581: EJC ! 1582: * ! 1583: * SYMBOL DEFINITION INSTRUCTIONS (CONTINUED) ! 1584: * ! 1585: * THE FOLLOWING INSTRUCTIONS MAY BE USED TO DEFINE SYMBOLS ! 1586: * IN THE PROCEDURE SECTION. THEY MAY NOT BE USED IN ! 1587: * ANY OTHER PART OF THE PROGRAM. ! 1588: * ! 1589: * 12.2 EXP DEFINE EXTERNAL PROCEDURE ! 1590: * ! 1591: * EXP DEFINES THE SYMBOL APPEARING IN THE LABEL FIELD ! 1592: * TO BE THE NAME OF AN EXTERNAL PROCEDURE WHICH CAN BE ! 1593: * REFERENCED IN A SUBSEQUENT JSR INSTRUCTION. THE ! 1594: * CODING FOR THE PROCEDURE IS EXTERNAL TO THE ! 1595: * CODING OF THE SOURCE PROGRAM IN THIS LANGUAGE. ! 1596: * THE CODE FOR EXTERNAL PROCEDURES MAY BE ! 1597: * REFERRED TO COLLECTIVELY AS THE OPERATING SYSTEM ! 1598: * INTERFACE, OR MORE BRIEFLY, OSINT, AND WILL ! 1599: * FREQUENTLY BE A SEPARATELY COMPILED SEGMENT OF CODE ! 1600: * LOADED WITH SPITBOL TO PRODUCE A COMPLETE SYSTEM. ! 1601: * ! 1602: * 12.3 INP PTYP,INT DEFINE INTERNAL PROCEDURE ! 1603: * ! 1604: * INP DEFINES THE SYMBOL APPEARING IN THE LABEL FIELD ! 1605: * TO BE THE NAME OF AN INTERNAL PROCEDURE AND GIVES ! 1606: * ITS TYPE AND NUMBER OF EXIT PARAMETERS. THE LABEL ! 1607: * CAN BE REFERENCED IN JSR INSTRUCTIONS AND ! 1608: * IT MUST APPEAR LABELLING A PRC INSTRUCTION IN THE ! 1609: * PROGRAM SECTION. ! 1610: * ! 1611: * 12.4 INR DEFINE INTERNAL ROUTINE ! 1612: * ! 1613: * INR DEFINES THE SYMBOL APPEARING IN THE LABEL ! 1614: * FIELD TO BE THE NAME OF AN INTERNAL ROUTINE. THE ! 1615: * LABEL MAY BE REFERENCED IN ANY TYPE OF BRANCH ORDER ! 1616: * AND IT MUST APPEAR LABELLING A RTN INSTRUCTION IN ! 1617: * THE PROGRAM SECTION. ! 1618: EJC ! 1619: * ! 1620: * -13- ASSEMBLY LISTING LAYOUT INSTRUCTIONS ! 1621: * ! 1622: * 13.1 EJC EJECT TO NEXT PAGE ! 1623: * ! 1624: * 13.2 TTL TEXT SET NEW ASSEMBLY TITLE ! 1625: * ! 1626: * TTL IMPLIES AN IMMEDIATE EJECT OF THE ! 1627: * ASSEMBLY LISTING TO PRINT THE NEW TITLE. ! 1628: * ! 1629: * THE USE OF TTL AND EJC CARDS IS SUCH THAT THE ! 1630: * PROGRAM WILL LIST NEATLY IF THE PRINTER PRINTS ! 1631: * AS MANY AS 58 LINES PER PAGE. IN THE EVENT THAT ! 1632: * THE PRINTER DEPTH IS LESS THAN THIS, OR IF THE ! 1633: * LISTING CONTAINS INTERSPERSED LINES (SUCH AS ACTUAL ! 1634: * GENERATED CODE), THEN THE FORMAT MAY BE UPSET. ! 1635: * ! 1636: * LINES STARTING WITH AN ASTERISK ARE COMMENT LINES ! 1637: * WHICH CAUSE NO CODE TO BE GENERATED AND MAY OCCUR ! 1638: * FREELY ANYWHERE IN THE PROGRAM. THE FORMAT FOR ! 1639: * COMMENT LINES IS GIVEN IN SECTION -15-. ! 1640: EJC ! 1641: * ! 1642: * -14- PROGRAM FORM ! 1643: * ! 1644: * THE PROGRAM CONSISTS OF SEPARATE SECTIONS SEPARATED ! 1645: * BY SEC OPERATIONS. THE SECTIONS MUST APPEAR IN THE ! 1646: * FOLLOWING SPECIFIED ORDER. ! 1647: * ! 1648: * 14.1 SEC START OF PROCEDURE SECTION ! 1649: * ! 1650: * (PROCEDURE SECTION) ! 1651: * ! 1652: * SEC START OF DEFINITIONS SECTION ! 1653: * ! 1654: * (DEFINITIONS SECTION) ! 1655: * ! 1656: * SEC START OF CONSTANT STORAGE SECTION ! 1657: * ! 1658: * (CONSTANT STORAGE SECTION) ! 1659: * ! 1660: * SEC START OF WORKING STORAGE SECTION ! 1661: * ! 1662: * (WORKING STORAGE SECTION) ! 1663: * ! 1664: * SEC START OF PROGRAM SECTION ! 1665: * ! 1666: * (PROGRAM SECTION) ! 1667: * ! 1668: * SEC START OF STACK OVERFLOW SECTION ! 1669: * ! 1670: * (STACK OVERFLOW SECTION) ! 1671: * ! 1672: * SEC START OF ERROR SECTION ! 1673: * ! 1674: * (ERROR SECTION) ! 1675: * ! 1676: * 14.2 END END OF ASSEMBLY ! 1677: EJC ! 1678: * ! 1679: * SECTION 10 - PROGRAM FORM ! 1680: * ! 1681: * PROCEDURE SECTION ! 1682: * ! 1683: * THE PROCEDURE SECTION CONTAINS ALL THE EXP ! 1684: * INSTRUCTIONS FOR EXTERNALLY AVAILABLE PROCEDURES ! 1685: * AND INP,INR OPCODES FOR INTERNAL PROCEDURES,ROUTINES ! 1686: * SO THAT A SINGLE PASS MINIMAL TRANSLATOR HAS ADVANCE ! 1687: * KNOWLEDGE OF PROCEDURE TYPES WHEN TRANSLATING CALLS. ! 1688: * ! 1689: * DEFINITIONS SECTION ! 1690: * ! 1691: * THE DEFINITIONS SECTION CONTAINS EQU INSTRUCTIONS ! 1692: * WHICH DEFINE SYMBOLS REFERENCED LATER ON IN THE ! 1693: * PROGRAM, CONSTANT AND WORK SECTIONS. ! 1694: * ! 1695: * CONSTANT STORAGE SECTION ! 1696: * ! 1697: * THE CONSTANT STORAGE SECTION CONSISTS ENTIRELY ! 1698: * OF CONSTANTS ASSEMBLED WITH THE DAC,DIC,DRC,DTC,DBC ! 1699: * ASSEMBLY OPERATIONS. THESE CONSTANTS CAN BE FREELY ! 1700: * REFERENCED BY THE PROGRAM INSTRUCTIONS. ! 1701: * ! 1702: * WORKING STORAGE SECTION ! 1703: * ! 1704: * THE WORKING STORAGE SECTION CONSISTS ENTIRELY OF ! 1705: * DAC,DIC,DRC,DBC,DTC INSTRUCTIONS TO DEFINE A FIXED ! 1706: * LENGTH WORK AREA. THE WORK LOCATIONS IN THIS AREA ! 1707: * CAN BE DIRECTLY REFERENCED IN PROGRAM INSTRUCTIONS. ! 1708: * THE AREA IS INITIALIZED IN ACCORDANCE WITH THE ! 1709: * VALUES ASSEMBLED IN THE INSTRUCTIONS. ! 1710: * ! 1711: * PROGRAM SECTION ! 1712: * ! 1713: * THE PROGRAM SECTION CONTAINS PROGRAM INSTRUCTIONS ! 1714: * AND ASSOCIATED OPERATIONS (SUCH AS PRC, ENP, ENT). ! 1715: * CONTROL IS PASSED TO THE FIRST INSTRUCTION IN THIS ! 1716: * SECTION WHEN EXECUTION IS INITIATED. ! 1717: * ! 1718: * STACK OVERFLOW SECTION ! 1719: * ! 1720: * THE STACK OVERFLOW SECTION CONTAINS INSTRUCTIONS ! 1721: * LIKE THE PROGRAM SECTION. CONTROL IS PASSED TO THE ! 1722: * FIRST INSTRUCTION IN THIS SECTION FOLLOWING THE ! 1723: * OCCURRENCE OF STACK OVERFLOW, SEE CHK INSTRUCTION. ! 1724: * ! 1725: * ERROR SECTION ! 1726: * ! 1727: * THE ERROR SECTION CONTAINS INSTRUCTIONS LIKE THE ! 1728: * PROGRAM SECTION. CONTROL IS PASSED TO THE FIRST ! 1729: * INSTRUCTION IN THIS SECTION WHEN A PROCEDURE EXIT ! 1730: * CORRESPONDS TO AN ERROR PARAMETER (SEE ERR) ! 1731: * OR WHEN AN ERB OPCODE IS OBEYED. THE ERROR CODE ! 1732: * MUST CLEAN UP THE MAIN STACK AND CATER FOR THE ! 1733: * POSSIBILITY THAT A SUBROUTINE STACK MAY NEED CLEAN ! 1734: * UP. ! 1735: EJC ! 1736: * OSINT ! 1737: * ! 1738: * THOUGH NOT PART OF THE MINIMAL SOURCE, IT IS USEFUL ! 1739: * TO REFER TO THE COLLECTION OF INITIALISATION AND ! 1740: * EXP ROUTINES AS OSINT (OPERATING SYSTEM INTERFACE). ! 1741: * ERRORS OCCURRING WITHIN OSINT PROCEDURES ARE ! 1742: * USUALLY HANDLED BY MAKING AN ERROR RETURN. IF THIS ! 1743: * IS NOT FEASIBLE OR APPROPRIATE, OSINT MAY USE THE ! 1744: * MINIMAL ERROR SECTION TO REPORT ERRORS DIRECTLY BY ! 1745: * BRANCHING TO IT WITH A SUITABLE NUMERIC ERROR ! 1746: * CODE IN WA. ! 1747: EJC ! 1748: * ! 1749: * SECTION 11 - STATEMENT FORMAT ! 1750: * ! 1751: * ALL LABELS ARE EXACTLY FIVE CHARACTERS LONG AND START ! 1752: * WITH THREE LETTERS (ABCDEFGHIJKLMNOPQRSTUVWXY$) FOLLOWED ! 1753: * BY TWO LETTERS OR DIGITS. ! 1754: * THE LETTER Z MAY NOT BE USED IN MINIMAL SYMBOLS BUT $ IS ! 1755: * PERMITTED. ! 1756: * FOR IMPLEMENTATIONS WHERE $ MAY NOT APPEAR IN THE ! 1757: * TARGET CODE , A SIMPLE SUBSTITUTION OF Z FOR $ ! 1758: * MAY THUS BE MADE WITHOUT RISK OF PRODUCING NON-UNIQUE ! 1759: * SYMBOLS. ! 1760: * THE LETTER Z IS HOWEVER PERMITTED IN OPCODE MNEMONICS AND ! 1761: * IN COMMENTS. ! 1762: * ! 1763: * MINIMAL STATEMENTS ARE IN A FIXED FORMAT AS FOLLOWS. ! 1764: * ! 1765: * COLS 1-5 LABEL IF ANY (ELSE BLANK) ! 1766: * ! 1767: * COLS 6-7 ALWAYS BLANK ! 1768: * ! 1769: * COLS 8-10 OPERATION MNEMONIC ! 1770: * ! 1771: * COLS 11-12 BLANKS ! 1772: * ! 1773: * COLS 13-28 OPERAND FIELD, TERMINATED BY A ! 1774: * BLANK. MAY OCCASIONALLY ! 1775: * EXTEND PAST COLUMN 28. ! 1776: * ! 1777: * COLS 30-64 COMMENT. ALWAYS SEPARATED FROM THE ! 1778: * OPERAND FIELD BY AT LEAST ONE BLANK ! 1779: * MAY OCCASIONALLY START AFTER COLUMN ! 1780: * 30 IF THE OPERAND EXTENDS PAST 28. ! 1781: * A SPECIAL EXCEPTION OCCURS FOR THE ! 1782: * IFF INSTRUCTION, WHOSE COMMENT MAY ! 1783: * BE ONLY 20 CHARACTERS LONG (30-49). ! 1784: * ! 1785: * COLS 65 ON UNUSED ! 1786: * ! 1787: * ! 1788: * COMMENT LINES HAVE THE FOLLOWING FORMAT ! 1789: * ! 1790: * COL 1 ASTERISK ! 1791: * ! 1792: * COLS 2-7 BLANK ! 1793: * ! 1794: * COLS 8-64 ARBITRARY TEXT, RESTRICTED TO THE ! 1795: * FORTRAN CHARACTER SET. ! 1796: * ! 1797: * ! 1798: * THE FORTRAN CHARACTER SET IS A-Z 0-9 =,$.(*)-/+ ! 1799: EJC ! 1800: * ! 1801: * SECTION 12 - PROGRAM EXECUTION ! 1802: * ! 1803: * EXECUTION OF THE PROGRAM BEGINS WITH THE FIRST ! 1804: * INSTRUCTION IN THE PROGRAM SECTION. ! 1805: * ! 1806: * IN ADDITION TO THE FIXED LENGTH MEMORY REGIONS DEFINED ! 1807: * BY THE ASSEMBLY, THERE ARE TWO DYNAMICALLY ALLOCATED ! 1808: * MEMORY REGIONS AS FOLLOWS. ! 1809: * ! 1810: * DATA AREA THIS IS AN AREA AVAILABLE TO THE ! 1811: * PROGRAM FOR GENERAL STORAGE OF DATA ! 1812: * ANY DATA VALUE MAY BE STORED IN ! 1813: * THIS AREA EXCEPT INSTRUCTIONS. ! 1814: * IN SOME IMPLEMENTATIONS, IT MAY BE ! 1815: * POSSIBLE TO INCREASE THE SIZE OF ! 1816: * THIS AREA DYNAMICALLY BY ADDING ! 1817: * WORDS AT THE TOP END WITH A CALL ! 1818: * TO A SYSTEM PROCEDURE. ! 1819: * ! 1820: * STACK AREA THIS REGION OF MEMORY HOLDS ! 1821: * THE STACK USED FOR SUBROUTINE CALLS ! 1822: * AND OTHER STORAGE OF ONE WORD ! 1823: * INTEGER VALUES (ADDRESSES). THIS ! 1824: * IS THE STACK ASSOCIATED WITH ! 1825: * INDEX REGISTER XS. ! 1826: * ! 1827: * THE LOCATIONS AND SIZES OF THESE AREAS ARE SPECIFIED ! 1828: * BY THE VALUES IN THE REGISTERS AT THE START OF PROGRAM ! 1829: * EXECUTION AS FOLLOWS. ! 1830: * ! 1831: * (XS) ADDRESS ONE PAST THE STACK BASE. ! 1832: * E.G. IF XS IS 23456, A D-STACK WILL ! 1833: * OCCUPY WORDS 23455,23454,... ! 1834: * WHEREAS A U-STACK WILL OCCUPY ! 1835: * 23457,23458,... ! 1836: * ! 1837: * (XR) ADDRESS OF THE FIRST WORD ! 1838: * IN THE DATA AREA ! 1839: * ! 1840: * (XL) ADDRESS OF THE LAST WORD IN THE ! 1841: * DATA AREA. ! 1842: * ! 1843: * ! 1844: * (WA,WB,WC,IA,RA,CP) ZERO ! 1845: * ! 1846: * THERE IS NO EXPLICIT WAY TO TERMINATE THE EXECUTION OF A ! 1847: * PROGRAM. THIS FUNCTION IS PERFORMED BY AN APPROPRIATE ! 1848: * SYSTEM PROCEDURE REFERENCED WITH THE SYSEJ INSTRUCTION.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.