#include #include #include #include #include "shrooms-vb-core/core/vb.h" #include #include uint8_t *readROM(char *filename, uint32_t *size) { FILE *file = fopen(filename, "rb"); uint8_t *rom; long filesize; if (!file) { perror("could not open file"); return NULL; } if (fseek(file, 0, SEEK_END)) { perror("could not seek file end"); return NULL; } filesize = ftell(file); if (filesize == -1) { perror("could not read file size"); return NULL; } if (fseek(file, 0, SEEK_SET)) { perror("could not seek file start"); return NULL; } *size = (uint32_t) filesize; rom = malloc(*size); if (!rom) { perror("could not allocate ROM"); return NULL; } fread(rom, 1, *size, file); if (ferror(file)) { perror("could not read file"); return NULL; } if (fclose(file)) { perror("could not close file"); return NULL; } return rom; } int main(int argc, char **argv) { VB *sim; uint8_t *rom; uint32_t romSize; GraphicsContext gfx; CLIArgs args; int status; if (parseCLIArgs(argc, argv, &args)) { return 1; } rom = readROM(args.filename, &romSize); if (!rom) { return 1; } sim = malloc(vbSizeOf()); vbInit(sim); vbSetCartROM(sim, rom, romSize); if (!SDL_Init(SDL_INIT_AUDIO | SDL_INIT_VIDEO)) { fprintf(stderr, "Error initializing SDL: %s\n", SDL_GetError()); return 1; } if (gfxInit(&gfx)) { SDL_Quit(); return 1; } status = runGame(sim, &gfx); SDL_Quit(); return status; }