summaryrefslogtreecommitdiffstats
path: root/sw/programmer/linux/src
diff options
context:
space:
mode:
Diffstat (limited to 'sw/programmer/linux/src')
-rw-r--r--sw/programmer/linux/src/main.c58
-rwxr-xr-xsw/programmer/linux/src/z80progbin0 -> 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
new file mode 100755
index 0000000..9787e67
--- /dev/null
+++ b/sw/programmer/linux/src/z80prog
Binary files differ