# Introduction

Some of the devices currently in the 3DO system include:

- Timer device
- File device
- SPORT device
- CD-ROM device (not documented here)
- RAM device (not documented here)
- xbus device (not documented here)

All devices use I/O request items for communicating information between tasks and the device. Refer to The Portfolio I/O Model, for more information on devices and I/O requests.

The first step in the I/O process is for the task to open the device with the `OpenNamedDevice()` call.

A task must also get its own IOReq and IOInfo data structures to pass information to and from the device. The IOReq data structure is created using the call `CreateIOReq()`. The IOInfo data structure is allocated by the task either via a memory allocation call or on the stack.

Note: The IOInfo structure must be cleared of all unused bits before it is used.

After setting the IOInfo fields, a task uses the `SendIO()` or `DoIO()` functions to pass the item number of the I/O request structure and a pointer to the IOInfo structure to the device. The I/O request is passed to the device, and the appropriate action is taken by the device as specified by the IOInfo structure fields.