summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2018-10-12 13:41:08 -0400
committer AJR <ajrhacker@users.noreply.github.com>2018-10-12 13:41:08 -0400
commit97857b116d6f975c0f2ec2626415ba874cbd98ef (patch)
tree570ced391fd935e9e31f680df4a4fafbde2ad1eb
parent42bf538a8ba8248113f71f18063f126ff72d2b9b (diff)
altos2.cpp, d400.cpp: Add CRT9007; remove MCFG_ macros (nw)
-rw-r--r--src/mame/drivers/altos2.cpp67
-rw-r--r--src/mame/drivers/d400.cpp34
2 files changed, 67 insertions, 34 deletions
diff --git a/src/mame/drivers/altos2.cpp b/src/mame/drivers/altos2.cpp
index b9ba88922af..410dff740a9 100644
--- a/src/mame/drivers/altos2.cpp
+++ b/src/mame/drivers/altos2.cpp
@@ -21,7 +21,8 @@ Keyboard: P8035L CPU, undumped 2716 labelled "358_2758", XTAL marked "4608-300-1
#include "machine/z80dart.h"
#include "machine/clock.h"
#include "machine/x2212.h"
-//#include "video/crt9007.h"
+//#include "video/crt9006.h"
+#include "video/crt9007.h"
//#include "video/crt9021.h"
#include "screen.h"
@@ -32,6 +33,7 @@ public:
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_novram(*this, "novram")
+ , m_vpac(*this, "vpac")
, m_p_chargen(*this, "chargen")
, m_p_videoram(*this, "videoram")
{ }
@@ -39,6 +41,8 @@ public:
void altos2(machine_config &config);
private:
+ DECLARE_READ8_MEMBER(vpac_r);
+ DECLARE_WRITE8_MEMBER(vpac_w);
DECLARE_WRITE8_MEMBER(video_mode_w);
u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
@@ -49,6 +53,7 @@ private:
required_device<z80_device> m_maincpu;
required_device<x2210_device> m_novram;
+ required_device<crt9007_device> m_vpac;
required_region_ptr<u8> m_p_chargen;
required_shared_ptr<u8> m_p_videoram;
};
@@ -59,10 +64,31 @@ void altos2_state::machine_reset()
m_novram->recall(CLEAR_LINE);
}
+READ8_MEMBER(altos2_state::vpac_r)
+{
+ return m_vpac->read(space, offset >> 1);
+}
+
+WRITE8_MEMBER(altos2_state::vpac_w)
+{
+ m_vpac->write(space, offset >> 1, data);
+}
+
WRITE8_MEMBER(altos2_state::video_mode_w)
{
- // D5 = 1 for 132-column mode (6-pixel char width)
- // D5 = 0 for 80-column mode (10-pixel char width)
+ if (BIT(data, 5))
+ {
+ // D5 = 1 for 132-column mode
+ m_vpac->set_unscaled_clock(40_MHz_XTAL / 12);
+ m_vpac->set_character_width(6);
+ }
+ else
+ {
+ // D5 = 0 for 80-column mode
+ m_vpac->set_unscaled_clock(40_MHz_XTAL / 20);
+ m_vpac->set_character_width(10);
+ }
+
logerror("Writing %02X to mode register at %s\n", data, machine().describe_context());
}
@@ -86,10 +112,10 @@ void altos2_state::io_map(address_map &map)
map(0x08, 0x0b).rw("ctc", FUNC(z80ctc_device::read), FUNC(z80ctc_device::write));
map(0x0c, 0x0c).w(FUNC(altos2_state::video_mode_w));
map(0x40, 0x7f).rw(m_novram, FUNC(x2210_device::read), FUNC(x2210_device::write));
- //AM_RANGE(0x80, 0xff) AM_DEVREADWRITE_MOD("vpac", crt9007_device, read, write, rshift<1>)
+ map(0x80, 0xff).rw(FUNC(altos2_state::vpac_r), FUNC(altos2_state::vpac_w));
}
-static INPUT_PORTS_START( altos2 )
+static INPUT_PORTS_START(altos2)
INPUT_PORTS_END
static const z80_daisy_config daisy_chain[] =
@@ -100,19 +126,19 @@ static const z80_daisy_config daisy_chain[] =
{ nullptr }
};
-MACHINE_CONFIG_START(altos2_state::altos2)
- /* basic machine hardware */
- Z80(config, m_maincpu, XTAL(4'000'000)); // unknown clock
+void altos2_state::altos2(machine_config &config)
+{
+ Z80(config, m_maincpu, 8_MHz_XTAL / 2);
m_maincpu->set_addrmap(AS_PROGRAM, &altos2_state::mem_map);
m_maincpu->set_addrmap(AS_IO, &altos2_state::io_map);
m_maincpu->set_daisy_config(daisy_chain);
- clock_device &ctc_clock(CLOCK(config, "ctc_clock", 4915200)); // ctc & dart connections are guesswork
+ clock_device &ctc_clock(CLOCK(config, "ctc_clock", 4.9152_MHz_XTAL / 2)); // ctc & dart connections are guesswork
ctc_clock.signal_handler().set("ctc", FUNC(z80ctc_device::trg0));
ctc_clock.signal_handler().append("ctc", FUNC(z80ctc_device::trg1));
ctc_clock.signal_handler().append("ctc", FUNC(z80ctc_device::trg2));
- z80ctc_device &ctc(Z80CTC(config, "ctc", 4_MHz_XTAL));
+ z80ctc_device &ctc(Z80CTC(config, "ctc", 8_MHz_XTAL / 2));
ctc.intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
ctc.zc_callback<0>().set("dart1", FUNC(z80dart_device::txca_w));
ctc.zc_callback<0>().append("dart1", FUNC(z80dart_device::rxca_w));
@@ -120,23 +146,24 @@ MACHINE_CONFIG_START(altos2_state::altos2)
ctc.zc_callback<2>().set("dart2", FUNC(z80dart_device::rxca_w));
ctc.zc_callback<2>().append("dart2", FUNC(z80dart_device::txca_w));
- z80dart_device &dart1(Z80DART(config, "dart1", 4_MHz_XTAL));
+ z80dart_device &dart1(Z80DART(config, "dart1", 8_MHz_XTAL / 2));
dart1.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
- z80dart_device &dart2(Z80DART(config, "dart2", 4_MHz_XTAL)); // channel B not used for communications
+ z80dart_device &dart2(Z80DART(config, "dart2", 8_MHz_XTAL / 2)); // channel B not used for communications
dart2.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
dart2.out_dtrb_callback().set(m_novram, FUNC(x2210_device::store)).invert(); // FIXME: no inverter should be needed
- X2210(config, m_novram, 0);
+ X2210(config, m_novram);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(40'000'000) / 2, 960, 0, 800, 347, 0, 325)
- MCFG_SCREEN_UPDATE_DRIVER(altos2_state, screen_update)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(40_MHz_XTAL / 2, 960, 0, 800, 347, 0, 325);
+ screen.set_screen_update(FUNC(altos2_state::screen_update));
- //MCFG_DEVICE_ADD("vpac", CRT9007, VPAC_CLOCK)
- //MCFG_CRT9007_INT_CALLBACK(WRITELINE("ctc", z80ctc_device, trg3))
- //MCFG_VIDEO_SET_SCREEN("screen")
-MACHINE_CONFIG_END
+ CRT9007(config, m_vpac, 40_MHz_XTAL / 20);
+ m_vpac->set_screen("screen");
+ m_vpac->set_character_width(10);
+ m_vpac->int_callback().set("ctc", FUNC(z80ctc_device::trg3));
+}
ROM_START( altos2 )
ROM_REGION( 0x4000, "roms", 0 )
diff --git a/src/mame/drivers/d400.cpp b/src/mame/drivers/d400.cpp
index be5aed24c18..6d65cf9f191 100644
--- a/src/mame/drivers/d400.cpp
+++ b/src/mame/drivers/d400.cpp
@@ -10,7 +10,7 @@ Skeleton driver for Data General Dasher 400 series terminals.
#include "cpu/m6809/m6809.h"
#include "machine/mc68681.h"
#include "machine/x2212.h"
-//#include "video/crt9007.h"
+#include "video/crt9007.h"
#include "screen.h"
class d400_state : public driver_device
@@ -62,7 +62,7 @@ READ8_MEMBER(d400_state::novram_store_r)
void d400_state::mem_map(address_map &map)
{
map(0x0000, 0x3fff).ram();
- //AM_RANGE(0x4000, 0x403f) AM_DEVREADWRITE("vpac", crt9007_device, read, write)
+ map(0x4000, 0x403f).rw("vpac", FUNC(crt9007_device::read), FUNC(crt9007_device::write));
map(0x4800, 0x48ff).ram();
map(0x5000, 0x50ff).ram();
map(0x6000, 0x6fff).ram();
@@ -74,23 +74,29 @@ void d400_state::mem_map(address_map &map)
map(0x8000, 0xffff).rom().region("maincpu", 0);
}
-static INPUT_PORTS_START( d461 )
+static INPUT_PORTS_START(d461)
INPUT_PORTS_END
-MACHINE_CONFIG_START(d400_state::d461)
- MCFG_DEVICE_ADD("maincpu", MC6809E, 4'000'000) // HD68B09EP
- MCFG_DEVICE_PROGRAM_MAP(mem_map)
+void d400_state::d461(machine_config &config)
+{
+ MC6809E(config, m_maincpu, 59.292_MHz_XTAL / 30); // HD68B09EP (clock not verified)
+ m_maincpu->set_addrmap(AS_PROGRAM, &d400_state::mem_map);
+
+ X2210(config, "novram");
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(XTAL(59'292'000) / 3, 1080, 0, 810, 305, 0, 300) // yes, 81 columns
- //MCFG_SCREEN_RAW_PARAMS(XTAL(59'292'000) / 2, 1620, 0, 1215, 305, 0, 300) // for 135-column mode
- MCFG_SCREEN_UPDATE_DRIVER(d400_state, screen_update)
+ scn2681_device &duart(SCN2681(config, "duart", 3.6864_MHz_XTAL));
+ duart.irq_cb().set_inputline(m_maincpu, M6809_FIRQ_LINE);
- MCFG_DEVICE_ADD("novram", X2210, 0)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(59.292_MHz_XTAL / 3, 1080, 0, 810, 305, 0, 300); // yes, 81 columns
+ //screen.set_raw(59.292_MHz_XTAL / 2, 1620, 0, 1215, 305, 0, 300); // for 135-column mode
+ screen.set_screen_update(FUNC(d400_state::screen_update));
- MCFG_DEVICE_ADD("duart", SCN2681, XTAL(3'686'400))
- MCFG_MC68681_IRQ_CALLBACK(INPUTLINE("maincpu", M6809_FIRQ_LINE))
-MACHINE_CONFIG_END
+ crt9007_device &vpac(CRT9007(config, "vpac", 59.292_MHz_XTAL / 30));
+ vpac.set_screen("screen");
+ vpac.set_character_width(10); // 9 in 135-column mode
+ vpac.int_callback().set_inputline(m_maincpu, M6809_IRQ_LINE);
+}