From f2a4d08fccb8dd68181146b76e6da1930782ea17 Mon Sep 17 00:00:00 2001 From: cracyc Date: Mon, 19 Feb 2018 19:59:29 -0600 Subject: [PATCH] duet16: more devices and video (nw) --- src/mame/drivers/duet16.cpp | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/mame/drivers/duet16.cpp b/src/mame/drivers/duet16.cpp index 52a7b2ac44d..e39d643b9ec 100644 --- a/src/mame/drivers/duet16.cpp +++ b/src/mame/drivers/duet16.cpp @@ -21,7 +21,9 @@ class duet16_state : public driver_device public: duet16_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu") + m_maincpu(*this, "maincpu"), + m_chrrom(*this, "char"), + m_vram(*this, "vram") { } void duet16(machine_config &config); @@ -31,12 +33,16 @@ private: void duet16_io(address_map &map); void duet16_mem(address_map &map); required_device m_maincpu; + required_memory_region m_chrrom; + required_shared_ptr m_vram; }; ADDRESS_MAP_START(duet16_state::duet16_mem) AM_RANGE(0x00000, 0x9ffff) AM_RAM AM_RANGE(0xb8000, 0xbffff) AM_RAM AM_RANGE(0xc0000, 0xc0fff) AM_RAM AM_SHARE("vram") + AM_RANGE(0xf8000, 0xf801f) AM_DEVREADWRITE8("dmac", am9517a_device, read, write, 0xff00) + AM_RANGE(0xf8040, 0xf804f) AM_DEVREADWRITE8("ptm", ptm6840_device, read, write, 0x00ff) AM_RANGE(0xf8060, 0xf8067) AM_DEVREADWRITE8("bgpit", pit8253_device, read, write, 0x00ff) AM_RANGE(0xf8080, 0xf8087) AM_DEVREADWRITE8("sio", upd7201_new_device, ba_cd_r, ba_cd_w, 0x00ff) AM_RANGE(0xf80a0, 0xf80a1) AM_DEVREADWRITE8("kbusart", i8251_device, data_r, data_w, 0x00ff) @@ -51,7 +57,26 @@ ADDRESS_MAP_END MC6845_UPDATE_ROW(duet16_state::crtc_update_row) { + const rgb_t fg = 0xffffffff; + const rgb_t bg = 0; + u32 *p = &bitmap.pix32(y); + for(int i = 0; i < x_count; i++) + { + u16 offset = (ma + i) & 0x1fff; + u8 chr = m_vram[offset] & 0xff; + //u8 attr = m_vram[offset] >> 8; + u8 data = m_chrrom->base()[(chr * 16) + ra]; + + *p = (data & 0x80) ? fg : bg; p++; + *p = (data & 0x40) ? fg : bg; p++; + *p = (data & 0x20) ? fg : bg; p++; + *p = (data & 0x10) ? fg : bg; p++; + *p = (data & 0x08) ? fg : bg; p++; + *p = (data & 0x04) ? fg : bg; p++; + *p = (data & 0x02) ? fg : bg; p++; + *p = (data & 0x01) ? fg : bg; p++; + } } MACHINE_CONFIG_START(duet16_state::duet16) @@ -84,6 +109,8 @@ MACHINE_CONFIG_START(duet16_state::duet16) MCFG_PIT8253_OUT2_HANDLER(DEVWRITELINE("kbusart", i8251_device, write_txc)) MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("kbusart", i8251_device, write_rxc)) + MCFG_DEVICE_ADD("ptm", PTM6840, 0) + MCFG_DEVICE_ADD("sio", UPD7201_NEW, 8_MHz_XTAL / 2) MCFG_DEVICE_ADD("kbusart", I8251, 8_MHz_XTAL / 4)