cdc:nos2.source:opl.opl871:deck:coding
Deck CODING
1 Modification
Listing Sections
- Deck CODING Start
- Deck CODING Part 1 (Line 1967)
Source
Seq # *Modification Id* Act ----------------------------+ 00001 M01S00001.coding +++|*NOSEQ 00002 M01S00002.coding +++|*WIDTH 132 00003 M01S00003.coding +++|1 PAGE 1 00004 M01S00004.coding +++| 00005 M01S00005.coding +++| 00006 M01S00006.coding +++| 00007 M01S00007.coding +++| 00008 M01S00008.coding +++| 00009 M01S00009.coding +++| 00010 M01S00010.coding +++| 00011 M01S00011.coding +++| 00012 M01S00012.coding +++| 00013 M01S00013.coding +++| 00014 M01S00014.coding +++| 00015 M01S00015.coding +++| 00016 M01S00016.coding +++| 00017 M01S00017.coding +++| 00018 M01S00018.coding +++| 00019 M01S00019.coding +++| ------------------------------------------------------------ 00020 M01S00020.coding +++| ! ! 00021 M01S00021.coding +++| ! NOS COMPASS PROGRAMMING STANDARD ! 00022 M01S00022.coding +++| ! ! 00023 M01S00023.coding +++| ------------------------------------------------------------ 00024 M01S00024.coding +++| 00025 M01S00025.coding +++| 00026 M01S00026.coding +++| 00027 M01S00027.coding +++| 00028 M01S00028.coding +++| 00029 M01S00029.coding +++| 00030 M01S00030.coding +++| 00031 M01S00031.coding +++| 00032 M01S00032.coding +++| 00033 M01S00033.coding +++| 00034 M01S00034.coding +++| 00035 M01S00035.coding +++| 00036 M01S00036.coding +++| 00037 M01S00037.coding +++| 00038 M01S00038.coding +++| 00039 M01S00039.coding +++|1 PAGE 2 00040 M01S00040.coding +++| 00041 M01S00041.coding +++| 00042 M01S00042.coding +++| TABLE OF CONTENTS 00043 M01S00043.coding +++| 00044 M01S00044.coding +++| 00045 M01S00045.coding +++| 1.0 INTRODUCTION . . . . . . . . . . . . . . . . . . . . . 6 00046 M01S00046.coding +++| 1.1 SCOPE OF DOCUMENT . . . . . . . . . . . . . . . . . . . 6 00047 M01S00047.coding +++| 1.1.1 PURPOSE . . . . . . . . . . . . . . . . . . . . . . 6 00048 M01S00048.coding +++| 1.1.2 SCOPE OF USE . . . . . . . . . . . . . . . . . . . 6 00049 M01S00049.coding +++| 1.2 CONFORMANCE AND ENFORCEMENT . . . . . . . . . . . . . . 6 00050 M01S00050.coding +++| 00051 M01S00051.coding +++| 2.0 DOCUMENTATION . . . . . . . . . . . . . . . . . . . . . 7 00052 M01S00052.coding +++| 2.1 INTRODUCTION . . . . . . . . . . . . . . . . . . . . . 7 00053 M01S00053.coding +++| 2.1.1 DESIGN OVERVIEW . . . . . . . . . . . . . . . . . . 7 00054 M01S00054.coding +++| 2.1.2 EXTERNAL INTERFACE . . . . . . . . . . . . . . . . 7 00055 M01S00055.coding +++| 2.1.3 INTERNAL OPERATION . . . . . . . . . . . . . . . . 8 00056 M01S00056.coding +++| 2.1.4 DETAILED CODE ANALYSIS . . . . . . . . . . . . . . 8 00057 M01S00057.coding +++| 2.2 GENERAL REQUIREMENTS . . . . . . . . . . . . . . . . . 9 00058 M01S00058.coding +++| 2.2.1 ABBREVIATIONS . . . . . . . . . . . . . . . . . . . 9 00059 M01S00059.coding +++| 2.2.2 PUNCTUATION . . . . . . . . . . . . . . . . . . . . 9 00060 M01S00060.coding +++| 2.2.3 FORMATS . . . . . . . . . . . . . . . . . . . . . . 10 00061 M01S00061.coding +++| 2.2.4 FORMAT OF ITEMIZED DOCUMENTATION . . . . . . . . . 11 00062 M01S00062.coding +++| 2.3 PROGRAM LEVEL DOCUMENTATION . . . . . . . . . . . . . . 11 00063 M01S00063.coding +++| 2.3.1 OVERVIEW . . . . . . . . . . . . . . . . . . . . . 11 00064 M01S00064.coding +++| 2.3.2 EXTERNAL . . . . . . . . . . . . . . . . . . . . . 12 00065 M01S00065.coding +++| 2.3.3 INTERNAL . . . . . . . . . . . . . . . . . . . . . 12 00066 M01S00066.coding +++| 2.4 SUBROUTINE LEVEL DOCUMENTATION . . . . . . . . . . . . 13 00067 M01S00067.coding +++| 2.4.1 ENTRY CONDITIONS (ENTRY) . . . . . . . . . . . . . 14 00068 M01S00068.coding +++| 2.4.2 EXIT CONDITIONS (EXIT) . . . . . . . . . . . . . . 14 00069 M01S00069.coding +++| 2.4.3 ERROR EXIT CONDITIONS (ERROR) . . . . . . . . . . . 14 00070 M01S00070.coding +++| 2.4.4 REGISTER OR DIRECT CELL USAGE (USES) . . . . . . . 15 00071 M01S00071.coding +++| 2.4.5 ROUTINES CALLED (CALLS) . . . . . . . . . . . . . . 16 00072 M01S00072.coding +++| 2.4.6 COMMON OR SYSTEM DECKS REQUIRED (XREF) . . . . . . 16 00073 M01S00073.coding +++| 2.4.7 MACROS CALLED (MACROS) . . . . . . . . . . . . . . 16 00074 M01S00074.coding +++| 2.4.8 ALLOCATED REGISTERS OR DIRECT CELLS (DEFINE) . . . 16 00075 M01S00075.coding +++| 2.4.9 TIMING CONSIDERATIONS (TIMING) . . . . . . . . . . 16 00076 M01S00076.coding +++| 2.4.10 PROGRAMMING NOTES (NOTES). . . . . . . . . . . . . 16 00077 M01S00077.coding +++| 2.5 CODE LEVEL DOCUMENTATION . . . . . . . . . . . . . . . 17 00078 M01S00078.coding +++| 2.5.1 STAND-ALONE COMMENTS . . . . . . . . . . . . . . . 17 00079 M01S00079.coding +++| 2.5.2 EMBEDDED COMMENTS . . . . . . . . . . . . . . . . . 17 00080 M01S00080.coding +++| 2.6 MACRO LEVEL DOCUMENTATION . . . . . . . . . . . . . . . 18 00081 M01S00081.coding +++| 2.6.1 ENTRY CONDITIONS (ENTRY) . . . . . . . . . . . . . 19 00082 M01S00082.coding +++| 2.6.2 EXIT CONDITIONS (EXIT) . . . . . . . . . . . . . . 19 00083 M01S00083.coding +++| 2.6.3 REGISTER OR DIRECT CELL USAGE (USES) . . . . . . . 20 00084 M01S00084.coding +++| 2.6.4 ROUTINES CALLED (CALLED) . . . . . . . . . . . . . 20 00085 M01S00085.coding +++| 2.6.5 MACROS CALLED (MACROS) . . . . . . . . . . . . . . 20 00086 M01S00086.coding +++| 2.7 DOCUMENTATION EXAMPLES . . . . . . . . . . . . . . . . 20 00087 M01S00087.coding +++| 2.7.1 PROGRAM LEVEL . . . . . . . . . . . . . . . . . . . 20 00088 M01S00088.coding +++| 2.7.2 SUBROUTINE LEVEL (PP CODE) . . . . . . . . . . . . 21 00089 M01S00089.coding +++| 2.7.3 SUBROUTINE LEVEL (CP CODE) . . . . . . . . . . . . 22 00090 M01S00090.coding +++| 2.7.4 MACRO LEVEL DOCUMENTATION . . . . . . . . . . . . . 23 00091 M01S00091.coding +++| 00092 M01S00092.coding +++|1 PAGE 3 00093 M01S00093.coding +++| 00094 M01S00094.coding +++| 00095 M01S00095.coding +++| 3.0 CODING . . . . . . . . . . . . . . . . . . . . . . . . 24 00096 M01S00096.coding +++| 3.1 CARD/LINE LAYOUTS . . . . . . . . . . . . . . . . . . . 24 00097 M01S00097.coding +++| 3.1.1 COMPASS OPERATION CARDS . . . . . . . . . . . . . . 24 00098 M01S00098.coding +++| 3.1.2 COMPASS COMMENT CARDS . . . . . . . . . . . . . . . 24 00099 M01S00099.coding +++| 3.2 PROGRAM LAYOUT . . . . . . . . . . . . . . . . . . . . 24 00100 M01S00100.coding +++| 3.2.1 GROUP 1 INSTRUCTIONS . . . . . . . . . . . . . . . 25 00101 M01S00101.coding +++| 3.2.1.1 PERIPHERAL PROCESSOR PROGRAMS . . . . . . . . . . 25 00102 M01S00102.coding +++| 3.2.1.2 CENTRAL PROCESSOR PROGRAMS . . . . . . . . . . . 25 00103 M01S00103.coding +++| 3.2.1.3 COMMON DECKS . . . . . . . . . . . . . . . . . . 26 00104 M01S00104.coding +++| 3.2.2 PROGRAM LEVEL DOCUMENTATION . . . . . . . . . . . . 26 00105 M01S00105.coding +++| 3.2.3 MACRO DEFINITIONS . . . . . . . . . . . . . . . . . 26 00106 M01S00106.coding +++| 3.2.4 INSTALLATION SYMBOL DEFINITIONS . . . . . . . . . . 26 00107 M01S00107.coding +++| 3.2.5 LOCAL SYMBOL DEFINITIONS . . . . . . . . . . . . . 26 00108 M01S00108.coding +++| 3.2.6 GLOBAL MEMORY DEFINITIONS . . . . . . . . . . . . . 27 00109 M01S00109.coding +++| 3.2.7 MAIN LOOP . . . . . . . . . . . . . . . . . . . . . 27 00110 M01S00110.coding +++| 3.2.8 PRIMARY SUBROUTINES . . . . . . . . . . . . . . . . 27 00111 M01S00111.coding +++| 3.2.9 SECONDARY SUBROUTINES . . . . . . . . . . . . . . . 27 00112 M01S00112.coding +++| 3.2.10 WORKING STORAGE AND BUFFERS . . . . . . . . . . . 27 00113 M01S00113.coding +++| 3.2.11 INITIALIZATION CODE . . . . . . . . . . . . . . . 27 00114 M01S00114.coding +++| 3.2.12 PROGRAM TERMINATION . . . . . . . . . . . . . . . 28 00115 M01S00115.coding +++| 3.3 INSTRUCTION USE, FORMAT AND PARAMETERS . . . . . . . . 28 00116 M01S00116.coding +++| 3.3.1 REGISTER USE AND SPECIFICATION . . . . . . . . . . 28 00117 M01S00117.coding +++| 3.3.1.1 B0 REGISTER USE . . . . . . . . . . . . . . . . . 28 00118 M01S00118.coding +++| 3.3.1.2 B1 REGISTER USE . . . . . . . . . . . . . . . . . 28 00119 M01S00119.coding +++| 3.3.1.3 PACK AND NOMINAL SHIFT X REGISTERS . . . . . . . 29 00120 M01S00120.coding +++| 3.3.1.4 UNPACK AND NORMALIZE X REGISTERS . . . . . . . . 29 00121 M01S00121.coding +++| 3.3.2 MULTIPLE LOGICAL TESTS . . . . . . . . . . . . . . 29 00122 M01S00122.coding +++| 3.3.3 SHIFT INSTRUCTION PARAMETERS . . . . . . . . . . . 29 00123 M01S00123.coding +++| 3.3.4 BOOLEAN MASK USAGE . . . . . . . . . . . . . . . . 31 00124 M01S00124.coding +++| 3.3.5 RELATIVE ADDRESSING . . . . . . . . . . . . . . . . 31 00125 M01S00125.coding +++| 3.3.6 JUMP INSTRUCTION USE . . . . . . . . . . . . . . . 31 00126 M01S00126.coding +++| 3.3.7 SUBROUTINE ENTRY . . . . . . . . . . . . . . . . . 32 00127 M01S00127.coding +++| 3.3.8 CPU CODE OPTIMIZATION . . . . . . . . . . . . . . . 33 00128 M01S00128.coding +++| 3.3.9 CLEARING PP MEMORY . . . . . . . . . . . . . . . . 34 00129 M01S00129.coding +++| 3.3.10 INSTRUCTION MODIFICATION . . . . . . . . . . . . . 34 00130 M01S00130.coding +++| 3.3.11 COMMON DECK REGISTER USAGE . . . . . . . . . . . . 37 00131 M01S00131.coding +++| 3.3.12 PP ADK, LDK, LMK, LPK, SBK MACRO USAGE . . . . . . 37 00132 M01S00132.coding +++| 3.4 DATA USE, FORMAT AND PARAMETERS . . . . . . . . . . . . 37 00133 M01S00133.coding +++| 3.4.1 LITERALS . . . . . . . . . . . . . . . . . . . . . 37 00134 M01S00134.coding +++| 3.4.2 DATA FORMATS . . . . . . . . . . . . . . . . . . . 37 00135 M01S00135.coding +++| 3.4.3 TABLE GENERATION . . . . . . . . . . . . . . . . . 38 00136 M01S00136.coding +++| 3.4.4 DIRECT CELL USE . . . . . . . . . . . . . . . . . . 38 00137 M01S00137.coding +++| 3.4.5 BUFFER DEFINITIONS . . . . . . . . . . . . . . . . 39 00138 M01S00138.coding +++|1 PAGE 4 00139 M01S00139.coding +++| 00140 M01S00140.coding +++| 00141 M01S00141.coding +++| 3.5 DATA/CODE NAMING TERMINOLOGY . . . . . . . . . . . . . 39 00142 M01S00142.coding +++| 3.5.1 USE OF CONDITION TERMINOLOGY . . . . . . . . . . . 40 00143 M01S00143.coding +++| 3.5.2 TAGS WITHIN SUBROUTINES . . . . . . . . . . . . . . 40 00144 M01S00144.coding +++| 3.5.3 TAGS ON DATA . . . . . . . . . . . . . . . . . . . 41 00145 M01S00145.coding +++| 3.5.3.1 DIRECT CELLS . . . . . . . . . . . . . . . . . . 41 00146 M01S00146.coding +++| 3.5.3.2 CODE CONTROL NAMES . . . . . . . . . . . . . . . 41 00147 M01S00147.coding +++| 3.5.3.3 TABLE NAMES . . . . . . . . . . . . . . . . . . . 41 00148 M01S00148.coding +++| 3.5.3.4 GLOBAL MEMORY LOCATIONS . . . . . . . . . . . . . 42 00149 M01S00149.coding +++| 3.5.4 CONSTANTS USED AS INSTRUCTIONS . . . . . . . . . . 42 00150 M01S00150.coding +++| 3.5.5 IF/ELSE/ENDIF SYMBOLS . . . . . . . . . . . . . . . 42 00151 M01S00151.coding +++| 3.5.6 NON-LOCAL MACRO SYMBOLS . . . . . . . . . . . . . . 42 00152 M01S00152.coding +++| 3.5.7 LOW CORE LOCATION SYMBOLS . . . . . . . . . . . . . 43 00153 M01S00153.coding +++| 3.5.8 CONTROL POINT AREA LOCATION SYMBOLS . . . . . . . . 43 00154 M01S00154.coding +++| 3.5.9 MONITOR FUNCTION SYMBOLS . . . . . . . . . . . . . 43 00155 M01S00155.coding +++| 3.5.10 NEGATIVE FIELD LENGTH SYMBOLS . . . . . . . . . . 43 00156 M01S00156.coding +++| 3.6 PSEUDO INSTRUCTION USE, FORMAT AND PARAMETERS . . . . . 43 00157 M01S00157.coding +++| 3.6.1 BASE AND POST RADIX USE . . . . . . . . . . . . . . 43 00158 M01S00158.coding +++| 3.6.2 EXTERNAL REFERENCES . . . . . . . . . . . . . . . . 43 00159 M01S00159.coding +++| 3.6.3 SPACE CARD FORMAT . . . . . . . . . . . . . . . . . 44 00160 M01S00160.coding +++| 3.6.4 CONDITIONAL CODE . . . . . . . . . . . . . . . . . 44 00161 M01S00161.coding +++| 3.6.5 MACROS . . . . . . . . . . . . . . . . . . . . . . 45 00162 M01S00162.coding +++| 3.6.6 DIS PSEUDO INSTRUCTION . . . . . . . . . . . . . . 45 00163 M01S00163.coding +++| 3.7 TESTS FOR OVERFLOW . . . . . . . . . . . . . . . . . . 46 00164 M01S00164.coding +++| 3.7.1 CM LOADS . . . . . . . . . . . . . . . . . . . . . 46 00165 M01S00165.coding +++| 3.7.2 TABLE OVERFLOW . . . . . . . . . . . . . . . . . . 46 00166 M01S00166.coding +++| 3.7.3 MASS STORAGE LOADS . . . . . . . . . . . . . . . . 47 00167 M01S00167.coding +++| 3.7.4 OVERLAY LOADS . . . . . . . . . . . . . . . . . . . 47 00168 M01S00168.coding +++| 3.8 RELOCATABLE CPU CODE . . . . . . . . . . . . . . . . . 47 00169 M01S00169.coding +++| 3.9 ROUTINE/SUBROUTINE . . . . . . . . . . . . . . . . . . 48 00170 M01S00170.coding +++| 00171 M01S00171.coding +++| 4.0 MISCELLANEOUS . . . . . . . . . . . . . . . . . . . . . 48 00172 M01S00172.coding +++| 4.1 PROGRAM NAMING . . . . . . . . . . . . . . . . . . . . 48 00173 M01S00173.coding +++| 4.1.1 LENGTH OF PROGRAM NAME . . . . . . . . . . . . . . 48 00174 M01S00174.coding +++| 4.1.2 RESERVED NAMES . . . . . . . . . . . . . . . . . . 49 00175 M01S00175.coding +++| 4.1.3 COMMON DECK NAMES . . . . . . . . . . . . . . . . . 49 00176 M01S00176.coding +++| 4.2 CODE TRANSMITTAL RULES . . . . . . . . . . . . . . . . 50 00177 M01S00177.coding +++| 4.2.1 GENERAL RULES . . . . . . . . . . . . . . . . . . . 50 00178 M01S00178.coding +++| 4.2.2 MODSET FORMAT . . . . . . . . . . . . . . . . . . . 50 00179 M01S00179.coding +++| 4.2.2.1 MODSET IDENTIFIER . . . . . . . . . . . . . . . . 51 00180 M01S00180.coding +++| 4.2.2.2 MODSET CORRECTION LETTER . . . . . . . . . . . . 52 00181 M01S00181.coding +++| 4.2.2.3 OVERFLOW . . . . . . . . . . . . . . . . . . . . 52 00182 M01S00182.coding +++| 4.2.2.4 MODSET EXAMPLE . . . . . . . . . . . . . . . . . 52 00183 M01S00183.coding +++| 4.3 INTERFACE CONSIDERATIONS . . . . . . . . . . . . . . . 53 00184 M01S00184.coding +++| 4.3.1 SYSTEM SUPPLIED INTERFACES . . . . . . . . . . . . 54 00185 M01S00185.coding +++| 4.3.2 PARAMETER VALIDATION . . . . . . . . . . . . . . . 54 00186 M01S00186.coding +++| 4.3.3 MEMORY ACCESS . . . . . . . . . . . . . . . . . . . 54 00187 M01S00187.coding +++| 4.3.4 SECURITY . . . . . . . . . . . . . . . . . . . . . 54 00188 M01S00188.coding +++| 4.3.5 RESERVATIONS AND INTERLOCKS . . . . . . . . . . . . 54 00189 M01S00189.coding +++| 4.3.6 DOCUMENTING HARDWARE DEFICIENCIES . . . . . . . . . 55 00190 M01S00190.coding +++| 4.3.7 NEW FUNCTION/LOW CORE IDENTIFIERS . . . . . . . . . 55 00191 M01S00191.coding +++| 4.3.8 DECK INTERDEPENDENCIES . . . . . . . . . . . . . . 55 00192 M01S00192.coding +++|1 PAGE 5 00193 M01S00193.coding +++| 00194 M01S00194.coding +++| 00195 M01S00195.coding +++| 4.4 MODULARITY . . . . . . . . . . . . . . . . . . . . . . 55 00196 M01S00196.coding +++| 4.4.1 PP OVERLAYS . . . . . . . . . . . . . . . . . . . . 55 00197 M01S00197.coding +++| 4.4.2 HELPER PP-S . . . . . . . . . . . . . . . . . . . . 56 00198 M01S00198.coding +++| 4.4.3 COMMON DECKS . . . . . . . . . . . . . . . . . . . 56 00199 M01S00199.coding +++| 4.5 DAYFILE MESSAGES . . . . . . . . . . . . . . . . . . . 56 00200 M01S00200.coding +++| 4.6 UNHANGABLE CHANNEL CODE . . . . . . . . . . . . . . . . 57 00201 M01S00201.coding +++| 4.7 SPECIAL ENTRY POINTS . . . . . . . . . . . . . . . . . 57 00202 M01S00202.coding +++| 4.8 SCRATCH FILE NAMES . . . . . . . . . . . . . . . . . . 58 00203 M01S00203.coding +++| 00204 M01S00204.coding +++| APPENDIX A - ABBREVIATIONS . . . . . . . . . . . . . . . . 59 00205 M01S00205.coding +++| A.1 GENERAL ABBREVIATIONS . . . . . . . . . . . . . . . . 59 00206 M01S00206.coding +++| A.2 NETWORK HOST PRODUCTS ABBREVIATIONS . . . . . . . . . 60 00207 M01S00207.coding +++| A.3 ACRONYMS . . . . . . . . . . . . . . . . . . . . . . 61 00208 M01S00208.coding +++| 00209 M01S00209.coding +++| APPENDIX B - ERROR MESSAGE GUIDELINES . . . . . . . . . . . 62 00210 M01S00210.coding +++| 00211 M01S00211.coding +++| APPENDIX C - DOCUMENTATION/USABILITY GUIDELINES . . . . . . 64 00212 M01S00212.coding +++| 00213 M01S00213.coding +++| 00214 M01S00214.coding +++|1 PAGE 6 00215 M01S00215.coding +++| 00216 M01S00216.coding +++| 00217 M01S00217.coding +++| 1.0 INTRODUCTION 00218 M01S00218.coding +++| 00219 M01S00219.coding +++| 00220 M01S00220.coding +++| 1.1 SCOPE OF DOCUMENT 00221 M01S00221.coding +++| 00222 M01S00222.coding +++| 00223 M01S00223.coding +++| 1.1.1 PURPOSE 00224 M01S00224.coding +++| 00225 M01S00225.coding +++| This document establishes standard procedures to be used by 00226 M01S00226.coding +++| programmers in the development and maintenance of programs in 00227 M01S00227.coding +++| COMPASS Assembly Language. 00228 M01S00228.coding +++| 00229 M01S00229.coding +++| This document should be used by programmers as a reference manual of 00230 M01S00230.coding +++| standard programming procedures. The implementation of these 00231 M01S00231.coding +++| procedures will increase the efficiency of program development, 00232 M01S00232.coding +++| improve the reliability and maintainability of the program and aid 00233 M01S00233.coding +++| in the training of persons who will be maintaining or using the 00234 M01S00234.coding +++| program. 00235 M01S00235.coding +++| 00236 M01S00236.coding +++| 00237 M01S00237.coding +++| 1.1.2 SCOPE OF USE 00238 M01S00238.coding +++| 00239 M01S00239.coding +++| The procedures defined in this document are applicable to the 00240 M01S00240.coding +++| NETWORK OPERATING SYSTEM (NOS) and its related subsystems. 00241 M01S00241.coding +++| 00242 M01S00242.coding +++| 00243 M01S00243.coding +++| 1.2 CONFORMANCE AND ENFORCEMENT 00244 M01S00244.coding +++| 00245 M01S00245.coding +++| The procedures defined in this document are to be used in all newly 00246 M01S00246.coding +++| developed programs. In existing programs these procedures should be 00247 M01S00247.coding +++| used if they are not inconsistent with the existing procedures. If 00248 M01S00248.coding +++| major changes (such as a rewritten subroutine or a new overlay) are 00249 M01S00249.coding +++| made to a program, these procedures are to be used for the changes. 00250 M01S00250.coding +++| 00251 M01S00251.coding +++| Programs which do not conform to these requirements will be returned 00252 M01S00252.coding +++| to the programmer for correction. 00253 M01S00253.coding +++| 00254 M01S00254.coding +++| 00255 M01S00255.coding +++| 00256 M01S00256.coding +++|1 PAGE 7 00257 M01S00257.coding +++| 00258 M01S00258.coding +++| 00259 M01S00259.coding +++| 2.0 DOCUMENTATION 00260 M01S00260.coding +++| 00261 M01S00261.coding +++| 00262 M01S00262.coding +++| 2.1 INTRODUCTION 00263 M01S00263.coding +++| 00264 M01S00264.coding +++| Documentation is the presentation of information about a program in 00265 M01S00265.coding +++| easily understandable form so that those who need to understand the 00266 M01S00266.coding +++| program do not need to study the program itself. This reduces the 00267 M01S00267.coding +++| time consumed from days or weeks to just minutes or hours. 00268 M01S00268.coding +++| 00269 M01S00269.coding +++| The program documentation presented in this standard is embedded 00270 M01S00270.coding +++| within the source language of each program. The documentation is 00271 M01S00271.coding +++| designed to be extractable by the standard documentation processing 00272 M01S00272.coding +++| program, DOCMENT. This approach serves to unify the program and its 00273 M01S00273.coding +++| documentation, making it easier and more natural to update the 00274 M01S00274.coding +++| documentation as changes are made to the code. 00275 M01S00275.coding +++| 00276 M01S00276.coding +++| The effectiveness of documentation is judged by its success in 00277 M01S00277.coding +++| meeting the needs of those who use it. This introduction defines 00278 M01S00278.coding +++| four distinct needs for documentation which arise during the life of 00279 M01S00279.coding +++| a software product. Sections 2.3 through 2.5 define three levels of 00280 M01S00280.coding +++| documentation (Program Level, Subroutine Level and Code Level) which 00281 M01S00281.coding +++| together meet these needs. 00282 M01S00282.coding +++| 00283 M01S00283.coding +++| Section 2.7 gives examples of proper documentation. 00284 M01S00284.coding +++| 00285 M01S00285.coding +++| 00286 M01S00286.coding +++| 2.1.1 DESIGN OVERVIEW 00287 M01S00287.coding +++| 00288 M01S00288.coding +++| Anyone wanting to know the structure of the system, or some 00289 M01S00289.coding +++| functional area, does not want excessively detailed information 00290 M01S00290.coding +++| which will make the task more difficult. One should be able to ask 00291 M01S00291.coding +++| the question: 00292 M01S00292.coding +++| 00293 M01S00293.coding +++| What is the function of this program? 00294 M01S00294.coding +++| 00295 M01S00295.coding +++| and get an answer that is brief and to the point. It should not 00296 M01S00296.coding +++| contain any information about the input parameters, options, error 00297 M01S00297.coding +++| conditions, or internal workings of the program. 00298 M01S00298.coding +++| 00299 M01S00299.coding +++| 00300 M01S00300.coding +++| 2.1.2 EXTERNAL INTERFACE 00301 M01S00301.coding +++| 00302 M01S00302.coding +++| Anyone who knows the function of a program and wants to know how to 00303 M01S00303.coding +++| interface to the program needs to know the form of the call, what 00304 M01S00304.coding +++| parameters to supply, what information is returned, and what is 00305 M01S00305.coding +++| accomplished. One should be able to ask the question: 00306 M01S00306.coding +++|1 PAGE 8 00307 M01S00307.coding +++| 00308 M01S00308.coding +++| 00309 M01S00309.coding +++| 00310 M01S00310.coding +++| How is this program used? 00311 M01S00311.coding +++| 00312 M01S00312.coding +++| and get an answer that lists the parameter definitions, formats, and 00313 M01S00313.coding +++| contents, the initial conditions of buffers and devices, any status 00314 M01S00314.coding +++| and condition information, a list of other programs called, and a 00315 M01S00315.coding +++| complete list of error codes, error messages issued and parameters 00316 M01S00316.coding +++| returned. A general description of the actions taken should be 00317 M01S00317.coding +++| included for each function performed that is recognizable by the 00318 M01S00318.coding +++| calling program. 00319 M01S00319.coding +++| 00320 M01S00320.coding +++| 00321 M01S00321.coding +++| 2.1.3 INTERNAL OPERATION 00322 M01S00322.coding +++| 00323 M01S00323.coding +++| Anyone working on a modification or enhancement to the system needs 00324 M01S00324.coding +++| a general knowledge of the internal operation of a program. This 00325 M01S00325.coding +++| requires finding out where within the program some function is 00326 M01S00326.coding +++| performed and how it is performed. One should be able to ask the 00327 M01S00327.coding +++| question: 00328 M01S00328.coding +++| 00329 M01S00329.coding +++| How does this program work? 00330 M01S00330.coding +++| 00331 M01S00331.coding +++| and get an answer that includes a description of the logical flow 00332 M01S00332.coding +++| and structure of the program, the algorithms used and the function 00333 M01S00333.coding +++| performed by each overlay or subroutine in the program. 00334 M01S00334.coding +++| 00335 M01S00335.coding +++| 00336 M01S00336.coding +++| 2.1.4 DETAILED CODE ANALYSIS 00337 M01S00337.coding +++| 00338 M01S00338.coding +++| Anyone attempting to modify the program or establish a knowledge of 00339 M01S00339.coding +++| the detailed operation of a program uses the listing. Documentation 00340 M01S00340.coding +++| should be provided in the listing to aid in following the flow of 00341 M01S00341.coding +++| the program without reading all of the code. This documentation 00342 M01S00342.coding +++| consists of comments within the code itself. Comments describing 00343 M01S00343.coding +++| the function of logical groups of instructions should be provided, 00344 M01S00344.coding +++| and comments documenting table structures, data areas, and constants 00345 M01S00345.coding +++| should appear on the instructions which define them. One should be 00346 M01S00346.coding +++| able to ask the question: 00347 M01S00347.coding +++| 00348 M01S00348.coding +++| What should I know when modifying this program? 00349 M01S00349.coding +++| 00350 M01S00350.coding +++| and get back an answer with all the detail needed to make the 00351 M01S00351.coding +++| modifications without adversely affecting existing program functions. 00352 M01S00352.coding +++| 00353 M01S00353.coding +++| 00354 M01S00354.coding +++|1 PAGE 9 00355 M01S00355.coding +++| 00356 M01S00356.coding +++| 00357 M01S00357.coding +++| 2.2 GENERAL REQUIREMENTS 00358 M01S00358.coding +++| 00359 M01S00359.coding +++| 00360 M01S00360.coding +++| 2.2.1 ABBREVIATIONS 00361 M01S00361.coding +++| 00362 M01S00362.coding +++| The abbreviations for technical terms which are to be used in 00363 M01S00363.coding +++| program documentation are listed in Appendix A. All other technical 00364 M01S00364.coding +++| words and phrases are completely spelled out. Routine names and 00365 M01S00365.coding +++| mnemonic names of tables and equipments are not considered 00366 M01S00366.coding +++| abbreviations. 00367 M01S00367.coding +++| 00368 M01S00368.coding +++| A program whose documentation makes extensive use of terms not in 00369 M01S00369.coding +++| this list may define a list of abbreviations and include it in the 00370 M01S00370.coding +++| first section of the internal documentation for the program. Such 00371 M01S00371.coding +++| abbreviations may not be used in the program overview or external 00372 M01S00372.coding +++| documentation. 00373 M01S00373.coding +++| 00374 M01S00374.coding +++| The following standard symbols are used in the documentation when 00375 M01S00375.coding +++| expressing logical and arithmetic comparisons: 00376 M01S00376.coding +++| 00377 M01S00377.coding +++| .NOT. logical inverse 00378 M01S00378.coding +++| .XOR. logical difference (exclusive or) 00379 M01S00379.coding +++| .AND. logical product 00380 M01S00380.coding +++| .OR. Logical sum (inclusive or) 00381 M01S00381.coding +++| .EQ. equal to 00382 M01S00382.coding +++| .NE. Not equal to 00383 M01S00383.coding +++| .LE. Less than or equal to 00384 M01S00384.coding +++| .GE. Greater than or equal to 00385 M01S00385.coding +++| .LT. Less than 00386 M01S00386.coding +++| .GT. Greater than 00387 M01S00387.coding +++| = equal to 00388 M01S00388.coding +++| () contents of 00389 M01S00389.coding +++| (()) contents of the contents of (indirect addressing) 00390 M01S00390.coding +++| 00391 M01S00391.coding +++| 00392 M01S00392.coding +++| 2.2.2 PUNCTUATION 00393 M01S00393.coding +++| 00394 M01S00394.coding +++| All documentation and comment lines contain complete English 00395 M01S00395.coding +++| sentences with correct punctuation. Exceptions are allowed in 00396 M01S00396.coding +++| subroutine headings (see section 2.4) and in embedded comments (see 00397 M01S00397.coding +++| section 2.5.2). Titles (such as "Assembly Constants.") should end 00398 M01S00398.coding +++| with a period but need not be complete sentences. Each comment 00399 M01S00399.coding +++| (excluding embedded comments) should end with a period even if it is 00400 M01S00400.coding +++| not a sentence. 00401 M01S00401.coding +++| 00402 M01S00402.coding +++| Correct punctuation means the same punctuation as required in 00403 M01S00403.coding +++| written English. However, the apostrophe presents problems due to 00404 M01S00404.coding +++| character set and print train differences, and plurals of 00405 M01S00405.coding +++| abbreviations are not readable without upper and lower case. 00406 M01S00406.coding +++| Therefore, plurals and possessive forms of abbreviated terms are to 00407 M01S00407.coding +++| be avoided. Authorized abbreviations (see section 2.2.1) are made 00408 M01S00408.coding +++| plural by adding a hyphen and the letter "s" (e.g. PP-S). 00409 M01S00409.coding +++| 00410 M01S00410.coding +++|1 PAGE 10 00411 M01S00411.coding +++| 00412 M01S00412.coding +++| 00413 M01S00413.coding +++| If an upper case item is to be indicated in the documentation, it is 00414 M01S00414.coding +++| enclosed within asterisks. Upper case is used for names of files, 00415 M01S00415.coding +++| programs, calling parameters, subroutine tags, table names and any 00416 M01S00416.coding +++| other words that are normally capitalized . Accepted abbreviations, 00417 M01S00417.coding +++| acronyms, and programming language names are not enclosed in 00418 M01S00418.coding +++| asterisks even if they would normally be capitalized (refer to 00419 M01S00419.coding +++| Appendix A and section 2.2.1). Tables defined in CMR do not need 00420 M01S00420.coding +++| asterisks (EJT, QFT, etc.). 00421 M01S00421.coding +++| 00422 M01S00422.coding +++| 2.2.3 FORMATS 00423 M01S00423.coding +++| 00424 M01S00424.coding +++| Documentation lines contain only asterisks and blanks in the first 00425 M01S00425.coding +++| ten columns and text in columns 11 through 71. The text is written 00426 M01S00426.coding +++| using correct English except where specifically noted. The format 00427 M01S00427.coding +++| for each of the various types of documentation is shown below. 00428 M01S00428.coding +++| Later sections define the usage of each type of 00429 M01S00429.coding +++| documentation. 00430 M01S00430.coding +++| 00431 M01S00431.coding +++| External - Asterisks in columns 1 through 3 (***). 00432 M01S00432.coding +++| This line indicates that this and the 00433 M01S00433.coding +++| following contiguous comment lines are to be 00434 M01S00434.coding +++| included in the program external 00435 M01S00435.coding +++| documentation. 00436 M01S00436.coding +++| 00437 M01S00437.coding +++| Internal - Asterisks in columns 1 and 2 (**). This 00438 M01S00438.coding +++| line indicates that this and the following 00439 M01S00439.coding +++| contiguous comment lines are to be included 00440 M01S00440.coding +++| in the program internal documentation. 00441 M01S00441.coding +++| 00442 M01S00442.coding +++| Internal Bracket - Asterisks in columns 1 through 4 (****). 00443 M01S00443.coding +++| This line and all other lines up to and 00444 M01S00444.coding +++| including the next occurrence of this line 00445 M01S00445.coding +++| are to be included in the program internal 00446 M01S00446.coding +++| documentation. 00447 M01S00447.coding +++| 00448 M01S00448.coding +++| Other Comment - Asterisk in column 1 (*). This type of 00449 M01S00449.coding +++| comment is used for continuation of the 00450 M01S00450.coding +++| above types of documentation. It is also 00451 M01S00451.coding +++| used for stand-alone comments (see section 00452 M01S00452.coding +++| 2.5.1). 00453 M01S00453.coding +++| 00454 M01S00454.coding +++| Table - Asterisk in column 1, T in column 2 (*T). 00455 M01S00455.coding +++| This line indicates the beginning of table 00456 M01S00456.coding +++| documentation. The *T lines must appear 00457 M01S00457.coding +++| within consecutive comment lines beginning 00458 M01S00458.coding +++| with an external (***) or internal (**) 00459 M01S00459.coding +++| statement. DOCMENT generates a table 00460 M01S00460.coding +++| diagram from the field widths and 00461 M01S00461.coding +++| descriptions in the *T documentation. Note 00462 M01S00462.coding +++| that the field description size (including 00463 M01S00463.coding +++| blanks) cannot exceed the field width size 00464 M01S00464.coding +++| (to prevent truncation). A DOCMENT listing 00465 M01S00465.coding +++| should be made of a program's 00466 M01S00466.coding +++| external/internal documentation when table 00467 M01S00467.coding +++| structures are added (to verify correctness). 00468 M01S00468.coding +++|1 PAGE 11 00469 M01S00469.coding +++| 00470 M01S00470.coding +++| 00471 M01S00471.coding +++| Table Continuation - Asterisk in column 1, T in column 2, comma 00472 M01S00472.coding +++| in column 3 (*T,). This type of comment is 00473 M01S00473.coding +++| used for continuation of table documentation 00474 M01S00474.coding +++| started by a *T line. 00475 M01S00475.coding +++| 00476 M01S00476.coding +++| Blank Comment Line - A line with an asterisk in column 1 (*) and 00477 M01S00477.coding +++| blanks in columns 2 through 71 is called a 00478 M01S00478.coding +++| "Blank Comment Line or "Blank Comment Card" 00479 M01S00479.coding +++| and is used as a separator to improve 00480 M01S00480.coding +++| readability of documentation. 00481 M01S00481.coding +++| 00482 M01S00482.coding +++| 00483 M01S00483.coding +++| 2.2.4 FORMAT OF ITEMIZED DOCUMENTATION 00484 M01S00484.coding +++| 00485 M01S00485.coding +++| Documentation which contains several separate items of information 00486 M01S00486.coding +++| (as found in sections 2.3.1, 2.3.2, 2.3.3 and 2.4) contains a Blank 00487 M01S00487.coding +++| Comment Line between the items. Each item ends with a period. If 00488 M01S00488.coding +++| an item is not applicable,it is omitted from the documentation. The 00489 M01S00489.coding +++| items are placed in the order specified and the last item is 00490 M01S00490.coding +++| followed by a SPACE 4,10 line. 00491 M01S00491.coding +++| 00492 M01S00492.coding +++| 00493 M01S00493.coding +++| 2.3 PROGRAM LEVEL DOCUMENTATION 00494 M01S00494.coding +++| 00495 M01S00495.coding +++| Every program contains comment lines which make up the Program Level 00496 M01S00496.coding +++| documentation (as defined in this section). This level of 00497 M01S00497.coding +++| documentation may be used with the program listing or without it 00498 M01S00498.coding +++| (using extracted documentation produced by a documentation 00499 M01S00499.coding +++| processor). Even without the listing, the Program Level 00500 M01S00500.coding +++| documentation satisfies the Design Overview, External Interface and 00501 M01S00501.coding +++| Internal Operation documentation needs discussed in section 2.1. 00502 M01S00502.coding +++| 00503 M01S00503.coding +++| 00504 M01S00504.coding +++| 2.3.1 OVERVIEW 00505 M01S00505.coding +++| 00506 M01S00506.coding +++| The overview documentation is placed immediately following the 00507 M01S00507.coding +++| COMPASS Group 1 instructions and before any other documentation, 00508 M01S00508.coding +++| macro definitions or executable code (see section 3.2). It consists 00509 M01S00509.coding +++| of an external documentation line (see section 2.2.3) which contains 00510 M01S00510.coding +++| the program name and a brief description of the program, and 00511 M01S00511.coding +++| additional comment lines which contain the following items of data 00512 M01S00512.coding +++| (see section 2.7 for the layout of these items): 00513 M01S00513.coding +++| 00514 M01S00514.coding +++| . Name of author and date written (yy/mm/dd). 00515 M01S00515.coding +++| . Names of authors of major modifications, with dates. 00516 M01S00516.coding +++| . Text of overview of program. 00517 M01S00517.coding +++| 00518 M01S00518.coding +++| The text of the overview should follow the general definition of 00519 M01S00519.coding +++| Design Overview documentation in section 2.1. The objective is to 00520 M01S00520.coding +++| describe the function of the program in general terms. 00521 M01S00521.coding +++| 00522 M01S00522.coding +++| 00523 M01S00523.coding +++|1 PAGE 12 00524 M01S00524.coding +++| 00525 M01S00525.coding +++| 00526 M01S00526.coding +++| 2.3.2 EXTERNAL 00527 M01S00527.coding +++| 00528 M01S00528.coding +++| The external documentation is placed immediately following the 00529 M01S00529.coding +++| overview documentation and before any internal documentation, macro 00530 M01S00530.coding +++| definitions or executable code (see section 3.2). It consists of an 00531 M01S00531.coding +++| external documentation line (see section 2.2.3) and additional 00532 M01S00532.coding +++| comment lines which together contain the following items of data 00533 M01S00533.coding +++| (see section 2.7 for the layout of these items): 00534 M01S00534.coding +++| 00535 M01S00535.coding +++| . Detailed description of functions and options. 00536 M01S00536.coding +++| . Entry conditions, including parameters and initial 00537 M01S00537.coding +++| conditions of buffers and external tables. 00538 M01S00538.coding +++| . Command format. 00539 M01S00539.coding +++| . Exit conditions, including status bits and fields returned. 00540 M01S00540.coding +++| . Errors detected, error codes returned, including subsequent 00541 M01S00541.coding +++| action taken for each. 00542 M01S00542.coding +++| . System errors detected and subsequent action taken. 00543 M01S00543.coding +++| . Other programs called. 00544 M01S00544.coding +++| . Messages issued (including dayfile and operator). 00545 M01S00545.coding +++| 00546 M01S00546.coding +++| The content of this section follows the general definition of 00547 M01S00547.coding +++| External Interface documentation in section 2.1. The objective is 00548 M01S00548.coding +++| to supply information required by a potential user of the program. 00549 M01S00549.coding +++| 00550 M01S00550.coding +++| 00551 M01S00551.coding +++| 2.3.3 INTERNAL 00552 M01S00552.coding +++| 00553 M01S00553.coding +++| The internal documentation describes the internal workings of the 00554 M01S00554.coding +++| program. It may be dispersed throughout a program as desired, 00555 M01S00555.coding +++| however a major portion appears immediately following the external 00556 M01S00556.coding +++| documentation. Internal documentation consists of an internal 00557 M01S00557.coding +++| documentation line (see section 2.2.3) and additional comment lines 00558 M01S00558.coding +++| which together contain the following items of data (see section 00559 M01S00559.coding +++| 2.2.4 for the layout of these items): 00560 M01S00560.coding +++| 00561 M01S00561.coding +++| . System texts required for assembly (other than default). 00562 M01S00562.coding +++| . Direct cell usage (PP programs). 00563 M01S00563.coding +++| . Global register assignments (CPU programs). 00564 M01S00564.coding +++| . Data areas and table formats. 00565 M01S00565.coding +++| . Memory map (if overlays are used). 00566 M01S00566.coding +++| 00567 M01S00567.coding +++| Other items to be included if applicable are: 00568 M01S00568.coding +++| 00569 M01S00569.coding +++| . Techniques or algorithms employed where not obvious. 00570 M01S00570.coding +++| . Timing considerations. 00571 M01S00571.coding +++| . Interlock considerations. 00572 M01S00572.coding +++| . Known limitations to performance or extensibility, such as 00573 M01S00573.coding +++| timing of loops, core size, error-recovery deficiencies. 00574 M01S00574.coding +++| 00575 M01S00575.coding +++|1 PAGE 13 00576 M01S00576.coding +++| 00577 M01S00577.coding +++| 00578 M01S00578.coding +++| Any other information which would aid someone in understanding the 00579 M01S00579.coding +++| internal workings of the program is also provided, including logical 00580 M01S00580.coding +++| flow, structure, and pitfalls to redesign. 00581 M01S00581.coding +++| 00582 M01S00582.coding +++| 00583 M01S00583.coding +++| 2.4 SUBROUTINE LEVEL DOCUMENTATION 00584 M01S00584.coding +++| 00585 M01S00585.coding +++| The heading of any subroutine consists of comment lines giving a 00586 M01S00586.coding +++| brief description of its function, its entry and exit conditions, 00587 M01S00587.coding +++| register or direct cell usage and internal workings. The 00588 M01S00588.coding +++| information contained should be on a level indicated by the 00589 M01S00589.coding +++| complexity of the subroutine. The following items of data should be 00590 M01S00590.coding +++| included (see sections 2.7.2 and 2.7.3 for the layout of these 00591 M01S00591.coding +++| items): 00592 M01S00592.coding +++| 00593 M01S00593.coding +++| . TITLE line with name as subtitle (primary subroutine) 00594 M01S00594.coding +++| . SPACE line (see section 3.6.3) 00595 M01S00595.coding +++| . Internal comment line giving name and title of subroutine 00596 M01S00596.coding +++| . One or more sentences describing the function of the 00597 M01S00597.coding +++| subroutine (optional but desirable). 00598 M01S00598.coding +++| . Entry conditions (list) 00599 M01S00599.coding +++| . Exit conditions (list) 00600 M01S00600.coding +++| . Error exit conditions (list) 00601 M01S00601.coding +++| . Register or direct cell usage (list) 00602 M01S00602.coding +++| . Routines called (list) 00603 M01S00603.coding +++| . Macros called (list) 00604 M01S00604.coding +++| . Description of allocated registers 00605 M01S00605.coding +++| . Timing considerations, if critical 00606 M01S00606.coding +++| . Design, implementation and general information 00607 M01S00607.coding +++| . Two blank lines 00608 M01S00608.coding +++| 00609 M01S00609.coding +++| The title of the subroutine should describe the action performed by 00610 M01S00610.coding +++| the subroutine (for example, Position Mass Storage, Make Queue 00611 M01S00611.coding +++| Entry). This means that titles should always contain a verb. 00612 M01S00612.coding +++| Titles without verbs should be used for groups of subroutines and 00613 M01S00613.coding +++| COMSxxx decks. 00614 M01S00614.coding +++| 00615 M01S00615.coding +++| Defined formats exist for the list of items in the subroutine 00616 M01S00616.coding +++| heading. A keyword appears in column 11, followed by text in column 00617 M01S00617.coding +++| 18. The text is simply a list, rather than complete sentences. Any 00618 M01S00618.coding +++| list requiring more than one line is continued beginning in column 00619 M01S00619.coding +++| 18 (or beyond) of the next comment line. The formats are shown 00620 M01S00620.coding +++| below. Each list ends with a period. Acceptable keywords include: 00621 M01S00621.coding +++| 00622 M01S00622.coding +++| ENTRY Entry conditions. 00623 M01S00623.coding +++| EXIT Exit conditions. 00624 M01S00624.coding +++| ERROR Error exit conditions. 00625 M01S00625.coding +++| USES Register or direct cells destroyed. 00626 M01S00626.coding +++| CALLS Routines called. 00627 M01S00627.coding +++| XREF Common or system decks required. 00628 M01S00628.coding +++|1 PAGE 14 00629 M01S00629.coding +++| 00630 M01S00630.coding +++| 00631 M01S00631.coding +++| MACROS Macros called. 00632 M01S00632.coding +++| DEFINE list of allocatable registers. 00633 M01S00633.coding +++| TIMING Description of timing considerations. 00634 M01S00634.coding +++| NOTES Programming information. 00635 M01S00635.coding +++| 00636 M01S00636.coding +++| Documentation for common decks and zero level overlays should 00637 M01S00637.coding +++| include subroutine level documentation where appropriate. 00638 M01S00638.coding +++| 00639 M01S00639.coding +++| 00640 M01S00640.coding +++| 2.4.1 ENTRY CONDITIONS (ENTRY) 00641 M01S00641.coding +++| 00642 M01S00642.coding +++| Entry conditions include the following items: 00643 M01S00643.coding +++| 00644 M01S00644.coding +++| Registers, direct cells or memory locations that must be set before 00645 M01S00645.coding +++| the subroutine is called. 00646 M01S00646.coding +++| 00647 M01S00647.coding +++| Logical status of channels, files, etc.,(i.e. Channels reserved, 00648 M01S00648.coding +++| files set busy, disk postioned, files positioned) that should exist 00649 M01S00649.coding +++| before the subroutine is called. 00650 M01S00650.coding +++| 00651 M01S00651.coding +++| Only one entry condition may be specified per line. For PP code, 00652 M01S00652.coding +++| the contents of the A register should be described first. 00653 M01S00653.coding +++| 00654 M01S00654.coding +++| 00655 M01S00655.coding +++| 2.4.2 EXIT CONDITIONS (EXIT) 00656 M01S00656.coding +++| 00657 M01S00657.coding +++| Exit conditions include the following items: 00658 M01S00658.coding +++| 00659 M01S00659.coding +++| Registers, direct cells or memory locations that may be used by 00660 M01S00660.coding +++| subsequent routines. 00661 M01S00661.coding +++| 00662 M01S00662.coding +++| Logical status of channels, files, etc., (i.e. Channels reserved, 00663 M01S00663.coding +++| files set busy, disk positioned, files postioned) that exist when 00664 M01S00664.coding +++| the subroutine is exited. 00665 M01S00665.coding +++| 00666 M01S00666.coding +++| Only one exit condition is listed per line. For PP code, the 00667 M01S00667.coding +++| contents of the A register should be described first. 00668 M01S00668.coding +++| 00669 M01S00669.coding +++| Branches (not CALLs) to other routines. 00670 M01S00670.coding +++| 00671 M01S00671.coding +++| 00672 M01S00672.coding +++| 2.4.3 ERROR EXIT CONDITIONS (ERROR) 00673 M01S00673.coding +++| 00674 M01S00674.coding +++| Error exit conditions include all exit conditions that exist when a 00675 M01S00675.coding +++| special termination of the subroutine, such as a jump to an error 00676 M01S00676.coding +++| processor, is taken. Error conditions include the following items: 00677 M01S00677.coding +++| 00678 M01S00678.coding +++| . The label being jumped to and the conditions that caused 00679 M01S00679.coding +++| the special exit. 00680 M01S00680.coding +++| 00681 M01S00681.coding +++|1 PAGE 15 00682 M01S00682.coding +++| 00683 M01S00683.coding +++| 00684 M01S00684.coding +++| . Registers, direct cells or memory locations that may be 00685 M01S00685.coding +++| used by subsequent routines. 00686 M01S00686.coding +++| 00687 M01S00687.coding +++| . Logical status of channels, files, etc., (i.e. Channels 00688 M01S00688.coding +++| reserved, files set busy, disk positioned, files postioned) 00689 M01S00689.coding +++| that exist when the subroutine is exited. 00690 M01S00690.coding +++| 00691 M01S00691.coding +++| Only one exit condition is listed per line. The label being 00692 M01S00692.coding +++| jumped to is documented first with all exit conditions pertaining 00693 M01S00693.coding +++| to that exit following. If these are multiple error exits, each 00694 M01S00694.coding +++| with unique conditions, the conditions should be listed under their 00695 M01S00695.coding +++| own exits. 00696 M01S00696.coding +++| 00697 M01S00697.coding +++| 00698 M01S00698.coding +++| 2.4.4 REGISTER OR DIRECT CELL USAGE (USES) 00699 M01S00699.coding +++| 00700 M01S00700.coding +++| Registers or direct cells used include all registers or direct cells 00701 M01S00701.coding +++| destroyed by that subroutine only. Registers or direct cells 00702 M01S00702.coding +++| destroyed by subroutines or MACROS called by a routine are not 00703 M01S00703.coding +++| listed. 00704 M01S00704.coding +++| 00705 M01S00705.coding +++| For CPU code, the format of the USES block includes a register type 00706 M01S00706.coding +++| (X - operand register, A - address register, B - index register) 00707 M01S00707.coding +++| followed by a sequence of ascending numbers indicating the registers 00708 M01S00708.coding +++| used. The term ALL may be substituted if all registers are used by 00709 M01S00709.coding +++| a routine. 00710 M01S00710.coding +++| 00711 M01S00711.coding +++| Example: 00712 M01S00712.coding +++| 00713 M01S00713.coding +++| * USES X - 0, 1, 6. 00714 M01S00714.coding +++| * A - 1, 6. 00715 M01S00715.coding +++| * B - 3, 7. 00716 M01S00716.coding +++| 00717 M01S00717.coding +++| Indicates the following registers are used: 00718 M01S00718.coding +++| 00719 M01S00719.coding +++| X0, X1, X6, A1, A6, B3, B7. 00720 M01S00720.coding +++| 00721 M01S00721.coding +++| 00722 M01S00722.coding +++| For PP code, single direct cells are listed in alphabetical order 00723 M01S00723.coding +++| followed by multiple direct cells listed in alphabetical order. 00724 M01S00724.coding +++| 00725 M01S00725.coding +++| Example: 00726 M01S00726.coding +++| 00727 M01S00727.coding +++| * USES T1, T2, T5, CM - CM+4, RI - RI+4. 00728 M01S00728.coding +++| 00729 M01S00729.coding +++| The direct cell at PP memory location 0 (T0) is assumed to be used 00730 M01S00730.coding +++| by every subroutine unless otherwise stated in the ENTRY/EXIT 00731 M01S00731.coding +++| conditions. This is because certain instructions, such as CRM and 00732 M01S00732.coding +++| CWM, destroy location zero. 00733 M01S00733.coding +++| 00734 M01S00734.coding +++| 00735 M01S00735.coding +++|1 PAGE 16 00736 M01S00736.coding +++| 00737 M01S00737.coding +++| 00738 M01S00738.coding +++| 2.4.5 ROUTINES CALLED (CALLS) 00739 M01S00739.coding +++| 00740 M01S00740.coding +++| Routines called by a subroutine include all subroutines, common 00741 M01S00741.coding +++| decks and overlays that are explicitly called. Routines called by 00742 M01S00742.coding +++| macros are not to be included. Where the routine called does not 00743 M01S00743.coding +++| return to the calling point, the branch is an EXIT condition rather 00744 M01S00744.coding +++| than a CALL. 00745 M01S00745.coding +++| 00746 M01S00746.coding +++| 2.4.6 COMMON OR SYSTEM DECKS REQUIRED (XREF) 00747 M01S00747.coding +++| 00748 M01S00748.coding +++| When a routine, macro, or common deck requires a particular common 00749 M01S00749.coding +++| or system deck for assembly or for correct execution, it is valuable 00750 M01S00750.coding +++| to list the deck(s) required. 00751 M01S00751.coding +++| 00752 M01S00752.coding +++| Example: 00753 M01S00753.coding +++| 00754 M01S00754.coding +++| * XREF COMCLOD, COMCRTN. 00755 M01S00755.coding +++| 00756 M01S00756.coding +++| 2.4.7 MACROS CALLED (MACROS) 00757 M01S00757.coding +++| 00758 M01S00758.coding +++| Macros called include all macros that are explicitly called by a 00759 M01S00759.coding +++| subroutine. The SUBR macro is always implied to be called and need 00760 M01S00760.coding +++| not be listed. PP macros ADK, LDK, LMK, LPK, SBK, MJP, NJP, PJP, 00761 M01S00761.coding +++| UJP, and ZJP need not be listed. 00762 M01S00762.coding +++| 00763 M01S00763.coding +++| 00764 M01S00764.coding +++| 2.4.8 ALLOCATED REGISTERS OR DIRECT CELLS (DEFINE) 00765 M01S00765.coding +++| 00766 M01S00766.coding +++| Allocated registers are registers (or direct cells for PP code) 00767 M01S00767.coding +++| used for well defined items throughout a particular subroutine or 00768 M01S00768.coding +++| program. 00769 M01S00769.coding +++| 00770 M01S00770.coding +++| 00771 M01S00771.coding +++| 2.4.9 TIMING CONSIDERATIONS (TIMING) 00772 M01S00772.coding +++| 00773 M01S00773.coding +++| Timing considerations should describe any timing limitations that 00774 M01S00774.coding +++| are imposed on the subroutine because of hardware or performance 00775 M01S00775.coding +++| constraints. Care should be taken to express units of time in a 00776 M01S00776.coding +++| manner independent of machine type. For example, units of time 00777 M01S00777.coding +++| expressed in cycles rather than microseconds is more desirable. 00778 M01S00778.coding +++| This is because the same routine may execute faster or slower than 00779 M01S00779.coding +++| stated depending on the type of the PP or CPU it executes in. 00780 M01S00780.coding +++| 00781 M01S00781.coding +++| 00782 M01S00782.coding +++| 2.4.10 PROGRAMMING NOTES (NOTES) 00783 M01S00783.coding +++| 00784 M01S00784.coding +++| This section documents design, implementation and general 00785 M01S00785.coding +++| information that may be useful to other analysts. Information in 00786 M01S00786.coding +++| this section pertains to the subroutine only. 00787 M01S00787.coding +++| 00788 M01S00788.coding +++| 00789 M01S00789.coding +++|1 PAGE 17 00790 M01S00790.coding +++| 00791 M01S00791.coding +++| 00792 M01S00792.coding +++| 2.5 CODE LEVEL DOCUMENTATION 00793 M01S00793.coding +++| 00794 M01S00794.coding +++| All documentation which is not described in one of the preceding 00795 M01S00795.coding +++| sections of this document falls into the category of Code Level 00796 M01S00796.coding +++| documentation. The requirements for this type of documentation vary 00797 M01S00797.coding +++| widely, so few rules can be stated; however, Code Level 00798 M01S00798.coding +++| documentation is necessary and the lack of explicit requirements 00799 M01S00799.coding +++| must not lead to its neglect. 00800 M01S00800.coding +++| 00801 M01S00801.coding +++| Code Level documentation, along with the subroutine headings, must 00802 M01S00802.coding +++| satisfy the need for aid in reading the code. Its content follows 00803 M01S00803.coding +++| the guidelines for Detailed Code Analysis in section 2.1.4. 00804 M01S00804.coding +++| 00805 M01S00805.coding +++| 00806 M01S00806.coding +++| 2.5.1 STAND-ALONE COMMENTS 00807 M01S00807.coding +++| 00808 M01S00808.coding +++| Stand-alone comments are comment lines appearing in-line with code, 00809 M01S00809.coding +++| as opposed to within higher-level documentation previously defined. 00810 M01S00810.coding +++| All stand-alone comments are preceded and followed by one blank 00811 M01S00811.coding +++| line. To reduce the binary size of systems texts, stand-alone 00812 M01S00812.coding +++| comments within macro definitions should be preceeded and followed 00813 M01S00813.coding +++| by a blank comment line. 00814 M01S00814.coding +++| 00815 M01S00815.coding +++| Stand-alone comments describe the function performed by the 00816 M01S00816.coding +++| subsequent section of in-line code. The comments are complete 00817 M01S00817.coding +++| English sentences with correct punctuation, ending with a period. 00818 M01S00818.coding +++| The comments refer to functions and data in external terms, rather 00819 M01S00819.coding +++| than only in octal numbers and bit positions. These comments follow 00820 M01S00820.coding +++| the general requirements found in section 2.2. 00821 M01S00821.coding +++| 00822 M01S00822.coding +++| 00823 M01S00823.coding +++| 2.5.2 EMBEDDED COMMENTS 00824 M01S00824.coding +++| 00825 M01S00825.coding +++| Embedded comments are comments in columns 30-71 of a line assembled 00826 M01S00826.coding +++| by COMPASS, not a comment line. The comment need not be a complete 00827 M01S00827.coding +++| sentence and is not terminated with a period. This type of comment 00828 M01S00828.coding +++| is never continued onto another line. If the intended comment is 00829 M01S00829.coding +++| too long to fit on the single line, it is inserted as a stand-alone 00830 M01S00830.coding +++| comment preceding the area of code to which it applies. Care should 00831 M01S00831.coding +++| be taken not to overflow into column 72. 00832 M01S00832.coding +++| 00833 M01S00833.coding +++| An embedded comment describes the function of the instruction or 00834 M01S00834.coding +++| sequence of instructions on which it appears. (It must be at the 00835 M01S00835.coding +++| beginning of the sequence.) It does not describe the hardware 00836 M01S00836.coding +++| operation being performed, but rather its meaning in the context of 00837 M01S00837.coding +++| the function to be performed by the program. 00838 M01S00838.coding +++| 00839 M01S00839.coding +++|1 PAGE 18 00840 M01S00840.coding +++| 00841 M01S00841.coding +++| 00842 M01S00842.coding +++| With the exception of extremely complex code, it should not be 00843 M01S00843.coding +++| necessary to put embedded comments on every line. Frequently, it is 00844 M01S00844.coding +++| advantageous to omit "obvious" or redundent comments, since it then 00845 M01S00845.coding +++| becomes easier for the casual reader to scan the routine. 00846 M01S00846.coding +++| 00847 M01S00847.coding +++| An embedded comment is required on each jump instruction, to 00848 M01S00848.coding +++| identify the condition being tested (conditional jumps) or the 00849 M01S00849.coding +++| action being taken (unconditional jumps). On jump instructions, the 00850 M01S00850.coding +++| word "JUMP" is superfluous, and is not used. On conditional jumps, 00851 M01S00851.coding +++| the comment must begin with the word "IF" and describes the 00852 M01S00852.coding +++| condition on which the jump will be executed. These comments follow 00853 M01S00853.coding +++| the general requirements found in Section 2.2. 00854 M01S00854.coding +++| 00855 M01S00855.coding +++| An embedded comment is required on all pseudo tests (ERRNZ, ERRPL, 00856 M01S00856.coding +++| etc.). The comment should state the condition for which the test 00857 M01S00857.coding +++| fails and the word "IF" should not be used. 00858 M01S00858.coding +++| 00859 M01S00859.coding +++| Example - ERRNG *-BUFAL CODE OVERFLOWS BUFFER AREA 00860 M01S00860.coding +++| 00861 M01S00861.coding +++| 2.6 MACRO LEVEL DOCUMENTATION 00862 M01S00862.coding +++| 00863 M01S00863.coding +++| The heading of any macro definition consists of comment lines giving 00864 M01S00864.coding +++| a brief description of its function, its entry and exit conditions, 00865 M01S00865.coding +++| register or direct cell usage and internal workings. The 00866 M01S00866.coding +++| information contained should be on a level indicated by the 00867 M01S00867.coding +++| complexity of the macro. The following items of data should be 00868 M01S00868.coding +++| included (see section 2.7.4 for the layout of these items): 00869 M01S00869.coding +++| 00870 M01S00870.coding +++| . SPACE line (see section 3.6.3) 00871 M01S00871.coding +++| . Internal comment line giving name and title of macro 00872 M01S00872.coding +++| . One or more lines of text explaining the purpose and/or 00873 M01S00873.coding +++| function of the macro (optional but desirable). 00874 M01S00874.coding +++| . Format of macro call 00875 M01S00875.coding +++| . Entry conditions (list) 00876 M01S00876.coding +++| . Exit conditions (list) 00877 M01S00877.coding +++| . Register or direct cell usage (list) 00878 M01S00878.coding +++| . Routines called (list) 00879 M01S00879.coding +++| . Macros called (list) 00880 M01S00880.coding +++| . Two blank lines 00881 M01S00881.coding +++| 00882 M01S00882.coding +++| Defined formats exist for the list of items in the macro heading. 00883 M01S00883.coding +++| A keyword appears in column 11, followed by text in column 18. The 00884 M01S00884.coding +++| text is simply a list, rather than complete sentences. Any list 00885 M01S00885.coding +++| requiring more than one line is continued beginning in column 18 (or 00886 M01S00886.coding +++| beyond) of the next comment line. The formats are shown below. 00887 M01S00887.coding +++| Each list ends with a period. 00888 M01S00888.coding +++| 00889 M01S00889.coding +++|1 PAGE 19 00890 M01S00890.coding +++| 00891 M01S00891.coding +++| 00892 M01S00892.coding +++| ENTRY Entry conditions. 00893 M01S00893.coding +++| EXIT Exit conditions. 00894 M01S00894.coding +++| USES Register or direct cells destroyed. 00895 M01S00895.coding +++| CALLS Routines called. 00896 M01S00896.coding +++| MACROS Macros called. 00897 M01S00897.coding +++| 00898 M01S00898.coding +++| 00899 M01S00899.coding +++| 2.6.1 ENTRY CONDITIONS (ENTRY) 00900 M01S00900.coding +++| 00901 M01S00901.coding +++| Entry conditions may include the following items: 00902 M01S00902.coding +++| 00903 M01S00903.coding +++| . Description of macro parameters that are allowed. Complete 00904 M01S00904.coding +++| descriptions of macro parameters include: 00905 M01S00905.coding +++| 1. valid parameter options 00906 M01S00906.coding +++| 2. default values of parameters 00907 M01S00907.coding +++| 3. register optimization, if applicable 00908 M01S00908.coding +++| 00909 M01S00909.coding +++| . Registers, direct cells or memory locations that must be 00910 M01S00910.coding +++| set before the macro is called. Entry conditions may refer 00911 M01S00911.coding +++| to the entry documentation found in subroutines called by 00912 M01S00912.coding +++| the macro. 00913 M01S00913.coding +++| 00914 M01S00914.coding +++| . Logical status of channels, files, etc.,(i.e. Channels 00915 M01S00915.coding +++| reserved, files set busy, disk postioned, files positioned) 00916 M01S00916.coding +++| that should exist before the macro is called. 00917 M01S00917.coding +++| 00918 M01S00918.coding +++| Only one entry condition may be specified per line. For PP code, 00919 M01S00919.coding +++| the contents of the A register should be described first. 00920 M01S00920.coding +++| 00921 M01S00921.coding +++| 00922 M01S00922.coding +++| 2.6.2 EXIT CONDITIONS (EXIT) 00923 M01S00923.coding +++| 00924 M01S00924.coding +++| Exit conditions include the following items: 00925 M01S00925.coding +++| 00926 M01S00926.coding +++| . Registers, direct cells or memory locations that may be 00927 M01S00927.coding +++| used by subsequent routines. Exit conditions may refer to 00928 M01S00928.coding +++| exit conditions in subroutines called by the macro. 00929 M01S00929.coding +++| 00930 M01S00930.coding +++| . Logical status of channels, files, etc., (i.e. Channels 00931 M01S00931.coding +++| reserved, files set busy, disk positioned, files postioned) 00932 M01S00932.coding +++| that exist when the code generated by the macro is exited. 00933 M01S00933.coding +++| 00934 M01S00934.coding +++| . Special terminations of the macro such as jumps to error 00935 M01S00935.coding +++| processors or to any other routines. The label being 00936 M01S00936.coding +++| jumped to and the conditions that cause the special exit 00937 M01S00937.coding +++| should be documented. 00938 M01S00938.coding +++| 00939 M01S00939.coding +++| Only one exit condition is listed per line. For PP code, the 00940 M01S00940.coding +++| contents of the A register should be described first. 00941 M01S00941.coding +++| 00942 M01S00942.coding +++| 00943 M01S00943.coding +++|1 PAGE 20 00944 M01S00944.coding +++| 00945 M01S00945.coding +++| 00946 M01S00946.coding +++| 2.6.3 REGISTER OR DIRECT CELL USAGE (USES) 00947 M01S00947.coding +++| 00948 M01S00948.coding +++| Registers or direct cells used include all registers or direct cells 00949 M01S00949.coding +++| destroyed (or modified) by that macro only. Refer to section 2.4.4 00950 M01S00950.coding +++| for the format of the USES block. 00951 M01S00951.coding +++| 00952 M01S00952.coding +++| 00953 M01S00953.coding +++| 2.6.4 ROUTINES CALLED (CALLS) 00954 M01S00954.coding +++| 00955 M01S00955.coding +++| Routines called by a macro include all subroutines and overlays that 00956 M01S00956.coding +++| are explicitly called. Routines called by macros within the macro 00957 M01S00957.coding +++| definition are not to be included. 00958 M01S00958.coding +++| 00959 M01S00959.coding +++| 00960 M01S00960.coding +++| 2.6.5 MACROS CALLED (MACROS) 00961 M01S00961.coding +++| 00962 M01S00962.coding +++| Macros called include all macros that are explicitly called by a 00963 M01S00963.coding +++| macro definition. 00964 M01S00964.coding +++| 00965 M01S00965.coding +++| 00966 M01S00966.coding +++| 2.7 DOCUMENTATION EXAMPLES 00967 M01S00967.coding +++| 00968 M01S00968.coding +++| These examples are statements of the standard and are intended as 00969 M01S00969.coding +++| further clarification of the required procedures. 00970 M01S00970.coding +++| 00971 M01S00971.coding +++| 00972 M01S00972.coding +++| 2.7.1 PROGRAM LEVEL 00973 M01S00973.coding +++| 00974 M01S00974.coding +++| *** LIBEDIT - LIBRARY EDITING PROGRAM. 00975 M01S00975.coding +++| * 00976 M01S00976.coding +++| * A. B. ORIGINAL. 74/01/01. 00977 M01S00977.coding +++| * A. B. MODIFIER. 75/01/01. 00978 M01S00978.coding +++| * C. D. MODIFIER. 76/01/01. 00979 M01S00979.coding +++| SPACE 4,10 00980 M01S00980.coding +++| *** *LIBEDIT* IS A GENERAL PURPOSE FILE EDITING 00981 M01S00981.coding +++| * PROGRAM CAPABLE OF MODIFYING AND GENERATING 00982 M01S00982.coding +++| * LIBRARY FILES. 00983 M01S00983.coding +++| SPACE 4,10 00984 M01S00984.coding +++| *** COMMAND FORMAT. 00985 M01S00985.coding +++| * . 00986 M01S00986.coding +++| * . 00987 M01S00987.coding +++| . 00988 M01S00988.coding +++| SPACE 4,10 00989 M01S00989.coding +++| *** DAYFILE MESSAGES. 00990 M01S00990.coding +++| * . 00991 M01S00991.coding +++| * . 00992 M01S00992.coding +++| . 00993 M01S00993.coding +++|1 PAGE 21 00994 M01S00994.coding +++| 00995 M01S00995.coding +++| 00996 M01S00996.coding +++| SPACE 4,10 00997 M01S00997.coding +++| *** ACCOUNT FILE MESSAGES. 00998 M01S00998.coding +++| * . 00999 M01S00999.coding +++| * . 01000 M01S01000.coding +++| . 01001 M01S01001.coding +++| SPACE 4,10 01002 M01S01002.coding +++| *** ERROR LOG MESSAGES. 01003 M01S01003.coding +++| * . 01004 M01S01004.coding +++| * . 01005 M01S01005.coding +++| . 01006 M01S01006.coding +++| SPACE 4,10 01007 M01S01007.coding +++| *** OPERATOR MESSAGES. 01008 M01S01008.coding +++| * . 01009 M01S01009.coding +++| * . 01010 M01S01010.coding +++| . 01011 M01S01011.coding +++| SPACE 4,10 01012 M01S01012.coding +++| * COMMON DECKS. 01013 M01S01013.coding +++| . 01014 M01S01014.coding +++| . 01015 M01S01015.coding +++| . 01016 M01S01016.coding +++| SPACE 4,10 01017 M01S01017.coding +++| * MACRO DEFINITIONS. 01018 M01S01018.coding +++| . 01019 M01S01019.coding +++| . 01020 M01S01020.coding +++| . 01021 M01S01021.coding +++| **** ASSEMBLY CONSTANTS. 01022 M01S01022.coding +++| 01023 M01S01023.coding +++| 01024 M01S01024.coding +++| BUFL EQU 1001B OUTPUT BUFFER LENGTH 01025 M01S01025.coding +++| **** 01026 M01S01026.coding +++| SPACE 4,10 01027 M01S01027.coding +++| * GLOBAL STORAGE. 01028 M01S01028.coding +++| . 01029 M01S01029.coding +++| . 01030 M01S01030.coding +++| . 01031 M01S01031.coding +++| 01032 M01S01032.coding +++| 01033 M01S01033.coding +++| 2.7.2 SUBROUTINE LEVEL (PP CODE) 01034 M01S01034.coding +++| 01035 M01S01035.coding +++| TITLE ERROR PROCESSING ROUTINES. 01036 M01S01036.coding +++| LEM SPACE 4,30 01037 M01S01037.coding +++| ** LEM - LIST ERROR MESSAGE. 01038 M01S01038.coding +++| * 01039 M01S01039.coding +++| * *LEM* ISSUES ERROR MESSAGES TO THE JOB AND 01040 M01S01040.coding +++| * SYSTEM DAYFILES AND TO THE ERROR LOG. 01041 M01S01041.coding +++| * 01042 M01S01042.coding +++| * ENTRY (A) = 1 IF SINGLE BIT SECDED ERROR. 01043 M01S01043.coding +++| * = 2 IF STATUS/CONTROL REGISTER 01044 M01S01044.coding +++| * ERROR LIMIT. 01045 M01S01045.coding +++|1 PAGE 22 01046 M01S01046.coding +++| 01047 M01S01047.coding +++| 01048 M01S01048.coding +++| * (SCRA - SCRA+20) = SCR IMAGE. 01049 M01S01049.coding +++| * (NL) = ADDRESS OF NEXT LIST ENTRY. 01050 M01S01050.coding +++| * 01051 M01S01051.coding +++| * EXIT (NL) = UPDATED LIST POINTER. 01052 M01S01052.coding +++| * 01053 M01S01053.coding +++| * ERROR TO *ERR* IF ERROR ENCOUNTERED. 01054 M01S01054.coding +++| * 01055 M01S01055.coding +++| * USES T1, T2, CM - CM+4, FN - FN+4. 01056 M01S01056.coding +++| * 01057 M01S01057.coding +++| * CALLS LMC. 01058 M01S01058.coding +++| * 01059 M01S01059.coding +++| * XREF COMPABZ. 01060 M01S01060.coding +++| * 01061 M01S01061.coding +++| * MACROS MONITOR. 01062 M01S01062.coding +++| * 01063 M01S01063.coding +++| * DEFINE (T2) = FWA OF MESSAGE. 01064 M01S01064.coding +++| * 01065 M01S01065.coding +++| * TIMING A DELAY IS NEEDED TO AVOID FILLING THE 01066 M01S01066.coding +++| * DISK WITH ERROR LOG MESSAGES. 01067 M01S01067.coding +++| 01068 M01S01068.coding +++| 01069 M01S01069.coding +++| LEM SUBR ENTRY/EXIT 01070 M01S01070.coding +++| . 01071 M01S01071.coding +++| . 01072 M01S01072.coding +++| . 01073 M01S01073.coding +++| UJN LEMX RETURN 01074 M01S01074.coding +++| 01075 M01S01075.coding +++| 01076 M01S01076.coding +++| 2.7.3 SUBROUTINE LEVEL (CP CODE) 01077 M01S01077.coding +++| 01078 M01S01078.coding +++| ACS SPACE 4,25 01079 M01S01079.coding +++| ** ACS - ASSEMBLE CHARACTER STRING. 01080 M01S01080.coding +++| * 01081 M01S01081.coding +++| * *ACS* ASSEMBLES A CHARACTER STRING INTO BUFFER 01082 M01S01082.coding +++| * *CBUF*, PACKED 10 CHARACTERS PER CM WORD. 01083 M01S01083.coding +++| * 01084 M01S01084.coding +++| * ENTRY (B6) = FWA OF CHARACTER STRING. 01085 M01S01085.coding +++| * (B7) = LENGTH OF STRING BUFFER. 01086 M01S01086.coding +++| * 01087 M01S01087.coding +++| * EXIT (CBUF - CBUF+20) = CHARACTER STRING. 01088 M01S01088.coding +++| * 01089 M01S01089.coding +++| * ERROR TO *ERR* IF INVALID CHARACTER FOUND. 01090 M01S01090.coding +++| * (X1) = FWA OF ERROR MESSAGE. 01091 M01S01091.coding +++| * 01092 M01S01092.coding +++| * USES X - 0, 1, 6. 01093 M01S01093.coding +++| * A - 1, 6. 01094 M01S01094.coding +++| * B - 6, 7. 01095 M01S01095.coding +++| * 01096 M01S01096.coding +++|1 PAGE 23 01097 M01S01097.coding +++| 01098 M01S01098.coding +++| 01099 M01S01099.coding +++| * CALLS MCI. 01100 M01S01100.coding +++| * 01101 M01S01101.coding +++| * MACROS GETCH. 01102 M01S01102.coding +++| * 01103 M01S01103.coding +++| * DEFINE (X0) = CHARACTER MASK. 01104 M01S01104.coding +++| 01105 M01S01105.coding +++| 01106 M01S01106.coding +++| ACS SUBR ENTRY/EXIT 01107 M01S01107.coding +++| . 01108 M01S01108.coding +++| . 01109 M01S01109.coding +++| . 01110 M01S01110.coding +++| EQ ACSX RETURN 01111 M01S01111.coding +++| 01112 M01S01112.coding +++| 01113 M01S01113.coding +++| 2.7.4 MACRO LEVEL DOCUMENTATION 01114 M01S01114.coding +++| 01115 M01S01115.coding +++| ERROR SPACE 4,10 01116 M01S01116.coding +++| ** ERROR - ERROR PROCESSING MACRO. 01117 M01S01117.coding +++| * 01118 M01S01118.coding +++| * ERROR ADDR 01119 M01S01119.coding +++| * 01120 M01S01120.coding +++| * ENTRY *ADDR* = FWA OF DAYFILE MESSAGE. 01121 M01S01121.coding +++| * 01122 M01S01122.coding +++| * EXIT TO *EPR*. 01123 M01S01123.coding +++| * 01124 M01S01124.coding +++| * USES X - 1. 01125 M01S01125.coding +++| 01126 M01S01126.coding +++| 01127 M01S01127.coding +++| PURGMAC ERROR 01128 M01S01128.coding +++| 01129 M01S01129.coding +++| ERROR MACRO A 01130 M01S01130.coding +++| SX1 A 01131 M01S01131.coding +++| EQ EPR 01132 M01S01132.coding +++| ERROR ENDM 01133 M01S01133.coding +++| 01134 M01S01134.coding +++|1 PAGE 24 01135 M01S01135.coding +++| 01136 M01S01136.coding +++| 01137 M01S01137.coding +++| 3.0 CODING 01138 M01S01138.coding +++| 01139 M01S01139.coding +++| 01140 M01S01140.coding +++| 3.1 LINE LAYOUTS 01141 M01S01141.coding +++| 01142 M01S01142.coding +++| 01143 M01S01143.coding +++| 3.1.1 COMPASS OPERATION LINES 01144 M01S01144.coding +++| 01145 M01S01145.coding +++| The following list of column numbers represent the beginning of each 01146 M01S01146.coding +++| field in a COMPASS coding line. (An exception is allowed for macro 01147 M01S01147.coding +++| definitions in system texts where space is critical. Refer to 01148 M01S01148.coding +++| section 3.6.5.) 01149 M01S01149.coding +++| 01150 M01S01150.coding +++| Column 1 = Continuation field (comma) if required 01151 M01S01151.coding +++| Column 2 = Location field 01152 M01S01152.coding +++| Column 11 = Operation field 01153 M01S01153.coding +++| Column 18 = Address field 01154 M01S01154.coding +++| Column 30 = Comment field 01155 M01S01155.coding +++| Column 73-80 = Reserved 01156 M01S01156.coding +++| 01157 M01S01157.coding +++| If a field is full or overflows into an adjacent field, then two 01158 M01S01158.coding +++| spaces should separate the fields. For readability, a block of 01159 M01S01159.coding +++| comments can be aligned in a column past column 30. Column 72 of 01160 M01S01160.coding +++| the comment field should be blank unless a continuation line is 01161 M01S01161.coding +++| required. 01162 M01S01162.coding +++| 01163 M01S01163.coding +++| 3.1.2 COMPASS COMMENT LINES 01164 M01S01164.coding +++| 01165 M01S01165.coding +++| The following list of column numbers represent the format of a 01166 M01S01166.coding +++| comment line. A full description of where and how to use comment 01167 M01S01167.coding +++| lines is found in section 2. 01168 M01S01168.coding +++| 01169 M01S01169.coding +++| Column 1 = always contains an asterisk 01170 M01S01170.coding +++| Column 2-5 = (see section 2.2.3) 01171 M01S01171.coding +++| Column 6-10 = generally blank 01172 M01S01172.coding +++| Column 11-71 = contains the text of the comment 01173 M01S01173.coding +++| Column 72-80 = reserved 01174 M01S01174.coding +++| 01175 M01S01175.coding +++| 01176 M01S01176.coding +++| 3.2 PROGRAM LAYOUT 01177 M01S01177.coding +++| 01178 M01S01178.coding +++| The following sections define the components of a program in the 01179 M01S01179.coding +++| order they appear within the program. It is not expected or 01180 M01S01180.coding +++| required that every program will consist of all components 01181 M01S01181.coding +++| described. In this discussion a "program" is a relocatable program 01182 M01S01182.coding +++| unit (from "IDENT" to "END"), an entire absolute program or a common 01183 M01S01183.coding +++| deck. A subroutine is a routine within a program. 01184 M01S01184.coding +++| 01185 M01S01185.coding +++| 01186 M01S01186.coding +++|1 PAGE 25 01187 M01S01187.coding +++| 01188 M01S01188.coding +++| 01189 M01S01189.coding +++| 3.2.1 GROUP 1 INSTRUCTIONS 01190 M01S01190.coding +++| 01191 M01S01191.coding +++| Group 1 instructions appear at the beginning of each program and 01192 M01S01192.coding +++| contain the identification and environment information for the 01193 M01S01193.coding +++| program. The following examples define the layout of the Group 1 01194 M01S01194.coding +++| instructions for each type of program. 01195 M01S01195.coding +++| 01196 M01S01196.coding +++| 01197 M01S01197.coding +++| 3.2.1.1 PERIPHERAL PROCESSOR PROGRAMS 01198 M01S01198.coding +++| 01199 M01S01199.coding +++| 1 11 18 30 (Columns) 01200 M01S01200.coding +++| +---------+------+-----------+----- 01201 M01S01201.coding +++| 01202 M01S01202.coding +++| IDENT XXX,ORIGIN 01203 M01S01203.coding +++| MACHINE (optional) 01204 M01S01204.coding +++| PERIPH 01205 M01S01205.coding +++| NOLABEL (deadstart routines) 01206 M01S01206.coding +++| BASE M 01207 M01S01207.coding +++| LIST (optional) 01208 M01S01208.coding +++| SST 01209 M01S01209.coding +++| TITLE XXX - program description. 01210 M01S01210.coding +++| *COMMENT deckname - description.
Line S01211 Modification History | |
---|---|
M01 (Added by) | coding |
M02 (Updated by) | 281l803 |
Seq # *Modification Id* Act ----------------------------+ 01211 M02S01211.281l803 ---| COMMENT COPYRIGHT CONTROL DATA CORPORATION, year. 01212 M01S00001.281l803 +++| COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. year. 01213 M01S01212.coding +++| XXX SPACE 4,10 01214 M01S01213.coding +++| 01215 M01S01214.coding +++| 01216 M01S01215.coding +++| 3.2.1.2 CENTRAL PROCESSOR PROGRAMS 01217 M01S01216.coding +++| 01218 M01S01217.coding +++| 01219 M01S01218.coding +++| IDENT XXXXXXX,FWA program description 01220 M01S01219.coding +++| ABS (optional) 01221 M01S01220.coding +++| MACHINE (optional) 01222 M01S01221.coding +++| LCC (optional) 01223 M01S01222.coding +++| SST (optional) 01224 M01S01223.coding +++| ENTRY YYYY (optional) 01225 M01S01224.coding +++| SYSCOM B1 01226 M01S01225.coding +++| LIST (optional) 01227 M01S01226.coding +++| TITLE XXXXXXX - program description. 01228 M01S01227.coding +++| *COMMENT deckname - description.
Line S01228 Modification History | |
---|---|
M01 (Added by) | coding |
M02 (Updated by) | 281l803 |
Seq # *Modification Id* Act ----------------------------+ 01229 M02S01228.281l803 ---| COMMENT COPYRIGHT CONTROL DATA CORPORATION, year. 01230 M01S00002.281l803 +++| COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. year. 01231 M01S01229.coding +++| XXX SPACE 4,10 01232 M01S01230.coding +++| 01233 M01S01231.coding +++| 01234 M01S01232.coding +++|1 PAGE 26 01235 M01S01233.coding +++| 01236 M01S01234.coding +++| 01237 M01S01235.coding +++| 3.2.1.3 COMMON DECKS 01238 M01S01236.coding +++| 01239 M01S01237.coding +++| 1 11 18 30 (Columns) 01240 M01S01238.coding +++| +---------+------+-----------+----- 01241 M01S01239.coding +++| 01242 M01S01240.coding +++| CTEXT XXXXXXX - common deck description. 01243 M01S01241.coding +++| SPACE 4,10 01244 M01S01242.coding +++| QUAL$ IF -DEF,QUAL$ 01245 M01S01243.coding +++| QUAL XXXXXXX 01246 M01S01244.coding +++| QUAL$ ENDIF 01247 M01S01245.coding +++| BASE B (B = any legal value) 01248 M01S01246.coding +++| CODE C (optional)
Line S01247 Modification History | |
---|---|
M01 (Added by) | coding |
M02 (Updated by) | 281l803 |
Seq # *Modification Id* Act ----------------------------+ 01249 M02S01247.281l803 ---| * COMMENT COPYRIGHT CONTROL DATA CORPORATION, year. 01250 M01S00003.281l803 +++| * COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. year. 01251 M01S01248.coding +++| XXX SPACE 4,10 01252 M01S01249.coding +++| 01253 M01S01250.coding +++| Refer to section 4.4.3 for further information on qualification of 01254 M01S01251.coding +++| common decks. 01255 M01S01252.coding +++| 01256 M01S01253.coding +++| 01257 M01S01254.coding +++| 3.2.2 PROGRAM LEVEL DOCUMENTATION 01258 M01S01255.coding +++| 01259 M01S01256.coding +++| Program level documentation consists of overview, external and 01260 M01S01257.coding +++| internal documentation as described in section 2.3. 01261 M01S01258.coding +++| 01262 M01S01259.coding +++| 01263 M01S01260.coding +++| 3.2.3 MACRO DEFINITIONS 01264 M01S01261.coding +++| 01265 M01S01262.coding +++| The macros are in alphabetical order. Common decks which define 01266 M01S01263.coding +++| macros should be included before local macro definitions in 01267 M01S01264.coding +++| alphabetical order. 01268 M01S01265.coding +++| 01269 M01S01266.coding +++| 01270 M01S01267.coding +++| 3.2.4 INSTALLATION SYMBOL DEFINITIONS 01271 M01S01268.coding +++| 01272 M01S01269.coding +++| Installation symbols are parameters that may be changed by a site 01273 M01S01270.coding +++| when installing a product. These symbols may include buffer 01274 M01S01271.coding +++| lengths, default values, and timing delays. Installation symbols 01275 M01S01272.coding +++| are defined in alphabetical order unless functional order is more 01276 M01S01273.coding +++| meaningful. The installation symbol definition area should be 01277 M01S01274.coding +++| bracketed by internal bracket lines (****). 01278 M01S01275.coding +++| 01279 M01S01276.coding +++| 01280 M01S01277.coding +++| 3.2.5 LOCAL SYMBOL DEFINITIONS 01281 M01S01278.coding +++| 01282 M01S01279.coding +++| Local symbols are parameters that should not be changed by an 01283 M01S01280.coding +++| installation. These symbols may include code generation symbols 01284 M01S01281.coding +++| (QUAL$, DBI$, etc.) And symbols used for cross reference purposes. 01285 M01S01282.coding +++| Local symbols are defined in alphabetical order, unless 01286 M01S01283.coding +++| functional order is more meaningful. 01287 M01S01284.coding +++| 01288 M01S01285.coding +++| 01289 M01S01286.coding +++|1 PAGE 27 01290 M01S01287.coding +++| 01291 M01S01288.coding +++| 01292 M01S01289.coding +++| 3.2.6 GLOBAL MEMORY DEFINITIONS 01293 M01S01290.coding +++| 01294 M01S01291.coding +++| This section of the program is used to define memory that is preset 01295 M01S01292.coding +++| with data. This section may include FETs, tables, and working 01296 M01S01293.coding +++| storage. Global memory definitions are defined in alphabetical 01297 M01S01294.coding +++| order unless functional order is more meaningful. 01298 M01S01295.coding +++| 01299 M01S01296.coding +++| 01300 M01S01297.coding +++| 3.2.7 MAIN LOOP 01301 M01S01298.coding +++| 01302 M01S01299.coding +++| This section of the program contains the major logic and control 01303 M01S01300.coding +++| flow for the program and internal documentation for that flow (see 01304 M01S01301.coding +++| section 2.4). A TITLE line with an appropriate subtitle precedes 01305 M01S01302.coding +++| the first primary subroutine. 01306 M01S01303.coding +++| 01307 M01S01304.coding +++| 01308 M01S01305.coding +++| 3.2.8 PRIMARY SUBROUTINES 01309 M01S01306.coding +++| 01310 M01S01307.coding +++| This section of the program contains the subroutines which are of 01311 M01S01308.coding +++| major importance to the program. They should be in alphabetical 01312 M01S01309.coding +++| order unless there is a logically associated set of subroutines 01313 M01S01310.coding +++| which interact together (in which case these subroutines may be 01314 M01S01311.coding +++| grouped together). Each subroutine contains documentation as 01315 M01S01312.coding +++| described in section 2.4. A TITLE line with an appropriate subtitle 01316 M01S01313.coding +++| precedes the first primary subroutine. 01317 M01S01314.coding +++| 01318 M01S01315.coding +++| 01319 M01S01316.coding +++| 3.2.9 SECONDARY SUBROUTINES 01320 M01S01317.coding +++| 01321 M01S01318.coding +++| This section of the program contains subroutines of minor importance 01322 M01S01319.coding +++| to the program. They should be in alphabetical order unless there 01323 M01S01320.coding +++| is a logically associated set of subroutines which interact together 01324 M01S01321.coding +++| (in which case these subroutines may be grouped together). A TITLE 01325 M01S01322.coding +++| line with an appropriate subtitle precedes the first secondary 01326 M01S01323.coding +++| subroutine. Each subroutine contains documentation as described in 01327 M01S01324.coding +++| section 2.4. 01328 M01S01325.coding +++| 01329 M01S01326.coding +++| Common decks (except those used for initialization) are after the 01330 M01S01327.coding +++| secondary subroutines. Common decks should be listed in 01331 M01S01328.coding +++| alphabetical order whenever possible. 01332 M01S01329.coding +++| 01333 M01S01330.coding +++| 01334 M01S01331.coding +++| 3.2.10 WORKING STORAGE AND BUFFERS 01335 M01S01332.coding +++| 01336 M01S01333.coding +++| This section of the program contains working storage and buffer 01337 M01S01334.coding +++| definitions that are not preset with data. (Refer to section 3.4.5) 01338 M01S01335.coding +++| Use of EQU or BSSN is preferred to BSS since additional code is not 01339 M01S01336.coding +++| added to the binary. 01340 M01S01337.coding +++| 01341 M01S01338.coding +++| 3.2.11 INITIALIZATION CODE 01342 M01S01339.coding +++| 01343 M01S01340.coding +++| Code which may be overlayed after program initialization is included 01344 M01S01341.coding +++| here. 01345 M01S01342.coding +++| 01346 M01S01343.coding +++| 01347 M01S01344.coding +++|1 PAGE 28 01348 M01S01345.coding +++| 01349 M01S01346.coding +++| 01350 M01S01347.coding +++| 3.2.12 PROGRAM TERMINATION 01351 M01S01348.coding +++| 01352 M01S01349.coding +++| All programs end with an "END" statement except common decks which 01353 M01S01350.coding +++| end as follows: 01354 M01S01351.coding +++| 01355 M01S01352.coding +++| 1 11 18 30 (columns) 01356 M01S01353.coding +++| +---------+------+-----------+----- 01357 M01S01354.coding +++| 01358 M01S01355.coding +++| BASE * (if applicable) 01359 M01S01356.coding +++| CODE * (if applicable) 01360 M01S01357.coding +++| QUAL$ IF -DEF,QUAL$ 01361 M01S01358.coding +++| QUAL * 01362 M01S01359.coding +++| YYY EQU /XXXXXXX/YYY (unqualified entry point) 01363 M01S01360.coding +++| . 01364 M01S01361.coding +++| . 01365 M01S01362.coding +++| . 01366 M01S01363.coding +++| QUAL$ ENDIF 01367 M01S01364.coding +++| XXX ENDX 01368 M01S01365.coding +++| 01369 M01S01366.coding +++| If "CODE x" is used at the beginning but "CODE *" is not used at the 01370 M01S01367.coding +++| end of a common deck, it must be explicitly documented in the common 01371 M01S01368.coding +++| deck header. 01372 M01S01369.coding +++| 01373 M01S01370.coding +++| If the main listing title has been changed by use of an IDENT or TTL 01374 M01S01371.coding +++| line, the main title must be restored with a TTL line just before 01375 M01S01372.coding +++| the END line to provide the correct title on the symbolic reference 01376 M01S01373.coding +++| table. 01377 M01S01374.coding +++| 01378 M01S01375.coding +++| 01379 M01S01376.coding +++| 3.3 INSTRUCTION USE, FORMAT, AND PARAMETERS 01380 M01S01377.coding +++| 01381 M01S01378.coding +++| 01382 M01S01379.coding +++| 3.3.1 REGISTER USE AND SPECIFICATION 01383 M01S01380.coding +++| 01384 M01S01381.coding +++| 01385 M01S01382.coding +++| 3.3.1.1 B0 REGISTER USE 01386 M01S01383.coding +++| 01387 M01S01384.coding +++| The B0 register should not be specified in instructions which test B 01388 M01S01385.coding +++| registers. The assembler assumes B0 if the requisite number of B 01389 M01S01386.coding +++| registers is not specified. 01390 M01S01387.coding +++| 01391 M01S01388.coding +++| 01392 M01S01389.coding +++| 3.3.1.2 B1 REGISTER USE 01393 M01S01390.coding +++| 01394 M01S01391.coding +++| The B1 register must always contain the value one (1). The "SYSCOM 01395 M01S01392.coding +++| B1" macro is included in each program to indicate that B1 will 01396 M01S01393.coding +++| contain this value. B1 must be set to 1 immediately upon program 01397 M01S01394.coding +++| entry. B1 is then used by COMPASS in conjunction with the R= psuedo 01398 M01S01395.coding +++| instruction to generate 15 bit instructions rather than 30 bit 01399 M01S01396.coding +++| instructions. 01400 M01S01397.coding +++| 01401 M01S01398.coding +++|1 PAGE 29 01402 M01S01399.coding +++| 01403 M01S01400.coding +++| 01404 M01S01401.coding +++| It should be assumed that calls to external entry points which may 01405 M01S01402.coding +++| be loaded from an external source destroy B1. Therefore, B1 should 01406 M01S01403.coding +++| be reset to one after these calls. 01407 M01S01404.coding +++| 01408 M01S01405.coding +++| 01409 M01S01406.coding +++| 3.3.1.3 PACK AND NOMINAL SHIFT X REGISTERS 01410 M01S01407.coding +++| 01411 M01S01408.coding +++| In the Pack and Nominal Shift instructions, the X register is 01412 M01S01409.coding +++| specified before the B register, as follows: 01413 M01S01410.coding +++| 01414 M01S01411.coding +++| PXi Xk,Bj 01415 M01S01412.coding +++| 01416 M01S01413.coding +++| LXi Xk,Bj 01417 M01S01414.coding +++| 01418 M01S01415.coding +++| 01419 M01S01416.coding +++| 3.3.1.4 UNPACK AND NORMALIZE X REGISTERS 01420 M01S01417.coding +++| 01421 M01S01418.coding +++| In the Unpack and Normalize instructions, the B register is 01422 M01S01419.coding +++| specified in the opcode field immediately following the opcode. 01423 M01S01420.coding +++| 01424 M01S01421.coding +++| UXi,Bj Xk 01425 M01S01422.coding +++| 01426 M01S01423.coding +++| NXi,Bj Xk 01427 M01S01424.coding +++| 01428 M01S01425.coding +++| 01429 M01S01426.coding +++| 3.3.2 MULTIPLE LOGICAL TESTS 01430 M01S01427.coding +++| 01431 M01S01428.coding +++| When a PP program tests a value in the A-register for equality with 01432 M01S01429.coding +++| several possible values, it may be done with a sequence of logical 01433 M01S01430.coding +++| difference (exclusive "or") operations, as follows: 01434 M01S01431.coding +++| 01435 M01S01432.coding +++| LMC AA 01436 M01S01433.coding +++| ZJN XYZ12 IF TYPE AA 01437 M01S01434.coding +++| LMC BB^AA 01438 M01S01435.coding +++| ZJN XYZ24 IF TYPE BB 01439 M01S01436.coding +++| LMC CC^BB 01440 M01S01437.coding +++| ZJN XYZ36 IF TYPE CC 01441 M01S01438.coding +++| 01442 M01S01439.coding +++| The value being tested is specified first in the LMC. 01443 M01S01440.coding +++| 01444 M01S01441.coding +++| Alternatively, a table look-up may be more efficient. 01445 M01S01442.coding +++| 01446 M01S01443.coding +++| 01447 M01S01444.coding +++| 3.3.3 SHIFT INSTRUCTION PARAMETERS 01448 M01S01445.coding +++| 01449 M01S01446.coding +++| Shift counts in shift instructions which are used to test bits, are 01450 M01S01447.coding +++| coded in one of the following forms: 01451 M01S01448.coding +++| 01452 M01S01449.coding +++| A-B (first shift of a word) 01453 M01S01450.coding +++| 01454 M01S01451.coding +++| A-B-AA+BB+M (next shift of the word) 01455 M01S01452.coding +++| 01456 M01S01453.coding +++|1 PAGE 30 01457 M01S01454.coding +++| 01458 M01S01455.coding +++| 01459 M01S01456.coding +++| Where: 01460 M01S01457.coding +++| 01461 M01S01458.coding +++| A = The desired position of a bit in the word. 01462 M01S01459.coding +++| B = The original position of a bit in the word (before any 01463 M01S01460.coding +++| shifts). 01464 M01S01461.coding +++| AA,BB= The A and B parameters from the previous shift of 01465 M01S01462.coding +++| this word. 01466 M01S01463.coding +++| M = Modulus value 01467 M01S01464.coding +++| 01468 M01S01465.coding +++| Note: The modulus values (60 for CPU and 22B for PP) may have to 01469 M01S01466.coding +++| be added to the shift value if the resulting value is not 01470 M01S01467.coding +++| within the legal limits for the instruction. 01471 M01S01468.coding +++| 01472 M01S01469.coding +++| Example: 01473 M01S01470.coding +++| 01474 M01S01471.coding +++| 1. To shift bit 47 to bit 59: 01475 M01S01472.coding +++| 01476 M01S01473.coding +++| LXi 59-47 01477 M01S01474.coding +++| 01478 M01S01475.coding +++| 2. To shift the result of example 1 so that bit 32 of the original 01479 M01S01476.coding +++| register (before any shifts) is in bit 59 of the result: 01480 M01S01477.coding +++| 01481 M01S01478.coding +++| LXi 59-32-59+47 01482 M01S01479.coding +++| 01483 M01S01480.coding +++| 3. To shift the result of example 2 so that bit 58 of the original 01484 M01S01481.coding +++| register (before any shifts) is in bit 59 of the result: 01485 M01S01482.coding +++| 01486 M01S01483.coding +++| LXi 59-58-59+32 01487 M01S01484.coding +++| 01488 M01S01485.coding +++| Example: 01489 M01S01486.coding +++| 01490 M01S01487.coding +++| 1. To shift bit 2 to bit 21B: 01491 M01S01488.coding +++| 01492 M01S01489.coding +++| SHN 21-2 01493 M01S01490.coding +++| 01494 M01S01491.coding +++| 2. To shift the result of example 1 so that bit 5 of the original 01495 M01S01492.coding +++| register (before any shift) is in bit 21 of the result: 01496 M01S01493.coding +++| 01497 M01S01494.coding +++| SHN 21-5-21+2+22 01498 M01S01495.coding +++| 01499 M01S01496.coding +++| A modulus of 22B is needed in this case to avoid executing a right 01500 M01S01497.coding +++| shift (ie. The resultant shift would otherwise be negative.) 01501 M01S01498.coding +++| 01502 M01S01499.coding +++| 01503 M01S01500.coding +++|1 PAGE 31 01504 M01S01501.coding +++| 01505 M01S01502.coding +++| 01506 M01S01503.coding +++| 3.3.4 BOOLEAN MASK USAGE 01507 M01S01504.coding +++| 01508 M01S01505.coding +++| The mask created for use in boolean instructions depends on whether 01509 M01S01506.coding +++| the field of bits to be extracted is in the left or right hand part 01510 M01S01507.coding +++| of the word. If the field of n bits is in the left hand part of the 01511 M01S01508.coding +++| word, use the following method: 01512 M01S01509.coding +++| 01513 M01S01510.coding +++| MXi n 01514 M01S01511.coding +++| BXj Xi*Xk (Xj contains the extracted field) 01515 M01S01512.coding +++| 01516 M01S01513.coding +++| If the field of n bits is in the right hand part of the word, the 01517 M01S01514.coding +++| following method is used: 01518 M01S01515.coding +++| 01519 M01S01516.coding +++| MXi -n 01520 M01S01517.coding +++| BXj -Xi*Xk (Xj contains the extracted field) 01521 M01S01518.coding +++| 01522 M01S01519.coding +++| If the mask is used in more than one way, the first use determines 01523 M01S01520.coding +++| how it is defined. 01524 M01S01521.coding +++| 01525 M01S01522.coding +++| 01526 M01S01523.coding +++| 3.3.5 RELATIVE ADDRESSING 01527 M01S01524.coding +++| 01528 M01S01525.coding +++| Relative addressing (such as *+n and *-n, where n is a numeric 01529 M01S01526.coding +++| value) should not be used except: 01530 M01S01527.coding +++| 01531 M01S01528.coding +++| 1. In timing delays (where *-1 is the only acceptable value). 01532 M01S01529.coding +++| 2. For instruction modification (where *-1 or *-2 are the only 01533 M01S01530.coding +++| acceptable values). 01534 M01S01531.coding +++| 3. In PP code to reference bytes within a CPU word. The relative 01535 M01S01532.coding +++| address must be in one of the following forms: 01536 M01S01533.coding +++| 01537 M01S01534.coding +++| tag+n 01538 M01S01535.coding +++| tag+c*5+n 01539 M01S01536.coding +++| 01540 M01S01537.coding +++| where: 01541 M01S01538.coding +++| 01542 M01S01539.coding +++| tag = base address 01543 M01S01540.coding +++| c = CM word within the PP buffer 01544 M01S01541.coding +++| n = byte within the CM word (0 - 4) 01545 M01S01542.coding +++| 01546 M01S01543.coding +++| 01547 M01S01544.coding +++| 3.3.6 JUMP INSTRUCTION USE 01548 M01S01545.coding +++| 01549 M01S01546.coding +++| Unconditional jumps in CPU code are coded using the EQ instruction 01550 M01S01547.coding +++| so that the instruction stack is not voided. When it is necessary 01551 M01S01548.coding +++| to void the instruction stack the RJ instruction is used. (The RJ 01552 M01S01549.coding +++| is the only instruction which voids the stack on all central 01553 M01S01550.coding +++| processors.) 01554 M01S01551.coding +++| 01555 M01S01552.coding +++| PP jump macros MJP, NJP, PJP, UJP, ZJP can be used to assemble short 01556 M01S01553.coding +++| or long jump as needed; however, these macros should be avoided when 01557 M01S01554.coding +++| branching forward since a long jump sequence is always generated if 01558 M01S01555.coding +++| the jump address has not yet been defined on pass 1 of the assembly. 01559 M01S01556.coding +++| 01560 M01S01557.coding +++|1 PAGE 32 01561 M01S01558.coding +++| 01562 M01S01559.coding +++| 01563 M01S01560.coding +++| A blank line is inserted after each unconditional jump instruction 01564 M01S01561.coding +++| to indicate a break in the program flow. If the unconditional jump 01565 M01S01562.coding +++| occurs at the end of a subroutine, a SPACE line or TITLE line may be 01566 M01S01563.coding +++| used. 01567 M01S01564.coding +++| 01568 M01S01565.coding +++| A blank line is also required after an implied unconditional jump. 01569 M01S01566.coding +++| The following are examples of an implied unconditional jump. 01570 M01S01567.coding +++| 01571 M01S01568.coding +++| Example: 01572 M01S01569.coding +++| 01573 M01S01570.coding +++| A blank line should be inserted after macro calls that break the 01574 M01S01571.coding +++| flow of execution in a sequence of code. 01575 M01S01572.coding +++| 01576 M01S01573.coding +++| . 01577 M01S01574.coding +++| . 01578 M01S01575.coding +++| . 01579 M01S01576.coding +++| NZ X1,tag2 IF comment 01580 M01S01577.coding +++| ABORT TERMINATE 01581 M01S01578.coding +++| (blank line) 01582 M01S01579.coding +++| tag2 SA1 B2 01583 M01S01580.coding +++| . 01584 M01S01581.coding +++| . 01585 M01S01582.coding +++| . 01586 M01S01583.coding +++| 01587 M01S01584.coding +++| Example: 01588 M01S01585.coding +++| 01589 M01S01586.coding +++| When code occurs before the SUBR, there should be a blank line 01590 M01S01587.coding +++| between the code and the SUBR. 01591 M01S01588.coding +++| 01592 M01S01589.coding +++| tag2 LDN 0 comment 01593 M01S01590.coding +++| (blank line) 01594 M01S01591.coding +++| tag SUBR ENTRY/EXIT 01595 M01S01592.coding +++| . 01596 M01S01593.coding +++| tag1 . 01597 M01S01594.coding +++| . 01598 M01S01595.coding +++| UJN tagX RETURN 01599 M01S01596.coding +++| 01600 M01S01597.coding +++| 01601 M01S01598.coding +++| tagA BSS 1 comment 01602 M01S01599.coding +++| 01603 M01S01600.coding +++| When storage locations for a subroutine are defined at the end of 01604 M01S01601.coding +++| the routine, there should be 2 blank lines between the code and the 01605 M01S01602.coding +++| first data tag. 01606 M01S01603.coding +++| 01607 M01S01604.coding +++| 3.3.7 SUBROUTINE ENTRY 01608 M01S01605.coding +++| 01609 M01S01606.coding +++| Each subroutine has one and only one entry point. Exceptions are 01610 M01S01607.coding +++| allowed as follows: 01611 M01S01608.coding +++| 01612 M01S01609.coding +++| If memory limitations in a PP program make this impractical. 01613 M01S01610.coding +++| 01614 M01S01611.coding +++| For termination subroutines (such as error processors). Each 01615 M01S01612.coding +++| entry point should be documented within the subroutine. 01616 M01S01613.coding +++| 01617 M01S01614.coding +++|1 PAGE 33 01618 M01S01615.coding +++| 01619 M01S01616.coding +++| 01620 M01S01617.coding +++| PP and CPU subroutines which are entered via a return jump contain 01621 M01S01618.coding +++| the following instruction at their entry/exit point: 01622 M01S01619.coding +++| 01623 M01S01620.coding +++| tag SUBR ENTRY/EXIT 01624 M01S01621.coding +++| . 01625 M01S01622.coding +++| . 01626 M01S01623.coding +++| . 01627 M01S01624.coding +++| UJN tagX RETURN 01628 M01S01625.coding +++| 01629 M01S01626.coding +++| or, 01630 M01S01627.coding +++| 01631 M01S01628.coding +++| tag SUBR ENTRY/EXIT 01632 M01S01629.coding +++| . 01633 M01S01630.coding +++| . 01634 M01S01631.coding +++| . 01635 M01S01632.coding +++| EQ tagX RETURN 01636 M01S01633.coding +++| 01637 M01S01634.coding +++| 01638 M01S01635.coding +++| A subroutine may also consist of a block of code that is entered by 01639 M01S01636.coding +++| a jump instruction. In this case, the subroutine entry points 01640 M01S01637.coding +++| should be clearly documented using a BSS pseudo-instruction: 01641 M01S01638.coding +++| 01642 M01S01639.coding +++| TAG BSS 0 ENTRY 01643 M01S01640.coding +++| . 01644 M01S01641.coding +++| . 01645 M01S01642.coding +++| . 01646 M01S01643.coding +++| 01647 M01S01644.coding +++| Subroutines defined with SUBR should be used for hangs and error 01648 M01S01645.coding +++| processors so the RJ/RJM for CP/PP code leaves a trace of the 01649 M01S01646.coding +++| caller, even though return to the caller is not used. PP's should 01650 M01S01647.coding +++| write the caller's address and other pertinent information in the PP 01651 M01S01648.coding +++| output register or message buffer (space permitting) before issuing 01652 M01S01649.coding +++| a HNGM monitor function. 01653 M01S01650.coding +++| 01654 M01S01651.coding +++| 3.3.8 CPU CODE OPTIMIZATION 01655 M01S01652.coding +++| 01656 M01S01653.coding +++| An effort should be made to avoid the generation of NO-OPs at the 01657 M01S01654.coding +++| end of a 60-bit word. This may be done by arrangement of code so 01658 M01S01655.coding +++| that each 60-bit word is completely filled with executable code. 01659 M01S01656.coding +++| This is also done for instructions which have an optional "k" 01660 M01S01657.coding +++| parameter by supplying a zero value for "k", thus generating a 30- 01661 M01S01658.coding +++| bit instruction instead of a 15-bit instruction. The way to do this 01662 M01S01659.coding +++| is to append a "+" to the register in the variable field of 01663 M01S01660.coding +++| the instruction, as shown below: 01664 M01S01661.coding +++| 01665 M01S01662.coding +++| SA4 A1+ (Generates 30-bit instruction) 01666 M01S01663.coding +++| 01667 M01S01664.coding +++| This indicates that the padding was added for optimization purposes 01668 M01S01665.coding +++| and may be removed as necessary when the code is modified. 01669 M01S01666.coding +++|1 PAGE 34 01670 M01S01667.coding +++| 01671 M01S01668.coding +++| 01672 M01S01669.coding +++| When initializing an X register to zero, a 01673 M01S01670.coding +++| 01674 M01S01671.coding +++| SXi B0+ 01675 M01S01672.coding +++| 01676 M01S01673.coding +++| should be used if a 30 bit instruction packs better. 01677 M01S01674.coding +++| 01678 M01S01675.coding +++| If a 15 bit instruction packs better, 01679 M01S01676.coding +++| 01680 M01S01677.coding +++| BXi Xi-Xi 01681 M01S01678.coding +++| 01682 M01S01679.coding +++| is preferred; but for efficiency 01683 M01S01680.coding +++| 01684 M01S01681.coding +++| SXi B0 01685 M01S01682.coding +++| MXi 0 01686 M01S01683.coding +++| 01687 M01S01684.coding +++| also may be used interchangeably. 01688 M01S01685.coding +++| 01689 M01S01686.coding +++| 01690 M01S01687.coding +++| 3.3.9 CLEARING PP MEMORY 01691 M01S01688.coding +++| 01692 M01S01689.coding +++| The following coding sequence is used to clear 5 consecutive words 01693 M01S01690.coding +++| of PP memory to zeroes: 01694 M01S01691.coding +++| 01695 M01S01692.coding +++| LDN ZERL 01696 M01S01693.coding +++| CRD tag 01697 M01S01694.coding +++| 01698 M01S01695.coding +++| The constant ZERL should not be assumed to be at address absolute 01699 M01S01696.coding +++| zero in memory. 01700 M01S01697.coding +++| 01701 M01S01698.coding +++| 01702 M01S01699.coding +++| 3.3.10 INSTRUCTION MODIFICATION 01703 M01S01700.coding +++| 01704 M01S01701.coding +++| Instruction modification greatly increases the complexity of code 01705 M01S01702.coding +++| and is a reliable source of program errors. It is a practice to be 01706 M01S01703.coding +++| avoided wherever possible. The sole justification for instruction 01707 M01S01704.coding +++| modification is overwhelming space or time-critical constraint, such 01708 M01S01705.coding +++| as a crowded PP, an in-stack loop, or a hardware driver. It is 01709 M01S01706.coding +++| particularly important that one routine modifying the contents of 01710 M01S01707.coding +++| another routine be avoided. It is far preferable to employ a global 01711 M01S01708.coding +++| variable for communications between routines, even at the expense of 01712 M01S01709.coding +++| some storage. 01713 M01S01710.coding +++| 01714 M01S01711.coding +++| Where a routine must modify code within another routine, the 01715 M01S01712.coding +++| modified code must be documented as an EXIT condition from the first 01716 M01S01713.coding +++| routine and an ENTRY condition to the second. 01717 M01S01714.coding +++| 01718 M01S01715.coding +++| Data locations imbedded within a routine and referenced by more than 01719 M01S01716.coding +++| one routine should be assigned descriptive, global variable symbols 01720 M01S01717.coding +++| (this is an exception to the standard for the naming of data 01721 M01S01718.coding +++| locations within a routine). This will somewhat decrease the 01722 M01S01719.coding +++| chances of error arising from their use. 01723 M01S01720.coding +++| 01724 M01S01721.coding +++|1 PAGE 35 01725 M01S01722.coding +++| 01726 M01S01723.coding +++| 01727 M01S01724.coding +++| Instructions which must be modified are to be followed by a comment 01728 M01S01725.coding +++| which shows each alternative form under which the instruction can 01729 M01S01726.coding +++| take. The following examples show the layout used: 01730 M01S01727.coding +++| 01731 M01S01728.coding +++| Example: 01732 M01S01729.coding +++| 01733 M01S01730.coding +++| tag LDC TRCO SET READ FUNCTION 01734 M01S01731.coding +++| * LDC TWTO (WRITE FUNCTION) 01735 M01S01732.coding +++| * LDC TFCN (POSITION FUNCTION) 01736 M01S01733.coding +++| tagA EQU *-1 01737 M01S01734.coding +++| 01738 M01S01735.coding +++| Example: 01739 M01S01736.coding +++| 01740 M01S01737.coding +++| tagA LDC * RESTORE (T1) 01741 M01S01738.coding +++| * LDC (T1) (CONTENTS OF T1) 01742 M01S01739.coding +++| STD T1 01743 M01S01740.coding +++| 01744 M01S01741.coding +++| The comment in ( ) should describe the conditions under which the 01745 M01S01742.coding +++| instruction is changed. 01746 M01S01743.coding +++| 01747 M01S01744.coding +++| In CPU code, care must be taken to insure that the instruction being 01748 M01S01745.coding +++| modified is not already in the instruction stack. Since the only 01749 M01S01746.coding +++| way to guarantee this for all mainframes is to perform an RJ 01750 M01S01747.coding +++| instruction, any CPU program that does code modification must have 01751 M01S01748.coding +++| at least one RJ instruction between the modification and the 01752 M01S01749.coding +++| execution of the code. This RJ may be a call to a dummy subroutine, 01753 M01S01750.coding +++| or to a "normal" one; if a call to a normal subroutine is also being 01754 M01S01751.coding +++| used to void the instruction stack, the comment on the RJ should 01755 M01S01752.coding +++| note that fact. 01756 M01S01753.coding +++| 01757 M01S01754.coding +++| PP short jump instructions which must be modified are tested for 01758 M01S01755.coding +++| range errors. The LOC pseudo-op is used and the jump instruction is 01759 M01S01756.coding +++| actually assembled if the program size is not a critical factor. 01760 M01S01757.coding +++| For example: 01761 M01S01758.coding +++| 01762 M01S01759.coding +++| LDM TAGB 01763 M01S01760.coding +++| STM TAGA 01764 M01S01761.coding +++| . 01765 M01S01762.coding +++| TAGA MJN TAG1 IF TIME NOT EXPIRED 01766 M01S01763.coding +++| * UJN TAG2 (ONE CPU ONLY) 01767 M01S01764.coding +++| . 01768 M01S01765.coding +++| . 01769 M01S01766.coding +++| TAGB BSS O 01770 M01S01767.coding +++| LOC TAGA 01771 M01S01768.coding +++| UJN TAG2 comment 01772 M01S01769.coding +++| LOC *O 01773 M01S01770.coding +++| 01774 M01S01771.coding +++|1 PAGE 36 01775 M01S01772.coding +++| 01776 M01S01773.coding +++| 01777 M01S01774.coding +++| When program size is a constraining factor and the tag is to be 01778 M01S01775.coding +++| modified is previously defined, the ISTORE Macro defined in COMPMAC 01779 M01S01776.coding +++| should be used: 01780 M01S01777.coding +++| 01781 M01S01778.coding +++| ISTORE CADDR,(INSTR) 01782 M01S01779.coding +++| 01783 M01S01780.coding +++| where CADDR is the address of the code to be modified, 01784 M01S01781.coding +++| INSTR is the instruction (op code and address field) to be stored. 01785 M01S01782.coding +++| 01786 M01S01783.coding +++| For example: 01787 M01S01784.coding +++| 01788 M01S01785.coding +++| TAGA MJN TAG1 IF TIME NOT EXPIRED 01789 M01S01786.coding +++| * UJN TAG2 (ONE CPU ONLY) 01790 M01S01787.coding +++| . 01791 M01S01788.coding +++| . 01792 M01S01789.coding +++| . 01793 M01S01790.coding +++| ISTORE TAGA,(UJN TAG2) 01794 M01S01791.coding +++| 01795 M01S01792.coding +++| Which generates the following sequence of instructions: 01796 M01S01793.coding +++| 01797 M01S01794.coding +++| LDC ** 01798 M01S01795.coding +++| ORG *-1 01799 M01S01796.coding +++| LOC TAGA 01800 M01S01797.coding +++| UJN TAG2 01801 M01S01798.coding +++| LOC *0 01802 M01S01799.coding +++| STM TAGA 01803 M01S01800.coding +++| 01804 M01S01801.coding +++| When program size is a constraining factor and the tag to be 01805 M01S01802.coding +++| modified has not yet been defined, the jump should be assembled as 01806 M01S01803.coding +++| part of an LDC instruction as follows: 01807 M01S01804.coding +++| 01808 M01S01805.coding +++| LDC UJNI+TAG2-TAGA 01809 M01S01806.coding +++| STM TAGA 01810 M01S01807.coding +++| 01811 M01S01808.coding +++| In this case, the ERRNG psuedo instruction must be used to test for 01812 M01S01809.coding +++| range errors as follows: 01813 M01S01810.coding +++| 01814 M01S01811.coding +++| ERRNG 37+daddr-jaddr (comment) 01815 M01S01812.coding +++| or 01816 M01S01813.coding +++| ERRNG 37+jaddr-daddr (comment) 01817 M01S01814.coding +++| 01818 M01S01815.coding +++| (depending on whether the jump is a backward or forward jump 01819 M01S01816.coding +++| respectively) 01820 M01S01817.coding +++| 01821 M01S01818.coding +++| Where: 01822 M01S01819.coding +++| jaddr =address of jump instruction 01823 M01S01820.coding +++| daddr =destination address of jump 01824 M01S01821.coding +++| 01825 M01S01822.coding +++| Again, instruction modification should be avoided in PP and CPU code 01826 M01S01823.coding +++| whenever possible. 01827 M01S01824.coding +++| 01828 M01S01825.coding +++| 01829 M01S01826.coding +++|1 PAGE 37 01830 M01S01827.coding +++| 01831 M01S01828.coding +++| 01832 M01S01829.coding +++| 3.3.11 COMMON DECK REGISTER USAGE 01833 M01S01830.coding +++| 01834 M01S01831.coding +++| CPU code within common decks avoids using registers A0, A5, X0 and 01835 M01S01832.coding +++| X5 unless absolutely necessary. If these registers must be used, 01836 M01S01833.coding +++| they should be restored before exiting to the calling routine. 01837 M01S01834.coding +++| 01838 M01S01835.coding +++| 01839 M01S01836.coding +++| 3.3.12 PP ADK, LDK, LMK, LPK, SBK Macros Usage 01840 M01S01837.coding +++| 01841 M01S01838.coding +++| Use of ADK, LDK, LMK, LPK, and SBK macros defined in COMPMAC are 01842 M01S01839.coding +++| encouraged, since the actual instruction assembled will be adjusted 01843 M01S01840.coding +++| to a 0, 1, or 2 byte instruction as needed, depending on the tag 01844 M01S01841.coding +++| values in the operand field. If the operand value reduces to zero, 01845 M01S01842.coding +++| no instruction will be generated (except for LDK). Operands to 01846 M01S01843.coding +++| these macros should not be numerics only (usefulness for tags is 01847 M01S01844.coding +++| recommended). Because of the variability of the code generated by 01848 M01S01845.coding +++| these instructions, this code should not be changed by in-line code 01849 M01S01846.coding +++| modifications. 01850 M01S01847.coding +++| 01851 M01S01848.coding +++| 01852 M01S01849.coding +++| 3.4 DATA USE, FORMAT, AND PARAMETERS 01853 M01S01850.coding +++| 01854 M01S01851.coding +++| 01855 M01S01852.coding +++| 3.4.1 LITERALS 01856 M01S01853.coding +++| 01857 M01S01854.coding +++| Literals may be used for read-only constants only. Error message 01858 M01S01855.coding +++| text should not be defined as literals, but rather should be defined 01859 M01S01856.coding +++| in data statements (preferably in tables). 01860 M01S01857.coding +++| 01861 M01S01858.coding +++| 01862 M01S01859.coding +++| 3.4.2 DATA FORMATS 01863 M01S01860.coding +++| 01864 M01S01861.coding +++| Data is specified in its natural form (readable and understandable 01865 M01S01862.coding +++| by humans) using post-radix symbols as required (see section 01866 M01S01863.coding +++| 3.6.1). If conversion considerations make this impossible, the 01867 M01S01864.coding +++| comment field will contain the natural form of the data. Octal 01868 M01S01865.coding +++| values are not used for character data unless the data cannot be 01869 M01S01866.coding +++| specified in any other way. When the VFD is used, it cannot 01870 M01S01867.coding +++| generate more than one CM word of data. 01871 M01S01868.coding +++| 01872 M01S01869.coding +++| If a data item does not require an initial value preset at assembly 01873 M01S01870.coding +++| time, BSS should be used to reserve space rather than CON. 01874 M01S01871.coding +++| 01875 M01S01872.coding +++| Only one piece of data is specified on a line of code unless a block 01876 M01S01873.coding +++| of data is being specified for use as a single data item to be 01877 M01S01874.coding +++| referenced by a single name. 01878 M01S01875.coding +++| 01879 M01S01876.coding +++| 01880 M01S01877.coding +++|1 PAGE 38 01881 M01S01878.coding +++| 01882 M01S01879.coding +++| 01883 M01S01880.coding +++| 3.4.3 TABLE GENERATION 01884 M01S01881.coding +++| 01885 M01S01882.coding +++| Tables which are generated with entry ordinals relative to the base 01886 M01S01883.coding +++| address of the table, should use the LOC pseudo-op as shown in the 01887 M01S01884.coding +++| following example: 01888 M01S01885.coding +++| 01889 M01S01886.coding +++| TFCN BSS 0 table entry 01890 M01S01887.coding +++| LOC 0 01891 M01S01888.coding +++| CON RNM first entry 01892 M01S01889.coding +++| CON ACF second entry 01893 M01S01890.coding +++| . 01894 M01S01891.coding +++| . 01895 M01S01892.coding +++| . 01896 M01S01893.coding +++| CON VSN last entry 01897 M01S01894.coding +++| LOC *O 01898 M01S01895.coding +++| TFCNL EQU *-TFCN table length (optional) 01899 M01S01896.coding +++| 01900 M01S01897.coding +++| Where tables are described, they are defined so they can be 01901 M01S01898.coding +++| processed by the "Documentation Table Generator". A description of 01902 M01S01899.coding +++| this format is found in the external documentation for the program 01903 M01S01900.coding +++| DOCMENT. 01904 M01S01901.coding +++| 01905 M01S01902.coding +++| 01906 M01S01903.coding +++| 3.4.4 DIRECT CELL USE 01907 M01S01904.coding +++| 01908 M01S01905.coding +++| Direct cells are defined using one of the following methods: 01909 M01S01906.coding +++| 01910 M01S01907.coding +++| 1. A single cell: 01911 M01S01908.coding +++| 01912 M01S01909.coding +++| xx EQU n description 01913 M01S01910.coding +++| 01914 M01S01911.coding +++| 2. Multiple cells: 01915 M01S01912.coding +++| 01916 M01S01913.coding +++| xx EQU n - m description 01917 M01S01914.coding +++| 01918 M01S01915.coding +++| 3. Contiguous cells: 01919 M01S01916.coding +++| 01920 M01S01917.coding +++| LOC n 01921 M01S01918.coding +++| xx BSS 1 description 01922 M01S01919.coding +++| yy BSS 5 description 01923 M01S01920.coding +++| . 01924 M01S01921.coding +++| . 01925 M01S01922.coding +++| . 01926 M01S01923.coding +++| zz BSS 1 description 01927 M01S01924.coding +++| LOC *0 01928 M01S01925.coding +++| 01929 M01S01926.coding +++|1 PAGE 39 01930 M01S01927.coding +++| 01931 M01S01928.coding +++| 01932 M01S01929.coding +++| 4. Contiguous direct cells or other sequential tag definitions 01933 M01S01930.coding +++| without reserving space: 01934 M01S01931.coding +++| 01935 M01S01932.coding +++| BEGIN BSSN n 01936 M01S01933.coding +++| xx BSSN 1 description 01937 M01S01934.coding +++| yy BSSN 5 description 01938 M01S01935.coding +++| . 01939 M01S01936.coding +++| . 01940 M01S01937.coding +++| . 01941 M01S01938.coding +++| zz BSSN 2 description 01942 M01S01939.coding +++| END BSSN 01943 M01S01940.coding +++| 01944 M01S01941.coding +++| The BSSN macro is defined in COMCMAC and COMPMAC. 01945 M01S01942.coding +++| 01946 M01S01943.coding +++| Where: 01947 M01S01944.coding +++| 01948 M01S01945.coding +++| xx, yy, zz = the tag for the cell 01949 M01S01946.coding +++| n = location of the cell (or first cell) 01950 M01S01947.coding +++| m = location of the last cell 01951 M01S01948.coding +++| 01952 M01S01949.coding +++| Multiple definitions of direct cells should be avoided. 01953 M01S01950.coding +++| 01954 M01S01951.coding +++| The first few direct cells in the PP should not be used for data 01955 M01S01952.coding +++| which is critical to debugging. The deadstart dump process 01956 M01S01953.coding +++| destroys the contents of these locations: 01957 M01S01954.coding +++| 01958 M01S01955.coding +++| T0 - T3 and 7774 - 7777 01959 M01S01956.coding +++| 01960 M01S01957.coding +++| 01961 M01S01958.coding +++| 3.4.5 BUFFER DEFINITIONS 01962 M01S01959.coding +++| 01963 M01S01960.coding +++| Large buffers and working storage areas should be defined using EQU 01964 M01S01961.coding +++| statements (rather than BSS and BSSZ) to avoid unneccessary loading 01965 M01S01962.coding +++| of the buffer areas that do not require initialization. This 01966 M01S01963.coding +++| applies to CPU and PP code.
Proceed to Part 1
cdc/nos2.source/opl.opl871/deck/coding.txt ยท Last modified: by 127.0.0.1