diff options
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 |
commit | a1a466a5f97cf3eecb12ac2869b09eb313ddec4e (patch) | |
tree | 5dd94d83ea1ceb486abd768761ed0e07adfb4849 | |
parent | 1f7d4514b57c4d173557ca9334f3da54c9db8830 (diff) |
ygv608.cpp: address pointer clean-ups (nw)
-rw-r--r-- | src/mame/drivers/namcond1.cpp | 2 | ||||
-rw-r--r-- | src/mame/machine/namcond1.cpp | 2 | ||||
-rw-r--r-- | src/mame/video/ygv608.cpp | 113 | ||||
-rw-r--r-- | src/mame/video/ygv608.h | 24 |
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 |