diff options
Diffstat (limited to 'src/mame/drivers/bbc.cpp')
-rw-r--r-- | src/mame/drivers/bbc.cpp | 95 |
1 files changed, 35 insertions, 60 deletions
diff --git a/src/mame/drivers/bbc.cpp b/src/mame/drivers/bbc.cpp index 7a0afa973bc..12b6d36f370 100644 --- a/src/mame/drivers/bbc.cpp +++ b/src/mame/drivers/bbc.cpp @@ -59,6 +59,7 @@ /* Devices */ #include "formats/acorn_dsk.h" #include "formats/fsd_dsk.h" +#include "formats/pc_dsk.h" #include "imagedev/cassette.h" #include "formats/uef_cas.h" #include "formats/csw_cas.h" @@ -189,7 +190,7 @@ static ADDRESS_MAP_START( bbc_base, AS_PROGRAM, 8, bbc_state ) /* fe80-fe9f FDC Floppy disc controller */ AM_RANGE(0xfea0, 0xfebf) AM_DEVREADWRITE("mc6854", mc6854_device, read, write) /* fea0-febf 68B54 ADLC ECONET controller */ AM_RANGE(0xfec0, 0xfedf) AM_DEVREADWRITE("upd7002", upd7002_device, read, write) /* fec0-fedf uPD7002 Analogue to digital converter */ - AM_RANGE(0xfee0, 0xfeff) AM_READ(bbc_fe_r) /* fee0-feff Tube ULA Tube system interface */ + AM_RANGE(0xfee0, 0xfeff) AM_DEVREADWRITE("tube", bbc_tube_slot_device, host_r, host_w) /* fee0-feff Tube ULA Tube system interface */ AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("os", 0x3f00) /* ff00-ffff OS ROM (continued) */ ADDRESS_MAP_END @@ -226,6 +227,7 @@ static ADDRESS_MAP_START( bbcbp_mem, AS_PROGRAM, 8, bbc_state ) /* W: fe30-fe3f 84LS161 Paged ROM selector */ AM_RANGE(0xfe80, 0xfe83) AM_WRITE(bbc_wd1770_status_w) /* fe80-fe83 1770 FDC Drive control register */ AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("wd1770", wd1770_device, read, write) /* fe84-fe9f 1770 FDC Floppy disc controller */ + AM_RANGE(0xfee0, 0xfeff) AM_DEVREADWRITE("tube", bbc_tube_slot_device, host_r, host_w) /* fee0-feff Tube ULA Tube system interface */ AM_IMPORT_FROM(bbc_base) ADDRESS_MAP_END @@ -239,6 +241,7 @@ static ADDRESS_MAP_START( bbcbp128_mem, AS_PROGRAM, 8, bbc_state ) /* W: fe30-fe3f 84LS161 Paged ROM selector */ AM_RANGE(0xfe80, 0xfe83) AM_WRITE(bbc_wd1770_status_w) /* fe80-fe83 1770 FDC Drive control register */ AM_RANGE(0xfe84, 0xfe9f) AM_DEVREADWRITE("wd1770", wd1770_device, read, write) /* fe84-fe9f 1770 FDC Floppy disc controller */ + AM_RANGE(0xfee0, 0xfeff) AM_DEVREADWRITE("tube", bbc_tube_slot_device, host_r, host_w) /* fee0-feff Tube ULA Tube system interface */ AM_IMPORT_FROM(bbc_base) ADDRESS_MAP_END @@ -252,6 +255,7 @@ static ADDRESS_MAP_START( reutapm_mem, AS_PROGRAM, 8, bbc_state ) /* W: fe30-fe3f 84LS161 Paged ROM selector */ AM_RANGE(0xfe80, 0xfe83) AM_NOP /* fe80-fe83 1770 FDC Drive control register */ AM_RANGE(0xfe84, 0xfe9f) AM_NOP /* fe84-fe9f 1770 FDC Floppy disc controller */ + AM_RANGE(0xfee0, 0xfeff) AM_READ(bbc_fe_r) /* fee0-feff Tube ULA Tube system interface */ AM_IMPORT_FROM(bbc_base) ADDRESS_MAP_END @@ -303,6 +307,9 @@ INPUT_CHANGED_MEMBER(bbc_state::trigger_reset) if (m_fdc) m_fdc->reset(); if (m_i8271) m_i8271->reset(); if (m_1mhzbus) m_1mhzbus->reset(); + if (m_tube) m_tube->reset(); + if (m_intube) m_intube->reset(); + if (m_extube) m_extube->reset(); } } @@ -780,7 +787,8 @@ FLOPPY_FORMATS_MEMBER( bbc_state::floppy_formats_bbcm ) FLOPPY_OPUS_DDCPM_FORMAT, FLOPPY_TORCH_CPN_FORMAT, FLOPPY_ACORN_DOS_FORMAT, - FLOPPY_FSD_FORMAT + FLOPPY_FSD_FORMAT, + FLOPPY_PC_FORMAT FLOPPY_FORMATS_END0 FLOPPY_FORMATS_MEMBER( bbc_state::floppy_formats_bbcmc ) @@ -990,7 +998,8 @@ static MACHINE_CONFIG_DERIVED( bbcb, bbca ) MCFG_BBC_1MHZBUS_SLOT_NMI_HANDLER(WRITELINE(bbc_state, bus_nmi_w)) /* tube port */ - MCFG_BBC_TUBE_SLOT_ADD("tube", bbc_tube_ext_devices, nullptr) + MCFG_BBC_TUBE_SLOT_ADD("tube", bbc_extube_devices, nullptr) + MCFG_BBC_TUBE_SLOT_IRQ_HANDLER(DEVWRITELINE("irqs", input_merger_device, in_w<4>)) /* user port */ MCFG_BBC_USERPORT_SLOT_ADD("userport", bbc_userport_devices, nullptr) @@ -999,10 +1008,6 @@ static MACHINE_CONFIG_DERIVED( bbcb, bbca ) MCFG_SOFTWARE_LIST_ADD("cass_ls_b", "bbcb_cass") MCFG_SOFTWARE_LIST_ADD("flop_ls_b", "bbcb_flop") MCFG_SOFTWARE_LIST_ADD("flop_ls_b_orig", "bbcb_flop_orig") - MCFG_SOFTWARE_LIST_ADD("flop_ls_z80", "bbc_flop_z80") - MCFG_SOFTWARE_LIST_ADD("flop_ls_32016", "bbc_flop_32016") - MCFG_SOFTWARE_LIST_ADD("flop_ls_68000", "bbc_flop_68000") - MCFG_SOFTWARE_LIST_ADD("flop_ls_6502", "bbc_flop_6502") MACHINE_CONFIG_END @@ -1111,13 +1116,9 @@ static MACHINE_CONFIG_DERIVED( torchf, bbcb ) MCFG_FLOPPY_DRIVE_SOUND(true) /* Add Torch Z80 Communicator co-processor */ - - /* software lists */ - MCFG_SOFTWARE_LIST_ADD("flop_ls_torch", "bbc_flop_torch") - MCFG_SOFTWARE_LIST_REMOVE("flop_ls_z80") - MCFG_SOFTWARE_LIST_REMOVE("flop_ls_32016") - MCFG_SOFTWARE_LIST_REMOVE("flop_ls_68000") - MCFG_SOFTWARE_LIST_REMOVE("flop_ls_6502") + //MCFG_DEVICE_MODIFY("tube") + //MCFG_SLOT_DEFAULT_OPTION("zep100") + //MCFG_SLOT_FIXED(true) MACHINE_CONFIG_END @@ -1151,9 +1152,9 @@ static MACHINE_CONFIG_DERIVED( abc110, bbcbp ) MCFG_DEVICE_REMOVE("wd1770:1") /* Add Z80 co-processor */ - //MCFG_DEVICE_MODIFY("tube") - //MCFG_SLOT_DEFAULT_OPTION("z80") - //MCFG_SLOT_FIXED(true) + MCFG_DEVICE_MODIFY("tube") + MCFG_SLOT_DEFAULT_OPTION("z80") + MCFG_SLOT_FIXED(true) /* Add ADAPTEC ACB-4000 Winchester Disc Controller */ //MCFG_DEVICE_ADD(SCSIBUS_TAG, SCSI_PORT, 0) @@ -1175,9 +1176,6 @@ static MACHINE_CONFIG_DERIVED( abc110, bbcbp ) MCFG_SOFTWARE_LIST_REMOVE("cass_ls_b") MCFG_SOFTWARE_LIST_REMOVE("flop_ls_b") MCFG_SOFTWARE_LIST_REMOVE("flop_ls_b_orig") - MCFG_SOFTWARE_LIST_REMOVE("flop_ls_32016") - MCFG_SOFTWARE_LIST_REMOVE("flop_ls_68000") - MCFG_SOFTWARE_LIST_REMOVE("flop_ls_6502") MACHINE_CONFIG_END @@ -1197,13 +1195,11 @@ static MACHINE_CONFIG_DERIVED( acw443, bbcbp ) /* Add 20MB ST-412 Winchester Cambridge */ /* software lists */ + MCFG_SOFTWARE_LIST_ADD("flop_ls_32016", "bbc_flop_32016") MCFG_SOFTWARE_LIST_REMOVE("cass_ls_a") MCFG_SOFTWARE_LIST_REMOVE("cass_ls_b") MCFG_SOFTWARE_LIST_REMOVE("flop_ls_b") MCFG_SOFTWARE_LIST_REMOVE("flop_ls_b_orig") - MCFG_SOFTWARE_LIST_REMOVE("flop_ls_z80") - MCFG_SOFTWARE_LIST_REMOVE("flop_ls_68000") - MCFG_SOFTWARE_LIST_REMOVE("flop_ls_6502") MACHINE_CONFIG_END @@ -1224,10 +1220,6 @@ static MACHINE_CONFIG_DERIVED( abc310, bbcbp ) MCFG_SOFTWARE_LIST_REMOVE("cass_ls_a") MCFG_SOFTWARE_LIST_REMOVE("cass_ls_b") MCFG_SOFTWARE_LIST_REMOVE("flop_ls_b") - MCFG_SOFTWARE_LIST_REMOVE("flop_ls_z80") - MCFG_SOFTWARE_LIST_REMOVE("flop_ls_32016") - MCFG_SOFTWARE_LIST_REMOVE("flop_ls_68000") - MCFG_SOFTWARE_LIST_REMOVE("flop_ls_6502") MACHINE_CONFIG_END @@ -1260,10 +1252,6 @@ static MACHINE_CONFIG_DERIVED( reutapm, bbcbp ) MCFG_SOFTWARE_LIST_REMOVE("cass_ls_b") MCFG_SOFTWARE_LIST_REMOVE("flop_ls_b") MCFG_SOFTWARE_LIST_REMOVE("flop_ls_b_orig") - MCFG_SOFTWARE_LIST_REMOVE("flop_ls_z80") - MCFG_SOFTWARE_LIST_REMOVE("flop_ls_32016") - MCFG_SOFTWARE_LIST_REMOVE("flop_ls_68000") - MCFG_SOFTWARE_LIST_REMOVE("flop_ls_6502") /* expansion ports */ MCFG_DEVICE_REMOVE("analogue") @@ -1382,9 +1370,6 @@ static MACHINE_CONFIG_START( bbcm ) MCFG_SOFTWARE_LIST_ADD("cass_ls_m", "bbcm_cass") MCFG_SOFTWARE_LIST_ADD("flop_ls_m", "bbcm_flop") MCFG_SOFTWARE_LIST_ADD("cart_ls_m", "bbcm_cart") - MCFG_SOFTWARE_LIST_ADD("flop_ls_z80", "bbc_flop_z80") - MCFG_SOFTWARE_LIST_ADD("flop_ls_32016", "bbc_flop_32016") - MCFG_SOFTWARE_LIST_ADD("flop_ls_68000", "bbc_flop_68000") MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("cass_ls_a", "bbca_cass") MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("cass_ls_b", "bbcb_cass") MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("flop_ls_b", "bbcb_flop") @@ -1453,8 +1438,10 @@ static MACHINE_CONFIG_START( bbcm ) MCFG_BBC_1MHZBUS_SLOT_NMI_HANDLER(WRITELINE(bbc_state, bus_nmi_w)) /* tube ports */ - MCFG_BBC_TUBE_SLOT_ADD("tube_ext", bbc_tube_ext_devices, nullptr) - MCFG_BBC_TUBE_SLOT_ADD("tube_int", bbc_tube_int_devices, nullptr) + MCFG_BBC_TUBE_SLOT_ADD("intube", bbc_intube_devices, nullptr) + MCFG_BBC_TUBE_SLOT_IRQ_HANDLER(DEVWRITELINE("irqs", input_merger_device, in_w<4>)) + MCFG_BBC_TUBE_SLOT_ADD("extube", bbc_extube_devices, nullptr) + MCFG_BBC_TUBE_SLOT_IRQ_HANDLER(DEVWRITELINE("irqs", input_merger_device, in_w<5>)) /* user port */ MCFG_BBC_USERPORT_SLOT_ADD("userport", bbc_userport_devices, nullptr) @@ -1463,20 +1450,17 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( bbcmt, bbcm ) /* Add 65C102 co-processor */ - //MCFG_DEVICE_MODIFY("tube_int") - //MCFG_SLOT_DEFAULT_OPTION("65c102copro") - //MCFG_SLOT_FIXED(true) - - /* software lists */ - MCFG_SOFTWARE_LIST_ADD("flop_ls_65c102", "bbc_flop_65c102") + MCFG_DEVICE_MODIFY("intube") + MCFG_SLOT_DEFAULT_OPTION("65c102") + MCFG_SLOT_FIXED(true) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( bbcmaiv, bbcm ) /* Add 65C102 co-processor */ - //MCFG_DEVICE_MODIFY("intube") - //MCFG_SLOT_DEFAULT_OPTION("65c102") - //MCFG_SLOT_FIXED(true) + MCFG_DEVICE_MODIFY("intube") + MCFG_SLOT_DEFAULT_OPTION("65c102") + MCFG_SLOT_FIXED(true) /* Add Philips VP415 Laserdisc player */ @@ -1499,9 +1483,6 @@ static MACHINE_CONFIG_DERIVED( bbcmet, bbcm ) MCFG_SOFTWARE_LIST_REMOVE("flop_ls_m") MCFG_SOFTWARE_LIST_REMOVE("flop_ls_b") MCFG_SOFTWARE_LIST_REMOVE("flop_ls_b_orig") - MCFG_SOFTWARE_LIST_REMOVE("flop_ls_z80") - MCFG_SOFTWARE_LIST_REMOVE("flop_ls_32016") - MCFG_SOFTWARE_LIST_REMOVE("flop_ls_68000") /* acia */ MCFG_DEVICE_REMOVE("acia6850") @@ -1521,19 +1502,14 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( bbcm512, bbcm ) - /* Add Intel 80186 co-processor */ - //MCFG_DEVICE_MODIFY("tube_int") - //MCFG_SLOT_DEFAULT_OPTION("80186copro") - //MCFG_SLOT_FIXED(true) - - /* software lists */ - MCFG_SOFTWARE_LIST_ADD("flop_ls_80186", "bbc_flop_80186") + MCFG_DEVICE_MODIFY("intube") + MCFG_SLOT_DEFAULT_OPTION("80186") + MCFG_SLOT_FIXED(true) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( bbcmarm, bbcm ) - /* Add ARM co-processor */ /* software lists */ @@ -1607,9 +1583,6 @@ static MACHINE_CONFIG_DERIVED( bbcmc, bbcm ) MCFG_SOFTWARE_LIST_REMOVE("flop_ls_m") MCFG_SOFTWARE_LIST_REMOVE("flop_ls_b") MCFG_SOFTWARE_LIST_REMOVE("flop_ls_b_orig") - MCFG_SOFTWARE_LIST_REMOVE("flop_ls_z80") - MCFG_SOFTWARE_LIST_REMOVE("flop_ls_32016") - MCFG_SOFTWARE_LIST_REMOVE("flop_ls_68000") MCFG_SOFTWARE_LIST_REMOVE("cart_ls_m") MCFG_SOFTWARE_LIST_ADD("flop_ls_mc", "bbcmc_flop") MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("flop_ls_pro128s", "pro128s_flop") @@ -1617,6 +1590,8 @@ static MACHINE_CONFIG_DERIVED( bbcmc, bbcm ) /* expansion ports */ MCFG_DEVICE_REMOVE("analogue") MCFG_COMPACT_JOYPORT_ADD("joyport", bbc_joyport_devices, "joystick") + MCFG_DEVICE_REMOVE("intube") + MCFG_DEVICE_REMOVE("extube") MACHINE_CONFIG_END @@ -2377,7 +2352,7 @@ COMP ( 1985, ltmpbp, bbcbp, 0, ltmpbp, ltmpbp, bbc_state, bbc, COMP ( 1985, reutapm, bbcbp, 0, reutapm, bbcb, bbc_state, bbc, "Acorn", "Reuters APM", MACHINE_NO_SOUND_HW | MACHINE_NOT_WORKING) COMP ( 1986, econx25, bbcbp, 0, econx25, bbcbp, bbc_state, bbc, "Acorn", "Econet X25 Gateway", MACHINE_NOT_WORKING) COMP ( 1986, bbcm, 0, bbcb, bbcm, bbcm, bbc_state, bbc, "Acorn", "BBC Master 128", MACHINE_IMPERFECT_GRAPHICS) -COMP ( 1986, bbcmt, bbcm, 0, bbcmt, bbcm, bbc_state, bbc, "Acorn", "BBC Master Turbo", MACHINE_NOT_WORKING) +COMP ( 1986, bbcmt, bbcm, 0, bbcmt, bbcm, bbc_state, bbc, "Acorn", "BBC Master Turbo", MACHINE_IMPERFECT_GRAPHICS) COMP ( 1986, bbcmaiv, bbcm, 0, bbcmaiv, bbcm, bbc_state, bbc, "Acorn", "BBC Master AIV", MACHINE_NOT_WORKING) COMP ( 1986, bbcmet, bbcm, 0, bbcmet, bbcm, bbc_state, bbc, "Acorn", "BBC Master ET", MACHINE_IMPERFECT_GRAPHICS) COMP ( 1986, bbcm512, bbcm, 0, bbcm512, bbcm, bbc_state, bbc, "Acorn", "BBC Master 512", MACHINE_NOT_WORKING) |