(MESS) dmv: added K233 and K234 expansion modules. (nw)

This commit is contained in:
Sandro Ronco 2014-09-21 08:37:12 +00:00
parent 24179c7522
commit 2bf26ae0c2
9 changed files with 332 additions and 14 deletions

2
.gitattributes vendored
View File

@ -834,6 +834,8 @@ src/emu/bus/dmv/k220.c svneol=native#text/plain
src/emu/bus/dmv/k220.h svneol=native#text/plain src/emu/bus/dmv/k220.h svneol=native#text/plain
src/emu/bus/dmv/k230.c svneol=native#text/plain src/emu/bus/dmv/k230.c svneol=native#text/plain
src/emu/bus/dmv/k230.h svneol=native#text/plain src/emu/bus/dmv/k230.h svneol=native#text/plain
src/emu/bus/dmv/k233.c svneol=native#text/plain
src/emu/bus/dmv/k233.h svneol=native#text/plain
src/emu/bus/dmv/k806.c svneol=native#text/plain src/emu/bus/dmv/k806.c svneol=native#text/plain
src/emu/bus/dmv/k806.h svneol=native#text/plain src/emu/bus/dmv/k806.h svneol=native#text/plain
src/emu/bus/dmv/ram.c svneol=native#text/plain src/emu/bus/dmv/ram.c svneol=native#text/plain

View File

@ -270,6 +270,7 @@ OBJDIRS += $(BUSOBJ)/dmv
BUSOBJS += $(BUSOBJ)/dmv/dmvbus.o BUSOBJS += $(BUSOBJ)/dmv/dmvbus.o
BUSOBJS += $(BUSOBJ)/dmv/k220.o BUSOBJS += $(BUSOBJ)/dmv/k220.o
BUSOBJS += $(BUSOBJ)/dmv/k230.o BUSOBJS += $(BUSOBJ)/dmv/k230.o
BUSOBJS += $(BUSOBJ)/dmv/k233.o
BUSOBJS += $(BUSOBJ)/dmv/k806.o BUSOBJS += $(BUSOBJ)/dmv/k806.o
BUSOBJS += $(BUSOBJ)/dmv/ram.o BUSOBJS += $(BUSOBJ)/dmv/ram.o
endif endif

View File

