From 53c85ca223ec6417c6ca98bc0339be8b39ecfd89 Mon Sep 17 00:00:00 2001 From: Curt Coder Date: Sun, 19 May 2013 20:50:40 +0000 Subject: [PATCH] (MESS) horizon: WIP. (nw) --- .gitattributes | 4 + src/mess/drivers/horizon.c | 282 ++++++++++++++++++++++++-------- src/mess/drivers/mpz80.c | 2 +- src/mess/drivers/xor100.c | 2 +- src/mess/machine/s100.c | 17 +- src/mess/machine/s100.h | 21 +-- src/mess/machine/s100_nsmdsa.c | 121 ++++++++++++++ src/mess/machine/s100_nsmdsa.h | 59 +++++++ src/mess/machine/s100_nsmdsad.c | 123 ++++++++++++++ src/mess/machine/s100_nsmdsad.h | 60 +++++++ src/mess/mess.lst | 3 +- src/mess/mess.mak | 7 +- 12 files changed, 600 insertions(+), 101 deletions(-) create mode 100644 src/mess/machine/s100_nsmdsa.c create mode 100644 src/mess/machine/s100_nsmdsa.h create mode 100644 src/mess/machine/s100_nsmdsad.c create mode 100644 src/mess/machine/s100_nsmdsad.h 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 m_maincpu; - required_device m_terminal; - DECLARE_WRITE8_MEMBER( kbd_put ); - //UINT8 m_term_data; - virtual void machine_reset(); - DECLARE_MACHINE_RESET(horizon_sd); + required_device m_usart_l; + required_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 MAPS +//************************************************************************** + +//------------------------------------------------- +// ADDRESS_MAP( horizon_mem ) +//------------------------------------------------- + +static ADDRESS_MAP_START( horizon_mem, AS_PROGRAM, 8, horizon_state ) 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( horizon_io ) +//------------------------------------------------- + +static ADDRESS_MAP_START( horizon_io, AS_IO, 8, horizon_state ) ADDRESS_MAP_END -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 -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_END -/* Input ports */ +//************************************************************************** +// INPUT PORTS +//************************************************************************** + +//------------------------------------------------- +// INPUT_PORTS( sage2 ) +//------------------------------------------------- + static INPUT_PORTS_START( horizon ) INPUT_PORTS_END -void horizon_state::machine_reset() -{ - m_maincpu->set_state_int(Z80_PC, 0xe800); -} -MACHINE_RESET_MEMBER(horizon_state,horizon_sd) -{ - m_maincpu->set_state_int(Z80_PC, 0xe900); -} +//************************************************************************** +// DEVICE CONFIGURATION +//************************************************************************** -WRITE8_MEMBER( horizon_state::kbd_put ) -{ -} +//------------------------------------------------- +// i8251_interface usart_l_intf +//------------------------------------------------- -static GENERIC_TERMINAL_INTERFACE( terminal_intf ) +static const i8251_interface usart_l_intf = { - DEVCB_DRIVER_MEMBER(horizon_state, kbd_put) + 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 +}; + + +//------------------------------------------------- +// 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 = +{ + DEVCB_NULL, + DEVCB_NULL, + DEVCB_NULL, + DEVCB_NULL, + DEVCB_NULL +}; + + +//------------------------------------------------- +// rs232_port_interface rs232b_intf +//------------------------------------------------- + +static const rs232_port_interface rs232b_intf = +{ + DEVCB_NULL, + DEVCB_NULL, + DEVCB_NULL, + DEVCB_NULL, + DEVCB_NULL +}; + + +//------------------------------------------------- +// S100_INTERFACE( s100_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_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)) +//************************************************************************** +// ROMS +//************************************************************************** + +//------------------------------------------------- +// ROM( horizon ) +//------------------------------------------------- + +ROM_START( horizon ) + ROM_REGION( 0x400, Z80_TAG, 0 ) + ROM_LOAD( "option.prom", 0x000, 0x400, NO_DUMP ) ROM_END -ROM_START( horizsd ) - ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) - ROM_LOAD( "horizon-sd.bin", 0xe900, 0x0100, CRC(754e53e5) SHA1(875e42942d639b972252b87d86c3dc2133304967)) -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(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(m_bus_tag); + m_bus = machine().device(S100_TAG); device_s100_card_interface *dev = dynamic_cast(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; -void s100_device::static_set_cputag(device_t &device, const char *tag) -{ - s100_device &s100 = downcast(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(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 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; + + +//------------------------------------------------- +// 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 m_floppy0; + required_device 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; + + +//------------------------------------------------- +// 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 m_floppy0; + required_device 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 \