+static int extract_text(char *dest, unsigned char *src, int len, int swab)\r
+{\r
+ char *p = dest;\r
+ int i;\r
+\r
+ if (swab) swab = 1;\r
+\r
+ for (i = len - 1; i >= 0; i--)\r
+ {\r
+ if (src[i^swab] != ' ') break;\r
+ }\r
+ len = i + 1;\r
+\r
+ for (i = 0; i < len; i++)\r
+ {\r
+ unsigned char s = src[i^swab];\r
+ if (s >= 0x20 && s < 0x7f && s != '#' && s != '|' &&\r
+ s != '[' && s != ']' && s != '\\')\r
+ {\r
+ *p++ = s;\r
+ }\r
+ else\r
+ {\r
+ sprintf(p, "\\%02x", s);\r
+ p += 3;\r
+ }\r
+ }\r
+\r
+ return p - dest;\r
+}\r
+\r
+char *emu_makeRomId(void)\r
+{\r
+ static char id_string[3+0x11+0x11+0x30+16];\r
+ int pos, swab = 1;\r
+\r
+ if (PicoAHW & PAHW_MCD) {\r
+ strcpy(id_string, "CD|");\r
+ swab = 0;\r
+ }\r
+ else strcpy(id_string, "MD|");\r
+ pos = 3;\r
+\r
+ pos += extract_text(id_string + pos, id_header + 0x80, 0x0e, swab); // serial\r
+ id_string[pos] = '|'; pos++;\r
+ pos += extract_text(id_string + pos, id_header + 0xf0, 0x03, swab); // region\r
+ id_string[pos] = '|'; pos++;\r
+ pos += extract_text(id_string + pos, id_header + 0x50, 0x30, swab); // overseas name\r
+ id_string[pos] = 0;\r
+\r
+ return id_string;\r
+}\r
+\r