bool dbg_hw_info(void) { unsigned manu, id; /* flash IDs */ int got_id; /* flag if we managed to get the flash IDs */ int oldmode; /* saved memory guard mode */ int line = 0; oldmode = system_memory_guard(MEMGUARD_NONE); /* disable memory guard */ /* get flash ROM type */ got_id = dbg_flash_id(&manu, &id, 0x5555, 0x2AAA); /* try SST, Atmel, NexFlash */ if (!got_id) got_id = dbg_flash_id(&manu, &id, 0x555, 0x2AA); /* try AMD, Macronix */ system_memory_guard(oldmode); /* re-enable memory guard */ lcd_setfont(FONT_SYSFIXED); lcd_clear_display(); lcd_puts(0, line++, "[Hardware info]"); if (got_id) lcd_putsf(0, line++, "Flash: M=%04x D=%04x", manu, id); else lcd_puts(0, line++, "Flash: M=???? D=????"); /* unknown, sorry */ #ifdef IAUDIO_X5 { struct ds2411_id id; lcd_puts(0, ++line, "Serial Number:"); got_id = ds2411_read_id(&id); if (got_id == DS2411_OK) { lcd_putsf(0, ++line, " FC=%02x", (unsigned)id.family_code); lcd_putsf(0, ++line, " ID=%02X %02X %02X %02X %02X %02X", (unsigned)id.uid[0], (unsigned)id.uid[1], (unsigned)id.uid[2], (unsigned)id.uid[3], (unsigned)id.uid[4], (unsigned)id.uid[5]); lcd_putsf(0, ++line, " CRC=%02X", (unsigned)id.crc); } else { lcd_putsf(0, ++line, "READ ERR=%d", got_id); } } #endif lcd_update(); /* wait for exit */ while (button_get_w_tmo(HZ/10) != (DEBUG_CANCEL|BUTTON_REL)); lcd_setfont(FONT_UI); return false; }
static bool detect_flash_header(uint8_t *addr) { #ifndef BOOTLOADER int oldmode = system_memory_guard(MEMGUARD_NONE); #endif struct flash_header hdr; memcpy(&hdr, addr, sizeof(struct flash_header)); #ifndef BOOTLOADER system_memory_guard(oldmode); #endif return hdr.magic == FLASH_MAGIC; }
bool dbg_hw_info(void) { #ifndef HAVE_LCD_BITMAP int button; int currval = 0; #else int bitmask = HW_MASK; #endif int rom_version = ROM_VERSION; unsigned manu, id; /* flash IDs */ bool got_id; /* flag if we managed to get the flash IDs */ unsigned rom_crc = 0xffffffff; /* CRC32 of the boot ROM */ bool has_bootrom; /* flag for boot ROM present */ int oldmode; /* saved memory guard mode */ oldmode = system_memory_guard(MEMGUARD_NONE); /* disable memory guard */ /* get flash ROM type */ got_id = dbg_flash_id(&manu, &id, 0x5555, 0x2AAA); /* try SST, Atmel, NexFlash */ if (!got_id) got_id = dbg_flash_id(&manu, &id, 0x555, 0x2AA); /* try AMD, Macronix */ /* check if the boot ROM area is a flash mirror */ has_bootrom = (memcmp((char*)0, (char*)0x02000000, 64*1024) != 0); if (has_bootrom) /* if ROM and Flash different */ { /* calculate CRC16 checksum of boot ROM */ rom_crc = crc_32((unsigned char*)0x0000, 64*1024, 0xffffffff); } system_memory_guard(oldmode); /* re-enable memory guard */ lcd_clear_display(); #ifdef HAVE_LCD_BITMAP lcd_setfont(FONT_SYSFIXED); lcd_puts(0, 0, "[Hardware info]"); lcd_putsf(0, 1, "ROM: %d.%02d", rom_version/100, rom_version%100); lcd_putsf(0, 2, "Mask: 0x%04x", bitmask); if (got_id) lcd_putsf(0, 3, "Flash: M=%02x D=%02x", manu, id); else lcd_puts(0, 3, "Flash: M=?? D=??"); /* unknown, sorry */ if (has_bootrom) { if (rom_crc == 0x56DBA4EE) /* known Version 1 */ lcd_puts(0, 4, "Boot ROM: V1"); else lcd_putsf(0, 4, "ROMcrc: 0x%08x", rom_crc); } else { lcd_puts(0, 4, "Boot ROM: none"); } lcd_update(); /* wait for exit */ while (button_get_w_tmo(HZ/10) != (DEBUG_CANCEL|BUTTON_REL)); lcd_setfont(FONT_UI); #else /* !HAVE_LCD_BITMAP */ lcd_puts(0, 0, "[HW Info]"); while(1) { switch(currval) { case 0: lcd_putsf(0, 1, "ROM: %d.%02d", rom_version/100, rom_version%100); break; case 1: if (got_id) lcd_putsf(0, 1, "Flash:%02x,%02x", manu, id); else lcd_puts(0, 1, "Flash:??,??"); /* unknown, sorry */ break; case 2: if (has_bootrom) { if (rom_crc == 0x56DBA4EE) /* known Version 1 */ lcd_puts(0, 1, "BootROM: V1"); else if (rom_crc == 0x358099E8) lcd_puts(0, 1, "BootROM: V2"); /* alternative boot ROM found in one single player so far */ else lcd_putsf(0, 1, "R: %08x", rom_crc); } else lcd_puts(0, 1, "BootROM: no"); } lcd_update(); button = button_get_w_tmo(HZ/10); switch(button) { case BUTTON_STOP: return false; case BUTTON_LEFT: currval--; if(currval < 0) currval = 2; break; case BUTTON_RIGHT: currval++; if(currval > 2) currval = 0; break; } } #endif return false; }