comparison romdb.c @ 764:bb60259e8edf

Initial work on ROM database
author Michael Pavone <pavone@retrodev.com>
date Thu, 02 Jul 2015 19:19:06 -0700
parents
children dc54387ee1cd
comparison
equal deleted inserted replaced
762:206c449eaa81 764:bb60259e8edf
1 #include <stdlib.h>
2 #include <string.h>
3 #include "config.h"
4 #include "romdb.h"
5 #include "util.h"
6
7 #define GAME_ID_OFF 0x183
8 #define GAME_ID_LEN 8
9 #define TITLE_START 0x150
10 #define TITLE_END (TITLE_START+48)
11
12 tern_node *load_rom_db()
13 {
14 char *exe_dir = get_exe_dir();
15 if (!exe_dir) {
16 fputs("Failed to find executable path\n", stderr);
17 exit(1);
18 }
19 char *path = alloc_concat(exe_dir, "/rom.db");
20 tern_node *db = parse_config_file(path);
21 free(path);
22 if (!db) {
23 fputs("Failed to load ROM DB\n", stderr);
24 }
25 return db;
26 }
27
28 char *get_header_name(uint8_t *rom)
29 {
30 uint8_t *last = rom + TITLE_END - 1;
31 uint8_t *src = rom + TITLE_START;
32
33 while (last > src && (*last <= 0x20 || *last >= 0x80))
34 {
35 last--;
36 }
37 if (last == src) {
38 //TODO: Use other name field
39 return strdup("UNKNOWN");
40 } else {
41 last++;
42 char *ret = malloc(last - (rom + TITLE_START) + 1);
43 uint8_t *dst;
44 for (dst = ret; src < last; src++)
45 {
46 if (*src >= 0x20 && *src < 0x80) {
47 *(dst++) = *src;
48 }
49 }
50 *dst = 0;
51 return ret;
52 }
53 }
54
55 rom_info configure_rom_heuristics(uint8_t *rom)
56 {
57 rom_info info;
58 info.name = get_header_name(rom);
59
60 }
61
62 rom_info configure_rom(tern_node *rom_db, void *vrom)
63 {
64 uint8_t product_id[GAME_ID_LEN+1];
65 uint8_t *rom = vrom;
66 product_id[GAME_ID_LEN] = 0;
67 for (int i = 0; i < GAME_ID_LEN; i++)
68 {
69 if (rom[GAME_ID_OFF + i] <= ' ') {
70 product_id[i] = 0;
71 break;
72 }
73 product_id[i] = rom[GAME_ID_OFF + i];
74
75 }
76 tern_node * entry = tern_find_prefix(rom_db, product_id);
77 if (!entry) {
78 return configure_rom_heuristics(rom);
79 }
80 rom_info info;
81 info.name = strdup(tern_find_ptr_default(entry, "name", "UNKNOWN"));
82 return info;
83 }