diff -Nru 915resolution-0.5.3/915resolution.c 915resolution-0.5.3-new/915resolution.c
--- 915resolution-0.5.3/915resolution.c	2007-04-21 12:40:51 +0000
+++ 915resolution-0.5.3-new/915resolution.c	2007-04-21 12:40:51 +0000
@@ -22,7 +22,17 @@
 #include <string.h>
 #include <sys/mman.h>
 #include <fcntl.h>
+
+#if defined(__NetBSD__)
+#include <sys/types.h>
+#include <machine/sysarch.h>
+#include "bsd_io.h"
+#elif defined(__FreeBSD__)
+#include "bsd_io.h"
+#elif defined(linux)
 #include <sys/io.h>
+#endif
+
 #include <unistd.h>
 #include <assert.h>
 
@@ -163,12 +173,26 @@
 
 
 void initialize_system(char * filename) {
-
     if (!filename) {
+#if defined(__FreeBSD__)
+        int iofd = open("/dev/io", O_RDONLY);
+        if (iofd == -1) {
+            perror("Unable to obtain the proper IO permissions");
+            exit(2);
+        }
+#elif defined(__NetBSD__)
+        if (i386_iopl(3) < 0) {
+            perror("Unable to obtain the proper IO permissions");
+            exit(2);
+        }
+#elif defined(linux)
         if (iopl(3) < 0) {
             perror("Unable to obtain the proper IO permissions");
             exit(2);
         }
+#else
+#error Not ported to this operating system
+#endif
     }
 }
 
diff -Nru 915resolution-0.5.3/bsd_io.h 915resolution-0.5.3-new/bsd_io.h
--- 915resolution-0.5.3/bsd_io.h	1970-01-01 00:00:00 +0000
+++ 915resolution-0.5.3-new/bsd_io.h	2007-04-21 12:40:51 +0000
@@ -0,0 +1,42 @@
+#include <sys/types.h>
+
+#ifndef _BSD_IO_H_
+#define _BSD_IO_H_
+
+/* Ripped out of cpufunc.h, changed args to match Linux. */
+static __inline u_int
+inl(u_int port)
+{
+	u_int	data;
+
+	__asm __volatile("inl %%dx,%0" : "=a" (data) : "d" (port));
+	return (data);
+}
+
+static __inline u_char
+inb(u_int port)
+{
+	u_char	data;
+
+	__asm __volatile("inb %%dx,%0" : "=a" (data) : "d" (port));
+	return (data);
+}
+
+static __inline void
+outl(u_int data, u_int port)
+{
+	/*
+	 * outl() and outw() aren't used much so we haven't looked at
+	 * possible micro-optimizations such as the unnecessary
+	 * assignment for them.
+	 */
+	__asm __volatile("outl %0,%%dx" : : "a" (data), "d" (port));
+}
+
+static __inline void
+outb(u_char data, u_int port)
+{
+	__asm __volatile("outb %0,%1" : : "a" (data), "id" ((u_short)(port)));
+}
+
+#endif