mirror of
https://github.com/holub/mame
synced 2025-10-07 17:27:06 +03:00
fidel6502: small optimization (nw)
This commit is contained in:
parent
6c92f7e9ed
commit
95d60edf0a
@ -537,6 +537,7 @@ private:
|
|||||||
DECLARE_READ8_MEMBER(div_trampoline_r);
|
DECLARE_READ8_MEMBER(div_trampoline_r);
|
||||||
void div_set_cpu_freq(offs_t offset);
|
void div_set_cpu_freq(offs_t offset);
|
||||||
void div_trampoline(address_map &map);
|
void div_trampoline(address_map &map);
|
||||||
|
u16 m_div_status;
|
||||||
|
|
||||||
// CSC, SU9, RSC
|
// CSC, SU9, RSC
|
||||||
void csc_prepare_display();
|
void csc_prepare_display();
|
||||||
@ -616,9 +617,32 @@ private:
|
|||||||
DECLARE_WRITE8_MEMBER(kishon_control_w);
|
DECLARE_WRITE8_MEMBER(kishon_control_w);
|
||||||
void chesster_map(address_map &map);
|
void chesster_map(address_map &map);
|
||||||
void kishon_map(address_map &map);
|
void kishon_map(address_map &map);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void machine_start() override;
|
||||||
|
virtual void machine_reset() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// machine start/reset
|
||||||
|
|
||||||
|
void fidel6502_state::machine_start()
|
||||||
|
{
|
||||||
|
fidelbase_state::machine_start();
|
||||||
|
|
||||||
|
// register for savestates
|
||||||
|
save_item(NAME(m_div_status));
|
||||||
|
}
|
||||||
|
|
||||||
|
void fidel6502_state::machine_reset()
|
||||||
|
{
|
||||||
|
fidelbase_state::machine_reset();
|
||||||
|
|
||||||
|
m_div_status = ~0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
|
||||||
Helper Functions
|
Helper Functions
|
||||||
@ -629,13 +653,18 @@ private:
|
|||||||
|
|
||||||
void fidel6502_state::div_set_cpu_freq(offs_t offset)
|
void fidel6502_state::div_set_cpu_freq(offs_t offset)
|
||||||
{
|
{
|
||||||
if (m_div_config->read() & 2)
|
static const u16 mask = 0x6000;
|
||||||
|
u16 status = (offset & mask) | m_div_config->read();
|
||||||
|
|
||||||
|
if (status != m_div_status && status & 2)
|
||||||
{
|
{
|
||||||
// when a13/a14 is high, XTAL goes through divider(s)
|
// when a13/a14 is high, XTAL goes through divider(s)
|
||||||
// (depending on factory-set jumper, either one or two 7474)
|
// (depending on factory-set jumper, either one or two 7474)
|
||||||
float div = (m_div_config->read() & 1) ? 0.25 : 0.5;
|
float div = (status & 1) ? 0.25 : 0.5;
|
||||||
m_maincpu->set_clock_scale((offset & 0x6000) ? div : 1.0);
|
m_maincpu->set_clock_scale((offset & mask) ? div : 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_div_status = status;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER(fidel6502_state::div_trampoline_w)
|
WRITE8_MEMBER(fidel6502_state::div_trampoline_w)
|
||||||
@ -709,7 +738,7 @@ void fidel6502_state::su9_set_cpu_freq()
|
|||||||
|
|
||||||
MACHINE_RESET_MEMBER(fidel6502_state, su9)
|
MACHINE_RESET_MEMBER(fidel6502_state, su9)
|
||||||
{
|
{
|
||||||
fidelbase_state::machine_reset();
|
fidel6502_state::machine_reset();
|
||||||
su9_set_cpu_freq();
|
su9_set_cpu_freq();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -961,7 +990,7 @@ void fidel6502_state::sc9c_set_cpu_freq()
|
|||||||
|
|
||||||
MACHINE_RESET_MEMBER(fidel6502_state, sc9c)
|
MACHINE_RESET_MEMBER(fidel6502_state, sc9c)
|
||||||
{
|
{
|
||||||
fidelbase_state::machine_reset();
|
fidel6502_state::machine_reset();
|
||||||
sc9c_set_cpu_freq();
|
sc9c_set_cpu_freq();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1206,7 +1235,7 @@ void fidel6502_state::init_fdesdis()
|
|||||||
|
|
||||||
MACHINE_RESET_MEMBER(fidel6502_state, fphantom)
|
MACHINE_RESET_MEMBER(fidel6502_state, fphantom)
|
||||||
{
|
{
|
||||||
fidelbase_state::machine_reset();
|
fidel6502_state::machine_reset();
|
||||||
m_rombank->set_entry(0);
|
m_rombank->set_entry(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user