mirror of
https://github.com/holub/mame
synced 2025-04-22 00:11:58 +03:00
ygv608.cpp: kill legacy ports variables (nw)
This commit is contained in:
parent
5c712b4083
commit
d77fd4db55
@ -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);
|
||||
}
|
||||
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user