ASMB,R
      HED ** RTE-M  -  ASMB MAIN ** 
* 
* 
*    10/21/76 
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY. ALL RIGHTS           *
*  * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,       *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.       *
*  ***************************************************************
* 
* 
* NAME  : ASMB
* SOURCE: 92064-18127 
* RELOC : 92064-16040 
* PRGMR : C.H., H.C., S.K.
* 
      NAM ASMB,3,99 92064-16040 REV.2001 791005 
* 
*         ********************************************* 
*         *    ASSEMBLER CONTROL STATEMENT OPTIONS    * 
*         *                                           * 
*         *    A = ABSOLUTE ASSEMBLY                  * 
*         *    B = PUNCH BINARY OBJECT TAPE           * 
*         *    C = SCHEDULE 'XREF' FOR XREF TABLE     * 
*         *    F = FLOATING POINT HDWE. INSTRUCTIONS  * 
*         *    L = LIST OUTPUT                        * 
*         *    N = ASSEMBLE STATEMENTS WITHIN 'IFN'   * 
*         *    R = RELOCATABLE ASSEMBLY               * 
*         *    T = LIST SYMBOL TABLE (END OF PASS 1)  * 
*         *    X = NON-EAU INSTRUCTIONS               * 
*         *    Z = ASSEMBLE STATEMENTS WITHIN 'IFZ'   * 
*         ********************************************* 
* 
      SUP 
      ENT ASMB
* 
      EXT ?HA3Z,?LITI,?AREC,?BREC,?ART,?LKLI
* 
      EXT ?CMQ,?ENP,?EXP,?INSR,?INS?
      ENT ?ASCN,?ASMB,?BNCN,?BPKU,?CHOP,?CHPI,?DCOD 
      ENT ?ENDS,?ERPR,?MSYS,?GETC,?MOVE,?MSYM,?LWA
      ENT ?AFLG,?LSTL,?RFLG,?Z,?ASM1,?LABE
      ENT ?OKOL,?ORRP,?SETM,?SUP,?LPER,?PERL
      ENT ?LOUT,?LTFL,?LTSA,?LTSB,?ORGS,?CNTR 
      ENT ?ASII,?ICSA,?FLGS,?LFLG,?TFLG 
      ENT ?X,?MESX,?ASCI,?LINC,?LINS,?LIST
      ENT ?OPLK,?OPER,?PKUP,?PLIT,?PNCH,?PRNT,?RSTA 
      ENT ?SEGM,?SYMK,?V,?ARTL,?LST,?PLIN,?PCOM 
      ENT ?NEAU,?HA38,?XRFI,?FMPE,?POSN 
      ENT ?FPT,?FP,?ENER,?PRPG
      ENT ?BPSV,?BASF,?GETA 
      ENT ?NDOP,?NDSY,?SYML,?SYMT 
      ENT AI,RTNXR,PRMXR,LSTLU,OUTLU,?FWA 
      ENT B100,.M12 
      ENT AO
      ENT AL
      ENT DCBL
      ENT DCBI
      ENT DCBO
      ENT ?ERR
      ENT OPTNI 
      ENT OPTNO 
      ENT OPTNL 
      ENT LENI
* 
      EXT RMPAR 
      EXT .STOP 
      EXT GTFIL 
      EXT LIMEM 
      EXT READF 
      EXT WRITF 
      EXT IMESS 
      EXT SEGLD 
      EXT FCONT 
      EXT LOCF
      EXT OPEN
      EXT CLOSE 
      EXT .PAUS 
      EXT CREAT 
* 
      COM TEMP(322B)
