1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
.syntax unified
.cpu cortex-m0plus
.thumb
.type SETUP, %function
.global SETUP
.type UARTTX, %function
.type UARTRX, %function
.type GETHEX, %function
.type SENDHEX, %function
.align 4
// UARTRX 000326 0x200000D6
// UARTTX 000310 0x200000C8
// GETHEX 000224 0x20000094
// SNDHEX 000350 0x200000E8
SETUP: LDR R0, [PC, #20] // 000000 044005 UARTRX
LDR R1, [PC, #24] // 000002 044406 UARTTX
LDR R2, [PC, #24] // 000004 045006 GETHEX
LDR R3, [PC, #28] // 000006 045407 SENDHEX
MOV R8, R0 // 000010 043200
MOV R9, R1 // 000012 043211
MOV R10, R2 // 000014 043222
MOV R11, R3 // 000016 043233
LDR R7, [PC, #20] // 000020 047405 START ADDRESS
ADDS R6, R7, 1 // 000022 016176
B MAINLOOP // 000024 160012
.HWORD 0x0000 // 000026 000000
.WORD UARTRX // 000030 000327 0x200000D6 | 0x1
// 000032 020000
.WORD UARTTX // 000034 000311 0x200000C8 | 0x1
// 000036 020000
.WORD GETHEX // 000040 000225 0x20000094 | 0x1
// 000042 020000
.WORD SENDHEX // 000044 000351 0x200000E8 | 0x1
// 000046 020000
.WORD 0x20001000 // 000050 010000 START ADDRESS
// 000052 020000
MAINLOOP: MOVS R0, R7 // 000054 000070 PROMPT
MOVS R1, 0x8 // 000056 020410
BLX R11 // 000060 043730 SENDHEX
MOVS R0, 0x20 // 000062 020040 SPACE
BLX R9 // 000064 043710 UARTTX
LDRH R0, [R7] // 000066 104070
MOVS R1, 0x4 // 000070 020404
BLX R11 // 000072 043730 SENDHEX
MOVS R0, 0x0D // 000074 020015 CARRIAGE RETURN
BLX R9 // 000076 043710 UARTTX
MOVS R0, R7 // 000100 000070
MOVS R1, 0x8 // 000102 020410
BLX R11 // 000104 043730 SENDHEX
MOVS R0, 0x20 // 000106 020040 SPACE
BLX R9 // 000110 043710 UARTTX
10: BLX R8 // 000112 043700 COMMAND LOOP, UARTRX
CMP R0, 0x47 // 000114 024107 ASCII G
BNE 20f // 000116 150400
BX R6 // 000120 043460
20: CMP R0, 0x52 // 000122 024122 ASCII R
BNE 30f // 000124 150412
MOVS R0, 0x0D // 000126 020015
BLX R9 // 000130 043710 UARTTX
LSRS R7, 0x10 // 000132 006077
MOVS R0, R7 // 000134 000070
LSLS R7, 0x10 // 000136 002077
MOVS R1, 0x4 // 000140 020404
BLX R11 // 000142 043730 SENDHEX
BLX R10 // 000144 043720 GETHEX
ADDS R7, R4 // 000146 014477
ADDS R6, R7, 1 // 000150 016176
B MAINLOOP // 000152 163737
30: CMP R0, 0x0D // 000154 024015 CARRIAGE RETURN
BNE 40f // 000156 150404
ADDS R7, 0x2 // 000160 033402
BLX R9 // 000162 043710 UARTTX (ECHO CR)
MOVS R0, 0x0A // 000164 020012 LINE FEED
BLX R9 // 000166 043710 UARTTX
B MAINLOOP // 000170 163730
40: CMP R0, 0x30 // 000172 024060 ASCII 0
BNE 10b // 000174 150745
BLX R9 // 000176 043710 UARTTX
50: BLX R8 // 000200 043700 UARTRX
CMP R0, 0x78 // 000202 024170 ASCII x
BNE 50b // 000204 150774
BLX R9 // 000206 043710 UARTTX
BLX R10 // 000210 043720 GETHEX
STRH R4, [R7] // 000212 100074
ADDS R7, 0x2 // 000214 033402
MOVS R0, 0x0A // 000216 020012 NEW LINE
BLX R9 // 000220 043710 UARTTX
B MAINLOOP // 000222 163713
GETHEX: PUSH {LR} // 000224 132400
MOVS R4, 0x0 // 000226 022000
MOVS R5, 0x4 // 000230 022404
10: BLX R8 // 000232 043700 HEX LOOP, UARTRX
CMP R0, 0x30 // 000234 024060 ASCII 0
BLO 10b // 000236 151774
CMP R0, 0x39 // 000240 024071 ASCII 9
BLS 20f // 000242 154406
CMP R0, 0x41 // 000244 024101 ASCII A
BLO 10b // 000246 151770
CMP R0, 0x46 // 000250 024106 ASCII F
BHI 10b // 000252 154366
BLX R9 // 000254 043710 UARTTX
SUBS R0, 0x37 // 000256 034067 ASCII A MINUS 10
B 30f // 000260 160001
20: BLX R9 // 000262 043710 UARTTX
SUBS R0, 0x30 // 000264 034060 ASCII 0
30: LSLS R4, 0x4 // 000266 000444
ADDS R4, R0 // 000270 014044
SUBS R5, 0x1 // 000272 036401
BNE 10b // 000274 150755
40: BLX R8 // 000276 043700 UARTRX
CMP R0, 0x0D // 000300 024015 CARRIAGE RETURN
BNE 40b // 000302 150774
BLX R9 // 000304 043710 UARTTX
POP {PC} // 000306 136400
UARTTX: LDR R1, [PC, #24] // 000310 044406 UART0_BASE
MOVS R3, 0x20 // 000312 021440 TX FIFO FULL
1: LDR R2, [R1, 0x18]// 000314 064612 UARTFR_OFST
TST R2, R3 // 000316 041032
BNE 1b // 000320 150774
STRB R0, [R1] // 000322 070010 UARTDR_OFST
BX LR // 000324 043560
UARTRX: LDR R1, [PC, #12] // 000326 044403
MOVS R3, 0x10 // 000330 021420 RX FIFO EMPTY
1: LDR R2, [R1, 0x18]// 000332 064612 UARTFR_OFST
TST R2, R3 // 000334 041032
BNE 1b // 000336 150774
LDRB R0, [R1] // 000340 074010 UARTDR_OFST
BX LR // 000342 043560
.WORD 0x40034000 // 000344 040000
// 000346 040003
SENDHEX: PUSH {LR} // 000350 132400
MOVS R4, R0 // 000352 000004
MOVS R5, R1 // 000354 000015
LSLS R1, 0x2 // 000356 000211
RORS R4, R1 // 000360 040714
MOVS R0, 0x30 // 000362 020060 ASCII 0
BLX R9 // 000364 043710 UARTTX
MOVS R0, 0x78 // 000366 020170 ASCII x
BLX R9 // 000370 043710 UARTTX
0: MOVS R0, 0x1C // 000372 020034
RORS R4, R0 // 000374 040704
MOVS R0, 0x0F // 000376 020017
ANDS R0, R4 // 000400 040040
CMP R0, 0x9 // 000402 024011
BHI 1f // 000404 154001
ADDS R0, 0x30 // 000406 030060 ASCII 0
B 2f // 000410 160000
1: ADDS R0, 0x37 // 000412 030067 ASCII A MINUS 10
2: BLX R9 // 000414 043710 UARTTX
SUBS R5, 1 // 000416 036401
BNE 0b // 000420 150763
POP {PC} // 000422 136400
|