aboutsummaryrefslogtreecommitdiff
path: root/newasm/main.s
diff options
context:
space:
mode:
Diffstat (limited to 'newasm/main.s')
-rw-r--r--newasm/main.s47
1 files changed, 36 insertions, 11 deletions
diff --git a/newasm/main.s b/newasm/main.s
index 7f3c038..57a1b98 100644
--- a/newasm/main.s
+++ b/newasm/main.s
@@ -5,30 +5,55 @@
.type main, %function
.global main, strbuf
-main: LDR R6, =0x20002000
+main: LDR R4, =0x20002000
BL uart_recv
loop: BL prompt
- LDR R0, strbuf
+ LDR R0, inpbuf
BL getline
+ LDR R0, inpbuf
+ BL putstrln
+ LDR R1, inpbuf
+ LDR R2, strbuf
+ MOVS R0, 0
+ STRB R0, [R2]
+ BL statement
+ BNE bad
+good: ADR R0, success
+ PUSH {R1}
+ BL putstrln
+ POP {R0}
+ BL putstrln
LDR R0, strbuf
- BL putstr
- LDR R0, =crlf
- BL putstr
+ BL putstrln
B loop
- BL uart_recv
+bad: ADR R0, fail
+ PUSH {R1}
+ BL putstrln
+ POP {R0}
+ BL putstrln
+ LDR R0, strbuf
+ BL putstrln
+ B loop
+never: BL uart_recv
LDR R0, =0x20000001
BX R0
- .align 4
-strbuf: .word 0x20001F00
-
prompt: PUSH {LR}
- MOVS R0, R6
+ MOVS R0, R4
BL send_hex
MOVS R0, '
BL uart_send
- LDR R0, [R6]
+ LDR R0, [R4]
BL send_hex
MOVS R0, '
BL uart_send
POP {PC}
+
+ .align 4
+inpbuf: .word 0x20001F00 // TODO getline buffer overflow
+strbuf: .word 0x20001F80
+
+ .align 4
+success: .asciz "The parser suceeded"
+ .align 4
+fail: .asciz "The parser failed"