diff --git a/PDP11/pdp11_az.c b/PDP11/pdp11_az.c
new file mode 100644
index 00000000..c45f3055
--- /dev/null
+++ PDP11/pdp11_az.c
@@ -0,0 +1,612 @@
+#include "pdp11_defs.h"
+#include "sim_disk.h"
+
+#define IOLN_AZ			4
+#define AZ_SIZE			(65535 * 256)
+#define AZ_BUF_SIZE		2240
+#define AZ_CAP_MIN		4096
+#define AZ_CAP_MAX		17072128
+#define AZ_BOOT_START		0010000
+#define AZ_MAX_DRIVES		32
+#define AZ_NDRIVES_V1		8
+#define AZ_NDRIVES_V2		AZ_MAX_DRIVES
+#define AZ_DELAY_DEF		50
+#define AZ_DELAY_MIN		0
+#define AZ_DELAY_MAX		1000000
+
+#define AZ_VERSION(maj, min)	(min * 256 + maj)
+#define AZ_VERSION_MIN		1
+#define AZ_VERSION_MAX		2
+
+#define AZ_REG(PA)		(((PA) - az_dib.ba) & ~1)
+#define REG_CSR			0
+#define REG_DR			2
+
+#define CS_CMD_MASK		0000077
+#define CS_IE			0000100
+#define CS_DONE			0000200
+#define CS_BIG			0040000
+#define CS_ERR			0100000
+
+#define CS_RD_MASK		(CS_ERR | CS_BIG | CS_DONE | CS_IE)
+#define CS_WR_MASK		(CS_IE | CS_CMD_MASK)
+
+#define AZ_CMD(v)		((v) & CS_CMD_MASK)
+#define CMD_RESET		000
+#define CMD_SETUNI		001
+#define CMD_GET_TABLE		011
+#define CMD_SETBLK		002
+#define CMD_SETBLKX		012
+#define CMD_READ		005
+#define CMD_READ_BUF		015
+#define CMD_WRITE		006
+#define CMD_WRITE_BUF		016
+#define CMD_GET_SIZE		007
+#define CMD_GET_SIZEX		017
+#define CMD_NET			010
+#define CMD_GET_FEAT		027
+#define CMD_NOP			030
+
+#define AZ_UNIT_MASK		0000007
+#define AZ_LSB_MASK		0177777
+
+#define UF_CFG			0x01
+#define UF_BOT			0x02
+#define UF_MTD			0x04
+#define UF_ERR			0x80
+
+t_stat	az_rd(int32 *, int32, int32);
+t_stat	az_wr(int32, int32, int32);
+t_stat	az_svc(UNIT *);
+int32	az_inta(void);
+t_stat	az_reset(DEVICE *);
+t_stat	az_boot(int32, DEVICE *);
+t_stat	az_attach(UNIT *, CONST char *);
+t_stat	az_detach (UNIT *uptr);
+t_stat	az_set_size(UNIT *, int32, CONST char *, void *);
+t_stat	az_set_version(UNIT *, int32, CONST char *, void *);
+t_stat	az_show_version(FILE *, UNIT *, int32, CONST void *);
+t_stat	az_set_delay(UNIT *, int32, CONST char *, void *);
+t_stat	az_show_delay(FILE *, UNIT *, int32, CONST void *);
+void	az_set_done(void);
+void	az_start_io(void);
+int32	az_read_data(int32 *, uint16 **, int32 *);
+void	az_write_data(int32 *, int32_t, uint16 **, int32 *);
+void	az_fill_table(void);
+
+struct az_table {
+	uint32	size;
+	uint16	date;
+	uint16	time;
+	uint8	flag;
+	uint8	attr;
+	char	name[130];
+};
+
+static uint32	az_version = 2;
+static uint32	az_init_wcnt = 256;
+
+static int32	azcs;
+static int32	azdr;
+
+int32	azblkf = 0;
+int32	azunit = 0;
+int32	azblkn = 0;
+int32	azoffs = 0;
+int32	azwcnt = 0;
+int32	azcmd = 0;
+
+static uint16	azbuf[AZ_BUF_SIZE];
+static uint16	azboot[] = {
+	0000240, 0106427, 0000340, 0012706, 0010000, 0012704, 0177220, 0005024,
+	0010405, 0016700, 0000060, 0032700, 0177740, 0001401, 0000000, 0010015,
+	0012744, 0000001, 0005015, 0012714, 0000002, 0012714, 0000005, 0005002,
+	0012701, 0000400, 0105714, 0100376, 0012714, 0000015, 0011522, 0077102,
+	0000240, 0005007, 0000000, 0000000
+};
+
+#define AZ_UNIT_MASK_OFFSET	12
+#define AZ_UNIT_MASK_V1		0177770
+#define AZ_UNIT_MASK_V2		0177740
+
+static	uint16	*dr_rd_data;
+static	uint16	*dr_wr_data;
+static	int32	dr_wcnt;
+
+int32 az_delay = AZ_DELAY_DEF;
+
+DIB az_dib = {
+	IOBA_AUTO,		/* I/O space base address */
+	IOLN_AZ,		/* I/O space length in bytes */
+	&az_rd,			/* I/O read routine */
+	&az_wr,			/* I/O write routine */
+	1,			/* number of vectors */
+	IVCL(AZ),		/* locator */
+	VEC_AUTO,		/* vector base address */
+	{ &az_inta },		/* interrupt ack routines */
+	IOLN_AZ,		/* length per device */
+};
+
+UNIT az_unit[AZ_MAX_DRIVES] = {
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) },
+	{ UDATA(&az_svc, UNIT_FIX | UNIT_ATTABLE | UNIT_DISABLE, AZ_SIZE) }
+};
+
+MTAB az_mod[] = {
+	{ MTAB_XTD | MTAB_VDV | MTAB_VALR, 010, "ADDRESS", "ADDRESS",
+	    &set_addr, &show_addr, NULL, "Bus address" },
+	{ MTAB_XTD | MTAB_VDV | MTAB_VALR, 0, "VECTOR", "VECTOR",
+	    &set_vec,  &show_vec,  NULL, "Interrupt vector" },
+	{ MTAB_XTD | MTAB_VDV | MTAB_VALR, 0, "VERSION", "VERSION",
+	    &az_set_version,  &az_show_version,  NULL, "Firmware version" },
+	{ MTAB_XTD | MTAB_VDV | MTAB_VALR, 0, "DELAY", "DELAY",
+	    &az_set_delay, &az_show_delay, NULL, "Device I/O delay factor" },
+	{ MTAB_XTD | MTAB_VUN | MTAB_VALR, 0, NULL, "SIZE",
+	    &az_set_size, NULL, NULL, "Device size" },
+	{ 0 }
+};
+
+DEVICE az_dev = {
+	"AZ",				/* name */
+	az_unit,			/* units */
+	NULL,				/* registers */
+	az_mod,				/* modifiers */
+	AZ_NDRIVES_V2,			/* number of units */
+	8,				/* address radix */
+	24,				/* address width */
+	1,				/* address increment */
+	8,				/* data radix */
+	16,				/* data width */
+	NULL,				/* examine routine */
+	NULL,				/* deposit routine */
+	&az_reset,			/* reset routine */
+	&az_boot,			/* boot routine */
+	az_attach,			/* attach routine */
+	az_detach,			/* detach routine */
+	&az_dib,			/* context */
+	DEV_DISABLE | DEV_UBUS | DEV_QBUS | DEV_DISK | DEV_DEBUG,
+					/* flags */
+	0,				/* debug control flags */
+	NULL,				/* debug flag names */
+	NULL,				/* memory size change routine */
+	NULL,				/* logical name */
+	NULL,				/* help routine*/
+	NULL,				/* attach help routine */
+	NULL,				/* help context */
+	NULL				/* device description routine */
+};
+
+t_stat
+az_rd(int32 *data, int32 PA, int32 access)
+{
+	switch (AZ_REG(PA)) {
+	case REG_CSR:
+		*data = azcs;
+		break;
+	case REG_DR:
+		if (!(azcs & CS_DONE))
+			return (SCPE_NXM);
+		*data = az_read_data(&azdr, &dr_rd_data, &dr_wcnt);
+		break;
+	default:
+		*data = 0177777;
+		break;
+	}
+
+	return (SCPE_OK);
+}
+
+t_stat
+az_wr(int32 data, int32 PA, int32 access)
+{
+	t_stat r;
+
+	switch (AZ_REG(PA)) {
+	case REG_CSR:
+		azcs &= ~CS_WR_MASK;
+		azcs |= data & CS_WR_MASK;
+		az_start_io();
+		break;
+	case REG_DR:
+		if (!(azcs & CS_DONE))
+			return (SCPE_NXM);
+		az_write_data(&azdr, data, &dr_wr_data, &dr_wcnt);
+		break;
+	default:
+		return (SCPE_NXM);
+	}
+
+	return (SCPE_OK);
+}
+
+t_stat
+az_svc(UNIT *uptr)
+{
+	t_seccnt ns;
+	t_stat r;
+
+	switch (azcmd) {
+	case CMD_READ:
+		r = sim_disk_rdsect(uptr, azblkn, (uint8 *)azbuf, &ns, 1);
+		break;
+	case CMD_WRITE:
+		r = sim_disk_wrsect(uptr, azblkn, (uint8 *)azbuf, &ns, 1);
+		break;
+	default:
+		return (SCPE_OK);
+	}
+
+	if (r != SCPE_OK || ns != 1)
+		azcs |= CS_ERR;
+
+	az_set_done();
+
+	return (SCPE_OK);
+}
+
+int32
+az_inta(void)
+{
+	return (az_dib.vec);
+}
+
+t_stat
+az_reset(DEVICE *dptr)
+{
+	azcs = CMD_RESET;
+	az_start_io();
+
+	return (SCPE_OK);
+}
+
+t_stat
+az_boot(int32 unit, DEVICE *dptr)
+{
+	size_t i, bsz = sizeof(azboot) / sizeof(azboot[0]);
+
+	for (i = 0; i < bsz; i++)
+		WrMemW(AZ_BOOT_START + (i * 2), azboot[i]);
+
+	WrMemW(AZ_BOOT_START + (i * 2) - 2, unit);
+	cpu_set_boot(AZ_BOOT_START);
+
+	return (SCPE_OK);
+}
+
+t_stat
+az_attach(UNIT *uptr, CONST char *cptr)
+{
+	struct stat st;
+
+	if (stat(cptr, &st) == 0) {
+		if ((size_t)st.st_size / 2 >= AZ_CAP_MIN)
+			uptr->capac = st.st_size / 2;
+		else
+			uptr->capac = AZ_CAP_MIN;
+
+		if ((size_t)uptr->capac > AZ_CAP_MAX)
+			uptr->capac = AZ_CAP_MAX;
+	}
+
+	return (sim_disk_attach(uptr, cptr, 512, 2, FALSE, 0,
+	    NULL, 512, 50));
+}
+
+t_stat
+az_detach(UNIT *uptr)
+{
+	t_stat r;
+
+	r = sim_cancel(uptr);
+
+	if (r == SCPE_OK && (r = sim_disk_detach(uptr)) == SCPE_OK)
+		uptr->capac = uptr->u3 ? uptr->u3 : AZ_SIZE;
+
+	return (r);
+}
+
+t_stat
+az_set_size(UNIT *uptr, int32 val, CONST char *cptr, void *desc)
+{
+	uint32 cap;
+	t_stat r;
+
+	if (uptr->flags & UNIT_ATT)
+		return (SCPE_ALATT);
+
+	cap = (uint32)get_uint(cptr, 10, 0xffffffff, &r);
+
+	if (r != SCPE_OK || cap < AZ_CAP_MIN || cap > AZ_CAP_MAX)
+		return (SCPE_ARG);
+
+	uptr->capac = cap * 256;
+	uptr->u3 = (int32)cap * 256;
+
+	return (SCPE_OK);
+}
+
+t_stat
+az_set_version(UNIT *uptr, int32 val, CONST char *cptr, void *desc)
+{
+	uint32 v;
+	t_stat r;
+
+	v = (uint32)get_uint(cptr, 8, 0xffffffff, &r);
+
+	if (r != SCPE_OK || v < AZ_VERSION_MIN || v > AZ_VERSION_MAX)
+		return (SCPE_ARG);
+
+	switch (v) {
+	case 1:
+		az_dev.numunits = AZ_NDRIVES_V1;
+		azboot[AZ_UNIT_MASK_OFFSET] = AZ_UNIT_MASK_V1;
+		break;
+	case 2:
+		az_dev.numunits = AZ_NDRIVES_V2;
+		azboot[AZ_UNIT_MASK_OFFSET] = AZ_UNIT_MASK_V2;
+		break;
+	}
+
+	az_version = v;
+	az_reset(&az_dev);
+
+	return (SCPE_OK);
+}
+
+t_stat
+az_show_version(FILE *st, UNIT *uptr, int32 val, CONST void *desc)
+{
+	fprintf(st, "version=%u", az_version);
+
+	return (SCPE_OK);
+}
+
+t_stat
+az_set_delay(UNIT *uptr, int32 val, CONST char *cptr, void *desc)
+{
+	uint32 delay;
+	t_stat r;
+
+	delay = (uint32)get_uint(cptr, 8, 0xffffffff, &r);
+
+	if (r != SCPE_OK || delay > AZ_DELAY_MAX)
+		return (SCPE_ARG);
+
+	az_delay = delay;
+
+	return (SCPE_OK);
+}
+
+t_stat
+az_show_delay(FILE *st, UNIT *uptr, int32 val, CONST void *desc)
+{
+	fprintf(st, "delay=%u", az_delay);
+
+	return (SCPE_OK);
+}
+
+void
+az_set_done(void)
+{
+	azcs |= CS_DONE;
+
+	switch (azcmd) {
+	case CMD_READ:
+	case CMD_WRITE:
+		if (azcs & CS_IE)
+			SET_INT(AZ);
+		break;
+	}
+}
+
+void
+az_start_io()
+{
+	uint32 size;
+	int32 unit;
+
+	switch (AZ_CMD(azcs)) {
+	case CMD_RESET:
+		CLR_INT(AZ);
+
+		for (unit = 0; unit < az_dev.numunits; unit++)
+			sim_cancel(&az_unit[unit]);
+
+		dr_rd_data = dr_wr_data = NULL;
+		az_init_wcnt = 256;
+		dr_wcnt = 0;
+		azblkn = 0;
+		azcs = CS_DONE;
+		return;
+	}
+
+	if (azcs & CS_DONE) {
+		azcmd = azcs & CS_CMD_MASK;
+		azcs &= ~(CS_DONE | CS_BIG | CS_ERR | CS_CMD_MASK);
+
+		if (azcmd != CMD_READ_BUF)
+			az_init_wcnt = 256;
+
+		switch (azcmd) {
+		case CMD_SETUNI:
+		case CMD_SETBLK:
+		case CMD_SETBLKX:
+		case CMD_GET_SIZE:
+		case CMD_GET_SIZEX:
+			switch (azcmd) {
+			case CMD_SETUNI:
+				azunit = azdr & 0377;
+				if (az_version < AZ_VERSION(2, 0))
+					azunit &= AZ_UNIT_MASK;
+				azblkn = 0;
+				break;
+			case CMD_SETBLK:
+				azblkn = azdr & AZ_LSB_MASK;
+				break;
+			case CMD_SETBLKX:
+				azblkn &= AZ_LSB_MASK;
+				azblkn |= azdr * 65536;
+				break;
+			}
+			/* FALLTHROUGH */
+		case CMD_READ:
+		case CMD_WRITE:
+			size = az_unit[azunit].capac / 256;
+
+			if (!(az_unit[azunit].flags & UNIT_ATT) ||
+			    size <= azblkn) {
+				azcs |= CS_ERR;
+				break;
+			}
+
+			switch (azcmd) {
+			case CMD_SETUNI:
+				break;
+			case CMD_GET_SIZE:
+				if (size > 65535) {
+					azbuf[0] = 65535;
+					azcs |= CS_BIG;
+				} else
+					azbuf[0] = size;
+				dr_rd_data = azbuf;
+				dr_wr_data = NULL;
+				dr_wcnt = 1;
+				break;
+			case CMD_GET_SIZEX:
+				azbuf[0] = size % 65536;
+				azbuf[1] = size / 65536;
+				dr_rd_data = azbuf;
+				dr_wr_data = NULL;
+				dr_wcnt = 2;
+				break;
+			case CMD_READ:
+			case CMD_WRITE:
+				sim_activate(&az_unit[azunit], az_delay);
+				return;
+			}
+			break;
+		case CMD_READ_BUF:
+			dr_wr_data = NULL;
+			dr_rd_data = azbuf;
+			dr_wcnt = az_init_wcnt;
+			break;
+		case CMD_WRITE_BUF:
+			dr_wr_data = azbuf;
+			dr_rd_data = NULL;
+			dr_wcnt = az_init_wcnt;
+			memset(azbuf, 0, sizeof(azbuf));
+			break;
+		case CMD_NET:
+			if (azcs & CS_IE) {
+				azcs &= ~CS_IE;
+				return;
+			}
+			/* FALLTHROUGH */
+		case CMD_NOP:
+			break;
+		case CMD_GET_TABLE:
+			az_fill_table();
+			az_init_wcnt = sizeof(struct az_table) / 2 *
+			    az_dev.numunits;
+			break;
+		case CMD_GET_FEAT:
+			if (az_version >= AZ_VERSION(2, 0)) {
+				azbuf[0] = az_version;
+				azbuf[1] = az_dev.numunits - 1;
+				azbuf[2] = 0;
+				dr_wr_data = NULL;
+				dr_rd_data = azbuf;
+				dr_wcnt = 3;
+				break;
+			}
+			/*FALLTHROUGH*/
+		default:
+			azcs |= CS_ERR;
+			break;
+		}
+
+		az_set_done();
+	}
+
+	azcs &= CS_RD_MASK;
+}
+
+int32
+az_read_data(int32 *reg, uint16 **buff, int32 *wcnt)
+{
+	int32 data = *reg;
+
+	if (*buff != NULL) {
+		data = *reg = **buff;
+		(*buff)++;
+
+		if (--*wcnt == 0)
+			*buff = NULL;
+	}
+
+	return (data);
+}
+
+void
+az_write_data(int32 *reg, int32_t data, uint16 **buff, int32 *wcnt)
+{
+	*reg = data;
+
+	if (*buff != NULL) {
+		**buff = data;
+		(*buff)++;
+
+		if (--*wcnt == 0)
+			*buff = NULL;
+	}
+}
+
+void
+az_fill_table(void)
+{
+	struct az_table *table = (struct az_table *)azbuf;
+	uint32 unit;
+
+	memset(azbuf, 0, sizeof(azbuf));
+
+	for (unit = 0; unit < az_dev.numunits; unit++) {
+		if (!(az_unit[unit].flags & UNIT_ATT))
+			continue;
+
+		/* XXX: endian */
+		table[unit].size = az_unit[unit].capac / 256;
+		table[unit].flag = UF_CFG | UF_MTD;
+		strncpy(table[unit].name, az_unit[unit].filename,
+		    sizeof(table[unit].name) - 1);
+	}
+}
diff --git a/PDP11/pdp11_defs.h b/PDP11/pdp11_defs.h
index 361cc16e..7cd4f0c7 100644
--- PDP11/pdp11_defs.h.orig
+++ PDP11/pdp11_defs.h
@@ -664,6 +664,7 @@ typedef struct pdp_dib DIB;
 #define INT_V_LK        17
 #define INT_V_TDRX      18
 #define INT_V_TDTX      19
