ASMB,R,L,B,C * *************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. 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. * *************************************************************** * * * THE TERM RTS/2100 IS SYNONYMOUS WITH RTE-C AND * THE TERMS ARE USED INTERCHANGEABLY THROUGHOUT * THIS DOCUMENT * ************************************************************************ * * RTE-C LOADER SUBORDINATE CONTROL * REV.A JACK COOLEY 15MAY73 * REV,B D.L.S. 11MAR75 COPYRIGHT * * ******************************************************************** * HED RTS RELOCATION SUBORDINATE CONTROL NAM RTRLC * * ENTRY POINT NAMES * ENT LST,.MEM.,.MEM1,.MEM2,.MEM3,.MEM4,.MEM5,.MEM6 ENT IBUFR,PUNCH,OPT.3,ABRC1,PLK,?XFER,PLKS,LSTA1 ENT UEXFL,SSTBL,LST1,LST2,LST3,LST4,LST5,LTG ENT MEMRY,PRCMD,PACK,BPLOC,LOCC ENT LINK,ASR33,B7,PCHX,DIAG ENT MOVEX,B2,B4,MD24,MD60,UPCM,FWAM,FWAC,COML ENT CNTR,BPAGA,MD6,FWABP ENT BPAG4,LISTO ENT LOUT,NAMR.,ABORT ENT LOEND * * EXTERNAL REFERENCE NAMES * EXT PNAME,PNAMA,PRAMS * A EQU 0 B EQU 1 SUP ************************************************************************ * * 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 * ******************************************************************** HED RTS LOADER UTILITY SUBROUTINES ***** * ** BLINE ** BLANK OUT THE PRINT LINE BUFFER (LBUF) * CALLING SEQUENCE: * * JSB BLINE * RETURN * ***** BSS 1 BLINE NOP LDA LBUFA STA BLINE-1 LDA MD24 LDB BLANK STB BLINE-1,I ISZ BLINE-1 INA,SZA JMP *-3 JMP BLINE,I ***** * ** RBIN ** READ RELOCATABLE BINARY INPUT FROM SIO DRIVER TO (LBUF) * CALLING SEQUENCE: * * JSB RBIN * RETURN * * NOTE: NUMBER OF WORDS TRANSMITTED IS COMPLEMENTED AND STORED IN * THE FIRST WORD OF THE BUFFER, OVERLAYING FIRST INPUT WORD ***** RBIN NOP LDA MD60 LDB LBUFA JSB 101B,I CMA,INA GET NEG. # DATA WORDS IN RECORD STA LBUF STORE JMP RBIN,I ***** * ** IBUFR ** INITIALIZE THE ABSOLUTE RECORD BUFFER (ABREC) SO IT MAY * BE FILLED UP FOR LATER OUTPUT * CALLING SEQUENCE: * JSB IBUFR * RETURN * ***** IBUFR NOP CLA ZERO OUT STA ABREC WORD COUNT STA CKS AND CHECKSUM LDA ABL2 INITIALIZE STA ABL1 NEXT WORD POINTER JMP IBUFR,I * MEMRY DEF FWABP 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 ***** * THE ABSOLUTE RECORD BUFFER * ABREC OCT 0 ABRC1 BSS 49 BUFFER FOR ABSOLUTE RECORD * ***** * ** PACK ** INSERT A WORD INTO THE ABSOLUTE RECORD BUFFER * CALLING SEQUENCE: * * LDA WORD TO BE PLACED IN RECORD * JSB PACK * RETURN * * NOTE: .B. IS NOT ALTERED BY THIS SUBROUTINE ***** PACK NOP STA ABL1,I STORE WORD AT NEXT LOCATION ISZ ABL1 IN BUFFER, INCREASE ADDRESS. ADA CKS ADD WORD TO CHECKSUM STA CKS AND RESTORE WORD ISZ ABREC COUNT WORD JMP PACK,I AND EXIT. ***** * ** PUNCH ** OUTPUT THE RECORD IN THE ABSOLUTE RECORD BUFFER * CALLING SEQUENCE: * * JSB PUNCH * RETURN * * NOTE: THIS SUBROUTINE INSERTS CHECKSUM AND WORDCOUNT BEFORE OUTPUT ***** PUNCH NOP ENTRY/EXIT LDA CKS ADD LOAD ADDRESS TO CHECK-SUM ADA ABREC+1 AND SET RECORD SUM STA ABL1,I IN LAST WORD OF RECORD. LDA ABREC ADD 2 TO RECORD WORDCOUNT ALF,ALF POSITION AS FIRST CHAR. AND STA ABREC SET. ALF,ALF REPOSITION, ADD 3 FOR TOTAL ADA B3 LENGTH AND SET FOR CMA,INA LDB .ABR JSB PCHX JSB IBUFR SET UP OUTPUT JMP PUNCH,I EXIT- ***** * ** PCHX ** PUNCH OUT THE CONTENT OF A SPECIFIED BUFFER * IF USING AN ASR33 TTY, THE COMPUTER WILL HALT (07) WHEN * SWITCHING FROM KEYBOARD TO PUNCH MODE. * CALLING SEQUENCE: * * LDA LENGTH, POSITIVE IF CHARS, NEGATIVE IF WORDS * LDB BUFFER ADDRESS * JSB PCHX * RETURN * ***** PCHX NOP ENTRY: LDA,LDB,JSB. STA TMP SAVE (A) LDA ASR33 ARE WE USING ASR33 TTY? SZA,RSS JMP NO33 NO, DO OUTPUT USPCH HLT 7B YES, HALT IF NOT IN PUNCH MODE CLA STA USPCH CLEAR USPCH TO SET PUNCH MODE LDA HLT.K AND SET HALT FOR STA USKBD SWITCH TO KEYBOARD MODE NO33 LDA TMP RESTORE (A) JSB 103B,I DO OUTPUT JMP PCHX,I * TMP NOP ASR33 NOP HLT.K HLT 70B ***** * ** 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. * ***** PRCMD NOP PROCESS RTE LOADER/2100 COMMANDS TYMOD LDA TTYIN INITIALIZE TO STA CMDLU TTY MODE 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 TYMOD GET NEXT COMMAND FROM TTY HED RTS LOADER TABLES ***** * * BRANCH TABLE FOR COMMAND PROCESSORS. * ORDER OF THIS TABLE MUST CONFORM TO ORDER OF FIRST ENTRIES IN * COMMAND PNEUMONIC TABLE. * ***** PTABL DEF * DEF BNDST BOUNDS STATEMENT DEF MAPST MAP STATEMENT DEF RELST RELOCATE STATEMENT DEF SERST SEARCH STATEMENT DEF NXTCM OUTPUT STATEMENTS IGNORED DEF DSPST DISPLAY STATEMENT DEF TR TRANSFER DEF TR TR DEF EOL END STATEMENT DEF SETST SET STATEMENT DEF LNKST LINKS STATEMENT ***** * * COMMAND PNEUMONIC 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 TRANSFER APPEARS BEFORE TR) * ***** 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 3000B+ASEAR-CMTBL SEARCH ABS 3000B+AOTPU-CMTBL OUTPUT ABS 3400B+ADISP-CMTBL DISPLAY ABS 4000B+ATRAN-CMTBL TRANSFER ABS 1000B+ATR..-CMTBL ABBR. OF TRANSFER ABS 1400B+AEND.-CMTBL END ABS 1400B+ASET.-CMTBL SET ABS 2400B+ALINK-CMTBL LINKS 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 ABS 1400B+AOFF.-CMTBL OFF ATABS ABS 1400B+AYES.-CMTBL YES ABS 1000B+ANO..-CMTBL NO TSTRT ABS 2400B+ASTRT-CMTBL STATR TAT ABS 1000B+AAT..-CMTBL AT TTO ABS 1000B+ATO..-CMTBL TO STABL DEF TSTRT ATTBL DEF TAT TOTBL DEF TTO LTABL DEF LTABS KTABL DEF KTABS MTABL DEF MTABS ATABL DEF ATABS ***** * ASCII KEYWORD TABLE * ORDER OF ENTRIES IN THIS TABLE IS ON 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 AOFF. ASC 2,OFF ATRAN ASC 4,TRANSFER ATR.. ASC 1,TR 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 AYES. ASC 2,YES ANO.. ASC 1,NO ASTRT ASC 3,START AAT.. ASC 1,AT ASET. ASC 2,SET ATO.. ASC 1,TO * PRPTA DEF *+1 ASC 1,-- * PTR NOP CNTR NOP PTR2 NOP CCNT NOP QQCN1 NOP QQPT. NOP TEMP NOP NCHAR NOP CNT NOP SKP HED SCANNER ROUTINE ***** * ** SCAN ** SCAN INPUT BUFFER (QIBUF) FOR KEYWORD * CALLING SEQUENCE: * * LDA NUMBER OF ENTRIES TO SEARCH * LDB ADDRESS OF PNEUMONIC 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. SCAN3 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 HED 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 LDA CMDLU TTY? CPA TTYIN TTY? RSS JMP CMD1 NO--SKIP PROMPT CLA,INA LDB PRPTA JSB LOUT CMD1 LDB QBUFA GET COMMAND INPUT LINE LDA D72 CMDLU JSB 104B,I GET NEXT COMMAND LINE STA QQCHC SZA EOT? JMP CMD2 CPA NDATA NEED TO SKIP LEADER? JMP CMD1 YES LDA TTYIN AUTOMATIC TRANSFER TO TTY. STA CMDLU JMP CMDIN+5 * CHECK INPUT LINE FOR COMMAND IDENTIFIER CHAR CMD2 LDA CMDLU ECHO? CPA TTYIN JMP *+4 NO LDA QQCHC YES; GET CHARACTER COUNT, LDB QBUFA AND BUFFER ADDRESS JSB LOUT AND ECHO ON LIST DEVICE LDA QBUFA,I GET 1ST CHARACTER. STA NDATA CLEAR SKIP LEADER FLAG. ALF,ALF AND B177 CPA STAR COMMENT? JMP CMDIN+1 YES LDB CMDLU CPB TTYIN JMP CMD3 YES--COMMAND ID OPTIONAL CPA B55 IS COMMAND ID (-) THERE? RSS JMP CMER NO--PRINT ERROR & SWITCH TO TTY. ISZ QQCNT JMP CMDIN,I CMD3 CPA B55 IS COMMAND ID SUPPLIED? ISZ QQCNT YES--BUMP CHAR. POINTER JMP CMDIN,I TTYIN JSB 104B,I INSTR. FOR KEYBOARD COMMAND INPUT PRDR JSB 101B,I " " STANDARD " " STAR OCT 52 COMMENT CHARACTER SPC 1 HED SEARCH SYMBOL TABLE FOR MATCH ROUTINE ***** * ** SSTBL ** SEARCH SYMBOL TABLE * CALLING SEQUENCE * * LDA ADDRESS OF 5 CHAR NAME TO MATCH * JSB SSTBL * RETURN1 SYMBOL NOT FOUND * RETURN2 FOUND, LST1-LST5 POINT TO MATCHED ENTRY * * NOTE: THE NAME INPUT FOR MATCH MUST START ON A WORD BOUNDARY ***** SPC 1 SSTBL NOP STB CMDIN SAVE TEMPORARILY JSB LSTI INITIALIZE SYMBOL TABLE SSTB1 JSB LSTP SET LST ENTRY ADDRESSES JMP SSTBL,I END OF TABLE--ERROR RETURN LDB CMDIN RETRIEVE ADDRESS OF TARGET MATCH LDA B,I CPA LST1,I CHARS. 1&2 MATCH? INB,RSS JMP SSTB1 NO--GET NEXT ENTRY LDA B,I CPA LST2,I INB,RSS JMP SSTB1 LDA B,I XOR LST3,I AND UPCM CHECK CHAR. 5 SZA JMP SSTB1 * MATCH FOUND -- MAKE SUCCESS RETURN ISZ SSTBL JMP SSTBL,I * 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 HED *** COMMAND PROCESSORS ***