Skip to content

Commit

Permalink
pacman/pacman.cpp: Swapped G-B color lines in mspacmanbgf and mspacma…
Browse files Browse the repository at this point in the history
…nbco sets

 to match the real hardware. Removed the IMPERFECT_COLORS flag.
  • Loading branch information
RobertoFresca committed Mar 23, 2024
1 parent 3156ebb commit 94c15a0
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 12 deletions.
36 changes: 24 additions & 12 deletions src/mame/pacman/pacman.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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 )
Expand Down
2 changes: 2 additions & 0 deletions src/mame/pacman/pacman.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down
53 changes: 53 additions & 0 deletions src/mame/pacman/pacman_v.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 94c15a0

Please sign in to comment.