bml3: Partial bus modernization (nw)

This commit is contained in:
AJR 2019-01-26 13:04:28 -05:00
parent 07f0725d44
commit 6af25d6ca5
3 changed files with 15 additions and 46 deletions

View File

@ -102,13 +102,13 @@ bml3bus_device::bml3bus_device(const machine_config &mconfig, const char *tag, d
bml3bus_device::bml3bus_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, type, tag, owner, clock),
m_maincpu(*this, finder_base::DUMMY_TAG),
m_space(*this, finder_base::DUMMY_TAG, -1, 8),
m_out_nmi_cb(*this),
m_out_irq_cb(*this),
m_out_firq_cb(*this),
m_cputag(nullptr)
m_out_firq_cb(*this)
{
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------

View File

@ -20,18 +20,6 @@
// INTERFACE CONFIGURATION MACROS
//**************************************************************************
#define MCFG_BML3BUS_CPU(_cputag) \
downcast<bml3bus_device &>(*device).set_cputag(_cputag);
#define MCFG_BML3BUS_OUT_NMI_CB(_devcb) \
downcast<bml3bus_device &>(*device).set_out_nmi_callback(DEVCB_##_devcb);
#define MCFG_BML3BUS_OUT_IRQ_CB(_devcb) \
downcast<bml3bus_device &>(*device).set_out_irq_callback(DEVCB_##_devcb);
#define MCFG_BML3BUS_OUT_FIRQ_CB(_devcb) \
downcast<bml3bus_device &>(*device).set_out_firq_callback(DEVCB_##_devcb);
#define MCFG_BML3BUS_SLOT_ADD(_nbtag, _tag, _slot_intf, _def_slot) \
MCFG_DEVICE_ADD(_tag, BML3BUS_SLOT, 0) \
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
@ -83,10 +71,10 @@ public:
bml3bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// inline configuration
void set_cputag(const char *tag) { m_maincpu.set_tag(tag); }
template <class Object> devcb_base &set_out_nmi_callback(Object &&cb) { return m_out_nmi_cb.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_out_irq_callback(Object &&cb) { return m_out_irq_cb.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_out_firq_callback(Object &&cb) { return m_out_firq_cb.set_callback(std::forward<Object>(cb)); }
template <class Object> void set_space(Object &&tag, int spacenum) { m_space.set_tag(std::forward<Object>(tag), spacenum); }
auto nmi_callback() { return m_out_nmi_cb.bind(); }
auto irq_callback() { return m_out_irq_cb.bind(); }
auto firq_callback() { return m_out_firq_cb.bind(); }
void add_bml3bus_card(int slot, device_bml3bus_card_interface *card);
device_bml3bus_card_interface *get_bml3bus_card(int slot);
@ -99,7 +87,7 @@ public:
DECLARE_WRITE_LINE_MEMBER( irq_w );
DECLARE_WRITE_LINE_MEMBER( firq_w );
address_space &space() const { return m_maincpu->space(AS_PROGRAM); }
address_space &space() const { return *m_space; }
protected:
bml3bus_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
@ -109,14 +97,13 @@ protected:
virtual void device_reset() override;
// internal state
required_device<cpu_device> m_maincpu;
required_address_space m_space;
devcb_write_line m_out_nmi_cb;
devcb_write_line m_out_irq_cb;
devcb_write_line m_out_firq_cb;
device_bml3bus_card_interface *m_device_list[BML3BUS_MAX_SLOTS];
const char *m_cputag;
};

View File

@ -107,9 +107,6 @@ public:
DECLARE_WRITE8_MEMBER(bml3_firq_mask_w);
DECLARE_READ8_MEMBER(bml3_firq_status_r);
DECLARE_WRITE8_MEMBER(relay_w);
DECLARE_WRITE_LINE_MEMBER(bml3bus_nmi_w);
DECLARE_WRITE_LINE_MEMBER(bml3bus_irq_w);
DECLARE_WRITE_LINE_MEMBER(bml3bus_firq_w);
DECLARE_WRITE_LINE_MEMBER(bml3_acia_tx_w);
DECLARE_WRITE_LINE_MEMBER(bml3_acia_rts_w);
DECLARE_WRITE_LINE_MEMBER(bml3_acia_irq_w);
@ -386,21 +383,6 @@ READ8_MEMBER( bml3_state::bml3_firq_status_r )
return res;
}
WRITE_LINE_MEMBER(bml3_state::bml3bus_nmi_w)
{
m_maincpu->set_input_line(INPUT_LINE_NMI, state);
}
WRITE_LINE_MEMBER(bml3_state::bml3bus_irq_w)
{
m_maincpu->set_input_line(M6809_IRQ_LINE, state);
}
WRITE_LINE_MEMBER(bml3_state::bml3bus_firq_w)
{
m_maincpu->set_input_line(M6809_FIRQ_LINE, state);
}
void bml3_state::bml3_mem(address_map &map)
{
@ -959,7 +941,7 @@ static void bml3_cards(device_slot_interface &device)
MACHINE_CONFIG_START(bml3_state::bml3_common)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu",M6809, CPU_CLOCK)
MCFG_DEVICE_ADD(m_maincpu, MC6809, CPU_EXT_CLOCK)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", bml3_state, bml3_timer_firq)
// MCFG_DEVICE_PERIODIC_INT_DRIVER(bml3_state, bml3_firq, 45)
@ -1008,11 +990,11 @@ MACHINE_CONFIG_START(bml3_state::bml3_common)
SPEAKER_SOUND(config, "speaker").add_route(ALL_OUTPUTS, "mono", 0.50);
/* slot devices */
MCFG_DEVICE_ADD("bml3bus", BML3BUS, 0)
MCFG_BML3BUS_CPU("maincpu")
MCFG_BML3BUS_OUT_NMI_CB(WRITELINE(*this, bml3_state, bml3bus_nmi_w))
MCFG_BML3BUS_OUT_IRQ_CB(WRITELINE(*this, bml3_state, bml3bus_irq_w))
MCFG_BML3BUS_OUT_FIRQ_CB(WRITELINE(*this, bml3_state, bml3bus_firq_w))
bml3bus_device &bus(BML3BUS(config, "bml3bus", 0));
bus.set_space(m_maincpu, AS_PROGRAM);
bus.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI);
bus.irq_callback().set_inputline(m_maincpu, M6809_IRQ_LINE);
bus.firq_callback().set_inputline(m_maincpu, M6809_FIRQ_LINE);
/* Default to MP-1805 disk (3" or 5.25" SS/SD), as our MB-6892 ROM dump includes
the MP-1805 ROM.
User may want to switch this to MP-1802 (5.25" DS/DD).