#include "mapper.h" struct mapper_t { void* mapper_data; mapper_funcs_t funcs; }; void mapper_init(mapper_t** mapper, int* memory, int mapper_type) { mapper_t* pThis = NULL; assert(memory); assert(mapper_type >= 0 && mapper_type < MAPPER_LIST_END); (*mapper) = (mapper_t*)malloc(sizeof(mapper_t)); assert((*mapper)); pThis = (*mapper); switch (mapper_type) { case MAPPER_DIRECT: { mapper_direct_init((mapper_direct_t**)&pThis->mapper_data, memory, &pThis->funcs); break; } default: { break; } } } void mapper_kill(mapper_t* mapper) { mapper_t* pThis = mapper; assert(pThis); assert(pThis->mapper_data); pThis->funcs.kill(pThis->mapper_data); free(pThis->mapper_data); } int mapper_read(mapper_t* mapper, int address) { mapper_t* pThis = mapper; assert(pThis); return pThis->funcs.read(pThis->mapper_data, address); } int mapper_read16(mapper_t* mapper, int address) { mapper_t* pThis = mapper; int hi, lo; assert(pThis); hi = pThis->funcs.read(pThis->mapper_data, address); lo = pThis->funcs.read(pThis->mapper_data, address + 1); return hi | (lo << 8); } void mapper_write(mapper_t* mapper, int address, int value) { mapper_t* pThis = mapper; assert(pThis); pThis->funcs.write(pThis->mapper_data, address, value); }