DataMuseum.dk

Presents historical artifacts from the history of:

RC4000/8000/9000

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about RC4000/8000/9000

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦68c714203⟧ TextFile

    Length: 211968 (0x33c00)
    Types: TextFile
    Names: »oftn«

Derivation

└─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ.
    └─⟦b2ec5d50f⟧ 
        └─⟦this⟧ »oftn« 

TextFile

    1 CC           COPYRIGHT 1978 MOTOROLA INC.
    2 CC
    3 CC
    4 CC       ARTICLES, INFORMATION AND DATA ENCLOSED HEREIN
    5 CC       ARE PROPRIETARY TO MOTOROLA AND MAY NOT BE
    6 CC       DISTRIBUTED, REPRODUCED OR DISCLOSED OUTSIDE
    7 CC       BUYER'S ORGANIZATION WITHOUT THE EXPRESS WRITTEN
    8 CC       CONSENT OR APPROVAL OF AN AUTHORIZED MOTOROLA
    9 CC       OFFICER.
   10 CC
   11 CC
   12 CC1.0    INTRODUCTION
   13 CC
   14 CC
   15 CC       SEE SECTION 3.0 FOR INSTALLATIONS PROCEDURES......
   16 CC
   17 CC       THIS IS THE M68000 CROSS ASSEMBLER.  IT IS WRITTEN IN
   18 CC       ANSI STANDARD FORTRAN-IV, SO IT SHOULD BE POSSIBLE
   19 CC       TO COMPILE AND EXECUTE IT ON ANY COMPUTER WHICH SUPPORTS
   20 CC       ANSI FORTRAN-IV.
   21 CC
   22 CC       THIS IS A TWO PASS ASSEMBLER. ON THE FIRST PASS IT WILL READ
   23 CC       IN THE SOURCE FILE FROM FORTRAN UNIT 'LUSI' AND BUILD THE
   24 CC       SYMBOL TABLE.  ON PASS TWO THE SOURCE FILE IS REWOUND AND A
   25 CC       LISTING IS OUTPUT TO FORTRAN UNIT 'LUOT'.  THE OBJECT RECORD
   26 CC       (BINARY OBJECT RECORDS IN MC68000 FORMAT)
   27 CC       ARE OUTPUT TO THE FORTRAN UNIT 'LUOO'.
   28 CC
   29 CC       SEE THE M68000 CROSS MACRO ASSEMBLER MANUAL FOR INFORMATION
   30 CC       ON THE INSTRUCTION SET.
   31 CC
   32 CC1.1    GENERAL INFORMATION ABOUT THE CROSS ASSEMBLER.
   33 CC
   34 CC       EACH ROUTINE STARTS WITH COMMENTS DESCRIBING VERSION
   35 CC       NUMBER, DATE, ENTRY, EXIT VALUE OF ARGUMENTS IN CALLS, AND
   36 CC       ITS FUNCTION.  ALSO INDICATES IF IT IS COMPUTER DEPENDENT OR
   37 CC       INDEPENDENT ON THE FIRST COMMENT LINE.  IF COMPUTER
   38 CC       INDEPENDENT IT SAYS  CMP: ALL.  IF COMPUTER DEPENDENT IT
   39 CC       SAYS  CMP: PDP-11.
   40 CC       TO MODIFY CROSS ASSEMBLER TO RUN ON NON PDP-11 TYPE
   41 CC       COMPUTERS, EACH ROUTINE WITH CMP: PDP-11 MUST BE MODIFIED TO
   42 CC       RUN ON NEW HOST COMPUTER.  SOME ROUTINES INDICATE WHY THEY
   43 CC       ARE PDP-11 DEPENDENT, OTHERS ARE SELF EXPLANATORY.  EACH
   44 CC       SOURCE STATEMENT IS READ IN USING ALPHA (A1) FORMAT.  THE
   45 CC       STATEMENT IS THEN ZERO FILLED(R1 FORMAT) ON THE LEFT.
   46 CC       WHEN ASSEMBLY IS COMPLETED THE SOURCE LINE IS
   47 CC       PRINTED OUT IN A1 FORMAT.  GENERATED M68000 HEX INSTRUCTIONS
   48 CC       ARE CONVERTED TO ASCII THEN OUTPUT.
   49 CC
   50 CC1.2    GENERAL OPERATION OF THE CROSS ASSEMBLER.
   51 CC
   52 CC       DURING PASS ONE THE SOURCE LINE IS BROKEN INTO ELEMENTS
   53 CC       CALLED TOKENS BY ROUTINE 'SCN'.  EACH TOKEN IS LOOKED UP
   54 CC       IN THE SYMBOL TABLE BY 'LKP'.  IF A LABEL IT IS ENTERED
   55 CC       IN THE TABLE BY 'STF'.  IF AN OPERAND IT IS LOCATED IN THE
   56 CC       SYMBOL TABLE AND INFORMATION STORED WITH IT IS USED TO BUILD
   57 CC       THE INSTRUCTION.  PART OF THE DATA IS USED TO BRANCH IN
   58 CC       'BUILD1' TO COMPLETE THE INSTRUCTION.
   59 CC       AT THE END OF PASS 1 THE FILE IS REWOUND AND EACH SOURCE
   60 CC       LINE IS READ IN AGAIN.  OPERANDS ARE FOUND IN THE SYMBOL
   61 CC       TABLE AND DATA FOUND WITH THEM IS USED IN 'BUILD2'.
   62 CC       ROUTINE 'OUTPUT' PRINTS OUT THE SOURCE LINE AND THE
   63 CC       GENERATED INSTRUCTIONS.
   64 CC       ROUTINE 'PAR' WEAVES ITS WAY THROUGH THE PARSE NET TABLE
   65 CC       AND CALLING 'ACT1' IN PASS 1 AND 'ACT2' IN PASS 2 IT
   66 CC       BREAKS EACH SOURCE LINE DOWN, BUILDING THE INSTRUCTION FOR
   67 CC       FINAL ASSEMBLY IN 'BUILD1' OR 'BUILD2'.  MACROS ARE
   68 CC       STORED IN THE SYMBOL TABLE AND ARE PULLED OUT DURING
   69 CC       EXPANSION IN EACH PASS.  PASS ONE MUST EXAMINE A
   70 CC       MACRO TO SEE HOW MANY BYTES ARE REQUIRED FOR AN INSTRUCTION
   71 CC       IN ORDER TO KEEP IN PHASE WITH PASS TWO.
   72 CC       A MODIFICATION IN 'ACT1' OR 'BUILD1' CHANGING THE NUMBER
   73 CC       OF BYTES GENERATED WILL HAVE TO BE MADE IN 'ACT2' OR 'BUILD2'
   74 CC       TO AVOID PHASE ERRORS.  THE REVERSE IS ALSO TRUE.
   75 CC
   76 CC2.0    INTRODUCTION
   77 CC
   78 CC       THIS SECTION DEFINES DEVICE NUMBERS, COMMON,
   79 CC       HOW TO MODIFY THE SYMBOL TABLE SIZE, AND HOW TO CHANGE
   80 CC       DEVICE NUMBERS AND SPECIAL COMPUTER DEPENDENT VARIABLES.
   81 CC
   82 CC2.1    DEVICE NUMBERS.  SEE SUBROUTINE 'COMDEP'  TO CHANGE.
   83 CC
   84 CC          LUSI =  2  (SOURCE INPUT)
   85 CC          LUOT =  6  (ASSEMBLY LISTING AND ERROR MESSAGES TO A PRINTER
   86 CC          LUOT =  3  (ASSEMBLY LISTING AND ERROR MESSAGES TO FILE)
   87 CC          LUOT =  5  (ASSEMBLY LISTING AND ERROR MESSAGES TO CONSOLE)
   88 CC          LULT =  5  (OUTPUT TO CONSOLE)
   89 CC          LUOT =  3  RSX-11M SETTING TO SPOOL OUTPUT INSTEAD
   90 CC                     OF GOING DIRECTLY TO PRINTER. SEE 'COMDEP'.
   91 CC          LUCI =  5  (INPUT FROM CONSOLE)
   92 CC          LUOO =  1  (ASSEMBLED OBJECT OUTPUT)
   93 CC
   94 CC2.2    COMMON
   95 CC
   96 CC       ALL COMMON IS LABELED /A/.  THE DICTIONARY, PARSENET TABLE, AND
   97 CC       HASH TABLE ARE INITIALIZED IN BLOCK DATA.
   98 CC
   99 CC       ISYM    - SYMBOL TABLE, THE DICTIONARY IS IN THE FIRST 1200
  100 CC                 WORDS.  SEE BLOCK DATA WHERE THE DICTIONARY IS
  101 CC                 INITIALIZED.
  102 CC       AN ENTRY IN THE SYMBOL TABLE IS AS FOLLOWS:
  103 CC        ISYM(1)->M.S.WORD OF SYMBOL'S VALUE.
  104 CC            (2)->M.S.BYTE = NUMBER CHARACTERS IN SYMBOL NAME TIMES 2.
  105 CC                 1 = 1-2 CHARS, 2=3-4 CHARS ETC.
  106 CC            (2)->L.S.BYTE=TYPE:  255=OPCODE      1=LABEL
  107 CC            (3)->LINK TO NEXT SYMBOL IN TABLE
  108 CC            (4)-(4+S)-> S=(SIZE-1)/2 2 CHARACTERS/WORD
  109 CC            (4+S+1)->ADDRESS TYPE, SEE RR-MMM-TTT BELOW.
  110 CC                     IN LEAST SIGNIFICANT BYTE(L.S.B).
  111 CC            (4+S+2)-> 2 L.S.B OF SYMBOL'S ADDRESS.
  112 CC            JSUC POINTS TO ISYM(1) ON RETURN FROM 'LKP'.
  113 CC            JPTR & LPTR POINT TO ISYM(4+S+1) ON RETURN FROM 'LKP'.
  114 CC
  115 CC        1 - SYMBOL TABLE:
  116 CC               LOW BYTE BITS DEFINED AS RR-MMM-TTT WHERE:
  117 CC                RR = 00 - UNDEFINED SYMBOL
  118 CC                     01 - DEFINED IN PASS ONE
  119 CC                     10 - DEFINED IN PASS TWO
  120 CC                     11 - MULTIPLY DEFINED SYMBOL
  121 CC               MMM = RESERVED FOR MODE  (ASCII,BIN,ETC)
  122 CC               TTT =  0 - ABSOLUTE SYMBOL
  123 CC                      1 - RELATIVE SYMBOL
  124 CC                      2 - REGISTER
  125 CC                      3 - KEYWORD
  126 CC        2 - ADDRESS OF THE SYMBOL
  127 CC
  128 CC       KARD1   - INPUT SOURCE IMAGE GOES HERE.
  129 CC
  130 CC       KARD2   - MACRO PARAMETER SAVE AREA IN R1 FORMAT
  131 CC       MFLD    - POINTERS TO EACH SUBFIELD IN KARD2
  132 CC       MDEP    - DEPTH OF MACRO NESTING, MAX = 3
  133 CC       MPTR    - POINTER TO MACRO DEFINITION OR ELSE = 0
  134 CC
  135 CC       ITOKEN  - SYMBOL IS BROKEN DOWN FROM 'KARD1' TO HERE AND
  136 CC                 IS TAKEN FROM HERE AND PUT IN SYMBOL TABLE.
  137 CC
  138 CC       TKNSIZ  - NUMBER OF CHARACTERS IN 'ITOKEN'.
  139 CC
  140 CC       TKNTYP  - TYPE OF TOKEN IN 'ITOKEN'.
  141 CC               24 = VARIABLE
  142 CC               25 = NUMBER
  143 CC               27 = 'STRING' OVER 4 BYTES LONG
  144 CC               28 = REGISTER
  145 CC               29 = STATEMENT LABEL
  146 CC               30 = MNEMONIC
  147 CC
  148 CC       TKNVAL  - VALUE OF 'ITOKEN'.
  149 CC       TKNVA2  - HOLDS OVERFLOW FROM 'TKNVAL', SET IN 'SCN'.
  150 CC
  151 CC       SYMTYP  - MODE OF THE FIRST OPERAND
  152 CC                 0 = ABSOLUTE
  153 CC                 1 = RELATIVE
  154 CC
  155 CC       JSUC    - FLAG SET BY SYMBOL LOOKUP ROUTINE 'LKP'.
  156 CC
  157 CC       JPTR    - SET TO POINT AT SYMBOL TABLE ENTRY OF SYMBOL.
  158 CC
  159 CC       NXSYM   - POINTS TO NEXT AVAILABLE ADDRESS IN SYMBOL TABLE.
  160 CC       NXSYM1  - SAVE START OF LABELS IN SYMBOL TABLE,END OF DICT.
  161 CC
  162 CC       KOLUMN  - POSITION OF SCAN IN 'KARD1'.
  163 CC
  164 CC       KD1BCT  - END OF INPUT BUFFER(KARD1)
  165 CC
  166 CC       KD1LNO  - SOURCE LINE NUMBER.
  167 CC
  168 CC       PASS,IPASS    - PASS NUMBER FLAG ASSEMBLER IS CURRENTLY ON
  169 CC                 -1 = PASS ONE
  170 CC                 0 = PASS TWO
  171 CC
  172 CC       IPCC    - CURRENT P-COUNT.
  173 CC       IPC2    - M.S.B. OF CURRENT P-COUNT(3RD BYTE)
  174 CC
  175 CC       IOPC    - OPCODE CLASS
  176 CC
  177 CC       INS     - ARRAY INSTRUCTION IS BUILT IN AND OUTPUT FROM.
  178 CC
  179 CC       ISIZ    - SIZE (B,W,L) FOR CURRENT INSTRUCTION
  180 CC                 PASS 1                 PASS 2
  181 CC               B = BYTE = 1                0
  182 CC               W = WORD = 2               64
  183 CC               L = LONG WORD = 4         128
  184 CC
  185 CC       INSL    - NUMBER OF BYTES REQUIRED FOR CURRENT INSTRUCTION.
  186 CC
  187 CC       IADM    - ADDRESS MODE FOR FIELD-1 AND FIELD-2 OF
  188 CC                 THE OPERAND.
  189 CC       IADM(1,2):
  190 CC                    ADDESS MODE    ASSEMBLER FORMAT
  191 CC               00 = DATA REG DIRECT      D1
  192 CC               08 = ADDR REG DIRECT      A1
  193 CC               16 = ADDR REG INDIRECT    (A1)
  194 CC               24 = POST INCREMENT       (A1)+
  195 CC               32 = PRE DECREMENT        -(A1)
  196 CC               40 = INDIRECT & DISPL'MT  3(A1)
  197 CC               48 = DISPL'MT & IND & X   3(A1,A2)
  198 CC               56 = ABSOLUTE SHORT       $1234
  199 CC               57 = ABSOLUTE LONG        $123456
  200 CC               58 = PC + DISPL'MT        REL
  201 CC               59 = PC + X + DISPL'MT    REL(A1)
  202 CC               60 = IMMEDIATE SHORT    #$1234
  203 CC                    IMMEDIATE LONG       #$123456
  204 CC               64 = STATUS REGISTER      SR,CCR
  205 CC
  206 CC       2 - REGISTER #
  207 CC
  208 CC       X       IADM(X,1)          IADM(X,2)
  209 CC       -       ---------          --------
  210 CC       3         ...           NO. BYTES IN INS(5)
  211 CC       4       SYMTYP(1)       SYMTYP(2)
  212 CC                 0 = ABSOLUTE     0 = ABSOLUTE
  213 CC                 1 = RELATIVE     1 = RELATIVE
  214 CC       5                FORWARD REFERENCE?
  215 CC                 0 = BACKWARDS    0 = BACKWARD
  216 CC                 1 = FORWARD      1 = FORWARD
  217 CC       6       A0-D7 BIT MASK  D0-A7 BIT MASK
  218 CC       7       CURRENT IPC MODE      ...
  219 CC                 0 = ABSOLUTE     0 = 2 BYTE ADDRESSING
  220 CC                 1 = RELATIVE     1 = 3 BYTE ADDRESSING: > 65535
  221 CC
  222 CC       LENSYM  - LENGTH OF SYMBOL TABLE, EQUALS NUMBER OF
  223 CC                 DIMENSIONS OF 'ISYM-10'.
  224 CC
  225 CC       KASH    - HASH TABLE FOR SYMBOL LOOKUP.
  226 CC
  227 CC       KCLAS   - TOKEN CLASS.
  228 CC
  229 CC       NET1 -> NET5 - PARSENET TABLE.
  230 CC
  231 CC       NBPW    - NUMBER OF BYTES IN HOST COMPUTER'S WORD.
  232 CC
  233 CC       IEOT    - END OF LINE = 4.
  234 CC
  235 CC       LSP     - ASCII BLANK RIGHT JUSTIFIED.
  236 CC
  237 CC       IHB480  - HEX CONSTANT SET IN 'COMDEP'
  238 CC
  239 CC       IHEX9K  - HEX CONSTANT SET IN 'COMDEP'
  240 CC
  241 CC
  242 CC       KCFF    - HEX CONSTANT $FF SET IN 'COMDEP'
  243 CC
  244 CC       LIST    - LIST, NOLIST OPTION FLAG.
  245 CC               1 = LIST ASSEMBLY (DEFAULT)
  246 CC               0 = DON'T LIST ASSEMBLY
  247 CC
  248 CC       IOBJ    - OBJECT OUTPUT, NO OBJECT OUTPUT FLAG
  249 CC               1 = OBJECT OUTPUT REQUESTED - DEFAULT
  250 CC               0 = NO OBJECT OUTPUT REQUESTED
  251 CC
  252 CC       IPLEN   - NUMBER OF LINES PER PAGE
  253 CC                 INITIALIZED TO 65
  254 CC
  255 CC       LLEN    - NUMBER CHARACTERS PER LINE
  256 CC                 DEFAULT = 80
  257 CC                 MIN     = 26
  258 CC                 MAX     = 120
  259 CC                 MAX NUMBER CHARACTERS INPUT ON SOURCE LINE = 95
  260 CC
  261 CC       LLENSW  - FLAG INDICATING COMMAND 'LLEN' HAS BEEN USED.
  262 CC               1 = 'LLEN' IN EFFECT, ADJUST OUTPUT LINE TO
  263 CC                   PARTICULAR COLUMN
  264 CC               0 = DEFAULT = 'LLEN' NOT IN EFFECT.
  265 CC               NOTE:  A SOURCE LINE IS NOT COLUMN ADJUSTED ON
  266 CC                      OUTPUT UNLESS 'LLEN' IS USED.
  267 CC
  268 CC       ICOL    - USED TO FLAG IFXX IN PROCESS, AND MACRO FLAG.
  269 CC
  270 CC       NEST    - IFXX-ENDC NEST COUNT.
  271 CC
  272 CC2.3    MODIFYING SYMBOL TABLE SIZE.
  273 CC
  274 CC       CHANGE EACH OCCURRANCE OF ISYM(N) IN COMMON /A/ FROM ITS
  275 CC       CURRENT VALUE TO DESIRED VALUE.  CHANGE VARIABLE 'LENSYM'
  276 CC       IN BLOCK DATA TO EQUAL VALUE OF 'N-10' IN COMMON /A/ ISYM(N).
  277 CC
  278 CC2.4    ERROR MESSAGES
  279 CC
  280 CC       ERROR #          DESCRIPTION
  281 CC       -------          ----------
  282 CC       0201  ILLEGAL CHARACTER
  283 CC       0202  SYMBOL TOO LONG
  284 CC       0203  IMPROPER TERMINATION OF OPERAND FIELD
  285 CC       0204  SYNTAX ERROR
  286 CC       0205  SIZE SUBFIELD NOT ALLOWED FOR THIS OPCODE
  287 CC       0206  REDEFINED SYMBOL
  288 CC       0207  UNDEFINED SYMBOL
  289 CC       0208  DISPLACEMENT RANGE (SIZE) ERROR
  290 CC       0209  ILLEGAL ADDRESS MODE FOR THIS INSTRUCTION
  291 CC       0210  VALUE TOO LARGE
  292 CC       0211  UNDEFINED SYMBOL
  293 CC       0212  DATA SIZE IS INVALID
  294 CC       0213  REGISTER MUST BE ADDRESS REGISTER
  295 CC       0214  INVALID SIZE SPECIFIED FOR INDEX REGISTER (MUST BE .L)
  296 CC       0215  REGISTER MUST BE DATA REGISTER
  297 CC       0216  NEGATIVE NOT ALLOWED
  298 CC       0217  BYTE MODE NOT ALLOWED
  299 CC       0218  DESTINATION MUST BE ALTERABLE
  300 CC       0219  TOO MANY OPERANDS FOR THIS INSTRUCTION
  301 CC       0220  PHASING ERROR BETWEEN PASS ONE AND PASS TWO.
  302 CC       0221  SYMBOL TABLE OVERFLOW
  303 CC       0222  INTERNAL ERROR - PARSE STACK OVERFLOW
  304 CC       0223  INTERNAL ERROR - UNDEFINED ACTION
  305 CC       0224  ILLEGAL MACRO PARAMETER
  306 CC       0225  MISPLACED 'MACRO' OR 'ENDM'
  307 CC       0226  MACRO CALLS NESTED TOO DEEP
  308 CC       0227  MULTIPLE REGISTERS ALLOWED ONLY FOR MOVEM(LDM,STM)
  309 CC       0228  INTERNAL ERROR - SYMBOL LOST
  310 CC       0229  LABEL REQUIRED ON THIS STATEMENT
  311 CC       0230  INSTRUCTION ADDRESS HAS FALLEN ON AN ODD BOUNDARY
  312 CC       0231  SYMBOL/EXPRESSION MUST BE ABSOLUTE
  313 CC       0232  AND/OR/EOR TO CCR OR SR MUST HAVE IMMEDIATE SOURCE
  314 CC       0233  ILLEGAL REGISTER FOR THIS INSTRUCTION
  315 CC       0234  INVALID SYNTAX FOR THIS INSTRUCTION
  316 CC       0235  FORWARD REFERENCED ADDRESS CANNOT BE LONG ABSOLUTE MODE
  317 CC       0236  MEMORY SHIFTS MAY ONLY BE SINGLE BIT
  318 CC       0237  ILLEGAL OPERATION ON A RELATIVE SYMBOL
  319 CC       0238  INVALID BYTE SIZE FOR THIS INSTRUCTION
  320 CC       0239  'END' DOES NOT TERMINATE SOURCE PROGRAM AS IT SHOULD
  321 CC       0240  ILLEGAL FORWARD REFERENCE
  322 CC
  323 CC3.0    INSTALLATION OF THE M68000 CROSS ASSEMBLER ON A PDP-11 SYSTEM
  324 CC       TYPE SYSTEM.
  325 CC
  326 CC       THE CROSS ASSEMBLER COMES ON A TAPE IN ONE FILE.
  327 CC       EACH SUBPROGRAM MUST BE SEPARATED FROM THIS FILE AND COMPILED
  328 CC       SEPARATELY IN ORDER TO LINK THE ENTIRE PROGRAM INTO A TASK.
  329 CC       ALL BUT 5 SUBPROGRAMS ARE WRITTEN IN FORTRAN.  PROGRAMS MUST BE
  330 CC       COMPILED WITH THE /ON AND /SU FORTRAN OPTIONS TO GET THE LOAD
  331 CC       MODULE SMALL ENOUGH TO FIT IN 28K OF MEMORY ON A DOS SYSTEM.
  332 CC       USE /NOVA/NOSN ON AN RSX-M SYSTEM.
  333 CC       NOVA=NO 32 BIT INTEGERS
  334 CC       NOSN=NO INTERNAL STATEMENT #'S GEN'D BY COMPILER
  335 CC       THE FOLLOWING SWITCHES ARE USED WITH FORTRAN IV-PLUS, V02-51
  336 CC         /NOTR  NO TRACE
  337 CC         /NOCK   NO SUBCRIPT CHECKING
  338 CC
  339 CC       IT SHOULD BE POSSIBLE TO OVERLAY THIS PROGRAM TO
  340 CC       GET MORE MEMORY AVAILABLE FOR SYMBOL TABLE SPACE.  ALL ROUTINES
  341 CC       EXCEPT 'ACT1', 'BUILD1', 'ACT2', 'BUILD2', AND 'PRSYM' MUST
  342 CC       BE IN MEMORY, OR MUST BE IN THE MAIN OVERLAY.  ACT1 CALLS
  343 CC       BUILD1 AND BOTH ARE USED IN PASS 1 ONLY.  THEREFORE THESE TWO
  344 CC       SUBPROGRAMS CAN BE CONCATENATED AS ONE OVERLAY.  ACT2, BUILD2
  345 CC       DO NOT CALL EACH OTHER AND MAY EACH BE THE SAME LEVEL OVERLAY
  346 CC       AS ACT1 SINCE THEY ARE USED ONLY IN PASS 2 .  PRSYM PRINTS OUT
  347 CC       SYMBOL TABLE WHEN PASS 2 IS DONE SO IT CAN BE AT THE SAME
  348 CC       LEVEL AS ACT1, ACT2, AND BUILD2.
  349 CC
  350 CC       SEVERAL PAGES OF NOTES ON ASSEMBLER CONSTRUCTION, VARIABLE
  351 CC       NAMES, COMMON, AND A DESCRIPTION OF THE VARIABLE NAMES IS
  352 CC       INCLUDED.  THIS IS FOR INFORMATION ONLY AND IS NOT PART OF THE
  353 CC       OVERALL SOURCE PROGRAM.
  354 CC
  355 CC       THE MAIN PROGRAM IS 'MACS'.  SEVERAL SUBPROGRAMS FOLLOW 'MACS'
  356 CC       ALL IN FORTRAN.  FIVE MORE IN PDP-11 ASSEMBLY LANGUAGE FOLLOW.
  357 CC       THE ASSEMBLY LANGUAGE PROGRAMS ARE: ADD,MUL,SUB,DIV,NEGATE.
  358 CC       SEPARATE THE FORTRAN PROGRAMS AND COMPILE EACH ONE. THEN
  359 CC       SEPARATE THE ASSEMBLY PROGRAMS AND ASSEMBLE EACH ONE.
  360 CC       LINK ALL OF THE RESULTANT .OBJ FILES IN TO A TASK(LOAD
  361 CC       MODULE).  WHEN THIS IS DONE IT IS READY FOR EXECUTION.
  362 CC
  363 CC       AS A TEST OF THE INSTALLATION OF THE CROSS ASSEMBLER IT
  364 CC       IS SUGGESTED THE SORT PROGRAM FOUND IN APPENDIX E OF THE
  365 CC       CROSS MACRO ASSEMBLER REFERENCE MANUAL, M68KXASM(D3), BE
  366 CC       USED.  THIS PROGRAM SHOULD EXECUTE IN EITHER THE HARDWARE
  367 CC       OR A SIMULATOR SUCCESSFULLY.
  368 CC
  369 CC       ONCE THE LOAD MODULE IS UP AND RUNNING, IT IS READY
  370 CC       FOR EXECUTION.
  371 CC
  372 CC           RSX-11M SYSTEM.
  373 CC           ROUTINE 'FILEOP' HAS 'CALL ASSIGN' IN IT FOR THE RSX-11M
  374 CC           SYSTEM.  THIS ROUTINE MUST BE CHANGED IF THE USER DOES NOT
  375 CC           WANT TO USE THIS METHOD OF ACCESSING FILES.  'FILEOP' ALSO
  376 CC           REQUESTS THE FILENAME FOR THE OUTPUT LISTING. IF THE SYSTEM
  377 CC           ALLOWS DIRECT OUTPUT TO THE LINE PRINTER THIS MAY BE
  378 CC           CHANGED ACCORDINGLY.  THE 'CALL FILEOP(6)' IN 'MACS'
  379 CC           MUST ALSO BE DELETED IN THIS CASE, UNLESS THE COMPLETE
  380 CC           IN CHANGE IS MADE IN 'FILEOP'.  THE REQUEST FOR PRINTING
  381 CC           PASS 1 IN 'MACS' MAY ALSO BE REMOVED IF DESIRED.  THIS IS A
  382 CC           DEBUGGING AID.
  383 CC           NAMES FOR ALL FILES ARE REQUESTED FROM 'FILEOP'.
  384 CC
  385 CC       THIS SOFTWARE HAS BEEN CHECKED OUT ON AN RSX-11M VERSION 3.2
  386 CC       SYSTEM.  IT HAS NOT BEEN RAN ON AN RSTS OR UNIX SYSTEM.  THE
  387 CC       SOFTWARE IS SENT OUT ON AN 800 BPI UN-LABELED 9-TRACK TAPE.
  388 CC       IT IS IN ASCII, 80 BYTES PER RECORD AND BLOCK.  THE USER
  389 CC       MUST BE ABLE TO READ THIS TYPE OF TAPE.
  390 CC       A FORTRAN PROGRAM USING CALLS TO 'QIO' IS AVAILABLE FROM
  391 CC       MOTOROLA TO DO THIS READ.  IT IS PLANNED TO PUT A COPY
  392 CC       OF THIS PROGRAM IN THE NEXT UPDATE OF THE REFERENCE MANUAL.
  393 CC       RELEASES PREVIOUS TO 1.4 WERE CHECKED OUT ON RSX-11M, FORTRAN
  394 CC       V02.2-1.  RELEASE 1.4 WAS CHECKED OUT ON FORTRAN IV-PLUS
  395 CC       V02-51. A CHANGE HAD TO BE MADE IN THE CALL TO 'ASSIGN' TO
  396 CC       BE DOWNWARD COMPATIBLE WITH DEC'S CHANGE IN 'ASSIGN' REQUIRING
  397 CC       THE FIRST CHARACTER AT THE END OF THE FILENAME TO BE A NULL.
  398 CC
  399 CC       AFTER READING THE TAPE IN TO A DISC FILE IT IS BEST TO WRITE A
  400 CC       FORTRAN PROGRAM THAT READ IN THAT FILE AND SPLIT IT INTO THE
  401 CC       SEPARATE SUBPROGRAMS.
  402 CC
  403 CC                      ***   END OF THIS ARTICLE   ***
  404 CC
  405 CC
  406 CC
  407 CC
  408 CC     NAM: MACS   VER: 1.0  DAT: DEC 8, 1978   CMP:  PDP-11
  409 CC
  410 CC    SYS: MACS
  411 CC
  412 CC    FNC: THIS IS THE MAIN PROGRAM FOR THE M68000 CROSS ASSEMBLER.
  413 CC         IT INITIALIZES SEVERAL VARIABLES, AND
  414 CC         CALLS ROUTINES FOR PASS1 AND PASS 2.
  415 CC
  416 CC    ******************************************************
  417 CC    ***                                                ***
  418 CC    ***      COPYRIGHT 1978 BY MOTOROLA INCC           ***
  419 CC    ***                                                ***
  420 CC    ******************************************************
  421 CC
  422 CC    ***********************************************************
  423 CC    ***                                                     ***
  424 CC    ***   THIS IS A PRELIMINARY RELEASE OF THE MC68000      ***
  425 CC    ***   CROSS ASSEMBLER.  AS SUCH IT IS POSSIBLE THE      ***
  426 CC    ***   INSTRUCTION SET FOR THE MC68000 MAY CHANGE        ***
  427 CC    ***   CAUSING CHANGES IN THIS CROSS ASSEMBLER.          ***
  428 CC    ***   MOTOROLA RESERVES THE RIGHT TO MAKE CHANGES       ***
  429 CC    ***   WITHOUT NOTICE.                                   ***
  430 CC    ***                                                     ***
  431 CC    ***********************************************************
  432 CC
  433 CC    REV: N/A
  434 CC
  435 CCALLS COMDEP-FILEOP-PNCH-ERR-PRSYM-PAGE
  436 CC
  437 C*
  438       IMPLICIT INTEGER (A-Z)
  439       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
  440      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
  441      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
  442       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
  443       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
  444       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
  445       COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
  446       COMMON /A/ LIST,ICOL,NEST,LUCI,LULT,MFLD(11,3),IOBJ,LLENSW,NOP
  447       COMMON /A/ NXSYM1
  448       DIMENSION KCLAS2(64)
  449       DATA KCLAS2/8,9,9,9,3,9,9,5,9,9,9,9,9,9,9,9,
  450      & 7,7,7,7,7,7,7,7,7,7,9,9,9,9,9,9,
  451      & 6,4,4,4,4,4,4,6,6,6,6,6,6,6,6,6,
  452      & 6,6,6,6,6,6,6,6,6,6,6,9,2,9,6,6/
  453       DATA IYES/'Y'/
  454 C
  455 C***  INITIALIZE VARIABLES, IO DEVICES
  456       CALL COMDEP
  457 9960  FORMAT(' PRINT PASS 1? (Y/N)'/)
  458 9961  FORMAT(A1)
  459       WRITE(LULT,9960)
  460       READ(LUCI,9961) JJJ
  461       IF(JJJ.EQ.IYES)  CALL DEBUG(1)
  462 C
  463 C+++  THIS FILE OUTPUT OF SOURCE IS TO GET AROUND
  464 C+++  THE SPOOLING TO PRINTER ON THE SYSTEM.
  465 C+++  REMOVE THE 'CALL FILEOP(6)' TO GO DIRECTLY TO PRINTER
  466 C
  467 C+++  ALSO REMOVE TEST AT END OF THIS PROGRAM FOR CLOSING FILE 3
  468       CALL FILEOP(6)
  469 C
  470 C+++  END
  471 C
  472       DO 40 I=1,11
  473       DO 40 J=1,3
  474 40    MFLD(I,J)=0
  475 C***  SET UP COMMON /A/ARRAY 'KCLAS'
  476       DO 70 I=1,64
  477 70    KCLAS(I)=KCLAS2(I)
  478 C***  PAGE SWITCH DEFAULT ON
  479       NOP=1
  480 C***  FLAG NOT TO PRINT EXPANDED LITERALS
  481       LUDI=0
  482 C***  IOBJ=1=OBJECT OUT - IOBJ=0=NO OBJECT OUT
  483       IOBJ=1
  484 C
  485 C***  LIST=0 NOLIST - LIST=1 LIST(DEFAULT).
  486       LIST= 1
  487 C***  SET DEFAULT LINE LENGTH
  488       LLEN=80
  489 C***  SET DO NOT ADJUST OUTPUT LINE SWITCH
  490       LLENSW=0
  491 C***  SET DEFAULT PAGE COUNT TO 65 LINES/PAGE
  492       IPLEN=65
  493       ICOL=0
  494       NEST=0
  495       MNUM=0
  496 C***  ASCII BLANK, RIGHT JUSTIFIED, ZERO FILLED.
  497       LSP=32
  498 C***  LEAVE SYMBOL TABLE SIZE LESS THAN MAX IN ORDER TO HANDLE
  499 C***  SYMBOL TABLE OVERFLOW.
  500       LENSYM=2990
  501       IEOT=4
  502       JERR=0
  503       IPC2=0
  504       IPC=0
  505       IADM(7,2)=0
  506       IADM(7,1)=1
  507 C***  INIT MACRO @000 VALUE
  508       KARD2(1,1)=64
  509       KARD2(2,1)=48
  510       KARD2(3,1)=48
  511       KARD2(4,1)=48
  512       KARD2(5,1)=0
  513 C***  PRINT THIS HEADER TO CONSOLE
  514       CALL PAGE(81)
  515 C
  516 C
  517 C***  GET SI FN OPENED
  518 C
  519       CALL FILEOP(1)
  520 C***  OUTPUT HEADER
  521       CALL PAGE(82)
  522 C
  523 C***  PERFORM PASS ONE
  524 C
  525 750   CONTINUE
  526       IPASS=-1
  527 C***  SAVE FOR SYMBOL TABLE PRINT OUT.
  528 900      NXSYM1=NXSYM
  529  1000 CALL PAR
  530       IF(IPASS.LT.0) GO TO 1000
  531 C
  532 C***  PERFORM PASS TWO
  533 C
  534 C***  IS OBJECT OUTPUT DESIRED?
  535       IF(IOBJ.EQ.0)  GO TO 1100
  536 C***  OPEN OBJ FILE
  537       CALL FILEOP(5)
  538       CALL PNCH(1,IPC)
  539       CALL PNCH(3,IPC)
  540 1100  CONTINUE
  541 C
  542 C***  IN CASE IFXX - ENDC NOT EQUAL RESET
  543 C
  544       NEST=0
  545 C
  546 C
  547 C***  RESET MACRO @ COUNTER
  548       KARD2(1,1)=64
  549       KARD2(2,1)=48
  550       KARD2(3,1)=48
  551       KARD2(4,1)=48
  552       KARD2(5,1)=0
  553 C
  554  2000 CALL PAR
  555       IF(IPASS.EQ.0) GO TO 2000
  556 C***  END OF PASS 2
  557 C***  PRINT FINAL ERROR COUNT
  558       CALL ERR(-1)
  559 C***  PRINT SYMBOL TABLE
  560       CALL PRSYM
  561 C***  PUT OUT TRAILING RECORD IF OBJECT OUT REQ.
  562       IF(IOBJ.EQ.0) GO TO 3000
  563       CALL PNCH(2,IPC)
  564 C***  CLOSE OBJECT OUTPUT FILE
  565 2900  CALL FILEOP(4)
  566 C
  567 C+++  IF LIST IS TO FILE, CLOSE IT
  568 C
  569 3000  CONTINUE
  570       IF(LUOT.EQ.3) CALL CLOSE(3)
  571       END
  572       BLOCK DATA
  573 CC     NAM: BLOCK DATA   VER: 1.0  DAT: DEC 8, 1978   CMP:  PDP-11
  574 C
  575 C*
  576       IMPLICIT INTEGER (A-Z)
  577       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
  578      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
  579      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
  580       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
  581       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
  582       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
  583       COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
  584       COMMON /A/ LIST,ICOL,NEST
  585 C
  586 C***  THE C>>> MUST NOT BE MOVED, PARNET USES IT
  587 C>>>
  588       DATA NXSYM/1171/
  589       DATA ISYM(   1)/O     0/,ISYM(   2)/O  1777/,ISYM(   3)/O   141/
  590       DATA ISYM(   4)/O 46501/,ISYM(   5)/O 41522/,ISYM(   6)/O 47400/
  591       DATA ISYM(   7)/O177777/,ISYM(   8)/O     0/,ISYM(   9)/O     0/
  592       DATA ISYM(  10)/O  1377/,ISYM(  11)/O   661/,ISYM(  12)/O 42516/
  593       DATA ISYM(  13)/O 42115/,ISYM(  14)/O177777/,ISYM(  15)/O     1/
  594       DATA ISYM(  16)/O     0/,ISYM(  17)/O  1777/,ISYM(  18)/O   150/
  595       DATA ISYM(  19)/O 46505/,ISYM(  20)/O 54111/,ISYM(  21)/O 52000/
  596       DATA ISYM(  22)/O177777/,ISYM(  23)/O     2/,ISYM(  24)/O     0/
  597       DATA ISYM(  25)/O  1377/,ISYM(  26)/O   275/,ISYM(  27)/O 42516/
  598       DATA ISYM(  28)/O 42000/,ISYM(  29)/O     1/,ISYM(  30)/O     1/
  599       DATA ISYM(  31)/O     0/,ISYM(  32)/O  1377/,ISYM(  33)/O   402/
  600       DATA ISYM(  34)/O 42516/,ISYM(  35)/O 42103/,ISYM(  36)/O     1/
  601       DATA ISYM(  37)/O     2/,ISYM(  38)/O     0/,ISYM(  39)/O  1377/
  602       DATA ISYM(  40)/O   616/,ISYM(  41)/O 50101/,ISYM(  42)/O 43505/
  603       DATA ISYM(  43)/O     1/,ISYM(  44)/O     3/,ISYM(  45)/O     0/
  604       DATA ISYM(  46)/O  1377/,ISYM(  47)/O   742/,ISYM(  48)/O 46111/
  605       DATA ISYM(  49)/O 51524/,ISYM(  50)/O     1/,ISYM(  51)/O     4/
  606       DATA ISYM(  52)/O     0/,ISYM(  53)/O  1777/,ISYM(  54)/O   677/
  607       DATA ISYM(  55)/O 47117/,ISYM(  56)/O 46111/,ISYM(  57)/O 51524/
  608       DATA ISYM(  58)/O     1/,ISYM(  59)/O     5/,ISYM(  60)/O     0/
  609       DATA ISYM(  61)/O  1377/,ISYM(  62)/O   706/,ISYM(  63)/O 47117/
  610       DATA ISYM(  64)/O 46000/,ISYM(  65)/O     1/,ISYM(  66)/O     5/
  611       DATA ISYM(  67)/O     0/,ISYM(  68)/O  1377/,ISYM(  69)/O  1756/
  612       DATA ISYM(  70)/O 52124/,ISYM(  71)/O 46000/,ISYM(  72)/O     1/
  613       DATA ISYM(  73)/O     6/,ISYM(  74)/O     0/,ISYM(  75)/O  1777/
  614       DATA ISYM(  76)/O   303/,ISYM(  77)/O 47117/,ISYM(  78)/O 50101/
  615       DATA ISYM(  79)/O 43505/,ISYM(  80)/O     1/,ISYM(  81)/O     7/
  616       DATA ISYM(  82)/O     0/,ISYM(  83)/O  1777/,ISYM(  84)/O   175/
  617       DATA ISYM(  85)/O 47117/,ISYM(  86)/O 47502/,ISYM(  87)/O 45000/
  618       DATA ISYM(  88)/O     1/,ISYM(  89)/O    10/,ISYM(  90)/O     0/
  619       DATA ISYM(  91)/O  1377/,ISYM(  92)/O   266/,ISYM(  93)/O 41515/
  620       DATA ISYM(  94)/O 50114/,ISYM(  95)/O     1/,ISYM(  96)/O    11/
  621       DATA ISYM(  97)/O     0/,ISYM(  98)/O  1377/,ISYM(  99)/O   634/
  622       DATA ISYM( 100)/O 41515/,ISYM( 101)/O 50122/,ISYM( 102)/O     1/
  623       DATA ISYM( 103)/O    12/,ISYM( 104)/O     0/,ISYM( 105)/O   777/
  624       DATA ISYM( 106)/O   242/,ISYM( 107)/O 43400/,ISYM( 108)/O     1/
  625       DATA ISYM( 109)/O    13/,ISYM( 110)/O     0/,ISYM( 111)/O  1777/
  626       DATA ISYM( 112)/O   562/,ISYM( 113)/O 46501/,ISYM( 114)/O 51513/
  627       DATA ISYM( 115)/O 31000/,ISYM( 116)/O     1/,ISYM( 117)/O    14/
  628       DATA ISYM( 118)/O     0/,ISYM( 119)/O  1377/,ISYM( 120)/O   257/
  629       DATA ISYM( 121)/O 51124/,ISYM( 122)/O 42400/,ISYM( 123)/O     2/
  630       DATA ISYM( 124)/O 47163/,ISYM( 125)/O     0/,ISYM( 126)/O  1377/
  631       DATA ISYM( 127)/O  1104/,ISYM( 128)/O 51124/,ISYM( 129)/O 51000/
  632       DATA ISYM( 130)/O     2/,ISYM( 131)/O 47167/,ISYM( 132)/O     0/
  633       DATA ISYM( 133)/O  1377/,ISYM( 134)/O  2067/,ISYM( 135)/O 51124/
  634       DATA ISYM( 136)/O 51400/,ISYM( 137)/O     2/,ISYM( 138)/O 47165/
  635       DATA ISYM( 139)/O     0/,ISYM( 140)/O  1777/,ISYM( 141)/O  1066/
  636       DATA ISYM( 142)/O 51105/,ISYM( 143)/O 51505/,ISYM( 144)/O 52000/
  637       DATA ISYM( 145)/O     2/,ISYM( 146)/O 47160/,ISYM( 147)/O     0/
  638       DATA ISYM( 148)/O  1777/,ISYM( 149)/O     0/,ISYM( 150)/O 52122/
  639       DATA ISYM( 151)/O 40520/,ISYM( 152)/O 53000/,ISYM( 153)/O     2/
  640       DATA ISYM( 154)/O 47166/,ISYM( 155)/O     0/,ISYM( 156)/O  1377/
  641       DATA ISYM( 157)/O  1326/,ISYM( 158)/O 47117/,ISYM( 159)/O 50000/
  642       DATA ISYM( 160)/O     2/,ISYM( 161)/O 47161/,ISYM( 162)/O     0/
  643       DATA ISYM( 163)/O   777/,ISYM( 164)/O  1371/,ISYM( 165)/O 42103/
  644       DATA ISYM( 166)/O     4/,ISYM( 167)/O     0/,ISYM( 168)/O     0/
  645       DATA ISYM( 169)/O  1377/,ISYM( 170)/O   652/,ISYM( 171)/O 47522/
  646       DATA ISYM( 172)/O 43400/,ISYM( 173)/O     5/,ISYM( 174)/O     1/
  647       DATA ISYM( 175)/O     0/,ISYM( 176)/O  1377/,ISYM( 177)/O   553/
  648       DATA ISYM( 178)/O 42521/,ISYM( 179)/O 52400/,ISYM( 180)/O     5/
  649       DATA ISYM( 181)/O     2/,ISYM( 182)/O     0/,ISYM( 183)/O  1377/
  650       DATA ISYM( 184)/O   733/,ISYM( 185)/O 51505/,ISYM( 186)/O 52000/
  651       DATA ISYM( 187)/O     5/,ISYM( 188)/O     3/,ISYM( 189)/O     0/
  652       DATA ISYM( 190)/O   777/,ISYM( 191)/O   420/,ISYM( 192)/O 42123/
  653       DATA ISYM( 193)/O     5/,ISYM( 194)/O     4/,ISYM( 195)/O     0/
  654       DATA ISYM( 196)/O  1377/,ISYM( 197)/O   337/,ISYM( 198)/O 51117/
  655       DATA ISYM( 199)/O 51107/,ISYM( 200)/O     5/,ISYM( 201)/O     5/
  656       DATA ISYM( 202)/O     0/,ISYM( 203)/O  1377/,ISYM( 204)/O  1221/
  657       DATA ISYM( 205)/O 43101/,ISYM( 206)/O 44514/,ISYM( 207)/O     5/
  658       DATA ISYM( 208)/O     6/,ISYM( 209)/O     0/,ISYM( 210)/O  1377/
  659       DATA ISYM( 211)/O   715/,ISYM( 212)/O 51520/,ISYM( 213)/O 41400/
  660       DATA ISYM( 214)/O     5/,ISYM( 215)/O     7/,ISYM( 216)/O     0/
  661       DATA ISYM( 217)/O  1377/,ISYM( 218)/O  1005/,ISYM( 219)/O 46111/
  662       DATA ISYM( 220)/O 47113/,ISYM( 221)/O     6/,ISYM( 222)/O 47120/
  663       DATA ISYM( 223)/O     0/,ISYM( 224)/O  1377/,ISYM( 225)/O  1670/
  664       DATA ISYM( 226)/O 52516/,ISYM( 227)/O 46113/,ISYM( 228)/O     6/
  665       DATA ISYM( 229)/O 47130/,ISYM( 230)/O     0/,ISYM( 231)/O  1377/
  666       DATA ISYM( 232)/O   364/,ISYM( 233)/O 51527/,ISYM( 234)/O 40520/
  667       DATA ISYM( 235)/O     7/,ISYM( 236)/O 44100/,ISYM( 237)/O     0/
  668       DATA ISYM( 238)/O  1377/,ISYM( 239)/O  1720/,ISYM( 240)/O 52122/
  669       DATA ISYM( 241)/O 40520/,ISYM( 242)/O    10/,ISYM( 243)/O 47100/
  670       DATA ISYM( 244)/O     0/,ISYM( 245)/O  1377/,ISYM( 246)/O  1174/
  671       DATA ISYM( 247)/O 52123/,ISYM( 248)/O 52000/,ISYM( 249)/O    11/
  672       DATA ISYM( 250)/O 45000/,ISYM( 251)/O     0/,ISYM( 252)/O  1377/
  673       DATA ISYM( 253)/O   501/,ISYM( 254)/O 41514/,ISYM( 255)/O 51000/
  674       DATA ISYM( 256)/O    11/,ISYM( 257)/O 41000/,ISYM( 258)/O     0/
  675       DATA ISYM( 259)/O  1377/,ISYM( 260)/O  1147/,ISYM( 261)/O 47105/
  676       DATA ISYM( 262)/O 43400/,ISYM( 263)/O    11/,ISYM( 264)/O 42000/
  677       DATA ISYM( 265)/O     0/,ISYM( 266)/O  1377/,ISYM( 267)/O   643/
  678       DATA ISYM( 268)/O 47117/,ISYM( 269)/O 52000/,ISYM( 270)/O    11/
  679       DATA ISYM( 271)/O 43000/,ISYM( 272)/O     0/,ISYM( 273)/O  1377/
  680       DATA ISYM( 274)/O  1417/,ISYM( 275)/O 47102/,ISYM( 276)/O 41504/
  681       DATA ISYM( 277)/O    12/,ISYM( 278)/O 44000/,ISYM( 279)/O     0/
  682       DATA ISYM( 280)/O  1377/,ISYM( 281)/O  1317/,ISYM( 282)/O 50105/
  683       DATA ISYM( 283)/O 40400/,ISYM( 284)/O    13/,ISYM( 285)/O 44100/
  684       DATA ISYM( 286)/O     0/,ISYM( 287)/O  1377/,ISYM( 288)/O   751/
  685       DATA ISYM( 289)/O 45123/,ISYM( 290)/O 51000/,ISYM( 291)/O    14/
  686       DATA ISYM( 292)/O 47200/,ISYM( 293)/O     0/,ISYM( 294)/O  1377/
  687       DATA ISYM( 295)/O   463/,ISYM( 296)/O 45115/,ISYM( 297)/O 50000/
  688       DATA ISYM( 298)/O    14/,ISYM( 299)/O 47300/,ISYM( 300)/O     0/
  689       DATA ISYM( 301)/O  1377/,ISYM( 302)/O   526/,ISYM( 303)/O 41122/
  690       DATA ISYM( 304)/O 40400/,ISYM( 305)/O    15/,ISYM( 306)/O 60000/
  691       DATA ISYM( 307)/O     0/,ISYM( 308)/O  1377/,ISYM( 309)/O     0/
  692       DATA ISYM( 310)/O 41123/,ISYM( 311)/O 51000/,ISYM( 312)/O    15/
  693       DATA ISYM( 313)/O 60400/,ISYM( 314)/O     0/,ISYM( 315)/O  1377/
  694       DATA ISYM( 316)/O   625/,ISYM( 317)/O 41110/,ISYM( 318)/O 44400/
  695       DATA ISYM( 319)/O    15/,ISYM( 320)/O 61000/,ISYM( 321)/O     0/
  696       DATA ISYM( 322)/O  1377/,ISYM( 323)/O  1237/,ISYM( 324)/O 41114/
  697       DATA ISYM( 325)/O 51400/,ISYM( 326)/O    15/,ISYM( 327)/O 61400/
  698       DATA ISYM( 328)/O     0/,ISYM( 329)/O  1377/,ISYM( 330)/O  1737/
  699       DATA ISYM( 331)/O 41103/,ISYM( 332)/O 41400/,ISYM( 333)/O    15/
  700       DATA ISYM( 334)/O 62000/,ISYM( 335)/O     0/,ISYM( 336)/O  1377/
  701       DATA ISYM( 337)/O   535/,ISYM( 338)/O 41103/,ISYM( 339)/O 51400/
  702       DATA ISYM( 340)/O    15/,ISYM( 341)/O 62400/,ISYM( 342)/O     0/
  703       DATA ISYM( 343)/O  1377/,ISYM( 344)/O     0/,ISYM( 345)/O 41116/
  704       DATA ISYM( 346)/O 42400/,ISYM( 347)/O    15/,ISYM( 348)/O 63000/
  705       DATA ISYM( 349)/O     0/,ISYM( 350)/O  1377/,ISYM( 351)/O   571/
  706       DATA ISYM( 352)/O 41105/,ISYM( 353)/O 50400/,ISYM( 354)/O    15/
  707       DATA ISYM( 355)/O 63400/,ISYM( 356)/O     0/,ISYM( 357)/O  1377/
  708       DATA ISYM( 358)/O     0/,ISYM( 359)/O 41126/,ISYM( 360)/O 41400/
  709       DATA ISYM( 361)/O    15/,ISYM( 362)/O 64000/,ISYM( 363)/O     0/
  710       DATA ISYM( 364)/O  1377/,ISYM( 365)/O  1041/,ISYM( 366)/O 41126/
  711       DATA ISYM( 367)/O 51400/,ISYM( 368)/O    15/,ISYM( 369)/O 64400/
  712       DATA ISYM( 370)/O     0/,ISYM( 371)/O  1377/,ISYM( 372)/O     0/
  713       DATA ISYM( 373)/O 41120/,ISYM( 374)/O 46000/,ISYM( 375)/O    15/
  714       DATA ISYM( 376)/O 65000/,ISYM( 377)/O     0/,ISYM( 378)/O  1377/
  715       DATA ISYM( 379)/O  2206/,ISYM( 380)/O 41115/,ISYM( 381)/O 44400/
  716       DATA ISYM( 382)/O    15/,ISYM( 383)/O 65400/,ISYM( 384)/O     0/
  717       DATA ISYM( 385)/O  1377/,ISYM( 386)/O     0/,ISYM( 387)/O 41107/
  718       DATA ISYM( 388)/O 42400/,ISYM( 389)/O    15/,ISYM( 390)/O 66000/
  719       DATA ISYM( 391)/O     0/,ISYM( 392)/O  1377/,ISYM( 393)/O  1032/
  720       DATA ISYM( 394)/O 41114/,ISYM( 395)/O 52000/,ISYM( 396)/O    15/
  721       DATA ISYM( 397)/O 66400/,ISYM( 398)/O     0/,ISYM( 399)/O  1377/
  722       DATA ISYM( 400)/O  1747/,ISYM( 401)/O 41107/,ISYM( 402)/O 52000/
  723       DATA ISYM( 403)/O    15/,ISYM( 404)/O 67000/,ISYM( 405)/O     0/
  724       DATA ISYM( 406)/O  1377/,ISYM( 407)/O  1212/,ISYM( 408)/O 41114/
  725       DATA ISYM( 409)/O 42400/,ISYM( 410)/O    15/,ISYM( 411)/O 67400/
  726       DATA ISYM( 412)/O     0/,ISYM( 413)/O  1377/,ISYM( 414)/O   670/
  727       DATA ISYM( 415)/O 47105/,ISYM( 416)/O 43530/,ISYM( 417)/O    16/
  728       DATA ISYM( 418)/O 40000/,ISYM( 419)/O     0/,ISYM( 420)/O  1377/
  729       DATA ISYM( 421)/O  1615/,ISYM( 422)/O 42530/,ISYM( 423)/O 52000/
  730       DATA ISYM( 424)/O    17/,ISYM( 425)/O 44200/,ISYM( 426)/O     0/
  731       DATA ISYM( 427)/O  1377/,ISYM( 428)/O     0/,ISYM( 429)/O 52101/
  732       DATA ISYM( 430)/O 51400/,ISYM( 431)/O    20/,ISYM( 432)/O 45300/
  733       DATA ISYM( 433)/O     0/,ISYM( 434)/O  1377/,ISYM( 435)/O  1014/
  734       DATA ISYM( 436)/O 51510/,ISYM( 437)/O 44400/,ISYM( 438)/O    21/
  735       DATA ISYM( 439)/O 51300/,ISYM( 440)/O     0/,ISYM( 441)/O  1377/
  736       DATA ISYM( 442)/O  2117/,ISYM( 443)/O 51514/,ISYM( 444)/O 51400/
  737       DATA ISYM( 445)/O    21/,ISYM( 446)/O 51700/,ISYM( 447)/O     0/
  738       DATA ISYM( 448)/O  1377/,ISYM( 449)/O  1401/,ISYM( 450)/O 51503/
  739       DATA ISYM( 451)/O 41400/,ISYM( 452)/O    21/,ISYM( 453)/O 52300/
  740       DATA ISYM( 454)/O     0/,ISYM( 455)/O  1377/,ISYM( 456)/O   724/
  741       DATA ISYM( 457)/O 51503/,ISYM( 458)/O 51400/,ISYM( 459)/O    21/
  742       DATA ISYM( 460)/O 52700/,ISYM( 461)/O     0/,ISYM( 462)/O  1377/
  743       DATA ISYM( 463)/O  1245/,ISYM( 464)/O 51516/,ISYM( 465)/O 42400/
  744       DATA ISYM( 466)/O    21/,ISYM( 467)/O 53300/,ISYM( 468)/O     0/
  745       DATA ISYM( 469)/O  1377/,ISYM( 470)/O   760/,ISYM( 471)/O 51505/
  746       DATA ISYM( 472)/O 50400/,ISYM( 473)/O    21/,ISYM( 474)/O 53700/
  747       DATA ISYM( 475)/O     0/,ISYM( 476)/O  1377/,ISYM( 477)/O     0/
  748       DATA ISYM( 478)/O 51526/,ISYM( 479)/O 41400/,ISYM( 480)/O    21/
  749       DATA ISYM( 481)/O 54300/,ISYM( 482)/O     0/,ISYM( 483)/O  1377/
  750       DATA ISYM( 484)/O     0/,ISYM( 485)/O 51526/,ISYM( 486)/O 51400/
  751       DATA ISYM( 487)/O    21/,ISYM( 488)/O 54700/,ISYM( 489)/O     0/
  752       DATA ISYM( 490)/O  1377/,ISYM( 491)/O  1050/,ISYM( 492)/O 51520/
  753       DATA ISYM( 493)/O 46000/,ISYM( 494)/O    21/,ISYM( 495)/O 55300/
  754       DATA ISYM( 496)/O     0/,ISYM( 497)/O  1377/,ISYM( 498)/O  1301/
  755       DATA ISYM( 499)/O 51515/,ISYM( 500)/O 44400/,ISYM( 501)/O    21/
  756       DATA ISYM( 502)/O 55700/,ISYM( 503)/O     0/,ISYM( 504)/O  1377/
  757       DATA ISYM( 505)/O  1471/,ISYM( 506)/O 51507/,ISYM( 507)/O 42400/
  758       DATA ISYM( 508)/O    21/,ISYM( 509)/O 56300/,ISYM( 510)/O     0/
  759       DATA ISYM( 511)/O  1377/,ISYM( 512)/O  1156/,ISYM( 513)/O 51514/
  760       DATA ISYM( 514)/O 52000/,ISYM( 515)/O    21/,ISYM( 516)/O 56700/
  761       DATA ISYM( 517)/O     0/,ISYM( 518)/O  1377/,ISYM( 519)/O  1642/
  762       DATA ISYM( 520)/O 51507/,ISYM( 521)/O 52000/,ISYM( 522)/O    21/
  763       DATA ISYM( 523)/O 57300/,ISYM( 524)/O     0/,ISYM( 525)/O  1377/
  764       DATA ISYM( 526)/O  1310/,ISYM( 527)/O 51514/,ISYM( 528)/O 42400/
  765       DATA ISYM( 529)/O    21/,ISYM( 530)/O 57700/,ISYM( 531)/O     0/
  766       DATA ISYM( 532)/O  1377/,ISYM( 533)/O  1426/,ISYM( 534)/O 44506/
  767       DATA ISYM( 535)/O 42521/,ISYM( 536)/O    22/,ISYM( 537)/O     1/
  768       DATA ISYM( 538)/O     0/,ISYM( 539)/O  1377/,ISYM( 540)/O  1507/
  769       DATA ISYM( 541)/O 44506/,ISYM( 542)/O 47105/,ISYM( 543)/O    22/
  770       DATA ISYM( 544)/O     2/,ISYM( 545)/O     0/,ISYM( 546)/O  1377/
  771       DATA ISYM( 547)/O  1165/,ISYM( 548)/O 46114/,ISYM( 549)/O 42516/
  772       DATA ISYM( 550)/O    23/,ISYM( 551)/O     1/,ISYM( 552)/O     0/
  773       DATA ISYM( 553)/O  1377/,ISYM( 554)/O  1254/,ISYM( 555)/O 50114/
  774       DATA ISYM( 556)/O 42516/,ISYM( 557)/O    23/,ISYM( 558)/O     2/
  775       DATA ISYM( 559)/O     0/,ISYM( 560)/O  1377/,ISYM( 561)/O     0/
  776       DATA ISYM( 562)/O 51524/,ISYM( 563)/O 47520/,ISYM( 564)/O    23/
  777       DATA ISYM( 565)/O 47162/,ISYM( 566)/O     0/,ISYM( 567)/O  1377/
  778       DATA ISYM( 568)/O     0/,ISYM( 569)/O 46525/,ISYM( 570)/O 46125/
  779       DATA ISYM( 571)/O    24/,ISYM( 572)/O140300/,ISYM( 573)/O     0/
  780       DATA ISYM( 574)/O  1377/,ISYM( 575)/O     0/,ISYM( 576)/O 46525/
  781       DATA ISYM( 577)/O 46123/,ISYM( 578)/O    24/,ISYM( 579)/O140700/
  782       DATA ISYM( 580)/O     0/,ISYM( 581)/O  1377/,ISYM( 582)/O  1727/
  783       DATA ISYM( 583)/O 42111/,ISYM( 584)/O 53125/,ISYM( 585)/O    24/
  784       DATA ISYM( 586)/O100300/,ISYM( 587)/O     0/,ISYM( 588)/O  1377/
  785       DATA ISYM( 589)/O  2045/,ISYM( 590)/O 42111/,ISYM( 591)/O 53123/
  786       DATA ISYM( 592)/O    24/,ISYM( 593)/O100700/,ISYM( 594)/O     0/
  787       DATA ISYM( 595)/O  1377/,ISYM( 596)/O     0/,ISYM( 597)/O 40504/
  788       DATA ISYM( 598)/O 42000/,ISYM( 599)/O    25/,ISYM( 600)/O150000/
  789       DATA ISYM( 601)/O     0/,ISYM( 602)/O  1377/,ISYM( 603)/O  1525/
  790       DATA ISYM( 604)/O 40504/,ISYM( 605)/O 42111/,ISYM( 606)/O    25/
  791       DATA ISYM( 607)/O150001/,ISYM( 608)/O     0/,ISYM( 609)/O  1377/
  792       DATA ISYM( 610)/O  1353/,ISYM( 611)/O 40504/,ISYM( 612)/O 42101/
  793       DATA ISYM( 613)/O    25/,ISYM( 614)/O150002/,ISYM( 615)/O     0/
  794       DATA ISYM( 616)/O  1377/,ISYM( 617)/O  1410/,ISYM( 618)/O 40504/
  795       DATA ISYM( 619)/O 42121/,ISYM( 620)/O    25/,ISYM( 621)/O 50000/
  796       DATA ISYM( 622)/O     0/,ISYM( 623)/O  1377/,ISYM( 624)/O  2004/
  797       DATA ISYM( 625)/O 51525/,ISYM( 626)/O 41111/,ISYM( 627)/O    25/
  798       DATA ISYM( 628)/O110001/,ISYM( 629)/O     0/,ISYM( 630)/O  1377/
  799       DATA ISYM( 631)/O  1606/,ISYM( 632)/O 51525/,ISYM( 633)/O 41101/
  800       DATA ISYM( 634)/O    25/,ISYM( 635)/O110002/,ISYM( 636)/O     0/
  801       DATA ISYM( 637)/O  1377/,ISYM( 638)/O  2103/,ISYM( 639)/O 51525/
  802       DATA ISYM( 640)/O 41121/,ISYM( 641)/O    25/,ISYM( 642)/O 50400/
  803       DATA ISYM( 643)/O     0/,ISYM( 644)/O  1377/,ISYM( 645)/O  1230/
  804       DATA ISYM( 646)/O 51525/,ISYM( 647)/O 41000/,ISYM( 648)/O    25/
  805       DATA ISYM( 649)/O110000/,ISYM( 650)/O     0/,ISYM( 651)/O  1377/
  806       DATA ISYM( 652)/O     0/,ISYM( 653)/O 40516/,ISYM( 654)/O 42000/
  807       DATA ISYM( 655)/O    26/,ISYM( 656)/O140000/,ISYM( 657)/O     0/
  808       DATA ISYM( 658)/O  1377/,ISYM( 659)/O  1362/,ISYM( 660)/O 40516/
  809       DATA ISYM( 661)/O 42111/,ISYM( 662)/O    26/,ISYM( 663)/O140000/
  810       DATA ISYM( 664)/O     0/,ISYM( 665)/O  1377/,ISYM( 666)/O     0/
  811       DATA ISYM( 667)/O 47522/,ISYM( 668)/O 44400/,ISYM( 669)/O    26/
  812       DATA ISYM( 670)/O     0/,ISYM( 671)/O     0/,ISYM( 672)/O   777/
  813       DATA ISYM( 673)/O  1272/,ISYM( 674)/O 47522/,ISYM( 675)/O    26/
  814       DATA ISYM( 676)/O100000/,ISYM( 677)/O     0/,ISYM( 678)/O  1377/
  815       DATA ISYM( 679)/O  1534/,ISYM( 680)/O 42517/,ISYM( 681)/O 51000/
  816       DATA ISYM( 682)/O    27/,ISYM( 683)/O130400/,ISYM( 684)/O     0/
  817       DATA ISYM( 685)/O  1377/,ISYM( 686)/O  1500/,ISYM( 687)/O 42517/
  818       DATA ISYM( 688)/O 51111/,ISYM( 689)/O    27/,ISYM( 690)/O130400/
  819       DATA ISYM( 691)/O     0/,ISYM( 692)/O  1377/,ISYM( 693)/O  1570/
  820       DATA ISYM( 694)/O 41515/,ISYM( 695)/O 50000/,ISYM( 696)/O    30/
  821       DATA ISYM( 697)/O130000/,ISYM( 698)/O     0/,ISYM( 699)/O  1377/
  822       DATA ISYM( 700)/O  1335/,ISYM( 701)/O 41515/,ISYM( 702)/O 50101/
  823       DATA ISYM( 703)/O    30/,ISYM( 704)/O130001/,ISYM( 705)/O     0/
  824       DATA ISYM( 706)/O  1377/,ISYM( 707)/O     0/,ISYM( 708)/O 41515/
  825       DATA ISYM( 709)/O 50111/,ISYM( 710)/O    30/,ISYM( 711)/O  6000/
  826       DATA ISYM( 712)/O     0/,ISYM( 713)/O  1377/,ISYM( 714)/O     0/
  827       DATA ISYM( 715)/O 42530/,ISYM( 716)/O 43400/,ISYM( 717)/O    31/
  828       DATA ISYM( 718)/O140500/,ISYM( 719)/O     0/,ISYM( 720)/O  1377/
  829       DATA ISYM( 721)/O     0/,ISYM( 722)/O 41510/,ISYM( 723)/O 45400/
  830       DATA ISYM( 724)/O    32/,ISYM( 725)/O 40600/,ISYM( 726)/O     0/
  831       DATA ISYM( 727)/O  1377/,ISYM( 728)/O  1775/,ISYM( 729)/O 41515/
  832       DATA ISYM( 730)/O 50115/,ISYM( 731)/O    33/,ISYM( 732)/O130410/
  833       DATA ISYM( 733)/O     0/,ISYM( 734)/O  1377/,ISYM( 735)/O  1543/
  834       DATA ISYM( 736)/O 40504/,ISYM( 737)/O 42130/,ISYM( 738)/O    34/
  835       DATA ISYM( 739)/O150400/,ISYM( 740)/O     0/,ISYM( 741)/O  1377/
  836       DATA ISYM( 742)/O     0/,ISYM( 743)/O 51525/,ISYM( 744)/O 41130/
  837       DATA ISYM( 745)/O    34/,ISYM( 746)/O110400/,ISYM( 747)/O     0/
  838       DATA ISYM( 748)/O  1377/,ISYM( 749)/O     0/,ISYM( 750)/O 40502/
  839       DATA ISYM( 751)/O 41504/,ISYM( 752)/O    35/,ISYM( 753)/O140400/
  840       DATA ISYM( 754)/O     0/,ISYM( 755)/O  1377/,ISYM( 756)/O  1444/
  841       DATA ISYM( 757)/O 51502/,ISYM( 758)/O 41504/,ISYM( 759)/O    35/
  842       DATA ISYM( 760)/O100400/,ISYM( 761)/O     0/,ISYM( 762)/O  1777/
  843       DATA ISYM( 763)/O     0/,ISYM( 764)/O 46517/,ISYM( 765)/O 53105/
  844       DATA ISYM( 766)/O 50000/,ISYM( 767)/O    36/,ISYM( 768)/O   400/
  845       DATA ISYM( 769)/O     0/,ISYM( 770)/O  1377/,ISYM( 771)/O  1453/
  846       DATA ISYM( 772)/O 42102/,ISYM( 773)/O 51101/,ISYM( 774)/O    40/
  847       DATA ISYM( 775)/O 50710/,ISYM( 776)/O     0/,ISYM( 777)/O  1377/
  848       DATA ISYM( 778)/O     0/,ISYM( 779)/O 42102/,ISYM( 780)/O 52000/
  849       DATA ISYM( 781)/O    40/,ISYM( 782)/O 50310/,ISYM( 783)/O     0/
  850       DATA ISYM( 784)/O  1377/,ISYM( 785)/O  1552/,ISYM( 786)/O 42102/
  851       DATA ISYM( 787)/O 44111/,ISYM( 788)/O    40/,ISYM( 789)/O 51310/
  852       DATA ISYM( 790)/O     0/,ISYM( 791)/O  1377/,ISYM( 792)/O  2215/
  853       DATA ISYM( 793)/O 42102/,ISYM( 794)/O 46123/,ISYM( 795)/O    40/
  854       DATA ISYM( 796)/O 51710/,ISYM( 797)/O     0/,ISYM( 798)/O  1377/
  855       DATA ISYM( 799)/O     0/,ISYM( 800)/O 42102/,ISYM( 801)/O 41503/
  856       DATA ISYM( 802)/O    40/,ISYM( 803)/O 52310/,ISYM( 804)/O     0/
  857       DATA ISYM( 805)/O  1377/,ISYM( 806)/O  1462/,ISYM( 807)/O 42102/
  858       DATA ISYM( 808)/O 41523/,ISYM( 809)/O    40/,ISYM( 810)/O 52710/
  859       DATA ISYM( 811)/O     0/,ISYM( 812)/O  1377/,ISYM( 813)/O     0/
  860       DATA ISYM( 814)/O 42102/,ISYM( 815)/O 47105/,ISYM( 816)/O    40/
  861       DATA ISYM( 817)/O 53310/,ISYM( 818)/O     0/,ISYM( 819)/O  1377/
  862       DATA ISYM( 820)/O  1516/,ISYM( 821)/O 42102/,ISYM( 822)/O 42521/
  863       DATA ISYM( 823)/O    40/,ISYM( 824)/O 53710/,ISYM( 825)/O     0/
  864       DATA ISYM( 826)/O  1377/,ISYM( 827)/O     0/,ISYM( 828)/O 42102/
  865       DATA ISYM( 829)/O 53103/,ISYM( 830)/O    40/,ISYM( 831)/O 54310/
  866       DATA ISYM( 832)/O     0/,ISYM( 833)/O  1377/,ISYM( 834)/O     0/
  867       DATA ISYM( 835)/O 42102/,ISYM( 836)/O 53123/,ISYM( 837)/O    40/
  868       DATA ISYM( 838)/O 54710/,ISYM( 839)/O     0/,ISYM( 840)/O  1377/
  869       DATA ISYM( 841)/O     0/,ISYM( 842)/O 42102/,ISYM( 843)/O 50114/
  870       DATA ISYM( 844)/O    40/,ISYM( 845)/O 55310/,ISYM( 846)/O     0/
  871       DATA ISYM( 847)/O  1377/,ISYM( 848)/O     0/,ISYM( 849)/O 42102/
  872       DATA ISYM( 850)/O 46511/,ISYM( 851)/O    40/,ISYM( 852)/O 55710/
  873       DATA ISYM( 853)/O     0/,ISYM( 854)/O  1377/,ISYM( 855)/O  1561/
  874       DATA ISYM( 856)/O 42102/,ISYM( 857)/O 43505/,ISYM( 858)/O    40/
  875       DATA ISYM( 859)/O 56310/,ISYM( 860)/O     0/,ISYM( 861)/O  1377/
  876       DATA ISYM( 862)/O  1577/,ISYM( 863)/O 42102/,ISYM( 864)/O 46124/
  877       DATA ISYM( 865)/O    40/,ISYM( 866)/O 56710/,ISYM( 867)/O     0/
  878       DATA ISYM( 868)/O  1377/,ISYM( 869)/O     0/,ISYM( 870)/O 42102/
  879       DATA ISYM( 871)/O 43524/,ISYM( 872)/O    40/,ISYM( 873)/O 57310/
  880       DATA ISYM( 874)/O     0/,ISYM( 875)/O  1377/,ISYM( 876)/O     0/
  881       DATA ISYM( 877)/O 42102/,ISYM( 878)/O 46105/,ISYM( 879)/O    40/
  882       DATA ISYM( 880)/O 57710/,ISYM( 881)/O     0/,ISYM( 882)/O  1377/
  883       DATA ISYM( 883)/O     0/,ISYM( 884)/O 46105/,ISYM( 885)/O 40400/
  884       DATA ISYM( 886)/O    42/,ISYM( 887)/O 40700/,ISYM( 888)/O     0/
  885       DATA ISYM( 889)/O  1377/,ISYM( 890)/O     0/,ISYM( 891)/O 40523/
  886       DATA ISYM( 892)/O 46000/,ISYM( 893)/O    43/,ISYM( 894)/O160400/
  887       DATA ISYM( 895)/O     0/,ISYM( 896)/O  1377/,ISYM( 897)/O     0/
  888       DATA ISYM( 898)/O 40523/,ISYM( 899)/O 51000/,ISYM( 900)/O    43/
  889       DATA ISYM( 901)/O160000/,ISYM( 902)/O     0/,ISYM( 903)/O  1377/
  890       DATA ISYM( 904)/O  1660/,ISYM( 905)/O 46123/,ISYM( 906)/O 46000/
  891       DATA ISYM( 907)/O    43/,ISYM( 908)/O160410/,ISYM( 909)/O     0/
  892       DATA ISYM( 910)/O  1377/,ISYM( 911)/O  2111/,ISYM( 912)/O 46123/
  893       DATA ISYM( 913)/O 51000/,ISYM( 914)/O    43/,ISYM( 915)/O160010/
  894       DATA ISYM( 916)/O     0/,ISYM( 917)/O  1377/,ISYM( 918)/O  1710/
  895       DATA ISYM( 919)/O 41103/,ISYM( 920)/O 44107/,ISYM( 921)/O    44/
  896       DATA ISYM( 922)/O   500/,ISYM( 923)/O     0/,ISYM( 924)/O  1377/
  897       DATA ISYM( 925)/O  2171/,ISYM( 926)/O 41103/,ISYM( 927)/O 46122/
  898       DATA ISYM( 928)/O    44/,ISYM( 929)/O   600/,ISYM( 930)/O     0/
  899       DATA ISYM( 931)/O  1377/,ISYM( 932)/O     0/,ISYM( 933)/O 41123/
  900       DATA ISYM( 934)/O 42524/,ISYM( 935)/O    44/,ISYM( 936)/O   700/
  901       DATA ISYM( 937)/O     0/,ISYM( 938)/O  1377/,ISYM( 939)/O     0/
  902       DATA ISYM( 940)/O 41124/,ISYM( 941)/O 51524/,ISYM( 942)/O    44/
  903       DATA ISYM( 943)/O   400/,ISYM( 944)/O     0/,ISYM( 945)/O  1777/
  904       DATA ISYM( 946)/O     0/,ISYM( 947)/O 41103/,ISYM( 948)/O 44107/
  905       DATA ISYM( 949)/O 53400/,ISYM( 950)/O    47/,ISYM( 951)/O   500/
  906       DATA ISYM( 952)/O     0/,ISYM( 953)/O  1777/,ISYM( 954)/O  2075/
  907       DATA ISYM( 955)/O 41103/,ISYM( 956)/O 46122/,ISYM( 957)/O 53400/
  908       DATA ISYM( 958)/O    47/,ISYM( 959)/O   600/,ISYM( 960)/O     0/
  909       DATA ISYM( 961)/O  1777/,ISYM( 962)/O  2013/,ISYM( 963)/O 41123/
  910       DATA ISYM( 964)/O 42524/,ISYM( 965)/O 53400/,ISYM( 966)/O    47/
  911       DATA ISYM( 967)/O   700/,ISYM( 968)/O     0/,ISYM( 969)/O  1777/
  912       DATA ISYM( 970)/O     0/,ISYM( 971)/O 41124/,ISYM( 972)/O 51524/
  913       DATA ISYM( 973)/O 53400/,ISYM( 974)/O    47/,ISYM( 975)/O   400/
  914       DATA ISYM( 976)/O     0/,ISYM( 977)/O  1377/,ISYM( 978)/O  2053/
  915       DATA ISYM( 979)/O 46517/,ISYM( 980)/O 53105/,ISYM( 981)/O    45/
  916       DATA ISYM( 982)/O     0/,ISYM( 983)/O     0/,ISYM( 984)/O  1777/
  917       DATA ISYM( 985)/O  2061/,ISYM( 986)/O 46517/,ISYM( 987)/O 53105/
  918       DATA ISYM( 988)/O 40400/,ISYM( 989)/O    45/,ISYM( 990)/O     0/
  919       DATA ISYM( 991)/O     0/,ISYM( 992)/O  1777/,ISYM( 993)/O     0/
  920       DATA ISYM( 994)/O 46517/,ISYM( 995)/O 53105/,ISYM( 996)/O 50400/
  921       DATA ISYM( 997)/O    45/,ISYM( 998)/O 70000/,ISYM( 999)/O     0/
  922       DATA ISYM(1000)/O  1377/,ISYM(1001)/O     0/,ISYM(1002)/O 46104/
  923       DATA ISYM(1003)/O 46400/,ISYM(1004)/O    46/,ISYM(1005)/O 46000/
  924       DATA ISYM(1006)/O     0/,ISYM(1007)/O  1377/,ISYM(1008)/O  2031/
  925       DATA ISYM(1009)/O 51524/,ISYM(1010)/O 46400/,ISYM(1011)/O    46/
  926       DATA ISYM(1012)/O 44200/,ISYM(1013)/O     0/,ISYM(1014)/O  1777/
  927       DATA ISYM(1015)/O     0/,ISYM(1016)/O 46517/,ISYM(1017)/O 53105/
  928       DATA ISYM(1018)/O 46400/,ISYM(1019)/O    46/,ISYM(1020)/O 44200/
  929       DATA ISYM(1021)/O     0/,ISYM(1022)/O  1377/,ISYM(1023)/O     0/
  930       DATA ISYM(1024)/O 51117/,ISYM(1025)/O 46000/,ISYM(1026)/O    43/
  931       DATA ISYM(1027)/O160430/,ISYM(1028)/O     0/,ISYM(1029)/O  1377/
  932       DATA ISYM(1030)/O  2125/,ISYM(1031)/O 51117/,ISYM(1032)/O 51000/
  933       DATA ISYM(1033)/O    43/,ISYM(1034)/O160030/,ISYM(1035)/O     0/
  934       DATA ISYM(1036)/O  1377/,ISYM(1037)/O     0/,ISYM(1038)/O 51117/
  935       DATA ISYM(1039)/O 54114/,ISYM(1040)/O    43/,ISYM(1041)/O160420/
  936       DATA ISYM(1042)/O     0/,ISYM(1043)/O  1377/,ISYM(1044)/O     0/
  937       DATA ISYM(1045)/O 51117/,ISYM(1046)/O 54122/,ISYM(1047)/O    43/
  938       DATA ISYM(1048)/O160020/,ISYM(1049)/O     0/,ISYM(1050)/O   401/
  939       DATA ISYM(1051)/O  2133/,ISYM(1052)/O 42060/,ISYM(1053)/O     2/
  940       DATA ISYM(1054)/O     0/,ISYM(1055)/O     0/,ISYM(1056)/O   401/
  941       DATA ISYM(1057)/O  2141/,ISYM(1058)/O 42061/,ISYM(1059)/O     2/
  942       DATA ISYM(1060)/O     1/,ISYM(1061)/O     0/,ISYM(1062)/O   401/
  943       DATA ISYM(1063)/O  2147/,ISYM(1064)/O 42062/,ISYM(1065)/O     2/
  944       DATA ISYM(1066)/O     2/,ISYM(1067)/O     0/,ISYM(1068)/O   401/
  945       DATA ISYM(1069)/O  2155/,ISYM(1070)/O 42063/,ISYM(1071)/O     2/
  946       DATA ISYM(1072)/O     3/,ISYM(1073)/O     0/,ISYM(1074)/O   401/
  947       DATA ISYM(1075)/O  2163/,ISYM(1076)/O 42064/,ISYM(1077)/O     2/
  948       DATA ISYM(1078)/O     4/,ISYM(1079)/O     0/,ISYM(1080)/O   401/
  949       DATA ISYM(1081)/O     0/,ISYM(1082)/O 42065/,ISYM(1083)/O     2/
  950       DATA ISYM(1084)/O     5/,ISYM(1085)/O     0/,ISYM(1086)/O   401/
  951       DATA ISYM(1087)/O     0/,ISYM(1088)/O 42066/,ISYM(1089)/O     2/
  952       DATA ISYM(1090)/O     6/,ISYM(1091)/O     0/,ISYM(1092)/O   401/
  953       DATA ISYM(1093)/O     0/,ISYM(1094)/O 42067/,ISYM(1095)/O     2/
  954       DATA ISYM(1096)/O     7/,ISYM(1097)/O     0/,ISYM(1098)/O   401/
  955       DATA ISYM(1099)/O     0/,ISYM(1100)/O 40460/,ISYM(1101)/O     2/
  956       DATA ISYM(1102)/O    10/,ISYM(1103)/O     0/,ISYM(1104)/O   401/
  957       DATA ISYM(1105)/O     0/,ISYM(1106)/O 40461/,ISYM(1107)/O     2/
  958       DATA ISYM(1108)/O    11/,ISYM(1109)/O     0/,ISYM(1110)/O   401/
  959       DATA ISYM(1111)/O     0/,ISYM(1112)/O 40462/,ISYM(1113)/O     2/
  960       DATA ISYM(1114)/O    12/,ISYM(1115)/O     0/,ISYM(1116)/O   401/
  961       DATA ISYM(1117)/O     0/,ISYM(1118)/O 40463/,ISYM(1119)/O     2/
  962       DATA ISYM(1120)/O    13/,ISYM(1121)/O     0/,ISYM(1122)/O   401/
  963       DATA ISYM(1123)/O     0/,ISYM(1124)/O 40464/,ISYM(1125)/O     2/
  964       DATA ISYM(1126)/O    14/,ISYM(1127)/O     0/,ISYM(1128)/O   401/
  965       DATA ISYM(1129)/O     0/,ISYM(1130)/O 40465/,ISYM(1131)/O     2/
  966       DATA ISYM(1132)/O    15/,ISYM(1133)/O     0/,ISYM(1134)/O   401/
  967       DATA ISYM(1135)/O     0/,ISYM(1136)/O 40466/,ISYM(1137)/O     2/
  968       DATA ISYM(1138)/O    16/,ISYM(1139)/O     0/,ISYM(1140)/O   401/
  969       DATA ISYM(1141)/O  2177/,ISYM(1142)/O 40467/,ISYM(1143)/O     2/
  970       DATA ISYM(1144)/O    17/,ISYM(1145)/O     0/,ISYM(1146)/O   401/
  971       DATA ISYM(1147)/O     0/,ISYM(1148)/O 51520/,ISYM(1149)/O     2/
  972       DATA ISYM(1150)/O    17/,ISYM(1151)/O     0/,ISYM(1152)/O  1001/
  973       DATA ISYM(1153)/O     0/,ISYM(1154)/O 52523/,ISYM(1155)/O 50000/
  974       DATA ISYM(1156)/O     2/,ISYM(1157)/O    20/,ISYM(1158)/O     0/
  975       DATA ISYM(1159)/O  1001/,ISYM(1160)/O     0/,ISYM(1161)/O 41503/
  976       DATA ISYM(1162)/O 51000/,ISYM(1163)/O     2/,ISYM(1164)/O    74/
  977       DATA ISYM(1165)/O     0/,ISYM(1166)/O   401/,ISYM(1167)/O     0/
  978       DATA ISYM(1168)/O 51522/,ISYM(1169)/O     2/,ISYM(1170)/O   174/
  979       DATA ISYM(1171)/O     0/,ISYM(1172)/O     0/,ISYM(1173)/O     0/
  980       DATA NET1( 1)/ 29/,NET2( 1)/  0/,NET3( 1)/  2/,
  981      & NET4( 1)/  2/,NET5( 1)/  1/
  982       DATA NET1( 2)/ 30/,NET2( 2)/  0/,NET3( 2)/  0/,
  983      & NET4( 2)/  3/,NET5( 2)/  2/
  984       DATA NET1( 3)/ 46/,NET2( 3)/  0/,NET3( 3)/  5/,
  985      & NET4( 3)/  4/,NET5( 3)/  0/
  986       DATA NET1( 4)/ 24/,NET2( 4)/  0/,NET3( 4)/  0/,
  987      & NET4( 4)/  5/,NET5( 4)/  3/
  988       DATA NET1( 5)/  0/,NET2( 5)/  8/,NET3( 5)/  0/,
  989      & NET4( 5)/  6/,NET5( 5)/  0/
  990       DATA NET1( 6)/ 44/,NET2( 6)/  0/,NET3( 6)/ -1/,
  991      & NET4( 6)/  5/,NET5( 6)/  4/
  992       DATA NET1( 7)/  0/,NET2( 7)/  0/,NET3( 7)/  0/,
  993      & NET4( 7)/  0/,NET5( 7)/  0/
  994       DATA NET1( 8)/ 28/,NET2( 8)/  0/,NET3( 8)/ 12/,
  995      & NET4( 8)/  9/,NET5( 8)/  5/
  996       DATA NET1( 9)/ 45/,NET2( 9)/  0/,NET3( 9)/ 11/,
  997      & NET4( 9)/ 10/,NET5( 9)/  0/
  998       DATA NET1(10)/ 28/,NET2(10)/  0/,NET3(10)/  0/,
  999      & NET4(10)/ 11/,NET5(10)/ 15/
 1000       DATA NET1(11)/ 47/,NET2(11)/  0/,NET3(11)/ -1/,
 1001      & NET4(11)/  8/,NET5(11)/  0/
 1002       DATA NET1(12)/ 40/,NET2(12)/  0/,NET3(12)/ 16/,
 1003      & NET4(12)/ 13/,NET5(12)/ 34/
 1004       DATA NET1(13)/ 28/,NET2(13)/  0/,NET3(13)/ 24/,
 1005      & NET4(13)/ 14/,NET5(13)/  6/
 1006       DATA NET1(14)/ 41/,NET2(14)/  0/,NET3(14)/  0/,
 1007      & NET4(14)/ 15/,NET5(14)/  0/
 1008       DATA NET1(15)/ 43/,NET2(15)/  0/,NET3(15)/ -1/,
 1009      & NET4(15)/ -1/,NET5(15)/  7/
 1010       DATA NET1(16)/ 45/,NET2(16)/  0/,NET3(16)/ 20/,
 1011      & NET4(16)/ 17/,NET5(16)/ 24/
 1012       DATA NET1(17)/ 40/,NET2(17)/  0/,NET3(17)/ 23/,
 1013      & NET4(17)/ 18/,NET5(17)/ 34/
 1014       DATA NET1(18)/ 28/,NET2(18)/  0/,NET3(18)/ 24/,
 1015      & NET4(18)/ 19/,NET5(18)/  8/
 1016       DATA NET1(19)/ 41/,NET2(19)/  0/,NET3(19)/  0/,
 1017      & NET4(19)/ -1/,NET5(19)/  0/
 1018       DATA NET1(20)/ 35/,NET2(20)/  0/,NET3(20)/ 22/,
 1019      & NET4(20)/ 21/,NET5(20)/  0/
 1020       DATA NET1(21)/  0/,NET2(21)/ 36/,NET3(21)/  0/,
 1021      & NET4(21)/ -1/,NET5(21)/ 10/
 1022       DATA NET1(22)/ 27/,NET2(22)/  0/,NET3(22)/ 25/,
 1023      & NET4(22)/ -1/,NET5(22)/ 16/
 1024       DATA NET1(23)/  0/,NET2(23)/ 40/,NET3(23)/  0/,
 1025      & NET4(23)/ 26/,NET5(23)/ 11/
 1026       DATA NET1(24)/  0/,NET2(24)/ 38/,NET3(24)/  0/,
 1027      & NET4(24)/ 26/,NET5(24)/ 11/
 1028       DATA NET1(25)/  0/,NET2(25)/ 36/,NET3(25)/  0/,
 1029      & NET4(25)/ 26/,NET5(25)/ 11/
 1030       DATA NET1(26)/ 40/,NET2(26)/  0/,NET3(26)/ -1/,
 1031      & NET4(26)/ 27/,NET5(26)/  0/
 1032       DATA NET1(27)/ 28/,NET2(27)/  0/,NET3(27)/  0/,
 1033      & NET4(27)/ 28/,NET5(27)/ 12/
 1034       DATA NET1(28)/ 46/,NET2(28)/  0/,NET3(28)/ 31/,
 1035      & NET4(28)/ 29/,NET5(28)/  0/
 1036       DATA NET1(29)/ 24/,NET2(29)/  0/,NET3(29)/  0/,
 1037      & NET4(29)/ 30/,NET5(29)/ 13/
 1038       DATA NET1(30)/ 41/,NET2(30)/  0/,NET3(30)/  0/,
 1039      & NET4(30)/ -1/,NET5(30)/  0/
 1040       DATA NET1(31)/ 44/,NET2(31)/  0/,NET3(31)/ 35/,
 1041      & NET4(31)/ 32/,NET5(31)/  0/
 1042       DATA NET1(32)/ 28/,NET2(32)/  0/,NET3(32)/  0/,
 1043      & NET4(32)/ 33/,NET5(32)/ 14/
 1044       DATA NET1(33)/ 46/,NET2(33)/  0/,NET3(33)/ 35/,
 1045      & NET4(33)/ 34/,NET5(33)/  0/
 1046       DATA NET1(34)/ 24/,NET2(34)/  0/,NET3(34)/  0/,
 1047      & NET4(34)/ 35/,NET5(34)/ 13/
 1048       DATA NET1(35)/ 41/,NET2(35)/  0/,NET3(35)/  0/,
 1049      & NET4(35)/ -1/,NET5(35)/  0/
 1050       DATA NET1(36)/ 45/,NET2(36)/  0/,NET3(36)/ 37/,
 1051      & NET4(36)/ 37/,NET5(36)/ 24/
 1052       DATA NET1(37)/ 40/,NET2(37)/  0/,NET3(37)/ 40/,
 1053      & NET4(37)/ 38/,NET5(37)/ 34/
 1054       DATA NET1(38)/  0/,NET2(38)/ 36/,NET3(38)/  0/,
 1055      & NET4(38)/ 39/,NET5(38)/  0/
 1056       DATA NET1(39)/ 41/,NET2(39)/  0/,NET3(39)/  0/,
 1057      & NET4(39)/ 43/,NET5(39)/ 35/
 1058       DATA NET1(40)/ 24/,NET2(40)/  0/,NET3(40)/ 41/,
 1059      & NET4(40)/ 43/,NET5(40)/ 17/
 1060       DATA NET1(41)/ 25/,NET2(41)/  0/,NET3(41)/ 42/,
 1061      & NET4(41)/ 43/,NET5(41)/ 17/
 1062       DATA NET1(42)/ 42/,NET2(42)/  0/,NET3(42)/  0/,
 1063      & NET4(42)/ 43/,NET5(42)/ 17/
 1064       DATA NET1(43)/ 62/,NET2(43)/  0/,NET3(43)/ 45/,
 1065      & NET4(43)/ 44/,NET5(43)/ 25/
 1066       DATA NET1(44)/ 62/,NET2(44)/  0/,NET3(44)/  0/,
 1067      & NET4(44)/ 37/,NET5(44)/  0/
 1068       DATA NET1(45)/ 60/,NET2(45)/  0/,NET3(45)/ 47/,
 1069      & NET4(45)/ 46/,NET5(45)/ 26/
 1070       DATA NET1(46)/ 60/,NET2(46)/  0/,NET3(46)/  0/,
 1071      & NET4(46)/ 37/,NET5(46)/  0/
 1072       DATA NET1(47)/ 38/,NET2(47)/  0/,NET3(47)/ 48/,
 1073      & NET4(47)/ 36/,NET5(47)/ 27/
 1074       DATA NET1(48)/ 33/,NET2(48)/  0/,NET3(48)/ 50/,
 1075      & NET4(48)/ 36/,NET5(48)/ 28/
 1076       DATA NET1(49)/ 37/,NET2(49)/  0/,NET3(49)/ 50/,
 1077      & NET4(49)/ 36/,NET5(49)/ 29/
 1078       DATA NET1(50)/ 42/,NET2(50)/  0/,NET3(50)/ 51/,
 1079      & NET4(50)/ 36/,NET5(50)/ 30/
 1080       DATA NET1(51)/ 47/,NET2(51)/  0/,NET3(51)/ 52/,
 1081      & NET4(51)/ 36/,NET5(51)/ 31/
 1082       DATA NET1(52)/ 43/,NET2(52)/  0/,NET3(52)/ 53/,
 1083      & NET4(52)/ 36/,NET5(52)/ 32/
 1084       DATA NET1(53)/ 45/,NET2(53)/  0/,NET3(53)/ -1/,
 1085      & NET4(53)/ 36/,NET5(53)/ 33/
 1086       DATA KASH( 1)/   0/,KASH( 2)/ 573/,KASH( 3)/ 740/,KASH( 4)/ 139/
 1087       DATA KASH( 5)/1013/,KASH( 6)/ 960/,KASH( 7)/ 559/,KASH( 8)/  16/
 1088       DATA KASH( 9)/ 328/,KASH(10)/ 594/,KASH(11)/ 608/,KASH(12)/1042/
 1089       DATA KASH(13)/ 797/,KASH(14)/ 147/,KASH(15)/ 384/,KASH(16)/   0/
 1090       DATA KASH(17)/   0/,KASH(18)/   0/,KASH(19)/ 601/,KASH(20)/ 314/
 1091       DATA KASH(21)/ 916/,KASH(22)/ 300/,KASH(23)/ 279/,KASH(24)/  24/
 1092       DATA KASH(25)/ 335/,KASH(26)/  52/,KASH(27)/  31/,KASH(28)/ 356/
 1093       DATA KASH(29)/ 202/,KASH(30)/  38/,KASH(31)/ 110/,KASH(32)/ 503/
 1094       DATA KASH(33)/ 691/,KASH(34)/ 251/,KASH(35)/ 391/,KASH(36)/ 923/
 1095       DATA KASH(37)/   9/,KASH(38)/ 531/,KASH(39)/ 209/,KASH(40)/ 293/
 1096       DATA KASH(41)/ 168/,KASH(42)/  60/,KASH(43)/ 643/,KASH(44)/ 118/
 1097       DATA KASH(45)/  90/,KASH(46)/ 155/,KASH(47)/ 216/,KASH(48)/ 286/
 1098       DATA KASH(49)/   0/,KASH(50)/ 265/,KASH(51)/   1/,KASH(52)/ 510/
 1099       DATA KASH(53)/  67/,KASH(54)/1055/,KASH(55)/ 587/,KASH(56)/ 237/
 1100       DATA KASH(57)/  82/,KASH(58)/ 132/,KASH(59)/  74/,KASH(60)/ 230/
 1101       DATA KASH(61)/  45/,KASH(62)/ 937/,KASH(63)/   0/,KASH(64)/   0/
 1102       END
 1103       SUBROUTINE ERR(JERNO)
 1104 CC    NAM: ERR  VER: 1.0  DAT: 12/08/78  CMP: ALL
 1105 CC
 1106 CC    SYS: MACS
 1107 CC
 1108 CC    ENT: JERNO > 0 - ERROR NUMBER
 1109 CC               = 0 - OUTPUT TOTAL # OF ERRORS FOR CURRENT INSTRUCTION
 1110 CC               = -1 - OUTPUT TOTAL # OF ERRORS FOR PROGRAM
 1111 CC
 1112 CC    RTN: JERNO - N/C
 1113 CC
 1114 CC    FNC: THIS ROUTINE TABLES ERROR #'S FOR EACH SOURCE STATEMENT
 1115 CC         AND AT THE END OF SCAN OUTPUTS ALL ERRORS FOR IT.
 1116 CC         IT OUTPUTS TOTAL # ERRORS FOR THE PROGRAM AT THE END.
 1117 CC
 1118 CC    REV: N/A
 1119 CC
 1120 CCALLS PAGE
 1121 C
 1122 C*
 1123       IMPLICIT INTEGER (A-Z)
 1124       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
 1125      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
 1126      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
 1127       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
 1128       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
 1129       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
 1130       COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
 1131       COMMON /A/ LIST,ICOL,NEST,LUCI,LULT
 1132 C
 1133       DIMENSION NERR(2,10)
 1134       DATA KD1LN2/0/
 1135       DATA ITOTER/0/,LASK/42/
 1136 C***  TABLE THE ERROR FOR THIS SOURCE LINE?
 1137       IF(JERNO.LE.0) GO TO 100
 1138          IF(JERR.EQ.10) RETURN
 1139          JERR=JERR+1
 1140          NERR(1,JERR)=JERNO
 1141          NERR(2,JERR)=KOLUMN
 1142          RETURN
 1143 C***  PRINT THE ERRORS IF ANY, 0=NONE, LESS THAN 0= PRINT TOTAL
 1144   100 IF(JERNO.LT.0) GO TO 300
 1145       IF(JERR.EQ.0) RETURN
 1146 C***  PRINT EACH ERROR FOR THIS SOURCE LINE.
 1147       DO 200 K=1,JERR
 1148       KK=NERR(2,K)
 1149       DO 130 J=1,41
 1150   130 JBUF(J)=LSP
 1151 C***  NAX # CHARS TO PRINT.
 1152       IF(KK.GT.41) KK=41
 1153       IF(KK.GT.0) JBUF(KK)=LASK
 1154 C
 1155 C***  IF "NOLIST" PRINT THE SOURCE LINE HERE
 1156 C***  KD1LN2= LAST LINE # ENCOUNTERED WITH AN ERROR.
 1157       JBUF(51)=KD1LN2
 1158       IF(LIST.EQ.1) GO TO 140
 1159       IF(KARD1(1).EQ.0)  GO TO 140
 1160       IF(KD1BCT.GT.41)  KD1BCT=41
 1161       WRITE(LUOT,9900) KD1LNO,(KARD1(J),J=1,KD1BCT)
 1162       CALL PAGE(1)
 1163 9900  FORMAT(I4,21X,80A1)
 1164       KARD1(1)=0
 1165 140   CONTINUE
 1166       WRITE(LUOT,9980) NERR(1,K),KD1LN2,(JBUF(J),J=1,KK)
 1167 9980  FORMAT('****** ERROR ',I4,'--',I4,41A1)
 1168       CALL PAGE(1)
 1169 200   CONTINUE
 1170 C***  KEEP LINE # OF THIS ERROR.
 1171       KD1LN2=KD1LNO
 1172       ITOTER=ITOTER+JERR
 1173       JERR=0
 1174       RETURN
 1175 C***  FINAL ERROR COUNT PRINT
 1176 300   WRITE(LUOT,9970) ITOTER,KD1LN2
 1177 9970  FORMAT(/' ****** TOTAL ERRORS ',I3,'--',I4)
 1178       CALL PAGE(2)
 1179 C***  IF SOURCE GOES TO FILE, PRINT TOTAL ERRORS AT CONSOLE
 1180       IF(LUOT.NE.LULT)  WRITE(LULT,9970) ITOTER,KD1LN2
 1181       RETURN
 1182       END
 1183       SUBROUTINE COMDEP
 1184 CC    NAM: COMDEP  VER: 1.0  DAT: 12/08/78  CMP: PDP-11
 1185 CC
 1186 CC    SYS: MACS
 1187 CC
 1188 CC    ENT: N/A
 1189 CC
 1190 CC    RTN: N/A
 1191 CC
 1192 CC    FNC: THIS ROUTINE SETS VARIABLES IN COMMON TO WHAT THE
 1193 CC         COMPUTER IT IS CURRENTLY RUNNING ON REQUIRES.
 1194 CC         IT ALSO SETS I/O DEVICE NUMBERS TO 6800 DEVICES.
 1195 CC         DEVICE NUMBER  VARIABLE NAME
 1196 CC              2            LUSI - SOURCE INPUT
 1197 CC              3            LUOT - ASSEMBLY LISTING(TO A FILE)
 1198 CC              6            LUOT - ASSEMBLY LISTING( TO PRINTER)
 1199 CC              5            LUOT - ASSEMBLY LISTING( TO CONSOLE)
 1200 CC              5            LULT - OUTPUT TO CONSOLE.
 1201 CC              5            LUCI - INPUT FROM CONSOLE.
 1202 CC              1            LUOO - ASSEMBLED OBJECT OUTPUT.
 1203 CC
 1204 CC
 1205 CC    REV: N/A
 1206 CC
 1207 C*
 1208       IMPLICIT INTEGER (A-Z)
 1209       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
 1210      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
 1211      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
 1212       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
 1213       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
 1214       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
 1215       COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
 1216       COMMON /A/ LIST,ICOL,NEST,LUCI,LULT
 1217 C
 1218 C
 1219 C
 1220 C***  IHB480 CHANGED TO HEX B180 FROM B480
 1221       DATA IB480/O130600/,IHX9K/O110000/
 1222 C***  IHB480 = $B180 HEX
 1223       IHB480 = IB480
 1224 C***  IHEX9K = 9000 HEX
 1225       IHEX9K=IHX9K
 1226 C***  # OF BYTES PER COMPUTER WORD
 1227       NBPW=2
 1228 C
 1229 C***  DEFAULT SOURCE OUTPUT DEVICE NUMBER
 1230 C
 1231       LUOT=6
 1232 C
 1233 C***  SOURCE INPUT DEVICE NUMBER
 1234 C
 1235       LUSI=2
 1236 C
 1237 C***  CONSOLE INPUT
 1238 C
 1239       LUCI=5
 1240 C
 1241 C***  CONSOLE OUTPUT
 1242 C
 1243       LULT=5
 1244 C
 1245 C***  OBJECT OUTPUT(S RECORDS) DEVICE #
 1246       LUOO=1
 1247 C***  POWER OF 2 SHIFT
 1248 C***  'AND' MASK
 1249       KCFF=255
 1250 C***  LINE COUNT
 1251       KD1LNO=0
 1252 C***  END OF RECORD POINTER
 1253       KD1BCT=0
 1254       RETURN
 1255       END
 1256       SUBROUTINE SOUCIN(I)
 1257 CC    NAM:  SOUCIN  VER: 1.0  DAT: 12/08/78  CMP: PDP-11
 1258 CC
 1259 CC    SYS:  MC68000 ASM
 1260 CC
 1261 CC    ENT:  N/A
 1262 CC
 1263 CC    RTN:  I=0=END OF FILE - I=1=END OF FILE NOT FOUND
 1264 CC
 1265 CC    FNC:  READ A SOURCE RECORD DEPENDING ON COMPUTER TYPE
 1266 CC
 1267 CCALLS MPUCVC
 1268 C
 1269 C*
 1270       IMPLICIT INTEGER (A-Z)
 1271       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
 1272      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
 1273      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
 1274       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
 1275       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
 1276       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
 1277       COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
 1278       DATA IO377/O377/
 1279 9920  FORMAT(100A1)
 1280       I=1
 1281       GO TO 200
 1282 135   I=0
 1283 C***  RESET LINE COUNTER AND BUFFER POINTER
 1284       KD1BCT=0
 1285       KD1LNO=0
 1286       RETURN
 1287 200   CONTINUE
 1288       READ(LUSI,9920,END=135)  KARD1
 1289 C***  UPDATE LINE COUNT
 1290       KD1LNO=KD1LNO+1
 1291 C***  REMOVE BLANK FROM UPPER BYTE
 1292       DO 300J=1,95
 1293       KARD1(J)=MPUAND(KARD1(J),IO377)
 1294 300   CONTINUE
 1295 C***  SET END OF LINE
 1296       KD1BCT=95
 1297       KARD1(96)=IEOT
 1298       RETURN
 1299       END
 1300       SUBROUTINE FILEOP(IOP)
 1301 CC    NAM: FILEOP  VER: 1.0  DAT 12/08/78  CMP: PDP-11
 1302 CC
 1303 CC    SYS: MACS
 1304 CC
 1305 CC    ENT: IOP - 1 = OPEN SI FILE
 1306 CC             - 2 = CLOSE SI FILE
 1307 CC             - 3 = REWIND SOURCE INPUT FILE FOR SECOND PASS.
 1308 CC             - 4 = CLOSE OBJ FILE
 1309 CC             - 5 = OPEN OBJ FILE
 1310 CC             - 6 = OPEN FILE FOR LIST TO GO TO.
 1311 CC
 1312 CC    RTN: N/C
 1313 CC
 1314 CC    FNC: THIS ROUTINE IS FOR FILE OPERATIONS ON DIFFERENT
 1315 CC         COMPUTERS, SUCH AS OPENING AND CLOSING FILES ETC.
 1316 CC
 1317 CC    REV: N/A
 1318 CC
 1319 CCALLS ASSIGN
 1320 C
 1321 C*
 1322       IMPLICIT INTEGER (A-Z)
 1323       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
 1324      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
 1325      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
 1326       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
 1327       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
 1328       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
 1329       COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
 1330       COMMON /A/ LIST,ICOL,NEST,LUCI,LULT
 1331          DATA LSPP/'  '/
 1332       GO TO (100,200,300,400,500,600),IOP
 1333 9910  FORMAT(100A2)
 1334 100   CONTINUE
 1335       WRITE(LULT,9900)
 1336 9900  FORMAT(' ENTER SI FILENAME')
 1337       READ(LUCI,9910) JBUF
 1338 C***  INSERT ZERO AS LAST CHAR
 1339          DO 150 I=1,10
 1340          IF(JBUF(I).NE.LSPP) J=I
 1341 150      CONTINUE
 1342          JBUF(J+1)=0
 1343       CALL ASSIGN(LUSI,JBUF,0)
 1344          GO TO 610
 1345 200   CONTINUE
 1346       CALL CLOSE(LUSI)
 1347       RETURN
 1348 300    CONTINUE
 1349        REWIND LUSI
 1350       RETURN
 1351 400   CONTINUE
 1352       CALL CLOSE(LUOO)
 1353       RETURN
 1354 500   CONTINUE
 1355       WRITE(LULT,9930)
 1356 9930  FORMAT(' ENTER OBJ FILENAME')
 1357       READ(LUCI,9910) JBUF
 1358 C***  INSERT ZERO AS LAST CHAR
 1359          DO 550 I=1,10
 1360          IF(JBUF(I).NE.LSPP) J=I
 1361 550      CONTINUE
 1362          JBUF(J+1)=0
 1363       CALL ASSIGN(LUOO,JBUF,0)
 1364       RETURN
 1365 C
 1366 C***  OPEN FILE FOR LISTING
 1367 C
 1368 600   CONTINUE
 1369          RETURN
 1370 610      CONTINUE
 1371       WRITE(LULT,9950)
 1372 9950  FORMAT(' ENTER LISTING FILENAME')
 1373       READ(LUCI,9910) JBUF
 1374       LUOT=3
 1375 C***  INSERT ZERO AS LAST CHAR
 1376          DO 650 I=1,10
 1377          IF(JBUF(I).NE.LSPP) J=I
 1378 650      CONTINUE
 1379          JBUF(J+1)=0
 1380       CALL ASSIGN(LUOT,JBUF,0)
 1381       RETURN
 1382       END
 1383       SUBROUTINE REREAD
 1384 CC    NAM: REREAD  VER: 1.0  DAT: 12/08/78  CMP: ALL
 1385 CC
 1386 CC    SYS: MC68000 ASM
 1387 CC
 1388 CC    ENT: ALL VARIABLES USED ARE IN COMMON
 1389 CC
 1390 CC    RTN: N/A
 1391 CC
 1392 CC    FNC: THIS ROUTINE INCREMENTS THE @NNN NUMBER IN A MACRO.
 1393 CC
 1394 CC    REV: N/A
 1395 CC
 1396 CCALLS NONE.
 1397 C
 1398 C*
 1399       IMPLICIT INTEGER (A-Z)
 1400       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
 1401      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
 1402      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
 1403       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
 1404       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
 1405       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
 1406        COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
 1407 C***  57 = ASCII 39 = 9
 1408 C***  IS THE COUNT > 9?
 1409       IF(KARD2(4,1).EQ.57) GO TO 100
 1410       KARD2(4,1)=KARD2(4,1)+1
 1411       RETURN
 1412 100   KARD2(4,1)=48
 1413       IF(KARD2(3,1).EQ.57) GO TO 200
 1414       KARD2(3,1)=KARD2(3,1)+1
 1415       RETURN
 1416 200   KARD2(3,1)=48
 1417       KARD2(2,1)=KARD2(2,1)+1
 1418       RETURN
 1419       END
 1420       SUBROUTINE DEBUG(II)
 1421 C     THIS SUBROUTINE IS FOR DEBUGGING ONLY
 1422 C     IT IS CALLED FROM 'PAGE' AND 'OUTPUT'
 1423 C
 1424       DATA I1STP/0/
 1425       GO TO (10,100),II
 1426 10    CONTINUE
 1427       I1STP=1
 1428       RETURN
 1429 100   CONTINUE
 1430       IF(I1STP.EQ.1) II=1
 1431       RETURN
 1432       END
 1433       SUBROUTINE PAR
 1434 CC    NAM: PAR  VER: 1.0  DAT: 12/08/78  CMP: ALL
 1435 CC    PGM: PARSE ROUITNE
 1436 CC
 1437 CC    SYS: MC68000 ASM
 1438 CC
 1439 CC    ENT: N/A
 1440 CC    RTN: N/A
 1441 CC
 1442 CC    FNC: CHECK THE PARSE NET FOR THE TOKEN TYPE AND WHEN FOUND
 1443 CC         DOES ITS ACTIONS.
 1444 CC
 1445 CC    REV: N/A
 1446 CC
 1447 CCALLS SCN-ACT1-ACT2-ERR
 1448 CC
 1449 CC    ERROR NUMBERS CALLED:  203,204,222
 1450 CC
 1451 C*
 1452       IMPLICIT INTEGER (A-Z)
 1453       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
 1454      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
 1455      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
 1456       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
 1457 C            TKNTYP    DEFINED   ALTERNATE SUCCESSOR ACTION
 1458       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
 1459       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
 1460       COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
 1461 C
 1462       DIMENSION JSTACK(20)
 1463 C***  SPECIAL ALT,SUC CODE ***
 1464       DATA NONE/0/
 1465   100 KOLUMN=0
 1466   105 CALL SCN
 1467   110 JG=1
 1468       NPTR=1
 1469       LPTR=0
 1470 C***  HAVE WE CAME TO END OF FILE?
 1471       IF(TKNTYP.EQ.0) RETURN
 1472 130   CONTINUE
 1473       IF(NET2(JG).EQ.NONE) GO TO 140
 1474 C...     *** DEFINED LOWER, PUSH ENTRY INTO STACK
 1475          JSTACK(NPTR)=JG
 1476          NPTR=NPTR+1
 1477          IF(NPTR.NE.20) GO TO 135
 1478 C...        *** ERROR - PARSE NET STACK OVERFLOW
 1479             CALL ERR(222)
 1480             RETURN
 1481 135   CONTINUE
 1482          JG=NET2(JG)
 1483          GO TO 130
 1484 140   CONTINUE
 1485       IF(NET1(JG).EQ.TKNTYP) GO TO 170
 1486 C---  DEBUG...
 1487 C IF(IPASS.EQ.0)     WRITE(LUOT,881) JG
 1488 881   FORMAT('PAR-TST,JG=',I4)
 1489 150   CONTINUE
 1490       JG=NET3(JG)
 1491       IF(JG) 200,160,130
 1492 C***  "NONE" FOUND, GET THE LAST ENTRY ON THE STACK
 1493 160   NPTR=NPTR-1
 1494       IF(NPTR.NE.0) GO TO 165
 1495 C...     *** ERROR - SYNTAX ERROR
 1496          IF(IPASS.GE.0) CALL ERR(204)
 1497          IOPC=0
 1498          RETURN
 1499   165 JG=JSTACK(NPTR)
 1500       GO TO 150
 1501 C***  TOKEN TYPE FOUND
 1502 170   J5=NET5(JG)
 1503       IF(J5.EQ.NONE) GO TO 180
 1504       IF(IPASS.GE.0) GO TO 175
 1505          CALL ACT1(J5)
 1506          GO TO 180
 1507 175   CONTINUE
 1508       CALL ACT2(J5)
 1509   180 IF(KOLUMN.LE.0) GO TO 105
 1510       TKNTYP=-1
 1511 190   JG=NET4(JG)
 1512       IF(JG.LT.0) GO TO 200
 1513          IF(TKNTYP.LT.0) CALL SCN
 1514          GO TO 130
 1515 C***  "EXIT" FOUND
 1516   200 NPTR=NPTR-1
 1517       IF(NPTR.NE.0) GO TO 210
 1518 C...     *** ASSURE PROPER TERMINATION OF OPERAND
 1519          IF(TKNTYP.EQ.0) RETURN
 1520          IF(KARD1(KOLUMN).EQ.LSP) RETURN
 1521             IF(IPASS.GE.0) CALL ERR(203)
 1522             RETURN
 1523   210 JG=JSTACK(NPTR)
 1524       J5=NET5(JG)
 1525       IF(J5.EQ.NONE) GO TO 190
 1526       IF(IPASS.GE.0)  GO TO 220
 1527          CALL ACT1(J5)
 1528          GO TO 190
 1529 220   CONTINUE
 1530       CALL ACT2(J5)
 1531       GO TO 190
 1532       END
 1533       SUBROUTINE SCN
 1534 CC    NAM: SCN  VER: 1.0  DAT: 12/08/78  CMP:  PDP-11
 1535 CC
 1536 CC    SYS: MACS
 1537 CC
 1538 CC    ENT: N/A
 1539 CC
 1540 CC    RTN: N/A
 1541 CC
 1542 CC    FNC: ISSUES READ TO 'SOUCIN' TO GET NEXT SOURCE LINE.
 1543 CC         BREAKS IT INTO 'TOKENS'.  STACKS MACROS INTO ARRAYS
 1544 CC         'KARD2' AND 'MFLD' FOR PROCESSING.
 1545 CC
 1546 CC    NOTE: THIS ROUTINE IS 16-BIT MACHINE DEPENDENT DUE TO BIT
 1547 CC          HANDLING IN 'TKNVA2'.  IT HOLDS THE 2 MOST SIGNIFICANT
 1548 CC          BYTES OF A 32-BIT NUMBER.
 1549 CC
 1550 CC    REV: N/A
 1551 CC
 1552 CCALLS OUTPUT-MPUGTC-ERR-SOUCIN-LKP-REREAD-MPUPTC-KLAS-ASCBIN
 1553 CC
 1554 CC    ERROR NUMBERS CALLED:  201,202,226
 1555 CC
 1556 C*
 1557       IMPLICIT INTEGER (A-Z)
 1558       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
 1559      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
 1560      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
 1561       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
 1562       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
 1563       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
 1564       COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
 1565 C
 1566       COMMON /A/LIST,ICOL,NEST,LUCI,LULT,MFLD(11,3)
 1567 C
 1568       DIMENSION KCTB(140)
 1569       EQUIVALENCE (MFLD(11,1),MPTR)
 1570       DATA MDEP/0/
 1571 C***  MULTIPLE CHARACTER ACTION ARRAY
 1572       DATA KCTB/1,2,2,2,2,2,2,2,1,2,
 1573      & 0,-1,25,24,27,24,25,-1,-1,-1,
 1574      & 1,2,2,2,3,2,2,3,1,1,
 1575      & 5,2,4,2,6,2,3,1,1,1,
 1576      & 1,6,6,6,1,6,6,6,1,1,
 1577      & 1,2,1,1,2,1,1,6,1,1,
 1578      & 1,2,1,1,2,1,1,6,1,1,
 1579      & 1,2,2,2,2,2,1,6,1,1,
 1580      & 1,2,1,1,7,1,1,6,1,1,
 1581      & 1,2,1,2,2,2,1,6,1,1,
 1582      & 1,2,2,2,2,2,2,6,1,1,
 1583      & 1,6,6,6,2,6,6,3,1,1,
 1584      & 1,2,6,6,2,6,6,6,1,1,
 1585      & 1,1,1,1,2,1,1,6,1,1/
 1586       DATA LASK/42/,L0/48/
 1587       DATA LBS/92/,LAT/64/,LLB/60/,LRB/62/,LCM/44/,LPD/46/
 1588 C
 1589       JCC=0
 1590       IF(ICOL.NE.-2)  ICOL=KOLUMN
 1591       IF(KOLUMN.GT.0) GO TO 150
 1592 C
 1593 C***  READ IN THE NEXT SOURCE RECORD
 1594 C
 1595 100   CONTINUE
 1596 101   CONTINUE
 1597       IF(KD1BCT.NE.0)  CALL OUTPUT
 1598       IF(MPTR.EQ.0) GO TO 130
 1599 C
 1600 C***  MACRO EXPANSION
 1601       N1=1
 1602 C***  BLANK BUFFER TO REMOVE LAST INSTRCUTION
 1603       KD1BCT=1
 1604       DO 50 I=1,95
 1605 50    KARD1(I)=LSP
 1606 102   CONTINUE
 1607       CALL MPUGTC(KK,ISYM(MPTR),N1)
 1608       IF(KK.GT.1) GO TO 107
 1609       IF(KK.EQ.0)  GO TO 1020
 1610 C***  MEXIT, ARE WE IN IFXX-ENDC?
 1611       IF(ICOL.GE.0)  GO TO 1020
 1612       MPTR=MPTR+1
 1613       GO TO 102
 1614 C...     *** END OF MACRO
 1615 1020     MPTR=0
 1616          MDEP=MDEP-1
 1617          IF(MDEP.EQ.0) GO TO 130
 1618          DO 103 J=1,11
 1619             MFLD(J,1)=MFLD(J,2)
 1620   103       MFLD(J,2)=MFLD(J,3)
 1621          DO 104 J=1,80
 1622             KARD2(J,1)=KARD2(J,2)
 1623   104       KARD2(J,2)=KARD2(J,3)
 1624          GO TO 102
 1625   107 N1=N1+1
 1626       IF(KK.EQ.LBS) GO TO 108
 1627          KARD1(KD1BCT)=KK
 1628          KD1BCT=KD1BCT+1
 1629          IF(KK.NE.IEOT) GO TO 102
 1630 C...     *** END OF CARD
 1631       MPTR=MPTR + (N1 + NBPW - 2) / NBPW
 1632       KD1BCT=KD1BCT - 2
 1633          GO TO 140
 1634 C...  *** INSERT ACTUAL PARAMETER
 1635 108   CONTINUE
 1636       CALL MPUGTC(KK,ISYM(MPTR),N1)
 1637       N1=N1+1
 1638       IF(KK.NE.LAT) GO TO 110
 1639 C...     *** USE GENERATED LABEL
 1640          N=1
 1641          GO TO 116
 1642   110 KK=KK-L0
 1643       IF(KK.LT.0) GO TO 112
 1644       IF(KK.LE.9) GO TO 114
 1645 C...     *** ERROR - ILLEGAL MACRO PARAMETER
 1646   112    CALL ERR(224)
 1647          GO TO 102
 1648   114 N=MFLD(KK+1,1)
 1649       IF(N.NE.0) GO TO 116
 1650       IF(KK.NE.0) GO TO 102
 1651       IF(KARD1(KD1BCT-1).NE.LPD) GO TO 102
 1652          KD1BCT=KD1BCT-1
 1653          GO TO 102
 1654   116 KK=KARD2(N,1)
 1655       N=N+1
 1656       IF(KK.EQ.0) GO TO 102
 1657          KARD1(KD1BCT)=KK
 1658          KD1BCT=KD1BCT+1
 1659          GO TO 116
 1660 C
 1661 130   CALL SOUCIN(I)
 1662 C***  I = 0 = EOF
 1663       IF(I.EQ.0) GO TO 295
 1664 C...     *** COMMENT CARD?
 1665          IF(KARD1(1).NE.LASK) GO TO 140
 1666 135         IOPC=0
 1667             CALL OUTPUT
 1668             GO TO 130
 1669 C
 1670 C***  INITIALIZE FOR A NEW CARD
 1671   140 KOLUMN=1
 1672 C+++  16-BIT - TKNVA2 = 1ST 2 BYTES IF MORE THAN 2 IN CONSTANT
 1673       TKNVA2=0
 1674       FLDN=0
 1675       DO 145 I=2,5
 1676 145   INS(I)=0
 1677       JCC=-1
 1678       ITOKEN(69)=0
 1679 C***  SETUP THE 1ST CHAR OF THE TOKEN
 1680 150   TKNSIZ=0
 1681       JC=KARD1(KOLUMN)
 1682       IF(JC.NE.LSP) GO TO 170
 1683 C...     *** BLANK DELIMITER(S)
 1684          FLDN=FLDN+1
 1685 C@@@  CHECK FOR END OF OPERAND FIELD
 1686       IF(FLDN.EQ.3) GO TO 295
 1687   160    KOLUMN=KOLUMN+1
 1688          JC=KARD1(KOLUMN)
 1689          IF(JC.EQ.LSP) GO TO 160
 1690 C***  IS THIS A NULL LINE?  IF SO GO PRINT IT.
 1691       IF(JCC.EQ.-1.AND.JC.EQ.4.AND.FLDN.EQ.1) GO TO 135
 1692 C***  GET CHAR CLASS
 1693 170   JCC=KLAS(JC)
 1694 C***  SET THE TOKEN'S TYPE
 1695       TKNTYP=KCTB(JCC+10)
 1696       IF(TKNTYP.LT.0) TKNTYP=JC
 1697   180 J=KCTB(JCC)
 1698       GO TO (270,190),J
 1699 C***  1ST CHAR OF A MULTIPLE CHARACTER TOKEN
 1700 190   J=KCTB(JCC+20)
 1701       GO TO (220,250,200,260,270,280),J
 1702 C***  DISCARD CHARACTER AND CONTINUE
 1703 200   KOLUMN=KOLUMN+1
 1704 C***  CHARACTER ACTION FOR NEXT CHARACTER OF MULTI-CHAR TOKEN
 1705       JC=KARD1(KOLUMN)
 1706       JCX=KLAS(JC)*10+30+JCC
 1707       J=KCTB(JCX)
 1708       GO TO (220,250,200,260,270,280,230),J
 1709 C***  CHARACTER ACTION ROUTINE.
 1710 C***  ERROR '201' ILLEGAL CHARACTER SCANNED
 1711 220   IF(IPASS.GE.0) CALL ERR(201)
 1712       GO TO 295
 1713 C***  ' SCANNED, INCLUDE IT IF THERE ARE 2
 1714 230   IF(JC.NE.KARD1(KOLUMN+1)) GO TO 270
 1715 C***  SKIP THE NEXT CHAR IN THE RECORD (^ OR ')
 1716       KOLUMN=KOLUMN+1
 1717 C***  ADD CHARACTER TO TOKEN AND CONTINUE.
 1718   250 TKNSIZ=TKNSIZ+1
 1719       IF(TKNSIZ.LE.68) GO TO 255
 1720 C...     ***  ERROR '202' TOKEN OVERFLOW (OVER 70 CHARACTERS LONG)
 1721          IF(IPASS.GE.0) CALL ERR(202)
 1722          GO TO 295
 1723   255 ITOKEN(TKNSIZ)=JC
 1724       GO TO 200
 1725 C***  ADD CHARACTERS TO TOKEN AND STOP.
 1726 260   TKNSIZ=TKNSIZ+1
 1727       ITOKEN(TKNSIZ)=JC
 1728 C***  DISCARD CHARACTER AND STOP
 1729 270   KOLUMN=KOLUMN+1
 1730 C***  LEAVE CHARACTER IN STRING AND STOP
 1731 280   CONTINUE
 1732 C***  LAST CHARACTER OF A TOKEN, DO ITS ACTION
 1733 290   J=KCTB(JCC+30)
 1734       GO TO (900,300,700,800,295,600),J
 1735 C***  END OF CARD RETURN
 1736   295 TKNTYP=0
 1737       RETURN
 1738 C
 1739 C***  TOKEN ACTION ROUTINES
 1740 C
 1741 C***  VARIABLE NAME FOUND  ***
 1742 C...  *** STATEMENT LABEL?
 1743 300   IF(KARD1(KOLUMN).NE.58)  GO TO 305
 1744 C***  LABEL:
 1745       KOLUMN=KOLUMN + 1
 1746       FLDN=0
 1747   305 IF(FLDN.NE.0) GO TO 310
 1748 C...     *** INSIDE A MACRO DEFINITION?
 1749          IF(ICOL.LT.0) GO TO 150
 1750          TKNTYP=29
 1751          GO TO 900
 1752 C...  *** OPCODE FIELD?
 1753   310 IF(FLDN.NE.1) GO TO 390
 1754 C...  *** OPCODE FIELD - LOOKUP THE OPCODE ***
 1755       CALL LKP(-1,JSUC,JPTR)
 1756       IF(JSUC.GT.0) GO TO 320
 1757 C...     *** UNDEFINED OP CODE
 1758          IF(ICOL.EQ.-2) GO TO 100
 1759             GO TO 900
 1760   320 IOPC=ISYM(JPTR)
 1761       INS(1)=ISYM(JPTR+1)
 1762 C...  *** LOOKING FOR ENDC?
 1763       IF(ICOL.NE.-2)     GO TO 330
 1764       INSL=0
 1765          IF(IOPC.EQ.18)  NEST=NEST+1
 1766          IF(IOPC.NE.1)   GO TO 100
 1767          IF(INS(1).NE.2) GO TO 100
 1768             NEST=NEST-1
 1769             IF(NEST.GE.0) GO TO 100
 1770                ICOL=0
 1771                NEST=0
 1772                GO TO 100
 1773   330 TKNTYP=30
 1774 C...  *** TEST FOR MACRO CALL
 1775       IF(IOPC.NE.0) GO TO 900
 1776 C...  *** INSIDE A MACRO DEFINITION?
 1777       IF(ICOL.LT.0) GO TO 900
 1778 C
 1779 C...  *** MACRO CALL *** - ASSURE NOT TOO DEEP
 1780       IF(MDEP.EQ.0) GO TO 351
 1781       IF(MDEP.NE.3) GO TO 340
 1782 C...     *** ERROR - NESTED TOO DEEP
 1783          CALL ERR(226)
 1784          GO TO 900
 1785   340 DO 342 J=1,11
 1786          MFLD(J,3)=MFLD(J,2)
 1787   342    MFLD(J,2)=MFLD(J,1)
 1788       DO 344 J=1,80
 1789          KARD2(J,3)=KARD2(J,2)
 1790   344    KARD2(J,2)=KARD2(J,1)
 1791   351 MDEP=MDEP+1
 1792       IP=0
 1793       MPTR=JPTR+1
 1794 C...  *** INCREASE THE GENERATED MACRO NUMBER
 1795       MNUM=MNUM+1
 1796       CALL REREAD
 1797 C***  INITIALIZE THE FIELD POINTERS
 1798       DO 352 NF=1,10
 1799   352    MFLD(NF,1)=0
 1800       N2=6
 1801       NF=1
 1802 C...  *** LOOK FOR OPCODE.SIZE
 1803       IF(KARD1(KOLUMN).NE.LPD) GO TO 354
 1804          MFLD(1,1)=N2
 1805          KOLUMN=KOLUMN+1
 1806   353    KK=KARD1(KOLUMN)
 1807          KOLUMN=KOLUMN+1
 1808          IF(KK.EQ.LSP) KK=0
 1809          KARD2(N2,1)=KK
 1810          N2=N2+1
 1811          IF(KK.EQ.IEOT) GO TO 380
 1812          IF(KK.NE.0) GO TO 353
 1813 C...  *** SKIP TO THE START OF THE OPERAND FIELD
 1814   354 DO 355 KOLUMN=KOLUMN,KD1BCT
 1815          IF(KARD1(KOLUMN).NE.LSP) GO TO 358
 1816   355    CONTINUE
 1817       RETURN
 1818 C***  MOVE THE OPERAND TO KARD2 AND LOOK FOR COMMAS
 1819   358 NF=NF+1
 1820       IF(NF.EQ.11) GO TO 101
 1821       MFLD(NF,1)=N2
 1822   360 KK=KARD1(KOLUMN)
 1823       KOLUMN=KOLUMN+1
 1824       IF(IP.EQ.0) GO TO 365
 1825          IF(KK.NE.LRB) GO TO 370
 1826             IP=IP-1
 1827             GO TO 360
 1828 C...  ** IP EQ 0
 1829   365    IF(KK.EQ.LSP) KK=IEOT
 1830          IF(KK.EQ.LCM) KK=0
 1831          IF(KK.NE.LLB) GO TO 370
 1832             IP=IP+1
 1833             GO TO 360
 1834 C...  ** NOT < OR >
 1835   370 KARD2(N2,1)=KK
 1836       N2=N2+1
 1837       IF(KK.EQ.0) GO TO 358
 1838       IF(KK.NE.4) GO TO 360
 1839 C...     *** END OF CARD
 1840   380    KARD2(N2-1,1)=0
 1841          GO TO 101
 1842 C
 1843 C...  *** REGISTER NAME?
 1844   390 CALL LKP(1,JSUC,JPTR)
 1845       IF(JSUC.LE.0) GO TO 900
 1846          IF(ISYM(JPTR).NE.2) GO TO 900
 1847             TKNTYP=28
 1848             GO TO 900
 1849 C
 1850 C***  CONSECUTIVE ', PUT IN A BLANK
 1851 600    IF(TKNSIZ.GT.0) GO TO 605
 1852        TKNSIZ=1
 1853        ITOKEN(1)=32
 1854 605    CONTINUE
 1855       IF(IOPC.EQ.4) GO TO 625
 1856       J=2
 1857       IF(IPASS.EQ.0) J=64
 1858       I=ISIZ
 1859 C...  *** LEAVE AS A STRING FOR DC.B
 1860       IF(IOPC.NE.5) GO TO 610
 1861 C...     *** DC - LEAVE AS STRING IF DC.B
 1862          IF(TKNSIZ.EQ.1) GO TO 610
 1863          IF(ISIZ.LE.1) RETURN
 1864 610   CONTINUE
 1865       IF(I.EQ.0.AND.TKNSIZ.NE.1) I=J
 1866       IF(I.EQ.J.AND.TKNSIZ.GT.2) I=I+J
 1867       TKNVAL=0
 1868       NB=5-I/J*2
 1869       IF(NB.EQ.5) NB=4
 1870 C***  IF MORE THAN 4 CHARACTERS USE ONLY 4.
 1871          IF(TKNSIZ.LT.5) GO TO 615
 1872          TKNSIZ=4
 1873          CALL ERR(210)
 1874 615      CONTINUE
 1875       DO 620 J=1,TKNSIZ
 1876          CALL MPUPTC(ITOKEN(J),TKNVAL,NB)
 1877   620    NB=NB+1
 1878       TKNTYP=25
 1879 C***  TKNVAL & TKNVA2 ARE REVERSED IN MEMORY HERE AS COMPARED TO 6800
 1880 C***  REVERSE THEM.
 1881       J=TKNVAL
 1882       TKNVAL=TKNVA2
 1883       TKNVA2=J
 1884       GO TO 900
 1885 625   IADM(1,1)= -1
 1886       RETURN
 1887 C***  BINARY CONVERSION FROM CHARACTER STRING
 1888 700   CONTINUE
 1889       TKNVAL=0
 1890 C***  SET 2 MSB ALSO
 1891          TKNVA2=0
 1892       CALL ASCBIN
 1893       GO TO 900
 1894 C
 1895 C***  HEXADECIMAL CONVERSION FROM CHARACTER STRING
 1896   800 TKNVAL=0
 1897       DO 850 J=2,TKNSIZ
 1898       JC=ITOKEN(J)
 1899       I=JC-L0
 1900       IF (I.GT.9) I=I-7
 1901 C+++  16-BIT - PUT MORE THAN 2 BYTES IN TKNVA2
 1902       IF(J.LT.6) GO TO 840
 1903       TKNVA2=ISHFT(TKNVA2,4)
 1904       TKNVA2=TKNVA2 + ISHFT(TKNVAL,-12)
 1905 840   CONTINUE
 1906       TKNVAL=ISHFT(TKNVAL,4) + I
 1907 C
 1908 C***  EXIT FROM THE SCAN SUBROUTINE...
 1909 850   CONTINUE
 1910   900 CONTINUE
 1911       RETURN
 1912       END
 1913       FUNCTION KLAS(KL)
 1914 CC    NAM: KLAS  VER:  1.0  DAT: 12/08/78  CMP:  ALL
 1915 CC
 1916 CC    SYS:  MACS
 1917 CC
 1918 CC    ENT: KL - CHARACTER FROM INPUT BUFFER 'KARD1'.
 1919 CC
 1920 CC    RTN: KL - N/C
 1921 CC         KLAS - SET TO CLASS
 1922 CC
 1923 CC    FNC: DETERMINE THE CLASS OF A CHARACTER FROM THE INPUT
 1924 CC         BUFFER AND RETURN IT.
 1925 CC
 1926 CC    REV: N/A
 1927 C*
 1928       IMPLICIT INTEGER (A-Z)
 1929       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
 1930      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
 1931      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
 1932       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
 1933       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
 1934       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
 1935       COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
 1936 C***  CHARACTER SET BASE OFFSET
 1937       DATA JCOFS/31/
 1938       JL=KL-JCOFS
 1939 C***  00-1F ARE EOT'S
 1940       IF(JL.GT.0) GO TO 925
 1941         KLAS=1
 1942         RETURN
 1943 C***  SPECIAL CHARACTERS
 1944 925   IF(JL.LE.64) GO TO 950
 1945         KLAS=9
 1946         RETURN
 1947 950   KLAS=KCLAS(JL)
 1948       RETURN
 1949       END
 1950       SUBROUTINE LKP(NTYP,NSUC,NPTR)
 1951 CC    NAM: LKP  VER: 1.0  DAT: 12/08/78  CMP: ALL
 1952 CC
 1953 CC    SYS: MC68000 ASM
 1954 CC
 1955 CC    ENT: NTYP - TOKEN TYPE (-1, 0 OR 1 SEE STF)
 1956 CC         NSUC - N/A
 1957 CC         NPTR - N/A
 1958 CC
 1959 CC    RTN: NTYP - N/C
 1960 CC         NSUC - -1=> NO ENTRY IN THE HASH TABLE
 1961 CC              -  0=> ENTRY IN HASH, BUT NO SYMBOL IN THE TABLE
 1962 CC              - >0=> ENTRY FOUND, INDEX TO SYMBOL ENTRY IN SYM
 1963 CC         NPTR - NSUC= -1=> INDEX TO HASH TABLE
 1964 CC              - NSUC=  0=> POINTER TO THE PREVIOUS LINK IN SYM
 1965 CC              - NSUC= >0=> INDEX TO THE DATA ENTRY OF THE SYMBOL
 1966 CC
 1967 CC    FNC: PACK THE TOKEN INTO COMPUTER WORDS AND SEARCH THE HASH
 1968 CC         AND SYMBOL TABLE FOR THE SYMBOL.
 1969 CC
 1970 CC    REV: N/A
 1971 CC
 1972 CCALLS MPUPTC-MPUAND
 1973 CC
 1974 C*
 1975       IMPLICIT INTEGER (A-Z)
 1976       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
 1977      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
 1978      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
 1979       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
 1980       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
 1981       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
 1982       COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
 1983 C
 1984       EQUIVALENCE(ITOKEN(70),ITYP1)
 1985 C***  TKNSIZ//(NUMBER BYTES PER WORD ***
 1986       KPWCT=(TKNSIZ+NBPW-1) / NBPW
 1987       KPAC(KPWCT)=0
 1988       NTYP1=MPUAND(NTYP,255)+ISHFT(KPWCT,8)
 1989       NPTR=0
 1990       NSUC=-1
 1991       DO 100 J=1,TKNSIZ
 1992       NPTR=NPTR+ITOKEN(J)
 1993       J1=J
 1994 100   CALL MPUPTC(ITOKEN(J),KPAC,J1)
 1995       NPTR=MPUAND(NPTR,63)+1
 1996       JP=KASH(NPTR)
 1997 110   IF(JP.EQ.0) RETURN
 1998       IF(ISYM(JP+1).EQ.NTYP1) GO TO 130
 1999 120   NSUC=0
 2000       NPTR=JP
 2001       JP=ISYM(JP+2)
 2002       GO TO 110
 2003   130 JPP = JP + 2
 2004       DO 140 J=1,KPWCT
 2005       JPP=JPP + 1
 2006       IF(ISYM(JPP).NE.KPAC(J)) GO TO 120
 2007 140   CONTINUE
 2008       NSUC=JP
 2009       NPTR=JP+KPWCT+3
 2010       RETURN
 2011       END
 2012       SUBROUTINE STF(KSUC,KPTR,KSIZ,KTYP)
 2013 CC    NAM: STF  VER: 1.0  DAT: 12/08/78  CMP: ALL
 2014 CC
 2015 CC    SYS: MC68000 ASM
 2016 CC
 2017 CC    ENT: KSUC - -1=> NO ENTRY IN HASH TABLE
 2018 CC              -  0=> ENTRY IN HASH, BUT CANNOT FIND THE SYMBOL
 2019 CC              - >0=> SYMBOL FOUND, INDEX TO THE SYMBOL ENTRY
 2020 CC         KPTR - KSUC= -1=> INDEX TO THE HASH TABLE
 2021 CC              - KSUC=  0=> POINTER TO THE PREVIOUS LINK
 2022 CC              - KSUC= >0=> INDEX TO THE DATA ENTRY OF THE SYMBOL
 2023 CC         KSIZ - REQUIRED SIZE OF THE DATA ENTRY
 2024 CC         KTYP - -1=> DICTIONARY SYMBOL
 2025 CC              -  0=> CONSTANT SYMBOL
 2026 CC              -  1=> VARIABLE SYMBOL
 2027 CC
 2028 CC    RTN: KSUC - INDEX TO THE SYMBOL ENTRY
 2029 CC         KPTR - INDEX TO THE SYMBOL'S DATA ENTRY
 2030 CC         KSIZ - N/CC
 2031 CC         KTYP - N/CC
 2032 CC
 2033 CC    FNC: STORE THE SYMBOL IN 'KPAC' INTO THE SYMBOL TABLE.
 2034 CC
 2035 CC    REV: N/A
 2036 CC
 2037 CCALLS ERR
 2038 CC
 2039 CC    ERROR NUMBERS CALLED:  221
 2040 C*
 2041       IMPLICIT INTEGER (A-Z)
 2042       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
 2043      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
 2044      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
 2045       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
 2046       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
 2047       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
 2048       COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
 2049 C
 2050       EQUIVALENCE(ITOKEN(70),KTYP1)
 2051       K = 0
 2052       IF (KSUC .LE. 0) K = KPWCT + 3
 2053  260  IF (KSUC) 200,210,250
 2054 200   KASH(KPTR)=NXSYM
 2055       GO TO 220
 2056 210   ISYM(KPTR+2)=NXSYM
 2057 220   ISYM(NXSYM)=0
 2058       ISYM(NXSYM+1)=MPUAND(KTYP,255)+ISHFT(KPWCT,8)
 2059       ISYM(NXSYM+2)=0
 2060       JCX = NXSYM + 2
 2061       DO 230 J=1,KPWCT
 2062       JCX= JCX + 1
 2063 230   ISYM(JCX)=KPAC(J)
 2064       KSUC=NXSYM
 2065       IF (NXSYM + K + KSIZ - 1 .LE. LENSYM) GO TO 250
 2066       CALL ERR(221)
 2067 C***  SET POINTERS TO USE SCRATCH AREA
 2068       KPTR=NXSYM+K
 2069       RETURN
 2070  250  KPTR=NXSYM+ K
 2071       NXSYM=KPTR+KSIZ
 2072       RETURN
 2073       END
 2074       SUBROUTINE ACT1(KMD)
 2075 CC    NAM: ACT1  VER: 1.0  DAT: 12/08/78  CMP: 16-BIT
 2076 CC
 2077 CC    SYS: MACS
 2078 CC
 2079 CC    ENT: KMD - EQUALS ACTION TO BE TAKEN UPON ENTRY AS DETERMINED
 2080 CC         FROM PARSE TABLE.
 2081 CC
 2082 CC    RTN: KMD - N/C
 2083 CC
 2084 CC    FNC: P A S S   O N E   A C T I O N S
 2085 CC         ------------------------------
 2086 CC         PERFORM THE ACTIONS FOR THE DIFFERENT "TOKENS"
 2087 CC         ENCOUNTERED DURING THE STATEMENT SCAN.
 2088 CC         IT SETS ADDRESS MODE IN 'IADM' TABLE, ENTERS EXPRESSION
 2089 CC         IN EXPRESSION TABLE, ENTERS NEW SYMBOL IN SYMBOL TABLE.
 2090 CC         ---------------------------------------------
 2091 CC         THIS SUBROUTINE IS A MODIFICATION OF "ACT2"
 2092 CC         THERE MUST NOT BE ANY DIFFERENCE BETWEEN ACT1
 2093 CC         AND ACT2 THAT COULD AFFECT THE ASSUMED SIZE OF
 2094 CC         THE INSTRUCTIONS.
 2095 CC         ----------------------------------------------
 2096 CC
 2097 CC         THIS ROUTINE IS 16-BIT DEPENDENT DUE TO THE CHECK ON
 2098 CC         'TKNVA2' FOR THE 2 MOST SIGNIFICANT BYTES OF A 32-BIT #.
 2099 CC         INTEGER CONSTANT 192=$C0, 128=$80($=HEX).
 2100 CC         NOTE ALSO INTEGER CONSTANTS 192 & 64 ARE SPECIAL HEX
 2101 CC         VALUES $C0 AND $40.
 2102 CC
 2103 CC    REV: N/A
 2104 CC
 2105 CC    ERROR NUMBERS CALLED:  221,225
 2106 CC
 2107 CCALLS ERR-LKP-STF-SCN-MPUPTC-BUILD1-EXP
 2108 CC
 2109 C*
 2110       IMPLICIT INTEGER (A-Z)
 2111       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
 2112      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
 2113      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
 2114       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
 2115       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
 2116       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
 2117       COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
 2118       COMMON /A/ LIST,ICOL,NEST,LUCI,LULT,MFLD(11,3),IOBJ,LLENSW,NOP
 2119       COMMON /A/ NXSYM1
 2120       DIMENSION NSZ(40),MREL(40)
 2121       EQUIVALENCE (IADM(4,1),SYMTYP),(IADM(5,1),LFRF)
 2122       DATA LB/66/,LW/87/,LL/76/,LAP/39/
 2123       DATA LS/83/
 2124       DATA Z8000/O100000/
 2125 C***  OPCODE SIZES  01 02 03 04 05 06 07 08 09 10
 2126 C***  01-10
 2127       DATA NSZ/      0, 2, 0,-1,-1, 2, 2, 2,-1,-1,
 2128      &              -1,-1,-1,-1, 2,-1,-1,-1, 0,-1,
 2129      &              -1,-1,-1,-1, 2,-1, 2, 2, 2,-1,
 2130      &               0, 2, 2,-1,-1,-1,-1,-1,-1, 0/
 2131 C
 2132 C***  USE PC REL?   01 02 03 04 05 06 07 08 09 10
 2133 C***                   01-10
 2134       DATA MREL/     0, 0, 0, 0,-1, 0, 0, 0, 1, 1,
 2135      &               1, 1,-1, 1, 1, 1, 1, 0, 0, 1,
 2136      &               1, 1, 1, 1, 0, 0, 0, 0, 0, 1,
 2137      &               0,-1, 0, 1, 0, 1, 1, 1, 1, 0/
 2138       GO TO(100,200,300,400,500,600,700,800,800,
 2139      &      1000,1100,1200,1300,1400,1500,1600,1700),KMD
 2140 C***  EXPRESSION ACTION
 2141       CALL EXP(KMD)
 2142       RETURN
 2143 C
 2144 C***  STATEMENT LABEL
 2145 C
 2146   100 CALL LKP(1,LSUC,LPTR)
 2147 C***  SAVE AS FLAG FOR FINDING MULT DEF MACRO
 2148          N1=0
 2149       IF(LSUC.LE.0) GO TO 105
 2150       IF(ISYM(LPTR).EQ.0) GO TO 110
 2151 C***     ERROR - MULTIPLE DEFINED SYMBOL
 2152          ISYM(LPTR)=IADM(7,1) + 192
 2153       GO TO 120
 2154 C***  CHECK FOR SYMBOL ALREADY USED AS MACRO OR LABEL.
 2155 105      CALL LKP(-1,N1,N2)
 2156       CALL STF(LSUC,LPTR,2,1)
 2157 C***  *** FORWARD REFERENCE
 2158   110 ISYM(LPTR)=IADM(7,1) + 64
 2159       ISYM(LPTR+1)=IPC
 2160 C+++  16-BIT - PUT M.S.B. OF P-COUNT IN SYM TABLE.
 2161       ISYM(LSUC)=IPC2
 2162 C***  SAVE FOR BUILD1
 2163 120   ITOKEN(69)=LSUC
 2164       RETURN
 2165 C
 2166 C***  OPCODE
 2167 C
 2168  200  KSYS=1
 2169       IF(JSUC.GT.0) GO TO 210
 2170 C***     ERROR - UNDEFINED OP-CODE
 2171          KOLUMN=0
 2172          RETURN
 2173 C***  *** MACRO DEFINITION?
 2174   210 IF(IOPC.GE.0) GO TO 260
 2175       IQ=0
 2176 C***  ASSURE OPCODE IS MACRO
 2177       IF(INS(1).NE.0) CALL ERR(225)
 2178 C***  IS SYMBOL ALREADY DEF?
 2179          IF(ISYM(LPTR).EQ.192) GO TO 250
 2180 C***  CHECK FOR MULT DEF MACRO
 2181          IF(N1.LT.NXSYM1) GO TO 220
 2182 C***  SET MULT DEF FLAG
 2183          ISYM(LPTR)=192
 2184          GO TO 230
 2185 220      CONTINUE
 2186 C***  TABLE THE MACRO DEFINITION
 2187       ISYM(LPTR)=0
 2188 C***  MAKE FIRST WORD NON-ZERO FOR SYM TABLE ROUTINE 'PRSYM'
 2189 225   ISYM(LSUC)=1
 2190 C***  MAKE TYPE 255 & KEEP # OF WORDS IN NAME
 2191       ISYM(LSUC+1)=ISYM(LSUC+1)+254
 2192 C***  *** CALL FOR OPCODE FIELD
 2193   230 KOLUMN=-1
 2194       CALL SCN
 2195 C***  *** FIND # FIELDS AND CHECK FOR ENDM
 2196       NF=3
 2197       IF(TKNTYP.NE.30) GO TO 234
 2198       IF(IOPC.GT.0) GO TO 232
 2199       IF(IOPC.EQ.0) GO TO 234
 2200          IF(INS(1).EQ.0) CALL ERR(225)
 2201          IF(INS(1).NE.1)  GO TO 231
 2202 C***  ENDM
 2203          ISYM(LPTR+1)=0
 2204          KOLUMN=0
 2205          RETURN
 2206 C
 2207 C***  MEXIT
 2208 231   LPTR=LPTR+1
 2209       CALL MPUPTC(1,ISYM(LPTR),1)
 2210       GO TO 230
 2211   232 IF(IOPC.LT.4) NF=2
 2212 C***  *** PACK THE CARD INTO SYM
 2213   234 N1=1
 2214       N2=1
 2215   236 KK=KARD1(N1)
 2216       N1=N1+1
 2217   238 CALL MPUPTC(KK,ISYM(LPTR+1),N2)
 2218       N2=N2+1
 2219       IF(KK.NE.LAP) GO TO 240
 2220 C***     *** QUOTE FOUND
 2221          IQ=IQ+1
 2222          IF(IQ.EQ.2) IQ=0
 2223   240 IF(IQ.NE.0)   GO TO 244
 2224       IF(KK.NE.LSP) GO TO 244
 2225          NF=NF-1
 2226          IF(NF.NE.0) GO TO 242
 2227             KK=4
 2228             GO TO 238
 2229   242    KK=KARD1(N1)
 2230          IF(KK.NE.LSP) GO TO 244
 2231             N1=N1+1
 2232             GO TO 242
 2233   244 IF(KK.NE.4) GO TO 236
 2234 C***     *** END OF CARD
 2235       NW=(N2 + NBPW -2) / NBPW
 2236          LPTR=LPTR+NW
 2237          NXSYM=NXSYM+NW
 2238          IF(NXSYM.LE.LENSYM-100) GO TO 230
 2239 C***         *** SYMBOL TABLE OVERFLOW
 2240              CALL ERR(221)
 2241              RETURN
 2242 C***  MULT DEF MACRO AND LABEL-FLUSH OUT MACRO AND LEAVE SYBOL
 2243 C***  TABLE DEFINED AS LABEL INSTEAD OF MACRO
 2244 250      CONTINUE
 2245          KOLUMN= -1
 2246          CALL SCN
 2247          IF(INS(1).NE.1) GO TO 250
 2248          KOLUMN=0
 2249          RETURN
 2250 C*** LOOKUP TENTATIVE INST. LENGTH
 2251   260 IF(IOPC.LE.0) RETURN
 2252       INSL=NSZ(IOPC)
 2253       ISIZ=2
 2254       IADM(5,2)=0
 2255       LFRF=0
 2256       IADM(1,1)=0
 2257       IF(INSL.GE.0) GO TO 265
 2258 C***  *** VARIABLE SIZE
 2259       CALL EXP(21)
 2260       RETURN
 2261 C***  *** FIXED SIZE
 2262 265   KOLUMN=0
 2263       RETURN
 2264 C
 2265 C***  DATA SIZE
 2266 C
 2267   300 IF(ITOKEN(1).EQ.LB) ISIZ=0
 2268       IF(ITOKEN(1).EQ.LL) ISIZ=4
 2269       IF(ITOKEN(1).EQ.LS)  ISIZ=0
 2270       RETURN
 2271 C
 2272 C***  COMMA STARTING FIELD-2 OPERAND  ***
 2273 C
 2274 C
 2275 400   CALL EXP(21)
 2276       IF(IOPC.NE.4)  GO TO 410
 2277 C***  DC - FORCE DATA OUT
 2278       CALL BUILD1
 2279       RETURN
 2280   410 IF(IOPC.GE.19) GO TO 420
 2281 C***     *** OPCODE REQUIRES ONLY ONE OPERAND
 2282          KOLUMN=0
 2283          RETURN
 2284 420   IF(KSYS.EQ.2)  KOLUMN=0
 2285       KSYS=2
 2286       TKNVA2=0
 2287       RETURN
 2288 C
 2289 C***  OPERAND - REGISTER
 2290 C
 2291   500 IADM(1,KSYS)=0
 2292 C***  *** ADDR REGISTER?
 2293       IF(ISYM(JPTR+1).GT.7) IADM(1,KSYS)=8
 2294       RETURN
 2295 C
 2296 C***  REGISTER INDIRECT MODE  ***
 2297 C
 2298 600   CONTINUE
 2299       IADM(1,KSYS)=16
 2300       RETURN
 2301 C
 2302 C***  POST INCREMENT  ***
 2303 C
 2304 700   CONTINUE
 2305       IADM(1,KSYS)=24
 2306       RETURN
 2307 C
 2308 C***  PRE DECREMENT  ***
 2309 C
 2310 800   CONTINUE
 2311       IADM(1,KSYS)=32
 2312       RETURN
 2313 C
 2314 C***  IMMEDIATE OPERAND  ***
 2315 C
 2316 C
 2317 1000  CALL EXP(37)
 2318       KK=ISIZ
 2319       IF(KK.EQ.0)  KK=2
 2320       IADM(1,KSYS)=60
 2321       IF(INSL.GT.0) GO TO 1010
 2322 C***     *** FIRST FIELD
 2323       INSL=2
 2324  1010 INS(3)=TKNVAL
 2325 C+++  16-BIT - MOST SIGNIFICANT BYTE OF P-COUNT
 2326       INS(2)=TKNVA2
 2327       INSL=INSL + KK
 2328       RETURN
 2329 C
 2330 C***  DISPLACEMENT  ***
 2331 C
 2332 1100  IADM(1,KSYS)=56
 2333       CALL EXP(37)
 2334 C
 2335       K=2
 2336 C***  PC REL?
 2337          IF(IADM(4,KSYS).EQ.1) GO TO 1110
 2338       IF(IADM(5,KSYS).EQ.0)  GO TO 1105
 2339 C***  DEFAULT FORWARD REFERENCES TO 2 OR 4 BYTES
 2340       IF(IADM(7,2).EQ.1)  K=4
 2341       GO TO 1110
 2342 C+++  16-BIT
 2343 1105   IF(TKNVA2.EQ.-1) GO TO 1110
 2344 C***  CHECK FOR ADDRESS FROM FF8000-FFFFFF
 2345          I=MPUAND(TKNVAL,Z8000)
 2346          IF(I.EQ.Z8000.AND.TKNVA2.EQ.KCFF) GO TO 1110
 2347        IF(TKNVA2.NE.0) K=4
 2348 C***  ADDR >$7FFF IS LONG ADDR.
 2349       IF(I.NE.0.AND.TKNVA2.EQ.0) K=4
 2350 1110  IF(INSL.LT.0) GO TO 1120
 2351 C***     *** SECOND FIELD
 2352       INSL=INSL + K
 2353 1115   IF(K.EQ.4) IADM(1,KSYS)=57
 2354          RETURN
 2355 C***  *** FIRST FIELD
 2356  1120 INSL=K + 2
 2357       INS(3)=TKNVAL
 2358 C+++  16-BIT - MOST SIGNIFICANT BYTE OF P-COUNT
 2359       INS(2)=TKNVA2
 2360       GO TO 1115
 2361 C
 2362 C***  REGISTER FOR 3(A1) ADDRESSING MODE  ***
 2363 C
 2364 1200   CONTINUE
 2365 C***  TEST FOR ORG.L ALREADY SET ADDR MODE
 2366       IF(IADM(1,KSYS).EQ.57) INSL=INSL-2
 2367       RETURN
 2368 C
 2369 C***  .L FOR 3(A1.L) ADDRESSING MODE  ***
 2370 C
 2371  1300 RETURN
 2372 C
 2373 C***  SECOND REGISTER FOR 3(A1,A2) ADDRESSING MODE  ***
 2374 C
 2375  1400 RETURN
 2376 C
 2377 C***  SECOND REGISTER OF R1-R2 FOR LDM,STM
 2378 C
 2379  1500 RETURN
 2380 C
 2381 C***  'STRING' GT 4 BYTES (DC ONLY)
 2382 C
 2383  1600 INS(3)=TKNSIZ
 2384       IADM(1,1)=-1
 2385       RETURN
 2386 C
 2387 C***  CONSTANT OR VARIABLE OPERAND  ***
 2388 C
 2389 1700  CONTINUE
 2390       IADM(4,KSYS)=0
 2391 C
 2392       IF(TKNTYP.EQ.24)  GO TO 1710
 2393 C***  CONSTANT OPERAND
 2394       IF(TKNTYP.NE.42)  GO TO 1730
 2395 C***  ASTERISK
 2396       IADM(4,KSYS)=IADM(7,1)
 2397       TKNVAL=IPC
 2398       TKNVA2=IPC2
 2399       GO TO 1730
 2400 C***  DEFINED PREVIOUSLY?
 2401 1710  IF(JSUC.GT.0)  GO TO 1720
 2402 C***  NEW DEFINITION, PUT IN SY.
 2403       CALL STF(JSUC,JPTR,2,1)
 2404       ISYM(JPTR)=0
 2405       ISYM(JPTR+1)= 0
 2406 1720  IF(MPUAND(ISYM(JPTR),192).EQ.0)  IADM(5,KSYS)=1
 2407       TKNVAL=ISYM(JPTR+1)
 2408       TKNVA2=ISYM(JSUC)
 2409 C***  PC REL?
 2410          IF(MPUAND(ISYM(JPTR),7).EQ.1) IADM(4,KSYS)=1
 2411 C***  *** GIVE OPERAND TO EXP
 2412 1730  CALL EXP(22)
 2413       RETURN
 2414       END
 2415       SUBROUTINE BUILD1
 2416 CC    NAM: BUILD1  VER: 10.0  DAT: 12/08/78  CMP: 16-BIT
 2417 CC
 2418 CC    SYS: MACS
 2419 CC
 2420 CC    ENT: N/A
 2421 CC
 2422 CC    RTN: N/A
 2423 CC
 2424 CC    FNC: BUILD THE INSTRUCTION FOR PASS ONE
 2425 CC         USES INFORMATION IN TABLE 'IADM', AND 'INS' ARRAY.
 2426 CC
 2427 CC    REV: N/A
 2428 CC
 2429 CCALLS MPUAND-ERR-MOD2-IABS-PAGE
 2430 CC
 2431 CC    ERROR NUMBERS CALLED:  223,229,239,240
 2432 C*
 2433       IMPLICIT INTEGER (A-Z)
 2434       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
 2435      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
 2436      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
 2437       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
 2438       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
 2439       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
 2440       COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,PLEN
 2441       COMMON /A/ LIST,ICOL,NEST,LUCI,LULT,MFLD(11,3),IOBJ,LLENSW,NOP
 2442       COMMON /A/ NXSYM1
 2443       DIMENSION IMCD(6),NIMM(40)
 2444       EQUIVALENCE (IADM(4,1),SYMTYP)
 2445       DATA MASK2/0/,Z7000/O70000/,Z8000/O100000/,Z7100/O70400/
 2446       DATA ZB001/O130001/,ZD001/O150001/,ZD002/O150002/
 2447       DATA Z9001/O110001/,Z9002/O110002/,ZF000/O170000/
 2448 C                ORI   SUBI  EORI  CMPI  ANDI  ADDI
 2449       DATA IMCD/ 0000, 1024, 2560, 3072,  512, 1536/
 2450       DATA NIMM/
 2451      &  0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,1,
 2452      &  1,1,1,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0/
 2453 C
 2454       IF(ISIZ.EQ.0) ISIZ=1
 2455 C
 2456 C***  PERFORM ACTIONS FOR THE OPCODE CLASS
 2457       IF(IOPC.GT.0) GO TO 1620
 2458          INSL=0
 2459          RETURN
 2460  1620 IF(INSL.LT.0) INSL=2
 2461       GO TO(100, 200,9223,400,500, 600, 700, 800, 900, 1000,
 2462      &     1100,1200,1300,1400,1500,1600,1700,1800,1900),IOPC
 2463       J=IOPC-19
 2464       GO TO(2000,2100,2200,2300,2400,2500,2600,2700,2800,2900,3000,
 2465      &      9223,3200,9223,3400,3500,3600,3700,3800),J
 2466       J=J-19
 2467       GO TO(3900),J
 2468       GO TO 9223
 2469 C
 2470 C***  PSEUDO OPS WITHOUT OPERANDS
 2471 100   INS1=INS(1)
 2472       GO TO(110,120,120,130,140,150,170,180,120,120,120,197),INS1
 2473 C...  *** END
 2474   110 IPASS=0
 2475       IPC2=0
 2476       IPC=0
 2477       MNUM=0
 2478 C***  SLEW & PRINT HEADER IF PASS 1 ERRORS
 2479       CALL PAGE(82)
 2480       KD1LNO=0
 2481       REWIND LUSI
 2482 C***  RESET TO START OF PASS 1
 2483       LIST=1
 2484       RETURN
 2485   120 RETURN
 2486 C***  LIST ***
 2487 130   LIST=1
 2488       RETURN
 2489 C
 2490 C***  NOLIST ***
 2491 140   LIST=0
 2492       RETURN
 2493 C***  TTL
 2494 150   CONTINUE
 2495       RETURN
 2496 C***  NOPAGE
 2497 170   CONTINUE
 2498       NOP=0
 2499       RETURN
 2500 C
 2501 C***  NOOBJ - NO OBJECT OUTPUT
 2502 C
 2503 180   CONTINUE
 2504       IOBJ=0
 2505       RETURN
 2506 197   CONTINUE
 2507 C***  MASK2 DIRECTIVE
 2508       MASK2=1
 2509       TKNSIZ=4
 2510 C***  FIND ROOM FOR 'DCNT'
 2511       ITOKEN(1)=68
 2512       ITOKEN(2)=67
 2513       ITOKEN(3)=78
 2514       ITOKEN(4)=84
 2515       CALL LKP(-1,LSUC,LPTR)
 2516 C***  PUT 'DCNT' IN SYMM TABLE
 2517       CALL STF(LSUC,LPTR,2,-1)
 2518       ISYM(LPTR)=32
 2519 C***  SET OPCODE
 2520       ISYM(LPTR+1)=Z7100
 2521       NXSYM1=NXSYM
 2522 C***  FIND 'DBRA'
 2523       ITOKEN(1)=68
 2524       ITOKEN(2)=66
 2525       ITOKEN(3)=82
 2526       ITOKEN(4)=65
 2527        CALL LKP(-1,LSUC,LPTR)
 2528       IF(LSUC.LE.0) GO TO 199
 2529       DO 198 I=1,16
 2530       ISYM(LSUC+3)=LSP
 2531       LSUC=LSUC+ISHFT(ISYM(LSUC+1),-8)+5
 2532 198   CONTINUE
 2533 C***  CHANGE OPCODE OF 'STOP' TO 2
 2534       ITOKEN(1)=83
 2535       ITOKEN(2)=84
 2536       ITOKEN(3)=79
 2537       ITOKEN(4)=80
 2538       CALL LKP(-1,LSUC,LPTR)
 2539       IF(LSUC.LE.0) GO TO 199
 2540       ISYM(LPTR)=2
 2541        RETURN
 2542 9900   FORMAT(' SYMBOL DBRA NOT FOUND')
 2543 199   WRITE(LULT,9900)
 2544       RETURN
 2545 C
 2546 C
 2547 C***  OP CODES WITHOUT OPERANDS
 2548 200   RETURN
 2549 C
 2550 400   INSL=0
 2551 C
 2552 C***  DC
 2553       IF(IADM(1,1).GE.0)  GO TO 410
 2554 C***  'STRING'
 2555       KK=INS(3)
 2556       I=MOD(INS(3),ISIZ)
 2557       IF(I.NE.0) KK=KK-I+ISIZ
 2558       GO TO 415
 2559 410   KK=ISIZ
 2560 415      I=0
 2561       GO TO 545
 2562 C
 2563 C***  PSEUDO OPS WITH OPERANDS
 2564   500 INSL=0
 2565       INS1=INS(1)
 2566       GO TO(510,520,520,540,550,560,570),INS1
 2567       GO TO 9223
 2568 C...  *** ORG
 2569   510 IPC=INS(3)
 2570 C+++  16-BIT - GET MOST SIGNIFICANT BYTE
 2571       IPC2=INS(2)
 2572       IADM(7,1)=0
 2573       IADM(7,2)=0
 2574       IF(ISIZ.EQ.4)  IADM(7,2)=1
 2575          GO TO 530
 2576 C...  *** EQU
 2577   520 IF(LPTR.GT.0) GO TO 522
 2578 C...     *** ERROR - NO LABEL ON STATEMENT
 2579          CALL ERR(229)
 2580          RETURN
 2581 522   ISYM(LPTR)=MPUAND(ISYM(LPTR),192) + SYMTYP
 2582       ISYM(LPTR+1)=INS(3)
 2583       IF(INS(1).EQ.2)  GO TO 525
 2584 C... *** 'SET' DIRECTIVE, ALLOW REDEFINITION
 2585       ISYM(LPTR)= SYMTYP + 64
 2586 C+++  16 BIT PUT M.S.B. OF ADDRESS IN SYM TABLE.
 2587 C***  LSUC HAS BEEN SAVE IN 'ACT1'
 2588 525   KK=ITOKEN(69)
 2589       ISYM(KK)=INS(2)
 2590 C***  FORWARD REF ILLEGAL
 2591 530   IF(IADM(5,1).EQ.1) GO TO 9240
 2592       RETURN
 2593 C
 2594 C***  DS
 2595 C
 2596 C*** KK=INS(3)*ISIZ
 2597 540      I=0
 2598          KK=ISIZ
 2599          CALL MUL(I,KK,INS(2),INS(3))
 2600 C***  CHECK FOR A FORWARD REFERERENCE WHICH IS ILLEGAL
 2601       IF(IADM(5,1).EQ.1)  GO TO 9240
 2602 545   LPTR=0
 2603 C***  IPC=IPC + KK
 2604       CALL ADD(IPC2,IPC,I,KK)
 2605       IF(ISIZ.NE.1) CALL MOD2
 2606       RETURN
 2607 C
 2608 C***  RORG
 2609 C
 2610 550   IPC=INS(3)
 2611 C+++  16-BIT - GET MOST SIGNIFICANT BYTE
 2612       IPC2=INS(2)
 2613       IADM(7,1)=1
 2614       IADM(7,2)=0
 2615       RETURN
 2616 C
 2617 C***  FAIL
 2618 C
 2619 560   RETURN
 2620 C
 2621 C***  SPC  ***
 2622 C
 2623 570   CONTINUE
 2624       RETURN
 2625 C
 2626 C***  LINK/UNLK - ADDRESS REGISTER TO BITS 2-0
 2627 C
 2628 600   CONTINUE
 2629 C***  CHECK FOR LINK - 20048 = $4E50 = LINK
 2630       IF(INS(1).EQ.20048)  INSL=4
 2631       RETURN
 2632 C
 2633 C***  SWAP - DATA REGISTER TO BITS 2-0
 2634 C
 2635   700 RETURN
 2636 C
 2637 C***  TRAP - ESTABLISH DISPLACEMENT IN BITS 3-0
 2638 C
 2639   800 RETURN
 2640 C
 2641 C***  ABS/CLR/NEG/NOT/TST - BUILD EA
 2642 C
 2643   900 RETURN
 2644 C
 2645 C***  NBCD
 2646 C
 2647  1000 RETURN
 2648 C
 2649 C***  PEA
 2650 C
 2651  1100 RETURN
 2652 C
 2653 C***  JSR,JMP
 2654 C
 2655 1200  CONTINUE
 2656       RETURN
 2657 C
 2658 C***  BCC
 2659 C
 2660 1300  CONTINUE
 2661       IF(INSL.EQ.6) INSL=4
 2662       IF(ISIZ.NE.1)  GO TO 1310
 2663 C***  FORCE SHORT FORM
 2664       INSL=2
 2665       RETURN
 2666  1310 IF(INS(3).EQ.-1) RETURN
 2667 C***  IS IT A FORWARD REFERENCE?
 2668       IF(IADM(5,1).EQ.1)  RETURN
 2669 C...  *** BACKWARD REFERENCE
 2670          IOFS=INS(3)-IPC-2
 2671          IF(IABS(IOFS).LE.127) INSL=2
 2672          RETURN
 2673 C
 2674 C***  NEGX
 2675 C
 2676  1400 RETURN
 2677 C
 2678 C***  EXT
 2679 C
 2680  1500 RETURN
 2681 C
 2682 C***  TAS
 2683 C
 2684  1600 RETURN
 2685 C
 2686 C***  SCC
 2687  1700 RETURN
 2688 C
 2689 C***  CONDITIONAL ASSEMBLY
 2690 C
 2691  1800 INSL=0
 2692       INS1=INS(1)
 2693       GO TO(1810,1820),INS1
 2694 C...  *** EQ
 2695 C
 2696  1810 IF(INS(3).NE.0) GO TO 1890
 2697          IF(INS(2).NE.0) GO TO 1890
 2698          RETURN
 2699 C...  *** NE
 2700  1820 IF(INS(3).EQ.0.AND.INS(2).EQ.0) GO TO 1890
 2701          RETURN
 2702 C...  *** SKIP TO ENDC
 2703  1890 ICOL=-2
 2704       RETURN
 2705 C
 2706 C***  PAGE LENGTH(PLEN) - LINE LENGTH(LLEN)
 2707 C
 2708 1900  CONTINUE
 2709       IF(INS(1).GT.2) INSL=4
 2710       RETURN
 2711 C
 2712 C***  MULTIPLY,DIVIDE
 2713 C
 2714  2000 RETURN
 2715 C
 2716 C***  ADD/SUB PROCESSING
 2717 C
 2718 2100  CONTINUE
 2719       IF(IADM(1,2).EQ.8.AND.ISIZ.EQ.1) RETURN
 2720 C***  ADD1/SUBQ? IF SO FORCE QUICK
 2721 C***  20480=$5000 - 20736 = $ 5100
 2722       IF(INS(1).EQ.20480.OR.INS(1).EQ.20736) GO TO 2120
 2723       IF(INS(3).LE.0) RETURN
 2724       IF(INS(3).GT.8) RETURN
 2725 C***  TEST FOR IMMEDIATE SOURCE
 2726       IF(IADM(1,1).NE.60) RETURN
 2727 C***  ADD1/SUBI? IF SO FORCE IT
 2728       IF(INS(1).EQ.ZD001.OR.INS(1).EQ.Z9001) RETURN
 2729 C***  ADDA/SUBA?
 2730       IF(INS(1).EQ.ZD002.OR.INS(1).EQ.Z9002) RETURN
 2731 C...        *** QUICK MODE
 2732 2120        INSL=INSL - 2
 2733             IF(ISIZ.EQ.4)  INSL= INSL - 2
 2734             RETURN
 2735 C
 2736 C***  AND,OR
 2737 C
 2738  2200 RETURN
 2739 C
 2740 C***  EOR
 2741  2300 RETURN
 2742 C
 2743 C***  CMP
 2744 C
 2745  2400 RETURN
 2746 C
 2747 C***  EXG
 2748 C
 2749  2500 RETURN
 2750 C
 2751 C***  CHK
 2752 C
 2753  2600 RETURN
 2754 C
 2755 C***  CMPM
 2756 C
 2757  2700 RETURN
 2758 C
 2759 C***  ADDX,SUBX
 2760 C
 2761  2800 RETURN
 2762 C
 2763 C***  ABCD,SBCD
 2764 C
 2765  2900 RETURN
 2766 C
 2767 C***  MOVEP
 2768 C
 2769  3000 RETURN
 2770 C
 2771 C***  DCNT
 2772 C
 2773 3200  IF(MASK2.EQ.0) INSL=4
 2774       RETURN
 2775 C
 2776 C***  LEA
 2777 C
 2778  3400 RETURN
 2779 C
 2780 C***  SHIFTS
 2781 C
 2782 3500  CONTINUE
 2783       IF(IADM(1,1).EQ.60.AND.ISIZ.EQ.4) INSL=INSL-2
 2784 C***  ALLOW #BIT NUMBER ALSO
 2785       IF(IADM(1,1).EQ.60) IADM(1,1)=56
 2786       IF(IADM(1,1).EQ.56)  INSL=INSL-2
 2787       RETURN
 2788 C
 2789 C***  BIT INSTRUCTIONS
 2790 C
 2791 3600  CONTINUE
 2792          IF(IADM(1,1).EQ.60.AND.ISIZ.EQ.4) INSL=INSL-2
 2793       IF(MASK2.NE.1) RETURN
 2794       I=MPUAND(INS(5),1)
 2795       IF(I.EQ.0) RETURN
 2796       GO TO 3930
 2797 3900  IF(MASK2.NE.0) RETURN
 2798       IF(INS(3).GT.7) RETURN
 2799 3930  CONTINUE
 2800       IF(IADM(1,2).NE.16) RETURN
 2801       INSL=INSL+2
 2802       IADM(1,2)=40
 2803       IADM(3,2)=1
 2804       RETURN
 2805 C
 2806 C***  MOVE INSTRUCTION
 2807 C*-* TEST FOR IMMEDIATE SOURCE AND D SINK
 2808 3700  CONTINUE
 2809 C***  MOVEQ?
 2810       IF(INS(1).EQ.Z7000) GO TO 3705
 2811       IF(IADM(1,1).NE.60) RETURN
 2812       IF(IADM(1,2).NE.0)  RETURN
 2813 C *-* MOVE #,D - CAN W USE LDQ?
 2814 C
 2815       IF(ISIZ.NE.4) GO TO 3710
 2816 C***  FORWARD REFERENCE?
 2817       IF(IADM(5,1).EQ.1)  RETURN
 2818       IF(INS(3).LT. -127)  RETURN
 2819       IF(INS(3).GT.127) RETURN
 2820 C***  IS VALUE TO BIG FOR MOVEQ DEFAULT?
 2821       IF(INS(2).NE.0.AND.INS(2).NE.-1) RETURN
 2822 C***  DON'T DEFAULT TO MOVEQ FOR VALID 16 BIT POSITIVE #
 2823       IF(INS(2).EQ.0.AND.MPUAND(TKNVAL,Z8000).NE.0) RETURN
 2824 C * -* USE LDQ
 2825 3705  INSL=2
 2826       RETURN
 2827 C
 2828 C***  USE 4 BYTES FOR MOVE #,REG
 2829 3710  CONTINUE
 2830       INSL=4
 2831       RETURN
 2832 C
 2833 C***  LDM,STM
 2834 C
 2835 3800  INSL=INSL+2
 2836       RETURN
 2837 C
 2838 C***  ERROR RETURNS
 2839 C
 2840 C...  *** UNDEFINED ACTION (INTERNAL ERROR)
 2841 C
 2842  9223 CALL ERR(223)
 2843       RETURN
 2844 C
 2845 C***  ILLEGAL FORWARD REFERENCE
 2846 C
 2847 9240  CONTINUE
 2848       CALL ERR(240)
 2849       RETURN
 2850       END
 2851       SUBROUTINE EXP(NACT)
 2852 CC
 2853 CC    NAM: EXP  VER:1.00  DATE: 12/11/78     CMP: PDP-11
 2854 CC    SYS: MACS
 2855 CC
 2856 CC    ENT: NACT - 1 = INITIALIZE
 2857 CC                2 = OPERAND (VALUE IN TKNVAL)
 2858 CC                3 = RESERVED
 2859 CC                4 = OPERATOR: UNARY MINUS
 2860 CC                5 =           >> (SHIFT RIGHT)
 2861 CC                6 =           << (SHIFT LEFT)
 2862 CC                7 =           & (AND)
 2863 CC                8 =           ^ (OR)
 2864 CC                9 =           % (EOR)
 2865 CC               10 =           * (MPY)
 2866 CC               11 =           YMTYP/IADM(4,K (DIV)
 2867 CC               12 =           + (ADD)
 2868 CC               13 =           - (SUB)
 2869 CC               14 =           ( (OPEN PREN)
 2870 CC               15 =            ) (CLOSE PAREN)
 2871 CC               16 =           I- (BGN EXPR)
 2872 CC               17 =           -I (END EXPR)
 2873 CC
 2874 CC    RTN: TKNVAL   =  VALUE OF THE EXPRESSION
 2875 CC         IADM(4,KSYS)   =  MODE OF THE RESULT
 2876 CC                0 = ABSOLUTE
 2877 CC                1 = RELATIVE
 2878 CC                KSYS=1=1ST OPERAND
 2879 CC                KSYS=2=2ND OPERAND
 2880 CC
 2881 CC    FNC: PERFORMS EXPRESSION RECOGNIZE BY BOTTOM UP OPERATOR
 2882 CC         PRECEDENT.
 2883 CC
 2884 CC    REV: NYMTYP/IADM(4,KA
 2885 CC
 2886 CCALLS MPUIOR-ERR-ISHFT-MPUAND
 2887 CC
 2888 CC    ERROR NUMBERS CALLED:  223,237
 2889 CC
 2890 C*
 2891       IMPLICIT INTEGER (A-Z)
 2892       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
 2893      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
 2894      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
 2895       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
 2896       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
 2897       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
 2898       COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
 2899 C
 2900       DIMENSION STK1(20),STK2(20),FVTAB(17),ACTAB(17)
 2901       DIMENSION STK11(20)
 2902 C
 2903 C                      - > < & ^ % * / + - ( ) 4 5
 2904       DATA FVTAB/0,0,0,7,6,6,5,5,5,4,4,3,3,2,2,1,1/
 2905       DATA ACTAB/0,0,0,3,4,4,4,4,4,4,4,4,4,2,2,1,1/
 2906 C
 2907       KACT=NACT-20
 2908 C              1   2   3   4   5   6   7   8   9  10
 2909       GO TO ( 10, 20,999,200,200,200,200,200,200,200,
 2910      &       200,200,200,240,200,999,200),KACT
 2911 C
 2912 C***  INITIALIZE
 2913 C
 2914 10    NDX=1
 2915       LOP=16
 2916       STK1(1)=LOP
 2917       RETURN
 2918 C
 2919 C***  OPERAND
 2920 C
 2921 20    NDX=NDX+1
 2922       STK1(NDX)=TKNVAL
 2923       STK2(NDX)=IADM(4,KSYS)
 2924 C***  SAVE UPPER 2 BYTES
 2925       STK11(NDX)=TKNVA2
 2926       TKNVA2=0
 2927       RETURN
 2928 C
 2929 C***  OPERATORS
 2930 C
 2931 200   FVOP1=FVTAB(KACT)
 2932 205   IF(FVOP1.LE.FVTAB(LOP))  GO TO 1000
 2933 240   LOP=KACT
 2934       NDX=NDX +1
 2935       STK1(NDX)=KACT
 2936       RETURN
 2937 C
 2938 C***  UNSTACK THE OPERATION
 2939 C
 2940 1000  J=ACTAB(LOP)
 2941       GO TO (1010,1020,1030,1040),J
 2942 C
 2943 C***  BEGIN EXPRESSION - END EXPRESSION
 2944 C
 2945 1010  TKNVAL=STK1(2)
 2946       IADM(4,KSYS)=STK2(2)
 2947 C***  SET POSSIBLE NUMBER >$FFFF
 2948       TKNVA2=STK11(2)
 2949       RETURN
 2950 C
 2951 C***  LEFT PAREN - RIGHT PAREN
 2952 C
 2953 1020  NDX=NDX-1
 2954       STK1(NDX)=STK1(NDX+1)
 2955       STK11(NDX)=STK11(NDX+1)
 2956       STK2(NDX)=STK2(NDX+1)
 2957       LOP=STK1(NDX-1)
 2958       RETURN
 2959 C
 2960 C***  UNARY MINUS
 2961 C
 2962 1030  KK=  STK1(NDX)
 2963       S1=  STK2(NDX)
 2964       S2=  0
 2965       KK1= STK11(NDX)
 2966 C***  COMPLEMENT THE #
 2967          CALL NEGATE(KK1,KK)
 2968       NDX=NDX-1
 2969       GO TO 3000
 2970 C
 2971 C**  ARITHMETIC OPERATOR
 2972 C
 2973 1040  NDX=NDX-2
 2974       A= STK1(NDX)
 2975       A1=STK11(NDX)
 2976       S1=STK2(NDX)
 2977       B= STK1(NDX+2)
 2978       B1=STK11(NDX+2)
 2979       S2=STK2(NDX+2)
 2980 C
 2981 C***  PERFORM THE OPERATION
 2982 C
 2983       GO TO ( 999, 999, 999, 999,2050,2060,2070,2080, 999,
 2984      &       2100,2110,2120,2130),LOP
 2985 C
 2986 C***  SHIFT RIGHT
 2987 2050  B= -B
 2988 C
 2989 C***
 2990 C
 2991 2060  KK=ISHFT(A,B)
 2992       GO TO 3000
 2993 C
 2994 C***  AND
 2995 C
 2996 2070  KK=MPUAND(A,B)
 2997       GO TO 3000
 2998 C
 2999 C***  OR
 3000 C
 3001 2080  KK=MPUIOR(A,B)
 3002       GO TO 3000
 3003 C
 3004 C***  MPY
 3005 C
 3006 2100  CONTINUE
 3007 C***  USE REG MPY IF NEG #'S
 3008       IF(B1.EQ.-1.AND.A1.EQ.-1) GO TO 2108
 3009 C***  GO MPY
 3010 2102  CALL MUL(A1,A,B1,B)
 3011       KK=A
 3012       KK1=A1
 3013       GO TO 3000
 3014 2108  A1=0
 3015       B1=0
 3016       GO TO 2102
 3017 C
 3018 C***  DIV
 3019 C
 3020 2110  CONTINUE
 3021       IF(A1.EQ.-1.AND.B1.EQ.-1) GO TO 2118
 3022 C***  IS IT DIV BY ZERO?
 3023       IF(B.EQ.0.AND.B1.EQ.0) GO TO 2900
 3024       CALL DIV(A1,A,B1,B)
 3025       KK=A
 3026       KK1=A1
 3027       GO TO 3000
 3028 2118  KK=A/B
 3029          KK1=0
 3030       GO TO 3000
 3031 C
 3032 C***  ADD
 3033 C
 3034 2120  CALL ADD(A1,A,B1,B)
 3035       KK=A
 3036       KK1=A1
 3037       GO TO 3100
 3038 C
 3039 C***  SUB
 3040 C
 3041 2130  CALL SUB(A1,A,B1,B)
 3042       KK=A
 3043       KK1=A1
 3044       IF(S1.EQ.S2)  S1 =0
 3045       GO TO 3200
 3046 2900  KK=0
 3047       KK1=0
 3048 C
 3049 C***  ASSURE VALID OPERATION FOR OPERAND MODES
 3050 C
 3051 C...  *** DISALLOW REL,XXX
 3052 3000  IF(S1.EQ.0)  GO TO 3100
 3053         IF(IPASS.GE.0)  CALL ERR(237)
 3054 C...  *** DISALLOW XXX,REL
 3055 3100  IF(S2.EQ.0)  GO TO 3200
 3056          IF(IPASS.GE.0)  CALL ERR(237)
 3057 C
 3058 C...  *** ALLOW ANY MODE
 3059 C
 3060 3200  STK1(NDX)=KK
 3061       STK2(NDX)=S1
 3062       STK11(NDX)=KK1
 3063       LOP=STK1(NDX-1)
 3064       GO TO 205
 3065 C
 3066 C***  ERROR EXIT
 3067 C
 3068 999   CALL ERR(223)
 3069       RETURN
 3070       END
 3071       SUBROUTINE RANGE(KK)
 3072 CC    NAM: RANGE  VER: 1.0  DAT: 12/08/78  CMP: 16-BIT
 3073 CC
 3074 CC    SYS: MACS
 3075 CC
 3076 CC    ENT: KK - NUMERIC VALUE TO BE CHECKED FOR SIZE
 3077 CC
 3078 CC    RTN: KK - N/C
 3079 CC
 3080 CC    FNC: VALIDATE NUMERIC RANGE VALUES IN #N TYPE STATEMENTS
 3081 CC
 3082 CC    REL: N/A
 3083 CC
 3084 CCALLS ERR-ISHFT
 3085 CC
 3086 CC    ERROR NUMBERS CALLED:  210
 3087 CC
 3088 C*
 3089       IMPLICIT INTEGER (A-Z)
 3090       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
 3091      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
 3092      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
 3093       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
 3094       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
 3095       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
 3096       COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
 3097       KKK=KK
 3098       IF(ISIZ.EQ.128)  RETURN
 3099 C***  WORD OR BYTE?
 3100       IF(ISIZ.EQ.0)  GO TO 100
 3101 C***  CHECK UPPER 2 BYTES
 3102       IF(TKNVA2.EQ.0)  RETURN
 3103       IF(TKNVA2.NE.-1)  GO TO 210
 3104       RETURN
 3105 100   CONTINUE
 3106 C
 3107       IF(TKNVA2.GT.0) GO TO 210
 3108       JJ=ISHFT(KKK,-8)
 3109       IF(JJ.EQ.0)  RETURN
 3110       IF(JJ.EQ.255)  RETURN
 3111 210   CALL ERR(210)
 3112       RETURN
 3113       END
 3114       SUBROUTINE ACT2(KMD)
 3115 CC    NAM: ACT2  VER: 1.0  DAT: 12/08/78  CMP: 16-BIT
 3116 CC
 3117 CC    SYS: MACS
 3118 CC
 3119 CC    ENT: KMD - EQUALS ACTION TO BE TAKEN AS FOUND
 3120 CC         IN THE PARSE TABLE.
 3121 CC
 3122 CC    RTN: N/C
 3123 CC
 3124 CC    FNC: P A S S   T W O   A C T I O N S
 3125 CC         ------------------------------
 3126 CC         PERFORM THE ACTIONS FOR THE DIFFERENT "TOKENS"
 3127 CC         ENCOUNTERED DURING THE STATEMENT SCAN.
 3128 CC         SETS UP 'IADM' TABLE, ENTERS EXP IN EXP TABLE.
 3129 CC
 3130 CC         THIS ROUTINE IS 16-BIT DEPENDENT DUE TO THE CHECK ON
 3131 CC         'TKNVA2' FOR THE 2 MOST SIGNIFICANT BYTES OF A 32-BIT #.
 3132 CC         INTEGER CONSTANT 192=$C0, 128=$80($=HEX).
 3133 CC
 3134 CC    REV: N/A
 3135 CC
 3136 CCALLS ERR-LKP-SCN-OUTPUT-RANGE-MASK-EXP-MPUGTC
 3137 CC    IABS-ISHFT-MPUAND-MPUIOR
 3138 CC
 3139 CC    ERROR NUMBERS CALLED:  205,206,207,208,209,212,213,214,219,227
 3140 CC                           228,231,234,235
 3141 C*
 3142       IMPLICIT INTEGER (A-Z)
 3143       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
 3144      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
 3145      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
 3146       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
 3147       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
 3148       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
 3149       COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
 3150       COMMON /A/LIST,ICOL,NEST
 3151       DIMENSION NSZF(40),NSZ(40),MREL(40)
 3152       EQUIVALENCE(IADM(4,1),SYMTYP),(IADM(5,1),LFRF)
 3153       DATA LB/66/,LW/87/,LL/76/,LAP/39/
 3154       DATA LS/83/
 3155 C***  0   = UNSIZED INSTRUCTION
 3156 C***  1   = B,W,L ALLOWED
 3157 C***  2   = B ONLY
 3158 C***  66  = W ONLY
 3159 C***  130 = L ONLY
 3160 C***  SIZE SUBFIELD ALLOWED? ***
 3161       DATA NSZF/
 3162      &  0,0,0,1,1,0,66,0,1,2,130,0,-1,1,1,2,0,0,0,66,
 3163      &  1,1,1,1,130,66,1,1,2,1,0,0,1,130,1,1,1,1,1,0/
 3164 C  OPCODE SIZES  01 02 03 04 05 06 07 08 09 10
 3165 C***               01-10
 3166       DATA NSZ/      0, 2, 0,-1,-1,-1, 2,-1,-1,-1,
 3167      &              -1,-1,-1,-1, 2,-1,-1, 0, 0,-1,
 3168      &              -1,-1,-1,-1, 2,-1, 2, 2, 2,-1,
 3169      &               0,-1, 2,-1,-1,-1,-1,-1,-1, 0/
 3170 C  USE PC REL?   01 02 03 04 05 06 07 08 09 10
 3171 C***                   01-10
 3172       DATA MREL/     0, 0, 0, 0,-1, 0, 0, 0, 1, 1,
 3173      &               1, 1,-1, 1, 1, 1, 1, 0, 0, 1,
 3174      &               1, 1, 1, 1, 0, 0, 0, 0, 0, 1,
 3175      &               0,-1, 0, 1, 0, 1, 1, 1, 1, 0/
 3176       DATA Z8000/O100000/
 3177 C
 3178       GO TO(100,200,300,400,500,600,700,800,800,
 3179      &      1000,1100,1200,1300,1400,1500,1600,1700),KMD
 3180 C***  EXPRESSION ACTION
 3181       CALL EXP(KMD)
 3182       RETURN
 3183 C
 3184 C***  STATEMENT LABEL
 3185 C
 3186   100 CALL LKP(1,LSUC,LPTR)
 3187       IF(LSUC.LE.0) RETURN
 3188       IR=ISYM(LPTR)
 3189       KR=MPUAND(IR,192)
 3190 C
 3191 C***  SAVE FOR BUILD2
 3192       ITOKEN(69)=LSUC
 3193       IF(KR.NE.192)  GO TO 110
 3194 C***   REDEFINED SYMBOL
 3195       CALL ERR(206)
 3196       RETURN
 3197 C
 3198 C***  DEFINE FOR PASS TWO
 3199 110   ISYM(LPTR)= MPUAND(IR,63) + 128
 3200 C
 3201       RETURN
 3202 C
 3203 C***  OPCODE
 3204 C
 3205  200  KSYS=1
 3206       IF(JSUC.GT.0) GO TO 210
 3207 C***     ERROR 207 - UNDEFINED OP-CODE
 3208          CALL ERR(207)
 3209          KOLUMN=0
 3210          RETURN
 3211 C  *** MACRO DEFINITION?
 3212   210 IF(IOPC.GT.0) GO TO 260
 3213       IF(IOPC.EQ.0)  GO TO 265
 3214 C  *** LOOK FOR ENDM
 3215   230 KOLUMN=-1
 3216       LPTR=0
 3217       IOPC=0
 3218       CALL SCN
 3219       IF(TKNTYP.NE.30) GO TO 230
 3220       IF(IOPC.GE.0) GO TO 230
 3221 C***  ASSURE NOT MEXIT
 3222       IF(INS(1).EQ.2)  GO TO 230
 3223          KOLUMN=0
 3224          RETURN
 3225 C  *** NEED OPERAND FIELD?
 3226 260   CONTINUE
 3227       INSL=NSZ(IOPC)
 3228       JNSL=INSL
 3229       IF(IOPC.GE.4) GO TO 270
 3230 C     *** OPERAND FIELD NOT NEEDED
 3231 265      KOLUMN=0
 3232          RETURN
 3233 270   IADM(1,1)=-1
 3234       IADM(3,2)=0
 3235       IADM(1,2)=-1
 3236       IADM(6,1)=0
 3237       IADM(6,2)=0
 3238       ISIZ=64
 3239 C***  ALLOW .B ONLY FOR BIT INSTRUCTIONS
 3240       IF(IOPC.EQ.36) ISIZ=0
 3241       IADM(4,1)=0
 3242       IADM(4,2)=0
 3243       IADM(5,2)=0
 3244       LFRF=0
 3245       CALL EXP(21)
 3246       RETURN
 3247 C
 3248 C***  DATA SIZE
 3249 C
 3250 C
 3251 300   KK=NSZF(IOPC)
 3252 C
 3253       IF(KK.GT.0)  GO TO 310
 3254 C
 3255 C***  IS "S" ALLOWED?
 3256       IF(KK.EQ.0)  GO TO 305
 3257 C
 3258       IF(ITOKEN(1).NE.LS)  GO TO 390
 3259 C***  ALLOW "S"
 3260       ISIZ=0
 3261       RETURN
 3262 C
 3263 C     *** ERROR - SIZE SUBFIELD NOT ALLOWED FOR THIS OPCODE
 3264 305      CALL ERR(205)
 3265          RETURN
 3266   310 IF(TKNSIZ.NE.1) GO TO 390
 3267       IF(ITOKEN(1).NE.LB) GO TO 320
 3268          ISIZ=0
 3269       GO TO 395
 3270   320 IF(ITOKEN(1).NE.LL) GO TO 330
 3271          ISIZ=128
 3272       GO TO 395
 3273   330 IF(ITOKEN(1).EQ.LW) GO TO 392
 3274 C     *** ERROR - UNKNOWN DATA SIZE SPECIFIED
 3275   390    CALL ERR(212)
 3276          RETURN
 3277 392   ISIZ=64
 3278 395   CONTINUE
 3279 C***  IF ALL 3 SIZES ALLOWED, SKIP
 3280       IF(KK.EQ.1) RETURN
 3281       IF(ISIZ.NE.KK-2) CALL ERR(238)
 3282       RETURN
 3283 C
 3284 C***  COMMA STARTING FIELD-2 OPERAND  ***
 3285 C
 3286 C
 3287 400   CALL EXP(21)
 3288       IF(IOPC.NE.4)  GO TO 410
 3289 C***  DC - FORCE OUT
 3290       CALL OUTPUT
 3291       INSL=-1
 3292       RETURN
 3293 C
 3294 410   CONTINUE
 3295       IF(KSYS.EQ.2)  GO TO 420
 3296 C***  CHECK FOR 'LINK' - 20048 = $4E50 = LINK
 3297       IF(IOPC.EQ.6.AND.INS(1).EQ.20048)  GO TO 430
 3298       IF(IOPC.GE.19) GO TO 430
 3299 C     *** OPCODE REQUIRES ONLY ONE OPERAND
 3300 420      CALL ERR(219)
 3301          KOLUMN=0
 3302          RETURN
 3303 C+++ MOVE REG,MODE TO SS 2
 3304   430 KSYS=2
 3305       TKNVA2=0
 3306       RETURN
 3307 C
 3308 C***  OPERAND - REGISTER
 3309 C
 3310   500 IADM(1,KSYS)=0
 3311       JR=ISYM(JPTR+1)
 3312       IADM(2,KSYS)=JR
 3313 C
 3314 C  *** STATUS REGISTER?
 3315       IF(JR.LE.15)  GO TO 510
 3316 C  *** DEFINE AS STATUS REGISTER
 3317       IADM(1,KSYS)=64
 3318       RETURN
 3319 C  *** ADDR REGISTER?
 3320 510   IF(JR.GT.7) IADM(1,KSYS)=8
 3321       IF(IOPC.EQ.38) CALL MASK(JR)
 3322       RETURN
 3323 C
 3324 C***  REGISTER INDIRECT MODE  ***
 3325 C
 3326   600 IADM(1,KSYS)=16
 3327       GO TO 900
 3328 C
 3329 C***  POST INCREMENT  ***
 3330 C
 3331   700 IADM(1,KSYS)=24
 3332       RETURN
 3333 C
 3334 C***  PRE DECREMENT  ***
 3335 C
 3336   800 IADM(1,KSYS)=32
 3337 C
 3338 C***  REGISTER OF (A1) ADDRESSING MODE  ***
 3339 C
 3340   900 JR=ISYM(JPTR+1)
 3341   910 IF(JR.GT.7) GO TO 920
 3342 C     *** ERROR - REGISTER INDIRECT SPECIFIES DATA REGISTER.
 3343          CALL ERR(213)
 3344          RETURN
 3345   920 IADM(2,KSYS)=JR
 3346       RETURN
 3347 C
 3348 C***  IMMEDIATE OPERAND  ***
 3349 C
 3350  1000 IADM(1,KSYS)=60
 3351       CALL EXP(37)
 3352 C
 3353       CALL RANGE(TKNVAL)
 3354 1006  IF(INSL.GT.0) GO TO 1010
 3355 C  *** DETERMINE OPERAND SIZE
 3356       INSL=4
 3357       IF(ISIZ.NE.128)  GO TO 1008
 3358       INSL=6
 3359 C+++ 16-BIT - GET NEXT 2 BYTES
 3360       INS(2)=TKNVA2
 3361 1008  INS(3)=TKNVAL
 3362       RETURN
 3363 C  *** SECOND OPERAND FIELD
 3364 1010  IF(JNSL.GE.0)  GO TO 1190
 3365       IADM(3,2)=2
 3366       IF(ISIZ.EQ.128) IADM(3,2)=4
 3367       INSL=INSL+ IADM(3,2)
 3368 C+++  IN CASE 16-BITS GET REST OF #
 3369       INS(4)=TKNVA2
 3370       INS(5)=TKNVAL
 3371       RETURN
 3372 C
 3373 C***  DISPLACEMENT  ***
 3374 C
 3375 C
 3376 1100  CALL EXP(37)
 3377       KM=56
 3378       KL=2
 3379 C***  RELOCATABLE SYMBOL
 3380       RTYP=MREL(IOPC)
 3381 C
 3382       IF(RTYP.LE.0)  GO TO 1110
 3383 C  *** IS EXPRESSION ABSOLUTE?
 3384       IF(IADM(4,KSYS).EQ.0) GO TO 1110
 3385 C
 3386       IF(IADM(7,2).EQ.1.AND.IADM(5,KSYS).GT.0) CALL ERR(231)
 3387       K=INSL
 3388       IF(K.LT.0) K=2
 3389 C***      TKNVAL=TKNVAL - IPC - K
 3390 C***  SUBTRACT IPC FROM TKNVAL
 3391       CALL SUB(TKNVA2,TKNVAL,IPC2,IPC)
 3392 C***  NOW SUBTRACT K
 3393       CALL SUB(TKNVA2,TKNVAL,0,K)
 3394       KM=58
 3395 C***  TEST FOR VALID NEG#
 3396       IF(TKNVA2.EQ.-1) GO TO 1120
 3397 C
 3398 C***  TEST FOR GREATER THAN 2 BYTES INSTEAD OF ONE(32767 NOT 127)
 3399       IF(TKNVA2.NE.0) CALL ERR(208)
 3400       GO TO 1120
 3401 C***  ABSOLUTE SYMBOL, FIND ITS SIZE
 3402 1110  CONTINUE
 3403 C***  BACK OR FORWARD REF?
 3404       IF(IADM(5,KSYS).EQ.0) GO TO 1112
 3405 C***  IS LONG OR SHORT FWD REF IN USE - ORG.L?
 3406       IF(IADM(7,2).EQ.1) GO TO 1115
 3407 C*::  NOT ORG.L, CHECK SIZE OF FORWARD ADDRESS
 3408       IF(TKNVA2.EQ.0) GO TO 1120
 3409 C***  DON'T GIVE ERROR FOR BCC, IT WILL BE CAUGHT LATER IF VALID ERR.
 3410       IF(IOPC.EQ.13) GO TO 1120
 3411 C***  VALID NEGATIVE #?
 3412       IF(TKNVA2.EQ.-1) GO TO 1120
 3413 C***  DC?
 3414       IF(IOPC.EQ.4)  GO TO 1120
 3415 C***  ERROR - FORWARD REFERENCE IS LONG ABSOLUTE
 3416       CALL ERR(210)
 3417       GO TO 1120
 3418 C***  BAKWARDS REF, CHECK SIZE OF VALUE
 3419 C***  VALID NEG #?
 3420 1112  IF(TKNVA2.EQ.-1) GO TO 1120
 3421 C***  CHECK FOR ADDRESS FF8000-FFFFFF
 3422          I=MPUAND(TKNVAL,Z8000)
 3423          IF(I.EQ.Z8000.AND.TKNVA2.EQ.KCFF) GO TO 1120
 3424       IF(TKNVA2.NE.0) GO TO 1115
 3425 C***  ADDRESS >$7FFF IS LONG
 3426       IF(I.EQ.0) GO TO 1120
 3427 1115  KM=57
 3428       KL=4
 3429 C  *** SAVE ADDRESS MODE AND VALUE
 3430 1120  IADM(1,KSYS)=KM
 3431       IF(INSL.GT.0)  GO TO 1130
 3432 C  *** FIRST FIELD
 3433       INSL=KL + 2
 3434 C+++  16-BIT - TKNVA2 IS ALWAYS ZEROED AT START OF SOURCE LINE
 3435 C              IN CASE CURRENT # IS NOT BIG ENOUGH TOGO THERE
 3436       INS(2)=TKNVA2
 3437 C
 3438       INS(3)=TKNVAL
 3439       KOPN=3
 3440       RETURN
 3441 C
 3442 C
 3443 C  *** SECOND FIELD
 3444 1130  IF(JNSL.GE.0)  GO TO 1190
 3445 C
 3446       INSL=INSL + KL
 3447       IADM(3,2)=KL
 3448       INS(4)=TKNVA2
 3449 C
 3450       INS(5)=TKNVAL
 3451       KOPN=5
 3452       RETURN
 3453 C
 3454 C***  ERROR - INSTRUCTION DOESN'T ALLOW THIS MODE
 3455 1190  CALL ERR(234)
 3456 C
 3457       RETURN
 3458 C
 3459 C
 3460 C
 3461 C***  REGISTER FOR 3(A1) ADDRESSING MODE  ***
 3462 C
 3463  1200 JR=ISYM(JPTR+1)
 3464 C
 3465 C***  IN CASE UJNDEFINEDS ARE PRESENT COUNT MAY BE OFF
 3466       IF(INSL.EQ.10.AND.IADM(7,2).EQ.0) INSL=8
 3467 C***  SWITCH VALUE TO PRINT IF ORG.L IN SOME CASES
 3468       IF(IADM(3,2).EQ.4) IADM(3,2)=2
 3469 C***  HAS LONG FORWARD REF BEEN SET?
 3470       IF(IADM(1,KSYS).EQ.57) INSL=INSL-2
 3471          IF(IADM(1,KSYS).EQ.58)  GO TO 1220
 3472 C***  ABSOLUTE SYMBOL
 3473       IF(TKNVA2.EQ.0) GO TO 1210
 3474 C***  VALID NEG #?
 3475       IF(TKNVA2.EQ.-1) GO TO 1210
 3476 C     *** ERROR - 32 BIT DISPLACEMENT
 3477          CALL ERR(208)
 3478 C***  RESET TO SHORT ADDRESS
 3479          IADM(1,KSYS)=56
 3480          RETURN
 3481 1210  IADM(1,KSYS)=40
 3482       GO TO 910
 3483 C     *** (PC) RELATIVE ADDRESS MODE - USE (PC)+X+D
 3484 1220   IADM(1,KSYS)=59
 3485       GO TO 1410
 3486 C
 3487 C***  .L FOR 3(A1.L) ADDRESSING MODE  ***
 3488 C
 3489  1300 IF(TKNSIZ.NE.1) GO TO 1310
 3490 C***  ALLOW WORD  .W
 3491          IF(ITOKEN(1).EQ.LW)  RETURN
 3492          IF(ITOKEN(1).EQ.LL) GO TO 1310
 3493 C        *** ERROR - SIZE FOR TAG(A1.L) IS NOT L
 3494             CALL ERR(214)
 3495             RETURN
 3496  1310 IF(IADM(1,KSYS).EQ.48) GO TO 1320
 3497       IF(IADM(1,KSYS).EQ.59) GO TO 1320
 3498 C     *** ERROR - ILLEGAL ADDRESS MODE
 3499          CALL ERR(209)
 3500          RETURN
 3501 1320   INS(KOPN)=INS(KOPN) + 2048
 3502       RETURN
 3503 C
 3504 C***  SECOND REGISTER FOR 3(A1,A2) ADDRESSING MODE  ***
 3505 C
 3506  1400 JR=ISYM(JPTR+1)
 3507       IF(IADM(4,KSYS).NE.0)  CALL ERR(231)
 3508       IADM(1,KSYS)=48
 3509 1410  IF(IABS(TKNVAL).GT.128) CALL ERR(208)
 3510       INS(KOPN)=ISHFT(JR,12) + MPUAND(TKNVAL,255)
 3511       RETURN
 3512 C
 3513 C***  SECOND REGISTER OF R1-R2 FOR LDM,STM
 3514 C
 3515  1500 IF(IOPC.EQ.38) GO TO 1510
 3516 C     *** ERROR - NOT LDM,STM
 3517          CALL ERR(227)
 3518          RETURN
 3519  1510 KR=ISYM(JPTR+1)
 3520       IF(JR.GT.KR) GO TO 1530
 3521          DO 1520 J=JR,KR
 3522          JJ=J
 3523  1520       CALL MASK(JJ)
 3524          RETURN
 3525  1530    DO 1540 J=KR,JR
 3526          JJ=J
 3527  1540       CALL MASK(JJ)
 3528          RETURN
 3529 C
 3530 C***  'STRING' OVER 4 BYTES LONG
 3531 C
 3532  1600 INS(3)=TKNSIZ
 3533       RETURN
 3534 C
 3535 C***  CONSTANT OR VARIABLE OPERAND  ***
 3536 C
 3537 1700  CONTINUE
 3538       IADM(4,KSYS)=0
 3539       IF(TKNTYP.EQ.24) GO TO 1710
 3540 C     *** CONSTANT OPERAND
 3541 C
 3542       IF(TKNTYP.NE.42)  GO TO 1730
 3543 C***  ASTERISKS
 3544       TKNVAL=IPC
 3545 C+++  16-BIT - UPPER BYTE.
 3546       TKNVA2=IPC2
 3547       IADM(4,KSYS)=IADM(7,1)
 3548          GO TO 1730
 3549 C  *** DEFINED PREVIOUSLY?
 3550  1710 IF(JSUC.GT.0) GO TO 1720
 3551 C     *** INTERNAL ERROR - MISSING SYMBOL
 3552          CALL ERR(228)
 3553          GO TO 1730
 3554  1720 TKNVAL=ISYM(JPTR+1)
 3555       KK=ISYM(JPTR)
 3556 C+++  16-BIT - GET M.S.B.
 3557       TKNVA2=ISYM(JSUC)
 3558 C
 3559 C***  IS SYMBOL RELOCATABLE?
 3560       IF(MPUAND(KK,7).EQ.1)  IADM(4,KSYS)=1
 3561       KK=MPUAND(KK,192)
 3562 C
 3563 C***  UNDEFINED SYMBOL?
 3564       IF(KK.NE.0) GO TO 1725
 3565       CALL ERR(207)
 3566 C***  FORCE LONG ADDR FOR UNDEF A DISPLACEMENT CALC TO AVOID PHASE PROB
 3567       KK=64
 3568 C***  SET UNDEFINED FLAG
 3569       IADM(5,KSYS)=2
 3570 1725  CONTINUE
 3571 C***  REDEFINED SYMBOL?
 3572       IF(KK.EQ.192)  CALL ERR(206)
 3573 C***  FORWARD REFERENCE?
 3574       IF(KK.EQ.64)  IADM(5,KSYS)=MPUIOR(IADM(5,KSYS),1)
 3575 C***  GIVE OPERAND TO EXP
 3576 1730  CALL EXP(22)
 3577       RETURN
 3578       END
 3579       SUBROUTINE MASK(JR)
 3580 CC    NAM: MASK  VER: 1.0  DAT: 12/08/78  CMP: ALL
 3581 CC
 3582 CC    SYS: MACS
 3583 CC
 3584 CC    ENT: JR - MASK TO BE SHIFTED
 3585 CC
 3586 CC    RTN: JR - N/C
 3587 CC
 3588 CC    FNC: FORMAT REGISTER BIT MASK FOR LDM,STM
 3589 CC
 3590 CC    REV: N/A
 3591 CC
 3592 CCALLS ISHFT-MPUIOR
 3593 CC
 3594 C*
 3595       IMPLICIT INTEGER (A-Z)
 3596       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
 3597      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
 3598      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
 3599       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
 3600       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
 3601       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
 3602       COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
 3603 C
 3604       IB=ISHFT(1,JR)
 3605       IADM(6,1)=MPUIOR(IADM(6,1),IB)
 3606 C
 3607       KR=15 -JR
 3608       IB=ISHFT(1,KR)
 3609       IADM(6,2)=MPUIOR(IADM(6,2),IB)
 3610       RETURN
 3611       END
 3612       SUBROUTINE MOD2
 3613 CC    NAM: MOD2  VER: 1.0  DAT: 12/08/78  CMP: PDP-11
 3614 CC
 3615 CC    SYS: MACS
 3616 CC
 3617 CC    ENT: N/A
 3618 CC
 3619 CC    RTN: N/A
 3620 CC
 3621 CC    FNC: FORCE TO AN EVEN WORD BOUNDARY
 3622 CC
 3623 CC    REV: N/A
 3624 CC
 3625 CCALLS MPUAND-ADD
 3626 CC
 3627 C*
 3628       IMPLICIT INTEGER (A-Z)
 3629       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
 3630      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
 3631      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
 3632 C
 3633       IF(MPUAND(IPC,1).EQ.0) RETURN
 3634 C***  IPC=IPC+1 - ADD ALL 24 BITS
 3635       CALL ADD(IPC2,IPC,0,1)
 3636       IF(LPTR.EQ.0) RETURN
 3637       ISYM(LPTR+1)=IPC
 3638       I=ITOKEN(69)
 3639       ISYM(I)=IPC2
 3640 C***  FORWARD REF IS ON ODD BYTE
 3641          CALL ERR(230)
 3642       RETURN
 3643       END
 3644       SUBROUTINE OUTPUT
 3645 CC    NAM: OUTPUT  VER: 1.0  DAT: 12/08/78  CMP: PDP-11
 3646 CC
 3647 CC    SYS: MACS
 3648 CC
 3649 CC    ENT: N/A
 3650 CC
 3651 CC    RTN: N/C
 3652 CC
 3653 CC    FNC: OUTPUT THE CURRENT INSTRUCTION.
 3654 CC
 3655 CC    REV: N/A
 3656 CC
 3657 CCALLS BUILD1-BUILD2-PAGE-PCOUNT-OBJ-MPUCA1-MPUAND-ERR-MOD2
 3658 CC   HEXASC
 3659 CC
 3660 CC    ERROR NUMBERS CALLED:  230
 3661 CC
 3662 C*
 3663       IMPLICIT INTEGER (A-Z)
 3664       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
 3665      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
 3666      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
 3667       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
 3668       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
 3669       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
 3670       COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
 3671       COMMON /A/ LIST,ICOL,NEST,LUCI,LULT,MFLD(11,3),IOBJ,LLENSW
 3672       EQUIVALENCE(INS(1),INS1)
 3673       DIMENSION KRDOUT(95)
 3674       DIMENSION INS1A(4),INS2(4),INS3(4),INS4(4),INS5(4),IPC22(2),
 3675      &  IPC1(4)
 3676       DATA LSPHEX/'  '   /
 3677 C***  PUT OUT INSTRUCTION OR SPECIAL PRINT.
 3678 C***  REGULAR INSTRUCTION
 3679 1     CONTINUE
 3680 C
 3681 C***  ARE WE IN A MACRO DEFINITION?
 3682       IF(ICOL.EQ. -1)  INSL=0
 3683 C...  *** FINISH BUILDING THE INSTRUCTION.
 3684       IF(IPASS.GE.0) GO TO 3
 3685 C***  ARE WE IN IFXX?
 3686       IF(ICOL.LT.0)  GO TO 17
 3687          CALL BUILD1
 3688 17    CONTINUE
 3689 C
 3690 C*** DEBUG
 3691 C
 3692       I=2
 3693       CALL DEBUG(I)
 3694       IF(I.EQ.1)  GO TO 5
 3695 C***  END DEBUG
 3696 18       IF(JERR.GT.0) GO TO 5
 3697          GO TO 900
 3698 3     CONTINUE
 3699 C***  ARE WE IN IFXX?
 3700       IF(ICOL.LT.0)  GO TO 5
 3701       CALL BUILD2
 3702       CALL OBJ
 3703 5     II=1
 3704 C***  HAS THE LINE ALREADY BEEN PRINTED?
 3705       IF(KARD1(1).EQ.0)  GO TO 1000
 3706       KD1BCT=LLEN-25
 3707 C***  NOLIST ON?
 3708 6     IF(LIST.EQ.0)  GO TO 500
 3709 C***  SKIP ADJUSTMENT IF REMARK
 3710       IF(KARD1(1).EQ.42)  GO TO 8000
 3711 C***  SHOULD OUTPUT BE PRETTILY ADJUSTED??
 3712       IF(LLENSW.EQ.0)  GO TO 8000
 3713 C***  ADJUST OUTPUT TO SPECIFIC COLUMNS
 3714 C***  IS THERE A LABEL?
 3715       DO 7000 I=1,KD1BCT
 3716 7000  KRDOUT(I)=LSP
 3717       I=1
 3718       IPOS=1
 3719       IF(KARD1(1).EQ.LSP)  GO TO 7050
 3720       DO 7010 I=1,31
 3721       KRDOUT(I)=KARD1(I)
 3722       IPOS=I+1
 3723       IF(KARD1(I).EQ.LSP)  GO TO 7050
 3724 7010  CONTINUE
 3725 C***  IF HERE 31ST CHAR NOT BLANK
 3726       KRDOUT(32)=LSP
 3727 C***  FIND END OF LABEL
 3728       J=I
 3729       DO 7020 I=J,KD1BCT
 3730       IF(KARD1(I).EQ.LSP)  GO TO 7050
 3731 7020  CONTINUE
 3732       GO TO 8100
 3733 7050  CONTINUE
 3734 C***  FIND MNEMONIC
 3735       J=I+1
 3736       DO 7100 I=J,KD1BCT
 3737       IF(KARD1(I).NE.LSP)  GO TO 7150
 3738 7100  CONTINUE
 3739       GO TO 8100
 3740 C***  MNEMONIC
 3741 7150  CONTINUE
 3742       IF(IPOS.LT.10)  IPOS=10
 3743       DO 7200 K=IPOS,KD1BCT
 3744       KRDOUT(K)=KARD1(I)
 3745       IF(KARD1(I).EQ.LSP)  GO TO 7250
 3746       I=I+1
 3747 7200  CONTINUE
 3748       GO TO 8100
 3749 7250  CONTINUE
 3750       IPOS=K+1
 3751 C***  OPCODE
 3752 C***  REMOVE ANY EXCESS BLANKS BETWEEN MNEMONIC & OPERAND.
 3753       DO 7260 K=I,KD1BCT
 3754       IF(KARD1(K).NE.LSP)  GO TO 7280
 3755 7260  CONTINUE
 3756       GO TO 8100
 3757 7280  I=K
 3758       J=0
 3759       IF(IPOS.LT.18)  IPOS=18
 3760       DO 7300 K=IPOS,KD1BCT
 3761       IF(KARD1(I).EQ.IEOT)  GO TO 8100
 3762 C***  CHECK FOR '  '
 3763       IF(KARD1(I).EQ.39)  J=J+1
 3764 C***  IS IT 1ST '?
 3765       IF(MOD(J,2).NE.0)  GO TO 7290
 3766       IF(KARD1(I).EQ.LSP)  GO TO 7350
 3767 7290  KRDOUT(K)=KARD1(I)
 3768       I=I+1
 3769 7300  CONTINUE
 3770       GO TO 8100
 3771 7350  CONTINUE
 3772 C***  REMARKS
 3773 C***  REMOVE ANY EXCESS BLANKS BETWEEN OPERAND AND REMARKS.
 3774       DO 7360 J=I,KD1BCT
 3775       IF(KARD1(J).NE.LSP)  GO TO 7380
 3776 7360  CONTINUE
 3777       GO TO 8100
 3778 7380  CONTINUE
 3779       I=J
 3780       IF(J.LT.40)  J=40
 3781       IF(K.GT.40)  J=K+1
 3782       DO 7400 K=J,KD1BCT
 3783       IF(KARD1(I).EQ.IEOT)  GO TO 8100
 3784       KRDOUT(K)=KARD1(I)
 3785       I=I+1
 3786 7400  CONTINUE
 3787        GO TO 8100
 3788 8000  DO 8 J=1,KD1BCT
 3789 8     KRDOUT(J)=KARD1(J)
 3790 8100  CONTINUE
 3791 C      WRITE(LUOT,9999) INSL,(INS(I),I=1,5)
 3792 9999  FORMAT(' OUTPUT-INSL,INS=',I3,5O8)
 3793       CALL HEXASC(INS(1),INS1A,4,1)
 3794       CALL HEXASC(INS(2),INS2,4,1)
 3795       CALL HEXASC(INS(3),INS3,4,1)
 3796       CALL HEXASC(INS(4),INS4,4,1)
 3797       CALL HEXASC(INS(5),INS5,4,1)
 3798       CALL HEXASC(IPC2,IPC22,2,1)
 3799       CALL HEXASC(IPC,IPC1,4,1)
 3800       IF(INSL.EQ.0) GO TO 10
 3801       IF(INSL.LT.0) GO TO 20
 3802 C***  20 = SPC
 3803       IF(INSL.EQ.20)  GO TO 950
 3804       GO TO(100,200,200,400,400,600,600,880,80),INSL
 3805 C***  5 WORD INSTRUCTION
 3806       WRITE(LUOT,999) KD1LNO,IPC22,IPC1,INS1A,INS2,INS3,INS4,INS5
 3807      & ,    (KRDOUT(J),J=1,KD1BCT)
 3808       GO TO 690
 3809 C***  FOUR WORD INSTRUCTION
 3810 880   IF(IADM(3,2).EQ.2)  GO TO 770
 3811 C...  *** LONG INTEGER IN INS(5)
 3812       WRITE(LUOT,2999) KD1LNO,IPC22,IPC1,INS1A,INS3,INS4,INS5,
 3813      &     (KRDOUT(J),J=1,KD1BCT)
 3814       GO TO 690
 3815 C..  *** SHORT INTEGER IN INS(5)
 3816 770   WRITE(LUOT,1999) KD1LNO,IPC22,IPC1,INS1A,INS2,INS3,INS5,
 3817      &                (KRDOUT(J),J=1,KD1BCT)
 3818       GO TO 690
 3819 C***  THREE WORD INSTRUCTION
 3820 600   IF(IADM(3,2).EQ.0)  GO TO 660
 3821 C...  *** SHORT INTEGER IN INS(5)
 3822       WRITE(LUOT,1998) KD1LNO,IPC22,IPC1,INS1A,INS3,INS5,
 3823      &     (KRDOUT(J),J=1,KD1BCT)
 3824       GO TO 700
 3825 C...  *** NO INTEGER IN INS(5) - INS(3) ONLY
 3826 660   WRITE(LUOT,998) KD1LNO,IPC22,IPC1,INS1A,INS2,INS3,
 3827      &                (KRDOUT(J),J=1,KD1BCT)
 3828       GO TO 700
 3829 C
 3830 500   CONTINUE
 3831       IF(INSL.EQ.0)  GO TO 800
 3832       IF(INSL.LT.0)  GO TO 540
 3833 C***  CHECK FOR SPC
 3834          IF(INSL.EQ.20) GO TO 980
 3835       GO TO (800,700,700,700,700,700,700,700,78),INSL
 3836       GO TO 700
 3837 540   IF(INSL.NE.-1)  GO TO 35
 3838       GO TO 800
 3839 C***  TWO WORD INSTRUCTION
 3840 400   WRITE(LUOT,997) KD1LNO,IPC22,IPC1,INS1A,INS3,
 3841      & (KRDOUT(J),J=1,KD1BCT)
 3842       GO TO 700
 3843 C***  ONE WORD INSTRUCTION
 3844 200   WRITE(LUOT,996) KD1LNO,IPC22,IPC1,INS1A,(KRDOUT(J),J=1,KD1BCT)
 3845       GO TO 700
 3846 C***  ONE BYTE VALUE
 3847   100 WRITE(LUOT,995) KD1LNO,IPC22,IPC1,INS3(3),INS3(4),
 3848      & (KRDOUT(J),J=1,KD1BCT)
 3849       GO TO 800
 3850 80    CONTINUE
 3851 C***  CONVERT VALUE TO ASCII
 3852       CALL HEXASC(ITOKEN(1),INS2,2,1)
 3853       WRITE(LUOT,995) KD1LNO,IPC22,IPC1,INS2(1),INS2(2),
 3854      &  (KRDOUT(J),J=1,KD1BCT)
 3855       CALL PAGE(1)
 3856 78    INSL=1
 3857       IF(INS1.EQ.1) GO TO 75
 3858       DO 70 J=2,INS1
 3859       CALL PCOUNT
 3860       IF(LIST.EQ.0)  GO TO 70
 3861 C***  IS OPTION G- OR G?
 3862       IF(LUDI.EQ.0)  GO TO 70
 3863 C***  CONVERT HEX TO ASCII
 3864       CALL HEXASC(IPC,IPC1,4,1)
 3865       CALL HEXASC(IPC2,IPC22,2,1)
 3866       CALL HEXASC(ITOKEN(J),KRDOUT,2,1)
 3867       WRITE(LUOT,991) IPC22,IPC1,KRDOUT(1),KRDOUT(2)
 3868       CALL PAGE(1)
 3869 70    CONTINUE
 3870 75    CALL PCOUNT
 3871 C***  DON'T 0 MOD 2 IF DC.B
 3872       LPTR=0
 3873       IF(ISIZ.EQ.0) GO TO 72
 3874       I=2
 3875       IF(ISIZ.EQ.128) I=4
 3876 C***  IF NOT 0 MOD 2 FOR .W OR 0 MOD 4 FOR .L PUT OUT FIILER OF 0
 3877       IF(INS1.LT.5) INS1=INS1+4
 3878       J=MOD(INS1,I)
 3879       IF(J.EQ.0) GO TO 72
 3880       I=I-J
 3881       DO 71 J=1,I
 3882       CALL PNCH(4,0)
 3883       IF(LIST.EQ.0) GO TO 71
 3884 C***  IS OPTION G- OR G?
 3885       IF(LUDI.EQ.0) GO TO 71
 3886 C***  'LPTR' MUST = 0
 3887       CALL HEXASC(IPC,IPC1,4,1)
 3888       CALL HEXASC(IPC2,IPC22,2,1)
 3889       CALL HEXASC(LPTR,KRDOUT,2,1)
 3890       WRITE(LUOT,991) IPC22,IPC1,KRDOUT(1),KRDOUT(2)
 3891       CALL PAGE(1)
 3892 71    CALL PCOUNT
 3893 72     KARD1(1)=0
 3894       INSL=0
 3895       GO TO 800
 3896 C***  PSUEDO OP
 3897    10 WRITE(LUOT,994) KD1LNO,(KRDOUT(J),J=1,KD1BCT)
 3898       GO TO 800
 3899 C***  PSEUDO OP WITH A VALUE
 3900    20 IF(INSL.NE.-1) GO TO 30
 3901 C...     *** PRINT W/O PC
 3902          WRITE(LUOT,993) KD1LNO,INS2,INS3,(KRDOUT(J),J=1,KD1BCT)
 3903       GO TO 800
 3904 C...  *** DS - PRINT WITH PC
 3905    30 WRITE(LUOT,997) KD1LNO,IPC22,IPC1,INS2,INS3,(KRDOUT(J),J=1,KD1BCT)
 3906 35       CALL ADD(IPC2,IPC,INS(2),INS(3))
 3907          INSL=0
 3908       GO TO 800
 3909 999   FORMAT(I5,1X,2A1,4A1,1X,12A1/16X,8A1,1X,100A1)
 3910 1999  FORMAT(I5,1X,6A1,1X,12A1/16X,4A1,5X,100A1)
 3911 2999  FORMAT(I5,1X,6A1,1X,8A1/16X,8A1,1X,100A1)
 3912 1998  FORMAT(I5,1X,6A1,1X,12A1,1X,100A1)
 3913 998   FORMAT(I5,1X,6A1,1X,12A1,1X,100A1)
 3914 997   FORMAT(I5,1X,6A1,1X,8A1,5X,100A1)
 3915 996   FORMAT(I5,1X,6A1,1X,4A1,9X,100A1)
 3916 995   FORMAT(I5,1X,6A1,1X,2A1,11X,100A1)
 3917   994 FORMAT(I5,21X,100A1)
 3918   993 FORMAT(I5,8X,8A1,5X,100A1)
 3919 991   FORMAT(6X,6A1,1X,2A1)
 3920 9920  FORMAT(A1)
 3921 C***  INCREMENT LINE COUNT BY 2
 3922 690   II=2
 3923 C***  ASSURE EVEN BOUNDARY
 3924   700 IF(MPUAND(IPC,1).EQ.0) GO TO 800
 3925       CALL ERR(230)
 3926       CALL PNCH(4,0)
 3927       CALL MOD2
 3928 C***  PRINT THE ERRORS IF ANY
 3929   800 CALL ERR(0)
 3930       IF(KARD1(1).NE.0)  CALL PAGE(II)
 3931 C***  COMPUTE NEW PC ADDRESS
 3932 C
 3933 900   KARD1(1)=0
 3934       IF(INSL.LE.0)  RETURN
 3935 C***  INCREMENT THE P-COUNTER.
 3936       CALL PCOUNT
 3937       RETURN
 3938 C***  SPC  ***
 3939 950   CONTINUE
 3940       I=INS(3)
 3941 C
 3942       DO 960 J=1,I
 3943       CALL PAGE(1)
 3944 960   WRITE(LUOT,9920) LSPHEX
 3945 C
 3946 980   KARD1(1)=0
 3947       INSL=0
 3948       GO TO 800
 3949 1000  CONTINUE
 3950 C***  IF DC FINISH OUTPUT IF REQUIRED & INCREMENT THE PCOUNT
 3951       IF(IOPC.NE.4) GO TO 800
 3952          IF(INSL.EQ.9.AND.LUDI.EQ.0) GO TO 78
 3953          IF(LUDI.EQ.0) GO TO 800
 3954       KARD1(1)=LSP
 3955       KD1BCT=1
 3956       GO TO 6
 3957       END
 3958       SUBROUTINE BUILD2
 3959 CC    NAM: BUILD2  VER: 1.0  DAT: 12/08/78  CMP: 16-BIT
 3960 CC
 3961 CC    SYS: MACS
 3962 CC
 3963 CC    ENT: N/A
 3964 CC
 3965 CC    RTN: N/A
 3966 CC
 3967 CC    FNC: BUILD THE INSTRUCTION FOR PASS TWO
 3968 CC
 3969 CC    THIS ROUTINE IS 16-BIT DEPENDENT DUE TO THE
 3970 CC         24-BIT ADDRESS WHICH MUST BE MANIPULATED.
 3971 CC
 3972 CC    REV: N/A
 3973 CC
 3974 CCALLS ERR-MOD2-ISHFT-MPUAND-MPUIOR-PAGE
 3975 CC
 3976 CC    ERROR NUMBERS CALLED:  205,208,209,210,212,213,215,216,217,218
 3977 CC                           220,223,229,232,233,234,236,238
 3978 C*
 3979       IMPLICIT INTEGER (A-Z)
 3980       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
 3981      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
 3982      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
 3983       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
 3984       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
 3985       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
 3986       COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
 3987       COMMON /A/ LIST,ICOL,NEST,LUCI,LULT,MFLD(11,3),IOBJ,LLENSW,NOP
 3988       COMMON /A/ NXSYM1,LIST1,MASK2
 3989       DIMENSION IMCD(6),NIMM(40)
 3990       EQUIVALENCE(IADM(4,1),SYMTYP),(IADM(5,1),LFRF)
 3991       EQUIVALENCE (INS(1),INS1)
 3992 C                ORI   SUBI  EORI  CMPI  ANDI  ADDI
 3993       DATA IMCD/ 0000, 1024, 2560, 3072,  512, 1536/
 3994 C
 3995 C***  THE FOLLOWING DATA STATEMENTS DEFINE HEX CONSTANTS
 3996 C***  LOCAL TO THIS ROUTINE.
 3997 C
 3998       DATA IH4E60/O47140/,IH40C0/O40300/
 3999       DATA IH44C0/O42300/,IH46C0/O43300/
 4000       DATA IH48C0/O44300/
 4001 C
 4002 C***  END HEX DATA CONSTANTS.
 4003 C
 4004 C***                 01-20 NO IMM - 2ND ROW IS 21 04
 4005       DATA NIMM/
 4006      &  0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,1,
 4007      &  1,1,1,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,0/
 4008 C
 4009 C***  HEX 7000
 4010       DATA I7KH/O70000/
 4011       DATA IHA0C0/O120300/
 4012       DATA IH5K/O50000/,IH5100/O50400/
 4013       DATA IH4100/O40400/
 4014       DATA ZB001/O130001/,ZD001/O150001/,ZD002/O150002/,Z9001/O110001/
 4015       DATA Z9002/O110002/,ZF000/O170000/,Z8000/O100000/
 4016       DATA ZB140/O130500/
 4017       DATA CMP/0/,MASK2/0/
 4018 C***  ERROR 220 ???
 4019 C***
 4020       IF(IOPC.EQ.0) GO TO 45
 4021 C***  CHECK FOR DC WITH A LABEL, IS SO SKIP ERR 220 CHECK
 4022       IF(IOPC.EQ.4)  GO TO 50
 4023       IF(IOPC.EQ.5) GO TO 50
 4024 C...     *** NOT SET,EQU ASSURE NO PHASE ERROR
 4025          IF(LPTR.EQ.0) GO TO 40
 4026          IF(ISYM(LPTR+1).NE.IPC) CALL ERR(220)
 4027 C***  PERFORM ACTIONS FOR THE OPCODE CLASS
 4028    40 IF(IOPC.GT.0) GO TO 50
 4029 45       INSL=0
 4030          RETURN
 4031    50 IF(INSL.LT.0) INSL=2
 4032       GO TO(100, 200,9223,400,500, 600, 700, 800, 900,  950,
 4033      &     1100,1100,1300,1400,1500, 950, 950,1800,1900),IOPC
 4034       J=IOPC-19
 4035       GO TO(2000,2100,2200,2300,2400,2500,2600,2700,2800,2900,3000,
 4036      &      9223,3200,9223,3400,3500,3600,3700,3800),J
 4037       J=J-19
 4038       GO TO(3900),J
 4039       GO TO 9223
 4040 C
 4041 C***  PSEUDO OPS WITHOUT OPERANDS
 4042 100   CONTINUE
 4043       GO TO(110,120,130,140,150,160,170,180,190,195,196,197),INS1
 4044 C...  *** END
 4045   110 IPASS=1
 4046   120 RETURN
 4047 C***  PAGE
 4048 130   CONTINUE
 4049       CALL PAGE(84)
 4050       RETURN
 4051 C
 4052 C***  LIST
 4053 140   LIST=1
 4054 145   KARD1(1)=0
 4055       RETURN
 4056 C
 4057 C***  NOLIST  ***
 4058 150   LIST=0
 4059       RETURN
 4060 C***  TTL
 4061 160   CALL PAGE(80)
 4062       GO TO 145
 4063 C***  NO PAGE(NOP)
 4064 170   CONTINUE
 4065       NOP=0
 4066       RETURN
 4067 C
 4068 C***  NOOBJ -NO OBJECT OUTPUT, SET IN PASS 1
 4069 C
 4070 180   RETURN
 4071 C
 4072 C***  CMPL - CMP DESTINATION,SOURCE
 4073 C
 4074 190   CMP=1
 4075       RETURN
 4076 C
 4077 C***  CMPR - CMP S,D
 4078 C
 4079 195   CMP=0
 4080       RETURN
 4081 C
 4082 C***  'G' DIRECTIVE
 4083 C
 4084 196   LUDI=1
 4085       RETURN
 4086 C
 4087 C***  'MASK2' DIRECTIVE
 4088 C
 4089 197   MASK2=1
 4090       RETURN
 4091 C
 4092 C***  OP CODES WITHOUT OPERANDS
 4093   200 RETURN
 4094 C
 4095 C***  DC
 4096 400   GO TO 540
 4097 C
 4098 C***  PSEUDO OPS WITH OPERANDS
 4099 500   IF(IADM(1,1).EQ.56)  GO TO 505
 4100       IF(IADM(1,1).NE.57)  CALL ERR(234)
 4101   505 INSL=-1
 4102       GO TO(510,520,520,540,508,560,570),INS1
 4103       GO TO 9223
 4104 C***  RORG
 4105 508   IADM(7,1)=1
 4106       GO TO 512
 4107 C...  *** ORG AND RORG
 4108 510   IADM(7,1)=0
 4109   512 IPC=INS(3)
 4110 C+++  16-BIT - GET MOST SIGNIFICANT BYTE
 4111       IPC2=INS(2)
 4112       IADM(7,2)=0
 4113       IF(ISIZ.EQ.128)  IADM(7,2)=1
 4114       CALL PNCH(3,IPC)
 4115       RETURN
 4116 C...  *** EQU
 4117   520 IF(LPTR.GT.0) GO TO 522
 4118 C...     *** ERROR - NO LABEL ON STATEMENT
 4119          CALL ERR(229)
 4120          RETURN
 4121 522   ISYM(LPTR)=MPUAND(ISYM(LPTR),192)  + SYMTYP
 4122       ISYM(LPTR+1)=INS(3)
 4123 C
 4124 C***  IS THIS "SET"?
 4125       IF(INS(1).NE.2)
 4126      & ISYM(LPTR)=128
 4127 C***  SAVED IN 'ACT2'
 4128       KK=ITOKEN(69)
 4129       IF(KK.EQ.0) RETURN
 4130       ISYM(KK)=INS(2)
 4131       RETURN
 4132 C...  *** DC AND DS
 4133   540 INSL=1
 4134       IF(ISIZ.EQ.0) GO TO 545
 4135 C***  IF PCOUNT ODD, PUT OUT FILL BYTE(A ZERO) IN 'S' RECORD
 4136       IF(MPUAND(IPC,1).NE.0)  CALL PNCH(4,0)
 4137       CALL MOD2
 4138       INSL=2
 4139       IF(ISIZ.EQ.128) INSL=4
 4140 545   IF(IOPC.NE.4)  GO TO 550
 4141 C...     *** DC
 4142 C
 4143          INS1=INS(3)
 4144          IF(IADM(1,1).GE.0) GO TO 547
 4145 C***  INSL=9 TELLS OUTPUT TO PRINT STRING BYTE AT A TIME
 4146          INSL=9
 4147 C...        *** 'STRING' OVER 4 BYTES
 4148 C
 4149          DO 546 J=1,INS1
 4150          CALL PNCH(4,ITOKEN(J))
 4151 546   CONTINUE
 4152       RETURN
 4153 C***  NUMERIC TYTE,WORD, OR LONG DC CONSTANT
 4154   547    IF(INSL.EQ.4) GO TO 548
 4155 C...        *** BYTE OR WORD - ASSURE NOT TOO BIG
 4156 C
 4157       CALL RANGE(INS(3))
 4158             RETURN
 4159 C
 4160 C+++ 16-BIT - GET 1ST 2 BYTES
 4161 548   INS(1)=TKNVA2
 4162       RETURN
 4163 C...  *** DS
 4164 C***  INS(3)=INS(3)*INSL
 4165 550       CONTINUE
 4166          CALL MUL(INS(2),INS(3),0,INSL)
 4167   555 INSL=-2
 4168 C***  IPC=IPC+INS(3)
 4169       CALL PNCH(5,INS(3))
 4170       RETURN
 4171 C
 4172 C***  FAIL
 4173 560   CALL ERR(INS(3))
 4174       RETURN
 4175 C***  SPC  ***
 4176 570   CONTINUE
 4177       INSL=20
 4178       RETURN
 4179 C
 4180 C***  LINK/UNLK - ADDRESS REGISTER TO BITS 2-0
 4181   600 IF(IADM(1,1).NE.8) GO TO 9213
 4182 C*** 2 BYTE LINK INSTRUCTION ILLEGAL
 4183       IF(INSL.EQ.2.AND.INS(1).EQ.20048)  GO TO 12340
 4184 C***  CHECK FOR UNLK - 20056 = $4E58
 4185       IF(INS(1).EQ.20056)  INSL=2
 4186       INS(1)=INS(1)+IADM(2,1)-8
 4187       RETURN
 4188 C
 4189 C***  SWAP - DATA REGISTER TO BITS 2-0
 4190   700 IF(IADM(1,1).NE.0) GO TO 9215
 4191       INS(1)=INS(1)+IADM(2,1)
 4192       RETURN
 4193 C
 4194 C***  TRAP - ESTABLISH DISPLACEMENT IN BITS 3-0
 4195 800   INSL=2
 4196          IF(IADM(1,1).EQ.60) IADM(1,1)=56
 4197       IF(IADM(1,1).NE.56) GO TO 9209
 4198       IF(INS(3).GT.15) GO TO 9210
 4199       IF(INS(3).LT.0) GO TO 9216
 4200       INS(1)=INS(1)+INS(3)
 4201       RETURN
 4202 C
 4203 C***  ABS/CLR/NEG/NOT/TST - BUILD EA
 4204 C
 4205   900 INS(1)=INS(1)+ISIZ
 4206 C***  CHECK FOR ADDRESS REG
 4207 950   IF(IADM(1,1).EQ.8) GO TO 9215
 4208 C*** *** ERROR IF IMMEDIATE MODE
 4209       IF(IADM(1,1).GT.57.AND.IADM(1,1).LT.61) GO TO 9209
 4210       GO TO 8300
 4211 C
 4212 C***  PEA-JSR-JMP
 4213 C
 4214 1100  CONTINUE
 4215 C***  PEA (AN)+ AND PEA -(AN) ILLEGAL, CHECK FOR THEM
 4216          IF(IADM(1,1).EQ.16) GO TO 8300
 4217          IF(IADM(1,1).LT.40) GO TO 9209
 4218          IF(IADM(1,1).EQ.60) GO TO 9209
 4219       GO TO 8300
 4220 C
 4221 C***  BCC
 4222 C
 4223 1300  IOFS=INS(3) - IPC - 2
 4224 C
 4225       MAG=IABS(IOFS)
 4226 C***  ALLOW ABSOLUTE ADDRESS ONLY
 4227       IF(IADM(1,1).LT.56) CALL ERR(234)
 4228 C***  IN CASE BIT 16 SET INSTRUCTION TO LONG, RESET
 4229       IF(INSL.EQ.6) INSL=4
 4230 C
 4231       IF(ISIZ.NE.0)  GO TO 1310
 4232 C***  FORCE SHORT FORM
 4233       IF(MAG.GT.127)  CALL ERR(208)
 4234       GO TO 1320
 4235 1310  IF(LFRF.NE.0) GO TO 1330
 4236 C...   *** BACKWARD REFERENCE
 4237       IF(MAG.GT.127) GO TO 1330
 4238 C...   *** USE SHORT FORM
 4239 1320  INS(1)=INS(1) + MPUAND(IOFS,255)
 4240       INSL=2
 4241 C***  IF OFFSET IS ZERO IT WILL CAUSE HARDWARE TO EXPECT LONG BRANCH AND
 4242 C***  USE NEXT 2 BYTES FOR OFFSET SO FLAG AS ERROR.  THIS IS CAUSED BY
 4243 C***  A BRA TO NEXT INSTRUCTION.
 4244       IF(IOFS.EQ.0) GO TO 9208
 4245       RETURN
 4246 C...   *** USE LONG FORMAT
 4247 1330  IF(MAG.GT.32767) CALL ERR(208)
 4248       INS(3)=IOFS
 4249       RETURN
 4250 C
 4251 C***  NEGX
 4252  1400 GO TO 900
 4253 C
 4254 C***  EXT
 4255  1500 IF(ISIZ.EQ.0) GO TO 9217
 4256 C
 4257       IF(ISIZ.EQ.128)  INS(1)=IH48C0
 4258       INS(1)=MPUIOR(INS(1),IADM(2,1))
 4259       IF(IADM(1,1).EQ.8)  CALL ERR(215)
 4260       RETURN
 4261 C
 4262 C***  CONDITIONAL ASSEMBLY
 4263  1800 INSL=0
 4264       INS1=INS(1)
 4265       GO TO(1810,1820),INS1
 4266 C...  *** EQ
 4267  1810 IF(INS(3).NE.0) GO TO 1890
 4268          IF(INS(2).NE.0) GO TO 1890
 4269          RETURN
 4270 C...  *** NE
 4271  1820 IF(INS(3).EQ.0.AND.INS(2).EQ.0) GO TO 1890
 4272          RETURN
 4273 C...  *** SKIP TO ENDC
 4274  1890 ICOL=-2
 4275       RETURN
 4276 C
 4277 C***  PAGE LENGTH(PLEN) - LINE LENGTH(LLEN)
 4278 C
 4279 1900  CONTINUE
 4280 C***  IS IT PLEN?
 4281       IF(INS1.EQ.2)  GO TO 1980
 4282 C***  CHECK FOR NEW MASK SET - STOP
 4283       IF(INS1.EQ.1) GO TO 1910
 4284       INSL=4
 4285       IF(IADM(1,1).NE.60) CALL ERR(232)
 4286       RETURN
 4287 1910  CONTINUE
 4288 C***  LLEN
 4289       LLENSW=1
 4290       LLEN=INS(3)
 4291       IF(LLEN.GT.120)  LLEN=120
 4292       IF(LLEN.LT.26)  LLEN=26
 4293       INSL=0
 4294       RETURN
 4295 C***  PLEN
 4296 1980  IPLEN=INS(3)
 4297       RETURN
 4298 C***  MULTIPLY,DIVIDE
 4299  2000 ISIZ=0
 4300       GO TO 8110
 4301 C
 4302 C***  ADD/SUB PROCESSING
 4303 C
 4304 C...  *** TEST FOR IMMEDIATE SOURCE
 4305 2100  CONTINUE
 4306 C***  BYTE ADD ON AN ILLEGAL
 4307       IF(IADM(1,2).EQ.8.AND.ISIZ.EQ.0) GO TO 9217
 4308 C***  ADD.B AN,DN ILLEGAL
 4309       IF(IADM(1,1).EQ.8.AND.ISIZ.EQ.0) GO TO 9217
 4310 C***  DESINATION PC REL & PC REL + INDEX ILLEGAL
 4311       IF(IADM(1,2).GT.57.AND.IADM(1,2).LT.61) CALL ERR(231)
 4312 C***  CHECK FOR ADDI/SUBI - IF SO SKIP QUICK
 4313       IF(INS(1).EQ.ZD001.OR.INS(1).EQ.Z9001) GO TO 6980
 4314 C***  IF ADDQ/SUBQ FORCE IT
 4315       IF(INS(1).EQ.IH5K.OR.INS(1).EQ.IH5100) GO TO 2108
 4316 C***  ADDA/SUBA?
 4317       IF(INS(1).EQ.ZD002.OR.INS(1).EQ.Z9002) GO TO 2125
 4318       IF(IADM(1,1).NE.60) GO TO 2120
 4319 C...     *** POSSIBLE QUICK MODE?
 4320          IF(INS(3).LE.0) GO TO 2110
 4321          IF(INS(3).GT.8) GO TO 2110
 4322 C***  CHECK FORWARD REF CANNOT BE 'Q'
 4323       IF(LFRF.GT.0.AND.IADM(5,2).GT.0) GO TO 2110
 4324       IF(LFRF.GT.0.AND.IADM(1,2).LT.56) GO TO 2110
 4325 C...        *** QUICK MODE
 4326 2105        INSL=INSL - 2
 4327             IF(ISIZ.EQ.128)  INSL=INSL - 2
 4328             IF(INS(3).GT.8) GO TO 9210
 4329             KK=IH5K
 4330 C***  IH5100=$5100
 4331             IF(INS(1).EQ.IHEX9K.OR.INS(1).EQ.IH5100) KK=IH5100
 4332 C
 4333             INS(1)=ISHFT(INS(3),9) + ISIZ
 4334             INS(1)=MPUIOR(INS(1),KK)
 4335             IADM(3,2)=0
 4336             INS(3)=INS(5)
 4337 C***  INCASE LONG WORD
 4338             INS(2)=INS(4)
 4339             GO TO 8600
 4340 C***  ADDQ/SUBQ MUST BE IMM
 4341 2108  IF(IADM(1,1).NE.60) CALL ERR(234)
 4342       GO TO 2105
 4343 C...     *** USE IMMEDIATE OP-CODE?
 4344  2110    IF(IADM(1,2).NE.8) GO TO 7000
 4345 C...  *** CREATE MODE FIELD
 4346  2120 IF(IADM(1,2).EQ.0) GO TO 8110
 4347       IF(IADM(1,2).NE.8)  GO TO 2130
 4348 C...     *** SINK IS A REGISTER - ASSURE NOT BYTE
 4349          IF(ISIZ.EQ.0) GO TO 9217
 4350 2125     ISIZ=ISIZ*2
 4351 C***  DN AS DEST INVALID
 4352          IF(IADM(1,2).EQ.0) GO TO 9213
 4353 C***  ADDA/SUBA INST.
 4354       INS(1)=MPUAND(INS(1),ZF000)
 4355 C***
 4356          INS(1)=INS(1) + MPUIOR(ISIZ,192)
 4357          GO TO 8210
 4358 C...  *** SINK TO MEMORY - ASSURE SOURCE IS D REGISTER
 4359  2130 ISIZ=ISIZ+256
 4360       GO TO 8400
 4361 C
 4362 C***  AND,OR
 4363 C
 4364 C
 4365 2200  IF(IADM(1,1).EQ.8) GO TO 9215
 4366       IF(IADM(1,1).NE.0)  GO TO 2310
 4367 C***  POSSIBLE D->EA
 4368       IF(IADM(1,2).EQ.0)  GO TO 8100
 4369       IF(IADM(1,2).EQ.8)  GO TO 9215
 4370       ISIZ=MPUIOR(ISIZ,256)
 4371       GO TO 8400
 4372 C
 4373 C***  EOR
 4374 C***  8192 = $2000
 4375 2300  IF(IADM(1,1).NE.60)  GO TO 8400
 4376 C***  IMMEDIATE MODE
 4377       INS(1)=8192
 4378 C...  *** TEST FOR CCR/SR DESTINATION
 4379 2310  IF(IADM(1,2).EQ.64)  GO TO 2320
 4380 C...  *** NOT CCR/SR - TRY IMM MODE
 4381       IF(IADM(1,1).EQ.60)  GO TO 7000
 4382       GO TO 8100
 4383 C...  *** CCR/SR DESTINATION - ASSURE IMMEDIATE
 4384 2320  IF(IADM(1,1).NE.60)  CALL ERR(232)
 4385 C...  ***CREATE IMM BIT PATTERM
 4386       KK=ISHFT(INS(1),-12)
 4387       KK=MPUAND(KK,7)
 4388       INS(1)=IMCD(KK+1) + IADM(2,2)
 4389       RETURN
 4390 C
 4391 C***  CMP
 4392 C***  SWITCH INFO ON CMP
 4393 2380  KK=IADM(1,1)
 4394       IADM(1,1)=IADM(1,2)
 4395       IADM(1,2)=KK
 4396       KK=IADM(2,1)
 4397       IADM(2,1)=IADM(2,2)
 4398       IADM(2,2)=KK
 4399 C***  IF 6 OR MORE BYTE INST, SWITCH 'INS' ALSO
 4400       IF(INSL.LT.6) GO TO 2390
 4401       IF(IADM(1,1).LT.40) GO TO 2390
 4402       KK=INS(2)
 4403       INS(2)=INS(4)
 4404       INS(4)=KK
 4405       KK=INS(3)
 4406       INS(3)=INS(5)
 4407       INS(5)=KK
 4408 2390  GO TO (2406,2620,2720),I
 4409 C... *** IS COMPARE WITH A REGISTER?
 4410 2400  CONTINUE
 4411 C***  IS IT CMP S,D?
 4412       I=1
 4413       IF(CMP.EQ.0) GO TO 2380
 4414 C***  CMPA?
 4415 2406  IF(INS(1).EQ.ZB001.AND.IADM(1,1).NE.8) GO TO 9213
 4416       IF(IADM(1,1).NE.8)  GO TO 2410
 4417 C*** *** YES, USE CMPA(BYTE MODE ILLEGAL)
 4418       IF(ISIZ.EQ.0) GO TO 9217
 4419       ISIZ=ISIZ*2
 4420       INS(1)=MPUIOR(IHA0C0,ISIZ)
 4421       GO TO 8510
 4422 C... *** CAN WE USE CMPI?
 4423 2410  IF(IADM(1,2).NE.60)  GO TO 8400
 4424       INS(1)=3072 + ISIZ
 4425       IF(IADM(1,1).LT.40)  GO TO 8300
 4426 C...  ***  MEMORY MODE
 4427       KK=INS(3)
 4428       INS(3)= INS(5)
 4429       INS(5)=KK
 4430 C+++  16-BIT
 4431       KK=INS(2)
 4432       INS(2)= INS(4)
 4433       INS(4)=KK
 4434       IADM(3,2)=2
 4435       IF(IADM(1,1).EQ.57)  IADM(3,2)=4
 4436 C***  3=UNDEFINED SYMBOL/LABEL
 4437       IF(IADM(5,2).EQ.3) IADM(3,2)=3
 4438       GO TO 8300
 4439 C
 4440 C***  EXG
 4441 2500  CONTINUE
 4442 C***  EXG DN,DM
 4443       IF(IADM(1,1).EQ.0.AND.IADM(1,2).EQ.0) GO TO 2530
 4444 C***  EXG AN,DM
 4445       IF(IADM(1,1).EQ.8.AND.IADM(1,2).EQ.0) GO TO 2505
 4446 C***  EXG DN,AM
 4447       IF(IADM(1,1).EQ.0.AND.IADM(1,2).EQ.8) GO TO 2510
 4448 C***  EXG AN,AM
 4449       IF(IADM(1,1).EQ.8.AND.IADM(1,2).EQ.8) GO TO 2520
 4450       GO TO 9209
 4451  2505  CONTINUE
 4452 C***  EXG AN,DM
 4453       I=IADM(2,1)
 4454       IADM(2,1)=IADM(2,2)
 4455       IADM(2,2)=I
 4456 2510  CONTINUE
 4457 C***  DN,AM - 64=$40
 4458       INS(1)=INS(1)+64
 4459       GO TO 2530
 4460 C***  AN,AM
 4461 2520  CONTINUE
 4462       INS(1)=ZB140
 4463 2530  INS(1)=INS(1)+ISHFT(IADM(2,1),9)+IADM(2,2)
 4464       RETURN
 4465 C
 4466 C***  CHK
 4467 2600  I=2
 4468 C***  IS IT CHK S,D?
 4469       IF(CMP.EQ.0) GO TO 2380
 4470 2620  GO TO 8500
 4471 C
 4472 C***  CMPM
 4473 2700  I=3
 4474 C***  IS IT CMPM D,S?
 4475       IF(CMP.EQ.1) GO TO 2380
 4476  2720 IF(IADM(1,1).NE.24) GO TO 9209
 4477       IF(IADM(1,2).NE.24) GO TO 9209
 4478       GO TO 7100
 4479 C
 4480 C***  ADDX,SUBX
 4481  2800 GO TO 2910
 4482 C
 4483 C***  ABCD,SBCD
 4484  2900 ISIZ=0
 4485  2910 IF(IADM(1,1).NE.0) GO TO 2920
 4486       IF(IADM(1,2).NE.0) GO TO 9209
 4487       GO TO 7100
 4488 C...  *** -(A1),-(A1) MODE
 4489  2920 IF(IADM(1,1).NE.32) GO TO 9209
 4490       IF(IADM(1,2).NE.32) GO TO 9209
 4491       IADM(2,2)=IADM(2,2)-8
 4492       GO TO 7100
 4493 C
 4494 C***  MOVEP
 4495 C
 4496 3000  CONTINUE
 4497 C***  CHECK FOR CORRECT BYTE SIZE - .B ILLEGAL
 4498       IF(ISIZ.EQ.0)  GO TO 9205
 4499 C***  ENTER LONG WORD FLAG?
 4500       IF(ISIZ.EQ.128)  INS(1)=INS(1) + 64
 4501 C***  FIND ADDRESS MODE
 4502       IF(IADM(1,1).EQ.40)  GO TO 3020
 4503 C***  REG TO MEMORY INSTRUCTION
 4504       IF(IADM(1,2).NE.40)  GO TO 9209
 4505 C***  RESET ADDRESS MODE FLAG TO ADD IN A FLAG LATER
 4506       IADM(1,2)=8
 4507 C***  SET REG -> MEMORY FLAG - 128=$80
 4508       INS(1)=MPUIOR(INS(1),128)
 4509       GO TO 8500
 4510 C***  MEMORY -> REG INSTRUCTION
 4511 3020  IADM(1,1)=8
 4512       GO TO 8200
 4513 C
 4514 C***  DCNT
 4515 C
 4516 3200  INSL=2
 4517       IF(IADM(1,2).EQ.57) IADM(1,2)=56
 4518       IF(IADM(1,1).NE.0)  GO TO 9215
 4519       IF(IADM(1,2).NE.56)  GO TO 9209
 4520       IOFS=INS(3) - IPC -2
 4521       IF(MASK2.EQ.0) GO TO 3201
 4522       IF(IOFS.GE.0.OR.IOFS.LT.-128) CALL ERR(208)
 4523       INS(1)=INS(1) + ISHFT(IADM(2,1),9) + MPUAND(IOFS,255)
 4524       RETURN
 4525 C***  DBCC
 4526 3201  CONTINUE
 4527       INS(1)=INS(1)+IADM(2,1)
 4528       INSL=4
 4529       INS(3)=IOFS
 4530       RETURN
 4531 C
 4532 C***  LEA
 4533 C
 4534 3400  CONTINUE
 4535 C***  DESTINATION MUST BE ADDRESS ONLY
 4536       IF(IADM(1,2).NE.8) GO TO 9213
 4537       IADM(2,2)=MPUAND(IADM(2,2),7)
 4538 C***  CHECK FOR VALID MODES
 4539       IF(IADM(1,1).EQ.16)  GO TO 8210
 4540       IF(IADM(1,1).LT.40)  GO TO 9213
 4541 C***  IMM INVALID
 4542       IF(IADM(1,1).EQ.60) GO TO 9234
 4543       GO TO 8210
 4544 C
 4545 C***  SHIFTS
 4546 3500  CONTINUE
 4547       IF(IADM(1,1).EQ.60.AND.ISIZ.EQ.128) INSL=INSL-2
 4548 C***  MAKE #BITNO LOOK LIKE BITNO
 4549       IF(IADM(1,1).EQ.60) IADM(1,1)=56
 4550       IF(IADM(1,1).EQ.56)  INSL=INSL-2
 4551 C*** ADDRESS REG IS ILLEGAL
 4552       IF(IADM(1,2).EQ.8)  GO TO 9215
 4553       IF(IADM(1,2).NE.0) GO TO 3520
 4554 C...     *** REGISTER SHIFT
 4555          IF(IADM(1,1).EQ.0) GO TO 3510
 4556 C...        *** STATIC SHIFT
 4557             IF(IADM(1,1).NE.56) GO TO 9209
 4558             IF(INS(3).LT.1)     GO TO 9216
 4559             IF(INS(3).GT.8)     GO TO 9208
 4560       IF(INS(3).EQ.8)  INS(3)=0
 4561             INS(1)=INS(1)+ISHFT(INS(3),9)+ISIZ+IADM(2,2)
 4562             RETURN
 4563 C...     *** DYNAMIC SHIFT
 4564  3510    ISIZ=ISIZ + LSP
 4565          GO TO 8400
 4566 C...  *** MEMORY SHIFT
 4567 3520  KK=MPUAND(INS(1),24)
 4568       INS(1)=INS(1) - KK + 192 + ISHFT(KK,6)
 4569 C***  192 = $C0
 4570 C
 4571 C***  ALLOW SHIFT 1,MEMORY
 4572       IF(IADM(1,1).NE.56)  GO TO 9209
 4573       IF(INS(3).NE.1)  CALL ERR(236)
 4574 C***  WORD SIZE ONLY ALLOWED.
 4575       IF(ISIZ.NE.64)  CALL ERR(238)
 4576       INS(3)=INS(5)
 4577       IF(IADM(7,2).EQ.0) GO TO 8600
 4578       IF(LFRF.GT.0.OR.TKNVA2.NE.0) INS(3)=INS(4)
 4579       GO TO 8600
 4580 C
 4581 C***  BIT INSTRUCTIONS
 4582 3600  CONTINUE
 4583          IF(IADM(1,1).EQ.60.AND.ISIZ.EQ.128) INSL=INSL-2
 4584       J=8
 4585 C***  AN DESTINATION ILLEGAL
 4586       IF(IADM(1,2).EQ.8) GO TO 9209
 4587 C***  IMM DESTINATION ILLEGAL
 4588       IF(IADM(1,2).EQ.60) GO TO 9209
 4589 C***  WORD ILLEGAL IN THIS CASE, MASK 3
 4590       IF(ISIZ.EQ.64.AND.MASK2.LT.2) CALL ERR(238)
 4591 C***  IF MASK 2 AND BX GO ADJUST IT
 4592       IF(MASK2.EQ.1) GO TO 3920
 4593 3605  IF(IADM(1,1).NE.0) GO TO 3610
 4594 C***  DYNAMIC - IS IT BTST?
 4595       IF(INS(1).EQ.256) GO TO 8510
 4596 C***  PC REL & PC REL + INDEX ILLEGAL FOR OTHERS
 4597       IF(IADM(1,2).GT.57.AND.IADM(1,2).LT.61) CALL ERR(231)
 4598       GO TO 8510
 4599 C***  STATIC
 4600 3610  IF(IADM(1,1).EQ.56.OR.IADM(1,1).EQ.60) GO TO 3620
 4601       GO TO 9209
 4602 C***  1792=$700
 4603 3620  INS(1)=INS(1)+1792
 4604       IF(IADM(1,2).EQ.0) J=32
 4605       INS(3)=MOD(INS(3),J)
 4606       GO TO 3680
 4607 3640  INS(3)=INS(3)-8
 4608       GO TO 3680
 4609 C***  MASK2=1 - AND WE HAVE BX.BB - ADJUST FOR MASK 2
 4610 3660  CONTINUE
 4611 C***  ODD ADDRESS?
 4612       I=MPUAND(INS(5),1)
 4613       IF(I.EQ.0) GO TO 3670
 4614       INS(5)=INS(5)-1
 4615       GO TO 3930
 4616 3670  INS(3)=INS(3)+8
 4617 C***  TEST PC REL - PC REL + INDEX - VALID FOR BTST ONLY
 4618 3680  CONTINUE
 4619 C***  BTST+$700 AT THIS POINT
 4620       IF(INS(1).EQ.2048) GO TO 8600
 4621       IF(IADM(1,2).GT.57.AND.IADM(1,2).LT.61) CALL ERR(231)
 4622       GO TO 8600
 4623 3900  IF(IADM(1,2).EQ.8) GO TO 9209
 4624       IF(IADM(1,2).EQ.60) GO TO 9209
 4625          IF(IADM(1,1).EQ.60.AND.ISIZ.EQ.128) INSL=INSL-2
 4626       J=16
 4627       IF(MASK2.NE.0) GO TO 3605
 4628 3920  IF(IADM(1,1).EQ.0.AND.IADM(1,2).EQ.0) GO TO 8510
 4629       IF(IADM(1,1).EQ.0) GO TO 9209
 4630 C***                 (AN)+             -(AN)
 4631       IF(IADM(1,2).EQ.24.OR.IADM(1,2).EQ.32) GO TO 9209
 4632       IF(IADM(1,2).EQ.0) J=32
 4633       INS(1)=INS(1)+1792
 4634       INS(3)=MOD(INS(3),J)
 4635       IF(IADM(1,2).EQ.0) GO TO 3680
 4636       IF(IOPC.EQ.36) GO TO 3660
 4637       IF(INS(3).GT.7) GO TO 3640
 4638 C***  ADJ ADDR BY
 4639       INS(5)=INS(5)+1
 4640 C***  IF (AN) SET UP DISPLACEMENT OF 1
 4641 3930  IF(IADM(1,2).NE.16) GO TO 3680
 4642       INSL=INSL+2
 4643       IADM(3,2)=1
 4644       IADM(1,2)=40
 4645       GO TO 3680
 4646 C
 4647 C***  MOVE INSTRUCTION
 4648 C...  *** TEST FOR IMMEDIATE SOURCE AND D SINK
 4649 3700  CONTINUE
 4650 C***  CHECK FOR 2ND OPERAND PRESENT
 4651       IF(IADM(1,2).EQ.-1) GO TO 9209
 4652 C***  MOVE S,PC REL OR PC REL+INDEX ILLEGAL
 4653       IF(IADM(1,2).GT.57.AND.IADM(1,2).LT.61) CALL ERR(231)
 4654 C***  MOVEQ?
 4655       IF(INS(1).EQ.I7KH) GO TO 3705
 4656       IF(IADM(1,1).NE.60) GO TO 3710
 4657 C***  IMM PC REL INVALID
 4658       IF(SYMTYP.EQ.1) CALL ERR(231)
 4659       IF(IADM(1,2).NE.0)  GO TO 3710
 4660 C...  *** MOVE #,0 - CAN WE USE LDQ?
 4661 C***   128 = $80
 4662       IF(ISIZ.NE.128) GO TO 3710
 4663 C***  FORWARD REFERENCE?
 4664       IF(IADM(5,1).GT.0)  GO TO 3710
 4665       IF(INS(3).LT. -127)  GO TO 3710
 4666       IF(INS(3).GT.127)  GO TO 3710
 4667       IF(INS(2).NE.0.AND.INS(2).NE.-1) GO TO 3710
 4668       IF(INS(2).EQ.0.AND.MPUAND(TKNVAL,Z8000).NE.0) GO TO 3710
 4669 C...  *** USE LDQ
 4670 3705  INS(1)= I7KH + ISHFT(IADM(2,2),9) + MPUAND(INS(3),255)
 4671       INSL=2
 4672 C***  ONLY DN DEST ALLOWED
 4673          IF(IADM(1,2).NE.0) GO TO 9209
 4674          IF(IABS(INS(3)).GT.KCFF) GO TO 9210
 4675       RETURN
 4676  3710 IF(ISIZ.NE.0) GO TO 3720
 4677 C...     *** BYTE MODE
 4678          IF(IADM(1,1).EQ.8) GO TO 9217
 4679          IF(IADM(1,2).EQ.8) GO TO 9217
 4680  3720 INS(1)=ISHFT(ISIZ,6)+4096
 4681 C***  MOVE.W= OPCODE 3 - MOVE.L = OPCODE 2
 4682 C***  12288=$3000 - 8192=$2000
 4683       IF(ISIZ.EQ.0) GO TO 3726
 4684       IF(INS(1).EQ.12288) GO TO 3722
 4685       INS(1)=12288
 4686       GO TO 3726
 4687 3722  INS(1)=8192
 4688 3726  CONTINUE
 4689       KM=MPUAND(IADM(1,2),56)
 4690       IF(KM.EQ.56) GO TO 3730
 4691 C...     *** REGISTER MODE (00-60)
 4692          KR=MPUAND(IADM(2,2),7)
 4693          GO TO 3740
 4694 C...  *** MEMORY MODE (7X)
 4695  3730 KR=MPUAND(IADM(1,2),7)
 4696 C...  *** FORM FIELD-1 REG,MODE
 4697  3740 INS(1)=INS(1)+ISHFT(KR,9)+ISHFT(KM,3)
 4698 C...  *** FORM FIELD-2 EA
 4699 C
 4700 C...  *** TEST FOR CONTROL REGISTER SOURCE
 4701       IF(IADM(1,1).NE.64)  GO TO 3760
 4702 C...  *** SOURCE IS CONTROL REGISTER - ASSURE USP -> A
 4703       IF(IADM(2,1).NE.16)  GO TO 3750
 4704       IF(IADM(1,2).NE.8)  GO TO 9213
 4705 C
 4706       INS(1)=IH4E60 + IADM(2,2)
 4707       RETURN
 4708 C
 4709 C...  *** MOVE SR,EA?
 4710 3750  IF(IADM(2,1).NE.124)  GO TO 9233
 4711 C...  ***    124 = $7C
 4712       INS(1)=IH40C0
 4713       GO TO 8600
 4714 C...  *** TEST FOR CONTROL REGISTER DESTINATION
 4715 3760  IF(IADM(1,2).NE.64)  GO TO 8300
 4716 C...  *** DESTINATION IS CONTROL REGISTER  A-> USP?
 4717       IF(IADM(2,2).NE.16)  GO TO 3770
 4718 C
 4719       IF(IADM(1,1).NE.8)  GO TO 9213
 4720       INS(1)=(IH4E60 - 8) + IADM(2,1)
 4721       RETURN
 4722 C...  *** ASSUME EA -> CC/SR
 4723 3770  INS(1)=IH44C0
 4724       IF(IADM(2,2).EQ.124)  INS(1)=IH46C0
 4725       GO TO 8300
 4726 C
 4727 C***  LDM,STM - MOVEM
 4728 C***  19456 = $4C00
 4729 3800  INSL=INSL+2
 4730 C
 4731 C***  CHECK FOR ILLEGAL LDM
 4732       IF(IADM(1,1).LT.9.AND.INS(1).EQ.19456)  GO TO 9209
 4733       INS(5)=INS(3)
 4734          INS(4)=INS(2)
 4735       KM=2
 4736       KK=1
 4737 C***  IS IT STM PART OF MOVEM?
 4738       IF(IADM(1,1).LT.9)  GO TO 3810
 4739       INS(1)=19456
 4740 C***  LDM - ASSURE NOT -1(A)
 4741       IF(IADM(1,1).EQ.32)  GO TO 9209
 4742 C***  PUT IN BIT 7 FOR LDM
 4743       INS(1)=INS(1) + 128
 4744 C***  SET THE MASK A0-D7 IN
 4745       INS(3)=IADM(6,1)
 4746       GO TO 3820
 4747 C***  STM - ASSURE NOT (A)+ OR PC RELATIVE
 4748 3810  CONTINUE
 4749       KK=2
 4750       KM=1
 4751 C***  SET IN D0-A7 BIT MASK
 4752       INS(3)=IADM(6,2)
 4753       IF(IADM(1,2).EQ.24)  GO TO 9209
 4754       IF(IADM(1,2).GE.58)  GO TO 9208
 4755 C***  ASSURE NOT BYTE MODE
 4756 3820  IF(ISIZ.EQ.0)  GO TO 9217
 4757       ISIZ=ISIZ-64
 4758 C
 4759 C***  DISALLOW REGISTER DIRECT MODES
 4760       IF(IADM(1,KK).LE.8)  GO TO 9209
 4761 C***  ASSURE MASK IS FIRST FIELD
 4762       IF(IADM(1,KM).GT.8)  GO TO 9209
 4763       IF(INSL.EQ.6)  IADM(3,2)=2
 4764       IF(INSL.EQ.8)  IADM(3,2)=4
 4765       INS(1)=INS(1) + ISIZ
 4766 C***  IF CONTROL MODE (AN), MASK MUST APPEAR SAME AS LDM MASK FOR (AN).
 4767       IF(IADM(1,2).EQ.16.OR.IADM(1,2).EQ.40) INS(3)=IADM(6,1)
 4768       IF(IADM(1,2).EQ.56.OR.IADM(1,2).EQ.57) INS(3)=IADM(6,1)
 4769       IF(IADM(1,2).EQ.48) INS(3)=IADM(6,1)
 4770 C***         LDM  STM
 4771       GO TO (8300,8600),KK
 4772 C
 4773 C***  --- STANDARD ACTIONS --
 4774 C
 4775 C***  IMMEDIATE OPCODE
 4776 C***  ADDI/SUBI TO AN ILLEGAL
 4777 6980  IF(IADM(1,2).EQ.8) GO TO 9209
 4778 C***  MUST BE IMM
 4779       IF(IADM(1,1).NE.60) GO TO 9209
 4780  7000 IF(IADM(1,2).EQ.60) GO TO 9209
 4781       KK=ISHFT(INS(1),-12)
 4782       KK=MPUAND(KK,7)
 4783       INS(1)=IMCD(KK+1)+ISIZ
 4784       IF(IADM(1,2).EQ.8)  GO TO 9215
 4785       GO TO 8610
 4786 C
 4787 C***  REGISTER-REGISTER OPCODES
 4788  7100 KK=ISHFT(IADM(2,2),9)
 4789       INS(1)=MPUIOR(INS(1),KK)+ISIZ
 4790       INS(1)=MPUIOR(INS(1),IADM(2,1))
 4791       RETURN
 4792 C
 4793 C     -------- FIELD 1 --> FIELD 2 -------
 4794 C
 4795 C***  ESTABLISH SIZE IN BITS 7-6
 4796 C...  *** IS IMMEDIATE EA ALLOWED?
 4797  8100 IF(IADM(1,1).NE.60) GO TO 8110
 4798          IF(NIMM(IOPC).NE.0) GO TO 9218
 4799  8110 INS(1)=INS(1)+ISIZ
 4800 C
 4801 C***  ESTABLISH REGISTER(2) IN BITS 11-9
 4802  8200 IF(IADM(1,2).NE.0) GO TO 9215
 4803  8210 KK=ISHFT(IADM(2,2),9)
 4804       INS(1)=MPUIOR(INS(1),KK)
 4805 C
 4806 C***  ESTABLISH EA(1) IN BITS 5-0
 4807  8300 IF(IADM(1,1).LT.0)  GO TO 9209
 4808       INS(1)=INS(1)+IADM(1,1)
 4809       IF(IADM(1,1).NE.0) GO TO 8320
 4810 C...     *** DATA REGISTER MODE
 4811          INS(1)=INS(1)+IADM(2,1)
 4812          RETURN
 4813  8320 IF(IADM(1,1).LT.56) INS(1)=INS(1)+IADM(2,1)-8
 4814 C...  *** ASSURE NOT SR DESTINATION
 4815       IF(IADM(1,1).EQ.64)  GO TO 9233
 4816       RETURN
 4817 C
 4818 C     -------- FIELD 2 --> FIELD 1 -------
 4819 C***  ESTABLISH SIZE IN BITS 7-6
 4820  8400 INS(1)=INS(1)+ISIZ
 4821 C
 4822 C***  ESTABLISH DATA REGISTER(1) IN BITS 11-9
 4823  8500 IF(IADM(1,1).NE.0) GO TO 9215
 4824 8510  INS(1)=INS(1)+ISHFT(IADM(2,1),9)
 4825 C
 4826 C***  ESTABLISH EA(2) IN BITS 5-0
 4827 C...  *** IS IMMEDIATE EA ALLOWED?
 4828  8600 IF(IADM(1,2).NE.60) GO TO 8610
 4829          IF(NIMM(IOPC).NE.0) GO TO 9218
 4830  8610 IF(IADM(1,2).LT.0)  GO TO 9209
 4831       INS(1)=INS(1)+IADM(1,2)
 4832       IF(IADM(1,2).NE.0) GO TO 8620
 4833 C...     *** DATA REGISTER MODE
 4834          INS(1)=INS(1)+IADM(2,2)
 4835          RETURN
 4836  8620 IF(IADM(1,2).LT.56) INS(1)=INS(1)+IADM(2,2)-8
 4837 C...  *** ASSURE NOT SR DESTINATION
 4838       IF(IADM(1,2).EQ.64)  GO TO 9233
 4839       RETURN
 4840 C
 4841 C***  ERROR STOPS
 4842 C
 4843 C***  BYTE SIZE ERROR
 4844 9205  CALL ERR(205)
 4845       RETURN
 4846 C...  *** RANGE ERROR
 4847 9208  CALL ERR(208)
 4848       RETURN
 4849 C...  *** ILLEGAL ADDRESS MODE
 4850 9209  CALL ERR(209)
 4851       RETURN
 4852 C***  VALUE TO BIG
 4853 9210  CALL ERR(210)
 4854       RETURN
 4855 C***  DATA SIZE INVALID
 4856 9212  CALL ERR(212)
 4857       RETURN
 4858 C...  *** REGISTER MUST BE ADDRESS REGISTER
 4859  9213 CALL ERR(213)
 4860       RETURN
 4861 C...  *** REGISTER MUST BE DATA REGISTER
 4862  9215 CALL ERR(215)
 4863       RETURN
 4864 C...  *** NEGATIVE NOT ALLOWED
 4865  9216 CALL ERR(216)
 4866       RETURN
 4867 C...  *** BYTE MODE NOT ALLOWED
 4868  9217 CALL ERR(217)
 4869       RETURN
 4870 C...  *** DESTINATION MUST BE ALTERABLE
 4871  9218 CALL ERR(218)
 4872       RETURN
 4873 C...  *** UNDEFINED ACTION (INTERNAL ERROR)
 4874  9223 CALL ERR(223)
 4875       RETURN
 4876 C...  *** ILLEGAL REGISTER FOR THIS INSTRUCTION
 4877 9233  CALL ERR(233)
 4878       RETURN
 4879 12340 INSL=4
 4880 9234  CALL ERR(234)
 4881       RETURN
 4882       END
 4883       SUBROUTINE OBJ
 4884 CC    NAM: OBJ  VER: 1.0  DAT: 12/08/78  CMP: 16-BIT
 4885 CC
 4886 CC    SYS: MACS
 4887 CC
 4888 CC    ENT: N/A
 4889 CC
 4890 CC    RTN: N/A
 4891 CC
 4892 CC    FNC: CREATE THE OBJECT FILE OUTPUT
 4893 CC         STUFFS EACH BYTE INTO A BUFFER, CALCULATES CHECKSUM.
 4894 CC
 4895 CC    REV: N/A
 4896 CC
 4897 CCALLS PNCH
 4898 CC
 4899 C*
 4900       IMPLICIT INTEGER (A-Z)
 4901       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
 4902      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
 4903      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
 4904       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
 4905       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
 4906       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
 4907       COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
 4908       COMMON /A/ LIST,ICOL,NEST,LUCI,LULT,MFLD(11,3),IOBJ
 4909 C
 4910 C***  RETURN IF NO PUNCH OUTPUT DESIRED
 4911       IF(IOBJ.EQ.0)  RETURN
 4912       IF(INSL.LE.0)  RETURN
 4913 C***  IF LONG 'STRING' DO NOT PUT OUT AGAIN
 4914       IF(INSL.EQ.9)  RETURN
 4915 C***  SPC?
 4916       IF(INSL.EQ.20)  RETURN
 4917       IF(INSL.NE.1) CALL PNCH(4,ISHFT(INS(1),-8))
 4918       CALL PNCH(4,INS(1))
 4919       GO TO (100,100,200,200,300,300,400,400,500,500),INSL
 4920 C...  *** ONE WORD
 4921   100 RETURN
 4922 C...  *** THREE WORD OR LARGER
 4923 C
 4924 300   IF(IADM(3,2).EQ.0) GO TO 500
 4925       GO TO 200
 4926 400   IF(IADM(3,2).NE.2) GO TO 200
 4927 C...   *** PUNCH INS(2)
 4928 500   CALL PNCH(4,ISHFT(INS(2),-8))
 4929       CALL PNCH(4,INS(2))
 4930 C...  *** TWO WORD
 4931   200 CALL PNCH(4,ISHFT(INS(3),-8))
 4932       CALL PNCH(4,INS(3))
 4933       IF(INSL.LT.6) RETURN
 4934       IF(IADM(3,2).EQ.0)  RETURN
 4935 C...  *** FOUR/FIVE WORD
 4936 C
 4937       IF(IADM(3,2).NE.4)  GO TO 1000
 4938 C...  *** PUNCH INS(4)
 4939       CALL PNCH(4,ISHFT(INS(4),-8))
 4940       CALL PNCH(4,INS(4))
 4941 C...  *** FIVE WORD
 4942 1000  CALL PNCH(4,ISHFT(INS(5),-8))
 4943       CALL PNCH(4,INS(5))
 4944       RETURN
 4945       END
 4946       SUBROUTINE PNCH(JTYP,JVAL)
 4947 CC    NAM: PNCH  VER: 1.0  DAT: 02/19/79  CMP: PDP-11
 4948 CC
 4949 CC    SYS: MACS
 4950 CC
 4951 CC    ENT: JTYP - FUNCTION TYPE
 4952 CC                1 - OUTPUT HEADER
 4953 CC                2 - OUTPUT TRAILER
 4954 CC                3 - NEW ORIGIN
 4955 CC                4 - NEXT BYTE IN SEQUENCE
 4956 CC                5 - ADJUST COUNT FOR A 'DS'
 4957 CC         JVAL - DATA BYTE
 4958 CC
 4959 CC    RTN: JTYP - N/C
 4960 CC         JVAL - N/C
 4961 CC
 4962 CC    FNC: WRITE THE OBJECT RECORDS TO DEVICE 'LUOO'
 4963 CC         IF NO OUTPUT DESIRED(IOBJ=0) IT RETURNS.
 4964 CC         S1 RECORD = 2 BYTE ADDRESS
 4965 CC         S2 RECORD = 3 BYTE ADDRESS
 4966 CC
 4967 CCALLS MPUAND-HEXASC-ISHFT-ADD
 4968 CC
 4969 C*
 4970       IMPLICIT INTEGER (A-Z)
 4971       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
 4972      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
 4973      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
 4974       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
 4975       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
 4976       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
 4977       COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
 4978       COMMON /A/ LIST,ICOL,NEST,LUCI,LULT,MFLD(11,3),IOBJ,LLENSW,NOP
 4979       DIMENSION LIN(17)
 4980       DIMENSION LIN2(50)
 4981       DATA JX/0/
 4982       DATA CKSM/0/
 4983       DATA JPC/0/,JPC1/0/
 4984       DATA ISREC/1/
 4985 9900  FORMAT('S',I1,50A1)
 4986 C***  CHECK FOR NO OBJECT OUT
 4987       IF(IOBJ.EQ.0)  RETURN
 4988       JVAL1=JVAL
 4989       GO TO(100,200,300,400,250),JTYP
 4990 C
 4991 C***  OUTPUT HEADER
 4992   100 WRITE(LUOO,110)
 4993   110 FORMAT('S00600004844521B')
 4994       RETURN
 4995 C
 4996 200   CONTINUE
 4997 C***  OUTPUT TRAILER
 4998 C***   ASSURE LAST RECORD IS OUT
 4999       IF(JX.NE.0) GO TO 410
 5000 220   WRITE(LUOO,210)
 5001   210 FORMAT('S9030000FC')
 5002       RETURN
 5003 C***  INCREMENT FOR A 'DS'
 5004 250   NPC1=IPC2
 5005       NPC=IPC
 5006       CALL ADD(NPC1,NPC,INS(2),JVAL1)
 5007       GO TO 320
 5008 C
 5009 C***  NEW ORIGIN
 5010   300 NPC=JVAL1
 5011       NPC1=IPC2
 5012 320   IF(JX.NE.0) GO TO 410
 5013       GO TO 430
 5014 C
 5015 C***  NEXT BYTE IN SEQUENCE
 5016 400   CONTINUE
 5017       JX=JX+1
 5018       LIN(JX)=JVAL1
 5019 C***  IS THIS FIRST TIME THRU?
 5020       IF(CKSM.NE.0) GO TO 405
 5021 C***  ADD 2 BYTE ADDRESS TO COUNT
 5022       J=ISHFT(JPC,-8)
 5023       CKSM=IPC2 + J + MPUAND(JPC,KCFF)
 5024 405   CKSM=CKSM+JVAL1
 5025       IF(JX.NE.16) RETURN
 5026 C***  OUTPUT THE FULL LINE
 5027 C***  NPC=NPC+JX - USE 'ADD' TO GET 32 BITS.
 5028       CALL ADD(NPC1,NPC,0,JX)
 5029 410   JX=JX+1
 5030 C***  JXX= # BYTES IN RECORD INCLUDING CHECK SUM
 5031       JXX=JX + 2 + ISREC - 1
 5032       J=CKSM + JXX
 5033 C***  CALCULATE THE CHECK SUM.
 5034       CKSM=KCFF - MPUAND(J,KCFF)
 5035       LIN(JX) = CKSM
 5036 C***  CONVERT THE WHOLE MESS TO ASCII
 5037       CALL HEXASC(JXX,LIN2,2,1)
 5038       CALL HEXASC(JPC,LIN2,4,5)
 5039       J=7
 5040       DO 415 I=1,JX
 5041       J=J+2
 5042       CALL HEXASC(LIN(I),LIN2,2,J)
 5043 415   CONTINUE
 5044       J=J+1
 5045 C***  IS IT 16 OR 24 BIT ADDRESS?
 5046       IF(ISREC.EQ.1)  GO TO 425
 5047       CALL HEXASC(JPC1,LIN2,2,3)
 5048       WRITE(LUOO,9900) ISREC,(LIN2(I),I=1,J)
 5049       GO TO 430
 5050 C***  2 BYTE ADDRESS.
 5051 425   WRITE(LUOO,9900) ISREC,LIN2(1),LIN2(2),(LIN2(I),I=5,J)
 5052   430 JX=0
 5053 C***   OUTPUT TRAILER?
 5054       IF(JTYP.EQ.2) GO TO 220
 5055       CKSM = 0
 5056 C***  INCREMENT THE P-COUNT
 5057       JPC=NPC
 5058       JPC1=NPC1
 5059       IF(JPC1.NE.0) ISREC=2
 5060       IF(JPC1.EQ.0) ISREC=1
 5061       RETURN
 5062       END
 5063       SUBROUTINE PRSYM
 5064 CC    NAM: PRSYM  VER: 1.0  DAT: 01/31/79  CMP: PDP-11
 5065 CC
 5066 CC    SYS:MACS
 5067 CC
 5068 CC    ENT: N/A
 5069 CC
 5070 CC    RTN: N/A
 5071 CC
 5072 CC    FNC: FIND SYMBOL NAME AND ADDRESS IN SYMBOL TABLE,
 5073 CC         STUFF IN LOW 'ISYM', SORT, THEN OUTPUT TO 'LUOT'.
 5074 CC
 5075 CCALLS MPUGTC-MPUPTC-MPUAND-PAGE-ISHFT
 5076 CC
 5077 C*
 5078       IMPLICIT INTEGER (A-Z)
 5079       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
 5080      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
 5081      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
 5082       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
 5083       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
 5084       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
 5085       COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
 5086       COMMON /A/ LIST,ICOL,NEST,LUCI,LULT,MFLD(11,3),IOBJ,LLENSW,NOP
 5087       COMMON /A/ NXSYM1
 5088        DATA LSN/1/
 5089       DATA LSPP/'  '/
 5090 C***  SHOULD TABLE BE LISTED?
 5091       IF(LIST.EQ.0)  RETURN
 5092 9900  FORMAT(//' SYMBOL TABLE - APPROX',I5,' SYMBOL ENTRIES LEFT'/)
 5093          NX=(LENSYM-NXSYM)/9
 5094       WRITE(LUOT,9900) NX
 5095       CALL PAGE(4)
 5096       NX=NXSYM1
 5097 10    ISIZ=ISHFT(ISYM(NX+1),-8)
 5098       ITYP=MPUAND(ISYM(NX+1),255)
 5099 C***  CHECK FOR MACRO
 5100       IF(ITYP.EQ.255)  GO TO 1000
 5101       IF(ITYP.NE.1)  GO TO 850
 5102 C***  SYMBOL IS A LABEL
 5103       JPTR=NX+ISIZ+3
 5104       ITYP=MPUAND(ISYM(JPTR),7)
 5105       IF(ITYP.GT.1)  GO TO 850
 5106 C***  GET CHAR SYMBOL 2 BY 2
 5107       I=ISIZ*2
 5108       CALL MPUGTC(J,ISYM(NX+3),I)
 5109 C***  IF LAST CHAR IS BINARY ZERO, REPLACE WITH ASCII BLANK
 5110       IF(J.EQ.0)  CALL MPUPTC(LSP,ISYM(NX+3),I)
 5111       I=ISYM(NX+3)
 5112       J=LSPP
 5113       IF(ISIZ.GT.1)  J=ISYM(NX+4)
 5114       K=LSPP
 5115       IF(ISIZ.GT.2)  K=ISYM(NX+5)
 5116       L=LSPP
 5117       IF(ISIZ.GT.3)  L=ISYM(NX+6)
 5118       JJ=LSN
 5119       IF(LSN.EQ.1)  GO TO 800
 5120 70    II=LSN/6
 5121 C***  NEGATIVE DO LOOP VALUE
 5122       M= -1
 5123 C***  FIND WHERE THIS SYMBOL GOES ALPHABETICALLY & INSERT
 5124 C***  NEXT HIGH LOCATION IN TABLE
 5125       KK=1
 5126       IF(II.EQ.2)  KK=7
 5127       IF(II.LT.3)  GO TO 100
 5128       II=(II+1)/2
 5129       KK=LSN - II*6
 5130 C***  UPPER HALF OF ARRAY?
 5131 100   CONTINUE
 5132       KKK=KK
 5133       IF(ISYM(KK).LT.I)  GO TO 200
 5134 C***  LOWER HALF?
 5135       IF(ISYM(KK).GT.I)  GO TO 400
 5136       IF(ISYM(KK+1).LT.J)  GO TO 200
 5137       IF(ISYM(KK+1).GT.J)  GO TO 400
 5138       IF(ISYM(KK+2).LT.K)  GO TO 200
 5139       IF(ISYM(KK+2).GT.K)  GO TO 400
 5140       IF(ISYM(KK+3).LT.L)  GO TO 200
 5141       IF(ISYM(KK+3).GT.L)  GO TO 400
 5142 C***  UPPER HALF OF ARRAY, FIND WHICH HALF OF THIS HALF SYMBOL FALLS IN
 5143 C***  ARE WE DONE?
 5144 200   IF(II.EQ.1)  GO TO 500
 5145 C***  NOT DONE, CUT IN HALF AGAIN
 5146       KK=KK + (II/2)*6
 5147       II=(II+1)/2
 5148 C***  ARE WE AT TOP OF TABLE?
 5149       IF(KK.GE.LSN)  GO TO 800
 5150       GO TO 100
 5151 C***  LOWER HALF, CUT IT IN HALF
 5152 400   IF(II.EQ.1)  GO TO 450
 5153       KK=KK - (II/2)*6
 5154       II=(II+1)/2
 5155       GO TO 100
 5156 C***  CHECK FOR POSSIBILITY CURRENT VALUE IS LESS THAN
 5157 C***  NEXT LOWEST ONE BEING POINTED AT.
 5158 450   IF(KK.EQ.1)  GO TO 550
 5159 C***  CHECK NEXT LOWER VALUE.
 5160       KK=KK-6
 5161       GO TO 100
 5162 500   KKK=KKK+6
 5163 550   CONTINUE
 5164 C***  MOVE SYMBOLS UP IN TABLE
 5165       JJ=LSN
 5166 600   ISYM(JJ+6)=ISYM(JJ)
 5167 C***  IS LOOP DONE?
 5168       IF(JJ.EQ.KKK)  GO TO 800
 5169       JJ=JJ-1
 5170       GO TO 600
 5171 C***  INSERT CURRENT SYMBOL
 5172 C***  SET NEXT SYMBOL IN ALPHABETICAL ORDER
 5173 800   ISYM(JJ)=I
 5174       ISYM(JJ+1)=J
 5175       ISYM(JJ+2)=K
 5176       ISYM(JJ+3)=L
 5177 C***  INSERT ADDRESS OF SYMBOL.
 5178       ISYM(JJ+4)=ISYM(NX)
 5179       ISYM(JJ+5)=ISYM(JPTR+1)
 5180 C***  FIND BYTE POSITION TO CHECK FOR ZERO IF ODD # OF CHAR IN NAME.
 5181       LSN=LSN+6
 5182 C***  ADVANCE TOTHE NEXT SYMBOL
 5183 850   NX=NX+ISIZ+5
 5184       IF(NX.LT.NXSYM)  GO TO 10
 5185 C***  IF NO ENTRIES DON'T OUTPUT.
 5186 870   IF(LSN.EQ.1)  GO TO 900
 5187       LSN=LSN-1
 5188 C***  PRINT SYMBOL TABLE
 5189       DO 300I=1,LSN,24
 5190       NX=I+23
 5191       IF(NX.GT.LSN)  NX=LSN
 5192       II=1
 5193       DO 250 J=I,NX,6
 5194       JBUF(II)=ISHFT(ISYM(J),8)+ISHFT(ISYM(J),-8)
 5195       JBUF(II+1)=ISHFT(ISYM(J+1),8)+ISHFT(ISYM(J+1),-8)
 5196       JBUF(II+2)=ISHFT(ISYM(J+2),8)+ISHFT(ISYM(J+2),-8)
 5197       JBUF(II+3)=ISHFT(ISYM(J+3),8)+ISHFT(ISYM(J+3),-8)
 5198 C***  CONVERT HEX TO ASCII
 5199       CALL HEXASC(ISYM(J+4),JBUF,2,II+4)
 5200       CALL HEXASC(ISYM(J+5),JBUF,4,II+6)
 5201       II=II+10
 5202 250   CONTINUE
 5203       II=II-1
 5204       WRITE(LUOT,998) (JBUF(J),J=1,II)
 5205       CALL PAGE(1)
 5206 300   CONTINUE
 5207 998   FORMAT(4(1X,4A2,3X,6A1))
 5208 900   CONTINUE
 5209       RETURN
 5210 C***  FIND END OF MACRO AND START WITH SYMBOL FOLLOWING IT.
 5211 1000  CONTINUE
 5212       NX=NX+ISIZ+5
 5213 1040  K=1
 5214       IF(NX.GE.NXSYM)  GO TO 870
 5215 1050   CALL MPUGTC(I,ISYM(NX),K)
 5216       K=K+1
 5217 C***  END OF MACRO DEFINITION  IS A 04 FOLLOWED BY WORD OF ZEROS
 5218       IF(I.NE.4)  GO TO 1050
 5219       NX=NX+(K+2)/2-1
 5220       IF(ISYM(NX).NE.0)  GO TO 1040
 5221       NX=NX+1
 5222       GO TO 10
 5223       END
 5224       SUBROUTINE PAGE(LCNT)
 5225 CC    NAM:  PAGE  VER: 1.0  DAT: 02/02/79  CMP: PDP-11
 5226 CC
 5227 CC    SYS: MC6800 ASM
 5228 CC
 5229 CC    ENT: LCNT - NUMBER OF LINES JUST OUTPUT, OR IF > 79 THEN
 5230 CC              - 80 = SET TTL IN BUFFER
 5231 CC              - 81 = OUTPUT HEADER TO DEVICE 'LULT'
 5232 CC              - 82 = OUTPUT HEADER TO DEVICE 'LUOT'
 5233 CC              - 83 = SAME AS 82 FOR PDP-11
 5234 CC              - 84 = 'PAGE', SLEW TO TOP OF PAGE IF 'LUOT'=PRINTER
 5235 CC              - 85 = SKIP TO BOTTOM OF PAGE, DONOT PRINT HEADER
 5236 CC
 5237 CC    RTN: N/C
 5238 CC
 5239 CC    FNC: THIS ROUTINE INCREMENTS THE LINE COUNTER AND OUTPUTS A
 5240 CC         TOP OF PAGE HEADER AT PROPER TIME.  IT PUTS
 5241 CC         HEADER INTO OUTPUT BUFFER WHEN ENCOUNTERING THE 'TTL'
 5242 CC         COMMAND.  PAGING IS EFFECTIVE FOR PRINTER OUTPUT ONLY.
 5243 CC         THIS ROUTINE CONTAINS THE RELEASE # AND COPYRIGHT
 5244 CC         MESSAGE IN A DATA STATEMENT, THE ONLY PLACE IT APPEARS
 5245 CC         IN THE PROGRAM.
 5246 CC    NOTE:  THIS ROUTINE CAN POSSIBLY BE CHANGED TO CALL ADD ROUTINE
 5247 CC         THIS WOULD HELP DECREASE ASSEMBLE TIME.  TRY:
 5248 CC             CALL ADD(IPC2,IPC,0,INSL)
 5249 CC         THEN REMOVE ALL OTHER INSTRUCTIONS FROM DATA IO1
 5250 CC         TO STATEMENT 240.
 5251 CC
 5252 CCALLS MPUPTC
 5253 CC
 5254 C*
 5255       IMPLICIT INTEGER (A-Z)
 5256       COMMON /A/ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
 5257      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
 5258      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
 5259       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
 5260       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
 5261       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
 5262       COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
 5263       COMMON /A/ LIST,ICOL,NEST,LUCI,LULT,MFLD(11,3),IOBJ,LLENSW,NOP
 5264       DIMENSION ITTL(30)
 5265 C***  RELEASE AND COPYRIGHT MESSAGE..
 5266       DATA ITTL/'MC','68','00','0 ','AS','M ','RE'
 5267      & ,'V=',' 1','.4',' -',' C','OP','YR','IG','HT'
 5268      & ,' B','Y ','MO','TO','RO','LA',' 1','97','8 ','  ',
 5269      & '  ','  ','  ','  '/
 5270       DATA IPAGE/1/,LINENO/0/
 5271       DATA ITTLSZ/30/
 5272 C***  ITTLSZ IS SIZE OF 'ITTL'
 5273       DATA ISW/0/
 5274 998   FORMAT(2X,30A2,' PAGE',I3//)
 5275 9900  FORMAT(80A1)
 5276 9910  FORMAT(5X,40A2)
 5277 9920  FORMAT(1X,30A2)
 5278 9930  FORMAT(2X,30A2)
 5279 C***  ALWAYS SET TTL
 5280          IF(LCN.EQ.80) GO TO 500
 5281 C**  IS LISTING REQUIRED?
 5282       IF(LIST.EQ.0)  RETURN
 5283 C***  IS PAGING REQUIRED?
 5284       IF(NOP.EQ.0)  RETURN
 5285       LCN=LCNT
 5286       IF(LCN.GT.79)  GO TO 500
 5287 C***  INCREMENT LINE COUNT
 5288       LINENO=LINENO+LCN
 5289       IF(LINENO.LT.IPLEN-6)  RETURN
 5290 C***  PAGE IT
 5291       GO TO 8400
 5292 500   CONTINUE
 5293       LCN=LCN-79
 5294       GO TO(8000,8100,8200,8300,8400,8400),LCN
 5295       RETURN
 5296 C***  PUT TTL IN BUFFER
 5297 8000  CONTINUE
 5298       DO 8020 I=1,30
 5299 8020  ITTL(I)='  '
 5300       J=1
 5301 C***  FIND 'TTL' IN BUFFER
 5302       DO 8030 I=LCN,72
 5303 C***  LOOK FOR 'L' IN 'TTL'
 5304       IF(KARD1(I).EQ.76) GO TO 8040
 5305 8030  CONTINUE
 5306 8040  LCN= I+1
 5307 C***  INSERT THE TITLE.
 5308       DO 8050 I=LCN,64
 5309       CALL MPUPTC(KARD1(I),ITTL,J)
 5310       J=J+1
 5311 8050  CONTINUE
 5312 C***  REVERSE THE LETTERS IN TITLE
 5313       DO 8060 I=1,30
 5314       ITTL(I)=ISHFT(ITTL(I),8) + ISHFT(ITTL(I),-8)
 5315 8060  CONTINUE
 5316       RETURN
 5317 C***  OUTPUT TO 'LULT'
 5318 8100  WRITE(LULT,9920) (ITTL(I),I=1,ITTLSZ)
 5319       RETURN
 5320 C***  OUTPUT TO LUOT
 5321 8200  CONTINUE
 5322 C***  IF ERRORS IN PASS1 SLEW TO TOP OF PAGE FOR PASS2
 5323       IF(LINENO.EQ.3) RETURN
 5324       IF(LINENO.EQ.0) GO TO 8220
 5325       GO TO 8400
 5326 8220  IF(LUOT.NE.LULT) WRITE(LUOT,998) (ITTL(I),I=1,ITTLSZ),IPAGE
 5327       IPAGE=IPAGE+1
 5328       LINENO=3
 5329       RETURN
 5330 8300  CONTINUE
 5331       GO TO 8200
 5332 8400  CONTINUE
 5333 C***  SKIP TO TOP OF PAGE
 5334       IF(LUOT.EQ.LULT)  RETURN
 5335       DO 8450 I=LINENO,IPLEN
 5336       WRITE(LUOT,9900) LSP
 5337 8450   CONTINUE
 5338       LINENO=3
 5339       IF(LCN.EQ.6)  RETURN
 5340       GO TO 8220
 5341 9000    RETURN
 5342         END
 5343       SUBROUTINE PCOUNT
 5344 CC    NAM: PCOUNT  VER: 1.0  DAT: 01/29/79  CMP: PDP-11
 5345 CC
 5346 CC    SYS: MACS
 5347 CC
 5348 CC    ENT: 'IPC' CONTAINS 2 LEAST SIGNIFICANT BYTES OF P-COUNT.
 5349 CC         'IPC2' = MOST SIGNIFICANT BYTE OF P-COUNTER.
 5350 CC         'INSL' = AMOUNT TO INCREMENT P-COUNT BY.
 5351 CC
 5352 CC    RTN: 'IPC' AND 'IPC2' HAVE NEXT P-COUNT.
 5353 CC
 5354 CC    FNC: THE CURRENT INSTRUCTION LENGTH IN 'INSL' IS ADDED
 5355 CC         TO 'IPC' & 'IPC2' TO GIVE NEXT INSTRUCTION ADDRESS.
 5356 CC
 5357 CC    REV: N/A
 5358 CC
 5359 C*
 5360       IMPLICIT INTEGER (A-Z)
 5361       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
 5362      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
 5363      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
 5364       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
 5365       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
 5366       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
 5367       COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
 5368       COMMON /A/ LIST,ICOL,NEST
 5369       DATA IO1/O100000/,IO7/O77777/
 5370 C***  SAVE M.S. BIT
 5371       K=IPC .AND. IO1
 5372 C***  REMOVE M.S. BIT SO CARRY ON ADD CAN BE DETECTED
 5373       IPC=IPC .AND. IO7
 5374       IPC=IPC + INSL
 5375 C***  DID ADD PUT A BIT IN 16TH POSITION?
 5376       J=IPC .AND. IO1
 5377       IF(J.NE.0)  GO TO220
 5378 C***  NO CARRY ON ADD, PUT 16TH BIT BACK IN CASE IT IS 1.
 5379       IPC=IPC .OR. K
 5380       GO TO 240
 5381 220   CONTINUE
 5382 C***  ADD HAD CARRY, INCREMENT 2ND WORD IF PREVIOUS UPPER BIT NOT ZERO.
 5383       IF(K.NE.0) K=1
 5384       IPC2=IPC2+K
 5385 C***  J NE 0 AND K NE 0 THERE IS ROLL OVER AND 16TH BIT MUST BE ZERO.
 5386       IF(K.EQ.1) IPC=IPC .AND. IO7
 5387 240   CONTINUE
 5388       RETURN
 5389       END
 5390       SUBROUTINE HEXASC(IHEX,IB,KNT,IPOS)
 5391 CC    NAM: HEXASC   VER: 1.0  DATE: 05/18/19   CMP: PDP-11
 5392 CC
 5393 CC    SYS: MACS
 5394 CC
 5395 CC    ENT: IHEX - CONTAINS HEX CHARACTERS TO CONVERT
 5396 CC         IB   - N/A
 5397 CC         KNT  - NUMBER OF HEX CHAR TO CONVERT
 5398 CC                MAX OF 4 HEX CHARS, ONE WORD, CAN BE CONVERTED AT A TI
 5399 CC         IPOS - POSITION IN 'IB' TO PUT THE CONVERTED CHARS.
 5400 CC
 5401 CC    RTN: IHEX - N/C
 5402 CC         IB   - CONTAINS THE HEX CHARS IN ASCII, 1 PER WORD
 5403 CC         KNT  - N/C
 5404 CC         IPOS - N/C
 5405 CC
 5406 CC    REV: N/A
 5407 CC
 5408 CC
 5409 CC    FNC: CHANGE HEX VALUES TO ASCII AND STORE ONE CONVERTED HEX VALUE
 5410 CC         PER ARRAY WORD.
 5411 CC
 5412 CCALLS MPUAND-ISHFT
 5413 C*
 5414       IMPLICIT INTEGER (A-Z)
 5415       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
 5416      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
 5417      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
 5418       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
 5419       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
 5420       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
 5421       COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
 5422       COMMON /A/ LIST,ICOL,NEST
 5423       DIMENSION IB(120)
 5424       IPOS2=IPOS+KNT-1
 5425       K=IHEX
 5426       DO 100 I=1,KNT
 5427 C***  GET 1ST 4 BITS
 5428       J=MPUAND(K,15)
 5429 C***  CHECK 0-9 & A-F
 5430       IF(J.GT.9)  GO TO 50
 5431 C***  0-9
 5432       IB(IPOS2)=J+48
 5433       GO TO 80
 5434 C***  A-F
 5435 50    CONTINUE
 5436       IB(IPOS2)=J + 55
 5437 80    IPOS2=IPOS2-1
 5438 C***  GET THE NEXT 4 BITS TO THE RIGHT, LEAST SIGNIFICANT.
 5439       K=ISHFT(K,-4)
 5440 100   CONTINUE
 5441       RETURN
 5442       END
 5443       FUNCTION MPUAND (JA,JB)
 5444 CC    NAM: MPUAND   VER: 1.0  DATE: 04/16/79     CMP: PDP-11
 5445 CC
 5446 CC    SYS: MACS
 5447 CC
 5448 CC    ENT: JA - VALUE TO BE ANDED
 5449 CC         JB - VALUE TO AND WITH
 5450 CC
 5451 CC    RTN: JA - N/C
 5452 CC         JB - N/C
 5453 CC
 5454 CC    FNC: 'AND' JA WITH JB
 5455 CC
 5456 CC    REV: N/A
 5457 C*
 5458       MPUAND=JA .AND. JB
 5459       RETURN
 5460       END
 5461       FUNCTION MPUIOR (JA,JB)
 5462 CC    NAM: MPUIOR  VER: 1.0  DATE: 04/16/79    CMP:PDP-11
 5463 CC
 5464 CC    SYS: MACS
 5465 CC
 5466 CC    ENT: JA - VALUE TO BE 'ORED'
 5467 CC         JB - VALUE TO USE IN THE 'OR'
 5468 CC
 5469 CC    RTN: JA - N/C
 5470 CC         JB - N/C
 5471 CC
 5472 CC    FNC: THE VALUE OF JB IS 'ORED' INTO JA
 5473 CC
 5474 CC    REV: N/A
 5475 CC
 5476 C*
 5477       MPUIOR= JA .OR. JB
 5478       RETURN
 5479       END
 5480       FUNCTION ISHFT(K1,K2)
 5481 CC    NAM: ISHFT  VER: 1.0   DATE: 04/16/79   CMP: PDP-11
 5482 CC
 5483 CC    SYS: MACS
 5484 CC
 5485 CC    ENT: K1 - VALUE TO BE SHIFTED
 5486 CC         K2 - AMOUNT TO SHIFT K1
 5487 CC            = MINUS VALUE, SHIFT RIGHT TO LSB.
 5488 CC            = POSITIVE VALUE, SHIFT LEFT, HIGH ORDER BIT.
 5489 CC
 5490 CC    RTN: K1 - N/C
 5491 CC         K2 - N/C
 5492 CC
 5493 CC    FNC: SHIFT A 16-BIT WORD RIGHT OR LEFT.
 5494 CC
 5495 CC    REV: N/A
 5496 CC
 5497 CCALLS IABS
 5498       DATA IO7/O37777/
 5499       DATA IO57S/O77777/
 5500       DATA IO4/O40000/
 5501       DATA IO1/O100000/
 5502       K=K1
 5503 C***
 5504 C***  ASSEMBLY ROUTINE SHIFT MAY NOT BE RETURNING RIGHT
 5505 C**
 5506 C***  USE MULT AND DIVIDE FOR NOW
 5507 C
 5508       KK=K2
 5509 50    CONTINUE
 5510 C***  IF SHIFT VALUE IS ZERO, RETURN
 5511       IF(KK.EQ.0)  GO TO 300
 5512       IF(KK.LT.0) GO TO 100
 5513       DO 80 I=1,KK
 5514 C***  SAVE 15TH BIT IN CASE ON.  IF SO IT CAUSES A RUNTIME
 5515 C***  MULTIPLY ERROR.  IF ON IT MUST BE OR'ED IN LATER SO IT ISN'T LOST
 5516       KKK=K .AND. IO4
 5517       K=K .AND. IO7
 5518 80    K=K*2
 5519 C***  IF THE 15TH BIT WAS ON BEFORE LAST SHIFT, OR IT IN HERE, IT IS
 5520 C***  THE 16TH BIT.
 5521       IF(KKK.NE.0)  K=K .OR. IO1
 5522       ISHFT=K
 5523       RETURN
 5524 100   KK=IABS(KK)
 5525 C***  STATEMENT:   KK=  -KK  APEARS TO CAUSE F342 ERROR, SO USED IABS
 5526       DO 250 I=1,KK
 5527 C***  KEEP UPPER BIT IN CASE ON.  IF IT IS ON IT MUST BE OR'ED
 5528 C***  IN.  IF LEFT ON # IS MINUS AND DIVIDE WILL NOT WORK FOR SHIFTING
 5529 C***  DATA.
 5530       KKK=K .AND. IO1
 5531       K=K .AND. IO57S
 5532       K=K/2
 5533 C***  IF 16TH BIT WAS ON PUT IT IN 15TH POSITION .
 5534       IF(KKK.NE.0) K=K .OR. IO4
 5535 250   CONTINUE
 5536 300   CONTINUE
 5537       ISHFT=K
 5538       RETURN
 5539       END
 5540       SUBROUTINE MPUPTC(JBYT,JBUF,JBIX)
 5541 CC    NAM: MPUPTC   VER: 1.0   DATE: 04/19/79  CMP: 16-BIT
 5542 CC
 5543 CC    SYS: MACS
 5544 CC
 5545 CC    ENT: JBYT - BYTE IN THE RIGHT 8 BITS OF THE WORD(LOW ORDER BITS)
 5546 CC         JBUF - N/A
 5547 CC         JBIX - BYTE INDEX LOCATION TO PLACE JBYT IN JBUF, LEFT BYTE
 5548 CC                IS BYTE 1 ETC.
 5549 CC
 5550 CC    RTN: JBYT - N/C
 5551 CC         JBUF - CONTAINS BYTE FROM JBYT IN THE JBIX POSITION
 5552 CC         JBIX - N/C
 5553 CC
 5554 CC    FNC: TAKE THE RIGHT JUSTIFIED, ZERO FILLED BYTE FROM
 5555 CC         JBYT AND PLACE IT IN THE JBIX POSITION OF JBUF.
 5556 CC
 5557 CC    REV: N/A
 5558 CC
 5559 CCALLS MPUAND-ISHFT-MOD
 5560 CC
 5561 C*
 5562       DIMENSION JBUF(10)
 5563       DATA IOV1/O177400/
 5564       K1=JBIX
 5565       J1=JBYT
 5566       KK=MOD(K1,2)
 5567       IF(KK.EQ.0)  GO TO 500
 5568 C***  M.S. BYTE - UPPER BYTE OF WORD
 5569       K1=K1/2+1
 5570       KK=JBUF(K1)
 5571       JBUF(K1)=MPUAND(KK,255) + ISHFT(J1,8)
 5572       RETURN
 5573 C***  L.S. BYTE - LOWER BYTE OF WORD
 5574 500   CONTINUE
 5575       K1=K1/2
 5576       KK=JBUF(K1)
 5577       JBUF(K1)=MPUAND(KK,IOV1) + J1
 5578       RETURN
 5579       END
 5580       SUBROUTINE MPUGTC(JBYT,JBUF,JBIX)
 5581 CC    NAM: MGUPTC   VER: 1.0   DATE: 04/19/79  CMP: 16-BIT
 5582 CC
 5583 CC    SYS: MACS
 5584 CC
 5585 CC    ENT: JBYT - N/A
 5586 CC         JBUF - WORD OR ARRAY CONTAINING DESIRED BYTE(CHAR)
 5587 CC         JBIX - INDEX, POSITION IN JBUF TO GET BYTE(CHAR) FROM
 5588 CC
 5589 CC    RTN: JBYT - BYTE(CHAR) FROM JBUF, RIGHT JUSTIFIED, ZERO FILLED
 5590 CC         JBUF - N/C
 5591 CC         JBIX - N/C
 5592 CC
 5593 CC    FNC: TAKE THE JBIX BYTE(CHAR) FROM JBUF AND STORE IT
 5594 CC         RIGHT JUSTIFIED, ZERO FILLED IN JBYT, THE LOWER 8 BITS.
 5595 CC
 5596 CC    REV: N/A
 5597 CC
 5598 CCALLS MPUAND-ISHFT-MOD
 5599 CC
 5600 C*
 5601       DIMENSION JBUF(1)
 5602       K1=JBIX
 5603       KK=MOD(K1,2)
 5604       IF(KK.EQ.0)  GO TO 500
 5605 C***  M.S. BYTE - UPPER BYTE OF WORD
 5606       K1=K1/2+1
 5607       KK=JBUF(K1)
 5608       JBYT=ISHFT(KK,-8)
 5609       RETURN
 5610 C***  L.S. BYTE - LOWER BYTE OF WORD
 5611 500   CONTINUE
 5612       K1=K1/2
 5613       KK=JBUF(K1)
 5614       JBYT=MPUAND(KK,255)
 5615       RETURN
 5616       END
 5617       SUBROUTINE ASCBIN
 5618 CC    NAM: ASCBIN   VER: 1.0   DATA@E: 04-23/79   CMP: PDP-11
 5619 CC
 5620 CC    SYS: MACS
 5621 CC
 5622 CC    ENT: 'ITOKEN' = THE ARRAY WHICH CONTAINS THE RIGHT JUSTIFIED
 5623 CC                    ZERO FILLED ASCII NUMBER.
 5624 CC         'TKNSIZ' = NUMBER OF CHARACTERS IN 'ITOKEN'
 5625 CC         'TKNVAL AND 'TKNVA2'= 0
 5626 CC
 5627 CC    RTN: 'TKNVAL' = 2 LEAST SIGNIFICANT BYTES.
 5628 CC         'TKNVA2' = 2 M.S.B.
 5629 CC
 5630 CC    FNC: THIS ROUTINE TAKES A RIGHT JUSTIFIED, ZERO FILLED ASCII
 5631 CC         ARRAY AND CONVERTS IT TO A BINARY # UP TO 4 BYTES LONG.
 5632 CC
 5633 CC    REV: N/A
 5634 CC
 5635 CCALLS ISHFT
 5636 CC
 5637 C*
 5638 C*
 5639       IMPLICIT INTEGER (A-Z)
 5640       COMMON /A/ ISYM(3000),KARD1(96),ITOKEN(70),TKNSIZ,TKNTYP,
 5641      & TKNVAL,TKNVA2,JSUC,JPTR,LPTR,NXSYM,KOLUMN,KD1BCT,KD1LNO,JERR,
 5642      & MNUM,IPASS,IPC2,IPC,IOPC,INS(5),INSL,ISIZ,IADM(7,2),LUOT
 5643       COMMON /A/ KASH(64),KPAC(15),KPWCT,LENSYM,KCLAS(64)
 5644       COMMON /A/ NET1(64),NET2(64),NET3(64),NET4(64),NET5(64)
 5645       COMMON /A/ NBPW,KSYS,IEOT,LSP,JBUF(83),KARD2(80,3),IHB480,IHEX9K
 5646       COMMON /A/ IA1SHF,KCFF,LUSI,LUDI,LUOO,LLEN,IPLEN
 5647       COMMON /A/ LIST,ICOL,NEST
 5648 C***
 5649       DATA IO1/O100000/
 5650       DATA IO7/O77777/
 5651       DO 600 I=1,TKNSIZ
 5652 C***  REMOVE ASCII BITS
 5653       ITOKEN(I)=ITOKEN(I) - 48
 5654 C***  SAVE FOR LATER
 5655       TKNVA3=TKNVAL
 5656       TKNVA4=TKNVA2
 5657 C***  SHIFT TWICE
 5658       DO 100 J=1,2
 5659 C***  IS M.S. BIT ON?
 5660       K=TKNVAL .AND. IO1
 5661 C***  SHOULD M.S. BIT BE MOVED INTO 2ND WORD, 1ST BIT.
 5662       IF(K.NE.0) K=1
 5663       TKNVA2=ISHFT(TKNVA2,1)+K
 5664 50    TKNVAL=ISHFT(TKNVAL,1)
 5665 100   CONTINUE
 5666 C***  ADD IN THE # WE HAD BEFORE SHIFTING STARTED
 5667 C
 5668 C***  SAVE M.S. BIT
 5669       K=TKNVAL .AND. IO1
 5670 C***  REMOVE M.S. BITSO CARRY ON ADD CAN BE DETECTED
 5671       TKNVAL=TKNVAL .AND. IO7
 5672 200   TKNVAL=TKNVAL+TKNVA3
 5673 C***  DID ADD PUT A BIT IN 16TH POSITION?
 5674       J=TKNVAL .AND.IO1
 5675 C***  NO CARRY ON ADD, PUT 16TH BIT BACK IN CASE IT IS 1
 5676       IF(J.EQ.0)
 5677      1 TKNVAL=TKNVAL .OR. K
 5678 220   CONTINUE
 5679 C***  ADD HAD CARRY, INCREMENT 2ND WORD IF PREVIOUS UPPER BIT NOT ZERO.
 5680       IF(K.NE.0) K=1
 5681       IF(J.EQ.0) K=0
 5682       TKNVA2=TKNVA2+K+TKNVA4
 5683 C***  IF J NE 0 AND K NE 0 THERE IS ROLL OVER & 16TH BIT MUST BE ZERO
 5684        IF(K.EQ.1)  TKNVAL=TKNVAL .AND. IO7
 5685 240   CONTINUE
 5686 C***  SHIFT LEFT ONE MORE BIT
 5687       K=TKNVAL .AND. IO1
 5688       IF(K.NE.0) K=1
 5689       TKNVA2=ISHFT(TKNVA2,1)+K
 5690 250   TKNVAL=ISHFT(TKNVAL,1)
 5691 C***  SAVE M.S. BIT
 5692       K=TKNVAL .AND. IO1
 5693 C***  REMOVE M.S. BIT SO CARRY ON ADD CAN BE DETECTED
 5694       TKNVAL=TKNVAL .AND. IO7
 5695 C***  ADD IN THE NEW #.
 5696       TKNVAL=TKNVAL+ITOKEN(I)
 5697 C***  DID ADD PUT A BIT IN 16TH POSITION?
 5698       J=TKNVAL .AND. IO1
 5699       IF(J.NE.0) GO TO 300
 5700 C***  NO CARRY ON ADD, PUT 16TH BIT BACK IN CASE IT IS 1
 5701       TKNVAL=TKNVAL .OR. K
 5702       GO TO 400
 5703 300   CONTINUE
 5704 C***  ADD HAD CARRY, INCREMENT 2ND WORD IF PREVIOUS UPPER BIT NOT ZERO.
 5705       IF(K.NE.0) K=1
 5706       TKNVA2=TKNVA2+K
 5707 C***  IF J NE 0 & K NE 0 THERE IS CARRY OVER, ZERO 16TH BIT.
 5708       IF(K.EQ.1) TKNVAL=TKNVAL .AND. IO7
 5709 400   CONTINUE
 5710 600   CONTINUE
 5711       RETURN
 5712       END
 \f


                         programunit missng             page   1
  error messages

 6. line  438  .  3 statement structure
    line  439  .  0 statement sequence
    line  442  .  0 statement sequence
    line  443  .  0 statement sequence
    line  444  .  0 statement sequence
    line  445  .  0 statement sequence
    line  446  .  0 statement sequence
    line  447  .  0 statement sequence
    line  448  .  0 statement sequence
    line  449  .  0 statement sequence
    line  453  .  0 statement sequence
    line  474  .  4 type
    line  477  .  3 type
    line  505  .  3 type
    line  506  .  3 type
    line  508  .  3 type
    line  509  .  3 type
    line  510  .  3 type
    line  511  .  3 type
    line  512  .  3 type
    line  525  .  1 label not referred
    line  528  .  1 label not referred
    line  548  .  3 type
    line  549  .  3 type
    line  550  .  3 type
    line  551  .  3 type
    line  552  .  3 type
    line  565  .  1 label not referred
    line  570  .  3 call
    line  570  .  4 type
    line  572  illegal number of main programs
***fortran sorry 90
▶EOF◀