aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Comeaux <jacquesrcomeaux@protonmail.com>2024-06-18 20:23:11 -0500
committerJacques Comeaux <jacquesrcomeaux@protonmail.com>2024-06-18 20:23:11 -0500
commiteecdb67e38ac59c6f330d8397a1d5b4e8d8a72c9 (patch)
treeefd32c2c9cc5ffa1d1ccaf37afb5ced62f4e0cd1
parent8be9a0ac6bd25a1c8524bd88d910046c5d78095f (diff)
Fix hexedit bugs
-rw-r--r--hexedit/hexedit.s236
1 files changed, 133 insertions, 103 deletions
diff --git a/hexedit/hexedit.s b/hexedit/hexedit.s
index fb42d91..28d2602 100644
--- a/hexedit/hexedit.s
+++ b/hexedit/hexedit.s
@@ -7,116 +7,146 @@
.type UARTTX, %function
.type UARTRX, %function
+.type GETHEX, %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
+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 SENDHEX // 000034 010264 0x200010B5
+ .WORD UARTTX // 000034 010225 0x20001095
// 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
+ .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 R10 // 000220 043720 UARTTX
+ BLX R9 // 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
+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