Skip to content

Commit

Permalink
barcrest\mpu3.cpp: Correct 100hz signal to pia6821 ic3 (#13215)
Browse files Browse the repository at this point in the history
* Correct 100hz signal to pia6821 ic3
* Correct 50hz comment
* Correct toggling of 100hz and comment games which fail on boot
  • Loading branch information
blueonesarefaster authored Jan 13, 2025
1 parent fc8e830 commit e0b1e23
Showing 1 changed file with 15 additions and 17 deletions.
32 changes: 15 additions & 17 deletions src/mame/barcrest/mpu3.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@
/* Notes 17/07/11 DH
added most other MPU3 sets
most fail to boot, giving the CPU a 'WAIT' instruction then sitting there
some complain about Characterizer (protection) and then do the same
some complain about Characterizer (protection)
a few boot to show light displays with no LED text
some display misaligned LED text
many run VERY slowly, even when the CPU is inactive (inefficient MAME timer system overhead?)
Expand Down Expand Up @@ -227,7 +226,7 @@ class mpu3_state : public driver_device
void pia_ic6_porta_w(uint8_t data);
void pia_ic6_portb_w(uint8_t data);
TIMER_CALLBACK_MEMBER(ic21_timeout);
TIMER_DEVICE_CALLBACK_MEMBER(gen_50hz);
TIMER_DEVICE_CALLBACK_MEMBER(gen_100hz);
TIMER_DEVICE_CALLBACK_MEMBER(ic10_callback);
void update_triacs();
void ic11_update();
Expand Down Expand Up @@ -258,7 +257,7 @@ class mpu3_state : public driver_device
int m_input_strobe = 0; /* IC11 74LS138 A = CA2 IC3, B = CA2 IC4, C = CA2 IC5 */
uint8_t m_lamp_strobe = 0;
uint8_t m_led_strobe = 0;
int m_signal_50hz = 0;
int m_signal_100hz = 0;

int m_optic_pattern = 0;

Expand Down Expand Up @@ -451,7 +450,7 @@ uint8_t mpu3_state::pia_ic3_porta_r()
break;
}
}
if (m_signal_50hz)
if (m_signal_100hz)
{
data |= 0x02;
}
Expand Down Expand Up @@ -746,15 +745,15 @@ void mpu3_state::machine_start()
m_lamp.resolve();
}

/* generate a 50 Hz signal (some components rely on this for external sync) */
TIMER_DEVICE_CALLBACK_MEMBER(mpu3_state::gen_50hz)
/* generate a 100 Hz signal (some components rely on this for external sync) */
TIMER_DEVICE_CALLBACK_MEMBER(mpu3_state::gen_100hz)
{
/* Although reported as a '50Hz' signal, the fact that both rising and
falling edges of the pulse are used means the timer actually gives a 100Hz
oscillating signal.*/
m_signal_50hz = m_signal_50hz?0:1;
m_ptm2->set_c1(m_signal_50hz);
m_pia3->cb1_w(~m_signal_50hz);
m_signal_100hz ^= 1;
m_ptm2->set_c1(m_signal_100hz);
m_pia3->cb1_w(m_signal_100hz);
update_triacs();
}

Expand Down Expand Up @@ -810,7 +809,7 @@ void mpu3_state::mpu3base(machine_config &config)

MSC1937(config, m_vfd);

TIMER(config, "50hz").configure_periodic(FUNC(mpu3_state::gen_50hz), attotime::from_hz(100));
TIMER(config, "100hz").configure_periodic(FUNC(mpu3_state::gen_100hz), attotime::from_hz(200));
TIMER(config, "555_ic10").configure_periodic(FUNC(mpu3_state::ic10_callback), PERIOD_OF_555_ASTABLE(10000,1000,0.0000001));

