comparison genesis.c @ 1326:071e761bcdcf

Fix a deficiency in the way types were handled in my ternary tree. Fixes in which some paths that were constructed from a template with variables would sometimes get an extra garbage character thrown in
author Michael Pavone <pavone@retrodev.com>
date Fri, 21 Apr 2017 23:35:32 -0700
parents bfdd450e7dea
children 69c25e1188e5
comparison
equal deleted inserted replaced
1325:58bfbed6cdb5 1326:071e761bcdcf
820 } 820 }
821 821
822 void set_region(genesis_context *gen, rom_info *info, uint8_t region) 822 void set_region(genesis_context *gen, rom_info *info, uint8_t region)
823 { 823 {
824 if (!region) { 824 if (!region) {
825 char * def_region = tern_find_path_default(config, "system\0default_region\0", (tern_val){.ptrval = "U"}).ptrval; 825 char * def_region = tern_find_path_default(config, "system\0default_region\0", (tern_val){.ptrval = "U"}, TVAL_PTR).ptrval;
826 if (!info->regions || (info->regions & translate_region_char(toupper(*def_region)))) { 826 if (!info->regions || (info->regions & translate_region_char(toupper(*def_region)))) {
827 region = translate_region_char(toupper(*def_region)); 827 region = translate_region_char(toupper(*def_region));
828 } else { 828 } else {
829 region = info->regions; 829 region = info->regions;
830 } 830 }
999 999
1000 gen->vdp = malloc(sizeof(vdp_context)); 1000 gen->vdp = malloc(sizeof(vdp_context));
1001 init_vdp_context(gen->vdp, gen->version_reg & 0x40); 1001 init_vdp_context(gen->vdp, gen->version_reg & 0x40);
1002 gen->vdp->system = &gen->header; 1002 gen->vdp->system = &gen->header;
1003 gen->frame_end = vdp_cycles_to_frame_end(gen->vdp); 1003 gen->frame_end = vdp_cycles_to_frame_end(gen->vdp);
1004 char * config_cycles = tern_find_path(config, "clocks\0max_cycles\0").ptrval; 1004 char * config_cycles = tern_find_path(config, "clocks\0max_cycles\0", TVAL_PTR).ptrval;
1005 gen->max_cycles = config_cycles ? atoi(config_cycles) : DEFAULT_SYNC_INTERVAL; 1005 gen->max_cycles = config_cycles ? atoi(config_cycles) : DEFAULT_SYNC_INTERVAL;
1006 1006
1007 char * lowpass_cutoff_str = tern_find_path(config, "audio\0lowpass_cutoff\0").ptrval; 1007 char * lowpass_cutoff_str = tern_find_path(config, "audio\0lowpass_cutoff\0", TVAL_PTR).ptrval;
1008 uint32_t lowpass_cutoff = lowpass_cutoff_str ? atoi(lowpass_cutoff_str) : DEFAULT_LOWPASS_CUTOFF; 1008 uint32_t lowpass_cutoff = lowpass_cutoff_str ? atoi(lowpass_cutoff_str) : DEFAULT_LOWPASS_CUTOFF;
1009 1009
1010 gen->ym = malloc(sizeof(ym2612_context)); 1010 gen->ym = malloc(sizeof(ym2612_context));
1011 ym_init(gen->ym, render_sample_rate(), gen->master_clock, MCLKS_PER_YM, render_audio_buffer(), system_opts, lowpass_cutoff); 1011 ym_init(gen->ym, render_sample_rate(), gen->master_clock, MCLKS_PER_YM, render_audio_buffer(), system_opts, lowpass_cutoff);
1012 1012
1030 gen->z80->mem_pointers[1] = gen->z80->mem_pointers[2] = (uint8_t *)main_rom; 1030 gen->z80->mem_pointers[1] = gen->z80->mem_pointers[2] = (uint8_t *)main_rom;
1031 1031
1032 gen->cart = main_rom; 1032 gen->cart = main_rom;
1033 gen->lock_on = lock_on; 1033 gen->lock_on = lock_on;
1034 gen->work_ram = calloc(2, RAM_WORDS); 1034 gen->work_ram = calloc(2, RAM_WORDS);
1035 if (!strcmp("random", tern_find_path_default(config, "system\0ram_init\0", (tern_val){.ptrval = "zero"}).ptrval)) 1035 if (!strcmp("random", tern_find_path_default(config, "system\0ram_init\0", (tern_val){.ptrval = "zero"}, TVAL_PTR).ptrval))
1036 { 1036 {
1037 srand(time(NULL)); 1037 srand(time(NULL));
1038 for (int i = 0; i < RAM_WORDS; i++) 1038 for (int i = 0; i < RAM_WORDS; i++)
1039 { 1039 {
1040 gen->work_ram[i] = rand(); 1040 gen->work_ram[i] = rand();
1122 byteswap_rom(rom_size, rom); 1122 byteswap_rom(rom_size, rom);
1123 if (lock_on) { 1123 if (lock_on) {
1124 byteswap_rom(lock_on_size, lock_on); 1124 byteswap_rom(lock_on_size, lock_on);
1125 } 1125 }
1126 #endif 1126 #endif
1127 char *m68k_divider = tern_find_path(config, "clocks\0m68k_divider\0").ptrval; 1127 char *m68k_divider = tern_find_path(config, "clocks\0m68k_divider\0", TVAL_PTR).ptrval;
1128 if (!m68k_divider) { 1128 if (!m68k_divider) {
1129 m68k_divider = "7"; 1129 m68k_divider = "7";
1130 } 1130 }
1131 MCLKS_PER_68K = atoi(m68k_divider); 1131 MCLKS_PER_68K = atoi(m68k_divider);
1132 if (!MCLKS_PER_68K) { 1132 if (!MCLKS_PER_68K) {