ASMB,R,L,C HED @PTP 91705-16111 REV A *(C) HEWLETT-PACKARD CO 1976 NAM @PTP,7 91705-16111 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 * * @PTP * SOURCE: 91705-18111 REV.A * BINARY: 91705-16111 REV.A * JIM HARTSELL * JULY 30, 1974 * MODIFIED BY: C.WHELAN 11-18-75 * * LIBRARY SUBROUTINE APPENDED TO RTE-C SATELLITE USER * PROGRAM FOR SLAVE PROGRAM TO PROGRAM COMMUNICATION * WITH A CENTRAL STATION MASTER PROGRAM. * ENT GET,ACEPT,REJCT,FINIS * EXT EXEC,%LU,%MFLG,%MBOX,%CSID EXT $LIBR,$LIBX,$LIST,$XEQ EXT $PVCN * * * PROCESS "GET" CALL. * GET NOP LDA GET ADA B2 STA P.PTR POINTER TO USER PARAMS LDA GET,I STA GET SET RETURN ADDRESS * LDB IERR CLA STA IERR CLEAR SLAVE ERROR CODE. CPB MD47 COMM ERROR ON PREVIOUS TRY? JMP CLOLD YES, CLEAR OLD XACTION LDB MD46 CHECK CALL SEQUENCE. LDA NEXT SZA JMP SETER IMPROPER SEQUENCE. * SETPT LDB DFBOX POINTER TO PARMB MAILBOX. JSB INDCK ADB B2 MOVE TO WORD 3. STB M.PTR * * CHECK MAILBOX FOR PTOPC PARMB. * CHECK LDA %MFLG IS SOMETHING THERE? SZA JMP FLGUP YES. DON'T GO OP SUSP LIST. * * SUSPEND VIA THE OP SUSP LIST WHILE WAITING FOR THE * NEXT MASTER REQUEST. WHEN A REQUEST ARRIVES, @INTR * WILL RE-SCHEDULE THE USER. * JSB $LIBR NOP * LDA XEQT,I STA IDSG STA %CSID LDA DEFX STA XSUSP,I * CLA PRIVILEDGED MODE. STA $PVCN * JSB $LIST OCT 106 IDSG NOP * JMP $XEQ RELEASE CPU. DEFX DEF CHECK RESTART ADDRESS. * * PASS RETURN PARAMS TO USER. * SETER STB IERR FLGUP LDA IERR RETURN ERROR CODE. JSB RWORD SZA IF ERROR, DON'T PASS PARAMS. JMP GET,I * LDA M.PTR,I RETURN FUNCTION CODE. AND B7 STA FCN JSB RWORD * LDA M.PTR RETURN TAG TO USER. ADA B6 STA M.PTR LDA MD10 STA TEMP LDB P.PTR,I JSB INDCK * MLOOP LDA M.PTR,I MOVE 10 WORDS. STA 1,I ISZ M.PTR INB ISZ TEMP JMP MLOOP ISZ P.PTR * CLA IF READ/WRITE, RETURN LEN. LDB FCN CPB B2 LDA M.PTR,I CPB B3 LDA M.PTR,I JSB RWORD * CLA,INA SET SEQUENCE FLAG. STA NEXT * JMP GET,I RETURN TO USER. * CLOLD STA NEXT RESET SEQ INDICATOR JSB $LIBR NOP STA %MFLG CLEAR MAILBOX JSB $LIBX DEF *+1 DEF SETPT SKP * * PROCESS "ACEPT" AND "REJCT" CALLS. * REJCT NOP LDA REJCT STORE RETURN ADDR. STA ACEPT LDA BT15 BIT 15 = REJECT JMP ACPT * ACEPT NOP LDA BT14 BIT 14 = ACCEPT ACPT STA AC/RJ * LDA ACEPT POINTER TO USER PARAMS. INA STA P.PTR LDA ACEPT,I SET RETURN ADDRESS. STA ACEPT * CLB STB IERR CLEAR SLAVE ERROR CODE. STB JERR CLEAR MASTER ERROR CODE. * LDA MD46 CHECK CALL SEQUENCE. CPB NEXT JMP ERR IMPROPER SEQUENCE. * * CHECK FOR PREAD/PWRIT REQUEST. * LDB DFBOX GET FCN CODE FROM PARMB. JSB INDCK ADB B2 LDA 1,I AND B7 STA FCN LDB B100 CPA B3 JMP WRIT PWRIT REQ: RECEIVE DATA. CPA B2 BLS,SLB SET FOR SEND REQ & DATA, SKIP JMP NODAT POPEN/PCONT. * * PREAD/PWRIT: CHECK FOR REJECT. * WRIT LDA AC/RJ SSA JMP STOP REJECTED. GO SEND STOP. * ADB %LU STB CONWD SET CONTROL WORD FOR REQ. & DATA * * PREPARE TO SEND OR RECEIVE THE DATA BUFFER. * LDA P.PTR ACCEPTED. GET USER BUFR ADDR. ADA B2 LDB 0,I JSB INDCK STB BUFAD * LDB DFBOX GET BUFFER LENGTH. JSB INDCK ADB D18 LDA 1,I STA IDBFL JMP REP * * SEND STOP FOR REJECTED PREAD/PWRIT REQUEST. * STOP JSB EXEC DEF *+5 DEF ICNTL CONTROL--NO ABORT. DEF %LU DEF DUMMY DEF DUMMY JMP DOWN DRIVER ERROR DETECTED. * NODAT LDA %LU STA CONWD SEND REQUEST ONLY * * BUILD REPLY BUFFER (FOR ALL REQUESTS). * REP LDB DFBOX JSB INDCK LDA 1,I STORE STREAM, SUB-STREAM. IOR BTRPY SET REPLY & FRIENDLY BITS STA REPLY INB LDA 1,I STA REPLY+1 * LDA AC/RJ IOR FCN INSERT FUNCTION CODE. STA REPLY+2 * LDA JERR STORE ERROR CODE. STA REPLY+3 * LDA XEQT,I IF POPEN, STORE ID SEG LDB FCN ADDR IN WORD 6. CPB B1 (USED BY @INTR) STA REPLY+5 * LDB P.PTR,I MOVE TAG FROM USER CALL JSB INDCK STB TEMP TO REPLY BUFFER. * LDA DFTAG STA TEMP1 * LDB MD10 * TLOOP LDA TEMP,I STA TEMP1,I ISZ TEMP ISZ TEMP1 INB,SZB JMP TLOOP * STB REPLY+4 CLEAR UNUSED WORDS STB REPLY+6 STB REPLY+7 * LDB DFBOX GET THE ADDRESS OF THE ORIGINAL PARMB. JSB INDCK TRACK DOWN A DIRECT ADDRESS. ADB D33 POINT TO THE TIME-TAG WORD. DLD 1,I GET THE ORIGINAL TIME-TAGS, DST REPLY+33 AND ADD THEM TO THE REPLY. LDA CONWD AND B300 LDB B2 WRITE CODE CPA B100 IS IT A SEND REQ & READ DATA? CLB,INB YES, SET READ CODE ADB BT15 ADD THE NO-ABORT FLAG, ALSO. STB IRW LDA MD10 STA RETRY SET RETRY COUNT * DVTRY JSB EXEC TRANSMIT REPLY (AND DATA) DEF *+7 DEF IRW DEF CONWD DEF REPLY DEF D35 DEF BUFAD DEF IDBFL JMP DOWN DRIVER ERROR DETECTED. * SLA,RAR JMP CLSEQ NO ERRORS. * SWP AND B40 ISOLATE EQT12 BIT#5 (REMOTE BUSY) CLE,ERB SEZ,SZA,RSS BUSY-REJECT/REMOTE BUSY OR BOTH? JMP DOWN NEITHER, DRIVER ERROR SEZ,RSS WAS THE REMOTE SYSTEM BUSY? JMP BZWT YES, WAIT A WHILE SZA NO, SIMULTANEOUS REQUEST? JMP DVTRY YES, LET DVR65 RESOLVE PROBLEM JMP WAIT DRIVER BUSY * BZWT ISZ RETRY OK TO RETRY? RSS YES JMP DOWN NO LDB MD90 900 MSEC DELAY RSS WAIT LDB MD9 90 MSEC DELAY STB OFSET * JSB EXEC INTO TIME LIST & SUSPEND DEF *+6 DEF D12 DEF B0 DEF B1 DEF B0 DEF OFSET JMP DVTRY * CLSEQ AND B10 CHECK FOR RECEIVED STOP SZA,RSS SKIP IF STOP RCVD JMP *+3 OTHERWISE RETURN GOOD STATUS * DOWN LDA MD47 RETURN COMMUNICATIONS ERROR ERR STA IERR * ISZ P.PTR JSB RWORD SSA SKIP IF NO ERROR JMP ACEPT,I * CLA CLEAR SEQUENCE FLAG. STA NEXT * JSB $LIBR B0 NOP CLA CLEAR MAILBOX FLAG. STA %MFLG JSB $LIBX DEF ACEPT RETURN TO USER. * * FINIS CALL. * FINIS NOP CLA STA IERR JSB $LIBR NOP STA %CSID CLEAR MAILBOX FLAG AND STA %MFLG CURRENT SLAVE ID SEG ADDR. JSB $LIBX DEF FINIS,I * PASS A-REG CONTENTS TO USER PARAM, BUMP P.PTR. * RWORD NOP LDB P.PTR,I JSB INDCK STA 1,I ISZ P.PTR JMP RWORD,I * * RESOLVE INDIRECT PARAMETER ADDRESSES. * INDCK NOP RSS LDB 1,I RBL,CLE,SLB,ERB JMP *-2 JMP INDCK,I SKP * * CONSTANTS AND WORKING STORAGE. * B1 OCT 1 B2 OCT 2 B3 OCT 3 B6 OCT 6 B7 OCT 7 B10 OCT 10 B40 OCT 40 B100 OCT 100 B300 OCT 300 D12 DEC 12 D18 DEC 18 D33 DEC 33 D35 DEC 35 MD9 DEC -9 MD10 DEC -10 MD46 DEC -46 MD47 DEC -47 MD90 DEC -90 BT14 OCT 40000 BT15 OCT 100000 ICNTL OCT 100003 OFSET NOP RETRY NOP DUMMY NOP DUMMY PARAMETER FOR DVR65 COMPATABILITY. CONWD NOP BTRPY OCT 44000 BIT 14= REPLY, BIT 11= FRIENDLY XSUSP OCT 101730 XEQT OCT 1717 TEMP NOP TEMP1 NOP BUFAD NOP NEXT NOP FCN NOP IERR NOP ERR CODE RETURNED TO SLAVE. JERR NOP ERR CODE RETURNED TO CENTRAL. P.PTR NOP M.PTR NOP AC/RJ NOP IRW NOP DFBOX DEF %MBOX IDBFL NOP DFTAG DEF REPLY+8 REPLY BSS 35 * SIZE EQU * * END