ASMB,R,L,C HED L65 91703-16107 * (C) HEWLETT-PACKARD CO. 1976 * NAM L65 91703-16107 REV A 760311 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 ENT L65 EXT .ENTR,.IOC.,TMOUT * * SUBROUTINE TO MAKE IOC CALLS TO D.65 FORTRAN * CALLABLE * * MAY ALSO BE CALLED AS A FUNCTION, IN WHICH * CASE (EXCEPT FOR STATUS OR CLEAR CALLS) AN * ERROR CODE IS RETURNED WHEN THE OPERATION * HAS BEEN COMPLETED. (L65 OPERATIONS ARE NOW * DONE "WITH WAIT", SO OPERATIONS ARE COMPLETED * BEFORE RETURNING TO THE USER.) * * ERROR CODE MEANING * ---------- --------------------- * * -3 COMMUNICATIONS I/O ERROR * -1 REQUEST COMPLETED, NO ERRORS * +1 ILLEGAL PARAMETER IN L65 CALL * +2 LINE DOWN OR TIMEOUT * +4 BUFFER LENGTH ERROR * +61 (75B) MODE NOT COMPATIBLE * +62 (76B) TRANSMISSION NOT INITIATED * +63 (77B) SIMULTANEOUS REQUEST * * * MODIFIED BY DAN GIBBONS * HEWLETT PACKARD * FEBRUARY 11,1976 * SPC 2 * * CALLING SEQUENCES * * (NOTE THAT "SEND-REQUEST" AND "SEND-REQUEST-AND- * SEND/RECEIVE-DATA" CALLS ARE NO LONGER LEGAL.) * * SEND OR RECEIVE DATA SPC 1 * CALL L65(IRW,IDVN,IMODE,IDBUF,IDBFL) * WHERE: * IRW =1 FOR READ 2 FOR WRITE * IDVN =DEVICE REFERENCE * IDBUF=BUFFER FOR DATA STORAGE * IDBFL=DATA BUFFER LENGTH..POSITIVE WORDS ONLY * IRBUF=BUFFER FOR REQUEST STORAGE * IRBFL=BUFFER LENGTH * IMODE=1 FOR DATA, 2 FOR REQUEST * SKP * RECEIVE REQUEST SPC 1 * CALL L65(IRW,IDVN,IMODE,IRBUF,IRBFL) SPC 2 * SEND STOP SPC 1 * CALL L65(IRW,IDVN) * WHERE: IRW=6 SPC 2 * CLEAR REQUEST SPC 1 * CALL L65(IRW,IDVN) * WHERE: IRW=0 SPC 2 * STATUS REQUEST SPC 1 * CALL L65(IRW,IDVN,ISTAT,ITRLG) * WHERE: * IRW=3 * ISTAT=EQT WORD 2 * ITRLG=EQT WORD 3 SPC 2 * * THE POLLING CALL (IRW=4) AND LISTEN MODE CALL (IRW=5) * ARE NO LONGER SUPPORTED BY THIS VERSION OF THE DRIVER * REVISION C OR LATER. THESE CALLS HAVE BEEN BOTH CONVERTED * INTO CLEAR REQUEST CALLS... * * FOR STATUS CALLS, A AND B REG WILL CONTAIN * CONTENTS OF EQT WORDS 2 & 3 RESPECTIVELY (STATUS * AND TRANSMISSION LOG). * * FOR CLEAR CALLS, CONTENTS OF A AND B REG ARE MEANINGLESS. * SKP * * IRW NOP ADDRESS OF REQUEST CODE IDVN NOP ADDRESS OF UNIT REFERENCE # IMODE NOP ADDRESS OF READ/WRITE SUBMODE IDBUF NOP ADDRESS OF DATA BUFFER IDBFL NOP ADDRESS OF DATA BUFFER LENGTH IRBUF NOP ADDRESS OF REQUEST BUFFER IRBFL NOP ADDRESS OF REQUEST BUFFER LENGTH * L65 NOP JSB .ENTR FETCH PARAMETER ADDRESSES DEF IRW * LDA IRW,I GET REQ CODE AND B7 CHECK FOR LEGAL RANGE (0-6) LDB A CPB IRW,I CPB B7 JMP ERR ILLEGAL PARAMETER ADB REQC INDEX INTO FUNCTION CODE TABLE LDB B,I GET IOC FUNCTION CODE LDA IDVN,I GET DEVICE UNIT REFERENCE # AND B77 CHECK FOR LEGAL RANGE CPA IDVN,I RSS JMP ERR ILLEGAL PARAMETER IOR B MERGE UNIT REFERENCE # RBL STATUS SSB,RSS OR SZB,RSS CLEAR? JMP CS YES. RBL,RBL CONTROL SSB,SLB,RSS REQUEST? RSS NO. JMP CON YES. * STA REQ SAVE REQUEST CODE LDA IMODE,I GET MODE WORD CPA D1 CHECK FOR LEGAL VALUES (1,2) JMP OK CPA D2 RSS JMP ERR ILLEGAL PARAMETER LDB IRW,I CHECK FOR SEND-REQ OR SEND-REQ- CPB D2 SEND/RCV-DATA (ILLEGAL) JMP ERR ILLEGAL PARAMETER OK ALF,ALF RAR,RAR SET TO ADD TO SUBMODE ADA REQ SET FOR 1,2,3 FOR SUBMODE STA REQ SAVE LU,SUBMODE AND PRIVLEGE STATUS LDA IDBUF GET DATA BUFFER ADDRESS LDB IDBFL,I GET DATA BUFFER LENGTH STA BUFA SAVE AS BUFFER ADDRESS OF CALL STB LEN SAVE AS LENGTH * JSB .IOC. CALL DRIVER REQ NOP JMP *-2 BUFA NOP LEN NOP * WAIT LDA IDVN,I WAIT HERE UNTIL DONE IOR STATR SET UP STATUS STA REQ3 REQUEST LDA TMOUT SET UP TIME- STA DELAY OUT COUNTER CLA STA DEL * IOC0 JSB .IOC. STATUS CALL REQ3 NOP SSA,RSS COMPLETE? JMP STCHK YES, GO CHECK RETURNED STATUS ISZ DEL COUNT TIME JMP IOC0 ISZ DELAY TIMED OUT? JMP IOC0 NO, CHECK STATUS AGAIN LDA IDVN,I YES, SET UP STA REQ4 CLEAR REQUEST JSB .IOC. CLEAR DRIVER REQ4 NOP LDA B200 YES, SIMULATE TIMEOUT STATUS * STCHK AND B377 MASK OFF ALL BUT STATUS CPA D8 SEE IF STOP SENT INB,SZB IF SO,WAS LENGTH=-1 RSS NO..NO STOP, OR LENGTH NOT -1 CLA,INA YES,LEGAL STOP. TREAT SAME AS NO ERRORS SLA BIT 0 CCB NO ERRORS. REQUEST COMPLETED RAR,SLA BIT 1 LDB D4 REQ NOT ACCEPTED...LENGTH ERROR RAR,SLA BIT 2 LDB B75 NO DATA...DATA CALL WITHOUT REQ RAR,SLA BIT 3 LDB B76 ILLEGAL STOP SENT RAR,SLA BIT 4 LDB B77 SIMULTANEOUS REQUEST. RAR,SLA BIT 5 LDB MD3 PARITY ERROR. RAR,SLA BIT 6 LDB B74 NO REQUEST RECEIVED. RAR,SLA BIT 7 LDB D2 BROKEN LINE. LDA B A = ERROR CODE * JMP L65,I RETURN WITH ERROR CODE IN * CS STA REQ1 STORE IOC FUNCTION WORD LDA IDBFA GET AN ADDRESS OF A TEMP LOCATION SZB STATUS REQ? JMP IOC1 YES STA IMODE SET IMODE TO POINT TO IDBUF STA IDBUF DITTO IOC1 JSB .IOC. CALL DRIVER REQ1 NOP STA IMODE,I RETURN STATUS WORD STB IDBUF,I RETURN TRANSMISSION LOG JMP L65,I RETURN TO CALLER * * CON STA REQ2 STORE IOC FUNCTION WORD JSB .IOC. CALL DRIVER REQ2 NOP JMP *-2 JMP WAIT GO WAIT FOR COMPLETION * * ERR CLA,INA RETURN WITH =1 TO JMP L65,I INDICATE ILLEGAL PARAMETER * * * REQC DEF RQ RQ OCT 0 CLEAR REQUEST OCT 10100 READ REQUEST OCT 21100 WRITE REQUEST STATR OCT 40000 STATUS REQUEST OCT 0 WAS POLLING...NOW CLEAR REQ. OCT 0 WAS LISTEN MODE...NOW CLEAR REQ. OCT 31400 STOP REQUEST DEL OCT 0 TIMEOUT DELAY OCT 0 COUNTERS MD3 DEC -3 IDBFA DEF IDBUF D1 DEC 1 D2 DEC 2 D4 DEC 4 B7 OCT 7 D8 DEC 8 B74 OCT 74 B75 OCT 75 B76 OCT 76 B77 OCT 77 B200 OCT 200 B377 OCT 377 A EQU 0 B EQU 1 END