diff -u --new-file --recursive fuse-emulator-fuse-base/fuse.c fuse-emulator-fuse/fuse.c
--- fuse-emulator-fuse-base/fuse.c	2019-03-04 13:35:11.233572889 +0000
+++ fuse-emulator-fuse/fuse.c	2019-03-03 20:47:49.294043663 +0000
@@ -73,6 +73,7 @@
 #include "peripherals/fuller.h"
 #include "peripherals/ide/divide.h"
 #include "peripherals/ide/divmmc.h"
+#include "peripherals/ide/nemoide.h"
 #include "peripherals/ide/simpleide.h"
 #include "peripherals/ide/zxatasp.h"
 #include "peripherals/ide/zxcf.h"
@@ -319,6 +320,7 @@
   memory_register_startup();
   mempool_register_startup();
   multiface_register_startup();
+  nemoide_register_startup();
   opus_register_startup();
   phantom_typist_register_startup();
   plusd_register_startup();
diff -u --new-file --recursive fuse-emulator-fuse-base/infrastructure/startup_manager.h fuse-emulator-fuse/infrastructure/startup_manager.h
--- fuse-emulator-fuse-base/infrastructure/startup_manager.h	2019-03-04 13:35:11.234572905 +0000
+++ fuse-emulator-fuse/infrastructure/startup_manager.h	2019-03-03 19:54:14.993839272 +0000
@@ -53,6 +53,7 @@
   STARTUP_MANAGER_MODULE_MEMORY,
   STARTUP_MANAGER_MODULE_MEMPOOL,
   STARTUP_MANAGER_MODULE_MULTIFACE,
+  STARTUP_MANAGER_MODULE_NEMOIDE,
   STARTUP_MANAGER_MODULE_OPUS,
   STARTUP_MANAGER_MODULE_PHANTOM_TYPIST,
   STARTUP_MANAGER_MODULE_PLUSD,
diff -u --new-file --recursive fuse-emulator-fuse-base/machines/machines_periph.c fuse-emulator-fuse/machines/machines_periph.c
--- fuse-emulator-fuse-base/machines/machines_periph.c	2019-03-04 13:35:11.239572987 +0000
+++ fuse-emulator-fuse/machines/machines_periph.c	2019-03-03 23:45:27.629209853 +0000
@@ -51,6 +51,7 @@
 static const periph_t spec128_memory = {
   NULL,
   spec128_memory_ports,
+  PERIPH_BUS_SYSTEM,
   0,
   NULL
 };
@@ -64,6 +65,7 @@
 static const periph_t plus3_memory = {
   NULL,
   plus3_memory_ports,
+  PERIPH_BUS_SYSTEM,
   0,
   NULL
 };
@@ -77,6 +79,7 @@
 static const periph_t upd765 = {
   NULL,
   upd765_ports,
+  PERIPH_BUS_SYSTEM,
   0,
   NULL
 };
@@ -89,6 +92,7 @@
 static const periph_t se_memory = {
   NULL,
   se_memory_ports,
+  PERIPH_BUS_SYSTEM,
   0,
   NULL
 };
@@ -102,6 +106,7 @@
 static const periph_t tc2068_ay = {
   NULL,
   tc2068_ay_ports,
+  PERIPH_BUS_SYSTEM,
   0,
   NULL
 };
@@ -118,6 +123,7 @@
 static const periph_t beta128_pentagon = {
   NULL,
   beta128_pentagon_ports,
+  PERIPH_BUS_SYSTEM,
   0,
   NULL
 };
@@ -134,6 +140,7 @@
 static const periph_t beta128_pentagon_late = {
   NULL,
   beta128_pentagon_late_ports,
+  PERIPH_BUS_SYSTEM,
   0,
   NULL
 };
@@ -147,6 +154,7 @@
 static const periph_t pentagon1024_memory = {
   NULL,
   pentagon1024_memory_ports,
+  PERIPH_BUS_SYSTEM,
   0,
   NULL
 };
@@ -184,6 +192,7 @@
   periph_set_present( PERIPH_TYPE_DIVMMC, PERIPH_PRESENT_OPTIONAL );
   periph_set_present( PERIPH_TYPE_KEMPSTON, PERIPH_PRESENT_OPTIONAL );
   periph_set_present( PERIPH_TYPE_KEMPSTON_MOUSE, PERIPH_PRESENT_OPTIONAL );
+  periph_set_present( PERIPH_TYPE_NEMOIDE, PERIPH_PRESENT_OPTIONAL );
   periph_set_present( PERIPH_TYPE_SIMPLEIDE, PERIPH_PRESENT_OPTIONAL );
   periph_set_present( PERIPH_TYPE_SPECCYBOOT, PERIPH_PRESENT_OPTIONAL );
   periph_set_present( PERIPH_TYPE_SPECTRANET, PERIPH_PRESENT_OPTIONAL );
diff -u --new-file --recursive fuse-emulator-fuse-base/menu.c fuse-emulator-fuse/menu.c
--- fuse-emulator-fuse-base/menu.c	2019-03-04 13:35:11.244573068 +0000
+++ fuse-emulator-fuse/menu.c	2019-03-04 00:19:06.194353436 +0000
@@ -39,6 +39,7 @@
 #include "peripherals/disk/plusd.h"
 #include "peripherals/ide/divide.h"
 #include "peripherals/ide/divmmc.h"
+#include "peripherals/ide/nemoide.h"
 #include "peripherals/ide/simpleide.h"
 #include "peripherals/ide/zxatasp.h"
 #include "peripherals/ide/zxcf.h"
@@ -645,6 +646,8 @@
   case 7: divide_insert( filename, LIBSPECTRUM_IDE_SLAVE  ); break;
   case 8: divmmc_insert( filename ); break;
   case 9: zxmmc_insert( filename ); break;
+  case 10: nemoide_insert( filename, LIBSPECTRUM_IDE_MASTER ); break;
+  case 11: nemoide_insert( filename, LIBSPECTRUM_IDE_SLAVE ); break;
   }
 
   libspectrum_free( filename );
