ASMB,R,L,C
* 
*     NAME:   ASMB
*     SOURCE: 92067-18011 
*     RELOC:  92067-16011 
*     PGMR:   C.C.H,S.P.K.
*     MODIFIED BY EARL STUTES 1976-09-20-1600 
*     MODIFIED BY EAS TO ADD DEY INSTRUCTION 1977-01-30 
*     MODIFIED BY VERN MCGEORGE 22MAY79 TO RELEASE LOD & GEN INSTR. 
*     MODIFIED BY VERN MCGEORGE 13JUL79 TO COUNT CS & FMP ERRORS
*     MODIFIED BY VERN MCGEORGE 21JAN80 TO ALLOW NEG OPERANDS IN DEF
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978.  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.       *
*  ***************************************************************
      HED * RTE ASMB 92067-16011 * (C) HEWLETT-PACKARD COMPANY 1978.
      NAM ASMB,3,99 92067-16011 REV.2013 800131 
*         ********************************************* 
*         *    ASSEMBLER CONTROL STATEMENT OPTIONS    * 
*         *                                           * 
*         *    A = ABSOLUTE ASSEMBLY                  * 
*         *    B = IGNORED                            * 
*         *    C = SCHEDULE 'XREF' FOR XREF TABLE     * 
*         *    F = FLOATING POINT HDWE. INSTRUCTIONS  * 
*         *    L = LIST OUTPUT W/ ENTIRE OBJECT CODE  * 
*         *    Q = LIST OUTPUT W/ RELOC ADDR OF       * 
*         *           OPERAND AS OBJECT CODE          * 
*         *    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'   * 
*         *    P = NULL OVERRIDE OPTION               * 
*         ********************************************* 
* 
      ENT ASMB
      SPC 1 
      EXT IFBRK 
      EXT SUP.C,RED.C,WRT.C,PRM.C,GMM.C,OLY.C,SPC.C 
      EXT EOF.C,END.C 
      EXT C.SOR,C.LST,C.BIN,C.BIA,C.TTY 
      SPC 1 
      EXT ?HA3Z,?LITI,?AREC,?BREC,?ART,?LKLI
      EXT ?CMQ,?ENP,?EXP,?EMP,?INSR,?INS? 
      ENT ?ASCN,?ASMB,?BNCN,?BPKU,?CHOP,?CHPI,?DCOD 
      ENT ?ENDS,?ERPR,?MSYS,?GETC,?MOVE,?MSYM 
      ENT ?AFLG,?LSTL,?RFLG,?ASM1,?LABE 
      ENT ?ORRP,?SETM,?SUP,?LPER,?PERL,?PLIN
      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,?LWA
      ENT ?NEAU,?HA38,?FMPE,?BINF,?ASME 
      ENT ?FPT,?FP,?ENER,?PRPG,?ENFL
      ENT ?BPSV,?BASF,?GETA 
      ENT ?NDOP,?NDSY,?SYML,?SYMT 
      SUP  SUPPRESS EXTENDED LISTING
      SPC 3 
      ENT ERRCN 
      ENT ?TEMP,?NAMI,?NAME,?RELC,?SIGN,?SUMP 
      ENT ?TERM,?T,?BYFL,?FLEX,?CNTB,?CODE,?DSIG
      ENT ?FLAG,?FLAQ,?INST,?LAST,?PASS,?PEEK,?PLCN 
      ENT ?PLEN,?PNTR,?RCNT,?SAVB,?SCN1,?SYMI,?SYMP,?TEST 
      ENT ?ENT.,?ENTC,?ENTV,?IOBF,?BUFF,?PBUF,?SVST 
      ENT FUBP,FUBP2
*             ******************************
*             * 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 
      ASC 2,DEY$                                   DEY
      OCT 0 
    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 42515,40405                           EMA 
    DEF ?EMP
    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 43505,47033,0,     46117,42034,0        GEN/LOD 
  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 WRT.C 
      DEF C.TTY     CONSOLE FCB - OUTPUT ON SYSTEM TTY
      DEF MADDR     MESSAGE ADDRESS 
      DEF MSGLN     MESSAGE LENGTH
      NOP 
      JMP MESSX,I   EXIT
SEGNM ASC 3,ASMB
ASGNM DEF SEGNM 
MADDR ASC 7, /ASMB: $END
MESS  ASC 2,        MESSAGE EXTENSION 
MSGLN DEC 9 
*              *******************************
*              * GO TO LOAD THE NEXT SEGMENT *
*              *******************************
SEGMT STA DFSG#     SET CORRECT DIGIT (0,1,2,3,OR 4)
      JSB SGNAM 
      DEF DFSG#     SEGMENT # 
      JSB OLY.C     LOAD OVERLAY SEGMENT
      DEF SEGNM 
      DLD NOSG      SEGMENT NOT FOUND 
      JSB MESSX 
      JMP ABORT 
