bbc: updated to use input merger device

- keyboard and joystick use ioport_array
- reset devices on BREAK
This commit is contained in:
Nigel Barnes 2016-09-02 17:27:04 +01:00
parent a7946f9c61
commit 855760fedc
3 changed files with 99 additions and 137 deletions

View File

@ -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

View File

@ -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<hd6845_device> m_hd6845;
optional_device<mc6854_device> m_adlc;
optional_device<sn76489_device> m_sn;
required_ioport_array<13> m_keyboard;
public: // HACK FOR MC6845
optional_device<saa5050_device> m_trom;
optional_device<tms5220_device> m_tms;
@ -232,11 +226,11 @@ public: // HACK FOR MC6845
optional_device<i8271_device> m_i8271;
optional_device<wd1770_t> m_wd1770;
optional_device<wd1772_t> m_wd1772;
required_device<generic_slot_device> m_exp1;
required_device<generic_slot_device> m_exp2;
optional_device<generic_slot_device> m_exp1;
optional_device<generic_slot_device> m_exp2;
optional_device<generic_slot_device> m_exp3;
optional_device<generic_slot_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<input_merger_active_high_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

View File

@ -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)