switch (vendor) { case 0x01: printf("Spansion AM"); switch (device) { case 0x37: puts("29LV008 Top Boot"); break; case 0x38: puts("29LV081"); break; case 0x3b: puts("29LV200 Top Boot"); break; case 0x3e: puts("29LV008 Bottom Boot"); break; case 0x49: puts("29LV160 Bottom Boot"); break; case 0x4c: puts("29LV116 Bottom Boot"); break; case 0x4f: puts("29LV040"); break; case 0x5b: puts("29LV800 Bottom Boot"); break; case 0xa3: puts("29LV033"); break; case 0xa4: puts("29F040"); break; case 0xb5: puts("29LV004 Top Boot"); break; case 0xb6: puts("29LV004 Bottom Boot"); break; case 0xb9: puts("29LV400 Top Boot"); break; case 0xba: puts("29LV400 Bottom Boot"); break; case 0xbf: puts("29LV200 Bottom Boot"); break; case 0xc4: puts("29LV160 Top Boot"); break; case 0xc7: puts("29LV116 Top Boot"); break; case 0xc8: puts("29LV017"); break; case 0xda: puts("29LV800 Top Boot"); break; case 0xf6: puts("29LV320 Top Boot"); break; case 0xf9: puts("29LV320 Bottom Boot"); break; default: puts(" ????"); break; } break; case 0x1f: printf("Atmel AT"); switch (device) { case 0x21: puts("49BV/LV008 T"); break; case 0x22: puts("49BV/LV008"); break; case 0xeb: puts("49LL080"); break; default: puts(" ????"); break; } break; case 0x20: printf("ST M"); switch (device) { case 0x5b: puts("29W800 Bottom Boot"); break; case 0xd2: puts("29W008 Top Boot"); break; case 0xd7: puts("29W800 Top Boot"); break; case 0xdc: puts("29W008 Bottom Boot"); break; case 0xe3: puts("29W040"); break; case 0xea: puts("29W004 Top Boot"); break; case 0xeb: puts("29W004 Bottom Boot"); break; default: puts(" ????"); break; } break; case 0x89: printf("Intel or Sharp LH or "); // fall through case 0x2c: printf("Micron MT"); switch (device) { case 0x16: puts("28F320J3"); break; case 0x70: puts("28F004B3/28F400B3 Top Boot"); break; case 0x71: puts("28F004B3/28F400B3 Bottom Boot"); break; case 0x9c: puts("28F008B3/28F800B3 Top Boot"); break; case 0x9d: puts("28F008B3/28F800B3 Bottom Boot"); break; case 0xaa: puts("28F016SC"); break; default: puts(" ????"); break; } break; case 0xbf: printf("SST SST"); switch (device) { case 0xc8: puts("39VF1681"); break; case 0xc9: puts("39VF1682"); break; case 0xd4: puts("39LF/VF512"); break; case 0xd5: puts("39LF/VF010"); break; case 0xd6: puts("39LF/VF020"); break; case 0xd7: puts("39LF/VF040"); break; case 0xd8: puts("39LF/VF080"); break; default: puts(" ????"); break; } break; case 0x02: case 0xc2: printf("Macronix MX"); switch (device) { case 0x38: puts("29LV081"); break; case 0xa3: puts("29LV033"); break; case 0xc8: puts("29LV017"); break; default: puts(" ????"); break; } break; case 0xda: printf("Winbond W"); switch (device) { case 0xd6: puts("39L040"); break; default: puts(" ????"); break; } break; default: puts("Unknown vendor/unknown device"); break; }