******************* 
*             ******************************
*             * OPCODE AND PSEUDO-OP TABLE *
*             ******************************
OPT OCT 40502,51421,0,     40504,40416,42001  ABS/ADA 
    OCT 40504,41016,46001, 40514,43060,31700  ADB/ALF 
    OCT 40514,51060,31400, 40514,51460,31000  ALR/ALS 
    OCT 40516,42016,12001, 40522,51460,31100  AND/ARS 
    OCT 40523,41407,0,     41114,43060,25700  ASC/BLF 
    OCT 41114,51060,25400, 41114,51460,25000  BLR/BLS 
    OCT 41122,51460,25100, 41123,51412,0      BRS/BSS 
    OCT 41503,40461,53400, 41503,41061,47400  CCA/CCB 
    OCT 41503,42463,42300, 41514,40461,52400  CCE/CLA 
    OCT 41514,41061,46400, 41514,41450,106700 CLB/CLC 
    OCT 41514,42463,0,     41514,43052,103100 CLE/CLF 
    OCT 41515,40461,53000, 41514,47430,103101 CMA/CLO 
    OCT 41515,41061,47000, 41515,42463,42200  CMB/CME 
    OCT 41517,46403                           COM 
    DEF ?CMQ
    OCT 41520,40416,52001, 41520,41016,56001  CPA/CPB 
    OCT 42105,41410,0,     42105,43020,0      DEC/DEF 
    OCT 42105,54025,0,     41131,52043,0      DEX/BYT 
    OCT 42514,40460,131600, 42516,52004       ELA/ENT 
    DEF ?ENP
    OCT 42514,41060,125600, 42516,42014,0     ELB/END 
    OCT 42522,40460,131500, 42521,52413,0     ERA/EQU 
    OCT 42522,41060,125500, 42530,52005       ERB/EXT 
    DEF ?EXP
    OCT 44114,52051,102000,46111,40450,102500 HLT/LIA 
    OCT 46111,41050,106500,46511,40450,102400 LIB/MIA 
      SKP 
* 
?FPT  EQU *  < FLOATING POINT SUBROUTINE/MACRO OPCODES >
* 
      OCT 43101,42006                         FAD 
      DEF ?HA38 
      OCT 43104,53006                         FDV 
      DEF ?HA38 
      OCT 43115,50006                         FMP 
      DEF ?HA38 
      OCT 43123,41006                         FSB 
      DEF ?HA38 
* 
  OCT 44516,40466,52004, 44516,41066,46004    INA/INB 
  OCT 44517,51016,32001, 44523,55016,36000    IOR/ISZ 
  OCT 45115,50016,26000, 45123,41016,16000    JMP/JSB 
  OCT 46104,40416,62001, 46104,41016,66001    LDA/LDB 
  OCT 46511,41050,106400, 47101,46415,0       MIB/NAM 
  OCT 47117,50030,0,     47503,52011,0        NOP/OCT 
  OCT 47524,40450,102600, 47522,43401         OTA/ORG 
  DEF ORGP
  OCT 47524,41050,106600, 47522,51002         OTB/ORR 
  DEF ORRP
  OCT 51101,46060,31200, 51101,51060,31300    RAL/RAR 
  OCT 51102,46060,25200, 51102,51060,25300    RBL/RBR 
  OCT 51120,46032,0                           RPL 
  OCT 51123,51470,42001, 51505,55062,42040    RSS/SEZ 
  OCT 51506,41452,102200, 51506,51452,102300  SFC/SFS 
  OCT 51514,40465,10010, 51514,41065,4010     SLA/SLB 
  OCT 51517,41453,102201, 51517,51453,102301  SOC/SOS 
  OCT 51523,40464,52020, 51523,41064,46020    SSA/SSB 
  OCT 51524,40416,72000, 51524,41016,76000    STA/STB 
  OCT 51524,41450,102700, 51524,43052,102100  STC/STF 
  OCT 51524,47430,102101, 51532,40467,52002   STO/SZA 
  OCT 51532,41067,46002, 54117,51016,22001    SZB/XOR 
  OCT 47522,41000                             ORB 
  DEF ORBP
  OCT 46123,52024,0,  51513,50022,0           LST/SKP 
  OCT 51525,50040,1,  44105,42017             SUP/HED 
  DEF HEDSB 
  OCT 52516,46024,1,  51105,50035             UNL/REP 
  DEF REPSB 
  OCT 52516,51440,0,  44506,47031,116         UNS/IFN 
  OCT 54111,43031,0,  44506,55031,132         XIF/IFZ 
  OCT 51520,41423,0,  46511,41500,0           SPC/MIC 
* 
      SKP 
