gbdb,memory: require memory files on initialization

This will make it a little bit easier to set up the proper MBC when
they are implemented.
This commit is contained in:
2018-09-11 21:12:56 -07:00
parent 927886b7f3
commit 593d9d3600
3 changed files with 48 additions and 109 deletions

View File

@@ -25,11 +25,38 @@ static unsigned char bootrom[0x100] = {0};
static unsigned char cart_low[0x100] = {0};
static int bootrom_mapped = 1;
void gb_mem_init(struct gb_memory *memory, struct gb_video *v)
static void load_file_to_buffer(const char *filename, uint8_t *buffer, size_t size)
{
//TODO: Check error codes like a real programmer :P
FILE* prog_file;
long filesize;
prog_file = fopen(filename, "r");
if(prog_file < 0) {
printf("Failed to load game file: %d\n", errno);
return;
}
fseek(prog_file, 0, SEEK_END);
filesize = ftell(prog_file);
fseek(prog_file, 0, SEEK_SET);
if (fread(buffer, MIN(filesize, size), 1, prog_file) < 0) {
printf("Failed to read filed: %d\n", errno);
}
fclose(prog_file);
}
void gb_mem_init(struct gb_memory *memory, struct gb_video *v,
const char *bootrom_file, const char *rom_file)
{
video = v;
memset(&ram, 0, MAX_RAM_LEN);
bootrom_mapped = 1;
load_file_to_buffer(rom_file, cart_low, sizeof(cart_low));
load_file_to_buffer(rom_file, ram, sizeof(ram));
load_file_to_buffer(bootrom_file, bootrom, sizeof(bootrom));
load_file_to_buffer(bootrom_file, ram, sizeof(ram));
}
static uint8_t ser_byte = 0;
@@ -169,67 +196,3 @@ void gb_mem_force_write(struct gb_memory *memory, uint16_t addr, uint8_t val)
}
}
static void load_file_to_buffer(char *filename, uint8_t *buffer, size_t size)
{
//TODO: Check error codes like a real programmer :P
FILE* prog_file;
long filesize;
prog_file = fopen(filename, "r");
if(prog_file < 0) {
printf("Failed to load game file: %d\n", errno);
return;
}
fseek(prog_file, 0, SEEK_END);
filesize = ftell(prog_file);
fseek(prog_file, 0, SEEK_SET);
if (fread(buffer, MIN(filesize, size), 1, prog_file) < 0) {
printf("Failed to read filed: %d\n", errno);
}
fclose(prog_file);
}
int gb_memory_load_file(struct gb_memory *memory, enum gb_memory_range destination, char *filename)
{
//TODO: Check error codes like a real programmer :P
FILE* prog_file;
long filesize;
switch (destination) {
case GB_MEMORY_BOOTROM:
load_file_to_buffer(filename, bootrom, sizeof(bootrom));
load_file_to_buffer(filename, ram, sizeof(bootrom));
break;
case GB_MEMORY_CART:
load_file_to_buffer(filename, ram, sizeof(ram));
load_file_to_buffer(filename, cart_low, sizeof(cart_low));
break;
default:
return -1;
}
}
/* static void mem_dump(char *filename) */
/* { */
/* //TODO: Check error codes like a real programmer :P */
/* FILE* dump_file; */
/* char *token = strtok(filename, " "); */
/* if (token == NULL) { */
/* gb_log("usage: load <file>\n"); */
/* return; */
/* } */
/* strip_newline(token); */
/* dump_file = fopen(token, "w"); */
/* if(dump_file == NULL) { */
/* gb_log("Failed to open mem dump file: %d\n", errno); */
/* return; */
/* } */
/* fwrite(ram, MAX_RAM_LEN, 1, dump_file); */
/* fclose(dump_file); */
/* } */