command line arguments

This commit is contained in:
inixyz
2023-10-12 23:57:38 +03:00
parent a23757a10a
commit 0c5d5e4b1b

View File

@@ -1,6 +1,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <assert.h>
#include "tinyriscv.h" #include "tinyriscv.h"
void regdump(const trv_cpu* cpu){ void regdump(const trv_cpu* cpu){
@@ -17,48 +18,60 @@ void help(void){
printf(" --help Display this information.\n"); printf(" --help Display this information.\n");
printf(" --bin <file> Load <file> into memory.\n"); printf(" --bin <file> Load <file> into memory.\n");
printf(" --mem_size <size> Set memory to have <size> bytes.\n"); printf(" --mem_size <size> Set memory to have <size> bytes.\n");
printf(" --regdump Dump registers at execution halt.\n");
exit(0); exit(0);
} }
int main(int argc, char** argv){ int main(int argc, char** argv){
char file_path[256] = "";
size_t mem_size = 4096; size_t mem_size = 4096;
unsigned int do_regdump = 0;
for(unsigned int i = 0; i < argc; i++){ //command line arguments
if(!strcmp(argv[i], "--help")) help();
else if(!strcmp(argv[i], "--mem_size")){
if(!argv[i + 1]){
printf("")
}
} mem_size = atoi(argv[i + 1]);
}
if(argc < 2){ if(argc < 2){
//printf("USAGE: tinyricv <file_path>\n"); printf("Not enough arguments.\n");
exit(0); help();
}
for(unsigned int i = 1; i < argc; i++){
if(!strcmp(argv[i], "--help")) help();
else if(!strcmp(argv[i], "--bin")){
assert("Invalid file path." && argv[i + 1]);
strncpy(file_path, argv[i++ + 1], 256);
}
else if(!strcmp(argv[i], "--mem_size")){
assert("Invalid [mem_size] value." && argv[i + 1]);
mem_size = atoi(argv[i++ + 1]);
}
else if(!strcmp(argv[i], "--regdump")) do_regdump = 1;
else{
printf("Invalid argument: %s\n", argv[i]);
help();
} }
FILE* file = fopen(argv[1], "rb");
if(!file){
perror("ERROR: Can't open file: ");
exit(-1);
} }
trv_cpu cpu; trv_cpu cpu;
cpu.mem = malloc(4096); cpu.mem = malloc(mem_size);
//file handling
FILE* file = fopen(file_path, "rb");
if(!file){
perror("ERROR: Can't open file");
exit(-1);
}
//load program into memory
fseek(file, 0, SEEK_END); fseek(file, 0, SEEK_END);
unsigned int file_size = ftell(file); const unsigned int file_size = ftell(file);
rewind(file); rewind(file);
fread(cpu.mem, 1, file_size, file); fread(cpu.mem, 1, file_size, file);
fclose(file); fclose(file);
//program execution
trv_init(&cpu); trv_init(&cpu);
while(cpu.pc < file_size + trv_MEM_OFFSET) trv_step(&cpu); while(cpu.pc < file_size + trv_MEM_OFFSET) trv_step(&cpu);
regdump(&cpu); //cleanup
if(do_regdump) regdump(&cpu);
free(cpu.mem); free(cpu.mem);
} }