*         * * * 21MX INSTRUCTION SET * * *
* 
  OCT 41501,54030,101741, 41501,54430,101751  CAX/CAY 
  OCT 41502,54030,105741, 41502,54430,105751  CBX/CBY 
  OCT 54101,54030,101747, 54101,54430,101757  XAX/XAY 
  OCT 54102,54030,105747, 54102,54430,105757  XBX/XBY 
  OCT 44523,54030,105760, 44523,54430,105770  ISX/ISY 
  OCT 42123,54030,105761, 42123,54430,105771  DSX/DSY 
  OCT 46104,54110,105745, 46104,54510,105755  LDX/LDY 
  OCT 45114,54511,105762, 45120,54513,105772  JLY/JPY 
  OCT 46101,54111,101742, 46101,54511,101752  LAX/LAY 
  OCT 46102,54111,105742, 46102,54511,105752  LBX/LBY 
  OCT 51501,54111,101740, 51501,54511,101750  SAX/SAY 
  OCT 51502,54111,105740, 51502,54511,105750  SBX/SBY 
  OCT 51524,54111,105743, 51524,54511,105753  STX/STY 
  OCT 40504,54110,105746, 40504,54510,105756  ADX/ADY 
  OCT 41530,40430,101744, 41530,41030,105744  CXA/CXB 
  OCT 41531,40430,101754, 41531,41030,105754  CYA/CYB 
  OCT 46102,52030,105763, 51502,52030,105764  LBT/SBT 
  OCT 51506,41030,105767, 52102,51515,105775  SFB/TBS 
  OCT 51502,51515,105773, 41502,51515,105774  SBS/CBS 
  OCT 41502,52114,105766, 46502,52114,105765  CBT/MBT 
  OCT 46526,53514,105777, 41515,53514,105776  MVW/CMW 
  OCT 42102,46041,0,      42102,51042,1       DBL/DBR 
* 
*         * * * 21MX - MEU INSTRUCTIONS * * * 
* 
  OCT 42112,50111,105732, 42112,51511,105733  DJP/DJS 
  OCT 45122,51515,105715                      JRS 
  OCT 46106,40430,101727, 46106,41030,105727  LFA/LFB 
  OCT 46502,43030,105703, 46502,44430,105702  MBF/MBI 
  OCT 46502,53430,105704, 46527,43030,105706  MBW/MWF 
  OCT 46527,44430,105705, 46527,53430,105707  MWI/MWW 
  OCT 50101,40430,101712, 50101,41030,105712  PAA/PAB 
  OCT 50102,40430,101713, 50102,41030,105713  PBA/PBB 
  OCT 51123,40430,101730, 51123,41030,105730  RSA/RSB 
  OCT 51126,40430,101731, 51126,41030,105731  RVA/RVB 
  OCT 51512,50111,105734, 51512,51511,105735  SJP/SJS 
  OCT 51523,46511,105714                      SSM 
  OCT 51531,40430,101710, 51531,41030,105710  SYA/SYB 
  OCT 52512,50111,105736, 52512,51511,105737  UJP/UJS 
  OCT 52523,40430,101711, 52523,41030,105711  USA/USB 
  OCT 54103,40511,101726, 54103,41111,105726  XCA/XCB 
  OCT 54114,40511,101724, 54114,41111,105724  XLA/XLB 
  OCT 54115,40430,101722, 54115,41030,105722  XMA/XMB 
  OCT 54115,46430,105720, 54115,51430,105721  XMM/XMS 
  OCT 54123,40511,101725, 54123,41111,105725  XSA/XSB 
* 
?NEAU EQU *  * START OF NON-EAU OPTABLE SWAP AREA * 
* 
  OCT 42111,53026,100400, 42114,42026,104200  DIV/DLD 
  OCT 42123,52026,104400, 46520,54426,100200  DST/MPY 
  OCT 40523,46027,100020, 40523,51027,101020  ASL/ASR 
  OCT 46123,46027,100040, 46123,51027,101040  LSL/LSR 
  OCT 51122,46027,100100, 51122,51027,101100  RRL/RRR 
  OCT 51527,50030,101100,51101,46451,105000   SWP/RAM 
* 
?FP   EQU *  <FLOATING POINT HDWE. OPCODES: 'FIX' & 'FLT'>
* 
  OCT 0,54030,105100,43114,52030,105120       FIX/FLT 
  OCT 0 *********   END OF OPCODE TABLE   *********** 
       SKP
*              *************************************
*              * PUT OUT A MESSAGE TO THE OPERATOR *
*              *************************************
MESSX NOP 
      STA MESS      SET MESSAGE LOCN
      STB MESS+1    SET MESSAGE LENGTH
      JSB IMESS 
      DEF *+4 
      DEF .2        OUTPUT ON SYSTEM TTY
      DEF MADDR     MESSAGE ADDRESS 
      DEF MSGLN     MESSAGE LENGTH
      JMP MESSX,I   EXIT
