mirror of
https://github.com/holub/mame
synced 2025-04-25 09:50:04 +03:00
misc: no need to always change cpuclock at reset when non-default port_changed takes care of it
This commit is contained in:
parent
14d90d4853
commit
881df52443
@ -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" )
|
||||
|
@ -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
|
||||
|
@ -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" )
|
||||
|
@ -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();
|
||||
};
|
||||
|
||||
|
||||
|
@ -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)" )
|
||||
|
@ -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
|
||||
|
@ -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)" )
|
||||
|
@ -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 )
|
||||
|
@ -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)" )
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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)" )
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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
|
||||
|
@ -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)" )
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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));
|
||||
|
||||
|
@ -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));
|
||||
|
||||
|
@ -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);
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user