summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2021-04-14 10:02:40 -0700
committer Aaron Giles <aaron@aarongiles.com>2021-04-14 10:02:40 -0700
commit90c5a29f41bb7402cf180c4f852e4e9d7aabffd1 (patch)
tree10979938a63e7129a685c461a00dada4998dae94
parentd27be276f3dd64fd8a4719e34f7e755b01df8bde (diff)
Replace remaining STRUCT_MEMBER macros with proper structured saves.
-rw-r--r--src/devices/sound/pokey.h6
-rw-r--r--src/devices/video/gb_lcd.cpp186
-rw-r--r--src/devices/video/gb_lcd.h54
-rw-r--r--src/devices/video/snes_ppu.cpp173
-rw-r--r--src/devices/video/snes_ppu.h89
-rw-r--r--src/devices/video/voodoo.cpp150
-rw-r--r--src/devices/video/voodoo.h132
-rw-r--r--src/mame/audio/gomoku.cpp19
-rw-r--r--src/mame/audio/gomoku.h10
-rw-r--r--src/mame/audio/segausb.cpp53
-rw-r--r--src/mame/audio/segausb.h28
-rw-r--r--src/mame/audio/wswan.cpp46
-rw-r--r--src/mame/audio/wswan.h13
-rw-r--r--src/mame/drivers/accomm.cpp37
-rw-r--r--src/mame/drivers/viper.cpp89
-rw-r--r--src/mame/includes/bbc.h19
-rw-r--r--src/mame/includes/electron.h20
-rw-r--r--src/mame/includes/snes.h17
-rw-r--r--src/mame/machine/electron.cpp31
-rw-r--r--src/mame/machine/p2000t_mdcr.cpp29
-rw-r--r--src/mame/machine/p2000t_mdcr.h13
-rw-r--r--src/mame/machine/rosetta.cpp32
-rw-r--r--src/mame/machine/rosetta.h3
-rw-r--r--src/mame/machine/snes.cpp47
-rw-r--r--src/mame/video/bbc.cpp12
-rw-r--r--src/mame/video/k057714.cpp66
-rw-r--r--src/mame/video/k057714.h11
27 files changed, 780 insertions, 605 deletions
diff --git a/src/devices/sound/pokey.h b/src/devices/sound/pokey.h
index f0947292a7c..0957ff2d1c0 100644
--- a/src/devices/sound/pokey.h
+++ b/src/devices/sound/pokey.h
@@ -246,6 +246,12 @@ private:
void register_save(save_registrar &save)
{
+ save.reg(NAME(m_borrow_cnt))
+ .reg(NAME(m_counter))
+ .reg(NAME(m_filter_sample))
+ .reg(NAME(m_output))
+ .reg(NAME(m_AUDF))
+ .reg(NAME(m_AUDC));
}
};
diff --git a/src/devices/video/gb_lcd.cpp b/src/devices/video/gb_lcd.cpp
index 99dfc80282d..4871be15757 100644
--- a/src/devices/video/gb_lcd.cpp
+++ b/src/devices/video/gb_lcd.cpp
@@ -368,108 +368,73 @@ void dmg_ppu_device::common_start()
m_lcd_timer = timer_alloc();
m_program_space = &m_lr35902->space(AS_PROGRAM);
+}
+
- save_pointer(NAME(m_oam), m_oam_size);
- save_pointer(NAME(m_vram), m_vram_size);
- save_item(NAME(m_window_lines_drawn));
- save_item(NAME(m_vid_regs));
- save_item(NAME(m_bg_zbuf));
-
- save_item(NAME(m_cgb_bpal));
- save_item(NAME(m_cgb_spal));
-
- save_item(NAME(m_gb_bpal));
- save_item(NAME(m_gb_spal0));
- save_item(NAME(m_gb_spal1));
-
- save_item(NAME(m_current_line));
- save_item(NAME(m_cmp_line));
- save_item(NAME(m_sprCount));
- save_item(NAME(m_sprite));
- save_item(NAME(m_previous_line));
- save_item(NAME(m_start_x));
- save_item(NAME(m_end_x));
- save_item(NAME(m_mode));
- save_item(NAME(m_state));
- save_item(NAME(m_sprite_cycles));
- save_item(NAME(m_window_cycles));
- save_item(NAME(m_scrollx_adjust));
- save_item(NAME(m_oam_locked));
- save_item(NAME(m_oam_locked_reading));
- save_item(NAME(m_vram_locked));
- save_item(NAME(m_pal_locked));
- save_item(NAME(m_hdma_enabled));
- save_item(NAME(m_hdma_possible));
- save_item(NAME(m_hdma_cycles_to_start));
- save_item(NAME(m_hdma_length));
- save_item(NAME(m_oam_dma_start_cycles));
- save_item(NAME(m_oam_dma_cycles_left));
- save_item(NAME(m_oam_dma_source_address));
- save_item(NAME(m_gbc_mode));
- save_item(NAME(m_window_x));
- save_item(NAME(m_window_y));
- save_item(NAME(m_stat_mode0_int));
- save_item(NAME(m_stat_mode1_int));
- save_item(NAME(m_stat_mode2_int));
- save_item(NAME(m_stat_lyc_int));
- save_item(NAME(m_stat_lyc_int_prev));
- save_item(NAME(m_stat_write_int));
- save_item(NAME(m_stat_int));
- save_item(NAME(m_gb_tile_no_mod));
- save_item(NAME(m_oam_dma_processing));
- save_item(NAME(m_gb_chrgen_offs));
- save_item(NAME(m_gb_bgdtab_offs));
- save_item(NAME(m_gb_wndtab_offs));
- save_item(NAME(m_gbc_chrgen_offs));
- save_item(NAME(m_gbc_bgdtab_offs));
- save_item(NAME(m_gbc_wndtab_offs));
- save_item(NAME(m_vram_bank));
- save_item(NAME(m_last_updated));
- save_item(NAME(m_cycles_left));
- save_item(NAME(m_next_state));
- save_item(NAME(m_old_curline));
-
- save_item(STRUCT_MEMBER(m_layer, enabled));
- save_item(STRUCT_MEMBER(m_layer, xindex));
- save_item(STRUCT_MEMBER(m_layer, xshift));
- save_item(STRUCT_MEMBER(m_layer, xstart));
- save_item(STRUCT_MEMBER(m_layer, xend));
- save_item(STRUCT_MEMBER(m_layer, bgline));
-
- save_item(NAME(m_line.tile_cycle));
- save_item(NAME(m_line.tile_count));
- save_item(NAME(m_line.y));
- save_item(NAME(m_line.pattern_address));
- save_item(NAME(m_line.pattern));
- save_item(NAME(m_line.tile_address));
- save_item(NAME(m_line.plane0));
- save_item(NAME(m_line.plane1));
- save_item(NAME(m_line.shift_register));
- save_item(NAME(m_line.sprite_delay_cycles));
- save_item(NAME(m_line.starting));
- save_item(NAME(m_line.sequence_counter));
- save_item(NAME(m_line.drawing));
- save_item(NAME(m_line.start_drawing));
- save_item(NAME(m_line.scrollx_delay));
- save_item(NAME(m_line.scrollx_to_apply));
- save_item(NAME(m_line.pixels_drawn));
- save_item(NAME(m_line.window_compare_position));
- save_item(NAME(m_line.window_active));
- save_item(NAME(m_line.scrollx));
- save_item(NAME(m_line.window_start_y));
- save_item(NAME(m_line.window_start_x));
- save_item(NAME(m_line.window_start_y_index));
- save_item(NAME(m_line.window_enable));
- save_item(NAME(m_line.window_enable_index));
- save_item(NAME(m_line.window_should_trigger));
- save_item(STRUCT_MEMBER(m_line.sprite, enabled));
- save_item(STRUCT_MEMBER(m_line.sprite, x));
- save_item(STRUCT_MEMBER(m_line.sprite, y));
- save_item(STRUCT_MEMBER(m_line.sprite, pattern));
- save_item(STRUCT_MEMBER(m_line.sprite, flags));
- save_item(STRUCT_MEMBER(m_line.sprite, tile_plane_0));
- save_item(STRUCT_MEMBER(m_line.sprite, tile_plane_1));
- save_item(NAME(m_frame_window_active));
+void dmg_ppu_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_oam), m_oam_size)
+ .reg(NAME(m_vram), m_vram_size)
+ .reg(NAME(m_window_lines_drawn))
+ .reg(NAME(m_vid_regs))
+ .reg(NAME(m_bg_zbuf))
+
+ .reg(NAME(m_cgb_bpal))
+ .reg(NAME(m_cgb_spal))
+
+ .reg(NAME(m_gb_bpal))
+ .reg(NAME(m_gb_spal0))
+ .reg(NAME(m_gb_spal1))
+
+ .reg(NAME(m_current_line))
+ .reg(NAME(m_cmp_line))
+ .reg(NAME(m_sprCount))
+ .reg(NAME(m_sprite))
+ .reg(NAME(m_previous_line))
+ .reg(NAME(m_start_x))
+ .reg(NAME(m_end_x))
+ .reg(NAME(m_mode))
+ .reg(NAME(m_state))
+ .reg(NAME(m_sprite_cycles))
+ .reg(NAME(m_window_cycles))
+ .reg(NAME(m_scrollx_adjust))
+ .reg(NAME(m_oam_locked))
+ .reg(NAME(m_oam_locked_reading))
+ .reg(NAME(m_vram_locked))
+ .reg(NAME(m_pal_locked))
+ .reg(NAME(m_hdma_enabled))
+ .reg(NAME(m_hdma_possible))
+ .reg(NAME(m_hdma_cycles_to_start))
+ .reg(NAME(m_hdma_length))
+ .reg(NAME(m_oam_dma_start_cycles))
+ .reg(NAME(m_oam_dma_cycles_left))
+ .reg(NAME(m_oam_dma_source_address))
+ .reg(NAME(m_gbc_mode))
+ .reg(NAME(m_window_x))
+ .reg(NAME(m_window_y))
+ .reg(NAME(m_stat_mode0_int))
+ .reg(NAME(m_stat_mode1_int))
+ .reg(NAME(m_stat_mode2_int))
+ .reg(NAME(m_stat_lyc_int))
+ .reg(NAME(m_stat_lyc_int_prev))
+ .reg(NAME(m_stat_write_int))
+ .reg(NAME(m_stat_int))
+ .reg(NAME(m_gb_tile_no_mod))
+ .reg(NAME(m_oam_dma_processing))
+ .reg(NAME(m_gb_chrgen_offs))
+ .reg(NAME(m_gb_bgdtab_offs))
+ .reg(NAME(m_gb_wndtab_offs))
+ .reg(NAME(m_gbc_chrgen_offs))
+ .reg(NAME(m_gbc_bgdtab_offs))
+ .reg(NAME(m_gbc_wndtab_offs))
+ .reg(NAME(m_vram_bank))
+ .reg(NAME(m_last_updated))
+ .reg(NAME(m_cycles_left))
+ .reg(NAME(m_next_state))
+ .reg(NAME(m_old_curline))
+ .reg(NAME(m_layer))
+ .reg(NAME(m_line))
+ .reg(NAME(m_frame_window_active));
}
@@ -521,14 +486,19 @@ void sgb_ppu_device::device_start()
/* The rest of the colortable can be black */
for (int i = 4; i < 8 * 16; i++)
m_sgb_pal[i] = 0;
+}
- save_item(NAME(m_sgb_atf_data));
- save_item(NAME(m_sgb_atf));
- save_item(NAME(m_sgb_pal_data));
- save_item(NAME(m_sgb_pal_map));
- save_item(NAME(m_sgb_pal));
- save_item(NAME(m_sgb_tile_map));
- save_item(NAME(m_sgb_window_mask));
+void sgb_ppu_device::device_register_save(save_registrar &save)
+{
+ dmg_ppu_device::device_register_save(save);
+
+ save.reg(NAME(m_sgb_atf_data))
+ .reg(NAME(m_sgb_atf))
+ .reg(NAME(m_sgb_pal_data))
+ .reg(NAME(m_sgb_pal_map))
+ .reg(NAME(m_sgb_pal))
+ .reg(NAME(m_sgb_tile_map))
+ .reg(NAME(m_sgb_window_mask));
}
void cgb_ppu_device::device_start()
diff --git a/src/devices/video/gb_lcd.h b/src/devices/video/gb_lcd.h
index 9c4e2607420..9f1b88d71a1 100644
--- a/src/devices/video/gb_lcd.h
+++ b/src/devices/video/gb_lcd.h
@@ -66,6 +66,16 @@ protected:
/* GBC specific */
uint8_t *gbc_map;
int16_t bgline;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(enabled))
+ .reg(NAME(xindex))
+ .reg(NAME(xshift))
+ .reg(NAME(xstart))
+ .reg(NAME(xend))
+ .reg(NAME(bgline));
+ }
};
inline void plot_pixel(int x, int y, uint16_t color);
@@ -79,6 +89,7 @@ protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
@@ -137,6 +148,17 @@ protected:
uint8_t flags;
uint8_t tile_plane_0;
uint8_t tile_plane_1;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(enabled))
+ .reg(NAME(x))
+ .reg(NAME(y))
+ .reg(NAME(pattern))
+ .reg(NAME(flags))
+ .reg(NAME(tile_plane_0))
+ .reg(NAME(tile_plane_1));
+ }
} sprite[10];
uint8_t sprite_delay_cycles;
// other internal data
@@ -158,6 +180,37 @@ protected:
uint8_t window_enable[16];
int window_enable_index;
bool window_should_trigger;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(tile_cycle))
+ .reg(NAME(tile_count))
+ .reg(NAME(y))
+ .reg(NAME(pattern_address))
+ .reg(NAME(pattern))
+ .reg(NAME(tile_address))
+ .reg(NAME(plane0))
+ .reg(NAME(plane1))
+ .reg(NAME(shift_register))
+ .reg(NAME(sprite_delay_cycles))
+ .reg(NAME(starting))
+ .reg(NAME(sequence_counter))
+ .reg(NAME(drawing))
+ .reg(NAME(start_drawing))
+ .reg(NAME(scrollx_delay))
+ .reg(NAME(scrollx_to_apply))
+ .reg(NAME(pixels_drawn))
+ .reg(NAME(window_compare_position))
+ .reg(NAME(window_active))
+ .reg(NAME(scrollx))
+ .reg(NAME(window_start_y))
+ .reg(NAME(window_start_x))
+ .reg(NAME(window_start_y_index))
+ .reg(NAME(window_enable))
+ .reg(NAME(window_enable_index))
+ .reg(NAME(window_should_trigger))
+ .reg(NAME(sprite));
+ }
} m_line;
bool m_frame_window_active;
@@ -268,6 +321,7 @@ protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_reset() override;
virtual void update_sprites() override;
diff --git a/src/devices/video/snes_ppu.cpp b/src/devices/video/snes_ppu.cpp
index 544becb412e..e7d28d84d75 100644
--- a/src/devices/video/snes_ppu.cpp
+++ b/src/devices/video/snes_ppu.cpp
@@ -250,122 +250,65 @@ void snes_ppu_device::device_start()
set_pen_indirect(DIRECT_COLOUR + c + (group * 256), direct);
}
}
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
- save_item(STRUCT_MEMBER(m_scanlines, enable));
- save_item(STRUCT_MEMBER(m_scanlines, clip));
- save_item(STRUCT_MEMBER(m_scanlines, buffer));
- save_item(STRUCT_MEMBER(m_scanlines, priority));
- save_item(STRUCT_MEMBER(m_scanlines, layer));
- save_item(STRUCT_MEMBER(m_scanlines, blend_exception));
-
- save_item(STRUCT_MEMBER(m_layer, window1_enabled));
- save_item(STRUCT_MEMBER(m_layer, window1_invert));
- save_item(STRUCT_MEMBER(m_layer, window2_enabled));
- save_item(STRUCT_MEMBER(m_layer, window2_invert));
- save_item(STRUCT_MEMBER(m_layer, wlog_mask));
- save_item(STRUCT_MEMBER(m_layer, color_math));
- save_item(STRUCT_MEMBER(m_layer, charmap));
- save_item(STRUCT_MEMBER(m_layer, tilemap));
- save_item(STRUCT_MEMBER(m_layer, tilemap_size));
- save_item(STRUCT_MEMBER(m_layer, tile_size));
- save_item(STRUCT_MEMBER(m_layer, tile_mode));
- save_item(STRUCT_MEMBER(m_layer, mosaic_enabled));
- save_item(STRUCT_MEMBER(m_layer, main_window_enabled));
- save_item(STRUCT_MEMBER(m_layer, sub_window_enabled));
- save_item(STRUCT_MEMBER(m_layer, main_bg_enabled));
- save_item(STRUCT_MEMBER(m_layer, sub_bg_enabled));
- save_item(STRUCT_MEMBER(m_layer, hoffs));
- save_item(STRUCT_MEMBER(m_layer, voffs));
- save_item(STRUCT_MEMBER(m_layer, priority));
- save_item(STRUCT_MEMBER(m_layer, mosaic_counter));
- save_item(STRUCT_MEMBER(m_layer, mosaic_offset));
-
- save_item(NAME(m_clipmasks));
-
- save_item(NAME(m_oam.address));
- save_item(NAME(m_oam.base_address));
- save_item(NAME(m_oam.priority_rotation));
- save_item(NAME(m_oam.tile_data_address));
- save_item(NAME(m_oam.name_select));
- save_item(NAME(m_oam.base_size));
- save_item(NAME(m_oam.first));
- save_item(NAME(m_oam.write_latch));
- save_item(NAME(m_oam.data_latch));
- save_item(NAME(m_oam.interlace));
- save_item(NAME(m_oam.priority));
-
- save_item(NAME(m_beam.latch_horz));
- save_item(NAME(m_beam.latch_vert));
- save_item(NAME(m_beam.current_vert));
- save_item(NAME(m_beam.last_visible_line));
- save_item(NAME(m_beam.interlace_count));
-
- save_item(NAME(m_mode7.repeat));
- save_item(NAME(m_mode7.hflip));
- save_item(NAME(m_mode7.vflip));
- save_item(NAME(m_mode7.matrix_a));
- save_item(NAME(m_mode7.matrix_b));
- save_item(NAME(m_mode7.matrix_c));
- save_item(NAME(m_mode7.matrix_d));
- save_item(NAME(m_mode7.origin_x));
- save_item(NAME(m_mode7.origin_y));
- save_item(NAME(m_mode7.hor_offset));
- save_item(NAME(m_mode7.ver_offset));
- save_item(NAME(m_mode7.extbg));
-
- save_item(STRUCT_MEMBER(m_objects, x));
- save_item(STRUCT_MEMBER(m_objects, y));
- save_item(STRUCT_MEMBER(m_objects, character));
- save_item(STRUCT_MEMBER(m_objects, name_select));
- save_item(STRUCT_MEMBER(m_objects, vflip));
- save_item(STRUCT_MEMBER(m_objects, hflip));
- save_item(STRUCT_MEMBER(m_objects, pri));
- save_item(STRUCT_MEMBER(m_objects, pal));
- save_item(STRUCT_MEMBER(m_objects, size));
-
- save_item(NAME(m_mosaic_size));
- save_item(NAME(m_clip_to_black));
- save_item(NAME(m_prevent_color_math));
- save_item(NAME(m_sub_add_mode));
- save_item(NAME(m_bg_priority));
- save_item(NAME(m_direct_color));
- save_item(NAME(m_ppu_last_scroll));
- save_item(NAME(m_mode7_last_scroll));
-
- save_item(NAME(m_ppu1_open_bus));
- save_item(NAME(m_ppu2_open_bus));
- save_item(NAME(m_ppu1_version));
- save_item(NAME(m_ppu2_version));
- save_item(NAME(m_window1_left));
- save_item(NAME(m_window1_right));
- save_item(NAME(m_window2_left));
- save_item(NAME(m_window2_right));
-
- save_item(NAME(m_mode));
- save_item(NAME(m_interlace));
- save_item(NAME(m_screen_brightness));
- save_item(NAME(m_screen_disabled));
- save_item(NAME(m_pseudo_hires));
- save_item(NAME(m_color_modes));
- save_item(NAME(m_stat77));
- save_item(NAME(m_stat78));
-
- save_item(NAME(m_htmult));
- save_item(NAME(m_cgram_address));
- save_item(NAME(m_read_ophct));
- save_item(NAME(m_read_opvct));
- save_item(NAME(m_vram_fgr_high));
- save_item(NAME(m_vram_fgr_increment));
- save_item(NAME(m_vram_fgr_count));
- save_item(NAME(m_vram_fgr_mask));
- save_item(NAME(m_vram_fgr_shift));
- save_item(NAME(m_vram_read_buffer));
- save_item(NAME(m_vmadd));
-
- save_item(NAME(m_regs));
-
- save_pointer(NAME(m_vram), SNES_VRAM_SIZE);
- save_pointer(NAME(m_cgram), SNES_CGRAM_SIZE/2);
+void snes_ppu_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_scanlines))
+ .reg(NAME(m_layer))
+ .reg(NAME(m_clipmasks))
+ .reg(NAME(m_oam))
+ .reg(NAME(m_beam))
+ .reg(NAME(m_mode7))
+ .reg(NAME(m_objects))
+
+ .reg(NAME(m_mosaic_size))
+ .reg(NAME(m_clip_to_black))
+ .reg(NAME(m_prevent_color_math))
+ .reg(NAME(m_sub_add_mode))
+ .reg(NAME(m_bg_priority))
+ .reg(NAME(m_direct_color))
+ .reg(NAME(m_ppu_last_scroll))
+ .reg(NAME(m_mode7_last_scroll))
+
+ .reg(NAME(m_ppu1_open_bus))
+ .reg(NAME(m_ppu2_open_bus))
+ .reg(NAME(m_ppu1_version))
+ .reg(NAME(m_ppu2_version))
+ .reg(NAME(m_window1_left))
+ .reg(NAME(m_window1_right))
+ .reg(NAME(m_window2_left))
+ .reg(NAME(m_window2_right))
+
+ .reg(NAME(m_mode))
+ .reg(NAME(m_interlace))
+ .reg(NAME(m_screen_brightness))
+ .reg(NAME(m_screen_disabled))
+ .reg(NAME(m_pseudo_hires))
+ .reg(NAME(m_color_modes))
+ .reg(NAME(m_stat77))
+ .reg(NAME(m_stat78))
+
+ .reg(NAME(m_htmult))
+ .reg(NAME(m_cgram_address))
+ .reg(NAME(m_read_ophct))
+ .reg(NAME(m_read_opvct))
+ .reg(NAME(m_vram_fgr_high))
+ .reg(NAME(m_vram_fgr_increment))
+ .reg(NAME(m_vram_fgr_count))
+ .reg(NAME(m_vram_fgr_mask))
+ .reg(NAME(m_vram_fgr_shift))
+ .reg(NAME(m_vram_read_buffer))
+ .reg(NAME(m_vmadd))
+
+ .reg(NAME(m_regs))
+
+ .reg(NAME(m_vram), SNES_VRAM_SIZE)
+ .reg(NAME(m_cgram), SNES_CGRAM_SIZE/2);
}
void snes_ppu_device::device_reset()
diff --git a/src/devices/video/snes_ppu.h b/src/devices/video/snes_ppu.h
index f6ae1b09fa4..aee7ca6f8cc 100644
--- a/src/devices/video/snes_ppu.h
+++ b/src/devices/video/snes_ppu.h
@@ -106,6 +106,16 @@ protected:
uint8_t priority[SNES_SCR_WIDTH];
uint8_t layer[SNES_SCR_WIDTH];
uint8_t blend_exception[SNES_SCR_WIDTH];
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(enable))
+ .reg(NAME(clip))
+ .reg(NAME(buffer))
+ .reg(NAME(priority))
+ .reg(NAME(layer))
+ .reg(NAME(blend_exception));
+ }
};
uint8_t m_regs[0x40];
@@ -141,6 +151,31 @@ protected:
uint16_t mosaic_counter;
uint16_t mosaic_offset;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(window1_enabled))
+ .reg(NAME(window1_invert))
+ .reg(NAME(window2_enabled))
+ .reg(NAME(window2_invert))
+ .reg(NAME(wlog_mask))
+ .reg(NAME(color_math))
+ .reg(NAME(charmap))
+ .reg(NAME(tilemap))
+ .reg(NAME(tilemap_size))
+ .reg(NAME(tile_size))
+ .reg(NAME(tile_mode))
+ .reg(NAME(mosaic_enabled))
+ .reg(NAME(main_window_enabled))
+ .reg(NAME(sub_window_enabled))
+ .reg(NAME(main_bg_enabled))
+ .reg(NAME(sub_bg_enabled))
+ .reg(NAME(hoffs))
+ .reg(NAME(voffs))
+ .reg(NAME(priority))
+ .reg(NAME(mosaic_counter))
+ .reg(NAME(mosaic_offset));
+ }
};
layer_t m_layer[6]; // this is for the BG1 - BG2 - BG3 - BG4 - OBJ - color layers
@@ -158,6 +193,21 @@ protected:
uint8_t data_latch;
uint8_t interlace;
uint8_t priority[4];
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(address))
+ .reg(NAME(base_address))
+ .reg(NAME(priority_rotation))
+ .reg(NAME(tile_data_address))
+ .reg(NAME(name_select))
+ .reg(NAME(base_size))
+ .reg(NAME(first))
+ .reg(NAME(write_latch))
+ .reg(NAME(data_latch))
+ .reg(NAME(interlace))
+ .reg(NAME(priority));
+ }
} m_oam;
struct
@@ -167,6 +217,15 @@ protected:
uint16_t current_vert;
uint8_t last_visible_line;
uint8_t interlace_count;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(latch_horz))
+ .reg(NAME(latch_vert))
+ .reg(NAME(current_vert))
+ .reg(NAME(last_visible_line))
+ .reg(NAME(interlace_count));
+ }
} m_beam;
struct
@@ -183,6 +242,22 @@ protected:
int16_t hor_offset;
int16_t ver_offset;
uint8_t extbg;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(repeat))
+ .reg(NAME(hflip))
+ .reg(NAME(vflip))
+ .reg(NAME(matrix_a))
+ .reg(NAME(matrix_b))
+ .reg(NAME(matrix_c))
+ .reg(NAME(matrix_d))
+ .reg(NAME(origin_x))
+ .reg(NAME(origin_y))
+ .reg(NAME(hor_offset))
+ .reg(NAME(ver_offset))
+ .reg(NAME(extbg));
+ }
} m_mode7;
#if SNES_LAYER_DEBUG
@@ -267,6 +342,19 @@ protected:
uint8_t pri;
uint8_t pal;
uint8_t size;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(x))
+ .reg(NAME(y))
+ .reg(NAME(character))
+ .reg(NAME(name_select))
+ .reg(NAME(vflip))
+ .reg(NAME(hflip))
+ .reg(NAME(pri))
+ .reg(NAME(pal))
+ .reg(NAME(size));
+ }
};
inline uint32_t get_tile(uint8_t layer_idx, uint32_t hoffset, uint32_t voffset);
@@ -311,6 +399,7 @@ protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_reset() override;
// device_palette_interface overrides
diff --git a/src/devices/video/voodoo.cpp b/src/devices/video/voodoo.cpp
index de10bb9a471..7fb68665194 100644
--- a/src/devices/video/voodoo.cpp
+++ b/src/devices/video/voodoo.cpp
@@ -1153,154 +1153,31 @@ void voodoo_device::voodoo_postload()
recompute_video_memory();
}
-
-void voodoo_device::init_save_state(voodoo_device *vd)
+SAVE_TYPE_AS_INT(voodoo_reg);
+void voodoo_device::device_register_save(save_registrar &save)
{
- vd->machine().save().register_postload(save_prepost_delegate(FUNC(voodoo_device::voodoo_postload), vd));
+ machine().save().register_postload(save_prepost_delegate(FUNC(voodoo_device::voodoo_postload), this));
/* register states: core */
- vd->save_item(NAME(vd->extra_cycles));
- vd->save_pointer(NAME(&vd->reg[0].u), std::size(vd->reg));
- vd->save_item(NAME(vd->alt_regmap));
+ save.reg(NAME(extra_cycles))
+ .reg(NAME(reg))
+ .reg(NAME(alt_regmap))
/* register states: pci */
- vd->save_item(NAME(vd->pci.fifo.in));
- vd->save_item(NAME(vd->pci.fifo.out));
- vd->save_item(NAME(vd->pci.init_enable));
- vd->save_item(NAME(vd->pci.stall_state));
- vd->save_item(NAME(vd->pci.op_pending));
- vd->save_item(NAME(vd->pci.op_end_time));
- vd->save_item(NAME(vd->pci.fifo_mem));
+ .reg(NAME(pci))
/* register states: dac */
- vd->save_item(NAME(vd->dac.reg));
- vd->save_item(NAME(vd->dac.read_result));
+ .reg(NAME(dac))
/* register states: fbi */
- vd->save_pointer(NAME(vd->fbi.ram), vd->fbi.mask + 1);
- vd->save_item(NAME(vd->fbi.rgboffs));
- vd->save_item(NAME(vd->fbi.auxoffs));
- vd->save_item(NAME(vd->fbi.frontbuf));
- vd->save_item(NAME(vd->fbi.backbuf));
- vd->save_item(NAME(vd->fbi.swaps_pending));
- vd->save_item(NAME(vd->fbi.video_changed));
- vd->save_item(NAME(vd->fbi.yorigin));
- vd->save_item(NAME(vd->fbi.lfb_base));
- vd->save_item(NAME(vd->fbi.lfb_stride));
- vd->save_item(NAME(vd->fbi.width));
- vd->save_item(NAME(vd->fbi.height));
- vd->save_item(NAME(vd->fbi.xoffs));
- vd->save_item(NAME(vd->fbi.yoffs));
- vd->save_item(NAME(vd->fbi.vsyncstart));
- vd->save_item(NAME(vd->fbi.vsyncstop));
- vd->save_item(NAME(vd->fbi.rowpixels));
- vd->save_item(NAME(vd->fbi.vblank));
- vd->save_item(NAME(vd->fbi.vblank_count));
- vd->save_item(NAME(vd->fbi.vblank_swap_pending));
- vd->save_item(NAME(vd->fbi.vblank_swap));
- vd->save_item(NAME(vd->fbi.vblank_dont_swap));
- vd->save_item(NAME(vd->fbi.cheating_allowed));
- vd->save_item(NAME(vd->fbi.sign));
- vd->save_item(NAME(vd->fbi.ax));
- vd->save_item(NAME(vd->fbi.ay));
- vd->save_item(NAME(vd->fbi.bx));
- vd->save_item(NAME(vd->fbi.by));
- vd->save_item(NAME(vd->fbi.cx));
- vd->save_item(NAME(vd->fbi.cy));
- vd->save_item(NAME(vd->fbi.startr));
- vd->save_item(NAME(vd->fbi.startg));
- vd->save_item(NAME(vd->fbi.startb));
- vd->save_item(NAME(vd->fbi.starta));
- vd->save_item(NAME(vd->fbi.startz));
- vd->save_item(NAME(vd->fbi.startw));
- vd->save_item(NAME(vd->fbi.drdx));
- vd->save_item(NAME(vd->fbi.dgdx));
- vd->save_item(NAME(vd->fbi.dbdx));
- vd->save_item(NAME(vd->fbi.dadx));
- vd->save_item(NAME(vd->fbi.dzdx));
- vd->save_item(NAME(vd->fbi.dwdx));
- vd->save_item(NAME(vd->fbi.drdy));
- vd->save_item(NAME(vd->fbi.dgdy));
- vd->save_item(NAME(vd->fbi.dbdy));
- vd->save_item(NAME(vd->fbi.dady));
- vd->save_item(NAME(vd->fbi.dzdy));
- vd->save_item(NAME(vd->fbi.dwdy));
- vd->save_item(NAME(vd->fbi.lfb_stats.pixels_in));
- vd->save_item(NAME(vd->fbi.lfb_stats.pixels_out));
- vd->save_item(NAME(vd->fbi.lfb_stats.chroma_fail));
- vd->save_item(NAME(vd->fbi.lfb_stats.zfunc_fail));
- vd->save_item(NAME(vd->fbi.lfb_stats.afunc_fail));
- vd->save_item(NAME(vd->fbi.lfb_stats.clip_fail));
- vd->save_item(NAME(vd->fbi.lfb_stats.stipple_count));
- vd->save_item(NAME(vd->fbi.sverts));
- vd->save_item(STRUCT_MEMBER(vd->fbi.svert, x));
- vd->save_item(STRUCT_MEMBER(vd->fbi.svert, y));
- vd->save_item(STRUCT_MEMBER(vd->fbi.svert, a));
- vd->save_item(STRUCT_MEMBER(vd->fbi.svert, r));
- vd->save_item(STRUCT_MEMBER(vd->fbi.svert, g));
- vd->save_item(STRUCT_MEMBER(vd->fbi.svert, b));
- vd->save_item(STRUCT_MEMBER(vd->fbi.svert, z));
- vd->save_item(STRUCT_MEMBER(vd->fbi.svert, wb));
- vd->save_item(STRUCT_MEMBER(vd->fbi.svert, w0));
- vd->save_item(STRUCT_MEMBER(vd->fbi.svert, s0));
- vd->save_item(STRUCT_MEMBER(vd->fbi.svert, t0));
- vd->save_item(STRUCT_MEMBER(vd->fbi.svert, w1));
- vd->save_item(STRUCT_MEMBER(vd->fbi.svert, s1));
- vd->save_item(STRUCT_MEMBER(vd->fbi.svert, t1));
- vd->save_item(NAME(vd->fbi.fifo.size));
- vd->save_item(NAME(vd->fbi.fifo.in));
- vd->save_item(NAME(vd->fbi.fifo.out));
- vd->save_item(STRUCT_MEMBER(vd->fbi.cmdfifo, enable));
- vd->save_item(STRUCT_MEMBER(vd->fbi.cmdfifo, count_holes));
- vd->save_item(STRUCT_MEMBER(vd->fbi.cmdfifo, base));
- vd->save_item(STRUCT_MEMBER(vd->fbi.cmdfifo, end));
- vd->save_item(STRUCT_MEMBER(vd->fbi.cmdfifo, rdptr));
- vd->save_item(STRUCT_MEMBER(vd->fbi.cmdfifo, amin));
- vd->save_item(STRUCT_MEMBER(vd->fbi.cmdfifo, amax));
- vd->save_item(STRUCT_MEMBER(vd->fbi.cmdfifo, depth));
- vd->save_item(STRUCT_MEMBER(vd->fbi.cmdfifo, holes));
- vd->save_item(NAME(vd->fbi.fogblend));
- vd->save_item(NAME(vd->fbi.fogdelta));
- vd->save_item(NAME(vd->fbi.clut));
+ .reg(NAME(fbi))
/* register states: tmu */
- for (int index = 0; index < std::size(vd->tmu); index++)
- {
- tmu_state *tmu = &vd->tmu[index];
- if (tmu->ram == nullptr)
- continue;
- if (tmu->ram != vd->fbi.ram)
- vd->save_pointer(NAME(tmu->ram), tmu->mask + 1, index);
- vd->save_item(NAME(tmu->starts), index);
- vd->save_item(NAME(tmu->startt), index);
- vd->save_item(NAME(tmu->startw), index);
- vd->save_item(NAME(tmu->dsdx), index);
- vd->save_item(NAME(tmu->dtdx), index);
- vd->save_item(NAME(tmu->dwdx), index);
- vd->save_item(NAME(tmu->dsdy), index);
- vd->save_item(NAME(tmu->dtdy), index);
- vd->save_item(NAME(tmu->dwdy), index);
- vd->save_item(STRUCT_MEMBER(tmu->ncc, ir), index);
- vd->save_item(STRUCT_MEMBER(tmu->ncc, ig), index);
- vd->save_item(STRUCT_MEMBER(tmu->ncc, ib), index);
- vd->save_item(STRUCT_MEMBER(tmu->ncc, qr), index);
- vd->save_item(STRUCT_MEMBER(tmu->ncc, qg), index);
- vd->save_item(STRUCT_MEMBER(tmu->ncc, qb), index);
- vd->save_item(STRUCT_MEMBER(tmu->ncc, y), index);
- }
+ .reg(NAME(tmu));
/* register states: banshee */
- if (vd->vd_type >= TYPE_VOODOO_BANSHEE)
- {
- vd->save_item(NAME(vd->banshee.io));
- vd->save_item(NAME(vd->banshee.agp));
- vd->save_item(NAME(vd->banshee.vga));
- vd->save_item(NAME(vd->banshee.crtc));
- vd->save_item(NAME(vd->banshee.seq));
- vd->save_item(NAME(vd->banshee.gc));
- vd->save_item(NAME(vd->banshee.att));
- vd->save_item(NAME(vd->banshee.attff));
- }
+ if (vd_type >= TYPE_VOODOO_BANSHEE)
+ save.reg(NAME(banshee));
}
@@ -5814,9 +5691,6 @@ void voodoo_device::device_start()
/* do a soft reset to reset everything else */
soft_reset();
-
- /* register for save states */
- init_save_state(this);
}
diff --git a/src/devices/video/voodoo.h b/src/devices/video/voodoo.h
index 1be7f0a1a85..4b1ae56ad1c 100644
--- a/src/devices/video/voodoo.h
+++ b/src/devices/video/voodoo.h
@@ -932,6 +932,7 @@ protected:
// device-level overrides
virtual void device_resolve_objects() override;
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_stop() override;
virtual void device_reset() override;
@@ -979,6 +980,17 @@ protected:
int32_t clip_fail = 0; // clipping fail statistic
int32_t stipple_count = 0; // stipple statistic
int32_t filler[64/4 - 7]; // pad this structure to 64 bytes
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(pixels_in))
+ .reg(NAME(pixels_out))
+ .reg(NAME(chroma_fail))
+ .reg(NAME(zfunc_fail))
+ .reg(NAME(afunc_fail))
+ .reg(NAME(clip_fail))
+ .reg(NAME(stipple_count));
+ }
};
@@ -997,6 +1009,8 @@ protected:
int32_t size = 0; // size of the FIFO
int32_t in = 0; // input pointer
int32_t out = 0; // output pointer
+
+ void register_save(save_registrar &save) { save.reg(NAME(in)).reg(NAME(out)).reg(NAME(size)); }
};
@@ -1011,6 +1025,19 @@ protected:
uint32_t amax = 0; // maximum address
uint32_t depth = 0; // current depth
uint32_t holes = 0; // number of holes
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(enable))
+ .reg(NAME(count_holes))
+ .reg(NAME(base))
+ .reg(NAME(end))
+ .reg(NAME(rdptr))
+ .reg(NAME(amin))
+ .reg(NAME(amax))
+ .reg(NAME(depth))
+ .reg(NAME(holes));
+ }
};
@@ -1023,6 +1050,16 @@ protected:
attotime op_end_time = attotime::zero; // time when the pending operation ends
emu_timer * continue_timer = nullptr; // timer to use to continue processing
uint32_t fifo_mem[64*2]; // memory backing the PCI FIFO
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(fifo))
+ .reg(NAME(init_enable))
+ .reg(NAME(stall_state))
+ .reg(NAME(op_pending))
+ .reg(NAME(op_end_time))
+ .reg(NAME(fifo_mem));
+ }
};
@@ -1049,6 +1086,13 @@ protected:
rgb_t * palette = nullptr; // pointer to associated RGB palette
rgb_t * palettea = nullptr; // pointer to associated ARGB palette
rgb_t texel[256]; // texel lookup
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(ir)).reg(NAME(ig)).reg(NAME(ib))
+ .reg(NAME(qr)).reg(NAME(qg)).reg(NAME(qb))
+ .reg(NAME(y));
+ }
};
uint8_t * ram = nullptr; // pointer to our RAM
@@ -1086,6 +1130,18 @@ protected:
rgb_t palette[256]; // palette lookup table
rgb_t palettea[256]; // palette+alpha lookup table
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(ram), mask + 1)
+ .reg(NAME(starts)).reg(NAME(startt))
+ .reg(NAME(startw))
+ .reg(NAME(dsdx)).reg(NAME(dtdx))
+ .reg(NAME(dwdx))
+ .reg(NAME(dsdy)).reg(NAME(dtdy))
+ .reg(NAME(dwdy))
+ .reg(NAME(ncc));
+ }
};
@@ -1113,6 +1169,15 @@ protected:
float r, g, b, a; // A, R, G, B values
float s0, t0, w0; // W, S, T for TMU 0
float s1, t1, w1; // W, S, T for TMU 1
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(x)).reg(NAME(y))
+ .reg(NAME(z)).reg(NAME(wb))
+ .reg(NAME(r)).reg(NAME(g)).reg(NAME(b)).reg(NAME(a))
+ .reg(NAME(s0)).reg(NAME(t0)).reg(NAME(w0))
+ .reg(NAME(s1)).reg(NAME(t1)).reg(NAME(w1));
+ }
};
uint8_t * ram = nullptr; // pointer to frame buffer RAM
@@ -1180,6 +1245,57 @@ protected:
rgb_t clut[512]; // clut gamma data */
uint8_t clut_dirty = 1; // do we need to recompute? */
rgb_t rgb565[65536]; // RGB 5-6-5 lookup table */
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(ram), mask + 1)
+ .reg(NAME(rgboffs))
+ .reg(NAME(auxoffs))
+ .reg(NAME(frontbuf))
+ .reg(NAME(backbuf))
+ .reg(NAME(swaps_pending))
+ .reg(NAME(video_changed))
+ .reg(NAME(yorigin))
+ .reg(NAME(lfb_base))
+ .reg(NAME(lfb_stride))
+ .reg(NAME(width))
+ .reg(NAME(height))
+ .reg(NAME(xoffs))
+ .reg(NAME(yoffs))
+ .reg(NAME(vsyncstart))
+ .reg(NAME(vsyncstop))
+ .reg(NAME(rowpixels))
+ .reg(NAME(vblank))
+ .reg(NAME(vblank_count))
+ .reg(NAME(vblank_swap_pending))
+ .reg(NAME(vblank_swap))
+ .reg(NAME(vblank_dont_swap))
+ .reg(NAME(cheating_allowed))
+ .reg(NAME(sign))
+ .reg(NAME(ax))
+ .reg(NAME(ay))
+ .reg(NAME(bx))
+ .reg(NAME(by))
+ .reg(NAME(cx))
+ .reg(NAME(cy))
+ .reg(NAME(startr)).reg(NAME(startg)).reg(NAME(startb)).reg(NAME(starta))
+ .reg(NAME(startz))
+ .reg(NAME(startw))
+ .reg(NAME(drdx)).reg(NAME(dgdx)).reg(NAME(dbdx)).reg(NAME(dadx))
+ .reg(NAME(dzdx))
+ .reg(NAME(dwdx))
+ .reg(NAME(drdy)).reg(NAME(dgdy)).reg(NAME(dbdy)).reg(NAME(dady))
+ .reg(NAME(dzdy))
+ .reg(NAME(dwdy))
+ .reg(NAME(lfb_stats))
+ .reg(NAME(sverts))
+ .reg(NAME(svert))
+ .reg(NAME(fifo))
+ .reg(NAME(cmdfifo))
+ .reg(NAME(fogblend))
+ .reg(NAME(fogdelta))
+ .reg(NAME(clut));
+ }
};
@@ -1190,6 +1306,8 @@ protected:
uint8_t reg[8]; // 8 registers
uint8_t read_result; // pending read result
+
+ void register_save(save_registrar &save) { save.reg(NAME(reg)).reg(NAME(read_result)); }
};
@@ -1243,6 +1361,18 @@ protected:
uint32_t blt_src_height = 0;
uint32_t blt_src_stride = 0;
uint32_t blt_src_bpp = 0;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(io))
+ .reg(NAME(agp))
+ .reg(NAME(vga))
+ .reg(NAME(crtc))
+ .reg(NAME(seq))
+ .reg(NAME(gc))
+ .reg(NAME(att))
+ .reg(NAME(attff));
+ }
};
@@ -1285,8 +1415,6 @@ protected:
int32_t cmdfifo_execute_if_ready(cmdfifo_info &f);
static void cmdfifo_w(voodoo_device *vd, cmdfifo_info *f, offs_t offset, uint32_t data);
- static void init_save_state(voodoo_device *vd);
-
static void raster_fastfill(void *dest, int32_t scanline, const poly_extent *extent, const void *extradata, int threadid);
static void raster_generic_0tmu(void *dest, int32_t scanline, const poly_extent *extent, const void *extradata, int threadid);
static void raster_generic_1tmu(void *dest, int32_t scanline, const poly_extent *extent, const void *extradata, int threadid);
diff --git a/src/mame/audio/gomoku.cpp b/src/mame/audio/gomoku.cpp
index 632b016441e..98910d59dc9 100644
--- a/src/mame/audio/gomoku.cpp
+++ b/src/mame/audio/gomoku.cpp
@@ -63,15 +63,18 @@ void gomoku_sound_device::device_start()
voice->volume = 0;
voice->oneshotplaying = 0;
}
+}
- save_item(NAME(m_soundregs1));
- save_item(NAME(m_soundregs2));
- // save_item(NAME(m_sound_enable)); // set to 1 at device start and never updated?
- save_item(STRUCT_MEMBER(m_channel_list, channel));
- save_item(STRUCT_MEMBER(m_channel_list, frequency));
- save_item(STRUCT_MEMBER(m_channel_list, counter));
- save_item(STRUCT_MEMBER(m_channel_list, volume));
- save_item(STRUCT_MEMBER(m_channel_list, oneshotplaying));
+//-------------------------------------------------
+// device_register_save - register for save states
+//-------------------------------------------------
+
+void gomoku_sound_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_soundregs1))
+ .reg(NAME(m_soundregs2))
+ .reg(NAME(m_channel_list));
+ // .reg(NAME(m_sound_enable)); // set to 1 at device start and never updated?
}
diff --git a/src/mame/audio/gomoku.h b/src/mame/audio/gomoku.h
index 0c077de96bd..70910313c8b 100644
--- a/src/mame/audio/gomoku.h
+++ b/src/mame/audio/gomoku.h
@@ -21,6 +21,7 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
// sound stream update overrides
virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
@@ -40,6 +41,15 @@ private:
int counter = 0;
int volume = 0;
int oneshotplaying = 0;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(channel))
+ .reg(NAME(frequency))
+ .reg(NAME(counter))
+ .reg(NAME(volume))
+ .reg(NAME(oneshotplaying));
+ }
};
diff --git a/src/mame/audio/segausb.cpp b/src/mame/audio/segausb.cpp
index a84024512d3..7957f592f21 100644
--- a/src/mame/audio/segausb.cpp
+++ b/src/mame/audio/segausb.cpp
@@ -96,7 +96,6 @@ void usb_sound_device::device_start()
m_pit[index]->write_gate1(1);
m_pit[index]->write_gate2(1);
}
- save_item(NAME(m_gos_clock));
#else
@@ -130,37 +129,29 @@ void usb_sound_device::device_start()
m_final_filter.configure(100e3, 4.7e-6);
- for (int tgroup = 0; tgroup < 3; tgroup++)
- {
- timer8253 &group = m_timer_group[tgroup];
- save_item(STRUCT_MEMBER(group.chan, holding), tgroup);
- save_item(STRUCT_MEMBER(group.chan, latchmode), tgroup);
- save_item(STRUCT_MEMBER(group.chan, latchtoggle), tgroup);
- save_item(STRUCT_MEMBER(group.chan, clockmode), tgroup);
- save_item(STRUCT_MEMBER(group.chan, bcdmode), tgroup);
- save_item(STRUCT_MEMBER(group.chan, output), tgroup);
- save_item(STRUCT_MEMBER(group.chan, lastgate), tgroup);
- save_item(STRUCT_MEMBER(group.chan, gate), tgroup);
- save_item(STRUCT_MEMBER(group.chan, subcount), tgroup);
- save_item(STRUCT_MEMBER(group.chan, count), tgroup);
- save_item(STRUCT_MEMBER(group.chan, remain), tgroup);
- save_item(NAME(group.env), tgroup);
- save_item(STRUCT_MEMBER(group.chan_filter, capval), tgroup);
- save_item(NAME(group.gate1.capval), tgroup);
- save_item(NAME(group.gate2.capval), tgroup);
- save_item(NAME(group.config), tgroup);
- }
+#endif
+}
+
+
+//-------------------------------------------------
+// device_register_save - register for save states
+//-------------------------------------------------
+
+void usb_sound_device::device_register_save(save_registrar &save)
+{
+#if (ENABLE_SEGAUSB_NETLIST)
+
+ save.reg(NAME(m_gos_clock));
+
+#else
- save_item(NAME(m_timer_mode));
- save_item(NAME(m_noise_shift));
- save_item(NAME(m_noise_state));
- save_item(NAME(m_noise_subcount));
- save_item(NAME(m_final_filter.capval));
- save_item(NAME(m_noise_filters[0].capval));
- save_item(NAME(m_noise_filters[1].capval));
- save_item(NAME(m_noise_filters[2].capval));
- save_item(NAME(m_noise_filters[3].capval));
- save_item(NAME(m_noise_filters[4].capval));
+ save.reg(NAME(m_timer_group))
+ .reg(NAME(m_timer_mode))
+ .reg(NAME(m_noise_shift))
+ .reg(NAME(m_noise_state))
+ .reg(NAME(m_noise_subcount))
+ .reg(NAME(m_final_filter))
+ .reg(NAME(m_noise_filters));
#endif
}
diff --git a/src/mame/audio/segausb.h b/src/mame/audio/segausb.h
index e96b6cd98b2..86ad1c2d595 100644
--- a/src/mame/audio/segausb.h
+++ b/src/mame/audio/segausb.h
@@ -58,6 +58,7 @@ protected:
// device-level overrides
virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_reset() override;
#if (!ENABLE_SEGAUSB_NETLIST)
@@ -113,6 +114,8 @@ private:
double capval = 0.0; // current capacitor value
double exponent = 0.0; // constant exponent
+
+ void register_save(save_registrar &save) { save.reg(NAME(capval)); }
};
struct timer8253
@@ -134,6 +137,21 @@ private:
u16 count = 0; // initial count
u16 remain = 0; // current down counter value
s32 subcount = 0; // subcount (2MHz clocks per input clock)
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(holding))
+ .reg(NAME(latchmode))
+ .reg(NAME(latchtoggle))
+ .reg(NAME(clockmode))
+ .reg(NAME(bcdmode))
+ .reg(NAME(output))
+ .reg(NAME(lastgate))
+ .reg(NAME(gate))
+ .reg(NAME(subcount))
+ .reg(NAME(count))
+ .reg(NAME(remain));
+ }
};
timer8253() : env{ 0.0, 0.0, 0.0 } { }
@@ -144,6 +162,16 @@ private:
g80_filter_state gate1; // first RC filter state
g80_filter_state gate2; // second RC filter state
u8 config = 0; // configuration for this timer
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(chan))
+ .reg(NAME(env))
+ .reg(NAME(chan_filter))
+ .reg(NAME(gate1))
+ .reg(NAME(gate2))
+ .reg(NAME(config));
+ }
};
sound_stream *m_stream; // output stream
diff --git a/src/mame/audio/wswan.cpp b/src/mame/audio/wswan.cpp
index 85c7e1766bc..e9fc661672a 100644
--- a/src/mame/audio/wswan.cpp
+++ b/src/mame/audio/wswan.cpp
@@ -63,32 +63,28 @@ static constexpr int clk_div = 64;
void wswan_sound_device::device_start()
{
m_channel = stream_alloc(0, 2, clock() / clk_div);
+}
- save_item(NAME(m_sweep_step));
- save_item(NAME(m_sweep_time));
- save_item(NAME(m_sweep_count));
- save_item(NAME(m_noise_type));
- save_item(NAME(m_noise_reset));
- save_item(NAME(m_noise_enable));
- save_item(NAME(m_sample_address));
- save_item(NAME(m_audio2_voice));
- save_item(NAME(m_audio3_sweep));
- save_item(NAME(m_audio4_noise));
- save_item(NAME(m_mono));
- save_item(NAME(m_output_volume));
- save_item(NAME(m_external_stereo));
- save_item(NAME(m_external_speaker));
- save_item(NAME(m_noise_shift));
- save_item(NAME(m_master_volume));
- save_item(NAME(m_system_volume));
- save_item(STRUCT_MEMBER(m_audio, freq));
- save_item(STRUCT_MEMBER(m_audio, period));
- save_item(STRUCT_MEMBER(m_audio, pos));
- save_item(STRUCT_MEMBER(m_audio, vol_left));
- save_item(STRUCT_MEMBER(m_audio, vol_right));
- save_item(STRUCT_MEMBER(m_audio, on));
- save_item(STRUCT_MEMBER(m_audio, offset));
- save_item(STRUCT_MEMBER(m_audio, signal));
+void wswan_sound_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_audio))
+ .reg(NAME(m_sweep_step))
+ .reg(NAME(m_sweep_time))
+ .reg(NAME(m_sweep_count))
+ .reg(NAME(m_noise_type))
+ .reg(NAME(m_noise_reset))
+ .reg(NAME(m_noise_enable))
+ .reg(NAME(m_sample_address))
+ .reg(NAME(m_audio2_voice))
+ .reg(NAME(m_audio3_sweep))
+ .reg(NAME(m_audio4_noise))
+ .reg(NAME(m_mono))
+ .reg(NAME(m_output_volume))
+ .reg(NAME(m_external_stereo))
+ .reg(NAME(m_external_speaker))
+ .reg(NAME(m_noise_shift))
+ .reg(NAME(m_master_volume))
+ .reg(NAME(m_system_volume));
}
void wswan_sound_device::device_clock_changed()
diff --git a/src/mame/audio/wswan.h b/src/mame/audio/wswan.h
index 4029d0f23a1..b0f5a2e18fa 100644
--- a/src/mame/audio/wswan.h
+++ b/src/mame/audio/wswan.h
@@ -44,10 +44,23 @@ protected:
u8 on;
u8 offset;
u8 signal;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(freq))
+ .reg(NAME(period))
+ .reg(NAME(pos))
+ .reg(NAME(vol_left))
+ .reg(NAME(vol_right))
+ .reg(NAME(on))
+ .reg(NAME(offset))
+ .reg(NAME(signal));
+ }
};
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_clock_changed() override;
virtual void device_reset() override;
diff --git a/src/mame/drivers/accomm.cpp b/src/mame/drivers/accomm.cpp
index 9228cefd313..440dbce6ff7 100644
--- a/src/mame/drivers/accomm.cpp
+++ b/src/mame/drivers/accomm.cpp
@@ -94,6 +94,7 @@ protected:
virtual void machine_start() override;
virtual void video_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
private:
@@ -169,6 +170,23 @@ private:
int stop_bit;
int tape_running;
uint8_t tape_byte;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(interrupt_status))
+ .reg(NAME(interrupt_control))
+ .reg(NAME(rompage))
+ .reg(NAME(screen_start))
+ .reg(NAME(screen_base))
+ .reg(NAME(screen_size))
+ .reg(NAME(screen_addr))
+ .reg(NAME(screen_dispend))
+ .reg(NAME(current_pal))
+ .reg(NAME(communication_mode))
+ .reg(NAME(screen_mode))
+ .reg(NAME(shiftlock_mode))
+ .reg(NAME(capslock_mode));
+ }
};
ULA m_ula;
@@ -237,21 +255,12 @@ void accomm_state::machine_start()
m_ula.interrupt_status = 0x82;
m_ula.interrupt_control = 0x00;
+}
- save_item(STRUCT_MEMBER(m_ula, interrupt_status));
- save_item(STRUCT_MEMBER(m_ula, interrupt_control));
- save_item(STRUCT_MEMBER(m_ula, rompage));
- save_item(STRUCT_MEMBER(m_ula, screen_start));
- save_item(STRUCT_MEMBER(m_ula, screen_base));
- save_item(STRUCT_MEMBER(m_ula, screen_size));
- save_item(STRUCT_MEMBER(m_ula, screen_addr));
- save_item(STRUCT_MEMBER(m_ula, screen_dispend));
- save_item(STRUCT_MEMBER(m_ula, current_pal));
- save_item(STRUCT_MEMBER(m_ula, communication_mode));
- save_item(STRUCT_MEMBER(m_ula, screen_mode));
- save_item(STRUCT_MEMBER(m_ula, shiftlock_mode));
- save_item(STRUCT_MEMBER(m_ula, capslock_mode));
- save_item(NAME(m_ch00rom_enabled));
+void accomm_state::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_ula))
+ .reg(NAME(m_ch00rom_enabled));
}
void accomm_state::video_start()
diff --git a/src/mame/drivers/viper.cpp b/src/mame/drivers/viper.cpp
index 346b2d2eea0..6734378a0e2 100644
--- a/src/mame/drivers/viper.cpp
+++ b/src/mame/drivers/viper.cpp
@@ -402,6 +402,8 @@ protected:
virtual void machine_start() override;
virtual void machine_reset() override;
+ virtual void device_register_save(save_registrar &save) override;
+
private:
uint32_t epic_r(offs_t offset);
void epic_w(offs_t offset, uint32_t data);
@@ -502,6 +504,16 @@ private:
int active;
int pending;
int mask;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(vector))
+ .reg(NAME(priority))
+ .reg(NAME(destination)) // written but never read
+ .reg(NAME(active))
+ .reg(NAME(pending))
+ .reg(NAME(mask));
+ }
};
struct MPC8240_GLOBAL_TIMER
@@ -509,6 +521,8 @@ private:
uint32_t base_count;
int enable;
emu_timer *timer;
+
+ void register_save(save_registrar &save) { save.reg(NAME(base_count)).reg(NAME(enable)); }
};
struct MPC8240_EPIC
@@ -529,6 +543,21 @@ private:
MPC8240_GLOBAL_TIMER global_timer[4];
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(iack))
+ .reg(NAME(eicr)) // written but never used
+ .reg(NAME(svr))
+ .reg(NAME(active_irq))
+ .reg(NAME(irq))
+ .reg(NAME(i2c_adr))
+ .reg(NAME(i2c_freq_div))
+ .reg(NAME(i2c_freq_sample_rate))
+ .reg(NAME(i2c_cr))
+ .reg(NAME(i2c_sr))
+ .reg(NAME(i2c_state))
+ .reg(NAME(global_timer));
+ }
};
MPC8240_EPIC m_epic;
@@ -2380,44 +2409,6 @@ void viper_state::machine_start()
/* configure fast RAM regions for DRC */
m_maincpu->ppcdrc_add_fastram(0x00000000, 0x00ffffff, false, m_workram);
- save_item(NAME(m_voodoo3_pci_reg));
- save_item(NAME(m_mpc8240_regs));
- save_item(NAME(m_cf_card_ide));
- save_item(NAME(m_unk_serial_bit_w));
- save_item(NAME(m_unk_serial_cmd));
- save_item(NAME(m_unk_serial_data));
- save_item(NAME(m_unk_serial_data_r));
- save_item(NAME(m_unk_serial_regs));
-
- save_item(NAME(m_ds2430_unk_status));
- save_item(NAME(m_ds2430_data));
- save_item(NAME(m_ds2430_data_count));
- save_item(NAME(m_ds2430_reset));
- save_item(NAME(m_ds2430_state));
- save_item(NAME(m_ds2430_cmd));
- save_item(NAME(m_ds2430_addr)); // written but never used
-
- save_item(NAME(m_epic.iack));
- save_item(NAME(m_epic.eicr)); // written but never used
- save_item(NAME(m_epic.svr));
- save_item(NAME(m_epic.active_irq));
- save_item(NAME(m_epic.i2c_adr));
- save_item(NAME(m_epic.i2c_freq_div));
- save_item(NAME(m_epic.i2c_freq_sample_rate));
- save_item(NAME(m_epic.i2c_cr));
- save_item(NAME(m_epic.i2c_sr));
- save_item(NAME(m_epic.i2c_state));
-
- save_item(STRUCT_MEMBER(m_epic.irq, vector));
- save_item(STRUCT_MEMBER(m_epic.irq, priority));
- save_item(STRUCT_MEMBER(m_epic.irq, destination)); // written but never read
- save_item(STRUCT_MEMBER(m_epic.irq, active));
- save_item(STRUCT_MEMBER(m_epic.irq, pending));
- save_item(STRUCT_MEMBER(m_epic.irq, mask));
-
- save_item(STRUCT_MEMBER(m_epic.global_timer, base_count));
- save_item(STRUCT_MEMBER(m_epic.global_timer, enable));
-
m_unk_serial_bit_w = 0;
std::fill(std::begin(m_unk_serial_regs), std::end(m_unk_serial_regs), 0);
@@ -2429,6 +2420,28 @@ void viper_state::machine_start()
std::fill(std::begin(m_mpc8240_regs), std::end(m_mpc8240_regs), 0);
}
+void viper_state::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_voodoo3_pci_reg))
+ .reg(NAME(m_mpc8240_regs))
+ .reg(NAME(m_cf_card_ide))
+ .reg(NAME(m_unk_serial_bit_w))
+ .reg(NAME(m_unk_serial_cmd))
+ .reg(NAME(m_unk_serial_data))
+ .reg(NAME(m_unk_serial_data_r))
+ .reg(NAME(m_unk_serial_regs))
+
+ .reg(NAME(m_ds2430_unk_status))
+ .reg(NAME(m_ds2430_data))
+ .reg(NAME(m_ds2430_data_count))
+ .reg(NAME(m_ds2430_reset))
+ .reg(NAME(m_ds2430_state))
+ .reg(NAME(m_ds2430_cmd))
+ .reg(NAME(m_ds2430_addr)) // written but never used
+
+ .reg(NAME(m_epic));
+}
+
void viper_state::machine_reset()
{
mpc8240_epic_reset();
diff --git a/src/mame/includes/bbc.h b/src/mame/includes/bbc.h
index 396ec8a1a77..01b00663ad8 100644
--- a/src/mame/includes/bbc.h
+++ b/src/mame/includes/bbc.h
@@ -212,6 +212,14 @@ protected:
virtual void video_start() override;
virtual void video_reset() override;
+ virtual void device_register_save(save_registrar &save) override
+ {
+ save.reg(NAME(m_vula_ctrl))
+ .reg(NAME(m_vula_palette))
+ .reg(NAME(m_vula_palette_lookup))
+ .reg(NAME(m_vnula));
+ }
+
required_device<cpu_device> m_maincpu;
required_device<ram_device> m_ram;
required_device<mc6845_device> m_hd6845;
@@ -359,6 +367,17 @@ protected:
uint8_t flash[8];
uint8_t palette_byte;
uint8_t palette_write;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(palette_mode))
+ .reg(NAME(horiz_offset))
+ .reg(NAME(left_blank))
+ .reg(NAME(disable))
+ .reg(NAME(flash))
+ .reg(NAME(palette_byte))
+ .reg(NAME(palette_write));
+ }
} m_vnula;
int m_pixels_per_byte;
diff --git a/src/mame/includes/electron.h b/src/mame/includes/electron.h
index 77752b9a38e..70eaa55f413 100644
--- a/src/mame/includes/electron.h
+++ b/src/mame/includes/electron.h
@@ -106,6 +106,7 @@ protected:
virtual void machine_reset() override;
virtual void video_start() override;
+ virtual void device_register_save(save_registrar &save);
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
required_device<cpu_device> m_maincpu;
@@ -149,6 +150,23 @@ protected:
int stop_bit;
int tape_running;
uint8_t tape_byte;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(interrupt_status))
+ .reg(NAME(interrupt_control))
+ .reg(NAME(rompage))
+ .reg(NAME(screen_start))
+ .reg(NAME(screen_base))
+ .reg(NAME(screen_size))
+ .reg(NAME(screen_addr))
+ .reg(NAME(screen_dispend))
+ .reg(NAME(current_pal))
+ .reg(NAME(communication_mode))
+ .reg(NAME(screen_mode))
+ .reg(NAME(cassette_motor_mode))
+ .reg(NAME(capslock_mode));
+ }
};
ULA m_ula;
@@ -179,6 +197,8 @@ protected:
virtual void machine_start() override;
+ virtual void device_register_save(save_registrar &save);
+
private:
required_memory_region m_region_sp64;
required_device<via6522_device> m_via;
diff --git a/src/mame/includes/snes.h b/src/mame/includes/snes.h
index 13f73509bd7..1f6e2f49c94 100644
--- a/src/mame/includes/snes.h
+++ b/src/mame/includes/snes.h
@@ -320,6 +320,7 @@ protected:
virtual void machine_start() override;
virtual void machine_reset() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
enum
@@ -374,6 +375,22 @@ protected:
int do_transfer;
int dma_disabled; // used to stop DMA if HDMA is enabled (currently not implemented, see machine/snes.c)
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(dmap))
+ .reg(NAME(dest_addr))
+ .reg(NAME(src_addr))
+ .reg(NAME(bank))
+ .reg(NAME(trans_size))
+ .reg(NAME(ibank))
+ .reg(NAME(hdma_addr))
+ .reg(NAME(hdma_iaddr))
+ .reg(NAME(hdma_line_counter))
+ .reg(NAME(unk))
+ .reg(NAME(do_transfer))
+ .reg(NAME(dma_disabled));
+ }
} m_dma_channel[8];
uint8_t m_hdmaen; /* channels enabled for HDMA */
uint8_t m_dma_regs[0x80];
diff --git a/src/mame/machine/electron.cpp b/src/mame/machine/electron.cpp
index ac6b9df4dc4..00e1152b298 100644
--- a/src/mame/machine/electron.cpp
+++ b/src/mame/machine/electron.cpp
@@ -600,23 +600,13 @@ void electron_state::machine_start()
m_ula.interrupt_control = 0x00;
timer_set(attotime::zero, TIMER_SETUP_BEEP);
m_tape_timer = timer_alloc(TIMER_TAPE_HANDLER);
+}
- /* register save states */
- save_item(STRUCT_MEMBER(m_ula, interrupt_status));
- save_item(STRUCT_MEMBER(m_ula, interrupt_control));
- save_item(STRUCT_MEMBER(m_ula, rompage));
- save_item(STRUCT_MEMBER(m_ula, screen_start));
- save_item(STRUCT_MEMBER(m_ula, screen_base));
- save_item(STRUCT_MEMBER(m_ula, screen_size));
- save_item(STRUCT_MEMBER(m_ula, screen_addr));
- save_item(STRUCT_MEMBER(m_ula, screen_dispend));
- save_item(STRUCT_MEMBER(m_ula, current_pal));
- save_item(STRUCT_MEMBER(m_ula, communication_mode));
- save_item(STRUCT_MEMBER(m_ula, screen_mode));
- save_item(STRUCT_MEMBER(m_ula, cassette_motor_mode));
- save_item(STRUCT_MEMBER(m_ula, capslock_mode));
- save_item(NAME(m_mrb_mapped));
- save_item(NAME(m_vdu_drivers));
+void electron_state::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_ula))
+ .reg(NAME(m_mrb_mapped))
+ .reg(NAME(m_vdu_drivers));
}
void electron_state::machine_reset()
@@ -640,10 +630,13 @@ void electronsp_state::machine_start()
electron_state::machine_start();
m_sp64_ram = std::make_unique<uint8_t[]>(0x2000);
+}
- /* register save states */
- save_item(NAME(m_sp64_bank));
- save_pointer(NAME(m_sp64_ram), 0x2000);
+void electronsp_state::device_register_save(save_registrar &save)
+{
+ electron_state::device_register_save(save);
+ save.reg(NAME(m_sp64_bank))
+ .reg(NAME(m_sp64_ram), 0x2000);
}
diff --git a/src/mame/machine/p2000t_mdcr.cpp b/src/mame/machine/p2000t_mdcr.cpp
index 568364de3cf..485d9c27bba 100644
--- a/src/mame/machine/p2000t_mdcr.cpp
+++ b/src/mame/machine/p2000t_mdcr.cpp
@@ -103,23 +103,20 @@ void mdcr_device::device_start()
{
m_read_timer = timer_alloc();
m_read_timer->adjust(attotime::from_hz(44100), 0, attotime::from_hz(44100));
+}
- save_item(NAME(m_fwd));
- save_item(NAME(m_rev));
- save_item(NAME(m_rdc));
- save_item(NAME(m_rda));
- save_item(NAME(m_wda));
- save_item(NAME(m_recording));
- save_item(NAME(m_fwd_pulse_time));
- save_item(NAME(m_last_tape_time));
- save_item(NAME(m_save_tape_time));
- // Phase decoder
- save_item(STRUCT_MEMBER(m_phase_decoder, m_last_signal));
- save_item(STRUCT_MEMBER(m_phase_decoder, m_needs_sync));
- save_item(STRUCT_MEMBER(m_phase_decoder, m_bit_queue));
- save_item(STRUCT_MEMBER(m_phase_decoder, m_bit_place));
- save_item(STRUCT_MEMBER(m_phase_decoder, m_current_clock));
- save_item(STRUCT_MEMBER(m_phase_decoder, m_clock_period));
+void mdcr_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_fwd))
+ .reg(NAME(m_rev))
+ .reg(NAME(m_rdc))
+ .reg(NAME(m_rda))
+ .reg(NAME(m_wda))
+ .reg(NAME(m_recording))
+ .reg(NAME(m_fwd_pulse_time))
+ .reg(NAME(m_last_tape_time))
+ .reg(NAME(m_save_tape_time))
+ .reg(NAME(m_phase_decoder));
}
void mdcr_device::device_pre_save()
diff --git a/src/mame/machine/p2000t_mdcr.h b/src/mame/machine/p2000t_mdcr.h
index 9b312ed42d7..831192a2466 100644
--- a/src/mame/machine/p2000t_mdcr.h
+++ b/src/mame/machine/p2000t_mdcr.h
@@ -73,6 +73,7 @@ public:
protected:
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_pre_save() override;
virtual void device_post_load() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
@@ -121,6 +122,17 @@ private:
/// Reset the clock state, the system will now need to resynchronize on 0xAA.
void reset();
+ /// Register variables for saving.
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(m_last_signal))
+ .reg(NAME(m_needs_sync))
+ .reg(NAME(m_bit_queue))
+ .reg(NAME(m_bit_place))
+ .reg(NAME(m_current_clock))
+ .reg(NAME(m_clock_period));
+ }
+
private:
// add a bit and reset the current clock.
void add_bit(bool bit);
@@ -137,7 +149,6 @@ private:
static constexpr int QUEUE_DELAY = 2;
public:
- // Needed for save state.
bool m_last_signal{ false };
int m_needs_sync{ SYNCBITS };
uint8_t m_bit_queue{ 0 };
diff --git a/src/mame/machine/rosetta.cpp b/src/mame/machine/rosetta.cpp
index 29972776c52..a459647b933 100644
--- a/src/mame/machine/rosetta.cpp
+++ b/src/mame/machine/rosetta.cpp
@@ -207,22 +207,6 @@ void rosetta_device::device_start()
m_out_mchk.resolve_safe();
m_leds.resolve();
- save_item(NAME(m_segment));
- save_item(NAME(m_control));
- save_item(NAME(m_mear_lock));
- save_item(NAME(m_rmdr_lock));
- save_item(NAME(m_led_lock));
- save_item(NAME(m_pchk_state));
-
- save_item(STRUCT_MEMBER(m_tlb, field0));
- save_item(STRUCT_MEMBER(m_tlb, field1));
- save_item(STRUCT_MEMBER(m_tlb, field2));
- save_item(NAME(m_tlb_lru));
-
- save_pointer(NAME(m_ram), m_ram_size);
- save_pointer(NAME(m_ecc), m_ram_size);
- save_pointer(NAME(m_rca), 2048);
-
config_tlb();
m_ram = std::make_unique<u32[]>(m_ram_size);
@@ -234,6 +218,22 @@ void rosetta_device::device_start()
m_mem_space->cache(m_mem);
}
+void rosetta_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_segment))
+ .reg(NAME(m_control))
+ .reg(NAME(m_mear_lock))
+ .reg(NAME(m_rmdr_lock))
+ .reg(NAME(m_led_lock))
+ .reg(NAME(m_pchk_state))
+ .reg(NAME(m_tlb))
+ .reg(NAME(m_tlb_lru))
+
+ .reg(NAME(m_ram), m_ram_size)
+ .reg(NAME(m_ecc), m_ram_size)
+ .reg(NAME(m_rca), 2048);
+}
+
void rosetta_device::device_reset()
{
m_mear_lock = UNLOCKED;
diff --git a/src/mame/machine/rosetta.h b/src/mame/machine/rosetta.h
index a97036a01fc..7ef2eab06ab 100644
--- a/src/mame/machine/rosetta.h
+++ b/src/mame/machine/rosetta.h
@@ -54,6 +54,7 @@ protected:
// device_t overrides
virtual void device_validity_check(validity_checker &valid) const override;
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_reset() override;
virtual void device_post_load() override;
@@ -93,6 +94,8 @@ protected:
u32 field0 = 0; // address tag
u32 field1 = 0; // real page, valid, key
u32 field2 = 0; // write, transaction identifier, lockbits
+
+ void register_save(save_registrar &save) { save.reg(NAME(field0)).reg(NAME(field1)).reg(NAME(field2)); }
};
tlb_entry tlb_search(u64 const virtual_address, bool const special);
u32 tlb_reload(tlb_entry &tlb_entry, u64 const virtual_address, bool special = false);
diff --git a/src/mame/machine/snes.cpp b/src/mame/machine/snes.cpp
index 5afd2019388..f3fcb737167 100644
--- a/src/mame/machine/snes.cpp
+++ b/src/mame/machine/snes.cpp
@@ -1071,34 +1071,6 @@ void snes_state::machine_start()
snes_init_timers();
- save_item(STRUCT_MEMBER(m_dma_channel, dmap));
- save_item(STRUCT_MEMBER(m_dma_channel, dest_addr));
- save_item(STRUCT_MEMBER(m_dma_channel, src_addr));
- save_item(STRUCT_MEMBER(m_dma_channel, bank));
- save_item(STRUCT_MEMBER(m_dma_channel, trans_size));
- save_item(STRUCT_MEMBER(m_dma_channel, ibank));
- save_item(STRUCT_MEMBER(m_dma_channel, hdma_addr));
- save_item(STRUCT_MEMBER(m_dma_channel, hdma_iaddr));
- save_item(STRUCT_MEMBER(m_dma_channel, hdma_line_counter));
- save_item(STRUCT_MEMBER(m_dma_channel, unk));
- save_item(STRUCT_MEMBER(m_dma_channel, do_transfer));
- save_item(STRUCT_MEMBER(m_dma_channel, dma_disabled));
-
- save_item(NAME(m_hblank_offset));
- save_item(NAME(m_wram_address));
- save_item(NAME(m_htime));
- save_item(NAME(m_vtime));
- save_item(NAME(m_hdmaen));
- save_item(NAME(m_data1));
- save_item(NAME(m_data2));
- save_item(NAME(m_read_idx));
- save_item(NAME(m_dma_regs));
- save_item(NAME(m_cpu_regs));
- save_item(NAME(m_oldjoy1_latch));
- save_item(NAME(m_input_disabled));
- save_item(NAME(m_game_over_flag));
- save_item(NAME(m_joy_flag));
-
m_is_nss = 0;
m_is_sfcbox = 0;
m_input_disabled = 0;
@@ -1107,6 +1079,25 @@ void snes_state::machine_start()
m_wram_address = 0;
}
+void snes_state::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_dma_channel))
+ .reg(NAME(m_hblank_offset))
+ .reg(NAME(m_wram_address))
+ .reg(NAME(m_htime))
+ .reg(NAME(m_vtime))
+ .reg(NAME(m_hdmaen))
+ .reg(NAME(m_data1))
+ .reg(NAME(m_data2))
+ .reg(NAME(m_read_idx))
+ .reg(NAME(m_dma_regs))
+ .reg(NAME(m_cpu_regs))
+ .reg(NAME(m_oldjoy1_latch))
+ .reg(NAME(m_input_disabled))
+ .reg(NAME(m_game_over_flag))
+ .reg(NAME(m_joy_flag));
+}
+
void snes_state::machine_reset()
{
snes_init_ram();
diff --git a/src/mame/video/bbc.cpp b/src/mame/video/bbc.cpp
index f2d642c4d4e..5ba8ced6e97 100644
--- a/src/mame/video/bbc.cpp
+++ b/src/mame/video/bbc.cpp
@@ -383,18 +383,6 @@ void bbc_state::video_start()
set_pixel_lookup();
m_video_ram = m_ram->pointer();
-
- // register save states
- save_item(NAME(m_vula_ctrl));
- save_item(NAME(m_vula_palette));
- save_item(NAME(m_vula_palette_lookup));
- save_item(STRUCT_MEMBER(m_vnula, palette_mode));
- save_item(STRUCT_MEMBER(m_vnula, horiz_offset));
- save_item(STRUCT_MEMBER(m_vnula, left_blank));
- save_item(STRUCT_MEMBER(m_vnula, disable));
- save_item(STRUCT_MEMBER(m_vnula, flash));
- save_item(STRUCT_MEMBER(m_vnula, palette_byte));
- save_item(STRUCT_MEMBER(m_vnula, palette_write));
}
void bbc_state::video_reset()
diff --git a/src/mame/video/k057714.cpp b/src/mame/video/k057714.cpp
index 447f7220510..d89b6041de4 100644
--- a/src/mame/video/k057714.cpp
+++ b/src/mame/video/k057714.cpp
@@ -39,41 +39,39 @@ void k057714_device::device_start()
m_irq.resolve_safe();
m_vram = std::make_unique<uint32_t[]>(VRAM_SIZE/4);
+}
- save_pointer(NAME(m_vram), VRAM_SIZE/4);
- save_item(NAME(m_vram_read_addr));
- save_item(NAME(m_vram_fifo0_addr));
- save_item(NAME(m_vram_fifo1_addr));
- save_item(NAME(m_vram_fifo0_mode));
- save_item(NAME(m_vram_fifo1_mode));
- save_item(NAME(m_command_fifo0));
- save_item(NAME(m_command_fifo0_ptr));
- save_item(NAME(m_command_fifo1));
- save_item(NAME(m_command_fifo1_ptr));
- save_item(NAME(m_ext_fifo_addr));
- save_item(NAME(m_ext_fifo_count));
- save_item(NAME(m_ext_fifo_line));
- save_item(NAME(m_ext_fifo_num_lines));
- save_item(NAME(m_ext_fifo_width));
- save_item(STRUCT_MEMBER(m_frame, base));
- save_item(STRUCT_MEMBER(m_frame, width));
- save_item(STRUCT_MEMBER(m_frame, height));
- save_item(STRUCT_MEMBER(m_frame, x));
- save_item(STRUCT_MEMBER(m_frame, y));
- save_item(STRUCT_MEMBER(m_frame, alpha));
- save_item(NAME(m_fb_origin_x));
- save_item(NAME(m_fb_origin_y));
- save_item(NAME(m_layer_select));
- save_item(NAME(m_reg_6c));
- save_item(NAME(m_display_h_visarea));
- save_item(NAME(m_display_h_frontporch));
- save_item(NAME(m_display_h_backporch));
- save_item(NAME(m_display_h_syncpulse));
- save_item(NAME(m_display_v_visarea));
- save_item(NAME(m_display_v_frontporch));
- save_item(NAME(m_display_v_backporch));
- save_item(NAME(m_display_v_syncpulse));
- save_item(NAME(m_pixclock));
+void k057714_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_vram), VRAM_SIZE/4)
+ .reg(NAME(m_vram_read_addr))
+ .reg(NAME(m_vram_fifo0_addr))
+ .reg(NAME(m_vram_fifo1_addr))
+ .reg(NAME(m_vram_fifo0_mode))
+ .reg(NAME(m_vram_fifo1_mode))
+ .reg(NAME(m_command_fifo0))
+ .reg(NAME(m_command_fifo0_ptr))
+ .reg(NAME(m_command_fifo1))
+ .reg(NAME(m_command_fifo1_ptr))
+ .reg(NAME(m_ext_fifo_addr))
+ .reg(NAME(m_ext_fifo_count))
+ .reg(NAME(m_ext_fifo_line))
+ .reg(NAME(m_ext_fifo_num_lines))
+ .reg(NAME(m_ext_fifo_width))
+ .reg(NAME(m_frame))
+ .reg(NAME(m_fb_origin_x))
+ .reg(NAME(m_fb_origin_y))
+ .reg(NAME(m_layer_select))
+ .reg(NAME(m_reg_6c))
+ .reg(NAME(m_display_h_visarea))
+ .reg(NAME(m_display_h_frontporch))
+ .reg(NAME(m_display_h_backporch))
+ .reg(NAME(m_display_h_syncpulse))
+ .reg(NAME(m_display_v_visarea))
+ .reg(NAME(m_display_v_frontporch))
+ .reg(NAME(m_display_v_backporch))
+ .reg(NAME(m_display_v_syncpulse))
+ .reg(NAME(m_pixclock));
}
void k057714_device::device_reset()
diff --git a/src/mame/video/k057714.h b/src/mame/video/k057714.h
index 5e6565f5ff8..4d5170e83ae 100644
--- a/src/mame/video/k057714.h
+++ b/src/mame/video/k057714.h
@@ -30,10 +30,21 @@ public:
int x;
int y;
int alpha;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(base))
+ .reg(NAME(width))
+ .reg(NAME(height))
+ .reg(NAME(x))
+ .reg(NAME(y))
+ .reg(NAME(alpha));
+ }
};
protected:
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_stop() override;
virtual void device_reset() override;