diff --git a/src/mame/pacman/pacman.cpp b/src/mame/pacman/pacman.cpp index 6d834fec471f6..284502230079c 100644 --- a/src/mame/pacman/pacman.cpp +++ b/src/mame/pacman/pacman.cpp @@ -3753,6 +3753,18 @@ void pacman_state::woodpek(machine_config &config) } +void pacman_state::woodpek_rbg(machine_config &config) +{ + pacman(config); + + // Basic machine hardware + m_maincpu->set_addrmap(AS_PROGRAM, &pacman_state::woodpek_map); + + // Video hardware + m_palette->set_init(FUNC(pacman_state::pacman_rbg_palette)); +} + + void clubpacm_state::clubpacm(machine_config &config) { mspacman(config); @@ -8400,18 +8412,18 @@ GAME( 1981, mspackpls, mspacman, woodpek, mspacman, pacman_state, init_mspack // These bootlegs have MADE IN GREECE clearly visible and etched into the PCBs. They were very common in Spain with several operators having their own versions. // Based on the PCBs and copyright dates shown they were produced late 80s / early 90s. Usually they run a version of Ms. Pacman, but were sometimes converted back to regular Pac-Man -GAME( 198?, mspacmanbg, mspacman, woodpek, mspacman, pacman_state, empty_init, ROT90, "bootleg", "Ms. Pac-Man ('Made in Greece' bootleg, set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1997, mspacmanbg2, mspacman, woodpek, mspacman, pacman_state, empty_init, ROT90, "bootleg", "Ms. Pac-Man ('Made in Greece' bootleg, set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1992, mspacmanbgd, mspacman, woodpek, mspacman, pacman_state, empty_init, ROT90, "bootleg (Datamat)", "Miss Pukman ('Made in Greece' Datamat bootleg)", MACHINE_SUPPORTS_SAVE ) // shows 'Miss Pukman 1991/1992' but confirmed to be the bootleg distributed by Datamat -GAME( 1988, mspacmanbgf, mspacman, woodpek, mspacman, pacman_state, empty_init, ROT90, "bootleg (Fermin)", "Mr Pac-Turbo ('Made in Greece' Fermin bootleg)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE ) // Argentine bootleg with turbo speed. B-G color lines are intended swapped, showing a Ms PacMan purple/pink. -GAME( 1992, mspacmanblt, mspacman, woodpek, mspacman, pacman_state, empty_init, ROT90, "bootleg (Triunvi)", "Come-Cocos (Ms. Pac-Man) ('Made in Greece' Triunvi bootleg, set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1992, mspacmanblt2, mspacman, woodpek, mspacman, pacman_state, empty_init, ROT90, "bootleg (Triunvi)", "Come-Cocos (Ms. Pac-Man) ('Made in Greece' Triunvi bootleg, set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, mspacmanbcc, mspacman, woodpek, mspacman, pacman_state, empty_init, ROT90, "bootleg (Tecnausa)", "Come-Cocos (Ms. Pac-Man) ('Made in Greece' Tecnausa bootleg)", MACHINE_SUPPORTS_SAVE ) // ^ same PCB, also dated 1991, distributed by Tecnausa -GAME( 1991, mspacmanbhe, mspacman, woodpek, mspacman, pacman_state, empty_init, ROT90, "bootleg (Herle SA)", "Come-Cocos (Ms. Pac-Man) ('Made in Greece' Herle SA bootleg)", MACHINE_SUPPORTS_SAVE ) // ^ same PCB -GAME( 1992, mspacmanbco, mspacman, woodpek, mspacman, pacman_state, empty_init, ROT90, "bootleg (Cocamatic)", "Come-Cocos (Ms. Pac-Man) (Cocamatic bootleg)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE ) // this PCB have swapped Blue and Green color lines (Ms.Pac-Man sprite should be pink), no "MADE IN GREECE" text at PCB -GAME( 1993, mspacmanbi, mspacman, woodpek, mspacman, pacman_state, empty_init, ROT90, "bootleg (Impeuropex)", "Ms. Pac-Man (Impeuropex bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 1992, mspacmanbgc, mspacman, woodpek, mspacman, pacman_state, empty_init, ROT90, "bootleg (Enavi)", "Ms. Pac-Man ('Made in Greece' Enavi bootleg)", MACHINE_SUPPORTS_SAVE ) -GAME( 198?, pacmansp, puckman, pacman, pacmansp, pacman_state, empty_init, ROT90, "bootleg (Video Game SA)", "Puck Man (Spanish, 'Made in Greece' bootleg)", MACHINE_SUPPORTS_SAVE ) // probably a further conversion of the mspacmanbg bootleg, still has some MS Pacman code + extra features +GAME( 198?, mspacmanbg, mspacman, woodpek, mspacman, pacman_state, empty_init, ROT90, "bootleg", "Ms. Pac-Man ('Made in Greece' bootleg, set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1997, mspacmanbg2, mspacman, woodpek, mspacman, pacman_state, empty_init, ROT90, "bootleg", "Ms. Pac-Man ('Made in Greece' bootleg, set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1992, mspacmanbgd, mspacman, woodpek, mspacman, pacman_state, empty_init, ROT90, "bootleg (Datamat)", "Miss Pukman ('Made in Greece' Datamat bootleg)", MACHINE_SUPPORTS_SAVE ) // shows 'Miss Pukman 1991/1992' but confirmed to be the bootleg distributed by Datamat +GAME( 1988, mspacmanbgf, mspacman, woodpek_rbg, mspacman, pacman_state, empty_init, ROT90, "bootleg (Fermin)", "Mr Pac-Turbo ('Made in Greece' Fermin bootleg)", MACHINE_SUPPORTS_SAVE ) // Argentine bootleg with turbo speed. B-G color lines are intended swapped, showing a Ms PacMan purple/pink. +GAME( 1992, mspacmanblt, mspacman, woodpek, mspacman, pacman_state, empty_init, ROT90, "bootleg (Triunvi)", "Come-Cocos (Ms. Pac-Man) ('Made in Greece' Triunvi bootleg, set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1992, mspacmanblt2, mspacman, woodpek, mspacman, pacman_state, empty_init, ROT90, "bootleg (Triunvi)", "Come-Cocos (Ms. Pac-Man) ('Made in Greece' Triunvi bootleg, set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, mspacmanbcc, mspacman, woodpek, mspacman, pacman_state, empty_init, ROT90, "bootleg (Tecnausa)", "Come-Cocos (Ms. Pac-Man) ('Made in Greece' Tecnausa bootleg)", MACHINE_SUPPORTS_SAVE ) // ^ same PCB, also dated 1991, distributed by Tecnausa +GAME( 1991, mspacmanbhe, mspacman, woodpek, mspacman, pacman_state, empty_init, ROT90, "bootleg (Herle SA)", "Come-Cocos (Ms. Pac-Man) ('Made in Greece' Herle SA bootleg)", MACHINE_SUPPORTS_SAVE ) // ^ same PCB +GAME( 1992, mspacmanbco, mspacman, woodpek_rbg, mspacman, pacman_state, empty_init, ROT90, "bootleg (Cocamatic)", "Come-Cocos (Ms. Pac-Man) (Cocamatic bootleg)", MACHINE_SUPPORTS_SAVE ) // this PCB have swapped Blue and Green color lines (Ms.Pac-Man sprite should be pink), no "MADE IN GREECE" text at PCB +GAME( 1993, mspacmanbi, mspacman, woodpek, mspacman, pacman_state, empty_init, ROT90, "bootleg (Impeuropex)", "Ms. Pac-Man (Impeuropex bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1992, mspacmanbgc, mspacman, woodpek, mspacman, pacman_state, empty_init, ROT90, "bootleg (Enavi)", "Ms. Pac-Man ('Made in Greece' Enavi bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 198?, pacmansp, puckman, pacman, pacmansp, pacman_state, empty_init, ROT90, "bootleg (Video Game SA)", "Puck Man (Spanish, 'Made in Greece' bootleg)", MACHINE_SUPPORTS_SAVE ) // probably a further conversion of the mspacmanbg bootleg, still has some MS Pacman code + extra features GAME( 1992, mspactwin, 0, mspactwin, mspactwin, mspactwin_state, init_mspactwin, ROT90, "hack (Susilu)", "Ms Pac Man Twin (Argentina, set 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1992, mspactwina, mspactwin, mspactwin, mspactwin, mspactwin_state, init_mspactwin, ROT90, "hack (Susilu)", "Ms Pac Man Twin (Argentina, set 2)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/pacman/pacman.h b/src/mame/pacman/pacman.h index 6a08b030a56dd..2c646badf0526 100644 --- a/src/mame/pacman/pacman.h +++ b/src/mame/pacman/pacman.h @@ -192,6 +192,7 @@ class pacman_state : public driver_device TILE_GET_INFO_MEMBER(jrpacman_get_tile_info); DECLARE_VIDEO_START(pacman); void pacman_palette(palette_device &palette) const; + void pacman_rbg_palette(palette_device &palette) const; DECLARE_VIDEO_START(birdiy); DECLARE_VIDEO_START(s2650games); DECLARE_MACHINE_RESET(mschamp); @@ -224,6 +225,7 @@ class pacman_state : public driver_device void vanvan(machine_config &config); void s2650games(machine_config &config); void woodpek(machine_config &config); + void woodpek_rbg(machine_config &config); void crushs(machine_config &config); void superabc(machine_config &config); void numcrash(machine_config &config); diff --git a/src/mame/pacman/pacman_v.cpp b/src/mame/pacman/pacman_v.cpp index 0ea2b8b1d16f3..00826118e0dbc 100644 --- a/src/mame/pacman/pacman_v.cpp +++ b/src/mame/pacman/pacman_v.cpp @@ -114,6 +114,59 @@ void pacman_state::pacman_palette(palette_device &palette) const } } +void pacman_state::pacman_rbg_palette(palette_device &palette) const +{ + const uint8_t *color_prom = memregion("proms")->base(); + static constexpr int resistances[3] = { 1000, 470, 220 }; + + // compute the color output resistor weights + double rweights[3], gweights[3], bweights[2]; + compute_resistor_weights(0, 255, -1.0, + 3, &resistances[0], rweights, 0, 0, + 3, &resistances[0], gweights, 0, 0, + 2, &resistances[1], bweights, 0, 0); + + // create a lookup table for the palette + for (int i = 0; i < 32; i++) + { + int bit0, bit1, bit2; + + // red component + bit0 = BIT(color_prom[i], 0); + bit1 = BIT(color_prom[i], 1); + bit2 = BIT(color_prom[i], 2); + int const r = combine_weights(rweights, bit0, bit1, bit2); + + // green component + bit0 = BIT(color_prom[i], 3); + bit1 = BIT(color_prom[i], 4); + bit2 = BIT(color_prom[i], 5); + int const g = combine_weights(gweights, bit0, bit1, bit2); + + // blue component + bit0 = BIT(color_prom[i], 6); + bit1 = BIT(color_prom[i], 7); + int const b = combine_weights(bweights, bit0, bit1); + + palette.set_indirect_color(i, rgb_t(r, b, g)); + } + + // color_prom now points to the beginning of the lookup table + color_prom += 32; + + // allocate the colortable + for (int i = 0; i < 64*4; i++) + { + uint8_t const ctabentry = color_prom[i] & 0x0f; + + // first palette bank + palette.set_pen_indirect(i, ctabentry); + + // second palette bank + palette.set_pen_indirect(i + 64*4, 0x10 | ctabentry); + } +} + TILEMAP_MAPPER_MEMBER(pacman_state::pacman_scan_rows) { int offs;