mirror of
https://github.com/holub/mame
synced 2025-07-12 05:03:56 +03:00
bbcb_de/bbcb_us: Use acorn8271 fdc device instead of duplicate 8271 implementation (nw)
This commit is contained in:
parent
6fc4cf2094
commit
90bda33ee2
@ -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");
|
||||
|
@ -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;
|
||||
|
@ -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"));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user