diff options
Diffstat (limited to '')
-rw-r--r-- | src/emu/riscas.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/emu/riscas.c b/src/emu/riscas.c new file mode 100644 index 0000000..e4180b2 --- /dev/null +++ b/src/emu/riscas.c @@ -0,0 +1,40 @@ +#include <stdlib.h> +#include <stdint.h> +#include <stdio.h> + +#include "asm.h" +#include "log.h" + +static +void usage(int rc) +{ + fprintf(stderr, "Usage: riscas <source> <program>\n"); + exit(rc); +} + +int main(int argc, char *argv[]) +{ + if (argc < 3) { + usage(EXIT_FAILURE); + } + + FILE *sfd; + if ((sfd = fopen(argv[1], "r")) == NULL) + pdie("could not open source %s", argv[1]); + + FILE *pfd; + if ((pfd = fopen(argv[2], "w")) == NULL) + pdie("could not open program %s", argv[2]); + + char line[128]; + while (fgets(line, 128, sfd)) { + uint32_t IR = compile(line); + + if (IR == 0xFFFFFFFF) + die("illegal instruction: %s", line); + + fwrite(&IR, sizeof(uint32_t), 1, pfd); + } + + return 0; +} |