fidel6502: separate fdesdis class (nw)

This commit is contained in:
hap 2019-02-17 00:34:24 +01:00
parent 1c3ceca74e
commit 6638f07f84

View File

@ -514,10 +514,6 @@ public:
void fdes2000(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(fexcelv_bankswitch);
void fdes2000d(machine_config &config);
void fdes2100d(machine_config &config);
void init_fdesdis();
void fphantom(machine_config &config);
void init_fphantom();
@ -601,11 +597,6 @@ private:
void fexcelb_map(address_map &map);
void fexcelp_map(address_map &map);
// Designer Display
DECLARE_WRITE8_MEMBER(fdesdis_control_w);
DECLARE_WRITE8_MEMBER(fdesdis_lcd_w);
DECLARE_READ8_MEMBER(fdesdis_input_r);
void fdesdis_map(address_map &map);
// Phantom
DECLARE_MACHINE_RESET(fphantom);
@ -643,6 +634,28 @@ void fidel6502_state::machine_reset()
class desdis_state : public fidelbase_state
{
public:
desdis_state(const machine_config &mconfig, device_type type, const char *tag) :
fidelbase_state(mconfig, type, tag)
{ }
void fdes2000d(machine_config &config);
void fdes2100d(machine_config &config);
void init_fdes2100d();
private:
void fdes2100d_map(address_map &map);
// I/O handlers
DECLARE_WRITE8_MEMBER(control_w);
DECLARE_WRITE8_MEMBER(lcd_w);
DECLARE_READ8_MEMBER(input_r);
};
/***************************************************************************
Helper Functions
@ -1169,7 +1182,7 @@ READ8_MEMBER(fidel6502_state::fexcel_ttl_r)
// TTL/generic
WRITE8_MEMBER(fidel6502_state::fdesdis_control_w)
WRITE8_MEMBER(desdis_state::control_w)
{
u8 q3_old = m_led_select & 8;
@ -1204,7 +1217,7 @@ WRITE8_MEMBER(fidel6502_state::fdesdis_control_w)
display_update();
}
WRITE8_MEMBER(fidel6502_state::fdesdis_lcd_w)
WRITE8_MEMBER(desdis_state::lcd_w)
{
// a0-a2,d0-d3: 4*74259 to lcd digit segments
u32 mask = bitswap<8>(1 << offset,3,7,6,0,1,2,4,5);
@ -1215,13 +1228,13 @@ WRITE8_MEMBER(fidel6502_state::fdesdis_lcd_w)
}
}
READ8_MEMBER(fidel6502_state::fdesdis_input_r)
READ8_MEMBER(desdis_state::input_r)
{
// a0-a2,d7: multiplexed inputs (active low)
return (read_inputs(9) >> offset & 1) ? 0 : 0x80;
}
void fidel6502_state::init_fdesdis()
void desdis_state::init_fdes2100d()
{
m_rombank->configure_entries(0, 2, memregion("rombank")->base(), 0x4000);
}
@ -1451,12 +1464,12 @@ void fidel6502_state::fexcelb_map(address_map &map)
// Designer Display, Phantom, Chesster
void fidel6502_state::fdesdis_map(address_map &map)
void desdis_state::fdes2100d_map(address_map &map)
{
map(0x0000, 0x1fff).ram();
map(0x2000, 0x2007).mirror(0x1ff8).rw(FUNC(fidel6502_state::fdesdis_input_r), FUNC(fidel6502_state::fdesdis_control_w));
map(0x2000, 0x2007).mirror(0x1ff8).rw(FUNC(desdis_state::input_r), FUNC(desdis_state::control_w));
map(0x4000, 0x7fff).bankr("rombank");
map(0x6000, 0x6007).mirror(0x1ff8).w(FUNC(fidel6502_state::fdesdis_lcd_w));
map(0x6000, 0x6007).mirror(0x1ff8).w(FUNC(desdis_state::lcd_w));
map(0x8000, 0xffff).rom();
}
@ -1802,7 +1815,7 @@ static INPUT_PORTS_START( fdes )
INPUT_PORTS_END
static INPUT_PORTS_START( fdesdis )
static INPUT_PORTS_START( desdis )
PORT_INCLUDE( fidel_cb_buttons )
PORT_START("IN.8")
@ -1817,13 +1830,17 @@ static INPUT_PORTS_START( fdesdis )
INPUT_PORTS_END
static INPUT_PORTS_START( chesster )
PORT_INCLUDE( fdesdis )
PORT_INCLUDE( fidel_cb_buttons )
PORT_MODIFY("IN.8")
PORT_START("IN.8")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("Clear")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_NAME("Move / No")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_NAME("Hint / Yes")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_NAME("Take Back / Repeat")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_NAME("Level / New")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_NAME("Option / Replay")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("Verify / Problem")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_NAME("Shift")
INPUT_PORTS_END
@ -2214,16 +2231,16 @@ void fidel6502_state::fexceld(machine_config &config)
config.set_default_layout(layout_fidel_exd);
}
void fidel6502_state::fdes2100d(machine_config &config)
void desdis_state::fdes2100d(machine_config &config)
{
/* basic machine hardware */
M65C02(config, m_maincpu, 6_MHz_XTAL); // W65C02P-6
m_maincpu->set_addrmap(AS_PROGRAM, &fidel6502_state::fdesdis_map);
m_maincpu->set_addrmap(AS_PROGRAM, &desdis_state::fdes2100d_map);
const attotime irq_period = attotime::from_hz(630); // from 556 timer (22nF, 102K, 1K)
TIMER(config, m_irq_on).configure_periodic(FUNC(fidel6502_state::irq_on<M6502_IRQ_LINE>), irq_period);
TIMER(config, m_irq_on).configure_periodic(FUNC(desdis_state::irq_on<M6502_IRQ_LINE>), irq_period);
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(15250)); // active for 15.25us
TIMER(config, "irq_off").configure_periodic(FUNC(fidel6502_state::irq_off<M6502_IRQ_LINE>), irq_period);
TIMER(config, "irq_off").configure_periodic(FUNC(desdis_state::irq_off<M6502_IRQ_LINE>), irq_period);
TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1));
config.set_default_layout(layout_fidel_desdis);
@ -2236,13 +2253,13 @@ void fidel6502_state::fdes2100d(machine_config &config)
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
}
void fidel6502_state::fdes2000d(machine_config &config)
void desdis_state::fdes2000d(machine_config &config)
{
fdes2100d(config);
/* basic machine hardware */
R65C02(config.replace(), m_maincpu, 3_MHz_XTAL); // R65C02P3
m_maincpu->set_addrmap(AS_PROGRAM, &fidel6502_state::fdesdis_map);
m_maincpu->set_addrmap(AS_PROGRAM, &desdis_state::fdes2100d_map);
}
void fidel6502_state::fphantom(machine_config &config)
@ -2907,8 +2924,8 @@ CONS( 1986, granits, fexcelp, 0, granits, fexcel, fidel6502_state, empt
CONS( 1988, fdes2000, fexcelp, 0, fdes2000, fdes, fidel6502_state, empty_init, "Fidelity Electronics", "Designer 2000", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) // Excellence series hardware
CONS( 1988, fdes2100, fexcelp, 0, fdes2100, fdes, fidel6502_state, empty_init, "Fidelity Electronics", "Designer 2100", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS ) // "
CONS( 1988, fdes2100d, 0, 0, fdes2100d, fdesdis, fidel6502_state, init_fdesdis, "Fidelity Electronics", "Designer 2100 Display (rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1988, fdes2000d, fdes2100d,0, fdes2000d, fdesdis, fidel6502_state, init_fdesdis, "Fidelity Electronics", "Designer 2000 Display", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1988, fdes2100d, 0, 0, fdes2100d, desdis, desdis_state, init_fdes2100d, "Fidelity Electronics", "Designer 2100 Display (rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1988, fdes2000d, fdes2100d,0, fdes2000d, desdis, desdis_state, init_fdes2100d, "Fidelity Electronics", "Designer 2000 Display", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
CONS( 1988, fphantom, 0, 0, fphantom, fphantom, fidel6502_state, init_fphantom, "Fidelity Electronics", "Phantom (Fidelity)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_MECHANICAL | MACHINE_NOT_WORKING )