Mercurial > repos > blastem
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; |