// // Created by william on 12/2/23. // #include #include #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; }