From 6933bb3947a6d2fd473c10fb6df8d4369e7f2314 Mon Sep 17 00:00:00 2001 From: mahlemiut Date: Sun, 16 Nov 2014 01:10:32 +1300 Subject: [PATCH] ngen: added basic display, and other little bits of WIP. --- src/mess/drivers/ngen.c | 65 ++++++++++++++++++++++++++++++++++------- 1 file changed, 54 insertions(+), 11 deletions(-) diff --git a/src/mess/drivers/ngen.c b/src/mess/drivers/ngen.c index 373f96b7668..37fbe6c102b 100644 --- a/src/mess/drivers/ngen.c +++ b/src/mess/drivers/ngen.c @@ -14,6 +14,7 @@ #include "machine/am9517a.h" #include "machine/pic8259.h" #include "machine/pit8253.h" +#include "machine/z80dart.h" class ngen_state : public driver_device { @@ -23,9 +24,12 @@ public: m_maincpu(*this,"maincpu"), m_crtc(*this,"crtc"), m_viduart(*this,"videouart"), + m_iouart(*this,"iouart"), m_dmac(*this,"dmac"), m_pic(*this,"pic"), - m_pit(*this,"pit") + m_pit(*this,"pit"), + m_vram(*this,"vram"), + m_fontram(*this,"fontram") {} DECLARE_WRITE_LINE_MEMBER(pit_out0_w); @@ -43,27 +47,34 @@ private: required_device m_maincpu; required_device m_crtc; required_device m_viduart; + required_device m_iouart; required_device m_dmac; required_device m_pic; required_device m_pit; + required_shared_ptr m_vram; + required_shared_ptr m_fontram; UINT16 m_peripheral; UINT16 m_upper; UINT16 m_middle; UINT16 m_port00; + UINT16 m_periph141; }; WRITE_LINE_MEMBER(ngen_state::pit_out0_w) { - m_pic->ir0_w(state); + //m_pic->ir0_w(state); + logerror("80186 Timer 1 state %i\n",state); } WRITE_LINE_MEMBER(ngen_state::pit_out1_w) { + logerror("PIT Timer 1 state %i\n",state); } WRITE_LINE_MEMBER(ngen_state::pit_out2_w) { + logerror("PIT Timer 2 state %i\n",state); } WRITE16_MEMBER(ngen_state::cpu_peripheral_cb) @@ -97,10 +108,15 @@ WRITE16_MEMBER(ngen_state::cpu_peripheral_cb) } // 80186 peripheral space +// Largely guesswork at this stage WRITE16_MEMBER(ngen_state::peripheral_w) { switch(offset) { + case 0x141: + // bit 1 enables speaker? + COMBINE_DATA(&m_periph141); + break; case 0x144: if(mem_mask & 0x00ff) m_crtc->address_w(space,0,data & 0xff); @@ -111,21 +127,27 @@ WRITE16_MEMBER(ngen_state::peripheral_w) break; case 0x146: if(mem_mask & 0x00ff) - m_pic->write(space,0,data & 0xff); + m_iouart->ba_cd_w(space,0,data & 0xff); + logerror("Video write offset 0x146 data %04x mask %04x\n",data,mem_mask); break; case 0x147: if(mem_mask & 0x00ff) - m_pic->write(space,1,data & 0xff); + m_iouart->ba_cd_w(space,1,data & 0xff); + logerror("Video write offset 0x147 data %04x mask %04x\n",data,mem_mask); break; + default: + logerror("(PC=%06x) Unknown 80186 peripheral write offset %04x data %04x mask %04x\n",m_maincpu->device_t::safe_pc(),offset,data,mem_mask); } - logerror("Peripheral write offset %04x data %04x mask %04x\n",offset,data,mem_mask); } READ16_MEMBER(ngen_state::peripheral_r) { - UINT16 ret = 0xff; + UINT16 ret = 0xffff; switch(offset) { + case 0x141: + ret = m_periph141; + break; case 0x144: if(mem_mask & 0x00ff) ret = m_crtc->status_r(space,0); @@ -136,14 +158,17 @@ READ16_MEMBER(ngen_state::peripheral_r) break; case 0x146: if(mem_mask & 0x00ff) - ret = m_pic->read(space,0); + ret = m_iouart->ba_cd_r(space,0); break; - case 0x147: + case 0x147: // definitely video related, likely UART sending data to the video board if(mem_mask & 0x00ff) - ret = m_pic->read(space,1); + ret = m_iouart->ba_cd_r(space,1); + // expects bit 0 to be set (Video ready signal?) + ret |= 1; break; + default: + logerror("(PC=%06x) Unknown 80186 peripheral read offset %04x mask %04x returning %04x\n",m_maincpu->device_t::safe_pc(),offset,mem_mask,ret); } - logerror("Peripheral read offset %04x mask %04x\n",offset,mem_mask); return ret; } @@ -165,10 +190,25 @@ READ16_MEMBER(ngen_state::port00_r) MC6845_UPDATE_ROW( ngen_state::crtc_update_row ) { + UINT16 addr = ma; + + for(int x=0;x