ASMB,R,L,C ** RTE-M LOADER SUBORDINATE CONTROL * * ************************************************************************ * * RTE-M LOADER SUBORDINATE CONTROL * MIKE SCHOENDORF * OCTOBER 25,1976 * * SOURCE: 92064-18122 * RELOCATEABLE: 92064-16024 * ******************************************************************** * HED RTM RELOCATION SUBORDINATE CONTROL NAM RTRLC,7 92064-16024 REV. 1805 771212 * * ENTRY POINT NAMES * ENT ABRC1,ABRT1,ADDRS,BPAGA,BPLOC ENT CLBPL,CLFL2,COML,CONSO,CRTIN,DBTAD ENT DCB2,DIAG,DIAG2,EKHOS,ENTI,ENTPT,ERROR ENT EXEC6,FIXUP,FUT1,FUT4,FUTI ENT FUTS,FWABP,FWAC,FWAM,INACT,INIT2,KONSO ENT LDGEN,LENGT,LGUNT,LNKDR,LOCC,LST ENT LSTUL,LST1,LST4,LST5,MAPS,.MEM1 ENT .MEM2,.MEM3,.MEM4,.MEM5,.MEM6 ENT OPT.3,PLK,PLK4,PLKS,PRCMD ENT PRINT,RDFL1,SCP,SSTBL,TIMES,TYOFF ENT TYPRO,UEXFL,UNDEF,?XFER,ZPRIV,ZRENT * * EXTERNAL REFERENCE NAMES * EXT PNAME,PNAMA,PRAMS EXT $CON,PARSE EXT CLOSE,CREAT,IFTTY,EXEC,FCONT,IMESS EXT LIMEM,LOCF,OPEN,POSNT,READF,WRITF EXT IDCB1,IDCB2,IDCB3,IDCB4,IDCB5,IDCB6,IDCB7 EXT CNUMD,DCMC * A EQU 0 B EQU 1 SUP ************************************************************************ * * THESE ROUTINES ARE USED BOTH IN THE RTM LOADER ITSELF AND IN * THE RTM GENERATOR RTMGN. 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 RTM LOADER UTILITY SUBROUTINES ***** * ** BLINE ** BLANK OUT THE PRINT LINE BUFFER (LBUF) * CALLING SEQUENCE: * * JSB BLINE * RETURN * ***** BLINE NOP LDA LBUFA STA BELIN LDA MD60 LDB BLANK STB BELIN,I ISZ BELIN INA,SZA JMP *-3 JMP BLINE,I * BELIN NOP MD60 DEC -60 SPC 5 SKP * ***** * ** DELIM ** ADVANCE POINTERS TO ASCII INPUT BUFFER PAST NEXT * DELIMITER. ACCEPTABLE DELIMITERS ARE A COMMA, ONE OR * MORE BLANKS, OR A COMMA EMBEDDED IN BLANKS. * CALLING SEQUENCE: * * JSB DELIM * RETURN1 NOTHING BUT BLANKS TO END OF LINE * RETURN2 DELIMITER 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 COMMA? 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 * STMP1 NOP COMMA COUNTER SKP ***** * ** 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 * .ABR DEF ABREC ABREC OCT 0 ABRC1 BSS 49 BUFFER FOR ABSOLUTE RECORD ABL1 DEF ABREC+2 HOLDS CURRENT BUFFER ADDRESS ABL2 DEF ABREC+2 SPC 5 ***** * ** 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. SKP ***** * ** 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 OUTON OUTPUT FILE OPEN? SZA,RSS JMP ERROO NO, ERROR 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 WRFL2 WRITE RECORD TO ABS OUTPUT FILE CLA ZERO OUT STA ABREC WORD COUNT STA CKS AND CHECKSUM LDA ABL2 INITIALIZE STA ABL1 NEXT WORD POINTER JMP PUNCH,I EXIT- * ERROO CLB JSB CLFL3 CLOSE REL FILE LDA OO CLB NO FMP ERROR JMP WERR1 * OO ASC 1,OO * CKS NOP CHECKSUM SKP * * SUBROUTINE TO PROCESS TIME PARAMETERS FOR ID SEGMENT * TIMES NOP LDA D12 GET THE SECONDS JSB ADRES MPY P100 CONVERT TO 10'S OF MS STA TEMP1 LDA D13 JSB ADRES ADA TEMP1 ADD 10'S OF MS STA OCTNO SAVE TEMP LDA D10 GET THE HOURS JSB ADRES MPY P60 CONVERT TO MINUTES STA TEMP1 LDA D11 JSB ADRES ADA TEMP1 ADD MINUTES MPY P6000 CONVERT TO 10'S OF MS CLE PREPARE FOR ADD ADA OCTNO ADD 10'S OF MS SEZ,CLE IF OVERFLOW INB STEP HIGH ORDER PART ADA NDAY+1 SUBTRACT ONE DAY OF 10'S OF MS SEZ,CLE IF OVERFLOW INB STEP HIGH ORDER DIGIT ADB NDAY JMP TIMES,I * D13 DEC 13 P60 DEC 60 P100 DEC 100 P6000 DEC 6000 NDAY OCT 177574,025000 * OCTNO NOP TEMP1 NOP SKP * * SUBROUTINE TO GET VALUES FROM PNAMA TABLE * ADRES NOP ADA PNAMA LDA 0,I JMP ADRES,I SPC 5 * * SUBROUTINE TO OUTPUT 2-WORD TIE-OFF RECORDS * TYOFF NOP JSB PACK WORD 1 FROM (A) LDA B WORD 2 FROM (B) JSB PACK JSB PUNCH JMP TYOFF,I SKP ***** * ** 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 RTM LOADER COMMANDS NXTCM JSB CMDIN GET NEXT COMMAND LINE NXTC2 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 * * CMND? DEF *+1 OCT 5 ASC 3,CMND? ***** * CONTROL COMES HERE ON DETECTING A COMMAND ERROR. THE MESSAGE * 'CMND?' IS OUTPUT. ***** CMER LDB CMND? OUTPUT CMND? MESSAGE JSB DIAG2 JMP EXEC0 HED RTM 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 RELST RELOCATE STATEMENT DEF SERST SEARCH STATEMENT DEF OUTST OUTPUT STATEMENT DEF DSPST DISPLAY STATEMENT DEF TR TRANSFER DEF TR TR DEF EOL END STATEMENT DEF SETST SET STATEMENT DEF LINST LINKS IN STATEMENT DEF LNKST LINKS STATEMENT DEF SNPST SNAPSHOT STATEMENT DEF EXIT EXIT STATEMENT DEF ECHO ECHO STATEMENT DEF MCART MOUNT CARTRIDGE STATEMENT DEF DCART DIKSMOUNT CARTRIDGE STATEMENT SKP ***** * * 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 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 1400B+AREL-CMTBL ABBR. OF 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 4000B+ALKIN-CMTBL LINKS IN ABS 2400B+ALINK-CMTBL LINKS ABS 2000B+ASNAP-CMTBL SNAP ABS 1000B+AEXIT-CMTBL EXIT ABS 2000B+AECHO-CMTBL ECHO ABS 1000B+AMONT-CMTBL MOUNT CARTRIDGE ABS 1000B+ADMNT-CMTBL DISMOUNT CARTRIDGE 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 LWAC 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 ABS 1000B+AON..-CMTBL ON ATABS ABS 1400B+AYES.-CMTBL YES ABS 1000B+ANO..-CMTBL NO TSTRT ABS 2400B+ASTRT-CMTBL START TAT ABS 1000B+AAT..-CMTBL AT TTO ABS 1000B+ATO..-CMTBL TO LIABS ABS 2000B+ABASE-CMTBL BASE ABS 3400B+ACURT-CMTBL CURRENT ONABS ABS 1000B+AON..-CMTBL ON ABS 1400B+AOFF.-CMTBL OFF STABL DEF TSTRT ATTBL DEF TAT TOTBL DEF TTO LTABL DEF LTABS KTABL DEF KTABS MTABL DEF MTABS ATABL DEF ATABS LITBL DEF LIABS ONTBL DEF ONABS SKP ***** * 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 AREL ASC 2,REL 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 ALKIN ASC 4,LINKS IN ALINK ASC 3,LINKS ASNAP ASC 2,SNAP AEXIT ASC 1,EX AECHO ASC 2,ECHO AON.. ASC 1,ON 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 ABASE ASC 2,BASE ACURT ASC 4,CURRENT AMONT ASC 1,MC ADMNT ASC 1,DC * 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. 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 * CCNT NOP COUNTER CNT NOP OFFSET COUNTER CNTR NOP NUMBER OF ENTRIES TO SEARCH NCHAR NOP NUMBER OF CHARACTERS PTR NOP MNEMONIC TABLE ADDRESS PTR2 NOP POINTER TO ASCII COMMAND QQCN1 NOP CHARACTER STREAM QQPT. NOP POINTERS TEMP NOP TEMP STORAGE HED INPUT COMMAND LINE ***** * ** CMDIN ** INPUT NEXT COMMAND LINE * CALLING SEQUENCE: * * JSB CMDIN * RETURN * * NOTE: CMDIN SKIPS COMMENTS AND ADVANCES INPUT BUFFER * POINTERS PAST THE '-' IF IT APPEARS IN THE INPUT BUFFER. * * THE IDENTIFIER CMDLU IS USED TO DETERMINE IF THE INPUT IS * COMING FROM THE SESSION CONSOLE (=4) OR TRANSFER FILE (=1). * THE IDENTIFIER ECHO1 IS USED TO DETERMINE IF THE INPUT * SHOULD BE ECHO'ED TO THE LIST DEVICE (0=NO ECHO, 1=ECHO). * * * RETURN: QQCHC= POSITIVE # CHARS TRANSMITTED * ***** CMDIN NOP CLA RESET INCOMING CHARACTER STA QQCNT POINTERS LDA QBUFA STA QQPTR LDA CMDLU INPUT COMMAND DEVICE-FILE? CPA B4 RSS JMP CMD5 NO, MUST BE TRANSFER FILE LDA CONSO GET INPUT FROM SESSION CONSOLE? SZA JMP CMD3 YES CMD1 LDB PRPTA JSB DIAG SEND PROMPT TO ERROR-PROMPT LOG CMD6 LDB QBUFA INPUT BUFFER LDA CMDLU CPA B1 TRANSFER FILE? JMP RDRIN YES, READ IT LDA DCB1 DATA CONTROL BLOCK JSB RDFL1 READ FROM INPUT DEVICE-FILE CPA M1 END OF FILE? JMP CMD4 YES, GET INPUT FROM SESSION CONSOLE CMD2 STA QQCHC SAVE # OF CHARACTERS READ LDB QBUFA AND BUFFER ADDRESS JSB EKHOS TRY WRITING ON MAP OR ECHO FILE LDA QBUFA,I GET 1ST CHARACTER. ALF,ALF AND B177 CPA B52 COMMENT? JMP CMDIN+1 YES, GET NEXT COMMAND CPA B55 IS COMMAND ID SUPPLIED? ISZ QQCNT YES--BUMP CHAR. POINTER JMP CMDIN,I RDRIN LDA DCB6 DATA CONTROL BLOCK ADDRESS JSB RDFL6 GO READ FILE CPA M1 FINISHED? RSS JMP CMD2 NO LDA B4 YES, TRANSFER INPUT TO COMMAND STA CMDLU DEVICE-FILE JSB CLFL6 CLOSE TRANSFER FILE JMP CMDIN+1 * CMD4 CLA,INA STA CONSO STA KONSO CMD3 LDB PRPTA PROMPT JSB OTMES GET RESPONSE JMP CMDIN,I * CMD5 LDA DCB6 GET TRANSFER FILE DCB JSB INDCK ADA B2 LDA 0,I TYPE 0 FILE? SZA JMP CMD6 NO, DON'T ISSUE PROMPT LDA DCB6 JSB INDCK JSB LOCFS GET LOGICAL UNIT OF FILE SSA JMP LGER2 LU ERROR JSB IFTTY .CHECK LU FOR INTERACTIVE DEF *+2 DEF JLU SZA JMP CMD7 YES LDA CONSO SWITCH TO SESSION CONSOLE? SZA JMP CMD7 YES LDA INACT INTERACTIVE INPUT? SZA,RSS JMP CMD6 NO CMD7 LDB PRPTA YES JSB DIAG2 JMP CMD6 * * B52 OCT 52 COMMENT CHARACTER B55 OCT 55 CMDLU OCT 4 * PRPTA DEF *+1 OCT 1 ASC 1,- * KONSO NOP SPC 1 HED SEARCH SYMBOL TABLE FOR MATCH ROUTINE ***** * ** SSTBL ** SEARCH SYMBOL TABLE * CALLING SEQUENCE * * LDB 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 CLA FLAG FOR 0 ENTRY IN LST TABLE STA FFLAG STB CMDIN SAVE TEMPORARILY JSB LSTI INITIALIZE SYMBOL TABLE SSTB1 JSB LSTP SET LST ENTRY ADDRESSES JMP SSTBL,I END OF TABLE LDA LST1,I GET WORD 1 OF LST ENTRY SZA USED ENTRY? JMP SSTB2 YES LDA LST1 ADA M1 STA FFLAG SAVE ADDRESS OF LAST 0 ENTRY SSTB2 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 * FFLAG NOP FLAG FOR 0 ENTRY IN LST SKP ***** * ** 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 CPA B50 LEFT PAREN? JMP MOV02 YES CPA B72 COLON? JMP MOV02 YES 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 CPA B50 LEFT PAREN? JMP MOV02 YES CPA B72 COLON? JMP MOV02 YES 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 YES, BUFFER IS OK IOR B40 NO, APPEND A BLANK STA MOVE3,I AND STORE IT AWAY JMP MOVE.,I * MOVE3 NOP DESTINATION ADDRESS * B72 OCT 72 SPC 1 SKP * * * SUBROUTINE TO INITIALIZE LOADER SUBCONTROL * * INIT NOP LDA 1,I STA BUFST ISZ 1 LDA 1,I STA BUFST+1 ISZ 1 LDA 1,I STA BUFST+2 ISZ 1 LDA 1,I STA BUFST+3 ISZ 1 LDA 1,I STA BUFST+4 NOP NOP LDB BUFER STB PRMAD CLA,INA JSB GLWAM GET LAST WORD OF AVAILABLE MEMORY STA OPT.3 SAVE ADA M3 ADJUST FOR FIRST FIX-UP TABLE ENTRY STA FUT4 LDA B4 INITIALIZE TO INPUT/DEVICE FILE MODE STA CMDLU LDA B100 STA FWABP FIRST WORD OF AVAILABLE BASE PAGE LDA B1646 STA LWABP LAST WORD OF AVAILABLE BASE PAGE LDA B2000 STA FWAM FIRST WORD OF AVAILABLE MEMORY LDA OPFLA SET FOR NO PAUSE AND UDFE JSB PAUSE CLA STA LISTO INITIALIZE MAP OUTPUT STA LINTP LINKS IN FLAG (SET TO BASE) STA FWAC FIRST WORD OF COMMON STA LWAC LAST WORD OF COMMON STA OPT.3,I NUMBER OF FIXUPS STA ECHO1 ECHO OFF STA MAPON MAP OFF STA AL CLEAR MAP FILE NAME STA ECFIL CLEAR ECHO FILE NAME STA EMSAM MAP/ECHO FILE OFF STA INACT SET INPUT TO NON-INTERACTIVE STA FL1OP CLEAR COMMAND FILE OPEN BIT STA ERDVC CLEAR ERROR LOG DEVICE STA OPEN1 CLEAR COMMAND FILE OPEN BIT STA TYPRO SET TO ANY TYPE MODULE ALLOWED STA CONSO GET INPUT FROM SESSION CONSOLE STA UEXFL UNDEFINED EXTERNALS JSB INIT2 JMP INIT,I * INIT2 NOP LDA ABL2 STA ABL1 JSB CLBPL CLA STA LOCC PROGRAM RELOCATION BASE STA UNDEF START SEARCH AT BEGINNING OF LST STA FRTRU FIRST TIME THRU FLAG STA ?XFER "HAVE MAIN FLAG" STA BPLOC BASE PAGE RELOCATION BASE STA COML "COMMON USED FLAG" STA LST,I LOADER SYMBOL TABLE LENGTH STA NAMR. ALLOW A NAM RECORD STA OUTON ABSOLUTE OUTPUT FILE CLOSED STA FTIME OUTPUT TYOFF RECORD ONLY AT START STA ISECU SECURITY CODE STA ICR LABEL STA WRTBT NO RELOCATION YET STA TRUNC DON'T TRUNCATE ON ABORT STA ABREC CLEAR RECORD LENGTH STA CKS CLEAR CHECK SUM STA SERFG LIBRARY LOAD FLAG JMP INIT2,I * B1646 OCT 1646 * CONSO NOP FL1OP NOP FTIME NOP OPEN1 NOP TRUNC NOP WRTBT NOP ANY RELOCATION FLAG * BUFER DEF *+1 BUFST BSS 5 SKP * * * SUBROUTINE TO CLEAR BASE PAGE LINKS * * CLBPL NOP LDA M1020 CLEAR STA COUNT BASE CLA PAGE LDB BPAG4 LINK STA B,I AREA INB FOR ISZ COUNT LOADER JMP *-3 JMP CLBPL,I * M1020 DEC -1020 BPAG4 DEF BPAGE ADD OF 1ST WORD OF BP LINKS TBL COUNT NOP SPC 1 SKP HED *** FILE PROCESSORS ***