diff options
author | AJR <ajrhacker@users.noreply.github.com> | 2018-05-20 17:49:29 -0400 |
---|---|---|
committer | AJR <ajrhacker@users.noreply.github.com> | 2018-05-20 17:49:29 -0400 |
commit | 165b910a67872ab2a5232acff53c3eb34754bd4e (patch) | |
tree | beff27cbe53a8c890e177b2f0afde1ac264fd1d1 | |
parent | ddb7f3b18a83adaa6608d44724057ea670e0bddc (diff) |
special.cpp: Use some more finder arrays (nw)
-rw-r--r-- | src/mame/includes/special.h | 31 | ||||
-rw-r--r-- | src/mame/machine/special.cpp | 65 |
2 files changed, 30 insertions, 66 deletions
diff --git a/src/mame/includes/special.h b/src/mame/includes/special.h index 3316daf0df4..3af0b315ccc 100644 --- a/src/mame/includes/special.h +++ b/src/mame/includes/special.h @@ -19,6 +19,7 @@ #include "machine/i8255.h" #include "machine/pit8253.h" #include "imagedev/cassette.h" +#include "imagedev/floppy.h" #include "formats/smx_dsk.h" #include "formats/rk_cas.h" #include "machine/wd_fdc.h" @@ -42,6 +43,7 @@ public: m_dac(*this, "dac"), m_pit(*this, "pit8253"), m_cassette(*this, "cassette"), + m_fdd(*this, "fd%u", 0U), m_ram(*this, RAM_TAG), m_p_videoram(*this, "videoram"), m_region_maincpu(*this, "maincpu"), @@ -51,19 +53,7 @@ public: m_bank4(*this, "bank4"), m_bank5(*this, "bank5"), m_bank6(*this, "bank6"), - m_io_line0(*this, "LINE0"), - m_io_line1(*this, "LINE1"), - m_io_line2(*this, "LINE2"), - m_io_line3(*this, "LINE3"), - m_io_line4(*this, "LINE4"), - m_io_line5(*this, "LINE5"), - m_io_line6(*this, "LINE6"), - m_io_line7(*this, "LINE7"), - m_io_line8(*this, "LINE8"), - m_io_line9(*this, "LINE9"), - m_io_line10(*this, "LINE10"), - m_io_line11(*this, "LINE11"), - m_io_line12(*this, "LINE12"), + m_io_line(*this, "LINE%u", 0U), m_palette(*this, "palette") { } DECLARE_WRITE8_MEMBER(specimx_select_bank); @@ -133,6 +123,7 @@ private: optional_device<dac_bit_interface> m_dac; optional_device<pit8253_device> m_pit; optional_device<cassette_image_device> m_cassette; + optional_device_array<floppy_connector, 2> m_fdd; optional_device<ram_device> m_ram; optional_shared_ptr<uint8_t> m_p_videoram; int m_drive; @@ -143,19 +134,7 @@ private: optional_memory_bank m_bank4; optional_memory_bank m_bank5; optional_memory_bank m_bank6; - required_ioport m_io_line0; - required_ioport m_io_line1; - required_ioport m_io_line2; - required_ioport m_io_line3; - required_ioport m_io_line4; - required_ioport m_io_line5; - required_ioport m_io_line6; - required_ioport m_io_line7; - required_ioport m_io_line8; - required_ioport m_io_line9; - required_ioport m_io_line10; - required_ioport m_io_line11; - required_ioport m_io_line12; + required_ioport_array<13> m_io_line; required_device<palette_device> m_palette; virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; }; diff --git a/src/mame/machine/special.cpp b/src/mame/machine/special.cpp index 8dd904ceb7d..9cad7be3ca0 100644 --- a/src/mame/machine/special.cpp +++ b/src/mame/machine/special.cpp @@ -27,14 +27,10 @@ void special_state::init_special() READ8_MEMBER( special_state::specialist_8255_porta_r ) { - if (m_io_line0->read()!=0xff) return 0xfe; - if (m_io_line1->read()!=0xff) return 0xfd; - if (m_io_line2->read()!=0xff) return 0xfb; - if (m_io_line3->read()!=0xff) return 0xf7; - if (m_io_line4->read()!=0xff) return 0xef; - if (m_io_line5->read()!=0xff) return 0xdf; - if (m_io_line6->read()!=0xff) return 0xbf; - if (m_io_line7->read()!=0xff) return 0x7f; + for (int i = 0; i < 8; i++) + if (m_io_line[i]->read() != 0xff) + return (1 << i) ^ 0xff; + return 0xff; } @@ -42,21 +38,16 @@ READ8_MEMBER( special_state::specialist_8255_portb_r ) { uint8_t dat = 0xff; - if ((m_specialist_8255_porta & 0x01)==0) dat &= m_io_line0->read(); - if ((m_specialist_8255_porta & 0x02)==0) dat &= m_io_line1->read(); - if ((m_specialist_8255_porta & 0x04)==0) dat &= m_io_line2->read(); - if ((m_specialist_8255_porta & 0x08)==0) dat &= m_io_line3->read(); - if ((m_specialist_8255_porta & 0x10)==0) dat &= m_io_line4->read(); - if ((m_specialist_8255_porta & 0x20)==0) dat &= m_io_line5->read(); - if ((m_specialist_8255_porta & 0x40)==0) dat &= m_io_line6->read(); - if ((m_specialist_8255_porta & 0x80)==0) dat &= m_io_line7->read(); - if ((m_specialist_8255_portc & 0x01)==0) dat &= m_io_line8->read(); - if ((m_specialist_8255_portc & 0x02)==0) dat &= m_io_line9->read(); - if ((m_specialist_8255_portc & 0x04)==0) dat &= m_io_line10->read(); - if ((m_specialist_8255_portc & 0x08)==0) dat &= m_io_line11->read(); + for (int i = 0; i < 8; i++) + if (!BIT(m_specialist_8255_porta, i)) + dat &= m_io_line[i]->read(); + + for (int i = 0; i < 4; i++) + if (!BIT(m_specialist_8255_portc, i)) + dat &= m_io_line[8 + i]->read(); // shift key - if (BIT(~m_io_line12->read(), 0)) + if (BIT(~m_io_line[12]->read(), 0)) dat &= 0xfd; // cassette @@ -73,21 +64,16 @@ READ8_MEMBER( special_state::specimx_8255_portb_r ) { uint8_t dat = 0xff; - if ((m_specialist_8255_porta & 0x01)==0) dat &= m_io_line0->read(); - if ((m_specialist_8255_porta & 0x02)==0) dat &= m_io_line1->read(); - if ((m_specialist_8255_porta & 0x04)==0) dat &= m_io_line2->read(); - if ((m_specialist_8255_porta & 0x08)==0) dat &= m_io_line3->read(); - if ((m_specialist_8255_porta & 0x10)==0) dat &= m_io_line4->read(); - if ((m_specialist_8255_porta & 0x20)==0) dat &= m_io_line5->read(); - if ((m_specialist_8255_porta & 0x40)==0) dat &= m_io_line6->read(); - if ((m_specialist_8255_porta & 0x80)==0) dat &= m_io_line7->read(); - if ((m_specialist_8255_portc & 0x01)==0) dat &= m_io_line8->read(); - if ((m_specialist_8255_portc & 0x02)==0) dat &= m_io_line9->read(); - if ((m_specialist_8255_portc & 0x04)==0) dat &= m_io_line10->read(); - if ((m_specialist_8255_portc & 0x08)==0) dat &= m_io_line11->read(); + for (int i = 0; i < 8; i++) + if (!BIT(m_specialist_8255_porta, i)) + dat &= m_io_line[i]->read(); + + for (int i = 0; i < 4; i++) + if (!BIT(m_specialist_8255_portc, i)) + dat &= m_io_line[8 + i]->read(); // shift key - if (BIT(~m_io_line12->read(), 0)) + if (BIT(~m_io_line[12]->read(), 0)) dat &= 0xfd; // cassette @@ -99,10 +85,10 @@ READ8_MEMBER( special_state::specimx_8255_portb_r ) READ8_MEMBER( special_state::specialist_8255_portc_r ) { - if (m_io_line8->read()!=0xff) return 0x0e; - if (m_io_line9->read()!=0xff) return 0x0d; - if (m_io_line10->read()!=0xff) return 0x0b; - if (m_io_line11->read()!=0xff) return 0x07; + for (int i = 0; i < 4; i++) + if (m_io_line[8 + i]->read() != 0xff) + return (1 << i) ^ 0x0f; + return 0x0f; } @@ -244,9 +230,8 @@ WRITE_LINE_MEMBER( special_state::fdc_drq ) WRITE8_MEMBER( special_state::specimx_disk_ctrl_w ) { - static const char *names[] = { "fd0", "fd1"}; floppy_image_device *floppy = nullptr; - floppy_connector *con = machine().device<floppy_connector>(names[m_drive & 1]); + floppy_connector *con = m_fdd[m_drive & 1].target(); if(con) floppy = con->get_device(); |