How+to+display+a+hex+dump+of+memory+contents

//by Jon Ripley, May 2011//

It is useful sometimes to be able to list the contents of a block of memory to examine it. This may be to help debug a problem, examine binary data in memory or one of many other uses.

The easiest way to achieve that is probably to use the supplied **Memory Monitor** add-in utility, which optionally displays the contents of a block of memory in hexadecimal and ANSI (commonly known as a //hex dump//).

However if you want to achieve a similar effect in your own program you can use **PROCm_Dump** below; it accepts four parameters: code format="bb4w" PROCm_dump(block%, size%, items%, verbose%) code Here //block%// should point to the memory to list, //size%// is the size in bytes, //items%// is the number of bytes to display on each line -- typically 16 -- and verbose controls whether a header is printed.

In the example below we reserve 16 bytes of memory, write a message into the memory and call **PROCm_dump** to display a hex dump of the memory: code format="bb4w" DIM a 15 $$a="Hello world!" PROCm_dump(a, 16, 8, TRUE) code The ouput of the code is as follows: code Address : 00 01 02 03 04 05 06 07 :

04421AA1 : 48 65 6C 6C 6F 20 77 6F : Hello wo 04421AA9 : 72 6C 64 21 00 00 00 00 : rld!.... code Here is the code for **PROCm_dump**: code format="bb4w" DEF PROCm_dump(P%,L%,S%,F%) LOCAL I%,J%,K% FOR I%=0 TO L%-1 STEP S%       IF I%MOD(S%*16)=0 IF F% THEN PRINT '"Address :"; FOR J%=0 TO S%-1 PRINT " ";FNh0(J%,2); NEXT J%         PRINT " :"' ENDIF PRINT FNh0(P%+I%,8)" :"; FOR J%=0 TO S%-1 K%=?(P%+I%+J%) IF P%+I%+J%126 K%=ASC"." IF P%+I%+J%>=P%+L% K%=ASC" " VDU K%       NEXT J%        PRINT NEXT I%     ENDPROC DEF FNh0(N%,L%) =RIGHT$(STRING$(L%,"0")+STR$~N%,L%) code