diff options
Diffstat (limited to 'src/mame/drivers/fanucspmg.cpp')
-rw-r--r-- | src/mame/drivers/fanucspmg.cpp | 83 |
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) |