ASMB,R,L,C HED SCGN2 91700-16140 REV.A 760216 * (C) HEWLETT-PACKARD CO. 1976 * NAM SCGN2,5 91700-16140 REV.A 760216 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. 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. * ****************************************************************** SPC 1 ****************************************************** * *SCGN2 SUBORDINATE LOADER CONTROL * *SOURCE PART # 91700-18140 REV.A * *REL PART # 91700-16140 REV.A * *WRITTEN BY: LARRY POMATTO-JACK COOLEY * *DATE WRITTEN: 9-24-74 * *MODIFIED BY: K. HAHN [ C.C.H.] * *DATE MODIFIED: 12-02-75 [02-16-76] * *MODIFICATION: ADD CURRENT PAGE LINKING, MAP ALL, & *COMMENTS * [ FIX INDIRECT EXTERNAL REF. & ADD BYTE ADDRESSING ] * [ FIX C.P. LINK PROCESSING, ADD ECHO ON/OFF COMMAND] * [ ADD EXTENDED-NAM PRINTOUT ] ****************************************************** * * THE TERM RTS/2100 IS SYNONYMOUS WITH RTE-C AND * THE TERMS ARE USED INTERCHANGEABLY THROUGHOUT * THIS DOCUMENT * * * ENTRY POINT NAMES * ENT LSWAP,LOAD ENT NBUF9,CPLEN * * EXTERNAL REFERENCE NAMES * EXT PNAME,PNAMA,PRAMS EXT SIZE,EFLAG,CPLMG,CPLML,#ECHO EXT .MEM.,.MEM1,.MEM2,.MEM3,.MEM4,.MEM5,.MEM6 EXT ?XFER,PLKS,ABRC1,LISTO,UEXFL EXT LST,LST1,LST2,LST3,LST4,LST5 EXT LOCC,BPLOC,RBTO,NAMR. EXT COMOR,RBTA EXT PRINT,PARSB EXT PACK$,LSTP,LSTI,SSTBL,PRMT,PUNCH EXT LOUT,SWAPR,PLK,RBIN,PLK1 EXT FERR,RLDCB,FCLOS,COML * A EQU 0 B EQU 1 SUP SPC 1 ************************************************************************ * * THESE ROUTINES ARE USED BOTH IN THE RTS LOADER ITSELF AND IN * THE RTS GENERATOR RTSGN. THESE ROUTINES,CALLED A SUBORDINATE * CONTROL MODULE, COMPRISE A COMMAND PROCESSOR FOR LOADER COMMANDS. * THIS MODULE IS CALLED AS IF IT WERE A SUBROUTINE WITH NO * PARAMETERS AND TWO RETURNS. THE (P+1) RETURN IS USED FOR ABNORMAL * TERMINATION CONDITIONS, WHILE THE (P+2) RETURN IS USED FOR NORMAL * RETURNS VIA THE END COMMAND.THE CALLING SEQUENCE IS AS FOLLOWS: * * JSB PRCMD * RETURN1 RELOCATION ABORTED RETURN * RETURN2 NORMAL RETURN * ******************************************************************** SPC 3 * NOTE!!!!!! * THIS BSS THAT FOLLOWS MUST BE THERE INORDER * TO INSURE THAT NO CODE IS OVERLAYED * FROM THE OTHER SEGMENT * BSS 310B SIZE DEFINED IN RTGEN SEGMENT SPC 4 * * HERE WHEN SEGEMENT IS FIRST LOADED * CONTROL IS PASSED BACK TO THE MAIN * VIA A SWAPR RETURN * LSWAP NOP * * NOTE THE FOLLOWING IS BECAUSE WE DO NOT HAVE * EXTERNALS WITH OFFSET * LDA MD5 GET LOOP COUNTER STA BLINE SAVE IN TEMP LOCATION LDB LSTAA GET ADDRESS OF WHERE LIST ROUTINE LOCATED LOOP LDA B HERE WE CHASE DOWN OUR OWN LDA A,I INDRECTS, AND ADD OUR OWN RAL,CLE,SLA,ERA JMP *-2 IOR BIT15 ADD IN OUR OWN INDIRECT STA B,I AND SAVE IT AGAIN INB ISZ BLINE DONE? JMP LOOP NO JMP SWAPR YES...RETURN SPC 1 BIT15 OCT 100000 LSTAA DEF *+1 LST1A DEF LST1 LST2A DEF LST2 LST3A DEF LST3 LST4A DEF LST4 LST5A DEF LST5 SKP * * RTS LOADER UTILITY SUBROUTINES * SPC 1 ***** * ** BLINE ** BLANK OUT THE PRINT LINE BUFFER (LBUF) * CALLING SEQUENCE: * * JSB BLINE * RETURN * ***** BSS 1 BLINE NOP LDA LBUFA STA BLINE-1 LDA MD60 LDB BLANK STB BLINE-1,I ISZ BLINE-1 INA,SZA JMP *-3 JMP BLINE,I ***** STMP1 NOP * ***** * ** DELIM ** ADVANCE POINTERS TO ASCII INPUT BUFFER PAST NEXT * DELIMETER. ACCEPTABLE DELIMITERS ARE A COMMA, ONE OR * MORE BLANKS, OR A COMMA IMBEDDED IN BLANKS. * CALLING SEQUENCE: * * JSB DELIM * RETURN1 NOTHING BUT BLANKS TO END OF LINE * RETURN2 DELIMETER FOUND * * NOTE: IF NO VALID DELIMITER IS FOUND (OR COMMA WITH NOTHING BUT * BLANKS TO THE END OF LINE) A DIRECT JUMP TO THE COMMAND * ERROR ROUTINE WILL RESULT. THUS CONTROL MAY NOT BE RETURNED ***** DELIM NOP JSB QGETC GET THE NEXT CHAR JMP DELIM,I END OF LINE , RETURN (P+1) LDB M2 INITIALIZE STB STMP1 COMMA COUNTER CPA B40 IS THIS A BLANK? JMP DEL01 YES CPA B54 NO, IS IT A COMMA? RSS JMP CMER NO, ERROR ISZ STMP1 DEL01 JSB NXTC GET NEXT NON BLANK CHAR JMP DEL02 END OF LINE CPA B54 GOT ONE, IS IT A COMMMA? RSS JMP DEL03 NO ISZ STMP1 YES, IS IT THE SECOND ONE? JMP DEL01 NO, GET NEXT NON BLANK CHARACTER DEL03 JSB BAKUP YES, BACK UP BUFFER POINTERS ISZ DELIM AND EXIT (P+2) JMP DELIM,I DEL02 ISZ STMP1 WAS THERE A COMMA? JMP DELIM,I NO, EXIT (P+1) JMP CMER YES, ERROR ***** * ** BAKUP ** BACK UP INPUT BUFFER (QIBUF) POINTERS BY ONE CHARACTER * CALLING SEQUENCE: * * JSB BAKUP * RETURN * ***** BAKUP NOP LDA QQCNT DECREMENT CHAR COUNT ADA M1 STA QQCNT LDB QQPTR SLA AND IF NECESSARY, ADB M1 DECREMENT POINTER STB QQPTR JMP BAKUP,I ***** * ** PRCMD ** MAIN ENTRY POINT FOR THE SUBORDINATE CONTROL MODULE. * CONTROL IS PASSED TO TYMOD OR NXTCM TO GET THE NEXT * COMMAND. THAT COMMAND IS PARSED, AND CONTROL IS PASSED * TO ITS ASSOCIATED PROCESSING ROUTINE. IF A FATAL ERROR * IS DETECTED, CONTROL IS RETURNED TO THE ROUTINE CALLING * PRCMD AT (P+1). THE ONLY OTHER EXIT IS VIA THE END * COMMAND (P+2). AFTER PROCESSING ANY OTHER COMMAND, * CONTROL RETURNS TO NXTCM TO PROCESS THE NEXT COMMAND. * ***** LOAD BSS 0 PRCMD NOP PROCESS RTE LOADER/2100 COMMANDS NXTCM JSB CMDIN GET NEXT COMMAND LINE LDA CTACN LDB CTABL JSB SCAN SCAN 1ST ELEMENT FOR MATCH JMP CMER COMMAND ERROR. ADA PTABL JUMP TO PROCESSOR LDA A,I JMP A,I * CMER1 DEF *+1 OCT 5 ASC 3,CMND? ***** * CONTROL COMES HERE ON DETECTING A COMMAND ERROR. THE MESSAGE * 'CMND?' IS OUTPUT, INPUT IS SWITCHED TO TTY, AND GET NEXT CMD. ***** CMER LDB CMER1 OUTPUT CMND? MESSAGE JSB DIAG JMP PRCMD+1 GET NEXT COMMAND FROM TTY SKP * *RTS LOADER TABLES * ***** * * BRANCH TABLE FOR COMMAND PROCESSORS. * ORDER OF THIS TABLE MUST CONFORM TO ORDER OF FIRST ENTRIES IN * COMMAND MNEMONIC TABLE. * ***** PTABL DEF * DEF BNDST BOUNDS STATEMENT DEF MAPST MAP STATEMENT DEF RELST RELOCATE STATEMENT DEF RELST REL STATEMENT DEF SERST SEARCH STATEMENT DEF NXTCM OUTPUT STATEMENTS IGNORED DEF DSPST DISPLAY STATEMENT DEF EOL END STATEMENT DEF SETST SET STATEMENT DEF LNKST LINKS STATEMENT DEF EXTST EXTERNALS INDIRECT/DIRECT STATEMENT DEF ECOST ECHO ON/OFF STATEMENT ***** * * COMMAND MNEMONIC TABLE * * BITS 15-8 # CHARS IN ASCII KEYWORD TABLE * BITS 7-0 OFFSET IN THAT TABLE (TO LOCATE ASCII WORDS) * * THE ORDER OF ENTRIES IN THIS TABLE IS USED IN DETERMINING THE * OFFSET ASSOCIATED WITH KEYWORDS. THUS ORDER IN THIS TABLE IS * OF PARAMOUNT IMPORTANCE. IF ANY KEYWORD IS EXACTLY THE SAME * AS THE BEGINNING OF A LONGER KEYWORD, THE LONGER KEYWORD MUST * APPEAR FIRST. (FOR EXAMPLE RELOCATE APPEARS BEFORE REL) * ***** CTACN ABS CTABS-CTABN NEG NBR ENTRIES IN TABLE CTABL DEF CTABS CTABS ABS 3000B+ABOUD-CMTBL BOUNDS ABS 1400B+AMAP-CMTBL MAP ABS 4000B+ARELC-CMTBL RELOCATE ABS 1400B+ARELC-CMTBL REL ABS 3000B+ASEAR-CMTBL SEARCH ABS 3000B+AOTPU-CMTBL OUTPUT ABS 3400B+ADISP-CMTBL DISPLAY ABS 1400B+AEND.-CMTBL END ABS 1400B+ASET.-CMTBL SET ABS 2400B+ALINK-CMTBL LINKS ABS 4400B+AEXT-CMTBL EXTERNALS ABS 2000B+AECHO-CMTBL ECHO CTABN EQU * KTABS ABS 2400B+AFWAB-CMTBL FWABP ABS 2400B+ALWAB-CMTBL LWABP ABS 2000B+AFWAM-CMTBL FWAM ABS 2000B+ALWAM-CMTBL LWAM ABS 2000B+AFWAC-CMTBL FWAC ABS 2000B+ALWAC-CMTBL LTABS ABS 2000B+ALOCC-CMTBL LOCC ABS 3000B+ABPLC-CMTBL BPLOCC ABS 2400B+AXFER-CMTBL ?XFER ABS 2400B+ATBLE-CMTBL TABLE ABS 3000B+AUNDE-CMTBL UNDEFS MTABS ABS 3400B+AMODS-CMTBL MODULES ABS 3400B+AGLOS-CMTBL GLOBALS ABS 2400B+ALINK-CMTBL LINKS SWICH ABS 1000B+AON-CMTBL ON ABS 1400B+AOFF.-CMTBL OFF ABS 1400B+AALL-CMTBL ALL BORC ABS 2000B+ABAS-CMTBL BASE ABS 3400B+ACUR-CMTBL CURRENT TSTRT ABS 2400B+ASTRT-CMTBL START ABS 1000B+AIN-CMTBL IN TAT ABS 1000B+AAT..-CMTBL AT TTO ABS 1000B+ATO..-CMTBL TO DIEXT ABS 4000B+AIEXT-CMTBL INDIRECT ABS 3000B+ADEXT-CMTBL DIRECT....THESE TWO MUST BE IN ORDER STABL DEF TSTRT ATTBL DEF TAT TOTBL DEF TTO LTABL DEF LTABS KTABL DEF KTABS MTABL DEF MTABS BCTBL DEF BORC SWTBL DEF SWICH ***** * ASCII KEYWORD TABLE * ORDER OF ENTRIES IN THIS TABLE IS OF NO IMPORTANCE ***** CMTBL DEF * ABOUD ASC 3,BOUNDS AMAP ASC 2,MAP ARELC ASC 4,RELOCATE ASEAR ASC 3,SEARCH AOTPU ASC 3,OUTPUT ADISP ASC 4,DISPLAY ATBLE ASC 3,TABLE AUNDE ASC 3,UNDEFS AMODS ASC 4,MODULES AGLOS ASC 4,GLOBALS ALINK ASC 3,LINKS AON ASC 1,ON AOFF. ASC 2,OFF AALL ASC 2,ALL AEND. ASC 2,END AFWAM ASC 2,FWAM ALWAM ASC 2,LWAM AFWAB ASC 3,FWABP ALWAB ASC 3,LWABP AFWAC ASC 2,FWAC ALWAC ASC 2,LWAC ALOCC ASC 2,LOCC ABPLC ASC 3,BPLOCC AXFER ASC 3,?XFER ABAS ASC 2,BASE ACUR ASC 4,CURRENT ASTRT ASC 3,START AIN ASC 1,IN AAT.. ASC 1,AT ASET. ASC 2,SET ATO.. ASC 1,TO AEXT ASC 5,EXTERNALS AIEXT ASC 4,INDIRECT ADEXT ASC 3,DIRECT AECHO ASC 2,ECHO * PRPTA ASC 1,-_ * PTR NOP CNTR NOP PTR2 NOP CCNT NOP QQCN1 NOP QQPT. NOP TEMP NOP NCHAR NOP CNT NOP SKP SKP * * SCANNER ROUTINE * ***** * ** SCAN ** SCAN INPUT BUFFER (QIBUF) FOR KEYWORD * CALLING SEQUENCE: * * LDA NUMBER OF ENTRIES TO SEARCH * LDB ADDRESS OF MNEMONIC TABLE ENTRY ASSOC WITH FIRST CHOICE * JSB SCAN * RETURN1 NOT FOUND * RETURN2 FOUND, OFFSET FROM FIRST ENTRY SEARCHED IN .A. * * NOTE: THIS ROUTINE WILL SKIP LEADING BLANKS IN ATTEMPTING A MATCH. * FURTHER,BUFFER POINTERS ARE ADVANCED PAST THE KEYWORD * MATCHED OR RESET IF NO MATCH OCCURRED. ***** SCAN NOP ENTRY/EXIT STB PTR INITIALIZE SCANNER STA CNTR CLA STA CNT INITIALIZE OFFSET COUNTER SCAN1 LDA PTR,I GET COMMAND POINTER WORD AND B377 MASK COMMAND TABLE OFFSET ADA CMTBL STA PTR2 STORE POINTER TO ASCII COMMAND LDA PTR,I ALF,ALF AND B377 GET # CHARS. STA NCHAR ISZ CNT BUMP OFFSET COUNTER CLA STA CCNT LDA QQCNT SAVE CHARACTER STREAM STA QQCN1 LDA QQPTR STA QQPT. POINTERS. JSB NXTC GET THE FIRST NON-BLANK CHAR CLA END OF LINE JMP SCAN5 GET REST OF CHARS IN LOOP SCAN2 JSB QGETC GET NEXT CHARACTER. CLA NO MORE CHARS. SCAN5 STA TEMP LDA PTR2,I LDB CCNT ISZ CCNT CPB NCHAR ALL CHARS. MATCH? JMP SCAN4 YES-CHECK END OF INPUT ELEMENT. SLB,RSS IS CHAR IN HIGH-ORDER BYTE? ALF,ALF YES--ROTATE TO LOW AND B177 MASK SLB BUMP ASCII COMMAND TABLE POINTER ON ISZ PTR2 EVEN-NUMBERED CHARACTERS. CPA TEMP DO CHARS. MATCH? JMP SCAN2 YES--SO FAR. LDA QQPT. NO--BACKUP POINTERS STA QQPTR LDA QQCN1 STA QQCNT SPC 1 * NOW BUMP COMMAND TABLE POINTER, OR TAKE ERROR EXIT * IF NO MORE LEFT SPC 1 ISZ PTR ISZ CNTR END OF TABLE? JMP SCAN1 NO JMP SCAN,I SPC 1 SCAN4 LDA TEMP IS NEXT SOURCE CHAR A DELIMITER? SZA END OF LINE? JSB BAKUP LDA CNT ISZ SCAN JMP SCAN,I SKP * * INPUT COMMAND LINE * ***** * ** CMDIN ** INPUT NEXT COMMAND LINE USING SIO DRIVERS * CALLING SEQUENCE: * * JSB CMDIN * RETURN * * NOTE: CMDIN CHECKS FOR '-' IF REQUIRED AND DOES A JMP CMER IF NOT * THERE. IT ALSO SKIPS COMMENTS AND ADVANCES INPUT BUFFER * POINTERS PAST THE '-' IF IT APPEARS IN THE INPUT BUFFER. * * THE IDENTIFIER CMDLU IS USED TO SET UP TTY VS PHOTORDR INPUT * * CMDLU=JSB 104B,I FOR KEYBOARD(TTY) INPUT * NO COMMAND ID CHAR. REQUIRED. NO ECHO. * * =JSB 101B,I FOR BATCH INPUT(E.G., PHOTOREADER, * OR CASSETTE). * COMMAND ID REQUIRED IN COLUMN. 1, AND ECHO TO LIST UN * IMPLIED. * * RETURN: QQCHC= POSITIVE # CHARS TRANSMITTED * ***** CMDIN NOP CLA RESET INCOMING CHARACTER STA QQCNT POINTERS LDA QBUFA STA QQPTR JSB PRMT SEND PROMT,READ REPLY DEF *+6 DEF PRPTA DEF B2 DEF QIBUF DEF D72 DEF PARSB STA QQCHC JMP CMDIN,I AND RETURN * MOVE3 NOP * ***** * ** MOVE. ** MOVE BLOCK OF CHARS FROM INPUT BUFFER (QIBUF) TO A * SPECIFIED LOCATION. STOP AT FIRST DELIMITER. * CALLING SEQUENCE: * * LDA ADDRESS OF DESTINATION * JSB MOVE. * RETURN * ***** MOVE. NOP STA MOVE3 SAVE DESTINATION ADDRESS JSB NXTC GET NEXT NON BLANK CHAR JMP CMER NONE FOUND MOV01 ALF,ALF POSITION CHAR TO LEFT, STA MOVE3,I AND STORE IN OUTPUT BUFFER JSB QGETC GET NEXT CHAR JMP MOV03 END OF LINE CPA B40 BLANK? JMP MOV02 CPA B54 COMMA? JMP MOV02 CPA B51 RIGHT PAREN? JMP MOV02 IOR MOVE3,I PUT LOWER HALF STA MOVE3,I IN BUFFER JSB QGETC GET NEXT CHAR JMP MOV03 END OF LINE CPA B40 BLANK? JMP MOV02 CPA B54 COMMA? JMP MOV02 CPA B51 RIGHT PAREN? JMP MOV02 ISZ MOVE3 BUMP OUTPUT POINTER JMP MOV01 KEEP GOING MOV02 JSB BAKUP BACK UP OVER LAST CHAR MOV03 LDA MOVE3,I WAS LAST CHAR AND UPCM CPA MOVE3,I AN EVEN NUMBERED CHAR? RSS JMP MOVE.,I NO, BUFFER IS OK IOR B40 NO,APPEND A BLLANK STA MOVE3,I AND STORE IT AWAY JMP MOVE.,I SPC 1 SKP * * ****COMMAND PROCESSORS**** * ***** * ** RELOCATE ** SEARCH COMMAND PROCESSORS * ***** RELST CLA,RSS SET SEARCH FLAG OFF. SPC 1 SERST CLA,INA SET SEARCH FLAG ON. SPC 1 STA LIBFL STORE FLAG CLA STA NREC CLEAR #GOOD RECORDS COUNTER STA RIC STA XNAM JSB FCLOS CLOSE OPEN REL INPUT FILE...IF NOT CLOSED. DEF *+2 DEF RLDCB LDA LOCC HAS LOCC BEEN SET YET? SZA JMP *+3 YES LDA .MEM3 NO--SET TO FWAM STA LOCC LDA BPLOC HAS BPLOC BEEN SET YET? SZA JMP *+3 YES. GO GET NEXT NON-BLANK CHARACTER. LDA .MEM1 NO. SET BASE PAGE STA BPLOC TO FWABP. JSB NXTC GET NEXT NON-BLANK CHAR JMP LDRIN NO MORE CPA B54 IS IT A COMMA? JMP LDRIN YES...IGNORE REST OF LINE CPA B50 LEFT PAREND? RSS YES JMP CMER NO--COMMAND ERROR LDA BLANK BLANK OUT XNAM STA XNAM+1 STA XNAM+2 LDA XNAMA JSB MOVE. * JSB NXTC GET NEXT NON BLANK CHAR JMP CMER NO MORE CPA B51 RIGHT PAREN? JMP LDRIN YES JMP CMER NO, ERROR JMP LDRIN XNAMA DEF XNAM LBUFA DEF LBUF ***** * ** DISPLAY COMMAND PROCESSOR * ***** DSPST JSB BLINE BLANK PRINT LINE LDA QQPTR SAVE STA STMP BUFFER LDA QQCNT POINTERS STA SVAL LDA LBUFA MOVE NAME OF ENTITY TO BE DISPLAYED JSB MOVE. INTO THE OUTPUT BUFFER LDA STMP STA QQPTR RESTORE BUFFER POINTERS LDA SVAL STA QQCNT LDA MD11 LDB KTABL JSB SCAN IS THIS A KEYWORD? JMP DSP10 NO, IT MUST BE AN IDENTIFIER CPA D11 UNDEFS? JMP OLSTU CPA D10 TABLE? JMP OLSTE CPA B3 LDB .MEM3 CPA B4 LDB .MEM4 CPA B1 LDB .MEM1 CPA B2 LDB .MEM2 CPA B5 LDB .MEM5 CPA B6 LDB .MEM6 CPA D8 LDB BPLOC CPA D9 LDB ?XFER CPA B7 LDB LOCC GET CURRENT LOCATION COUNTER JMP DSP20 YES SPC 2 DSP10 LDB LBUFA JSB SSTBL SEARCH SYMBOL TABLE JMP DSP30 SYMBOL IS UNDEFINED LDB LST4A,I GET VALUE DSP20 LDA LBUF+2 SET EQUAL SIGN(=) IN 6TH CHAR AND UPCM OF PRINT LINE IOR B75 STA LBUF+2 LDA LBUF4 JSB CONV CONVERT THE VALUE TO ASCII LDA D12 DSP25 LDB LBUFA JSB PRINT PRINT THE LINE JMP NXTCM FINISHED, GET NEXT COMMAND DSP30 LDA MD5 MOVE "UNDEFINED" TO LBUF LDB DSP40 JSB MOVEX LBUF4 DEF LBUF+3 LDA D15 JMP DSP25 * DSP40 DEF *+1 ASC 5,UNDEFINED ***** * ** MAP COMMAND PROCESSOR * * LISTO--CORE MAP LISTING FLAG * BIT 0 GLOBAL VARIABLES * 1 MODULES * 2 LINKS * 3 HEADING HAS BEEN PRINTED ***** MAPST LDA LISTO AND D8 STA LISTO MAP1 LDA MD6 LDB MTABL JSB SCAN JMP CMER STA B LDA LISTO CPB B4 MAP ON? RSS YES. SAME AS MAP ALL. CPB B6 ALL ? IOR B7 YES, SET ALL THREE OPTIONS. CPB B1 MODULES? IOR B2 CPB B2 GLOBALS? IOR B1 CPB B3 LINKS? IOR B4 CPB B5 OFF? CLA RESET POINTER STA LISTO JSB DELIM ADVANCE PAST DELIMITERS RSS JMP MAP1 LDA LISTO SZA,RSS ANY OPTIONS ON? JMP NXTCM NO, GET NEXT COMMAND AND D8 HAS HEADING BEEN PRINTED? SZA JMP NXTCM YES, GET NEXT COMMAND LDA LISTO RESTORE IOR D8 STA LISTO LDA HEAD1 LDB HEAD1+1 JSB LOUT LDA HEAD1 LDB HEAD2 JSB LOUT LDA HEAD1 LDB HEAD3 JSB LOUT JMP NXTCM GET NEXT COMMAND SPC 1 HEAD1 DEC 47 # CHARS. IN EACH PRINT LINE. DEF *+1 ASC 24, PROGRAM ENTRY LOW HIGH LOW HIGH HEAD2 DEF *+1 ASC 24, MODULE POINT MAIN MAIN BASE BASE HEAD3 DEF *+1 ASC 24, ---------------------------------------------- ***** * ** BOUNDS COMMAND PROCESSOR * ***** BNDST LDA MD6 LDB KTABL JSB SCAN JMP CMER NO MORE KEYWORDS ADA M1 ADA .MEM. COMPUTE ADDRESS STA NCHAR SAVE ADDRESS TEMPORARILY JSB NXTC GET NEXT NON BLANK CHAR JMP CMER CPA B75 EQUAL SIGN? RSS JMP CMER NO,ERROR JSB NSCAN GET OCTAL NUMBER JMP CMER NO MORE CHARS. JMP CMER NOT NUMERIC SSA IS IT POSITIVE OR ZERO? JMP BER1 NO. ISSUE ERROR AND IGNORE. STA NCHAR,I LEGAL ADDRESS, POST VALUE AND JSB DELIM JMP NXTCM JMP BNDST LOOK FOR NEW PARAMETERS SPC 1 BER1 LDB BER2 ISSUE "IL BND" ERROR JSB DIAG JMP NXTCM AND GET NEXT COMMAND * BER2 DEF *+1 DEC 6 ASC 3,IL BND ***** * ** SET COMMAND PROCESSOR * ***** SETST CLA STA STMP LDA M2 LDB LTABL LOCC OR BPLOCC? JSB SCAN JMP SET01 NO, MUST BE SYM TAB ENTRY ADA RBTA YES, SAVE ADDRESS TO STA STMP PUT VALUE INTO JMP SET02 SET01 JSB BLINE BLANK OUT THE BUFFER LDA LBUFA THEN MOVE NAME TO BUF JSB MOVE. FOR LATER CHECKING SET02 CCA LDB TOTBL LOOK FOR "TO" JSB SCAN JMP CMER NOT FOUND, ERROR JSB NSCAN GET VALUE JMP CMER JMP CMER STA SVAL SAVE VALUE LDB STMP IF SYM TAB ENTRY, SZB,RSS JMP SET03 THEN JUMP TO SET03 STA STMP,I ELSE SET VALUE INTO LOCC JMP NXTCM OR BPLOCC AND GET NEXT COMMAND SET03 LDB LBUFA LOOK FOR SYMBOL IN JSB SSTBL SYMBOL TABLE JMP SET04 NOT FOUND LDA SVAL IF FOUND, STA LST4A,I STORE VALUE, JMP NXTCM AND GET NEXT COMMAND SET04 LDA SVAL STA LST4A,I STORE THE VALUE CLA STA LST5A,I INITIALIZE LINK POINTER ISZ LST BUMP ENTRIES COUNTER LDB LBUFA LDA B,I STA LST1A,I STORE FIRST 2 CHARS INB LDA B,I STA LST2A,I STORE SECOND TWO CHARS INB LDA B,I AND UPCM ZER OUT EXT ID NBR STA LST3A,I AND STORE FIFTH CHAR JMP NXTCM THEN GET NEXT COMMAND * STMP NOP SVAL NOP ***** * ** LINKS STATEMENT COMMAND PROCESSOR * ***** LNKST LDA M2 LOOK LDB STABL FOR JSB SCAN "START" OR "IN". JMP CMER NEITHER, ERROR. CPA ONE 1 MEANS "START", ELSE "IN". JMP LSTRT GO DO LINKS START..... LDA M2 LOOK LDB BCTBL FOR JSB SCAN BASE OR CURRENT. JMP CMER NEITHER, ERROR. CLE,ERA 1 MEANT BASE, 2 MEANT CURRENT. STA CPLMG 0 => BASE, 1 => CURRENT MODE. STA CPLML SET LOCAL: 0 => OFF, 1 => ON. JMP NXTCM GO GET NEXT COMMAND. LSTRT CCA LDB ATTBL JSB SCAN LOOK FOR "AT" JMP CMER JSB NSCAN GET LINK ADDRESS JMP CMER JMP CMER STA LINKA AND SAVE IT JSB NXTC GET NEXT NON-BLANK CHAR JMP CMER CPA B54 IS IT A COMMA? RSS YES, GOOD JMP CMER NO, ERROR JSB NSCAN GET LINK VALUE JMP CMER JMP CMER STA LINKV AND SAVE IT JSB LSTI INITIALIZE SYMBOL TABLE POINTERS LNK01 JSB LSTP ADVANCE TO NEXT ENTRY JMP NXTCM NO MORE, GET NEXT COMMAND LDB LINKA LDA LST4A,I CPA LINKV STB LST5A,I JMP LNK01 * LINKA NOP LINKV NOP * ***** * ** EXTERNALS INDIRECT/DIRECT OPTION * ***** EXTST LDA M2 DIRECT/INDIRECT...ONLY TWO LEGAL LDB DTABL ADDRESS OF START OF DIRECT/INDIRECT JSB SCAN LOOK FOR "DIRECT" OR "INDIRECT" JMP CMER ERROR CLE,ERA 1=INDIRECT, 2=DIRECT...CONVERT TO 0,1 STA DIRFL SAVE FOR ENTRIES JMP NXTCM AND GET NEXT COMMAND * DTABL DEF DIEXT * SKP ***** * ** ECOST ** ECHO ON/OFF STATEMENT PROCESSOR * ***** * ECOST LDA M2 TWO LEGAL OPTIONS: ON, OFF LDB SWTBL ON/OFF MNEMONIC-TABLE ADDRESS. JSB SCAN GO TO SEARCH FOR "ON" OR "OFF". JMP CMER * NEITHER ONE--ERROR! * CLE,ERA 1=ON, 2=OFF--CONVERT TO 0 OR 1. STA #ECHO SET THE COMMAND-ECHO SWITCH. JMP NXTCM GO TO GET THE NEXT COMMAND. * ***** * ** NXTC ** GET NEXT NON-BLANK CHAR FROM INPUT BUFFER (QIBUF) *CALLING SEQUENCE: * * JSB NXTC * RETURN1 NO MORE NON-BLANK CHARS * RETURN2 GOT ONE, AND IT IS RETURNED IN .A. * ***** NXTC NOP GET NEXT NONN-BLANK CHARACTER. JSB QGETC JMP NXTC,I ERROR RETURN CPA B40 BLANK? JMP NXTC+1 GET ANOTHER CHARACTER CPA B55 IS IT A "-"? JMP NXTC+1 YES...IGNORE IT ISZ NXTC TAKE NORMAL EXIT JMP NXTC,I MD4 DEC -4 B55 OCT 55 ***** * ** LTG ** LEADER-TRAILER GENERATOR ***** * ** DIAG ** OUTPUT MESSAGES THAT ARE STORED WITH THE CHAR COUNT * IMMEDIATELY PRECEEDING THE BUFFER. * CALLING SEQUENCE: * * LDB ADDRESS OF BUFFER MINUS 1, WHICH CONTAIN BUFFER LENGTH * JSB DIAG * RETURN * ***** DIAG NOP ENTRY: LDB,JSB LDA B,I INB JSB PRINT OUTPUT DIAGNOSTIC JMP DIAG,I RETURN. * *