diff options
author | Zsolt Vasvari <zsoltvas@mamedev.org> | 2008-02-21 12:00:00 +0000 |
---|---|---|
committer | Zsolt Vasvari <zsoltvas@mamedev.org> | 2008-02-21 12:00:00 +0000 |
commit | e619861862dea975c7e4ef70d9737ff0b92e06d2 (patch) | |
tree | ec7050b545205713c9f047aab69b0ba2d6e06521 | |
parent | 0ab1b992b7c3018d27783c3a3e4ad6ec53f6d341 (diff) |
- Added void state_save_combine_module_and_tag(char *dest, const char *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
-rw-r--r-- | src/emu/state.c | 47 | ||||
-rw-r--r-- | src/emu/state.h | 3 | ||||
-rw-r--r-- | src/emu/video/mc6845.c | 38 |
3 files changed, 72 insertions, 16 deletions
diff --git a/src/emu/state.c b/src/emu/state.c index 3f9b2996fd4..acab84f1380 100644 --- a/src/emu/state.c +++ b/src/emu/state.c @@ -947,6 +947,53 @@ const char *state_save_get_indexed_item(int index, void **base, UINT32 *valsize, /*------------------------------------------------- + state_save_combine_module_and_tag - creates + a name from a given module and tag that can + be used as the first agrument to the + state_save_register_item family of functions +-------------------------------------------------*/ + +void state_save_combine_module_and_tag(char *dest, const char *module, const char *tag) +{ + astring *module_lower; + astring *tag_lower; + astring *combined; + + /* validate arguments */ + assert(dest != NULL); + assert(module != NULL); + assert(tag != NULL); + assert(strlen(module) > 0); + assert(strlen(tag) > 0); + + /* allocate objects */ + module_lower = astring_alloc(); + tag_lower = astring_alloc(); + combined = astring_alloc(); + + /* convert both arguments to lower case for case insenstive comparisson */ + astring_tolower(astring_cpyc(module_lower, module)); + astring_tolower(astring_cpyc(tag_lower, tag)); + + /* if the tag contains the module name, just use the tag as the combined name */ + if (astring_find(tag_lower, 0, module_lower) >= 0) + astring_cpyc(combined, tag); + + /* otherwise combine the module and the tag */ + else + astring_assemble_3(combined, module, ".", tag); + + /* copy the result to the destination array */ + strcpy(dest, astring_c(combined)); + + /* free the objects */ + astring_free(module_lower); + astring_free(tag_lower); + astring_free(combined); +} + + +/*------------------------------------------------- state_save_dump_registry - dump the registry to the logfile -------------------------------------------------*/ diff --git a/src/emu/state.h b/src/emu/state.h index 48c1a0218ae..0214e6b290c 100644 --- a/src/emu/state.h +++ b/src/emu/state.h @@ -111,6 +111,9 @@ void state_save_load_continue(void); void state_save_save_finish(void); void state_save_load_finish(void); +/* Helper function for creating a unique name */ +void state_save_combine_module_and_tag(char *dest, const char *module, const char *tag); + /* Display function */ void state_save_dump_registry(void); diff --git a/src/emu/video/mc6845.c b/src/emu/video/mc6845.c index 965fafcb46c..6b9addc9772 100644 --- a/src/emu/video/mc6845.c +++ b/src/emu/video/mc6845.c @@ -413,8 +413,12 @@ void mc6845_update(mc6845_t *mc6845, mame_bitmap *bitmap, const rectangle *clipr static void *mc6845_start(running_machine *machine, const char *tag, const void *static_config, const void *inline_config) { mc6845_t *mc6845; + char unique_tag[30]; + /* validate arguments */ assert(machine != NULL); + assert(tag != NULL); + assert(strlen(tag) < 20); /* allocate the object that holds the state */ mc6845 = auto_malloc(sizeof(*mc6845)); @@ -429,24 +433,26 @@ static void *mc6845_start(running_machine *machine, const char *tag, const void mc6845->display_enable_changed_timer = timer_alloc(display_enable_changed_timer_cb, mc6845); /* register for state saving */ + state_save_combine_module_and_tag(unique_tag, "mc6845", tag); + state_save_register_func_postload_ptr(mc6845_state_save_postload, mc6845); - state_save_register_item("mc6845", 0, mc6845->address_latch); - state_save_register_item("mc6845", 0, mc6845->horiz_total); - state_save_register_item("mc6845", 0, mc6845->horiz_disp); - state_save_register_item("mc6845", 0, mc6845->horiz_sync_pos); - state_save_register_item("mc6845", 0, mc6845->sync_width); - state_save_register_item("mc6845", 0, mc6845->vert_total); - state_save_register_item("mc6845", 0, mc6845->vert_total_adj); - state_save_register_item("mc6845", 0, mc6845->vert_disp); - state_save_register_item("mc6845", 0, mc6845->vert_sync_pos); - state_save_register_item("mc6845", 0, mc6845->intl_skew); - state_save_register_item("mc6845", 0, mc6845->max_ras_addr); - state_save_register_item("mc6845", 0, mc6845->cursor_start_ras); - state_save_register_item("mc6845", 0, mc6845->cursor_end_ras); - state_save_register_item("mc6845", 0, mc6845->start_addr); - state_save_register_item("mc6845", 0, mc6845->cursor); - state_save_register_item("mc6845", 0, mc6845->light_pen); + state_save_register_item(unique_tag, 0, mc6845->address_latch); + state_save_register_item(unique_tag, 0, mc6845->horiz_total); + state_save_register_item(unique_tag, 0, mc6845->horiz_disp); + state_save_register_item(unique_tag, 0, mc6845->horiz_sync_pos); + state_save_register_item(unique_tag, 0, mc6845->sync_width); + state_save_register_item(unique_tag, 0, mc6845->vert_total); + state_save_register_item(unique_tag, 0, mc6845->vert_total_adj); + state_save_register_item(unique_tag, 0, mc6845->vert_disp); + state_save_register_item(unique_tag, 0, mc6845->vert_sync_pos); + state_save_register_item(unique_tag, 0, mc6845->intl_skew); + state_save_register_item(unique_tag, 0, mc6845->max_ras_addr); + state_save_register_item(unique_tag, 0, mc6845->cursor_start_ras); + state_save_register_item(unique_tag, 0, mc6845->cursor_end_ras); + state_save_register_item(unique_tag, 0, mc6845->start_addr); + state_save_register_item(unique_tag, 0, mc6845->cursor); + state_save_register_item(unique_tag, 0, mc6845->light_pen); return mc6845; } |