summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2021-05-03 16:46:25 -0400
committer AJR <ajrhacker@users.noreply.github.com>2021-05-03 16:46:25 -0400
commit813a40341ee94a5674e7f32b351385e517d86cef (patch)
tree565e096f8c73f2eda15680ec6079c34d71d07483 /src/mame/drivers
parent4dd1524eeabbd691caccff68504396c6f5813433 (diff)
merit3xx.cpp: Preliminary mappings for ma6710
Diffstat (limited to 'src/mame/drivers')
-rw-r--r--src/mame/drivers/merit3xx.cpp53
1 files changed, 47 insertions, 6 deletions
diff --git a/src/mame/drivers/merit3xx.cpp b/src/mame/drivers/merit3xx.cpp
index ea07de51660..9ea90182430 100644
--- a/src/mame/drivers/merit3xx.cpp
+++ b/src/mame/drivers/merit3xx.cpp
@@ -495,27 +495,52 @@ class merit3xx_state : public driver_device
{
public:
merit3xx_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu")
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_rombank(*this, "rombank")
{ }
void merit3xx(machine_config &config);
+protected:
+ virtual void machine_start() override;
+
private:
- required_device<cpu_device> m_maincpu;
+ MC6845_UPDATE_ROW(update_row);
- uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
void main_map(address_map &map);
+ void io_map(address_map &map);
+
+ required_device<cpu_device> m_maincpu;
+ required_memory_bank m_rombank;
};
+void merit3xx_state::machine_start()
+{
+ memory_region *rom = memregion("maincpu");
+ m_rombank->configure_entries(0, rom->bytes() / 0x8000, rom->base(), 0x8000);
+ m_rombank->set_entry(1);
+}
-uint32_t merit3xx_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+MC6845_UPDATE_ROW(merit3xx_state::update_row)
{
- return 0;
}
void merit3xx_state::main_map(address_map &map)
{
+ map(0x0000, 0x7fff).bankr("rombank");
+ map(0x8000, 0x9fff).ram().share("nvram");
+ map(0xc000, 0xdfff).ram().share("charram");
+ map(0xe000, 0xffff).ram().share("attrram");
+}
+
+void merit3xx_state::io_map(address_map &map)
+{
+ map.global_mask(0xff);
+ map(0x00, 0x03).rw("ppi0", FUNC(i8255_device::read), FUNC(i8255_device::write));
+ map(0x04, 0x07).rw("ppi1", FUNC(i8255_device::read), FUNC(i8255_device::write));
+ map(0x40, 0x40).rw("crtc", FUNC(hd6845s_device::status_r), FUNC(hd6845s_device::address_w));
+ map(0x41, 0x41).rw("crtc", FUNC(hd6845s_device::register_r), FUNC(hd6845s_device::register_w));
}
static INPUT_PORTS_START( merit3xx )
@@ -526,6 +551,22 @@ void merit3xx_state::merit3xx(machine_config &config)
{
Z80(config, m_maincpu, 10_MHz_XTAL / 2);
m_maincpu->set_addrmap(AS_PROGRAM, &merit3xx_state::main_map);
+ m_maincpu->set_addrmap(AS_IO, &merit3xx_state::io_map);
+
+ //NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
+
+ I8255(config, "ppi0");
+ I8255(config, "ppi1");
+
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(10_MHz_XTAL, 616, 0, 512, 270, 0, 256);
+ screen.set_screen_update("crtc", FUNC(hd6845s_device::screen_update));
+
+ hd6845s_device &crtc(HD6845S(config, "crtc", 10_MHz_XTAL / 8));
+ crtc.set_screen("screen");
+ crtc.set_show_border_area(false);
+ crtc.set_char_width(8);
+ crtc.set_update_row_callback(FUNC(merit3xx_state::update_row));
}