misc: no need to always change cpuclock at reset when non-default port_changed takes care of it

This commit is contained in:
hap 2023-12-12 19:47:42 +01:00
parent 14d90d4853
commit 881df52443
22 changed files with 119 additions and 234 deletions

View File

@ -80,14 +80,13 @@ void saitekosa_maestro_device::device_start()
void saitekosa_maestro_device::device_reset()
{
set_cpu_freq();
control_w(0);
}
void saitekosa_maestro_device::set_cpu_freq()
INPUT_CHANGED_MEMBER(saitekosa_maestro_device::change_cpu_freq)
{
static const XTAL xtal[6] = { 4_MHz_XTAL, 5.67_MHz_XTAL, 6_MHz_XTAL, 7.2_MHz_XTAL, 8_MHz_XTAL, 10_MHz_XTAL };
m_maincpu->set_unscaled_clock(xtal[ioport("FAKE")->read() % 6]);
m_maincpu->set_unscaled_clock(xtal[newval % 6]);
}
@ -201,8 +200,8 @@ const tiny_rom_entry *saitekosa_analyst_device::device_rom_region() const
//-------------------------------------------------
static INPUT_PORTS_START( maestro )
PORT_START("FAKE")
PORT_CONFNAME( 0x07, 0x04, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, saitekosa_maestro_device, switch_cpu_freq, 0) // factory set
PORT_START("CPU")
PORT_CONFNAME( 0x07, 0x04, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, saitekosa_maestro_device, change_cpu_freq, 0) // factory set
PORT_CONFSETTING( 0x00, "4MHz" )
PORT_CONFSETTING( 0x01, "5.67MHz" )
PORT_CONFSETTING( 0x02, "6MHz" )

View File

@ -26,7 +26,7 @@ public:
// construction/destruction
saitekosa_maestro_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
DECLARE_INPUT_CHANGED_MEMBER(switch_cpu_freq) { set_cpu_freq(); }
DECLARE_INPUT_CHANGED_MEMBER(change_cpu_freq);
// from host
virtual u8 data_r() override;
@ -61,8 +61,6 @@ protected:
void xdata_w(u8 data);
u8 ack_r();
void control_w(u8 data);
void set_cpu_freq();
};
class saitekosa_analyst_device : public saitekosa_maestro_device

View File

@ -50,14 +50,13 @@ void saitekosa_maestroa_device::device_start()
void saitekosa_maestroa_device::device_reset()
{
set_cpu_freq();
control_w(0);
}
void saitekosa_maestroa_device::set_cpu_freq()
INPUT_CHANGED_MEMBER(saitekosa_maestroa_device::change_cpu_freq)
{
static const XTAL xtal[3] = { 4_MHz_XTAL, 5.67_MHz_XTAL, 6_MHz_XTAL };
m_maincpu->set_unscaled_clock(xtal[ioport("FAKE")->read() % 3]);
m_maincpu->set_unscaled_clock(xtal[newval % 3]);
}
@ -89,8 +88,8 @@ const tiny_rom_entry *saitekosa_maestroa_device::device_rom_region() const
//-------------------------------------------------
static INPUT_PORTS_START( maestroa )
PORT_START("FAKE")
PORT_CONFNAME( 0x03, 0x02, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, saitekosa_maestroa_device, switch_cpu_freq, 0) // factory set
PORT_START("CPU")
PORT_CONFNAME( 0x03, 0x02, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, saitekosa_maestroa_device, change_cpu_freq, 0) // factory set
PORT_CONFSETTING( 0x00, "4MHz" )
PORT_CONFSETTING( 0x01, "5.67MHz" )
PORT_CONFSETTING( 0x02, "6MHz" )

View File

@ -22,7 +22,7 @@ public:
// construction/destruction
saitekosa_maestroa_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
DECLARE_INPUT_CHANGED_MEMBER(switch_cpu_freq) { set_cpu_freq(); }
DECLARE_INPUT_CHANGED_MEMBER(change_cpu_freq);
// from host
virtual u8 data_r() override;
@ -49,8 +49,6 @@ private:
void xdata_w(u8 data);
u8 ack_r();
void control_w(u8 data);
void set_cpu_freq();
};

View File

@ -131,7 +131,7 @@ public:
{ }
DECLARE_INPUT_CHANGED_MEMBER(reset_switch) { update_reset(newval); }
DECLARE_INPUT_CHANGED_MEMBER(change_cpu_freq) { update_cpu_freq(newval); }
DECLARE_INPUT_CHANGED_MEMBER(change_cpu_freq);
// machine configs
void cmpchess(machine_config &config);
@ -166,7 +166,6 @@ private:
TIMER_DEVICE_CALLBACK_MEMBER(blink) { m_blink = !m_blink; update_display(); }
void update_display();
void update_reset(ioport_value state);
void update_cpu_freq(ioport_value state);
// I/O handlers
void input_w(u8 data);
@ -197,9 +196,6 @@ void cmpchess_state::machine_start()
void cmpchess_state::machine_reset()
{
if (ioport("FAKE") != nullptr)
update_cpu_freq(ioport("FAKE")->read());
update_reset(ioport("RESET")->read());
}
@ -213,10 +209,10 @@ void cmpchess_state::update_reset(ioport_value state)
m_display->clear();
}
void cmpchess_state::update_cpu_freq(ioport_value state)
INPUT_CHANGED_MEMBER(cmpchess_state::change_cpu_freq)
{
// 2 MK I versions, 2nd one was a lot faster
const u32 freq = state ? 3'500'000 : 2'250'000;
const u32 freq = (newval & 1) ? 3'500'000 : 2'250'000;
m_maincpu->set_unscaled_clock(freq);
subdevice<f3853_device>("smi")->set_unscaled_clock(freq);
}
@ -368,7 +364,7 @@ static INPUT_PORTS_START( mk1 )
PORT_MODIFY("RESET")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_F1) PORT_TOGGLE PORT_CHANGED_MEMBER(DEVICE_SELF, cmpchess_state, reset_switch, 0) PORT_NAME("L.S. Switch")
PORT_START("FAKE")
PORT_START("CPU")
PORT_CONFNAME( 0x01, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, cmpchess_state, change_cpu_freq, 0) // factory set
PORT_CONFSETTING( 0x00, "2.25MHz (Spassky packaging)" )
PORT_CONFSETTING( 0x01, "3.5MHz (Karpov packaging)" )

