ASMB,R,L,C
      HED ** RTE-M ASMB - SEGMENT D **
* 
* 
*     9/24/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  : ASMBD 
* SOURCE: 92064-18132 
* RELOC : 92064-16050 
* PRGMR : C.H., H.C., S.K.
* 
      NAM ASMBD,5,99 92064-16050 REV.1650 761001
* 
      ENT ASMBD 
* 
      EXT ?ASMB,?BPKU,?PKUP,?RSTA,?SETM,?SEGM,?ASM1 
      EXT ?MESX,?FLGS,?AFLG 
      EXT ?X,?Z,?LWA,?RFLG,?ICSA,?LSTL
      EXT ?XRFI,?NEAU,?HA38 
      EXT ?FP,?FPT,?NDSY,?FMPE,LSTLU,OUTLU
* 
      EXT AI
      EXT DCBI
      EXT ?ERR
      EXT OPEN
      EXT OPTNI 
      EXT AL
      EXT DCBL
      EXT OPTNL 
      EXT CREAT 
      EXT DCBO
      EXT AO
      EXT OPTNO 
* 
* 
*             ****************************
*             * TEMPORARY AND FLAG REGION*
*             ****************************
* 
* 
      COM TEMP(7) 
      COM ...1(7) 
      COM .12(6)
      COM ..M1(6) 
      COM L(7)
      COM .9
      COM .29 
      COM .M8 
      COM .M15
      COM .M29
      COM BLNK
      COM .IL 
      COM .MBLN 
      COM .NO 
      COM .OP 
      COM .OV 
      COM .UN 
      COM BLNS
      COM TW10
      COM .1000 
      COM BIT15 
      COM .E
      COM .B(2) 
      COM RC(5) 
      COM NAMI
      COM NAME(40)
      COM IOBF(63B) 
      COM PBUF(72B) 
*************************** 
* 
A     EQU 0 
B     EQU 1 
DATA  DEF *+1 
*     ...1
      DEC 1,2,3,4,5,6,7 
*     .12 
      DEC 12,13,14,15,16,17 
*     ..M1
      DEC -1,-2,-3,-4,-5,-6 
*     L 
      OCT 50,51,52,53,54,55,56   ( ) * + , - .
*     .9
      DEC 9 
*     .29 
      DEC 29        (35B) 
*     .M8 
      DEC -8
*     .M15
      DEC -15 
*     .M29
      DEC -29 
*     BLNK
      OCT 40        LOWER BLANK,UPPER 0 (=40B)
*     .IL 
      ASC 1,IL
*     .MBLN 
      ASC 1,M 
*     .NO 
      ASC 1,NO
*     .OP 
      ASC 1,OP
*     .OV 
      ASC 1,OV
*     .UN 
      ASC 1,UN
*     BLNS
      ASC 1,
*     TW10
      OCT 176000    ADDRESS MASK
*     .1000 
      OCT 1000
*     BIT15 
      OCT 100000
*     .E
      OCT 105 
*     .B
      OCT 102 
      DEF RC        ADR OF RC 
*     RC
      ASC 5,E R B C X 
.1    EQU ...1
*     NAMI
      DEF NAME      LOC'N FOR TEMP SYMBOL STORAGE 
*     NAME
      OCT 0,0,0,0   OPLK USAGE
DATAE DEF * 
#     EQU TEMP      SAME AS DATA ORIGIN 
.4    EQU TEMP+10 
PASS  EQU #+115B    PASS FLAG(0=PASS 1  AND 1=PASS2)
PLCN  EQU #+117B    PROGRAM LOCATION COUNTER
PLEN  EQU #+120B    LIT LENGTH PASS 1/LIT ORG PASS 2
PNTR  EQU #+121B    POINTS AT LAST OR CURRENT CHAR. 
*             * I/O STATEMENT BUFFER *
*             *(INPUXFFER(BUFF) STARTS IN 11TH WORD)* 
BUFF  EQU IOBF+12B
* 
CON   DEF *+1 
*     PBUF
      OCT 10400,20000,0  START OF PUNCH BUFR(NAM FMT) 
      ASC 3,
      OCT 0,0,0,0,143,0,0,0,0,0,0 
ASMB0 OCT 5757      FOR ASMB CHECK
ATEMP DEF TEMP+7
CNT   DEC -17 
APBUF DEF PBUF
LSIZE DEC 64
.M2   EQU TEMP+21 
* 
* 
ASMBD LDB DATA      ADR OF COMMON - INITIALIZE
      LDA B,I       COMMON BY MOVING A BLOCK OF 
      STA ATEMP,I   DATA INTO IT
      ISZ ATEMP 
      INB 
      CPB DATAE 
      RSS 
      JMP *-6 
