diff options
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 |
commit | 90c5a29f41bb7402cf180c4f852e4e9d7aabffd1 (patch) | |
tree | 10979938a63e7129a685c461a00dada4998dae94 | |
parent | d27be276f3dd64fd8a4719e34f7e755b01df8bde (diff) |
Replace remaining STRUCT_MEMBER macros with proper structured saves.
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; |