summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author angelosa <salese_corp_ltd@email.it>2017-06-28 19:23:13 +0200
committer angelosa <salese_corp_ltd@email.it>2017-06-28 19:24:08 +0200
commit12824956e936e9716a7d29c9dd18f12aeec9632d (patch)
treed07e2208ff668f022250d5dab22992cd25434826
parent73c689e5e50bfbac99b1039f1079a45eb2a9e13f (diff)
ygv608.cpp: converted ports to AM_DEVICE (nw)
-rw-r--r--src/mame/drivers/namcond1.cpp4
-rw-r--r--src/mame/video/ygv608.cpp588
-rw-r--r--src/mame/video/ygv608.h26
3 files changed, 346 insertions, 272 deletions
diff --git a/src/mame/drivers/namcond1.cpp b/src/mame/drivers/namcond1.cpp
index 9e8a68f9fee..bb260b22a7c 100644
--- a/src/mame/drivers/namcond1.cpp
+++ b/src/mame/drivers/namcond1.cpp
@@ -200,7 +200,7 @@ Some logic, resistors/caps/transistors, some connectors etc.
static ADDRESS_MAP_START( namcond1_map, AS_PROGRAM, 16, namcond1_state )
AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x400000, 0x40ffff) AM_RAM AM_SHARE("shared_ram")
- AM_RANGE(0x800000, 0x80000f) AM_DEVREADWRITE8("ygv608", ygv608_device, read, write, 0xff00)
+ AM_RANGE(0x800000, 0x80000f) AM_DEVICE8("ygv608", ygv608_device, port_map, 0xff00)
AM_RANGE(0xa00000, 0xa00fff) AM_DEVREADWRITE8("at28c16", at28c16_device, read, write, 0xff00)
#ifdef MAME_DEBUG
AM_RANGE(0xb00000, 0xb00001) AM_DEVREAD("ygv608", ygv608_device, debug_trigger_r)
@@ -214,7 +214,7 @@ static ADDRESS_MAP_START( abcheck_map, AS_PROGRAM, 16, namcond1_state )
AM_RANGE(0x600000, 0x607fff) AM_RAM AM_SHARE("zpr1")
AM_RANGE(0x608000, 0x60ffff) AM_RAM AM_SHARE("zpr2")
AM_RANGE(0x780000, 0x780001) AM_READ(printer_r)
- AM_RANGE(0x800000, 0x80000f) AM_DEVREADWRITE8("ygv608", ygv608_device, read, write, 0xff00)
+ AM_RANGE(0x800000, 0x80000f) AM_DEVICE8("ygv608", ygv608_device, port_map, 0xff00)
AM_RANGE(0xa00000, 0xa00fff) AM_DEVREADWRITE8("at28c16", at28c16_device, read, write, 0xff00)
#ifdef MAME_DEBUG
AM_RANGE(0xb00000, 0xb00001) AM_DEVREAD("ygv608", ygv608_device, debug_trigger_r)
diff --git a/src/mame/video/ygv608.cpp b/src/mame/video/ygv608.cpp
index 6eee7ddac1f..c3a55351c2c 100644
--- a/src/mame/video/ygv608.cpp
+++ b/src/mame/video/ygv608.cpp
@@ -29,6 +29,19 @@
* Scaling
* Split-screen scrolling by row (by column supported) (see test mode)
* Everything else! :)
+ *
+ * TODO (2017 edition):
+ * - move ports into device_address_map (done);
+ * - add registers into own space, improve naming and variable usage;
+ * - remove code repetition in tilemap drawing functions;
+ * - add crtc section;
+ * - fix garbage tiles in Mappy Arrange/Abnormal Check;
+ * - fix attract mode garbage for Namco Collection Vol. 2 (either transparent or page banking select registers);
+ * - fix tilemap dirty flags, move tilemap data in own space prolly helps;
+ * - DMA from/to ROM;
+ * - clean-ups & documentation;
+ *
+ *
*/
#include "emu.h"
@@ -231,6 +244,24 @@ enum {
#define GFX_16X16_8BIT 5
+/***************************************
+ *
+ * Port Interface map
+ *
+ ***************************************/
+
+DEVICE_ADDRESS_MAP_START( port_map, 8, ygv608_device )
+ AM_RANGE(0x00, 0x00) AM_READWRITE(pattern_name_table_r,pattern_name_table_w)
+ AM_RANGE(0x01, 0x01) AM_READWRITE(sprite_data_r,sprite_data_w)
+ AM_RANGE(0x02, 0x02) AM_READWRITE(scroll_data_r,scroll_data_w)
+ AM_RANGE(0x03, 0x03) AM_READWRITE(palette_data_r,palette_data_w)
+ AM_RANGE(0x04, 0x04) AM_READWRITE(register_data_r,register_data_w)
+ AM_RANGE(0x05, 0x05) AM_WRITE(register_select_w)
+ AM_RANGE(0x06, 0x06) AM_READWRITE(status_port_r,status_port_w)
+ AM_RANGE(0x07, 0x07) AM_READWRITE(system_control_r,system_control_w)
+ADDRESS_MAP_END
+
+
/* text-layer characters */
static const uint32_t pts_4bits_layout_xoffset[64] =
@@ -1208,324 +1239,349 @@ uint32_t ygv608_device::update_screen(screen_device &screen, bitmap_ind16 &bitma
return 0;
}
-READ8_MEMBER( ygv608_device::read )
+/***************************************
+ *
+ * Port Interface routines
+ *
+ ****************************************/
+
+ // P#0R - pattern name table data port
+READ8_MEMBER( ygv608_device::pattern_name_table_r )
{
- int pn=0;
- uint8_t data = 0;
+ int pn = 0;
+ uint8_t xTile = m_regs.s.r1 & r1_pnx;
+ uint8_t yTile = m_regs.s.r0 & r0_pny;
- switch (offset)
+ switch (p0_state_r)
{
- case 0x00: /* P#0 - pattern name table data port */
- {
- uint8_t xTile = m_regs.s.r1 & r1_pnx;
- uint8_t yTile = m_regs.s.r0 & r0_pny;
+ case 0:
+ /* Are we reading from plane B? */
+ if (!((m_regs.s.r7 & r7_md) & MD_1PLANE) && (m_regs.s.r0 & r0_b_a))
+ pattern_name_base_r = ((m_page_y << m_pny_shift) << m_bits16);
- switch (p0_state_r)
- {
- case 0:
- /* Are we reading from plane B? */
- if (!((m_regs.s.r7 & r7_md) & MD_1PLANE) && (m_regs.s.r0 & r0_b_a))
- pattern_name_base_r = ((m_page_y << m_pny_shift) << m_bits16);
-
- /* read character from ram */
- pn = pattern_name_base_r + (((yTile << m_pny_shift) + xTile) << m_bits16);
- break;
-
- case 1:
- /* read character from ram */
- pn = pattern_name_base_r + (((yTile << m_pny_shift) + xTile) << m_bits16) + 1;
- break;
- }
+ /* read character from ram */
+ pn = pattern_name_base_r + (((yTile << m_pny_shift) + xTile) << m_bits16);
+ break;
- if (pn > 4095)
- {
- logerror( "attempt (%d) to read pattern name %d\n"
- "mode = %d, pgs = %d (%dx%d)\n"
- "pattern_name_base_r = %d\n"
- "pnx = %d, pny = %d, pny_shift = %d, bits16 = %d\n",
- p0_state_r,
- pn, m_regs.s.r7 & r7_md, m_regs.s.r8 & r8_pgs,
- m_page_x, m_page_y,
- pattern_name_base_r,
- xTile, yTile, m_pny_shift,
- m_bits16 );
- pn = 0;
- }
- data = m_pattern_name_table[pn];
+ case 1:
+ /* read character from ram */
+ pn = pattern_name_base_r + (((yTile << m_pny_shift) + xTile) << m_bits16) + 1;
+ break;
+ }
+
+ if (pn > 4095)
+ {
+ logerror( "attempt (%d) to read pattern name %d\n"
+ "mode = %d, pgs = %d (%dx%d)\n"
+ "pattern_name_base_r = %d\n"
+ "pnx = %d, pny = %d, pny_shift = %d, bits16 = %d\n",
+ p0_state_r,
+ pn, m_regs.s.r7 & r7_md, m_regs.s.r8 & r8_pgs,
+ m_page_x, m_page_y,
+ pattern_name_base_r,
+ xTile, yTile, m_pny_shift,
+ m_bits16 );
+ pn = 0;
+ }
- p0_state_r++;
- if ((m_regs.s.r7 & r7_md) == MD_2PLANE_8BIT )
- p0_state_r++;
+ p0_state_r++;
+ if ((m_regs.s.r7 & r7_md) == MD_2PLANE_8BIT )
+ p0_state_r++;
- if (p0_state_r == 2)
+ if (p0_state_r == 2)
+ {
+ if (m_regs.s.r0 & r0_pnya)
+ {
+ if (yTile++ == (m_page_y - 1))
{
- if (m_regs.s.r0 & r0_pnya)
- {
- if (yTile++ == (m_page_y - 1))
- {
- yTile = 0;
- if (xTile++ == (m_page_x - 1))
- {
- xTile = 0;
- // we're now off this tile plane, toggle planes
- m_regs.s.r0 ^= r0_b_a;
- }
- }
- m_regs.s.r0 &= ~r0_pny;
- m_regs.s.r0 |= yTile;
- m_regs.s.r1 &= ~r1_pnx;
- m_regs.s.r1 |= xTile;
- }
- else if (m_regs.s.r1 & r1_pnxa)
+ yTile = 0;
+ if (xTile++ == (m_page_x - 1))
{
- if (xTile++ == (m_page_x - 1))
- {
- xTile = 0;
- if (yTile++ == (m_page_y - 1))
- {
- yTile = 0;
- // we're now off this tile plane, toggle planes
- m_regs.s.r0 ^= r0_b_a;
- }
- }
- m_regs.s.r0 &= ~r0_pny;
- m_regs.s.r0 |= yTile;
- m_regs.s.r1 &= ~r1_pnx;
- m_regs.s.r1 |= xTile;
+ xTile = 0;
+ // we're now off this tile plane, toggle planes
+ m_regs.s.r0 ^= r0_b_a;
}
- p0_state_r = 0;
- pattern_name_base_r = 0;
}
- return (data);
+ m_regs.s.r0 &= ~r0_pny;
+ m_regs.s.r0 |= yTile;
+ m_regs.s.r1 &= ~r1_pnx;
+ m_regs.s.r1 |= xTile;
}
-
- case 0x01: /* P#1 - sprite data port */
- data = m_sprite_attribute_table.b[m_regs.s.saa];
- if (m_regs.s.r2 & r2_saar)
- m_regs.s.saa++;
- return (data);
-
- case 0x02: /* P#2 - scroll data port */
- data = m_scroll_data_table[(m_regs.s.r2 & r2_b_a) >> 4][m_regs.s.sca];
- if (m_regs.s.r2 & r2_scar)
- {
- m_regs.s.sca++;
- /* handle wrap to next plane */
- if (m_regs.s.sca == 0)
- m_regs.s.r2 ^= r2_b_a;
- }
- return( data );
-
- case 0x03: /* P#3 - color palette data port */
- data = m_colour_palette[m_regs.s.cc][p3_state_r];
- if( ++p3_state_r == 3 )
- {
- p3_state_r = 0;
- if( m_regs.s.r2 & r2_cpar)
- m_regs.s.cc++;
- }
- return( data );
-
- case 0x04: /* P#4 - register data port */
+ else if (m_regs.s.r1 & r1_pnxa)
{
- uint8_t regNum = (m_ports.s.p5) & p5_rn;
- data = m_regs.b[regNum];
- if (m_ports.s.p5 & p5_rrai)
+ if (xTile++ == (m_page_x - 1))
{
- regNum ++;
- if (regNum == 50)
+ xTile = 0;
+ if (yTile++ == (m_page_y - 1))
{
- regNum = 0;
- logerror( "warning: rn=50 after read increment\n" );
+ yTile = 0;
+ // we're now off this tile plane, toggle planes
+ m_regs.s.r0 ^= r0_b_a;
}
- m_ports.s.p5 &= ~p5_rn;
- m_ports.s.p5 |= regNum;
}
- return (data );
+ m_regs.s.r0 &= ~r0_pny;
+ m_regs.s.r0 |= yTile;
+ m_regs.s.r1 &= ~r1_pnx;
+ m_regs.s.r1 |= xTile;
}
+ p0_state_r = 0;
+ pattern_name_base_r = 0;
+ }
+
+ return m_pattern_name_table[pn];
+}
- case 0x05:
- break;
+// P#1R - sprite data port
+READ8_MEMBER( ygv608_device::sprite_data_r )
+{
+ uint8_t res = m_sprite_attribute_table.b[m_regs.s.saa];
+
+ if (m_regs.s.r2 & r2_saar)
+ m_regs.s.saa++;
+
+ return res;
+}
- case 0x06:
- case 0x07:
- return( (uint8_t)(m_ports.b[offset]) );
+// P#2R - scroll data port
+READ8_MEMBER( ygv608_device::scroll_data_r )
+{
+ uint8_t res = m_scroll_data_table[(m_regs.s.r2 & r2_b_a) >> 4][m_regs.s.sca];
- default :
- logerror( "unknown ygv608 register (%d)\n", offset );
- break;
+ if (m_regs.s.r2 & r2_scar)
+ {
+ m_regs.s.sca++;
+ /* handle wrap to next plane */
+ if (m_regs.s.sca == 0)
+ m_regs.s.r2 ^= r2_b_a;
}
- return( 0 );
+ return res;
}
-WRITE8_MEMBER( ygv608_device::write )
+// P#3 - color palette data port
+READ8_MEMBER( ygv608_device::palette_data_r )
{
- int pn=0;
+ uint8_t res = m_colour_palette[m_regs.s.cc][p3_state_r];
+
+ if( ++p3_state_r == 3 )
+ {
+ p3_state_r = 0;
+ if( m_regs.s.r2 & r2_cpar)
+ m_regs.s.cc++;
+ }
+
+ return res;
+}
- //data = ( data >> 8 ) & 0xff;
+// P#4R - register data port
+READ8_MEMBER(ygv608_device::register_data_r)
+{
+ uint8_t regNum = (m_ports.s.p5) & p5_rn;
+ uint8_t res = m_regs.b[regNum];
- switch (offset)
+ if (m_ports.s.p5 & p5_rrai)
{
- case 0x00: /* P#0 - pattern name table data port */
+ regNum ++;
+ if (regNum == 50)
{
- uint8_t xTile = m_regs.s.r1 & r1_pnx;
- uint8_t yTile = m_regs.s.r0 & r0_pny;
+ regNum = 0;
+ logerror( "warning: rn=50 after read increment\n" );
+ }
+
+ m_ports.s.p5 &= ~p5_rn;
+ m_ports.s.p5 |= regNum;
+ }
+
+ return res;
+}
- switch (p0_state_w)
- {
- case 0:
- /* Are we reading from plane B? */
- if (!((m_regs.s.r7 & r7_md) & MD_1PLANE) && (m_regs.s.r0 & r0_b_a))
- pattern_name_base_w = ((m_page_y << m_pny_shift) << m_bits16);
-
- /* read character from ram */
- pn = pattern_name_base_w + (((yTile << m_pny_shift) + xTile) << m_bits16);
- break;
-
- case 1:
- /* read character from ram */
- pn = pattern_name_base_w + (((yTile << m_pny_shift) + xTile) << m_bits16) + 1;
- break;
- }
+// P#6R - status port
+READ8_MEMBER( ygv608_device::status_port_r )
+{
+ return (uint8_t)(m_ports.b[6]);
+}
- if (pn > 4095)
- {
- logerror( "attempt (%d) to read pattern name %d\n"
- "mode = %d, pgs = %d (%dx%d)\n"
- "pattern_name_base_w = %d\n"
- "pnx = %d, pny = %d, pny_shift = %d, bits16 = %d\n",
- p0_state_w,
- pn, m_regs.s.r7 & r7_md, m_regs.s.r8 & r8_pgs,
- m_page_x, m_page_y,
- pattern_name_base_w,
- xTile, yTile, m_pny_shift,
- m_bits16 );
- pn = 0;
- }
- m_pattern_name_table[pn] = data;
+// P#7R - system control port
+READ8_MEMBER( ygv608_device::system_control_r )
+{
+ return (uint8_t)(m_ports.b[7]);
+}
- p0_state_w++;
- if ((m_regs.s.r7 & r7_md) == MD_2PLANE_8BIT )
- p0_state_w++;
+// P#0W - pattern name table data write
+WRITE8_MEMBER(ygv608_device::pattern_name_table_w)
+{
+ int pn = 0;
+ uint8_t xTile = m_regs.s.r1 & r1_pnx;
+ uint8_t yTile = m_regs.s.r0 & r0_pny;
- if (p0_state_w == 2)
- {
- if (m_regs.s.r0 & r0_pnya)
- {
- if (yTile++ == (m_page_y - 1))
- {
- yTile = 0;
- if (xTile++ == (m_page_x - 1))
- {
- xTile = 0;
- m_regs.s.r0 ^= r0_b_a;
- }
- }
- m_regs.s.r0 &= ~r0_pny;
- m_regs.s.r0 |= yTile;
- m_regs.s.r1 &= ~r1_pnx;
- m_regs.s.r1 |= xTile;
- }
- else if (m_regs.s.r1 & r1_pnxa)
- {
- if (xTile++ == (m_page_x - 1))
- {
- xTile = 0;
- if (yTile++ == (m_page_y - 1))
- {
- yTile = 0;
- m_regs.s.r0 ^= r0_b_a;
- }
- }
- m_regs.s.r0 &= ~r0_pny;
- m_regs.s.r0 |= yTile;
- m_regs.s.r1 &= ~r1_pnx;
- m_regs.s.r1 |= xTile;
- }
- p0_state_w = 0;
- pattern_name_base_w = 0;
- }
- }
- break;
+ switch (p0_state_w)
+ {
+ case 0:
+ /* Are we reading from plane B? */
+ if (!((m_regs.s.r7 & r7_md) & MD_1PLANE) && (m_regs.s.r0 & r0_b_a))
+ pattern_name_base_w = ((m_page_y << m_pny_shift) << m_bits16);
- case 0x01: /* P#1 - sprite data port */
- m_sprite_attribute_table.b[m_regs.s.saa] = data;
- if( m_regs.s.r2 & r2_saaw)
- m_regs.s.saa++;
+ /* read character from ram */
+ pn = pattern_name_base_w + (((yTile << m_pny_shift) + xTile) << m_bits16);
break;
- case 0x02: /* P#2 - scroll data port */
- m_scroll_data_table[(m_regs.s.r2 & r2_b_a) >> 4][m_regs.s.sca] = data;
- if (m_regs.s.r2 & r2_scaw)
- {
- m_regs.s.sca++;
- /* handle wrap to next plane */
- if (m_regs.s.sca == 0)
- m_regs.s.r2 ^= r2_b_a;
- }
+ case 1:
+ /* read character from ram */
+ pn = pattern_name_base_w + (((yTile << m_pny_shift) + xTile) << m_bits16) + 1;
break;
+ }
+
+ if (pn > 4095)
+ {
+ logerror( "attempt (%d) to read pattern name %d\n"
+ "mode = %d, pgs = %d (%dx%d)\n"
+ "pattern_name_base_w = %d\n"
+ "pnx = %d, pny = %d, pny_shift = %d, bits16 = %d\n",
+ p0_state_w,
+ pn, m_regs.s.r7 & r7_md, m_regs.s.r8 & r8_pgs,
+ m_page_x, m_page_y,
+ pattern_name_base_w,
+ xTile, yTile, m_pny_shift,
+ m_bits16 );
+ pn = 0;
+ }
+
+ m_pattern_name_table[pn] = data;
- case 0x03: /* P#3 - colour palette data port */
- m_colour_palette[m_regs.s.cc][p3_state_w] = data;
- if (++p3_state_w == 3)
+ p0_state_w++;
+ if ((m_regs.s.r7 & r7_md) == MD_2PLANE_8BIT )
+ p0_state_w++;
+
+ if (p0_state_w == 2)
+ {
+ if (m_regs.s.r0 & r0_pnya)
+ {
+ if (yTile++ == (m_page_y - 1))
{
- p3_state_w = 0;
- palette().set_pen_color(m_regs.s.cc,
- pal6bit(m_colour_palette[m_regs.s.cc][0]),
- pal6bit(m_colour_palette[m_regs.s.cc][1]),
- pal6bit(m_colour_palette[m_regs.s.cc][2]) );
- if (m_regs.s.r2 & r2_cpaw)
- m_regs.s.cc++;
+ yTile = 0;
+ if (xTile++ == (m_page_x - 1))
+ {
+ xTile = 0;
+ m_regs.s.r0 ^= r0_b_a;
+ }
}
- break;
-
- case 0x04: /* P#4 - register data port */
+ m_regs.s.r0 &= ~r0_pny;
+ m_regs.s.r0 |= yTile;
+ m_regs.s.r1 &= ~r1_pnx;
+ m_regs.s.r1 |= xTile;
+ }
+ else if (m_regs.s.r1 & r1_pnxa)
{
- uint8_t regNum = (m_ports.s.p5) & p5_rn;
-#if 0
- logerror( "R#%d = $%02X\n", regNum, data );
-#endif
- SetPreShortcuts (regNum, data);
- m_regs.b[regNum] = data;
- SetPostShortcuts (regNum);
- if (m_ports.s.p5 & p5_rwai)
+ if (xTile++ == (m_page_x - 1))
{
- regNum ++;
- if (regNum == 50)
+ xTile = 0;
+ if (yTile++ == (m_page_y - 1))
{
- regNum = 0;
- logerror( "warning: rn=50 after write increment\n" );
+ yTile = 0;
+ m_regs.s.r0 ^= r0_b_a;
}
- m_ports.s.p5 &= ~p5_rn;
- m_ports.s.p5 |= regNum;
}
+ m_regs.s.r0 &= ~r0_pny;
+ m_regs.s.r0 |= yTile;
+ m_regs.s.r1 &= ~r1_pnx;
+ m_regs.s.r1 |= xTile;
}
- break;
+ p0_state_w = 0;
+ pattern_name_base_w = 0;
+ }
- case 0x05: /* P#5 - register select port */
- m_ports.b[5] = data;
- break;
+}
- case 0x06: /* P#6 - status port */
- /* writing a '1' resets that bit */
- m_ports.b[6] &= ~data;
- break;
+// P#1W - sprite data port
+WRITE8_MEMBER( ygv608_device::sprite_data_w )
+{
+ m_sprite_attribute_table.b[m_regs.s.saa] = data;
- case 0x07: /* P#7 - system control port */
- m_ports.b[7] = data;
- if (m_ports.b[7] & 0x3e)
- HandleRomTransfers();
- if (m_ports.b[7] & 0x01)
- HandleYGV608Reset();
- break;
+ if( m_regs.s.r2 & r2_saaw)
+ m_regs.s.saa++;
+}
- default:
- logerror( "unknown ygv608 register (%d)\n", offset );
- break;
+// P#2W - scroll data port
+WRITE8_MEMBER( ygv608_device::scroll_data_w )
+{
+ m_scroll_data_table[(m_regs.s.r2 & r2_b_a) >> 4][m_regs.s.sca] = data;
+
+ if (m_regs.s.r2 & r2_scaw)
+ {
+ m_regs.s.sca++;
+ /* handle wrap to next plane */
+ if (m_regs.s.sca == 0)
+ m_regs.s.r2 ^= r2_b_a;
+ }
+}
+
+// P#3W - colour palette data port
+WRITE8_MEMBER( ygv608_device::palette_data_w )
+{
+ m_colour_palette[m_regs.s.cc][p3_state_w] = data;
+ if (++p3_state_w == 3)
+ {
+ p3_state_w = 0;
+ palette().set_pen_color(m_regs.s.cc,
+ pal6bit( m_colour_palette[m_regs.s.cc][0] ),
+ pal6bit( m_colour_palette[m_regs.s.cc][1] ),
+ pal6bit( m_colour_palette[m_regs.s.cc][2] ));
+
+ if (m_regs.s.r2 & r2_cpaw)
+ m_regs.s.cc++;
+ }
+}
+
+// P#4W - register data port
+WRITE8_MEMBER( ygv608_device::register_data_w )
+{
+ uint8_t regNum = (m_ports.s.p5) & p5_rn;
+ //logerror( "R#%d = $%02X\n", regNum, data );
+
+ SetPreShortcuts (regNum, data);
+ m_regs.b[regNum] = data;
+ SetPostShortcuts (regNum);
+
+ if (m_ports.s.p5 & p5_rwai)
+ {
+ regNum ++;
+
+ if (regNum == 50)
+ {
+ regNum = 0;
+ logerror( "warning: rn=50 after write increment\n" );
+ }
+
+ m_ports.s.p5 &= ~p5_rn;
+ m_ports.s.p5 |= regNum;
}
}
+// P#5W - register select port
+WRITE8_MEMBER( ygv608_device::register_select_w )
+{
+ m_ports.b[5] = data;
+}
+
+// P#6W - status port
+WRITE8_MEMBER( ygv608_device::status_port_w )
+{
+ /* writing a '1' resets that bit */
+ m_ports.b[6] &= ~data;
+}
+
+// P#7W - system control port
+WRITE8_MEMBER( ygv608_device::system_control_w )
+{
+ m_ports.b[7] = data;
+ if (m_ports.b[7] & 0x3e)
+ HandleRomTransfers(data & 0x3e);
+ if (m_ports.b[7] & 0x01)
+ HandleYGV608Reset();
+}
+
+
+
void ygv608_device::HandleYGV608Reset()
{
int i;
@@ -1558,8 +1614,10 @@ void ygv608_device::HandleYGV608Reset()
- So leave it in!
*/
-void ygv608_device::HandleRomTransfers()
+void ygv608_device::HandleRomTransfers(uint8_t type)
{
+ popmessage("ROM DMA used %02x",type);
+
#if 0
static uint8_t *sdt = (uint8_t *)m_scroll_data_table;
static uint8_t *sat = (uint8_t *)m_sprite_attribute_table.b;
diff --git a/src/mame/video/ygv608.h b/src/mame/video/ygv608.h
index 5e71feb4800..a7717014dc0 100644
--- a/src/mame/video/ygv608.h
+++ b/src/mame/video/ygv608.h
@@ -17,10 +17,26 @@ public:
// construction/destruction
ygv608_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- DECLARE_WRITE8_MEMBER( write );
- DECLARE_READ8_MEMBER( read );
-
-
+ DECLARE_ADDRESS_MAP(port_map, 8);
+
+ DECLARE_READ8_MEMBER(pattern_name_table_r);
+ DECLARE_READ8_MEMBER(sprite_data_r);
+ DECLARE_READ8_MEMBER(scroll_data_r);
+ DECLARE_READ8_MEMBER(palette_data_r);
+ DECLARE_READ8_MEMBER(register_data_r);
+// DECLARE_READ8_MEMBER(register_select_r);
+ DECLARE_READ8_MEMBER(status_port_r);
+ DECLARE_READ8_MEMBER(system_control_r);
+ DECLARE_WRITE8_MEMBER(pattern_name_table_w);
+ DECLARE_WRITE8_MEMBER(sprite_data_w);
+ DECLARE_WRITE8_MEMBER(scroll_data_w);
+ DECLARE_WRITE8_MEMBER(palette_data_w);
+ DECLARE_WRITE8_MEMBER(register_data_w);
+ DECLARE_WRITE8_MEMBER(register_select_w);
+ DECLARE_WRITE8_MEMBER(status_port_w);
+ DECLARE_WRITE8_MEMBER(system_control_w);
+
+ // TODO: is this even a real connection?
void set_gfxbank(uint8_t gfxbank);
uint32_t update_screen(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
@@ -147,7 +163,7 @@ private:
bitmap_ind16 m_work_bitmap;
void HandleYGV608Reset();
- void HandleRomTransfers();
+ void HandleRomTransfers(uint8_t type);
void SetPreShortcuts(int reg, int data );
void SetPostShortcuts(int reg);
void ShowYGV608Registers();