nes: add mapper 191

d_nes: add Sugoro Quest: Quest of Dice Heros, The (Hack, Chinese)
This commit is contained in:
taoenwen 2025-07-26 21:20:02 +08:00
parent e1003acf41
commit 224a9e4fef
2 changed files with 94 additions and 6 deletions

View File

@ -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,

View File

@ -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;