aboutsummaryrefslogtreecommitdiff
path: root/assembler/get_char.s
diff options
context:
space:
mode:
Diffstat (limited to 'assembler/get_char.s')
-rw-r--r--assembler/get_char.s21
1 files changed, 21 insertions, 0 deletions
diff --git a/assembler/get_char.s b/assembler/get_char.s
new file mode 100644
index 0000000..f1f43e7
--- /dev/null
+++ b/assembler/get_char.s
@@ -0,0 +1,21 @@
+// R9: end_char
+get_char:
+ PUSH {LR}
+ BL uart_recv
+ MOVS R1, 025 // ^U (NAK)
+ CMP R0, R1
+ BEQ redo_line
+ MOVS R1, 004 // ^D (EOT)
+ CMP R0, R1
+ BEQ done_for_real
+ CMP R0, R9
+ POP {PC}
+
+get_line:
+ BL get_char
+ ...
+ B get_line
+
+redo_line:
+ ...
+ B get_line