aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--boot3
-rw-r--r--include/script.h2
-rw-r--r--initrd.c42
-rw-r--r--initrd/calc8
-rw-r--r--initrd/init11
-rwxr-xr-xrbabin0 -> 14664 bytes
-rw-r--r--src/keypad.c36
-rw-r--r--src/main.c2
-rw-r--r--src/script.c5
10 files changed, 79 insertions, 32 deletions
diff --git a/Makefile b/Makefile
index 0b9e19a..9620aa4 100644
--- a/Makefile
+++ b/Makefile
@@ -28,7 +28,7 @@ STRIP = strip
MCUFLAGS = -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16
AFLAGS = $(MCUFLAGS)
CFLAGS = $(MCUFLAGS) -ggdb \
- -Iinclude -Iinclude/it -Iinclude/cmsis \
+ -Iinclude -Iinclude/cmsis \
-fno-builtin -fsigned-char -ffreestanding \
-Wall -Werror -Wextra -pedantic \
-Wno-overlength-strings -Wno-discarded-qualifiers
diff --git a/boot b/boot
new file mode 100644
index 0000000..13e5876
--- /dev/null
+++ b/boot
@@ -0,0 +1,3 @@
+choice = filemenu
+print("\nChoice: ")
+print(choice)
diff --git a/include/script.h b/include/script.h
index 971cccf..bddb872 100644
--- a/include/script.h
+++ b/include/script.h
@@ -21,7 +21,7 @@
#ifndef SCRIPT_H_
#define SCRIPT_H_
-#include <parser.h>
+#include <it/parser.h>
/**
* Loads the library for the given interpreter instance.
diff --git a/initrd.c b/initrd.c
new file mode 100644
index 0000000..3f36cd9
--- /dev/null
+++ b/initrd.c
@@ -0,0 +1,42 @@
+#include <stdint.h>
+#include <string.h>
+
+extern uint8_t *initrd_start;
+extern uint32_t initrd_size;
+
+char *getfile(uint32_t offset)
+{
+ char *ptr = initrd_start;
+ for (uint32_t i = 0; i < offset; i++) {
+ uint32_t len = *((uint32_t *)ptr);
+ uint32_t datalen = *((uint32_t *)(ptr + 4 + len));
+ ptr += len + datalen + 8;
+ if (ptr >= (char *)(initrd_start + initrd_size))
+ return 0;
+ }
+
+ return ptr;
+}
+
+char *readfile(const char *name)
+{
+ char *ptr;
+ for (uint32_t i = 0; ptr = getfile(i), ptr != 0; i++) {
+ uint32_t len = *((uint32_t *)ptr);
+ if (!strncmp(name, ptr + 4, len))
+ return ptr + len + 8;
+ }
+ return 0;
+}
+
+uint32_t filesize(const char *name)
+{
+ char *ptr;
+ for (uint32_t i = 0; ptr = getfile(i), ptr != 0; i++) {
+ uint32_t len = *((uint32_t *)ptr);
+ if (!strncmp(name, ptr + 4, len))
+ return *((uint32_t *)ptr + len + 4);
+ }
+ return 0;
+}
+
diff --git a/initrd/calc b/initrd/calc
deleted file mode 100644
index 7359f16..0000000
--- a/initrd/calc
+++ /dev/null
@@ -1,8 +0,0 @@
-while (1) {
- print("> ")
- input = gets()
- answer = solve(input)
- print("\n")
- print(answer)
- print("\n")
-}
diff --git a/initrd/init b/initrd/init
index 13e5876..7359f16 100644
--- a/initrd/init
+++ b/initrd/init
@@ -1,3 +1,8 @@
-choice = filemenu
-print("\nChoice: ")
-print(choice)
+while (1) {
+ print("> ")
+ input = gets()
+ answer = solve(input)
+ print("\n")
+ print(answer)
+ print("\n")
+}
diff --git a/rba b/rba
new file mode 100755
index 0000000..52f37cb
--- /dev/null
+++ b/rba
Binary files differ
diff --git a/src/keypad.c b/src/keypad.c
index f76271c..5fe2537 100644
--- a/src/keypad.c
+++ b/src/keypad.c
@@ -23,17 +23,19 @@
#include <gpio.h>
#include <task.h>
-#define ROW_0 GPIO_PORT(A, 12)
-#define ROW_1 GPIO_PORT(B, 12)
-#define ROW_2 GPIO_PORT(B, 11)
-#define ROW_3 GPIO_PORT(C, 4)
-#define COL_0 GPIO_PORT(B, 13)
-#define COL_1 GPIO_PORT(B, 14)
-#define COL_2 GPIO_PORT(B, 15)
-#define COL_3 GPIO_PORT(B, 1)
-#define COL_4 GPIO_PORT(B, 2)
+#define ROW_0 GPIO_PORT(B, 2)
+#define ROW_1 GPIO_PORT(B, 1)
+#define ROW_2 GPIO_PORT(B, 15)
+#define ROW_3 GPIO_PORT(B, 14)
+#define ROW_4 GPIO_PORT(B, 13)
+#define ROW_5 GPIO_PORT(C, 4)
+#define COL_0 GPIO_PORT(B, 11)
+#define COL_1 GPIO_PORT(B, 12)
+#define COL_2 GPIO_PORT(A, 11)
+#define COL_3 GPIO_PORT(A, 12)
+#define COL_4 GPIO_PORT(C, 5)
-#define ROWS 4
+#define ROWS 6
#define COLS 5
typedef struct {
@@ -42,17 +44,21 @@ typedef struct {
} port_t;
static const port_t keypad_rows[ROWS] = {
- { ROW_0 }, { ROW_1 }, { ROW_2 }, { ROW_3 }
+ { ROW_0 }, { ROW_1 }, { ROW_2 },
+ { ROW_3 }, { ROW_4 }, { ROW_5 }
};
static const port_t keypad_cols[COLS] = {
- { COL_0 }, { COL_1 }, { COL_2 }, { COL_3 }, { COL_4 }
+ { COL_0 }, { COL_1 }, { COL_2 },
+ { COL_3 }, { COL_4 }
};
static const int keypad_map[ROWS][COLS] = {
- { '7', '8', '9', 'x', '/' },
- { '4', '5', '6', 'y', '*' },
- { '1', '2', '3', '=', '-' },
+ { '&', '|', '^', ' ', ' ' },
+ { 'x', 'y', 'z', '=', ' ' },
+ { '7', '8', '9', '(', ')' },
+ { '4', '5', '6', '/', '%' },
+ { '1', '2', '3', '*', '-' },
{ '.', '0', '\b', '\n', '+' }
};
diff --git a/src/main.c b/src/main.c
index c9d3789..d21407a 100644
--- a/src/main.c
+++ b/src/main.c
@@ -27,7 +27,7 @@
#include <initrd.h>
#include <keypad.h>
#include <lcd.h>
-#include <parser.h>
+#include <it/parser.h>
#include <random.h>
#include <script.h>
#include <serial.h>
diff --git a/src/script.c b/src/script.c
index 518edc5..049608b 100644
--- a/src/script.c
+++ b/src/script.c
@@ -20,7 +20,7 @@
#include <script.h>
-#include <builtins.h>
+#include <it/builtins.h>
#include <clock.h>
#include <display.h>
#include <display_draw.h>
@@ -29,10 +29,9 @@
#include <random.h>
#include <serial.h>
#include <stdlib.h>
+#include <it/string.h>
#include <keypad.h>
-#include <string.h>
-
#define igetarg_integer(it, n) ((int)igetarg(it, n)->value.f)
int script_puts(instance *it);