/* cli-hexdump.S */
/*
This file is part of the AVR-Huffman.
- Copyright (C) 2009 Daniel Otte (daniel.otte@rub.de)
+ Copyright (C) 2006-2015 Daniel Otte (bg@nerilex.org)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#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
/******************************************************************************/
-/* void cli_hexdump_block(const void* data, uint16_t length, uint8_t indent, uint8_t width)
+/* void cli_hexdump_block(const void *data, uint16_t length, uint8_t indent, uint8_t width)
* param data: r24:r25
* param length: r22:r23
* param indent: r20
.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
-
-
+
+