@ -199,7 +199,8 @@ dmvcart_slot_device::dmvcart_slot_device(const machine_config &mconfig, const ch
device_slot_interface(mconfig, *this), device_slot_interface(mconfig, *this),
m_prog_read_cb(*this), m_prog_read_cb(*this),
m_prog_write_cb(*this), m_prog_write_cb(*this),
m_out_irq_cb(*this) m_out_irq_cb(*this),
m_out_thold_cb(*this)
{ {
} }
@ -224,6 +225,7 @@ void dmvcart_slot_device::device_start()
m_prog_read_cb.resolve_safe(0); m_prog_read_cb.resolve_safe(0);
m_prog_write_cb.resolve_safe(); m_prog_write_cb.resolve_safe();
m_out_irq_cb.resolve_safe(); m_out_irq_cb.resolve_safe();
m_out_thold_cb.resolve_safe();
} }
/*------------------------------------------------- /*-------------------------------------------------
@ -310,6 +312,12 @@ void dmvcart_slot_device::hold_w(int state)
m_cart->hold_w(state); m_cart->hold_w(state);
} }
void dmvcart_slot_device::switch16_w(int state)
{
if (m_cart)
m_cart->switch16_w(state);
}
void dmvcart_slot_device::irq0_w(int state) void dmvcart_slot_device::irq0_w(int state)
{ {
if (m_cart) if (m_cart)

View File

@ -34,6 +34,7 @@ public:
// slot 7 and 7A // slot 7 and 7A
virtual bool av16bit() { return false; } virtual bool av16bit() { return false; }
virtual void hold_w(int state) { } virtual void hold_w(int state) { }
virtual void switch16_w(int state) { }
virtual void irq0_w(int state) { } virtual void irq0_w(int state) { }
virtual void irq1_w(int state) { } virtual void irq1_w(int state) { }
virtual void irq2_w(int state) { } virtual void irq2_w(int state) { }
@ -58,6 +59,7 @@ public:
template<class _Object> static devcb_base &set_prog_read_callback(device_t &device, _Object object) { return downcast<dmvcart_slot_device &>(device).m_prog_read_cb.set_callback(object); } template<class _Object> static devcb_base &set_prog_read_callback(device_t &device, _Object object) { return downcast<dmvcart_slot_device &>(device).m_prog_read_cb.set_callback(object); }
template<class _Object> static devcb_base &set_prog_write_callback(device_t &device, _Object object) { return downcast<dmvcart_slot_device &>(device).m_prog_write_cb.set_callback(object); } template<class _Object> static devcb_base &set_prog_write_callback(device_t &device, _Object object) { return downcast<dmvcart_slot_device &>(device).m_prog_write_cb.set_callback(object); }
template<class _Object> static devcb_base &set_out_irq_callback(device_t &device, _Object object) { return downcast<dmvcart_slot_device &>(device).m_out_irq_cb.set_callback(object); } template<class _Object> static devcb_base &set_out_irq_callback(device_t &device, _Object object) { return downcast<dmvcart_slot_device &>(device).m_out_irq_cb.set_callback(object); }
template<class _Object> static devcb_base &set_out_thold_callback(device_t &device, _Object object) { return downcast<dmvcart_slot_device &>(device).m_out_thold_cb.set_callback(object); }
// device-level overrides // device-level overrides
virtual void device_start(); virtual void device_start();
@ -70,6 +72,7 @@ public:
virtual void io_read(address_space &space, int ifsel, offs_t offset, UINT8 &data); virtual void io_read(address_space &space, int ifsel, offs_t offset, UINT8 &data);
virtual void io_write(address_space &space, int ifsel, offs_t offset, UINT8 data); virtual void io_write(address_space &space, int ifsel, offs_t offset, UINT8 data);
virtual void hold_w(int state); virtual void hold_w(int state);
virtual void switch16_w(int state);
virtual void irq0_w(int state); virtual void irq0_w(int state);
virtual void irq1_w(int state); virtual void irq1_w(int state);
virtual void irq2_w(int state); virtual void irq2_w(int state);
@ -84,6 +87,7 @@ public:
devcb_read8 m_prog_read_cb; devcb_read8 m_prog_read_cb;
devcb_write8 m_prog_write_cb; devcb_write8 m_prog_write_cb;
devcb_write_line m_out_irq_cb; devcb_write_line m_out_irq_cb;
devcb_write_line m_out_thold_cb;
device_dmvslot_interface* m_cart; device_dmvslot_interface* m_cart;
}; };
@ -103,4 +107,7 @@ extern const device_type DMVCART_SLOT;
#define MCFG_DMVCART_SLOT_OUT_IRQ_CB(_devcb) \ #define MCFG_DMVCART_SLOT_OUT_IRQ_CB(_devcb) \
devcb = &dmvcart_slot_device::set_out_irq_callback(*device, DEVCB_##_devcb); devcb = &dmvcart_slot_device::set_out_irq_callback(*device, DEVCB_##_devcb);
#define MCFG_DMVCART_SLOT_OUT_THOLD_CB(_devcb) \
devcb = &dmvcart_slot_device::set_out_thold_callback(*device, DEVCB_##_devcb);
#endif /* __DMV_CART_H__ */ #endif /* __DMV_CART_H__ */

View File