SEGNM ASC 3,ASMB
MADDR ASC 7, /ASMB: $END
MESS  ASC 2,        MESSAGE EXTENSION 
MSGLN DEC 9 
?XRFI NOP           CROSS REFERENCE INPUT FLAG. 
.X    ASC 1,X 
*              *******************************
*              * GO TO LOAD THE NEXT SEGMENT *
*              *******************************
SEGMT STA SEGNM+2   SET CORRECT DIGIT (1,2,OR 3)
      JSB SEGLD 
      DEF *+3 
      DEF SEGNM     LOC'N OF 5 CHAR SEGM'T NAME 
      DEF ?ERR      ERROR CODE
      JSB ?FMPE     ERROR-GO TO FILE MANAGER ERROR ROUTINE
      DEF SEGNM     NAME OF SEGMENT 
      SPC 1 
*              ***********************
*              * EXIT FROM ASSEMBLER *
*              ***********************
ABORT LDA *+4       SET UP END MESSAGE FOR EOF ABORT
      LDB *+4 
      JSB MESSX     GO PRINT KESSAGE
      JMP ASMEX     GO TO COMPLETION
      ASC 2,XEND
ASMBX LDA CFLAG 
      SZA,RSS       IS CROSS REF TABLE REQUESTED? 
      JMP RTNXR      NO 
      LDA LINC1     GET CURRENT PAGE NUMBER.
      CMA,INA       NEGATE FOR SIGNAL TO 'XREF'.
      STA PRMXR+1   SAVE: 'XREF' SCHED. PARAMETER.
      LDA PLINE     GET THE NEGATED NO. LINES/PAGE. 
      CMA,INA       MAKE THE VALUE POSITIVE.
      STA PRMXR     SAVE IT FOR 'XREF'. 
* 
      JSB ?POSN     POSITION SOURCE FILE TO THE BEGINNING 
* 
      LDA .X
      JMP SEGMT     LOAD XREF SEGMENT 
* 
RTNXR JSB CLOSE     CLOSE INPUT FILE
      DEF *+3 
      DEF DCBI      INPUT FILE DCB
      DEF ?ERR      ERROR WORD
      SSA,RSS       ERRORS? 
      JMP EFLST     NO, CLOSE LIST FILE 
      JSB ?FMPE     FMP ERROR ROUTINE 
      DEF AI+1      INPUT FILE NAME 
* 
EFLST JSB FCONT     WRITE AN EOF RECORD ON LIST FILE
      DEF *+4 
      DEF DCBL
      DEF ?ERR      ERROR WORD
      DEF B100
      SSA,RSS       ERRORS? 
      JMP CLLST     NO
      CPA .M12      IS IT A -12 ERROR?
      JMP CLLST     YES, THEN IGNORE IT 
      JSB ?FMPE     YES, DISPLAY ERROR AND ABORT ASMB 
      DEF AL+1      LIST FILE NAME
CLLST JSB CLOSE     CLOSE LIST FILE 
      DEF *+3 
      DEF DCBL      LIST FILE DCB 
      DEF ?ERR      ERROR WORD
      SSA,RSS       ERRORS? 
      JMP ASMEX     NO, EXIT ASMB 
      JSB ?FMPE     FMP ERROR MESSAGE 
      DEF AL+1      LIST FILE NAME
* 
      JSB LIMEM     RELEASE AVAILABLE MEMORY
      DEF *+2 
      DEF M1
* 
ASMEX LDA BLNS      BLANK-OUT 
      LDB BLNS        MESSAGE EXTENSION, AND
      JSB MESSX         PRINT: " /ASMB: $END    " 
* 
* 
      CLA 
      JSB .STOP 
* 
.8    DEC 8 
B100  OCT 100 
PRMXR BSS 2 
.M12  DEC -12 
* 
      SKP 
*         ********************************************* 
*         * OPLK: OPCODE TABLE LOOKUP  - WALDY HACCOU * 
*         *  CALLING SEQUENCE:  L  JSB OPLK,I         * 
*         *                    L+1 ERROR RETURN       * 
*         *                    L+2 NORMAL RETURN      * 
*         *  OUTPUT VALUES: VALUE IN A REG. AND 'CODE'* 
*         *               INSTR.FORMAT IN B AND 'INST'* 
*         ********************************************* 
DOPL  DEF TEMP+5
      DEF OPT       LOC'N OF OPCODE TABLE 