DFSG# NOP 
NOSG  ASC 2,NOSG
* 
SGNAM NOP           ROUTINE TO DETERMINE NAME OF SEGMENT
      LDA SGNAM,I   GET ADDRESS OF SEG# 
      LDA A,I       SEGMENT # 
      ADA B60       CONVERT # TO ASCII DECIMAL
      ALF,ALF       MOVE TO UPPER BYTE
      STA SEGNM+2   SET UP SEGMENT NAME 
      ISZ SGNAM 
      LDB ASGNM 
      JMP SGNAM,I   RETURN
* 
* 
      SPC 1 
*              ***********************
*              * EXIT FROM ASSEMBLER *
*              ***********************
ABORT LDA MXEND     SET UP END MESSAGE FOR EOF ABORT
      LDB MXEND+1 
      JSB MESSX     GO PRINT MESSAGE
      JMP ASMEX     GO TO COMPLETION
MXEND ASC 2,XEND
* 
ASMBX LDA BINFL     GET BINARY FLAG 
      SZA,RSS       SET?
      JMP XRFSC     NO, THEN SEE IF XREF TO BE SCHEDULED
      LDA AFLAG     YES 
      SZA           ABSOLUTE ASSEMBLY?
      JMP EOFAB     YES, CLOSE ABSOLUTE OUTPUT FILE 
      JSB EOF.C     WRITE EOF ON RELOCATABLE OUTPUT FILE
      DEF C.BIN     BINARY RELOC. FILE FCB
BINER CLB,INB,RSS   ERROR RETURN
      JMP XRFSC 
      JMP ?FMPE     DISPLAY ERROR 
* 
EOFAB JSB EOF.C     WRITE EOF ON ABSOLUTE OUTPUT FILE 
      DEF C.BIA     ABSOLUTE OUTPUT FILE FCB
      JMP BINER 
* 
XRFSC LDA CFLAG     CROSS-REFERENCE TABLE REQUESED? 
      SZA,RSS 
      JMP EOFLS     NO, THEN WRITE EOF ON LIST FILE 
      CLA,INA       SET FLAG FOR SEGMENT D
      STA ?ENFL     TO INDICATE SCHEDULE XREF 
      CLA 
      JMP SEGMT     USE SEGMENT D 
* 
EOFLS JSB EOF.C     WRITE EOF RECORD ON LIST FILE 
      DEF C.LST 
      CLA,RSS 
      JMP ASMEX 
      JMP ?FMPE 
* 
ASMEX LDA BLNS
      LDB BLNS      SEND $END MESSAGE 
      JSB MESSX 
      LDA ERRCN     ERROR COUNT 
      STA TEMP      SEND PARM BACK
      JSB END.C 
      DEF TEMP      BUFFER LOC
      JMP *-3       IF ERROR RETURN TRY TO END ASMB AGAIN 
* 
* 
.8    DEC 8 
B60   OCT 60
?ENFL NOP 
* 
      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 OPLMV 
      LDA .3
      LDB DOPL      L(TEMP+5) 
      JSB MOVE
OPLMV 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 .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
* 
MFLAG NOP           SUPPLEMENTAL-OPCODE-TABLE FLAG
B100  OCT 100 
* 
      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 .5
      LDB CLER      START OF CLEAR AREA 
      JSB SETM
ZERO  NOP           TO SET MEMORY TO ZERO 
      STA XORD      INITIALIZE XORD =0. 
      STA EMASY     CLEAR FLAG FOR EMA SYMBL LOOKED UP IN SYMBL TBL 
      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 HD34       YES
      CPA L+5       MINUS?
      JMP HD32       YES
      JMP HD35       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)
HD34  ISZ PNTR
* 
*             * PICK UP NEXT SET OF CHARS.IN BUFFER * 
HD35  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 .10       (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 .2        '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 HD43       YES
*            *   NO - ERROR 
HD37  JSB OPERR     OPERAND ERROR 
      JMP HD40
HD43  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 .17        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 .M6 
      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 .M3       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 .4        EXTERNAL ?
      JMP HD41      YES. CHECK VALIDITY.
* 
      LDA CODE      CHECK FOR DEF / ALLOW NEG OPERAND 
      CPA .16 
      JMP HD42
* 
      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 .6        (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,RSS       IS THE UNDEFINED BIT SET? 
      JMP HD50A     NO
      BLF           YES, THEN IS 'E' BIT SET? 
      SSB 
      JMP HD6       YES, THEN THIS IS AN UNDEFINED 'ENT'
      CCB           SET FLAG TO INDICATE SYMBOL 
      STB EMASY     JUST LOOKED UP WAS AN EMA 
HD50A AND .7        TYPE MASK 
      SZA,RSS       RELOCATABLE TYPE? 
      JMP HD61      NO, ABSOLUTE. 
* 
                                                                                                                                                                                                                                                        