summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/fanucspmg.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/fanucspmg.cpp')
-rw-r--r--src/mame/drivers/fanucspmg.cpp83
1 files changed, 33 insertions, 50 deletions
diff --git a/src/mame/drivers/fanucspmg.cpp b/src/mame/drivers/fanucspmg.cpp
index 9733705191d..0f49a3f5ca5 100644
--- a/src/mame/drivers/fanucspmg.cpp
+++ b/src/mame/drivers/fanucspmg.cpp
@@ -548,14 +548,6 @@ the keypad symbols seem to use a different matrix pattern from the rest?
#define MAINCPU_TAG "maincpu"
#define SUBCPU_TAG "subcpu"
-#define USART0_TAG "usart0"
-#define USART1_TAG "usart1"
-#define USART2_TAG "usart2"
-#define USART3_TAG "usart3"
-#define PIT0_TAG "pit0"
-#define PIT1_TAG "pit1"
-#define PIC0_TAG "pic0"
-#define PIC1_TAG "pic1"
#define DMAC_TAG "dmac"
#define CRTC_TAG "crtc"
#define FDC_TAG "fdc"
@@ -570,14 +562,9 @@ public:
: driver_device(mconfig, type, tag)
, m_maincpu(*this, MAINCPU_TAG)
, m_subcpu(*this, SUBCPU_TAG)
- , m_usart0(*this, USART0_TAG)
- , m_usart1(*this, USART1_TAG)
- , m_usart2(*this, USART2_TAG)
- , m_usart3(*this, USART3_TAG)
- , m_pit0(*this, PIT0_TAG)
- , m_pit1(*this, PIT1_TAG)
- , m_pic0(*this, PIC0_TAG)
- , m_pic1(*this, PIC1_TAG)
+ , m_usart(*this, "usart%u", 0U)
+ , m_pit(*this, "pit%u", 0U)
+ , m_pic(*this, "pic%u", 0U)
, m_dmac(*this, DMAC_TAG)
, m_crtc(*this, CRTC_TAG)
, m_fdc(*this, FDC_TAG)
@@ -593,14 +580,9 @@ public:
private:
required_device<i8086_cpu_device> m_maincpu;
required_device<i8085a_cpu_device> m_subcpu;
- required_device<i8251_device> m_usart0;
- required_device<i8251_device> m_usart1;
- required_device<i8251_device> m_usart2;
- required_device<i8251_device> m_usart3;
- required_device<pit8253_device> m_pit0;
- required_device<pit8253_device> m_pit1;
- required_device<pic8259_device> m_pic0;
- required_device<pic8259_device> m_pic1;
+ required_device_array<i8251_device, 4> m_usart;
+ required_device_array<pit8253_device, 2> m_pit;
+ required_device_array<pic8259_device, 2> m_pic;
required_device<i8257_device> m_dmac;
required_device<mc6845_device> m_crtc;
required_device<upd765a_device> m_fdc;
@@ -676,7 +658,7 @@ WRITE8_MEMBER(fanucspmg_state::shared_w)
READ8_MEMBER(fanucspmg_state::get_slave_ack)
{
if(offset == 7)
- return m_pic1->acknowledge();
+ return m_pic[1]->acknowledge();
return 0x00;
}
@@ -725,18 +707,18 @@ void fanucspmg_state::maincpu_mem(address_map &map)
map(0x80000, 0x81fff).ram(); // believed to be shared RAM with a CPU inside the Program File
map(0x88000, 0x88001).noprw(); // Program File "ready" bit
- map(0xf0000, 0xf0003).rw(m_pic0, FUNC(pic8259_device::read), FUNC(pic8259_device::write)).umask16(0x00ff);
+ map(0xf0000, 0xf0003).rw(m_pic[0], FUNC(pic8259_device::read), FUNC(pic8259_device::write)).umask16(0x00ff);
map(0xf0004, 0xf0007).m(m_fdc, FUNC(upd765a_device::map)).umask16(0x00ff);
- map(0xf0008, 0xf000f).rw(m_pit0, FUNC(pit8253_device::read), FUNC(pit8253_device::write)).umask16(0x00ff);
- map(0xf0010, 0xf0013).rw(m_usart0, FUNC(i8251_device::read), FUNC(i8251_device::write)).umask16(0x00ff);
- map(0xf0014, 0xf0017).rw(m_usart1, FUNC(i8251_device::read), FUNC(i8251_device::write)).umask16(0x00ff);
- map(0xf0018, 0xf001b).rw(m_usart2, FUNC(i8251_device::read), FUNC(i8251_device::write)).umask16(0x00ff);
- map(0xf001c, 0xf001f).rw(m_usart3, FUNC(i8251_device::read), FUNC(i8251_device::write)).umask16(0x00ff);
+ map(0xf0008, 0xf000f).rw(m_pit[0], FUNC(pit8253_device::read), FUNC(pit8253_device::write)).umask16(0x00ff);
+ map(0xf0010, 0xf0013).rw(m_usart[0], FUNC(i8251_device::read), FUNC(i8251_device::write)).umask16(0x00ff);
+ map(0xf0014, 0xf0017).rw(m_usart[1], FUNC(i8251_device::read), FUNC(i8251_device::write)).umask16(0x00ff);
+ map(0xf0018, 0xf001b).rw(m_usart[2], FUNC(i8251_device::read), FUNC(i8251_device::write)).umask16(0x00ff);
+ map(0xf001c, 0xf001f).rw(m_usart[3], FUNC(i8251_device::read), FUNC(i8251_device::write)).umask16(0x00ff);
map(0xf0020, 0xf0029).rw(m_dmac, FUNC(i8257_device::read), FUNC(i8257_device::write));
map(0xf0042, 0xf0043).r(FUNC(fanucspmg_state::magic_r));
map(0xf0046, 0xf0046).w(FUNC(fanucspmg_state::dma_page_w));
- map(0xf0048, 0xf004f).rw(m_pit1, FUNC(pit8253_device::read), FUNC(pit8253_device::write)).umask16(0x00ff);
- map(0xf2000, 0xf2003).rw(m_pic1, FUNC(pic8259_device::read), FUNC(pic8259_device::write)).umask16(0x00ff);
+ map(0xf0048, 0xf004f).rw(m_pit[1], FUNC(pit8253_device::read), FUNC(pit8253_device::write)).umask16(0x00ff);
+ map(0xf2000, 0xf2003).rw(m_pic[1], FUNC(pic8259_device::read), FUNC(pic8259_device::write)).umask16(0x00ff);
map(0xf8000, 0xf9fff).rw(FUNC(fanucspmg_state::shared_r), FUNC(fanucspmg_state::shared_w));
map(0xfc000, 0xfffff).rom().region(MAINCPU_TAG, 0);
@@ -967,7 +949,7 @@ MACHINE_CONFIG_START(fanucspmg_state::fanucspmg)
MCFG_DEVICE_ADD(MAINCPU_TAG, I8086, XTAL(15'000'000)/3)
MCFG_DEVICE_PROGRAM_MAP(maincpu_mem)
MCFG_DEVICE_IO_MAP(maincpu_io)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE(PIC0_TAG, pic8259_device, inta_cb)
+ MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("pic0", pic8259_device, inta_cb)
MCFG_I8086_ESC_OPCODE_HANDLER(WRITE32("i8087", i8087_device, insn_w))
MCFG_I8086_ESC_DATA_HANDLER(WRITE32("i8087", i8087_device, addr_w))
@@ -980,19 +962,20 @@ MACHINE_CONFIG_START(fanucspmg_state::fanucspmg)
MCFG_DEVICE_ADD(SUBCPU_TAG, I8085A, XTAL(16'000'000)/2/2)
MCFG_DEVICE_PROGRAM_MAP(subcpu_mem)
- MCFG_DEVICE_ADD(USART0_TAG, I8251, 0)
- MCFG_DEVICE_ADD(USART1_TAG, I8251, 0)
- MCFG_DEVICE_ADD(USART2_TAG, I8251, 0)
- MCFG_DEVICE_ADD(USART3_TAG, I8251, 0)
+ I8251(config, m_usart[0], 0);
+ I8251(config, m_usart[1], 0);
+ I8251(config, m_usart[2], 0);
+ I8251(config, m_usart[3], 0);
- MCFG_DEVICE_ADD(PIT0_TAG, PIT8253, 0)
- MCFG_PIT8253_CLK0(XTAL(15'000'000)/12)
- MCFG_PIT8253_CLK1(XTAL(15'000'000)/12)
- MCFG_PIT8253_CLK2(XTAL(15'000'000)/12)
- MCFG_DEVICE_ADD(PIT1_TAG, PIT8253, 0)
- MCFG_PIT8253_CLK0(XTAL(15'000'000)/12)
- MCFG_PIT8253_CLK1(XTAL(15'000'000)/12)
- MCFG_PIT8253_CLK2(XTAL(15'000'000)/12)
+ PIT8253(config, m_pit[0], 0);
+ m_pit[0]->set_clk<0>(XTAL(15'000'000)/12);
+ m_pit[0]->set_clk<1>(XTAL(15'000'000)/12);
+ m_pit[0]->set_clk<2>(XTAL(15'000'000)/12);
+
+ PIT8253(config, m_pit[1], 0);
+ m_pit[1]->set_clk<0>(XTAL(15'000'000)/12);
+ m_pit[1]->set_clk<1>(XTAL(15'000'000)/12);
+ m_pit[1]->set_clk<2>(XTAL(15'000'000)/12);
I8257(config, m_dmac, XTAL(15'000'000) / 5);
m_dmac->out_hrq_cb().set(FUNC(fanucspmg_state::hrq_w));
@@ -1002,17 +985,17 @@ MACHINE_CONFIG_START(fanucspmg_state::fanucspmg)
m_dmac->in_ior_cb<0>().set(FUNC(fanucspmg_state::fdcdma_r));
m_dmac->out_iow_cb<0>().set(FUNC(fanucspmg_state::fdcdma_w));
- MCFG_DEVICE_ADD(PIC0_TAG, PIC8259, 0)
+ MCFG_DEVICE_ADD(m_pic[0], PIC8259, 0)
MCFG_PIC8259_OUT_INT_CB(INPUTLINE("maincpu", 0))
MCFG_PIC8259_IN_SP_CB(CONSTANT(1))
MCFG_PIC8259_CASCADE_ACK_CB(READ8(*this, fanucspmg_state, get_slave_ack))
- MCFG_DEVICE_ADD(PIC1_TAG, PIC8259, 0)
- MCFG_PIC8259_OUT_INT_CB(WRITELINE(PIC0_TAG, pic8259_device, ir7_w))
+ MCFG_DEVICE_ADD(m_pic[1], PIC8259, 0)
+ MCFG_PIC8259_OUT_INT_CB(WRITELINE(m_pic[0], pic8259_device, ir7_w))
MCFG_PIC8259_IN_SP_CB(CONSTANT(0))
UPD765A(config, m_fdc, true, true);
- m_fdc->intrq_wr_callback().set(m_pic0, FUNC(pic8259_device::ir3_w));
+ m_fdc->intrq_wr_callback().set(m_pic[0], FUNC(pic8259_device::ir3_w));
m_fdc->drq_wr_callback().set(m_dmac, FUNC(i8257_device::dreq0_w));
MCFG_FLOPPY_DRIVE_ADD(FDC_TAG":0", fanuc_floppies, "525dd", fanucspmg_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(FDC_TAG":1", fanuc_floppies, "525dd", fanucspmg_state::floppy_formats)