+void acess__SysDebugHex(const char *tag, const void *data, size_t size)
+{
+ int_dbgheader();
+ printf("%s (Hexdump of %p+%zi)\r\n", tag, data, size);
+
+ #define CH(n) ((' '<=cdat[(n)]&&cdat[(n)]<0x7F) ? cdat[(n)] : '.')
+
+ const uint8_t *cdat = data;
+ unsigned int pos = 0;
+
+ while(size >= 16)
+ {
+ int_dbgheader();
+ printf("%04x:"
+ " %02x %02x %02x %02x %02x %02x %02x %02x "
+ " %02x %02x %02x %02x %02x %02x %02x %02x "
+ " %c%c%c%c%c%c%c%c %c%c%c%c%c%c%c%c\r\n",
+ pos,
+ cdat[ 0], cdat[ 1], cdat[ 2], cdat[ 3], cdat[ 4], cdat[ 5], cdat[ 6], cdat[ 7],
+ cdat[ 8], cdat[ 9], cdat[10], cdat[11], cdat[12], cdat[13], cdat[14], cdat[15],
+ CH(0), CH(1), CH(2), CH(3), CH(4), CH(5), CH(6), CH(7),
+ CH(8), CH(9), CH(10), CH(11), CH(12), CH(13), CH(14), CH(15)
+ );
+ size -= 16;
+ cdat += 16;
+ pos += 16;
+ }
+
+ {
+ int_dbgheader();
+ printf("%04x: ", pos);
+ for(int i = 0; i < size; i ++)
+ printf("%02x ", cdat[i]);
+ for(int i = size; i < 16; i ++)
+ printf(" ");
+ printf(" ");
+ for(int i = 0; i < size; i ++)
+ {
+ if( i == 8 )
+ printf(" ");
+ printf("%c", CH(i));
+ }
+
+ printf("\n");
+ }
+}
+