diff --git a/src/mame/drivers/bbc.cpp b/src/mame/drivers/bbc.cpp index 3b8202285a7..055d7b98c76 100644 --- a/src/mame/drivers/bbc.cpp +++ b/src/mame/drivers/bbc.cpp @@ -287,6 +287,13 @@ ADDRESS_MAP_END INPUT_CHANGED_MEMBER(bbc_state::trigger_reset) { m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? CLEAR_LINE : ASSERT_LINE); + if (newval) + { + if (m_via6522_1) m_via6522_1->reset(); + if (m_adlc) m_adlc->reset(); + if (m_rtc) m_rtc->reset(); + if (m_i8271) m_i8271->reset(); + } } @@ -798,16 +805,15 @@ FLOPPY_FORMATS_MEMBER( bbc_state::floppy_formats_bbcmc ) FLOPPY_FORMATS_END0 static SLOT_INTERFACE_START( bbc_floppies_525 ) - SLOT_INTERFACE("sssd", FLOPPY_525_SSSD) - SLOT_INTERFACE("sd", FLOPPY_525_SD) - SLOT_INTERFACE("ssdd", FLOPPY_525_SSDD) - SLOT_INTERFACE("dd", FLOPPY_525_DD) - SLOT_INTERFACE("ssqd", FLOPPY_525_SSQD) - SLOT_INTERFACE("qd", FLOPPY_525_QD) + SLOT_INTERFACE("525sssd", FLOPPY_525_SSSD) + SLOT_INTERFACE("525sd", FLOPPY_525_SD) + SLOT_INTERFACE("525ssdd", FLOPPY_525_SSDD) + SLOT_INTERFACE("525dd", FLOPPY_525_DD) + SLOT_INTERFACE("525qd", FLOPPY_525_QD) SLOT_INTERFACE_END static SLOT_INTERFACE_START( bbc_floppies_35 ) - SLOT_INTERFACE("qd", FLOPPY_35_DD) + SLOT_INTERFACE("35dd", FLOPPY_35_DD) SLOT_INTERFACE_END @@ -860,6 +866,9 @@ static MACHINE_CONFIG_START( bbca, bbc_state ) MCFG_CPU_PERIODIC_INT_DRIVER(bbc_state, bbcb_keyscan, 1000) /* scan keyboard */ MCFG_QUANTUM_TIME(attotime::from_hz(60)) + MCFG_INPUT_MERGER_ACTIVE_HIGH("irqs") + MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("maincpu", M6502_IRQ_LINE)) + /* internal ram */ MCFG_RAM_ADD(RAM_TAG) MCFG_RAM_DEFAULT_SIZE("16K") @@ -915,7 +924,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(WRITELINE(bbc_state, bbcb_acia6850_irq_w)) + MCFG_ACIA6850_IRQ_HANDLER(DEVWRITELINE("irqs", input_merger_active_high_device, in0_w)) MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, nullptr) MCFG_RS232_RXD_HANDLER(WRITELINE(bbc_state, write_rxd_serial)) @@ -931,7 +940,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(WRITELINE(bbc_state, bbcb_via_system_irq_w)) + MCFG_VIA6522_IRQ_HANDLER(DEVWRITELINE("irqs", input_merger_active_high_device, in1_w)) /* EPROM sockets */ MCFG_FRAGMENT_ADD(bbc_eprom_sockets) @@ -963,7 +972,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(WRITELINE(bbc_state, bbcb_via_user_irq_w)) + MCFG_VIA6522_IRQ_HANDLER(DEVWRITELINE("irqs", input_merger_active_high_device, in2_w)) /* adc */ MCFG_DEVICE_ADD("upd7002", UPD7002, 0) @@ -976,14 +985,14 @@ static MACHINE_CONFIG_DERIVED( bbcb, bbca ) MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics") /* fdc */ - MCFG_DEVICE_ADD("i8271", I8271, 0) - 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) - MCFG_FLOPPY_DRIVE_SOUND(true) - MCFG_FLOPPY_DRIVE_ADD("i8271:1", bbc_floppies_525, "qd", bbc_state::floppy_formats_bbc) - MCFG_FLOPPY_DRIVE_SOUND(true) + MCFG_DEVICE_ADD("i8271", I8271, 0) + 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, "525qd", bbc_state::floppy_formats_bbc) + MCFG_FLOPPY_DRIVE_SOUND(true) + MCFG_FLOPPY_DRIVE_ADD("i8271:1", bbc_floppies_525, "525qd", bbc_state::floppy_formats_bbc) + MCFG_FLOPPY_DRIVE_SOUND(true) /* econet */ MCFG_DEVICE_ADD("mc6854", MC6854, 0) @@ -995,10 +1004,10 @@ static MACHINE_CONFIG_DERIVED( bbcb, bbca ) MCFG_ECONET_SLOT_ADD("econet254", 254, econet_devices, nullptr) /* expansion ports */ - MCFG_BBC_ANALOGUE_SLOT_ADD("analogue", bbc_analogue_devices, nullptr) - MCFG_BBC_1MHZBUS_SLOT_ADD("1mhzbus", bbc_1mhzbus_devices, nullptr) - MCFG_BBC_TUBE_SLOT_ADD("tube", bbc_tube_ext_devices, nullptr) - MCFG_BBC_USERPORT_SLOT_ADD("userport", bbc_userport_devices, nullptr) + MCFG_BBC_ANALOGUE_SLOT_ADD("analogue", bbc_analogue_devices, nullptr) + MCFG_BBC_1MHZBUS_SLOT_ADD("1mhzbus", bbc_1mhzbus_devices, nullptr) + MCFG_BBC_TUBE_SLOT_ADD("tube", bbc_tube_ext_devices, nullptr) + MCFG_BBC_USERPORT_SLOT_ADD("userport", bbc_userport_devices, nullptr) /* software lists */ MCFG_SOFTWARE_LIST_ADD("cass_ls_b", "bbcb_cass") @@ -1023,16 +1032,16 @@ static MACHINE_CONFIG_DERIVED(bbcb1770, bbcb) MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(bbc_state, fdc_intrq_w)) MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(bbc_state, fdc_drq_w)) - MCFG_FLOPPY_DRIVE_ADD("wd1770:0", bbc_floppies_525, "qd", bbc_state::floppy_formats_bbcm) + MCFG_FLOPPY_DRIVE_ADD("wd1770:0", bbc_floppies_525, "525qd", bbc_state::floppy_formats_bbcm) MCFG_FLOPPY_DRIVE_SOUND(true) - MCFG_FLOPPY_DRIVE_ADD("wd1770:1", bbc_floppies_525, "qd", bbc_state::floppy_formats_bbcm) + MCFG_FLOPPY_DRIVE_ADD("wd1770:1", bbc_floppies_525, "525qd", bbc_state::floppy_formats_bbcm) MCFG_FLOPPY_DRIVE_SOUND(true) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( bbcb_de, bbcb ) - /* software lists */ - MCFG_SOFTWARE_LIST_ADD("flop_ls_b_de", "bbcb_cass_de") +/* software lists */ +MCFG_SOFTWARE_LIST_ADD("flop_ls_b_de", "bbcb_cass_de") MACHINE_CONFIG_END @@ -1251,6 +1260,9 @@ static MACHINE_CONFIG_START( bbcm, bbc_state ) MCFG_CPU_PERIODIC_INT_DRIVER(bbc_state, bbcb_keyscan, 1000) /* scan keyboard */ MCFG_QUANTUM_TIME(attotime::from_hz(60)) + MCFG_INPUT_MERGER_ACTIVE_HIGH("irqs") + MCFG_INPUT_MERGER_OUTPUT_HANDLER(INPUTLINE("maincpu", M6502_IRQ_LINE)) + /* internal ram */ MCFG_RAM_ADD(RAM_TAG) MCFG_RAM_DEFAULT_SIZE("32K") @@ -1328,7 +1340,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(WRITELINE(bbc_state, bbcb_acia6850_irq_w)) + MCFG_ACIA6850_IRQ_HANDLER(DEVWRITELINE("irqs", input_merger_active_high_device, in0_w)) MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, nullptr) MCFG_RS232_RXD_HANDLER(WRITELINE(bbc_state, write_rxd_serial)) @@ -1349,7 +1361,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(WRITELINE(bbc_state, bbcb_via_system_irq_w)) + MCFG_VIA6522_IRQ_HANDLER(DEVWRITELINE("irqs", input_merger_active_high_device, in1_w)) /* user via */ MCFG_DEVICE_ADD("via6522_1", VIA6522, XTAL_16MHz / 16) @@ -1357,16 +1369,16 @@ 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(WRITELINE(bbc_state, bbcb_via_user_irq_w)) + MCFG_VIA6522_IRQ_HANDLER(DEVWRITELINE("irqs", input_merger_active_high_device, in2_w)) /* fdc */ MCFG_WD1770_ADD("wd1770", XTAL_16MHz / 2) MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(bbc_state, fdc_intrq_w)) MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(bbc_state, fdc_drq_w)) - MCFG_FLOPPY_DRIVE_ADD("wd1770:0", bbc_floppies_525, "qd", bbc_state::floppy_formats_bbcm) + MCFG_FLOPPY_DRIVE_ADD("wd1770:0", bbc_floppies_525, "525qd", bbc_state::floppy_formats_bbcm) MCFG_FLOPPY_DRIVE_SOUND(true) - MCFG_FLOPPY_DRIVE_ADD("wd1770:1", bbc_floppies_525, "qd", bbc_state::floppy_formats_bbcm) + MCFG_FLOPPY_DRIVE_ADD("wd1770:1", bbc_floppies_525, "525qd", bbc_state::floppy_formats_bbcm) MCFG_FLOPPY_DRIVE_SOUND(true) /* econet */ @@ -1484,7 +1496,7 @@ static MACHINE_CONFIG_DERIVED( bbcmc, bbcm ) MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(bbc_state, fdc_intrq_w)) MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(bbc_state, fdc_drq_w)) - MCFG_FLOPPY_DRIVE_ADD("wd1772:0", bbc_floppies_35, "qd", bbc_state::floppy_formats_bbcmc) + MCFG_FLOPPY_DRIVE_ADD("wd1772:0", bbc_floppies_35, "35dd", bbc_state::floppy_formats_bbcmc) MCFG_FLOPPY_DRIVE_SOUND(true) MCFG_FLOPPY_DRIVE_ADD("wd1772:1", bbc_floppies_35, nullptr, bbc_state::floppy_formats_bbcmc) MCFG_FLOPPY_DRIVE_SOUND(true) @@ -1495,6 +1507,10 @@ static MACHINE_CONFIG_DERIVED( bbcmc, bbcm ) MCFG_MACHINE_START_OVERRIDE(bbc_state, bbcmc) MCFG_MACHINE_RESET_OVERRIDE(bbc_state, bbcmc) + // cartridge sockets + MCFG_DEVICE_REMOVE("exp_rom1") + MCFG_DEVICE_REMOVE("exp_rom2") + /* software lists */ MCFG_SOFTWARE_LIST_REMOVE("cass_ls_m") MCFG_SOFTWARE_LIST_REMOVE("cass_ls_a") @@ -1599,9 +1615,9 @@ ROM_START(bbcb) /* rom page 9 24000 */ /* rom page 10 28000 */ /* rom page 11 2c000 */ - /* rom page 12 30000 IC52 SPARE SOCKET */ + /* rom page 12 30000 IC52 DFS */ /* rom page 13 34000 IC88 SPARE SOCKET */ - /* rom page 14 38000 IC100 DFS */ + /* rom page 14 38000 IC100 SPARE SOCKET */ /* rom page 15 3c000 IC101 BASIC */ ROM_DEFAULT_BIOS("os12b2") ROM_SYSTEM_BIOS( 0, "os12b2", "OS 1.20 / BASIC2" ) @@ -1624,12 +1640,12 @@ ROM_START(bbcb) ROM_RELOAD( 0x08000, 0x4000 ) ROM_RELOAD( 0x0c000, 0x4000 ) - ROM_LOAD("dnfs120-201666.rom", 0x38000, 0x4000, CRC(8ccd2157) SHA1(7e3c536baeae84d6498a14e8405319e01ee78232)) + ROM_LOAD("dnfs120-201666.rom", 0x30000, 0x4000, CRC(8ccd2157) SHA1(7e3c536baeae84d6498a14e8405319e01ee78232)) ROM_REGION(0x4000, "os", 0) ROM_COPY("option", 0x40000, 0, 0x4000) - ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */ + ROM_REGION(0x4000, "vsm", 0) /* system speech PHROM */ ROM_LOAD("phroma.bin", 0x0000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6)) ROM_END @@ -1673,9 +1689,9 @@ ROM_START(bbcb1770) ROM_REGION(0x4000, "os", 0) ROM_COPY("option", 0x40000, 0, 0x4000) - ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */ + ROM_REGION(0x4000, "vsm", 0) /* system speech PHROM */ ROM_LOAD("phroma.bin", 0x0000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6)) -ROM_END + ROM_END ROM_START(bbcb_de) @@ -1694,16 +1710,16 @@ ROM_START(bbcb_de) /* rom page 9 24000 */ /* rom page 10 28000 */ /* rom page 11 2c000 */ - /* rom page 12 30000 IC72 SPARE SOCKET */ + /* rom page 12 30000 IC72 DFS */ /* rom page 13 34000 IC73 SPARE SOCKET */ - /* rom page 14 38000 IC74 DFS */ + /* rom page 14 38000 IC74 SPARE SOCKET */ /* rom page 15 3c000 IC75 BASIC */ ROM_DEFAULT_BIOS("os12") ROM_SYSTEM_BIOS( 0, "os12", "OS 1.20 / BASIC2" ) ROMX_LOAD("os_de.rom", 0x40000, 0x4000, CRC(b7262caf) SHA1(aadf90338ee9d1c85dfa73beba50e930c2a38f10), ROM_BIOS(1)) ROMX_LOAD("basic2.rom", 0x3c000, 0x4000, CRC(79434781) SHA1(4a7393f3a45ea309f744441c16723e2ef447a281), ROM_BIOS(1)) /* rom page 15 3c000 */ - ROM_LOAD("dfs10.rom", 0x38000, 0x4000, CRC(7e367e8c) SHA1(161f585dc45665ea77433c84afd2f95049f7f5a0)) + ROM_LOAD("dfs10.rom", 0x30000, 0x4000, CRC(7e367e8c) SHA1(161f585dc45665ea77433c84afd2f95049f7f5a0)) ROM_REGION(0x4000, "os", 0) ROM_COPY("option", 0x40000, 0, 0x4000) @@ -1776,7 +1792,7 @@ ROM_START(torchf) ROM_REGION(0x4000, "os", 0) ROM_COPY("option", 0x40000, 0, 0x4000) - ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */ + ROM_REGION(0x4000, "vsm", 0) /* system speech PHROM */ ROM_LOAD("phrom_us.bin", 0x0000, 0x4000, CRC(bf4b3b64) SHA1(66876702d1d95eecc034d20f25047f893a27cde5)) ROM_END @@ -1817,7 +1833,7 @@ ROM_START(bbcbp) ROM_REGION(0x4000, "os", 0) ROM_COPY("option", 0x40000, 0, 0x4000) - ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */ + ROM_REGION(0x4000, "vsm", 0) /* system speech PHROM */ ROM_LOAD("phroma.bin", 0x0000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6)) ROM_END @@ -1865,7 +1881,7 @@ ROM_START(abc110) ROM_REGION(0x4000, "os", 0) ROM_COPY("option", 0x40000, 0, 0x4000) - ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */ + ROM_REGION(0x4000, "vsm", 0) /* system speech PHROM */ ROM_LOAD("phroma.bin", 0x0000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6)) ROM_END @@ -1907,7 +1923,7 @@ ROM_START(acw443) ROM_REGION(0x4000, "os", 0) ROM_COPY("option", 0x40000, 0, 0x4000) - ROM_REGION(0x8000, "vsm", 0) /* system speech PHROM */ + ROM_REGION(0x4000, "vsm", 0) /* system speech PHROM */ ROM_LOAD("phroma.bin", 0x0000, 0x4000, CRC(98e1bf9e) SHA1(b369809275cb67dfd8a749265e91adb2d2558ae6)) ROM_END diff --git a/src/mame/includes/bbc.h b/src/mame/includes/bbc.h index 51b36c82948..dcf3e803b2e 100644 --- a/src/mame/includes/bbc.h +++ b/src/mame/includes/bbc.h @@ -23,6 +23,7 @@ #include "machine/wd_fdc.h" #include "machine/upd7002.h" #include "machine/mc146818.h" +#include "machine/input_merger.h" #include "video/mc6845.h" #include "video/saa5050.h" #include "sound/sn76496.h" @@ -66,6 +67,7 @@ public: m_hd6845(*this, "hd6845"), m_adlc(*this, "mc6854"), m_sn(*this, "sn76489"), + m_keyboard(*this, "COL%u", 0), m_trom(*this, "saa5050"), m_tms(*this, "tms5220"), m_cassette(*this, "cassette"), @@ -83,10 +85,7 @@ public: m_exp2(*this, "exp_rom2"), m_exp3(*this, "exp_rom3"), m_exp4(*this, "exp_rom4"), - m_joy0(*this, "JOY0"), - m_joy1(*this, "JOY1"), - m_joy2(*this, "JOY2"), - m_joy3(*this, "JOY3"), + m_joy(*this, "JOY%u", 0), m_region_maincpu(*this, "maincpu"), m_region_os(*this, "os"), m_region_opt(*this, "option"), @@ -98,10 +97,7 @@ public: m_bank6(*this, "bank6"), m_bank7(*this, "bank7"), m_bank8(*this, "bank8"), - m_ACCCON_IRR(CLEAR_LINE), - m_via_system_irq(CLEAR_LINE), - m_via_user_irq(CLEAR_LINE), - m_acia_irq(CLEAR_LINE), + m_irqs(*this, "irqs"), m_palette(*this, "palette"), m_bbcconfig(*this, "BBCCONFIG") { } @@ -164,17 +160,14 @@ public: INTERRUPT_GEN_MEMBER(bbcb_keyscan); 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); DECLARE_READ8_MEMBER(bbcb_via_system_read_porta); DECLARE_READ8_MEMBER(bbcb_via_system_read_portb); - DECLARE_WRITE_LINE_MEMBER(bbcb_via_system_irq_w); DECLARE_READ8_MEMBER(bbcb_via_user_read_portb); DECLARE_WRITE8_MEMBER(bbcb_via_user_write_portb); - DECLARE_WRITE_LINE_MEMBER(bbcb_via_user_irq_w); DECLARE_WRITE_LINE_MEMBER(bbc_hsync_changed); DECLARE_WRITE_LINE_MEMBER(bbc_vsync_changed); DECLARE_WRITE_LINE_MEMBER(bbc_de_changed); @@ -218,6 +211,7 @@ private: required_device m_hd6845; optional_device m_adlc; optional_device m_sn; + required_ioport_array<13> m_keyboard; public: // HACK FOR MC6845 optional_device m_trom; optional_device m_tms; @@ -232,11 +226,11 @@ public: // HACK FOR MC6845 optional_device m_i8271; optional_device m_wd1770; optional_device m_wd1772; - required_device m_exp1; - required_device m_exp2; + optional_device m_exp1; + optional_device m_exp2; optional_device m_exp3; optional_device m_exp4; - optional_ioport m_joy0, m_joy1, m_joy2, m_joy3; + optional_ioport_array<4> m_joy; required_memory_region m_region_maincpu; required_memory_region m_region_os; @@ -250,7 +244,7 @@ public: // HACK FOR MC6845 required_memory_bank m_bank7; // bbca bbcb bbcbp bbcbp128 bbcm optional_memory_bank m_bank8; // bbcm - void check_interrupts(); + required_device m_irqs; machine_type_t m_machinetype; @@ -309,16 +303,18 @@ public: // HACK FOR MC6845 The function of the 8 output bits from this latch are:- B0 - Write Enable to the sound generator IC - B1 - READ select on the speech processor + B1 - READ select on the speech processor (B and B+) + R/nW control on CMOS RAM (Master only) B2 - WRITE select on the speech processor + DS control on CMOS RAM (Master only) B3 - Keyboard write enable B4,B5 - these two outputs define the number to be added to the start of screen address in hardware to control hardware scrolling:- - Mode Size Start of screen Number to add B5 B4 - 0,1,2 20K &3000 12K 1 1 - 3 16K &4000 16K 0 0 - 4,5 10K &5800 (or &1800) 22K 1 0 - 6 8K &6000 (or &2000) 24K 0 1 + Mode Size Start of screen Size No.to add B5 B4 + 0,1,2 20K &3000 12K 1 1 + 3 16K &4000 16K 0 0 + 4,5 10K &5800 (or &1800) 22K 1 0 + 6 8K &6000 (or &2000) 24K 0 1 B6 - Operates the CAPS lock LED (Pin 17 keyboard connector) B7 - Operates the SHIFT lock LED (Pin 16 keyboard connector) */ @@ -340,9 +336,6 @@ public: // HACK FOR MC6845 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 diff --git a/src/mame/machine/bbc.cpp b/src/mame/machine/bbc.cpp index 522fffad39c..3a710b79a31 100644 --- a/src/mame/machine/bbc.cpp +++ b/src/mame/machine/bbc.cpp @@ -22,13 +22,6 @@ #include "imagedev/cassette.h" -void bbc_state::check_interrupts() -{ - 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); -} - /************************* Model A memory handling functions *************************/ @@ -336,7 +329,7 @@ WRITE8_MEMBER(bbc_state::bbcm_ACCCON_write) if (tempIRR!=m_ACCCON_IRR) { - check_interrupts(); + m_irqs->in3_w(m_ACCCON_IRR); } if (m_ACCCON_Y) @@ -711,12 +704,6 @@ B7 - Operates the SHIFT lock LED (Pin 16 keyboard connector) INTERRUPT_GEN_MEMBER(bbc_state::bbcb_keyscan) { - static const char *const colnames[] = { - "COL0", "COL1", "COL2", "COL3", "COL4", - "COL5", "COL6", "COL7", "COL8", "COL9", - "COL10", "COL11", "COL12" - }; - /* only do auto scan if keyboard is not enabled */ if (m_b3_keyboard == 1) { @@ -733,7 +720,7 @@ INTERRUPT_GEN_MEMBER(bbc_state::bbcb_keyscan) /* KBD IC4 8 input NAND gate */ /* set the value of via_system ca2, by checking for any keys being pressed on the selected m_column */ - if ((ioport(colnames[m_column])->read() | 0x01) != 0xff) + if ((m_keyboard[m_column]->read() | 0x01) != 0xff) { m_via6522_0->write_ca2(1); } @@ -755,11 +742,6 @@ int bbc_state::bbc_keyboard(address_space &space, int data) int bit; int row; int res; - static const char *const colnames[] = { - "COL0", "COL1", "COL2", "COL3", "COL4", - "COL5", "COL6", "COL7", "COL8", "COL9", - "COL10", "COL11", "COL12" - }; m_column = data & 0x0f; row = (data>>4) & 0x07; @@ -768,7 +750,7 @@ int bbc_state::bbc_keyboard(address_space &space, int data) if (m_column < 13) { - res = ioport(colnames[m_column])->read(); + res = m_keyboard[m_column]->read(); } else { @@ -799,14 +781,14 @@ int bbc_state::bbc_keyboard(address_space &space, int data) void bbc_state::bbcb_IC32_initialise(bbc_state *state) { - m_b0_sound=0x01; // Write Enable to the sound generator IC - m_b1_speech_read=0x01; // READ select on the speech processor - m_b2_speech_write=0x01; // WRITE select on the speech processor - m_b3_keyboard=0x01; // Keyboard write enable - m_b4_video0=0x01; // These two outputs define the number to be added to the start of screen address - m_b5_video1=0x01; // in hardware to control hardware scrolling - m_b6_caps_lock_led=0x01; // Operates the CAPS lock LED - m_b7_shift_lock_led=0x01; // Operates the SHIFT lock LED + m_b0_sound = 0x01; // Write Enable to the sound generator IC + m_b1_speech_read = 0x01; // READ select on the speech processor + m_b2_speech_write = 0x01; // WRITE select on the speech processor + m_b3_keyboard = 0x01; // Keyboard write enable + m_b4_video0 = 0x01; // These two outputs define the number to be added to the start of screen address + m_b5_video1 = 0x01; // in hardware to control hardware scrolling + m_b6_caps_lock_led = 0x01; // Operates the CAPS lock LED + m_b7_shift_lock_led = 0x01; // Operates the SHIFT lock LED } @@ -877,7 +859,7 @@ WRITE8_MEMBER(bbc_state::bbcb_via_system_write_portb) { int bit, value; bit = data & 0x07; - value = BIT(data,3); + value = BIT(data, 3); //logerror("SYSTEM write portb %d %d %d\n",data,bit,value); @@ -1090,13 +1072,6 @@ READ8_MEMBER(bbc_state::bbcb_via_system_read_portb) } -WRITE_LINE_MEMBER(bbc_state::bbcb_via_system_irq_w) -{ - m_via_system_irq = state; - - check_interrupts(); -} - /********************************************************************** USER VIA Port A output is buffered before being connected to the printer connector. @@ -1117,13 +1092,6 @@ WRITE8_MEMBER(bbc_state::bbcb_via_user_write_portb) m_userport = data; } -WRITE_LINE_MEMBER(bbc_state::bbcb_via_user_irq_w) -{ - m_via_user_irq = state; - - check_interrupts(); -} - /************************************** BBC Joystick Support @@ -1131,19 +1099,7 @@ BBC Joystick Support UPD7002_GET_ANALOGUE(bbc_state::BBC_get_analogue_input) { - switch (channel_number) - { - case 0: - return ((0xff - m_joy0->read()) << 8); - case 1: - return ((0xff - m_joy1->read()) << 8); - case 2: - return ((0xff - m_joy2->read()) << 8); - case 3: - return ((0xff - m_joy3->read()) << 8); - } - - return 0; + return ((0xff - m_joy[channel_number]->read()) << 8); } UPD7002_EOC(bbc_state::BBC_uPD7002_EOC) @@ -1346,14 +1302,6 @@ 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) @@ -1476,15 +1424,20 @@ WRITE_LINE_MEMBER(bbc_state::side_w) void bbc_state::bbc_update_nmi() { - if (m_fdc_irq || m_fdc_drq) - m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); + if (m_fdc_irq || m_fdc_drq || m_adlc_irq) + { + m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); + } + else + { + m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); + } } WRITE_LINE_MEMBER(bbc_state::fdc_intrq_w) { m_fdc_irq = state; bbc_update_nmi(); - } WRITE_LINE_MEMBER(bbc_state::fdc_drq_w)