mirror of
https://github.com/holub/mame
synced 2025-10-06 17:08:28 +03:00
ygv608.cpp: rewritten built in RAM access control (nw)
This commit is contained in:
parent
c4b230dcb9
commit
3b7ab3b71e
@ -46,6 +46,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "video/ygv608.h"
|
#include "video/ygv608.h"
|
||||||
#include "screen.h"
|
#include "screen.h"
|
||||||
@ -370,6 +371,8 @@ static ADDRESS_MAP_START( regs_map, AS_IO, 8, ygv608_device )
|
|||||||
AM_RANGE( 0, 0) AM_READWRITE(pattern_name_table_y_r,pattern_name_table_y_w)
|
AM_RANGE( 0, 0) AM_READWRITE(pattern_name_table_y_r,pattern_name_table_y_w)
|
||||||
AM_RANGE( 1, 1) AM_READWRITE(pattern_name_table_x_r,pattern_name_table_x_w)
|
AM_RANGE( 1, 1) AM_READWRITE(pattern_name_table_x_r,pattern_name_table_x_w)
|
||||||
|
|
||||||
|
AM_RANGE( 2, 2) AM_READWRITE(ram_access_ctrl_r,ram_access_ctrl_w)
|
||||||
|
|
||||||
AM_RANGE( 3, 3) AM_READWRITE(sprite_address_r,sprite_address_w)
|
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( 4, 4) AM_READWRITE(scroll_address_r,scroll_address_w)
|
||||||
AM_RANGE( 5, 5) AM_READWRITE(palette_address_r,palette_address_w)
|
AM_RANGE( 5, 5) AM_READWRITE(palette_address_r,palette_address_w)
|
||||||
@ -952,6 +955,7 @@ void ygv608_device::register_state_save()
|
|||||||
// save_item(NAME(register_state_save));
|
// save_item(NAME(register_state_save));
|
||||||
save_item(NAME(m_color_state_r));
|
save_item(NAME(m_color_state_r));
|
||||||
save_item(NAME(m_color_state_w));
|
save_item(NAME(m_color_state_w));
|
||||||
|
// TODO: register save for the newly added variables
|
||||||
|
|
||||||
machine().save().register_postload(save_prepost_delegate(FUNC(ygv608_device::postload), this));
|
machine().save().register_postload(save_prepost_delegate(FUNC(ygv608_device::postload), this));
|
||||||
}
|
}
|
||||||
@ -1392,7 +1396,7 @@ READ8_MEMBER( ygv608_device::sprite_data_r )
|
|||||||
{
|
{
|
||||||
uint8_t res = m_sprite_attribute_table.b[m_sprite_address];
|
uint8_t res = m_sprite_attribute_table.b[m_sprite_address];
|
||||||
|
|
||||||
if (m_regs.s.r2 & r2_saar)
|
if (m_saar == true)
|
||||||
m_sprite_address++;
|
m_sprite_address++;
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
@ -1401,14 +1405,14 @@ READ8_MEMBER( ygv608_device::sprite_data_r )
|
|||||||
// P#2R - scroll data port
|
// P#2R - scroll data port
|
||||||
READ8_MEMBER( ygv608_device::scroll_data_r )
|
READ8_MEMBER( ygv608_device::scroll_data_r )
|
||||||
{
|
{
|
||||||
uint8_t res = m_scroll_data_table[(m_regs.s.r2 & r2_b_a) >> 4][m_scroll_address];
|
uint8_t res = m_scroll_data_table[m_ba_plane_select][m_scroll_address];
|
||||||
|
|
||||||
if (m_regs.s.r2 & r2_scar)
|
if (m_scar == true)
|
||||||
{
|
{
|
||||||
m_scroll_address++;
|
m_scroll_address++;
|
||||||
/* handle wrap to next plane */
|
/* handle wrap to next plane */
|
||||||
if (m_scroll_address == 0)
|
if (m_scroll_address == 0)
|
||||||
m_regs.s.r2 ^= r2_b_a;
|
m_ba_plane_select ^= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
@ -1423,7 +1427,7 @@ READ8_MEMBER( ygv608_device::palette_data_r )
|
|||||||
{
|
{
|
||||||
m_color_state_r = 0;
|
m_color_state_r = 0;
|
||||||
|
|
||||||
if( m_regs.s.r2 & r2_cpar)
|
if(m_cpar == true)
|
||||||
m_palette_address++;
|
m_palette_address++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1569,21 +1573,21 @@ WRITE8_MEMBER( ygv608_device::sprite_data_w )
|
|||||||
{
|
{
|
||||||
m_sprite_attribute_table.b[m_sprite_address] = data;
|
m_sprite_attribute_table.b[m_sprite_address] = data;
|
||||||
|
|
||||||
if( m_regs.s.r2 & r2_saaw)
|
if( m_saaw == true)
|
||||||
m_sprite_address++;
|
m_sprite_address++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// P#2W - scroll data port
|
// P#2W - scroll data port
|
||||||
WRITE8_MEMBER( ygv608_device::scroll_data_w )
|
WRITE8_MEMBER( ygv608_device::scroll_data_w )
|
||||||
{
|
{
|
||||||
m_scroll_data_table[(m_regs.s.r2 & r2_b_a) >> 4][m_scroll_address] = data;
|
m_scroll_data_table[m_ba_plane_select][m_scroll_address] = data;
|
||||||
|
|
||||||
if (m_regs.s.r2 & r2_scaw)
|
if (m_scaw == true)
|
||||||
{
|
{
|
||||||
m_scroll_address++;
|
m_scroll_address++;
|
||||||
/* handle wrap to next plane */
|
/* handle wrap to next plane */
|
||||||
if (m_scroll_address == 0)
|
if (m_scroll_address == 0)
|
||||||
m_regs.s.r2 ^= r2_b_a;
|
m_ba_plane_select ^= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1601,7 +1605,7 @@ WRITE8_MEMBER( ygv608_device::palette_data_w )
|
|||||||
pal6bit( m_colour_palette[m_palette_address][1] ),
|
pal6bit( m_colour_palette[m_palette_address][1] ),
|
||||||
pal6bit( m_colour_palette[m_palette_address][2] ));
|
pal6bit( m_colour_palette[m_palette_address][2] ));
|
||||||
|
|
||||||
if (m_regs.s.r2 & r2_cpaw)
|
if(m_cpaw == true)
|
||||||
m_palette_address++;
|
m_palette_address++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1797,6 +1801,35 @@ WRITE8_MEMBER( ygv608_device::pattern_name_table_x_w )
|
|||||||
logerror("%s: Warning both X/Y Tiles autoinc enabled!\n",this->tag());
|
logerror("%s: Warning both X/Y Tiles autoinc enabled!\n",this->tag());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// R#2R - Built in RAM access control
|
||||||
|
/***
|
||||||
|
* x--- ---- CPAW Address autoincrements after color palette write
|
||||||
|
* -x-- ---- CPAR Address autoincrements after color palette read
|
||||||
|
* ---x ---- B/(A) P#2 plane access select (1=B Plane)
|
||||||
|
* ---- x--- SCAW Address autoincrements after scroll data write
|
||||||
|
* ---- -x-- SCAR Address autoincrements after scroll data read
|
||||||
|
* ---- --x- SAAW Address autoincrements after sprite attribute table write
|
||||||
|
* ---- ---x SAAR Address autoincrements after sprite attribute table read
|
||||||
|
***/
|
||||||
|
READ8_MEMBER( ygv608_device::ram_access_ctrl_r )
|
||||||
|
{
|
||||||
|
return (m_cpaw<<7) | (m_cpar<<6) |
|
||||||
|
(m_ba_plane_select<<4) |
|
||||||
|
(m_scaw<<3) | (m_scar<<2) | (m_saaw<<1) | (m_saar<<0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// R#2W - Built in RAM access control
|
||||||
|
WRITE8_MEMBER( ygv608_device::ram_access_ctrl_w )
|
||||||
|
{
|
||||||
|
m_saar = BIT(data,0);
|
||||||
|
m_saaw = BIT(data,1);
|
||||||
|
m_scar = BIT(data,2);
|
||||||
|
m_scaw = BIT(data,3);
|
||||||
|
m_ba_plane_select = BIT(data,4);
|
||||||
|
m_cpar = BIT(data,6);
|
||||||
|
m_cpaw = BIT(data,7);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// R#3R - sprite attribute table access pointer
|
// R#3R - sprite attribute table access pointer
|
||||||
READ8_MEMBER( ygv608_device::sprite_address_r )
|
READ8_MEMBER( ygv608_device::sprite_address_r )
|
||||||
|
@ -46,6 +46,8 @@ public:
|
|||||||
DECLARE_WRITE8_MEMBER(pattern_name_table_x_w);
|
DECLARE_WRITE8_MEMBER(pattern_name_table_x_w);
|
||||||
DECLARE_READ8_MEMBER(pattern_name_table_y_r);
|
DECLARE_READ8_MEMBER(pattern_name_table_y_r);
|
||||||
DECLARE_WRITE8_MEMBER(pattern_name_table_y_w);
|
DECLARE_WRITE8_MEMBER(pattern_name_table_y_w);
|
||||||
|
DECLARE_READ8_MEMBER(ram_access_ctrl_r);
|
||||||
|
DECLARE_WRITE8_MEMBER(ram_access_ctrl_w);
|
||||||
DECLARE_READ8_MEMBER(sprite_address_r);
|
DECLARE_READ8_MEMBER(sprite_address_r);
|
||||||
DECLARE_WRITE8_MEMBER(sprite_address_w);
|
DECLARE_WRITE8_MEMBER(sprite_address_w);
|
||||||
DECLARE_READ8_MEMBER(scroll_address_r);
|
DECLARE_READ8_MEMBER(scroll_address_r);
|
||||||
@ -288,6 +290,14 @@ private:
|
|||||||
uint8_t m_sprite_aux_reg; /**< SPA: auxiliary bits of sprite attribute table */
|
uint8_t m_sprite_aux_reg; /**< SPA: auxiliary bits of sprite attribute table */
|
||||||
uint8_t m_border_color; /**< BDC: border color */
|
uint8_t m_border_color; /**< BDC: border color */
|
||||||
|
|
||||||
|
bool m_saar; /**< SAAR: Address autoinc after reading sprite attribute table */
|
||||||
|
bool m_saaw; /**< SAAR: Address autoinc after writing sprite attribute table */
|
||||||
|
bool m_scar; /**< SAAR: Address autoinc after reading scroll data table */
|
||||||
|
bool m_scaw; /**< SAAR: Address autoinc after writing scroll data table */
|
||||||
|
bool m_cpar; /**< SAAR: Address autoinc after reading color palette */
|
||||||
|
bool m_cpaw; /**< CPAW: Address autoinc after writing color palette */
|
||||||
|
bool m_ba_plane_select; /**< B/(A) P#2 gains access to scroll data table in A/B plane */
|
||||||
|
|
||||||
// screen section
|
// screen section
|
||||||
devcb_write_line m_vblank_handler;
|
devcb_write_line m_vblank_handler;
|
||||||
devcb_write_line m_raster_handler;
|
devcb_write_line m_raster_handler;
|
||||||
|
Loading…
Reference in New Issue
Block a user