+#define INT_V_AZ        22
 
 #define INT_V_PIR3      0                               /* BR3 */
 #define INT_V_PIR2      0                               /* BR2 */
@@ -731,6 +732,7 @@ typedef struct pdp_dib DIB;
 #define INT_NG          (1u << INT_V_NG)
 #define INT_DHRX        (1u << INT_V_DHRX)
 #define INT_DHTX        (1u << INT_V_DHTX)
+#define INT_AZ          (1u << INT_V_AZ)
 
 #define INT_INTERNAL7   (INT_PIR7)
 #define INT_INTERNAL6   (INT_PIR6 | INT_CLK)
@@ -796,6 +798,7 @@ typedef struct pdp_dib DIB;
 #define IPL_LK          4           /* XXX just a guess */
 #define IPL_TDRX        4
 #define IPL_TDTX        4
+#define IPL_AZ          4
 
 #define IPL_PIR7        7
 #define IPL_PIR6        6
diff --git a/PDP11/pdp11_io_lib.c b/PDP11/pdp11_io_lib.c
index e3cd2de2..9155a179 100644
--- PDP11/pdp11_io_lib.c.orig
+++ PDP11/pdp11_io_lib.c
@@ -871,6 +871,8 @@ AUTO_CON auto_tab[] = {/*c  #v  am vm  fxa   fxv */
         {04100} },                                      /* TV - raster display */
     { { "MB" },          1,  1,  0, 0, 
         {04000}, {0374} },                              /* MB11 */
