static WRITE8_HANDLER( gfx1_cram_w ) { FIX_OFFSET(); if(gfx1_cram[offset] != data) { gfx1_cram[offset] = data; tilemap_mark_tile_dirty(gfx1_tilemap,offset); } }
static READ8_HANDLER( gfx1_cram_r ) { FIX_OFFSET(); return gfx1_cram[offset]; }
static void relocate_db(prolog_database *db, block_info *old_blocks) { int i; /* Do offsets */ #define FIX_OFFSET(p) fix_offset(((void **)p), db, old_blocks) /* Fix pointers in amheader */ FIX_OFFSET(&db->als_mem->freelist); { long *p; for (p = db->als_mem->freelist; p; p = FB_NEXT(p)) { if (FB_NEXT(p)) FIX_OFFSET(&FB_NEXT(p)); } } /* Fix db pointers */ FIX_OFFSET(&db->top_module); FIX_OFFSET(&db->module_stack); FIX_OFFSET(&db->top_clausegroup); FIX_OFFSET(&db->clausegroup_stack); FIX_OFFSET(&db->module_table); FIX_OFFSET(&db->use_table); FIX_OFFSET(&db->default_uses); FIX_OFFSET(&db->default_procs); FIX_OFFSET(&db->toktable); FIX_OFFSET(&db->hashtable); for (i = 0; i < db->ts_prime; i++) { FIX_OFFSET(&db->toktable[i].tkname); if (db->hashtable[i]) FIX_OFFSET(&db->hashtable[i]); } FIX_OFFSET(&db->strings); FIX_OFFSET(&db->strings_last); FIX_OFFSET(&db->strings_next); FIX_OFFSET(&db->char_to_tok_map); FIX_OFFSET(&db->w_freeptr); { long *p; for (p = db->w_freeptr; 1; ) { FIX_OFFSET((long **)p+WCI_BLINK); FIX_OFFSET((long **)p+WCI_FLINK); p = *((long **) p + WCI_FLINK); if (p == db->w_freeptr) break; } } FIX_OFFSET(&db->w_tofreelist); { long *p; p = db->w_tofreelist; while (p) { if (*((long **) p + WCI_NEXTCLAUSEADDR)) FIX_OFFSET((long **) p + WCI_NEXTCLAUSEADDR); p = *((long **) p + WCI_NEXTCLAUSEADDR); } } FIX_OFFSET(&db->w_nametable); { for (i = 0; i < NTBL_SIZE; i++) { if (db->w_nametable[i]) { FIX_OFFSET(&db->w_nametable[i]); if (db->w_nametable[i]->first_clause) { long *p; FIX_OFFSET(&db->w_nametable[i]->first_clause); p = db->w_nametable[i]->first_clause; while (p) { FIX_OFFSET(&nextClauseAddr(p)); relocate_code(choiceEntry(p), sizeCode(p), db, old_blocks); p = next_clause(p); } } if (db->w_nametable[i]->last_clause) FIX_OFFSET(&db->w_nametable[i]->last_clause); if (db->w_nametable[i]->index_block) { long *p; FIX_OFFSET(&db->w_nametable[i]->index_block); p = db->w_nametable[i]->index_block; relocate_code(choiceEntry(p)+2, sizeCode(p), db, old_blocks); } relocate_code(db->w_nametable[i]->overflow, (int) (NTBL_OVERFLOWSIZE + NTBL_CALLENTRYSIZE + NTBL_EXECENTRYSIZE + NTBL_CODESIZE), db, old_blocks); } } } FIX_OFFSET(&db->codeblock_list); { struct codeblock *p; for (p = db->codeblock_list; p; p = p->next) { FIX_OFFSET(&p->addr); FIX_OFFSET(&p->next); } } FIX_OFFSET(&db->ane_entbase); FIX_OFFSET(&db->ane_entptr); FIX_OFFSET(&db->wm_fail); relocate_code(db->wm_fail, 64, db, old_blocks); FIX_OFFSET(&db->wm_trust_fail); FIX_OFFSET(&db->wm_return_success); FIX_OFFSET(&db->wm_special); FIX_OFFSET(&db->wm_rungoal_code); FIX_OFFSET(&db->wm_panic); FIX_OFFSET(&db->wm_cutaddr); FIX_OFFSET(&db->wm_overcode); FIX_OFFSET(&db->rungoal_modpatch); FIX_OFFSET(&db->rungoal_goalpatch); #undef FIX_OFFSET }