comparison romdb.c @ 2154:2b7847bed4bb

Fix memory map mask calculation for manually specified cart SRAM/RAM
author Michael Pavone <pavone@retrodev.com>
date Thu, 07 Apr 2022 00:49:19 -0700
parents a418fa599b2e
children 2ed402b4c1fb
comparison
equal deleted inserted replaced
2153:8a30e44e8223 2154:2b7847bed4bb
778 map->mask = 0xFFFFFF; 778 map->mask = 0xFFFFFF;
779 } else if (!strcmp(dtype, "SRAM")) { 779 } else if (!strcmp(dtype, "SRAM")) {
780 process_sram_def(key, state); 780 process_sram_def(key, state);
781 map->buffer = state->info->save_buffer + offset; 781 map->buffer = state->info->save_buffer + offset;
782 map->flags = MMAP_READ | MMAP_WRITE; 782 map->flags = MMAP_READ | MMAP_WRITE;
783 uint32_t save_size_mask = state->info->save_size;
783 if (state->info->save_type == RAM_FLAG_ODD) { 784 if (state->info->save_type == RAM_FLAG_ODD) {
784 map->flags |= MMAP_ONLY_ODD; 785 map->flags |= MMAP_ONLY_ODD;
786 save_size_mask *= 2;
785 } else if(state->info->save_type == RAM_FLAG_EVEN) { 787 } else if(state->info->save_type == RAM_FLAG_EVEN) {
786 map->flags |= MMAP_ONLY_EVEN; 788 map->flags |= MMAP_ONLY_EVEN;
789 save_size_mask *= 2;
787 } else { 790 } else {
788 map->flags |= MMAP_CODE; 791 map->flags |= MMAP_CODE;
789 } 792 }
790 map->mask = calc_mask(state->info->save_size, start, end); 793 map->mask = calc_mask(save_size_mask, start, end);
791 } else if (!strcmp(dtype, "RAM")) { 794 } else if (!strcmp(dtype, "RAM")) {
792 uint32_t size = strtol(tern_find_ptr_default(node, "size", "0"), NULL, 16); 795 uint32_t size = strtol(tern_find_ptr_default(node, "size", "0"), NULL, 16);
793 if (!size || size > map->end - map->start) { 796 if (!size || size > map->end - map->start) {
794 size = map->end - map->start; 797 size = map->end - map->start;
795 } 798 }
796 map->buffer = calloc(size, 1); 799 map->buffer = calloc(size, 1);
797 map->mask = calc_mask(size, start, end);
798 map->flags = MMAP_READ | MMAP_WRITE; 800 map->flags = MMAP_READ | MMAP_WRITE;
799 char *bus = tern_find_ptr_default(node, "bus", "both"); 801 char *bus = tern_find_ptr_default(node, "bus", "both");
800 if (!strcmp(bus, "odd")) { 802 if (!strcmp(bus, "odd")) {
801 map->flags |= MMAP_ONLY_ODD; 803 map->flags |= MMAP_ONLY_ODD;
804 size *= 2;
802 } else if (!strcmp(bus, "even")) { 805 } else if (!strcmp(bus, "even")) {
803 map->flags |= MMAP_ONLY_EVEN; 806 map->flags |= MMAP_ONLY_EVEN;
807 size *= 2;
804 } else { 808 } else {
805 map->flags |= MMAP_CODE; 809 map->flags |= MMAP_CODE;
806 } 810 }
811 map->mask = calc_mask(size, start, end);
807 } else if (!strcmp(dtype, "NOR")) { 812 } else if (!strcmp(dtype, "NOR")) {
808 process_nor_def(key, state); 813 process_nor_def(key, state);
809 814
810 map->write_16 = nor_flash_write_w; 815 map->write_16 = nor_flash_write_w;
811 map->write_8 = nor_flash_write_b; 816 map->write_8 = nor_flash_write_b;