@@ -666,6 +669,8 @@
   case 7: divide_commit( LIBSPECTRUM_IDE_SLAVE  ); break;
   case 8: divmmc_commit(); break;
   case 9: zxmmc_commit(); break;
+  case 10: nemoide_commit( LIBSPECTRUM_IDE_MASTER ); break;
+  case 11: nemoide_commit( LIBSPECTRUM_IDE_SLAVE ); break;
   }
 
   fuse_emulation_unpause();
@@ -686,6 +691,9 @@
   case 6: divide_eject( LIBSPECTRUM_IDE_MASTER ); break;
   case 7: divide_eject( LIBSPECTRUM_IDE_SLAVE  ); break;
   case 8: divmmc_eject(); break;
+  case 9: zxmmc_eject(); break;
+  case 10: nemoide_eject( LIBSPECTRUM_IDE_MASTER ); break;
+  case 11: nemoide_eject( LIBSPECTRUM_IDE_SLAVE  ); break;
   }
 
   fuse_emulation_unpause();
diff -u --new-file --recursive fuse-emulator-fuse-base/menu_data.dat fuse-emulator-fuse/menu_data.dat
--- fuse-emulator-fuse-base/menu_data.dat	2019-03-04 13:35:11.244573068 +0000
+++ fuse-emulator-fuse/menu_data.dat	2019-03-03 20:09:51.320751182 +0000
@@ -468,6 +468,16 @@
 Media/IDE/Simple 8-bit/Slave/_Commit, Item,, menu_media_ide_commit,, 2
 Media/IDE/Simple 8-bit/Slave/_Eject, Item,, menu_media_ide_eject,, 2
 
+Media/IDE/_NemoIDE, Branch
+Media/IDE/NemoIDE/_Master, Branch
+Media/IDE/NemoIDE/Master/_Insert..., Item,, menu_media_ide_insert,, 1
+Media/IDE/NemoIDE/Master/_Commit, Item,, menu_media_ide_commit,, 1
+Media/IDE/NemoIDE/Master/_Eject, Item,, menu_media_ide_eject,, 1
+Media/IDE/NemoIDE/_Slave, Branch
+Media/IDE/NemoIDE/Slave/_Insert..., Item,, menu_media_ide_insert,, 2
+Media/IDE/NemoIDE/Slave/_Commit, Item,, menu_media_ide_commit,, 2
+Media/IDE/NemoIDE/Slave/_Eject, Item,, menu_media_ide_eject,, 2
+
 Media/IDE/ZX_ATASP, Branch
 Media/IDE/ZXATASP/_Master, Branch
 Media/IDE/ZXATASP/Master/_Insert..., Item,, menu_media_ide_insert,, 3
diff -u --new-file --recursive fuse-emulator-fuse-base/periph.c fuse-emulator-fuse/periph.c
--- fuse-emulator-fuse-base/periph.c	2019-03-04 13:35:11.245573085 +0000
+++ fuse-emulator-fuse/periph.c	2019-03-03 23:57:10.597392312 +0000
@@ -57,6 +57,8 @@
 typedef struct periph_port_private_t {
   /* The peripheral this came from */
   periph_type type;
+  /* The bus type for this port */
+  periph_bus bus;
   /* The port response */
   periph_port_t port;
 } periph_port_private_t;
@@ -70,16 +72,20 @@
 
 /* Place one port response in the list of currently active ones */
 static void
-port_register( periph_type type, const periph_port_t *port )
+port_register( periph_type type, const periph_port_t *port, periph_bus bus)
 {
   periph_port_private_t *private;
 
   private = libspectrum_new( periph_port_private_t, 1 );
 
   private->type = type;
+  private->bus = bus;
   private->port = *port;
 
-  ports = g_slist_append( ports, private );
+  if (bus == PERIPH_BUS_SYSTEM)
+    ports = g_slist_append( ports, private );
+  else /* ZX Bus comes first but don't bother modeling slot order */
+    ports = g_slist_prepend( ports, private );
 }
 
 /* Register a peripheral with the system */
@@ -131,7 +137,7 @@
     if( private->periph->activate )
       private->periph->activate();
     for( ptr = private->periph->ports; ptr && ptr->mask != 0; ptr++ )
-      port_register( type, ptr );
+      port_register( type, ptr, private->periph->bus );
   } else {
     GSList *found;
     while( ( found = g_slist_find_custom( ports, GINT_TO_POINTER( type ), find_by_type ) ) != NULL )
@@ -264,6 +270,7 @@
 
   libspectrum_byte attached;
   libspectrum_byte value;
+  libspectrum_byte stop;		/* ZX BUS IORGE etc */
 };
 
 /* Read a byte from a port, taking the appropriate time */
@@ -298,12 +305,14 @@
 
   periph_port_t *port = &( private->port );
 
-  if( port->read &&
+  if( port->read && !callback_info->stop &&
       ( ( callback_info->port & port->mask ) == port->value ) ) {
     last_attached = callback_info->attached;
     callback_info->value &= (   port->read( callback_info->port,
 					    &( callback_info->attached ) )
 			      | last_attached );
+    if (private->bus == PERIPH_BUS_ZXBUS)
+      callback_info->stop = 1;
   }
 }
 
@@ -340,6 +349,7 @@
   callback_info.port = port;
   callback_info.attached = 0x00;
   callback_info.value = 0xff;
+  callback_info.stop = 0;
 
   g_slist_foreach( ports, read_peripheral, &callback_info );
 
@@ -381,9 +391,12 @@
 
   periph_port_t *port = &( private->port );
   
-  if( port->write &&
-      ( ( callback_info->port & port->mask ) == port->value ) )
+  if( port->write && !callback_info->stop &&
+      ( ( callback_info->port & port->mask ) == port->value ) ) {
     port->write( callback_info->port, callback_info->value );
+    if (private->bus == PERIPH_BUS_ZXBUS)
+      callback_info->stop = 1;
+  }
 }
 
 /* Write a byte to a port, taking no time */