OPLK  NOP 
      JSB BPKUP     GET OPCODE POSN 
      STB SCN1+1
      CLA 
      STA TEMP+6    CLEAR TEMP+6
      STA MFLAG     CLEAR SUPPLEMENTAL TABLE FLAG 
      LDA 1         B REG TO A REG
      JSB GETA      GET OPCODE ADDRESS
      STB *+4 
      LDA ...1+2    (3) 
      LDB DOPL      L(TEMP+5) 
      JSB MOVE
      NOP           MOVE ORIGIN HERE
      LDB DOPL+1    L(OPCODE TABLE) 
OPLGO LDA 1,I       GET NEXT ENTRY
      INB 
      CPA TEMP+5    CHECK 1ST 2 CHARS.
      JMP K 
J     ADB ...1+1    (2) 
      LDA 1,I 
      SZA           END OF TABLE? 
      JMP OPLGO     NO-PICK UP NEXT ENTRY 
      LDA MFLAG     YES-
      SZA           REACHED END OF SUPPL. TABLE?
      JMP OPMIC       YES-CHECK FOR 'MIC' 
      LDB ?NDOP       NO-SET POINTER TO TABLE 
      STB MFLAG     SET SUPPLEMENTAL TABLE FLAG 
      CPB ?LWA      ANY ENTRIES IN SUPPLEMENTAL TABLE?
      JMP OPMIC      NO--INVALID OPCODE; CHECK 'MIC'. 
      JMP OPLGO     GO TO CHECK NEXT ENTRY
OPMIC LDA CODE      GET OPCODE I.D. NO. 
      CPA B100      CODE =100B (MIC)? 
      JMP OPLK,I    YES-O.K., RETURN. 
* 
*             * ERROR EXIT HERE * 
* 
      LDA .OP       'OP' OPCODE ERROR 
      JSB ERPR
      CLA           FORCE A 'NOP' FOR 
      STA INST        INVALID OPCODE'S INSTRUCTION. 
      JMP OPLK,I    EXIT HERE ON 'OP' ERROR 
K     LDA 1,I       CHECK LAST CHAR OF OPCODE 
      AND UMSK
      CPA TEMP+6    COMPARE IT
      JMP *+2       OPCODE FOUND ,SKIP
      JMP J         NOT FOUND, TRY NEXT ENTRY 
      LDA 1,I 
      AND LMASK     SET 'A' = OPCODE TYPE 
      INB 
      LDB 1,I 
      STB INST      = INSTRUCTION FORMAT
      STA CODE      = VALUE OF CODE 
      ISZ OPLK
      JMP OPLK,I    EXIT ALPHA+2
* 
* 
      SKP 
*        ****************************************************** 
*        * EVALUATE OPERAND; TEST/PROCESS 'C' OR 'I' MODIFIER * 
*        ****************************************************** 
* 
CLER  DEF RELC      START OF 5 WORD CLEAR AREA
CHOP  NOP 
* 
*        * ON ENTRY A = MODIF.PARAMETER (I,C,0=NONE,2=ASC) *
*        *     B= MASK NECESSARY FOR I OR C MODIFIER       *
* 
      STA FLAG
      STB FLAQ
      SPC 1 
*         * CLEAR CHOP PARAMS IN T, RELC, SIGN, SUMP & TERM.. * 
      LDA ...1+4    (5) 
      LDB CLER      START OF CLEAR AREA 
      JSB SETM
ZERO  NOP           TO SET MEMORY TO ZERO 
      STA XORD      INITIALIZE XORD =0. 
      ISZ SIGN      SET SIGN = + (+1=+,-1=-)
      LDA SCN1+2    OPER.POSN.
      STA PNTR
      SZA,RSS 
      JMP HD22      ERROR**NO OPERAND 
* 
*             * GET THE 1ST CHARACTER * 
      JSB GETC
      CPA L+3       PLUS? 
      JMP HD32+2     YES
      CPA L+5       MINUS?
      JMP HD32       YES
      JMP HD32+3     NO 
