mirror of
https://github.com/holub/mame
synced 2025-04-28 11:11:48 +03:00
bml3mp1802: Clean up code a little; use input merger for NMI
* bml3mp1805: Don't force ready since 6809 code actually polls for it
This commit is contained in:
parent
f38ddbdc5f
commit
ea47c29c49
@ -30,13 +30,12 @@ static void mp1802_floppies(device_slot_interface &device)
|
|||||||
device.option_add("dd", FLOPPY_525_DD);
|
device.option_add("dd", FLOPPY_525_DD);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( bml3bus_mp1802_device::bml3_wd17xx_intrq_w )
|
WRITE_LINE_MEMBER( bml3bus_mp1802_device::nmi_w )
|
||||||
{
|
{
|
||||||
if (state)
|
if (state)
|
||||||
{
|
|
||||||
raise_slot_nmi();
|
raise_slot_nmi();
|
||||||
|
else
|
||||||
lower_slot_nmi();
|
lower_slot_nmi();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MP1802_ROM_REGION "mp1802_rom"
|
#define MP1802_ROM_REGION "mp1802_rom"
|
||||||
@ -61,12 +60,15 @@ void bml3bus_mp1802_device::device_add_mconfig(machine_config &config)
|
|||||||
constexpr auto CLK16M = 32.256_MHz_XTAL / 2;
|
constexpr auto CLK16M = 32.256_MHz_XTAL / 2;
|
||||||
|
|
||||||
MB8866(config, m_fdc, CLK16M / 16); // 16MCLK divided by IC628 (HD74LS93P)
|
MB8866(config, m_fdc, CLK16M / 16); // 16MCLK divided by IC628 (HD74LS93P)
|
||||||
m_fdc->intrq_wr_callback().set(FUNC(bml3bus_mp1802_device::bml3_wd17xx_intrq_w));
|
m_fdc->intrq_wr_callback().set(m_nmigate, FUNC(input_merger_device::in_w<0>));
|
||||||
|
|
||||||
FLOPPY_CONNECTOR(config, m_floppy0, mp1802_floppies, "dd", floppy_image_device::default_mfm_floppy_formats);
|
INPUT_MERGER_ALL_HIGH(config, m_nmigate);
|
||||||
FLOPPY_CONNECTOR(config, m_floppy1, mp1802_floppies, "dd", floppy_image_device::default_mfm_floppy_formats);
|
m_nmigate->output_handler().set(FUNC(bml3bus_mp1802_device::nmi_w));
|
||||||
FLOPPY_CONNECTOR(config, m_floppy2, mp1802_floppies, nullptr, floppy_image_device::default_mfm_floppy_formats);
|
|
||||||
FLOPPY_CONNECTOR(config, m_floppy3, mp1802_floppies, nullptr, floppy_image_device::default_mfm_floppy_formats);
|
FLOPPY_CONNECTOR(config, m_floppy[0], mp1802_floppies, "dd", floppy_image_device::default_mfm_floppy_formats);
|
||||||
|
FLOPPY_CONNECTOR(config, m_floppy[1], mp1802_floppies, "dd", floppy_image_device::default_mfm_floppy_formats);
|
||||||
|
FLOPPY_CONNECTOR(config, m_floppy[2], mp1802_floppies, nullptr, floppy_image_device::default_mfm_floppy_formats);
|
||||||
|
FLOPPY_CONNECTOR(config, m_floppy[3], mp1802_floppies, nullptr, floppy_image_device::default_mfm_floppy_formats);
|
||||||
SOFTWARE_LIST(config, "flop_list").set_original("bml3_flop").set_filter("5");
|
SOFTWARE_LIST(config, "flop_list").set_original("bml3_flop").set_filter("5");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,28 +83,23 @@ const tiny_rom_entry *bml3bus_mp1802_device::device_rom_region() const
|
|||||||
|
|
||||||
uint8_t bml3bus_mp1802_device::bml3_mp1802_r()
|
uint8_t bml3bus_mp1802_device::bml3_mp1802_r()
|
||||||
{
|
{
|
||||||
return m_fdc->drq_r() ? 0x00 : 0x80;
|
return (m_fdc->drq_r() ? 0x00 : 0x80) | (m_fdc->intrq_r() ? 0x00 : 0x40);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bml3bus_mp1802_device::bml3_mp1802_w(uint8_t data)
|
void bml3bus_mp1802_device::bml3_mp1802_w(uint8_t data)
|
||||||
{
|
{
|
||||||
floppy_image_device *floppy = nullptr;
|
floppy_image_device *floppy = m_floppy[data & 0x03]->get_device();
|
||||||
|
|
||||||
switch (data & 0x03)
|
|
||||||
{
|
|
||||||
case 0: floppy = m_floppy0->get_device(); break;
|
|
||||||
case 1: floppy = m_floppy1->get_device(); break;
|
|
||||||
case 2: floppy = m_floppy2->get_device(); break;
|
|
||||||
case 3: floppy = m_floppy3->get_device(); break;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_fdc->set_floppy(floppy);
|
m_fdc->set_floppy(floppy);
|
||||||
|
//m_fdc->dden_w(!BIT(data, 5)); // TODO: support FM tracks in d88_format
|
||||||
|
|
||||||
if (floppy)
|
if (floppy)
|
||||||
{
|
{
|
||||||
floppy->mon_w(!BIT(data, 3));
|
floppy->mon_w(!BIT(data, 3));
|
||||||
floppy->ss_w(BIT(data, 4));
|
floppy->ss_w(BIT(data, 4));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_nmigate->in_w<1>(!BIT(data, 6));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -114,10 +111,9 @@ bml3bus_mp1802_device::bml3bus_mp1802_device(const machine_config &mconfig, cons
|
|||||||
device_t(mconfig, BML3BUS_MP1802, tag, owner, clock),
|
device_t(mconfig, BML3BUS_MP1802, tag, owner, clock),
|
||||||
device_bml3bus_card_interface(mconfig, *this),
|
device_bml3bus_card_interface(mconfig, *this),
|
||||||
m_fdc(*this, "fdc"),
|
m_fdc(*this, "fdc"),
|
||||||
m_floppy0(*this, "fdc:0"),
|
m_floppy(*this, "fdc:%u", 0U),
|
||||||
m_floppy1(*this, "fdc:1"),
|
m_nmigate(*this, "nmigate"),
|
||||||
m_floppy2(*this, "fdc:2"),
|
m_rom(nullptr)
|
||||||
m_floppy3(*this, "fdc:3"), m_rom(nullptr)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -141,4 +137,5 @@ void bml3bus_mp1802_device::device_start()
|
|||||||
|
|
||||||
void bml3bus_mp1802_device::device_reset()
|
void bml3bus_mp1802_device::device_reset()
|
||||||
{
|
{
|
||||||
|
bml3_mp1802_w(0);
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
#include "bml3bus.h"
|
#include "bml3bus.h"
|
||||||
#include "imagedev/floppy.h"
|
#include "imagedev/floppy.h"
|
||||||
|
#include "machine/input_merger.h"
|
||||||
#include "machine/wd_fdc.h"
|
#include "machine/wd_fdc.h"
|
||||||
|
|
||||||
|
|
||||||
@ -43,13 +44,11 @@ protected:
|
|||||||
virtual const tiny_rom_entry *device_rom_region() const override;
|
virtual const tiny_rom_entry *device_rom_region() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DECLARE_WRITE_LINE_MEMBER(bml3_wd17xx_intrq_w);
|
DECLARE_WRITE_LINE_MEMBER(nmi_w);
|
||||||
|
|
||||||
required_device<mb8866_device> m_fdc;
|
required_device<mb8866_device> m_fdc;
|
||||||
required_device<floppy_connector> m_floppy0;
|
required_device_array<floppy_connector, 4> m_floppy;
|
||||||
required_device<floppy_connector> m_floppy1;
|
required_device<input_merger_device> m_nmigate;
|
||||||
required_device<floppy_connector> m_floppy2;
|
|
||||||
required_device<floppy_connector> m_floppy3;
|
|
||||||
|
|
||||||
uint8_t *m_rom;
|
uint8_t *m_rom;
|
||||||
};
|
};
|
||||||
|
@ -53,7 +53,6 @@ void bml3bus_mp1805_device::floppy_drives(device_slot_interface &device)
|
|||||||
void bml3bus_mp1805_device::device_add_mconfig(machine_config &config)
|
void bml3bus_mp1805_device::device_add_mconfig(machine_config &config)
|
||||||
{
|
{
|
||||||
MC6843(config, m_mc6843, 500000);
|
MC6843(config, m_mc6843, 500000);
|
||||||
m_mc6843->force_ready();
|
|
||||||
m_mc6843->irq().set(FUNC(bml3bus_mp1805_device::nmi_w));
|
m_mc6843->irq().set(FUNC(bml3bus_mp1805_device::nmi_w));
|
||||||
|
|
||||||
FLOPPY_CONNECTOR(config, m_floppy[0], floppy_drives, "mb_6890", floppy_image_device::default_mfm_floppy_formats).enable_sound(true);
|
FLOPPY_CONNECTOR(config, m_floppy[0], floppy_drives, "mb_6890", floppy_image_device::default_mfm_floppy_formats).enable_sound(true);
|
||||||
|
Loading…
Reference in New Issue
Block a user