summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/vis.cpp42
1 files changed, 32 insertions, 10 deletions
diff --git a/src/mame/drivers/vis.cpp b/src/mame/drivers/vis.cpp
index 5af4aa78338..521a56e18a0 100644
--- a/src/mame/drivers/vis.cpp
+++ b/src/mame/drivers/vis.cpp
@@ -247,6 +247,7 @@ private:
uint8_t m_extreg;
uint8_t m_interlace;
uint16_t m_wina, m_winb;
+ uint8_t m_shift256, m_dw;
};
const device_type VIS_VGA = &device_creator<vis_vga_device>;
@@ -397,6 +398,8 @@ void vis_vga_device::device_reset()
m_wina = 0;
m_winb = 0;
m_interlace = 0;
+ m_shift256 = 0;
+ m_dw = 0;
}
uint32_t vis_vga_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
@@ -477,19 +480,31 @@ WRITE8_MEMBER(vis_vga_device::vga_w)
{
case 0x19:
m_wina = (m_wina & 0xff00) | data;
- return;
+ break;
case 0x18:
m_wina = (m_wina & 0xff) | (data << 8);
- return;
+ break;
case 0x1d:
m_winb = (m_winb & 0xff00) | data;
- return;
+ break;
case 0x1c:
m_winb = (m_winb & 0xff) | (data << 8);
- return;
+ break;
+ case 0x1f:
+ if(data & 0x10)
+ {
+ vga.gc.shift256 = 1;
+ vga.crtc.dw = 1;
+ }
+ else
+ {
+ vga.gc.shift256 = m_shift256;
+ vga.crtc.dw = m_dw;
+ }
+ printf("%d %d %d %d %x\n", m_shift256, vga.gc.shift256, m_dw, vga.crtc.dw, data);
+ break;
}
- break;
-
+ break;
case 0x16:
if(m_extcnt == 4)
{
@@ -501,19 +516,25 @@ WRITE8_MEMBER(vis_vga_device::vga_w)
break;
case 0x1f:
if(vga.gc.index == 0x05)
- data |= 0x40;
+ {
+ m_shift256 = data & 0x40 ? 1 : 0;
+ // remove this if it is shown to be unneeded
+ //if(vga.sequencer.data[0x1f] | 0x10)
+ //data |= 0x40;
+ }
break;
case 0x05:
case 0x25:
switch(vga.crtc.index)
{
case 0x14:
- data |= 0x40;
+ m_dw = data & 0x40 ? 1 : 0;
+ if(vga.sequencer.data[0x1f] | 0x10)
+ data |= 0x40;
break;
case 0x30:
m_interlace = data; // XXX: verify?
return;
-
}
break;
}
@@ -684,6 +705,7 @@ static ADDRESS_MAP_START( at16_io, AS_IO, 16, vis_state )
AM_RANGE(0x0080, 0x009f) AM_DEVREADWRITE8("mb", at_mb_device, page8_r, page8_w, 0xffff)
AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8("mb:pic8259_slave", pic8259_device, read, write, 0xffff)
AM_RANGE(0x00c0, 0x00df) AM_DEVREADWRITE8("mb:dma8237_2", am9517a_device, read, write, 0x00ff)
+ AM_RANGE(0x00e0, 0x00e1) AM_NOP
AM_RANGE(0x023c, 0x023f) AM_READWRITE8(unk1_r, unk1_w, 0xffff)
AM_RANGE(0x0268, 0x026f) AM_READWRITE(pad_r, pad_w)
AM_RANGE(0x031a, 0x031b) AM_READ8(unk3_r, 0x00ff)
@@ -702,7 +724,7 @@ static INPUT_PORTS_START(vis)
PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("A") PORT_CHANGED_MEMBER(DEVICE_SELF, vis_state, update, 0)
PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_CHANGED_MEMBER(DEVICE_SELF, vis_state, update, 0)
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_CHANGED_MEMBER(DEVICE_SELF, vis_state, update, 0)
- PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_CHANGED_MEMBER(DEVICE_SELF, vis_state, update, 0)
+ PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("B") PORT_CHANGED_MEMBER(DEVICE_SELF, vis_state, update, 0)
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_CHANGED_MEMBER(DEVICE_SELF, vis_state, update, 0)
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_CHANGED_MEMBER(DEVICE_SELF, vis_state, update, 0)
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_CHANGED_MEMBER(DEVICE_SELF, vis_state, update, 0)