aboutsummaryrefslogtreecommitdiff
path: root/hexedit/hexedit.s
blob: fb42d91f0a9aa4312e7e5b0c38b708648aff8bd9 (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
.syntax unified
.cpu cortex-m0plus
.thumb

.type SETUP, %function
.global SETUP

.type UARTTX, %function
.type UARTRX, %function
.type SENDHEX, %function

.align 4

SETUP:      LDR     R0, [PC, #16] // 000000 044004  UARTRX
            LDR     R1, [PC, #20] // 000002 044405  UARTTX
            LDR     R2, [PC, #20] // 000004 045005  SENDHEX
            MOV     R9, R0        // 000006 043201
            MOV     R10, R1       // 000010 043212
            MOV     R11, R2       // 000012 043223
            LDR     R7, [PC, #4]  // 000014 047401  START ADDRESS
            ADDS    R6, R7, 1     // 000016 016176
            B       MAINLOOP      // 000020 160010
            .HWORD  0x0000        // 000022 000000
            .WORD   UARTRX        // 000024 010243  0x200010A3
                                  // 000026 040000
            .WORD   UARTTX        // 000030 010225  0x20001095
                                  // 000032 040000
            .WORD   SENDHEX       // 000034 010264  0x200010B5
                                  // 000036 040000
            .WORD   0x20001000    // 000040 010000  START ADDRESS
                                  // 000042 020000
MAINLOOP:   MOVS    R0, R7        // 000044 000070  PROMPT
            BLX     R11           // 000046 043730  SENDHEX
            MOVS    R0, 0x20      // 000050 020040  SPACE
            BLX     R10           // 000052 043720  UARTTX
            LDRH    R0, [R7]      // 000054 104070
            BLX     R11           // 000056 043730  SENDHEX
            MOVS    R0, 0x0D      // 000060 020015  CARRIAGE RETURN
            BLX     R10           // 000062 043720  UARTTX
            MOVS    R0, R7        // 000064 000070
            BLX     R11           // 000066 043730  SENDHEX
            MOVS    R0, 0x20      // 000070 020040  SPACE
            BLX     R10           // 000072 043720  UARTTX
10:         BLX     R9            // 000074 043710  COMMAND LOOP, UARTRX
            CMP     R0, 0x47      // 000076 024107  ASCII G
            BNE     20f           // 000100 150400
            BX      R6            // 000102 043460
20:         CMP     R0, 0x0D      // 000104 024015  CARRIAGE RETURN
            BNE     30f           // 000106 150401
            ADDS    R7, 0x2       // 000110 033402
            B       MAINLOOP      // 000112 163753
30:         CMP     R0, 0x30      // 000114 024060  ASCII 0
            BNE     MAINLOOP      // 000116 150751
            BLX     R10           // 000120 043720  UARTTX
40:         BLX     R9            // 000122 043710  UARTRX
            CMP     R0, 0x78      // 000124 024170  ASCII x
            BNE     40b           // 000126 150774
            BLX     R10           // 000130 043720  UARTTX
            MOVS    R4, 0         // 000132 022000
            MOVS    R5, 4         // 000134 022404
50:         BLX     R9            // 000136 043710  HEX LOOP, UARTRX
            CMP     R0, 0x30      // 000140 024060  ASCII 0
            BLO     50b           // 000142 151774
            CMP     R0, 0x39      // 000144 024071  ASCII 9
            BLS     60f           // 000146 154406
            CMP     R0, 0x41      // 000150 024101  ASCII A
            BLO     50b           // 000152 151770
            CMP     R0, 0x46      // 000154 024106  ASCII F
            BHI     50b           // 000156 154366
            BLX     R10           // 000160 043720  UARTTX
            SUBS    R0, 0x37      // 000162 034067  ASCII A MINUS 10
            B       70f           // 000164 160001
60:         BLX     R10           // 000166 043720  UARTTX
            SUBS    R0, 0x30      // 000170 034060  ASCII 0
70:         LSLS    R4, 4         // 000172 000444
            ADDS    R4, R0        // 000174 014044
            SUBS    R5, 1         // 000176 036401
            BNE     50b           // 000200 150755
80:         BLX     R9            // 000202 043710  UARTRX
            CMP     R0, 0x0D      // 000204 024015  CARRIAGE RETURN
            BNE     80b           // 000206 150774
            BLX     R10           // 000210 043720  UARTTX
            STRH    R4, [R7]      // 000212 100074
            ADDS    R7, 0x2       // 000214 033402
            MOVS    R0, 0x0A      // 000216 020012  NEW LINE
            BLX     R10           // 000220 043720  UARTTX
            B       MAINLOOP      // 000222 163707
UARTTX:     LDR     R1, [PC, #24] // 000224 044406  UART0_BASE
            MOVS    R3, 0x20      // 000226 021440  TX FIFO FULL
1:          LDR     R2, [R1, 0x18]// 000230 067012  UARTFR_OFST
            TST     R2, R3        // 000232 041032
            BNE     1b            // 000234 150774
            STRB    R0, [R1]      // 000236 070010  UARTDR_OFST
            BX      LR            // 000240 043560
UARTRX:     LDR     R1, [PC, #12] // 000242 044403
            MOVS    R3, 0x10      // 000244 021420  RX FIFO EMPTY
1:          LDR     R2, [R1, 0x18]// 000246 067012  UARTFR_OFST
            TST     R2, R3        // 000250 041032
            BNE     1b            // 000252 150774
            LDRB    R0, [R1]      // 000254 074010  UARTDR_OFST
            BX      LR            // 000256 043560
            .WORD   0x40034000    // 000260 040000
                                  // 000262 040003
SENDHEX:    PUSH    {LR}          // 000264 132400
            LSLS    R4, R0, 0x10  // 000266 002004  16 BITS
            MOVS    R0, 0x30      // 000270 020060  ASCII 0
            BLX     R10           // 000272 043720  UARTTX
            MOVS    R0, 0x78      // 000274 020170  ASCII x
            BLX     R10           // 000276 043720
            MOVS    R5, 0x4       // 000300 022404
0:          MOVS    R0, 0x1C      // 000302 020034
            RORS    R4, R0        // 000304 040704
            UXTB    R0, R4        // 000306 131340
            CMP     R0, 0x9       // 000310 024011
            BHI     1f            // 000312 154001
            ADDS    R0, 0x30      // 000314 030060  ASCII 0
            B       2f            // 000316 160000
1:          ADDS    R0, 0x37      // 000320 030067  ASCII A MINUS 10
2:          BLX     R10           // 000322 043720  UARTTX
            SUBS    R5, 1         // 000324 036401
            BNE     0b            // 000326 150764
            POP     {PC}          // 000330 136400