ASMB,R,L,C HED @REFA-REMOTE EXEC & FILE ACCESS *(C) HEWLETT-PACKARD CO. 1976* NAM @REFA,7 91705-16110 REV.A 760401 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. 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 1 * * @REFA * SOURCE: 91705-18110 REV.A * BINARY: 91705-16110 REV.A * JIM HARTSELL * AUG. 30, 1974 * MODIFIED BY: C.C.H. (12-30-75) [DERIVED FROM: 91705-18010 REV.C] * * LIBRARY SUBROUTINE APPENDED TO RTE-C SATELLITE USER * PROGRAM FOR REMOTE EXEC, REMOTE FILE ACCESS, AND * MASTER PROGRAM TO PROGRAM CALLS TO THE CENTRAL STATION. * ENT DCRET,DPURG,DOPEN,DCLOS ENT DREAD,DWRIT,DPOSN,DWIND ENT DNAME,DCONT,DLOCF,DAPOS,DSTAT * ENT DEXEC * ENT POPEN,PREAD,PWRIT,PCONT,GETLU * ENT %DLST,%DNLD,%RMCN,%PRMB * EXT @QUE,@DEQ,EXEC,%LU,@DISP EXT $LIBR,$LIBX,%CPFL EXT $LIST,%LIST,$XEQ,$PVCN,%TMOT * A EQU 0 B EQU 1 * * * CREATE A CENTRAL FILE. * DCRET NOP JSB CQUE NO RETURN. CALL IS POINTER TO DEC 150 ENTRY POINT AND FUNCTION CODE. * * PURGE A CENTRAL FILE. * DPURG NOP JSB CQUE DEC 151 * * OPEN A CENTRAL FILE. * DOPEN NOP JSB CQUE DEC 152 * * WRITE ON CENTRAL FILE. * DWRIT NOP JSB CQUE DEC 153 * * READ FROM CENTRAL FILE. * DREAD NOP JSB CQUE SIGN BIT OF FCN CODE SET FOR OCT 100232 READ (FCN = 154). * * POSITION CENTRAL FILE. * DPOSN NOP JSB CQUE DEC 155 * * REWIND CENTRAL FILE. * DWIND NOP JSB CQUE DEC 156 * * CLOSE CENTRAL FILE. * DCLOS NOP JSB CQUE DEC 157 * * RENAME CENTRAL FILE. * DNAME NOP JSB CQUE DEC 158 * * CONTROL CENTRAL FILE. * DCONT NOP JSB CQUE DEC 159 * * LOCATE CENTRAL FILE RECORD. * DLOCF NOP JSB CQUE DEC 160 * * ABS POSITION CENTRAL FILE. * DAPOS NOP JSB CQUE DEC 161 * * READ CENTRAL FILE DIRECTORY. * DSTAT NOP JSB CQUE OCT 100242 READ CALL. FCN = 162. * * REMOTE EXEC CALLS * DEXEC NOP LDA DEXEC SAVE RETURN ADDRESS. STA NCALL INA LDB A,I GET IDEST ADDR. LDB B,I IDEST VALUE. SZB JMP LEXEC GENERATE LOCAL CALL. * INA GENERATE REMOTE CALL. LDA A,I GET REQUEST CODE ADDR. LDA A,I GET REQUEST CODE. ELA,CLE,ERA CLEAR SIGN BIT. LDB EFCN ELB,CLE CPA B1 IF READ DATA, SET SIGN BIT CCE IN FUNCTION CODE. ERB STB EFCN JMP *+2 NCALL NOP JSB CQUE EFCN OCT 243 FCN = 163. * * OPEN A CENTRAL PROGRAM. * POPEN NOP JSB CQUE DEC 1 * * READ FROM CENTRAL PROGRAM. * PREAD NOP JSB CQUE IWRT OCT 100002 READ CALL. FCN = 2. * * WRITE TO CENTRAL PROGRAM. * PWRIT NOP JSB CQUE DEC 3 * * CONTROL A CENTRAL PROGRAM. * PCONT NOP JSB CQUE DEC 4 * * GET CENTRAL LU OF THIS SATELLITE. * GETLU NOP JSB CQUE DEC 9 * * SPECIAL ENTRY POINT FOR REMAC. REQUEST A FORMATTED * DIRECTORY LIST PRINT LINE FROM THE CENTRAL STATION. * %DLST NOP JSB CQUE OCT 100012 FCN = 10. * * SPECIAL ENTRY POINT FOR APLDR. REQUEST AN ABSOLUTE * PROGRAM DATA RECORD FROM THE CENTRAL STATION DISC. * %DNLD NOP JSB CQUE DEC 0 * * SPECIAL ENTRY POINT FOR REMAC. SEND ASCII CENTRAL * OPERATOR COMMAND. * %RMCN NOP JSB CQUE DEC 200 SPC 3 * * DESTINATION CODE IN DEXEC CALL WAS NON-ZERO. GENERATE * LOCAL EXEC CALL FROM USER DEXEC CALL, EXECUTE IT, * AND RETURN TO USER WITH A,B INTACT. * LEXEC LDA DLC2 INITIALIZE RETURN ADDRESS. STA LCAL1 * LDA DEXEC GET # PARAMS TO MOVE. CMA ADA DEXEC,I ADA MD1 CMA,INA STA DLEN * LDA DEXEC SET UP MOVE POINTERS. ADA B2 STA PLEN LDA DLC2 STA DADR * LMOVE LDA PLEN,I MOVE CALL PARAMETERS. STA DADR,I ISZ LCAL1 BUMP NEW RETURN ADDR. ISZ PLEN ISZ DADR ISZ DLEN JMP LMOVE * LDA DEXEC,I SET UP RETURN ADDRESS. STA DEXEC * DLD RINST DST DADR,I SET UP RETURNS TO USER. ISZ DADR ISZ DADR STA DADR,I * JSB EXEC EXECUTE LOCAL CALL. LCAL1 NOP LCAL2 NOP RCODE GOES HERE. BSS 6 ROOM FOR 6 MORE PARAMS. NOP SLOP ROOM FOR JMP DEXEC,I NOP (ERROR & NORMAL EXITS) * * DLC2 DEF LCAL2 * * DO NOT CHANGE ORDER OF NEXT TWO STATEMENTS * * RINST JMP DEXEC,I ISZ DEXEC * SKP * WHEN CQUE IS CALLED, THE ADDRESS OF THE USER * CALL AND THE FUNCTION CODE CAN BE DETERMINED * VIA THE ENTRY POINT CONTENTS. * CQUE NOP LDA CQUE,I FETCH FUNCTION CODE. CLB CHECK SIGN BIT. SSA INB STB RDATA SET "READ DATA" FLAG. ELA,CLE,ERA CLEAR SIGN BIT. STA FCN LDA CQUE FETCH USER CALL ADDRESS. ADA MD2 LDA A,I STA CALL RQUE CLA CLEAR DATA BUFR ADDR. STA DADR * * BUILD AND QUEUE THE PARMB. * QUE JSB @QUE FCN NOP FUNCTION CODE. CALL NOP ADDR OF USER CALL. DEF PARMB PARAMETER BUFFER. DEF REPLY REPLY BUFFER. DEF DADR RETURNED DATA BUFR ADDR OR 0. DEF DLEN RETURNED DATA BUFR LENGTH. DEF PLEN RETURNED PARMB LENGTH. * JMP REJ REQUEST REJECTED. GO COMPLETE. * STB QENT ACCEPTED. SAVE ENTRY ADDRESS. * * THE PARMB IS NOW QUEUED AND READY. FORMAT EXEC CALL * FOR TRANSMISSION, BUT DON'T EXECUTE YET. * LDA IWRT WRITE--NO ABORT. (100002B) STA IRW SET FOR "TRANSMIT ONLY". CLB CPB DADR IS THERE ANY DATA? (SKIP IF TRUE) JMP CONST NO. GO TO FORM CONWORD WITH MODE =0. LDA FCN ARS CPA B1 IS FUNCTION PREAD OR PWRIT? JMP CONST YES, DO REQ. ONLY NOW * * SET UP MODE BITS(#6,7) FOR THE REQUEST & DATA CALL TO DVR65. * LDB IRW GET THE REQUEST CODE. LDA RDATA GET THE "READ DATA" FLAG. SZA IS DATA TO BE READ? ADB MD1 YES. SET REQUEST CODE =1--READ. STB IRW SAVE THE REQUEST CODE. BLR,CLE,RBL POSITION THE DRIVER-MODE INFORMATION BLF TO BITS# 6,7. CONST LDA %LU GET THE LOGICAL UNIT NUMBER. IOR 1 FORM THE CONFIGURED CONWORD, STA CONWD AND SAVE FOR THE CALL TO THE DRIVER. LDA MD4 INITIALIZE THE STA BUZY REMOTE-BUSY RETRY COUNTER. LDA MD10 INITIALIZE THE STA RTRY DRIVER-BUSY RETRY COUNTER. * * REQUEST PERMISSION TO TRANSMIT THE PARMB TO CENTRAL. * DISP CLA SIGNAL PARMB NOT SENT YET. STA SNFLG LDA %TMOT SET UP FOR TIME-OUT. SZA,RSS CLA,INA STA TIME * JSB @DISP SZA (A) = 0 OR ADDR OF QUEUE ENTRY. JMP DISP1 * LDB QENT REPLY INTERRUPT MAY HAVE INB OCCURRED WHILE @DISP HAD LDB B,I INTERRUPTS OFF. SEE IF @INTR CPB B2 CAME THRU AND GAVE US JMP INIT PERMISSION. JMP ZONK * DISP1 CPA QENT OUR QUEUE ENTRY? JMP INIT YES. * STA DQENT NO. DEAD ENTRY, SO DE-QUE! JSB @DEQ DQENT NOP OCT 1 * NOP JMP DISP SEARCH QUEUE AGAIN. * * PERMISSION GRANTED. NO OTHER REQUESTS ARE OUTSTANDING. * QUEUE ENTRY FLAG WORD = "PARMB SENT". * INIT LDA %CPFL CHECK IF LAST REQUEST FOUND SZA,RSS "LINE DOWN" CONDITION. JMP XMIT NO. * JSB EXEC YES. SCHED ENABL WITH WAIT. DEF *+4 DEF D9 DEF ENABL DEF AS.01 * CLA CLEAR FLAG. JSB STPFL * * XMIT JSB EXEC PERFORM TRANSMISSION. DEF *+7 DEF IRW DEF CONWD DEF PARMB DEF PARSZ DEF DADR POINT TO ADDR OF DATA BUFR(NO Z-BIT) DEF DLEN POINT TO LENGTH OF DATA BUFR(NO Z-BIT) JMP DOWN INFORM USER OF ABORTIVE ERROR. * * USER IN I/O SUSPEND DURING TRANSMISSION. * WHEN COMPLETE, CHECK FOR ERRORS. * DST XSTAT (DEBUG AID ONLY) SLA,RAR JMP GOOD NO ERRORS. * SWP AND B40 ISOLATE EQT12 BIT#5 (REMOTE BUSY). CLE,ERB MOVE BUSY-REJECT BIT(EQT5 #1) TO . SEZ,SZA,RSS BUSY-REJECT/REMOTE BUSY OR BOTH? JMP DOWN NEITHER--DRIVER ERROR! SEZ,RSS WAS THE REMOTE SYSTEM BUSY? JMP BZWT YES. GO TO WAIT A WHILE. SZA NO. SIMULTANEOUS REQUESTS? JMP XMIT YES. LET DVR65 RESOLVE PROBLEM. JMP DELAY DRIVER BUSY--DELAY & RE-CALL. * BZWT ISZ BUZY O.K. TO RE-TRY? JMP ZONK YES. DO SO VIA WAIT LIST. JMP FAIL NO. REPORT THE ERROR! * QKNAP LDA T100M PROBABLY APLDR TRYING TO STA TIME READ DATA FROM CENTRAL. JMP ZONK * DELAY ISZ RTRY DELAY FOR A WHILE, IF RETRIES VALID. JMP QKNAP VALID: TRY AGAIN, IN 100 MSEC; ELSE, FAIL LDA MD103 GIVE UP! JMP DOWN1 * GOOD ISZ SNFLG SIGNAL PARMB SENT. * * THE PARMB HAS BEEN SENT, OR SOMEONE ELSE IS PENDING A REPLY. * SUSPEND THIS USER VIA THE OPERATOR SUSPEND LIST UNTIL A * REPLY ARRIVES OR TIME-OUT OCCURS. THE SCE/5 @CLCK MODULE * WILL RESTART THE USER. * * BEFORE SUSPENDING, ESTABLISH AN ENTRY IN THE WAIT-LIST. * ZONK LDB %LIST LDA 1,I NEG. # ENTRIES. STA TEMP INB * WLOOP LDA 1,I CHECK TIME WORD. SZA,RSS ZERO? JMP SWAIT YES. FOUND EMPTY ENTRY. * ADB B5 ISZ TEMP JMP WLOOP JMP FAIL NONE. SYSTEM FAILURE. * SWAIT STB TEMP1 JSB $LIBR NOP LDA TIME STORE TIME VALUE IN WORD 1. STA TEMP1,I ISZ TEMP1 LDA XEQT,I STORE PROGRAM NAME. ADA D12 STA TEMP ADDR OF NAME IN ID SEG. * LDB MD3 MLOOP LDA TEMP,I STA TEMP1,I ISZ TEMP ISZ TEMP1 INB,SZB JMP MLOOP * LDA XEQT,I STORE ID SEG ADDR. STA TEMP1,I * STA IDSG SUSPEND THE USER. LDA DEFX STA XSUSP,I * CLA PRIVILEDGED MODE. STA $PVCN * JSB $LIST OCT 106 IDSG NOP * JMP $XEQ GIVE UP CPU. DEFX DEF AWAKE RESTART ADDRESS. * * USER HAS BEEN RE-SCHEDULED FROM POINT OF SUSPENSION. * AWAKE LDA QENT REPLY RECEIVED? INA LDA A,I CPA B3 JMP COMPX YES, GO COMPLETE USER CALL. CPA B1 NO. DID WE SEND PARMB? JMP DISP NO. TRY PERMISSION AGAIN. CPA B2 RETRY IF QUEUE WAS FULL. JMP *+2 JMP QUE LDA SNFLG WAS IT A TIME-OUT? SZA JMP DOWN YES. LDA %TMOT NO. PERMISSION HAS BEEN SZA,RSS CLA,INA STA TIME GRANTED TO SEND PARMB. JMP INIT * * CENTRAL MUST HAVE GONE DOWN. SET ERROR CODE * IN REPLY BUFFER FOR @DEQ. * DOWN LDA MD51 JSB STPFL DOWN1 LDB FCN STORE IN A-REG SLOT ADB MD11 FOR RFA/DEXEC; SSB,RSS IERR SLOT FOR PTOPC, DLIST, DNLD. JMP DOWN2 STA REPLY+3 JMP COMPL DOWN2 STA REPLY+2 JMP COMPL * * COMPLETE A REJECTED OR INCOMPLETE REQUEST. * REJ STB QENT CPA MD1 QUEUE FULL? JMP QKNAP YES, LET SOMEONE COMPLETE A REQUEST JMP COMPL NO. * * REPLY HAS BEEN RECEIVED. * PERFORM COMPLETION PROCESSING. * COMPX LDA IWRT WRITE--NO ABORT. (100002B) LDB FCN FUNCTION CODE CPB B3 IS IT A PWRIT? JMP PDATA YES CPB B2 IS IT A PREAD? RSS YES JMP COMPL PERFORM COMPLETION PROCESSING ADA MD1 FORM READ-REQUEST--NO ABORT. * * P TO P DATA TRANSFERS * PDATA STA IRW SET READ/WRITE TYPE LDA %LU IOR B300 DATA ONLY STA CONWD CONTROL WORD * LDA QENT ADDR OF QUEUE ENTRY ADA D10 POINT TO ITS TIME-TAGS STA TITAG SAVE ADDR FOR DATA ONLY CALL INA STA TITAG+1 & ADDR OF 2ND TIME-TAG * JSB EXEC CALL DRIVER TO DO DATA NOW DEF *+7 DEF IRW DEF CONWD DEF DADR,I DEF DLEN TITAG NOP NOP JMP DOWN DRIVER ERROR DETECTED. * SLA,RSS JMP DOWN ERROR OCCURRED * COMPL LDA CALL,I SET RETURN ADDRESS. STA TEMP * JSB @DEQ QENT NOP ADDR OF QUEUE ENTRY. OCT 0 NORMAL PROCESSING. * JMP DSPLY ERROR RETURN. SEZ NORMAL RETURN. ISZ TEMP IF E=1, BUMP RETURN ADDR. JMP TEMP,I * SKP * * AN ERROR RETURN FROM @DEQ INDICATES SPECIAL * COMPLETION PROCESSING. * (A)= 0: DISPLAY REPLY BUFFER AND TERMINATE. * (A)= 1: DISPLAY REPLY BUFFER, SUSPEND, DE-QUE QUEUE * ENTRY AND REPEAT THE REQUEST. * DSPLY STA FLAG * JSB EXEC DISPLAY ERROR MESSAGE STORED DEF *+5 IN REPLY BUFFER BY @DEQ. DEF B2 DEF B1 LU 1. DEF REPLY DEF D17 * LDA FLAG CHECK FLAG. SZA JMP SUSP GO SUSPEND. * JSB EXEC ABORTIVE ERROR. DEF *+2 TERMINATE (ABORT) THE USER. DEF B6 * SUSP JSB EXEC CENTRAL DOWN. SUSPEND UNTIL DEF *+2 RE-STARTED BY "GO" BY OPERATOR. DEF B7 * JMP RQUE RE-TRY THE REQUEST. * * STORE A-REG CONTENTS IN "LINE DOWN" FLAG. * STPFL NOP JSB $LIBR NOP STA %CPFL JSB $LIBX DEF STPFL SKP * CONSTANTS AND WORKING STORAGE. * XSUSP OCT 101730 XEQT OCT 1717 B1 OCT 1 B2 OCT 2 B3 OCT 3 B5 OCT 5 B6 OCT 6 B7 OCT 7 B40 OCT 40 B300 OCT 300 D9 DEC 9 D10 DEC 10 D12 DEC 12 D17 DEC 17 MD1 DEC -1 MD2 DEC -2 MD3 DEC -3 MD4 DEC -4 MD10 DEC -10 MD11 DEC -11 MD51 DEC -51 "LINE DOWN" ERROR CODE. MD103 DEC -103 XSTAT OCT 0,0 TIME NOP T100M EQU MD10 100 MS. WAIT. TEMP NOP TEMP1 NOP BUZY NOP BUSY-RE-TRY COUNTER. RTRY NOP FLAG NOP SNFLG OCT 0 RDATA NOP "READ DATA" FLAG. AS.01 ASC 1,01 ENABL ASC 3,ENABL * DADR NOP DATA BUFFER ADDRESS. DLEN NOP DATA LENGTH. PLEN NOP REQUEST LENGTH. * CONWD NOP CONFIGURED CONTROL WORD. DUMMY NOP DUMMY PARAMETER IRW NOP PARSZ DEC 35 PARAMETER BUFFER LENGTH %PRMB DEF PARMB PARMB BSS 35 PARAMETER BUFFER AREA. REPLY EQU PARMB REPLY BUFFER AREA. * SIZE EQU * * END