* 
      LDB APBUF 
      LDA CON,I 
      STA B,I 
      INB 
      ISZ CON 
      ISZ CNT 
      JMP *-5 
      CLA           EXTRA WORD FOR BUFFER OVERFLOW
      STA PBUF+60 
* 
OPIN  JSB OPEN      OPEN SOURCE FILE
      DEF *+7 
      DEF DCBI      INPUT DCB 
      DEF ?ERR      ERROR WORD
      DEF AI+1      NAME FROM GTFIL 
      DEF OPTNI     OPEN OPTIONS
      DEF AI+5      SECURITY CODE 
      DEF AI        CR #
      SSA,RSS       TEST FOR OPEN ERRORS
      JMP CRLST     NO ERRORS 
      JSB ?FMPE     FMP ERROR ROUTINE 
      DEF AI+1
* 
CRLST LDA LSTLU     IS LIST FILE AN LU? 
      SZA 
      JMP OPLST     YES, THEN DO NOT CREATE IT
      JSB CREAT     CREATE LIST FILE
      DEF *+8 
      DEF DCBL      LIST FILE DCB 
      DEF ?ERR      ERROR WORD
      DEF AL+1      LIST FILE NAME
      DEF LSIZE     SIZE OF LIST FILE 
      DEF .4        TYPE OF LIST FILE 
      DEF AL+5      SECURITY CODE 
      DEF AL        DRN OR -LU# 
      SSA,RSS       ERRORS? 
      JMP OPLST     NO
      CPA .M2       DUPLICATE FILE NAME?
      JMP OPLST     YES THEN OPEN FILE
      JSB ?FMPE     FMP ERROR ROUTINE 
      DEF AL+1      LIST FILE NAME
      JMP CRLST     CREATE FILE AGAIN 
OPLST JSB OPEN      OPEN LIST FILE
      DEF *+7 
      DEF DCBL      LIST DCB
      DEF ?ERR      ERROR CODE
      DEF AL+1      NAME FROM GTFIL 
      DEF OPTNL     OPTION WORD 
      DEF AL+5      SECURITY CODE 
      DEF AL        CR #
      SSA,RSS       ERRORS? 
      JMP ASMD1     NO
      JSB ?FMPE     YES 
      DEF AL+1      LIST FILE NAME
* 
ASMD1 LDA ?ICSA 
      CMA,INA 
      STA ?LSTL 
      CLA 
      STA PASS      SET PASS FLAG=0 (PASS 1)
      JSB ?RSTA     READ AND PRINT CONTROL STATEMENT
* 
*             * TEST FOR 'ASMB' IN FIRST 4 POSITIONS *
* 
      LDA BUFF
      CMA,INA 
      ADA BUFF+1
      CPA ASMB0     =5757B (I.E. =ASMB?)
      JMP COPS      YES 
* 
*             * CONTROL STATEMENT ERROR ROUTINE * 
* 
CSER  LDA .CS       'CONTROL' STATEMENT'ERROR 
      LDB .CS+1 
      JSB ?MESX     PRINT MESSAGE 
      JMP ?ASMB     ASSEMBLER EXIT
* 
*             * TEST FOR CONTROL OPTIONS (A,B,C,F,L,N,R,T,X,Z) *
* 
COPS  LDA .1+4      (5) 
      STA PNTR      SET PNTR = 5
      CLA           INITIALIZE
      STA XFOPT       X OR F OPTION COUNT 
COPUP JSB ?PKUP     GET NEXT CHARACTER
      CPA BLNK      DONE ?
      JMP G          YES
      SZA,RSS       CHAR=0? 
      JMP G          YES, 0K
      CPA L+4       COMMA?
      RSS           -YES- 
      JMP CSER      -NO- ERROR
      JSB ?BPKU     SKIP BLANKS 
      LDB ?FLGS     LOC'N OF CONTROL CHAR SET 
      CPA .B        =B? 
      JMP BCON1     YES, IGNORE IT, READ NEXT CHAR
      CPA .L        =L? (LIST)
      JMP BCON       YES
      CPA .R        =R? (RELOC.-NOT NECESSARY)
      ADB ...1       YES
      CPA .T        =T? (SYMBOL TABLE PRINT)
      ADB ...1+1     YES
      CPA .N        IS IT FOR IFN?
      ADB ...1+2     YES
      CPA .Z        IS  IT FOR  IFZ?
      ADB .1+2       YES
      CPA .A        =A? (ABSOLUTE ASSEMBLY?)
      ADB .1+3       YES
      CPA .C        =C? (CROSS REF. TABLE?) 
      ADB .1+4       YES
      CPB ?FLGS     SKIP IF ANY OPTION FOUND
      JMP XTST      NO NICE MATCH SO FAR
