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
|
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 <stdlib.h>
|
||||||
#include <string.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){
|
int main(int argc, char **argv){
|
||||||
|
|
||||||
long mem_size = 0;
|
long mem_size = 0;
|
||||||
|
char filename[255];
|
||||||
|
|
||||||
|
FILE *rom = fopen("ROM.bin","rb");
|
||||||
|
mem_size = mem_size + GetFileSize(rom);
|
||||||
|
|
||||||
//Handling arguments
|
//Handling arguments
|
||||||
if(argc < 2){
|
if(argc < 2){
|
||||||
@ -15,23 +32,57 @@ int main(int argc, char **argv){
|
|||||||
if(strcmp(argv[i], "-m") == 0 || strcmp(argv[i], "--memory") == 0){
|
if(strcmp(argv[i], "-m") == 0 || strcmp(argv[i], "--memory") == 0){
|
||||||
char *endptr;
|
char *endptr;
|
||||||
long convert = strtol(argv[i+1], &endptr, 10);
|
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){
|
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;
|
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
|
//Intializing memory and stuff
|
||||||
|
|
||||||
long PC = 0; //program counter
|
long PC = 0; //program counter
|
||||||
char *mem_pointer = malloc(mem_size * sizeof(char)); //allocate RAM
|
char *memory = (char *)malloc(mem_size * sizeof(char)); //Allocating RAM
|
||||||
if(mem_pointer == NULL){
|
if(memory == NULL){
|
||||||
printf("ERROR: Memory allocation failed (Buy more RAM)");
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user