mirror of
https://github.com/holub/mame
synced 2025-04-24 09:20:02 +03:00
bbc: reinstated interrupt trampolines (nw)
This commit is contained in:
parent
775b9ed3cd
commit
5ed2fafba4
@ -810,6 +810,15 @@ static SLOT_INTERFACE_START( bbc_floppies_35 )
|
||||
SLOT_INTERFACE("qd", FLOPPY_35_DD)
|
||||
SLOT_INTERFACE_END
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(bbc_state::adlc_irq_w)
|
||||
{
|
||||
m_adlc_irq = state;
|
||||
|
||||
bbc_update_nmi();
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER(bbc_state::econet_clk_w)
|
||||
{
|
||||
m_adlc->rxc_w(state);
|
||||
@ -906,7 +915,7 @@ static MACHINE_CONFIG_START( bbca, bbc_state )
|
||||
MCFG_DEVICE_ADD("acia6850", ACIA6850, 0)
|
||||
MCFG_ACIA6850_TXD_HANDLER(WRITELINE(bbc_state, bbc_txd_w))
|
||||
MCFG_ACIA6850_RTS_HANDLER(WRITELINE(bbc_state, bbc_rts_w))
|
||||
MCFG_ACIA6850_IRQ_HANDLER(INPUTLINE("maincpu", M6502_IRQ_LINE))
|
||||
MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(bbc_state, bbcb_acia6850_irq_w))
|
||||
|
||||
MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, nullptr)
|
||||
MCFG_RS232_RXD_HANDLER(WRITELINE(bbc_state, write_rxd_serial))
|
||||
@ -922,7 +931,7 @@ static MACHINE_CONFIG_START( bbca, bbc_state )
|
||||
MCFG_VIA6522_READPB_HANDLER(READ8(bbc_state, bbcb_via_system_read_portb))
|
||||
MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(bbc_state, bbcb_via_system_write_porta))
|
||||
MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(bbc_state, bbcb_via_system_write_portb))
|
||||
MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("maincpu", M6502_IRQ_LINE))
|
||||
MCFG_VIA6522_IRQ_HANDLER(WRITELINE(bbc_state, bbcb_via_system_irq_w))
|
||||
|
||||
/* EPROM sockets */
|
||||
MCFG_FRAGMENT_ADD(bbc_eprom_sockets)
|
||||
@ -954,7 +963,7 @@ static MACHINE_CONFIG_DERIVED( bbcb, bbca )
|
||||
MCFG_VIA6522_WRITEPA_HANDLER(DEVWRITE8("cent_data_out", output_latch_device, write))
|
||||
MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(bbc_state, bbcb_via_user_write_portb))
|
||||
MCFG_VIA6522_CA2_HANDLER(DEVWRITELINE("centronics", centronics_device, write_strobe))
|
||||
MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("maincpu", M6502_IRQ_LINE))
|
||||
MCFG_VIA6522_IRQ_HANDLER(WRITELINE(bbc_state, bbcb_via_user_irq_w))
|
||||
|
||||
/* adc */
|
||||
MCFG_DEVICE_ADD("upd7002", UPD7002, 0)
|
||||
@ -968,7 +977,7 @@ static MACHINE_CONFIG_DERIVED( bbcb, bbca )
|
||||
|
||||
/* fdc */
|
||||
MCFG_DEVICE_ADD("i8271", I8271, 0)
|
||||
MCFG_I8271_IRQ_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI))
|
||||
MCFG_I8271_IRQ_CALLBACK(WRITELINE(bbc_state, fdc_intrq_w))
|
||||
MCFG_I8271_HDL_CALLBACK(WRITELINE(bbc_state, motor_w))
|
||||
MCFG_I8271_OPT_CALLBACK(WRITELINE(bbc_state, side_w))
|
||||
MCFG_FLOPPY_DRIVE_ADD("i8271:0", bbc_floppies_525, "qd", bbc_state::floppy_formats_bbc)
|
||||
@ -979,7 +988,7 @@ static MACHINE_CONFIG_DERIVED( bbcb, bbca )
|
||||
/* econet */
|
||||
MCFG_DEVICE_ADD("mc6854", MC6854, 0)
|
||||
MCFG_MC6854_OUT_TXD_CB(DEVWRITELINE(ECONET_TAG, econet_device, data_w))
|
||||
MCFG_MC6854_OUT_IRQ_CB(INPUTLINE("maincpu", M6502_NMI_LINE))
|
||||
MCFG_MC6854_OUT_IRQ_CB(WRITELINE(bbc_state, adlc_irq_w))
|
||||
MCFG_ECONET_ADD()
|
||||
MCFG_ECONET_CLK_CALLBACK(WRITELINE(bbc_state, econet_clk_w))
|
||||
MCFG_ECONET_DATA_CALLBACK(DEVWRITELINE("mc6854", mc6854_device, set_rx))
|
||||
@ -1296,7 +1305,7 @@ static MACHINE_CONFIG_START( bbcm, bbc_state )
|
||||
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY)
|
||||
MCFG_CASSETTE_INTERFACE("bbc_cass")
|
||||
|
||||
// 2 x EPROM sockets (32K) in BBC-Master
|
||||
// 2 x cartridge sockets in BBC-Master
|
||||
MCFG_GENERIC_SOCKET_ADD("exp_rom1", generic_plain_slot, "bbcm_cart")
|
||||
MCFG_GENERIC_LOAD(bbc_state, bbcm_exp1_load)
|
||||
|
||||
@ -1319,7 +1328,7 @@ static MACHINE_CONFIG_START( bbcm, bbc_state )
|
||||
MCFG_DEVICE_ADD("acia6850", ACIA6850, 0)
|
||||
MCFG_ACIA6850_TXD_HANDLER(WRITELINE(bbc_state, bbc_txd_w))
|
||||
MCFG_ACIA6850_RTS_HANDLER(WRITELINE(bbc_state, bbc_rts_w))
|
||||
MCFG_ACIA6850_IRQ_HANDLER(INPUTLINE("maincpu", M6502_IRQ_LINE))
|
||||
MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(bbc_state, bbcb_acia6850_irq_w))
|
||||
|
||||
MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, nullptr)
|
||||
MCFG_RS232_RXD_HANDLER(WRITELINE(bbc_state, write_rxd_serial))
|
||||
@ -1340,7 +1349,7 @@ static MACHINE_CONFIG_START( bbcm, bbc_state )
|
||||
MCFG_VIA6522_READPB_HANDLER(READ8(bbc_state, bbcb_via_system_read_portb))
|
||||
MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(bbc_state, bbcb_via_system_write_porta))
|
||||
MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(bbc_state, bbcb_via_system_write_portb))
|
||||
MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("maincpu", M6502_IRQ_LINE))
|
||||
MCFG_VIA6522_IRQ_HANDLER(WRITELINE(bbc_state, bbcb_via_system_irq_w))
|
||||
|
||||
/* user via */
|
||||
MCFG_DEVICE_ADD("via6522_1", VIA6522, XTAL_16MHz / 16)
|
||||
@ -1348,7 +1357,7 @@ static MACHINE_CONFIG_START( bbcm, bbc_state )
|
||||
MCFG_VIA6522_WRITEPA_HANDLER(DEVWRITE8("cent_data_out", output_latch_device, write))
|
||||
MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(bbc_state, bbcb_via_user_write_portb))
|
||||
MCFG_VIA6522_CA2_HANDLER(DEVWRITELINE("centronics", centronics_device, write_strobe))
|
||||
MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("maincpu", M6502_IRQ_LINE))
|
||||
MCFG_VIA6522_IRQ_HANDLER(WRITELINE(bbc_state, bbcb_via_user_irq_w))
|
||||
|
||||
/* fdc */
|
||||
MCFG_WD1770_ADD("wd1770", XTAL_16MHz / 2)
|
||||
@ -1363,7 +1372,7 @@ static MACHINE_CONFIG_START( bbcm, bbc_state )
|
||||
/* econet */
|
||||
MCFG_DEVICE_ADD("mc6854", MC6854, 0)
|
||||
MCFG_MC6854_OUT_TXD_CB(DEVWRITELINE(ECONET_TAG, econet_device, data_w))
|
||||
MCFG_MC6854_OUT_IRQ_CB(INPUTLINE("maincpu", M6502_NMI_LINE))
|
||||
MCFG_MC6854_OUT_IRQ_CB(WRITELINE(bbc_state, adlc_irq_w))
|
||||
MCFG_ECONET_ADD()
|
||||
MCFG_ECONET_CLK_CALLBACK(WRITELINE(bbc_state, econet_clk_w))
|
||||
MCFG_ECONET_DATA_CALLBACK(DEVWRITELINE("mc6854", mc6854_device, set_rx))
|
||||
|
@ -164,6 +164,7 @@ public:
|
||||
TIMER_CALLBACK_MEMBER(bbc_tape_timer_cb);
|
||||
DECLARE_WRITE_LINE_MEMBER(write_acia_clock);
|
||||
DECLARE_WRITE_LINE_MEMBER(bbcb_acia6850_irq_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(adlc_irq_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(econet_clk_w);
|
||||
DECLARE_WRITE8_MEMBER(bbcb_via_system_write_porta);
|
||||
DECLARE_WRITE8_MEMBER(bbcb_via_system_write_portb);
|
||||
@ -336,9 +337,12 @@ public: // HACK FOR MC6845
|
||||
int m_MC146818_CE; // 6522 port b bit 6
|
||||
|
||||
int m_via_system_porta;
|
||||
|
||||
// interrupt state
|
||||
int m_via_system_irq;
|
||||
int m_via_user_irq;
|
||||
int m_acia_irq;
|
||||
int m_adlc_irq;
|
||||
|
||||
int m_column; // this is a counter in the keyboard circuit
|
||||
|
||||
|
@ -24,7 +24,9 @@
|
||||
|
||||
void bbc_state::check_interrupts()
|
||||
{
|
||||
m_maincpu->set_input_line(M6502_IRQ_LINE, m_via_system_irq || m_via_user_irq || m_acia_irq || m_ACCCON_IRR);
|
||||
int irq = (m_via_system_irq || m_via_user_irq || m_acia_irq || m_ACCCON_IRR) ? ASSERT_LINE : CLEAR_LINE;
|
||||
|
||||
m_maincpu->set_input_line(M6502_IRQ_LINE, irq);
|
||||
}
|
||||
|
||||
/*************************
|
||||
@ -1344,6 +1346,14 @@ WRITE_LINE_MEMBER( bbc_state::bbc_txd_w )
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER( bbc_state::bbcb_acia6850_irq_w )
|
||||
{
|
||||
m_acia_irq = state;
|
||||
|
||||
check_interrupts();
|
||||
}
|
||||
|
||||
|
||||
void bbc_state::BBC_Cassette_motor(unsigned char status)
|
||||
{
|
||||
if (status)
|
||||
|
Loading…
Reference in New Issue
Block a user