@@ -398,6 +411,7 @@
 
   callback_info.port = port;
   callback_info.value = b;
+  callback_info.stop = 0;
   
   g_slist_foreach( ports, write_peripheral, &callback_info );
 }
@@ -425,7 +439,7 @@
 static void
 update_ide_menu( void )
 {
-  int ide, simpleide, zxatasp, zxcf, divide, divmmc, zxmmc;
+  int ide, simpleide, zxatasp, zxcf, divide, divmmc, zxmmc, nemoide;
 
   simpleide = settings_current.simpleide_active;
   zxatasp = settings_current.zxatasp_active;
@@ -433,11 +447,13 @@
   divide = settings_current.divide_enabled;
   divmmc = settings_current.divmmc_enabled;
   zxmmc = settings_current.zxmmc_enabled;
+  nemoide = settings_current.nemoide_active;
 
-  ide = simpleide || zxatasp || zxcf || divide || divmmc || zxmmc;
+  ide = simpleide || zxatasp || zxcf || divide || divmmc || zxmmc || nemoide ;
 
   ui_menu_activate( UI_MENU_ITEM_MEDIA_IDE, ide );
   ui_menu_activate( UI_MENU_ITEM_MEDIA_IDE_SIMPLE8BIT, simpleide );
+  ui_menu_activate( UI_MENU_ITEM_MEDIA_IDE_NEMOIDE, nemoide );
   ui_menu_activate( UI_MENU_ITEM_MEDIA_IDE_ZXATASP, zxatasp );
   ui_menu_activate( UI_MENU_ITEM_MEDIA_IDE_ZXCF, zxcf );
   ui_menu_activate( UI_MENU_ITEM_MEDIA_IDE_DIVIDE, divide );
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/ay.c fuse-emulator-fuse/peripherals/ay.c
--- fuse-emulator-fuse-base/peripherals/ay.c	2019-03-04 13:35:11.245573085 +0000
+++ fuse-emulator-fuse/peripherals/ay.c	2019-03-03 23:45:27.630209869 +0000
@@ -70,6 +70,7 @@
 static periph_t ay_periph = {
   /* .option = */ NULL,
   /* .ports = */ ay_ports,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 0,
   /* .actinate = */ NULL,
 };
@@ -83,6 +84,7 @@
 static periph_t ay_periph_plus3 = {
   /* .option = */ NULL,
   /* .ports = */ ay_ports_plus3,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 0,
   /* .activate = */ NULL,
 };
@@ -96,6 +98,7 @@
 static periph_t ay_periph_full_decode = {
   /* .option = */ NULL,
   /* .ports = */ ay_ports_full_decode,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 0,
   /* .activate = */ NULL,
 };
@@ -109,6 +112,7 @@
 static periph_t ay_periph_timex = {
   /* .option = */ NULL,
   /* .ports = */ ay_ports_timex,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 0,
   /* .activate = */ NULL,
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/covox.c fuse-emulator-fuse/peripherals/covox.c
--- fuse-emulator-fuse-base/peripherals/covox.c	2019-03-04 13:35:11.246573101 +0000
+++ fuse-emulator-fuse/peripherals/covox.c	2019-03-03 23:45:27.630209869 +0000
@@ -62,6 +62,7 @@
 static const periph_t covox_periph_fb = {
   /* .option = */ &settings_current.covox,
   /* .ports = */ covox_ports_fb,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 1,
   /* .activate = */ NULL,
 };
@@ -74,6 +75,7 @@
 static const periph_t covox_periph_dd = {
   /* .option = */ &settings_current.covox,
   /* .ports = */ covox_ports_dd,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 1,
   /* .activate = */ NULL,
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/disk/beta.c fuse-emulator-fuse/peripherals/disk/beta.c
--- fuse-emulator-fuse-base/peripherals/disk/beta.c	2019-03-04 13:35:11.246573101 +0000
+++ fuse-emulator-fuse/peripherals/disk/beta.c	2019-03-03 23:45:27.631209885 +0000
@@ -85,6 +85,7 @@
 static const periph_t beta_peripheral = {
   /* .option = */ &settings_current.beta128,  
   /* .ports = */ beta_ports,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 1,
   /* .activate = */ NULL,
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/disk/didaktik.c fuse-emulator-fuse/peripherals/disk/didaktik.c
--- fuse-emulator-fuse-base/peripherals/disk/didaktik.c	2019-03-04 13:35:11.247573117 +0000
+++ fuse-emulator-fuse/peripherals/disk/didaktik.c	2019-03-03 23:45:27.631209885 +0000
@@ -121,6 +121,7 @@
 static const periph_t didaktik_periph = {
   /* .option = */ &settings_current.didaktik80,
   /* .ports = */ didaktik_ports,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 1,
   /* .activate = */ NULL,
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/disk/disciple.c fuse-emulator-fuse/peripherals/disk/disciple.c
--- fuse-emulator-fuse-base/peripherals/disk/disciple.c	2019-03-04 13:35:11.247573117 +0000
+++ fuse-emulator-fuse/peripherals/disk/disciple.c	2019-03-03 23:45:27.632209901 +0000
@@ -186,6 +186,7 @@
 static const periph_t disciple_periph = {
   /* .option = */ &settings_current.disciple,
   /* .ports = */ disciple_ports,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 1,
   /* .activate = */ disciple_activate,
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/disk/opus.c fuse-emulator-fuse/peripherals/disk/opus.c
--- fuse-emulator-fuse-base/peripherals/disk/opus.c	2019-03-04 13:35:11.248573133 +0000
+++ fuse-emulator-fuse/peripherals/disk/opus.c	2019-03-03 23:45:27.632209901 +0000
@@ -89,6 +89,7 @@
 static const periph_t opus_periph = {
   /* .option = */ &settings_current.opus,
   /* .ports = */ NULL,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 1,
   /* .activate = */ NULL,
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/disk/plusd.c fuse-emulator-fuse/peripherals/disk/plusd.c
--- fuse-emulator-fuse-base/peripherals/disk/plusd.c	2019-03-04 13:35:11.248573133 +0000
+++ fuse-emulator-fuse/peripherals/disk/plusd.c	2019-03-03 23:45:27.632209901 +0000
@@ -155,6 +155,7 @@
 static const periph_t plusd_periph = {
   /* .option = */ &settings_current.plusd,
   /* .ports = */ plusd_ports,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 1,
   /* .activate = */ plusd_activate,
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/fuller.c fuse-emulator-fuse/peripherals/fuller.c
--- fuse-emulator-fuse-base/peripherals/fuller.c	2019-03-04 13:35:11.250573166 +0000
+++ fuse-emulator-fuse/peripherals/fuller.c	2019-03-03 23:45:27.633209917 +0000
@@ -58,6 +58,7 @@
 static const periph_t fuller_periph = {
   /* .option = */ &settings_current.fuller,
   /* .ports = */ fuller_ports,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 1,
   /* .activate = */ NULL,
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/ide/divide.c fuse-emulator-fuse/peripherals/ide/divide.c
--- fuse-emulator-fuse-base/peripherals/ide/divide.c	2019-03-04 13:35:11.250573166 +0000
+++ fuse-emulator-fuse/peripherals/ide/divide.c	2019-03-03 23:45:27.633209917 +0000
@@ -59,6 +59,7 @@
 static const periph_t divide_periph = {
   /* .option = */ &settings_current.divide_enabled,
   /* .ports = */ divide_ports,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 1,
   /* .activate = */ divide_activate,
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/ide/divmmc.c fuse-emulator-fuse/peripherals/ide/divmmc.c
--- fuse-emulator-fuse-base/peripherals/ide/divmmc.c	2019-03-04 13:35:11.251573182 +0000
+++ fuse-emulator-fuse/peripherals/ide/divmmc.c	2019-03-03 23:45:27.633209917 +0000
@@ -62,6 +62,7 @@
 static const periph_t divmmc_periph = {
   /* .option = */ &settings_current.divmmc_enabled,
   /* .ports = */ divmmc_ports,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 1,
   /* .activate = */ divmmc_activate,
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/ide/nemoide.c fuse-emulator-fuse/peripherals/ide/nemoide.c
--- fuse-emulator-fuse-base/peripherals/ide/nemoide.c	1970-01-01 01:00:00.000000000 +0100
+++ fuse-emulator-fuse/peripherals/ide/nemoide.c	2019-03-04 01:36:32.813558898 +0000
@@ -0,0 +1,252 @@
+/*
+   NEMOIDE Pentagon IDE interface emulation
+   (C) 2019 Alan Cox <alan@llywncelyn.cymru>
+
+   The NEMO IDE interface is a NEMO/ZXBUS interface for the Pentagon and
+   similar systems. The decode is XXXXXXXX RRR1000L, where R is the IDE register
+   and L is the high latch select.
+
+   This causes problems because on a simple system the decode clashes with
+   paging registers unless you force the high bits to FF. On a real ZBUS system
+   there is a priority scheme so it doesn't happen. Fuse however can't model
+   this yet as it would need to know what slot each device was in and some
+   core changes.
+
+   Based upon the simple 8bit driver
+
+   Copyright (c) 2003-2017 Garry Lancaster, Philip Kendall, Fredrick Meunier
+   Copyright (c) 2015 Stuart Brady
+   Copyright (c) 2016 Sergio Baldoví
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License along
+   with this program; if not, write to the Free Software Foundation, Inc.,
+   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+   Author contact information:
+
+   E-mail: Alan Cox <alan@llwyncelyn.cymru>
+
+*/
+
+#include <config.h>
+
+#include <libspectrum.h>
+
+#include "ide.h"
+#include "infrastructure/startup_manager.h"
+#include "module.h"
+#include "periph.h"
+#include "settings.h"
+#include "nemoide.h"
+#include "ui/ui.h"
+
+/* Private function prototypes */
+
+static libspectrum_byte nemoide_read( libspectrum_word port, libspectrum_byte *attached );
+static void nemoide_write( libspectrum_word port, libspectrum_byte data );
+static libspectrum_byte nemoide_read_status( libspectrum_word port, libspectrum_byte *attached );
+static void nemoide_write_ctrl( libspectrum_word port, libspectrum_byte data );
+/* Data */
+
+static const periph_port_t nemoide_ports[] = {
+  /* nnn1000l : register nnnn l = latch */
+  { 0x001E, 0x0010, nemoide_read, nemoide_write },
+  /* C8 is byte decoded */
+  { 0x00FF, 0x00C8, nemoide_read_status, nemoide_write_ctrl },
+  { 0, 0, NULL, NULL }
+};
+
+static const periph_t nemoide_periph = {
+  /* .option = */ &settings_current.nemoide_active,
+  /* .ports = */ nemoide_ports,
+  /* .bus = */ PERIPH_BUS_ZXBUS,
+  /* .hard_reset = */ 1,
+  /* .activate = */ NULL,
+};
+
+static libspectrum_ide_channel *nemoide_idechn;
+
+static void nemoide_snapshot_enabled( libspectrum_snap *snap );
+static void nemoide_to_snapshot( libspectrum_snap *snap );
+
+static module_info_t nemoide_module_info = {
+
+  /* .reset = */ nemoide_reset,
+  /* .romcs = */ NULL,
+  /* .snapshot_enabled = */ nemoide_snapshot_enabled,
+  /* .snapshot_from = */ NULL,
+  /* .snapshot_to = */ nemoide_to_snapshot,
+
+};
+
+static libspectrum_byte nemo_latch;
+static int nemo_reset;
+
+/* Housekeeping functions */
+
+static int
+nemoide_init( void *context )
+{
+  int error;
+
+  nemoide_idechn = libspectrum_ide_alloc( LIBSPECTRUM_IDE_DATA16 );
+
+  error = ide_init( nemoide_idechn,
+		    settings_current.nemoide_master_file,
+		    UI_MENU_ITEM_MEDIA_IDE_NEMOIDE_MASTER_EJECT,
+		    settings_current.nemoide_slave_file,
+		    UI_MENU_ITEM_MEDIA_IDE_NEMOIDE_SLAVE_EJECT );
+  if( error ) return error;
+
+  module_register( &nemoide_module_info );
+  periph_register( PERIPH_TYPE_NEMOIDE, &nemoide_periph );
+  return 0;
+}
+
+static void
+nemoide_end( void )
+{
+  libspectrum_ide_free( nemoide_idechn );
+}
+
+void
+nemoide_register_startup( void )
+{
+  startup_manager_module dependencies[] = {
+    STARTUP_MANAGER_MODULE_DISPLAY,
+    STARTUP_MANAGER_MODULE_SETUID
+  };
+  startup_manager_register( STARTUP_MANAGER_MODULE_NEMOIDE, dependencies,
+                            ARRAY_SIZE( dependencies ), nemoide_init, NULL,
+                            nemoide_end );
+}
+
+void
+nemoide_reset( int hard_reset GCC_UNUSED )
+{
+  libspectrum_ide_reset( nemoide_idechn );
+}
+
+int
+nemoide_insert( const char *filename, libspectrum_ide_unit unit )
+{
+  int r;
+  r = ide_master_slave_insert(
+    nemoide_idechn, unit, filename,
+    &settings_current.nemoide_master_file,
+    UI_MENU_ITEM_MEDIA_IDE_NEMOIDE_MASTER_EJECT,
+    &settings_current.nemoide_slave_file,
+    UI_MENU_ITEM_MEDIA_IDE_NEMOIDE_SLAVE_EJECT );
+  nemoide_reset(0);
+  return r;
+}
+
+int
+nemoide_commit( libspectrum_ide_unit unit )
+{
+  int error;
+
+  error = libspectrum_ide_commit( nemoide_idechn, unit );
+
+  return error;
+}
+
+int
+nemoide_eject( libspectrum_ide_unit unit )
+{
+  int r;
+  r = ide_master_slave_eject(
+    nemoide_idechn, unit,
+    &settings_current.nemoide_master_file,
+    UI_MENU_ITEM_MEDIA_IDE_NEMOIDE_MASTER_EJECT,
+    &settings_current.nemoide_slave_file,
+    UI_MENU_ITEM_MEDIA_IDE_NEMOIDE_SLAVE_EJECT );
+  nemoide_reset(0);
+  return r;
+}
+
+/* Port read/writes */
+
+static libspectrum_byte
+nemoide_read( libspectrum_word port, libspectrum_byte *attached )
+{
+  libspectrum_ide_register idereg;
+  libspectrum_byte r;
+  
+  if (nemo_reset)
+    return 0xFF;
+  if (port & 0x01)
+    r = nemo_latch;
+  else {
+    /* We really pull a 16bit word at a time and latch the one byte */
+    idereg = (port & 0xFF) >> 5;
+    r = libspectrum_ide_read( nemoide_idechn, idereg );
+    if (idereg == 0)
+      nemo_latch = libspectrum_ide_read(nemoide_idechn, 0);
+  }
+  return r;
+}  
+
+static libspectrum_byte
+nemoide_read_status( libspectrum_word port GCC_UNUSED, libspectrum_byte *attached )
+{
+  if (nemo_reset)
+    return 0xFF;
+  /* Strictly speaking the side effects differ but this is close enough */
+  return libspectrum_ide_read( nemoide_idechn, LIBSPECTRUM_IDE_REGISTER_COMMAND_STATUS);
+}
+
+static void
+nemoide_write( libspectrum_word port, libspectrum_byte data )
+{
+  libspectrum_ide_register idereg;
+
+  if (nemo_reset)
+    return;
+  if (port & 1) {
+    nemo_latch = data;
+    return;
+  }
+  idereg = (port & 0xFF) >> 5;  
+  libspectrum_ide_write( nemoide_idechn, idereg, data );
+  if (idereg == 0)
+    libspectrum_ide_write( nemoide_idechn, 0, nemo_latch);
+}
+
+static void
+nemoide_write_ctrl( libspectrum_word port GCC_UNUSED, libspectrum_byte data GCC_UNUSED)
+{
+  /* Standard ATA control register. We honour SRST. No need to handle nIEN */
+  nemo_reset = data & 2;
+  if (nemo_reset)
+      nemoide_reset(0);
+}
+
+static void
+nemoide_snapshot_enabled( libspectrum_snap *snap )
+{
+#if 0
+  if( libspectrum_snap_nemoide_active( snap ) )
+    settings_current.nemoide_active = 1;
+#endif    
+}
+
+static void
+nemoide_to_snapshot( libspectrum_snap *snap )
+{
+#if 0
+  if( !settings_current.nemoide_active ) return;
+
+  libspectrum_snap_set_nemoide_active( snap, 1 );
+#endif  
+}
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/ide/nemoide.h fuse-emulator-fuse/peripherals/ide/nemoide.h
--- fuse-emulator-fuse-base/peripherals/ide/nemoide.h	1970-01-01 01:00:00.000000000 +0100
+++ fuse-emulator-fuse/peripherals/ide/nemoide.h	2019-03-03 19:49:24.381182670 +0000
@@ -0,0 +1,47 @@
+/*
+   NEMOIDE Pentagon IDE interface emulation
+   (C) 2019 Alan Cox <alan@llywncelyn.cymru>
+
+   The NEMO IDE interface is a NEMO/ZXBUS interface for the Pentagon and
+   similar systems. The ZX Evolution version behaves a little differently but
+   as FUSE can't (yet?) emulate a ZX Evolution we don't worry about it.
+
+   Based upon the simple 8bit driver
+
+   Copyright (c) 2003-2017 Garry Lancaster, Philip Kendall, Fredrick Meunier
+   Copyright (c) 2015 Stuart Brady
+   Copyright (c) 2016 Sergio Baldoví
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License along
+   with this program; if not, write to the Free Software Foundation, Inc.,
+   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+   Author contact information:
+
+   E-mail: Alan Cox <alan@llwyncelyn.cymru>
+
+*/
+
+
+#ifndef FUSE_NEMOIDE_H
+#define FUSE_NEMOIDE_H
+
+#include <libspectrum.h>
+
+void nemoide_register_startup( void );
+void nemoide_reset( int hard_reset );
+int nemoide_insert( const char *filename, libspectrum_ide_unit unit );
+int nemoide_commit( libspectrum_ide_unit unit );
+int nemoide_eject( libspectrum_ide_unit unit );
+
+#endif                 /* #ifndef FUSE_NEMOIDE_H */
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/ide/simpleide.c fuse-emulator-fuse/peripherals/ide/simpleide.c
--- fuse-emulator-fuse-base/peripherals/ide/simpleide.c	2019-03-04 13:35:11.251573182 +0000
+++ fuse-emulator-fuse/peripherals/ide/simpleide.c	2019-03-03 23:45:27.634209933 +0000
@@ -50,6 +50,7 @@
 static const periph_t simpleide_periph = {
   /* .option = */ &settings_current.simpleide_active,
   /* .ports = */ simpleide_ports,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 1,
   /* .activate = */ NULL,
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/ide/zxatasp.c fuse-emulator-fuse/peripherals/ide/zxatasp.c
--- fuse-emulator-fuse-base/peripherals/ide/zxatasp.c	2019-03-04 13:35:11.251573182 +0000
+++ fuse-emulator-fuse/peripherals/ide/zxatasp.c	2019-03-03 23:45:27.635209949 +0000
@@ -96,6 +96,7 @@
 static const periph_t zxatasp_periph = {
   /* .option = */ &settings_current.zxatasp_active,
   /* .ports = */ zxatasp_ports,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 1,
   /* .activate = */ zxatasp_activate,
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/ide/zxcf.c fuse-emulator-fuse/peripherals/ide/zxcf.c
--- fuse-emulator-fuse-base/peripherals/ide/zxcf.c	2019-03-04 13:35:11.252573199 +0000
+++ fuse-emulator-fuse/peripherals/ide/zxcf.c	2019-03-03 23:45:27.635209949 +0000
@@ -72,6 +72,7 @@
 static const periph_t zxcf_periph = {
   /* .option = */ &settings_current.zxcf_active,
   /* .ports = */ zxcf_ports,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 1,
   /* .activate = */ zxcf_activate,
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/ide/zxmmc.c fuse-emulator-fuse/peripherals/ide/zxmmc.c
--- fuse-emulator-fuse-base/peripherals/ide/zxmmc.c	2019-03-04 13:35:11.252573199 +0000
+++ fuse-emulator-fuse/peripherals/ide/zxmmc.c	2019-03-03 23:45:27.635209949 +0000
@@ -54,6 +54,7 @@
 static const periph_t zxmmc_periph = {
   /* .option = */ &settings_current.zxmmc_enabled,
   /* .ports = */ zxmmc_ports,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 1,
   /* .activate = */ NULL,
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/if1.c fuse-emulator-fuse/peripherals/if1.c
--- fuse-emulator-fuse-base/peripherals/if1.c	2019-03-04 13:35:11.252573199 +0000
+++ fuse-emulator-fuse/peripherals/if1.c	2019-03-03 23:45:27.636209965 +0000
@@ -227,6 +227,7 @@
 static const periph_t if1_periph = {
   /* .option = */ &settings_current.interface1,
   /* .ports = */ if1_ports,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 1,
   /* .activate = */ NULL,
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/if2.c fuse-emulator-fuse/peripherals/if2.c
--- fuse-emulator-fuse-base/peripherals/if2.c	2019-03-04 13:35:11.253573215 +0000
+++ fuse-emulator-fuse/peripherals/if2.c	2019-03-03 23:45:27.636209965 +0000
@@ -66,6 +66,7 @@
 static const periph_t if2_periph = {
   /* .option = */ &settings_current.interface2,
   /* .ports = */ NULL,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 0,
   /* .activate = */ NULL,
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/joystick.c fuse-emulator-fuse/peripherals/joystick.c
--- fuse-emulator-fuse-base/peripherals/joystick.c	2019-03-04 13:35:11.253573215 +0000
+++ fuse-emulator-fuse/peripherals/joystick.c	2019-03-03 23:45:27.636209965 +0000
@@ -105,6 +105,7 @@
 static const periph_t kempston_strict_periph = {
   /* .option = */ &settings_current.joy_kempston,
   /* .ports = */ kempston_strict_decoding,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 0,
   /* .activate = */ NULL,
 };
@@ -117,6 +118,7 @@
 static const periph_t kempston_loose_periph = {
   /* .option = */ &settings_current.joy_kempston,
   /* .ports = */ kempston_loose_decoding,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 0,
   /* .activate = */ NULL,
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/kempmouse.c fuse-emulator-fuse/peripherals/kempmouse.c
--- fuse-emulator-fuse-base/peripherals/kempmouse.c	2019-03-04 13:35:11.253573215 +0000
+++ fuse-emulator-fuse/peripherals/kempmouse.c	2019-03-03 23:45:27.637209981 +0000
@@ -74,6 +74,7 @@
 static const periph_t kempmouse_periph = {
   /* .option = */ &settings_current.kempston_mouse,
   /* .ports = */ kempmouse_ports,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 1,
   /* .activate = */ NULL,
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/Makefile.am fuse-emulator-fuse/peripherals/Makefile.am
--- fuse-emulator-fuse-base/peripherals/Makefile.am	2019-03-04 13:35:11.245573085 +0000
+++ fuse-emulator-fuse/peripherals/Makefile.am	2019-03-03 19:40:56.685047646 +0000
@@ -54,6 +54,7 @@
                 peripherals/ide/divide.c \
                 peripherals/ide/divmmc.c \
                 peripherals/ide/divxxx.c \
+                peripherals/ide/nemoide.c \
                 peripherals/ide/ide.c \
                 peripherals/ide/simpleide.c \
                 peripherals/ide/zxatasp.c \
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/melodik.c fuse-emulator-fuse/peripherals/melodik.c
--- fuse-emulator-fuse-base/peripherals/melodik.c	2019-03-04 13:35:11.253573215 +0000
+++ fuse-emulator-fuse/peripherals/melodik.c	2019-03-03 23:45:27.637209981 +0000
@@ -57,6 +57,7 @@
 static const periph_t melodik_periph = {
   /* .option = */ &settings_current.melodik,
   /* .ports = */ melodik_ports,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 1,
   /* .activate = */ NULL,
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/multiface.c fuse-emulator-fuse/peripherals/multiface.c
--- fuse-emulator-fuse-base/peripherals/multiface.c	2019-03-04 13:35:11.253573215 +0000
+++ fuse-emulator-fuse/peripherals/multiface.c	2019-03-03 23:45:27.637209981 +0000
@@ -161,6 +161,7 @@
 static const periph_t multiface_periph_1 = {
   &settings_current.multiface1,
   multiface_ports_1,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   1,
   NULL
 };
@@ -168,6 +169,7 @@
 static const periph_t multiface_periph_128 = {
   &settings_current.multiface128,
   multiface_ports_128,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   1,
   NULL
 };
@@ -175,6 +177,7 @@
 static const periph_t multiface_periph_3 = {
   &settings_current.multiface3,
   multiface_ports_3,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   1,
   NULL
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/printer.c fuse-emulator-fuse/peripherals/printer.c
--- fuse-emulator-fuse-base/peripherals/printer.c	2019-03-04 13:35:11.255573247 +0000
+++ fuse-emulator-fuse/peripherals/printer.c	2019-03-03 23:45:27.638209997 +0000
@@ -95,6 +95,7 @@
 static const periph_t printer_zxp_periph = {
   /* .option = */ &settings_current.zxprinter,
   /* .ports = */ printer_zxp_ports,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 0,
   /* .activate = */ NULL,
 };
@@ -107,6 +108,7 @@
 static const periph_t printer_zxp_periph_full_decode = {
   /* .option = */ &settings_current.zxprinter,
   /* .ports = */ printer_zxp_ports_full_decode,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 0,
   /* .activate = */ NULL,
 };
@@ -119,6 +121,7 @@
 static const periph_t printer_parallel_periph = {
   /* .option = */ &settings_current.printer,
   /* .ports = */ printer_parallel_ports,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 0,
   /* .activate = */ NULL,
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/scld.c fuse-emulator-fuse/peripherals/scld.c
--- fuse-emulator-fuse-base/peripherals/scld.c	2019-03-04 13:35:11.255573247 +0000
+++ fuse-emulator-fuse/peripherals/scld.c	2019-03-03 23:45:27.638209997 +0000
@@ -77,6 +77,7 @@
 static const periph_t scld_periph = {
   /* .option = */ NULL,
   /* .ports = */ scld_ports,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 0,
   /* .activate = */ NULL,
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/speccyboot.c fuse-emulator-fuse/peripherals/speccyboot.c
--- fuse-emulator-fuse-base/peripherals/speccyboot.c	2019-03-04 13:35:11.255573247 +0000
+++ fuse-emulator-fuse/peripherals/speccyboot.c	2019-03-03 23:45:27.638209997 +0000
@@ -92,6 +92,7 @@
 static const periph_t speccyboot_periph = {
   /* .option = */ &settings_current.speccyboot,
   /* .ports = */ speccyboot_ports,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 1,
   /* .activate = */ NULL,
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/specdrum.c fuse-emulator-fuse/peripherals/specdrum.c
--- fuse-emulator-fuse-base/peripherals/specdrum.c	2019-03-04 13:35:11.255573247 +0000
+++ fuse-emulator-fuse/peripherals/specdrum.c	2019-03-03 23:45:27.638209997 +0000
@@ -61,6 +61,7 @@
 static const periph_t specdrum_periph = {
   /* .option = */ &settings_current.specdrum,
   /* .ports = */ specdrum_ports,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 1,
   /* .activate = */ NULL,
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/spectranet.c fuse-emulator-fuse/peripherals/spectranet.c
--- fuse-emulator-fuse-base/peripherals/spectranet.c	2019-03-04 13:35:11.255573247 +0000
+++ fuse-emulator-fuse/peripherals/spectranet.c	2019-03-03 23:45:27.638209997 +0000
@@ -435,6 +435,7 @@
 static const periph_t spectranet_periph = {
   /* .option = */ &settings_current.spectranet,
   /* .ports = */ spectranet_ports,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 1,
   /* .activate = */ spectranet_activate,
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/ula.c fuse-emulator-fuse/peripherals/ula.c
--- fuse-emulator-fuse-base/peripherals/ula.c	2019-03-04 13:35:11.256573264 +0000
+++ fuse-emulator-fuse/peripherals/ula.c	2019-03-03 23:45:27.639210012 +0000
@@ -77,6 +77,7 @@
 static const periph_t ula_periph = {
   /* .option = */ NULL,
   /* .ports = */ ula_ports,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 0,
   /* .activate = */ NULL,
 };
@@ -89,6 +90,7 @@
 static const periph_t ula_periph_full_decode = {
   /* .option = */ NULL,
   /* .ports = */ ula_ports_full_decode,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 0,
   /* .activate = */ NULL,
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/peripherals/usource.c fuse-emulator-fuse/peripherals/usource.c
--- fuse-emulator-fuse-base/peripherals/usource.c	2019-03-04 13:35:11.256573264 +0000
+++ fuse-emulator-fuse/peripherals/usource.c	2019-03-03 23:45:27.639210012 +0000
@@ -78,6 +78,7 @@
 static const periph_t usource_periph = {
   /* .option = */ &settings_current.usource,
   /* .ports = */ usource_ports,
+  /* .bus = */ PERIPH_BUS_SYSTEM,
   /* .hard_reset = */ 1,
   /* .activate = */ NULL,
 };
diff -u --new-file --recursive fuse-emulator-fuse-base/periph.h fuse-emulator-fuse/periph.h
--- fuse-emulator-fuse-base/periph.h	2019-03-04 13:35:11.245573085 +0000
+++ fuse-emulator-fuse/periph.h	2019-03-03 23:45:27.630209869 +0000
@@ -62,6 +62,7 @@
   PERIPH_TYPE_MULTIFACE_1,    /* Multiface 1 */
   PERIPH_TYPE_MULTIFACE_128,  /* Multiface 128 */
   PERIPH_TYPE_MULTIFACE_3,    /* Multiface 3 */
+  PERIPH_TYPE_NEMOIDE,        /* NemoIDE interface */
   PERIPH_TYPE_OPUS,           /* Opus disk interface */
   PERIPH_TYPE_PARALLEL_PRINTER, /* +2A/+3 parallel printer */
   PERIPH_TYPE_PENTAGON1024_MEMORY, /* Pentagon 1024-style memory paging */
@@ -94,6 +95,12 @@
   PERIPH_PRESENT_ALWAYS,	/* Always present */
 } periph_present;
 
+/* For indicating the bus of a peripheral */
+typedef enum periph_bus {
+  PERIPH_BUS_SYSTEM = 0,	/* Normal decode applies */
+  PERIPH_BUS_ZXBUS,		/* ZX/Nemo bus decode applies */
+} periph_bus;
+
 typedef libspectrum_byte (*periph_port_read_function)( libspectrum_word port,
 						       libspectrum_byte *attached );
 typedef void (*periph_port_write_function)( libspectrum_word port,
@@ -120,6 +127,8 @@
   int *option;
   /* The list of ports this peripheral responds to */
   const periph_port_t *ports;
+  /* What bus type is this attached with */
+  periph_bus bus;
   /* Hard reset required when added/removed */
   int hard_reset;
   /* Function to be called when the peripheral is activated */
diff -u --new-file --recursive fuse-emulator-fuse-base/settings.dat fuse-emulator-fuse/settings.dat
--- fuse-emulator-fuse-base/settings.dat	2019-03-04 13:35:11.262573362 +0000
+++ fuse-emulator-fuse/settings.dat	2019-03-03 19:44:33.431520669 +0000
@@ -193,6 +193,9 @@
 divmmc_file, string, NULL,, divmmc-file
 zxmmc_enabled, boolean, 0,, zxmmc
 zxmmc_file, string, NULL,, zxmmc-file
+nemoide_active, boolean, 0,, nemoide
+nemoide_master_file, string, NULL,, nemoide-masterfile
+nemoide_slave_file, string, NULL,, nemoide-slavefile
 
 printer_graphics_filename, string, "printout.pbm",, graphicsfile
 printer_text_filename, string, "printout.txt",, textfile
diff -u --new-file --recursive fuse-emulator-fuse-base/ui/options.dat fuse-emulator-fuse/ui/options.dat
--- fuse-emulator-fuse-base/ui/options.dat	2019-03-04 13:35:11.272573524 +0000
+++ fuse-emulator-fuse/ui/options.dat	2019-03-03 20:05:14.805374727 +0000
@@ -65,6 +65,7 @@
 peripherals_disk
 Disk Peripheral Options
 Checkbox, Simple (8)-bit IDE, simpleide_active, INPUT_KEY_8
+Checkbox, NemoIDE, nemoide_active, INPUT_KEY_n
 Checkbox, (Z)XATASP interface, zxatasp_active, INPUT_KEY_z
 Checkbox, ZXATASP up(l)oad, zxatasp_upload, INPUT_KEY_l
 Checkbox, Z(X)ATASP write protect, zxatasp_wp, INPUT_KEY_x
diff -u --new-file --recursive fuse-emulator-fuse-base/ui/ui.h fuse-emulator-fuse/ui/ui.h
--- fuse-emulator-fuse-base/ui/ui.h	2019-03-04 13:35:11.275573573 +0000
+++ fuse-emulator-fuse/ui/ui.h	2019-03-03 19:51:22.415073971 +0000
@@ -238,6 +238,9 @@
   UI_MENU_ITEM_MEDIA_IDE_DIVMMC_EJECT,
   UI_MENU_ITEM_MEDIA_IDE_ZXMMC,
   UI_MENU_ITEM_MEDIA_IDE_ZXMMC_EJECT,
+  UI_MENU_ITEM_MEDIA_IDE_NEMOIDE,
+  UI_MENU_ITEM_MEDIA_IDE_NEMOIDE_MASTER_EJECT,
+  UI_MENU_ITEM_MEDIA_IDE_NEMOIDE_SLAVE_EJECT,
   UI_MENU_ITEM_RECORDING,
   UI_MENU_ITEM_RECORDING_ROLLBACK,
   UI_MENU_ITEM_AY_LOGGING,
diff -u --new-file --recursive fuse-emulator-fuse-base/ui.c fuse-emulator-fuse/ui.c
--- fuse-emulator-fuse-base/ui.c	2019-03-04 13:35:11.266573427 +0000
+++ fuse-emulator-fuse/ui.c	2019-03-04 00:16:57.681304519 +0000
@@ -645,6 +645,16 @@
     "/Media/IDE/ZXMMC/Commit",
     "/Media/IDE/ZXMMC/Eject", 0 },
 
+  { UI_MENU_ITEM_MEDIA_IDE_NEMOIDE, "/Media/IDE/NemoIDE" },
+
+  { UI_MENU_ITEM_MEDIA_IDE_NEMOIDE_MASTER_EJECT,
+    "/Media/IDE/NemoIDE/Master/Commit",
+    "/Media/IDE/NemoIDE/Master/Eject", 0 },
+
+  { UI_MENU_ITEM_MEDIA_IDE_NEMOIDE_SLAVE_EJECT,
+    "/Media/IDE/NemoIDE/Slave/Commit",
+    "/Media/IDE/NemoIDE/Slave/Eject", 0 },
+
   { UI_MENU_ITEM_RECORDING,
     "/File/Recording/Stop", 
     "/File/Recording/Record...", 1,
