diff --git a/.gitignore b/.gitignore index b0a88f9..65ac8ec 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ #executables -*.out -*.exe \ No newline at end of file +*.out \ No newline at end of file diff --git a/makefile b/makefile index 42b285b..34ebc01 100644 --- a/makefile +++ b/makefile @@ -1,2 +1,12 @@ -default: - gcc src/*.c -o tinyriscv \ No newline at end of file +CC := gcc +FLAGS := -Wall -O2 + +SRC := src/*.c +TARGET := tinyriscv.out + +all: + $(CC) $(SRC) $(FLAGS) -o $(TARGET) + +.PHONY: clean +clean: + rm $(TARGET) \ No newline at end of file diff --git a/src/main.c b/src/main.c index 1c4aa55..e3ad646 100644 --- a/src/main.c +++ b/src/main.c @@ -107,10 +107,12 @@ void regdump(const tinyriscv_core* core){ void memdump(const tinyriscv_core* core, uint32_t addr){ addr -= tinyriscv_MEM_OFFSET; - if(addr + 256 > core->mem_size) help("memdump: Address out of memory range."); + if(addr + 256 > core->mem_size){ + help("memdump: Address out of memory range."); + } printf("\n"); - printf(" Address Memory ASCII\n "); + printf(" Address Memory ASCII\n"); for(unsigned int i = 0; i < 73; i++) printf("─"); printf("\n"); @@ -157,7 +159,10 @@ void load_mem_from_file(tinyriscv_core* core, const char* file_path){ exit(-1); } - fread(core->mem, 1, file_size, file); + if(fread(core->mem, 1, file_size, file) != file_size){ + perror("ERROR: 'fread' count different from expected file size."); + exit(-1); + } fclose(file); } @@ -177,6 +182,7 @@ int main(int argc, char** argv){ else if(!strcmp(argv[i], "--bin")){ if(i + 1 >= argc) help("Invalid file path."); strncpy(file_path, argv[i++ + 1], 256); + file_path[255] = '\0'; } else if(!strcmp(argv[i], "--mem_size")){ if(i + 1 >= argc) help("Invalid [mem_size] value."); diff --git a/src/tinyriscv.h b/src/tinyriscv.h index 45da352..b2df11f 100644 --- a/src/tinyriscv.h +++ b/src/tinyriscv.h @@ -164,7 +164,7 @@ void tinyriscv_step(tinyriscv_core* core){ #define rs1 (inst >> 15 & 0x1f) #define rs2 (inst >> 20 & 0x1f) #define imm_i ((i32)inst >> 20) - #define imm_s (imm_i & 0xffffffe0 | rd) + #define imm_s ((imm_i & 0xffffffe0) | rd) #define imm_b (((i32)(inst & 0x80000000) >> 19) | \ ((inst & 0x80) << 4) | (inst >> 20 & 0x7e0) | (inst >> 7 & 0x1e)) diff --git a/tests/1.bin b/tests/1.bin deleted file mode 100755 index dc9896a..0000000 Binary files a/tests/1.bin and /dev/null differ diff --git a/tests/1.c b/tests/1.c deleted file mode 100644 index 39f75ce..0000000 --- a/tests/1.c +++ /dev/null @@ -1,8 +0,0 @@ -#include - -int main(){ - uint32_t* ptr = 0x800000F0; - - *ptr = 1; - while(*ptr) (*ptr)++; -} \ No newline at end of file diff --git a/tests/1.s b/tests/1.s deleted file mode 100644 index 3f149d6..0000000 --- a/tests/1.s +++ /dev/null @@ -1,37 +0,0 @@ - .file "1.c" - .option nopic - .attribute arch, "rv32i2p1" - .attribute unaligned_access, 0 - .attribute stack_align, 16 - .text - .align 2 - .globl main - .type main, @function -main: - addi sp,sp,-32 - sw s0,28(sp) - addi s0,sp,32 - li a5,-2147483648 - addi a5,a5,240 - sw a5,-20(s0) - lw a5,-20(s0) - li a4,1 - sw a4,0(a5) - j .L2 -.L3: - lw a5,-20(s0) - lw a5,0(a5) - addi a4,a5,1 - lw a5,-20(s0) - sw a4,0(a5) -.L2: - lw a5,-20(s0) - lw a5,0(a5) - bne a5,zero,.L3 - li a5,0 - mv a0,a5 - lw s0,28(sp) - addi sp,sp,32 - jr ra - .size main, .-main - .ident "GCC: () 13.2.0" diff --git a/tests/mult.c b/tests/mult.c deleted file mode 100644 index 01a3041..0000000 --- a/tests/mult.c +++ /dev/null @@ -1,9 +0,0 @@ -#include - -int main(){ - unsigned int x, y; - x = 20; - x = 5; - - x *= y; -} \ No newline at end of file diff --git a/tests/mult.s b/tests/mult.s deleted file mode 100644 index 6f36c87..0000000 --- a/tests/mult.s +++ /dev/null @@ -1,32 +0,0 @@ - .file "mult.c" - .option nopic - .attribute arch, "rv32i2p1" - .attribute unaligned_access, 0 - .attribute stack_align, 16 - .text - .globl __mulsi3 - .align 2 - .globl main - .type main, @function -main: - addi sp,sp,-32 - sw ra,28(sp) - sw s0,24(sp) - addi s0,sp,32 - li a5,20 - sw a5,-20(s0) - li a5,5 - sw a5,-20(s0) - lw a1,-24(s0) - lw a0,-20(s0) - call __mulsi3 - mv a5,a0 - sw a5,-20(s0) - li a5,0 - mv a0,a5 - lw ra,28(sp) - lw s0,24(sp) - addi sp,sp,32 - jr ra - .size main, .-main - .ident "GCC: () 13.2.0" diff --git a/tinyriscv b/tinyriscv deleted file mode 100755 index 53c6b00..0000000 Binary files a/tinyriscv and /dev/null differ