From 4c62cca945ef541420ca0362386147cd2a6da49d Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Wed, 24 Oct 2018 23:02:59 +0200 Subject: [PATCH] ygv608.cpp: updated save state support, fixed namcond1.cpp games save state regression (nw) --- src/mame/video/ygv608.cpp | 145 ++++++++++++++++++++++++++++++-------- src/mame/video/ygv608.h | 4 +- 2 files changed, 118 insertions(+), 31 deletions(-) diff --git a/src/mame/video/ygv608.cpp b/src/mame/video/ygv608.cpp index 49151855927..4bfcfa59064 100644 --- a/src/mame/video/ygv608.cpp +++ b/src/mame/video/ygv608.cpp @@ -888,10 +888,97 @@ void ygv608_device::register_state_save() save_item(NAME(m_sprite_attribute_table.b)); save_item(NAME(m_scroll_data_table)); save_item(NAME(m_colour_palette)); -// 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 + save_item(NAME(m_bits16)); + save_item(NAME(m_page_x)); + save_item(NAME(m_page_y)); + save_item(NAME(m_pny_shift)); + save_item(NAME(m_na8_mask)); + save_item(NAME(m_col_shift)); + save_item(NAME(m_base_addr)); + save_item(NAME(m_base_y_shift)); + save_item(NAME(m_screen_resize)); + save_item(NAME(m_tilemap_resize)); + save_item(NAME(m_p0_state)); + save_item(NAME(m_pattern_name_base_r)); + save_item(NAME(m_pattern_name_base_w)); + save_item(NAME(m_screen_status)); + save_item(NAME(m_dma_status)); + save_item(NAME(m_register_address)); + save_item(NAME(m_register_autoinc_r)); + save_item(NAME(m_register_autoinc_w)); + save_item(NAME(m_raster_irq_mask)); + save_item(NAME(m_vblank_irq_mask)); + save_item(NAME(m_raster_irq_hpos)); + save_item(NAME(m_raster_irq_vpos)); + save_item(NAME(m_raster_irq_mode)); + save_item(NAME(m_scroll_address)); + save_item(NAME(m_palette_address)); + save_item(NAME(m_sprite_address)); + save_item(NAME(m_sprite_bank)); + save_item(NAME(m_xtile_ptr)); + save_item(NAME(m_ytile_ptr)); + save_item(NAME(m_xtile_autoinc)); + save_item(NAME(m_ytile_autoinc)); + save_item(NAME(m_plane_select_access)); + save_item(NAME(m_mosaic_aplane)); + save_item(NAME(m_mosaic_bplane)); + save_item(NAME(m_sprite_disable)); + save_item(NAME(m_sprite_aux_mode)); + save_item(NAME(m_sprite_aux_reg)); + save_item(NAME(m_border_color)); + save_item(NAME(m_saar)); + save_item(NAME(m_saaw)); + save_item(NAME(m_scar)); + save_item(NAME(m_scaw)); + save_item(NAME(m_cpar)); + save_item(NAME(m_cpaw)); + save_item(NAME(m_ba_plane_scroll_select)); + save_item(NAME(m_dspe)); + save_item(NAME(m_md)); + save_item(NAME(m_zron)); + save_item(NAME(m_flip)); + save_item(NAME(m_dckm)); + save_item(NAME(m_page_size)); + save_item(NAME(m_h_display_size)); + save_item(NAME(m_v_display_size)); + save_item(NAME(m_roz_wrap_disable)); + save_item(NAME(m_scroll_wrap_disable)); + save_item(NAME(m_pattern_size)); + save_item(NAME(m_h_div_size)); + save_item(NAME(m_v_div_size)); + save_item(NAME(m_planeA_trans_enable)); + save_item(NAME(m_planeB_trans_enable)); + save_item(NAME(m_priority_mode)); + save_item(NAME(m_cbdr)); + save_item(NAME(m_yse)); + save_item(NAME(m_scm)); + save_item(NAME(m_planeA_color_fetch)); + save_item(NAME(m_planeB_color_fetch)); + save_item(NAME(m_sprite_color_fetch)); + save_item(NAME(m_crtc.htotal)); + save_item(NAME(m_crtc.vtotal)); + save_item(NAME(m_crtc.display_hstart)); + save_item(NAME(m_crtc.display_vstart)); + save_item(NAME(m_crtc.display_width)); + save_item(NAME(m_crtc.display_height)); + save_item(NAME(m_crtc.display_hsync)); + save_item(NAME(m_crtc.display_vsync)); + save_item(NAME(m_crtc.border_width)); + save_item(NAME(m_crtc.border_height)); + save_item(NAME(m_ax)); + save_item(NAME(m_dx)); + save_item(NAME(m_dxy)); + save_item(NAME(m_ay)); + save_item(NAME(m_dy)); + save_item(NAME(m_dyx)); + save_item(NAME(m_raw_ax)); + save_item(NAME(m_raw_dx)); + save_item(NAME(m_raw_dxy)); + save_item(NAME(m_raw_ay)); + save_item(NAME(m_raw_dy)); + save_item(NAME(m_raw_dyx)); } @@ -1261,20 +1348,20 @@ READ8_MEMBER( ygv608_device::pattern_name_table_r ) { int pn = 0; - switch (p0_state) + switch (m_p0_state) { case 0: /* Are we reading from plane B? */ if (!(m_md & MD_1PLANE) && (m_plane_select_access == true)) - pattern_name_base_r = ((m_page_y << m_pny_shift) << m_bits16); + m_pattern_name_base_r = ((m_page_y << m_pny_shift) << m_bits16); /* read character from ram */ - pn = pattern_name_base_r + (((m_ytile_ptr << m_pny_shift) + m_xtile_ptr) << m_bits16); + pn = m_pattern_name_base_r + (((m_ytile_ptr << m_pny_shift) + m_xtile_ptr) << m_bits16); break; case 1: /* read character from ram */ - pn = pattern_name_base_r + (((m_ytile_ptr << m_pny_shift) + m_xtile_ptr) << m_bits16) + 1; + pn = m_pattern_name_base_r + (((m_ytile_ptr << m_pny_shift) + m_xtile_ptr) << m_bits16) + 1; break; } @@ -1282,26 +1369,26 @@ READ8_MEMBER( ygv608_device::pattern_name_table_r ) { logerror( "attempt (%d) to read pattern name %d\n" "mode = %d, pgs = %d (%dx%d)\n" - "pattern_name_base_r = %d\n" + "m_pattern_name_base_r = %d\n" "pnx = %d, pny = %d, pny_shift = %d, bits16 = %d\n", - p0_state, + m_p0_state, pn, m_md, m_page_size, m_page_x, m_page_y, - pattern_name_base_r, + m_pattern_name_base_r, m_xtile_ptr, m_ytile_ptr, m_pny_shift, m_bits16 ); pn = 0; } - p0_state++; + m_p0_state++; if (m_md == MD_2PLANE_8BIT ) - p0_state++; + m_p0_state++; - if (p0_state == 2) + if (m_p0_state == 2) { pattern_name_autoinc_check(); - p0_state = 0; - pattern_name_base_r = 0; + m_p0_state = 0; + m_pattern_name_base_r = 0; } return m_pattern_name_table[pn]; @@ -1399,20 +1486,20 @@ WRITE8_MEMBER(ygv608_device::pattern_name_table_w) { int pn = 0; - switch (p0_state) + switch (m_p0_state) { case 0: /* Are we reading from plane B? */ if (!(m_md & MD_1PLANE) && (m_plane_select_access == true)) - pattern_name_base_w = ((m_page_y << m_pny_shift) << m_bits16); + m_pattern_name_base_w = ((m_page_y << m_pny_shift) << m_bits16); /* read character from ram */ - pn = pattern_name_base_w + (((m_ytile_ptr << m_pny_shift) + m_xtile_ptr) << m_bits16); + pn = m_pattern_name_base_w + (((m_ytile_ptr << m_pny_shift) + m_xtile_ptr) << m_bits16); break; case 1: /* read character from ram */ - pn = pattern_name_base_w + (((m_ytile_ptr << m_pny_shift) + m_xtile_ptr) << m_bits16) + 1; + pn = m_pattern_name_base_w + (((m_ytile_ptr << m_pny_shift) + m_xtile_ptr) << m_bits16) + 1; break; } @@ -1420,12 +1507,12 @@ WRITE8_MEMBER(ygv608_device::pattern_name_table_w) { logerror( "attempt (%d) to write pattern name %d\n" "mode = %d, pgs = %d (%dx%d)\n" - "pattern_name_base_w = %d\n" + "m_pattern_name_base_w = %d\n" "pnx = %d, pny = %d, pny_shift = %d, bits16 = %d\n", - p0_state, + m_p0_state, pn, m_md, m_page_size, m_page_x, m_page_y, - pattern_name_base_w, + m_pattern_name_base_w, m_xtile_ptr, m_ytile_ptr, m_pny_shift, m_bits16 ); pn = 0; @@ -1433,15 +1520,15 @@ WRITE8_MEMBER(ygv608_device::pattern_name_table_w) m_pattern_name_table[pn] = data; - p0_state++; + m_p0_state++; if (m_md == MD_2PLANE_8BIT ) - p0_state++; + m_p0_state++; - if (p0_state == 2) + if (m_p0_state == 2) { pattern_name_autoinc_check(); - p0_state = 0; - pattern_name_base_w = 0; + m_p0_state = 0; + m_pattern_name_base_w = 0; } } @@ -1587,8 +1674,8 @@ void ygv608_device::HandleReset() /* Clear ports #0-7 */ //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_pattern_name_base_w = 0; + m_pattern_name_base_r = 0; m_register_address = 0; m_register_autoinc_r = false; m_register_autoinc_w = false; @@ -1831,7 +1918,7 @@ WRITE8_MEMBER( ygv608_device::screen_ctrl_7_w ) m_na8_mask = ((m_flip == true) ? 0x03 : 0x0f ); // changing mode resets the pattern name table states (Mappy Arrange) - p0_state = 0; + m_p0_state = 0; pattern_mode_setup(); // TODO: add dot clock into CRTC // screen_configure(); diff --git a/src/mame/video/ygv608.h b/src/mame/video/ygv608.h index 5d297029b20..a26c631ce53 100644 --- a/src/mame/video/ygv608.h +++ b/src/mame/video/ygv608.h @@ -181,8 +181,8 @@ private: /* These were statically allocated in the r/w routines */ int m_color_state_r; int m_color_state_w; - int p0_state; - int pattern_name_base_r,pattern_name_base_w; /* pattern name table base address */ + int m_p0_state; + int m_pattern_name_base_r,m_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 */