;$IO DABIO DIRECT ACCESS I/O FOR VIRTUAL BLOCKS ;. 13-SEPT-76 P. CANNON ;. THIS MODULE PROVIDES THE FORTRAN PROGRAMMER WITH ACCESS ;. TO THE READ$ AND WRITE$ MACROS. THE USER CAN DIRECTLY ;. ACCESS ANY VIRTUAL BLOCK (256 WORDS) WITHIN HIS FILE. ;. ;. THE ENTRY POINTS DABRD AND DABWT RETURN WHEN THE I/O ;. OPERATION IS COMPLETE. THE ENTRY POINTS IDABRD AND IDABWT ;. INITIATE I/O TRANSFERS AND THE MODULE WAIT SHOULD BE ;. USED TO TEST FOR THE COMPLETION OF THE I/O OPERATION. ;. ;. CALL IDABRD(FDB,BUF,LB,IBLK) ;. CALL IDABWT(FDB,BUF,NB,IBLK) ;. CALL DABRD(FDB,BUF,LB,IBLK,/NBT/,/IER/) ;. CALL DABWT(FDB,BUF,NB,IBLK,/NBT/,/IER/) ;. ;. FDB FILE DESCRIPTOR BLOCK ;. BUF DATA BUFFER ;. LB LENGTH OF BUFFER IN BYTES ;. NB NUMBER OF BYTES TO WRITE ;. IBLK INTEGER*2 VARIABLE CONTAINING THE VIRTUAL BLOCK NUMBER ;. TO BE READ/WRITTEN. ;. NBT NUMBER OF BYTES TRANSFERRED ;. IER ERROR FLAG ;. POSITIVE IMPLIES NO ERROR ;. ZERO IMPLIES END OF FILE ;. NEGATIVE IMPLIES HARDWARE I/O ERROR ;. ; ; THE GENERAL FORM OF THE READ$ MACRO IS : ; READ$ FDB,BKDA,BKDS,BKVB,BKEF,BKST,BKDN,ERR ; ; WHERE: ; FDB ADDRESS OF THE FILE DESCRIPTOR BLOCK ; BKDA ADDRESS OF THE BLOCK I/O BUFFER IN THE USER PROGRAM ; BKDS A NUMERIC VALUE SPECIFYING THE SIZE (IN BYTES) OF ; THE VIRTUAL BLOCK TO BE READ. ; BKVD ADDRESS OF A 2-WORD BLOCK IN THE USER PROGRAM ; CONTAINING THE NUMBER (31 BITS) OF THE VIRTUAL ; BLOCK TO BE READ. ; BKEF A NUMERIC VALUE SPECIFYING THE EVENT FLAG NUMBER ; TO BE USED FOR SYNCHRONIZING BLOCK I/O OPERATIONS. ; BKST ADDRESS OF A 2-WORD I/O STATUS BLOCK IN THE USER ; PROGRAM. ; BKDN THE ENTRY-POINT ADDRESS OF AN AST SERVICE ROUTINE. ; ERR THE SYMBOLIC ADDRESS OF AN OPTIONAL USER-CODED ; ERROR-HANDLING ROUTINE. ; .TITLE DABIO - DIRECT ACCESS I/O FOR VIRTUAL BLOCKS .IDENT /V01/ .PSECT .GLOBL IDABRD,IDABWT,DABRD,DABWT .GLOBL PARM,BIOCMP .MCALL READ$,WRITE$ .SBTTL IDABRD - READ A VIRTUAL BLOCK,RETURN IMMEDIATELY EF: .WORD 0 ;ADDRESS OF PARAMETER LIST .WORD 0 ;NBR OF TIMES CALLED IDABRD: MOV R5,EF ;SAVE ADDRESS OF PARAMETER LIST INC EF+2 ;ADD ONE TO THE NBR OF TIMES CALLED JSR PC,PARM ;LOAD PARAMETERS ;R4= NBR OF PARAMETERS ;R0= ADDRESS OF FDB ;R1= BUFFER ADDRESS ;R2= NUMBER OF BYTES TO READ MOV @(R5)+,F.BKVB+2(R0) ; PUT BLOCK NUMBER IN THE FDB MOV R0,R3 ;LOAD ADDRESS OF THE FDB IN R3 ADD #F.BKVB,R3 ;ADD OFFSET OF VIRTUAL BLOCK NUMBER READ$ R0,R1,R2,R3 ;READ A VIRTUAL BLOCK RTS PC ; ; ; THE GENERAL FORM OF THE WRITE$ MACRO IS : ; WRITE$ FDB,BKDA,BKDS,BKDV,BKEF,BKST,BKDN,ERR ; ; WHERE: ; FDB ADDRESS OF THE FILE DESCRIPTOR BLOCK ; BKDA ADDRESS OF THE BLOCK I/O BUFFER IN THE USER PROGRAM ; BKDS A NUMERIC VALUE SPECIFYING THE SIZE (IN BYTES) OF ; THE VIRTUAL BLOCK TO BE WRITTEN. ; BKVD ADDRESS OF A 2-WORD BLOCK IN THE USER PROGRAM ; CONTAINING THE NUMBER (31 BITS) OF THE VIRTUAL ; BLOCK TO BE WRITTEN ; BKEF A NUMERIC VALUE SPECIFYING THE EVENT FLAG NUMBER ; TO BE USED FOR SYNCHRONIZING BLOCK I/O OPERATIONS. ; BKST ADDRESS OF A 2-WORD I/O STATUS BLOCK IN THE USER ; PROGRAM. ; BKDN THE ENTRY-POINT ADDRESS OF AN AST SERVICE ROUTINE. ; ERR THE SYMBOLIC ADDRESS OF AN OPTIONAL USER-CODED ; ERROR-HANDLING ROUTINE. ; ; .SBTTL IDABWT - WRITE A VIRTUAL BLOCK,RETURN IMMEDIATELY EF1: .WORD 0 ;ADDRESS OF PARAMETER LIST .WORD 0 ;NBR OF TIMES CALLED IDABWT: MOV R5,EF1 ;SAVE ADDRESS OF PARAMETER LIST INC EF1+2 ;ADD ONE TO THE NBR OF TIMES CALLED JSR PC,PARM ;LOAD PARAMETERS ;R4= NBR OF PARAMETERS ;R0= ADDRESS OF FDB ;R1= BUFFER ADDRESS ;R2= NUMBER OF BYTES TO READ MOV @(R5)+,F.BKVB+2(R0) ;PUT BLOCK NUMBER IN THE FDB MOV R0,R3 ;LOAD ADDRESS OF THE FDB IN R3 ADD #F.BKVB,R3 ;ADD OFFSET OF VIRTUAL BLOCK NUMBER WRITE$ R0,R1,R2,R3 ;WRITE A VIRTUAL BLOCK RTS PC ; ; .SBTTL DABRD - READ A VIRTUAL BLOCK,RETURN ON I/O COMPLETE DABRD: JSR PC,IDABRD ;ISSUE THE DIRECT ACCESS READ SUB #4,R4 ;COMPUTE THE NBR OF OPTIONAL PARAMETERS JSR PC,BIOCMP ;WAIT ON I/O TO COMPLETE,UPDATE THE ;OPTIONAL PARAMETERS RTS PC ; ; .SBTTL DABWT - WRITE A VIRTUAL BLOCK,RETURN ON I/O COMPLETE DABWT: JSR PC,IDABWT ;ISSUE THE DIRECT ACCESS WRITE SUB #4,R4 ;COMPUTE THE NBR OF OPTIONAL PARAMETERS JSR PC,BIOCMP ;WAIT ON I/O TO COMPLETE,UPDATE THE ;OPTIONAL PARAMETERS RTS PC .END