aboutsummaryrefslogtreecommitdiff
path: root/assembler/main.s
diff options
context:
space:
mode:
Diffstat (limited to 'assembler/main.s')
-rw-r--r--assembler/main.s33
1 files changed, 22 insertions, 11 deletions
diff --git a/assembler/main.s b/assembler/main.s
index 1795823..a9fd109 100644
--- a/assembler/main.s
+++ b/assembler/main.s
@@ -5,22 +5,31 @@
.type main, %function
.global main
-main:
- bl start_xosc
- bl setup_clocks
- bl setup_gpio
- bl setup_uart
- b assembler
-
-assembler: LDR R0, =0x20001000 // SRAM_BASE
- MOV R11, R0
+main: LDR R0, =0x20000000 // SRAM_BASE
+0: MOV R11, R0
ADDS R1, R0, 1 // JUMP ADDRESS
MOV R12, R1
1: BL PROMPT // SHOW PROMPT
BL assemble
- B 2f // TODO condition
+ CMP R0, 1 // SET NEW ADDRESS
+ BNE 2f
+ MOVS R0, '\r // SEND CR
+ BL uart_send
+ MOV R1, R11 // GET ADDRESS
+ LSRS R1, 16 // SHIFT OUT LOWER HALFWORD
+ MOVS R0, R1 // SAVE IN R0
+ LSLS R1, 16 // SHIFT BACK
+ MOV R11, R1 // SAVE ALTERRED ADDRESS
+ MOVS R1, 4 // SEND HEX WITH WIDTH 4
+ BL send_hex
+ BL get_hex // GET HEX INPUT FOR OFFSET
+ MOV R0, R11 // ADD OFFSET TO ADDRESS
+ ADDS R0, R4
+ B 0b
+2: CMP R0, 2 // JUMP TO NEW CODE
+ BNE 3f
BX R12
-2: MOV R7, R11 // STORE INSTRUCTION WORD
+3: MOV R7, R11 // STORE INSTRUCTION WORD
STRH R6, [R7]
MOVS R0, '\r // NEW LINE
BL uart_send
@@ -35,11 +44,13 @@ assembler: LDR R0, =0x20001000 // SRAM_BASE
PROMPT: PUSH {LR}
MOV R0, R11 // CURRENT ADDRESS
+ MOVS R1, 8
BL send_hex
MOVS R0, ' // SPACE
BL uart_send
MOV R1, R11 // CURRENT CONTENTS
LDRH R0, [R1]
+ MOVS R1, 4
BL send_hex
MOVS R0, ' // SPACE
BL uart_send