@ -4,6 +4,7 @@
K230 Internal 8088 module without interrupt controller K230 Internal 8088 module without interrupt controller
K231 External 8088 module without interrupt controller K231 External 8088 module without interrupt controller
K234 External 68008 module
K235 Internal 8088 module with interrupt controller K235 Internal 8088 module with interrupt controller
***************************************************************************/ ***************************************************************************/
@ -43,6 +44,11 @@ static ADDRESS_MAP_START(k230_io, AS_IO, 8, dmv_k230_device)
AM_RANGE( 0x00, 0xff ) AM_READWRITE(io_r, io_w) AM_RANGE( 0x00, 0xff ) AM_READWRITE(io_r, io_w)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START(k234_mem, AS_PROGRAM, 8, dmv_k230_device)
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE( 0x00000, 0x7ffff ) AM_READWRITE(program_r, program_w)
AM_RANGE( 0xfff00, 0xfffff ) AM_READWRITE(io_r, io_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START(k235_io, AS_IO, 8, dmv_k230_device) static ADDRESS_MAP_START(k235_io, AS_IO, 8, dmv_k230_device)
ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_UNMAP_HIGH
@ -52,13 +58,18 @@ static ADDRESS_MAP_START(k235_io, AS_IO, 8, dmv_k230_device)
ADDRESS_MAP_END ADDRESS_MAP_END
static MACHINE_CONFIG_FRAGMENT( dmv_k230 ) static MACHINE_CONFIG_FRAGMENT( dmv_k230 )
MCFG_CPU_ADD("maincpu", I8088, XTAL_24MHz / 6) MCFG_CPU_ADD("maincpu", I8088, XTAL_15MHz / 3)
MCFG_CPU_PROGRAM_MAP(k230_mem) MCFG_CPU_PROGRAM_MAP(k230_mem)
MCFG_CPU_IO_MAP(k230_io) MCFG_CPU_IO_MAP(k230_io)
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_FRAGMENT( dmv_k234 )
MCFG_CPU_ADD("maincpu", M68008, XTAL_16MHz / 2)
MCFG_CPU_PROGRAM_MAP(k234_mem)
MACHINE_CONFIG_END
static MACHINE_CONFIG_FRAGMENT( dmv_k235 ) static MACHINE_CONFIG_FRAGMENT( dmv_k235 )
MCFG_CPU_ADD("maincpu", V20, XTAL_24MHz / 6) MCFG_CPU_ADD("maincpu", V20, XTAL_15MHz / 3)
MCFG_CPU_PROGRAM_MAP(k230_mem) MCFG_CPU_PROGRAM_MAP(k230_mem)
MCFG_CPU_IO_MAP(k235_io) MCFG_CPU_IO_MAP(k235_io)
MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259", pic8259_device, inta_cb) MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259", pic8259_device, inta_cb)
@ -73,6 +84,7 @@ MACHINE_CONFIG_END
const device_type DMV_K230 = &device_creator<dmv_k230_device>; const device_type DMV_K230 = &device_creator<dmv_k230_device>;
const device_type DMV_K231 = &device_creator<dmv_k231_device>; const device_type DMV_K231 = &device_creator<dmv_k231_device>;
const device_type DMV_K234 = &device_creator<dmv_k234_device>;
const device_type DMV_K235 = &device_creator<dmv_k235_device>; const device_type DMV_K235 = &device_creator<dmv_k235_device>;
//************************************************************************** //**************************************************************************
@ -108,6 +120,15 @@ dmv_k231_device::dmv_k231_device(const machine_config &mconfig, const char *tag,
{ {
} }
//-------------------------------------------------
// dmv_k234_device - constructor
//-------------------------------------------------
dmv_k234_device::dmv_k234_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: dmv_k230_device(mconfig, DMV_K234, "K234 68008", tag, owner, clock, "dmv_k234", __FILE__)
{
}
//------------------------------------------------- //-------------------------------------------------
// dmv_k235_device - constructor // dmv_k235_device - constructor
//------------------------------------------------- //-------------------------------------------------
@ -129,12 +150,26 @@ void dmv_k230_device::device_start()
m_io = &machine().device<cpu_device>("maincpu")->space(AS_IO); m_io = &machine().device<cpu_device>("maincpu")->space(AS_IO);
} }
void dmv_k234_device::device_start()
{
dmv_k230_device::device_start();
m_io->install_readwrite_handler(0xd8, 0xdf, 0, 0, read8_delegate(FUNC(dmv_k234_device::snr_r), this), write8_delegate(FUNC(dmv_k234_device::snr_w), this), 0);
}
//------------------------------------------------- //-------------------------------------------------
// device_reset - device-specific reset // device_reset - device-specific reset
//------------------------------------------------- //-------------------------------------------------
void dmv_k230_device::device_reset() void dmv_k230_device::device_reset()
{ {
m_switch16 = 0;
m_hold = 0;
}
void dmv_k234_device::device_reset()
{
dmv_k230_device::device_reset();
m_snr = 0;
} }
//------------------------------------------------- //-------------------------------------------------
@ -147,6 +182,11 @@ machine_config_constructor dmv_k230_device::device_mconfig_additions() const
return MACHINE_CONFIG_NAME( dmv_k230 ); return MACHINE_CONFIG_NAME( dmv_k230 );
} }
machine_config_constructor dmv_k234_device::device_mconfig_additions() const
{
return MACHINE_CONFIG_NAME( dmv_k234 );
}
machine_config_constructor dmv_k235_device::device_mconfig_additions() const machine_config_constructor dmv_k235_device::device_mconfig_additions() const
{ {
return MACHINE_CONFIG_NAME( dmv_k235 ); return MACHINE_CONFIG_NAME( dmv_k235 );
@ -166,6 +206,11 @@ const rom_entry *dmv_k231_device::device_rom_region() const
return ROM_NAME( dmv_k231 ); return ROM_NAME( dmv_k231 );
} }
const rom_entry *dmv_k234_device::device_rom_region() const
{
return NULL;
}
const rom_entry *dmv_k235_device::device_rom_region() const const rom_entry *dmv_k235_device::device_rom_region() const
{ {
return ROM_NAME( dmv_k235 ); return ROM_NAME( dmv_k235 );
@ -178,7 +223,14 @@ bool dmv_k230_device::av16bit()
void dmv_k230_device::hold_w(int state) void dmv_k230_device::hold_w(int state)
{ {
m_maincpu->set_input_line(INPUT_LINE_HALT, state); m_hold = state;
m_maincpu->set_input_line(INPUT_LINE_HALT, (m_hold || !m_switch16) ? ASSERT_LINE : CLEAR_LINE);
}
void dmv_k230_device::switch16_w(int state)
{
m_switch16 = state;
m_maincpu->set_input_line(INPUT_LINE_HALT, (m_hold || !m_switch16) ? ASSERT_LINE : CLEAR_LINE);
} }
READ8_MEMBER(dmv_k230_device::rom_r) READ8_MEMBER(dmv_k230_device::rom_r)
@ -194,14 +246,49 @@ READ8_MEMBER( dmv_k230_device::io_r )
WRITE8_MEMBER( dmv_k230_device::io_w ) WRITE8_MEMBER( dmv_k230_device::io_w )
{ {
m_io->write_byte(offset, data); m_io->write_byte(offset, data);
}; }
READ8_MEMBER( dmv_k230_device::program_r ) READ8_MEMBER( dmv_k230_device::program_r )
{ {
return m_bus->m_prog_read_cb(space, offset); return m_bus->m_prog_read_cb(space, offset);
}; }
WRITE8_MEMBER( dmv_k230_device::program_w ) WRITE8_MEMBER( dmv_k230_device::program_w )
{ {
m_bus->m_prog_write_cb(space, offset, data); m_bus->m_prog_write_cb(space, offset, data);
}; }
void dmv_k234_device::hold_w(int state)
{
m_hold = state;
m_maincpu->set_input_line(INPUT_LINE_HALT, (m_hold || !m_snr) ? ASSERT_LINE : CLEAR_LINE);
}
void dmv_k234_device::switch16_w(int state)
{
if (m_switch16 != state)
{
m_snr = CLEAR_LINE;
m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
m_bus->m_out_thold_cb(CLEAR_LINE);
m_switch16 = state;
}
}
READ8_MEMBER( dmv_k234_device::snr_r )
{
m_snr = ASSERT_LINE;
m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
m_maincpu->reset();
m_bus->m_out_thold_cb(ASSERT_LINE);
return 0xff;
}
WRITE8_MEMBER( dmv_k234_device::snr_w )
{
m_snr = ASSERT_LINE;
m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
m_maincpu->reset();
m_bus->m_out_thold_cb(ASSERT_LINE);
}

View File

@ -9,6 +9,9 @@
#include "dmvbus.h" #include "dmvbus.h"
#include "cpu/i86/i86.h" #include "cpu/i86/i86.h"
// K234
#include "cpu/m68000/m68000.h"
// K235 // K235
#include "cpu/nec/nec.h" #include "cpu/nec/nec.h"
#include "machine/pic8259.h" #include "machine/pic8259.h"
@ -46,13 +49,16 @@ protected:
// dmvcart_interface overrides // dmvcart_interface overrides
virtual void hold_w(int state); virtual void hold_w(int state);
virtual void switch16_w(int state);
virtual bool av16bit(); virtual bool av16bit();
private: protected:
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_memory_region m_rom; optional_memory_region m_rom;
dmvcart_slot_device * m_bus; dmvcart_slot_device * m_bus;
address_space * m_io; address_space * m_io;
int m_switch16;
int m_hold;
}; };
@ -70,6 +76,36 @@ public:
}; };
// ======================> dmv_k234_device
class dmv_k234_device :
public dmv_k230_device
{
public:
// construction/destruction
dmv_k234_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
DECLARE_READ8_MEMBER(snr_r);
DECLARE_WRITE8_MEMBER(snr_w);
protected:
// optional information overrides
virtual const rom_entry *device_rom_region() const;
virtual machine_config_constructor device_mconfig_additions() const;
// device-level overrides
virtual void device_start();
virtual void device_reset();
// dmvcart_interface overrides
virtual void hold_w(int state);
virtual void switch16_w(int state);
private:
int m_snr;
};
// ======================> dmv_k235_device // ======================> dmv_k235_device
class dmv_k235_device : class dmv_k235_device :
@ -100,6 +136,7 @@ private:
// device type definition // device type definition
extern const device_type DMV_K230; extern const device_type DMV_K230;
extern const device_type DMV_K231; extern const device_type DMV_K231;
extern const device_type DMV_K234;
extern const device_type DMV_K235; extern const device_type DMV_K235;
#endif /* __DMV_K230_H__ */ #endif /* __DMV_K230_H__ */