* 
*             * PROCESS AN ASTERISK '*' * 
HD26  CLA,INA       SET A=1 
      CPA SYMP      IS THE '*' ALONE? 
      RSS           YES - GOOD
      JMP HD22      NO - IT'S AN ERROR
      ADA ?BASF     SET A = CURRENT RELOCATION TYPE.
      LDB AFLAG     GET ABS. ASSMBL. FLAG 
      SZB           IS THIS AN ABS. ASSEMBLY? 
      CLA           YES, CLEAR A(WILL BE RELOC. BIT)
      LDB PLCN      PROG LOCN CNTR TO B REG 
      STB SAVB      SAVE PLCN VALUE-TEMPORARILY.
      JMP HD50A 
* 
*             * CHOP LOOP PROCESSING HERE * 
HD30  LDA PEEK
      CPA L+4       TEST PEEK FOR A 
      JMP HD36       COMMA, GO TO TEST MODIFIERS
      CPA BLNK
      JMP HD40      =BLNK 
      CLB,INB       SET 'SIGN' FOR +
      CPA L+3       PLUS? 
      RSS            YES
* 
*             * PROCESS SIGNS HERE *
HD32  CCB           SET 'SIGN' FOR -
      STB SIGN      (HD32+1)
      ISZ PNTR
* 
*             * PICK UP NEXT SET OF CHARS.IN BUFFER * 
      JSB BPKUP     GET POSN OF NXT NON-BLNK CHAR.HD32+3
      STA PEEK
      STB PASCN     SAVE PNTR FOR ASCN RTN
      JSB MSYMS     MEAS.SYMBOL, SET SYMP/SYMN
      ADA PNTR
      STA PNTR
* 
*             * TEST FOR NUMERIC OR SYMBOLIC SET *
      LDA PEEK      FIRST CHAR OF SET TO A FOR TESTING
      LDB TEST
      STB PEEK      SAVE CHAR.FOR LATER TEST
      CPA L+2       ASTERISK? 
      JMP HD26       TO '*' PROC
      ADA .M58       -58
      SSA,RSS       TEST FOR SYMBOLIC TERM
      JMP HD50      PROCESS THE SYMBOL
      ADA LPDG+3    (10)
      SSA 
      JMP HD50      PROCESS THE SYMBOL
* 
*             * PROCESS NUMERIC SET HERE *
      LDB SYMP
      ADB ..M1
      LDA LAST      IS B LAST - 
      CPA .B        CHARACTER?
      JMP *+2 
*             * SET B REG FOR ASCN ROUTINE
      ADB .401B 
      LDA PASCN 
      JSB ASCN      TO AXCII CONVERSION TO BINARY 
      JMP CHOP,I    ERROR EXIT FROM ASCII CONV. 
      JMP HD61+1    A REG CONTAINS THE VALUE
* 
*        * TEST INFORMATION FOLLOWING COMMA, IF LEGAL 
*        * -USES FLAG AND FLAQ
*        * -IF C OR I, SET CORRECT BIT IN INSTRUC. USING FLAQ AS MASK 
* 
HD36  LDB FLAG
      SZB,RSS       IS COMMA LEGAL
      JMP HD37       -NO- ERROR 
      CPB ...1+1    'ASC'?
      JMP HD40       -YES-
      ISZ PNTR      POINT TO CHAR.FOLLOWING COMMA 
      JSB BPKUP     SEARCH FOR NON-BLANK
      JSB MSYM      MEASURE SYMBOL
      CPA ...1      1 CHAR SYMBOL?
      JMP *+3        YES
*            *   NO - ERROR 
HD37  JSB OPERR     OPERAND ERROR 
      JMP HD40
      LDA TEST
      CPA BLNK      BLANK TERMINATOR? 
      JMP *+2       -YES- 
      JMP HD37      -NO- ERROR
      LDA LAST      CHAR TO A 
      CPA FLAG      =I/C? 
      RSS           YES, O.K. 
      JMP HD37      ERROR: NOT 'I' OR 'C' MODIFIER! 
      LDA INST
      IOR FLAQ      SET I OR C BIT
      STA INST
      LDA CODE
      CPA L+2       STF OR CLF? (52)
      JMP HD37       -YES- ERROR
* 
*             * CHOP TERMINATION PROCESSOR *
* 
HD40  CLA           INITIALIZE THE
      STA SIGN       OFFSET FLAG TO ZERO. 
      LDA RELC      A=RELOCATION CODE 
      LDB CODE      B=INSTRUCTION I.D.
      SZA           ABSOLUTE OPERAND? 
      JMP RELOC      NO, CHECK RELOCATABLE. 
