89 lines
2.2 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
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, mem_size, 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;
}