March Madness - Hex Dump

In continuation of yesterday's theme of investigating the properites of the Arduino. Todays program dumps memory in hex. I want to learn more about the AVR environment beyond the Arduino environment. Looking at memory, while not very helpful by itself, can help alot when trying to understand how the Atmel CPU works.



Dump HEX
0000 - 0C 94 35 00 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 ..5...]...]...].
0010 - 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 ..]...]...]...].
0020 - 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 ..]...]...]...].
0030 - 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 ..]...]...]...].
0040 - 0C 94 06 07 0C 94 5D 00 0C 94 0F 04 0C 94 5D 00 ......].......].
0050 - 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 0C 94 5D 00 ..]...]...]...].
0060 - 0C 94 5D 00 0C 94 5D 00 94 05 11 24 1F BE CF EF ..]...]....$....
0070 - D8 E0 DE BF CD BF 11 E0 A0 E0 B1 E0 E4 E9 F0 E1 ................
0080 - 02 C0 05 90 0D 92 A2 32 B1 07 D9 F7 11 E0 A2 E2 .......2........
0090 - B1 E0 01 C0 1D 92 A6 3C B1 07 E1 F7 10 E0 CA E6 .......<........
00A0 - D0 E0 04 C0 22 97 FE 01 0E 94 0D 08 C8 36 D1 07 ...."........6..
00B0 - C9 F7 0E 94 CE 05 0C 94 48 08 0C 94 00 00 AE E0 ........H.......
00C0 - B0 E0 E5 E6 F0 E0 0C 94 1F 08 0D 89 1E 89 86 E0 ................
00D0 - 8C 83 1A 83 09 83 8F EF 9F E7 9E 83 8D 83 9E 01 ................
00E0 - 27 5E 3F 4F CE 01 01 96 6F 89 78 8D A9 01 0E 94 '^?O....o.x.....
00F0 - 83 00 2F 81 38 85 02 0F 13 1F F8 01 10 82 2E 96 ../.8...........






//************************************************************************
//*	Arduino hex dump
//*		(C) 2010 by Mark Sproul
//*		Open source as per standard Arduino code
//*	this program dumps Arduino memory in hex. 
//************************************************************************


#include	"HardwareSerial.h"
#include	<avr/pgmspace.h>


unsigned long	gAddressPtr;


//************************************************************************
static void	DumpHex(unsigned long startAddress)
{
int				ii;
int				theValue;
int				lineCount;
char			textString[16];
char			asciiDump[24];
unsigned long	myAddressPointer;

	lineCount			=	0;
	myAddressPointer	=	startAddress;
	while (lineCount < 16)
	{
		sprintf(textString, "%04X - ", myAddressPointer);
		Serial.print(textString);
		
		asciiDump[0]		=	0;
		for (ii=0; ii<16; ii++)
		{
			theValue	=	pgm_read_byte_near(myAddressPointer);

			sprintf(textString, "%02X ", theValue);
			Serial.print(textString);
			if ((theValue >= 0x20) && (theValue < 0x7f))
			{
				asciiDump[ii % 16]	=	theValue;
			}
			else
			{
				asciiDump[ii % 16]	=	'.';
			}
			
			myAddressPointer++;
		}
		asciiDump[16]	=	0;
		Serial.println(asciiDump);
	
		lineCount++;
	}
}



//************************************************************************
void setup()
{
	Serial.begin(9600);
	
	Serial.println();
	Serial.println("Dump HEX");
	
	gAddressPtr	=	0;
}



//************************************************************************
void loop()
{

	DumpHex(gAddressPtr);
	
	gAddressPtr	+=	256;
		
	while (!Serial.available())
	{
		//*	wait
	}
	Serial.read();
	
}