91 lines
2.3 KiB
ArmAsm
91 lines
2.3 KiB
ArmAsm
;----------------------------------------------------------------
|
|
;HEX and ASCII dump function
|
|
;by Dennis Gunia (01/2023)
|
|
;----------------------------------------------------------------
|
|
|
|
;------------------------------------------------------------------------------
|
|
; dump_pretty
|
|
;
|
|
; Dumps memory content
|
|
; B contains amount of rows
|
|
; HL contains start address
|
|
; Destroys BC, HL
|
|
;------------------------------------------------------------------------------
|
|
dump_pretty:
|
|
PUSH HL
|
|
LD HL,[STR_PD_HEADER] ;Print header
|
|
CALL print_str
|
|
POP HL
|
|
dump_pretty_row:
|
|
LD A,B ;Check row counter
|
|
OR A
|
|
JP Z, dump_pretty_end ;If counter is 0, exit
|
|
DEC B ;Decrement row counter by 1
|
|
LD C, 16 ;Load column counter
|
|
LD A, H ;Print base address
|
|
CALL print_a_hex
|
|
LD A, L
|
|
CALL print_a_hex
|
|
LD A, ' '
|
|
CALL print_char
|
|
dump_pretty_col: ;Loop for column
|
|
LD A,(HL) ;Load byte to disply
|
|
CALL print_a_hex
|
|
LD A, ' '
|
|
CALL print_char
|
|
INC HL
|
|
DEC C ;Decrement column counter
|
|
JR NZ, dump_pretty_col ;Loop if not 0
|
|
dump_pretty_ascii:
|
|
PUSH BC
|
|
PUSH HL
|
|
LD B,0
|
|
LD C,16
|
|
SBC HL,BC ;Reset HL by column count
|
|
dump_pretty_ascii_loop:
|
|
LD A,(HL)
|
|
INC HL
|
|
CP 32
|
|
JP C, dump_pretty_ascii_none ;if less than 32, it is not a char
|
|
CP 127
|
|
JP NC, dump_pretty_ascii_none ;if greater or equal than 128, it is not a char
|
|
call print_char
|
|
jr dump_pretty_ascii_cont
|
|
dump_pretty_ascii_none:
|
|
LD A,'.'
|
|
call print_char
|
|
dump_pretty_ascii_cont:
|
|
DEC C
|
|
JP NZ, dump_pretty_ascii_loop
|
|
|
|
|
|
POP HL
|
|
POP BC
|
|
dump_pretty_nextrow:
|
|
LD A,10 ;New line
|
|
CALL print_char
|
|
LD A,13
|
|
CALL print_char
|
|
JR dump_pretty_row ;Else next line
|
|
dump_pretty_end:
|
|
RET
|
|
|
|
STR_PD_HEADER:
|
|
db 13,10,'BASE 0 1 2 3 4 5 6 7 8 9 A B C D E F ASCII',13,10,0
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
; print_str_fixed
|
|
;
|
|
; Prints string with fixed length
|
|
; B contains length
|
|
; HL contains start address
|
|
;------------------------------------------------------------------------------
|
|
print_str_fixed:
|
|
LD A,(HL)
|
|
INC HL
|
|
CALL print_char
|
|
DJNZ print_str_fixed
|
|
RET
|
|
|