comparison genesis.c @ 1204:d7be5b6e0a8d

Added config file option to specify that RAM should be randomly initialized. Moved default_region inside a new "system" parent node in config
author Michael Pavone <pavone@retrodev.com>
date Thu, 26 Jan 2017 20:07:17 -0800
parents 448ce87b87fc
children 95f5253e75c7
comparison
equal deleted inserted replaced
1203:4cbb6efb9120 1204:d7be5b6e0a8d
5 */ 5 */
6 #include "genesis.h" 6 #include "genesis.h"
7 #include "blastem.h" 7 #include "blastem.h"
8 #include <stdlib.h> 8 #include <stdlib.h>
9 #include <ctype.h> 9 #include <ctype.h>
10 #include <time.h>
10 #include "render.h" 11 #include "render.h"
11 #include "gst.h" 12 #include "gst.h"
12 #include "util.h" 13 #include "util.h"
13 #include "debug.h" 14 #include "debug.h"
14 #include "gdb_remote.h" 15 #include "gdb_remote.h"
764 } 765 }
765 766
766 void set_region(genesis_context *gen, rom_info *info, uint8_t region) 767 void set_region(genesis_context *gen, rom_info *info, uint8_t region)
767 { 768 {
768 if (!region) { 769 if (!region) {
769 char * def_region = tern_find_ptr(config, "default_region"); 770 char * def_region = tern_find_path_default(config, "system\0default_region\0", (tern_val){.ptrval = "U"}).ptrval;
770 if (def_region && (!info->regions || (info->regions & translate_region_char(toupper(*def_region))))) { 771 if (!info->regions || (info->regions & translate_region_char(toupper(*def_region)))) {
771 region = translate_region_char(toupper(*def_region)); 772 region = translate_region_char(toupper(*def_region));
772 } else { 773 } else {
773 region = info->regions; 774 region = info->regions;
774 } 775 }
775 } 776 }
951 gen->z80->mem_pointers[1] = gen->z80->mem_pointers[2] = (uint8_t *)main_rom; 952 gen->z80->mem_pointers[1] = gen->z80->mem_pointers[2] = (uint8_t *)main_rom;
952 953
953 gen->cart = main_rom; 954 gen->cart = main_rom;
954 gen->lock_on = lock_on; 955 gen->lock_on = lock_on;
955 gen->work_ram = calloc(2, RAM_WORDS); 956 gen->work_ram = calloc(2, RAM_WORDS);
957 if (!strcmp("random", tern_find_path_default(config, "system\0ram_init\0", (tern_val){.ptrval = "zero"}).ptrval))
958 {
959 srand(time(NULL));
960 for (int i = 0; i < RAM_WORDS; i++)
961 {
962 gen->work_ram[i] = rand();
963 }
964 for (int i = 0; i < Z80_RAM_BYTES; i++)
965 {
966 gen->zram[i] = rand();
967 }
968 for (int i = 0; i < VRAM_SIZE; i++)
969 {
970 write_vram_byte(gen->vdp, i, rand());
971 }
972 for (int i = 0; i < CRAM_SIZE; i++)
973 {
974 write_cram(gen->vdp, i, rand());
975 }
976 for (int i = 0; i < VSRAM_SIZE; i++)
977 {
978 gen->vdp->vsram[i] = rand();
979 }
980 }
956 setup_io_devices(config, rom, &gen->io); 981 setup_io_devices(config, rom, &gen->io);
957 982
958 gen->save_type = rom->save_type; 983 gen->save_type = rom->save_type;
959 gen->save_type = rom->save_type; 984 gen->save_type = rom->save_type;
960 if (gen->save_type != SAVE_NONE) { 985 if (gen->save_type != SAVE_NONE) {