*** rio.cpp.orig	Mon Mar 15 06:53:16 1999
--- rio.cpp	Fri Feb 18 11:02:11 2000
***************
*** 53,58 ****
--- 53,76 ----
  	#define		CLOCK_SECOND			1000
  	#define		DELETEARRAY				delete[]
  
+ #elif defined(__FreeBSD__)
+ 	// FreeBSD g++
+ 	// (anybody know if this stuff applies more generally to other BSDs?)
+ 	#include	<fcntl.h>
+ 	#include	<unistd.h>
+ 	#include	<machine/cpufunc.h>
+ 	#if defined(__alpha__)
+ 		#include <sys/types.h>
+ 		extern "C" {
+ 			u_int8_t inb(u_int32_t);
+ 			void outb(u_int32_t, u_int8_t);
+ 		}
+ 	#endif
+ 	#define		OUTPORT(p,v)			outb( p, v )
+ 	#define		INPORT(p)				inb( p )
+ 	#define		CLOCK_SECOND			CLOCKS_PER_SEC
+ 	#define		DELETEARRAY				delete[]
+ 
  #elif defined(__linux__)
  	// linux g++
  	#include	<unistd.h>
***************
*** 201,206 ****
--- 219,233 ----
  	m_iPortData = m_iPortBase + OFFSET_PORT_DATA;
  	m_iPortStatus = m_iPortBase + OFFSET_PORT_STATUS;
  	m_iPortControl = m_iPortBase + OFFSET_PORT_CONTROL;
+ 
+ 	// if FreeBSD
+ 	#if defined(__FreeBSD__)
+ 		// Request direct access to memory addresses
+ 		if (open("/dev/io", O_RDONLY) < 0) {
+ 			LogError( CRIO_ERROR_IOPRERM, "open(/dev/io) failed, reason '%s'", SZERROR );
+ 			return FALSE;
+ 		}
+ 	#endif
  
  	// if linux
  	#if defined(__linux__)
