From eecdb67e38ac59c6f330d8397a1d5b4e8d8a72c9 Mon Sep 17 00:00:00 2001 From: Jacques Comeaux Date: Tue, 18 Jun 2024 20:23:11 -0500 Subject: Fix hexedit bugs --- hexedit/hexedit.s | 236 ++++++++++++++++++++++++++++++------------------------ 1 file 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 -- cgit v1.2.3