comparison romdb.c @ 1842:49f65d240299 mame_interp

Merge from default
author Michael Pavone <pavone@retrodev.com>
date Sun, 14 Apr 2019 23:38:02 -0700
parents 8500bd987dda
children 882746581f17
comparison
equal deleted inserted replaced
1787:0c6d07f91346 1842:49f65d240299
291 info->map[8].end = 0xA13100; 291 info->map[8].end = 0xA13100;
292 info->map[8].mask = 0xFF; 292 info->map[8].mask = 0xFF;
293 info->map[8].write_16 = (write_16_fun)write_bank_reg_w; 293 info->map[8].write_16 = (write_16_fun)write_bank_reg_w;
294 info->map[8].write_8 = (write_8_fun)write_bank_reg_b; 294 info->map[8].write_8 = (write_8_fun)write_bank_reg_b;
295 return; 295 return;
296 } else if(!memcmp("SEGA MEGAWIFI", rom + 0x100, strlen("SEGA MEGAWIFI"))) {
297 info->mapper_type = MAPPER_NONE;
298 info->map_chunks = base_chunks + 2;
299 info->map = malloc(sizeof(memmap_chunk) * info->map_chunks);
300 memset(info->map, 0, sizeof(memmap_chunk)*2);
301 memcpy(info->map+2, base_map, sizeof(memmap_chunk) * base_chunks);
302 info->save_size = 0x400000;
303 info->save_bus = RAM_FLAG_BOTH;
304 info->save_type = SAVE_NOR;
305 info->map[0].start = 0;
306 info->map[0].end = 0x400000;
307 info->map[0].mask = 0xFFFFFF;
308 info->map[0].write_16 = nor_flash_write_w;
309 info->map[0].write_8 = nor_flash_write_b;
310 info->map[0].read_16 = nor_flash_read_w;
311 info->map[0].read_8 = nor_flash_read_b;
312 info->map[0].flags = MMAP_READ_CODE | MMAP_CODE;
313 info->map[0].buffer = info->save_buffer = malloc(info->save_size);
314 uint32_t init_size = size < info->save_size ? size : info->save_size;
315 memcpy(info->save_buffer, rom, init_size);
316 byteswap_rom(info->save_size, (uint16_t *)info->save_buffer);
317 info->nor = calloc(1, sizeof(nor_state));
318 nor_flash_init(info->nor, info->save_buffer, info->save_size, 128, 0xDA45, RAM_FLAG_BOTH);
319 info->nor->cmd_address1 = 0xAAB;
320 info->nor->cmd_address2 = 0x555;
321 info->map[1].start = 0xA130C0;
322 info->map[1].end = 0xA130D0;
323 info->map[1].mask = 0xFFFFFF;
324 if (!strcmp(
325 "on",
326 tern_find_path_default(config, "system\0megawifi\0", (tern_val){.ptrval="off"}, TVAL_PTR).ptrval)
327 ) {
328 info->map[1].write_16 = megawifi_write_w;
329 info->map[1].write_8 = megawifi_write_b;
330 info->map[1].read_16 = megawifi_read_w;
331 info->map[1].read_8 = megawifi_read_b;
332 } else {
333 warning("ROM uses MegaWiFi, but it is disabled\n");
334 }
335 return;
296 } else if (has_ram_header(rom, size)) { 336 } else if (has_ram_header(rom, size)) {
297 uint32_t ram_start = read_ram_header(info, rom); 337 uint32_t ram_start = read_ram_header(info, rom);
298 338
299 if (info->save_buffer) { 339 if (info->save_buffer) {
300 info->map_chunks = base_chunks + (ram_start >= rom_end ? 2 : 3); 340 info->map_chunks = base_chunks + (ram_start >= rom_end ? 2 : 3);
558 } 598 }
559 tern_node * bits_write = tern_find_node(node, "bits_write"); 599 tern_node * bits_write = tern_find_node(node, "bits_write");
560 if (bits_write) { 600 if (bits_write) {
561 tern_foreach(bits_write, eeprom_write_fun, eep_map); 601 tern_foreach(bits_write, eeprom_write_fun, eep_map);
562 } 602 }
563 printf("EEPROM address %X: sda read: %X, sda write: %X, scl: %X\n", start, eep_map->sda_read_bit, eep_map->sda_write_mask, eep_map->scl_mask); 603 debug_message("EEPROM address %X: sda read: %X, sda write: %X, scl: %X\n", start, eep_map->sda_read_bit, eep_map->sda_write_mask, eep_map->scl_mask);
564 state->info->num_eeprom++; 604 state->info->num_eeprom++;
565 } 605 }
566 606
567 void map_iter_fun(char *key, tern_val val, uint8_t valtype, void *data) 607 void map_iter_fun(char *key, tern_val val, uint8_t valtype, void *data)
568 { 608 {
769 map->start = 0xA13000; 809 map->start = 0xA13000;
770 map->end = 0xA13100; 810 map->end = 0xA13100;
771 map->mask = 0xFF; 811 map->mask = 0xFF;
772 map->write_16 = (write_16_fun)write_bank_reg_w; 812 map->write_16 = (write_16_fun)write_bank_reg_w;
773 map->write_8 = (write_8_fun)write_bank_reg_b; 813 map->write_8 = (write_8_fun)write_bank_reg_b;
814 #ifndef IS_LIB
774 } else if (!strcmp(dtype, "MENU")) { 815 } else if (!strcmp(dtype, "MENU")) {
775 //fake hardware for supporting menu 816 //fake hardware for supporting menu
776 map->buffer = NULL; 817 map->buffer = NULL;
777 map->mask = 0xFF; 818 map->mask = 0xFF;
778 map->write_16 = menu_write_w; 819 map->write_16 = menu_write_w;
779 map->read_16 = menu_read_w; 820 map->read_16 = menu_read_w;
821 #endif
780 } else if (!strcmp(dtype, "fixed")) { 822 } else if (!strcmp(dtype, "fixed")) {
781 uint16_t *value = malloc(2); 823 uint16_t *value = malloc(2);
782 map->buffer = value; 824 map->buffer = value;
783 map->mask = 0; 825 map->mask = 0;
784 map->flags = MMAP_READ; 826 map->flags = MMAP_READ;
845 break; 887 break;
846 } 888 }
847 product_id[i] = rom[GAME_ID_OFF + i]; 889 product_id[i] = rom[GAME_ID_OFF + i];
848 890
849 } 891 }
850 printf("Product ID: %s\n", product_id); 892 debug_message("Product ID: %s\n", product_id);
851 uint8_t raw_hash[20]; 893 uint8_t raw_hash[20];
852 sha1(vrom, rom_size, raw_hash); 894 sha1(vrom, rom_size, raw_hash);
853 uint8_t hex_hash[41]; 895 uint8_t hex_hash[41];
854 bin_to_hex(hex_hash, raw_hash, 20); 896 bin_to_hex(hex_hash, raw_hash, 20);
855 printf("SHA1: %s\n", hex_hash); 897 debug_message("SHA1: %s\n", hex_hash);
856 tern_node * entry = tern_find_node(rom_db, hex_hash); 898 tern_node * entry = tern_find_node(rom_db, hex_hash);
857 if (!entry) { 899 if (!entry) {
858 entry = tern_find_node(rom_db, product_id); 900 entry = tern_find_node(rom_db, product_id);
859 } 901 }
860 if (!entry) { 902 if (!entry) {
861 puts("Not found in ROM DB, examining header\n"); 903 debug_message("Not found in ROM DB, examining header\n\n");
862 if (xband_detect(rom, rom_size)) { 904 if (xband_detect(rom, rom_size)) {
863 return xband_configure_rom(rom_db, rom, rom_size, lock_on, lock_on_size, base_map, base_chunks); 905 return xband_configure_rom(rom_db, rom, rom_size, lock_on, lock_on_size, base_map, base_chunks);
864 } 906 }
865 if (realtec_detect(rom, rom_size)) { 907 if (realtec_detect(rom, rom_size)) {
866 return realtec_configure_rom(rom, rom_size, base_map, base_chunks); 908 return realtec_configure_rom(rom, rom_size, base_map, base_chunks);
869 } 911 }
870 rom_info info; 912 rom_info info;
871 info.mapper_type = MAPPER_NONE; 913 info.mapper_type = MAPPER_NONE;
872 info.name = tern_find_ptr(entry, "name"); 914 info.name = tern_find_ptr(entry, "name");
873 if (info.name) { 915 if (info.name) {
874 printf("Found name: %s\n", info.name); 916 debug_message("Found name: %s\n\n", info.name);
875 info.name = strdup(info.name); 917 info.name = strdup(info.name);
876 } else { 918 } else {
877 info.name = get_header_name(rom); 919 info.name = get_header_name(rom);
878 } 920 }
879 921