.NLIST TTM .LIST MEB .TITLE FCNA .MCALL QIOW$,DIR$ ; ; CALL FCNA(LUN,F,C,N,A,DATA,IQ,IX) ; ; LUN = LOGICAL UNIT # ; F = FUNCTION (0 TO 31) ; C = CRATE (1 TO 7) ; N = STATION (0 TO 28) ; A = SUBSTATION (0 TO 16) ; DATA = 2 WORDS OF DATA TO INPUT,OUTPUT, ; IQ = 1 IF Q VALID (0 OTHERWISE) ; IX = 1 IF X VALID ; FCNA:: MOV #^RA ,-(SP) ;SET UP TRACEBACK MOV #^RFCN,R4 ;BY LOADING THE ENTRY NAME JSR R4,NAM$ ;EXECUTE TRACEBACK MOV #8.,R0 JSR PC,R5CHEK MOVB @(R5)+,Q.IOLU+QIO ;SAVE LUN MOV @(R5)+,R0 ;GET F BIC #177740,R0 MOV R0,R1 MOV R0,R2 ASR R2 ;SHIFT TO GET RID OF BIT#3 (=10 OCT) BIC #7,R2 BIC #177770,R1 BIS R2,R1 ASH #3,R1 MOV @(R5)+,R2 ;GET C BIC #177770,R2 MOV R2,CRATE ;SAVE C ADD R2,R1 MOV #1,R2 ;BIT 0 SET IN R2 ASH CRATE,R2 ;NOW BIT SET CORRESPONDING TO CRATE MOV R2,QIO+Q.IOPL+12 ;SAVE CRATE NUMBER IN QIO ASH #5,R1 MOV @(R5)+,R2 ;GET N BIC #177740,R2 ADD R2,R1 ASH #4,R1 MOV @(R5)+,R2 ;GET A BIC #177760,R2 BIS R2,R1 ;SET BITS MOV R1,FUNCTN ;MOVE TO FUNCTION IN CLIST ASH #-2,R0 ;FUNCTION = 0,2,4,6 BIC #1,R0 MOV READ(R0),CLIST ;SET UP READ/WRITE/OR CTR IN CLIST MOV (R5),R1 ;GET DATA MOV #BUFF,R2 ;DATA BUFFER BIT #2,R0 ;IS THIS CNTRL FUNC BNE 7$ ;YES,SKIP DATA MOV (R1)+,(R2)+ MOV (R1)+,(R2)+ 7$: MOV #-1,STAT ;JUST IN CASE REJECTED MOV #-1,STAT+2 DIR$ #QIO ;EXECUTE I/O BCC 4$ ;DIRECTIVE ACCEPTED MOVB $DSW,STAT ;BAD STATUS MOVB #377,STAT+1 ;MARK IT AS BAD DIRECTIVE 4$: MOV (R5)+,R2 ;USER DATA MOV #BUFF,R1 BIT #2,R0 ;IS THIS CTR FUNCTION BNE 2$ ;IT IS CTR MOV (R1)+,(R2)+ MOV (R1)+,(R2)+ 2$: TSTB STAT ;CHECK TO SEE IF OK BLE 3$ ;NOT OK SUB #1,(R1) NEG (R1) MOV (R1)+,@(R5)+ ;Q STAT TO USER SUB #1,(R1) NEG (R1) ;NOW 1=X RESPONSE TRUE MOV (R1)+,@(R5)+ ;X STAT RTS PC 3$: MOVB STAT,@(R5)+ ;YES GIVE ERROR TO USER CLR @(R5)+ ;NO X RESPONSE RTS PC QIO: QIOW$ IO.RBC,0,1,,STAT,, STAT: .BLKW 2 BUFF: .BLKW 4. BUFEND: CRATE: .WORD 0 ;SAVES CRATE NUMBER CLIST: .WORD 0 ;WILL BE CLIST FUNCTION .WORD 1 ;1 WORD COUNT FUNCTN: .WORD 0 ;WILL BE FCNA .WORD $ERROR!$DBL ;GET Q + X ERRORS .WORD 1 ;ONLY 1 ERROR WORD .WORD 0 ;DUMMY WORD .WORD $ENDCLS .BLKW 2 CLEND: READ: $READ!$DBL $CTRL $WRITE!$DBL $CTRL .END ;END OF ASSEMBLY