ASMB,R,L,C HED RFAIN 91703-16103 * (C) HEWLETT PACKARD CO. 1976 NAM RFAIN 91703-16103 REV A 760211 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 2 SPC 1 * ********************************************* * *RFAIN REMOTE FILE ACCESS SUBROUTINES * *SOURCE PART # 91703-18103 * *REL PART# 91703-16103 * *WRITTEN BY: J. HARTSELL, LARRY POMATTO * *DATE WRITTEN: 11-29-75 * *MODIFIED BY: BOB SHATZER (04-07-75) * DAN GIBBONS (02-11-76) * ********************************************** SPC 2 * * THIS SET OF USER-CALLABLE SUBROUTINES INTERFACES * A BCS TERMINAL USER TO THE RTE FILE MANAGER AND RTE * EXECUTIVE OF A DS/1B RTE CENTRAL COMPUTER. * CONFIGURED INTO THE TERMINAL BCS SYSTEM. * * * CALLING SEQUENCE: * * JSB RXXXX * DEF RETURN ADDRESS * DEF STATUS (POSITIVE BEFORE XMSN, NEGATIVE AFTER) * 5 RFA BUSY (REQUEST OVERFLOW) * 4 NOT USED * 3 NOT ENOUGH PARAMETERS * 2 COMMUNICATIONS LINE DOWN * 1 ILLEGAL REQUEST CODE * -1 REQUEST COMPLETED, NO ERRORS * -2 NOT USED * -3 COMMUNICATIONS I/O ERROR * -4 ERROR IN PARAMETERS * (ILLEGAL LU, UNDEF. PROG SCHED, * ILLEGAL RECORD SIZE, ETC.) * -5 IMPROPER SEQUENCE OF USER CALLS * (FILE NOT OPEN, ETC.) * * DEF PARAMETER 1 * . * . * . * DEF PARAMETER N * RETURN * * * HALT 13 CRASH (FATAL ERROR): * (A) = -1 A SOFTWARE BUG EXISTS AT CENTRAL. * SEE LISTING FOR MODULE "ERR" FOR * EXPLANATION OF ERROR CODE SHOWN * IN THE B REGISTER. * ENT RCRET,RPURG,ROPEN,RREAD,RWRIT ENT RPOSN,RWIND,RCLOS,RNAME,RCONT ENT RLOCF,RAPOS,RSTAT,REXEC,PRMBA,PARMB * ENT $BUSY ENT $ESC,ATTN,STBSY,INDCK,RESET * EXT TMOUT,.IOC.,$C.LU,#TAM * * A EQU 0 B EQU 1 * ********************************* * ENTRY POINTS FOR REMOTE CALLS ******************** ********************************* * * CREATE A CENTRAL FILE. * RCRET NOP JSB CQUE NO RETURN. CALL IS POINTER TO DEC 150 ENTRY POINT AND FUNCTION CODE. * * PURGE A CENTRAL FILE. * RPURG NOP JSB CQUE DEC 151 * * OPEN A CENTRAL FILE. * ROPEN NOP JSB CQUE DEC 152 * * WRITE ON CENTRAL FILE. * RWRIT NOP JSB CQUE DEC 153 * * READ FROM CENTRAL FILE. * RREAD NOP JSB CQUE SIGN BIT OF FCN CODE SET FOR OCT 100232 READ (FCN = 154). * * POSITION CENTRAL FILE. * RPOSN NOP JSB CQUE DEC 155 * * REWIND CENTRAL FILE. * RWIND NOP JSB CQUE DEC 156 * * CLOSE CENTRAL FILE. * RCLOS NOP JSB CQUE DEC 157 * * RENAME CENTRAL FILE. * RNAME NOP JSB CQUE DEC 158 * * CONTROL CENTRAL FILE. * RCONT NOP JSB CQUE DEC 159 * * LOCATE CENTRAL FILE RECORD. * RLOCF NOP JSB CQUE DEC 160 * * ABS POSITION CENTRAL FILE. * RAPOS NOP JSB CQUE DEC 161 * * READ CENTRAL FILE DIRECTORY. * RSTAT NOP JSB CQUE OCT 100242 READ CALL. FCN = 162. * * REMOTE EXEC CALLS * REXEC NOP LDA REXEC SAVE RETURN ADDRESS. STA NCALL ADA B2 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. SKP ********************************** * BUILD THE PARAM BUFFER (PARMB) ******************* ********************************** * * * WHEN CQUE IS CALLED, THE ADDRESS OF THE USER * CALL AND THE FUNCTION CODE CAN BE DETERMINED * VIA THE ENTRY POINT CONTENTS. * CQUE NOP THERE JSB #TAM MAKE #TAM INITIALIZATION CALL DEF *+2 ZERO OCT 0 LDA ZERO STA THERE CLEAR OUT INITIALIZATION CALL AFTER FIRST PASS STA THERE+1 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 ADA MD163 IF .FCN=0 EXEC CALL STA .FCN SET UP FOR LATTER FOR STREAM CALCUALTION LDA CQUE FETCH USER CALL ADDRESS. ADA MD2 LDA A,I STA CALL * CLA CLEAR DATA BUFR ADDR. STA DADR * * INITIALIZE PARMB: STREAM, SUB-STREAM, FUNCTION CODE. * LDA PRMBA POINT TO PARMB AREA. STA PARMB * LDA .FCN IF ZERO...EXEC=STREAM 5 LDB B5 SZA IF NON ZERO RFA...STREAM 6 INB STB PARMB,I STORE STREAM TYPE. ISZ PARMB * CLA STA PARMB,I SUB-STREAM (NULL). ISZ PARMB * LDA FCN STA PARMB,I FUNCTION CODE. ISZ PARMB * * STORE SPARE WORD, DATA FLAG = 0. * LDA B202L STA PARMB,I 202*000 ISZ PARMB ALF,ALF STA PARMB,I 000*202 ISZ PARMB CLA STA PARMB,I 000*000 * * INITIALIZE DYNAMIC POINTERS. * LDA CALL ADDR OF USER CALL RETURN ADDR. ADA B2 STA P.PTR POINTER TO USER CALL PARAMETERS. * LDA B2 STA B.PTR PARMB BYTE POINTER. * LDA UPARM ADDR OF SAVED PARAMS. STA U.PTR * * PERFORM COMMON PARMB ENTRY STORAGE ACCORDING TO * CLASS OF CALL (REXEC OR RFA) * LDA .FCN GET FUNCTION CODE SZA EXEC OR RFA JMP .RFA RFA * JSB INTGR STORE REQ CODE IN PARMB. STA .RCD SAVE IT. * CPA B1 JMP RC1 READ. CPA B2 JMP RC1 WRITE. CPA B3 JMP RC3 I/O CONTROL. CPA D10 JMP RC10 SCHEDULE. CPA D11 JMP RC11 TIME. CPA D12 JMP RC12 EXECUTION TIME. CPA D13 JMP RC13 I/O STATUS. * LDA B1 ILLEGAL REQUEST CODE. JMP SSTAT * .RFA LDA FCN GET FUNCTION CODE CPA D162 IS IT A STATUS REQUEST? JMP *+3 YES...DON'T MOVE NAME ISZ P.PTR SKP OVER IERR PRAM JSB STRNG STORE FILE NAME IN PARMB. * LDA FCN ADA MD150 ADA RTBL LDA A,I JMP A,I * RTBL DEF *+1 GO TO UNIQUE PROCESSING FOR DEF .CRET THE PARTICULAR RFA CALLS. DEF .PURG DEF .OPEN DEF .WRIT DEF .READ DEF .POSN DEF .WIND DEF .CLOS DEF .NAME DEF .CONT DEF .LOCF DEF .APOS DEF .STAT * * UNIQUE PROCESSING FOR INDIVIDUAL REMOTE EXEC CALLS. * RC1 JSB INTGR STORE CONTROL WORD. JSB GET.A JSB RPARM STORE BUFFER ADDR. JSB STLEN STORE BUFFER LENGTH. JMP OPT2 * RC3 JSB INTGR STORE CONTROL WORD. JMP OPT1 * RC10 JSB STRNG STORE PROGRAM NAME. JSB OPTN STORE OPTIONAL PARAMS. JSB OPTN JMP OPT3 * RC11 JMP READY * RC12 JSB STRNG STORE PROG NAME. JSB INTGR IRESL JSB INTGR MTPLE JSB INTGR IOFST: CHECK SIGN. SSA JMP READY INITIAL OFFSET VERSION. JSB INTGR MINS JSB INTGR ISECS JSB INTGR MSECS JMP READY ABSOLUTE START TIME VERSION. * RC13 JSB INTGR STORE CONTROL WORD. JMP READY * * UNIQUE PROCESSING FOR INDIVIDUAL RFA CALLS. * .CRET LDA B204 STORE 2-WORD SIZE ARRAY. JSB STBYT JSB GET.A STA TEMP3 ISZ TEMP3 LDA A,I JSB STWRD LDA TEMP3,I JSB STWRD JSB INTGR STORE FILE TYPE. JMP OPT2 * .PURG JMP OPT2 * .OPEN BSS 0 OPT3 JSB OPTN OPT2 JSB OPTN STORE OPTIONAL PARAMS. OPT1 JSB OPTN JMP READY PARMB COMPLETE. * .CLOS EQU OPT1 * .READ JSB GET.A JSB RPARM SAVE DATA BUFR ADDRESS. JSB STLEN STORE LENGTH. JMP OPT2 * .WRIT EQU .READ * .POSN JSB INTGR STORE RECORD NUMBER. JMP OPT1 * .WIND JMP READY * .NAME JSB STRNG STORE NEW NAME. JMP OPT2 * .CONT JSB INTGR STORE CONTROL WORD. JMP OPT1 * .LOCF JMP READY * .APOS JSB INTGR STORE RECORD NUMBER. JMP OPT2 * .STAT JSB GET.A JSB RPARM SAVE DATA BUFR ADDRESS. LDA D124 STORE LENGTH STA PARMB,I IN DATA-FLAG AND JSB RPARM GIVE IT TO CALLER. JMP READY * MSSNG LDA B3 MISSING PARAMETER. JMP SSTAT * READY CLA STORE TERMINATION BYTE. JSB STBYT * LDA UPARM POINT TO PLEN STORAGE. ADA B2 STA U.PTR * LDA B.PTR COMPUTE PARMB SIZE. ADA MD1 CLE,ERA ADA B6 JSB RPARM SAVE PARMB LENGTH. SKP ****************************************** * TRANSMIT PARMB TO CENTRAL & READ REPLY *********** ****************************************** * LDA $C.LU GO GET THE LU TO TALK TO STA C.LU AND STORE IT IN CLEAR REQUEST JSB .IOC. CLEAR CARD C.LU OCT 0 * LDA $C.LU GET LU STA CLU0 SET IN FOR CLEARING DRIVER STA CLU1 * LDA SCWD STORE LU IN IOC CALLS. AND MSK IOR $C.LU STA SCWD * LDA PCWD AND MSK IOR $C.LU STA PCWD * LDA WCWD AND MSK IOR $C.LU STA WCWD * * FORMAT .IOC. CALL TO TRANSMIT PARMB. * LDA $C.LU LU OF CENTRAL. IOR B20K SET FOR "TRANSMIT ONLY". LDB DADR IS THERE DATA? SZB JMP DATA YES. * IOR B300 NO. XMIT REQUEST ONLY. STA IRW CONTROL WORD. LDA PRMBA REQUEST BUFFER (PARMB). STA BUFF LDA PLEN PARMB LENGTH. STA BUFL JMP XMIT * DATA IOR B100 SET FOR "REQ AND DATA". LDB RDATA WANT TO READ DATA? SZB XOR B30K YES. SET FOR READ. STA IRW LDA DABFA PARMB BUFFER ADDR. STA BUFF LDA B4 STA BUFL * XMIT LDA MD1 INITIALIZE ISTAT FOR STA ISTAT NO ERRORS. * JSB STBSY TELL TTY BUSY * TRANSMIT PARMB. * JSB .IOC. IRW NOP JMP *-2 BUFF NOP BUFL NOP * * WAIT FOR COMPLETION. * LDA TMOUT INITIALIZE TIME-OUT DELAY. STA DELAY CLA STA DEL * WAIT JSB .IOC. SCWD OCT 40000 SSA,RSS JMP ERCHK * ISZ DEL COUNT TIME. JMP WAIT ISZ DELAY JMP WAIT * TOUT LDA B200 TIME-OUT. SIMULATE "LINE JMP SETER DOWN" STATUS. * ERCHK SLA ANY I/O ERRORS? JMP POLL NO. STA TEMP1 YES. SAVE STATUS. AND D8 BIT 3 SET? SZA,RSS JMP CHKER NO. INB,SZB,RSS YES. (B) = -1? JMP POLL YES. GOT STOP FROM CENTRAL. CHKER JSB .IOC. NO...CLEAR DRIVER CLU0 OCT 0 JSB RESET LDA TEMP1 JMP SETER * * POLL FOR REPLY BUFFER. * POLL JSB .IOC. READ REPLY FROM CENTRAL. PCWD OCT 10300 JMP *-2 DEF REPLY DEC 12 * LDA TMOUT INITIALIZE TIME-OUT DELAY STA DELAY CLA STA DEL * PWAIT JSB .IOC. CALL FOR I/O STATUS. WCWD OCT 40000 SSA,RSS COMPLETE? JMP CMPL0 YES ISZ DEL NO, COUNT TIME JMP PWAIT ISZ DELAY JMP PWAIT JMP TOUT TIME-OUT * CMPL0 ALF,ALF YES. REPLY RECEIVED? RAL (CHECK BIT 6). SSA REQUEST PENDING? JMP POLL NO. KEEP POLLING. * JSB RESET YES. CHECK BAIL-OUT. ALF,ALF RAR SLA,RSS ANY I/O ERRORS? JMP SETER YES. LDA REPLY SEE IF REPLY OR REQUEST RAL SSA ? JMP COMPL REPLY. GO COMPLETE USER CALL. JMP POLL IGNORE...REQUEST...NOT LEGAL * * TRANSMISSION ERROR. SET ERROR CODE. * SETER STA TEMP1 SAVE STATUS JSB .IOC. CLEAR DRIVER CLU1 OCT 0 LDA TEMP1 GET STATUS AND B50 BITS 3,5 SET? SZA,RSS JMP LDOWN NO. LINE DOWN. LDA MD3 YES. PARITY ERROR. JMP SSTAT LDOWN LDA B2 SET LINE-DOWN ERROR JMP SSTAT SKP *********************** * BAIL-OUT PROCESSING ****************************** *********************** * * INTERRUPT PROCESSORS SHOULD NOT ABORT AN ACTIVE RFA * CALL (WHEN $BUSY IS SET) BUT MAY REQUEST A BAIL-OUT * AS SOON AS THE CURRENT RFA CALL IS COMPLETE BY * PREVIOUSLY CALLING 'ATTN' TO ESTABLISH A BAIL-OUT * ADDRESS. IF THE $BUSY FLAG IS SET WHEN AN ABORTIVE * CONDITION EXISTS, SET THE $ESC FLAG AND IT WILL BE * CHECKED AS SOON AS REMOTE TRANSMISSION COMPLETES. * ATTN NOP (A) = BAIL-OUT ADDRESS. STA ATTEN JMP ATTN,I * ATTEN NOP $ESC OCT 0 BAIL-OUT FLAG. * * RESTORE $BUSY AND CHECK FOR BAIL-OUT. * RESET NOP LDB SVBSY RESTORE RFA BUSY FLAG. STB $BUSY LDB ATTEN BAIL-OUT ADDR DEFINED? SZB,RSS JMP RESET,I NO. RETURN. LDB $ESC YES. BAIL OUT? SZB JMP ATTEN,I YES. BAIL OUT. JMP RESET,I NO. RETURN. SKP ******************************* * PASS RETURN PARAMS TO USER. ********************** ******************************* * * COMPL LDA REPLY+2 RFAM ERROR CODE? CPA MD1 RSS JMP CMPL2 NO. * LDA MD5 YES. MAP THE CODE. LDB REPLY+3 CPB B4 JMP SSTAT FILE NOT OPEN. LDA B5 CPB B5 JMP SSTAT REQ. OVERFLOW AT CENTRAL. LDA MD4 CPB D8 JMP SSTAT UNDEF. PROG SCHEDULE. CPB D11 JMP SSTAT ILLEGAL RECORD SIZE. CPB D12 JMP SSTAT ILLEGAL LU. LDA B1 CPB D9 ILLEGAL REQUEST CODE. JMP SSTAT CCA SOFTWARE BUG! HLT 13B (A)= -1, (B)= CODE. * SSTAT STA ISTAT COMMUNICATION STATUS. * CMPL2 LDA CALL INA STA P.PTR PTR TO USER CALL PARAMS. * LDA ISTAT RETURN ISTAT TO CALLER. JSB RWORD * LDA ISTAT CPA MD1 IF ISTAT NOT -1, DON'T RSS PASS ANY RETURN PARAMS. JMP EXIT * LDA RPLY ADA B4 STA I.PTR PTR TO REPLY BUFR PARAMS. * LDA .FCN TEST FOR RFA OR REXEC. SZA,RSS JMP RREXC REXEC. * LDB FCN RFA. RSTAT? CPB D162 JMP EXIT YES. ALL DONE. * LDA I.PTR,I NO. RETURN IERR. JSB RWORD ISZ I.PTR GET TO FIRST RETURN PRAM * LDB FCN CPB D154 RREAD? RSS JMP CMPL3 NO. LDA P.PTR MOVE PARAM POINTER. ADA B3 STA P.PTR LDA I.PTR,I YES. RETURN XMSN LOG. JSB RWORD JMP EXIT * CMPL3 CPB D160 RLOCF? RSS JMP EXIT NO. ISZ P.PTR SKIP OVER FILE NAME. LDB MD7 YES. RETURN N PARAMS. JSB PINTG JMP EXIT * RREXC ISZ P.PTR SKIP PAST REQ CODE. LDA .RCD REXEC TIME CALL? CPA D11 RSS JMP CMPL4 NO. LDA P.PTR,I YES. RETURN TIME ARRAY. JSB INDCK CHASE DOWNTHOSE LITTLE BITS STA P.PTR LDB MD5 TLOOP LDA I.PTR,I STA P.PTR,I ISZ P.PTR ISZ I.PTR INB,SZB JMP TLOOP JMP EXIT * CMPL4 CPA D13 REXEC I/O STATUS CALL? RSS JMP EXIT NO. ISZ P.PTR SKIP OVER CONTROL WORD. LDB MD2 YES. PASS PARAMS. JSB PINTG * * RETURN TO USER PROGRAM. * EXIT LDA CALL,I GET RETURN ADDRESS. STA TEMP1 LDA REPLY+2 SET A, B REGISTERS. LDB REPLY+3 JMP TEMP1,I RETURN. SKP ********************** * SUBROUTINE SECTION ******************************* ********************** * * STORE INTEGER PARAM FROM USER CALL INTO PARMB. * INTGR NOP JSB PCHEK IS THE PARAM SPECIFIED? JMP MSSNG NO. LDA B202 YES, STORE CONTROL BYTE. JSB STBYT JSB GET.P FETCH PARAM VALUE. JSB STWRD STORE IN PARMB. JMP INTGR,I (A) HAS THE VALUE. * * STORE OPTIONAL INTEGER PARAM (IF SPECIFIED) FROM * USER CALL INTO PARMB. * OPTN NOP JSB PCHEK IS PARAM SPECIFIED? JMP OPTN,I NO (LEAVE P.PTR ALONE). JSB INTGR YES, STORE IT. JMP OPTN,I (A) HAS THE VALUE. * * STORE 6 CHAR ASCII STRING FROM USER CALL * INTO PARMB. * STRNG NOP JSB PCHEK IS PARAM SPECIFIED? JMP MSSNG NO. * LDA B6 STORE CONTROL BYTE. JSB STBYT LDA MD3 STA TEMP2 WORD COUNTER. JSB GET.A STA TEMP3 STRING START ADDR. * STR LDA TEMP3,I FETCH ASCII CHARACTERS. ALF,ALF JSB STBYT STORE LEFT BYTE. LDA TEMP3,I JSB STBYT STORE RIGHT BYTE. * ISZ TEMP3 BUMP TO NEXT INPUT WORD. ISZ TEMP2 DONE? JMP STR NO. JMP STRNG,I YES, EXIT. * * STORE A-REGISTER CONTENTS INTO NEXT WORD * OF SAVED VALUES. * RPARM NOP LDB U.PTR,I STA B,I ISZ U.PTR JMP RPARM,I * * STORE USER BUFFER LENGTH IN PARMB, DATA-FLAG, * AND SAVE IT. * STLEN NOP JSB INTGR STORE IN PARMB. * SZA,RSS JMP WRONG SPECIFIED, BUT ZERO. SSA,RSS NEGATIVE? JMP STL NO. * CMA,INA YES, MAKE POSITIVE. INA ROUND UP. ERA,CLE,ELA RAR CONVERT TO WORD COUNT. * STL STA PARMB,I STORE IN DATA-FLAG. JSB RPARM PASS BACK TO CALLER. JMP STLEN,I EXIT. * WRONG LDA MD4 JMP SSTAT * * TEST WHETHER THE USER HAS SPECIFIED * A PARAMETER. * JSB PCHEK * ERROR RETURN (PARAM NOT GIVEN) * NORMAL RETURN * PCHEK NOP LDA P.PTR PARAM ADDR CMA,INA ADA CALL,I RETURN ADDRESS. ADA MD1 SSA,RSS ISZ PCHEK JMP PCHEK,I * * GET VALUE OF NEXT PARAM IN USER CALL * GET.P NOP JSB GET.A FETCH PARAM ADDR. LDA A,I GET PARAM VALUE. JMP GET.P,I * * GET ADDRESS OF NEXT PARAM IN USER CALL * AND BUMP PARAM POINTER. * GET.A NOP LDA P.PTR,I GET PARAMETER ADDRESS. JSB INDCK CHASE DOWN THOSE BITS ISZ P.PTR BUMP PARAM POINTER. JMP GET.A,I * * STORE WORD (IN A-REG) IN PARMB. * STWRD NOP STA TEMP2 SAVE WORD. ALF,ALF JSB STBYT STORE LEFT BYTE. LDA TEMP2 JSB STBYT STORE RIGHT BYTE. LDA TEMP2 RESTORE WORD. JMP STWRD,I RETURN. * * STORE BYTE IN NEXT BYTE OF PARMB. * STBYT NOP (A) = BYTE RIGHT JUSTIFIED. AND M377 ISOLATE NEW BYTE. STA TEMP1 SAVE. LDB B.PTR FORM WORD ADDR OF PARMB. CLE,ERB (E) = LEFT/RIGHT FLAG. ADB PARMB * LDA B,I INSERT NEW BYTE INTO PARMB. SEZ,RSS ALF,ALF AND M377L IOR TEMP1 SEZ,RSS ALF,ALF STA B,I * ISZ B.PTR BUMP RELATIVE BYTE POINTER. JMP STBYT,I RETURN. * * * PASS A-REG CONTENTS TO USER PARAM. * RWORD NOP STA TEMP1 JSB PCHEK IS PARAM SPECIFIED? JMP RWORD,I NO. LDA P.PTR,I GET ADDRESS JSB INDCK CHECK INDIRECTS LDB TEMP1 GET VALUE STB A,I AND SAVE IT ISZ P.PTR JMP RWORD,I * * PASS N PARAMS TO USER PROGRAM. (B)= -N. * PINTG NOP STB TEMP2 PLOOP LDA I.PTR,I JSB RWORD ISZ I.PTR ISZ TEMP2 JMP PLOOP JMP PINTG,I SPC 2 * * SUBROUTINE TO SET THE DRIVER BUSY FLAG * CALLING SEQUENCE * JSB STBSY * B REG LOST * STBSY NOP LDB $BUSY STB SVBSY SAVE PREVIOUS STATUS CLB,INB SET IT BUSY STB $BUSY SET BUSY FLAG JMP STBSY,I AND RETURN SPC 2 * * SUBROUTINE TO CHASE DOWN INDIRECTS * CALLING SEQUENCE * JSB INDCK * A REG=ADDRESS B REG NOT TOUCHED * INDCK NOP RSS LDA A,I RAL,CLE,SLA,ERA JMP *-2 JMP INDCK,I RETURN WITH DIRECT ADDRES SKP ********************************* * CONSTANTS AND WORKING STORAGE ******************** ********************************* * B1 OCT 1 B2 OCT 2 B3 OCT 3 B4 OCT 4 B5 OCT 5 B6 OCT 6 D8 DEC 8 D9 DEC 9 D10 DEC 10 D11 DEC 11 D12 DEC 12 D13 DEC 13 D124 DEC 124 D154 DEC 154 D160 DEC 160 D162 DEC 162 MD1 DEC -1 MD2 DEC -2 MD3 DEC -3 MD4 DEC -4 MD5 DEC -5 MD7 DEC -7 MD150 DEC -150 MD163 DEC -163 B50 OCT 50 B100 OCT 100 B200 OCT 200 B300 OCT 300 B20K OCT 20000 B30K OCT 30000 B202 OCT 202 B202L OCT 101000 B204 OCT 204 M377 OCT 377 M377L OCT 177400 MSK OCT 177700 * RDATA NOP READ DATA FLAG. FCN NOP FUNCTION CODE. CALL NOP ADDR OF USER CALL +1. .FCN NOP 0= REXEC, -= RFA. .RCD NOP REXEC REQUEST CODE. P.PTR NOP USER CALL PARAM POINTER. B.PTR NOP PARMB BYTE POINTER. U.PTR NOP I.PTR NOP TEMP1 NOP TEMP2 NOP TEMP3 NOP ISTAT NOP COMMUNICATION STATUS. $BUSY NOP SVBSY NOP DELAY NOP DEL NOP * PARMB NOP PRMB BSS 26 PARAM BUFFER (PARMB). * RPLY DEF REPLY REPLY BSS 12 REPLY BUFFER. * UPARM DEF UPRM UPRM DEF DADR DEF DLEN DEF PLEN * DABFA DEF PRMBA * PRMBA DEF PRMB PLEN NOP DADR NOP DLEN NOP * BSS 0 * END