You read from the parallel device by passing an ioextpar to the device with cmd_read set in io_command, the number of bytes to be read set in io_Length and the address of the read buffer set in io_Data. #define READ_BUFFER_SIZE 256 /* Reserve SIZE bytes of storage */ char ParallelReadBuffer[READ_BUFFER_SIZE]; ParallelIO->IOPar.io_Length = READ_BUFFER_SIZE; ParallelIO->IOPar.io_Data = (APTR)&ParallelReadBuffer[0]; ParallelIO->IOPar.io_Command = CMD_READ; DoIO((struct IORequest *)ParallelIO); If you use this example, your task will be put to sleep waiting until the parallel device reads 256 bytes (or terminates early). Early termination can be caused by error conditions.