diff --git a/src/burn/drivers/sega/d_sys1.cpp b/src/burn/drivers/sega/d_sys1.cpp index da16be877..ba35ce603 100644 --- a/src/burn/drivers/sega/d_sys1.cpp +++ b/src/burn/drivers/sega/d_sys1.cpp @@ -31,14 +31,14 @@ static UINT8 *System1deRam = NULL; static UINT8 *System1efRam = NULL; static UINT8 *System1f4Ram = NULL; static UINT8 *System1fcRam = NULL; -static UINT32 *System1Palette = NULL; +static UINT32 *System1Palette = NULL; static UINT8 *System1Tiles = NULL; static UINT8 *System1Sprites = NULL; static UINT8 *System1TempRom = NULL; static UINT8 *SpriteOnScreenMap = NULL; static UINT8 *System1Fetch1 = NULL; static UINT8 *System1MC8123Key = NULL; -static UINT32 *System1TilesPenUsage = NULL; +static UINT32 *System1TilesPenUsage = NULL; static UINT8 System1ScrollX[2]; static UINT8 System1ScrollY; @@ -554,6 +554,43 @@ static struct BurnDIPInfo GardiaDIPList[]= STDDIPINFO(Gardia) +static struct BurnDIPInfo HvymetalDIPList[]= +{ + // Default Values + {0x13, 0xff, 0xff, 0xff, NULL }, + {0x14, 0xff, 0xff, 0xfd, NULL }, + + // Dip 1 + SYSTEM1_COINAGE(0x13) + + // Dip 2 + {0 , 0xfe, 0 , 2 , "Demo Sounds" }, + {0x14, 0x01, 0x02, 0x02, "Off" }, + {0x14, 0x01, 0x02, 0x00, "On" }, + + {0 , 0xfe, 0 , 4 , "Lives" }, + {0x14, 0x01, 0x0c, 0x0c, "3" }, + {0x14, 0x01, 0x0c, 0x08, "4" }, + {0x14, 0x01, 0x0c, 0x04, "5" }, + {0x14, 0x01, 0x0c, 0x00, "Infinite" }, + + {0 , 0xfe, 0 , 4 , "Bonus Life" }, + {0x14, 0x01, 0x30, 0x30, "50k, 100k" }, + {0x14, 0x01, 0x30, 0x20, "60k, 120k" }, + {0x14, 0x01, 0x30, 0x10, "70k, 150k" }, + {0x14, 0x01, 0x30, 0x00, "100k" }, + + {0 , 0xfe, 0 , 2 , "Difficulty" }, + {0x14, 0x01, 0x40, 0x40, "Easy" }, + {0x14, 0x01, 0x40, 0x00, "Hard" }, + + {0 , 0xfe, 0 , 2 , "Allow Continue" }, + {0x14, 0x01, 0x80, 0x80, "Off" }, + {0x14, 0x01, 0x80, 0x00, "On" }, +}; + +STDDIPINFO(Hvymetal) + static struct BurnDIPInfo ImsorryDIPList[]= { // Default Values @@ -1454,9 +1491,9 @@ static struct BurnRomInfo BrainRomDesc[] = { { "brain.110", 0x008000, 0xa1b847ec, BRF_GRA }, // 8 Sprites { "brain.4", 0x008000, 0xfd2ea53b, BRF_GRA }, // 9 Sprites - { "bprom.3", 0x000100, 0x8eee0f72, BRF_OPT }, // 10 Red PROM - { "bprom.2", 0x000100, 0x3e7babd7, BRF_OPT }, // 11 Green PROM - { "bprom.1", 0x000100, 0x371c44a6, BRF_OPT }, // 12 Blue PROM + { "bprom.3", 0x000100, 0x8eee0f72, BRF_GRA }, // 10 Red PROM + { "bprom.2", 0x000100, 0x3e7babd7, BRF_GRA }, // 11 Green PROM + { "bprom.1", 0x000100, 0x371c44a6, BRF_GRA }, // 12 Blue PROM { "pr5317.76", 0x000100, 0x648350b8, BRF_OPT }, // 13 Timing PROM }; @@ -1620,9 +1657,9 @@ static struct BurnRomInfo GardiaRomDesc[] = { { "epr10236.04", 0x008000, 0xb35ab227, BRF_GRA }, // 9 Sprites { "epr10235.5", 0x008000, 0x006a3151, BRF_GRA }, // 10 Sprites - { "bprom.3", 0x000100, 0x8eee0f72, BRF_OPT }, // 11 Red PROM - { "bprom.2", 0x000100, 0x3e7babd7, BRF_OPT }, // 12 Green PROM - { "bprom.1", 0x000100, 0x371c44a6, BRF_OPT }, // 13 Blue PROM + { "bprom.3", 0x000100, 0x8eee0f72, BRF_GRA }, // 11 Red PROM + { "bprom.2", 0x000100, 0x3e7babd7, BRF_GRA }, // 12 Green PROM + { "bprom.1", 0x000100, 0x371c44a6, BRF_GRA }, // 13 Blue PROM { "pr5317.4", 0x000100, 0x648350b8, BRF_OPT }, // 14 Timing PROM }; @@ -1645,15 +1682,44 @@ static struct BurnRomInfo GardiabRomDesc[] = { { "epr10236.04", 0x008000, 0xb35ab227, BRF_GRA }, // 9 Sprites { "epr10235.5", 0x008000, 0x006a3151, BRF_GRA }, // 10 Sprites - { "bprom.3", 0x000100, 0x8eee0f72, BRF_OPT }, // 11 Red PROM - { "bprom.2", 0x000100, 0x3e7babd7, BRF_OPT }, // 12 Green PROM - { "bprom.1", 0x000100, 0x371c44a6, BRF_OPT }, // 13 Blue PROM + { "bprom.3", 0x000100, 0x8eee0f72, BRF_GRA }, // 11 Red PROM + { "bprom.2", 0x000100, 0x3e7babd7, BRF_GRA }, // 12 Green PROM + { "bprom.1", 0x000100, 0x371c44a6, BRF_GRA }, // 13 Blue PROM { "pr5317.4", 0x000100, 0x648350b8, BRF_OPT }, // 14 Timing PROM }; STD_ROM_PICK(Gardiab) STD_ROM_FN(Gardiab) +static struct BurnRomInfo HvymetalRomDesc[] = { + { "epra6790.1", 0x008000, 0x59195bb9, BRF_ESS | BRF_PRG }, // 0 Z80 #1 Program Code + { "epra6789.2", 0x008000, 0x83e1d18a, BRF_ESS | BRF_PRG }, // 1 Z80 #1 Program Code + { "epra6788.3", 0x008000, 0x6ecefd57, BRF_ESS | BRF_PRG }, // 2 Z80 #1 Program Code + + { "epr6787.120", 0x008000, 0xb64ac7f0, BRF_ESS | BRF_PRG }, // 3 Z80 #2 Program Code + + { "epr6795.62", 0x004000, 0x58a3d038, BRF_GRA }, // 4 Tiles + { "epr6796.61", 0x004000, 0xd8b08a55, BRF_GRA }, // 5 Tiles + { "epr6793.64", 0x004000, 0x487407c2, BRF_GRA }, // 6 Tiles + { "epr6794.63", 0x004000, 0x89eb3793, BRF_GRA }, // 7 Tiles + { "epr6791.66", 0x004000, 0xa7dcd042, BRF_GRA }, // 8 Tiles + { "epr6792.65", 0x004000, 0xd0be5e33, BRF_GRA }, // 9 Tiles + + { "epr6778.117", 0x008000, 0x0af61aee, BRF_GRA }, // 10 Sprites + { "epr6777.110", 0x008000, 0x91d7a197, BRF_GRA }, // 11 Sprites + { "epr6780.4", 0x008000, 0x55b31df5, BRF_GRA }, // 12 Sprites + { "epr6779.5", 0x008000, 0xe03a2b28, BRF_GRA }, // 13 Sprites + + { "pr7036.3", 0x000100, 0x146f16fb, BRF_GRA }, // 14 Red PROM + { "pr7035.2", 0x000100, 0x50b201ed, BRF_GRA }, // 15 Green PROM + { "pr7034.1", 0x000100, 0xdfb5f139, BRF_GRA }, // 16 Blue PROM + + { "pr5317p.4", 0x000100, 0x648350b8, BRF_OPT }, // 17 Timing PROM +}; + +STD_ROM_PICK(Hvymetal) +STD_ROM_FN(Hvymetal) + static struct BurnRomInfo ImsorryRomDesc[] = { { "epr-6676.116", 0x004000, 0xeb087d7f, BRF_ESS | BRF_PRG }, // 0 Z80 #1 Program Code { "epr-6677.109", 0x004000, 0xbd244bee, BRF_ESS | BRF_PRG }, // 1 Z80 #1 Program Code @@ -1840,9 +1906,9 @@ static struct BurnRomInfo NobRomDesc[] = { { "dm05.5h", 0x008000, 0x7fbba01d, BRF_GRA }, // 9 Sprites { "dm07.5l", 0x008000, 0x85e7a29f, BRF_GRA }, // 10 Sprites - { "nobo_pr.16d", 0x000100, 0x95010ac2, BRF_OPT }, // 11 Red PROM - { "nobo_pr.15d", 0x000100, 0xc55aac0c, BRF_OPT }, // 12 Green PROM - { "dm-12.ic3", 0x000100, 0xde394cee, BRF_OPT }, // 13 Blue PROM + { "nobo_pr.16d", 0x000100, 0x95010ac2, BRF_GRA }, // 11 Red PROM + { "nobo_pr.15d", 0x000100, 0xc55aac0c, BRF_GRA }, // 12 Green PROM + { "dm-12.ic3", 0x000100, 0xde394cee, BRF_GRA }, // 13 Blue PROM { "dc-11.6a", 0x000100, 0x648350b8, BRF_OPT }, // 14 Timing PROM { "dm.bin", 0x001000, 0x6fde9dcb, BRF_PRG | BRF_OPT }, // 15 MCU @@ -1867,9 +1933,9 @@ static struct BurnRomInfo NobbRomDesc[] = { { "nobo-p.bin", 0x008000, 0x7fbba01d, BRF_GRA }, // 9 Sprites { "nobo-n.bin", 0x008000, 0x85e7a29f, BRF_GRA }, // 10 Sprites - { "nobo_pr.16d", 0x000100, 0x95010ac2, BRF_OPT }, // 11 Red PROM - { "nobo_pr.15d", 0x000100, 0xc55aac0c, BRF_OPT }, // 12 Green PROM - { "nobo_pr.14d", 0x000100, 0xde394cee, BRF_OPT }, // 13 Blue PROM + { "nobo_pr.16d", 0x000100, 0x95010ac2, BRF_GRA }, // 11 Red PROM + { "nobo_pr.15d", 0x000100, 0xc55aac0c, BRF_GRA }, // 12 Green PROM + { "nobo_pr.14d", 0x000100, 0xde394cee, BRF_GRA }, // 13 Blue PROM { "nobo_pr.13a", 0x000100, 0x648350b8, BRF_OPT }, // 14 Timing PROM }; @@ -2224,8 +2290,8 @@ static struct BurnRomInfo NprincesbRomDesc[] = { { "epr-6549.05", 0x004000, 0xd2057668, BRF_GRA }, // 13 Sprites { "pr-5317.76", 0x000100, 0x648350b8, BRF_OPT }, // 14 Timing PROM - { "nprinces.129", 0x000100, 0xae765f62, BRF_OPT }, // 15 Decryption Table - { "nprinces.123", 0x000020, 0xed5146e9, BRF_OPT }, // 15 Decryption Table + { "nprinces.129", 0x000100, 0xae765f62, BRF_PRG }, // 15 Decryption Table + { "nprinces.123", 0x000020, 0xed5146e9, BRF_PRG }, // 15 Decryption Table }; STD_ROM_PICK(Nprincesb) @@ -3529,11 +3595,7 @@ static void System1BankRom() { INT32 BankAddress = (System1RomBank * 0x4000) + 0x10000; ZetMapArea(0x8000, 0xbfff, 0, System1Rom1 + BankAddress); - if (DecodeFunction) { - ZetMapArea(0x8000, 0xbfff, 2, System1Fetch1 + BankAddress, System1Rom1 + BankAddress); - } else { - ZetMapArea(0x8000, 0xbfff, 2, System1Rom1 + BankAddress); - } + ZetMapArea(0x8000, 0xbfff, 2, System1Rom1 + BankAddress); } UINT8 __fastcall System1Z801PortRead(UINT16 a) @@ -4182,6 +4244,26 @@ static INT32 GardiabInit() return nRet; } +static INT32 HvymetalInit() +{ + INT32 nRet; + + System1ColourProms = 1; + System1BankedRom = 1; + + DecodeFunction = hvymetal_decode; + + nRet = System1Init(3, 0x8000, 1, 0x8000, 6, 0x4000, 4, 0x8000, 0); + + ZetOpen(0); + ZetSetOutHandler(BrainZ801PortWrite); + ZetClose(); + + System1DoReset(); + + return nRet; +} + static INT32 ImsorryInit() { DecodeFunction = imsorry_decode; @@ -4988,6 +5070,16 @@ struct BurnDriverD BurnDrvGardiab = { NULL, 0x600, 224, 256, 3, 4 }; +struct BurnDriver BurnDrvHvymetal = { + "hvymetal", NULL, NULL, NULL, "1985", + "Heavy Metal (315-5135)\0", NULL, "Sega", "System 1", + NULL, NULL, NULL, NULL, + BDF_GAME_WORKING, 2, HARDWARE_SEGA_SYSTEM1, GBF_VERSHOOT, 0, + NULL, HvymetalRomInfo, HvymetalRomName, NULL, NULL, MyheroInputInfo, HvymetalDIPInfo, + HvymetalInit, System1Exit, System1Frame, NULL, System1Scan, + NULL, 0x600, 256, 224, 4, 3 +}; + struct BurnDriver BurnDrvImsorry = { "imsorry", NULL, NULL, NULL, "1985", "I'm Sorry (315-5110, US)\0", NULL, "Coreland / Sega", "System 1",