Fix regressions in games with buffered spriteram.

This commit is contained in:
Aaron Giles 2010-12-06 18:12:28 +00:00
parent 1d37415a4a
commit aecc1c8512
4 changed files with 25 additions and 33 deletions

View File

@ -276,7 +276,6 @@ void running_machine::start()
palette_init(this);
m_render = auto_alloc(this, render_manager(*this));
generic_machine_init(this);
generic_video_init(this);
generic_sound_init(this);
// initialize the timers and allocate a soft_reset timer
@ -313,6 +312,9 @@ void running_machine::start()
memory_init(this);
watchdog_init(this);
// must happen after memory_init because this relies on generic.spriteram
generic_video_init(this);
// allocate the gfx elements prior to device initialization
gfx_init(this);

View File

@ -141,10 +141,6 @@ video_manager::video_manager(running_machine &machine)
// extract initial execution state from global configuration settings
update_refresh_speed();
// create spriteram buffers if necessary
if (machine.config->m_video_attributes & VIDEO_BUFFERS_SPRITERAM)
init_buffered_spriteram();
// create a render target for snapshots
const char *viewname = options_get_string(machine.options(), OPTION_SNAPVIEW);
m_snap_native = (machine.primary_screen != NULL && (viewname[0] == 0 || strcmp(viewname, "native") == 0));
@ -527,33 +523,6 @@ void video_manager::add_sound_to_recording(const INT16 *sound, int numsamples)
//-------------------------------------------------
// init_buffered_spriteram - initialize the
// double-buffered spriteram
//-------------------------------------------------
void video_manager::init_buffered_spriteram()
{
assert_always(m_machine.generic.spriteram_size != 0, "Video buffers spriteram but spriteram size is 0");
// allocate memory for the back buffer
m_machine.generic.buffered_spriteram.u8 = auto_alloc_array(&m_machine, UINT8, m_machine.generic.spriteram_size);
// register for saving it
state_save_register_global_pointer(&m_machine, m_machine.generic.buffered_spriteram.u8, m_machine.generic.spriteram_size);
// do the same for the second back buffer, if present
if (m_machine.generic.spriteram2_size)
{
// allocate memory
m_machine.generic.buffered_spriteram2.u8 = auto_alloc_array(&m_machine, UINT8, m_machine.generic.spriteram2_size);
// register for saving it
state_save_register_global_pointer(&m_machine, m_machine.generic.buffered_spriteram2.u8, m_machine.generic.spriteram2_size);
}
}
//-------------------------------------------------
// video_exit - close down the video system
//-------------------------------------------------

View File

@ -117,7 +117,6 @@ public:
private:
// internal helpers
void init_buffered_spriteram();
static void exit_static(running_machine &machine);
void exit();
static TIMER_CALLBACK( screenless_update_callback );

View File

@ -235,6 +235,28 @@ void generic_video_init(running_machine *machine)
state_save_register_item(machine, "video", NULL, 0, state->flip_screen_x);
state_save_register_item(machine, "video", NULL, 0, state->flip_screen_y);
// create spriteram buffers if necessary
if (machine->config->m_video_attributes & VIDEO_BUFFERS_SPRITERAM)
{
assert_always(machine->generic.spriteram_size != 0, "Video buffers spriteram but spriteram size is 0");
// allocate memory for the back buffer
machine->generic.buffered_spriteram.u8 = auto_alloc_array(machine, UINT8, machine->generic.spriteram_size);
// register for saving it
state_save_register_global_pointer(machine, machine->generic.buffered_spriteram.u8, machine->generic.spriteram_size);
// do the same for the second back buffer, if present
if (machine->generic.spriteram2_size)
{
// allocate memory
machine->generic.buffered_spriteram2.u8 = auto_alloc_array(machine, UINT8, machine->generic.spriteram2_size);
// register for saving it
state_save_register_global_pointer(machine, machine->generic.buffered_spriteram2.u8, machine->generic.spriteram2_size);
}
}
}