- switch( memory_id ) {
- case SFR_MEM_ID:
- if( address < SFR_MEM_SIZE ) {
- return sfr_mem[address];
- }
- else {
- return 0;
- }
- break;
- case PGM_MEM_ID:
- if( address < PGM_MEM_SIZE ) {
- return pgm_mem[address];
- }
- else {
- return 0;
- }
- break;
- case INT_MEM_ID:
- if( address < INT_MEM_SIZE ) {
- return int_mem[address];
- }
- else {
- return 0;
- }
- break;
- case EXT_MEM_ID:
- if( address < EXT_MEM_SIZE ) {
- return ext_mem[address];
- }
- else {
- return 0;
- }
- break;
- default:
- /* Error. */
- return 0;
- break;
- }
+ unsigned int MemAddress;
+ int Offset, Column;
+ int size = 256;
+ int k = 0;
+
+ if (strlen(Address) != 0) {
+ if (STREQ(Address, "PC"))
+ MemAddress = cpu8051.pc;
+ else
+ MemAddress = Ascii2Hex(Address, strlen(Address));
+ } else {
+ MemAddress = 0;
+ }
+
+ for (Offset = 0; Offset < size; Offset += 16) {
+ unsigned char data[16];
+
+ sprintf(&buf[k], "%.4X ", MemAddress + Offset);
+ k = strlen(buf);
+
+ for (Column = 0; Column < 16; Column++) {
+ data[Column] = memory_read8(memory_id, MemAddress +
+ Offset + Column);
+ sprintf(&buf[k], " %.2X", (int) data[Column]);
+ k = strlen(buf);
+ }
+ sprintf(&buf[k], " ");
+ k = strlen(buf);
+
+ /* Display any ASCII characters */
+ for (Column = 0; Column < 16; Column++) {
+ if ((int) data[Column] >= 32 &&
+ (int) data[Column] <= 126) {
+ sprintf(&buf[k], "%c", data[Column]);
+ k = strlen(buf);
+ } else {
+ sprintf(&buf[k], ".");
+ k = strlen(buf);
+ }
+ }
+ sprintf(&buf[k], "\n");
+ k = strlen(buf);
+ }