# HG changeset patch # User Michael Pavone # Date 1653408672 25200 # Node ID 2ed402b4c1fbaa2f50e84dd90c74bed2702e5a36 # Parent bdd83b47d78af722e75f89108724e4c6988551cb# Parent 6f58af5bd6fabacb69cf0f10236d4430f9a58a72 Merge diff -r bdd83b47d78a -r 2ed402b4c1fb lc8951.c --- a/lc8951.c Tue May 24 09:10:54 2022 -0700 +++ b/lc8951.c Tue May 24 09:11:12 2022 -0700 @@ -249,13 +249,13 @@ && context->regs[HEAD3] < 3 && !(context->regs[STAT0] & (BIT_NOSYNC|BIT_ILSYNC)) ) { - if (context->ctrl0 & (BIT_ORQ|BIT_PRQ)) { + if (context->ctrl0 & (BIT_WRRQ|BIT_ORQ|BIT_PRQ)) { context->regs[STAT0] |= BIT_CRCOK; } context->regs[STAT1] = 0; - context->regs[STAT2] = 0x90; + context->regs[STAT2] = 0x10; } else { - if (context->ctrl0 & (BIT_ORQ|BIT_PRQ)) { + if (context->ctrl0 & (BIT_WRRQ|BIT_ORQ|BIT_PRQ)) { context->regs[STAT0] |= BIT_UCEBLK; } context->regs[STAT1] = 0xFF; diff -r bdd83b47d78a -r 2ed402b4c1fb rom.db --- a/rom.db Tue May 24 09:10:54 2022 -0700 +++ b/rom.db Tue May 24 09:11:12 2022 -0700 @@ -1435,7 +1435,6 @@ 200000 { device SRAM last 2FFFFF - mask FFFF } 300000 { device ROM @@ -1444,3 +1443,20 @@ } } } +T-172036 { + name NHL '96 + SRAM { + size 8192 + bus odd + } + map { + 0 { + device ROM + last 1FFFFF + } + 200000 { + device SRAM + last 3FFFFF + } + } +} diff -r bdd83b47d78a -r 2ed402b4c1fb romdb.c --- a/romdb.c Tue May 24 09:10:54 2022 -0700 +++ b/romdb.c Tue May 24 09:11:12 2022 -0700 @@ -776,30 +776,35 @@ process_sram_def(key, state); map->buffer = state->info->save_buffer + offset; map->flags = MMAP_READ | MMAP_WRITE; + uint32_t save_size_mask = state->info->save_size; if (state->info->save_type == RAM_FLAG_ODD) { map->flags |= MMAP_ONLY_ODD; + save_size_mask *= 2; } else if(state->info->save_type == RAM_FLAG_EVEN) { map->flags |= MMAP_ONLY_EVEN; + save_size_mask *= 2; } else { map->flags |= MMAP_CODE; } - map->mask = calc_mask(state->info->save_size, start, end); + map->mask = calc_mask(save_size_mask, start, end); } else if (!strcmp(dtype, "RAM")) { uint32_t size = strtol(tern_find_ptr_default(node, "size", "0"), NULL, 16); if (!size || size > map->end - map->start) { size = map->end - map->start; } map->buffer = calloc(size, 1); - map->mask = calc_mask(size, start, end); map->flags = MMAP_READ | MMAP_WRITE; char *bus = tern_find_ptr_default(node, "bus", "both"); if (!strcmp(bus, "odd")) { map->flags |= MMAP_ONLY_ODD; + size *= 2; } else if (!strcmp(bus, "even")) { map->flags |= MMAP_ONLY_EVEN; + size *= 2; } else { map->flags |= MMAP_CODE; } + map->mask = calc_mask(size, start, end); } else if (!strcmp(dtype, "NOR")) { process_nor_def(key, state);