ygv608.cpp: kill legacy ports variables (nw)

This commit is contained in:
angelosa 2017-09-28 01:42:58 +02:00
parent 5c712b4083
commit d77fd4db55
2 changed files with 31 additions and 57 deletions

View File

@ -54,28 +54,6 @@
#include "screen.h"
// Fundamental constants
enum {
p5_rwai = 0x80, // increment register select on reads
p5_rrai = 0x40, // increment register select on writes
p5_rn = 0x3f, // register select
// p6_res6 = 0xe0,
p6_fp = 0x10, // position detection flag
p6_fv = 0x08, // vertical border interval flag
p6_fc = 0x04,
p6_hb = 0x02, // horizontal blanking flag?
p6_vb = 0x01, // vertical blanking flag?
// p7_res7 = 0xc0,
p7_tr = 0x20,
p7_tc = 0x10,
p7_tl = 0x08,
p7_ts = 0x04,
p7_tn = 0x02,
p7_sr = 0x01,
};
// TODO: move these into enums
// R#7(md)
@ -322,7 +300,7 @@ DEVICE_ADDRESS_MAP_START( port_map, 8, ygv608_device )
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(0x05, 0x05) AM_READNOP 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
@ -347,7 +325,7 @@ ygv608_device::ygv608_device( const machine_config &mconfig, const char *tag, de
//-------------------------------------------------
void ygv608_device::device_start()
{
memset(&m_ports, 0, sizeof(m_ports));
// memset(&m_ports, 0, sizeof(m_ports));
// memset(&m_regs, 0, sizeof(m_regs));
memset(&m_pattern_name_table, 0, sizeof(m_pattern_name_table));
memset(&m_sprite_attribute_table, 0, sizeof(m_sprite_attribute_table));
@ -870,7 +848,7 @@ void ygv608_device::postload()
void ygv608_device::register_state_save()
{
save_item(NAME(m_ports.b));
// save_item(NAME(m_ports.b));
// save_item(NAME(m_regs.b));
save_item(NAME(m_pattern_name_table));
save_item(NAME(m_sprite_attribute_table.b));
@ -1254,14 +1232,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_ba_plane_select][m_scroll_address];
uint8_t res = m_scroll_data_table[m_ba_plane_scroll_select][m_scroll_address];
if (m_scar == true)
{
m_scroll_address++;
/* handle wrap to next plane */
if (m_scroll_address == 0)
m_ba_plane_select ^= 1;
m_ba_plane_scroll_select ^= 1;
}
return res;
@ -1324,7 +1302,7 @@ READ8_MEMBER( ygv608_device::status_port_r )
// P#7R - system control port
READ8_MEMBER( ygv608_device::system_control_r )
{
return (uint8_t)(m_ports.b[7]);
return m_dma_status;
}
// P#0W - pattern name table data write
@ -1427,14 +1405,14 @@ WRITE8_MEMBER( ygv608_device::sprite_data_w )
// P#2W - scroll data port
WRITE8_MEMBER( ygv608_device::scroll_data_w )
{
m_scroll_data_table[m_ba_plane_select][m_scroll_address] = data;
m_scroll_data_table[m_ba_plane_scroll_select][m_scroll_address] = data;
if (m_scaw == true)
{
m_scroll_address++;
/* handle wrap to next plane */
if (m_scroll_address == 0)
m_ba_plane_select ^= 1;
m_ba_plane_scroll_select ^= 1;
}
}
@ -1505,21 +1483,27 @@ WRITE8_MEMBER( ygv608_device::status_port_w )
// P#7W - system control port
WRITE8_MEMBER( ygv608_device::system_control_w )
{
m_ports.b[7] = data;
if (m_ports.b[7] & 0x3e)
m_dma_status = data;
if (m_dma_status & 0x3e)
HandleRomTransfers(data & 0x3e);
if (m_ports.b[7] & 0x01)
HandleYGV608Reset();
if (m_dma_status & 0x01)
HandleReset();
}
// TODO: actual timing of this
void ygv608_device::HandleYGV608Reset()
void ygv608_device::HandleReset()
{
int i;
/* Clear ports #0-7 */
memset( &m_ports.b[0], 0, 8 );
//memset( &m_ports.b[0], 0, 8 );
// most likely variables to be reset here from ports, there might be more
pattern_name_base_w = 0;
pattern_name_base_r = 0;
m_register_address = 0;
m_register_autoinc_r = false;
m_register_autoinc_w = false;
/* Clear registers #0-38, #47-49 */
for(i=0;i<39;i++)
m_iospace->write_byte(i, 0x00);
@ -1620,6 +1604,7 @@ WRITE8_MEMBER( ygv608_device::pattern_name_table_y_w )
m_ytile_ptr &= m_page_y -1;
m_ytile_autoinc = BIT(data,7);
m_plane_select_access = BIT(data,6);
// TODO: done by Dig Dug Original
if(m_ytile_autoinc == true && m_xtile_autoinc == true)
logerror("%s: Warning both X/Y Tiles autoinc enabled!\n",this->tag());
}
@ -1639,6 +1624,7 @@ WRITE8_MEMBER( ygv608_device::pattern_name_table_x_w )
// xTile, m_page_x );
m_xtile_ptr &= m_page_x -1;
m_xtile_autoinc = BIT(data,7);
// TODO: done by Dig Dug Original
if(m_ytile_autoinc == true && m_xtile_autoinc == true)
logerror("%s: Warning both X/Y Tiles autoinc enabled!\n",this->tag());
}
@ -1656,7 +1642,7 @@ WRITE8_MEMBER( ygv608_device::pattern_name_table_x_w )
READ8_MEMBER( ygv608_device::ram_access_ctrl_r )
{
return (m_cpaw<<7) | (m_cpar<<6) |
(m_ba_plane_select<<4) |
(m_ba_plane_scroll_select<<4) |
(m_scaw<<3) | (m_scar<<2) | (m_saaw<<1) | (m_saar<<0);
}
@ -1667,7 +1653,7 @@ WRITE8_MEMBER( ygv608_device::ram_access_ctrl_w )
m_saaw = BIT(data,1);
m_scar = BIT(data,2);
m_scaw = BIT(data,3);
m_ba_plane_select = BIT(data,4);
m_ba_plane_scroll_select = BIT(data,4);
m_cpar = BIT(data,6);
m_cpaw = BIT(data,7);
}

