Mercurial > repos > blastem
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) { |