summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
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
commit165b910a67872ab2a5232acff53c3eb34754bd4e (patch)
treebeff27cbe53a8c890e177b2f0afde1ac264fd1d1
parentddb7f3b18a83adaa6608d44724057ea670e0bddc (diff)
special.cpp: Use some more finder arrays (nw)
-rw-r--r--src/mame/includes/special.h31
-rw-r--r--src/mame/machine/special.cpp65
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();