diff --git a/src/burn/drv/nes/d_nes.cpp b/src/burn/drv/nes/d_nes.cpp index aaf5585dd..712bba280 100644 --- a/src/burn/drv/nes/d_nes.cpp +++ b/src/burn/drv/nes/d_nes.cpp @@ -6547,6 +6547,25 @@ struct BurnDriver BurnDrvnes_spidemanc = { SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_WIDTH, SCREEN_HEIGHT }; +// Sugoro Quest: Quest of Dice Heros, The (Hack, Chinese) +// http://www.nesbbs.com/bbs/thread-12374-1-1.html +static struct BurnRomInfo nes_sugorquetscRomDesc[] = { + { "Sugoro Quest - Quest of Dice Heros, The T-Chs (2012)(Jiu Ban).nes", 524304, 0xf94149c0, BRF_ESS | BRF_PRG }, +}; + +STD_ROM_PICK(nes_sugorquetsc) +STD_ROM_FN(nes_sugorquetsc) + +struct BurnDriver BurnDrvnes_sugorquetsc = { + "nes_sugorquetsc", "nes_sugorque", NULL, NULL, "2012", + "Sugoro Quest: Quest of Dice Heros, The (Hack, Chinese)\0", NULL, "Jiu Ban", "NES / Famicom", + L"Sugoro Quest: Quest of Dice Heros, The (Hack, Chinese)\0\u8d4c\u795e: \u63b7\u9ab0\u6218\u58eb\0", NULL, NULL, NULL, + BDF_GAME_WORKING | BDF_CLONE | BDF_HACK, 1, HARDWARE_NES, GBF_RPG | GBF_BOARD, 0, + NESGetZipName, nes_sugorquetscRomInfo, nes_sugorquetscRomName, NULL, NULL, NULL, NULL, NESInputInfo, NESDIPInfo, + NESInit, NESExit, NESFrame, NESDraw, NESScan, &NESRecalc, 0x40, + SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_WIDTH, SCREEN_HEIGHT +}; + // Super Chinese II - Dragon Kid (Hack, Chinese v1.4) // https://www.nesbbs.com/bbs/thread-46648-1-1.html static struct BurnRomInfo nes_superchiiRomDesc[] = { @@ -49010,7 +49029,7 @@ struct BurnDriver BurnDrvnes_stuntkids = { SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_WIDTH, SCREEN_HEIGHT }; -// Sugoro Quest - Dice no Senshitachi (Japan) +// Sugoro Quest: Dice no Senshitachi (Japan) static struct BurnRomInfo nes_sugorquejRomDesc[] = { { "Sugoro Quest - Dice no Senshitachi (Japan)(1991)(Technos).nes", 262160, 0x0ac48932, BRF_ESS | BRF_PRG }, }; @@ -49020,18 +49039,18 @@ STD_ROM_FN(nes_sugorquej) struct BurnDriver BurnDrvnes_sugorquej = { "nes_sugorquej", "nes_sugorque", NULL, NULL, "1991", - "Sugoro Quest - Dice no Senshitachi (Japan)\0", NULL, "Technos Japan", "NES / Famicom", - NULL, NULL, NULL, NULL, + "Sugoro Quest: Dice no Senshitachi (Japan)\0", NULL, "Technos Japan", "NES / Famicom", + L"Sugoro Quest: Dice no Senshitachi (Japan)\0\u3059\u3054\u308d\u30af\u30a8\u30b9\u30c8 \u30c0\u30a4\u30b9\u306e\u6226\u58eb\u305f\u3061\0", NULL, NULL, NULL, BDF_GAME_WORKING | BDF_CLONE, 1, HARDWARE_NES, GBF_RPG | GBF_BOARD, 0, NESGetZipName, nes_sugorquejRomInfo, nes_sugorquejRomName, NULL, NULL, NULL, NULL, NESInputInfo, NESDIPInfo, NESInit, NESExit, NESFrame, NESDraw, NESScan, &NESRecalc, 0x40, SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_WIDTH, SCREEN_HEIGHT }; -// Sugoro Quest - Dice no Senshitachi (Hack, English) +// Sugoro Quest: Quest of Dice Heros, The (Hack, English) // https://www.romhacking.net/translations/218/ static struct BurnRomInfo nes_sugorqueRomDesc[] = { - { "Sugoro Quest - Dice no Senshitachi T-Eng (2007)(AlanMidas).nes", 262160, 0xd2cdeb7b, BRF_ESS | BRF_PRG }, + { "Sugoro Quest - Quest of Dice Heros, The T-Eng (2007)(AlanMidas).nes", 262160, 0xd2cdeb7b, BRF_ESS | BRF_PRG }, }; STD_ROM_PICK(nes_sugorque) @@ -49039,7 +49058,7 @@ STD_ROM_FN(nes_sugorque) struct BurnDriver BurnDrvnes_sugorque = { "nes_sugorque", NULL, NULL, NULL, "2007", - "Sugoro Quest - Dice no Senshitachi (Hack, English)\0", NULL, "AlanMidas", "NES / Famicom", + "Sugoro Quest: Quest of Dice Heros, The (Hack, English)\0", NULL, "AlanMidas", "NES / Famicom", NULL, NULL, NULL, NULL, BDF_GAME_WORKING | BDF_HACK, 1, HARDWARE_NES, GBF_RPG | GBF_BOARD, 0, NESGetZipName, nes_sugorqueRomInfo, nes_sugorqueRomName, NULL, NULL, NULL, NULL, NESInputInfo, NESDIPInfo, diff --git a/src/burn/drv/nes/nes.cpp b/src/burn/drv/nes/nes.cpp index baaacd966..f15b07827 100644 --- a/src/burn/drv/nes/nes.cpp +++ b/src/burn/drv/nes/nes.cpp @@ -3271,6 +3271,52 @@ static void mapper119_map() set_mirroring((mapper4_mirror) ? VERTICAL : HORIZONTAL); } +static void mapper191_chrmap(INT32 slot, INT32 bank) +{ + if (bank & 0x80) { // bit7 == 1 + UINT8 ram_bank = bank & 0x01; + mapper_map_chr_ramrom(1, slot, ram_bank, MEM_RAM); + } else { + mapper_map_chr_ramrom(1, slot, bank, MEM_ROM); + } +} + +static void mapper191_map() +{ + mapper_map_prg(8, 1, mapper_regs[7]); + if (~mapper4_banksel & 0x40) { + mapper_map_prg(8, 0, mapper_regs[6]); + mapper_map_prg(8, 2, -2); + } else { + mapper_map_prg(8, 0, -2); + mapper_map_prg(8, 2, mapper_regs[6]); + } + + if (~mapper4_banksel & 0x80) { + mapper191_chrmap(0, mapper_regs[0] & 0xfe); + mapper191_chrmap(1, mapper_regs[0] | 0x01); + mapper191_chrmap(2, mapper_regs[1] & 0xfe); + mapper191_chrmap(3, mapper_regs[1] | 0x01); + mapper191_chrmap(4, mapper_regs[2]); + mapper191_chrmap(5, mapper_regs[3]); + mapper191_chrmap(6, mapper_regs[4]); + mapper191_chrmap(7, mapper_regs[5]); + } else { + mapper191_chrmap(0, mapper_regs[2]); + mapper191_chrmap(1, mapper_regs[3]); + mapper191_chrmap(2, mapper_regs[4]); + mapper191_chrmap(3, mapper_regs[5]); + mapper191_chrmap(4, mapper_regs[0] & 0xfe); + mapper191_chrmap(5, mapper_regs[0] | 0x01); + mapper191_chrmap(6, mapper_regs[1] & 0xfe); + mapper191_chrmap(7, mapper_regs[1] | 0x01); + } + + if (Cart.Mirroring != 4) { + set_mirroring(mapper4_mirror ? VERTICAL : HORIZONTAL); + } +} + static void mapper165_ppu_clock(UINT16 address) { if (mapper165_update) { @@ -9655,6 +9701,29 @@ static INT32 mapper_init(INT32 mappernum) break; } + case 191: { // there is also an additional 2k of CHR-RAM which is selectable. Bit 7 of each CHR reg selects RAM or ROM (1=RAM, 0=ROM) + mapper_write = mapper04_write; + mapper_map = mapper191_map; + mapper_scanline = mapper04_scanline; + mapper4_mirror = Cart.Mirroring; + + mapper_regs[0] = 0; + mapper_regs[1] = 2; + mapper_regs[2] = 4; + mapper_regs[3] = 5; + mapper_regs[4] = 6; + mapper_regs[5] = 7; + mapper_regs[6] = 0; + mapper_regs[7] = 1; + + mapper_set_chrtype(MEM_RAM); + mapper_map_prg(32, 0, 0); + mapper_map_prg(8, 3, -1); + mapper_map(); + retval = 0; + break; + } + case 165: { // mmc3-derivative w/mmc4-style char ram(bank0)+rom(others) mapper_write = mapper04_write; mapper_map = mapper165_map;