From 005651ce13dc199390e9ffe2f0624e18cbde77dc Mon Sep 17 00:00:00 2001 From: notaz Date: Fri, 28 Jun 2013 03:01:53 +0300 Subject: [PATCH] build carthw.cfg in things like libretro don't want external files, but we still look for one and prefer it if it's available --- pico/cart.c | 37 ++++++- pico/carthw_cfg.c | 225 ++++++++++++++++++++++++++++++++++++++++++ tools/make_carthw_c.c | 62 ++++++++++++ 3 files changed, 319 insertions(+), 5 deletions(-) create mode 100644 pico/carthw_cfg.c create mode 100644 tools/make_carthw_c.c diff --git a/pico/cart.c b/pico/cart.c index d86af41..db742a8 100644 --- a/pico/cart.c +++ b/pico/cart.c @@ -709,21 +709,45 @@ static int is_expr(const char *expr, char **pr) return 1; } +#include "carthw_cfg.c" + static void parse_carthw(const char *carthw_cfg, int *fill_sram) { int line = 0, any_checks_passed = 0, skip_sect = 0; + const char *s, *builtin = builtin_carthw_cfg; int tmp, rom_crc = 0; char buff[256], *p, *r; FILE *f; f = fopen(carthw_cfg, "r"); - if (f == NULL) { + if (f == NULL) + f = fopen("pico/carthw.cfg", "r"); + if (f == NULL) elprintf(EL_STATUS, "couldn't open carthw.cfg!"); - return; - } - while ((p = fgets(buff, sizeof(buff), f))) + for (;;) { + if (f != NULL) { + p = fgets(buff, sizeof(buff), f); + if (p == NULL) + break; + } + else { + if (*builtin == 0) + break; + for (s = builtin; *s != 0 && *s != '\n'; s++) + ; + while (*s == '\n') + s++; + tmp = s - builtin; + if (tmp > sizeof(buff) - 1) + tmp = sizeof(buff) - 1; + memcpy(buff, builtin, tmp); + buff[tmp] = 0; + p = buff; + builtin = s; + } + line++; p = sskip(p); if (*p == 0 || *p == '#') @@ -934,7 +958,9 @@ no_checks: skip_sect = 1; continue; } - fclose(f); + + if (f != NULL) + fclose(f); } /* @@ -999,3 +1025,4 @@ static void PicoCartDetect(const char *carthw_cfg) *(int *) (Pico.rom + 0x1f0) = 0x20204520; } +// vim:shiftwidth=2:expandtab diff --git a/pico/carthw_cfg.c b/pico/carthw_cfg.c new file mode 100644 index 0000000..68782e5 --- /dev/null +++ b/pico/carthw_cfg.c @@ -0,0 +1,225 @@ +/* generated by ./tools/make_carthw_c, do not modify */ +static const char builtin_carthw_cfg[] = + "[]\n" + "check_str=0x150,\"Virtua Racing\"\n" + "hw=svp\n" + "[]\n" + "check_str=0x150,\"VIRTUA RACING\"\n" + "hw=svp\n" + "[]\n" + "check_str=0x100,\"SEGA PICO\"\n" + "hw=pico\n" + "[]\n" + "check_str=0x100,\"IMA IKUNOUJYUKU\"\n" + "hw=pico\n" + "[]\n" + "check_str=0x120,\"PUGGSY\"\n" + "prop=no_sram\n" + "[]\n" + "check_str=0x150,\"DINO DINI'S SOCCER\"\n" + "prop=filled_sram\n" + "[]\n" + "check_str=0x150,\"MICRO MACHINES II\"\n" + "prop=filled_sram\n" + "[]\n" + "check_str=0x150,\"SUPER STREET FIGHTER2 The New Challengers\"\n" + "hw=ssf2_mapper\n" + "prop=no_sram\n" + "[]\n" + "check_str=0x150,\"PIER SOLAR™&THE GREAT ARCHITECTS© WaterMelon™\"\n" + "hw=piersolar_mapper\n" + "sram_range=0xa13009,0xa1300b\n" + "eeprom_type=3\n" + "eeprom_lines=2,1,0\n" + "[]\n" + "check_str=0x120,\"FLICKY\"\n" + "check_size_gt=0x020000\n" + "hw=x_in_1_mapper\n" + "[]\n" + "check_str=0x150,\"ROBOCOP 3\"\n" + "check_size_gt=0x080000\n" + "hw=x_in_1_mapper\n" + "[]\n" + "check_str=0x150,\"ALIEN 3\"\n" + "check_size_gt=0x080000\n" + "hw=x_in_1_mapper\n" + "[]\n" + "check_str=0x150,\" SHOVE IT!\"\n" + "check_size_gt=0x020000\n" + "hw=x_in_1_mapper\n" + "[]\n" + "check_str=0x150,\"MS PACMAN\"\n" + "check_size_gt=0x020000\n" + "hw=x_in_1_mapper\n" + "[]\n" + "check_str=0x150,\"KID CHAMELEON\"\n" + "check_size_gt=0x100000\n" + "hw=radica_mapper\n" + "[]\n" + "check_str=0x94,\"THE EARTH DEFEND\"\n" + "hw=realtec_mapper\n" + "[]\n" + "check_str=0xfe,\"WISEGAME 11-03-1993\"\n" + "hw=realtec_mapper\n" + "[]\n" + "check_str=0x95,\"MALLET LEGEND\"\n" + "hw=realtec_mapper\n" + "[]\n" + "check_str=0x150,\"COLLEGE SLAM\"\n" + "eeprom_type=3\n" + "eeprom_lines=8,0,0\n" + "[]\n" + "check_str=0x150,\"FRANK THOMAS BIGHURT BASEBAL\"\n" + "eeprom_type=3\n" + "eeprom_lines=8,0,0\n" + "[]\n" + "check_str=0x150,\"MICRO MACHINES II\"\n" + "sram_range=0x300000,0x380001\n" + "eeprom_type=2\n" + "eeprom_lines=9,8,7\n" + "[]\n" + "check_str=0x150,\" \"\n" + "check_csum=0x165e\n" + "sram_range=0x300000,0x380001\n" + "eeprom_type=2\n" + "eeprom_lines=9,8,7\n" + "[]\n" + "check_str=0x150,\" \"\n" + "check_csum=0x2c41\n" + "sram_range=0x300000,0x380001\n" + "eeprom_type=2\n" + "eeprom_lines=9,8,7\n" + "[]\n" + "check_str=0x150,\" \"\n" + "check_csum=0x168b\n" + "sram_range=0x300000,0x380001\n" + "eeprom_type=2\n" + "eeprom_lines=9,8,7\n" + "[]\n" + "check_str=0x150,\" \"\n" + "check_csum=0xcee0\n" + "sram_range=0x300000,0x380001\n" + "eeprom_type=2\n" + "eeprom_lines=9,8,7\n" + "[]\n" + "check_str=0x150,\"NBA JAM \"\n" + "eeprom_type=2\n" + "eeprom_lines=1,0,1\n" + "[]\n" + "check_str=0x150,\"NBA JAM TOURNAMENT EDITION\"\n" + "sram_range=0x200000,0x200001\n" + "eeprom_type=2\n" + "eeprom_lines=8,0,0\n" + "[]\n" + "check_str=0x150,\"NFL QUARTERBACK CLUB\"\n" + "eeprom_type=2\n" + "eeprom_lines=8,0,0\n" + "[]\n" + "check_str=0x150,\"NHLPA Hockey '93\"\n" + "sram_range=0x200000,0x200001\n" + "eeprom_type=1\n" + "eeprom_lines=6,7,7\n" + "[]\n" + "check_str=0x150,\"NHLPA HOCKEY '93\"\n" + "sram_range=0x200000,0x200001\n" + "eeprom_type=1\n" + "eeprom_lines=6,7,7\n" + "[]\n" + "check_str=0x150,\"RINGS OF POWER\"\n" + "sram_range=0x200000,0x200001\n" + "eeprom_type=1\n" + "eeprom_lines=6,7,7\n" + "[]\n" + "check_str=0x104,\" \"\n" + "check_crc32=0x10458e09\n" + "hw=prot\n" + "prot_ro_value16=0xa13000,0xffff00,0x28\n" + "[]\n" + "check_str=0x172,\"GAME : ELF WOR\"\n" + "hw=prot\n" + "prot_ro_value16=0x400000,-2,0x5500\n" + "prot_ro_value16=0x400002,-2,0xc900#checkisdoneiftheaboveonefails\n" + "prot_ro_value16=0x400004,-2,0x0f00\n" + "prot_ro_value16=0x400006,-2,0x1800#similartoabove\n" + "[]\n" + "check_str=0x104,\" \"\n" + "check_crc32=0xcbc38eea\n" + "hw=prot\n" + "prot_ro_value16=0x480000,0xff0000,0xaa00\n" + "prot_ro_value16=0x4a0000,0xff0000,0x0a00\n" + "prot_ro_value16=0x4c0000,0xff0000,0xf000\n" + "prot_ro_value16=0x400000,0xc00000,0x0000#defaultfor400000-7f0000\n" + "[]\n" + "check_str=0x104,\" are Registered Trademarks\"\n" + "check_crc32=0xc004219d\n" + "hw=prot_lk3\n" + "[]\n" + "check_str=0x104,\" are Registered Trademarks\"\n" + "check_crc32=0xaff46765\n" + "hw=prot\n" + "prot_rw_value16=0x400000,0xc00004,0\n" + "prot_rw_value16=0x400004,0xc00004,0\n" + "[]\n" + "check_str=0x118,\"CREATON. \"\n" + "check_crc32=0xddd02ba4\n" + "hw=prot\n" + "prot_ro_value16=0x400000,-2,0x9000\n" + "prot_ro_value16=0x401000,-2,0xd300\n" + "[]\n" + "check_str=0x104,\" \"\n" + "check_crc32=0xf68f6367\n" + "hw=prot\n" + "prot_ro_value16=0xa13002,-2,0x01\n" + "prot_ro_value16=0xa1303e,-2,0x1f\n" + "[]\n" + "check_str=0x104,\" \"\n" + "check_crc32=0xfb176667\n" + "hw=prot\n" + "prot_ro_value16=0xa13000,-2,0x14\n" + "prot_ro_value16=0xa13002,-2,0x01\n" + "prot_ro_value16=0xa1303e,-2,0x1f\n" + "[]\n" + "check_csum=0\n" + "check_crc32=0x3ee639f0\n" + "hw=prot\n" + "prot_ro_value16=0xa13000,-2,0x0c\n" + "[]\n" + "check_csum=0\n" + "check_crc32=0xdecdf740\n" + "hw=prot\n" + "prot_ro_value16=0x400000,-2,0x5500\n" + "prot_ro_value16=0x400002,-2,0x0f00\n" + "prot_ro_value16=0x400004,-2,0xaa00\n" + "prot_ro_value16=0x400006,-2,0xf000\n" + "[]\n" + "check_str=0x104,\" \"\n" + "check_crc32=0xf26f88d1\n" + "hw=prot\n" + "prot_ro_value16=0x400002,-2,0x9800\n" + "prot_ro_value16=0x400004,-2,0xaa00#or0xc900\n" + "prot_ro_value16=0x400006,-2,0xf000\n" + "[]\n" + "check_str=0x104,\" are Registered Trademarks\"\n" + "check_crc32=0x4820a161\n" + "hw=prot\n" + "prot_ro_value16=0x400000,-2,0x5500\n" + "prot_ro_value16=0x400002,-2,0x0f00\n" + "[]\n" + "check_str=0x104,\" are Registered Trademarks\"\n" + "check_crc32=0x413dfee2\n" + "hw=prot_lk3\n" + "[]\n" + "check_str=0x140,\"SUPER MARIO BROS \"\n" + "hw=prot\n" + "prot_ro_value16=0xa13000,-2,0x0c\n" + "[]\n" + "check_str=0x104,\" are Registered Trademarks\"\n" + "check_crc32=0xf7e1b3e1\n" + "hw=prot\n" + "prot_ro_value16=0xa13000,-2,0x0a\n" + "[]\n" + "check_str=0x104,\" are Registered Trademarks\"\n" + "check_crc32=0xb8261ff5\n" + "hw=prot\n" + "prot_rw_value16=0x400000,0xc00000,0\n" +; diff --git a/tools/make_carthw_c.c b/tools/make_carthw_c.c new file mode 100644 index 0000000..480a6fe --- /dev/null +++ b/tools/make_carthw_c.c @@ -0,0 +1,62 @@ +#include +#include +#include + +int main(int argc, char *argv[]) +{ + FILE *fi, *fo; + char buf[256]; + + if (argc != 3) { + printf("usage:\n%s \n", argv[0]); + return 1; + } + + fi = fopen(argv[1], "r"); + fo = fopen(argv[2], "w"); + if (fi == NULL || fo == NULL) { + printf("fopen failed\n"); + return 1; + } + + fprintf(fo, "/* generated by %s, do not modify */\n", argv[0]); + fprintf(fo, "static const char builtin_carthw_cfg[] =\n"); + + while ((fgets(buf, sizeof(buf), fi))) + { + char bufd[256]; + char *d = bufd, *p = buf; + int quote = 0; + + while (*p && isspace(*p)) + p++; + + if (*p == 0 || *p == '#') + continue; + + /* section names not needed */ + if (*p == '[') + strcpy(p, "[]"); + + for (; *p != 0; p++) { + if (!quote && isspace(*p)) + continue; + if (*p == '"') { + quote = !quote; + *d++ = '\\'; + } + *d++ = *p; + } + *d = 0; + + + fprintf(fo, " \"%s\\n\"\n", bufd); + } + + fprintf(fo, ";\n"); + + fclose(fi); + fclose(fo); + + return 0; +} -- 2.39.2