ASMB,R,L,C,N HED RT4GN ---- MAIN FOR ON-LINE GENERATOR NAM RT4GN,3,90 92067-16009 REV.1926 790427 SPC 1 ****************************************************************** * * (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. * ****************************************************************** SPC 2 SPC 1 ************************************************************ * * NAME: RT4GN * SOURCE PART #: 92067-18009 * REL PART #: 92067-16009 * WRITTEN BY: KFH, JH, RB, GAA * ************************************************************* SPC 2 * * * DEFINE ENTRY POINTS. * * OPERATOR INPUT SUBROUTINES: * ENT \PRMT PRINT COMMAND AND ACCEPT INPUT. ENT \READ \READ INPUT. ENT \RNME SPECIAL ENTRY TO READ SUBR. ENT \YENO ANALYZE YES/NO RESPONSE. ENT \DCON ANALYZE INPUT FOR OCTAL VALUE. ENT \GETC SUPPLY CHAR FOR GETNA & GETOC. ENT \GETN MOVE LBUF TO TBUF. ENT \GET# LBUF CHAR FROM ASCII TO OCTAL. ENT \GINT INITIALIZE LBUF SCAN. * * DIAGNOSTIC SUBROUTINES: * ENT \GNER PRINT DIAGNOSTIC. ENT \INER CALL ERROR AND CONTINUE. ENT \IRER CALL ERROR AND ABORT. ENT \ABOR \ABOR THE GENERATION. * * DISC FILE I/O SUBROUTINES: * ENT \CRET CREATE A FILE. ENT \CLOS CLOSE A FILE. ENT \TRUN CLOSE RTGEN OUTPUT FILE. ENT \CFIL CHECK FOR FILE ERRORS. ENT \MESS WRITE ON INTERACTIVE DEVICE. ENT \SPAC OUTPUT BLANK LINE. ENT \RNAM FIND A NAM RECORD IN A FILE. ENT \RBIN READ RELOCATABLE FILE. ENT \TERM PURGE ALL FILES ON ABORT. ENT \EXIT FINAL FILE CLEANUP * * CORE-IMAGE OUTPUT FILE SUBROUTINES. * ENT \DSKA INCR. DISC ADDRESS. ENT \DSKI INPUT CONTROL. ENT \DSKO OUTPUT CONTROL. ENT \DSKD I/O SUBROUTINE. * * DCB'S: * ENT \RDCB RELOCATABLE FILE DCB. ENT \NDCB NEW-NAM FILE DCB. ENT \BDCB BOOT DCB * * LST, IDENT, FIX-UP SUBS AND POINTERS. * ENT \ILST,\LSTS,\LSTX,\LSTE ENT \TLST,\PLST ENT \LST1,\LST2,\LST3,\LST4,\LST5 * ENT \INID,\IDXS,\IDX ENT \TIDN,\PIDN ENT \ID1,\ID2,\ID3,\ID4,\ID5,\ID6,\ID7,\ID8,\ID9,\ID10,\ID11 ENT \ID12,\ID13,\ID14,\ID15,\ID16 * ENT \IFIX,\FIX,\PFIX,\TFIX ENT \FIX1,\FIX2,\FIX3,\FIX4 * ENT \LNKX,\LNK,\LNKS ENT \LNK1,\LNK2,\LNK3 * * LINKAGES FOR SEGMENT SUBR CALLS TO ANOTHER SEGMENT. * ENT \LODN LOADS A PROGRAM ENT \DPLD LOADS A DRIVER EXT \NLOD (RT4G4) * ENT \GNIO BUILDS I-O TABLES EXT \IOTB (RT4G5) * EXT \GENS BUILDS THE SYSTEM (RT4G3) * EXT \TB31 BUILDS $TB31 (RT4G1) EXT \TB32 BUILDS $TB32 (RT4G7) * ENT \FSEC CLEAN-UP BOOT EXTENSION AND HEADER RECORDS EXT \FSC0 (RT4G1) EXT \FSC5 (RT4G7) * ENT \SYTB BUILDS SYSTEM TABLES EXT \TBLS (RT4G5) * ENT \CLDP LOADS DRIVER PARTITIONS ENT \DDON EXT \\LDP (RT4G8) * ENT \PART PARTITION DEFINITION EXT \PDEF (RT4G6) * * POINTERS FOR CURRENT PAGE LINKAGE IMAGE AREA. * ENT \TBLK,\CPLM ENT \LRBP,\URBP,\IRBP ENT \CUBP,\UCBP,\ICBP,\CBPA * * MISCELLANEOUS SUBROUTINES: * ENT \CONV ENT \ABDO,\USER,\USRS,\SEGS,\SYS,\DSYS * * MISCELLANEOUS VARIABLES: * ENT \NAMN,\NAMB,\NAMO ENT \TRCM,\IACM,\TRCH ENT \SRET ENT \FMRR ENT \DPR2 ENT \BPAR ENT \OCTN ENT \BUFL ENT \TCHR ENT \ADSK,\PREL,\NUMP ENT \ADBF ENT \MRT2 ENT \PTYP ENT \TMSK ENT \RNT,\PRV ENT \TBCH,\PIOC,\SWPF ENT \LBUF,\TBUF ENT \CURL,\CPL2 ENT \CMFL ENT \ABCO,\MXAB ENT \OLDA ENT \ADBP,\NABP ENT \OBUF ENT \TIME,\TIM1,\MULR ENT \CPLB,\ASKY,\SSID,\SKYA * SKP * * DEFINE EXTERNALS * EXT \PIP,LURQ,RMPAR,IFBRK EXT WRITF,EXEC,CLOSE EXT LOCF,APOSN EXT CREAT,OPEN,READF,CNUMD EXT .ENTR EXT COR.A,\DST0,\BOT0 EXT GETST EXT \DST5,\BOT5 * SPC 2 * * DEFINE A AND B REG * A EQU 0 B EQU 1 SUP SPC 3 LST#T DEC 2 # LST TRACKS. IDT#T DEC 3 # IDENT TRACKS. FIX#T DEC 1 # FIX-UP TRACKS. SECWD DEC 128 # WORDS PER SECTOR. SKP * IDENT FORMAT * * WORD 1: \ID1 - NAME 1,2 * WORD 2: \ID2 - NAME 3,4 * WORD 3: \ID3 - (15-8) NAME 5 * (7-3) NOT USED * (2-0) USAGE FLAG * (2) MODULE WAS LOADED * (1) MUST LOAD MODULE (EXT DEFINED BY IT) * (0) MODULE WAS LOADED AS PART OF A SEGMENT * WORD 4: \ID4 - (15) MAIN PROGRAM * (14-0) COMMON LENGTH * WORD 5: \ID5 - (15) BASE/CURRENT PAGE LINKING FLAG * (14) NEW NAM RECORD FLAG * (13-4) EMA SIZE * (3-0) MAP OPTIONS * (2) LINKS * (1) MODULES * (0) GLOBALS * WORD 6: \ID6 - (15) EMA DECLARED * (14-10) MSEG SIZE * (9-7) NOT USED * (6-0) PROGRAM TYPE * (4) SSGA DECLARED * (3) REVERSE COMMON DECLARED * WORD 7: \ID7 - LOWEST DBL ADDRESS * WORD 8: \ID8 - DISK LENGTH FOR UTILITY RELOCATABLES * OR MAIN IDENT INDEX FOR SEGMENTS * OR (15-8) PROGRAM PAGE REQMTS * (7-0) KEYWORD INDEX * OR (15) EQT DEFINED * (14) SDA DECLARED * (13) SDA/OWN MAPPING DECLARED * (13-0) DRIVER LENGTH * WORD 9: \ID9 - FILE NAME 1,2 * WORD 10: \ID10 - FILE NAME 3,4 * WORD 11: \ID11 - FILE NAME 5,6 * WORD 12: \ID12 - SECURITY CODE * WORD 13: \ID13 - CARTRIDGE LABEL * WORD 14: \ID14 - RECORD NUMBER * WORD 15: \ID15 - RELATIVE BLOCK * WORD 16: \ID16 - BLOCK OFFSET * SKP * * LST FORMAT * * WORD 1: \LST1 - NAME 1,2 * WORD 2: \LST2 - NAME 3,4 * WORD 3: \LST3 - NAME 5, ORDINAL * WORD 4: \LST4 - IDENT INDEX OR 2 IF COMMON * 3 IF ABSOLUTE * 4 IF REPLACE * 5 IF UNDEFINED * 6 IF EMA * WORD 5: \LST5 - SYMBOL VALUE, OR IDENT INDEX IF EMA * * * * FIXUP TABLE FORMAT * * \FIX1: CORE ADDRESS * \FIX2: (15-11) INSTRUCTION CODE * (10) BYTE INSTR * (9) UPPER BP LINK * (2-0) DBL RECORD TYPE * \FIX3: OFFSET * \FIX4: INDEX OF LST ENTRY REFERENCED, * OR 0 IF A LOCAL SYMBOL * OR -1 IF .ZRNT * * * * * PROGRAM TYPES * * 0: SYSTEM * 1: MEMORY RESIDENT * 2: RT DISK RESIDENT * 3: BG DISK RESIDENT * 4: ENLARGED BG DISK RESIDENT * 5: BG SEGMENT * 6: LIBRARY/UTILITY * 7: UTILITY * 8: UTILITY 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: ENLARGED BG DISC RESIDENT USING REALTIME COMMON * 13: TABLE AREA II * 14: TYPE 6 LIBRARY/UTILITY THAT IS TO BE FOURCE LOADED TO THE LIBRARY. * 15: TABLE AREA I * 30: SUBSYSTEM GLOBAL MODULE * 17,18,19,20,25,26,27,28: TYPES 1,2,3,4,9,10,11,12 (RESP) W/SSGA ACCESS * 21-24,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.) SKP * * ERROR CODES * * 0/ HARDWARE/GENERATOR ERROR (SEND IN BUG REPORT) * 1: INVALID REPLY TO INITIALIZATION PARAMETERS * 2: INSUFFICIENT AMOUNT OF AVAILABLE MEMORY FOR TABLES * 3: RECORD OUT OF SEQUENCE * 4: INVALID RECORD TYPE * 5: DUPLICATE ENTRY POINTS * 6: COMMAND ERROR - PROGRAM INPUT PHASE * 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: CHECKSUM ERROR * 15: ILLEGAL CALL BY A TYPE 6 OR 14 PROGRAM TO A TYPE 7 * 16: BP LINKAGE AREA OVERFLOW * 17: TYPE 1 OUTPUT FILE OVERFLOW (ESTIMATE WAS NOT LARGE ENOUGH) * 18: MEMORY OVERFLOW * 19: TR STACK UNDERFLOW/OVERFLOW * * 20: INVALID COMMAND INPUT LU * 21: '$CIC' NOT FOUND IN LOADER SYMBOL TABLE * 22: LIST FILE ERROR * 23: INVALID S OR M OPERANDS * 24: INVALID SELECT CODE IN EQT ENTRY * 25: INVALID DRIVER NAME IN EQT ENTRY * 26: INVALID D,B,U,T,X,S,M OPERANDS IN EQT ENTRY * 27: INVALID DEVICE REFERENCE NO. * 28: INVALID INTERRUPT SELECT CODE * 29: INVALID INTERRUPT SELECT CODE ORDER * * 30: INVALID INT ENTRY MNEMONIC * 31: INVALID EQT NO. IN INT ENTRY * 32: INVALID PROGRAM NAME IN INT ENTRY * 33: INVALID ENTRY POINT IN INT ENTRY * 34: INVALID ABSOLUTE VALUE IN INT ENTRY * 35: MORE THAN 63 EQT OR 255 DRT ENTRIES DEFINED * 36: INVALID TERMINATING OPERAND IN INT ENTRY * 37: INVALID COMMON LENGTH IN SYS, LIB, OR SSGA MODULE..... * 38: ID-SEGMENT OF SEGMENT 3 NOT FOUND * 39: NOT USED * * 40: INVALID EMA PROGRAM TYPE * 41: MULTIPLE EMA DECLARATIONS * 42: INVALID REFERENCE TO EMA SYMBOL * 43: INVALID MSEG SIZE * 44: SAM EXCEEDS 32K LOGICAL ADDRESS SPACE * 45: INVALID PARTITION SIZE * 46: INVALID PARTITION TYPE * 47: INVALID PARTITION RESERVATION * 48: INVALID OR UNKNOWN ASSIGNED PROGRAM NAME * 49: INVALID PARTITION NUMBER * * 50: PROGRAM TOO LARGE FOR PARTITION SPECIFIED * 51: INVALID PAGE OVERRIDE SIZE * 52: ILLEGAL REFERENCE TO SSGA ENTRY POINT * 53: SUM OF PARTITION SIZES DOESN'T EQUAL # PAGES LEFT * 54: SUBROUTINE OR SEGMENT DECLARED MORE COMMON THAN MAIN * 55: PAGE REQ'MTS OF EMA PROGRAM CAN'T BE OVERRIDDEN * 56: SUBPARTITION SIZE OR SUM OF SIZES > THAN MOTHER PART'N SIZE * 57: MISSING SYSTEM ENTRY POINT * 58: ILLEGAL REF TO TYPE 0 SYSTEM ENTRY POINT BY NON-TYPE 3 MODULE * 59: DRIVER PARTITION OVERFLOW * * 60: LONG ID SEGMENT LIMIT OF 254 EXCEEDED * 61: PHYSICAL MEMORY OVERFLOW * 62: INVALID INSTRUCTION REFERENCE TO AN EMA SYMBOL SKP DBP EQU * FWA DUMMY BASE PAGE. * ************************************************ * * * THE NEXT 1K IS OVERLAID FOR DUMMY BASE PAGE * * WHEN RT4G3 BEGINS EXECUTION. * * * ************************************************ SPC 5 START NOP STB PARS5 JSB RMPAR DEF *+2 DEF PARS5 * * * SET UP COMMAND LU OR FILE, AND THE ERRLU * LDA PARS5 GET PARAMETER 1 SZA,RSS IF NOT SPECIFIED, THEN ISZ PARS5 DEFAULT TO LU 1 FOR INPUT AND B1774 MASK FOR TYPE SZA,RSS NUMERIC? JMP NOPRM YES, GO SET UP CMDLU * JSB GETST RETRIEVE PARAMETERS DEF *+4 DLBUF DEF \LBUF DEF P48 DEF \FMRR * RBL CONVERT TO CHARACTERS LDA DLBUF GET INPTU BUFFER ADDRESS JSB \PARS GO PARSE THE PARAMETER STRING DEF PARS2 INTO THE PARSE BUFFER AT WORD 2 JMP STRT2 * NOPRM LDB PARS5 SET UP THE COMMAND LU STB PRS21 CLA,INA STA PARS2 PARAMETER TYPE 1 * STRT2 LDA RWSUB GET POTENTIAL R/W SUBFUCTION STA PARS5 SAVE FOR OPEN CALL * JSB STATE SET THE STATE FLAGS \IACM & CMDLU JMP INVLU INVALID INPUT LU SPECIFIED - GO RECOVER LDA CMDLU IF AN INTERACTIVE LU, SET THE LDB \IACM 1 MEANS INTERACTIVE SZB,RSS CLA,INA DEFAULT TO LU 1 STA ERRLU ERROR LU * JSB FOPEN GO OPEN FILE DEF *+3 DEF \IDCB DEF PARS5 LDA \FMRR SSA,RSS ANY ERRORS? JMP STRT3 NO CMA,INA SET POS. FOR CONVERT STA \FMRR JSB CNUMD GET DEC ERROR CODE DEF *+3 DEF \FMRR DEF FERMA ERROR MESSAGE ADDR LDA FERMA+2 GET LAST TWO CHARACTERS STA FILEA+6 LDA DNAM MOVE THE FILE NAME LDB DFILE MVW P3 * JSB EXEC SEND ERROR TO OPERATOR LU DEF *+5 DEF P2 DEF ERRLU DEF FILEA+1 DEF P10 STRT4 CLB SET BACK TO LU 1 STB CMDLU STB \IACM INB STB ERRLU JMP NOPRM+1 START OVER * INVLU JSB EXEC INVALID INPUT LU SPECIFIED DEF *+5 ISSUE ERROR MESSAGE TO LU 1 (NOW DEF P2 DEFAULT ERRLU) DEF P1 DEF GNR20 DEF P5 JMP STRT4 SET UP THE INPUT LU * STRT3 CLA JSB PUSH GO PLACE ON STACK JSB \TERM ERROR RETURN - CAN'T HAPPEN! * LDA ERRLU WE'RE GOING TO OVERLAY 3 WORDS CMA,INA LDB DSTRT AT STRT3 - IN ORDER TO SETUP JSB \CONV THE ERROR COMMAND: LDA STRT3+2 "TR,ERRLU" STA TRCOM+2 STORE THE ASCII LU * LDA \CPLM NEGATE HIGH END OF CURRENT CMA,INA PAGE LINK LIMIT IMAGE STA \CPLM AREA SKP * ALLOCATE SPACE FOR FIX-UP,IDENT, AND LST TABLES: * * DETERMINE HOW MUCH CORE REMAINS BEYOND LONGEST * SEGMENT, DIVIDE INTO 3 BLOCKS FOR IN-CORE CHUNKS * OF TABLES, AND ALLOCATE DISC SPACE FOR TABLE STORAGE. * AVAILABLE CORE MUST BE AT LEAST 512 WORDS. * THE LST IS ALLOCATED LAST TO USE WASTED CORE FROM * FIXUP & IDENT BLOCKS. * LDA 1657B ADDR OF KEYWORD TABLE. STA TEMP1 TRY LDB TEMP1,I GET NEXT ID SEG ADDRESS SZB END OF TABLE IF ZERO JMP TRYY LDA ERR38 SEGMENT 3'S ID SEGMENT IS MISSING JMP NROOM+1 SEND ERROR & TERMINATE * TRYY ADB P12 GET TO NAME. LDA B,I GET FIRST TWO CHAR. * * DYNAMICALLY DETERMINE LONGEST SEGMENT * CPA AS.RT "RT4G3" = LONGEST SEGMENT. RSS MATCH. JMP NEXT INB LDA B,I GET SECOND TWO CHAR. CPA AS.GN RSS MATCH. JMP NEXT INB LDA B,I AND M7400 CPA AS.3 "3". JMP MATCH NEXT ISZ TEMP1 JMP TRY * MATCH LDA TEMP1,I GET ADDR OF IDSEG. JSB COR.A GET TO LWAM OF SEGMENT. INA GET FWAM. STA FWAM SAVE AS FIRST WORD AVAIL. MEM. CMA,INA GET SIZE OF UNDECLARED CORE. ADA LWAM LWAM SET BY RTE. STA NEXT LDA N512 MAKE SURE ENOUGH CORE. ADA NEXT AT LEAST 512 WORDS WORTH SSA JMP NROOM NO ROOM. BAIL OUT. LDA NEXT CLB DIV P4 ALLOCATE AVAILABLE MEMORY: STA TEMP1 1/4 TH FOR FIXUP TABLE, AND CMA,INA 3/8 TH'S EACH FOR IDENT AND LST ADA NEXT ARS DIVIDE BY 2 STA TEMP2 * * SET UP FIX-UP TABLE. * LDA TEMP1 CLB TRUNCATE BLOCK SIZE DIV P6144 IF GREATER THAN 6144 (#WORDS/TRACK) SZA LDB P6144 TO ONE TRACK STB A SETF0 CLB DIV SECWD SEE HOW MANY SECTORS FIT. STA FX.#S SAVE # SECT PER FIX-UP BLOCK. MPY SECWD CONVERT TO WORDS FOR LENGTH. STA LFIX OF DISC READS AND WRITES. CLB BLOCK MULTIPLE MUST END ON A TRACK LDA P6144 BOUNDARY AS WELL DIV LFIX SZB,RSS JMP SETF1 OK LDA LFIX ADA N128 DECREMENT SIZE BY ONE SECTOR JMP SETF0 SETF1 LDA LFIX CLB GET # 4 WORD ENTRIES IN DIV P4 THE BLOCK. STA EFIX SAVE # ENTRIES IN BLOCK. * LDA FWAM INITIALIZE FIX-UP POINTERS: STA BFIX FIRST ENTRY, CLA STA \PFIX # ENTRIES USED, STA \TFIX CURRENT ENTRY INDEX. STA B.F 1ST ENTRY NOW IN CORE. * * SET UP IDENT TABLE. THIS ONE HAS AN OFFSET OF +10. * LDA BFIX SET FWA IDENT AREA AT ADA LFIX STA BIDNT END OF FIX-UP AREA. LDA TEMP2 GET BLOCK CLB TRUNCATE BLOCK SIZE DIV P6144 IF GREATER THAN 6144 (#WORDS/TRACK) SZA LDB P6144 TO ONE TRACK STB A SETI0 CLB DIV SECWD SEE HOW MANY SECTORS FIT STA ID.#S MPY SECWD CONVERT TO WORDS FOR LENGTH STA LIDNT CLB BLOCK MULTIPLE MUST END ON LDA P6144 TRACK BOUNDARY AS WELL DIV LIDNT SZB,RSS JMP SETI1 OK LDA LIDNT DECREMENT BLOCK ADA N128 SIZE BY ONE SECTOR JMP SETI0 SETI1 LDA LIDNT CLB GET # 16 WORD ENTRIES IN DIV P16 THE BLOCK. STA EIDNT SAVE # ENTRIES IN BLOCK. * LDA P10 INITIALIZE IDENT POINTERS: STA \PIDN # ENTRIES USED +10, STA \TIDN CURRENT ENTRY INDEX, STA B.I 1ST ENTRY INDEX NOW IN CORE. * * SET UP LOADER SYMBOL TABLE (LST). * LDA BIDNT SET FWA LST AREA AT END ADA LIDNT STA BLST OF IDENT AREA. CMA,INA USE ALL OF REMAINING ADA LWAM AVAILABLE MEMORY. CLB TRUNCATE BLOCK SIZE DIV P6144 IF GREATER THAN 6144 (#WORDS/TRACK) SZA LDB P6144 TO ONE TRACK STB A SETL0 CLB DIV SECWD SEE HOW MANY SECTORS FIT. STA LS.#S SAVE # SECT PER LST BLOCK. MPY SECWD CONVERT TO WORDS FOR LENGTH STA LLST OF DISC READS AND WRITES. CLB LDA P6144 BLOCK MULTIPLE DIV LLST MUST END ON TRACK SZB,RSS BOUNDARY AS WELL JMP SETL1 LDA LLST ADA N128 DECREMENT BY ONE SECTOR JMP SETL0 SETL1 LDA LLST CLB GET # 5 WORD ENTRIES IN DIV P5 THE BLOCK. STA ELST SAVE # ENTRIES. * CLA INITIALIZE LST POINTERS: STA \PLST # ENTRIES USED, STA \TLST CURRENT ENTRY INDEX, STA B.L 1ST ENTRY NOW IN CORE. SKP * * ALLOCATE DISC SPACE FOR FIX-UP, IDENT, LST. * LDA FIX#T GET # FIX-UP TRACKS, ADA IDT#T ADD # IDENT TRACKS, ADA LST#T ADD # LST TRACKS. IOR MSIGN SET NO SUSPEND BIT STA NEXT TOTAL # TRACKS TO ALLOCATE. * GETTR JSB EXEC DEF *+6 DEF P4 DEF NEXT # TRACKS REQUESTED. DEF FTRKA RETURNED: FIRST TRACK. DEF DSKLU RETURNED: WHICH DISC. DEF SECTK RETURNED: SECTORS/TRACK. * LDA FTRKA GET FIRST TRACK # SSA,RSS REQUEST GRANTED? JMP ALLOC YES JSB \SPAC JSB EXEC NO, TELL USER OF PROBLEM DEF *+5 DEF P2 DEF ERRLU DEF TRMSG DEF P14 "GENERATOR WAITING FOR TRACKS" * LDA NEXT TAKE OUT NO-SUSPEND BIT XOR MSIGN STA NEXT SUSPEND UNTIL TRACKS ARE AVAILABLE JMP GETTR * ALLOC LDA FX.#S GET # 128 WORD SECTORS. CLE,ELA MPY BY 2 (64 WORD SECTORS). CLB DIV SECTK FIND MULT. FACTOR PER WRITE. SZB,RSS IF A TRACK MULTIPLE LDB P96 THEN SET IT SO STB FX.#S # 64 WORD SECTORS PER BLOCK. * LDA ID.#S CLE,ELA CLB DIV SECTK SZB,RSS LDB P96 STB ID.#S * LDA LS.#S CLE,ELA CLB DIV SECTK SZB,RSS LDB P96 STB LS.#S * LDA FTRKA STA FX.BT FIX-UP START TRACK. STA FX.LT FIX-UP TRACK LAST READ. ADA FIX#T STA FX.ET FIX-UP LAST TRACK +1. STA ID.BT IDENT START TRACK. STA ID.LT IDENT TRACK LAST READ. ADA IDT#T STA ID.ET IDENT LAST TRACK +1. STA LS.BT LST START TRACK. STA LS.LT LST TRACK LAST READ. ADA LST#T STA LS.ET LST LAST TRACK +1. CLA STA FX.LS STA ID.LS STA LS.LS SKP * * GET NAME, SECUR, LABEL OF LIST FILE. * FNAME LDA P10 "LIST FILE?" LDB LSTFI JSB \RNME GET LIST FILE JSB \CRET GO CREATE THE FILE DEF *+5 DEF \LDCB DEF P64 DEF P3 DEF ZERO CLA JSB \CFIL CHECK FILE STATUS JMP FNAME ERROR ISZ LFERR 1=> ACKNOWLEDGE LIST FILE ERRORS * DLD PARS2 WAS NAME A FILE OR LU? CPA P1 RSS JMP FLNM0 FILE NAME, SO DEFAULT TO LSTLU=0 STB LSTLU SAVE THE LU - MAY NOT BE INTERACTIVE JSB EXEC DETERMINE THE DEVICE TYPE DEF *+6 DEF P13 DEF LSTLU DEF EQT5 DEF FNAME DEF ALLOC * CLB LDA FNAME IF BIT BUCKET WAS SPECIFIED, AND M77 DON'T MISTAKE IT FOR A TYPE SZA,RSS 00 DEVICE JMP SETIA * LDB LSTLU LDA EQT5 INTERACTIVE DEVICES ARE TYPE 0, OR ALF,ALF TYPE 5, SUBCHANNEL 0 AND M77 STA EQT5 CPA P7 IF A TYPE 7 DEVICE, THEN IT IS CLA AUTOMATICALLY INTERACTIVE CPA P5 LDA ALLOC GET TYPE 5 SUBCHANNEL AND M77 CLB SZA,RSS INB SET INTERACTIVE SETIA STB IALST 0=NOT INTERACTIVE, 1=IT IS * SZB IF ITS INTERACTIVE JMP EC? THEN DON'T LOCK LULOC JSB LURQ DEF *+4 DEF IOPTN DEF LSTLU DEF P1 * SZA,RSS WAS IT SUCCESSFUL? JMP EC? YES JSB \SPAC JSB EXEC DEF *+5 DEF P2 DEF ERRLU DEF LUMSG DEF P17 "GENERATOR WAITING ON LIST LU LOCK" * LDA IOPTN SET THE WAIT BIT FOR NEXT CALL XOR MSIGN STA IOPTN JMP LULOC * * RE-OPEN THE LIST FILE WITH A NON-EXCLUSIVE OPEN SO IT CAN * BE EXAMINED CONCURRENT WITH GENERATION * FLNM0 JSB OPEN A CALL TO OPEN AN ALREADY DEF *+7 OPEN FILE WILL RESULT DLDCB DEF \LDCB IN IT BEING CLOSED AND DEF \FMRR RE-OPENED WITH THE OPTIONS DEF PARS2+1 DEF P1 DEF PARS3+1 DEF PARS4+1 LDA DLDCB GET DCB ADDRESS JSB \CFIL CHECK ERROR STATUS JMP FLNM0 * * ASK WHETHER ECHO IS DESIRED * AND OPEN IT IF SO * EC? LDA P5 LDB ECHOI JSB YE?NO JMP EC? INVALID REPLY STA ECHON 1 FOR YES, 0 FOR NO * CLA,INA SET UP FOR CREATION STA PARS2 OF DUMMY DCB IN TYP0 LDA ERRLU STA PARS2+1 LU ALREADY DETERMINED JSB FOPEN DEF *+3 DEF \EDCB DEF RWSUB * JSB \CFIL JSB \TERM RSS SKIP * * GET SIZE, NAME, SECUR, LABEL OF CORE-IMAGE RTE OUTPUT FILE. * JSB \INER INPUT ERROR EST# JSB \SPAC LDA P30 LDB FISIZ "EST. # TRACKS IN OUTPUT FILE?" JSB \READ LDA N3 JSB \DCON GET BINARY. JMP EST# ERROR. TRY AGAIN. STA NEXT ADA MIN15 CHECK FOR 15 TRACKS MIN. SSA JMP EST#-1 LDA NEXT MPY P48 GET # BLOCKS. SSA IF NEGATIVE THEN RETRY JMP EST#-1 STA NEXT * FLNAM JSB \SPAC LDA P17 LDB OUTFI JSB \RNME "OUTPUT FILE NAME?" * LDA PARS2 CHECK FOR NUMERIC OR NULL ANSWER CMA,INA,SZA IF NULL(TYPE 0) INA,SZA,RSS OR NUMERIC(TYPE 1) RSS JMP FLNMC THEN ITS A LU JSB \INER JMP FLNAM * FLNMC JSB \CRET GO CREATE THE OUTPUT FILE DEF *+5 DEF ABDCB DEF NEXT # BLOCKS. DEF P1 TYPE 1 FILE. DEF ZERO CLA JSB \CFIL CHECK FILE ERROR JMP FLNAM RETRY...ERROR * * GET SYSTEM DISK TYPE * JSB \SPAC RSS JSB \INER INPUT ERROR TO "SYSTEM DISK?" STRT0 LDA P12 TO GET THE INITIAL SEGMENT LDB MES00 DEPENDS ON THE DISK TYPE JSB \READ MES00: "SYSTEM DISK?" LDA N4 JSB \DCON CONVERT 4 DEC DIGITS JMP STRT0 ERROR - TRY AGAIN CLB,INB CPA P7900 CHECK FOR A CLB 7900 CPA P7905 OR A 7905 CCB CPA P7906 OR A 7906 CCB CPA P7920 OR A 7920 CCB STB DTYPE 0=7900, -1=7905,7906,7920 SSB JMP STRT5 SZB IF NOT 7900 JMP STRT0-1 THEN ERROR