summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/v100.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/v100.cpp')
-rw-r--r--src/mame/drivers/v100.cpp84
1 files changed, 25 insertions, 59 deletions
diff --git a/src/mame/drivers/v100.cpp b/src/mame/drivers/v100.cpp
index 6a58c9d1a09..b2942051599 100644
--- a/src/mame/drivers/v100.cpp
+++ b/src/mame/drivers/v100.cpp
@@ -12,14 +12,12 @@
***********************************************************************************************************************************/
#include "emu.h"
-#include "bus/rs232/rs232.h"
#include "cpu/z80/z80.h"
#include "machine/com8116.h"
#include "machine/er1400.h"
#include "machine/i8214.h"
#include "machine/i8251.h"
#include "machine/i8255.h"
-#include "machine/input_merger.h"
#include "video/tms9927.h"
#include "screen.h"
@@ -37,7 +35,6 @@ public:
, m_usart(*this, "usart%u", 1)
, m_earom(*this, "earom")
, m_picu(*this, "picu")
- , m_modem(*this, "modem")
, m_p_chargen(*this, "chargen")
, m_videoram(*this, "videoram")
, m_key_row(*this, "ROW%u", 0)
@@ -46,7 +43,7 @@ public:
void v100(machine_config &config);
private:
- u8 status_r();
+ DECLARE_READ8_MEMBER(earom_r);
DECLARE_WRITE8_MEMBER(port30_w);
DECLARE_READ8_MEMBER(keyboard_r);
DECLARE_WRITE8_MEMBER(key_row_w);
@@ -54,7 +51,7 @@ private:
DECLARE_WRITE8_MEMBER(picu_w);
template<int N> DECLARE_WRITE_LINE_MEMBER(picu_r_w);
IRQ_CALLBACK_MEMBER(irq_ack);
- void ppi_porta_w(u8 data);
+ DECLARE_WRITE8_MEMBER(ppi_porta_w);
u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
@@ -69,18 +66,16 @@ private:
required_device_array<i8251_device, 2> m_usart;
required_device<er1400_device> m_earom;
required_device<i8214_device> m_picu;
- required_device<rs232_port_device> m_modem;
required_region_ptr<u8> m_p_chargen;
required_shared_ptr<u8> m_videoram;
optional_ioport_array<16> m_key_row;
u8 m_active_row;
- bool m_video_enable;
};
u32 v100_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
- if (m_vtac->screen_reset() || !m_video_enable)
+ if (m_vtac->screen_reset())
{
bitmap.fill(rgb_t::black(), cliprect);
return 0;
@@ -150,22 +145,17 @@ void v100_state::machine_start()
{
m_picu->inte_w(1);
m_picu->etlg_w(1);
+
+ m_usart[0]->write_cts(0);
m_usart[1]->write_cts(0);
m_active_row = 0;
- m_video_enable = false;
save_item(NAME(m_active_row));
- save_item(NAME(m_video_enable));
}
-u8 v100_state::status_r()
+READ8_MEMBER(v100_state::earom_r)
{
- u8 status = 0xc0;
- status |= m_earom->data_r();
- status |= m_modem->dcd_r() << 1;
- status |= m_modem->si_r() << 2; // SCCD (pin 12)
- status |= m_modem->ri_r() << 3;
- return status;
+ return m_earom->data_r();
}
WRITE8_MEMBER(v100_state::port30_w)
@@ -208,13 +198,11 @@ IRQ_CALLBACK_MEMBER(v100_state::irq_ack)
return (m_picu->a_r() << 1) | 0xf0;
}
-void v100_state::ppi_porta_w(u8 data)
+WRITE8_MEMBER(v100_state::ppi_porta_w)
{
m_vtac->set_clock_scale(BIT(data, 5) ? 0.5 : 1.0);
m_screen->set_clock_scale(BIT(data, 5) ? 0.5 : 1.0);
- m_video_enable = !BIT(data, 7);
-
//logerror("Writing %02X to PPI port A\n", data);
}
@@ -233,7 +221,7 @@ void v100_state::io_map(address_map &map)
map(0x12, 0x13).rw("usart1", FUNC(i8251_device::read), FUNC(i8251_device::write));
map(0x14, 0x15).rw("usart2", FUNC(i8251_device::read), FUNC(i8251_device::write));
map(0x16, 0x16).w("brg2", FUNC(com8116_device::stt_str_w));
- map(0x20, 0x20).r(FUNC(v100_state::status_r));
+ map(0x20, 0x20).r(FUNC(v100_state::earom_r));
map(0x30, 0x30).w(FUNC(v100_state::port30_w));
map(0x40, 0x40).rw(FUNC(v100_state::keyboard_r), FUNC(v100_state::key_row_w));
map(0x48, 0x48).w(FUNC(v100_state::port48_w));
@@ -355,47 +343,36 @@ static INPUT_PORTS_START( v100 )
INPUT_PORTS_END
-void v100_state::v100(machine_config &config)
-{
- Z80(config, m_maincpu, 47.736_MHz_XTAL / 20); // 2.387 MHz PCLOCK
- m_maincpu->set_addrmap(AS_PROGRAM, &v100_state::mem_map);
- m_maincpu->set_addrmap(AS_IO, &v100_state::io_map);
- m_maincpu->set_irq_acknowledge_callback(FUNC(v100_state::irq_ack));
-
- I8251(config, m_usart[0], 47.736_MHz_XTAL / 20);
- m_usart[0]->txd_handler().set(m_modem, FUNC(rs232_port_device::write_txd));
- m_usart[0]->dtr_handler().set(m_modem, FUNC(rs232_port_device::write_dtr));
- m_usart[0]->rts_handler().set(m_modem, FUNC(rs232_port_device::write_rts));
- //m_usart[0]->rxrdy_handler().set(FUNC(v100_state::picu_r_w<4>)).invert();
+MACHINE_CONFIG_START(v100_state::v100)
+ MCFG_DEVICE_ADD("maincpu", Z80, XTAL(47'736'000) / 12) // divider not verified
+ MCFG_DEVICE_PROGRAM_MAP(mem_map)
+ MCFG_DEVICE_IO_MAP(io_map)
+ MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(v100_state, irq_ack)
- input_merger_device &acts(INPUT_MERGER_ALL_HIGH(config, "acts"));
- acts.output_handler().set(m_usart[0], FUNC(i8251_device::write_cts));
+ I8251(config, m_usart[0], XTAL(47'736'000) / 12); // divider not verified
- com8116_device &brg1(COM8116_020(config, "brg1", 1.8432_MHz_XTAL));
+ com8116_device &brg1(COM8116(config, "brg1", 5068800)); // TODO: clock and divisors for this customized variant
brg1.fr_handler().set(m_usart[0], FUNC(i8251_device::write_rxc));
brg1.ft_handler().set(m_usart[0], FUNC(i8251_device::write_txc));
- I8251(config, m_usart[1], 47.736_MHz_XTAL / 20);
- m_usart[1]->txd_handler().set("aux", FUNC(rs232_port_device::write_txd));
- m_usart[1]->dtr_handler().set("aux", FUNC(rs232_port_device::write_dtr));
- //m_usart[1]->txrdy_handler().set(FUNC(v100_state::picu_r_w<2>)).invert();
+ I8251(config, m_usart[1], XTAL(47'736'000) / 12);
- com8116_device &brg2(COM8116_020(config, "brg2", 1.8432_MHz_XTAL));
+ com8116_device &brg2(COM8116(config, "brg2", 5068800));
brg2.fr_handler().set(m_usart[1], FUNC(i8251_device::write_rxc));
brg2.ft_handler().set(m_usart[1], FUNC(i8251_device::write_txc));
- SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
- //m_screen->set_raw(47.736_MHz_XTAL / 2, 102 * V100_CH_WIDTH, 0, 80 * V100_CH_WIDTH, 260, 0, 240);
- m_screen->set_raw(47.736_MHz_XTAL, 170 * V100_CH_WIDTH, 0, 132 * V100_CH_WIDTH, 312, 0, 240);
- m_screen->set_screen_update(FUNC(v100_state::screen_update));
+ MCFG_SCREEN_ADD("screen", RASTER)
+ //MCFG_SCREEN_RAW_PARAMS(XTAL(47'736'000) / 2, 102 * V100_CH_WIDTH, 0, 80 * V100_CH_WIDTH, 260, 0, 240)
+ MCFG_SCREEN_RAW_PARAMS(XTAL(47'736'000), 170 * V100_CH_WIDTH, 0, 132 * V100_CH_WIDTH, 312, 0, 240)
+ MCFG_SCREEN_UPDATE_DRIVER(v100_state, screen_update)
- CRT5037(config, m_vtac, 47.736_MHz_XTAL / V100_CH_WIDTH);
+ CRT5037(config, m_vtac, XTAL(47'736'000) / V100_CH_WIDTH);
m_vtac->set_char_width(V100_CH_WIDTH);
m_vtac->set_screen("screen");
m_vtac->hsyn_callback().set(FUNC(v100_state::picu_r_w<7>)).invert();
m_vtac->vsyn_callback().set(FUNC(v100_state::picu_r_w<6>)).invert();
- I8214(config, m_picu, 47.736_MHz_XTAL / 20);
+ I8214(config, m_picu, XTAL(47'736'000) / 12);
m_picu->int_wr_callback().set_inputline(m_maincpu, 0, ASSERT_LINE);
i8255_device &ppi(I8255(config, "ppi", 0));
@@ -405,20 +382,9 @@ void v100_state::v100(machine_config &config)
ppi.out_pb_callback().append(m_earom, FUNC(er1400_device::c1_w)).bit(4).invert();
ppi.out_pc_callback().set(m_earom, FUNC(er1400_device::data_w)).bit(6).invert();
ppi.out_pc_callback().append(m_earom, FUNC(er1400_device::clock_w)).bit(0).invert();
- ppi.out_pc_callback().append(m_modem, FUNC(rs232_port_device::write_spds)).bit(4);
- ppi.out_pc_callback().append("acts", FUNC(input_merger_device::in_w<1>)).bit(7);
ER1400(config, m_earom);
-
- RS232_PORT(config, m_modem, default_rs232_devices, "loopback"); // EIA port
- m_modem->rxd_handler().set(m_usart[0], FUNC(i8251_device::write_rxd));
- m_modem->cts_handler().set("acts", FUNC(input_merger_device::in_w<0>));
- m_modem->dcd_handler().set(m_usart[0], FUNC(i8251_device::write_dsr));
-
- rs232_port_device &aux(RS232_PORT(config, "aux", default_rs232_devices, nullptr)); // optional printer port
- aux.rxd_handler().set(m_usart[1], FUNC(i8251_device::write_rxd));
- aux.dcd_handler().set(m_usart[1], FUNC(i8251_device::write_dsr)); // printer busy
-}
+MACHINE_CONFIG_END