curzon@kaoa01.dec.com (05/01/87)
For John Sangster and any others interested, here is a short Action! module for block i/o (originally posted by Clint Parker on his BBS system) NOTE: re prior bugsheet posting: the Action! BBS is no longer up... --------------------------------------------------------------------------- MODULE ; BLKIO.ACT ; Copyright (c) 1983, 1984, 1985 ; by Action Computer Services (ACS) ; ; This software may be incorporated in ; other software packages providing ; that this copyright notice is also ; incorporated as well. ; version 1.1 ; last modified May 8, 1985 BYTE CIO_status CHAR FUNC CIO=*(BYTE dev, CARD addr, size, BYTE cmd, aux1, aux2) ; see hardware manual for description ; of CIOV. ; IOCB# = dev ; ICCOM = cmd ; ICBA = addr ; ICBL = size ; ICAX1 = aux1 ; ICAX2 = aux2 ; ICAX1 and ICAX2 are not set if aux1=0 ; The first byte of addr is passed to ; CIO in the A register. The status ; on return from CIO is stored in ; CIO_status. If status=$88 then ; EOF(dev) is set to a non-zero value. ; No other error checking is performed ; and the result of the CIOV call is ; returned as the result of this FUNC. [$29$F$85$A0$86$A1$A$A$A$A$AA$A5$A5 $9D$342$A5$A3$9D$348$A5$A4$9D$349 $A5$A6$F0$8$9D$34A$A5$A7$9D$34B$98 $9D$345$A5$A1$9D$344$20$E456 $8C CIO_status$C0$88$D0$6$98$A4$A0 $99 EOF$A085$60] CARD FUNC ReadBlock=*(BYTE dev, CARD addr, size) ; Reads size bytes from dev into addr. ; Returns number of bytes read (may ; be < size if EOF). Set EOF flag if ; EOF is encountered. Status is ; saved in CIO_status. [$48$A9$7$85$A5$A9$0$85$A6$A5$A3$5$A4 $D0$6$85$A0$85$A1$68$60$68$20 CIO $BD$348$85$A0$BD$349$85$A1$60] PROC WriteBlock=*(BYTE dev, CARD addr, size) ; Writes size bytes from addr to dev. ; Status is saved in CIO_status. [$48$A9$B$85$A5$A9$0$85$A6$A5$A3$5$A4 $D0$2$68$60$68$4C CIO] PROC PutCD=*(BYTE chan, CARD n) BYTE c=$AA, lo=$AB, hi=$AC ; save args [ $85 c $86 lo $84 hi ] ; PutD(c, lo) ; PutD(c, hi) CIO(c,lo,0,11,0) CIO(c,hi,0,11,0) RETURN CARD FUNC GetCD(BYTE chan) CARD out BYTE lo=out, hi=out+1 ; lo = GetD(chan) ; hi = GetD(chan) lo = CIO(chan,0,0,7,0) hi = CIO(chan,0,0,7,0) RETURN(out) MODULE ; for user --------------------------------------------------------------------------- Dick Curzon Digital Equipment of Canada PO Box 13000 Kanata Ontario K2K 2A6 Canada. (DEC E-NET) KAOA01::CURZON (UUCP) {decvax, ucbvax, allegra}!decwrl!kaoa01.dec.com!curzon (ARPA) curzon%kaoa01.DEC@decwrl.ARPA