From c3f47033c52e6bba254ea17a314849a0d6624a0b Mon Sep 17 00:00:00 2001 From: Dirk Best Date: Wed, 20 May 2015 15:59:45 +0200 Subject: [PATCH] Nascom: Add support for the CP/M version of the Nascom 2 --- src/mame/mess.lst | 1 + src/mess/drivers/nascom1.c | 79 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 77 insertions(+), 3 deletions(-) diff --git a/src/mame/mess.lst b/src/mame/mess.lst index 8875d44b195..ad5b74bf5c3 100644 --- a/src/mame/mess.lst +++ b/src/mame/mess.lst @@ -1583,6 +1583,7 @@ fsa1st // NASCOM Microcomputers nascom1 // 1978 Nascom 1 nascom2 // 1979 Nascom 2 +nascom2c // 1980 Nascom 2 (CP/M) // Miles Gordon Technology samcoupe // 1989 Sam Coupe diff --git a/src/mess/drivers/nascom1.c b/src/mess/drivers/nascom1.c index 06c39bfc3b9..446b54fee60 100644 --- a/src/mess/drivers/nascom1.c +++ b/src/mess/drivers/nascom1.c @@ -111,8 +111,10 @@ public: {} DECLARE_WRITE_LINE_MEMBER(ram_disable_w); + DECLARE_WRITE_LINE_MEMBER(ram_disable_cpm_w); virtual DECLARE_DRIVER_INIT(nascom); + virtual DECLARE_DRIVER_INIT(nascomc); UINT32 screen_update_nascom(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); int load_cart(device_image_interface &image, generic_slot_device *slot, int slot_id); @@ -369,6 +371,25 @@ WRITE_LINE_MEMBER( nascom2_state::ram_disable_w ) } } +DRIVER_INIT_MEMBER( nascom2_state, nascomc ) +{ + // install memory + m_maincpu->space(AS_PROGRAM).install_ram(0x0000, 0x0000 + m_ram->size() - 1, m_ram->pointer()); + + // setup nasbus + m_nasbus->set_program_space(&m_maincpu->space(AS_PROGRAM)); + m_nasbus->set_io_space(&m_maincpu->space(AS_IO)); +} + +WRITE_LINE_MEMBER( nascom2_state::ram_disable_cpm_w ) +{ + if (state) + { + // enable ram again + m_maincpu->space(AS_PROGRAM).install_ram(0x0000, 0x0000 + m_ram->size() - 1, m_ram->pointer()); + } +} + //************************************************************************** // VIDEO @@ -468,6 +489,12 @@ static ADDRESS_MAP_START( nascom2_io, AS_IO, 8, nascom2_state ) AM_RANGE(0x04, 0x07) AM_DEVREADWRITE("z80pio", z80pio_device, read, write ) ADDRESS_MAP_END +static ADDRESS_MAP_START( nascom2c_mem, AS_PROGRAM, 8, nascom2_state ) + AM_RANGE(0xf000, 0xf7ff) AM_ROM AM_REGION("maincpu", 0) + AM_RANGE(0xf800, 0xfbff) AM_RAM AM_SHARE("videoram") + AM_RANGE(0xfc00, 0xffff) AM_RAM // WRAM +ADDRESS_MAP_END + //************************************************************************** // INPUT PORTS @@ -584,6 +611,30 @@ static INPUT_PORTS_START( nascom2 ) PORT_DIPSETTING(0x0f, "F000H") INPUT_PORTS_END +static INPUT_PORTS_START( nascom2c ) + PORT_INCLUDE(nascom2) + + PORT_MODIFY("lsw1") + PORT_DIPNAME(0x0f, 0x0f, "Restart address") + PORT_DIPLOCATION("LSW1:2,3,4,5") + PORT_DIPSETTING(0x00, "0000H") + PORT_DIPSETTING(0x01, "1000H") + PORT_DIPSETTING(0x02, "2000H") + PORT_DIPSETTING(0x03, "3000H") + PORT_DIPSETTING(0x04, "4000H") + PORT_DIPSETTING(0x05, "5000H") + PORT_DIPSETTING(0x06, "6000H") + PORT_DIPSETTING(0x07, "7000H") + PORT_DIPSETTING(0x08, "8000H") + PORT_DIPSETTING(0x09, "9000H") + PORT_DIPSETTING(0x0a, "A000H") + PORT_DIPSETTING(0x0b, "B000H") + PORT_DIPSETTING(0x0c, "C000H") + PORT_DIPSETTING(0x0d, "D000H") + PORT_DIPSETTING(0x0e, "E000H") + PORT_DIPSETTING(0x0f, "F000H") +INPUT_PORTS_END + //************************************************************************** // MACHINE DRIVERS @@ -661,6 +712,18 @@ static MACHINE_CONFIG_DERIVED_CLASS( nascom2, nascom1, nascom2_state ) MCFG_NASBUS_SLOT_ADD("nasbus4", nasbus_slot_cards, NULL) MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED_CLASS( nascom2c, nascom2, nascom2_state ) + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(nascom2c_mem) + + MCFG_DEVICE_REMOVE(RAM_TAG) + MCFG_RAM_ADD(RAM_TAG) + MCFG_RAM_DEFAULT_SIZE("60K") + + MCFG_DEVICE_MODIFY(NASBUS_TAG) + MCFG_NASBUS_RAM_DISABLE_HANDLER(WRITELINE(nascom2_state, ram_disable_cpm_w)) +MACHINE_CONFIG_END + //************************************************************************** // ROM DEFINITIONS @@ -694,11 +757,21 @@ ROM_START( nascom2 ) ROM_LOAD("nasgra.chr", 0x0800, 0x0800, CRC(2bc09d32) SHA1(d384297e9b02cbcb283c020da51b3032ff62b1ae)) ROM_END +ROM_START( nascom2c ) + ROM_REGION(0x0800, "maincpu", 0) + ROM_LOAD("cpmboot.rom", 0x0000, 0x0800, CRC(44b67ffc) SHA1(60c8335f24798f8de7ad48a4cd03e56a60d87b63)) + + ROM_REGION(0x1000, "gfx1", 0) + ROM_LOAD("nascom1.chr", 0x0000, 0x0800, CRC(33e92a04) SHA1(be6e1cc80e7f95a032759f7df19a43c27ff93a52)) + ROM_LOAD("nasgra.chr", 0x0800, 0x0800, CRC(2bc09d32) SHA1(d384297e9b02cbcb283c020da51b3032ff62b1ae)) +ROM_END + //************************************************************************** // GAME DRIVERS //************************************************************************** -// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -COMP( 1977, nascom1, 0, 0, nascom1, nascom1, nascom_state, nascom, "Nascom Microcomputers", "Nascom 1", GAME_NO_SOUND_HW ) -COMP( 1979, nascom2, 0, 0, nascom2, nascom2, nascom2_state, nascom, "Nascom Microcomputers", "Nascom 2", GAME_NO_SOUND_HW ) +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ +COMP( 1977, nascom1, 0, 0, nascom1, nascom1, nascom_state, nascom, "Nascom Microcomputers", "Nascom 1", GAME_NO_SOUND_HW ) +COMP( 1979, nascom2, 0, 0, nascom2, nascom2, nascom2_state, nascom, "Nascom Microcomputers", "Nascom 2", GAME_NO_SOUND_HW ) +COMP( 1980, nascom2c, nascom2, 0, nascom2c, nascom2c, nascom2_state, nascomc, "Nascom Microcomputers", "Nascom 2 (CP/M)", GAME_NO_SOUND_HW )