89
src/emu/bus/dmv/k233.c Normal file
View File

@ -0,0 +1,89 @@
// license:BSD-3-Clause
// copyright-holders:Sandro Ronco
/***************************************************************************
K233 16K Shared RAM
***************************************************************************/
#include "emu.h"
#include "k233.h"
/***************************************************************************
IMPLEMENTATION
***************************************************************************/
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
const device_type DMV_K233 = &device_creator<dmv_k233_device>;
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
//-------------------------------------------------
// dmv_k233_device - constructor
//-------------------------------------------------
dmv_k233_device::dmv_k233_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, DMV_K233, "K233 16K Shared RAM", tag, owner, clock, "dmv_k233", __FILE__),
device_dmvslot_interface( mconfig, *this )
{
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void dmv_k233_device::device_start()
{
m_ram = machine().memory().region_alloc( "sharedram", 0x4000, 1, ENDIANNESS_LITTLE )->base();
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void dmv_k233_device::device_reset()
{
m_enabled = false;
}
void dmv_k233_device::io_write(address_space &space, int ifsel, offs_t offset, UINT8 data)
{
if (ifsel == 1)
m_enabled = !m_enabled;
}
//-------------------------------------------------
// read
//-------------------------------------------------
bool dmv_k233_device::read(offs_t offset, UINT8 &data)
{
if (m_enabled && offset >= 0xc000 && offset < 0x10000)
{
data = m_ram[offset & 0x3fff];
return true;
}
return false;
}
//-------------------------------------------------
// write
//-------------------------------------------------
bool dmv_k233_device::write(offs_t offset, UINT8 data)
{
if (m_enabled && offset >= 0xc000 && offset < 0x10000)
{
m_ram[offset & 0x3fff] = data;
return true;
}
return false;
}

44
src/emu/bus/dmv/k233.h Normal file
View File

@ -0,0 +1,44 @@
// license:BSD-3-Clause
// copyright-holders:Sandro Ronco
#pragma once
#ifndef __DMV_K233_H__
#define __DMV_K233_H__
#include "emu.h"
#include "dmvbus.h"
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
// ======================>
class dmv_k233_device :
public device_t,
public device_dmvslot_interface
{
public:
// construction/destruction
dmv_k233_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
protected:
// device-level overrides
virtual void device_start();
virtual void device_reset();
// dmvcart_interface overrides
virtual void io_write(address_space &space, int ifsel, offs_t offset, UINT8 data);
virtual bool read(offs_t offset, UINT8 &data);
virtual bool write(offs_t offset, UINT8 data);
private:
bool m_enabled;
UINT8 * m_ram;
};
// device type definition
extern const device_type DMV_K233;
#endif /* __DMV_K233_H__ */

View File

@ -24,6 +24,7 @@
#include "bus/dmv/dmvbus.h" #include "bus/dmv/dmvbus.h"
#include "bus/dmv/k220.h" #include "bus/dmv/k220.h"
#include "bus/dmv/k230.h" #include "bus/dmv/k230.h"
#include "bus/dmv/k233.h"
#include "bus/dmv/k806.h" #include "bus/dmv/k806.h"
#include "bus/dmv/ram.h" #include "bus/dmv/ram.h"
@ -100,6 +101,8 @@ public:
DECLARE_READ8_MEMBER(sys_status_r); DECLARE_READ8_MEMBER(sys_status_r);
DECLARE_WRITE8_MEMBER(tc_set_w); DECLARE_WRITE8_MEMBER(tc_set_w);
DECLARE_WRITE8_MEMBER(switch16_w); DECLARE_WRITE8_MEMBER(switch16_w);
DECLARE_READ8_MEMBER(ramsel_r);
DECLARE_READ8_MEMBER(romsel_r);
DECLARE_WRITE8_MEMBER(ramsel_w); DECLARE_WRITE8_MEMBER(ramsel_w);
DECLARE_WRITE8_MEMBER(romsel_w); DECLARE_WRITE8_MEMBER(romsel_w);
DECLARE_READ8_MEMBER(kb_mcu_port1_r); DECLARE_READ8_MEMBER(kb_mcu_port1_r);
@ -110,6 +113,8 @@ public:
DECLARE_WRITE8_MEMBER(program_w); DECLARE_WRITE8_MEMBER(program_w);
DECLARE_READ8_MEMBER(exp_program_r); DECLARE_READ8_MEMBER(exp_program_r);
DECLARE_WRITE8_MEMBER(exp_program_w); DECLARE_WRITE8_MEMBER(exp_program_w);
DECLARE_WRITE_LINE_MEMBER(thold7_w);
DECLARE_WRITE_LINE_MEMBER(busint_w);
DECLARE_FLOPPY_FORMATS( floppy_formats ); DECLARE_FLOPPY_FORMATS( floppy_formats );
UINT8 program_read(address_space &space, int cas, offs_t offset); UINT8 program_read(address_space &space, int cas, offs_t offset);
@ -133,6 +138,7 @@ public:
bool m_ramoutdis; bool m_ramoutdis;
int m_switch16; int m_switch16;
int m_thold7;
int m_dma_hrq; int m_dma_hrq;
int m_ram_bank; int m_ram_bank;
bool m_color_mode; bool m_color_mode;
@ -173,6 +179,18 @@ WRITE8_MEMBER(dmv_state::leds_w)
output_set_led_value(8-i, BIT(data, i)); output_set_led_value(8-i, BIT(data, i));
} }
READ8_MEMBER(dmv_state::ramsel_r)
{
m_ramoutdis = false;
return 0;
}
READ8_MEMBER(dmv_state::romsel_r)
{
m_ramoutdis = true;
return 0;
}
WRITE8_MEMBER(dmv_state::ramsel_w) WRITE8_MEMBER(dmv_state::ramsel_w)
{ {
m_ramoutdis = false; m_ramoutdis = false;
@ -348,6 +366,21 @@ READ8_MEMBER(dmv_state::program_r)
return program_read(space, m_ram_bank, offset); return program_read(space, m_ram_bank, offset);
} }
WRITE_LINE_MEMBER( dmv_state::thold7_w )
{
if (m_thold7 != state)
{
m_thold7 = state;
update_halt_line();
}
}
WRITE_LINE_MEMBER( dmv_state::busint_w )
{
m_slot7a->irq2_w(state);
m_slot7->irq2_w(state);
}
void dmv_state::program_write(address_space &space, int cas, offs_t offset, UINT8 data) void dmv_state::program_write(address_space &space, int cas, offs_t offset, UINT8 data)
{ {
bool tramd = false; bool tramd = false;
@ -399,8 +432,8 @@ static ADDRESS_MAP_START( dmv_io , AS_IO, 8, dmv_state)
ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0xff) ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x00) AM_WRITE(leds_w) AM_RANGE(0x00, 0x00) AM_WRITE(leds_w)
AM_RANGE(0x10, 0x10) AM_WRITE(ramsel_w) AM_RANGE(0x10, 0x10) AM_READWRITE(ramsel_r, ramsel_w)
AM_RANGE(0x11, 0x11) AM_WRITE(romsel_w) AM_RANGE(0x11, 0x11) AM_READWRITE(romsel_r, romsel_w)
AM_RANGE(0x12, 0x12) AM_WRITE(tc_set_w) AM_RANGE(0x12, 0x12) AM_WRITE(tc_set_w)
AM_RANGE(0x13, 0x13) AM_READ(sys_status_r) AM_RANGE(0x13, 0x13) AM_READ(sys_status_r)
AM_RANGE(0x14, 0x14) AM_WRITE(fdd_motor_w) AM_RANGE(0x14, 0x14) AM_WRITE(fdd_motor_w)
@ -470,6 +503,7 @@ void dmv_state::machine_reset()
m_sd_poll_state = 0; m_sd_poll_state = 0;
m_floppy_motor = 1; m_floppy_motor = 1;
m_switch16 = 0; m_switch16 = 0;
m_thold7 = 0;
m_dma_hrq = 0; m_dma_hrq = 0;
update_halt_line(); update_halt_line();
@ -477,9 +511,12 @@ void dmv_state::machine_reset()
void dmv_state::update_halt_line() void dmv_state::update_halt_line()
{ {
m_slot7->hold_w(!m_switch16 || m_dma_hrq ? ASSERT_LINE : CLEAR_LINE); m_slot7->hold_w(m_dma_hrq);
m_slot7a->hold_w(!m_switch16 || m_dma_hrq ? ASSERT_LINE : CLEAR_LINE); m_slot7->switch16_w(m_switch16);
m_maincpu->set_input_line(INPUT_LINE_HALT, m_switch16 || m_dma_hrq ? ASSERT_LINE : CLEAR_LINE); m_slot7a->hold_w(m_dma_hrq);
m_slot7a->switch16_w(m_switch16);
m_maincpu->set_input_line(INPUT_LINE_HALT, (m_thold7 || m_switch16 || m_dma_hrq) ? ASSERT_LINE : CLEAR_LINE);
} }
/* F4 Character Displayer */ /* F4 Character Displayer */
@ -568,12 +605,14 @@ static SLOT_INTERFACE_START(dmv_slot1)
SLOT_INTERFACE_END SLOT_INTERFACE_END
static SLOT_INTERFACE_START(dmv_slot2_6) static SLOT_INTERFACE_START(dmv_slot2_6)
SLOT_INTERFACE("k233", DMV_K233) // K233 16K Shared RAM
SLOT_INTERFACE("k806", DMV_K806) // K806 Mouse module SLOT_INTERFACE("k806", DMV_K806) // K806 Mouse module
SLOT_INTERFACE_END SLOT_INTERFACE_END
static SLOT_INTERFACE_START(dmv_slot7) static SLOT_INTERFACE_START(dmv_slot7)
SLOT_INTERFACE("k220", DMV_K220) // K220 Diagnostic Module SLOT_INTERFACE("k220", DMV_K220) // K220 Diagnostic Module
SLOT_INTERFACE("k231", DMV_K231) // K231 External 8088 module without interrupt controller SLOT_INTERFACE("k231", DMV_K231) // K231 External 8088 module without interrupt controller
SLOT_INTERFACE("k234", DMV_K234) // K234 External 68008 module
SLOT_INTERFACE_END SLOT_INTERFACE_END
@ -667,9 +706,13 @@ static MACHINE_CONFIG_START( dmv, dmv_state )
MCFG_DEVICE_ADD("slot7", DMVCART_SLOT, 0) MCFG_DEVICE_ADD("slot7", DMVCART_SLOT, 0)
MCFG_DEVICE_SLOT_INTERFACE(dmv_slot7, NULL, false) MCFG_DEVICE_SLOT_INTERFACE(dmv_slot7, NULL, false)
MCFG_DMVCART_SLOT_PROGRAM_READWRITE_CB(READ8(dmv_state, exp_program_r), WRITE8(dmv_state, exp_program_w)) MCFG_DMVCART_SLOT_PROGRAM_READWRITE_CB(READ8(dmv_state, exp_program_r), WRITE8(dmv_state, exp_program_w))
MCFG_DMVCART_SLOT_OUT_THOLD_CB(WRITELINE(dmv_state, thold7_w))
MCFG_DMVCART_SLOT_OUT_IRQ_CB(WRITELINE(dmv_state, busint_w))
MCFG_DEVICE_ADD("slot7a", DMVCART_SLOT, 0) MCFG_DEVICE_ADD("slot7a", DMVCART_SLOT, 0)
MCFG_DEVICE_SLOT_INTERFACE(dmv_slot7a, "k230", false) MCFG_DEVICE_SLOT_INTERFACE(dmv_slot7a, "k230", false)
MCFG_DMVCART_SLOT_PROGRAM_READWRITE_CB(READ8(dmv_state, exp_program_r), WRITE8(dmv_state, exp_program_w)) MCFG_DMVCART_SLOT_PROGRAM_READWRITE_CB(READ8(dmv_state, exp_program_r), WRITE8(dmv_state, exp_program_w))
MCFG_DMVCART_SLOT_OUT_THOLD_CB(WRITELINE(dmv_state, thold7_w))
MCFG_DMVCART_SLOT_OUT_IRQ_CB(WRITELINE(dmv_state, busint_w))
MACHINE_CONFIG_END MACHINE_CONFIG_END