--- oldsrc/sys/arch/amiga/conf/files.amiga	Sat Jan 16 15:54:18 1999
+++ newsrc/sys/arch/amiga/conf/files.amiga	Wed Jan  6 20:59:58 1999
@@ -200,6 +200,11 @@
 attach	hyper at zbus
 file	arch/amiga/dev/hyper.c		hyper
 
+# ZBus IOBlix
+device	ioblix: supio
+attach	ioblix at zbus
+file	arch/amiga/dev/ioblix.c		ioblix
+
 attach	com at supio with com_supio
 file	arch/amiga/dev/com_supio.c	com_supio
 
--- oldsrc/sys/arch/amiga/conf/GENERIC	Sat Jan 16 15:54:18 1999
+++ newsrc/sys/arch/amiga/conf/GENERIC	Sat Jan 16 15:48:14 1999
@@ -117,6 +117,8 @@
 #options 	SYSCALL_DEBUG	# debug all syscalls.
 #options 	SCSIDEBUG	# Add SCSI debugging statements
 #options 	PANICBUTTON	# Forced crash via keypress (???)
+#options	AUCC_DEBUG	# Debug aucc.c
+#options	COM_DEBUG	# Debug com.c (HyperCom & IOBlix)
 
 #
 # Amiga specific options
@@ -212,8 +214,12 @@
 
 hyper*		at zbus?		# zbus HyperCom3 + HyperCom4
 #hyper*		at mainbus0		# not yet: HyperCom1 + HyperCom3
-com*		at hyper? port ?	# Hypercom3/4 serial ports
+com*		at hyper? port ?	# HyPerCom3/4 serial ports
 #lpt*		at hyper? port ?	# not yet: Hypercom3 parallel port
+ioblix*		at zbus?		# zbus IOBlix
+com*		at ioblix? port ?	# IOBlix serial ports
+#lpt*		at ioblix? port ?	# not yet: IOBlix parallel port
+
 
 #
 # Amiga Mainboard devices (sans graphics and keyboard)
--- oldsrc/sys/arch/amiga/dev/zbus.c	Sat Jan 16 15:54:18 1999
+++ newsrc/sys/arch/amiga/dev/zbus.c	Sun Jan  3 18:08:46 1999
@@ -162,7 +162,9 @@
 	/* VMC Harald Frank */
 	{ "blst",	5001,	1},	/* ISDN Blaster */
 	{ "hyper4",	5001,	2},	/* Hypercom4-Zbus */
-	{ "hyper3",	5001,	3}	/* Hypercom3-Zbus */
+	{ "hyper3",	5001,	3},	/* Hypercom3-Zbus */
+	/* RBM */
+	{ "ioblix",	4711,	1}	/* IOBlix */
 };
 static int naconfent = sizeof(aconftab) / sizeof(struct aconfdata);
 
--- oldsrc/sys/arch/amiga/dev/com_supio.c	Sat Jan 16 15:54:18 1999
+++ newsrc/sys/arch/amiga/dev/com_supio.c	Sun Jan 10 20:59:23 1999
@@ -125,7 +125,6 @@
 {
 	bus_space_tag_t iot;
 	int iobase;
-	int rv = 1;
 	struct supio_attach_args *supa = aux;
 
 	iot = supa->supio_iot;
@@ -134,7 +133,7 @@
 	if (strcmp(supa->supio_name,"com"))
 		return 0;
 
-	return (rv);
+	return 1;
 }
 
 void
@@ -156,6 +155,7 @@
 	iot = csc->sc_iot = supa->supio_iot;
 	printf(" port 0x%x ipl %d", iobase, supa->supio_ipl);
 
+	/* XXX This is a no-op */
 	if (bus_space_map(iot, iobase, COM_NPORTS, 0, &csc->sc_ioh))
 		panic("comattach: io mapping failed");
 
