#include "avr-asm-macros.S"
/******************************************************************************/
-/* cli_hexdump_byte
+/* cli_hexdump_byte
* param data: r24
*/
.global cli_hexdump_byte
clr r25
lpm r24, Z
rcall cli_putc
- ret
+ ret
/******************************************************************************/
-/* cli_hexdump
+/* cli_hexdump
* param data: r24:r25
* param length: r22:r23
*/
breq hexdump_exit
2:
ld r24, Y+
- rcall cli_hexdump_byte
+ rcall cli_hexdump_byte
subi r16, 1
- sbc r17, r1
+ sbci r17, 0
brne 2b
-hexdump_exit:
+hexdump_exit:
pop r17
pop r16
pop r29
pop r28
ret
-
+
/******************************************************************************/
-/* cli_hexdump_rev
+/* cli_hexdump_rev
* param data: r24:r25
* param length: r22:r23
*/
1:
breq hexdump_exit
ld r24, -Y
- rcall cli_hexdump_byte
+ rcall cli_hexdump_byte
subi r16, 1
sbci r17, 0
rjmp 1b
-
+
/******************************************************************************/
/* cli_hexdump2
* param data: r24:r25
movw r16, r22
movw r26, r16
adiw r26, 0
-1:
+1:
breq hexdump_exit
ld r24, Y+
rcall cli_hexdump_byte
clr r25
ldi r24,' '
rcall cli_putc
-
+
subi r16, 1
sbci r17, 0
rjmp 1b
.global cli_hexdump_block
cli_hexdump_block:
- tst r22
- brne 1f
- tst r23
- brne 1f
- ret
+ movw r26, r22
+ adiw r26, 0
+ breq simple_ret
1:
push WIDTH
push INDENT
mov WIDTH, r18
mov INDENT, r20
movw DATA_0, r24
- movw LENG_0, r22
+ movw LENG_0, r22
2:
- clr r25
+; clr r25
ldi r24, '\r'
rcall cli_putc
- clr r25
+; clr r25
ldi r24, '\n'
rcall cli_putc
mov r4, INDENT
tst r4
breq 4f
-3: clr r25
+3:; clr r25
ldi r24, ' '
rcall cli_putc
dec r4
tst LENG_1
brne 7f
cp WIDTH, LENG_0
- breq 6f
- brmi 7f
+ brlo 7f
mov r22, LENG_0
-6: inc r4
-7:
+6: inc r4
+7:
rcall cli_hexdump2
add DATA_0, WIDTH
adc DATA_1, r1
sub LENG_0, WIDTH
- sbc LENG_0, r1
+ sbc LENG_1, r1
tst r4
- breq 2b
+ breq 2b
pop r4
pop LENG_1
pop LENG_0
pop DATA_0
pop INDENT
pop WIDTH
+simple_ret:
ret
-
-
+
+