Figuring out how to copy rom into memory
This commit is contained in:
parent
e06e7d7afb
commit
938b1a6133
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +1,2 @@
|
||||
a.out
|
||||
out.bin
|
||||
|
1
example.bin
Normal file
1
example.bin
Normal file
@ -0,0 +1 @@
|
||||
zupa
|
63
main.c
63
main.c
@ -2,9 +2,26 @@
|
||||
#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, FILE *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){
|
||||
@ -15,23 +32,57 @@ int main(int argc, char **argv){
|
||||
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 ? convert : mem_size;
|
||||
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\nOptions:\n%s-m, --memory: specify RAM size\n%s-h, --help: print this message\n\n",argv[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 *mem_pointer = malloc(mem_size * sizeof(char)); //allocate RAM
|
||||
if(mem_pointer == NULL){
|
||||
char *memory = (char *)malloc(mem_size * sizeof(char)); //Allocating RAM
|
||||
if(memory == NULL){
|
||||
printf("ERROR: Memory allocation failed (Buy more RAM)");
|
||||
return 2;
|
||||
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);
|
||||
|
||||
free(mem_pointer);
|
||||
DumpMemory(memory, "out.bin");
|
||||
|
||||
free(memory);
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user