BCON  STA 1,I       SET OPTION FLAG 
BCON1 ISZ PNTR      BUMP PNTR FOR NEXT CHAR.
      JMP COPUP     GO FOR NEXT OPTION
.L    OCT 114       ASCII 'L' 
.N    OCT 116             'N' 
.R    OCT 122             'R' 
.T    OCT 124             'T' 
.Z    OCT 132             'Z' 
.A    OCT 101             'A' 
.C    OCT 103             'C' 
.X    OCT 130             'X' 
.F    OCT 106             'F' 
XFOPT DEC 0         'X' OR 'F' OPTION COUNT 
CNTX  DEC -12       LENGTH OF FLOATING POINT OPCODE ENTRIES 
DESTN DEF ?FP       LOC'N OF HDWE. 'FIX/FLT' OPCODES
AS.FI OCT 43111     ASCII 'FI' TO ENABLE 'FIX/FLT' OPCODES
DESLO DEF ?FPT      LOC'N OF FLOATING POINT OPCODE ENTRIES
* 
MVLC  DEF *+1 FLOATING POINT OPCODE TBL. VALUES 
* 
*                         ****** FAD ******* ****** FDV ******* 
      OCT 43101,42026,105000,43104,53026,105060 
* 
*                         ****** FMP ******* ****** FSB ******* 
      OCT 43115,50026,105040,43123,41026,105020 
* 
*                           * END OF FLOATING POINT ENTRIES * 
* 
      SKP 
CS.CK NOP 
      LDA XFOPT     LOAD A WITH OPTION FLAG 
      SZA           SKIP IF FLAG 0
      JMP CSER      IF 1 PRINT CS ERROR 
      INA           INCREMENT VALUE OF FLAG 
      STA XFOPT     SAVE IN FLAG POSITION 
      JMP CS.CK,I   RETURN
* 
FMOVE JSB CS.CK     GO CHECK LEGAL OPTION 
      LDB DESTN     LOAD B WITH TABLE POINTER 
      RBL,CLE,SLB,ERB  CLEAR INDIRECT BIT, IF ANY.
      LDB B,I       PUT POINTER ADDR. IN B
      LDA AS.FI     LOAD A WITH ASCII "FI"
      STA B,I       STORE IN FIX PART OF TABLE
      LDB DESLO     LOAD B WITH SECOND TABLE POINTER
      RBL,CLE,SLB,ERB  CLEAR INDIRECT BIT, IF ANY.
      LDB B,I       PUT POINTER ADDR. IN B
TMOV2 LDA MVLC,I    LOAD FIRST WORD 
      STA B,I       STORE IN TABLE
      ISZ MVLC      INCREMENT TO NEXT WORD
      INB           INCREMENT POINTER 
      ISZ CNTX      INCREMENT COUNT, SKIP IF 0
      JMP TMOV2     RETURN FOR NEXT WORD
      JMP BCON+1    RETURN
* 
XTST  CPA .F        IS OPTION =F
      JMP FMOVE     YES, GO CHANGE TABLE
      CPA .X        IS OPTION =X
      JMP TMOVE     YES, GO CHANGE TABLE
      JMP CSER      NO, PRINT CONTROL STATEMENT ERROR!
TMOVE JSB CS.CK     CHECK IF F BEFORE 
      LDB DESLC     MOVE N-EAU OPCODE VALUES
      RBL,CLE,SLB,ERB  CLEAR INDIRECT BIT, IF ANY.
      LDB B,I       PUT POINTER ADDRESS IN B
TMOV1 LDA MOVLC,I   OPCODE TABLE IN ASMB..
      RAL,CLE,SLA,ERA  CLEAR INDIRECT BIT, IF ANY.
      LDA A,I          GET DIRECT ADDRESS.
      STA B,I       STORE NEW VALUE INTO OPCODE TBL.
      ISZ MOVLC 
      INB           BUMP TABLE POINTER
      ISZ COUNX     IS TABLE ALL MOVED? 
      JMP TMOV1      NO,  GO MOVE ANOTHER WORD. 
      JMP BCON+1
COUNX DEC -13       LENGTH OF NEW TABLE 
DESLC DEF ?NEAU     LOCATION OF OPCODE VALUE DESTIN.
* 
MOVLC DEF *+1       NON-EAU OPCODE VALUES FOR TABLE.
      OCT 42111,53006    DIV
      DEF ?HA38 
      OCT 42114,42006    DLD
      DEF ?HA38 
      OCT 42123,52006    DST
      DEF ?HA38 
      OCT 46520,54406    MPY
      DEF ?HA38 
      OCT 0         END OF NEW TABLE
