mirror of
https://github.com/holub/mame
synced 2025-04-22 08:22:15 +03:00
ygv608.cpp: rewritten built in RAM access control (nw)
This commit is contained in:
parent
c4b230dcb9
commit
3b7ab3b71e
@ -45,7 +45,8 @@
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#include "emu.h"
|
||||
#include "video/ygv608.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( 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( 4, 4) AM_READWRITE(scroll_address_r,scroll_address_w)
|
||||
AM_RANGE( 5, 5) AM_READWRITE(palette_address_r,palette_address_w)
|
||||
@ -952,7 +955,8 @@ void ygv608_device::register_state_save()
|
||||
// save_item(NAME(register_state_save));
|
||||
save_item(NAME(m_color_state_r));
|
||||
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));
|
||||
}
|
||||
|
||||
@ -1392,7 +1396,7 @@ READ8_MEMBER( ygv608_device::sprite_data_r )
|
||||
{
|
||||
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++;
|
||||
|
||||
return res;
|
||||
@ -1401,14 +1405,14 @@ 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_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++;
|
||||
/* handle wrap to next plane */
|
||||
if (m_scroll_address == 0)
|
||||
m_regs.s.r2 ^= r2_b_a;
|
||||
m_ba_plane_select ^= 1;
|
||||
}
|
||||
|
||||
return res;
|
||||
@ -1423,7 +1427,7 @@ READ8_MEMBER( ygv608_device::palette_data_r )
|
||||
{
|
||||
m_color_state_r = 0;
|
||||
|
||||
if( m_regs.s.r2 & r2_cpar)
|
||||
if(m_cpar == true)
|
||||
m_palette_address++;
|
||||
}
|
||||
|
||||
@ -1569,21 +1573,21 @@ WRITE8_MEMBER( ygv608_device::sprite_data_w )
|
||||
{
|
||||
m_sprite_attribute_table.b[m_sprite_address] = data;
|
||||
|
||||
if( m_regs.s.r2 & r2_saaw)
|
||||
if( m_saaw == true)
|
||||
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_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++;
|
||||
/* handle wrap to next plane */
|
||||
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][2] ));
|
||||
|
||||
if (m_regs.s.r2 & r2_cpaw)
|
||||
if(m_cpaw == true)
|
||||
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());
|
||||
}
|
||||
|
||||
// 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
|
||||
READ8_MEMBER( ygv608_device::sprite_address_r )
|
||||
|
@ -46,6 +46,8 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(pattern_name_table_x_w);
|
||||
DECLARE_READ8_MEMBER(pattern_name_table_y_r);
|
||||
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_WRITE8_MEMBER(sprite_address_w);
|
||||
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_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
|
||||
devcb_write_line m_vblank_handler;
|
||||
devcb_write_line m_raster_handler;
|
||||
|
Loading…
Reference in New Issue
Block a user