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