mirror of
https://github.com/holub/mame
synced 2025-07-04 17:38:08 +03:00
omegrace: Clean up and document some things (nw)
This commit is contained in:
parent
b53e4bfa16
commit
ca8981c003
@ -246,16 +246,16 @@ public:
|
|||||||
void init_omegrace();
|
void init_omegrace();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
TIMER_CALLBACK_MEMBER(periodic_int);
|
||||||
DECLARE_READ8_MEMBER(omegrace_vg_go_r);
|
DECLARE_READ8_MEMBER(omegrace_vg_go_r);
|
||||||
DECLARE_READ8_MEMBER(omegrace_spinner1_r);
|
DECLARE_READ8_MEMBER(omegrace_spinner1_r);
|
||||||
DECLARE_WRITE8_MEMBER(omegrace_leds_w);
|
DECLARE_WRITE8_MEMBER(omegrace_leds_w);
|
||||||
DECLARE_WRITE8_MEMBER(omegrace_soundlatch_w);
|
|
||||||
void main_map(address_map &map);
|
void main_map(address_map &map);
|
||||||
void port_map(address_map &map);
|
void port_map(address_map &map);
|
||||||
void sound_map(address_map &map);
|
void sound_map(address_map &map);
|
||||||
void sound_port(address_map &map);
|
void sound_port(address_map &map);
|
||||||
|
|
||||||
virtual void machine_start() override { m_leds.resolve(); }
|
virtual void machine_start() override;
|
||||||
virtual void machine_reset() override;
|
virtual void machine_reset() override;
|
||||||
|
|
||||||
required_device<cpu_device> m_maincpu;
|
required_device<cpu_device> m_maincpu;
|
||||||
@ -263,6 +263,7 @@ private:
|
|||||||
required_device<dvg_device> m_dvg;
|
required_device<dvg_device> m_dvg;
|
||||||
required_device<generic_latch_8_device> m_soundlatch;
|
required_device<generic_latch_8_device> m_soundlatch;
|
||||||
output_finder<4> m_leds;
|
output_finder<4> m_leds;
|
||||||
|
emu_timer *m_gbnmi;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -272,12 +273,28 @@ private:
|
|||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
|
void omegrace_state::machine_start()
|
||||||
|
{
|
||||||
|
m_leds.resolve();
|
||||||
|
|
||||||
|
// Interrupt caused by overflow pulses from 74LS161 clocked by 74LS393 dividing .75 MHz output of 74LS161
|
||||||
|
attotime period = attotime::from_hz(12_MHz_XTAL/16/256/12); // ~250 Hz
|
||||||
|
m_gbnmi = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(omegrace_state::periodic_int), this));
|
||||||
|
m_gbnmi->adjust(period, 0, period); // first NMI must not arrive immediately
|
||||||
|
}
|
||||||
|
|
||||||
void omegrace_state::machine_reset()
|
void omegrace_state::machine_reset()
|
||||||
{
|
{
|
||||||
/* Omega Race expects the vector processor to be ready. */
|
/* Omega Race expects the vector processor to be ready. */
|
||||||
m_dvg->reset_w();
|
m_dvg->reset_w();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TIMER_CALLBACK_MEMBER(omegrace_state::periodic_int)
|
||||||
|
{
|
||||||
|
m_maincpu->set_input_line(INPUT_LINE_IRQ0, HOLD_LINE);
|
||||||
|
m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
/*************************************
|
||||||
@ -354,13 +371,6 @@ WRITE8_MEMBER(omegrace_state::omegrace_leds_w)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WRITE8_MEMBER(omegrace_state::omegrace_soundlatch_w)
|
|
||||||
{
|
|
||||||
m_soundlatch->write(data);
|
|
||||||
m_audiocpu->set_input_line(0, HOLD_LINE);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
/*************************************
|
||||||
*
|
*
|
||||||
@ -390,7 +400,7 @@ void omegrace_state::port_map(address_map &map)
|
|||||||
map(0x11, 0x11).portr("IN0"); /* Player 1 input */
|
map(0x11, 0x11).portr("IN0"); /* Player 1 input */
|
||||||
map(0x12, 0x12).portr("IN1"); /* Player 2 input */
|
map(0x12, 0x12).portr("IN1"); /* Player 2 input */
|
||||||
map(0x13, 0x13).w(FUNC(omegrace_state::omegrace_leds_w)); /* coin counters, leds, flip screen */
|
map(0x13, 0x13).w(FUNC(omegrace_state::omegrace_leds_w)); /* coin counters, leds, flip screen */
|
||||||
map(0x14, 0x14).w(FUNC(omegrace_state::omegrace_soundlatch_w)); /* Sound command */
|
map(0x14, 0x14).w(m_soundlatch, FUNC(generic_latch_8_device::write));
|
||||||
map(0x15, 0x15).r(FUNC(omegrace_state::omegrace_spinner1_r)); /* 1st controller */
|
map(0x15, 0x15).r(FUNC(omegrace_state::omegrace_spinner1_r)); /* 1st controller */
|
||||||
map(0x16, 0x16).portr("SPIN1"); /* 2nd controller (cocktail) */
|
map(0x16, 0x16).portr("SPIN1"); /* 2nd controller (cocktail) */
|
||||||
}
|
}
|
||||||
@ -520,23 +530,21 @@ void omegrace_state::omegrace(machine_config &config)
|
|||||||
/* main CPU */
|
/* main CPU */
|
||||||
/* XTAL101 Crystal @ 12mhz */
|
/* XTAL101 Crystal @ 12mhz */
|
||||||
/* through 74LS161, Pin 13 = divide by 4 */
|
/* through 74LS161, Pin 13 = divide by 4 */
|
||||||
Z80(config, m_maincpu, XTAL(12'000'000)/4);
|
Z80(config, m_maincpu, 12_MHz_XTAL/4);
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &omegrace_state::main_map);
|
m_maincpu->set_addrmap(AS_PROGRAM, &omegrace_state::main_map);
|
||||||
m_maincpu->set_addrmap(AS_IO, &omegrace_state::port_map);
|
m_maincpu->set_addrmap(AS_IO, &omegrace_state::port_map);
|
||||||
m_maincpu->set_periodic_int(FUNC(omegrace_state::irq0_line_hold), attotime::from_hz(250));
|
|
||||||
|
|
||||||
/* audio CPU */
|
/* audio CPU */
|
||||||
/* XTAL101 Crystal @ 12mhz */
|
/* XTAL101 Crystal @ 12mhz */
|
||||||
/* through 74LS161, Pin 12 = divide by 8 */
|
/* through 74LS161, Pin 12 = divide by 8 */
|
||||||
/* Fed to CPU as 1.5mhz though line J4-D */
|
/* Fed to CPU as 1.5mhz though line J4-D */
|
||||||
Z80(config, m_audiocpu, XTAL(12'000'000)/8);
|
Z80(config, m_audiocpu, 12_MHz_XTAL/8);
|
||||||
m_audiocpu->set_addrmap(AS_PROGRAM, &omegrace_state::sound_map);
|
m_audiocpu->set_addrmap(AS_PROGRAM, &omegrace_state::sound_map);
|
||||||
m_audiocpu->set_addrmap(AS_IO, &omegrace_state::sound_port);
|
m_audiocpu->set_addrmap(AS_IO, &omegrace_state::sound_port);
|
||||||
m_audiocpu->set_periodic_int(FUNC(omegrace_state::nmi_line_pulse), attotime::from_hz(250));
|
|
||||||
|
|
||||||
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
|
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // 5101 + battery
|
||||||
|
|
||||||
WATCHDOG_TIMER(config, "watchdog");
|
WATCHDOG_TIMER(config, "watchdog").set_time(attotime::from_hz(12_MHz_XTAL/16/256/256));
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
VECTOR(config, "vector", 0);
|
VECTOR(config, "vector", 0);
|
||||||
@ -553,12 +561,13 @@ void omegrace_state::omegrace(machine_config &config)
|
|||||||
SPEAKER(config, "mono").front_center();
|
SPEAKER(config, "mono").front_center();
|
||||||
|
|
||||||
GENERIC_LATCH_8(config, m_soundlatch);
|
GENERIC_LATCH_8(config, m_soundlatch);
|
||||||
|
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_IRQ0);
|
||||||
|
|
||||||
/* XTAL101 Crystal @ 12mhz */
|
/* XTAL101 Crystal @ 12mhz */
|
||||||
/* through 74LS92, Pin 8 = divide by 12 */
|
/* through 74LS92, Pin 8 = divide by 12 */
|
||||||
AY8912(config, "ay1", XTAL(12'000'000)/12).add_route(ALL_OUTPUTS, "mono", 0.25);
|
AY8912(config, "ay1", 12_MHz_XTAL/12).add_route(ALL_OUTPUTS, "mono", 0.25);
|
||||||
|
|
||||||
AY8912(config, "ay2", XTAL(12'000'000)/12).add_route(ALL_OUTPUTS, "mono", 0.25);
|
AY8912(config, "ay2", 12_MHz_XTAL/12).add_route(ALL_OUTPUTS, "mono", 0.25);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user