ASMB,R,L,C HED ** RTE-M ASMB - SEGMENT 3 ** * * * 9/29/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 : ASMB3 * SOURCE: 92064-18130 * RELOC : 92064-16043 * PRGMR : C.H., H.C., S.K. * NAM ASMB3,5,99 92064-16043 REV.1650 761001 SUP * ENT ASMB3,?INS? * EXT ?BPKU,?RSTA,?PKUP,?SYMK,?CHOP,?ENDS EXT ?MSYS,?ASMB,?SEGM,?ERPR,?X EXT ?MOVE,?TFLG,?CHPI EXT ?V,?ASM1,?BNCN,?PRNT,?NDOP EXT ?NDSY,?OPER,?OPLK,?POSN * COM TEMP(322B) ********************************* * # EQU TEMP SAME AS DATA ORIGIN VAL0 EQU TEMP+1 'ASCN' AND 'SYMK' DCNT EQU TEMP+4 ...1 EQU TEMP+7 .1 EQU ...1 .4 EQU TEMP+10 .7 EQU TEMP+13 .12 EQU .1+7 ..M1 EQU .12+6 .M2 EQU TEMP+21 L EQU ..M1+6 .9 EQU #+41B .29 EQU #+42B .M8 EQU #+43B .M29 EQU #+45B BLNK EQU #+46B =40B(LOWER BLANK) .IL EQU #+47B .MBLN EQU #+50B .NO EQU #+51B BLNS EQU #+55B .E EQU #+61B NAMI EQU #+71B LOC'N FOR TEMP SYMBOL STORAGE NAME EQU #+72B FOR USE BY 'OPLK' SUMP EQU #+100B RUNNING SUM FOR 'CHOP' CNTB EQU #+106B CODE EQU #+107B OPCODE TYPE(FROM OPTABLE) INST EQU #+113B OPCODE FORMAT PLCN EQU #+117B PROGRAM LOCATION COUNTER PNTR EQU #+121B POINTS AT LAST OR CURRENT CHAR. SCN1 EQU #+125B STATE LNG/OPCODE/OPERAND/LABEL(4) SYMI EQU #+132B ADDR CNTR FOR SYMBOL TBL (SYMK) SYMP EQU #+133B SYMBOL LNG/ AND LOC'N ENTV EQU #+141B * * I/O STATEMENT BUFFER * IOBF EQU #+142B 50 WORDS + END OF STATEMENT BUFF * * INPUT BUFFER 'BUFF' STARTS IN 11TH WORD * BUFF EQU IOBF+12B PBUF EQU #+225B SAVES THE 'NAM' RECORD INFO BPKUP EQU ?BPKU CHOPI EQU ?CHPI ERPR EQU ?ERPR MOVE EQU ?MOVE MSYMS EQU ?MSYS PKUP EQU ?PKUP RSTA EQU ?RSTA X EQU ?X SPC 3 * * ASMB3 JSB RSTA LDA CODE CPA .12+3 'HED' STATE? JMP IXH YES STA ?ASM1 CLEAR 'CS' AND 'INIT' FLAGS LDB .2000 STB PLCN INITIALIZE PROGRAM COUNTER CPA .1 IS OPCODE AN ORG? JMP HI12 LDA .NO 'NO'= NO ORG STATEMENT JSB ERPR JMP HA32+1 IXH JSB INST,I GO TO HEDSB JMP ASMB3 HI12 JSB ?CHOP PROCESS AN ORIGIN VALUE JMP HA32+1 ERROR RETURN STB PLCN SET INITIAL COUNTER VALUE JMP HA32 GO TO START PASS 1 * SKP HA32 JSB RSTA GO TO GET NEXT STATEMENT. LDA CODE GET OPCODE IDENTIFIER. CPA .12 IS IT THE 'END' STATEMENT ? JMP HB00 YES, GO TO THE 'END PROCESSOR. CPA BLNK (40B) SUP/UNS? JMP HA32 IGNORE-PASS #1. CPA .32B REPLACEMENT CODE ? JMP HA63 YES * ERROR * CPA .100B USER MICROCODE ('MIC')? JMP MIC YES, GO PROCESS. ADA ..M1+2 -3 SSA JMP HA64 ORR OR ORG FOUND CPA .12B NAM? JMP HA63 YES, ERROR ADA ..M1+2 (-3) SSA 'COM','ENT' OR 'EXT' ? JMP HA63 YES - ERROR CPA ...1+4 'EQU'? JMP HA56 TO EQU CPA .9 (11B) HED? JMP HA32 IGNORE-PASS #1. CPA .12 (14B) SKP? JMP HA32 IGNORE-PASS #1. CPA .12+1 IGNORE-PASS #1. JMP HA32 IGNORE-PASS #1. CPA .12+2 (16B) LST/UNL? JMP HA32 IGNORE-PASS #1. * * * TEST FOR LABEL FIELD LDA SCN1+3 GET LABEL LENGTH SZA,RSS LABEL PRESENT ? JMP HALB NO, DONE STA SYMP SET CHAR COUNT LDB FFUB STB SYMP+1 SET LABEL ADDR. CLA SET A=0 FOR ABSOLUTE VALUE LDB PLCN JSB INSR INSERT LABEL INTO SYMBOL TABLE NOP ERROR EXIT HALB LDA CODE OPCODE INDICATOR CPA DEX JMP HA40 IT'S A 'DEX' CPA BYT IS IT A 'BYT'? JMP HA40 YES, GO PROCESS. CPA .29 REP? JMP HA64 YES CPA ...1+6 (7) JMP HA54 TO ASC CPA .26B INTEGER ARITH(HARDWARE)? JMP HA70 YES.... CPA ...1+5 (6) ARITH MACRO? JMP HA63 YES, ERROR ADA .M10 -10 SSA OCT OR DEC? JMP HA40 YES. SZA,RSS BSS? JMP HA3M TO BSS PROC. LDA CODE GET OPCODE I.D. NUMBER. ADA M100B SUBTRACT 100 OCTAL SSA,RSS CODE <100B ? JMP XMIC NO, IT'S A MICROCODE MACRO. HA3B CLA,INA TO ADD 1 TO PLCN * * * INCREMENT PROGRAM LOCN. CNTR. * HA3Z ADA PLCN (HA3B+1) STA PLCN JMP HA32 .26B OCT 26 FOR HARDWARE ARITHMETIC .32B OCT 32 RPL CODE. SPC 1 * * PROCESS BSS * HA3M JSB CHOPI EVAL.OPERAND JMP HA32 ERROR LDA 1 B TO A JMP HA3Z * .12B OCT 12 .M10 DEC -10 .100B OCT 100 M100B OCT -100 DEX OCT 25 OP TYPE FOR 'DEX' BYT OCT 43 OPCODE I.D. NO. FOR 'BYT' * SKP * ************************************************* * * INSR: ADD ENTRY TO THE SYMBOL TABLE, W HACCOU * * * LINKAGE: B = VALUE ON INPUT * * * (OUTPUT) SYMP=NO.OF CHARS., SYMN=ENTRY FWA * * * L JSB INSR,I * * * L+1 ERROR RETN ('SO' OR 'DD'PRNTD)* * * L+2 NORMAL RETN * * ************************************************* .DD ASC 2,DDSO INSR NOP STB NAME+3 SAVE VALUE JSB ?SYMK SYMBOL TABLE LOOKUP JMP INS1 LDA .DD NO, 'DD' ERROR (MULTIPLE SYMBOL) INSX JSB ERPR JMP INSR,I GET OUT HERE INS1 LDB NAMI ADB TEMP+2 STB VAL0 SET LIMIT LDA ?NDOP GET LWA AVAIL. MEM. CMA,INA ADA SYMI TEST FOR SYMBOL TBL ADA TEMP+2 OVERFLOW SSA JMP *+3 NO LDA .DD+1 'SO' SYMBOL TABLE OVERFLOW JMP INSX GO TO PRINT ERROR MESSAGE. LDA NAME+3 MOVE VALUE STA 1,I UP LDA NAMI LDB 0,I ADD ENTRY (FROM *+6) STB SYMI,I TO SYMBOL CPA VAL0 JMP INSEX EXIT INA ISZ SYMI JMP *-6 INSEX LDB SYMI STB ?NDSY SET NEW END OF SYMBOL TABLE. ISZ INSR BUMP EXIT POINT FOR A+2 EXIT JMP INSR,I EXIT HERE HA63 LDA .IL ILLEGAL OPCODE: ABS. ASSEMBLIES ! JMP HA55+2 TO ERPR * SKP * *********************** * * PROCESS OCT AND DEC * * *********************** HA40 CLB,INB B=1 CPA DEX CHECK CODE FOR 'DEX' ADB .1+1 B=3 IF CODE IS 'DEX' STB DCNT SET LOCN COUNT BUMPER CLA STA CNTB STA TEMP LDA SCN1+2 STA PNTR SET POINTER * * * PICK UP AND EXAMINE A CHARACTER * HA41 JSB PKUP (HA40+4 WAS HA41) LDB DCNT GET COUNT BUMPER CPA L+4 COMMA? JMP HA44 YES, GO SCAN FOR NEXT PARAM. CPB .1+2 IS IT=3(I.E. DEX)? JMP HA42 YES CPA L+6 PERIOD? JMP HA48 YES CPA .E 'E' ? JMP HA48 HA42 CPA BLNK END OF STATEMENT? JMP HA49 YES JMP HA41 * * * RESET FLT PT FLAG, SKIP BLANKS FOR NEXT CHAR * HA44 CLA STA TEMP JSB BPKUP LDB DCNT GET 'BUMP' COUNT JMP HA48+4 * * * FLT PT TEST FOR NUMBER USING BOTH . AND E * HA48 LDA TEMP ISZ TEMP SZA E OR '.' COUNTED YET? CLB YES, SET B=0. * ADB CNTB (HA48+4) STB CNTB ADD TO WORD COUNT JMP HA41 * * * END OF NUMERIC PSEUDO-OP PROCESSOR * HA49 LDA DCNT ADA CNTB SET A=NO OF LOCNS TO BE USED LDB CODE GET OPCODE I.D. NUMBER. CLE PREPARE FOR REMAINDER TEST. CPB BYT BYTE? ERA YES, DIVIDE BY 2 SEZ ODD BYTE REMAINING ? INA YES, ADD 1 TO WORD COUNT. JMP HA3Z EXIT SKP * ******************************** * * PROCESS ASC (GET VALUE OF N) * * ******************************** HA54 LDA ...1+1 (2) 'ASC' INDIC.FOR CHOP JSB ?CHOP JMP HA3B * ERROR * SZA JMP HA55 * ERROR-NOT ABS.VAL. SZB,RSS ZERO WORD COUNT ? JMP HA55 YES, * ERROR * ADB .M29 -29 LDA SUMP SSB SKIP IF >28 WORDS JMP HA3Z HA55 ISZ PLCN * ERROR EXIT * LDA .MBLN 'M' ERROR(BAD OPERAND) JSB ERPR TO PRINT ERROR DIAG. JMP HA32 * ********************** * * PROCESS EQU PSEUDO * * ********************** HA56 JSB CHOPI EVALUATE OPERAND JMP HA32 *ERROR* CPA ...1+3 (4) EXT ? LDA ...1+4 (5) SET FOR NON-PNCH EXT STA TEMP NO STB TEMP+1 CLB,INB JSB MSYMS GO TO MEAS.SYMBOL, SET SYMP/SYMN LDA TEMP LDB TEMP+1 * * * SEND LABEL TO TABLE * JSB INSR TO SYMBOL TABLE INSERTION RTN NOP JMP HA32 * ****************************** * * ORG ORR REP PROC.JUMPS * * ****************************** HA64 JSB INST,I GO TO SUBROUTINE JMP HA32 HA70 LDA .1+1 A=2 JMP HA3Z * SKP * ************************ * * PASS 1 END PROCESSOR * * ************************ DEF BUFF HB00 LDA ?TFLG GET TABLE OUTPUT FLAG SZA,RSS JMP HB08 TABLE NOT REQUESTED - FINISH PASS LDA HB00-1 ADA .1+3 STA HB00-1 SET HB00-1 = L(BUFF+4) LDA X GET FWA OF AVAILABLE MEMORY STA ENTV TO ENTV HBX LDA ENTV,I TEST 1ST WORD OF ENTRY SZA,RSS COMPLETED? JMP HB08 YES - GO TO FINISH PASS 1 LDB ENTV GET TBL ENTRY LOCATION CMB,INB * * SEND ADDR. TO MOVE LINKAGE STB HMOV5 * * MOVE BLANKS TO BUFFER LDB BLNS STB BUFF STB BUFF+1 STB BUFF+2 STB BUFF+3 LDB FFUB ADDR. OF BUFF TO B SPC 1 * * MOVE CHARS FROM SYMBOL TABLE * ALF AND ...1+6 (7) FOR NO.OF WRDS. STA SUMP CPA ...1+1 (2) CLA IOR ...1 JSB MOVE HMOV5 NOP * * * GET VALUE OF SYMBOL * LDB SUMP (NO.OF WORDS IN ENTRY) ADB ..M1 ADB ENTV STB ENTV LDA 1,I ISZ ENTV CLE SET E = 0 FOR OCTAL CONV. JSB ?BNCN * * STORE ASCI VALUE INTO BUFF LDB HB00-1 GET L(BUFF+4) JSB ?V LDB FFUB SET PRINT PARAMETERS LDA .12+2 (14) JSB ?PRNT GO TO PRINT JMP HBX ENTRY DONE. * * SKP * * ERRORS PRINTED * HB08 JSB ?ENDS GO TO END PASS PROCESSOR SPC 1 * ******************************** * * START 'ABSOLUTE' PASS 2 HERE * * ******************************** SPC 1 * JSB ?POSN POSITION SOURCE FILE TO BEGINNING * LDA *+2 PICK UP ENT CODE TO GET ASMB5 JMP ?SEGM GO TO LOADER FOR NEXT SEGMENT ASC 1,4 * .2000 OCT 2000 FFUB DEF BUFF * SKP * ******************************************************** * * PROCESS EXTENDED INSTRUCTION SET AND USER MICROCODES * * ******************************************************** * XMIC STA B CODE-100B NOW IN B LDA .1+1 SET A=2 CPB .12 TYPE 114B? INA YES, A=3 CPB .12+1 TYPE 115B? INA YES, A=3 ADB .M8 SSB,RSS USER CODE? (101B THRU 107B) JMP HA3Z NO, USE VALUE IN A FOR PLCN BUMP ADB .1+6 ADA B A = MACRO INSTRUCTION COUNT. JMP HA3Z * ********************************************************** * * PROCESS A 'MIC' PSEUDO OPERATION (I.E. USER MICROCODE) * * * FORMAT: MIC MMM,CCC,N * * * WHERE * * * MMM = USER DESIGNATED MNEMONIC (ALL ALPHABETIC) * * * CCC = USER DESIGNATED FUNCTION CODE (0 TO 177777B) * * * N = NUMBER OF PARAMETERS IN USER OPERAND * * ********************************************************** * MIC LDA SCN1+2 STA PNTR MOVE POINTER TO OPERAND JSB ?OPLK CHECK FOR DUPLICATE MNEMONIC JMP MIC01 GOOD - MNEMONIC NOT FOUND MICOP JSB ?OPER ERROR IN OPERAND ('M' TERM) STA CODE -SET CODE NOT = 100B JMP HA32 GO GET NEXT INSTRUCTION * MIC01 LDA TEMP+5 * * SAVE USER MNEMONIC HERE * * STA SCODE SAVE 1ST 2 CHARS. LDA TEMP+6 STA MTEMP SAVE LAST CHARACTER * * * TEST 3 CHARACTERS FOR ALPHA ONLY MNEMONIC * LDA ..M1+2 STA TEMP MIC04 JSB PKUP PICK UP A CHARACTER CMA,INA ADA .100B SSA,RSS LESS THAN LETTER A? JMP MICOP YES - NON-ALPHA ADA .32B SSA GREATER THAN LETTER Z? JMP MICOP YES - NON-ALPHA ISZ TEMP LAST CHARACTER TESTED? JMP MIC04 NO - GO GET NEXT ONE LDA .21B STA CODE SET CODE 'ABS' TO FOOL CHOP RTN. LDA .1+1 SET FOR COMMA STOP IN CHOP JSB VMIC PICK UP MICRO CODE AND TEST PART STA INST SAVE USER FUNCTION CODE * CLA SET FOR NO COMMA STOP IN CHOP JSB VMIC GET VALUE OF N SSB IS VALUE OF N POSITIVE JMP MICOP NO - ERROR ADB .M8 SSB,RSS IS N GREATER THAN 7? JMP MICOP YES - ERROR ADA .100B CPA .100B WILL CODE BE 100B? LDA .30B YES - NO PARAMS. THUS IT'S =30B STA CODE SAVE CODE FOR OPTABLE ENTRY * * **************************************************** * * ENTER NEW OPCODE INTO SUPPLEMENTARY OPCODE TABLE * * **************************************************** * LDA ?NDOP GET ORG OF SUPPL. OPCODE TABLE ADA ..M1+2 SET NEW ORIGIN STA B CMB,INB START TEST FOR OVERFLOW ADB ?NDSY SSB OPTABLE OVERFLOW? JMP MIC10 NO LDA .SO YES - PRINT 'SO' ERROR JSB ERPR JMP HA32 GO FOR NEXT STATEMENT * MIC10 STA ?NDOP SET NEW OPTABLE ORIGIN LDB SCODE STB A,I STORE 1ST 2 CHARS. INA LDB MTEMP GET 3RD CHAR. ADB CODE INSERT CODE STB A,I STORE IT INTO THE TABLE INA LDB INST STB A,I STORE THE MICROCODE (FUNCTION) JMP HA32 GO FOR NEXT STATEMENT * SKP * ********************************************************** * * VMIC CHECKS FOR COMMAS, NUMERICS, AND TYPE OF OUTPUT * * * FROM OPERAND PROCESSOR (MICROCODE AND # OF PARAMETERS * * ********************************************************** * VMIC NOP STA CTM SAVE CHOP INPUT PARAMETER JSB PKUP PICK UP A CHAR. CPA L+4 IS IT A COMMA? RSS YES JMP MICOP NO - ERROR JSB BPKUP SKIP OVER FOLLOWING BLANKS STB SCN1+2 SET OPERAND PNTR TO NEXT PARAM. LDA CTM JSB ?CHOP EVALUATE THE PARAMETER JMP HA32 ERROR - GO TO NEXT SOURCE STATE. SZA ABSOLUTE VALUE? JMP MICOP ERROR - NO LDA SUMP VALUE IN BOTH A AND B ON EXIT JMP VMIC,I RETURN * CTM NOP SAVE A FOR CHOP ENTRY .21B EQU .12+5 (21B) .30B OCT 30 SCODE NOP SAVE 1ST 2 NMEMONIC CHARS. MTEMP NOP SAVE 3RD CHAR. A EQU 0 B EQU 1 .SO ASC 1,SO * SPC 1 ?INS? EQU INSR SPC 1 END ASMB3