mirror of
https://github.com/holub/mame
synced 2025-07-04 17:38:08 +03:00
circus: split classes part2
This commit is contained in:
parent
013022771b
commit
15c60a2eaa
@ -92,6 +92,19 @@ uint8_t circus_state::paddle_r()
|
||||
return m_paddle->read();
|
||||
}
|
||||
|
||||
void circus_state::clown_z_w(uint8_t data)
|
||||
{
|
||||
// This register triggers the discrete sound circuitry
|
||||
//logerror("Z: %02X\n", data);
|
||||
sound_w(data);
|
||||
|
||||
// also used to enable the amplifier
|
||||
machine().sound().system_mute(data & 0x80);
|
||||
|
||||
// and the clown image currently displayed
|
||||
m_clown_z = data;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
@ -595,38 +608,19 @@ ROM_START( ripcord )
|
||||
ROM_END
|
||||
|
||||
|
||||
void circus_state::init_circus()
|
||||
{
|
||||
m_game_id = 1;
|
||||
}
|
||||
|
||||
void circus_state::init_robotbwl()
|
||||
{
|
||||
m_game_id = 2;
|
||||
}
|
||||
void circus_state::init_crash()
|
||||
{
|
||||
m_game_id = 3;
|
||||
}
|
||||
void circus_state::init_ripcord()
|
||||
{
|
||||
m_game_id = 4;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
Game Drivers
|
||||
*******************************************************************************/
|
||||
|
||||
GAMEL( 1977, circus, 0, circus, circus, circus_state, init_circus, ROT0, "Exidy / Taito", "Circus / Acrobat TV", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_circus ) // named Acrobat TV when Taito published it in Japan
|
||||
GAMEL( 1977, circuso, circus, circus, circus, circus_state, init_circus, ROT0, "Exidy / Taito", "Circus / Acrobat TV (older)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_circus ) // "
|
||||
GAMEL( 1977, springbd, circus, circus, circus, circus_state, init_circus, ROT0, "bootleg (Sub-Electro)", "Springboard (bootleg of Circus)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_circus ) // looks like a text hack, but it also had a different bezel
|
||||
GAMEL( 1977, circus, 0, circus, circus, circus_state, empty_init, ROT0, "Exidy / Taito", "Circus / Acrobat TV", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_circus ) // named Acrobat TV when Taito published it in Japan
|
||||
GAMEL( 1977, circuso, circus, circus, circus, circus_state, empty_init, ROT0, "Exidy / Taito", "Circus / Acrobat TV (older)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_circus ) // "
|
||||
GAMEL( 1977, springbd, circus, circus, circus, circus_state, empty_init, ROT0, "bootleg (Sub-Electro)", "Springboard (bootleg of Circus)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_circus ) // looks like a text hack, but it also had a different bezel
|
||||
|
||||
GAME( 1977, robotbwl, 0, robotbwl, robotbwl, robotbwl_state, init_robotbwl, ROT0, "Exidy", "Robot Bowl", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
|
||||
GAME( 1977, robotbwl, 0, robotbwl, robotbwl, robotbwl_state, empty_init, ROT0, "Exidy", "Robot Bowl", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
|
||||
|
||||
GAMEL( 1979, crash, 0, crash, crash, crash_state, init_crash, ROT0, "Exidy", "Crash (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_crash )
|
||||
GAMEL( 1979, crasha, crash, crash, crash, crash_state, init_crash, ROT0, "Exidy", "Crash (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_crasha )
|
||||
GAMEL( 1979, smash, crash, crash, crash, crash_state, init_crash, ROT0, "bootleg", "Smash (Crash bootleg)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_crash ) // looks like a text hack, but it also had a different bezel
|
||||
GAMEL( 1979, crash, 0, crash, crash, crash_state, empty_init, ROT0, "Exidy", "Crash (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_crash )
|
||||
GAMEL( 1979, crasha, crash, crash, crash, crash_state, empty_init, ROT0, "Exidy", "Crash (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_crasha )
|
||||
GAMEL( 1979, smash, crash, crash, crash, crash_state, empty_init, ROT0, "bootleg", "Smash (Crash bootleg)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_crash ) // looks like a text hack, but it also had a different bezel
|
||||
|
||||
GAME( 1979, ripcord, 0, ripcord, ripcord, ripcord_state, init_ripcord, ROT0, "Exidy", "Rip Cord", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
|
||||
GAME( 1979, ripcord, 0, ripcord, ripcord, ripcord_state, empty_init, ROT0, "Exidy", "Rip Cord", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
|
||||
|
@ -32,11 +32,6 @@ public:
|
||||
void base_mcfg(machine_config &config);
|
||||
void circus(machine_config &config);
|
||||
|
||||
void init_ripcord();
|
||||
void init_circus();
|
||||
void init_robotbwl();
|
||||
void init_crash();
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
@ -56,12 +51,12 @@ protected:
|
||||
int m_clown_y = 0;
|
||||
int m_clown_z = 0;
|
||||
|
||||
int m_game_id = 0;
|
||||
void videoram_w(offs_t offset, uint8_t data);
|
||||
void clown_x_w(uint8_t data) { m_clown_x = 240 - data; }
|
||||
void clown_y_w(uint8_t data) { m_clown_y = 240 - data; }
|
||||
void clown_z_w(uint8_t data);
|
||||
uint8_t paddle_r();
|
||||
virtual void sound_w(uint8_t data);
|
||||
|
||||
TILE_GET_INFO_MEMBER(get_bg_tile_info);
|
||||
virtual uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
@ -86,10 +81,10 @@ public:
|
||||
|
||||
void robotbwl(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) override;
|
||||
|
||||
private:
|
||||
virtual uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) override;
|
||||
virtual void sound_w(uint8_t data) override;
|
||||
|
||||
void draw_box(bitmap_ind16 &bitmap, const rectangle &cliprect, int x, int y);
|
||||
void draw_scoreboard(bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void draw_bowling_alley(bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
@ -108,10 +103,10 @@ public:
|
||||
|
||||
void crash(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) override;
|
||||
|
||||
private:
|
||||
virtual uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) override;
|
||||
virtual void sound_w(uint8_t data) override;
|
||||
|
||||
void draw_car(bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
};
|
||||
|
||||
@ -127,8 +122,9 @@ public:
|
||||
|
||||
void ripcord(machine_config &config);
|
||||
|
||||
protected:
|
||||
private:
|
||||
virtual uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) override;
|
||||
virtual void sound_w(uint8_t data) override;
|
||||
};
|
||||
|
||||
|
||||
|
@ -11,6 +11,12 @@
|
||||
#include "emu.h"
|
||||
#include "circus.h"
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
Circus
|
||||
*******************************************************************************/
|
||||
|
||||
const char *const circus_sample_names[] =
|
||||
{
|
||||
"*circus",
|
||||
@ -20,38 +26,9 @@ const char *const circus_sample_names[] =
|
||||
nullptr
|
||||
};
|
||||
|
||||
const char *const crash_sample_names[] =
|
||||
{
|
||||
"*crash",
|
||||
"crash",
|
||||
nullptr
|
||||
};
|
||||
|
||||
const char *const ripcord_sample_names[] =
|
||||
{
|
||||
"*ripcord",
|
||||
"splash",
|
||||
"scream",
|
||||
"chute",
|
||||
"whistle",
|
||||
nullptr
|
||||
};
|
||||
|
||||
const char *const robotbwl_sample_names[] =
|
||||
{
|
||||
"*robotbwl",
|
||||
"hit",
|
||||
"roll",
|
||||
"balldrop",
|
||||
"demerit",
|
||||
"reward",
|
||||
nullptr
|
||||
};
|
||||
|
||||
|
||||
/* Nodes - Inputs */
|
||||
// Nodes - Inputs
|
||||
#define CIRCUS_MUSIC_BIT NODE_01
|
||||
/* Nodes - Sounds */
|
||||
// Nodes - Sounds
|
||||
#define CIRCUS_MUSIC_SND NODE_10
|
||||
|
||||
DISCRETE_SOUND_START(circus_discrete)
|
||||
@ -68,6 +45,116 @@ DISCRETE_SOUND_START(circus_discrete)
|
||||
DISCRETE_OUTPUT(CIRCUS_MUSIC_SND, 1)
|
||||
DISCRETE_SOUND_END
|
||||
|
||||
|
||||
void circus_state::sound_w(uint8_t data)
|
||||
{
|
||||
// Bits 4-6 enable/disable trigger different events
|
||||
switch ((data & 0x70) >> 4)
|
||||
{
|
||||
case 0: // All Off
|
||||
m_discrete->write(CIRCUS_MUSIC_BIT, 0);
|
||||
break;
|
||||
|
||||
case 1: // Music
|
||||
m_discrete->write(CIRCUS_MUSIC_BIT, 1);
|
||||
break;
|
||||
|
||||
case 2: // Pop
|
||||
m_samples->start(0, 0);
|
||||
break;
|
||||
|
||||
case 3: // Normal Video
|
||||
break;
|
||||
|
||||
case 4: // Miss
|
||||
m_samples->start(1, 1);
|
||||
break;
|
||||
|
||||
case 5: // Invert Video
|
||||
break;
|
||||
|
||||
case 6: // Bounce
|
||||
m_samples->start(2, 2);
|
||||
break;
|
||||
|
||||
case 7: // Unused
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
Robot Bowl
|
||||
*******************************************************************************/
|
||||
|
||||
const char *const robotbwl_sample_names[] =
|
||||
{
|
||||
"*robotbwl",
|
||||
"hit",
|
||||
"roll",
|
||||
"balldrop",
|
||||
"demerit",
|
||||
"reward",
|
||||
nullptr
|
||||
};
|
||||
|
||||
// Nodes - Inputs
|
||||
#define ROBOTBWL_MUSIC_BIT NODE_01
|
||||
// Nodes - Sounds
|
||||
#define ROBOTBWL_MUSIC_SND NODE_10
|
||||
|
||||
DISCRETE_SOUND_START(robotbwl_discrete)
|
||||
/************************************************/
|
||||
/* Input register mapping for robotbwl */
|
||||
/************************************************/
|
||||
DISCRETE_INPUTX_LOGIC(ROBOTBWL_MUSIC_BIT, 30000, 0, 0)
|
||||
|
||||
/************************************************/
|
||||
/* Music is just a 1 bit DAC */
|
||||
/************************************************/
|
||||
DISCRETE_RCFILTER(NODE_20, ROBOTBWL_MUSIC_BIT, RES_K(10), CAP_U(.47))
|
||||
DISCRETE_CRFILTER(ROBOTBWL_MUSIC_SND, NODE_20, RES_K(10) + RES_K(22), CAP_U(.1))
|
||||
|
||||
DISCRETE_OUTPUT(ROBOTBWL_MUSIC_SND, 1)
|
||||
DISCRETE_SOUND_END
|
||||
|
||||
|
||||
void robotbwl_state::sound_w(uint8_t data)
|
||||
{
|
||||
if (data & 0x40) // Hit
|
||||
m_samples->start(0, 0);
|
||||
|
||||
if (data & 0x20) // Roll
|
||||
m_samples->start(1, 1);
|
||||
|
||||
if (data & 0x10) // Ball Drop
|
||||
m_samples->start(2, 2);
|
||||
|
||||
m_discrete->write(ROBOTBWL_MUSIC_BIT, data & 0x08); // Footsteps
|
||||
|
||||
//if (data & 0x04) // Invert
|
||||
|
||||
if (data & 0x02) // Demerit
|
||||
m_samples->start(3, 3);
|
||||
|
||||
if (data & 0x01) // Reward
|
||||
m_samples->start(4, 4);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
Crash
|
||||
*******************************************************************************/
|
||||
|
||||
const char *const crash_sample_names[] =
|
||||
{
|
||||
"*crash",
|
||||
"crash",
|
||||
nullptr
|
||||
};
|
||||
|
||||
static const discrete_mixer_desc crash_mixer =
|
||||
{
|
||||
DISC_MIXER_IS_RESISTOR,
|
||||
@ -91,13 +178,13 @@ static const discrete_555_desc crash_beeper_555a =
|
||||
DEFAULT_555_VALUES
|
||||
};
|
||||
|
||||
/* Nodes - Inputs */
|
||||
// Nodes - Inputs
|
||||
#define CRASH_MUSIC_BIT NODE_01
|
||||
#define CRASH_BEEPER_EN NODE_02
|
||||
/* Nodes - Adjusters */
|
||||
// Nodes - Adjusters
|
||||
#define CRASH_R63 NODE_10
|
||||
#define CRASH_R39 NODE_11
|
||||
/* Nodes - Sounds */
|
||||
// Nodes - Sounds
|
||||
#define CRASH_MUSIC_SND NODE_20
|
||||
#define CRASH_BEEPER_SND NODE_21
|
||||
|
||||
@ -131,133 +218,92 @@ DISCRETE_SOUND_START(crash_discrete)
|
||||
DISCRETE_OUTPUT(NODE_90, 1)
|
||||
DISCRETE_SOUND_END
|
||||
|
||||
/* Nodes - Inputs */
|
||||
#define ROBOTBWL_MUSIC_BIT NODE_01
|
||||
/* Nodes - Sounds */
|
||||
#define ROBOTBWL_MUSIC_SND NODE_10
|
||||
|
||||
DISCRETE_SOUND_START(robotbwl_discrete)
|
||||
/************************************************/
|
||||
/* Input register mapping for robotbwl */
|
||||
/************************************************/
|
||||
DISCRETE_INPUTX_LOGIC(ROBOTBWL_MUSIC_BIT, 30000, 0, 0)
|
||||
|
||||
/************************************************/
|
||||
/* Music is just a 1 bit DAC */
|
||||
/************************************************/
|
||||
DISCRETE_RCFILTER(NODE_20, ROBOTBWL_MUSIC_BIT, RES_K(10), CAP_U(.47))
|
||||
DISCRETE_CRFILTER(ROBOTBWL_MUSIC_SND, NODE_20, RES_K(10) + RES_K(22), CAP_U(.1))
|
||||
|
||||
DISCRETE_OUTPUT(ROBOTBWL_MUSIC_SND, 1)
|
||||
DISCRETE_SOUND_END
|
||||
|
||||
|
||||
/* This register controls the clown image currently displayed */
|
||||
/* and also is used to enable the amplifier and trigger the */
|
||||
/* discrete circuitry that produces sound effects and music */
|
||||
|
||||
void circus_state::clown_z_w(uint8_t data)
|
||||
void crash_state::sound_w(uint8_t data)
|
||||
{
|
||||
m_clown_z = (data & 0x0f);
|
||||
*(memregion("maincpu")->base() + 0x8000) = data; logerror("Z:%02x\n",data); //DEBUG
|
||||
|
||||
/* Bits 4-6 enable/disable trigger different events */
|
||||
switch (m_game_id)
|
||||
{
|
||||
case 1: /* circus */
|
||||
case 4: /* ripcord */
|
||||
// Bits 4-6 enable/disable trigger different events
|
||||
switch ((data & 0x70) >> 4)
|
||||
{
|
||||
case 0 : /* All Off */
|
||||
m_discrete->write(CIRCUS_MUSIC_BIT, 0);
|
||||
break;
|
||||
|
||||
case 1 : /* Music */
|
||||
m_discrete->write(CIRCUS_MUSIC_BIT, 1);
|
||||
break;
|
||||
|
||||
case 2 : /* Circus = Pop; Rip Cord = Splash */
|
||||
m_samples->start(0, 0);
|
||||
break;
|
||||
|
||||
case 3 : /* Normal Video */
|
||||
break;
|
||||
|
||||
case 4 : /* Circus = Miss; Rip Cord = Scream */
|
||||
m_samples->start(1, 1);
|
||||
break;
|
||||
|
||||
case 5 : /* Invert Video */
|
||||
break;
|
||||
|
||||
case 6 : /* Circus = Bounce; Rip Cord = Chute Open */
|
||||
m_samples->start(2, 2);
|
||||
break;
|
||||
|
||||
case 7 : /* Circus = not used; Rip Cord = Whistle */
|
||||
if (m_game_id == 4)
|
||||
m_samples->start(3, 3);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 2: /* robotbwl */
|
||||
m_discrete->write(ROBOTBWL_MUSIC_BIT, data & 0x08); /* Footsteps */
|
||||
|
||||
if (data & 0x40) /* Hit */
|
||||
m_samples->start(0, 0);
|
||||
|
||||
if (data & 0x20) /* Roll */
|
||||
m_samples->start(1, 1);
|
||||
|
||||
if (data & 0x10) /* Ball Drop */
|
||||
m_samples->start(2, 2);
|
||||
|
||||
if (data & 0x02) /* Demerit */
|
||||
m_samples->start(3, 3);
|
||||
|
||||
if (data & 0x01) /* Reward */
|
||||
m_samples->start(4, 4);
|
||||
|
||||
// if (data & 0x04) /* Invert */
|
||||
break;
|
||||
|
||||
case 3: /* crash */
|
||||
/* Only the crash can be done with a sample */
|
||||
switch ((data & 0x70) >> 4)
|
||||
{
|
||||
case 0 : /* All Off */
|
||||
case 0: // All Off
|
||||
m_discrete->write(CRASH_MUSIC_BIT, 0);
|
||||
break;
|
||||
|
||||
case 1 : /* Music */
|
||||
case 1: // Music
|
||||
m_discrete->write(CRASH_MUSIC_BIT, 1);
|
||||
break;
|
||||
|
||||
case 2 : /* Crash */
|
||||
case 2: // Crash
|
||||
m_samples->start(0, 0);
|
||||
break;
|
||||
|
||||
case 3 : /* Normal Video and Beep */
|
||||
case 3: // Normal Video and Beep
|
||||
m_discrete->write(CRASH_BEEPER_EN, 0);
|
||||
break;
|
||||
|
||||
case 4 : /* Skid */
|
||||
case 4: // Skid
|
||||
break;
|
||||
|
||||
case 5 : /* Invert Video and Beep */
|
||||
case 5: // Invert Video and Beep
|
||||
m_discrete->write(CRASH_BEEPER_EN, 0);
|
||||
break;
|
||||
|
||||
case 6 : /* Hi Motor */
|
||||
case 6: // Hi Motor
|
||||
break;
|
||||
|
||||
case 7 : /* Low Motor */
|
||||
case 7: // Low Motor
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
Rip Cord
|
||||
*******************************************************************************/
|
||||
|
||||
const char *const ripcord_sample_names[] =
|
||||
{
|
||||
"*ripcord",
|
||||
"splash",
|
||||
"scream",
|
||||
"chute",
|
||||
"whistle",
|
||||
nullptr
|
||||
};
|
||||
|
||||
void ripcord_state::sound_w(uint8_t data)
|
||||
{
|
||||
// Bits 4-6 enable/disable trigger different events
|
||||
switch ((data & 0x70) >> 4)
|
||||
{
|
||||
case 0: // All Off
|
||||
m_discrete->write(CIRCUS_MUSIC_BIT, 0);
|
||||
break;
|
||||
|
||||
case 1: // Music
|
||||
m_discrete->write(CIRCUS_MUSIC_BIT, 1);
|
||||
break;
|
||||
|
||||
case 2: // Splash
|
||||
m_samples->start(0, 0);
|
||||
break;
|
||||
|
||||
case 3: // Normal Video
|
||||
break;
|
||||
|
||||
case 4: // Scream
|
||||
m_samples->start(1, 1);
|
||||
break;
|
||||
|
||||
case 5: // Invert Video
|
||||
break;
|
||||
|
||||
case 6: // Chute Open
|
||||
m_samples->start(2, 2);
|
||||
break;
|
||||
|
||||
case 7: // Whistle
|
||||
m_samples->start(3, 3);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
/* Bit 7 enables amplifier (0 = on) */
|
||||
machine().sound().system_mute(data & 0x80);
|
||||
}
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include "circus.h"
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
Shared
|
||||
*******************************************************************************/
|
||||
|
Loading…
Reference in New Issue
Block a user