--- newsrc/sys/arch/amiga/dev/ioblix.c 	Thu Jan  1 01:00:00 1970
+++ newsrc/sys/arch/amiga/dev/ioblix.c	Sun Jan 10 21:43:42 1999
@@ -0,0 +1,168 @@
+/*	$NetBSD: hyper.c,v 1.3 1998/08/09 22:25:18 is Exp $ */
+
+/*
+ * Copyright (c) 1999 Bernardo Innocenti
+ * All rights reserved.
+ *
+ * Copyright (c) 1997, 1998 Ignatios Souvatzis
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *      This product includes software developed by Ignatios Souvatzis
+ *      for the NetBSD Project.
+ * 4. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * zbus IOBlix driver, based on HyperCom driver (hyper.c)
+ */
+
+#include <sys/types.h>
+
+#include <sys/conf.h>
+#include <sys/device.h>
+#include <sys/systm.h>
+#include <sys/param.h>
+
+#include <machine/bus.h>
+#include <machine/conf.h>
+
+#include <amiga/include/cpu.h>
+
+#include <amiga/amiga/device.h>
+#include <amiga/amiga/drcustom.h>
+
+#include <amiga/dev/supio.h>
+#include <amiga/dev/zbusvar.h>
+
+
+
+/* The IOBlix multi I/O board uses a StarTech 16C654 UART.
+ * Its register base address is offseted 0x1000 bytes after the
+ * board address on the Zorro bus.
+ * The ST16C654 registers are mapped with a 16 byte interleaving
+ * factor to avoid problems with the 68040/060 line burst access.
+ * So we need a stride factor of 4 (1<<4 == 16) to access the
+ * registers with the generic I/O read and write macros used in
+ * the machine independent COM driver (../../../dev/com.c).
+ * The ports are located at offsets 0, 0x80, 0x100 and 0x180.
+ * Since the bus_space_map() macro will shift the port offset by the
+ * stride factor we need to specify offsets 0, 0x8, 0x10 and 0x18.
+ *
+ * The IOBlix driver is inspired from the HyperCom driver (hyper.c),
+ * which handles serial interrupts using the common code for
+ * Draco's Super I/O chip (com_supio.c) and handles the UART details
+ * with the generic COM driver for PC-like UARTs (../../../dev/com.c).
+ */
+
+#define IOBLIX_UART_BASEOFFSET	0x1000
+#define IOBLIX_UART_NUMPORTS	4
+#define IOBLIX_UART_PORTOFFSET	8
+#define IOBLIX_UART_STRIDE	4
+#define IOBLIX_UART_FREQUENCY	6000000 /* non-standard */
+
+struct ioblix_softc {
+	struct device sc_dev;
+	struct bus_space_tag sc_bst;
+};
+
+struct ioblix_args
+{
+	struct zbus_args zargs;
+	char *subdev;
+	char unit;
+};
+
+
+int ioblix_match __P((struct device *, struct cfdata *, void *));
+void ioblix_attach __P((struct device *, struct device *, void *));
+int ioblix_print __P((void *auxp, const char *));
+
+struct cfattach ioblix_ca = {
+	sizeof(struct ioblix_softc), ioblix_match, ioblix_attach
+};
+
+int
+ioblix_match(parent, cfp, auxp)
+	struct device *parent;
+	struct cfdata *cfp;
+	void *auxp;
+{
+
+	struct zbus_args *zap = auxp;
+
+	if ((zap->manid != 4711) || (zap->prodid != 1))
+		return 0;
+
+	return 1;
+}
+
+void
+ioblix_attach(parent, self, auxp)
+	struct device *parent, *self;
+	void *auxp;
+{
+	struct ioblix_softc *sc;
+	struct zbus_args *zap;
+	struct supio_attach_args supa;
+	int i;
+
+
+	sc = (struct ioblix_softc *)self;
+	zap = (struct zbus_args *)auxp;
+
+	if (parent)
+		printf(": IOBlix\n");
+
+	/* setup bus space tag for the underlying generic com driver */ 
+	sc->sc_bst.base = (u_long)zap->va + IOBLIX_UART_BASEOFFSET;
+	sc->sc_bst.stride = IOBLIX_UART_STRIDE;
+
+	supa.supio_iot = &sc->sc_bst;
+	supa.supio_ipl = 6;
+
+	for (i = 0; i < IOBLIX_UART_NUMPORTS; i++)
+	{
+		supa.supio_name = "com";
+		supa.supio_iobase = i * IOBLIX_UART_PORTOFFSET;
+		supa.supio_arg = IOBLIX_UART_FREQUENCY;
+		config_found(self, &supa, ioblix_print);
+	}
+}
+
+int
+ioblix_print(auxp, pnp)
+	void *auxp;
+	const char *pnp;
+{
+	struct supio_attach_args *supa = auxp;
+
+	if (pnp == NULL)
+		return QUIET;
+
+	printf("%s at %s port 0x%02x",
+		supa->supio_name, pnp, supa->supio_iobase);
+
+	return UNCONF;
+}
