:ST,S,$TC03,5 ASMB,L,C NAM START,7 HED ***TCS UTILITIES (MAIN) - 9/74*** ENT START ENT PAUZ,OPEN,TGET,TPUT,CLOSE ENT ALLOC,DFINE,PUSH,POP ENT TCNTL,RDISC,WDISC,SEGLD ENT SPLIT ENT RLSCB ENT .MTO ENT .LOGA,LOGON,LOGOF ENT .STAT EXT EXEC EXT GBUF,PBUF EXT .ENTR EXT CB$ EXT ERR0 EXT .MORS,.PRR * * CONDITIONAL COMMON FOR IMAGE/2100 * IFZ COM IMAG1(1024),IMAG2(1),IMAG3(1175),IMAG4(128) XIF COM ISTAT,IPAR,ILU,ILOG A EQU 0 B EQU 1 ******* ******CONTROL BLOCK FORMAT ****** *CB CONTENT * 1 LOGICAL UNIT * 2 DEVICE TYPE (REFER TO FOLLOWING) * 3 BUSY FLAG * 4 WORK BLOCK ADDRESS * 5 WORK BLOCK PARAMETERS (LEFT BYTE=ID,RIGHT BYTE=TYPE) * 6 DATA BLOCK #1 ADDRESS * 7 DATA BLOCK #1 PARAM. (LEFT BYTE=ID,RIGHT BYTE=TYPE) * 8 DATA BLOCK #2 ADDRESS * 9 DATA BLOCK #2 PARAM. (LEFT BYTE=ID,RIGHT BYTE=TYPE) *10 EQT EXTENSION ADDRESS (LOGICAL/PHYSICAL ONLY) *11 READ CONTROL BITS *12 WRITE CONTROL BITS *13 TEMP1 *14 TEMP2 *15 TEMP3 *16 TEMP4 *17 STACK POINTER *18 UTILITIES RETURN (USED BY 2SAV,2RET) *19 STACK ITEM1, WORD 1 - RETURN ADDRESS *20 STACK ITEM1, WORD 2 - ADDRESS OF CONTROL BLOCK ARRAY * SKP ******** * * DEVICE TYPES * BIT 7=1=INPUT CAPABILITY * BIT 6=1=OUTPUT CAPABILITY * * SYSTEM CONSOLE 300 * LOCAL TERMINAL 301 * ASYNCH. TERMINAL 302 * PAGE MODE TERMINAL 303 * SYNCH. LINE CONTROL 304 * SPARE X05 * SPARE X06 * SPARE X07 * DISC 310 * MAG TAPE 311 * LINE PRINTER 112 * READER 213 * PUNCH 114 * READER/PUNCH 315 * HARDWIRED SERIAL I/F 316 ********* SKP ******************************************************************************** * START SUBROUTINE * * JSB START * DEF CB ADDRESS OF CONTROL BLOCK ARRAY * DEF SYST ADDRESS OF CONFIGURATION TABLE * JMP CONT RETURNS HERE USING LAST RESERVED CB * --- RETURNS HERE FOR EACH ACTIVE CB ******************************************************************************** CBLOK NOP SYST NOP * START NOP CBL EQU START /CB LENGTH (SET BY $STRT) MTO EQU START+1 /MTO/TCS LINK(SET BY $STRT) .MTO EQU START+1 ICBP EQU START+2 ICBX1 EQU START+3 ICBX2 EQU START+4 JSB .ENTR DEF CBLOK JSB EXEC DEF *+8 DEF RCODE DEF CB$ /SEGMENT NAME SPEC. BY CONFIGURATOR DEF CBLOK DEF SYST DEF START DEF SPLT8 DEF XSTRT XSTRT DEF START RCODE DEC 8 SKP ******************************************************************************** * * DEFINE CONTROL BLOCK,WORK BLOCK, AND DATA BLOCKS * * * JSB DFINE * DEF *+2 * DEF CB /ADDRESS OF CONTROL BLOCK ARRAY * * CALLING PROGRAM MUST INCLUDE A DEFINITION OF FOUR * DUMMY ARRAYS WHICH ARE USED TO REFERENCE THE * CONTROL BLOCK (CB), WORK BLOCK(WB),DATA BLOCK#1 * (DB1) AND DATA BLOCK#2 (DB2). ORDER OF DECLARATION * MUST BE AS SHOWN. * * INTEGER CB(1),WB(1),DB1(1),DB2(1) * * CALL DFINE(CB) ******************************************************************************** NOP DFINE NOP JSB .ENTR DEF DFINE-1 LDA DFINE-1 JSB SETCB JMP DFINE,I SKP **************************************************** * * DEVICE OPEN * * JSB OPEN * DEF *+1 **************************************************** OPEN EQU * NOP JSB .ENTR DEF OPEN JSB SAVAD /SAVE ENTRY PARAMETERS LDA LU,I /CHECK FOR SYSTEM CONSOLE CPA P01$ JSB RTRN /RETURN TO USER JSB DVICE /DETERMINE DEVICE TYPE JMP OPEN2 /REMOTE TERMINAL JMP OPEN3 /MAGTAPE JMP OPEN4 /LINE PRINTER JMP OPEN5 /PUNCH CPA =B213 /READER? JMP OPEN3 /YES OPEN7 EQU * LDB CLEAR /OTHER OPEN6 EQU * CLA OPEN1 EQU * JSB CONTL /ISSUE CONTROL REQ. JSB RTRN /NO-RETURN TO USER * OPEN3 EQU * LDB DSTAT /GET DYNAMIC STATUS CLA JSB CONTL LDA ISTAT SLA /READY? JMP OPEN3 /NO-TRY AGAIN LDA TYPE,I /YES AND RBYT$ /ISOLATE DEVICE TYPE CPA =B213 /READER? JMP OPEN7 /YES LDB RWND /NO-REWIND MAGTAPE JMP OPEN6 OPEN4 LDB TOF /TOP OF FORM PRINTER LDA N01$ JMP OPEN1 OPEN5 LDB LDR /GENERATE LEADER JMP OPEN6 OPEN2 EQU * LDA P01$ LDB OPENL JSB CONTL /LINE OPEN(READ) LDA AUTO LDB OPENL JSB CONTL /LINE OPEN(AUTO SPEED) LDA ISTAT AND RBYT$ SZA,RSS /OK? JSB RTRN /YES CLA LDB LCLOS /CLOSE LINE JSB CONTL JMP OPEN2 /TRY AGAIN **************************************************** AUTO OCT 100001 SKP **************************************************** * * DEVICE CLOSE * * JSB CLOSE * DEF *+1 ******************************************************************************** CLOSE EQU * NOP JSB .ENTR DEF CLOSE JSB SAVAD /SAVE ENTRY PARAMETERS LDA LU,I CPA P01$ /SYSTEM CONSOLE? JSB RTRN /RETURN TO USER JSB DVICE /DETERMINE DEVICE TYPE JMP CLOS1 /REMOTE TERMINAL JMP CLOS2 /MAGTAPE JMP OPEN4 /LINE PRINTER JMP OPEN5 /PUNCH JMP OPEN6-1 /OTHER * CLOS1 LDB LCLOS /LINE CLOSE JMP OPEN6 CLOS2 EQU * LDB RWNDX /REWIND & PLACE OFFLINE JMP OPEN6 * DVICE NOP LDA TYPE,I AND RBYT$ /ISOLATE DEVICE TYPE CPA =B302 /ASYNCH. TERMINAL? JMP DVICE,I CPA =B303 /PAGE MODE TERMINAL? JMP DVICE,I ISZ DVICE CPA =B311 /MAGTAPE? JMP DVICE,I ISZ DVICE CPA =B112 /LINE PRINTER? JMP DVICE,I ISZ DVICE CPA =B114 /PUNCH? JMP DVICE,I ISZ DVICE JMP DVICE,I * SKP **************************************************** * * GET RECORD FROM DEVICE * * JSB TGET * DEF *+3 * DEF BUFR BUFFER ADDRESS * DEF BUFL BUFFER LENGTH **************************************************** * * TGET EQU * NOP LDA TGET STA TIO LDA P01$ STA CODE JMP TIO+1 **************************************************** * * PUT RECORD TO DEVICE * * JSB TPUT * DEF *+3 * DEF BUFR BUFFER ADDRESS * DEF BUFL BUFFER LENGTH **************************************************** TPUT EQU * NOP LDA TPUT STA TIO LDA P02$ STA CODE JMP TIO+1 * SKP **************************************************** * * READ/WRITE * **************************************************** NOP NOP TIO NOP JSB .ENTR DEF TIO-2 JSB SAVAD /SAVE ENTRY PARAMETERS LDB CB12,I LDA CODE CPA P01$ LDB CB11,I ADB LU,I STB CONWD JSB MTO,I DEF *+6 DEF CODE DEF CONWD DEF TIO-2,I DEF TIO-1,I DEF IPAR JSB RTRN /RETURN TO USER SKP ******************************************************************************** * DEVICE CONTROL * JSB TCNTL * DEF *+3 * DEF FUNC FUNCTION CODE 00FF00 * DEF PARM1 * DEF PARM2 ******************************************************************************** NOP /FCTN CODE W/O LU# NOP /LP, MT CNTL PARAM NOP /PARAM FOR LGCL/PHYS INTFC * TCNTL NOP JSB .ENTR DEF TCNTL-3 JSB SAVAD LDA TCNTL-1 STA PARM LDA TCNTL-2,I LDB TCNTL-3,I JSB CNTLX /CALL 2 PARAMETER ENTRY JSB POP SKP ******************************************************************************** * * DISC READ * JSB RDISC * DEF *+5 * DEF FIL# MTO FILE NO. * DEF SCT# RELATIVE SECTOR NO. * DEF BUFR BUFFER ADDRESS * DEF BUFL BUFFER LENGTH ******************************************************************************** * * RDISC NOP LDA RDISC STA DISC LDA P14$ STA CODE JMP DISC+1 ******************************************************************************** * * WRITE DISC * JSB WDISC * DEF *+5 * DEF FIL# MTO FILE NO. * DEF SCT# RELATIVE SECTOR NO. * DEF BUFR BUFFER ADDRESS * DEF BUFL BUFFER LENGTH ******************************************************************************** * WDISC NOP LDA WDISC STA DISC LDA P15$ STA CODE JMP DISC+1 * P14$ DEC 14 P15$ DEC 15 SKP ******************************************************************************** * * DISC READ/WRITE * ******************************************************************************** NOP FILE # NOP SECTOR # NOP BUFFER ADDRESS NOP BUFFER LENGTH * DISC NOP JSB .ENTR DEF DISC-4 JSB SAVAD LDA DISC-4,I SZA,RSS /WORK AREA REQUEST? JMP DISC1 /YES LDA CODE CPA P14$ JMP DISC2 LDA DISC-4 / STA CB13,I / LDA DISC-3 / STA CB14,I /SAVE PARAMETERS LDA DISC-2 / STA CB15,I / LDA DISC-1 / STA CB16,I / * DISC7 LDA LOCK SZA,RSS /LOCKED OUT? JMP DISC8 /NO, CONTINUE. JSB PAUZ /YES. DEF *+1 JMP DISC7 * DISC8 LDA CB13,I / STA DISC-4 / LDA CB14,I / STA DISC-3 /RESTORE PARAMETERS LDA CB15,I / STA DISC-2 / LDA CB16,I / STA DISC-1 / LDA P15$ STA CODE * DISC2 EQU * LDA DISC-4,I CLB SSA,RSS /LOCK DISC? JMP *+3 /NO. CMA,INA /YES, MAKE FILE # >0. LDB =B100000 /SET TCS LOCK BIT. STA TRAK LDA P03$ IOR B DISC4 EQU * IOR =B20000 /MAKE IT W/O WAIT STA CONWD /SET TO REF. USER DISC LDA .PRR /SAVE PRIORITY. STA CB13,I JSB MTO,I DEF *+9 DEF CODE DEF CONWD DEF DISC-2,I DEF DISC-1,I DEF TRAK DEF DISC-3,I DEF IPAR DEF DISC5 JSB STAT LDA ISTAT /TCS ACCEPT IT? SSA JSB POP /NO. LDA CB2,I ADA =B20000 /SET DISC COMPL PENDING STA CB2,I LDB CODE CPB P15$ /FILE WRITE? SSA,RSS /YES-LOGGING ENABLED? JMP SUSP /NO-SUSPEND HIM ADA =B20000 /SET LOG COMPL PENDING STA CB2,I LDA P15$ /LOG AT HIGHEST PRIORITY. STA .PRR JSB .LOGA,I /CALL LOG ROUTINE DEF *+6 DEF TRAK DEF DISC-3,I DEF DISC-2,I DEF DISC-1,I DEF LOCK * LOG COMPLETE/DISC COMPLETE DISC6 JSB SETAD LDA CB2,I ADA =B-20000 /DECREMENT COMPLETION COUNT STA CB2,I AND =B60000 SZA /DONE? JMP SUSP /NO LDA CB13,I STA .PRR /RESTORE PRIORITY. JSB POP /YES-RETURN TO CALLER DISC5 DEF DISC6 * * DISC1 LDA N13$ ADA CODE /DETERMINE READ OR WRITE CMA,INA STA CODE LDA DISC-3,I AND RBYT$ /ISOLATE SECTOR STA SCTR LDA DISC-3,I ALF,ALF AND RBYT$ /ISOLATE TRACK STA TRAK LDA DISC3 STA DISC-3 LDA P02$ JMP DISC4 TRAK NOP DISC3 DEF SCTR LOCK OCT 0 SCTR NOP N13$ DEC -13 SKP **************************************************** * * ENABLE LOGGING * * JSB LOGON * DEF *+1 * **************************************************** LOGON EQU * NOP JSB SETAD /SET CB ADDRESSES LDA .LOGA CPA .LOGB /LOGGING INITIALIZED? JMP LOGNX /NO LDA CB2,I /YES,SET BIT 15(LOGON) IOR =B100000 STA CB2,I LOGNX LDB LOGON,I JMP B,I .LOGA DEF LOGA .LOGB DEF LOGA LOGA NOP JMP LOGA,I SKP **************************************************** * * DISABLE LOGGING * * JSB LOGOF * DEF *+1 * **************************************************** LOGOF EQU * NOP JSB SETAD /SET CB ADDRESSES LDA CB2,I RAL,CLE,ERA /CLEAR LOGGING BIT STA CB2,I LDB LOGOF,I JMP B,I SKP ******************************************************************************** * * SEGMENT LOAD * JSB SEGLD * DEF *+2 * DEF SEG# SEGMENT NO. * DEF PRI# PRIORITY NO. ******************************************************************************** * NOP NOP * SEGLD NOP JSB .ENTR DEF SEGLD-2 LDA .MORS SZA,RSS /CALL FROM SEGMENT? JMP SGLD1 /YES-DO NOT PUSH STACK JSB PUSH /NO DEF *+2 DEF SEGLD-1 SGLD1 EQU * * JSB MTO,I DEF *+4 DEF P08$ DEF SEGLD-2,I DEF SEGLD-1,I JSB POP * SKP **************************************************** * * CONTROL * **************************************************** CONTL EQU * NOP