ASMB,R,L,C
* 
*     NAME:   ASMB2 
*     SOURCE: 92067-18072 
*     RELOC:  92067-16072 
*     PGMR:   C.C.H.,S.P.K. 
* 
*     MODIFIED BY EARL STUTES 1976-09-20-1600 
*     MOD 77-01-30 ADDED DEY INST EAS 
*     MODIFIED BY VERN MCGEORGE 22MAY79 TO RELEASE LOD AND GEN INSTR. 
*  ***************************************************************
*  * (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 ASMB2 92067-16072 * (C) HEWLETT-PACKARD COMPANY 1978. 
* 
      NAM ASMB2,5,99 92067-16072 REV.1940 790531
      ENT ASMB2 
      ENT ?ART,?BREC,?LKLI
      EXT ?DCOD,?GETC,?LINC,?LIST,?LOUT,?OPLK 
      EXT ?SUP,?BPKU,?PKUP,?PNCH,?SYMK
      EXT ?LFLG,?LTFL,?LTSA,?LTSB,?RSTA,?ERPR,?CHOP 
      EXT ?CHPI,?OPER,?PLIT,?ASCN,?MSYM,?ASM1,?ICSA 
      EXT ?LINS,?ARTL,?LST,?LPER,?PERL,?SETM
      EXT ?BASF,?SYML 
      EXT ?X,?MOVE,?PLIN
      EXT ?ASCI,?ASII,?ENDS,?ASMB 
      SPC 2 
      EXT ?RELC,?SIGN,?SUMP,?TERM,?T,?BYFL,?CNTB
      EXT ?CODE,?DSIG,?FLAG,?FLAQ,?INST,?LAST,?PASS 
      EXT ?PLCN,?PLEN,?PNTR,?RCNT,?SAVB,?SCN1,?SVST 
      EXT ?SYMP,?TEST,?IOBF,?PBUF,?TEMP,?FLEX 
      SUP 
TEMP  EQU ?TEMP 
.1    DEC 1 
.2    DEC 2 
.3    DEC 3 
.4    DEC 4 
.5    DEC 5 
.6    DEC 6 
.7    DEC 7 
.12   DEC 12
.13   DEC 13
.14   DEC 14
.15   DEC 15
.16   DEC 16
.17   DEC 17
.M1   DEC -1
.M2   DEC -2
.M3   DEC -3
.M4   DEC -4
.M5   DEC -5
.M6   DEC -6
.M7   DEC -7
L     OCT 50,51,52,53,54,55,56
.9    DEC 9 
.M8   DEC -8
.M29  DEC -29 
BLNK  OCT 40        =40B(LOWER BLANK) 
.IL   ASC 1,IL      ILLEGAL OPERAND MSG CONSTANT 1976-09-20-1500
.NO   ASC 1,NO
.OP   ASC 1,OP
.OV   ASC 1,OV
.UN   ASC 1,UN
BLNS  ASC 1,
TW10  OCT 176000   ADDRESS MASK 
B1000 OCT 1000
BIT15 OCT 100000
.E    OCT 105 
RC    ASC 5,E R B C X 
RELC  EQU ?RELC     RELOCATION FLAG 
SIGN  EQU ?SIGN 
SUMP  EQU ?SUMP    RUNNING SUM FOR 'CHOP' 
TERM  EQU ?TERM    NO. OF TERMS IN AN OPERAND 
T     EQU ?T
BYFLG EQU ?BYFL    BYTE FLAG FOR 'BREC' 
CNTB  EQU ?CNTB 
CODE  EQU ?CODE    OPCODE TYPE(FROM OPTABLE)
DSIG  EQU ?DSIG     'ASCN'
FLAG  EQU ?FLAG 
FLAQ  EQU ?FLAQ 
INST  EQU ?INST    OPCODE FORMAT
LAST  EQU ?LAST 
PASS  EQU ?PASS    PASS FLAG(0=PASS 1  AND 1=PASS2) 
PLCN  EQU ?PLCN    PROGRAM LOCATION COUNTER 
PLEN  EQU ?PLEN    LIT LENGTH PASS 1/LIT ORG PASS 2 
PNTR  EQU ?PNTR    POINTS AT LAST OR CURRENT CHAR.
RCNT  EQU ?RCNT 
SAVB  EQU ?SAVB 
SCN1  EQU ?SCN1    STATE LNG/OPCODE/OPERAND/LABEL(4)
SVST  EQU ?SVST 
SYMP  EQU ?SYMP    SYMBOL LNG/ AND LOC'N
TEST  EQU ?TEST    TEST CHARACTER 
FLEX  EQU ?FLEX 
*             * I/O STATEMENT BUFFER *
IOBF  EQU ?IOBF     50 WORDS + END OF STATEMENT BUFF
PBUF  EQU ?PBUF 
WCNT  EQU PBUF  WORD(BLK) CNT FOR BIN.RECRD.
ASM1  EQU ?ASM1 
ASMBX EQU ?ASMB 
CHOP  EQU ?CHOP 
CHOPI EQU ?CHPI 
ERPR  EQU ?ERPR 
GETC  EQU ?GETC 
LINC  EQU ?LINC 
LIST  EQU ?LIST 
LOUT  EQU ?LOUT 
LST   EQU ?LST
LTFLG EQU ?LTFL 
MSYML EQU ?SYML 
OPERR EQU ?OPER 
RSTA  EQU ?RSTA 
SYMK  EQU ?SYMK 
A     EQU 0 
B     EQU 1 
* 
      SKP 
*             ******************* 
*             * CONTINUE PASS 2 * 
*             ******************* 
ASMB2 LDA .VAL0     REMOVE INDIRECTS
      RSS 
      LDA A,I 
      RAL,CLE,SLA,ERA 
      JMP *-2 
      STA .VAL0     DIRECT ADDRESS
      LDA ?LPER     LENGTH OF 'CLEAR'AREA 
      LDB ?PERL     GET ORIGIN OF 'CLEAR' AREA
      JSB ?SETM     GO TO SET MEMORY ROUTINE
      OCT 0         TO SET MEMORY TO ZERO 
      CLA 
      STA PLCN      INITIALIZE PROG LOC'N COUNTER 
      CLB 
      DST PBUF
      DST PBUF+2
      CLA,INA 
      STA PASS      SET PASS FLAG 
      JSB RSTA      READ CONTROL STATEMENT
      LDA TW10
      STA ASM1      SET FLAG FOR 'INIT' PORTION 
ASH   JSB RSTA      READ A SOURCE STATEMENT(NAM?) 
      LDA CODE
      CPA .15       HED?
      JMP ASH       YES, GO PICK UP THE NEXT STATEME
      STA ASM1      CLEAR 'CS' AND 'INIT' FLAG
      CPA .13       (13) NAM ?
      JMP HC02       YES, GO TO LIST IT.
      LDA .NO       'NO'= NO ORG OR NAM STATEMENT 
      JSB ERPR
      JMP HC05      ERROR EXIT FROM INIT
* 
      SKP 
*        ****************************** 
*        * SKIP AND SPACE LIST OUTPUT * 
*        ****************************** 
SKPR  LDB LINC      'SKIP'ENTRY 
      CMB,INB 
      JMP SK2 
SPCR  JSB CHOPI     EVALUATE SPACE COUNT
      CLB,INB       ERROR - SET COUNT=1 
SK2   SZB,RSS       SPACES=0? 
      JMP HC04       YES, EXIT TO HC04(START OF PASS) 
      LDA ?LFLG      NO, START LINE SKIPPING
      SZA,RSS       LIST REQUESTED? 
      JMP HC04      EXIT TO HC04(START OF PASS) 
      LDA LST       LST FLAG
      SZA           SUPPRESS LISTING? 
      JMP HC04       YES, EXIT TO HC04(START OF PASS) 
      STB DSIG      SET COUNTER 
      LDA LINC
      CPA .M1       ON LAST LINE? 
      JMP HC04       YES - EXIT 
      ADB LINC
      SSB,RSS       WILL IT GO TO BOTTOM OF PAGE? 
      JMP *+5       YES,GO TO SKIP TO BOTTOM. 
      STB LINC      NO, SAVE NEW LINE COUNT 
      LDA DSIG      GET NO. OF LINES TO BE SKIPPED
      JSB ?LINS     GO TO LINE SKIPPER
      JMP HC04      EXIT TO GET NEXT STATEMENT
      CCA           SKIP TO BOTTOM OF PAGE. 
      STA LINC
      JMP HC04      EXIT TO GET NEXT STATEMENT
*        *************************
*        * BINARY OUTPUT ROUTINE *
*        *************************
.M54  DEC -54 
      OCT 60100     RIC=5, CURRENT PAGE 
BREC  NOP 
      STA EXTFL     SAVE FOR EXTERNAL CHECKS. 
      CPA .10B      TWO WORD EXTERNAL ? 
      LDA .5         YES, SET RELOC. INDICATOR TO 5 
      STA SAVB+1    SAVE RELOC'N BYTE 
      LDA WCNT
      SZB           RECORD OUT ?
      JMP HI66       NO.
      SZA,RSS       WCNT=0? 
      JMP BREC,I     YES. 
* 
*             * OUTPUT A RECORD 
* 
HI60  LDA WCNT
      ALF,ALF       ROTATE 8
      STA WCNT      STORE WCNT IN UPPER PBUF
      LDA SVST,I    POSITION REMAIN RELOCATION BYTES
      ALF,RAR 
      ISZ RCNT
      JMP *-2 
      RAL 
      STA SVST,I    STORE RELOC.BYTES 
* 
*             * SET REC.ID CODE (WORD 2) *
      LDB BREC-1    GET RIC/PAGE INDICATOR
      CLA,INA 
      CPA ?BASF     IF BASE PAGE RELOCATABLE, 
      LDB MICRD+2     SET RIC = 060000 .
      ADB PBUF+1    SET REMAINDER 
      STB PBUF+1
      JSB ?PNCH     GO TO 'PUNCH' 
      JMP BREC,I     AND EXIT 
* 
*             * PROCESS A BINARY OUTPUT WORD *
* 
      DEF PBUF+4
HI66  LDA WCNT
      SZA           FIRST WORD OF RECORD? 
      JMP HI70       -NO- 
      LDB PLCN      PLCN TO BREG
      STB PBUF+3    SET DBL ADDR. 
      STA PBUF+1    SET PBUF+1=0
      LDB .4        (4) 
      STB WCNT      SET WCNT = 4
      LDB HI66-1
      STB STOR      SET STOR=L(PBUF+4)
      LDB .M5       (-5)
      STB RCNT      SET RCNT=-5 
      LDB .M54      -54 
      STB CNTB      SET CNTB FOR WORD COUNT 
HI70  LDB RCNT
      CPB .M5       RCNT= -5? 
      JMP HI74       -YES-SET UP ADDRESSES
* 
*              * STORE RELOC.BYTE / UPDATE *
* 
HI71  ISZ PBUF+1    UPDATE # OF DATA WRDS 
      LDA SVST,I    GET RELOC. BYTE WORD
      ALF,RAR       POSITION FOR NEXT WORD
      IOR SAVB+1    GET THE NEW BYTE
      STA SVST,I    STORE BACK IN BYTE WORD 
      ISZ RCNT      BYTE WORD FULL? 
      JMP HI76       -NO- 
      LDB .M5        -YES- <B>=-5 
      STB RCNT       RESET RCNT TO -5 
      RAL 
      STA SVST,I
      LDA CNTB
      CPA .M1 
      RSS 
      ISZ CNTB
HI76  LDB INST
      ISZ WCNT      ADVANCE WORD COUNT
      LDA EXTFL     GET TWO-WORD EXT. FLAG. 
      CPA .10B      TWO-WORD EXTERNAL ? 
      JMP EXT2      YES, GO TO PROCESS. 
      STB STOR,I     NO, STORE INSTRUCTION. 
      ISZ STOR
      CCE           PREPARE FOR BYTE ADDRESS WORD, IF ANY.
      CPA .5        (5) 2 WORD INSERT?
      JMP HI77      YES, GO TO PROCESS. 
      CPA .6        (6) BYTE ADDRESS ?
      JMP BYTAD      YES, GO PROCESS. 
      JMP HI78      TO EXIT TEST
* 
*     * PROCESS 2-WORD EXTERNAL (R = 5) OR BYTE ADDRESS (R = 6) * 
* 
EXT2  LDA SIGN      GET OFFSET FLAG (EXT ORDN'L)
      CLE,SZA       IS THIS AN EXT W/OFFSET? [E_0]
      CCE,RSS        YES, SET <E>=1 AND SKIP. 
      LDA SUMP       NO: I/O EXT. USE ORDN'L IN SUMP. 
      ALS,ALS       POSITION ORDINAL TO BITS 9-2. 
      SEZ           MEM. REF. EXTERNAL WITH OFFSET ?
      IOR INST       YES, INCLUDE INSTRUCTION CODE. 
      IOR .3        ADD ABSOLUTE 'MR' INDICATOR (3).
      STA STOR,I    STORE FIRST WORD OF PAIR. 
      ISZ STOR      ADVANCE PUNCH-BUFFER POINTER. 
BYTAD LDA SUMP      GET OFFSET VALUE, OR BYTE ADDRESS IF ANY. 
      SEZ,RSS       MEM. REF. EXT. W/OFFSET OR BYTE ? 
      LDA INST       NO,I/O. USE INSTRUCTION. 
      STA STOR,I    STORE SECOND WORD OF PAIR.
      JMP HI77A     GO TO COMPLETE THE PROCESS. 
* 
HI77  LDA SUMP      GET RELOCATABLE VALUE.
      STA STOR,I
      AND BRMSK     CLEAR UPPER 6 BITS OF 'SUMP'
      BRS,BRS       CLEAR LOWER 2 BITS OF INST
      BLS,BLS 
      IOR 1         'OR' B TO A 
      STA INST
HI77A ISZ WCNT      ADVANCE WORD COUNT. 
      ISZ STOR      ADVANCE PUNCH-BUFFER POINTER. 
      ISZ CNTB      BUMP CNTB 
      RSS 
      JMP HI60
HI78  ISZ CNTB      IS THIS THE LAST WORD?
      JMP BREC,I     NO- EXIT 
      JMP HI60       YES- GO TO PUNCH 
HI74  LDB STOR
      STB SVST
      CLA 
      STA SVST,I    CLEAR RELOC BYTE WORD 
      ISZ STOR
      ISZ WCNT
      JMP HI71
STOR  BSS 1 
BRMSK OCT 1777
.10B  OCT 10
.8    EQU .10B
EXTFL NOP           TWO-WORD EXTERNAL FLAG. 
   SKP
HC02  LDA .2        LIST PARAMETER
HC03  JSB LIST
* 
*             * READ NEXT STATEMENT * 
HC04  JSB RSTA      READ NEXT STATEMENT 
* 
*             * TEST MNEMONIC CODES FOR PROCESS TYPE *
HC05  LDA CODE
      LDB INST
      SZA,RSS       (0) ORB ? 
      JMP HC42      YES.
      CPA .100B     CODE = 'MIC' ?
      JMP X39        YES, GO LIST IT. 
      ADA M100B     SUBTRACT 100 OCTAL
      SSA,RSS       CODE >100B ?
      JMP XMIC       YES, ITS A MICROCODE MACRO.
      LDA CODE      GET OPCODE I.D. NO. AGAIN.
      CPA L+3       (43)  SOC OR SOS ?
      JMP HC28       YES
      AND .M8       (177770)
      CPA L         I/O ? 
      JMP IOPR       YES
      ARS,ARS       SHIFT A RIGHT 4 BITS
      ARS,ARS 
      CPA .3        60/70(MICRO-OP?)
      JMP MICR      YES 
      LDA CODE      GET JUMP TABLE ADDRESS
      ADA CODLC     ADD OPCODE INCREMENT
      JMP A,I       JUMP TO PROCESSOR 
.100B OCT 100 
M100B OCT -100
* 
*             * PROCESS MEMORY REFERENCE INSTRUCTIONS * 
MEMRY LDA INST
      LDB LTFLG 
      SZB           LITERAL PRESENT?
      JMP HCY        YES
      AND .M2        NO, CLEAR LDSB OF 'INST' 
      STA INST
      LDA .I        SET FOR INDIRECT BIT
      LDB BIT15     INDIRECT BIT MASK(100000B)
      JSB CHOP
      JMP HC17E     ERROR EXIT
HCX   STB SUM.      OPERND VALUE
      CLB           LIST PARAMETER=0
HCXL  STB TERM      SAVE THE LIST PARAMETER 
      LDB SUM.      GET THE OPERAND VALUE 
* 
*              * RELOC.CODE IS IN RELC *
      SZA           ABS?
      JMP HC11       NO 
      ADB TW10       YES, SUBTRACT 2000B. 
      SSB,RSS      IS THE OPERAND LESS THAN 2000B?
      JSB OPERR     NO, IT'S AN "M" TERM ERROR
HC11  LDA SUM.
      LDB CODE
      CPB .16       (16) DEF? 
      JMP HC14A      YES, GO CHECK FOR EXT W/OFFSET.
      LDA RELC
      CPA .2        (2) B.P. RELOCATABLE ?
      JMP *+3        YES. 
      SZA           ABSOLUTE? 
      JMP HC15       NO 
      SPC 1 
*             * TEST FOR OPERAND >1023 *
      SPC 1 
      LDA SUM.
      ADA TW10      (176000)
      SSA,RSS 
      JMP OI.SP 
      LDA INST      CLEAR 
      AND CBIT       CURRENT-PAGE BIT [MASK=175777] 
      STA INST
      JMP HC14
      SPC 1 
*             * TEST FOR OPERAND & INSTR IN SAME PAGE * 
      SPC 1 
OI.SP LDA RELC
      CPA .2        (2) B.P. RELOCATABLE ?
      JMP HC13      YES, ERROR. 
      LDA PLCN
      AND TW10
      CMA,INA 
      ADA SUM.
      AND TW10
      SZA,RSS 
      JMP *+3 
HC13  LDA .OV       'OV' ERROR. 
      JSB ERPR
      LDA BRMSK     STRIP UPPER SIX BITS. 
      AND SUM.
      STA SUM.
HC14  LDA RELC
      CPA .2        (2) B.P. RELOCATABLE ?
      JMP HC15+2
HC14A LDA SIGN      GET OFFSET FLAG (EXT ORDINAL).
      SZA           IS OPERAND EXT W/OFFSET ? 
      JMP HC17A      YES, IGNORE ORDN'L FOR NOW.
      LDA SUM.       NO, GET OPERAND VALUE. 
      LDB CODE      GET OPCODE ID NUMBER. 
      CPB .16       ARE WE PROCESSING A 'DEF'(16B) ?
      JMP HC17       YES, SET UP ADDRESS FOR 'BREC'.
HC14B LDA SUM.       NO, GET OPERAND VALUE; 
      AND BRMSK       MASK TO FORM ADDRESS, AND 
      JMP HC17         INSERT INTO INST.
HC15  CPA .4        EXTERNAL ? (4)
      JMP HC14A      YES, GO CHECK FOR OFFSET.
      LDB .5        (5) 
      STB BYFLG 
      ADA .M1       FORM 'MR' INDICATOR FOR OPERAND 
HC17  IOR INST
      STA INST      SET LOADER FLAG 
      LDA SIGN      GET OFFSET FLAG.
HC17A LDB .10B      GET TWO-WORD EXT INDICATOR. 
      SZA           EXTERNAL W/OFFSET IN PROCESS ?
      STB BYFLG      YES, SET FLAG FOR BREC.
* 
*             * SET UP FOR DCOD*
      LDA RELC
HC19  JSB ?DCOD 
* 
*             * OUTPUT A BINARY WORD *
HC22  STB SAVB
      CLB,INB 
      JSB BREC
* 
*             * OUTPUT A LINE FOR LISTING * 
      LDA INST      GET INSTRUCTION PATTERN.
      LDB SIGN      GET OFFSET FLAG.
      SZB           PROCESSING MEM. REF. W/OFFSET?
      IOR B          YES, INCLUDE EXT ORDN'L NO.
      LDB ?LFLG     TEST FOR ADDRESS ONLY MODE
      CPB .Q
      JMP *+2 
      JMP ARUND 
      LDB CODE
      CPB .14 
      LDA SUM.
ARUND STA INST      SAVE INSTRUCTION FOR LISTING. 
      LDB SAVB      GET RELOC. CHARACTER. 
      LDA TERM      GET THE LIST PARAMETER
      JSB LIST      GO TO LIST THE LINE.
      LDA SIGN      GET OFFSET FLAG.
      SZA,RSS       PROCESSING MEM. REF. EXT W/OFFSET ? 
      JMP HC20       NO,  GO TO ADVANCE LOC'N COUNTER.
      LDA SUM.       YES, GET OFFSET VALUE. 
      STA INST      SAVE IN INST FOR LISTING. 
      LDB PLUS      SET <B> = ASCII: +BLANK.
      LDA .6        6=LIST CODE FOR INSTRUCTION ONLY. 
      JSB LIST      GO TO LIST OFFSET VALUE.
HC20  ISZ PLCN      ADVANCE LOCATION COUNTER. 
      JMP HC04      GO TO READ NEXT STATEMENT.
PLUS  ASC 1,+       OFFSET LIST INDICATOR.
*        *****************
*        * BSS PROCESSOR *
*        *****************
BSSP  JSB CHOPI     EVAL. OPERAND 
      JMP HC02      ERROR 
      SZB,RSS       B=0?
      JMP HC02      YES 
      CLB           B=0 
      JSB BREC
      CLA           A=0 
      LDB BLNS      NO RELOC. INDIC.
      JSB LIST
      LDA SUMP      PICK UP BLOCK LENGTH FOR PLCN 
      ADA PLCN
      STA PLCN
      JMP HC04      EXIT
* 
      SKP 
*        ************************ 
*        * PROCESSOR JUMP TABLE * 
*        ************************ 
* 
CODLC DEF *,I 
      DEF HC42      ORG       1 
      DEF HC42      ORR       2 
      DEF X39       *COM      3 
      DEF X39       *ENT      4 
      DEF X39       *EXT,EMA  5 
      DEF INST,I    *ARITH    6 
      DEF ASCP      ASC       7 
      DEF DCNUM     DEC       10
      DEF OCNUM     OCT       11
      DEF BSSP      BSS       12
      DEF EQUP      EQU       13
      DEF FIN2      END       14
      DEF X39       *NAM      15
      DEF MEMRY     MEMORY    16
      DEF X50       HED       17
      DEF MEMRY     DEF       20
      DEF HC26      ABS       21
      DEF SKPR      SKP       22
      DEF SPCR      SPC       23
      DEF X54       LST/UNL   24
      DEF DXNUM     DEX       25
      DEF HC70      HDW ARITH 26
      DEF HC80      HDW SHIFT 27
      DEF HC30      CLO ETC   30
.I    OCT 111       ASCII 'I' 31
      DEF RPLP      RPL       32
      DEF LODR      GEN       33
      DEF LODR      LOD       34
      DEF X52       REP       35
.JSB  OCT 16000               36
.C    OCT 103       ASCII 'C' 37
      DEF X56       SUP/UNS   40
      DEF BYTE      DBL       41
      DEF BYTE      DBR       42
      DEF BYTEG     BYT       43
      DEF DYNUM     DEY       44
SUM.  BSS 1 
DEX   OCT 25        'DEX' OPCODE TYPE 
DEY   OCT 44        'DEY' OPCODE TYPE 
.Q    OCT 121        AN ASCII Q DUMMY 
CBIT  OCT 175777
M17   DEC -17 
      SKP 
*        ****************************** 
*        * ARITHMETIC MACRO PROCESSOR * 
*        ****************************** 
ART   JSB SYMK      GO TO SYMBOL TABLE LOOKUP 
      RSS           ERROR RETN(UNDEF) 
      JMP *+4       NORMAL RET'N
      LDA .UN       'UN'= UNDEFINED SYMBOL
      JSB ERPR
      CLB           SET B = 0 
      ADB .JSB      'JSB' INSTRUCTION MASK
      STB INST
      LDA .4        (4)  A=EXT
      JSB BREC      PUNCH 
      LDB RC+4      ' X'
      CLA 
*        ********************************************** 
*        * PROCESS THE 'DEF' FOLLOWING THE FIRST WORD * 
*        *  OF AN ARITHMETIC PAIR                     * 
*        ********************************************** 
ARTX  JSB LIST      GO TO LIST FIRST WORD 
      LDA .16       (20B) 
      STA CODE      =DEF
      CLA 
      STA INST      CLEAR INST
      LDA LTFLG 
      SZA           LITERAL PRESENT?
      JMP ALTR       YES
      LDA .I        SET UP FOR INDIRECT BIT 
      LDB BIT15     MASK= 100000B 
      JSB CHOP
      NOP 
ALTZ  ISZ PLCN      BUMP LOCATION COUNT 
      STB SUM.      SAVE OPERAND VALUE
      LDB .4        LIST PARAMETER=4
      JMP HCXL
ALTR  LDA ?LTSA     PICK UP 
      LDB ?LTSB      LITERAL PARAMS.
      JMP ALTZ        FROM LKLIT
* 
*             * LITERAL PROCESSING *
* 
HCY   SLA,RSS       LSB OF INST INDIC LITERAL POSSIBLE
      JMP HCZ        NO, ERROR
      AND .M2       CLEAR LSB OF INST 
      STA INST
      JSB ?PLIT 
      JMP HCZ+1     ERROR EXIT
      JMP HCX 
HCZ   JSB OPERR     'M' ERROR 
HC17E CLA           LIST PARAMETER =0 
      STA TERM      SAVE IT 
      JMP HC17
* 
      SKP 
* 
*             * PROCESS 'ABS' OPCODE *
* 
HC26  JSB CHOPI     GO EVALUATE OPERAND 
      JMP HP2D      ERROR 
      STB INST
      JMP HP2D      OK..
* 
*             * OUTPUT BIN RECRD AND/OR LIST LINE * 
* 
HC30  JSB LOUT
      JSB LIST
* 
*             * ADD 1 TO PROG. LOCN. CNTR. *
      ISZ PLCN      BUMP LOCATION CNTR
      JMP HC04
* 
X39   CLA,INA       1 TO A
      JMP HC03
* 
*             * ORG,ORB,ORR PRE-PROCESSOR * 
* 
HC42  CLB           OUTPUT A
      JSB BREC       RECORD 
      JSB INST,I    JUMP TO CORRECT SUBROUT.
      JMP HC02      BACK TO START LIST
X50   LDA ?LFLG     GET THE LIST FLAG 
      SZA,RSS       IS LIST FLAG OFF? 
      JMP HC04       YES - GO TO NEXT STATEMENT 
      JSB INST,I    TO HEADER SUBROUTINE
      CCB 
      LDA LST 
      SZA,RSS       IS LIST FLAG ON?
      STB LINC       YES, SPACE TO BOTTOM OF PAGE 
      JMP HC04      GET NEXT STATEMENT
X52   JSB INST,I    TO REPSB
      JMP X39 
X54   STB LST       SET LST/UNL FLAG
      JMP HC04      BYPASS LISTING FOR 'LST/UNL'
X56   STB ?SUP      SET 'SUP/UNS' FLAG
      JMP X39 
      SPC 1 
*             * PASS 2 'EQU' PROCESSOR *
* 
EQUP JSB CHOPI     EVAL. OPERAND
      CLB           ERROR EXITS 
      LDA PLCN
      STA SUMP      SAVE PLCN VALUE 
      STB PLCN      SET PLCN=0
      LDA .2        (2)  LIST 'EQU' 
      JSB LIST
      LDA SUMP      REPLACE PLCN VALUE
      STA PLCN
      JMP HC04
HC70  LDA LTFLG     GET LITERAL FLAG
      SZA           ARE LITERALS PRESENT? 
      JSB ?ARTL      YES, GO TO LITERAL PROCESSOR 
      JSB LOUT      OUTPUT THE ARITH INSTRUCTION
      JMP ARTX      GO PROCEESS THE 'DEF' PORTION.. 
HC80  JSB CHOPI     GO EVALUATE THE COUNT 
      JMP HC84      BAD COUNT EXIT
      ADB M17       B-17
      SSB           B GRTR THAN 16? 
      CPB M17       NO.  IS B=0?
      JSB OPERR     YES, IT'S AN 'M' ERROR,.
      LDA SUMP      GET THE SHIFT OR ROTATE COUNT.. 
      AND .15       MASK OUT LOWEST 4 BITS
HC82  ADA INST      MAKE UP THE FINAL INSTRUCTION 
      STA INST
      JMP HC30      GO AND OUTPUT THE INSTRUCTION 
HC84  CLA           SET COUNT FOR 16 BIT SHIFT ROTATE 
      JMP HC82
      SPC 1 
*             ************************
*             * PASS 2 RPL PROCESSOR *
*             ************************
RPLP  LDA SCN1+3    CHECK FOR LABEL.
      SZA           PRESENT ? 
      JMP *+4        YES, GO EVALUATE THE OPERAND.
      LDA .LB        NO, GET ERROR MNEMONIC 'LB'. 
      JSB ERPR      GO TO INDICATE THE ERROR. 
      RSS           CLEAR THE INSTR. FIELD FOR LIST.
      JSB CHOPI     GO TO EVALUATE THE OPERAND. 
      CLB           * ERROR * SET OPERAND =0. 
      STB INST      SAVE OPERAND VALUE FOR LIST.
      LDA .7        (7) LIST WITHOUT LOCATION.
      LDB SBLN      ASCII:S-BLANK (SUBSTITUTION)
      JMP HC03      GO TO LIST THE STATEMENT. 
.LB   ASC 1,LB      ASCII 'LB' NO-LABEL ERROR CODE. 
SBLN  ASC 1,S       REPLACEMENT CODE INDICATOR: 'S'.
* 
   SKP
*             ************************* 
*             * OCT/DEC/ASC PROCESSOR * 
*             ************************* 
      SPC 1 
OCNUM CLA 
      JMP NUMPX 
DCNUM LDA .1
      JMP NUMPX 
DXNUM LDA .3
      JMP NUMPX 
DYNUM LDA .4
NUMPX STA WHAT
NUMP  LDA SCN1+2
      STA PNTR      SET POINTER 
      LDA .M1 
      STA T+1       SET FPAS=-1 
HE06  LDB PNTR      PNTS AT 1ST CH OF NUMBER
      STB SIGN
      CLB 
      STB CNTC
      LDB WHAT
      STB RELC
* 
*             * TEST CHARACTER FOR TERMINATOR * 
HE08  LDA PNTR
      JSB GETC
      STA TERM
      CPA L+4       COMMA?
      JMP HE12       YES
      CPA BLNK      BLANK?
      JMP HE12       YES
* 
*             * UPDATE CHAR.CNTR(CNTC) AND POSN. PNTR(TLOC) * 
      LDB CODE
      CPB .8        IF CODE # DEC THEN GO COUNTEMUP 
      JMP *+2 
      JMP CNTUP 
      LDB .2        TEST FOR REAL OR INTEGER
      CPA L+6      DECIMAL POINT? 
      JMP *+2 
      CPA .E        'E'?
      STB RELC       YES, SET RELC = 2
CNTUP ISZ CNTC
      ISZ PNTR      BUMP PNTR 
      JMP HE08
* 
*             * SET UP VALUE FOR LIST AND/OR PUNCH *
HE12  LDB RELC
      BLF,BLF 
      ADB CNTC
      LDA SIGN
      JSB ?ASCN     GO TO 'ASCI' CONVERSION 
      JMP ASCER     THIS IS THE ERROR RETURN
      STA TEMP+1    SAVE THE FIRST WORD 
      LDA .VAL0 
      STA WPNTR     SET UP THE WORKING POINTER
      LDA RELC
      CMA,INA,SZA,RSS WORKING COUNTER FOR THE LOOP
      CCA           OOPS IT WAS ZERO
      STA RELC
NUMLP LDA WPNTR,I   OUTPUT A WORD INTO THE DATA STREAM
      JSB NOUT
      ISZ WPNTR 
      ISZ RELC      IF U DUN DEN BUG OUT
      JMP NUMLP 
HE18  LDA TERM
      CPA BLNK
      JMP HC04      EXIT ON BLANK 
      ISZ PNTR      BUMP PNTR 
      JSB ?BPKU     SCAN OVER BLANKS
      LDA PNTR      TEST FOR EOL 1976-09-20-1500
      CMA,INA 
      ADA SCN1      THE RECORD CHARACTER COUNT
      SSA,RSS 
      JMP HE06      MORE DATA FOLLOWS 
      LDA .IL       SOMETHING IS NOT GOOD 
      JSB ?ERPR     TELL EM KEMO SABE 
      CLA           MAKE A NOP
      JSB NOUT         DUMP IT
      JMP HC04       BUG OUT, U DONE
ASCER CLA 
      JSB NOUT
      JMP HE18
* 
.VAL0 DEF TEMP+1
WPNTR BSS 1 
WHAT  BSS 1         LOCAL OPCODE FLAG FOR NUMP
*          ***************************
*          * OCT DEC ASC WORD OUTPUT *
*          ***************************
NOUT  NOP 
      STA INST
      CLA           SET A=0 FOR 1ST LINE OUTPUT 
      ISZ T+1       SKIP FOR 1ST LINE OF OUTPUT.
      LDA .4        (4) SET A=4 FOR LIST
      LDB BLNS
      JSB LIST
      CLA 
      CLB,INB 
      JSB BREC      PUNCH 
      ISZ PLCN      BUMP LOCN CNTR. 
      JMP NOUT,I    EXIT
*             ********************
*             * PROCESS ASC HERE *
*             ********************
INFO  NOP           INFORMATION RECORD FLAG 
* 
LODR  CLA,INA       SET A FOR A LOADER INFO RECORD
      JMP ASCP1 
* 
ASCP  CLA           SET A FOR A ASC RECORD
ASCP1 STA INFO      SAVE RECORD TYPE IN INFO
      LDA SCN1+2    INITIALIZE FOR ASC PROCESSING 
      STA PNTR
      LDA .M1 
                                                                                        