aboutsummaryrefslogtreecommitdiff
path: root/hexedit/hexedit.s
blob: 28d2602ed824ff26a94e11a41dc3c06f08c7596c (plain)
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
.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

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 160010
            .HWORD  0x0000        // 000026 000000
            .WORD   UARTRX        // 000030 010243  0x200010A3
                                  // 000032 040000
            .WORD   UARTTX        // 000034 010225  0x20001095
                                  // 000036 040000
            .WORD   GETHEX        // 000040
                                  // 000042
            .WORD   SENDHEX       // 000044 010264  0x200010B5
                                  // 000046 040000
            .WORD   0x20001000    // 000050 010000  START ADDRESS
                                  // 000052 020000
MAINLOOP:   MOVS    R0, R7        // 000054 000070  PROMPT
            MOVS    R1, 0x8       // 000056
            BLX     R11           // 000060 043730  SENDHEX
            MOVS    R0, 0x20      // 000062 020040  SPACE
            BLX     R9            // 000064 043720  UARTTX
            LDRH    R0, [R7]      // 000066 104070
            MOVS    R1, 0x4       // 000070
            BLX     R11           // 000072 043730  SENDHEX
            MOVS    R0, 0x0D      // 000074 020015  CARRIAGE RETURN
            BLX     R9            // 000076 043720  UARTTX
            MOVS    R0, R7        // 000100 000070
            MOVS    R1, 0x8       // 000102
            BLX     R11           // 000104 043730  SENDHEX
            MOVS    R0, 0x20      // 000106 020040  SPACE
            BLX     R9            // 000110 043720  UARTTX
10:         BLX     R8            // 000112 043710  COMMAND LOOP, UARTRX
            CMP     R0, 0x47      // 000114 024107  ASCII G
            BNE     20f           // 000116 150400
            BX      R6            // 000120 043460
20:         CMP     R0, 0x52      // 000122         ASCII R
            BNE     30f           // 000124
            MOVS    R0, 0x0D      // 000126
            BLX     R9            // 000130         UARTTX
            LSRS    R7, 0x10      // 000132
            MOVS    R0, R7        // 000134
            LSLS    R7, 0x10      // 000136
            MOVS    R1, 0x4       // 000140
            BLX     R11           // 000142         SENDHEX
            BLX     R10           // 000144         GETHEX
            ADDS    R7, R4        // 000146
            ADDS    R6, R7, 1     // 000150
            B       MAINLOOP      // 000152
30:         CMP     R0, 0x0D      // 000154 024015  CARRIAGE RETURN
            BNE     40f           // 000156 150401
            ADDS    R7, 0x2       // 000160 033402
            BLX     R9            // 000162         UARTTX (ECHO CR)
            MOVS    R0, 0x0A      // 000164         LINE FEED
            BLX     R9            // 000166         UARTTX
            B       MAINLOOP      // 000170 163753
40:         CMP     R0, 0x30      // 000172 024060  ASCII 0
            BNE     10b           // 000174
            BLX     R9            // 000176 043720  UARTTX
50:         BLX     R8            // 000200 043710  UARTRX
            CMP     R0, 0x78      // 000202 024170  ASCII x
            BNE     50b           // 000204 150774
            BLX     R9            // 000206 043720  UARTTX
            BLX     R10           // 000210         GETHEX
            STRH    R4, [R7]      // 000212 100074
            ADDS    R7, 0x2       // 000214 033402
            MOVS    R0, 0x0A      // 000216 020012  NEW LINE
            BLX     R9            // 000220 043720  UARTTX
            B       MAINLOOP      // 000222 163707
GETHEX:     PUSH    {LR}          // 000224 132400
            MOVS    R4, 0x0       // 000226 022000
            MOVS    R5, 0x4       // 000230 022404
10:         BLX     R8            // 000232 043710  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 043720  UARTTX
            SUBS    R0, 0x37      // 000256 034067  ASCII A MINUS 10
            B       30f           // 000260 160001
20:         BLX     R9            // 000262 043720  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 043710  UARTRX
            CMP     R0, 0x0D      // 000300 024015  CARRIAGE RETURN
            BNE     40b           // 000302 150774
            BLX     R9            // 000304 043720  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 067012  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 067012  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
            MOVS    R5, R1        // 000354
            LSLS    R1, 0x2       // 000356
            RORS    R4, R1        // 000360
            MOVS    R0, 0x30      // 000362 020060  ASCII 0
            BLX     R9            // 000364 043720  UARTTX
            MOVS    R0, 0x78      // 000366 020170  ASCII x
            BLX     R9            // 000370 043720  UARTTX
0:          MOVS    R0, 0x1C      // 000372 020034
            RORS    R4, R0        // 000374 040704
            MOVS    R0, 0x0F      // 000376
            ANDS    R0, R4        // 000400
            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 043720  UARTTX
            SUBS    R5, 1         // 000416 036401
            BNE     0b            // 000420 150764
            POP     {PC}          // 000422 136400