regview32.c 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /*====================================================================*
  2. *
  3. * void regview32 (void const * memory, size_t offset, size_t length, FILE *fp);
  4. *
  5. * memory.h
  6. *
  7. * print memory as a binary dump showing absolute memory offsets
  8. * and 32-bit binary register maps; sample output looks like:
  9. *
  10. * REGISTER CONTENTS 31----24 23----16 15----08 07----00
  11. *
  12. * 00183000 00000F7F 00000000-00000000-00001111-01111111
  13. * 00183004 00000A00 00000000-00000000-00001010-00000000
  14. * 00183008 00000FF8 00000000-00000000-00001111-11111000
  15. * 0018300C 00000000 00000000-00000000-00000000-00000000
  16. * 00183010 00000075 00000000-00000000-00000000-01110101
  17. *
  18. * the header line shown above is not part of the output;
  19. *
  20. * Motley Tools by Charles Maier;
  21. * Copyright (c) 2001-2006 by Charles Maier Associates;
  22. * Licensed under the Internet Software Consortium License;
  23. *
  24. *--------------------------------------------------------------------*/
  25. #ifndef REGVIEW_SOURCE
  26. #define REGVIEW_SOURCE
  27. #include <stdio.h>
  28. #include "../tools/memory.h"
  29. #include "../tools/endian.h"
  30. void regview32 (void const * memory, size_t offset, size_t extent, FILE *fp)
  31. {
  32. uint32_t * origin = (uint32_t *)(memory);
  33. while (extent >= sizeof (* origin))
  34. {
  35. signed bit = sizeof (* origin) << 3;
  36. printf ("%08X ", (uint32_t)(offset));
  37. printf ("%08X ", LE32TOH (* origin));
  38. while (bit--)
  39. {
  40. putc (((LE32TOH (* origin) >> bit) & 1)? '1': '0', fp);
  41. if ((bit) && !(bit%8))
  42. {
  43. putc ('-', fp);
  44. }
  45. }
  46. putc ('\n', fp);
  47. offset += sizeof (* origin);
  48. extent -= sizeof (* origin);
  49. origin++;
  50. }
  51. return;
  52. }
  53. #endif