mirror of
https://github.com/holub/mame
synced 2025-07-02 08:39:21 +03:00
fidelz80: get rid of unnneeded trampoline (nw)
This commit is contained in:
parent
ffe239a139
commit
d3403e2dce
@ -10,6 +10,7 @@ class clock_device : public device_t
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
auto signal_handler() { return m_signal_handler.bind(); }
|
auto signal_handler() { return m_signal_handler.bind(); }
|
||||||
|
DECLARE_READ_LINE_MEMBER(signal_r) { return m_signal; }
|
||||||
|
|
||||||
clock_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
clock_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||||
|
|
||||||
|
@ -288,7 +288,7 @@ P27 - row 3 through inverter
|
|||||||
PROG - I/O expander
|
PROG - I/O expander
|
||||||
|
|
||||||
T0 - optical card sensor (high = bright/reflective, low = dark/non reflective)
|
T0 - optical card sensor (high = bright/reflective, low = dark/non reflective)
|
||||||
T1 - connects to inverter, then nothing?
|
T1 - connects to inverter, then 5MHz/4
|
||||||
|
|
||||||
D8243C I/O expander:
|
D8243C I/O expander:
|
||||||
--------------------
|
--------------------
|
||||||
@ -525,8 +525,7 @@ public:
|
|||||||
m_i8243(*this, "i8243"),
|
m_i8243(*this, "i8243"),
|
||||||
m_beeper_off(*this, "beeper_off"),
|
m_beeper_off(*this, "beeper_off"),
|
||||||
m_beeper(*this, "beeper"),
|
m_beeper(*this, "beeper"),
|
||||||
m_irq_on(*this, "irq_on"),
|
m_irq_on(*this, "irq_on")
|
||||||
m_barcode(*this, "BARCODE")
|
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
void cc10(machine_config &config);
|
void cc10(machine_config &config);
|
||||||
@ -552,7 +551,6 @@ private:
|
|||||||
optional_device<timer_device> m_beeper_off;
|
optional_device<timer_device> m_beeper_off;
|
||||||
optional_device<beep_device> m_beeper;
|
optional_device<beep_device> m_beeper;
|
||||||
optional_device<timer_device> m_irq_on;
|
optional_device<timer_device> m_irq_on;
|
||||||
optional_ioport m_barcode;
|
|
||||||
|
|
||||||
TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE); }
|
TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE); }
|
||||||
TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); }
|
TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); }
|
||||||
@ -601,14 +599,10 @@ private:
|
|||||||
void vbrc_prepare_display();
|
void vbrc_prepare_display();
|
||||||
DECLARE_WRITE8_MEMBER(vbrc_speech_w);
|
DECLARE_WRITE8_MEMBER(vbrc_speech_w);
|
||||||
DECLARE_WRITE8_MEMBER(vbrc_mcu_p1_w);
|
DECLARE_WRITE8_MEMBER(vbrc_mcu_p1_w);
|
||||||
DECLARE_READ_LINE_MEMBER(vbrc_mcu_t0_r);
|
|
||||||
DECLARE_READ_LINE_MEMBER(vbrc_mcu_t1_r);
|
|
||||||
DECLARE_WRITE_LINE_MEMBER(vbrc_clock_w);
|
|
||||||
DECLARE_READ8_MEMBER(vbrc_mcu_p2_r);
|
DECLARE_READ8_MEMBER(vbrc_mcu_p2_r);
|
||||||
template<int P> void vbrc_ioexp_port_w(uint8_t data);
|
template<int P> void vbrc_ioexp_port_w(uint8_t data);
|
||||||
void vbrc_main_io(address_map &map);
|
void vbrc_main_io(address_map &map);
|
||||||
void vbrc_main_map(address_map &map);
|
void vbrc_main_map(address_map &map);
|
||||||
int m_vbrc_t1;
|
|
||||||
|
|
||||||
// DSC
|
// DSC
|
||||||
void dsc_prepare_display();
|
void dsc_prepare_display();
|
||||||
@ -616,9 +610,6 @@ private:
|
|||||||
DECLARE_WRITE8_MEMBER(dsc_select_w);
|
DECLARE_WRITE8_MEMBER(dsc_select_w);
|
||||||
DECLARE_READ8_MEMBER(dsc_input_r);
|
DECLARE_READ8_MEMBER(dsc_input_r);
|
||||||
void dsc_map(address_map &map);
|
void dsc_map(address_map &map);
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual void machine_start() override;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -664,17 +655,6 @@ void fidelbase_state::machine_reset()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void fidelz80_state::machine_start()
|
|
||||||
{
|
|
||||||
fidelbase_state::machine_start();
|
|
||||||
|
|
||||||
// zerofill
|
|
||||||
m_vbrc_t1 = 0;
|
|
||||||
|
|
||||||
// register for savestates
|
|
||||||
save_item(NAME(m_vbrc_t1));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
@ -1064,10 +1044,6 @@ void fidelz80_state::vbrc_prepare_display()
|
|||||||
u16 outdata = bitswap<16>(m_7seg_data,12,13,1,6,5,2,0,7,15,11,10,14,4,3,9,8);
|
u16 outdata = bitswap<16>(m_7seg_data,12,13,1,6,5,2,0,7,15,11,10,14,4,3,9,8);
|
||||||
set_display_segmask(0xff, 0x3fff);
|
set_display_segmask(0xff, 0x3fff);
|
||||||
display_matrix(16, 8, outdata, m_led_select);
|
display_matrix(16, 8, outdata, m_led_select);
|
||||||
|
|
||||||
// d14(13) is tone (not on speech model)
|
|
||||||
if (m_dac != nullptr)
|
|
||||||
m_dac->write(BIT(outdata, 14));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER(fidelz80_state::vbrc_speech_w)
|
WRITE8_MEMBER(fidelz80_state::vbrc_speech_w)
|
||||||
@ -1086,9 +1062,13 @@ WRITE8_MEMBER(fidelz80_state::vbrc_speech_w)
|
|||||||
template<int P>
|
template<int P>
|
||||||
void fidelz80_state::vbrc_ioexp_port_w(uint8_t data)
|
void fidelz80_state::vbrc_ioexp_port_w(uint8_t data)
|
||||||
{
|
{
|
||||||
// P4-P7: digit segment data
|
// P4x-P7x: digit segment data
|
||||||
m_7seg_data = (m_7seg_data & ~(0xf << (4*P))) | ((data & 0xf) << (4*P));
|
m_7seg_data = (m_7seg_data & ~(0xf << (4*P))) | ((data & 0xf) << (4*P));
|
||||||
vbrc_prepare_display();
|
vbrc_prepare_display();
|
||||||
|
|
||||||
|
// P71 is tone (not on speech model)
|
||||||
|
if (P == 3 && m_dac != nullptr)
|
||||||
|
m_dac->write(BIT(data, 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1108,23 +1088,6 @@ READ8_MEMBER(fidelz80_state::vbrc_mcu_p2_r)
|
|||||||
return (m_i8243->p2_r() & 0x0f) | (read_inputs(8) << 4 ^ 0xf0);
|
return (m_i8243->p2_r() & 0x0f) | (read_inputs(8) << 4 ^ 0xf0);
|
||||||
}
|
}
|
||||||
|
|
||||||
READ_LINE_MEMBER(fidelz80_state::vbrc_mcu_t0_r)
|
|
||||||
{
|
|
||||||
// T0: card scanner
|
|
||||||
return m_barcode->read();
|
|
||||||
}
|
|
||||||
|
|
||||||
READ_LINE_MEMBER(fidelz80_state::vbrc_mcu_t1_r)
|
|
||||||
{
|
|
||||||
// T1: master clock / 4
|
|
||||||
return m_vbrc_t1;
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE_LINE_MEMBER(fidelz80_state::vbrc_clock_w)
|
|
||||||
{
|
|
||||||
m_vbrc_t1 = state;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
@ -1922,10 +1885,11 @@ void fidelz80_state::brc_base(machine_config &config)
|
|||||||
m_mcu->p2_in_cb().set(FUNC(fidelz80_state::vbrc_mcu_p2_r));
|
m_mcu->p2_in_cb().set(FUNC(fidelz80_state::vbrc_mcu_p2_r));
|
||||||
m_mcu->p2_out_cb().set(m_i8243, FUNC(i8243_device::p2_w));
|
m_mcu->p2_out_cb().set(m_i8243, FUNC(i8243_device::p2_w));
|
||||||
m_mcu->prog_out_cb().set(m_i8243, FUNC(i8243_device::prog_w));
|
m_mcu->prog_out_cb().set(m_i8243, FUNC(i8243_device::prog_w));
|
||||||
m_mcu->t0_in_cb().set(FUNC(fidelz80_state::vbrc_mcu_t0_r));
|
m_mcu->t0_in_cb().set_ioport("BARCODE"); // card scanner
|
||||||
m_mcu->t1_in_cb().set(FUNC(fidelz80_state::vbrc_mcu_t1_r));
|
|
||||||
|
|
||||||
CLOCK(config, "t1_clock", 5_MHz_XTAL/4).signal_handler().set(FUNC(fidelz80_state::vbrc_clock_w));
|
// MCU T1 tied to master clock / 4
|
||||||
|
CLOCK(config, "t1_clock", 5_MHz_XTAL/4).signal_handler().set_nop();
|
||||||
|
m_mcu->t1_in_cb().set("t1_clock", FUNC(clock_device::signal_r)).invert();
|
||||||
|
|
||||||
I8243(config, m_i8243);
|
I8243(config, m_i8243);
|
||||||
m_i8243->p4_out_cb().set(FUNC(fidelz80_state::vbrc_ioexp_port_w<0>));
|
m_i8243->p4_out_cb().set(FUNC(fidelz80_state::vbrc_ioexp_port_w<0>));
|
||||||
@ -2209,8 +2173,8 @@ CONS( 1980, vscsp, vsc, 0, vsc, vscsp, fidelz80_state, empty_init, "Fi
|
|||||||
CONS( 1980, vscg, vsc, 0, vsc, vscg, fidelz80_state, empty_init, "Fidelity Electronics", "Voice Sensory Chess Challenger (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
CONS( 1980, vscg, vsc, 0, vsc, vscg, fidelz80_state, empty_init, "Fidelity Electronics", "Voice Sensory Chess Challenger (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||||
CONS( 1980, vscfr, vsc, 0, vsc, vscfr, fidelz80_state, empty_init, "Fidelity Electronics", "Voice Sensory Chess Challenger (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
CONS( 1980, vscfr, vsc, 0, vsc, vscfr, fidelz80_state, empty_init, "Fidelity Electronics", "Voice Sensory Chess Challenger (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||||
|
|
||||||
CONS( 1980, vbrc, 0, 0, vbrc, vbrc, fidelz80_state, empty_init, "Fidelity Electronics", "Voice Bridge Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NOT_WORKING )
|
CONS( 1980, vbrc, 0, 0, vbrc, vbrc, fidelz80_state, empty_init, "Fidelity Electronics", "Voice Bridge Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_NOT_WORKING )
|
||||||
CONS( 1980, bridgeca, vbrc, 0, ubc, vbrc, fidelz80_state, empty_init, "Fidelity Electronics", "Advanced Bridge Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NOT_WORKING )
|
CONS( 1980, bridgeca, vbrc, 0, ubc, vbrc, fidelz80_state, empty_init, "Fidelity Electronics", "Advanced Bridge Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_NOT_WORKING )
|
||||||
CONS( 1982, bridgec3, 0, 0, bv3, bv3, fidelz80_state, empty_init, "Fidelity Electronics", "Bridge Challenger III", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NOT_WORKING )
|
CONS( 1982, bridgec3, 0, 0, bv3, bv3, fidelz80_state, empty_init, "Fidelity Electronics", "Bridge Challenger III", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_NOT_WORKING )
|
||||||
|
|
||||||
CONS( 1981, damesc, 0, 0, dsc, dsc, fidelz80_state, empty_init, "Fidelity Electronics", "Dame Sensory Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
CONS( 1981, damesc, 0, 0, dsc, dsc, fidelz80_state, empty_init, "Fidelity Electronics", "Dame Sensory Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||||
|
@ -127,19 +127,9 @@ READ8_MEMBER(novag68k_state::diablo68k_input2_r)
|
|||||||
|
|
||||||
WRITE8_MEMBER(novag68k_state::scorpio68k_control_w)
|
WRITE8_MEMBER(novag68k_state::scorpio68k_control_w)
|
||||||
{
|
{
|
||||||
// d0: HD44780 E
|
// d2,d3: led data, rest same as diablo
|
||||||
// d1: HD44780 RS
|
m_led_data = ~data >> 2 & 3;
|
||||||
if (m_lcd_control & ~data & 1)
|
diablo68k_control_w(space, offset, data);
|
||||||
m_lcd->write(m_lcd_control >> 1 & 1, m_lcd_data);
|
|
||||||
m_lcd_control = data & 3;
|
|
||||||
|
|
||||||
// d7: enable beeper
|
|
||||||
m_beeper->set_state(data >> 7 & 1);
|
|
||||||
|
|
||||||
// d4-d6: input mux, led select
|
|
||||||
// d2,d3: led data
|
|
||||||
m_inp_mux = 1 << (data >> 4 & 0x7) & 0xff;
|
|
||||||
display_matrix(2, 8, ~data >> 2 & 3, m_inp_mux);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user