54 lines
1.1 KiB
C
54 lines
1.1 KiB
C
//
|
|
// Created by william on 12/2/23.
|
|
//
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
#include "../include/rom.h"
|
|
#include "ines.c"
|
|
|
|
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
|
|
|
|
void rom_init(Rom *rom) {
|
|
rom->header = NULL;
|
|
rom->prg_rom = NULL;
|
|
rom->chr_rom = NULL;
|
|
}
|
|
|
|
void rom_uninit(Rom *rom) {
|
|
free(rom->prg_rom);
|
|
free(rom->chr_rom);
|
|
}
|
|
|
|
int read_rom(char *path) {
|
|
FILE *file = fopen(path, "r");
|
|
if (!file) {
|
|
perror("Failed to open ROM");
|
|
return EXIT_FAILURE;
|
|
}
|
|
|
|
char header_buffer[16] = {0};
|
|
size_t read_size = fread(header_buffer, sizeof(char), ARRAY_SIZE(header_buffer), file);
|
|
if (read_size < ARRAY_SIZE(header_buffer)) {
|
|
perror("Failed to read ROM");
|
|
return EXIT_FAILURE;
|
|
}
|
|
|
|
if (!rom_is_ines(header_buffer)) {
|
|
perror("Only iNes ROMs are supported");
|
|
return EXIT_FAILURE;
|
|
}
|
|
|
|
Rom rom;
|
|
rom_init(&rom);
|
|
rom_nes_read(header_buffer, file, &rom);
|
|
rom_uninit(&rom);
|
|
|
|
if (fclose(file) != 0) {
|
|
perror("Failed to close ROM file");
|
|
return EXIT_FAILURE;
|
|
}
|
|
|
|
return 0;
|
|
} |