#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);
}