summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/vip.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/vip.cpp')
-rw-r--r--src/mame/drivers/vip.cpp89
1 files changed, 37 insertions, 52 deletions
diff --git a/src/mame/drivers/vip.cpp b/src/mame/drivers/vip.cpp
index 6544d79cbf0..408843aba00 100644
--- a/src/mame/drivers/vip.cpp
+++ b/src/mame/drivers/vip.cpp
@@ -263,7 +263,7 @@ void vip_state::update_interrupts()
// read -
//-------------------------------------------------
-READ8_MEMBER( vip_state::read )
+READ8_MEMBER(vip_state::read)
{
int cs = BIT(offset, 15) || m_8000;
int cdef = !((offset >= 0xc00) && (offset < 0x1000));
@@ -288,7 +288,7 @@ READ8_MEMBER( vip_state::read )
// write -
//-------------------------------------------------
-WRITE8_MEMBER( vip_state::write )
+WRITE8_MEMBER(vip_state::write)
{
int cs = BIT(offset, 15) || m_8000;
int cdef = !((offset >= 0xc00) && (offset < 0x1000));
@@ -307,7 +307,7 @@ WRITE8_MEMBER( vip_state::write )
// io_r -
//-------------------------------------------------
-READ8_MEMBER( vip_state::io_r )
+READ8_MEMBER(vip_state::io_r)
{
uint8_t data = m_exp->io_r(space, offset);
@@ -336,7 +336,7 @@ READ8_MEMBER( vip_state::io_r )
// io_w -
//-------------------------------------------------
-WRITE8_MEMBER( vip_state::io_w )
+WRITE8_MEMBER(vip_state::io_w)
{
m_exp->io_w(space, offset, data);
@@ -399,7 +399,7 @@ void vip_state::vip_io(address_map &map)
// INPUT_PORTS( vip )
//-------------------------------------------------
-INPUT_CHANGED_MEMBER( vip_state::reset_w )
+INPUT_CHANGED_MEMBER(vip_state::reset_w )
{
m_exp->run_w(newval);
@@ -409,7 +409,7 @@ INPUT_CHANGED_MEMBER( vip_state::reset_w )
}
}
-INPUT_CHANGED_MEMBER( vip_state::beeper_w )
+INPUT_CHANGED_MEMBER(vip_state::beeper_w )
{
m_beeper->set_output_gain(0, newval ? 0.80 : 0);
}
@@ -452,34 +452,34 @@ INPUT_PORTS_END
// COSMAC_INTERFACE( cosmac_intf )
//-------------------------------------------------
-READ_LINE_MEMBER( vip_state::clear_r )
+READ_LINE_MEMBER(vip_state::clear_r )
{
return BIT(m_run->read(), 0);
}
-READ_LINE_MEMBER( vip_state::ef1_r )
+READ_LINE_MEMBER(vip_state::ef1_r )
{
return m_vdc_ef1 || m_exp->ef1_r();
}
-READ_LINE_MEMBER( vip_state::ef2_r )
+READ_LINE_MEMBER(vip_state::ef2_r )
{
m_leds[LED_TAPE] = m_cassette->input() > 0 ? 1 : 0;
return (m_cassette->input() < 0) ? ASSERT_LINE : CLEAR_LINE;
}
-READ_LINE_MEMBER( vip_state::ef3_r )
+READ_LINE_MEMBER(vip_state::ef3_r )
{
return !BIT(m_keypad->read(), m_keylatch) || m_byteio_ef3 || m_exp_ef3;
}
-READ_LINE_MEMBER( vip_state::ef4_r )
+READ_LINE_MEMBER(vip_state::ef4_r )
{
return m_byteio_ef4 || m_exp_ef4;
}
-WRITE_LINE_MEMBER( vip_state::q_w )
+WRITE_LINE_MEMBER(vip_state::q_w )
{
// sound output
m_beeper->write(machine().dummy_space(), NODE_01, state);
@@ -494,43 +494,26 @@ WRITE_LINE_MEMBER( vip_state::q_w )
m_exp->q_w(state);
}
-READ8_MEMBER( vip_state::dma_r )
-{
- return m_exp->dma_r(space, offset);
-}
-
-WRITE8_MEMBER( vip_state::dma_w )
-{
- m_vdc->dma_w(space, offset, data);
-
- m_exp->dma_w(space, offset, data);
-}
-
-WRITE8_MEMBER( vip_state::sc_w )
-{
- m_exp->sc_w(data);
-}
-
//-------------------------------------------------
// CDP1861_INTERFACE( vdc_intf )
//-------------------------------------------------
-WRITE_LINE_MEMBER( vip_state::vdc_int_w )
+WRITE_LINE_MEMBER(vip_state::vdc_int_w )
{
m_vdc_int = state;
update_interrupts();
}
-WRITE_LINE_MEMBER( vip_state::vdc_dma_out_w )
+WRITE_LINE_MEMBER(vip_state::vdc_dma_out_w )
{
m_vdc_dma_out = state;
update_interrupts();
}
-WRITE_LINE_MEMBER( vip_state::vdc_ef1_w )
+WRITE_LINE_MEMBER(vip_state::vdc_ef1_w )
{
m_vdc_ef1 = state;
}
@@ -567,7 +550,7 @@ DISCRETE_SOUND_END
// VIP_BYTEIO_PORT_INTERFACE( byteio_intf )
//-------------------------------------------------
-WRITE_LINE_MEMBER( vip_state::byteio_inst_w )
+WRITE_LINE_MEMBER(vip_state::byteio_inst_w)
{
if (!state)
{
@@ -580,21 +563,21 @@ WRITE_LINE_MEMBER( vip_state::byteio_inst_w )
// VIP_EXPANSION_INTERFACE( expansion_intf )
//-------------------------------------------------
-WRITE_LINE_MEMBER( vip_state::exp_int_w )
+WRITE_LINE_MEMBER(vip_state::exp_int_w)
{
m_exp_int = state;
update_interrupts();
}
-WRITE_LINE_MEMBER( vip_state::exp_dma_out_w )
+WRITE_LINE_MEMBER(vip_state::exp_dma_out_w)
{
m_exp_dma_out = state;
update_interrupts();
}
-WRITE_LINE_MEMBER( vip_state::exp_dma_in_w )
+WRITE_LINE_MEMBER(vip_state::exp_dma_in_w)
{
m_exp_dma_in = state;
@@ -716,26 +699,28 @@ QUICKLOAD_LOAD_MEMBER( vip_state, vip )
MACHINE_CONFIG_START(vip_state::vip)
// basic machine hardware
- MCFG_DEVICE_ADD(CDP1802_TAG, CDP1802, XTAL(3'521'280)/2)
- MCFG_DEVICE_PROGRAM_MAP(vip_mem)
- MCFG_DEVICE_IO_MAP(vip_io)
- MCFG_COSMAC_WAIT_CALLBACK(CONSTANT(1))
- MCFG_COSMAC_CLEAR_CALLBACK(READLINE(*this, vip_state, clear_r))
- MCFG_COSMAC_EF1_CALLBACK(READLINE(*this, vip_state, ef1_r))
- MCFG_COSMAC_EF2_CALLBACK(READLINE(*this, vip_state, ef2_r))
- MCFG_COSMAC_EF3_CALLBACK(READLINE(*this, vip_state, ef3_r))
- MCFG_COSMAC_EF4_CALLBACK(READLINE(*this, vip_state, ef4_r))
- MCFG_COSMAC_Q_CALLBACK(WRITELINE(*this, vip_state, q_w))
- MCFG_COSMAC_DMAR_CALLBACK(READ8(*this, vip_state, dma_r))
- MCFG_COSMAC_DMAW_CALLBACK(WRITE8(*this, vip_state, dma_w))
- MCFG_COSMAC_SC_CALLBACK(WRITE8(*this, vip_state, sc_w))
+ CDP1802(config, m_maincpu, 3.52128_MHz_XTAL / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &vip_state::vip_mem);
+ m_maincpu->set_addrmap(AS_IO, &vip_state::vip_io);
+ m_maincpu->wait_cb().set_constant(1);
+ m_maincpu->clear_cb().set(FUNC(vip_state::clear_r));
+ m_maincpu->ef1_cb().set(FUNC(vip_state::ef1_r));
+ m_maincpu->ef2_cb().set(FUNC(vip_state::ef2_r));
+ m_maincpu->ef3_cb().set(FUNC(vip_state::ef3_r));
+ m_maincpu->ef4_cb().set(FUNC(vip_state::ef4_r));
+ m_maincpu->q_cb().set(FUNC(vip_state::q_w));
+ m_maincpu->dma_rd_cb().set(m_exp, FUNC(vip_expansion_slot_device::dma_r));
+ m_maincpu->dma_wr_cb().set(m_vdc, FUNC(cdp1861_device::dma_w));
+ m_maincpu->dma_wr_cb().append(m_exp, FUNC(vip_expansion_slot_device::dma_w));
+ m_maincpu->sc_cb().set(m_exp, FUNC(vip_expansion_slot_device::sc_w));
+ m_maincpu->tpb_cb().set(m_exp, FUNC(vip_expansion_slot_device::tpb_w));
// video hardware
- MCFG_DEVICE_ADD(CDP1861_TAG, CDP1861, XTAL(3'521'280)/2)
+ MCFG_DEVICE_ADD(CDP1861_TAG, CDP1861, 3.52128_MHz_XTAL / 2)
MCFG_CDP1861_IRQ_CALLBACK(WRITELINE(*this, vip_state, vdc_int_w))
MCFG_CDP1861_DMA_OUT_CALLBACK(WRITELINE(*this, vip_state, vdc_dma_out_w))
MCFG_CDP1861_EFX_CALLBACK(WRITELINE(*this, vip_state, vdc_ef1_w))
- MCFG_CDP1861_SCREEN_ADD(CDP1861_TAG, SCREEN_TAG, XTAL(3'521'280)/2)
+ MCFG_CDP1861_SCREEN_ADD(CDP1861_TAG, SCREEN_TAG, 3.52128_MHz_XTAL / 2)
MCFG_SCREEN_UPDATE_DRIVER(vip_state, screen_update)
// sound hardware
@@ -745,7 +730,7 @@ MACHINE_CONFIG_START(vip_state::vip)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
MCFG_VIP_BYTEIO_PORT_ADD(VIP_BYTEIO_PORT_TAG, vip_byteio_cards, nullptr, WRITELINE(*this, vip_state, byteio_inst_w))
- MCFG_VIP_EXPANSION_SLOT_ADD(VIP_EXPANSION_SLOT_TAG, XTAL(3'521'280)/2, vip_expansion_cards, nullptr)
+ MCFG_VIP_EXPANSION_SLOT_ADD(VIP_EXPANSION_SLOT_TAG, 3.52128_MHz_XTAL / 2, vip_expansion_cards, nullptr)
MCFG_VIP_EXPANSION_SLOT_INT_CALLBACK(WRITELINE(*this, vip_state, exp_int_w))
MCFG_VIP_EXPANSION_SLOT_DMA_OUT_CALLBACK(WRITELINE(*this, vip_state, exp_dma_out_w))
MCFG_VIP_EXPANSION_SLOT_DMA_IN_CALLBACK(WRITELINE(*this, vip_state, exp_dma_in_w))