View File

@ -109,17 +109,6 @@ private:
const address_space_config m_io_space_config;
static constexpr unsigned SPRITE_ATTR_TABLE_SIZE = 256;
struct YGV_PORTS {
uint8_t na; // P#0 - pattern name table data port (read/write)
uint8_t p1; // P#1 - sprite data port (read/write)
uint8_t p2; // P#2 - scroll data port (read/write)
uint8_t p3; // P#3 - colour palette data port (read/write)
uint8_t p4; // P#4 - register data port (read/write)
uint8_t p5; // P#5 - register select port (write only)
uint8_t p6; // P#6 - status port (read/write)
uint8_t p7; // P#7 - system control port (read/write)
};
static constexpr unsigned MAX_SPRITES = SPRITE_ATTR_TABLE_SIZE >> 2;
struct SPRITE_ATTR {
@ -149,13 +138,9 @@ private:
tilemap_t *m_tilemap_B;
bitmap_ind16 m_work_bitmap;
void HandleYGV608Reset();
void HandleReset();
void HandleRomTransfers(uint8_t type);
union {
uint8_t b[8];
YGV_PORTS s;
} m_ports;
/*
* Built in ram
@ -181,6 +166,7 @@ private:
uint8_t m_na8_mask; // mask on/off na11/9:8
int m_col_shift; // shift in scroll table column index
// base address shortcuts
uint32_t m_base_addr[2][8];
uint32_t m_base_y_shift; // for extracting pattern y coord 'base'
@ -194,10 +180,12 @@ private:
int pattern_name_base_r,pattern_name_base_w; /* pattern name table base address */
// === new variable handling starts here ===
uint8_t m_screen_status; /**< port #6: status port r/w */
uint8_t m_dma_status; /**< port #7: system control port r/w */
uint8_t m_register_address; /**< RN: Register address select */
bool m_register_autoinc_r; /**< RRAI: Register address auto-increment on read */
bool m_register_autoinc_w; /**< RWAI: Register address auto-increment on write */
uint8_t m_screen_status; /**< CD: status port r/w */
bool m_raster_irq_mask; /**< IEP: raster irq mask (INT1 occurs if 1) */
bool m_vblank_irq_mask; /**< IEV: vblank irq mask (INT0 occurs if 1) */
@ -228,7 +216,7 @@ private:
bool m_scaw; /**< SCAW: Address autoinc after writing scroll data table */
bool m_cpar; /**< CPAR: 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 */
bool m_ba_plane_scroll_select; /**< B/(A) P#2 gains access to scroll data table in A/B plane */
bool m_dspe; /**< DSPE: display permission of pattern plane(s) (screen blanked if 0) */
uint8_t m_md; /**< MDx: mode for pattern planes */