*ASMB,R,L,Z USE 'Z' FOR RTE-III GENERATOR *ASMB,R,L,N USE 'N' FOR RTE-II GENERATOR HED REAL TIME SYSTEM GENERATOR * NAME: RTGEN * SOURCE: 92001-18015 (RTE-II AND RTE-III) * RELOC: 92001-16015 (RTE-II) 92060-16030 (RTE-III) * PGMR: GAA/RHB * * *************************************************************** * * THIS PROGRAM CONTAINS INFORMATION WHICH IS PROPRIETARY TO * * * THE HEWLETT-PACKARD COMPANY. IT IS NOT TO BE DISCLOSED TO * * * ANY THIRD PARTIES OR REPRODUCED EXCEPT FOR ARCHIVE PURPOSES * * *************************************************************** * IFN *** BEGIN NON-MEU CODE *** NAM RTEGN 92001-16015 REV.1631 760630 **** END NON-MEU CODE **** XIF IFZ ***** BEGIN MEU CODE ***** NAM RTEGN 92060-16030 REV.1631 760630 ****** END MEU CODE ****** XIF SPC 1 ENT N1,N2,N3,N4,N5,N6,N8,N9,N10,N16,N27 ENT N64,P2,P3,P4,P5,P6,P7,P8,P9,P11,P12,P13,P14 ENT P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25 ENT P28,P29,P31,P33,P60,P64,P99,P202,P6K,L60,L2000 ENT M60,M77,M120,M177,M377,M777,M400,D128,M200,M0760 ENT M1740,M1600,M1777,M2000,M1377,M7400,M7000,M7600 ENT M7700,M7777,M0300,M1177 ENT DPWRS,P0100,P1000,P100,P10,P1 ENT OPWRS,M0100,M1000,M100,M10 ENT PPREL,LWASM,BLANK,UBLNK,MSIGN,RPARB ENT ADBP,DSKA,MOVW * * ENTRY POINTS FOR THIS MODULE * * VARIABLES ... * EXT DSKAB * * UTILITY SUBROUTINES * ENT DOCON,SPACE,READ,GETNA,GINIT,GETOC,GETAL ENT INERR,YE/NO,LSTS,ERROR,LSTE,LABDO,IRERR ENT OUTID,CONVD * ORB A EQU 0 B EQU 1 SPC 2 * THE FOLLOWING LABELS ARE TO BE SATISFIED BY THE DRIVER MODULE * OF THE GENERATOR. THAT MODULE TAKES CARE OF ALL THINGS WHICH * DEPEND ON THE DETAILS OF THE DISC AND ITS CONTROLER. * EXT SYSCH SYSTEM SUBCHANNEL EXT AUXCH AUX DISC SUBCHANNEL EXT DSIZE SYSTEM DISC SIZE (TRACKS) EXT DAUXN AUX DISC SIZE (TRACKS) EXT DSETU INITILIZE SUBROUTINE EXT DSKSC SCRATCH DISC ADDRESS EXT LSSYS,LSAUX LAST SEEK FLAGS EXT DISKA INCREMENT DISC ADDRESS SUBROUTINE EXT DISKO DISC OUTPUT ROUTINE EXT DISKI DISC INPUT ROUTINE EXT DSTBL GENERATE DISC TABLE SUBROUTINE EXT TRTST TEST CURRENT TRACK SUBROUTINE EXT DTSET SET UP TAT SUBROUTNE EXT SDS# SYSTEM DISC SECTORS/TRACK EXT ADS# AUX DISC SECTORS/TRACK EXT FSECT FLUSH FINAL SECTOR FROM CORE EXT DERCN DISC ERROR COUNT EXT DBPO ORG OF DUMMY BASE PAGE EXT DSKAB INITIAL ABS DISC ADDRESS EXT PTBOT CONFIGURE DISC/ PUNCH BOOT SKP * GENERATOR ORGANIZATION * ORDER * OF EXECUTION SPC 3 ***************** - HIGH CORE - ****************** * * * SIO DRIVERS (TTY,LP,PT,HSP,MT) * * * ************************************************** * - IDENTS - * * ---------- * * * * - FIX UP TABLE - * * ------- * * - LST - * ************************************************** * * * DISC MODULE USUALLY HERE * * * ************************************************** * * * LOAD, LINKAGE SUBROUTINES * * * ************************************************** * * * FINAL CLEAN UP, LIBRARY MOVE * 8 * DIRECTORY CREATION ECT. * * * * IFZ - (DMS SYSTEM) PARTITION DEFINITION, * * PROG SIZE OVERRIDE, ETC. * * * * PROGRAM LOADING CONTROL * 4,6 * * ************************************************** * * * I/O TABLE GENERATION * 5 * * * PARAMETER INPUT * 3 * * ************************************************** * * * * * RELOCATABLE PROGRAM INPUT * 2 * * * INITIALIZATION * 1 * * * * ****************** - 2000 - ********************** * * * * * DATA AREAS, SOME GENERAL SUBS. * * * * * ************************************************** SKP * IDENT FORMAT * * WORD 1: ID1 - NAME 1,2 * WORD 2: ID2 - NAME 3,4 * WORD 3: ID3 - NAME 5, USAGE FLAG (SEE BELOW) * WORD 4: ID4 - COMMON LENGTH * WORD 5: ID5 - CURRENT DISK ADDRESS * WORD 6 (15): ID6 - M/S * WORD 6 (08-14): ID6 - NOT USED * WORD 6 (00-06): ID6 - TYPE * WORD 7: ID7 - LOWEST DBL ADDRESS * WORD 8: ID8 - DISK LENGTH FOR UTILITY RELOCATABLES * OR.. MAIN IDENT ADDR FOR SEGMENTS * OR.. (DMS SYSTEMS) PG REQMTS (8 BITS) * THEN KEYWD INDEX (LOW 8 BITS). * * USAGE FLAG BITS ARE AS FOLLOWS: * * BIT 0 IF SET MODULE WAS LOADED * BIT 1 IF SET MUST LOAD THIS MODULE (EXT DEFINED BY IT) * BIT 2 IF SET THIS MODULE WAS LOADED AS PART OF A SEGMENT * * * LST FORMAT * * WORD 1: LST1 - NAME 1,2 * WORD 2: LST2 - NAME 3,4 * WORD 3: LST3 - NAME 5, ORDINAL * WORD 4: LST4 - IDENT ADDRESS OR 2 IF COMMON, 3 IF ABS, 4 IF REPLACE * WORD 5: LST5 - SYMBOL VALUE * * * PROGRAM TYPES (NON-DMS) * * 0: SYSTEM * 1: RT RESIDENT * 2: RT DISK RESIDENT * 3: BG DISK RESIDENT * 4: BG RESIDENT * 5: BG SEGMENT * 6: LIBRARY * 7: UTILITY * 8: LOAD ONLY TO SATISFY EXTERNAL REFERENCES. * 9: RT RESIDENT USING BACKGROUND COMMON. * 10: RT DISC RESIDENT USING BACKGROUND COMMON. * 12: BG RESIDENT USING FORGROUND COMMON. * 11: BG DISC RESIDENT USING FORGROUND COMMON. * 13: BG SEGMENT USING FORGROUND COMMON * 14: TYPE 6 THAT IS TO BE FOURCE LOADED TO THE LIBRARY. * 30: (DMS SYSTEM SSGA MODULE) CONVERTED TO TYPE 7. * 16-29,31 (DMS MODULES USING SSGA) TYPE SET TO TYPE-16. * 15,32-99:UNUSED (TYPE + 80 IS USED TO DESIGNATE AUTO SPC 1 * PROGRAM TYPES (DMS SYSTEMS) * * 0: SYSTEM * 1: MEMORY RESIDENT * 2: RT DISK RESIDENT * 3: BG DISK RESIDENT * 4: (CONVERTED TO 9) * 5: BG SEGMENT * 6: LIBRARY * 7: UTILITY * 8: LOAD ONLY TO SATISFY EXTERNAL REFERENCES. * 9: MEMORY RESIDENT USING BACKGROUND COMMON. * 10: RT DISC RESIDENT USING BACKGROUND COMMON. * 11: BG DISC RESIDENT USING FORGROUND COMMON. * 12: (CONVERTED TO TYPE 1) * 13: (CONVERTED TO 5, USES SAME COMMON AS MAIN) * 14: TYPE 6 THAT IS TO BE FOURCE LOADED TO THE LIBRARY. * 30: SUBSYSTEM GLOBAL MODULE * 17,18,19,25,26,27: TYPES 1,2,3,9,10,11 (RESP.) * W/ACCESS TO SSGA. * 15,16,20-24,28,29,31-99:UNUSED (TYPE + 80 IS USED TO * DESIGNATE AUTO SCHEDULE AT STARTUP, BUT MAY * ONLY BE ENTERED IN PARM PHASE. +80 IS JUST * A FLAG TO PARM PHASE, NOT STORED IN ID-SEG.) * * * FIX UP TABLE FORMAT * * FIX1: CORE ADDRESS * FIX2: INSTRUCTION CODE * FIX3: OFFSET * FIX4: ADDRESS OF LST ENTRY REFERENCED OR ZERO IF NONE. SKP * * ERROR CODES * * 1: INVALID TTY REPLY TO INITIALIZATION PARAMETERS * 2: CHECKSUM ERROR * 3: RECORD OUT OF SEQUENCE * 4: INVALID RECORD TYPE * 5: DUPLICATE ENTRY POINTS * 6: NOT USED * 7: LST,IDENT,FIXUP TABLE OVERFLOW * 8: DUPLICATE PROGRAM NAMES * 9: PARAMETER NAME ERROR * 10: PARAMETER TYPE ERROR * 11: PARAMETER PRIORITY ERROR * 12: PARAMETER EXECUTION INTERVAL ERROR * 13: BG SEGMENT PRECEDES BG DISC RESIDENT * 14: SYS AV MEM OR BG BOUNDARY ERRORS * 15: ILLEGAL CALL BY A TYPE 6 PROGRAM (MAY CALL TYPE 0 AND 6 ONLY) * 16: BP LINKAGE AREA OVERFLOW * 17: DISK OVERFLOW (NEXT DISK ADDR EXCEEDS LAST AVAIL DISK ADDR) * 18: MEMORY OVERFLOW * 19: ATTEMPT TO RESTART AFTER CLEAN-UP BEGUN * 20: NOT USED * 21: '$CIC' NOT FOUND IN LOADER SYMBOL TABLE * 22: DISK READ PARITY/DECODE ERROR * 23: INVALID FWA BP LINKAGE REPLY * 24: INVALID CHANNEL NO. IN EQT RECORD * 25: INVALID DRIVER NAME IN EQT RECORD * 26: INVALID D, B, U, OPERANDS IN EQT RECORD * 27: INVALID DEVICE REFERENCE NO. * 28: INVALID INTERRUPT REC CHANNEL NO. * 29: INVALID INTERRUPT REC CHANNEL NO. ORDER * 30: INVALID INT RECORD MNEMONIC * 31: INVALID EQT NO. IN INT RECORD * 32: INVALID PROGRAM NAME IN INT RECORD * 33: INVALID ENTRY POINT IN INT RECORD * 34: INVALID ABSOLUTE VALUE IN INT RECORD * 35: BP INTERRUPT LOCATION OVERFLOW * 36: INVALID TERMINATING OPERAND IN INT RECORD * 37: INVALID COMMON LENGTH IN SYS, LIB, OR SSGA MODULE..... * 38: ABSOLUTE SYSTEM HAS OVERLAYED A RELOCATABLE PROGRAM * 39: ILLEGAL SYSTEM CALL OF TYPE 6 PROGRAM * 40: MH RTEGN ATTEMPTED TO USE A DEFECTIVE CYLINDER * 41: MORE THAN 10 BAD TRACKS IN A MOVING HEAD SYSTEM * 42: ABSOLUTE SYSTEM INCLUDES A BAD TRACK * 43: DISC SPECIFICATIONS DO NOT CONFORM TO SYSTEM DISC SKP ******************************************************************** * * * M E U E R R O R C O D E S * * * ******************************************************************** SPC 1 * DURING DEFINITION OF PARTITIONS: * 44: INVALID PARTITION NUMBER * 45: INVALID PARTITION SIZE * 46: INVALID PARTITION TYPE * 47: INVALID PARTITION RESERVE * USER RESPONSE TO 44 THRU 47: REENTER DESCRIPTION * OF PARTITION IN QUESTION AND CONTINUE. * * 53: PARTITION SIZES DON'T TOTAL TO AVAILABLE AREA * USER RESPONSE TO 53: REDEFINE ALL PARTITIONS * * DURING ASSIGNMENT OF PROGRAMS TO PARTITIONS: * 48: INVALID OR UNKNOWN PROGRAM NAME * 49: INVALID PARTITION NUMBER * 50: PROGRAM TOO LARGE FOR PARTITION SPECIFIED * USER RESPONSE TO 48 THRU 50: REENTER ASSIGNMENT * OR GIVE UP AND CONTINUE * * DURING OVERRIDE OF PROGRAM SIZE REQMTS: * 48: (SAME AS ABOVE) * 51: INVALID SIZE (LARGER THAN ALLOWABLE OR * SMALLER THAN PROGRAM REQUIREMENT * USER RESPONSE TO 48 OR 51: REENTER SIZE OVERRIDE * OR GIVE UP AND CONTINUE * * DURING PROGRAM LOADING AND RELOCATION: * 52: MODULE WITHOUT SSGA BIT IN TYPE HAS * EXTERNAL REF TO AN SSGA ENTRY POINT * USER RESPONSE: CHANGE TYPE OR DELETE SSGA REFERENCE * 54: SUBROUTINE OR SEGMENT DECLARED MORE COMMON THAN MAIN * USER RESPONSE: RECOMPILE MAIN SPECIFYING MAX COMMON NEEDED HED RTE GENERATOR - CONSTANTS AND ADDRESSES * DRPTR EQU 101B PT READER DRIVER ADDRESS DRKEY EQU 102B KEYBOARD OUPUT DRIVER ADDRESS DRHSP EQU 103B HS PUNCH DRIVER ADDRESS DRTTY EQU 104B TELETYPE INPUT DRIVER ADDRESS FWAM EQU 105B LWAM EQU 106B END AVAIL. MEM - SET BY DRIVERS DRMAG EQU 107B (TEMP MAG TAPE DRIVER ADDR) . EQU 1650B ORIGIN OF SYS COMM AREA SPC 1 TRANS DEF RTEGN TRANSFER ADDR TO RTEGN AINPT DEF INPUT ADDRESS OF PROGRAM INPUT CODE APARS DEF PARAM ADDRESS OF PARAMETER INPUT CODE IFZ ***** BEGIN DMS CODE ***** APART DEF PARTS ADDRESS OF PARTITION DEF PHASE ****** END DMS CODE ****** XIF NRST DEF E19 ADDRESS OF RESTART ERROR CODE ADBP DEF DBPO STARTING ADDRESS OF DUMMY BASE PAGE NADBP BSS 1 THE NEG OF RTEGN START SKP * * PROGRAM CONSTANT FACTORS ZERO OCT 0 N1 DEC -1 N2 DEC -2 N3 DEC -3 N4 DEC -4 N5 DEC -5 N6 DEC -6 N7 DEC -7 N8 DEC -8 N9 DEC -9 N10 DEC -10 N11 DEC -11 N16 DEC -16 N27 DEC -27 N32 DEC -32 N64 DEC -64 N65 DEC -65 N80 DEC -80 N2048 DEC -2048 NDAY OCT 177574,025000 P2 DEC 2 P3 DEC 3 P4 DEC 4 P5 DEC 5 P6 DEC 6 P7 DEC 7 P8 DEC 8 P9 DEC 9 P11 DEC 11 P12 DEC 12 P13 DEC 13 P14 DEC 14 P15 DEC 15 P16 DEC 16 P17 DEC 17 P18 DEC 18 P19 DEC 19 P20 DEC 20 P21 DEC 21 P22 DEC 22 P23 DEC 23 P24 DEC 24 P25 DEC 25 P26 DEC 26 P28 DEC 28 P29 DEC 29 P30 DEC 30 P31 DEC 31 P32 DEC 32 P33 DEC 33 P60 DEC 60 P64 DEC 64 P99 DEC 99 P202 DEC 202 P6K DEC 6000 L6 EQU N6 L10 EQU N8 L12 EQU N10 L60 OCT -60 L2000 OCT -2000 M4 EQU P4 M7 EQU P7 M13 EQU P11 M17 EQU P15 M20 EQU P16 M37 EQU P31 M60 OCT 60 M77 OCT 77 M120 OCT 120 M177 OCT 177 M377 OCT 377 M777 OCT 777 M400 OCT 400 D128 DEC 128 M200 EQU D128 M0760 OCT 076000 M1740 OCT 174000 M1760 OCT 176000 M1600 OCT 160000 M1777 OCT 1777 M2000 OCT 2000 M2002 OCT 2002 M1377 OCT 100377 M4000 OCT 4000 M7400 OCT 177400 M7000 OCT 177000 M7600 OCT 177600 M7700 OCT 177700 M7777 OCT 77777 M0300 OCT 030000 M0400 OCT 040000 M1177 OCT 101777 SKP DPWRS DEF *+1 P0100 DEC 10000 P1000 DEC 1000 P100 DEC 100 P10 DEC 10 P1 DEC 1 OPWRS DEF *+1 M0100 OCT 10000 M1000 OCT 1000 M100 OCT 100 M10 OCT 10 OCT 1 * SUP BLANK OCT 040 BLANK UBLNK OCT 20000 UPPER CHAR BLANK MSIGN OCT 100000 NEGATIVE SIGN RPARB OCT 24440 RIGHT PAREN, BLANK SPC 3 * DBLNK DEF UBLNK DEF OF BLANK FOR SPACE ROUTINE TTYIN NOP ADDRESS OF THE TTY INPUT DRIVER (ACTUAL) LSTD NOP ADDRESS OF THE ACTUAL LIST DEVICE DRIVER DAOUT DEF ASOUT ADDRESS OF DUMMY LIST OUTPUT DRIVER DASIN DEF ASIN ADDRESS OF DUMMY INPUT DRIVER. SPC 2 IFN *** BEGIN NON-DMS CODE *** FWSCA EQU .-1 FIRST WORD OF SYS COMM AREA LWSBP ABS FWSCA LAST WORD OF BP LINK AREA +1 EOBP ABS -FWSCA #IREG EQU P2 NUMBER OF INDEX REGS (AMOUNT OF * SPACE ALLOWED FOR SAVING THEM) **** END NON-DMS CODE **** XIF IFZ ***** BEGIN DMS CODE ***** FWSCA EQU .-1 EXTEND COMM AREA FOR I-REG PTR LWSBP ABS FWSCA LWA BP LINK AREA +1 #IREG EQU P2 SAVE 2 I-REGS ****** END DMS CODE ****** XIF SPC 2 * ALL STARTS AND RESTARTS COME TO HERE. * BEGIN LDA DAOUT GET THE DUMMY DRIVER ADDRESS CPA DRKEY ALREADY SET UP? JMP TRANS,I YES GO RESTART THE CODE * LDB DRKEY GET THE ACTUAL ADDRESS STB LSTD AND SET FOR DUMMY ROUTINES LDB DRTTY GET THE ACTUAL INPUT DRIVER ADDRESS STB TTYIN AND SET FOR DUMMY ROUTINES STA DRKEY SET THE DUMMY ADDRESSES LDA DASIN GET THE DUMMY INPUT ROUTINE ADDRESS STA DRTTY AND SET IT. JMP TRANS,I GO DO THE RT GENERATION!! HED RTE GENERATOR BASE PAGE ROUTINES * THE INIDX,IDXS AND IDX SUBROUTINES ARE USED TO SET THE CURRENT * ADDRESSES FOR THE ENTRY IN THE PROGRAM IDENTIFICATION * BLOCK TABLE (IDENT). THE ADDRESS OF THE NEXT ENTRY * IN THE IDENT TABLE IS CONTAINED IN TIDNT. ON RETURN FROM * IDX, TIDNT CONTAINS THE ADDRESS OF THE NEXT AVAILABLE * ENTRY IN IDENT. THE ADDRESS OF THE FIRST ENTRY IS CONTAINED * IN BIDNT AND THE ADDRESS OF THE END OF IDENT IS CONTAINED * IN PIDNT. * * IDXS FINDS AN ENTRY IN THE TABLE. * * IF THE NEXT IDENT ENTRY OVERFLOWS INTO THE LAST LST ENTRY, * IDX PRINTS A DIAGNOSTIC AND EXITS TO THE IRRECOVERABLE ERROR * SUBROUTINE. * * SET INITIAL IDENT ADDRESS * * INIDX SETS THE ADDRESS OF THE FIRST ENTRY IN THE IDENT * TABLE AS THE CURRENT ADDRESS. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB INIDX * * RETURN: CONTENTS OF A DESTROYED, B PRESERVED * INIDX NOP LDA BIDNT BIDNT = INITIAL IDENT ADDRESS STA TIDNT SET CURRENT IDENT ADDRESS JMP INIDX,I RETURN SKP * IDXS FINDS AN ID ENTRY IN THE IDENT TABLE. * * CALLING SEQUENCE: * A = IGNORED * B = ADDRESS OF THE NAME TO FIND. * JSB IDXS * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * (N+1): CURRENT IDENT ADDRESSES ARE FOR THE NEXT FREE ENTRY IN * THE IDENT LIST. SYMBOL NOT FOUND. * (N+2): CURRENT IDENT ADDRESSES ARE FOR THE SPECIFIED PROGRAM. * IDXS NOP JSB INIDX INIT TIDNT TO 1ST IDENT ADDR STB INIDX SAVE PTR TO ASCII NAME * ** OTHER SUBS MAY WANT NAME PTR IN INIDX ** LDB TIDNT B WILL KEEP ADDR IN IDENT JMP IDXS7 JUMP TO END TO ENTER LOOP SPC 1 IDXS2 ADB N8 POINT TO NEXT IDENT IDXS3 CPB PIDNT IF AT END OF IDENTS JMP IDXS4 THEN LEAVE... CPA B,I ELSE IF 1ST 2 CHARS RSS DON'T MATCH JMP IDXS2 TRY NEXT IDENT SPC 1 ISZ IDXST 1ST 2 MATCH, GET LDA IDXST,I NEXT 2 FROM INPUT INB AND FROM IDENT. CPA B,I IF NOT A MATCH RSS THEN JUMP TO UPDATE JMP IDXS5 IDENT PTR AND CONTINUE. SPC 1 ISZ IDXST 1ST 4 CHARS MATCH, LDA IDXST,I GET NEXT FROM INPUT INB AND IDENT XOR B,I AND M7400 COMPARE UPPER BYTE ONLY SZA AND IF NO MATCH JMP IDXS6 GO GET NEXT IDENT SPC 1 * MATCH OCCURRED - BACKUP POINTER TO BEGINNING OF IDENT SPC 1 ADB N2 POINT TO START OF IDENT SPC 1 * MATCH OR NOT..... SET UP IDENT POINTERS USING 'IDX' SPC 1 IDXS4 STB TIDNT POINT TIDNT AT CURRENT IDENT JSB IDX GO SET IDENT POINTERS JMP IDXS,I NO MATCH - RETURN AT N+1 ISZ IDXS JMP IDXS,I MATCH - RETURN AT N+2 SPC 1 IDXS5 ADB P1 JUGGLE A LITTLE IDXS6 ADB N10 TO GET NEXT IDENT ADDR IDXS7 LDA INIDX RESET POINTER TO STA IDXST START OF NAME. LDA A,I PUT 1ST CHARS IN A. JMP IDXS3 GO CHECK NEXT IDENT IDXST BSS 1 TEMPORARY SPC 3 * * SET IDENT ADDRESSES FROM TIDNT * * IDX SETS THE ADDRESSES OF THE CURRENT 10-WORD ENTRY IN THE * IDENT TABLE FROM THE ADDRESS OF THE CURRENT ENTRY (TIDNT). * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB IDX * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * (N+1): CURRENT IDENT ADDRESSES ARE THE ADDRESSES * OF THE NEXT AVAILABLE IDENT ENTRY, OR THE * END OF THE IDENT TABLE HAS BEEN REACHED. * (N+2): CURRENT IDENT ENTRY ADDRESSES (NOT END OF IDENT) * IDX NOP LDA TIDNT TIDNT = CURRENT IDENT ADDRESS CPA PIDNT END OF IDENT LIST? RSS YES - RETURN TO NEXT INSTRUCTION ISZ IDX SET RETURN ADDRESS FOR N+2 STA ID1 SET ADDRESS OF NAME 1,2 INA STA ID2 SET ADDRESS OF NAME 3,4 INA STA ID3 SET ADDRESS OF NAME 5, USE FLAG INA STA ID4 SET ADDRESS OF COM/PROG LENGTH INA STA ID5 SET ADDRESS OF CURRENT DISK ADDR INA STA ID6 SET ADDRESS OF M/S,PRIOR/DISK,TY INA STA ID7 SET ADDRESS OF EXEC INTERV(1) INA STA ID8 SET MAIN IDENT ADDR FOR BS LDA TIDNT TIDNT = CURRENT IDENT ADDR CMA,INA ADA PLST PLST = CURRENT END LST ADDR SSA,RSS SKIP IF NO OVERLAP JMP LSERR PRINT OVERFLOW MESSAGE * LDA TIDNT GET CURRENT ADDRESS AND ADA N8 SET FOR NEXT IDENT ADDRESS STA TIDNT SET NEXT IDENT ADDRESS JMP IDX,I RETURN SKP * THE INLST, LSTS, LSTE AND LSTX SUBROUTINES ARE USED TO SET THE * CURRENT LOADER SYMBOL TABLE (LST) ADDRESSES. THE ADDR OF THE * NEXT ENTRY IN LST IS CONTAINED IN TLST. ON RETURN FROM IDX, * TLST CONTAINS THE ADDRESS OF THE NEXT AVAILABLE ENTRY IN LST, OR * THE ADDRESS OF THE END OF LST. THE ADDRESS OF THE FIRST ENTRY * IN LST IS AT BLST AND THE ADDRESS OF THE NEXT AVAILABLE ENTRY * IS AT PLST. * * IF THE NEXT ENTRY IN LST OVERFLOWS INTO THE CURRENT * IDENT ENTRY, LSTX PRINTS A DIAGNOSTIC AND EXITS * TO THE IRRECOVERABLE ERROR SUBROUTINE. * * SET INITIAL LST ADDRESS * * INLST SETS THE ADDRESS OF THE FIRST ENTRY IN LST. * INLST NOP LDA BLST BLST = FIRST LST ADDRESS STA TLST SET CURRENT LST ADDRESS JMP INLST,I RETURN SKP * LSTS SEARCHED THE LST FOR A SPECIFIED ENTRY. * * CALLING SEQUENCE: * A = IGNORED * B = ADDRESS OF THE ASCII NAME TO BE FOUND. * JSB LSTS * * RETURN: CONTENTS OF A AND B DESTROYED. * (N+1): THE END OF THE LST WAS FOUND WITH OUT FINDING THE * SYMBOL. THE LST ENTRIES ARE SET TO THE NEXT AVAILABLE * ENTRY. * (N+2): THE CURRENT LST ADDRESS POINT TO THE FOUND ENTRY. * LSTS NOP JSB INLST INIT TLST TO 1ST LST ADDRDDR STB INLST SAVE PTR TO ASCII NAME * ** SOME SUBS EXPECT LSTS TO STORE THIS ** * ** POINTER IN INLST'S ENTRY POINT ** LDB TLST B WILL KEEP ADDR IN LST JMP LSTS7 ENTER LOOP AT END. SPC 1 LSTS2 ADB P5 POINT TO NEXT LST LSTS3 CPB PLST IF AT END OF LSTS JMP LSTS4 THEN LEAVE... CPA B,I ELSE IF 1ST 2 CHARS RSS DON'T MATCH JMP LSTS2 TRY NEXT LST SPC 1 ISZ LSTST 1ST 2 MATCH, GET LDA LSTST,I NEXT 2 FROM INPUT INB AND FROM LST. CPA B,I IF NOT A MATCH RSS THEN JUMP TO UPDATE JMP LSTS6 LST PTR AND CONTINUE. SPC 1 ISZ LSTST 1ST 4 CHARS MATCH, LDA LSTST,I GET NEXT FROM INPUT INB AND LST XOR B,I AND M7400 COMPARE UPPER BYTE ONLY SZA AND IF NO MATCH JMP LSTS5 GO GET NEXT LST SPC 1 * MATCH OCCURRED - BACKUP POINTER TO BEGINNING OF LST SPC 1 ADB N2 POINT TO START OF LST SPC 1 * MATCH OR NOT..... SET UP LST POINTERS USING 'LSTX' SPC 1 LSTS4 STB TLST POINT TLST AT CURRENT LST JSB LSTX GO SET LST POINTERS JMP LSTS,I NO MATCH - RETURN AT N+1 ISZ LSTS JMP LSTS,I MATCH - RETURN AT N+2 SPC 1 LSTS5 ADB N1 JUGGLE A LITTLE LSTS6 ADB P4 TO GET NEXT LST ADDR LSTS7 LDA INLST RESET PTR TO STA LSTST ASCII NAME. LDA A,I PUT 1ST 2 CHARS IN A. JMP LSTS3 GO CHECK NEXT IDENT.... LSTST BSS 1 TEMPORARY SKP * * SET LST ADDRESSES FROM TLST * * LSTX SETS THE CURRENT LST ADDRESSES FROM TLST. * * CALLING SEQUENCE: * A = IGNORED * B = IGNORED * JSB LSTX * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * (N+1): THE END OF LST IS REACHED AND THE CURRENT * LST ADDRESSES ARE THE ADDRESSES OF THE NEXT AVAILABLE * ENTRY IN LST. * (N+2): CURRENT LST ADDRESSES ARE SET (NOT END OF LST). * LSTX NOP LDA TLST GET CURRENT LST ADDRESS CPA PLST END OF LST TABLE? RSS ISZ LSTX INCR RETURN ADDRESS STA LST1 SET WORD 1 ADDR INA STA LST2 SET WORD 2 ADDR INA STA LST3 SET WORD 3 ADDR INA STA LST4 SET WORD 4 ADDR INA STA LST5 SET WORD 5 ADDR INA STA TLST SET NEXT LST ADDRESS CMA,INA ADA PIDNT PIDNT = ADDR CURRENT IDENT SSA,RSS SKIP - INVALID LST ENTRY JMP LSTX,I RETURN * * LSERR LDA ERR07 JSB IRERR IRRECOVERABLE ERROR EXIT * ERR07 ASC 1,07 IDENT/LST OVERFLOW SKP * ENTRY A NEW SYMBOL * * LSTE SEARCHS THE LST FOR A SYMBOL AND IF NOT FOUND ENTERS IT * IN THE LST. * * CALLING SEQUENCE: * A = IGNORED * B = SYMBOL ADDRESS * JSB LSTE * * RETURN: CONTENTS OF A AND B ARE DESTROYED. * (N+1): SYMBOL IS NEW AND WAS ENTRED, LST ADDRESS ARE SET UP * (N+2): SYMBOL WAS IN LST. LST ADDRESS ARE SET UP. * LSTE NOP JSB LSTS SEARCH FOR THE SYMBOL JMP LSTE2 IF NOT FOUND GO ENTER * ISZ LSTE STEP TO ALREADY IN LST EXIT JMP LSTE,I AND EXIT * LSTE2 LDB INLST,I GET THE FIRST CHARACTERS OF NEW STB LST1,I SYMBOL AND SET IN THE LIST ISZ INLST STEP TO NEXT CHARACTERS LDA INLST,I GET THE CHARACTERS STA LST2,I AND SET ISZ INLST STEP TO THE LAST CHARACTER LDA INLST,I FETCH IT AND M7400 KEEP ONLY THE HIGH CHARACTER STA LST3,I SET IT IN THE LST CLA CLEAR STA LST4,I THE IDENT FLAG STA LST5,I AND VALUE FIELDS LDA LST5 ADVANCE THE END OF THE LST INA BY STA PLST ONE ENTRY JMP LSTE,I EXIT BACK TO THE USER HED RTE GENERATOR BASE PAGE WORKING LOCATIONS AND BUFFERS * RELOCATION BASE TABLE MRTAD DEF TPREL DEF FOR MR FIELD RBTAD DEF *+1 OCT 0 ABSOLUTE PROGRAM BASE TPREL OCT 0 CURRENT PROG BASE ADDRESS TPBRE OCT 0 BP RELOCATION ADDRESS COMAD OCT 0 CURRENT COMMON RELOCATION BASE NOP ABS PROGRAM BASE FOR MR CODE * ALBUF DEF LBUF ADBUF DEF DBUF ATBUF DEF TBUF AMLST DEF MLIST AMEM5 DEF MLIST+5 AMEM8 DEF MLIST+8 AILST DEF ILIST * WDCNT OCT 0 TEMPORARY WORD COUNTER * BLST NOP ADDR OF FIRST LST ENTRY TLST BSS 1 CURRENT LST ADDR PLST NOP ADDR OF NEXT AVAILABLE ENTRY * BIDNT BSS 1 ADDR OF FIRST IDENT TIDNT BSS 1 CURRENT IDENT PIDNT OCT 36000 NEXT AVAILABLE IDENT * BFIX NOP TFIX NOP PFIX NOP * * THE LST POINTERS BELOW CANNOT BE MOVED WITHOUT CHANGING * THE DRIVER (RTGEN PART 2)....THEY ARE EQUATED THERE ALSO. * LST1 EQU 07B WORD 1 ADDR (LST) LST2 EQU 10B WORD 2 ADDR (LST) LST3 EQU 11B WORD 3 ADDR (LST) LST4 EQU 12B WORD 4 ADDR (LST) LST5 EQU 13B WORD 5 ADDR (LST) * MAXC EQU 14B MAX CHAR COUNT TCHAR EQU 15B TEMPORARY CHAR SAVE AREA OCTNO EQU 16B OCTAL DIGIT * DSKSY EQU 17B INITIAL ID SEGMENT DISK ADDRESS PIOC EQU 20B ADDR. OF PRIVILEGED I/O CARD IDSP EQU 21B POSITION OF 1ST ID SEG. IN SECT TBCHN EQU 22B TIME BASE GENERATOR CHNL SWAPF EQU 23B SWAPPING FLAG = 0/1 = NO/YES LWASM EQU 24B LAST WORD SYS AVAIL MEM PARAD EQU 25B PARAMETER INPUT DRIVER ADDRESS TTYCH EQU 26B SYSTEM TTY CHANNEL NO. * DSKAD EQU 27B CURRENT DISK ADDRESS PLFLG EQU 30B PROGRAM LOAD. FLAG = -1/0 = L/NL DSCNT EQU 31B DISK SEGMENT SECTOR COUNT * ID1 EQU 32B IDENT 1 ADDR: NAME 1,2 ID2 EQU 33B IDENT 2 ADDR: NAME 3,4 ID3 EQU 34B IDENT 3 ADDR: NAME 5, USAGE FLAG ID4 EQU 35B IDENT 4 ADDR: COMMON LENGTH