From c12b1b99f2e3ab731c483bc93fa21b4763624fac Mon Sep 17 00:00:00 2001 From: Jacques Comeaux Date: Sat, 22 Jun 2024 17:43:20 -0500 Subject: Finish hexedit machine code --- hexedit/Makefile | 11 ++++- hexedit/hexedit.s | 121 +++++++++++++++++++++++++++------------------------- hexedit/pico_bin.ld | 13 ++++++ 3 files changed, 85 insertions(+), 60 deletions(-) create mode 100644 hexedit/pico_bin.ld diff --git a/hexedit/Makefile b/hexedit/Makefile index 4712bd1..ef7a4c2 100644 --- a/hexedit/Makefile +++ b/hexedit/Makefile @@ -2,6 +2,13 @@ all: build build: hexedit.uf2 +dump: hexedit.bin + hexdump -o hexedit.bin + +hexedit.bin: hexedit.o + arm-none-eabi-ld -T pico_bin.ld -o hexedit.bin hexedit.o + arm-none-eabi-objcopy -O binary hexedit.bin + hexedit.uf2: hexedit.elf ../elf/elf2uf2 hexedit.elf hexedit.uf2 @@ -14,8 +21,8 @@ $(objects): %.o: %.s arm-none-eabi-as -o $@ $< clean: - rm hexedit.elf hexedit.uf2 *.o + rm hexedit.elf hexedit.uf2 hexedit.bin *.o flash: hexedit.uf2 - [ -h /dev/disk/by-label/RPI-RP2 ] || sleep 2s + [ -h /dev/disk/by-label/RPI-RP2 ] || sleep 3s cat hexedit.uf2 > /dev/disk/by-label/RPI-RP2 diff --git a/hexedit/hexedit.s b/hexedit/hexedit.s index 28d2602..52facf2 100644 --- a/hexedit/hexedit.s +++ b/hexedit/hexedit.s @@ -12,6 +12,11 @@ .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 @@ -22,74 +27,74 @@ SETUP: LDR R0, [PC, #20] // 000000 044005 UARTRX MOV R11, R3 // 000016 043233 LDR R7, [PC, #20] // 000020 047405 START ADDRESS ADDS R6, R7, 1 // 000022 016176 - B MAINLOOP // 000024 160010 + B MAINLOOP // 000024 160012 .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 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 + MOVS R1, 0x8 // 000056 020410 BLX R11 // 000060 043730 SENDHEX MOVS R0, 0x20 // 000062 020040 SPACE - BLX R9 // 000064 043720 UARTTX + BLX R9 // 000064 043710 UARTTX LDRH R0, [R7] // 000066 104070 - MOVS R1, 0x4 // 000070 + MOVS R1, 0x4 // 000070 020404 BLX R11 // 000072 043730 SENDHEX MOVS R0, 0x0D // 000074 020015 CARRIAGE RETURN - BLX R9 // 000076 043720 UARTTX + BLX R9 // 000076 043710 UARTTX MOVS R0, R7 // 000100 000070 - MOVS R1, 0x8 // 000102 + MOVS R1, 0x8 // 000102 020410 BLX R11 // 000104 043730 SENDHEX MOVS R0, 0x20 // 000106 020040 SPACE - BLX R9 // 000110 043720 UARTTX -10: BLX R8 // 000112 043710 COMMAND LOOP, UARTRX + 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 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 +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 150401 + BNE 40f // 000156 150404 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 + 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 - BLX R9 // 000176 043720 UARTTX -50: BLX R8 // 000200 043710 UARTRX + 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 043720 UARTTX - BLX R10 // 000210 GETHEX + 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 043720 UARTTX - B MAINLOOP // 000222 163707 + 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 043710 HEX LOOP, UARTRX +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 @@ -98,30 +103,30 @@ GETHEX: PUSH {LR} // 000224 132400 BLO 10b // 000246 151770 CMP R0, 0x46 // 000250 024106 ASCII F BHI 10b // 000252 154366 - BLX R9 // 000254 043720 UARTTX + BLX R9 // 000254 043710 UARTTX SUBS R0, 0x37 // 000256 034067 ASCII A MINUS 10 B 30f // 000260 160001 -20: BLX R9 // 000262 043720 UARTTX +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 043710 UARTRX +40: BLX R8 // 000276 043700 UARTRX CMP R0, 0x0D // 000300 024015 CARRIAGE RETURN BNE 40b // 000302 150774 - BLX R9 // 000304 043720 UARTTX + 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 067012 UARTFR_OFST +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 067012 UARTFR_OFST +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 @@ -129,24 +134,24 @@ UARTRX: LDR R1, [PC, #12] // 000326 044403 .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 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 043720 UARTTX + BLX R9 // 000364 043710 UARTTX MOVS R0, 0x78 // 000366 020170 ASCII x - BLX R9 // 000370 043720 UARTTX + BLX R9 // 000370 043710 UARTTX 0: MOVS R0, 0x1C // 000372 020034 RORS R4, R0 // 000374 040704 - MOVS R0, 0x0F // 000376 - ANDS R0, R4 // 000400 + 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 043720 UARTTX +2: BLX R9 // 000414 043710 UARTTX SUBS R5, 1 // 000416 036401 - BNE 0b // 000420 150764 + BNE 0b // 000420 150763 POP {PC} // 000422 136400 diff --git a/hexedit/pico_bin.ld b/hexedit/pico_bin.ld new file mode 100644 index 0000000..0aa7974 --- /dev/null +++ b/hexedit/pico_bin.ld @@ -0,0 +1,13 @@ +ENTRY(SETUP) + +MEMORY { + FLASH(rx) : ORIGIN = 0x10000000, LENGTH = 2M + SRAM(rwx) : ORIGIN = 0x20000000, LENGTH = 264K +} + +SECTIONS { + .text : { + *(.text); + . = ALIGN(4); + } > SRAM +} -- cgit v1.2.3