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- =-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 =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 = 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