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.cpp170
1 files changed, 77 insertions, 93 deletions
diff --git a/src/devices/video/tms3556.cpp b/src/devices/video/tms3556.cpp
index 80280fe5364..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));
@@ -180,36 +178,44 @@ uint32_t tms3556_device::screen_update(screen_device &screen, bitmap_ind16 &bitm
// vram_r - VRAM read
//-------------------------------------------------
-READ8_MEMBER( tms3556_device::vram_r )
+uint8_t tms3556_device::vram_r()
{
uint8_t ret;
- if (m_bamp_written) {
- m_bamp_written=false;
- m_vdp_acmpxy_mode=dma_write;
- if (m_init_read)
- m_vdp_acmp=VDP_BAMP;
- else
- m_vdp_acmp=(VDP_BAMP-1)&0xFFFF;
- }
+ if (!machine().side_effects_disabled()) {
+ if (m_bamp_written) {
+ m_bamp_written=false;
+ m_vdp_acmpxy_mode=dma_write;
+ if (m_init_read)
+ m_vdp_acmp=VDP_BAMP;
+ else
+ m_vdp_acmp=(VDP_BAMP-1)&0xFFFF;
+ }
- if (m_row_col_written) {
- m_row_col_written=0;
- m_vdp_acmpxy_mode=dma_read;
- if (m_init_read)
- m_vdp_acmpxy=m_colrow;
- else
- m_vdp_acmpxy=(m_colrow-1)&0xFFFF;
+ if (m_row_col_written) {
+ m_row_col_written=0;
+ m_vdp_acmpxy_mode=dma_read;
+ if (m_init_read)
+ m_vdp_acmpxy=m_colrow;
+ else
+ m_vdp_acmpxy=(m_colrow-1)&0xFFFF;
+ }
+
+ m_init_read = false;
+ m_reg = 0;
}
- m_init_read=false;
if (m_vdp_acmpxy_mode==dma_read) {
ret=readbyte(m_vdp_acmpxy);
- m_vdp_acmpxy++;
- if (m_vdp_acmpxy==VDP_BAMTF) m_vdp_acmpxy=VDP_BAMP;
+ if (!machine().side_effects_disabled()) {
+ m_vdp_acmpxy++;
+ if (m_vdp_acmpxy==VDP_BAMTF) m_vdp_acmpxy=VDP_BAMP;
+ }
} else {
ret=readbyte(m_vdp_acmp);
- m_vdp_acmp++;
- if (m_vdp_acmp==VDP_BAMTF) m_vdp_acmp=VDP_BAMP;
+ if (!machine().side_effects_disabled()) {
+ m_vdp_acmp++;
+ if (m_vdp_acmp==VDP_BAMTF) m_vdp_acmp=VDP_BAMP;
+ }
}
return ret;
}
@@ -218,7 +224,7 @@ READ8_MEMBER( tms3556_device::vram_r )
// vram_w - VRAM write
//-------------------------------------------------
-WRITE8_MEMBER( tms3556_device::vram_w )
+void tms3556_device::vram_w(uint8_t data)
{
if (m_bamp_written) {
m_bamp_written=false;
@@ -242,6 +248,8 @@ WRITE8_MEMBER( tms3556_device::vram_w )
if (m_vdp_acmp==VDP_BAMTF) m_vdp_acmp=VDP_BAMP;
}
+ if (!machine().side_effects_disabled())
+ m_reg = 0;
}
@@ -249,12 +257,13 @@ WRITE8_MEMBER( tms3556_device::vram_w )
// reg_r - read from register port
//-------------------------------------------------
-READ8_MEMBER( tms3556_device::reg_r )
+uint8_t tms3556_device::reg_r()
{
- LOG("TMS3556 Reg Read: %06x\n", offset);
-
- int reply = 0; // FIXME : will send internal status (VBL, HBL...)
- 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;
}
@@ -262,81 +271,56 @@ READ8_MEMBER( tms3556_device::reg_r )
// reg_w - write to register port
//-------------------------------------------------
-WRITE8_MEMBER( tms3556_device::reg_w )
+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;
+ }
+ if (m_reg==9) {
+ m_row_col_written=false;
+ m_bamp_written=true;
+ } else {
+ m_row_col_written=0;
+ m_bamp_written=false;
}
- case 2:
- m_reg_access_phase=0;
- return;
+ //logerror("VDP16[%d] = x%x",m_reg,m_address_regs[m_reg-8]);
+ if (!machine().side_effects_disabled())
+ m_reg = m_reg2;
}
}
//--------------------------------------------------------------------------
-// initptr_r - set VDP in read mode (not exacly on the VDP but on the TAL)
+// initptr_r - set VDP in read mode (not exactly on the VDP but on the TAL)
//--------------------------------------------------------------------------
-READ8_MEMBER( tms3556_device::initptr_r )
+uint8_t tms3556_device::initptr_r()
{
- m_init_read=true;
+ if (!machine().side_effects_disabled()) {
+ m_init_read = true;
+ m_reg = 0;
+ }
return 0xff;
}
@@ -589,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;
}