View File

@ -90,7 +90,7 @@ public:
void tasc(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(switch_cpu_freq) { set_cpu_freq(); }
DECLARE_INPUT_CHANGED_MEMBER(change_cpu_freq);
protected:
virtual void machine_start() override;
@ -126,7 +126,6 @@ private:
u8 nvram_r(offs_t offset) { return m_nvram[offset]; }
void nvram_w(offs_t offset, u8 data) { m_nvram[offset] = data; }
void set_cpu_freq();
void install_bootrom(bool enable);
TIMER_DEVICE_CALLBACK_MEMBER(disable_bootrom) { install_bootrom(false); }
};
@ -144,16 +143,15 @@ void tasc_state::machine_start()
void tasc_state::machine_reset()
{
install_bootrom(true);
set_cpu_freq();
m_prev_pc = m_maincpu->pc();
m_prev_cycle = m_maincpu->total_cycles();
}
void tasc_state::set_cpu_freq()
INPUT_CHANGED_MEMBER(tasc_state::change_cpu_freq)
{
// R30 is 30MHz, R40 is 40MHz
m_maincpu->set_unscaled_clock((ioport("FAKE")->read() & 1) ? 40_MHz_XTAL : 30_MHz_XTAL);
m_maincpu->set_unscaled_clock((newval & 1) ? 40_MHz_XTAL : 30_MHz_XTAL);
}
@ -288,8 +286,8 @@ static INPUT_PORTS_START( tasc )
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DOWN) PORT_NAME("DOWN")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("Right Clock")
PORT_START("FAKE")
PORT_CONFNAME( 0x01, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, tasc_state, switch_cpu_freq, 0)
PORT_START("CPU")
PORT_CONFNAME( 0x01, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, tasc_state, change_cpu_freq, 0)
PORT_CONFSETTING( 0x00, "30MHz (R30)" )
PORT_CONFSETTING( 0x01, "40MHz (R40)" )
INPUT_PORTS_END

View File

@ -68,12 +68,10 @@ public:
void feleg(machine_config &config);
void felega(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(switch_cpu_freq) { set_cpu_freq(); }
DECLARE_INPUT_CHANGED_MEMBER(change_cpu_freq);
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
void set_cpu_freq();
private:
// devices/pointers
@ -104,18 +102,11 @@ void as12_state::machine_start()
save_item(NAME(m_led_data));
}
void as12_state::machine_reset()
{
set_cpu_freq();
fidel_clockdiv_state::machine_reset();
}
void as12_state::set_cpu_freq()
INPUT_CHANGED_MEMBER(as12_state::change_cpu_freq)
{
// known official CPU speeds: 3MHz, 3.57MHz, 4MHz
static const XTAL xtal[3] = { 3_MHz_XTAL, 3.579545_MHz_XTAL, 4_MHz_XTAL };
m_maincpu->set_unscaled_clock(xtal[ioport("FAKE")->read() % 3]);
div_refresh();
m_maincpu->set_unscaled_clock(xtal[newval % 3]);
}
@ -209,8 +200,8 @@ static INPUT_PORTS_START( feleg )
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("CL")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("RE")
PORT_START("FAKE")
PORT_CONFNAME( 0x03, 0x02, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, as12_state, switch_cpu_freq, 0) // factory set
PORT_START("CPU")
PORT_CONFNAME( 0x03, 0x02, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, as12_state, change_cpu_freq, 0) // factory set
PORT_CONFSETTING( 0x00, "3MHz (original)" )
PORT_CONFSETTING( 0x01, "3.57MHz (AS12)" )
PORT_CONFSETTING( 0x02, "4MHz (6085)" )
@ -219,8 +210,8 @@ INPUT_PORTS_END
static INPUT_PORTS_START( felega )
PORT_INCLUDE( feleg )
PORT_MODIFY("FAKE") // default to 3.57MHz
PORT_CONFNAME( 0x03, 0x01, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, as12_state, switch_cpu_freq, 0) // factory set
PORT_MODIFY("CPU") // default to 3.57MHz
PORT_CONFNAME( 0x03, 0x01, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, as12_state, change_cpu_freq, 0) // factory set
PORT_CONFSETTING( 0x00, "3MHz (original)" )
PORT_CONFSETTING( 0x01, "3.57MHz (AS12)" )
PORT_CONFSETTING( 0x02, "4MHz (6085)" )

View File

