IDENT IPROC TITLE SYSTEM INITIAL LOADER * * * * IPROC READS IN NEXT FILE ON TAPE, MAKES A FILE OUT OF IT, * ANDS READS IN 1ST 10 WORDS AS A SPECIAL HEADER, FORM * OF THE SPECIAL HEADER IS AS FOLLOWS. * * 0 2 * 1 0 * 2 LOGICAL MAP COUNT * 3 COMPILED MAP SIZE * 4 FIELD LENGTH * 5 ENTRY POINT * 6 C LIST SIZE * 7 L1 * 10 L2 * 11 L3 * 12 L4 * * A SCRATCH FILE OF SIZE L1 IS CONSTRUCTED. A SUBPROCESS * IS CREATED WITH PARAMETERS AS INDICATED. LOGICAL * MAP ENTRY 0 IS SET UP WITH READ WRITE ENTRY, FILE ADDRS * 0, CM ADDRES 0, COUNT L1, FILE THE SCRATCH FILE. * LOGICAL MAP ENTRY 1 IS SET UP WITH READ ONLY ENTRY, * FILE ADDRESS L1, CM ADDRESS L1, COUNT L2 - L1, * FILE THE FILE JUST READ IN FROM TAPE. * * THE FOLLOWING ITEMS ARE THEN PLACED IN THE CLIST WITH * INDEX L4 + I WHERE I IS INDICATED BELOW * * 0 MASTER CLIST ( I PROCS CLIST ) * 1 CLASS CODE OF IPROC * 2 CALL IN IPROC ( FOR A NEW FILE ) * 3 CALL ON SELF * 4 OWN CLIST * 5 OWN SCRATCH FILE * 6 OWN CLASS CODE * 7 OWN CODE FILE * 8 A FILE OF LENGTH L3+1 * 9 A CLIST OF LENGTH L3 * 10 AN ALLOCATION BLOCK * 11 BEAD CALL ( TEST VERSION ONLY ) * EJECT * * * ENTRY IPROCO1,IPROCO2 ENTRY RUNORG1,RUNORG2 ENTRY IPWDS1,IPWDS2 ENTRY IPSTART,IPROCSZ,LIMIT ENTRY S.IPROC,MC.IPRC,S.TTY * ENTRY POITS EJECT * * * THIS TABLE COMES FROM OPNAMES,XTEXT * OPNAMES XTEXT * * * END OF OPNAMES,XTEXT STUFF * * REDIFINITION OF BADLY NAMED ITEMS * C.LCLALC EQU C.ALLOC C.MAST EQU C.SELF * INTERRUPT OBJECT INDEXEX * TITLE CONSTANTS * * * * C LIST INDEXES TO BE USED IN IPROCS CLIST * * HAVE TO BE RESET AS BASE NOT KNOWN UNTILL RUN TIME * ORG 0 * CX.FATH BSS 1 CLASS CODE OF IPROC ROOT CX.CODE BSS 1 CODE FILE FOR IPROC ROOT CX.IPROC BSS 1 CAPABILITY FOR IPROC AS A PROCESS CX.CLIPR BSS 1 WILL CONTAIN A CALL ON IPROC CX.LIPR BSS 1 WILL CONTAIN A CALL ON IPROC CX.SFILE BSS 1 FILE CONTAINING CODE FOR CONSTRUCTED SUBPROCESS CX.SPCAL BSS 1 OPERATEION TO CALL ON CONSTRUCTED SUBPROCESS CX.SPCC BSS 1 CLSASS CODE FOR CONSTRUCTED SUBPROCESS CX.SPCL BSS 1 CLIST FOR SAME CX.SPFL BSS 1 SCRATCH FILE FOR SAME CX.RFILE BSS 1 CLIST INDEX FOR FILE JUST READ IN FROM TAPE CX.GLBLD BSS 1 C LIST INDEX FOR DIRECTORY FILE CX.GLBLC BSS 1 C LIST INDEX FOR DIRECTORY CLIST * BSS 2 TO ALLOW FOR WRING SIZE MASTRER CLIST * CXSPACE BSS 0 * USE * * * LOC 0 IPROCO1 EQU *O RUNORG1 EQU *L BSSZ 16 S.TTY EQU *O WILL CONTAIN CLIST INDEX OF SPECIAL TTY L.TTY BSSZ 1 * * S.IPROC EQU *O WILL CONTAIN CLIST INDEX OF IPROC CXBASE BSSZ 1 * MC.IPRC EQU *O SPCE NEEDED IN MASTER CLIST FOR IPROC RT + VFD 60/CXSPACE * TITLE MACROS * * MOVE MACRO FROM,TO SA1 FROM BX6 X1 SA6 TO ENDM * * CMOVE MACRO FROM,TO SA1 FROM BX6 X1 SA6 CPYCAP+1 SA1 TO BX6 X1 SA6 CPYCAP+2 XJ CPYCAP ENDM * * FREAD MACRO AFILE,FILEAD,CMAD,CNT SA1 AFILE SX2 FILEAD SX3 CMAD SX4 CNT CALL FREAD ENDM * * CALL MACRO LOC + SB7 *+1 JP LOC ENDM * * XJ MACRO LOC + VFD 12/0130B,18/LOC,12/0,18/2 SB6 B7 + SB7 *+1 JP ERR ENDM * * * THESE NEXT 3 MACROS USED TO REFERANCE IPROCS * CLIST INDEXES FOR LATER RUN TIME FIX UP. * CX MACRO X LOCAL A A VFD 60/X RMT VFD 60/A RMT ENDM * * DX MACRO C,X LOCAL A A VFD 30/C,30/X RMT VFD 60/A RMT ENDM * * CXI MACRO I,X LOCAL A A VFD 1/1,29/I,30/X RMT VFD 60/A RMT ENDM * * MCAP MACRO X + VFD 1/1,29/C.X,30/C.MAST ENDM * * TAPEACT MACRO CODE SX3 CODE CALL TAPEACT ENDM * * TAPECHK MACRO ITEMS,VALUES,FAIL SX1 ITEMS SX2 VALUES SX3 FAIL CALL TAPECHK ENDM TITLE IP LISTS * * SETESM MCAP ESMLOC VFD 60/*+1 DATA -0 * * MKIPCL MCAP MKOPR MCAP ALLOC CX CX.CLIPR DATA 0 CX CX.FATH DATA 0 * * CPYCAP MCAP MVECAP BSSZ 2 DATA -0 * XFREAD MCAP READ BSSZ 4 * MKCC MCAP CCC CX CX.SPCC * MKOP MCAP MKOPR MCAP ALLOC CX CX.SPCAL DATA 0 CX CX.SPCC DATA 0 * MKCLST MCAP CCLIST MCAP ALLOC CX CX.SPCL BSSZ 1 * MKSFILE MCAP CFILE MCAP ALLOC CX CX.SPFL DATA 1 VFD 60/*+1 BSSZ 1 * MKSBLK MCAP CBLK CX CX.SPFL DATA 0 * MKSUB MCAP CSPROC CX CX.SPCC CX CX.FATH BSSZ 4 CX CX.SPCL * MKSCRMP MCAP MPCHRW CX CX.SPCC DATA 0 CX CX.SPFL DATA 0 DATA 0 BSSZ 1 * MKROMP MCAP MPCHRO CX CX.SPCC DATA 1 CX CX.SFILE BSSZ 1 BSSZ 1 BSSZ 1 * CALLSUB CX CX.SPCAL * KILLSUB MCAP DELSUB CX CX.SPCC * KILLCLST MCAP DELCL CX CX.SPCL * KILLSPBK MCAP DELBLK CX CX.SPFL DATA 0 * KILLSPFL MCAP DELFIL CX CX.SPFL * RETURN MCAP RETURN HARIKARI MCAP DLPROC IPROCS SUICIDE CX CX.IPROC * SAVEREG MCAP SAVE VFD 60/REGS * RSTREG MCAP RESTOR VFD 60/REGS * SRETURN MCAP RETPAR VFD 30/0,30/0 DX 1,CX.RFILE * SENDCP MCAP CAPOUT BSSZ 3 * * * RDTPCX MCAP READ MCAP INTFIL VFD 60/1,60/TPCPX,60/1 * * TGET MCAP GETE BSSZ 1 * * TPUT MCAP SENDE BSSZ 1 TAPEREQ BSSZ 1 * * TREAD MCAP READ BSSZ 1 VFD 60/0,60/TAPEDATA,60/1001B * * * MKFILE MCAP CFILE MCAP ALLOC CX CX.RFILE DATA 2 VFD 60/*+1 DATA 100B FBLKSZ DATA 400B * * NWFBLK MCAP CBLK CX CX.RFILE BSSZ 1 * * NWFWRITE MCAP WRITE CX CX.RFILE FPNT BSSZ 1 FCMPNT BSSZ 1 FWCNT BSSZ 1 * * * * * RDSTK MCAP DISSEN VFD 60/STKBUFF DATA 1 * * * * MISC CLIST INDEXE REFERANCES * D.RFILE CX CX.RFILE D.SFILE CX CX.SFILE D.SPCL CX CX.SPCL D.SPCC CX CX.SPCC D.SPCAL CX CX.SPCAL D.SPFL CX CX.SPFL D.GLBLD CX CX.GLBLD D.GLBLC CX CX.GLBLC D.FATH CX CX.FATH D.CLIPRC CX CX.CLIPR * * * DATA FOR RUNSPCL * RUNSPCL7 BSSZ 1 * * * HEADER FOR SPECIAL SUBPROCESS * SHEAD BSS 0 * BSSZ 1 BSSZ 1 BSSZ 1 BSSZ 1 BSSZ 1 BSSZ 1 CLSTSZ BSSZ 1 SCRSZ BSSZ 1 END BSSZ 1 GLMXSZ BSSZ 1 BLDCXBS BSSZ 1 * SHEADCNT EQU *-SHEAD * * * * * DATA FOR POSTAPE * * POSTAPE7 BSSZ 1 * * * DATA FOR DIRECTORY OBJECT CONSTRUCTION * * DIRECTY7 BSSZ 1 * * MKDFILE MCAP CFILE MCAP ALLOC CX CX.GLBLD DATA 1 VFD 60/*+1 BSSZ 1 * * MKDBLK MCAP CBLK CX CX.GLBLD DATA 0 * * MKDCL MCAP CCLIST MCAP ALLOC CX CX.GLBLC BSSZ 1 * * * * * DATA FOR FIX UP OC CLIST REFERANCES * * FIXADS BSS 0 HERE BSS 0 * FIXCNT EQU *-FIXADS * * * MISC DATA * * AGAIN DATA 1 SECOND AND LATER TIME FLAG * * * DATA FOR NEWFILE * NEWFILE7 BSSZ 1 FCNT BSSZ 1 FCMCNT BSSZ 1 * * * * TAPE PACKAGE DATA * * INITAPE7 BSSZ 1 RDRCD7 BSSZ 1 TAPE7B BSSZ 1 * TACT BSSZ 1 CURRENT TAPE ACTION TAPECODE VFD 1/0,11/1,12/1,12/513,12/0,12/0 SKELETON TAPE RQST * SIGN BIT CHANGES TAPERSP BSSZ 1 LATEST TAPE RESPONSE TPCPX BSSZ 1 INDEX OF FIRST TAPE CAPABILITY * TAPEDATA BSSZ 1001B * * * IN CASE OF ERROR * * STKBUFF BSSZ 3 * REGS BSSZ 20 * * * * * END OF SCRATCH AREA * SCRCNT BSS 0 TITLE CODE * * * THIS IS THE MAIN CODE * JP MAIN1 .. -3 INITIAL CALL JP * .. -2 INTERRUPT CALL JP ERRC .. -1 ERROR CALL IPSTART JP MAIN2 .. -0 CALL FOR NEW FILE * * * INITIAL ENTRY CODE * MAIN1 CALL FIXCX CALL INITAPE XJ SETESM XJ MKIPCL CALL RUNSPCL XJ HARIKARI + JP * * * * CALL FOR NEW FILE * MAIN2 CALL NEWFILE XJ SRETURN + JP * * * * AN ERROR HAS OCCURED * * ERRC XJ SAVEREG XJ RDSTK + JP * * TITLE SUBROUTINES * * * THIS SUBROUTINE GETS SPECIAL FILE FROM TAPE AND * CONSTRUCTS SPECIAL SUBPROCESS AND CALLS IT * RUNSPCL SX6 B7 SA6 RUNSPCL7 CALL NEWFILE CMOVE D.RFILE,D.SFILE FREAD D.SFILE,0,SHEAD,SHEADCNT FREAD D.SFILE,2,MKSUB+3,4 CALL CCY XJ MKOP MOVE CLSTSZ,MKCLST+3 XJ MKCLST MOVE SCRSZ,MKSFILE+5 XJ MKSFILE XJ MKSBLK XJ MKSUB MOVE SCRSZ,MKSCRMP+6 XJ MKSCRMP MOVE SCRSZ,MKROMP+4 MOVE SCRSZ,MKROMP+5 SA1 SCRSZ SA2 END IX6 X2-X1 SA6 MKROMP+6 XJ MKROMP CALL DIRECTY SA1 D.SPCL BX6 X1 SA6 SENDCP+1 SA1 BLDCXBS BX6 X1 SA6 SENDCP+2 SX1 C.MAST CALL PUTCX SA1 D.FATH CALL PUTCX SA1 D.CLIPRC CALL PUTCX SA1 D.SPCAL CALL PUTCX SA1 D.SPCL CALL PUTCX SA1 D.SPFL CALL PUTCX SA1 D.SPCC CALL PUTCX SA1 D.SFILE CALL PUTCX SA1 D.GLBLD CALL PUTCX SA1 D.GLBLC CALL PUTCX SX1 C.LCLALC CALL PUTCX XJ CALLSUB XJ KILLSUB XJ KILLCLST XJ KILLSPBK XJ KILLSPFL CALL DIRECTZ SA1 RUNSPCL7 SB7 X1 JP B7 * * * THIS SUBROUTINE DOES A FILE READ, GOS TO ERR ON * F RETURN. * * ( SAVES B7 IN B5 IN CASE OF FRETURN ) * FREAD SB5 B7 BX6 X1 SA6 XFREAD+1 BX6 X2 SA6 XFREAD+2 BX6 X3 SA6 XFREAD+3 BX6 X4 SA6 XFREAD+4 XJ XFREAD JP B7 * * * THIS SUBROUTINE FIXES UP CLIST INDEX REFERANCES * FOR IPROC. SINCE BASE OF INDEXES NOT KNOWN * UNTIL RUN TIME * FIXCX SB1 FIXADS SB2 FIXCNT SA1 CXBASE MX0 30 * FIXCXL SA2 B1 SA2 X2 BX6 -X0*X2 IX6 X6+X1 BX2 X0*X2 BX6 X2+X6 BX6 X2+X6 SA6 A2 SB1 B1+1 SB2 B2-1 NE B2,B0,FIXCXL * JP B7 * * * SUBROUTINE TO MAKE ENTRIES IN SUBPROCESS CLIST * PUTCX SX6 X1 SA6 SENDCP+3 SOURCE INDEX XJ SENDCP SA2 SENDCP+2 SX6 X2+1 SA6 A2 STEP SINK INDEX JP B7 * * * ERROR SUBROUTINE, * * ERR XJ SAVEREG + JP * EJECT * * * POSITION TAPE, PART OF TEST VERSION ONLY * POSTAPE SX6 B7 SA6 POSTAPE7 * TAPEACT 05B ( CLEAR ) TAPEACT 01B ( BINARY ) TAPEACT 10B ( REWIND ) TAPEACT 03B ( 556 BPI ) * POSTAPE1 CALL RDRCD SA1 TAPEDATA PL X1,POSTAPE1 * POSTAPE2 CALL RDRCD SA1 TAPEDATA SX2 1000B IX2 X1-X2 ZR X2,POSTAPE2 SCAN FOR SHORT RCD AFTER CM CODE * SA1 POSTAPE7 SB7 X1 JP B7 EJECT * * * GET A NEW FILE * * INITIALIZE * NEWFILE SX6 B7 SA6 NEWFILE7 SX6 B0 SA6 FCNT SA6 FPNT CALL RDRCD READ IN 1ST RECORD SA1 TAPEDATA NG X1,NEWFLR8 END OF FILE, NO MORE FILES BX6 X1 SA6 FCMCNT SX6 TAPEDATA+1 SA6 FCMPNT XJ MKFILE * * FILE READING LOOP * NEWFLR1 SA1 FCNT SPACE LEFT IN FILE SA2 FCMCNT SPACE LEFT IN CM BUFFER * NEWFLR2 ZR X1,NEWFLR4 ADD A BLOCK TO FILE ZR X2,NEWFLR5 READ A RECORD FROM TAPE * NEWFLR3 SX6 X1 IX3 X1-X2 + NG X3,*+1 SX6 X2 * SA6 FWCNT MINIMUM COUNT XJ NWFWRITE COPY SORDS TO FILE IX7 X1-X6 DECREMENT SA7 A1 ASSORTED IX7 X2-X6 COUNTS SA7 A2 SA3 FCMPNT INCREMENT IX7 X3+X6 ASSORTED SA7 A3 POINTERS SA3 FPNT IX7 X3+X6 SA7 A3 JP NEWFLR1 * * NEED A NEW BLOCK IN FILE * NEWFLR4 SA3 FPNT BX6 X3 SA6 NWFBLK+2 XJ NWFBLK SA3 FBLKSZ BX1 X3 BX6 X3 SA6 A1 JP NEWFLR2 * * INEED A NEW RECORD FROM TAPE * NEWFLR5 SA3 TAPEDATA SX4 1000B IX4 X4-X3 NZ X4,NEWFLR6 LAST WAS A SHORT PHYSICAL RCD CALL RDRCD SA1 TAPEDATA NG X1,NEWFLR7 UNEXPECTED EOF BX6 X1 SA6 FCMCNT SX6 TAPEDATA+1 SA6 FCMPNT JP NEWFLR1 * * SHORT RECORD, FILE READ COMPLETE * NEWFLR6 SA1 NEWFILE7 SB7 X1 JP B7 * * UNEXPECTED EOF * NEWFLR7 CALL ERR * * * END OF FILE, NO MORE FILES, REWIND, UNLOAD * NEWFLR8 TAPEACT 11B ( REWIND UNLOAD ) JP NEWFLR6 EJECT * * * THIS SUBROUTINE PREPARES DIRECTORY FILE AND CLIST * * DIRECTY SX6 B7 SA6 DIRECTY7 * SA1 GLMXSZ SX6 X1+1 SA6 MKDFILE+5 XJ MKDFILE XJ MKDBLK SA1 GLMXSZ BX6 X1 SA6 MKDCL+3 XJ MKDCL * SA1 DIRECTY7 SB7 X1 JP B7 * * * DUMMY RELEASE OF DIRECTORY * DIRECTZ JP B7 * * * * MAKE CLASS CODE FOR BUILDER ( DUMMY ) * CCY XJ MKCC JP B7 TITLE TAPE ROUTINES * * * * READ A RECORD FROM TAPE * * TAPEDATA CONTAINS -1 ON EOF * WORD COUNT OTHERWISE * RDRCD SX6 B7 SA6 RDRCD7 * RDRCD1 TAPEACT 101B PL X7,RDRCD3 OK READ TAPECHK 10B,00B,RDRCD2 WAS EOF TAPEACT 12B ( BACK SPACE ) JP RDRCD1 RE READ * RDRCD2 SX6 -1 SET EOF FLAG SA6 TAPEDATA JP RDRCD4 * RDRCD3 XJ TREAD SA1 TAPEDATA PICK UP BYTE COUNT SA2 FPFIVE FLOATING POINT 5 PX1 X1 FX1 X1/X2 UX1 X1,B2 LX6 X1,B2 SA6 TAPEDATA * RDRCD4 SA1 RDRCD7 SB7 X1 JP B7 * FPFIVE DATA 5.0 EJECT * * * THIS CODE EXECUTES A TAPE ACTION * TAPEACT SX6 B7 SA6 TAPE7B BX6 X3 SA6 TACT * TAPEACT1 SA1 TAPECODE BX6 X1+X3 SA6 TAPEREQ XJ TPUT XJ TGET SA7 TAPERSP OR X7,TAPEACT3 REQUEST IGNORED NG X7,TAPEACT3 ERROR RESPONSE * TAPEACT2 SA1 TAPE7B SB7 X1 JP B7 * TAPEACT3 SA1 TAPECODE FLIP ERROR RECOVERY BIT MX0 1 BX6 X0-X1 SA6 A1 PL X7,TAPEACT4 REMAKE REQUEST IF IGNORED * SA1 TAPERSP LX1 60-12 SX0 3 BX1 X0*X1 NZ X1,TAPEACT4 REMAKE REQUEST IF REJECTED * TAPECHK 4001B,0001B,TAPEACT4 REMAKE RQST ON SOME ERRORS JP TAPEACT2 * TAPEACT4 SA3 TACT JP TAPEACT1 REMAKE REQUEST EJECT * * * * CHECK STATUS FROM LAST RESPONSE * * BITS TO CHECK IN X1 * DESIRED VALUES IN X2 * FAILURE JUMP IN X3 * * DESTROYS X4, B7 * TAPECHK SA4 TAPERSP LX4 60-24 BX4 X4-X2 BX4 X1*X4 NZ X4,TAPECHK1 JP B7 * TAPECHK1 SB7 X3 JP B7 EJECT * * * IINITIALIZE TAPE CAPABILITIES * * INITAPE SX6 B7 SA6 INITAPE7 XJ RDTPCX SA1 TPCPX SX2 C.MAST MX0 1 BX2 X0+X2 BX6 X1 LX6 30 BX6 X6+X2 SA6 TREAD+1 SX1 X1+1 BX6 X1 LX6 30 BX6 X6+X2 SA6 TPUT+1 SX1 X1+1 BX6 X1 LX6 30 BX6 X6+X2 SA6 TGET+1 SA1 INITAPE7 SB7 X1 JP B7 EJECT * * DATA 1 * * IPROCO2 EQU *O RUNORG2 EQU *L * IPWDS1 EQU RUNORG2-RUNORG1 IPWDS2 EQU *L-RUNORG2 * LIMIT EQU *O IPROCSZ EQU IPWDS1+IPWDS2 * END