Three primary steps are required to open the gameport device: * Create a message port using CreatePort(). Reply messages from the device must be directed to a message port. * Create an I/O request structure of type IOStdReq. The IOStdReq structure is created by the CreateExtIO() function. CreateExtIO() will initialize the I/O request with your reply port. * Open the gameport device. Call OpenDevice(), passing the I/O request and and indicating the unit you wish to use. struct MsgPort *GameMP; /* Message port pointer */ struct IOStdReq *GameIO; /* I/O request pointer */ /* Create port for gameport device communications */ if (!(GameMP = CreatePort("RKM_game_port",0))) cleanexit(" Error: Can't create port\n",RETURN_FAIL); /* Create message block for device I/O */ if (!(GameIO = CreateExtIO(GameMP,sizeof(struct IOStdReq)))) cleanexit(" Error: Can't create I/O request\n",RETURN_FAIL); /* Open the right/back (unit 1, number 2) gameport.device unit */ if (error=OpenDevice("gameport.device",1,GameIO,0)) cleanexit(" Error: Can't open gameport.device\n",RETURN_FAIL); The gameport commands are unit specific. The unit number specified in the call to OpenDevice() determines which unit is acted upon.