typedef enum DebugFlags { SHOW_ROM = (1 << 0), SHOW_WST = (1 << 1), SHOW_RST = (1 << 2), SHOW_ZP = (1 << 3), SHOW_DEV1 = (1 << 4), SHOW_DEV2 = (1 << 6), } DebugFlags; void print_debug_info(u8 flags) { txt_position(0, 0); if (flags & SHOW_ROM) { txt_printf("\nROM"); for (size_t i = 0; i < 128; i++) { if (i % 8 == 0) { txt_printf("\n"); } if (i % 2 == 0) { txt_printf(" "); } txt_printf("%02x", uxn_ram[i + PAGE_PROGRAM]); } txt_printf("\n"); } if (flags & SHOW_DEV1) { txt_printf("\nSYSTEM"); for (size_t i = 0; i < (0 + 16); i++) { if (i % 8 == 0) { txt_printf("\n"); } txt_printf(" "); txt_printf("%02x", device_data[i]); } txt_printf("\nCONSOLE"); for (size_t i = 0x10; i < (0x10 + 16); i++) { if (i % 8 == 0) { txt_printf("\n"); } txt_printf(" "); txt_printf("%02x", device_data[i]); } txt_printf("\nSCREEN"); for (size_t i = 0x20; i < (0x20 + 16); i++) { if (i % 8 == 0) { txt_printf("\n"); } txt_printf(" "); txt_printf("%02x", device_data[i]); } txt_printf("\nCONTROLLER"); for (size_t i = 0x80; i < (0x80 + 16); i++) { if (i % 8 == 0) { txt_printf("\n"); } txt_printf(" "); txt_printf("%02x", device_data[i]); } txt_printf("\nMOUSE"); for (size_t i = 0x90; i < (0x90 + 16); i++) { if (i % 8 == 0) { txt_printf("\n"); } txt_printf(" "); txt_printf("%02x", device_data[i]); } txt_printf("\nDATETIME"); for (size_t i = 0xc0; i < (0xc0 + 16); i++) { if (i % 8 == 0) { txt_printf("\n"); } txt_printf(" "); txt_printf("%02x", device_data[i]); } } if (flags & SHOW_DEV2) { txt_printf("\nAUDIO 1"); for (size_t i = 0x30; i < (0x30 + 16); i++) { if (i % 8 == 0) { txt_printf("\n"); } txt_printf(" "); txt_printf("%02x", device_data[i]); } txt_printf("\nAUDIO 2"); for (size_t i = 0x40; i < (0x40 + 16); i++) { if (i % 8 == 0) { txt_printf("\n"); } txt_printf(" "); txt_printf("%02x", device_data[i]); } txt_printf("\nAUDIO 3"); for (size_t i = 0x50; i < (0x50 + 16); i++) { if (i % 8 == 0) { txt_printf("\n"); } txt_printf(" "); txt_printf("%02x", device_data[i]); } txt_printf("\nAUDIO 4"); for (size_t i = 0x60; i < (0x60 + 16); i++) { if (i % 8 == 0) { txt_printf("\n"); } txt_printf(" "); txt_printf("%02x", device_data[i]); } txt_printf("\nFILE 1"); for (size_t i = 0xa0; i < (0xa0 + 16); i++) { if (i % 8 == 0) { txt_printf("\n"); } txt_printf(" "); txt_printf("%02x", device_data[i]); } txt_printf("\nFILE 2"); for (size_t i = 0xb0; i < (0xb0 + 16); i++) { if (i % 8 == 0) { txt_printf("\n"); } txt_printf(" "); txt_printf("%02x", device_data[i]); } } if (flags & SHOW_WST) { txt_printf("\nWST ("); txt_printf("SIZE: %d)", wst_ptr - (uintptr_t)wst); for (size_t i = 0; i < 128; i++) { if (i % 8 == 0) { txt_printf("\n"); } if (i >= (wst_ptr - (uintptr_t)wst)) { txt_printf("%02x ", 0); } else { txt_printf("%02x ", wst[i]); } } } if (flags & SHOW_RST) { txt_printf("RST ("); txt_printf("SIZE: %d)", rst_ptr - (uintptr_t)rst); for (size_t i = 0; i < 128; i++) { if (i % 8 == 0) { txt_printf("\n"); } if (i >= (rst_ptr - (uintptr_t)rst)) { txt_printf("%02x ", 0); } else { txt_printf("%02x ", rst[i]); } } } if (flags & SHOW_ZP) { txt_printf("RAM (ZP)\n"); for (size_t i = 0; i < 128; i++) { if (i % 8 == 0) { txt_printf("\n"); } txt_printf("%02x ", uxn_ram[i]); } } if (flags == 0) { txt_printf("\nRAM (ZP)"); for (size_t i = 0; i < 32; i++) { if (i % 8 == 0) { txt_printf("\n"); } if (i % 2 == 0) { txt_printf(" "); } txt_printf("%02x", uxn_ram[i]); } txt_printf("\nWST ("); txt_printf("SIZE: %d)", wst_ptr - (uintptr_t)wst); for (size_t i = 0; i < 32; i++) { if (i % 8 == 0) { txt_printf("\n"); } if (i % 2 == 0) { txt_printf(" "); } if (i >= (wst_ptr - (uintptr_t)wst)) { txt_printf("%02x", 0); } else { txt_printf("%02x", wst[i]); } } txt_printf("\nRST ("); txt_printf("SIZE: %d)", rst_ptr - (uintptr_t)rst); for (size_t i = 0; i < 32; i++) { if (i % 8 == 0) { txt_printf("\n"); } if (i % 2 == 0) { txt_printf(" "); } if (i >= (rst_ptr - (uintptr_t)rst)) { txt_printf("%02x", 0); } else { txt_printf("%02x", rst[i]); } } } }