+    { { "AZ" },          1,  1,  0, 0, 
+        {017220}, {0174} },                             /* AZ11 - fx CSR, fx VEC */
     { { NULL },         -1 }                            /* end table */
 };
 
diff --git a/PDP11/pdp11_sys.c b/PDP11/pdp11_sys.c
index b25e26d9..98617929 100644
--- PDP11/pdp11_sys.c.orig
+++ PDP11/pdp11_sys.c
@@ -129,6 +129,7 @@ extern DEVICE daz_dev;
 extern DEVICE tv_dev;
 #endif
 extern DEVICE mb_dev;
+extern DEVICE az_dev;
 extern REG cpu_reg[];
 extern int32 saved_PC;
 
@@ -226,6 +227,7 @@ DEVICE *sim_devices[] = {
     &uca_dev,
     &ucb_dev,
 #endif
+    &az_dev,
     NULL
     };
 
diff --git a/makefile b/makefile
index 79755eb2..c9ec40a9 100644
--- makefile.orig
+++ makefile
@@ -1500,7 +1500,7 @@ PDP11 = ${PDP11D}/pdp11_fp.c ${PDP11D}/pdp11_cpu.c ${PDP11D}/pdp11_dz.c \
 	${PDP11D}/pdp11_vt.c ${PDP11D}/pdp11_td.c ${PDP11D}/pdp11_io_lib.c \
 	${PDP11D}/pdp11_rom.c ${PDP11D}/pdp11_ch.c ${PDP11D}/pdp11_dh.c \
 	${PDP11D}/pdp11_ng.c ${PDP11D}/pdp11_daz.c ${PDP11D}/pdp11_tv.c \
-	${PDP11D}/pdp11_mb.c ${PDP11D}/pdp11_rr.c \
+	${PDP11D}/pdp11_mb.c ${PDP11D}/pdp11_rr.c ${PDP11D}/pdp11_az.c \
 	${DISPLAYL} ${DISPLAYNG} ${DISPLAYVT}
 PDP11_OPT = -DVM_PDP11 -I ${PDP11D} ${NETWORK_OPT} ${DISPLAY_OPT} ${AIO_CCDEFS}
 
