diff options
Diffstat (limited to 'sw/programmer/linux/src')
-rw-r--r-- | sw/programmer/linux/src/main.c | 58 | ||||
-rwxr-xr-x | sw/programmer/linux/src/z80prog | bin | 0 -> 49856 bytes |
2 files changed, 56 insertions, 2 deletions
diff --git a/sw/programmer/linux/src/main.c b/sw/programmer/linux/src/main.c index 769992a..1bfd359 100644 --- a/sw/programmer/linux/src/main.c +++ b/sw/programmer/linux/src/main.c @@ -4,10 +4,64 @@ #include <stdio.h> #include <stdlib.h> #include <stdbool.h> +#include <unistd.h> +#include <errno.h> + +void out(const char *msg) +{ + printf("%s", msg); +} int main(int argc, char *argv[]) { - ui_init(&argc, &argv); + int opt; + int use_ui = 0; + + unsigned long baudrate; + char *file, *device, *baud; + + file = device = baud = NULL; + + while ((opt = getopt(argc, argv, "gf:d:b:")) != -1) { + switch (opt) { + case 'g': + use_ui = 1; + break; + case 'f': + file = optarg; + break; + case 'd': + device = optarg; + break; + case 'b': + baud = optarg; + break; + } + } + + if (use_ui) { + ui_init(&argc, &argv); + return 0; + } + + if (file == NULL || device == NULL || baud == NULL) { + perror("Missing argument\n"); + return -1; + } + + baudrate = strtoul(baud, NULL, 0); + if (errno == ERANGE) { + perror("Invalid baudrate\n"); + return -1; + } + + if (flash_open(device, baudrate) < 0) { + perror("Failed to open device\n"); + return -2; + } + + flash_write(file, out); + flash_close(); + return 0; } - diff --git a/sw/programmer/linux/src/z80prog b/sw/programmer/linux/src/z80prog Binary files differnew file mode 100755 index 0000000..9787e67 --- /dev/null +++ b/sw/programmer/linux/src/z80prog |