summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/video/tms3556.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/video/tms3556.cpp')
-rw-r--r--src/devices/video/tms3556.cpp118
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;
}