summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Curt Coder <curtcoder@mail.com>2013-05-19 20:50:40 +0000
committer Curt Coder <curtcoder@mail.com>2013-05-19 20:50:40 +0000
commit53c85ca223ec6417c6ca98bc0339be8b39ecfd89 (patch)
treeb1b1a4e6e133758856b5b5cf733c1e95d18c9afa
parent4c402730472e71a19bbe4f3598cb132eb04f48c6 (diff)
(MESS) horizon: WIP. (nw)
-rw-r--r--.gitattributes4
-rw-r--r--src/mess/drivers/horizon.c276
-rw-r--r--src/mess/drivers/mpz80.c2
-rw-r--r--src/mess/drivers/xor100.c2
-rw-r--r--src/mess/machine/s100.c17
-rw-r--r--src/mess/machine/s100.h21
-rw-r--r--src/mess/machine/s100_nsmdsa.c121
-rw-r--r--src/mess/machine/s100_nsmdsa.h59
-rw-r--r--src/mess/machine/s100_nsmdsad.c123
-rw-r--r--src/mess/machine/s100_nsmdsad.h60
-rw-r--r--src/mess/mess.lst3
-rw-r--r--src/mess/mess.mak7
12 files changed, 597 insertions, 98 deletions
diff --git a/.gitattributes b/.gitattributes
index d78633d0bad..11e743b8e7c 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -7645,6 +7645,10 @@ src/mess/machine/s100_djdma.c svneol=native#text/plain
src/mess/machine/s100_djdma.h svneol=native#text/plain
src/mess/machine/s100_mm65k16s.c svneol=native#text/plain
src/mess/machine/s100_mm65k16s.h svneol=native#text/plain
+src/mess/machine/s100_nsmdsa.c svneol=native#text/plain
+src/mess/machine/s100_nsmdsa.h svneol=native#text/plain
+src/mess/machine/s100_nsmdsad.c svneol=native#text/plain
+src/mess/machine/s100_nsmdsad.h svneol=native#text/plain
src/mess/machine/s100_wunderbus.c svneol=native#text/plain
src/mess/machine/s100_wunderbus.h svneol=native#text/plain
src/mess/machine/s1410.c svneol=native#text/plain
diff --git a/src/mess/drivers/horizon.c b/src/mess/drivers/horizon.c
index 0b558db5ce9..6bbac39f8b7 100644
--- a/src/mess/drivers/horizon.c
+++ b/src/mess/drivers/horizon.c
@@ -8,119 +8,273 @@
succesfully loaded. The memory range EA00-EB40 appears to be
used by devices, particularly the FDC.
+ http://www.hartetechnologies.com/manuals/Northstar/
+
****************************************************************************/
+/*
+
+ TODO:
+
+ - connect to S-100 bus
+ - USARTs
+ - parallel I/O
+ - motherboard ports
+ - RTC
+ - RAM boards
+ - floppy boards
+ - floating point board
+ - SOROC IQ 120 CRT terminal
+ - NEC 5530-2 SPINWRITER printer
+ - Anadex DP-8000 printer
+
+*/
+
#include "emu.h"
#include "cpu/z80/z80.h"
-#include "machine/terminal.h"
+#include "machine/i8251.h"
+#include "machine/serial.h"
+#include "machine/s100.h"
+#include "machine/s100_nsmdsa.h"
+#include "machine/s100_nsmdsad.h"
+#define Z80_TAG "z80"
+#define I8251_L_TAG "3a"
+#define I8251_R_TAG "4a"
+#define RS232_A_TAG "rs232a"
+#define RS232_B_TAG "rs232b"
class horizon_state : public driver_device
{
public:
horizon_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_terminal(*this, TERMINAL_TAG)
+ m_maincpu(*this, Z80_TAG),
+ m_usart_l(*this, I8251_L_TAG),
+ m_usart_r(*this, I8251_L_TAG)
{ }
required_device<cpu_device> m_maincpu;
- required_device<generic_terminal_device> m_terminal;
- DECLARE_WRITE8_MEMBER( kbd_put );
- //UINT8 m_term_data;
- virtual void machine_reset();
- DECLARE_MACHINE_RESET(horizon_sd);
+ required_device<i8251_device> m_usart_l;
+ required_device<i8251_device> m_usart_r;
};
-static ADDRESS_MAP_START(horizon_mem, AS_PROGRAM, 8, horizon_state)
- ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x0000, 0xe7ff) AM_RAM
- AM_RANGE(0xe800, 0xe8ff) AM_ROM
- AM_RANGE(0xec00, 0xffff) AM_RAM
-ADDRESS_MAP_END
-static ADDRESS_MAP_START(horizon_io, AS_IO, 8, horizon_state)
- ADDRESS_MAP_UNMAP_HIGH
- ADDRESS_MAP_GLOBAL_MASK(0xff)
-ADDRESS_MAP_END
+//**************************************************************************
+// ADDRESS MAPS
+//**************************************************************************
+
+//-------------------------------------------------
+// ADDRESS_MAP( horizon_mem )
+//-------------------------------------------------
-static ADDRESS_MAP_START(horizon_sd_mem, AS_PROGRAM, 8, horizon_state)
- ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x0000, 0xe8ff) AM_RAM
- AM_RANGE(0xe900, 0xe9ff) AM_ROM
- AM_RANGE(0xec00, 0xffff) AM_RAM
+static ADDRESS_MAP_START( horizon_mem, AS_PROGRAM, 8, horizon_state )
ADDRESS_MAP_END
-static ADDRESS_MAP_START(horizon_sd_io, AS_IO, 8, horizon_state)
- ADDRESS_MAP_UNMAP_HIGH
- ADDRESS_MAP_GLOBAL_MASK(0xff)
+
+//-------------------------------------------------
+// ADDRESS_MAP( horizon_io )
+//-------------------------------------------------
+
+static ADDRESS_MAP_START( horizon_io, AS_IO, 8, horizon_state )
ADDRESS_MAP_END
-/* Input ports */
+
+
+//**************************************************************************
+// INPUT PORTS
+//**************************************************************************
+
+//-------------------------------------------------
+// INPUT_PORTS( sage2 )
+//-------------------------------------------------
+
static INPUT_PORTS_START( horizon )
INPUT_PORTS_END
-void horizon_state::machine_reset()
+
+//**************************************************************************
+// DEVICE CONFIGURATION
+//**************************************************************************
+
+//-------------------------------------------------
+// i8251_interface usart_l_intf
+//-------------------------------------------------
+
+static const i8251_interface usart_l_intf =
{
- m_maincpu->set_state_int(Z80_PC, 0xe800);
-}
+ DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, rx),
+ DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, tx),
+ DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, dsr_r),
+ DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, dtr_w),
+ DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, rts_w),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
+};
+
+
+//-------------------------------------------------
+// i8251_interface usart_r_intf
+//-------------------------------------------------
+
+static const i8251_interface usart_r_intf =
+{
+ DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, rx),
+ DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, tx),
+ DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, dsr_r),
+ DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, dtr_w),
+ DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, rts_w),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
+};
-MACHINE_RESET_MEMBER(horizon_state,horizon_sd)
+
+//-------------------------------------------------
+// rs232_port_interface rs232a_intf
+//-------------------------------------------------
+
+static DEVICE_INPUT_DEFAULTS_START( terminal )
+ DEVICE_INPUT_DEFAULTS( "TERM_FRAME", 0x0f, 0x06 ) // 9600
+ DEVICE_INPUT_DEFAULTS( "TERM_FRAME", 0x30, 0x00 ) // 8N1
+DEVICE_INPUT_DEFAULTS_END
+
+static const rs232_port_interface rs232a_intf =
{
- m_maincpu->set_state_int(Z80_PC, 0xe900);
-}
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
+};
+
+
+//-------------------------------------------------
+// rs232_port_interface rs232b_intf
+//-------------------------------------------------
-WRITE8_MEMBER( horizon_state::kbd_put )
+static const rs232_port_interface rs232b_intf =
{
-}
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
+};
+
+
+//-------------------------------------------------
+// S100_INTERFACE( s100_intf )
+//-------------------------------------------------
-static GENERIC_TERMINAL_INTERFACE( terminal_intf )
+static SLOT_INTERFACE_START( horizon_s100_cards )
+ SLOT_INTERFACE("mdsa", S100_MDS_A)
+ SLOT_INTERFACE("mdsad", S100_MDS_AD)
+ //SLOT_INTERFACE("hram", S100_HRAM)
+ //SLOT_INTERFACE("ram32a", S100_RAM32A)
+ //SLOT_INTERFACE("ram16a", S100_RAM16A)
+ //SLOT_INTERFACE("fpb", S100_FPB)
+SLOT_INTERFACE_END
+
+static S100_INTERFACE( s100_intf )
{
- DEVCB_DRIVER_MEMBER(horizon_state, kbd_put)
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_CPU_INPUT_LINE(Z80_TAG, Z80_INPUT_LINE_WAIT),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
};
+
+
+//**************************************************************************
+// MACHINE DRIVERS
+//**************************************************************************
+
+//-------------------------------------------------
+// MACHINE_CONFIG( horizon )
+//-------------------------------------------------
+
static MACHINE_CONFIG_START( horizon, horizon_state )
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu",Z80, XTAL_4MHz)
+ // basic machine hardware
+ MCFG_CPU_ADD(Z80_TAG, Z80, XTAL_4MHz)
MCFG_CPU_PROGRAM_MAP(horizon_mem)
MCFG_CPU_IO_MAP(horizon_io)
+ // devices
+ MCFG_I8251_ADD(I8251_L_TAG, usart_l_intf)
+ MCFG_I8251_ADD(I8251_R_TAG, usart_r_intf)
+ MCFG_RS232_PORT_ADD(RS232_A_TAG, rs232a_intf, default_rs232_devices, "serial_terminal", terminal)
+ MCFG_RS232_PORT_ADD(RS232_B_TAG, rs232b_intf, default_rs232_devices, NULL, NULL)
- /* video hardware */
- MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf)
+ // S-100
+ MCFG_S100_BUS_ADD(s100_intf)
+ //MCFG_S100_SLOT_ADD("s100_1", horizon_s100_cards, NULL, NULL) // CPU
+ MCFG_S100_SLOT_ADD("s100_2", horizon_s100_cards, NULL, NULL) // RAM
+ MCFG_S100_SLOT_ADD("s100_3", horizon_s100_cards, "mdsad", NULL) // MDS
+ MCFG_S100_SLOT_ADD("s100_4", horizon_s100_cards, NULL, NULL) // FPB
+ MCFG_S100_SLOT_ADD("s100_5", horizon_s100_cards, NULL, NULL)
+ MCFG_S100_SLOT_ADD("s100_6", horizon_s100_cards, NULL, NULL)
+ MCFG_S100_SLOT_ADD("s100_7", horizon_s100_cards, NULL, NULL)
+ MCFG_S100_SLOT_ADD("s100_8", horizon_s100_cards, NULL, NULL)
+ MCFG_S100_SLOT_ADD("s100_9", horizon_s100_cards, NULL, NULL)
+ MCFG_S100_SLOT_ADD("s100_10", horizon_s100_cards, NULL, NULL)
+ MCFG_S100_SLOT_ADD("s100_11", horizon_s100_cards, NULL, NULL)
+ MCFG_S100_SLOT_ADD("s100_12", horizon_s100_cards, NULL, NULL)
// software list
MCFG_SOFTWARE_LIST_ADD("flop_list", "horizon")
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( horizsd, horizon )
- MCFG_CPU_MODIFY( "maincpu" )
- MCFG_CPU_PROGRAM_MAP( horizon_sd_mem)
- MCFG_CPU_IO_MAP(horizon_sd_io)
- MCFG_MACHINE_RESET_OVERRIDE(horizon_state,horizon_sd)
-MACHINE_CONFIG_END
-/* ROM definition */
-ROM_START( horizdd )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "horizon.bin", 0xe800, 0x0100, CRC(7aafa134) SHA1(bf1552c4818f30473798af4f54e65e1957e0db48))
-ROM_END
+//**************************************************************************
+// ROMS
+//**************************************************************************
+
+//-------------------------------------------------
+// ROM( horizon )
+//-------------------------------------------------
-ROM_START( horizsd )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "horizon-sd.bin", 0xe900, 0x0100, CRC(754e53e5) SHA1(875e42942d639b972252b87d86c3dc2133304967))
+ROM_START( horizon )
+ ROM_REGION( 0x400, Z80_TAG, 0 )
+ ROM_LOAD( "option.prom", 0x000, 0x400, NO_DUMP )
ROM_END
+
+//-------------------------------------------------
+// ROM( vector1 )
+//-------------------------------------------------
+
ROM_START( vector1 ) // This one have different I/O
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
+ ROM_REGION( 0x10000, Z80_TAG, ROMREGION_ERASEFF )
ROM_LOAD( "horizon.bin", 0xe800, 0x0100, CRC(7aafa134) SHA1(bf1552c4818f30473798af4f54e65e1957e0db48))
ROM_END
-/* Driver */
-/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
-COMP( 1979, horizdd, 0, 0, horizon, horizon, driver_device, 0, "NorthStar", "Horizon (DD drive)", GAME_NOT_WORKING | GAME_NO_SOUND)
-COMP( 1979, horizsd, horizdd, 0, horizsd, horizon, driver_device, 0, "NorthStar", "Horizon (SD drive)", GAME_NOT_WORKING | GAME_NO_SOUND)
-COMP( 1979, vector1, horizdd, 0, horizon, horizon, driver_device, 0, "Vector Graphic", "Vector 1+ (DD drive)", GAME_NOT_WORKING | GAME_NO_SOUND)
+
+
+//**************************************************************************
+// SYSTEM DRIVERS
+//**************************************************************************
+
+// YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS
+COMP( 1976, horizon, 0, 0, horizon, horizon, driver_device, 0, "North Star Computers", "Horizon", GAME_NOT_WORKING | GAME_NO_SOUND_HW )
+COMP( 1979, vector1, horizon, 0, horizon, horizon, driver_device, 0, "Vector Graphic", "Vector 1+ (DD drive)", GAME_NOT_WORKING | GAME_NO_SOUND_HW )
diff --git a/src/mess/drivers/mpz80.c b/src/mess/drivers/mpz80.c
index 83ea92a1c4e..8f41895912b 100644
--- a/src/mess/drivers/mpz80.c
+++ b/src/mess/drivers/mpz80.c
@@ -739,7 +739,7 @@ static MACHINE_CONFIG_START( mpz80, mpz80_state )
MCFG_CPU_IO_MAP(mpz80_io)
// S-100
- MCFG_S100_BUS_ADD(Z80_TAG, s100_intf)
+ MCFG_S100_BUS_ADD(s100_intf)
MCFG_S100_SLOT_ADD("s100_1", mpz80_s100_cards, "mm65k16s", NULL)
MCFG_S100_SLOT_ADD("s100_2", mpz80_s100_cards, "wunderbus", NULL)
MCFG_S100_SLOT_ADD("s100_3", mpz80_s100_cards, "dj2db", NULL)
diff --git a/src/mess/drivers/xor100.c b/src/mess/drivers/xor100.c
index 2f70206788f..5f163af5192 100644
--- a/src/mess/drivers/xor100.c
+++ b/src/mess/drivers/xor100.c
@@ -616,7 +616,7 @@ static MACHINE_CONFIG_START( xor100, xor100_state )
MCFG_RS232_PORT_ADD(RS232_B_TAG, rs232b_intf, default_rs232_devices, "serial_terminal", terminal)
// S-100
- MCFG_S100_BUS_ADD(Z80_TAG, s100_intf)
+ MCFG_S100_BUS_ADD(s100_intf)
MCFG_S100_SLOT_ADD("s100_1", xor100_s100_cards, NULL, NULL)
MCFG_S100_SLOT_ADD("s100_2", xor100_s100_cards, NULL, NULL)
MCFG_S100_SLOT_ADD("s100_3", xor100_s100_cards, NULL, NULL)
diff --git a/src/mess/machine/s100.c b/src/mess/machine/s100.c
index 4e1b5276f87..0a7a63c2754 100644
--- a/src/mess/machine/s100.c
+++ b/src/mess/machine/s100.c
@@ -31,12 +31,6 @@ s100_slot_device::s100_slot_device(const machine_config &mconfig, const char *ta
{
}
-void s100_slot_device::static_set_s100_slot(device_t &device, const char *tag)
-{
- s100_slot_device &s100_card = dynamic_cast<s100_slot_device &>(device);
- s100_card.m_bus_tag = tag;
-}
-
//-------------------------------------------------
// device_start - device-specific startup
@@ -44,7 +38,7 @@ void s100_slot_device::static_set_s100_slot(device_t &device, const char *tag)
void s100_slot_device::device_start()
{
- m_bus = machine().device<s100_device>(m_bus_tag);
+ m_bus = machine().device<s100_device>(S100_TAG);
device_s100_card_interface *dev = dynamic_cast<device_s100_card_interface *>(get_card_device());
if (dev) m_bus->add_s100_card(dev);
}
@@ -58,13 +52,6 @@ void s100_slot_device::device_start()
const device_type S100 = &device_creator<s100_device>;
-void s100_device::static_set_cputag(device_t &device, const char *tag)
-{
- s100_device &s100 = downcast<s100_device &>(device);
- s100.m_cputag = tag;
-}
-
-
//-------------------------------------------------
// device_config_complete - perform any
// operations now that the configuration is
@@ -126,8 +113,6 @@ s100_device::s100_device(const machine_config &mconfig, const char *tag, device_
void s100_device::device_start()
{
- m_maincpu = machine().device<cpu_device>(m_cputag);
-
// resolve callbacks
m_out_int_func.resolve(m_out_int_cb, *this);
m_out_nmi_func.resolve(m_out_nmi_cb, *this);
diff --git a/src/mess/machine/s100.h b/src/mess/machine/s100.h
index 0ef291b191b..695e2c48466 100644
--- a/src/mess/machine/s100.h
+++ b/src/mess/machine/s100.h
@@ -81,10 +81,10 @@
// INTERFACE CONFIGURATION MACROS
//**************************************************************************
-#define MCFG_S100_BUS_ADD(_cpu_tag, _config) \
+#define MCFG_S100_BUS_ADD(_config) \
MCFG_DEVICE_ADD(S100_TAG, S100, 0) \
- MCFG_DEVICE_CONFIG(_config) \
- s100_device::static_set_cputag(*device, _cpu_tag);
+ MCFG_DEVICE_CONFIG(_config)
+
#define S100_INTERFACE(_name) \
const s100_bus_interface (_name) =
@@ -92,8 +92,8 @@
#define MCFG_S100_SLOT_ADD(_tag, _slot_intf, _def_slot, _def_inp) \
MCFG_DEVICE_ADD(_tag, S100_SLOT, 0) \
- MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _def_inp, false) \
- s100_slot_device::static_set_s100_slot(*device, S100_TAG);
+ MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _def_inp, false)
+
//**************************************************************************
@@ -114,12 +114,7 @@ public:
// device-level overrides
virtual void device_start();
- // inline configuration
- static void static_set_s100_slot(device_t &device, const char *tag);
-
private:
- // configuration
- const char *m_bus_tag;
s100_device *m_bus;
};
@@ -163,8 +158,6 @@ class s100_device : public device_t,
public:
// construction/destruction
s100_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
- // inline configuration
- static void static_set_cputag(device_t &device, const char *tag);
void add_s100_card(device_s100_card_interface *card);
@@ -203,9 +196,6 @@ protected:
virtual void device_config_complete();
private:
- // internal state
- cpu_device *m_maincpu;
-
devcb_resolved_write_line m_out_int_func;
devcb_resolved_write_line m_out_nmi_func;
devcb_resolved_write_line m_out_vi0_func;
@@ -226,7 +216,6 @@ private:
devcb_resolved_write8 m_out_terminal_func;
simple_list<device_s100_card_interface> m_device_list;
- const char *m_cputag;
};
diff --git a/src/mess/machine/s100_nsmdsa.c b/src/mess/machine/s100_nsmdsa.c
new file mode 100644
index 00000000000..f6873a9f7a5
--- /dev/null
+++ b/src/mess/machine/s100_nsmdsa.c
@@ -0,0 +1,121 @@
+/**********************************************************************
+
+ North Star MICRO-DISK System MDS-A (Single Density) emulation
+
+ Copyright MESS Team.
+ Visit http://mamedev.org for licensing and usage restrictions.
+
+**********************************************************************/
+
+#include "s100_nsmdsa.h"
+
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+const device_type S100_MDS_A = &device_creator<s100_mds_a_device>;
+
+
+//-------------------------------------------------
+// ROM( mds_a )
+//-------------------------------------------------
+
+ROM_START( mds_a )
+ ROM_REGION( 0x100, "psel", 0 )
+ ROM_LOAD( "psel.7g", 0x000, 0x100, NO_DUMP ) // 74S287
+
+ ROM_REGION( 0x100, "pgm", 0 )
+ ROM_LOAD( "pgml.3f", 0x000, 0x100, NO_DUMP ) // 74S287
+ ROM_LOAD( "pgmr.3e", 0x000, 0x100, NO_DUMP ) // 74S287
+ ROM_LOAD( "horizon.bin", 0x000, 0x100, CRC(754e53e5) SHA1(875e42942d639b972252b87d86c3dc2133304967) BAD_DUMP )
+ROM_END
+
+
+//-------------------------------------------------
+// rom_region - device-specific ROM region
+//-------------------------------------------------
+
+const rom_entry *s100_mds_a_device::device_rom_region() const
+{
+ return ROM_NAME( mds_a );
+}
+
+
+//-------------------------------------------------
+// SLOT_INTERFACE( mds_a_floppies )
+//-------------------------------------------------
+
+static SLOT_INTERFACE_START( mds_a_floppies )
+ SLOT_INTERFACE( "525sd", FLOPPY_525_SD ) // Shugart SA-400
+SLOT_INTERFACE_END
+
+
+//-------------------------------------------------
+// MACHINE_CONFIG_FRAGMENT( mds_a )
+//-------------------------------------------------
+
+static MACHINE_CONFIG_FRAGMENT( mds_a )
+ MCFG_FLOPPY_DRIVE_ADD("floppy0", mds_a_floppies, "525sd", NULL, floppy_image_device::default_floppy_formats)
+ MCFG_FLOPPY_DRIVE_ADD("floppy1", mds_a_floppies, "525sd", NULL, floppy_image_device::default_floppy_formats)
+MACHINE_CONFIG_END
+
+
+//-------------------------------------------------
+// machine_config_additions - device-specific
+// machine configurations
+//-------------------------------------------------
+
+machine_config_constructor s100_mds_a_device::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( mds_a );
+}
+
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// s100_mds_a_device - constructor
+//-------------------------------------------------
+
+s100_mds_a_device::s100_mds_a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ device_t(mconfig, S100_MDS_A, "MDS-A", tag, owner, clock, "nsmdsa", __FILE__),
+ device_s100_card_interface(mconfig, *this),
+ m_floppy0(*this, "floppy0"),
+ m_floppy1(*this, "floppy1"),
+ m_psel_rom(*this, "psel"),
+ m_pgm_rom(*this, "pgm")
+{
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void s100_mds_a_device::device_start()
+{
+}
+
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void s100_mds_a_device::device_reset()
+{
+}
+
+
+//-------------------------------------------------
+// s100_smemr_r - memory read
+//-------------------------------------------------
+
+UINT8 s100_mds_a_device::s100_smemr_r(address_space &space, offs_t offset)
+{
+ return 0;
+}
diff --git a/src/mess/machine/s100_nsmdsa.h b/src/mess/machine/s100_nsmdsa.h
new file mode 100644
index 00000000000..fc9e7f79b08
--- /dev/null
+++ b/src/mess/machine/s100_nsmdsa.h
@@ -0,0 +1,59 @@
+/**********************************************************************
+
+ North Star MICRO-DISK System MDS-A (Single Density) emulation
+
+ Copyright MESS Team.
+ Visit http://mamedev.org for licensing and usage restrictions.
+
+**********************************************************************/
+
+#pragma once
+
+#ifndef __S100_MDS_A__
+#define __S100_MDS_A__
+
+#include "emu.h"
+#include "imagedev/floppy.h"
+#include "machine/s100.h"
+
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> s100_mds_a_device
+
+class s100_mds_a_device : public device_t,
+ public device_s100_card_interface
+{
+public:
+ // construction/destruction
+ s100_mds_a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // optional information overrides
+ virtual const rom_entry *device_rom_region() const;
+ virtual machine_config_constructor device_mconfig_additions() const;
+
+protected:
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+
+ // device_s100_card_interface overrides
+ virtual UINT8 s100_smemr_r(address_space &space, offs_t offset);
+
+private:
+ required_device<floppy_connector> m_floppy0;
+ required_device<floppy_connector> m_floppy1;
+ required_memory_region m_psel_rom;
+ required_memory_region m_pgm_rom;
+};
+
+
+// device type definition
+extern const device_type S100_MDS_A;
+
+
+
+#endif
diff --git a/src/mess/machine/s100_nsmdsad.c b/src/mess/machine/s100_nsmdsad.c
new file mode 100644
index 00000000000..a62b5091c0a
--- /dev/null
+++ b/src/mess/machine/s100_nsmdsad.c
@@ -0,0 +1,123 @@
+/**********************************************************************
+
+ North Star MICRO-DISK System MDS-A-D (Double Density) emulation
+
+ Copyright MESS Team.
+ Visit http://mamedev.org for licensing and usage restrictions.
+
+**********************************************************************/
+
+#include "s100_nsmdsad.h"
+
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+const device_type S100_MDS_AD = &device_creator<s100_mds_ad_device>;
+
+
+//-------------------------------------------------
+// ROM( mds_ad )
+//-------------------------------------------------
+
+ROM_START( mds_ad )
+ ROM_REGION( 0x100, "dsel", 0 )
+ ROM_LOAD( "dsel.11c", 0x000, 0x100, NO_DUMP ) // 82S129
+
+ ROM_REGION( 0x100, "dpgm", 0 )
+ ROM_LOAD( "dpgm.9d", 0x000, 0x100, CRC(7aafa134) SHA1(bf1552c4818f30473798af4f54e65e1957e0db48) )
+
+ ROM_REGION( 0x100, "dwe", 0 )
+ ROM_LOAD( "dwe.4c", 0x000, 0x100, NO_DUMP ) // 82S129
+ROM_END
+
+
+//-------------------------------------------------
+// rom_region - device-specific ROM region
+//-------------------------------------------------
+
+const rom_entry *s100_mds_ad_device::device_rom_region() const
+{
+ return ROM_NAME( mds_ad );
+}
+
+
+//-------------------------------------------------
+// SLOT_INTERFACE( mds_ad_floppies )
+//-------------------------------------------------
+
+static SLOT_INTERFACE_START( mds_ad_floppies )
+ SLOT_INTERFACE( "525dd", FLOPPY_525_DD ) // Shugart SA-400
+SLOT_INTERFACE_END
+
+
+//-------------------------------------------------
+// MACHINE_CONFIG_FRAGMENT( mds_ad )
+//-------------------------------------------------
+
+static MACHINE_CONFIG_FRAGMENT( mds_ad )
+ MCFG_FLOPPY_DRIVE_ADD("floppy0", mds_ad_floppies, "525dd", NULL, floppy_image_device::default_floppy_formats)
+ MCFG_FLOPPY_DRIVE_ADD("floppy1", mds_ad_floppies, "525dd", NULL, floppy_image_device::default_floppy_formats)
+MACHINE_CONFIG_END
+
+
+//-------------------------------------------------
+// machine_config_additions - device-specific
+// machine configurations
+//-------------------------------------------------
+
+machine_config_constructor s100_mds_ad_device::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( mds_ad );
+}
+
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// s100_mds_ad_device - constructor
+//-------------------------------------------------
+
+s100_mds_ad_device::s100_mds_ad_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ device_t(mconfig, S100_MDS_AD, "MDS-A-D", tag, owner, clock, "nsmdsad", __FILE__),
+ device_s100_card_interface(mconfig, *this),
+ m_floppy0(*this, "floppy0"),
+ m_floppy1(*this, "floppy1"),
+ m_dsel_rom(*this, "dsel"),
+ m_dpgm_rom(*this, "dpgm"),
+ m_dwe_rom(*this, "dwe")
+{
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void s100_mds_ad_device::device_start()
+{
+}
+
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void s100_mds_ad_device::device_reset()
+{
+}
+
+
+//-------------------------------------------------
+// s100_smemr_r - memory read
+//-------------------------------------------------
+
+UINT8 s100_mds_ad_device::s100_smemr_r(address_space &space, offs_t offset)
+{
+ return 0;
+}
diff --git a/src/mess/machine/s100_nsmdsad.h b/src/mess/machine/s100_nsmdsad.h
new file mode 100644
index 00000000000..8dfa900d768
--- /dev/null
+++ b/src/mess/machine/s100_nsmdsad.h
@@ -0,0 +1,60 @@
+/**********************************************************************
+
+ North Star MICRO-DISK System MDS-A-D (Double Density) emulation
+
+ Copyright MESS Team.
+ Visit http://mamedev.org for licensing and usage restrictions.
+
+**********************************************************************/
+
+#pragma once
+
+#ifndef __S100_MDS_AD__
+#define __S100_MDS_AD__
+
+#include "emu.h"
+#include "imagedev/floppy.h"
+#include "machine/s100.h"
+
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> s100_mds_ad_device
+
+class s100_mds_ad_device : public device_t,
+ public device_s100_card_interface
+{
+public:
+ // construction/destruction
+ s100_mds_ad_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // optional information overrides
+ virtual const rom_entry *device_rom_region() const;
+ virtual machine_config_constructor device_mconfig_additions() const;
+
+protected:
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+
+ // device_s100_card_interface overrides
+ virtual UINT8 s100_smemr_r(address_space &space, offs_t offset);
+
+private:
+ required_device<floppy_connector> m_floppy0;
+ required_device<floppy_connector> m_floppy1;
+ required_memory_region m_dsel_rom;
+ required_memory_region m_dpgm_rom;
+ required_memory_region m_dwe_rom;
+};
+
+
+// device type definition
+extern const device_type S100_MDS_AD;
+
+
+
+#endif
diff --git a/src/mess/mess.lst b/src/mess/mess.lst
index 5a8b235bf29..b127744eaa8 100644
--- a/src/mess/mess.lst
+++ b/src/mess/mess.lst
@@ -2012,8 +2012,7 @@ pro80
pimps
sage2
zexall // zexall z80 test suite with kevtris' preloader/serial interface at 0000-00ff
-horizdd
-horizsd
+horizon
vector1
tricep
indiana
diff --git a/src/mess/mess.mak b/src/mess/mess.mak
index c8ba08ac8a8..dd738c6554f 100644
--- a/src/mess/mess.mak
+++ b/src/mess/mess.mak
@@ -351,6 +351,7 @@ DRVLIBS += \
$(MESSOBJ)/next.a \
$(MESSOBJ)/nintendo.a \
$(MESSOBJ)/nokia.a \
+ $(MESSOBJ)/northstar.a \
$(MESSOBJ)/novag.a \
$(MESSOBJ)/olivetti.a \
$(MESSOBJ)/omnibyte.a \
@@ -1480,6 +1481,11 @@ $(MESSOBJ)/nokia.a: \
$(MESS_DRIVERS)/mikromik.o \
$(MESS_VIDEO)/mikromik.o \
+$(MESSOBJ)/northstar.a: \
+ $(MESS_DRIVERS)/horizon.o \
+ $(MESS_MACHINE)/s100_nsmdsa.o \
+ $(MESS_MACHINE)/s100_nsmdsad.o \
+
$(MESSOBJ)/novag.a: \
$(MESS_DRIVERS)/mk1.o \
$(MESS_DRIVERS)/mk2.o \
@@ -2112,7 +2118,6 @@ $(MESSOBJ)/skeleton.a: \
$(MESS_DRIVERS)/eti660.o \
$(MESS_DRIVERS)/fk1.o \
$(MESS_DRIVERS)/fidelz80.o \
- $(MESS_DRIVERS)/horizon.o \
$(MESS_DRIVERS)/hpz80unk.o \
$(MESS_DRIVERS)/ht68k.o \
$(MESS_DRIVERS)/ie15.o \