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