#include #include #include long GetFileSize(FILE* f){ fseek(f, 0, SEEK_END); long size = ftell(f); fseek(f, 0, SEEK_SET); return size; } void DumpMemory(char *memory, char *filename){ FILE *dump = fopen(filename, "wb"); fwrite(memory, 1, strlen(memory), dump); fclose(dump); } int main(int argc, char **argv){ long mem_size = 0; char filename[255]; FILE *rom = fopen("ROM.bin","rb"); mem_size = mem_size + GetFileSize(rom); //Handling arguments if(argc < 2){ printf("too few arguments\n"); return 1; } for(int i = 1; i < argc; i++){ if(strcmp(argv[i], "-m") == 0 || strcmp(argv[i], "--memory") == 0){ char *endptr; long convert = strtol(argv[i+1], &endptr, 10); mem_size = &endptr != NULL ? mem_size + convert : mem_size; } if(strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0){ printf("Usage: %s [OPTIONS] --file filename\nOptions:\n%s-m, --memory: specify RAM size\n%s-h, --help: print this message\n\n",argv[0]," "," "); return 0; } if(strcmp(argv[i], "-f") == 0 || strcmp(argv[i], "--file") == 0){ for(int j = 0; j < strlen(argv[i+1]); j++){ filename[j] = argv[i+1][j]; } } } FILE *program = fopen(filename, "rb"); if(program == NULL){ printf("ERROR: file does not exist"); return 2; } long program_size = GetFileSize(program); mem_size = mem_size + program_size; //Intializing memory and stuff long PC = 0; //program counter char *memory = (char *)malloc(mem_size * sizeof(char)); //Allocating RAM if(memory == NULL){ printf("ERROR: Memory allocation failed (Buy more RAM)"); return 3; } //Copying program to memory { char buffer[program_size]; fread(buffer, 1, program_size, program); for(int i = 0; i <= program_size; i++){ memory[mem_size-i] = buffer[program_size-i]; } } fclose(program); //Copying ROM to memory { long size = GetFileSize(rom); char buffer[size]; fread(buffer, 1, size, rom); for(int i = 0; i < size; i++){ memory[mem_size-program_size-1-i] = buffer[size-i]; } } fclose(rom); DumpMemory(memory, "out.bin"); free(memory); return 0; }