bbcb_de/bbcb_us: Use acorn8271 fdc device instead of duplicate 8271 implementation (nw)

This commit is contained in:
Nigel Barnes 2020-05-26 03:17:29 +01:00
parent 6fc4cf2094
commit 90bda33ee2
3 changed files with 13 additions and 80 deletions

View File

@ -163,17 +163,6 @@ void bbc_state::bbc_base(address_map &map)
void bbc_state::bbcb_mem(address_map &map)
{
bbc_base(map);
map(0x0000, 0x7fff).rw(FUNC(bbc_state::bbc_ram_r), FUNC(bbc_state::bbc_ram_w)); // 0000-7fff Regular RAM
map(0x8000, 0xbfff).rw(FUNC(bbc_state::bbc_paged_r), FUNC(bbc_state::bbc_paged_w)); // 8000-bfff Paged ROM/RAM
map(0xfe30, 0xfe3f).rw(FUNC(bbc_state::bbc_romsel_r), FUNC(bbc_state::bbc_romsel_w)); // W: fe30-fe3f 84LS161 Paged ROM selector
map(0xfe80, 0xfe83).mirror(0x08).m(m_i8271, FUNC(i8271_device::map)); // fe80-fe83 8271 FDC Floppy disc controller
map(0xfe84, 0xfe87).mirror(0x08).rw(m_i8271, FUNC(i8271_device::data_r), FUNC(i8271_device::data_w)); // fe84-fe9f 8271 FDC Floppy disc controller
}
void bbc_state::bbcb_nofdc_mem(address_map &map)
{
bbc_base(map);
map(0x0000, 0x7fff).rw(FUNC(bbc_state::bbc_ram_r), FUNC(bbc_state::bbc_ram_w)); // 0000-7fff Regular RAM
@ -346,7 +335,6 @@ INPUT_CHANGED_MEMBER(bbc_state::trigger_reset)
if (m_adlc) m_adlc->reset();
if (m_rtc) m_rtc->reset();
if (m_fdc) m_fdc->reset();
if (m_i8271) m_i8271->reset();
if (m_wd1770) m_wd1770->reset();
if (m_wd1772) m_wd1772->reset();
if (m_1mhzbus) m_1mhzbus->reset();
@ -1006,7 +994,7 @@ void bbc_state::bbcb(machine_config &config)
{
bbca(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &bbc_state::bbcb_nofdc_mem);
m_maincpu->set_addrmap(AS_PROGRAM, &bbc_state::bbcb_mem);
/* addressable latch */
m_latch->q_out_cb<1>().set(FUNC(bbc_state::speech_rsq_w));
@ -1093,39 +1081,23 @@ void bbc_state::bbcb(machine_config &config)
void bbc_state::bbcb_de(machine_config &config)
{
bbcb(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &bbc_state::bbcb_mem);
/* fdc */
I8271(config, m_i8271, 16_MHz_XTAL / 8);
m_i8271->intrq_wr_callback().set(FUNC(bbc_state::fdc_intrq_w));
m_i8271->hdl_wr_callback().set(FUNC(bbc_state::motor_w));
m_i8271->opt_wr_callback().set(FUNC(bbc_state::side_w));
config.device_remove("fdc");
FLOPPY_CONNECTOR(config, "i8271:0", bbc_floppies, "525qd", bbc_state::floppy_formats).enable_sound(true);
FLOPPY_CONNECTOR(config, "i8271:1", bbc_floppies, "525qd", bbc_state::floppy_formats).enable_sound(true);
m_fdc->set_fixed(true);
m_fdc->set_insert_rom(false);
}
void bbc_state::bbcb_us(machine_config &config)
{
bbcb(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &bbc_state::bbcb_mem);
/* video hardware */
m_screen->set_raw(16_MHz_XTAL, 1024, 0, 640, 262, 0, 200);
/* fdc */
I8271(config, m_i8271, 16_MHz_XTAL / 8);
m_i8271->intrq_wr_callback().set(FUNC(bbc_state::fdc_intrq_w));
m_i8271->hdl_wr_callback().set(FUNC(bbc_state::motor_w));
m_i8271->opt_wr_callback().set(FUNC(bbc_state::side_w));
config.device_remove("fdc");
FLOPPY_CONNECTOR(config, "i8271:0", bbc_floppies, "525qd", bbc_state::floppy_formats).enable_sound(true);
FLOPPY_CONNECTOR(config, "i8271:1", bbc_floppies, "525qd", bbc_state::floppy_formats).enable_sound(true);
m_fdc->set_fixed(true);
m_fdc->set_insert_rom(false);
/* software lists */
SOFTWARE_LIST(config, "flop_ls_b_us").set_original("bbcb_flop_us");
@ -1142,18 +1114,10 @@ void bbc_state::bbcb_us(machine_config &config)
void torch_state::torchf(machine_config &config)
{
bbcb(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &bbc_state::bbcb_mem);
/* fdc */
I8271(config, m_i8271, 16_MHz_XTAL / 8);
m_i8271->intrq_wr_callback().set(FUNC(bbc_state::fdc_intrq_w));
m_i8271->hdl_wr_callback().set(FUNC(bbc_state::motor_w));
m_i8271->opt_wr_callback().set(FUNC(bbc_state::side_w));
config.device_remove("fdc");
FLOPPY_CONNECTOR(config, "i8271:0", bbc_floppies, "525qd", bbc_state::floppy_formats, true).enable_sound(true);
FLOPPY_CONNECTOR(config, "i8271:1", bbc_floppies, "525qd", bbc_state::floppy_formats).enable_sound(true);
m_fdc->set_fixed(true);
m_fdc->set_insert_rom(false);
/* Torch Z80 Communicator co-processor */
m_tube->set_default_option("zep100");
@ -1164,8 +1128,9 @@ void torch_state::torchf(machine_config &config)
void torch_state::torchh(machine_config &config)
{
torchf(config);
/* fdc */
m_i8271->subdevice<floppy_connector>("1")->set_default_option(nullptr);
//m_fdc->subdevice<floppy_connector>("1")->set_default_option(nullptr);
/* 10MB or 21MB HDD */
//m_1mhzbus->set_default_option("sasi");

View File

@ -21,7 +21,6 @@
#include "machine/clock.h"
#include "machine/mc6854.h"
#include "machine/ram.h"
#include "machine/i8271.h"
#include "machine/wd_fdc.h"
#include "machine/upd7002.h"
#include "machine/mc146818.h"
@ -92,7 +91,6 @@ public:
, m_rtc(*this, "rtc")
, m_i2cmem(*this, "i2cmem")
, m_fdc(*this, "fdc")
, m_i8271(*this, "i8271")
, m_wd1770(*this, "wd1770")
, m_wd1772(*this, "wd1772")
, m_rom(*this, "romslot%u", 0U)
@ -187,8 +185,6 @@ public:
DECLARE_INPUT_CHANGED_MEMBER(trigger_reset);
DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w);
DECLARE_WRITE_LINE_MEMBER(fdc_drq_w);
DECLARE_WRITE_LINE_MEMBER(motor_w);
DECLARE_WRITE_LINE_MEMBER(side_w);
int get_analogue_input(int channel_number);
void upd7002_eoc(int data);
@ -207,7 +203,6 @@ public:
void bbca_mem(address_map &map);
void bbc_base(address_map &map);
void bbcb_mem(address_map &map);
void bbcb_nofdc_mem(address_map &map);
void init_bbc();
void init_ltmp();
@ -253,7 +248,6 @@ protected:
optional_device<mc146818_device> m_rtc;
optional_device<i2cmem_device> m_i2cmem;
optional_device<bbc_fdc_slot_device> m_fdc;
optional_device<i8271_device> m_i8271;
optional_device<wd1770_device> m_wd1770;
optional_device<wd1772_device> m_wd1772;
optional_device_array<bbc_romslot_device, 16> m_rom;

View File

@ -1278,32 +1278,6 @@ WRITE_LINE_MEMBER(bbc_state::bus_nmi_w)
}
/**************************************
i8271 disc control function
***************************************/
WRITE_LINE_MEMBER(bbc_state::motor_w)
{
floppy_image_device *floppy0 = m_i8271->subdevice<floppy_connector>("0")->get_device();
floppy_image_device *floppy1 = m_i8271->subdevice<floppy_connector>("1")->get_device();
if (floppy0) floppy0->mon_w(!state);
if (floppy1) floppy1->mon_w(!state);
m_i8271->ready_w(!state);
}
WRITE_LINE_MEMBER(bbc_state::side_w)
{
floppy_image_device *floppy0 = m_i8271->subdevice<floppy_connector>("0")->get_device();
floppy_image_device *floppy1 = m_i8271->subdevice<floppy_connector>("1")->get_device();
if (floppy0) floppy0->ss_w(state);
if (floppy1) floppy1->ss_w(state);
}
/**************************************
WD1770 disc control function
***************************************/
@ -1548,7 +1522,7 @@ void bbc_state::setup_device_roms()
}
/* insert ROM for FDC devices (BBC Model B only), always place into romslot 0 */
if (m_fdc && (exp_device = dynamic_cast<device_t*>(m_fdc->get_card_device())))
if (m_fdc && m_fdc->insert_rom() && (exp_device = dynamic_cast<device_t*>(m_fdc->get_card_device())))
{
if (exp_device->memregion("dfs_rom"))
{
@ -1632,15 +1606,15 @@ void bbc_state::setup_device_roms()
}
/* insert ROM(s) for Tube devices */
if (m_tube && (exp_device = dynamic_cast<device_t*>(m_tube->get_card_device())))
if (m_tube && m_tube->insert_rom() && (exp_device = dynamic_cast<device_t*>(m_tube->get_card_device())))
{
insert_device_rom(exp_device->memregion("exp_rom"));
}
if (m_intube && (exp_device = dynamic_cast<device_t*>(m_intube->get_card_device())))
if (m_intube && m_intube->insert_rom() && (exp_device = dynamic_cast<device_t*>(m_intube->get_card_device())))
{
insert_device_rom(exp_device->memregion("exp_rom"));
}
if (m_extube && (exp_device = dynamic_cast<device_t*>(m_extube->get_card_device())))
if (m_extube && m_extube->insert_rom() && (exp_device = dynamic_cast<device_t*>(m_extube->get_card_device())))
{
insert_device_rom(exp_device->memregion("exp_rom"));
}