@ -248,8 +248,10 @@ public:
void csc(machine_config &config);
void csce(machine_config &config);
void cscet(machine_config &config);
void su9(machine_config &config);
void rsc(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(su9_change_cpu_freq);
DECLARE_INPUT_CHANGED_MEMBER(rsc_init_board);
protected:
@ -303,35 +305,11 @@ void csc_state::machine_start()
save_item(NAME(m_speech_bank));
}
// SU9
class su9_state : public csc_state
{
public:
su9_state(const machine_config &mconfig, device_type type, const char *tag) :
csc_state(mconfig, type, tag)
{ }
void su9(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(su9_cpu_freq) { su9_set_cpu_freq(); }
protected:
virtual void machine_reset() override;
void su9_set_cpu_freq();
};
void su9_state::machine_reset()
{
csc_state::machine_reset();
su9_set_cpu_freq();
}
void su9_state::su9_set_cpu_freq()
INPUT_CHANGED_MEMBER(csc_state::su9_change_cpu_freq)
{
// SU9 CPU is clocked 1.95MHz, DS9 is 2.5MHz, SCC is 3MHz
u8 inp = ioport("FAKE")->read();
m_maincpu->set_unscaled_clock((inp & 2) ? (3_MHz_XTAL) : ((inp & 1) ? (5_MHz_XTAL/2) : (3.9_MHz_XTAL/2)));
static const XTAL xtal[3] = { 3.9_MHz_XTAL/2, 5_MHz_XTAL/2, 3_MHz_XTAL };
m_maincpu->set_unscaled_clock(xtal[newval % 3]);
}
@ -588,8 +566,8 @@ static INPUT_PORTS_START( su9 )
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("PV / Queen")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("PB / King")
PORT_START("FAKE")
PORT_CONFNAME( 0x03, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, su9_state, su9_cpu_freq, 0) // factory set
PORT_START("CPU")
PORT_CONFNAME( 0x03, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, csc_state, su9_change_cpu_freq, 0) // factory set
PORT_CONFSETTING( 0x00, "1.95MHz (original)" )
PORT_CONFSETTING( 0x01, "2.5MHz (Deluxe)" )
PORT_CONFSETTING( 0x02, "3MHz (Septennial)" )
@ -675,7 +653,7 @@ void csc_state::cscet(machine_config &config)
m_maincpu->set_clock(5_MHz_XTAL);
}
void su9_state::su9(machine_config &config)
void csc_state::su9(machine_config &config)
{
csc(config);
config.set_default_layout(layout_fidel_su9);
@ -862,6 +840,6 @@ SYST( 1981, csc, 0, 0, csc, csc, csc_state, empty_init, "Fi
SYST( 1981, csce, 0, 0, csce, csc, csc_state, empty_init, "Fidelity Electronics", "Elite Champion Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1981, cscet, csce, 0, cscet, csc, csc_state, empty_init, "Fidelity Electronics", u8"Elite Champion Challenger (Travemünde TM version)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1983, super9cc, 0, 0, su9, su9, su9_state, empty_init, "Fidelity Electronics", "Super \"9\" Sensory Chess Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1983, super9cc, 0, 0, su9, su9, csc_state, empty_init, "Fidelity Electronics", "Super \"9\" Sensory Chess Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1981, reversic, 0, 0, rsc, rsc, csc_state, empty_init, "Fidelity Electronics", "Reversi Sensory Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )

View File

@ -119,12 +119,11 @@ public:
void ewc(machine_config &config);
void easc(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(switch_cpu_freq) { set_cpu_freq(); }
DECLARE_INPUT_CHANGED_MEMBER(change_cpu_freq);
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
void set_cpu_freq();
virtual void machine_reset() override { fidel_clockdiv_state::machine_reset(); }
// devices/pointers
optional_device<i8255_device> m_ppi8255;
@ -169,18 +168,11 @@ void elite_state::machine_start()
save_item(NAME(m_speech_bank));
}
void elite_state::machine_reset()
{
set_cpu_freq();
fidel_clockdiv_state::machine_reset();
}
void elite_state::set_cpu_freq()
INPUT_CHANGED_MEMBER(elite_state::change_cpu_freq)
{
// known official CPU speeds: 3MHz(EAS), 3.57MHz(PC/EWC/Privat), 4MHz(PC/EAS-C)
static const XTAL xtal[3] = { 3_MHz_XTAL, 3.579545_MHz_XTAL, 4_MHz_XTAL };
m_maincpu->set_unscaled_clock(xtal[ioport("FAKE")->read() % 3]);
div_refresh();
m_maincpu->set_unscaled_clock(xtal[newval % 3]);
}
// EAG
@ -216,7 +208,8 @@ void eag_state::init_eag2100()
void eag_state::machine_reset()
{
fidel_clockdiv_state::machine_reset();
elite_state::machine_reset();
if (m_rombank != nullptr)
m_rombank->set_entry(0);
}
@ -409,8 +402,8 @@ static INPUT_PORTS_START( eas )
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("CL")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_V) PORT_NAME("RV")
PORT_START("FAKE")
PORT_CONFNAME( 0x03, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, elite_state, switch_cpu_freq, 0) // factory set
PORT_START("CPU")
PORT_CONFNAME( 0x03, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, elite_state, change_cpu_freq, 0) // factory set
PORT_CONFSETTING( 0x00, "3MHz (EAS)" )
PORT_CONFSETTING( 0x01, "3.57MHz (EWC)" )
PORT_CONFSETTING( 0x02, "4MHz (EAS-C)" )
@ -419,8 +412,8 @@ INPUT_PORTS_END
static INPUT_PORTS_START( ewc )
PORT_INCLUDE( eas )
PORT_MODIFY("FAKE") // default to 3.57MHz
PORT_CONFNAME( 0x03, 0x01, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, elite_state, switch_cpu_freq, 0) // factory set
PORT_MODIFY("CPU") // default to 3.57MHz
PORT_CONFNAME( 0x03, 0x01, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, elite_state, change_cpu_freq, 0) // factory set
PORT_CONFSETTING( 0x00, "3MHz (EAS)" )
PORT_CONFSETTING( 0x01, "3.57MHz (EWC)" )
PORT_CONFSETTING( 0x02, "4MHz (EAS-C)" )
@ -429,8 +422,8 @@ INPUT_PORTS_END
static INPUT_PORTS_START( easc )
PORT_INCLUDE( eas )
PORT_MODIFY("FAKE") // default to 4MHz
PORT_CONFNAME( 0x03, 0x02, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, elite_state, switch_cpu_freq, 0) // factory set
PORT_MODIFY("CPU") // default to 4MHz
PORT_CONFNAME( 0x03, 0x02, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, elite_state, change_cpu_freq, 0) // factory set
PORT_CONFSETTING( 0x00, "3MHz (EAS)" )
PORT_CONFSETTING( 0x01, "3.57MHz (EWC)" )
PORT_CONFSETTING( 0x02, "4MHz (EAS-C)" )

View File

@ -89,12 +89,10 @@ public:
void sc12(machine_config &config);
void sc12b(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(switch_cpu_freq) { set_cpu_freq(); }
DECLARE_INPUT_CHANGED_MEMBER(change_cpu_freq);
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
void set_cpu_freq();
private:
// devices/pointers
@ -121,18 +119,11 @@ void sc12_state::machine_start()
save_item(NAME(m_inp_mux));
}
void sc12_state::machine_reset()
{
set_cpu_freq();
fidel_clockdiv_state::machine_reset();
}
void sc12_state::set_cpu_freq()
INPUT_CHANGED_MEMBER(sc12_state::change_cpu_freq)
{
// known official CPU speeds: 3MHz, 3.57MHz, 4MHz
static const XTAL xtal[3] = { 3_MHz_XTAL, 3.579545_MHz_XTAL, 4_MHz_XTAL };
m_maincpu->set_unscaled_clock(xtal[ioport("FAKE")->read() % 3]);
div_refresh();
m_maincpu->set_unscaled_clock(xtal[newval % 3]);
}
@ -214,8 +205,8 @@ static INPUT_PORTS_START( sc12 )
PORT_INCLUDE( fidel_clockdiv_2 )
PORT_INCLUDE( sc12_base )
PORT_START("FAKE")
PORT_CONFNAME( 0x03, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, sc12_state, switch_cpu_freq, 0) // factory set
PORT_START("CPU")
PORT_CONFNAME( 0x03, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, sc12_state, change_cpu_freq, 0) // factory set
PORT_CONFSETTING( 0x00, "3MHz (SC12)" )
PORT_CONFSETTING( 0x01, "3.57MHz (SE12)" )
PORT_CONFSETTING( 0x02, "4MHz (6086)" )
@ -225,8 +216,8 @@ static INPUT_PORTS_START( sc12b )
PORT_INCLUDE( fidel_clockdiv_4 )
PORT_INCLUDE( sc12_base )
PORT_START("FAKE")
PORT_CONFNAME( 0x03, 0x02, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, sc12_state, switch_cpu_freq, 0) // factory set
PORT_START("CPU")
PORT_CONFNAME( 0x03, 0x02, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, sc12_state, change_cpu_freq, 0) // factory set
PORT_CONFSETTING( 0x00, "3MHz (SC12)" )
PORT_CONFSETTING( 0x01, "3.57MHz (SE12)" )
PORT_CONFSETTING( 0x02, "4MHz (6086)" )
@ -268,8 +259,6 @@ void sc12_state::sc12(machine_config &config)
void sc12_state::sc12b(machine_config &config)
{
sc12(config);
// basic machine hardware
m_maincpu->set_clock(4_MHz_XTAL); // R65C02P4
}

View File

@ -84,6 +84,8 @@ public:
void sc9d(machine_config &config);
void playmatic(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(sc9c_change_cpu_freq);
protected:
virtual void machine_start() override;
@ -116,33 +118,11 @@ void sc9_state::machine_start()
save_item(NAME(m_led_data));
}
// SC9C
class sc9c_state : public sc9_state
{
public:
sc9c_state(const machine_config &mconfig, device_type type, const char *tag) :
sc9_state(mconfig, type, tag)
{ }
DECLARE_INPUT_CHANGED_MEMBER(sc9c_cpu_freq) { sc9c_set_cpu_freq(); }
protected:
virtual void machine_reset() override;
void sc9c_set_cpu_freq();
};
void sc9c_state::machine_reset()
{
sc9_state::machine_reset();
sc9c_set_cpu_freq();
}
void sc9c_state::sc9c_set_cpu_freq()
INPUT_CHANGED_MEMBER(sc9_state::sc9c_change_cpu_freq)
{
// SC9(C01) was released with 1.5MHz, 1.6MHz, or 1.9MHz CPU
u8 inp = ioport("FAKE")->read();
m_maincpu->set_unscaled_clock((inp & 2) ? 1'900'000 : ((inp & 1) ? 1'600'000 : 1'500'000));
static const u32 freq[3] = { 1'500'000, 1'600'000, 1'900'000 };
m_maincpu->set_unscaled_clock(freq[newval % 3]);
}
@ -244,8 +224,8 @@ INPUT_PORTS_END
static INPUT_PORTS_START( sc9c )
PORT_INCLUDE( sc9 )
PORT_START("FAKE")
PORT_CONFNAME( 0x03, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, sc9c_state, sc9c_cpu_freq, 0) // factory set
PORT_START("CPU")
PORT_CONFNAME( 0x03, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, sc9_state, sc9c_change_cpu_freq, 0) // factory set
PORT_CONFSETTING( 0x00, "1.5MHz" )
PORT_CONFSETTING( 0x01, "1.6MHz" )
PORT_CONFSETTING( 0x02, "1.9MHz" )
@ -342,8 +322,8 @@ ROM_END
Drivers
*******************************************************************************/
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
SYST( 1982, fscc9, 0, 0, sc9d, sc9, sc9_state, empty_init, "Fidelity Electronics", "Sensory Chess Challenger \"9\" (rev. D)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // aka version "B"
SYST( 1982, fscc9b, fscc9, 0, sc9b, sc9, sc9_state, empty_init, "Fidelity Electronics", "Sensory Chess Challenger \"9\" (rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1982, fscc9c, fscc9, 0, sc9b, sc9c, sc9c_state, empty_init, "Fidelity Electronics", "Sensory Chess Challenger \"9\" (rev. C)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1983, fscc9ps, fscc9, 0, playmatic, sc9, sc9_state, empty_init, "Fidelity Deutschland", "Sensory 9 Playmatic S", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // 9 is not between quotation marks here
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
SYST( 1982, fscc9, 0, 0, sc9d, sc9, sc9_state, empty_init, "Fidelity Electronics", "Sensory Chess Challenger \"9\" (rev. D)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // aka version "B"
SYST( 1982, fscc9b, fscc9, 0, sc9b, sc9, sc9_state, empty_init, "Fidelity Electronics", "Sensory Chess Challenger \"9\" (rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1982, fscc9c, fscc9, 0, sc9b, sc9c, sc9_state, empty_init, "Fidelity Electronics", "Sensory Chess Challenger \"9\" (rev. C)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1983, fscc9ps, fscc9, 0, playmatic, sc9, sc9_state, empty_init, "Fidelity Deutschland", "Sensory 9 Playmatic S", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) // 9 is not between quotation marks here

View File

@ -111,7 +111,7 @@ public:
{ }
DECLARE_INPUT_CHANGED_MEMBER(reset_button) { if (newval) machine_reset(); }
DECLARE_INPUT_CHANGED_MEMBER(switch_cpu_freq) { set_cpu_freq(); }
DECLARE_INPUT_CHANGED_MEMBER(change_cpu_freq) { set_cpu_freq(); }
// machine configs
void mephisto(machine_config &config);
@ -369,10 +369,10 @@ static INPUT_PORTS_START( mephisto )
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("H / 8")
PORT_START("IN.4") // 2nd model main PCB has 2 XTALs on PCB
PORT_CONFNAME( 0x03, 0x01, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, brikett_state, switch_cpu_freq, 0) PORT_CONDITION("IN.4", 0x30, NOTEQUALS, 0x00)
PORT_CONFNAME( 0x03, 0x01, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, brikett_state, change_cpu_freq, 0) PORT_CONDITION("IN.4", 0x30, NOTEQUALS, 0x00)
PORT_CONFSETTING( 0x00, "3.579MHz (Battery)" )
PORT_CONFSETTING( 0x01, "6.144MHz (Mains)" )
PORT_CONFNAME( 0x70, 0x40, "Base Hardware" ) PORT_CHANGED_MEMBER(DEVICE_SELF, brikett_state, switch_cpu_freq, 0)
PORT_CONFNAME( 0x70, 0x40, "Base Hardware" ) PORT_CHANGED_MEMBER(DEVICE_SELF, brikett_state, change_cpu_freq, 0)
PORT_CONFSETTING( 0x40, "1st Model (1980)" )
PORT_CONFSETTING( 0x70, "2nd Model (1982)" )
@ -417,7 +417,7 @@ static INPUT_PORTS_START( mephisto3 )
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("MEM")
PORT_MODIFY("IN.4")
PORT_CONFNAME( 0x03, 0x01, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, brikett_state, switch_cpu_freq, 0)
PORT_CONFNAME( 0x03, 0x01, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, brikett_state, change_cpu_freq, 0)
PORT_CONFSETTING( 0x00, "3.579MHz (Battery)" )
PORT_CONFSETTING( 0x01, "6.144MHz (Mains)" )
PORT_CONFSETTING( 0x02, "12MHz (Special)" )

View File

@ -33,7 +33,7 @@ V(Verkauf?) home version:
- 8*8 LEDs, magnets chessboard
T(Turnier) tournament version: (differences)
- XC68030RC50B, CPU frequency tuned for tournament (see set_cpu_freq)
- XC68030RC50B, CPU frequency tuned for tournament (see change_cpu_freq)
- 3 more 2MB DRAM rows
After boot, it copies ROM to RAM, probably to circumvent waitstates on slow ROM.
@ -64,15 +64,14 @@ public:
m_rom(*this, "maincpu"),
m_mainram(*this, "mainram"),
m_nvram(*this, "nvram", 0x2000, ENDIANNESS_BIG),
m_disable_bootrom(*this, "disable_bootrom"),
m_fake(*this, "FAKE")
m_disable_bootrom(*this, "disable_bootrom")
{ }
// machine configs
void mmtm_v(machine_config &config);
void mmtm_t(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(cpu_freq) { set_cpu_freq(); }
DECLARE_INPUT_CHANGED_MEMBER(change_cpu_freq);
protected:
virtual void machine_start() override;
@ -86,7 +85,6 @@ private:
required_shared_ptr<u32> m_mainram;
memory_share_creator<u8> m_nvram;
required_device<timer_device> m_disable_bootrom;
optional_ioport m_fake;
bool m_bootrom_enabled = false;
@ -99,10 +97,14 @@ private:
void install_bootrom(bool enable);
TIMER_DEVICE_CALLBACK_MEMBER(disable_bootrom) { install_bootrom(false); }
void set_cpu_freq();
};
/*******************************************************************************
Initialization
*******************************************************************************/
void mmtm_state::machine_start()
{
save_item(NAME(m_bootrom_enabled));
@ -110,8 +112,6 @@ void mmtm_state::machine_start()
void mmtm_state::machine_reset()
{
set_cpu_freq();
// disable bootrom after reset
install_bootrom(true);
m_disable_bootrom->adjust(m_maincpu->cycles_to_attotime(50));
@ -130,18 +130,16 @@ void mmtm_state::install_bootrom(bool enable)
m_bootrom_enabled = enable;
}
void mmtm_state::set_cpu_freq()
INPUT_CHANGED_MEMBER(mmtm_state::change_cpu_freq)
{
// "Mephisto X" were usually overclocked at tournaments
// rare versions sold to fans seen overclocked at 60MHz or 66MHz
// default frequency of TM version is 50MHz (also matches beeper pitch with V version)
ioport_value val = m_fake.read_safe(0);
static const XTAL xtal[] = { 36_MHz_XTAL, 50_MHz_XTAL, 60_MHz_XTAL, 66_MHz_XTAL };
m_maincpu->set_unscaled_clock(xtal[val]);
static const XTAL xtal[3] = { 50_MHz_XTAL, 60_MHz_XTAL, 66_MHz_XTAL };
m_maincpu->set_unscaled_clock(xtal[newval % 3]);
// lcd busy flag timing problem when overclocked
subdevice<hd44780_device>("display:hd44780")->set_clock_scale((val > 1) ? 1.32 : 1.0);
subdevice<hd44780_device>("display:hd44780")->set_clock_scale((newval == 0) ? 1.0 : 1.32);
}
@ -197,11 +195,11 @@ INPUT_PORTS_END
static INPUT_PORTS_START( mmtm_t )
PORT_INCLUDE( mmtm_v )
PORT_START("FAKE")
PORT_CONFNAME( 0x03, 0x01, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, mmtm_state, cpu_freq, 0)
PORT_CONFSETTING( 0x01, "50MHz" )
PORT_CONFSETTING( 0x02, "60MHz" )
PORT_CONFSETTING( 0x03, "66MHz" )
PORT_START("CPU")
PORT_CONFNAME( 0x03, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, mmtm_state, change_cpu_freq, 0)
PORT_CONFSETTING( 0x00, "50MHz" )
PORT_CONFSETTING( 0x01, "60MHz" )
PORT_CONFSETTING( 0x02, "66MHz" )
INPUT_PORTS_END

View File

@ -339,7 +339,7 @@ license:CC0-1.0
<!-- build screen -->
<view name="Internal Layout">
<bounds left="-12.5" right="116" top="-1" bottom="88" />
<bounds left="-12.5" right="116" top="1" bottom="88" />
<group ref="sb_board"><bounds x="4" y="3" width="80" height="80" /></group>
<group ref="sb_ui"><bounds x="-11" y="3" width="10" height="80" /></group>

View File

@ -350,29 +350,10 @@ license:CC0-1.0
<!-- build screen -->
<view name="Internal Layout">
<bounds left="-12.5" right="116" top="-1" bottom="88" />
<bounds left="-11" right="116" top="1" bottom="87" />
<group ref="sb_board"><bounds x="4" y="3" width="80" height="80" /></group>
<group ref="sb_ui"><bounds x="-11" y="3" width="10" height="80" /></group>
<!-- chessboard coords (actually, real board does not have this, but I like having them around) -->
<element ref="text_8"><bounds x="0.3" y="7" width="2" height="2" /></element>
<element ref="text_7"><bounds x="0.3" y="17" width="2" height="2" /></element>
<element ref="text_6"><bounds x="0.3" y="27" width="2" height="2" /></element>
<element ref="text_5"><bounds x="0.3" y="37" width="2" height="2" /></element>
<element ref="text_4"><bounds x="0.3" y="47" width="2" height="2" /></element>
<element ref="text_3"><bounds x="0.3" y="57" width="2" height="2" /></element>
<element ref="text_2"><bounds x="0.3" y="67" width="2" height="2" /></element>
<element ref="text_1"><bounds x="0.3" y="77" width="2" height="2" /></element>
<element ref="text_a"><bounds x="8" y="85.0" width="2" height="2" /></element>
<element ref="text_b"><bounds x="18" y="85.0" width="2" height="2" /></element>
<element ref="text_c"><bounds x="28" y="85.0" width="2" height="2" /></element>
<element ref="text_d"><bounds x="38" y="85.0" width="2" height="2" /></element>
<element ref="text_e"><bounds x="48" y="85.0" width="2" height="2" /></element>
<element ref="text_f"><bounds x="58" y="85.0" width="2" height="2" /></element>
<element ref="text_g"><bounds x="68" y="85.0" width="2" height="2" /></element>
<element ref="text_h"><bounds x="78" y="85.0" width="2" height="2" /></element>
<group ref="sb_ui"><bounds x="-9.5" y="3" width="10" height="80" /></group>
<!-- chessboard leds -->
<element name="7.1" ref="ledr"><bounds x="2.4" y="7" width="0.8" height="2" /></element>

View File

@ -53,11 +53,10 @@ public:
// machine configs
void cexpert(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(switch_cpu_freq) { set_cpu_freq(); }
DECLARE_INPUT_CHANGED_MEMBER(change_cpu_freq);
protected:
virtual void machine_start() override;
virtual void machine_reset() override { set_cpu_freq(); }
private:
// devices/pointers
@ -70,8 +69,6 @@ private:
u8 m_inp_mux = 0;
u8 m_led_select = 0;
void set_cpu_freq();
// address maps
void main_map(address_map &map);
@ -90,10 +87,10 @@ void cexpert_state::machine_start()
save_item(NAME(m_led_select));
}
void cexpert_state::set_cpu_freq()
INPUT_CHANGED_MEMBER(cexpert_state::change_cpu_freq)
{
// old version had a 4MHz CPU
m_maincpu->set_unscaled_clock((ioport("FAKE")->read() & 1) ? (10_MHz_XTAL/2) : (8_MHz_XTAL/2));
m_maincpu->set_unscaled_clock((newval & 1) ? (10_MHz_XTAL/2) : (8_MHz_XTAL/2));
}
@ -207,8 +204,8 @@ static INPUT_PORTS_START( cexpert )
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("Go")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Take Back / Restore")
PORT_START("FAKE")
PORT_CONFNAME( 0x01, 0x01, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, cexpert_state, switch_cpu_freq, 0) // factory set
PORT_START("CPU")
PORT_CONFNAME( 0x01, 0x01, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, cexpert_state, change_cpu_freq, 0) // factory set
PORT_CONFSETTING( 0x00, "4MHz" )
PORT_CONFSETTING( 0x01, "5MHz" )
INPUT_PORTS_END

View File

@ -109,9 +109,10 @@ void micro2_state::machine_start()
void micro2_state::set_cpu_freq()
{
// known CPU speeds: 6MHz(XTAL), 6MHz(LC), 12MHz(LC)
u32 clock = (ioport("FAKE")->read() & 1) ? 12'000'000 : 6'000'000;
m_board->set_delay(attotime::from_ticks(2'000'000, clock)); // see TODO
m_maincpu->set_unscaled_clock(clock);
u32 freq = (ioport("CPU")->read() & 1) ? 12'000'000 : 6'000'000;
m_maincpu->set_unscaled_clock(freq);
m_board->set_delay(attotime::from_ticks(2'000'000, freq)); // see TODO
}
@ -181,7 +182,7 @@ static INPUT_PORTS_START( micro2 )
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CODE(KEYCODE_T) PORT_NAME("Take Back / King")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_G) PORT_NAME("Go")
PORT_START("FAKE")
PORT_START("CPU")
PORT_CONFNAME( 0x01, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, micro2_state, change_cpu_freq, 0) // factory set
PORT_CONFSETTING( 0x00, "6MHz (original)" )
PORT_CONFSETTING( 0x01, "12MHz (Octo)" )

View File

@ -84,7 +84,7 @@ public:
void init_sexpert();
DECLARE_INPUT_CHANGED_MEMBER(sexpert_cpu_freq) { sexpert_set_cpu_freq(); }
DECLARE_INPUT_CHANGED_MEMBER(change_cpu_freq);
protected:
virtual void machine_start() override;
@ -107,8 +107,6 @@ protected:
u8 m_lcd_control = 0;
u8 m_lcd_data = 0;
void sexpert_set_cpu_freq();
// address maps
void sexpert_map(address_map &map);
@ -134,15 +132,14 @@ void sexpert_state::machine_start()
save_item(NAME(m_lcd_data));
}
void sexpert_state::sexpert_set_cpu_freq()
INPUT_CHANGED_MEMBER(sexpert_state::change_cpu_freq)
{
// machines were released with either 5MHz or 6MHz CPU
m_maincpu->set_unscaled_clock((ioport("FAKE")->read() & 1) ? (12_MHz_XTAL/2) : (10_MHz_XTAL/2));
m_maincpu->set_unscaled_clock((newval & 1) ? (12_MHz_XTAL/2) : (10_MHz_XTAL/2));
}
void sexpert_state::machine_reset()
{
sexpert_set_cpu_freq();
m_rombank->set_entry(0);
}
@ -396,8 +393,8 @@ static INPUT_PORTS_START( sexpert )
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("Player/Player / Gambit Book / King")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_NAME("Print Board / Interface")
PORT_START("FAKE")
PORT_CONFNAME( 0x01, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, sexpert_state, sexpert_cpu_freq, 0) // factory set
PORT_START("CPU")
PORT_CONFNAME( 0x01, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, sexpert_state, change_cpu_freq, 0) // factory set
PORT_CONFSETTING( 0x00, "5MHz" )
PORT_CONFSETTING( 0x01, "6MHz" )
INPUT_PORTS_END
@ -405,8 +402,8 @@ INPUT_PORTS_END
static INPUT_PORTS_START( sexpertb )
PORT_INCLUDE( sexpert )
PORT_MODIFY("FAKE") // default CPU for B/C is W65C802P-6 @ 6MHz
PORT_CONFNAME( 0x01, 0x01, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, sexpert_state, sexpert_cpu_freq, 0) // factory set
PORT_MODIFY("CPU") // default CPU for B/C is W65C802P-6 @ 6MHz
PORT_CONFNAME( 0x01, 0x01, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, sexpert_state, change_cpu_freq, 0) // factory set
PORT_CONFSETTING( 0x00, "5MHz" )
PORT_CONFSETTING( 0x01, "6MHz" )
INPUT_PORTS_END

View File

@ -106,12 +106,11 @@ public:
void compan2(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(power_off);
DECLARE_INPUT_CHANGED_MEMBER(change_cpu_freq) { set_cpu_freq(); }
DECLARE_INPUT_CHANGED_MEMBER(change_cpu_freq);
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
DECLARE_MACHINE_RESET(compan2) { machine_reset(); set_cpu_freq(); }
private:
// devices/pointers
@ -133,7 +132,6 @@ private:
u8 power_r();
void led_w(u8 data);
void set_cpu_freq();
TIMER_CALLBACK_MEMBER(set_pin);
};
@ -147,10 +145,10 @@ void compan2_state::machine_start()
save_item(NAME(m_inp_mux));
}
void compan2_state::set_cpu_freq()
INPUT_CHANGED_MEMBER(compan2_state::change_cpu_freq)
{
// Concord II MCU speed is around twice higher
m_maincpu->set_unscaled_clock((ioport("FAKE")->read() & 1) ? 7'200'000 : 4'000'000);
m_maincpu->set_unscaled_clock((newval & 1) ? 7'200'000 : 4'000'000);
}
@ -328,7 +326,7 @@ static INPUT_PORTS_START( compan2 )
PORT_MODIFY("IN.2")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_CUSTOM) // button config
PORT_START("FAKE")
PORT_START("CPU")
PORT_CONFNAME( 0x01, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, compan2_state, change_cpu_freq, 0) // factory set
PORT_CONFSETTING( 0x00, "4MHz (original)" )
PORT_CONFSETTING( 0x01, "7.2MHz (Concord II)" )
@ -383,9 +381,6 @@ void compan2_state::expchess(machine_config &config)
void compan2_state::compan2(machine_config &config)
{
expchess(config);
// basic machine hardware
MCFG_MACHINE_RESET_OVERRIDE(compan2_state, compan2)
config.set_default_layout(layout_saitek_companion2);
}

View File

@ -260,7 +260,7 @@ INPUT_PORTS_END
void corona_state::corona(machine_config &config)
{
// basic machine hardware
M65C02(config, m_maincpu, 5_MHz_XTAL); // see set_cpu_freq
M65C02(config, m_maincpu, 5_MHz_XTAL); // see change_cpu_freq
m_maincpu->set_addrmap(AS_PROGRAM, &corona_state::main_map);
m_maincpu->set_periodic_int(FUNC(corona_state::irq0_line_hold), attotime::from_hz(183));

View File

@ -144,16 +144,14 @@ void saitek_stratos_state::machine_reset()
m_lcd_ready = false;
m_lcd_count = 0;
clear_lcd();
set_cpu_freq();
}
void saitek_stratos_state::set_cpu_freq()
INPUT_CHANGED_MEMBER(saitek_stratos_state::change_cpu_freq)
{
// known officially* released CPU speeds: 5MHz, 5.626MHz, 5.67MHz
// *not including reseller overclocks, user mods, or the "Turbo Kit"
static const XTAL xtal[3] = { 5_MHz_XTAL, 5.626_MHz_XTAL, 5.67_MHz_XTAL };
m_maincpu->set_unscaled_clock(xtal[ioport("FAKE")->read() % 3]);
m_maincpu->set_unscaled_clock(xtal[newval % 3]);
}
// stratos_state
@ -420,8 +418,8 @@ INPUT_PORTS_START( saitek_stratos )
PORT_START("RESET")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_CHANGED_MEMBER(DEVICE_SELF, saitek_stratos_state, go_button, 0) PORT_NAME("Go")
PORT_START("FAKE")
PORT_CONFNAME( 0x03, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, saitek_stratos_state, switch_cpu_freq, 0) // factory set
PORT_START("CPU")
PORT_CONFNAME( 0x03, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, saitek_stratos_state, change_cpu_freq, 0) // factory set
PORT_CONFSETTING( 0x00, "5MHz" )
PORT_CONFSETTING( 0x01, "5.626MHz" )
PORT_CONFSETTING( 0x02, "5.67MHz" )
@ -490,7 +488,7 @@ INPUT_PORTS_END
void stratos_state::stratos(machine_config &config)
{
// basic machine hardware
M65C02(config, m_maincpu, 5_MHz_XTAL); // see set_cpu_freq
M65C02(config, m_maincpu, 5_MHz_XTAL); // see change_cpu_freq
m_maincpu->set_addrmap(AS_PROGRAM, &stratos_state::main_map);
m_maincpu->set_periodic_int(FUNC(stratos_state::irq0_line_hold), attotime::from_hz(76));

View File

@ -28,7 +28,7 @@ public:
m_out_lcd(*this, "lcd%u.%u.%u", 0U, 0U, 0U)
{ }
DECLARE_INPUT_CHANGED_MEMBER(switch_cpu_freq) { set_cpu_freq(); }
DECLARE_INPUT_CHANGED_MEMBER(change_cpu_freq);
DECLARE_INPUT_CHANGED_MEMBER(go_button);
protected:
@ -52,7 +52,6 @@ protected:
void clear_lcd() { std::fill(std::begin(m_lcd_data), std::end(m_lcd_data), 0); }
void update_lcd();
void power_off();
void set_cpu_freq();
void lcd_data_w(u8 data);
};