diff options
Diffstat (limited to 'src/devices/video/tms3556.cpp')
-rw-r--r-- | src/devices/video/tms3556.cpp | 118 |
1 files changed, 47 insertions, 71 deletions
diff --git a/src/devices/video/tms3556.cpp b/src/devices/video/tms3556.cpp index 0b4f37c8e24..3088e02e685 100644 --- a/src/devices/video/tms3556.cpp +++ b/src/devices/video/tms3556.cpp @@ -114,7 +114,6 @@ tms3556_device::tms3556_device(const machine_config &mconfig, const char *tag, d device_video_interface(mconfig, *this), m_space_config("videoram", ENDIANNESS_LITTLE, 8, 17, 0, address_map_constructor(FUNC(tms3556_device::tms3556), this)), m_reg(0), m_reg2(0), - m_reg_access_phase(0), m_row_col_written(0), m_bamp_written(0), m_colrow(0), @@ -146,7 +145,6 @@ void tms3556_device::device_start() save_item(NAME(m_address_regs)); save_item(NAME(m_reg)); save_item(NAME(m_reg2)); - save_item(NAME(m_reg_access_phase)); save_item(NAME(m_row_col_written)); save_item(NAME(m_bamp_written)); save_item(NAME(m_colrow)); @@ -202,7 +200,8 @@ uint8_t tms3556_device::vram_r() m_vdp_acmpxy=(m_colrow-1)&0xFFFF; } - m_init_read=false; + m_init_read = false; + m_reg = 0; } if (m_vdp_acmpxy_mode==dma_read) { @@ -249,6 +248,8 @@ void tms3556_device::vram_w(uint8_t data) if (m_vdp_acmp==VDP_BAMTF) m_vdp_acmp=VDP_BAMP; } + if (!machine().side_effects_disabled()) + m_reg = 0; } @@ -256,13 +257,13 @@ void tms3556_device::vram_w(uint8_t data) // reg_r - read from register port //------------------------------------------------- -uint8_t tms3556_device::reg_r(offs_t offset) +uint8_t tms3556_device::reg_r() { - LOG("TMS3556 Reg Read: %06x\n", offset); - - int reply = 0; // FIXME : will send internal status (VBL, HBL...) - if (!machine().side_effects_disabled()) - m_reg_access_phase = 0; + uint8_t reply = 0; // FIXME : will send internal status (VBL, HBL...) + if (!machine().side_effects_disabled()) { + LOG("TMS3556 Register %X Read: %02X\n", m_reg, reply); + m_reg = m_reg2; + } return reply; } @@ -270,71 +271,43 @@ uint8_t tms3556_device::reg_r(offs_t offset) // reg_w - write to register port //------------------------------------------------- -void tms3556_device::reg_w(offs_t offset, uint8_t data) +void tms3556_device::reg_w(uint8_t data) { - LOG("TMS3556 Reg Write: %06x = %02x\n", offset, data); + LOG("TMS3556 Register %X Write: %02X\n", m_reg, data); - switch (m_reg_access_phase) { - case 0: + if (m_reg == 0) { m_reg=data&0x0F; m_reg2=(data&0xF0)>>4; - if (m_reg!=0) - m_reg_access_phase=1; - return; - - case 1: - if (m_reg<8) { - m_control_regs[m_reg]=data; - // leve un flag si le dernier registre ecrit est row ou col - if ((m_reg==2) || (m_reg==1)) { - m_colrow=(m_control_regs[2]<<8)|m_control_regs[1]; - m_row_col_written=true; - } + } else if (m_reg<8) { + m_control_regs[m_reg]=data; + // leve un flag si le dernier registre ecrit est row ou col + if ((m_reg==2) || (m_reg==1)) { + m_colrow=(m_control_regs[2]<<8)|m_control_regs[1]; + m_row_col_written=true; + } - if (m_reg2==0) { - m_reg_access_phase=0; - return; - } else { - m_reg_access_phase=1; - m_reg=m_reg2; - m_reg2=0; - return; - } + if (!machine().side_effects_disabled()) + m_reg = m_reg2; + } else { + m_address_regs[m_reg-8]=(m_control_regs[2]<<8)|m_control_regs[1]; + // cas speciaux de decalage pour les generateurs + if ((m_reg>=0xB) && (m_reg<=0xE)) { + m_address_regs[m_reg-8]+=2; + m_address_regs[m_reg-8]&=0xFFFF; } else { - m_address_regs[m_reg-8]=(m_control_regs[2]<<8)|m_control_regs[1]; - // cas speciaux de decalage pour les generateurs - if ((m_reg>=0xB) && (m_reg<=0xE)) { - m_address_regs[m_reg-8]+=2; - m_address_regs[m_reg-8]&=0xFFFF; - } else { - m_address_regs[m_reg-8]+=1; - m_address_regs[m_reg-8]&=0xFFFF; - } - if (m_reg==9) { - m_row_col_written=false; - m_bamp_written=true; - m_reg_access_phase=0; - return; - } else { - m_row_col_written=0; - m_bamp_written=false; - m_reg_access_phase=2;//??? - return; - } - logerror("VDP16[%d] = x%x",m_reg,m_address_regs[m_reg-8]); - if (m_reg2==0) { - m_reg_access_phase=0; - return; - } else { - m_reg_access_phase=1; - m_reg=m_reg2; - m_reg2=0; - return; - } + m_address_regs[m_reg-8]+=1; + m_address_regs[m_reg-8]&=0xFFFF; } - case 2: - m_reg_access_phase=0; - return; + if (m_reg==9) { + m_row_col_written=false; + m_bamp_written=true; + } else { + m_row_col_written=0; + m_bamp_written=false; + } + //logerror("VDP16[%d] = x%x",m_reg,m_address_regs[m_reg-8]); + if (!machine().side_effects_disabled()) + m_reg = m_reg2; } } @@ -344,7 +317,10 @@ void tms3556_device::reg_w(offs_t offset, uint8_t data) uint8_t tms3556_device::initptr_r() { - m_init_read=true; + if (!machine().side_effects_disabled()) { + m_init_read = true; + m_reg = 0; + } return 0xff; } @@ -597,12 +573,12 @@ void tms3556_device::draw_line(bitmap_ind16 &bmp, int line) // if (m_control_regs[4] & 0x??) // { // interlaced mode -// ln = &bmp->pix16(line, m_field); +// ln = &bmp->pix(line, m_field); // } // else { /* non-interlaced mode */ - ln = &bmp.pix16(line); - ln2 = &bmp.pix16(line, 1); + ln = &bmp.pix(line); + ln2 = &bmp.pix(line, 1); double_lines = 1; } |