*             * TEST FOR COMPATABILITY AMONG THE OPTIONS *
* 
G     LDB ?AFLG 
      LDA ?RFLG 
      SZB,RSS      'A' SET? 
      JMP *+3       NO
      SZA           YES-IS 'R' SET? 
      JMP CSER      YES - CONTROL CONFLICT
      LDA ?X        GET FWA OF AVAILABLE CORE 
      SZB           'A' SET?
      LDA ?Z        YES - GET FWA FOR ABS. ASSMBLY. 
      CMA,INA 
      ADA ?LWA      LWA-FWA AVAIL MEM. IN A 
      INA           A NOW = SYMBOL TBL LENGTH 
* 
*             * CLEAR SYMBOL TABLE *
* 
      CCE           E=1 
      SZB           ABS. ASSY?
      CLE           YES - E=0 
      LDB ?Z        GET FWA OF ABSOL ASSY.
      SEZ           SKIP IF ABS. ASSY.
      LDB ?X        FWA OF SYM TBL TO 'B' 
      STB ?NDSY     SET ADDRESS OF END OF SYMBOL TABLE
      JSB ?SETM 
      NOP           SET SYMBOL TABLE TO ZERO
*             ********************* 
*             * START PASS 1 HERE * 
*             ********************* 
      CLA            NO 
      STA ?XRFI     SET XREF INPUT FLAG...
      LDA TW10
      STA ?ASM1     SET FLAG FOR 'INIT' PROCESSING
      CLA 
      STA PASS      SET PASS FLAG FOR PASS 1
      STA PLCN      INITIALIZE PROG LOC'N COUNTER 
      STA PLEN      CLEAR LITERAL LENGTH FLAG 
      LDA EXTLN     GET LENGTH OF NAM EXTENSION AREA. 
      LDB EXTAD     GET FWA OF NAM EXTENSION. 
      JSB ?SETM     GO SET BLANKS INTO THE AREA.
      OCT 20040     DUAL ASCII BLANKS.
      LDA OUTLU     CREATE AND OPEN OUTPUT FILES
      SZA           IS OUTPUT FILE AN LU? 
      JMP OPOUT     YES, THEN DONT CREATE JUST OPEN 
      LDB .7        FILE TYPE FOR ABSOLUTE FILE 
      LDA ?AFLG     ABSOLUTE OR RELOCATABLE OUTPUT? 
      SZA,RSS 
      LDB .5        RELOCATABLE OUTPUT FILE TYPE
      STB FLTYP 
      JSB CREAT     CREATE OUTPUT FILE
      DEF *+8 
      DEF DCBO      OUTPUT FILE DCB 
      DEF ?ERR      ERROR WORD
      DEF AO+1      OUTPUT FILE NAME
      DEF .20       FILE SIZE 
      DEF FLTYP     FILE TYPE 
      DEF AO+5      SECURITY CODE 
      DEF AO        DRN OR -LU
      SSA,RSS       ERRORS? 
      JMP OPOUT     NO, THEN OPEN FILE
      CPA .M2       DUPLICATE FILE NAME?
      JMP OPOUT     YES, OPEN EXISTING FILE 
      JSB ?FMPE     FMP ERROR ROUTINE 
      DEF AO+1      FILE NAME 
* 
OPOUT JSB OPEN      OPEN OUTPUT FILE
      DEF *+7 
      DEF DCBO      OUTPUT FILE DCB 
      DEF ?ERR      ERROR WORD
      DEF AO+1      OUTPUT FILE NAME
      DEF OPTNO     OPTION WORD 
      DEF AO+5      SECURITY CODE 
      DEF AO        DRN OR -LU
      SSA,RSS       ERRORS? 
      JMP SGLD      NO, LOAD NEXT SEGMENT 
      JSB ?FMPE     FMP ERROR ROUTINE 
      DEF AO+1      FILE NAME 
* 
SGLD  LDA ABSA      SEG. CALL FOR ABSOLUTE
      LDB ?AFLG     GET ABSOLUTE-ASSEMBLY FLAG. 
      SZB,RSS       ABS. ASSY? - SKIP IF TRUE.
      LDA *+2       PICK UP CODE FOR ASMB1
      JMP ?SEGM     GO TO LOAD THE NEXT SEGMENT 
      ASC 1,1       ASCII '1 ' FOR RELOC. ASSEMBLY-'ASMB1'
ABSA  ASC 1,3       ASCII '3 ' FOR ABS. ASSEMBLY-'ASMB3'
.CS   ASC 2,CS      ASCII 'CS' FOR CONTROL STMT. ERROR MSG. 
.20   DEC 20
.5    EQU TEMP+11 
.7    EQU TEMP+13 
FLTYP NOP 
EXTAD DEF PBUF+17   FWA OF NAM EXTENSION AREA.
EXTLN EQU L+4       (54B) LENGTH OF NAM EXTENSION AREA. 
* 
      END ASMBD 
                                                                                                                              