diff --git a/.gitignore b/.gitignore index 814ac03..03fa769 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ *.o *.a -*.bin m16vm m16as diff --git a/README.md b/README.md index 0d90467..0e22dda 100644 --- a/README.md +++ b/README.md @@ -7,50 +7,6 @@ The design is taken from the real world and tries to mimic existing RISC-archite The instruction set is by no means designed to be "fast" or "optimal" but focus more on being easy to understand and modify/play with. -Compile -------- - -The code is compiled via Makefile. - -```sh -$ make -``` - -The code is compiled into 2 programs: - -* `m16as` - Assembler - Compiles assembler code into binary form. -* `m16vm` - Virtual Machine, will run binary code from a file. - - -Example for first compile assembly code and then run it: - -```sh -$ ./m16as examples/asm/hello_world.as > prog.bin -$ ./m16vm ./prog.bin -HELLO WORLD -``` - -Usage ------ - -#### m16as - -``` -Usage: ./m16as [ ] -``` - -`m16as` is pretty streigth forward. if no `outputfile` is given, the output is written to `stdout` - -#### m16vm - -``` -usage: ./m16vm [ --dmem | --dreg ] -``` - -* `--dmem` - debug memory, after the program has executed the last instruction, the contents of the memory is printed to `stdout`. NOTE: only the first 32 bytes are printed to - -* `--dreg` - debug registers, after the program has executed the last instruction, the contents of the registers is printed to `stdout`. - Specification ------------- diff --git a/as/as.c b/as/as.c index 0c703db..5218307 100644 --- a/as/as.c +++ b/as/as.c @@ -1,6 +1,6 @@ /* as.c * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2018-2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,7 +23,7 @@ int usage(char *program) { - fprintf(stderr, "Usage: %s [ ]\n", program); + fprintf(stderr, "Usage: %s [ + * Copyright (C) 2018-2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/as/ast.c b/as/ast.c index 752c1ff..fa78e68 100644 --- a/as/ast.c +++ b/as/ast.c @@ -1,6 +1,6 @@ /* ast.c * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2018-2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/as/ast.h b/as/ast.h index 931a162..74c62e0 100644 --- a/as/ast.h +++ b/as/ast.h @@ -1,6 +1,6 @@ /* ast.h * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2018-2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/as/codegen.c b/as/codegen.c index 8c1232d..334350d 100644 --- a/as/codegen.c +++ b/as/codegen.c @@ -1,6 +1,6 @@ /* codegen.c * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2018-2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/as/codegen.h b/as/codegen.h index 1d3b1e2..ae08acf 100644 --- a/as/codegen.h +++ b/as/codegen.h @@ -1,6 +1,6 @@ /* codegen.h * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2018-2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/as/lexer.c b/as/lexer.c index 98c4c39..d8ada70 100644 --- a/as/lexer.c +++ b/as/lexer.c @@ -1,6 +1,6 @@ /* lexer.c * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2018-2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/as/lexer.h b/as/lexer.h index 3e2a419..f9594a7 100644 --- a/as/lexer.h +++ b/as/lexer.h @@ -1,6 +1,6 @@ /* lexer.h * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2018-2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/as/lexer/grammar.h b/as/lexer/grammar.h index 29b9d8d..68ef410 100644 --- a/as/lexer/grammar.h +++ b/as/lexer/grammar.h @@ -2,7 +2,7 @@ * * Macros for the grammar. * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2018-2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/as/lexer/number.c b/as/lexer/number.c index 2af610d..231cd42 100644 --- a/as/lexer/number.c +++ b/as/lexer/number.c @@ -1,6 +1,6 @@ /* lexer/number.c * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2018-2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/as/lexer/number.h b/as/lexer/number.h index 43b07a9..77404d2 100644 --- a/as/lexer/number.h +++ b/as/lexer/number.h @@ -1,6 +1,6 @@ /* lexer/number.h * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2018-2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/as/parser.c b/as/parser.c index 239dd34..a8a6b70 100644 --- a/as/parser.c +++ b/as/parser.c @@ -1,6 +1,6 @@ /* parser.c * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2018-2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/as/parser.h b/as/parser.h index 3c1dce5..12c6417 100644 --- a/as/parser.h +++ b/as/parser.h @@ -1,6 +1,6 @@ /* parser.h * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2018-2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/as/symtab.c b/as/symtab.c index 98a0260..0aa3ab4 100644 --- a/as/symtab.c +++ b/as/symtab.c @@ -1,6 +1,6 @@ /* symtab.c * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2018-2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/as/symtab.h b/as/symtab.h index 810ed7e..ac3c6f5 100644 --- a/as/symtab.h +++ b/as/symtab.h @@ -1,6 +1,6 @@ /* symtab.h * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2018-2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/examples/bin/invalid_inst.m16 b/examples/bin/invalid_inst.m16 deleted file mode 100644 index 3c9ffd5..0000000 --- a/examples/bin/invalid_inst.m16 +++ /dev/null @@ -1 +0,0 @@ -/Hú/Eú/Lúú/Oúï ú/Wú/Oú/Rú/Lú/Dú \ No newline at end of file diff --git a/lib/error.c b/lib/error.c index 6bd365f..e04616f 100644 --- a/lib/error.c +++ b/lib/error.c @@ -1,6 +1,6 @@ /* error.c * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2018 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/lib/include/error.h b/lib/include/error.h index e24b44d..1f8754d 100644 --- a/lib/include/error.h +++ b/lib/include/error.h @@ -1,6 +1,6 @@ /* error.h * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2018 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/lib/include/instr.h b/lib/include/instr.h index 064589e..4dfe36c 100644 --- a/lib/include/instr.h +++ b/lib/include/instr.h @@ -1,6 +1,6 @@ /* instr.h * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2012,2014 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/lib/include/vector.h b/lib/include/vector.h index 8365faf..cf2d2b9 100644 --- a/lib/include/vector.h +++ b/lib/include/vector.h @@ -1,6 +1,6 @@ /* vector.h * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2018 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/lib/vector.c b/lib/vector.c index 41df56a..15c7f9f 100644 --- a/lib/vector.c +++ b/lib/vector.c @@ -1,6 +1,6 @@ /* vector.c * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2018 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/vm/cpu.c b/vm/cpu.c index 80674b1..f8f6669 100644 --- a/vm/cpu.c +++ b/vm/cpu.c @@ -1,6 +1,6 @@ /* cpu.c * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2012,2014-2015,2018-2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/vm/cpu.h b/vm/cpu.h index 98817bb..f4d4912 100644 --- a/vm/cpu.h +++ b/vm/cpu.h @@ -1,6 +1,6 @@ /* cpu.h * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2012,2014-2015,2018-2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/vm/debug.c b/vm/debug.c index 42f2331..e548270 100644 --- a/vm/debug.c +++ b/vm/debug.c @@ -1,6 +1,6 @@ /* debug.c * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,20 +20,14 @@ #include #include "cpu.h" #include "debug.h" -#include "mm.h" void debug_print_memory(uint8_t *mm) { int i = 0; - printf("\n" - " 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F\n" - " ------------------------------------------------"); - - for(i = 0; i < MEM_SIZE; i++) { - if ((i % 16) == 0) - printf("\n%.2X| ", i); + printf("\n"); + for(i = 0; i < 32; i++) { printf("%.2X ", mm[i]); } printf("\n"); diff --git a/vm/debug.h b/vm/debug.h index 1ebb0e6..731017f 100644 --- a/vm/debug.h +++ b/vm/debug.h @@ -1,6 +1,6 @@ /* debug.h * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/vm/instr_decode.c b/vm/instr_decode.c index 0170aac..532d04e 100644 --- a/vm/instr_decode.c +++ b/vm/instr_decode.c @@ -1,6 +1,6 @@ /* instr_decode.c * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2012,2014,2018-2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/vm/instr_decode.h b/vm/instr_decode.h index cf09af1..eff474b 100644 --- a/vm/instr_decode.h +++ b/vm/instr_decode.h @@ -1,6 +1,6 @@ /* instr_decode.h * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2012,2014,2018-2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/vm/mm.c b/vm/mm.c index 1dff772..66ab22e 100644 --- a/vm/mm.c +++ b/vm/mm.c @@ -1,6 +1,6 @@ /* mm.c * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2012,2014,2018-2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,6 +21,11 @@ #include #include "mm.h" +#ifndef MEM_SIZE +/* Set a default memory size. (2^16) */ +#define MEM_SIZE 65536 +#endif + // Get a WORD aligned (16-bit) address. // Casts the 8-bit pointer (mm_base_addr) to 16-bit (WORD) and add offset. #define addr_align_word(offset) \ diff --git a/vm/mm.h b/vm/mm.h index 859ae1e..772c7c3 100644 --- a/vm/mm.h +++ b/vm/mm.h @@ -1,6 +1,6 @@ /* mm.h * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2012,2014,2018-2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,11 +22,6 @@ #include -#ifndef MEM_SIZE -/* Set a default memory size. (2^8) */ -#define MEM_SIZE 256 -#endif - extern uint8_t *mm_base_addr; void mm_init(); diff --git a/vm/program.c b/vm/program.c index 9e65738..72e5e11 100644 --- a/vm/program.c +++ b/vm/program.c @@ -1,6 +1,6 @@ /* program.c * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2012,2014,2018-2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/vm/program.h b/vm/program.h index 3c8ce5c..f790102 100644 --- a/vm/program.h +++ b/vm/program.h @@ -1,6 +1,6 @@ /* program.h * - * Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski + * Copyright (C) 2012,2014,2018-2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/vm/syscall.c b/vm/syscall.c index 5139055..e5f3a00 100644 --- a/vm/syscall.c +++ b/vm/syscall.c @@ -1,6 +1,6 @@ /* syscall.c * -* Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski +* Copyright (C) 2012,2014-2015,2018-2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/vm/syscall.h b/vm/syscall.h index cc272ba..7c09994 100644 --- a/vm/syscall.h +++ b/vm/syscall.h @@ -1,6 +1,6 @@ /* syscall.h * -* Copyright (C) 2012,2014-2015,2018-2019,2023 Henrik Hautakoski +* Copyright (C) 2012,2014-2015,2018-2019 Henrik Hautakoski * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/vm/vm.c b/vm/vm.c index e424b61..6c65d7d 100644 --- a/vm/vm.c +++ b/vm/vm.c @@ -50,19 +50,15 @@ void run(struct program *prog) { mm_exit(); } -int usage(const char* name) { - fprintf(stderr, "usage: %s [ --dmem | --dreg ] \n", name); - return 1; -} - int main(int argc, char **argv) { struct program prog = { 0 }; - const char *filename = NULL; + const char *filename; int i; if (argc < 2) { - return usage(argv[0]); + fprintf(stderr, "usage: %s [ --dmem | --dreg ] \n", argv[0]); + return 1; } // Parse options. @@ -82,10 +78,6 @@ int main(int argc, char **argv) { } } - if (filename == NULL) { - return usage(argv[0]); - } - if (program_loadfromfile(&prog, filename) < 0) return 1;