summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author angelosa <salese_corp_ltd@email.it>2017-06-29 04:35:01 +0200
committer angelosa <salese_corp_ltd@email.it>2017-06-29 04:35:49 +0200
commita1a466a5f97cf3eecb12ac2869b09eb313ddec4e (patch)
tree5dd94d83ea1ceb486abd768761ed0e07adfb4849
parent1f7d4514b57c4d173557ca9334f3da54c9db8830 (diff)
ygv608.cpp: address pointer clean-ups (nw)
-rw-r--r--src/mame/drivers/namcond1.cpp2
-rw-r--r--src/mame/machine/namcond1.cpp2
-rw-r--r--src/mame/video/ygv608.cpp113
-rw-r--r--src/mame/video/ygv608.h24
4 files changed, 104 insertions, 37 deletions
diff --git a/src/mame/drivers/namcond1.cpp b/src/mame/drivers/namcond1.cpp
index 1aba50dc0c3..198796223e9 100644
--- a/src/mame/drivers/namcond1.cpp
+++ b/src/mame/drivers/namcond1.cpp
@@ -482,7 +482,7 @@ ROM_START( abcheck )
ROM_REGION( 0x400000,"ygv608", 0 ) /* 4MB character generator */
ROM_LOAD( "an1cg0.10e", 0x000000, 0x200000, CRC(6dae0531) SHA1(2f4a4a22d461eb9a5bb88bdfccc3aff44cd3faee) )
ROM_LOAD( "an1cg1.10f", 0x200000, 0x200000, CRC(8485607a) SHA1(1b9a1950c6db61a2b546fe2f5e56333593e93fb4) )
-
+
ROM_REGION( 0x1000000, "c352", 0 ) // Samples
ROM_LOAD( "an1voice.7c", 0x000000, 0x200000, CRC(d2bfa453) SHA1(6b7d6bb4d65290d8fd3df5d12b41ae7dce5f3f1c) )
diff --git a/src/mame/machine/namcond1.cpp b/src/mame/machine/namcond1.cpp
index 0c5fd6d7fab..891c08d23f7 100644
--- a/src/mame/machine/namcond1.cpp
+++ b/src/mame/machine/namcond1.cpp
@@ -85,7 +85,7 @@ WRITE16_MEMBER(namcond1_state::cuskey_w)
case (0x0c>>1):
m_ygv608->set_gfxbank((data & 0x0002) >> 1); // i think
- // should mark tilemaps dirty but i think they already are
+ // bit 0 used in abcheck
break;
default :
diff --git a/src/mame/video/ygv608.cpp b/src/mame/video/ygv608.cpp
index 37faa9457bf..9198e5c3054 100644
--- a/src/mame/video/ygv608.cpp
+++ b/src/mame/video/ygv608.cpp
@@ -364,6 +364,13 @@ GFXDECODE_END
// we use decimals here to match documentation
static ADDRESS_MAP_START( regs_map, AS_IO, 8, ygv608_device )
+
+ // address pointers
+ AM_RANGE( 3, 3) AM_READWRITE(sprite_address_r,sprite_address_w)
+ AM_RANGE( 4, 4) AM_READWRITE(scroll_address_r,scroll_address_w)
+ AM_RANGE( 5, 5) AM_READWRITE(palette_address_r,palette_address_w)
+ AM_RANGE( 6, 6) AM_READWRITE(sprite_bank_r,sprite_bank_w)
+
// interrupt section
AM_RANGE(14, 14) AM_READWRITE(irq_mask_r,irq_mask_w)
AM_RANGE(15, 16) AM_READWRITE(irq_ctrl_r,irq_ctrl_w)
@@ -527,6 +534,7 @@ void ygv608_device::device_timer(emu_timer &timer, device_timer_id id, int param
void ygv608_device::set_gfxbank(uint8_t gfxbank)
{
m_namcond1_gfxbank = gfxbank;
+ m_tilemap_resize = 1;
}
@@ -984,7 +992,7 @@ void ygv608_device::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect
switch( size ) {
case SZ_8X8 :
- code = ( (int)m_regs.s.sba << 8 ) | (int)sa->sn;
+ code = ( (int)m_sprite_bank << 8 ) | (int)sa->sn;
if (spf != 0)
color = ( code >> ( (spf - 1) * 2 ) ) & 0x0f;
if( code >= layout_total(GFX_8X8_4BIT) ) {
@@ -1014,7 +1022,7 @@ void ygv608_device::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect
break;
case SZ_16X16 :
- code = ( ( (int)m_regs.s.sba & 0xfc ) << 6 ) | (int)sa->sn;
+ code = ( ( (int)m_sprite_bank & 0xfc ) << 6 ) | (int)sa->sn;
if (spf != 0)
color = ( code >> (spf * 2) ) & 0x0f;
if( code >= layout_total(GFX_16X16_4BIT) ) {
@@ -1044,7 +1052,7 @@ void ygv608_device::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect
break;
case SZ_32X32 :
- code = ( ( (int)m_regs.s.sba & 0xf0 ) << 4 ) | (int)sa->sn;
+ code = ( ( (int)m_sprite_bank & 0xf0 ) << 4 ) | (int)sa->sn;
if (spf != 0)
color = ( code >> ( (spf + 1) * 2 ) ) & 0x0f;
if( code >= layout_total(GFX_32X32_4BIT) ) {
@@ -1074,7 +1082,7 @@ void ygv608_device::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect
break;
case SZ_64X64 :
- code = ( ( (int)m_regs.s.sba & 0xc0 ) << 2 ) | (int)sa->sn;
+ code = ( ( (int)m_sprite_bank & 0xc0 ) << 2 ) | (int)sa->sn;
if (spf != 0)
color = ( code >> ( (spf + 1) * 2 ) ) & 0x0f;
if( code >= layout_total(GFX_64X64_4BIT) ) {
@@ -1405,10 +1413,10 @@ READ8_MEMBER( ygv608_device::pattern_name_table_r )
// P#1R - sprite data port
READ8_MEMBER( ygv608_device::sprite_data_r )
{
- uint8_t res = m_sprite_attribute_table.b[m_regs.s.saa];
+ uint8_t res = m_sprite_attribute_table.b[m_sprite_address];
if (m_regs.s.r2 & r2_saar)
- m_regs.s.saa++;
+ m_sprite_address++;
return res;
}
@@ -1416,13 +1424,13 @@ READ8_MEMBER( ygv608_device::sprite_data_r )
// 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];
+ uint8_t res = m_scroll_data_table[(m_regs.s.r2 & r2_b_a) >> 4][m_scroll_address];
if (m_regs.s.r2 & r2_scar)
{
- m_regs.s.sca++;
+ m_scroll_address++;
/* handle wrap to next plane */
- if (m_regs.s.sca == 0)
+ if (m_scroll_address == 0)
m_regs.s.r2 ^= r2_b_a;
}
@@ -1432,14 +1440,14 @@ READ8_MEMBER( ygv608_device::scroll_data_r )
// P#3 - color palette data port
READ8_MEMBER( ygv608_device::palette_data_r )
{
- uint8_t res = m_colour_palette[m_regs.s.cc][m_color_state_r];
+ uint8_t res = m_colour_palette[m_palette_address][m_color_state_r];
if( ++m_color_state_r == 3 )
{
m_color_state_r = 0;
if( m_regs.s.r2 & r2_cpar)
- m_regs.s.cc++;
+ m_palette_address++;
}
return res;
@@ -1579,22 +1587,22 @@ WRITE8_MEMBER(ygv608_device::pattern_name_table_w)
// P#1W - sprite data port
WRITE8_MEMBER( ygv608_device::sprite_data_w )
{
- m_sprite_attribute_table.b[m_regs.s.saa] = data;
+ m_sprite_attribute_table.b[m_sprite_address] = data;
if( m_regs.s.r2 & r2_saaw)
- m_regs.s.saa++;
+ m_sprite_address++;
}
// 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;
+ m_scroll_data_table[(m_regs.s.r2 & r2_b_a) >> 4][m_scroll_address] = data;
if (m_regs.s.r2 & r2_scaw)
{
- m_regs.s.sca++;
+ m_scroll_address++;
/* handle wrap to next plane */
- if (m_regs.s.sca == 0)
+ if (m_scroll_address == 0)
m_regs.s.r2 ^= r2_b_a;
}
}
@@ -1602,17 +1610,17 @@ WRITE8_MEMBER( ygv608_device::scroll_data_w )
// P#3W - colour palette data port
WRITE8_MEMBER( ygv608_device::palette_data_w )
{
- m_colour_palette[m_regs.s.cc][m_color_state_w] = data;
+ m_colour_palette[m_palette_address][m_color_state_w] = data;
if (++m_color_state_w == 3)
{
m_color_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] ));
+ palette().set_pen_color(m_palette_address,
+ pal6bit( m_colour_palette[m_palette_address][0] ),
+ pal6bit( m_colour_palette[m_palette_address][1] ),
+ pal6bit( m_colour_palette[m_palette_address][2] ));
if (m_regs.s.r2 & r2_cpaw)
- m_regs.s.cc++;
+ m_palette_address++;
}
}
@@ -1748,7 +1756,7 @@ void ygv608_device::HandleRomTransfers(uint8_t type)
/* sprite attribute table */
if( m_ports.s.ts ) {
- int dest = (int)m_regs.s.saa;
+ int dest = (int)m_sprite_address;
/* fudge a transfer for now... */
for( i=0; i<bytes; i++ ) {
@@ -1768,6 +1776,55 @@ void ygv608_device::HandleRomTransfers(uint8_t type)
*
****************************************/
+// R#3R - sprite attribute table access pointer
+READ8_MEMBER( ygv608_device::sprite_address_r )
+{
+ return m_sprite_address;
+}
+
+// R#3W - sprite attribute table access pointer
+WRITE8_MEMBER( ygv608_device::sprite_address_w )
+{
+ m_sprite_address = data;
+}
+
+
+ // R#4R - scroll table access pointer
+READ8_MEMBER( ygv608_device::scroll_address_r )
+{
+ return m_scroll_address;
+}
+
+ // R#4W - scroll table access pointer
+WRITE8_MEMBER( ygv608_device::scroll_address_w )
+{
+ m_scroll_address = data;
+}
+
+ // R#5R - color palette access pointer
+READ8_MEMBER( ygv608_device::palette_address_r )
+{
+ return m_palette_address;
+}
+
+ // R#5W - color palette access pointer
+WRITE8_MEMBER( ygv608_device::palette_address_w )
+{
+ m_palette_address = data;
+}
+
+// R#6R - sprite generator base address
+READ8_MEMBER( ygv608_device::sprite_bank_r )
+{
+ return m_sprite_bank;
+}
+
+// R#6W - sprite generator base address
+WRITE8_MEMBER( ygv608_device::sprite_bank_w )
+{
+ m_sprite_bank = data;
+}
+
// R#14R interrupt mask control
READ8_MEMBER( ygv608_device::irq_mask_r )
{
@@ -2086,11 +2143,7 @@ void ygv608_device::SetPostShortcuts(int reg )
}
break;
- case 6:
-#if 0
- logerror( "SBA = $%08X\n", (int)m_regs.s.sba << 13 );
-#endif
- break;
+
case 7:
m_na8_mask = ((m_regs.s.r7 & r7_flip) ? 0x03 : 0x0f );
@@ -2188,7 +2241,7 @@ void ygv608_device::ShowYGV608Registers()
logerror(
"\tR#03: $%02X : SAA($%02X)\n",
m_regs.b[3],
- m_regs.s.saa );
+ m_sprite_address );
logerror(
"\tR#04: $%02X : SCA($%02X)\n",
@@ -2203,7 +2256,7 @@ void ygv608_device::ShowYGV608Registers()
logerror(
"\tR#06: $%02X : SBA($%02X)\n",
m_regs.b[6],
- m_regs.s.sba );
+ m_sprite_bank );
logerror(
"\tR#07: $%02X : DSPE(%d),MD(%d),ZRON(%d),FLIP(%d),DCKM(%d)\n",
diff --git a/src/mame/video/ygv608.h b/src/mame/video/ygv608.h
index 7b027971e9d..7a4cac5de22 100644
--- a/src/mame/video/ygv608.h
+++ b/src/mame/video/ygv608.h
@@ -42,6 +42,14 @@ public:
DECLARE_WRITE8_MEMBER(system_control_w);
// register section
+ DECLARE_READ8_MEMBER(sprite_address_r);
+ DECLARE_WRITE8_MEMBER(sprite_address_w);
+ DECLARE_READ8_MEMBER(scroll_address_r);
+ DECLARE_WRITE8_MEMBER(scroll_address_w);
+ DECLARE_READ8_MEMBER(palette_address_r);
+ DECLARE_WRITE8_MEMBER(palette_address_w);
+ DECLARE_READ8_MEMBER(sprite_bank_r);
+ DECLARE_WRITE8_MEMBER(sprite_bank_w);
DECLARE_READ8_MEMBER(irq_mask_r);
DECLARE_WRITE8_MEMBER(irq_mask_w);
DECLARE_READ8_MEMBER(irq_ctrl_r);
@@ -255,6 +263,11 @@ private:
int m_raster_irq_hpos; /**< IH: horizontal position where raster irq occurs x 32 */
int m_raster_irq_vpos; /**< IV: vertical position where raster irq occurs */
bool m_raster_irq_mode; /**< FPM: if 1 vertical position becomes invalid for raster irqs (irqs occur for every line) */
+
+ uint8_t m_scroll_address; /**< SCA: scroll table access pointer */
+ uint8_t m_palette_address; /**< CC: color palette access pointer */
+ uint8_t m_sprite_address; /**< SAA: sprite attribute table access pointer */
+ uint8_t m_sprite_bank; /**< SBA: sprite generator base address (MA20 to MA13) */
// screen section
devcb_write_line m_vblank_handler;
@@ -263,6 +276,11 @@ private:
emu_timer *m_vblank_timer;
emu_timer *m_raster_timer;
+ void screen_configure(); /**< Adjust screen parameters based off CRTC ones */
+ attotime raster_sync_offset(); /**< adjust based off raster & CRTC parameters */
+ void vblank_irq_check();
+ void raster_irq_check();
+
enum
{
VBLANK_TIMER,
@@ -302,11 +320,7 @@ private:
// for raw to ROZ conversion
uint32_t roz_convert_raw24(uint32_t *raw_reg, uint8_t offset, uint8_t data);
uint32_t roz_convert_raw16(uint16_t *raw_reg, uint8_t offset, uint8_t data);
-
- void screen_configure(); /**< Adjust screen parameters based off CRTC ones */
- attotime raster_sync_offset(); /**< adjust based off raster & CRTC parameters */
- void vblank_irq_check();
- void raster_irq_check();
+
};
// device type definition