summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/qvt70.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/qvt70.cpp')
-rw-r--r--src/mame/drivers/qvt70.cpp120
1 files changed, 105 insertions, 15 deletions
diff --git a/src/mame/drivers/qvt70.cpp b/src/mame/drivers/qvt70.cpp
index 1af2ab9274d..a6d8ff25cf4 100644
--- a/src/mame/drivers/qvt70.cpp
+++ b/src/mame/drivers/qvt70.cpp
@@ -1,13 +1,35 @@
// license:BSD-3-Clause
-// copyright-holders:
-/***********************************************************************************************************************************
+// copyright-holders: Dirk Best
+/****************************************************************************
-Skeleton driver for Qume QVT-70 terminal.
+ Qume QVT-70 terminal
-************************************************************************************************************************************/
+ Hardware:
+ - Z80 (Z8040008VSC)
+ - Z80 DART (Z0847006PSC)
+ - QUME 303489-01 QFP144
+ - DTC 801000-02 QFP100
+ - ROM 128k + 64k
+ - CXK5864CM-70LL (8k, next to ROMs)
+ - W242575-70LL (32k) + 5x CXK5864CM-70LL (8k)
+ - DS1231
+ - Beeper + Battery
+ - XTAL unreadable
+
+ Features:
+ - 65 hz with 16x16 characters
+ - 78 hz with 16x13 characters
+ - 64 background/foreground colors
+ - 80/132 columns
+
+****************************************************************************/
#include "emu.h"
#include "cpu/z80/z80.h"
+#include "machine/bankdev.h"
+#include "machine/z80dart.h"
+#include "bus/centronics/ctronics.h"
+#include "bus/rs232/rs232.h"
class qvt70_state : public driver_device
{
@@ -15,41 +37,109 @@ public:
qvt70_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
+ , m_bank(*this, "bank")
{ }
void qvt70(machine_config &config);
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
private:
- void mem_map(address_map &map);
required_device<cpu_device> m_maincpu;
+ required_device<address_map_bank_device> m_bank;
+
+ void mem_map(address_map &map);
+ void bank_map(address_map &map);
+ void io_map(address_map &map);
+
+ DECLARE_WRITE8_MEMBER(bankswitch_w);
};
void qvt70_state::mem_map(address_map &map)
{
- map(0x0000, 0xffff).rom().region("maincpu", 0);
+ map(0x0000, 0x7fff).m(m_bank, FUNC(address_map_bank_device::amap8));
+ map(0x8000, 0x8000).w(FUNC(qvt70_state::bankswitch_w));
+ map(0xa000, 0xbfff).ram();
+// map(0xc000, 0xffff).ram();
+}
+
+void qvt70_state::bank_map(address_map &map)
+{
+ map(0x00000, 0x07fff).rom().region("maincpu", 0x00000);
+ map(0x08000, 0x0ffff).rom().region("maincpu", 0x08000);
+ map(0x10000, 0x17fff).rom().region("maincpu", 0x10000);
+ map(0x18000, 0x1ffff).rom().region("maincpu", 0x18000);
+ map(0x20000, 0x27fff).rom().region("maincpu", 0x20000);
+ map(0x28000, 0x2ffff).rom().region("maincpu", 0x28000);
+ map(0x30000, 0x37fff).ram();
+// map(0x38000, 0x3ffff)
+}
+
+void qvt70_state::io_map(address_map &map)
+{
+ map.global_mask(0xff);
+ // 07-54
+ // 60-6f
+ map(0x80, 0x83).rw("dart", FUNC(z80dart_device::ba_cd_r), FUNC(z80dart_device::ba_cd_w));
}
static INPUT_PORTS_START( qvt70 )
INPUT_PORTS_END
+WRITE8_MEMBER(qvt70_state::bankswitch_w)
+{
+ logerror("bankswitch_w: %02x\n", data);
+
+ // 765----- unknown
+ // ---43--- bankswitching?
+ // -----21- unknown
+ // -------0 bankswitching?
+
+ // likely wrong
+ int bank = ((data >> 2) & 0x06) | BIT(data, 0);
+ logerror("bank = %02x\n", bank);
+
+ if (bank < 6)
+ m_bank->set_bank(bank);
+}
+
+void qvt70_state::machine_start()
+{
+}
+
+void qvt70_state::machine_reset()
+{
+}
+
void qvt70_state::qvt70(machine_config &config)
{
- Z80(config, m_maincpu, 2'000'000);
+ Z80(config, m_maincpu, 8'000'000);
m_maincpu->set_addrmap(AS_PROGRAM, &qvt70_state::mem_map);
-}
+ m_maincpu->set_addrmap(AS_IO, &qvt70_state::io_map);
-/**************************************************************************************************************
+ ADDRESS_MAP_BANK(config, m_bank);
+ m_bank->set_map(&qvt70_state::bank_map);
+ m_bank->set_data_width(8);
+ m_bank->set_addr_width(18);
+ m_bank->set_stride(0x8000);
-Qume QVT-70.
-Chips: Z80, Z80 DART, 5x CXK5864CM-70LL/W242575-70LL, 801000-02, 303489-01, DS1231, Button battery, Beeper
-Crystals: unreadable
+ Z80DART(config, "dart", 4'000'000);
-***************************************************************************************************************/
+ // 25-pin (dcd, rxd, txd, dtr, dsr, rts, cts and current loop)
+ RS232_PORT(config, "serial1", default_rs232_devices, nullptr);
+
+ // 9-pin (dcd, rxd, txd, dtr, dsr, rts, cts)
+ RS232_PORT(config, "serial2", default_rs232_devices, nullptr);
+
+ CENTRONICS(config, "parallel", centronics_devices, nullptr);
+}
ROM_START( qvt70 )
ROM_REGION(0x30000, "maincpu", 0)
- ROM_LOAD( "251513-04_revj.u12", 0x00000, 0x10000, CRC(3960bbd5) SHA1(9db306cef09be21ff43c081ebe11e9b46f617861) )
- ROM_LOAD( "251513-03_revj.u11", 0x10000, 0x20000, CRC(c56796fe) SHA1(afe024ff93d5e75dc18041219d61e1a22fc6d883) )
+ ROM_LOAD( "251513-03_revj.u11", 0x00000, 0x20000, CRC(c56796fe) SHA1(afe024ff93d5e75dc18041219d61e1a22fc6d883) ) // 251513-03 C/S:D1DA 95' REV.J (checksum matches)
+ ROM_LOAD( "251513-04_revj.u12", 0x20000, 0x10000, CRC(3960bbd5) SHA1(9db306cef09be21ff43c081ebe11e9b46f617861) ) // 251513-04 C/S:18D0 95' REV.J (checksum matches)
ROM_END
COMP( 1992, qvt70, 0, 0, qvt70, qvt70, qvt70_state, empty_init, "Qume", "QVT-70", MACHINE_IS_SKELETON )