summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/state.c
Commit message (Collapse)AuthorAgeFilesLines
* Rename state_manager -> save_manager since the term "state" is overloaded. Aaron Giles2011-04-201-485/+0
|
* Switch from m_machine to machine() everywhere. In some cases this Aaron Giles2011-04-181-8/+8
| | | | | | | | | | | meant adding a machine() accessor but it's worth it for consistency. This will allow future changes from reference to pointer to happen transparently for devices. [Aaron Giles] Simple S&R: m_machine( *[^ (!=;]) machine()\1
* Removed various differences between MESS and MAME, all is now defined in mame.h. Miodrag Milanovic2011-04-141-7/+1
| | | This should allow hopefully easier maintenance (no whatsnew)
* BIG update. Aaron Giles2011-03-291-8/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Remove redundant machine items from address_space and device_t. Neither machine nor m_machine are directly accessible anymore. Instead a new getter machine() is available which returns a machine reference. So: space->machine->xxx ==> space->machine().xxx device->machine->yyy ==> device->machine().yyy Globally changed all running_machine pointers to running_machine references. Any function/method that takes a running_machine takes it as a required parameter (1 or 2 exceptions). Being consistent here gets rid of a lot of odd &machine or *machine, but it does mean a very large bulk change across the project. Structs which have a running_machine * now have that variable renamed to m_machine, and now have a shiny new machine() method that works like the space and device methods above. Since most of these are things that should eventually be devices anyway, consider this a step in that direction. 98% of the update was done with regex searches. The changes are architected such that the compiler will catch the remaining errors: // find things that use an embedded machine directly and replace // with a machine() getter call S: ->machine-> R: ->machine\(\)\. // do the same if via a reference S: \.machine-> R: \.machine\(\)\. // convert function parameters to running_machine & S: running_machine \*machine([^;]) R: running_machine \&machine\1 // replace machine-> with machine. S: machine-> R: machine\. // replace &machine() with machine() S: \&([()->a-z0-9_]+machine\(\)) R: \1 // sanity check: look for this used as a cast (running_machine &) // and change to this: *(running_machine *)
* Cleanup of machine.h. Shuffled some fields around, and moved several Aaron Giles2011-03-281-6/+6
| | | | | | | | | | | | | to private member variables with accessors: machine->m_respool ==> machine->respool() machine->config ==> machine->config() machine->gamedrv ==> machine->system() machine->m_regionlist ==> machine->first_region() machine->sample_rate ==> machine->sample_rate() Also converted internal lists to use simple_list.
* mame_file is now emu_file and is a class. It is required Aaron Giles2011-02-121-16/+16
| | | | | | | | | | | | | | | | | | | | | | | | to pass a core_options object to the constructor, along with a search path. This required pushing either a running_machine or a core_options through some code that wasn't previously ready to handle it. emu_files can be reused over multiple open/close sessions, and a lot of core code cleaned up nicely as things were converted to them. Also created a file_enumerator class for iterating over files in a searchpath. This replaces the old mame_openpath functions. Changed machine->options() to return a reference. Removed public nvram_open() and fixed jchan/kaneko16 to stop directly saving NVRAM. Removed most of the mame_options() calls; this will soon go away entirely, so don't add any more. Added core_options to device_validity_check() so they can be used to validate things.
* Cleanups and version bump.mame0141u2 Aaron Giles2011-02-091-8/+8
|
* Get rid of state_save_register_device_* macros in favor of direct Aaron Giles2011-02-091-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | calls on the device object. Regex used: state_save_register_device_item( *)\(( *)([^,]+), *([^,]+),( *)([^ )]+)( *)\) \3->save_item\1\(\2NAME\(\6\),\5\4\7\) state_save_register_device_item_array( *)\(( *)([^,]+), *([^,]+),( *)([^ )]+)( *)\) \3->save_item\1\(\2NAME\(\6\),\5\4\7\) state_save_register_device_item_2d_array( *)\(( *)([^,]+), *([^,]+),( *)([^ )]+)( *)\) \3->save_item\1\(\2NAME\(\6\),\5\4\7\) state_save_register_device_item_bitmap( *)\(( *)([^,]+), *([^,]+),( *)([^ )]+)( *)\) \3->save_item\1\(\2NAME\(\*\6\),\5\4\7\) state_save_register_device_item_pointer( *)\(( *)([^,]+), *([^,]+),( *)([^,]+), *([^ )]+)( *)\) \3->save_pointer\1\(\2NAME\(\6\),\5\7,\5\4\8\) this->save_ save_ (save_item[^;]+), *0( *)\); \1\2\); (save_pointer[^;]+), *0( *)\); \1\2\);
* Moved the state saving system to C++. For now the registration macros Aaron Giles2011-02-081-455/+301
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | are still intact. The new state_manager class has templatized methods for saving the various types, and through template specialization can save more complex system types cleanly (like bitmaps and attotimes). Added new mechanism to detect proper state save types. This is much more strict and there will likely be some games/devices that fatalerror at startup until they are remedied. Spot checking has caught the more common situations. The new state_manager is embedded directly in the running_machine, allowing objects to register state saving in their constructors now. Added NAME() macro which is a generalization of FUNC() and can be used to wrap variables that are registered when directly using the new methods as opposed to the previous macros. For example: machine->state().save_item(NAME(global_item)) Added methods in the device_t class that implicitly register state against the current device, making for a cleaner interface. Just a couple of required regexes for now: state_save_register_postload( *)\(( *)([^,;]+), * \3->state().register_postload\1\(\2 state_save_register_presave( *)\(( *)([^,;]+), * \3->state().register_presave\1\(\2
* Silenced MSVC warnings. (no whatsnew) Curt Coder2010-08-231-12/+12
|
* VS2008 compiling fix [Miodrag Milanovic] (no whatsnew) Miodrag Milanovic2010-02-181-0/+2
|
* Cleanups and version bump. Aaron Giles2010-01-161-1/+1
|
* Try using type_traits for detection of valid save types. Aaron Giles2010-01-111-0/+34
|
* First round of an attempted cleanup of header files in the system. Aaron Giles2010-01-101-3/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Created new central header "emu.h"; this should be included by pretty much any driver or device as the first include. This file in turn includes pretty much everything a driver or device will need, minus any other devices it references. Note that emu.h should *never* be included by another header file. - Updated all files in the core (src/emu) to use emu.h. - Removed a ton of redundant and poorly-tracked header includes from within other header files. - Temporarily changed driver.h to map to emu.h until we update files outside of the core. Added class wrapper around tagmap so it can be directly included and accessed within objects that need it. Updated all users to embed tagmap objects and changed them to call through the class. Added nicer functions for finding devices, ports, and regions in a machine: machine->device("tag") -- return the named device, or NULL machine->port("tag") -- return the named port, or NULL machine->region("tag"[, &length[, &flags]]) -- return the named region and optionally its length and flags Made the device tag an astring. This required touching a lot of code that printed the device to explicitly fetch the C-string from it. (Thank you gcc for flagging that issue!)
* Extended the astring class wrapper into something useful, and Aaron Giles2010-01-081-10/+9
| | | | | | | | | | | | | | | | | | useable as a stack object. Also designed the interfaces to allow for chaining operations. And added a casting operator to const char * for seamless use in most functions that take plain old C strings. Changed all uses of astring to use the object directly on the stack or embedded in objects instead of explicitly allocating and deallocating it. Removed a lot of annoying memory management code as a result. Changed interfaces that accepted/returned an astring * to use an astring & instead. Removed auto_alloc_astring(machine). Use auto_alloc(machine, astring) instead.
* Added some missing header declarations and static qualifiers. Added ↵ Phil Bennett2010-01-061-0/+2
| | | | | | | | | | | | | | | | | | | | validity.h to the core for consistency as well as an explicit foo.h in each foo.c. [Atari Ace] ---------- Forwarded message ---------- From: Atari Ace <atari_ace@verizon.net> Date: Sat, Dec 26, 2009 at 5:01 PM Subject: [patch] Header/static cleanups To: submit@mamedev.org Cc: atariace@hotmail.com - Hide quoted text - Hi mamedev, This patch add some missing header declarations and static qualifiers, and adjusts a few names. In the core, it adds validity.h for consistency as well as an explicit foo.h in each foo.c. ~aa
* Get rid of explicit resource tracking for state saving. Now we just use Aaron Giles2009-12-231-85/+4
| | | | the auto_ allocators, since registration is restricted to initialization.
* And some more. Converted the ds2404 to a device along the way. Aaron Giles2009-12-211-2/+2
|
* Some misc cleanups: Aaron Giles2009-12-151-4/+4
| | | | | | | | | | | | | | | | - added warning messages for auto_malloc, timer, and save state allocations done after init time. These should be fixed when detected, as I would eventually like to disallow them entirely. - changed state registration functions to pass through the caller's file and line number to facilitate fixing the above warnings - converted Taito F3 sound to a separate machine driver which is imported into games that use it - converted the balsente driver to driver_data structure - converted harddriv timers into devices - fixed crash in cps2 games due to not configuring the qsound bank - cleaned up initialization in taito_l to allocate at init time instead of reset time
* Bulk change alert. Aaron Giles2009-04-261-6/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This update changes the way we handle memory allocation. Rather than allocating in terms of bytes, allocations are now done in terms of objects. This is done via new set of macros that replace the malloc_or_die() macro: alloc_or_die(t) - allocate memory for an object of type 't' alloc_array_or_die(t,c) - allocate memory for an array of 'c' objects of type 't' alloc_clear_or_die(t) - same as alloc_or_die but memset's the memory to 0 alloc_array_clear_or_die(t,c) - same as alloc_array_or_die but memset's the memory to 0 All original callers of malloc_or_die have been updated to call these new macros. If you just need an array of bytes, you can use alloc_array_or_die(UINT8, numbytes). Made a similar change to the auto_* allocation macros. In addition, added 'machine' as a required parameter to the auto-allocation macros, as the resource pools will eventually be owned by the machine object. The new macros are: auto_alloc(m,t) - allocate memory for an object of type 't' auto_alloc_array(m,t,c) - allocate memory for an array of 'c' objects of type 't' auto_alloc_clear(m,t) - allocate and memset auto_alloc_array_clear(m,t,c) - allocate and memset All original calls or auto_malloc have been updated to use the new macros. In addition, auto_realloc(), auto_strdup(), auto_astring_alloc(), and auto_bitmap_alloc() have been updated to take a machine parameter. Changed validity check allocations to not rely on auto_alloc* anymore because they are not done in the context of a machine. One final change that is included is the removal of SMH_BANKn macros. Just use SMH_BANK(n) instead, which is what the previous macros mapped to anyhow.
* Many casts added to the core files, and various other tweaks Aaron Giles2009-03-121-7/+7
| | | | to make them compile as either C or C++.
* Added new #define ENDIANNESS_NATIVE, which maps to either ENDIANNESS_LITTLE Aaron Giles2009-01-171-10/+2
| | | | | | | | | | | | | or ENDIANNESS_BIG based on the LSB_FIRST definition. Unlink LSB_FIRST, ENDIANNESS_NATIVE always exists and can be used in expressions without invoking the preprocessor. Added macro ENDIAN_VALUE_LE_BE() which selects one of two values based on the endianness passed in. Also added NATIVE_ENDIAN_VALUE_LE_BE() which calls ENDIAN_VALUE_LE_BE with ENDIANNESS_NATIVE. Updated a number of drivers and call sites to use these macros in favor of #ifdef LSB_FIRST.
* Cleanups and version bump. Aaron Giles2008-12-151-10/+10
|
* Fixed crash bug in DCS games. Aaron Giles2008-12-111-341/+150
| | | | | | | | | Updated the fcompress APIs to allow for specifying a compression level. Removed the concept of state saving tags, which was a hack to get save states to work with multiple CPU cores. Simplified the state saving system as a result, performing the operation in a single pass and without allocating a full blob of memory. Also enabled minimal compression.
* From: Atari Ace [mailto:atari_ace@verizon.net] Aaron Giles2008-12-071-2/+1
| | | | | | | | | | | | | | | | | | Sent: Saturday, December 06, 2008 4:52 PM To: submit@mamedev.org Cc: atariace@hotmail.com Subject: [patch] Deprecat.h cleanup Hi mamedev, This patch changes some global Machine references to use machine, device->machine, ... instead, and removes any unneeded #include "deprecat.h" lines as well (about 10% of them in fact). It was generated using the attached script, and then reverting some cases where it was overzealous. ~aa
* Cleanups/version bump/added missing drivers.mame0128u5 Aaron Giles2008-12-061-2/+2
|
* Changed save state system to accept machine parameters where Aaron Giles2008-12-051-186/+208
| | | | | | | | | | | | | | | | | | | | | | | | | | | appropriate, and to keep all global variables hanging off the machine structure. Once again, this means all state registration call sites have been touched: - state_save_register_global* now takes a machine parameter - state_save_register_item* now takes a machine parameter - added new state_save_register_device_item* which now uses the device name and tag to generate the base name Extended the fake sound devices to have more populated fields. Modified sound cores to use tags from the devices and simplified the start function. Renumbered CPU and sound get/set info constants to align with the device constants, and shared values where they were perfectly aligned. Set the type field in the fake device_configs for CPU and sound chips to a get_info stub which calls through to the CPU and sound specific get_info functions. This means the device_get_info() functions work for CPU and sound cores, even in their fake state. Changed device information getters from device_info() to device_get_info() to match the CPU and sound macros.
* Added "tag" parameter to state_save_register_item_* calls. Removed Aaron Giles2008-11-171-53/+9
| | | | | | state_save_combine_module_and_tag() function in favor of passing the tag when registering. Revisited all save state item registrations and changed them to use the tag where appropriate.
* From: Oliver Stoeneberg [mailto:oliverst@online.de] Aaron Giles2008-09-111-6/+6
| | | | | | | | Subject: Machine -> machine This is a big patch adding running_machine* parameters and using "machine" where available.
* Cleanups and version bump to 0.124u2.mame0124u2 Aaron Giles2008-04-121-2/+2
|
* Reduced the number of save state callback types from 3 to 1. The Aaron Giles2008-04-111-138/+42
| | | | | | | | | | | | | | only remaining form is the one that takes a pointer parameter. Added macros for STATE_PRESAVE and STATE_POSTLOAD to define common functions. Added machine parameter to these functions. Updated all drivers and CPU/sound cores to use the new macros and consolidate on the single function type. As a result pushed the machine parameter through a few initialization stacks. Removed unnecessary postload callbacks which only marked all tiles dirty, since this is done automatically by the tilemap engine.
* Made it a fatalerror to registr save state callbacks at the wrong time Aaron Giles2008-03-171-0/+4
| | | | if the current driver claims to support save states.
* Replaces mame_bitmap with bitmap_t Zsolt Vasvari2008-02-291-1/+1
| | | | Removes mame_bitmap
* - Added void state_save_combine_module_and_tag(char *dest, const char ↵ Zsolt Vasvari2008-02-211-0/+47
| | | | | | | | | *module, const char *tag); Its purpose is to create a unique name for state saving purposes in modules that are tag based (no index) - Updated MC6845 to make use of this
* - Added deprecat.h that contains some deprecated/discouraged contructs (see ↵ Zsolt Vasvari2008-01-251-0/+1
| | | | | | | | | below) The idea is to create extra work if a driver wants to use these and hopefully gives an incentive to look for an alternate solution - Added #include of deprecat.h that rely on these contructs - Removed a bunch of unneccassary #include's from these files
* Copyright cleanup: Aaron Giles2008-01-061-1/+1
| | | | | | - removed years from copyright notices - removed redundant (c) from copyright notices - updated "the MAME Team" to be "Nicola Salmoria and the MAME Team"
* (From Atari Ace) Aaron Giles2007-12-311-24/+18
| | | | | | | | The attached patch adjusts most conditional logging in MAME to use the idiom "do { if (VERBOSE) logerror x; } while (0)". This has the benefit that the compiler checks the syntax of the logging even in the case it will be eliminated, and in fact a number of cases here needed adjustments to compile because of this.
* Changes for MAME 0.121u4.mame0121u4 Aaron Giles2007-12-171-1/+1
|
* Initial checkin of MAME 0.121.mame0121 Aaron Giles2007-12-171-0/+966