HD40A LDA SUMP       YES, GET OPERAND VALUE.
      SSA           NEGATIVE? 
      CPB .12+5      YES. IS IT ABS (21B)?
      JMP HD42         YES-OK-
      CPB .32B         NO. IS IT RPL (32B)? 
      JMP HD42          YES-OK- 
      JMP HD22          NO. *ERROR* 
* 
*             * VALUE IS RELOCATABLE, TEST FOR VALIDITY * 
* 
RELOC LDA T         IS RELOC. NUMBER
      SZA            CANCELLED? 
      JMP HD40B       NO. CHECK FOR LEGAL RELOC.
      STA RELC        YES, SET RELOCATION CODE =0.
      JMP HD40A     GO TO CHECK FOR NEGATIVE OPERAND. 
HD40B CPA ...1      LEGAL RELOC? (+1) 
      RSS           -YES- SKIP
      JMP HD22      NO,ERROR. 
      CPB ...1      ORG?
      JMP E         -YES
* 
*             * CHECK: EQU,END,ORG,DEF,HED,& I/O EXT *
* 
      ADB .M11      -11 
      SSB           CODE <13B?
      JMP HD22       YES, ERROR 
      ADB ..M1+5    -6
      SSB           CODE > 20B ?
      JMP E         NO. CHECK FOR EXTERNAL. 
      ADB .M27B     YES. CODE LESS THAN 
      SSB            50B ?
      JMP HD22      YES. ERROR: NOT I/O!
      ADB ..M1+2    CODE GREATER THAN 
      SSB,RSS        52B ?
      JMP HD22      YES. ERROR: NOT I/O!
      CLB           FORCE ERROR IF NON-EXT I/O. 
E     LDA RELC      GET RELOC. CODE.
      CPA ...1+3    EXTERNAL ?
      JMP HD41      YES. CHECK VALIDITY.
      LDA SUMP      GET VALUE OF OPERAND. 
      SSA,RSS       ERROR, IF NEGATIVE. 
      SZB,RSS       RELOC. VALID FOR THIS OPCODE? 
      JMP HD22       NO. * 'M' ERROR *
      JMP HD42      VALID RELOC. GO TO FINISH.
* 
*             * TEST FOR EXT W/OFFSET; SET SIGN & OFFSET VALUE *
* 
HD41  LDA TERM      GET NUMBER OF OPERAND TERMS.
      CPA .1        SINGLE EXTERNAL REFERENCE ? 
      JMP HD42       YES, NO MORE CHECKING NEEDED.
      ADB .1+5      (6) TEST FOR EQU. 
      SZB,RSS       EQU TO EXTERNAL, WITH OFFSET ?
      JMP HD22       YES, *ERROR* 
      LDA SUMP      GET COMBINED OPERAND VALUE. 
      LDB XORD      GET EXTERNAL ORDINAL NUMBER.
      STB SIGN      SET OFFSET FLAG = EXT ORDINAL #.
      CMB,INB       NEGATE ORDINAL VALUE. 
      ADA B         SUBTRACT EXTERNAL ORDINAL VALUE.
      STA SUMP      SAVE OFFSET VALUE.
* 
*             * NORMAL EXIT FROM CHOP, HERE * 
* 
HD42  LDA RELC      RELOCATION CODE IN (A) AND
      LDB SUMP       SUM IN (B) ON EXIT.
      ISZ CHOP
      JMP CHOP,I    EXIT ALPHA+2
* 
*             *CHOP ERROR EXIT* 
* 
HD22  LDA .MBLN     'M' FOR M TERM ERROR
      JSB ERPR      ERROR PRINT 
      CLA           CLEAR THE 
      STA SIGN       OFFSET FLAG. 
      JMP CHOP,I    EXIT ALPHA+1
* 
*             * PROCESS SYMBOLIC TERM HERE *
* 
HD50  JSB SYMK      GO TO SYMBOL TABLE LOOKUP 
      JMP HD6       ERR0R 
      STB SAVB      SAVE VALUE FOUND IN B.
      LDB FLEX      GET FIRST WORD OF SYMBOL ENTRY. 
      SSB           IS THIS AN UNDEFINED 'ENT' ?
      JMP HD6        YES * ERROR *
HD50A AND .1+6      TYPE MASK 
      SZA,RSS       RELOCATABLE TYPE? 
      JMP HD61      NO, ABSOLUTE. 
* 
                                                                                                                              