/* 6840 PTM */
Expand Down Expand Up @@ -1689,10 +1688,9 @@ GAME( 198?, m3topsht, 0, mpu3_chr_c000, mpu3, mpu3_chr_state, init_m
// doesn't boot, does nothing?
GAMEL( 198?, m3supnud, 0, mpu3base, mpu3, mpu3_state, init_mpu3, ROT0, "Barcrest","Super Nudges Unlimited (Barcrest) (MPU3)", GAME_FLAGS, layout_m3supnud )

// doesn't boot, does nothing?
GAME( 198?, m3supser, 0, mpu3base, mpu3, mpu3_state, init_mpu3, ROT0, "Barcrest","Super Series (Barcrest) (MPU3)",GAME_FLAGS )

// doesn't boot, does nothing?
// boots without initialising reels
GAMEL( 198?, m3circle, 0, mpu3base, mpu3, mpu3_state, init_mpu3, ROT0, "Barcrest","Special Circle Club (Barcrest) (MPU3, set 1)", GAME_FLAGS, layout_m3circle )
GAMEL( 198?, m3circlea, m3circle, mpu3base, mpu3, mpu3_state, init_mpu3, ROT0, "Barcrest","Special Circle Club (Barcrest) (MPU3, set 2, bad)", GAME_FLAGS, layout_m3circle )
GAMEL( 198?, m3circleb, m3circle, mpu3base, mpu3, mpu3_state, init_mpu3, ROT0, "Barcrest","Special Circle Club (Barcrest) (MPU3, set 3)", GAME_FLAGS, layout_m3circle )
Expand All @@ -1712,6 +1710,7 @@ GAMEL( 198?, m3ratrce, 0, mpu3base, mpu3, mpu3_state, init_mpu3, ROT0

GAME( 198?, m3supasw, 0, mpu3base, mpu3, mpu3_state, init_mpu3, ROT0, "BWB","Supaswop (BWB) (MPU3)",GAME_FLAGS )

// boots and then errors with REEL 'A' FAILURE
GAMEL( 198?, m3supwin, 0, mpu3base, mpu3, mpu3_state, init_mpu3, ROT0, "BWB","Super Win (BWB) (MPU3, set 1) (W.AG2) ", GAME_FLAGS, layout_m3supwin ) // offset VFD
GAMEL( 198?, m3supwina, m3supwin, mpu3base, mpu3, mpu3_state, init_mpu3, ROT0, "BWB","Super Win (BWB) (MPU3, set 2) (S.W.2 1.0)", GAME_FLAGS, layout_m3supwin )

Expand All @@ -1731,14 +1730,13 @@ GAMEL( 198?, m3spoofa, m3spoof, mpu3base, mpu3, mpu3_state, init_mpu3, ROT0
GAMEL( 198?, m3supspo, 0, mpu3base, mpu3, mpu3_state, init_mpu3, ROT0, "Pcp","Super Spoof (Pcp) (MPU3, set 1)", GAME_FLAGS, layout_m3supspo )
GAMEL( 198?, m3supspoa, m3supspo, mpu3base, mpu3, mpu3_state, init_mpu3, ROT0, "Pcp","Super Spoof (Pcp) (MPU3, set 2)", GAME_FLAGS, layout_m3supspo )

// boots, reel error a
GAMEL( 198?, m3loony, 0, mpu3base, mpu3, mpu3_state, init_mpu3, ROT0, "Pcp","Loonybin (Pcp) (MPU3)", GAME_FLAGS, layout_m3loony )

// does nothing
// boots, no vfd, then locks
GAMEL( 198?, m3online, 0, mpu3base, mpu3, mpu3_state, init_mpu3, ROT0, "Pcp","On Line (Pcp) (MPU3)", GAME_FLAGS, layout_m3online )
GAMEL( 198?, m3toplin, 0, mpu3base, mpu3, mpu3_state, init_mpu3, ROT0, "Pcp","Top Line (Pcp) (MPU3)", GAME_FLAGS, layout_m3toplin )

// offset VFD, don't boot (act like m3supwin above)
// REEL 'A' FAILURE
GAMEL( 198?, m3rockpl, 0, mpu3base, mpu3, mpu3_state, init_mpu3, ROT0, "Pcp","Rock Pile (Pcp) (MPU3)", GAME_FLAGS, layout_m3rockpl )
GAMEL( 198?, m3rollem, 0, mpu3base, mpu3, mpu3_state, init_mpu3, ROT0, "Pcp","Roll 'Em (Pcp) (MPU3)", GAME_FLAGS, layout_m3rollem )
GAME( 198?, m3wigwam, 0, mpu3base, mpu3, mpu3_state, init_mpu3, ROT0, "Pcp","Wig Wam (Pcp) (MPU3)",GAME_FLAGS )
Expand All @@ -1749,7 +1747,7 @@ GAME( 198?, m3wigwam, 0, mpu3base, mpu3, mpu3_state, init_mpu3, ROT0
// no protection, boots without testing reels?
GAMEL( 198?, m3gcrown, 0, mpu3base, mpu3, mpu3_state, init_mpu3, ROT0, "Mdm","Golden Crowns (Mdm) (MPU3)", GAME_FLAGS, layout_m3gcrown )

// reel A alarm
// no VFD
GAMEL( 198?, m3tfair, 0, mpu3base, mpu3, mpu3_state, init_mpu3, ROT0, "Mdm","Tuppenny Fair (Mdm) (MPU3)", GAME_FLAGS, layout_m3tfair )
GAME( 198?, m3wacky, 0, mpu3base, mpu3, mpu3_state, init_mpu3, ROT0, "Mdm","Wacky Racer (Mdm) (MPU3)",GAME_FLAGS )

Expand Down

0 comments on commit e0b1e23

Please sign in to comment.