: .digits ( x n -- ) >r <# r> for # next #>type ; : .hexdigits ( x n -- ) 16 base exchange -rot .digits space base ! ; : .byte ( c -- ) 2 .hexdigits ; : .addr ( a -- ) 8 .hexdigits ; : save-emit ( c -- ) dup bl < if drop char _ then emit ; : pad_dump1 ( n -- ) 16 swap - 3 * spaces ; : dump_bytes ( a n -- ) for count .byte next drop ; : dump_chars ( a n -- ) for count save-emit next drop ; : dump1line ( a n -- ) dup if over .addr 2 spaces 2dup dump_bytes dup pad_dump1 2 spaces 2dup dump_chars then 2drop ; : dump ( a n -- ) begin ?dup while 2dup abs 16 min dump1line cr 16 /string repeat drop ; \ here 100 dump