summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rwxr-xr-xscripts/build/complay.py30
-rw-r--r--src/emu/rendlay.cpp199
-rw-r--r--src/mame/layout/brkball.lay13
-rw-r--r--src/mame/layout/esq2by16.lay136
-rw-r--r--src/mame/layout/hp9825.lay42
-rw-r--r--src/mame/layout/sc2_dmd.lay12
-rw-r--r--src/mame/layout/sc2copcl7.lay12
-rw-r--r--src/mame/layout/sc2cpe.lay12
-rw-r--r--src/mame/layout/sc2prem2.lay12
-rw-r--r--src/mame/layout/sc2prom.lay12
-rw-r--r--src/mame/layout/sc2ptytm1.lay12
-rw-r--r--src/mame/layout/sc2town2.lay12
-rw-r--r--src/mame/layout/sc4_dmd.lay11
-rw-r--r--src/mame/layout/tecnbras.lay348
-rw-r--r--src/mame/layout/tmtennis.lay66
15 files changed, 446 insertions, 483 deletions
diff --git a/scripts/build/complay.py b/scripts/build/complay.py
index 3e9d6ed693c..6903418e242 100755
--- a/scripts/build/complay.py
+++ b/scripts/build/complay.py
@@ -96,7 +96,7 @@ class LayoutChecker(Minifyer):
BADTAGPATTERN = re.compile('[^abcdefghijklmnopqrstuvwxyz0123456789_.:^$]')
VARPATTERN = re.compile('^.*~[0-9A-Za-z_]+~.*$')
FLOATCHARS = re.compile('^.*[.eE].*$')
- SHAPES = frozenset(('disk', 'dotmatrix', 'dotmatrix5dot', 'dotmatrixdot', 'led14seg', 'led14segsc', 'led16seg', 'led16segsc', 'led7seg', 'led8seg_gts1', 'rect'))
+ SHAPES = frozenset(('disk', 'led14seg', 'led14segsc', 'led16seg', 'led16segsc', 'led7seg', 'led8seg_gts1', 'rect'))
ORIENTATIONS = frozenset((0, 90, 180, 270))
YESNO = frozenset(('yes', 'no'))
BLENDMODES = frozenset(('none', 'alpha', 'multiply', 'add'))
@@ -291,7 +291,10 @@ class LayoutChecker(Minifyer):
self.handleError('Element %s attribute state "%s" is negative' % (name, attrs['state']))
if (statemask is not None) and (stateval & ~statemask):
self.handleError('Element %s attribute state "%s" has bits set that are clear in attribute statemask "%s"' % (name, attrs['state'], attrs['statemask']))
- self.handlers.append((self.componentStartHandler, self.componentEndHandler))
+ if 'image' == name:
+ self.handlers.append((self.imageComponentStartHandler, self.imageComponentEndHandler))
+ else:
+ self.handlers.append((self.componentStartHandler, self.componentEndHandler))
self.have_bounds.append({ })
self.have_color.append({ })
@@ -448,8 +451,8 @@ class LayoutChecker(Minifyer):
self.handleError('Element simplecounter attribute align "%s" not in valid range 0-2' % (attrs['align'], ))
self.checkComponent(name, attrs)
elif 'image' == name:
- if 'file' not in attrs:
- self.handleError('Element image missing attribute file')
+ self.have_file = 'file' in attrs
+ self.have_data = None
self.checkComponent(name, attrs)
elif 'reel' == name:
# TODO: validate symbollist and improve validation of other attributes
@@ -499,6 +502,25 @@ class LayoutChecker(Minifyer):
self.have_color.pop()
self.handlers.pop()
+ def imageComponentStartHandler(self, name, attrs):
+ if 'data' == name:
+ if self.have_data is not None:
+ self.handleError('Element image has multiple data child elements (previous %s)' % (self.have_data))
+ else:
+ self.have_data = self.formatLocation()
+ if self.have_file:
+ self.handleError('Element image has attribute file and child element data')
+ self.ignored_depth = 1
+ else:
+ self.componentStartHandler(name, attrs)
+
+ def imageComponentEndHandler(self, name):
+ if (not self.have_file) and (self.have_data is None):
+ self.handleError('Element image missing attribute file or child element data')
+ del self.have_file
+ del self.have_data
+ self.componentEndHandler(name)
+
def groupViewStartHandler(self, name, attrs):
if 'element' == name:
if 'ref' not in attrs:
diff --git a/src/emu/rendlay.cpp b/src/emu/rendlay.cpp
index 2f57c7ade1d..25604722212 100644
--- a/src/emu/rendlay.cpp
+++ b/src/emu/rendlay.cpp
@@ -1521,14 +1521,14 @@ void layout_element::element_scale(bitmap_argb32 &dest, bitmap_argb32 &source, c
// get the local scaled bounds
render_bounds const compbounds(curcomp->bounds(elemtex.m_state));
rectangle bounds(
- render_round_nearest(compbounds.x0 * dest.width()),
- render_round_nearest(compbounds.x1 * dest.width()),
- render_round_nearest(compbounds.y0 * dest.height()),
- render_round_nearest(compbounds.y1 * dest.height()));
- bounds &= dest.cliprect();
+ s32(compbounds.x0 * float(dest.width()) + 0.5F),
+ s32(floorf(compbounds.x1 * float(dest.width()) - 0.5F)),
+ s32(compbounds.y0 * float(dest.height()) + 0.5F),
+ s32(floorf(compbounds.y1 * float(dest.height()) - 0.5F)));
// based on the component type, add to the texture
- curcomp->draw(elemtex.m_element->machine(), dest, bounds, elemtex.m_state);
+ if (!bounds.empty())
+ curcomp->draw(elemtex.m_element->machine(), dest, bounds, elemtex.m_state);
}
}
}
@@ -1684,44 +1684,29 @@ private:
void load_image(running_machine &machine)
{
- // attempt to open the file
- LOGMASKED(LOG_IMAGE_LOAD, "Image component attempt to load image file '%s%s%s'\n", m_dirname, PATH_SEPARATOR, m_imagefile);
+ // if we have a filename, go with that
emu_file file(machine.options().art_path(), OPEN_FLAG_READ);
- osd_file::error const imgerr = file.open(m_dirname.empty() ? m_imagefile : (m_dirname + PATH_SEPARATOR + m_imagefile));
- if (osd_file::error::NONE == imgerr)
+ if (!m_imagefile.empty())
{
- ru_imgformat const format = render_detect_image(file);
- switch (format)
+ LOGMASKED(LOG_IMAGE_LOAD, "Image component attempt to load image file '%s%s%s'\n", m_dirname, PATH_SEPARATOR, m_imagefile);
+ osd_file::error const imgerr = file.open(m_dirname.empty() ? m_imagefile : (m_dirname + PATH_SEPARATOR + m_imagefile));
+ if (osd_file::error::NONE == imgerr)
{
- case RENDUTIL_IMGFORMAT_ERROR:
- LOGMASKED(LOG_IMAGE_LOAD, "Image component error detecting image file format\n");
- break;
-
- case RENDUTIL_IMGFORMAT_PNG:
- LOGMASKED(LOG_IMAGE_LOAD, "Image component detected PNG file format\n");
- m_hasalpha = render_load_png(m_bitmap, file);
- break;
-
- case RENDUTIL_IMGFORMAT_JPEG:
- LOGMASKED(LOG_IMAGE_LOAD, "Image component detected JPEG file format\n");
- render_load_jpeg(m_bitmap, file);
- break;
-
- case RENDUTIL_IMGFORMAT_MSDIB:
- LOGMASKED(LOG_IMAGE_LOAD, "Image component detected Microsoft DIB file format\n");
- render_load_msdib(m_bitmap, file);
- break;
-
- default:
- LOGMASKED(LOG_IMAGE_LOAD, "Image component failed to detect image file format, trying SVG\n");
- load_svg(file);
- break;
+ if (!load_bitmap(file))
+ {
+ LOGMASKED(LOG_IMAGE_LOAD, "Image component will attempt to parse file as SVG\n");
+ load_svg(file);
+ }
+ file.close();
+ }
+ else
+ {
+ LOGMASKED(LOG_IMAGE_LOAD, "Image component unable to open image file '%s%s%s'\n", m_dirname, PATH_SEPARATOR, m_imagefile);
}
- file.close();
}
else
{
- LOGMASKED(LOG_IMAGE_LOAD, "Image component unable to open image file '%s%s%s'\n", m_dirname, PATH_SEPARATOR, m_imagefile);
+ load_image_data();
}
// load the alpha bitmap if specified
@@ -1775,13 +1760,104 @@ private:
m_data.clear();
}
- void load_svg(util::core_file &file)
+ void load_image_data()
{
- if (!m_rasterizer)
+ // in-place Base64 decode
+ static constexpr char base64chars[] =
+ "\t\n\v\f\r +/0123456789"
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "abcdefghijklmnopqrstuvwxyz";
+ static constexpr char base64tail[] =
+ "\t\n\v\f\r =";
+ std::string::size_type const tail(m_data.find_first_not_of(base64chars));
+ std::string::size_type const end(m_data.find_first_not_of(base64tail, tail));
+ if (std::string::npos == end)
{
- osd_printf_warning("No SVG rasteriser available, won't attempt to parse component image '%s' as SVG\n", m_imagefile);
- return;
+ LOGMASKED(LOG_IMAGE_LOAD, "Image component decoding Base64 image m_data\n");
+ char *dst(&m_data[0]);
+ unsigned trailing(0U);
+ for (std::string::size_type i = 0U; (m_data.size() > i) && ('=' != m_data[i]); ++i)
+ {
+ u8 sym;
+ if (('A' <= m_data[i]) && ('Z' >= m_data[i]))
+ sym = m_data[i] - 'A';
+ else if (('a' <= m_data[i]) && ('z' >= m_data[i]))
+ sym = m_data[i] - 'a' + 26;
+ else if (('0' <= m_data[i]) && ('9' >= m_data[i]))
+ sym = m_data[i] - '0' + 52;
+ else if ('+' == m_data[i])
+ sym = 62;
+ else if ('/' == m_data[i])
+ sym = 63;
+ else
+ continue;
+ if (trailing)
+ *dst |= (sym << 2) >> trailing;
+ else
+ *dst = sym << 2;
+ if (trailing >= 2U)
+ ++dst;
+ trailing = (trailing + 6U) & 7U;
+ if (trailing)
+ *dst = sym << (8U - trailing);
+ }
+ m_data.resize(dst - &m_data[0]);
}
+
+ // make a file wrapper for the data and see if it looks like a bitmap
+ util::core_file::ptr file;
+ osd_file::error const filerr(util::core_file::open_ram(m_data.c_str(), m_data.size(), OPEN_FLAG_READ, file));
+ bool const bitmapdata((osd_file::error::NONE == filerr) && file && load_bitmap(*file));
+ file.reset();
+
+ // if it didn't look like a bitmap, see if it looks like it might be XML and hence SVG
+ if (!bitmapdata)
+ {
+ bool const utf16be((0xfe == u8(m_data[0])) && (0xff == u8(m_data[1])));
+ bool const utf16le((0xff == u8(m_data[0])) && (0xfe == u8(m_data[1])));
+ bool const utf8((0xef == u8(m_data[0])) && (0xbb == u8(m_data[1])) && (0xbf == u8(m_data[2])));
+ std::string::size_type const found(m_data.find_first_not_of("\t\n\v\f\r "));
+ bool const xmltag((std::string::npos != found) && ('<' == m_data[found]));
+ if (utf16be || utf16le || utf8 || xmltag)
+ {
+ LOGMASKED(LOG_IMAGE_LOAD, "Image component will attempt to parse data as SVG\n");
+ parse_svg(&m_data[0]);
+ }
+ }
+ }
+
+ bool load_bitmap(util::core_file &file)
+ {
+ ru_imgformat const format = render_detect_image(file);
+ switch (format)
+ {
+ case RENDUTIL_IMGFORMAT_ERROR:
+ LOGMASKED(LOG_IMAGE_LOAD, "Image component error detecting image file format\n");
+ return false;
+
+ case RENDUTIL_IMGFORMAT_PNG:
+ LOGMASKED(LOG_IMAGE_LOAD, "Image component detected PNG file format\n");
+ m_hasalpha = render_load_png(m_bitmap, file);
+ return true;
+
+ case RENDUTIL_IMGFORMAT_JPEG:
+ LOGMASKED(LOG_IMAGE_LOAD, "Image component detected JPEG file format\n");
+ render_load_jpeg(m_bitmap, file);
+ return true;
+
+ case RENDUTIL_IMGFORMAT_MSDIB:
+ LOGMASKED(LOG_IMAGE_LOAD, "Image component detected Microsoft DIB file format\n");
+ render_load_msdib(m_bitmap, file);
+ return true;
+
+ default:
+ LOGMASKED(LOG_IMAGE_LOAD, "Image component failed to detect bitmap file format\n");
+ return false;
+ }
+ }
+
+ void load_svg(util::core_file &file)
+ {
u64 len(file.size());
if ((std::numeric_limits<size_t>::max() - 1) < len)
{
@@ -1807,8 +1883,17 @@ private:
ptr += read;
len -= read;
}
- m_svg.reset(nsvgParse(svgbuf.get(), "px", 72));
- svgbuf.reset();
+ parse_svg(svgbuf.get());
+ }
+
+ void parse_svg(char *svgdata)
+ {
+ if (!m_rasterizer)
+ {
+ osd_printf_warning("No SVG rasteriser available, won't attempt to parse component image '%s' as SVG\n", m_imagefile);
+ return;
+ }
+ m_svg.reset(nsvgParse(svgdata, "px", 72));
if (!m_svg)
{
osd_printf_warning("Failed to parse component image '%s' as SVG\n", m_imagefile);
@@ -1922,8 +2007,8 @@ protected:
u32 const inva(255 - a);
// find the center
- float const xcenter = float(bounds.xcenter());
- float const ycenter = float(bounds.ycenter());
+ float const xcenter = float(bounds.left() + bounds.right()) * 0.5F;
+ float const ycenter = float(bounds.top() + bounds.bottom()) * 0.5F;
float const xradius = float(bounds.width()) * 0.5F;
float const yradius = float(bounds.height()) * 0.5F;
float const ooyradius2 = 1.0F / (yradius * yradius);
@@ -1932,22 +2017,21 @@ protected:
for (u32 y = bounds.top(); y <= bounds.bottom(); ++y)
{
// compute left/right coordinates
- float const ycoord = ycenter - (float(y) + 0.5F);
+ float const ycoord = ycenter - float(y);
float const xval = xradius * sqrtf(1.0F - (ycoord * ycoord) * ooyradius2);
-
s32 const left = s32(xcenter - xval + 0.5F);
- s32 const right = s32(xcenter + xval + 0.5F);
+ s32 const right = bounds.right() - left + bounds.left();
// draw this scanline
if (255 <= a)
{
// optimise opaque pixels
- std::fill_n(&dest.pix(y, left), right - left, f);
+ std::fill_n(&dest.pix(y, left), right - left + 1, f);
}
else if (a)
{
- u32 *dst(&dest.pix(y, bounds.left()));
- for (u32 x = left; x < right; ++x, ++dst)
+ u32 *dst(&dest.pix(y, left));
+ for (s32 x = left; x <= right; ++x, ++dst)
{
// we're translucent, add in the destination pixel contribution
rgb_t const dpix(*dst);
@@ -4354,9 +4438,16 @@ layout_view::item::color_vector layout_view::item::make_color(
itemnode.get_name()));
}
}
- for (emu::render::detail::color_step &step : result)
- step.color *= mult;
- set_color_deltas(result);
+ if (result.empty())
+ {
+ result.emplace_back(emu::render::detail::color_step{ 0, mult, { 0.0F, 0.0F, 0.0F, 0.0F } });
+ }
+ else
+ {
+ for (emu::render::detail::color_step &step : result)
+ step.color *= mult;
+ set_color_deltas(result);
+ }
return result;
}
diff --git a/src/mame/layout/brkball.lay b/src/mame/layout/brkball.lay
index 809b5901cf2..e895f502a65 100644
--- a/src/mame/layout/brkball.lay
+++ b/src/mame/layout/brkball.lay
@@ -7,10 +7,16 @@
</element>
<element name="dotmatrixdot">
- <dotmatrixdot>
- <color red="1.0" green="0.12" blue="0.12" />
- </dotmatrixdot>
+ <rect>
+ <color red="0" green="0" blue="0" />
+ <bounds left="-0.1" top="-0.1" right="1.1" bottom="1.1" />
+ </rect>
+ <disk>
+ <color state="1" red="1.0" green="1.0" blue="1.0" />
+ <color state="0" red="0.125" green="0.125" blue="0.125" />
+ </disk>
</element>
+
<group name="dmd">
<repeat count="21">
<param name="s" start="0" increment="65" />
@@ -20,6 +26,7 @@
<param name="x" start="0" increment="1" />
<element name="dotmatrix~n~" ref="dotmatrixdot" state="0">
<bounds x="~x~" y="~y~" width="1" height="1" />
+ <color red="1.0" green="0.12" blue="0.12" />
</element>
</repeat>
</repeat>
diff --git a/src/mame/layout/esq2by16.lay b/src/mame/layout/esq2by16.lay
index aa05f652938..546803dc527 100644
--- a/src/mame/layout/esq2by16.lay
+++ b/src/mame/layout/esq2by16.lay
@@ -32,30 +32,64 @@ license:CC0
</rect>
</element>
-
- <element name="Page1">
- <dotmatrix5dot>
- <color red="0.0" green="1.0" blue="1.0" />
- </dotmatrix5dot>
- </element>
-
- <element name="Page2">
- <dotmatrix5dot>
- <color red="0.0" green="1.0" blue="0.0" />
- </dotmatrix5dot>
- </element>
-
- <element name="Page3">
- <dotmatrix5dot>
- <color red="1.0" green="1.0" blue="0.0" />
- </dotmatrix5dot>
+ <element name="dotrow">
+ <rect>
+ <bounds x="-0.1" width="5.6" y="-0.1" height="1.2" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </rect>
+ <disk state="0" statemask="0x01">
+ <bounds x="0.0" />
+ <color red="0.125" green="0.125" blue="0.125" />
+ </disk>
+ <disk state="0" statemask="0x02">
+ <bounds x="1.1" />
+ <color red="0.125" green="0.125" blue="0.125" />
+ </disk>
+ <disk state="0" statemask="0x04">
+ <bounds x="2.2" />
+ <color red="0.125" green="0.125" blue="0.125" />
+ </disk>
+ <disk state="0" statemask="0x08">
+ <bounds x="3.3" />
+ <color red="0.125" green="0.125" blue="0.125" /></disk>
+ <disk state="0" statemask="0x10">
+ <bounds x="4.4" />
+ <color red="0.125" green="0.125" blue="0.125" />
+ </disk>
+ <disk statemask="0x01">
+ <bounds x="0.0" />
+ </disk>
+ <disk statemask="0x02">
+ <bounds x="1.1" />
+ </disk>
+ <disk statemask="0x04">
+ <bounds x="2.2" />
+ </disk>
+ <disk statemask="0x08">
+ <bounds x="3.3" />
+ </disk>
+ <disk statemask="0x10">
+ <bounds x="4.4" />
+ </disk>
</element>
- <element name="Page4">
- <dotmatrix5dot>
- <color red="0.0" green="0.0" blue="1.0" />
- </dotmatrix5dot>
- </element>
+ <group name="page">
+ <repeat count="2">
+ <param name="origin" start="~start~" increment="112" />
+ <param name="row" start="0" increment="10" />
+ <repeat count="16">
+ <param name="char" start="~origin~" increment="7" />
+ <param name="x" start="0" increment="6" />
+ <repeat count="7">
+ <param name="n" start="~char~" increment="1" />
+ <param name="y" start="~row~" increment="1" />
+ <element name="pg_~n~" ref="dotrow" state="0">
+ <bounds x="~x~" y="~y~" width="5" height="1" />
+ </element>
+ </repeat>
+ </repeat>
+ </repeat>
+ </group>
<view name="Default Layout">
<!-- Background -->
@@ -81,41 +115,29 @@ license:CC0
<element name="rLed_14" ref="rLeds"> <bounds x="280" y="20" width="5" height="3" /> </element>
<element name="rLed_15" ref="rLeds"> <bounds x="290" y="20" width="5" height="3" /> </element>
- <repeat count="3">
- <param name="page" start="3" increment="-1" />
- <param name="start" start="3000" increment="-1000" />
- <param name="baseline" start="0" increment="20" />
- <repeat count="2">
- <param name="origin" start="~start~" increment="112" />
- <param name="row" start="~baseline~" increment="10" />
- <repeat count="16">
- <param name="char" start="~origin~" increment="7" />
- <param name="x" start="0" increment="6" />
- <repeat count="7">
- <param name="n" start="~char~" increment="1" />
- <param name="y" start="~row~" increment="1" />
- <element name="pg_~n~" ref="Page~page~" state="0">
- <bounds x="~x~" y="~y~" width="5" height="1" />
- </element>
- </repeat>
- </repeat>
- </repeat>
- </repeat>
- <repeat count="2">
- <param name="origin" start="4000" increment="112" />
- <param name="row" start="80" increment="10" />
- <repeat count="16">
- <param name="char" start="~origin~" increment="7" />
- <param name="x" start="0" increment="6" />
- <repeat count="7">
- <param name="n" start="~char~" increment="1" />
- <param name="y" start="~row~" increment="1" />
- <element name="pg_~n~" ref="Page4" state="0">
- <bounds x="~x~" y="~y~" width="5" height="1" />
- </element>
- </repeat>
- </repeat>
- </repeat>
+ <param name="start" value="3000" />
+ <group ref="page">
+ <bounds x="0" y="0" width="95" height="17" />
+ <color red="1.0" green="1.0" blue="0.0" />
+ </group>
+
+ <param name="start" value="2000" />
+ <group ref="page">
+ <bounds x="0" y="20" width="95" height="17" />
+ <color red="0.0" green="1.0" blue="0.0" />
+ </group>
+
+ <param name="start" value="1000" />
+ <group ref="page">
+ <bounds x="0" y="40" width="95" height="17" />
+ <color red="0.0" green="1.0" blue="1.0" />
+ </group>
+
+ <param name="start" value="4000" />
+ <group ref="page">
+ <bounds x="0" y="80" width="95" height="17" />
+ <color red="0.0" green="0.0" blue="1.0" />
+ </group>
</view>
</mamelayout>
diff --git a/src/mame/layout/hp9825.lay b/src/mame/layout/hp9825.lay
index 98341bd0bff..78db4e34edf 100644
--- a/src/mame/layout/hp9825.lay
+++ b/src/mame/layout/hp9825.lay
@@ -6,9 +6,44 @@ Hewlett-Packard 9825 Layout
-->
<mamelayout version="2">
<element name="dotmatrix5dot">
- <dotmatrix5dot>
- <color red="1.0" green="0" blue="0" />
- </dotmatrix5dot>
+ <rect>
+ <bounds x="-0.1" width="5.6" y="-0.1" height="1.2" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </rect>
+ <disk state="0" statemask="0x01">
+ <bounds x="0.0" />
+ <color red="0.25" green="0.25" blue="0.25" />
+ </disk>
+ <disk state="0" statemask="0x02">
+ <bounds x="1.1" />
+ <color red="0.25" green="0.25" blue="0.25" />
+ </disk>
+ <disk state="0" statemask="0x04">
+ <bounds x="2.2" />
+ <color red="0.25" green="0.25" blue="0.25" />
+ </disk>
+ <disk state="0" statemask="0x08">
+ <bounds x="3.3" />
+ <color red="0.25" green="0.25" blue="0.25" /></disk>
+ <disk state="0" statemask="0x10">
+ <bounds x="4.4" />
+ <color red="0.25" green="0.25" blue="0.25" />
+ </disk>
+ <disk statemask="0x01">
+ <bounds x="0.0" />
+ </disk>
+ <disk statemask="0x02">
+ <bounds x="1.1" />
+ </disk>
+ <disk statemask="0x04">
+ <bounds x="2.2" />
+ </disk>
+ <disk statemask="0x08">
+ <bounds x="3.3" />
+ </disk>
+ <disk statemask="0x10">
+ <bounds x="4.4" />
+ </disk>
</element>
<element name="run_light" defstate="0">
@@ -34,6 +69,7 @@ Hewlett-Packard 9825 Layout
<param name="rowidx" start="0" increment="1" />
<element name="char_~digitidx~_~rowidx~" ref="dotmatrix5dot" state="0">
<bounds x="~digit_x~" y="~rowidx~" width="5" height="1" />
+ <color red="1.0" green="0.0" blue="0.0" />
</element>
</repeat>
</repeat>
diff --git a/src/mame/layout/sc2_dmd.lay b/src/mame/layout/sc2_dmd.lay
index 0d3b9b1f41e..75f1c28825b 100644
--- a/src/mame/layout/sc2_dmd.lay
+++ b/src/mame/layout/sc2_dmd.lay
@@ -18,9 +18,14 @@ license:CC0
</rect>
</element>
<element name="dotmatrixdot">
- <dotmatrixdot>
- <color red="1.0" green="0.12" blue="0.12" />
- </dotmatrixdot>
+ <rect>
+ <color red="0" green="0" blue="0" />
+ <bounds left="-0.1" top="-0.1" right="1.1" bottom="1.1" />
+ </rect>
+ <disk>
+ <color state="1" red="1.0" green="1.0" blue="1.0" />
+ <color state="0" red="0.125" green="0.125" blue="0.125" />
+ </disk>
</element>
<element name="Steppers" defstate="0">
<simplecounter maxstate="999" digits="3">
@@ -38,6 +43,7 @@ license:CC0
<param name="x" start="0" increment="1" />
<element name="dotmatrix~n~" ref="dotmatrixdot" state="0">
<bounds x="~x~" y="~y~" width="1" height="1" />
+ <color red="1.0" green="0.12" blue="0.12" />
</element>
</repeat>
</repeat>
diff --git a/src/mame/layout/sc2copcl7.lay b/src/mame/layout/sc2copcl7.lay
index d8588a2a311..32e8a52e26d 100644
--- a/src/mame/layout/sc2copcl7.lay
+++ b/src/mame/layout/sc2copcl7.lay
@@ -2099,9 +2099,14 @@
</element>
<element name="dotmatrixdot">
- <dotmatrixdot>
- <color red="1.0" green="0.12" blue="0.12" />
- </dotmatrixdot>
+ <rect>
+ <color red="0" green="0" blue="0" />
+ <bounds left="-0.1" top="-0.1" right="1.1" bottom="1.1" />
+ </rect>
+ <disk>
+ <color state="1" red="1.0" green="1.0" blue="1.0" />
+ <color state="0" red="0.125" green="0.125" blue="0.125" />
+ </disk>
</element>
<group name="dmd">
<repeat count="21">
@@ -2112,6 +2117,7 @@
<param name="x" start="0" increment="1" />
<element name="dotmatrix~n~" ref="dotmatrixdot" state="0">
<bounds x="~x~" y="~y~" width="1" height="1" />
+ <color red="1.0" green="0.12" blue="0.12" />
</element>
</repeat>
</repeat>
diff --git a/src/mame/layout/sc2cpe.lay b/src/mame/layout/sc2cpe.lay
index d52439a3590..eceb3fd15c8 100644
--- a/src/mame/layout/sc2cpe.lay
+++ b/src/mame/layout/sc2cpe.lay
@@ -2125,9 +2125,14 @@
</element>
<element name="dotmatrixdot">
- <dotmatrixdot>
- <color red="1.0" green="0.12" blue="0.12" />
- </dotmatrixdot>
+ <rect>
+ <color red="0" green="0" blue="0" />
+ <bounds left="-0.1" top="-0.1" right="1.1" bottom="1.1" />
+ </rect>
+ <disk>
+ <color state="1" red="1.0" green="1.0" blue="1.0" />
+ <color state="0" red="0.125" green="0.125" blue="0.125" />
+ </disk>
</element>
<group name="dmd">
<repeat count="21">
@@ -2138,6 +2143,7 @@
<param name="x" start="0" increment="1" />
<element name="dotmatrix~n~" ref="dotmatrixdot" state="0">
<bounds x="~x~" y="~y~" width="1" height="1" />
+ <color red="1.0" green="0.12" blue="0.12" />
</element>
</repeat>
</repeat>
diff --git a/src/mame/layout/sc2prem2.lay b/src/mame/layout/sc2prem2.lay
index 71b79ae888a..d376251548e 100644
--- a/src/mame/layout/sc2prem2.lay
+++ b/src/mame/layout/sc2prem2.lay
@@ -2185,9 +2185,14 @@
</element>
<element name="dotmatrixdot">
- <dotmatrixdot>
- <color red="1.0" green="0.12" blue="0.12" />
- </dotmatrixdot>
+ <rect>
+ <color red="0" green="0" blue="0" />
+ <bounds left="-0.1" top="-0.1" right="1.1" bottom="1.1" />
+ </rect>
+ <disk>
+ <color state="1" red="1.0" green="1.0" blue="1.0" />
+ <color state="0" red="0.125" green="0.125" blue="0.125" />
+ </disk>
</element>
<group name="dmd">
<repeat count="21">
@@ -2198,6 +2203,7 @@
<param name="x" start="0" increment="1" />
<element name="dotmatrix~n~" ref="dotmatrixdot" state="0">
<bounds x="~x~" y="~y~" width="1" height="1" />
+ <color red="1.0" green="0.12" blue="0.12" />
</element>
</repeat>
</repeat>
diff --git a/src/mame/layout/sc2prom.lay b/src/mame/layout/sc2prom.lay
index 63c9b8d1679..369aef18a6e 100644
--- a/src/mame/layout/sc2prom.lay
+++ b/src/mame/layout/sc2prom.lay
@@ -1609,9 +1609,14 @@
</element>
<element name="dotmatrixdot">
- <dotmatrixdot>
- <color red="1.0" green="0.12" blue="0.12" />
- </dotmatrixdot>
+ <rect>
+ <color red="0" green="0" blue="0" />
+ <bounds left="-0.1" top="-0.1" right="1.1" bottom="1.1" />
+ </rect>
+ <disk>
+ <color state="1" red="1.0" green="1.0" blue="1.0" />
+ <color state="0" red="0.125" green="0.125" blue="0.125" />
+ </disk>
</element>
<group name="dmd">
<repeat count="21">
@@ -1622,6 +1627,7 @@
<param name="x" start="0" increment="1" />
<element name="dotmatrix~n~" ref="dotmatrixdot" state="0">
<bounds x="~x~" y="~y~" width="1" height="1" />
+ <color red="1.0" green="0.12" blue="0.12" />
</element>
</repeat>
</repeat>
diff --git a/src/mame/layout/sc2ptytm1.lay b/src/mame/layout/sc2ptytm1.lay
index 1cde0618a3b..3b39ac670ba 100644
--- a/src/mame/layout/sc2ptytm1.lay
+++ b/src/mame/layout/sc2ptytm1.lay
@@ -1153,9 +1153,14 @@
</element>
<element name="dotmatrixdot">
- <dotmatrixdot>
- <color red="1.0" green="0.12" blue="0.12" />
- </dotmatrixdot>
+ <rect>
+ <color red="0" green="0" blue="0" />
+ <bounds left="-0.1" top="-0.1" right="1.1" bottom="1.1" />
+ </rect>
+ <disk>
+ <color state="1" red="1.0" green="1.0" blue="1.0" />
+ <color state="0" red="0.125" green="0.125" blue="0.125" />
+ </disk>
</element>
<group name="dmd">
<repeat count="21">
@@ -1166,6 +1171,7 @@
<param name="x" start="0" increment="1" />
<element name="dotmatrix~n~" ref="dotmatrixdot" state="0">
<bounds x="~x~" y="~y~" width="1" height="1" />
+ <color red="1.0" green="0.12" blue="0.12" />
</element>
</repeat>
</repeat>
diff --git a/src/mame/layout/sc2town2.lay b/src/mame/layout/sc2town2.lay
index d0595ea60ea..14c06cd4514 100644
--- a/src/mame/layout/sc2town2.lay
+++ b/src/mame/layout/sc2town2.lay
@@ -1887,9 +1887,14 @@
</element>
<element name="dotmatrixdot">
- <dotmatrixdot>
- <color red="1.0" green="0.12" blue="0.12" />
- </dotmatrixdot>
+ <rect>
+ <color red="0" green="0" blue="0" />
+ <bounds left="-0.1" top="-0.1" right="1.1" bottom="1.1" />
+ </rect>
+ <disk>
+ <color state="1" red="1.0" green="1.0" blue="1.0" />
+ <color state="0" red="0.125" green="0.125" blue="0.125" />
+ </disk>
</element>
<group name="dmd">
<repeat count="21">
@@ -1900,6 +1905,7 @@
<param name="x" start="0" increment="1" />
<element name="dotmatrix~n~" ref="dotmatrixdot" state="0">
<bounds x="~x~" y="~y~" width="1" height="1" />
+ <color red="1.0" green="0.12" blue="0.12" />
</element>
</repeat>
</repeat>
diff --git a/src/mame/layout/sc4_dmd.lay b/src/mame/layout/sc4_dmd.lay
index b42cda68acd..6d965bdb4ea 100644
--- a/src/mame/layout/sc4_dmd.lay
+++ b/src/mame/layout/sc4_dmd.lay
@@ -87,9 +87,14 @@ license:CC0
<element name="dotmatrixdot">
- <dotmatrixdot>
- <color red="1.0" green="0" blue="0" />
- </dotmatrixdot>
+ <rect>
+ <color red="0" green="0" blue="0" />
+ <bounds left="-0.1" top="-0.1" right="1.1" bottom="1.1" />
+ </rect>
+ <disk>
+ <color state="1" red="1.0" green="0.0" blue="0.0" />
+ <color state="0" red="0.125" green="0.0" blue="0.0" />
+ </disk>
</element>
<element name="digit" defstate="10">
<led7seg>
diff --git a/src/mame/layout/tecnbras.lay b/src/mame/layout/tecnbras.lay
index c65cea29235..da18525567f 100644
--- a/src/mame/layout/tecnbras.lay
+++ b/src/mame/layout/tecnbras.lay
@@ -4,9 +4,45 @@ license:CC0
-->
<mamelayout version="2">
<element name="dotmatrix5dot">
- <dotmatrix5dot>
- <color red="1.0" green="0" blue="0" />
- </dotmatrix5dot>
+ <rect>
+ <bounds x="-0.1" width="5.6" y="-0.1" height="1.2" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </rect>
+ <disk state="0" statemask="0x01">
+ <bounds x="0.0" />
+ <color red="0.125" green="0.125" blue="0.125" />
+ </disk>
+ <disk state="0" statemask="0x02">
+ <bounds x="1.1" />
+ <color red="0.125" green="0.125" blue="0.125" />
+ </disk>
+ <disk state="0" statemask="0x04">
+ <bounds x="2.2" />
+ <color red="0.125" green="0.125" blue="0.125" />
+ </disk>
+ <disk state="0" statemask="0x08">
+ <bounds x="3.3" />
+ <color red="0.125" green="0.125" blue="0.125" />
+ </disk>
+ <disk state="0" statemask="0x10">
+ <bounds x="4.4" />
+ <color red="0.125" green="0.125" blue="0.125" />
+ </disk>
+ <disk statemask="0x01">
+ <bounds x="0.0" />
+ </disk>
+ <disk statemask="0x02">
+ <bounds x="1.1" />
+ </disk>
+ <disk statemask="0x04">
+ <bounds x="2.2" />
+ </disk>
+ <disk statemask="0x08">
+ <bounds x="3.3" />
+ </disk>
+ <disk statemask="0x10">
+ <bounds x="4.4" />
+ </disk>
</element>
<element name="background">
<rect>
@@ -18,299 +54,17 @@ license:CC0
<element ref="background">
<bounds left="00" top="00" right="70" bottom="7" />
</element>
- <element name="dmd_0" ref="dotmatrix5dot" state="0">
- <bounds x="0" y="0" width="5" height="1" />
- </element>
- <element name="dmd_1" ref="dotmatrix5dot" state="0">
- <bounds x="0" y="1" width="5" height="1" />
- </element>
- <element name="dmd_2" ref="dotmatrix5dot" state="0">
- <bounds x="0" y="2" width="5" height="1" />
- </element>
- <element name="dmd_3" ref="dotmatrix5dot" state="0">
- <bounds x="0" y="3" width="5" height="1" />
- </element>
- <element name="dmd_4" ref="dotmatrix5dot" state="0">
- <bounds x="0" y="4" width="5" height="1" />
- </element>
- <element name="dmd_5" ref="dotmatrix5dot" state="0">
- <bounds x="0" y="5" width="5" height="1" />
- </element>
- <element name="dmd_6" ref="dotmatrix5dot" state="0">
- <bounds x="0" y="6" width="5" height="1" />
- </element>
- <element name="dmd_7" ref="dotmatrix5dot" state="0">
- <bounds x="5" y="0" width="5" height="1" />
- </element>
- <element name="dmd_8" ref="dotmatrix5dot" state="0">
- <bounds x="5" y="1" width="5" height="1" />
- </element>
- <element name="dmd_9" ref="dotmatrix5dot" state="0">
- <bounds x="5" y="2" width="5" height="1" />
- </element>
- <element name="dmd_10" ref="dotmatrix5dot" state="0">
- <bounds x="5" y="3" width="5" height="1" />
- </element>
- <element name="dmd_11" ref="dotmatrix5dot" state="0">
- <bounds x="5" y="4" width="5" height="1" />
- </element>
- <element name="dmd_12" ref="dotmatrix5dot" state="0">
- <bounds x="5" y="5" width="5" height="1" />
- </element>
- <element name="dmd_13" ref="dotmatrix5dot" state="0">
- <bounds x="5" y="6" width="5" height="1" />
- </element>
- <element name="dmd_14" ref="dotmatrix5dot" state="0">
- <bounds x="10" y="0" width="5" height="1" />
- </element>
- <element name="dmd_15" ref="dotmatrix5dot" state="0">
- <bounds x="10" y="1" width="5" height="1" />
- </element>
- <element name="dmd_16" ref="dotmatrix5dot" state="0">
- <bounds x="10" y="2" width="5" height="1" />
- </element>
- <element name="dmd_17" ref="dotmatrix5dot" state="0">
- <bounds x="10" y="3" width="5" height="1" />
- </element>
- <element name="dmd_18" ref="dotmatrix5dot" state="0">
- <bounds x="10" y="4" width="5" height="1" />
- </element>
- <element name="dmd_19" ref="dotmatrix5dot" state="0">
- <bounds x="10" y="5" width="5" height="1" />
- </element>
- <element name="dmd_20" ref="dotmatrix5dot" state="0">
- <bounds x="10" y="6" width="5" height="1" />
- </element>
- <element name="dmd_21" ref="dotmatrix5dot" state="0">
- <bounds x="15" y="0" width="5" height="1" />
- </element>
- <element name="dmd_22" ref="dotmatrix5dot" state="0">
- <bounds x="15" y="1" width="5" height="1" />
- </element>
- <element name="dmd_23" ref="dotmatrix5dot" state="0">
- <bounds x="15" y="2" width="5" height="1" />
- </element>
- <element name="dmd_24" ref="dotmatrix5dot" state="0">
- <bounds x="15" y="3" width="5" height="1" />
- </element>
- <element name="dmd_25" ref="dotmatrix5dot" state="0">
- <bounds x="15" y="4" width="5" height="1" />
- </element>
- <element name="dmd_26" ref="dotmatrix5dot" state="0">
- <bounds x="15" y="5" width="5" height="1" />
- </element>
- <element name="dmd_27" ref="dotmatrix5dot" state="0">
- <bounds x="15" y="6" width="5" height="1" />
- </element>
- <element name="dmd_28" ref="dotmatrix5dot" state="0">
- <bounds x="20" y="0" width="5" height="1" />
- </element>
- <element name="dmd_29" ref="dotmatrix5dot" state="0">
- <bounds x="20" y="1" width="5" height="1" />
- </element>
- <element name="dmd_30" ref="dotmatrix5dot" state="0">
- <bounds x="20" y="2" width="5" height="1" />
- </element>
- <element name="dmd_31" ref="dotmatrix5dot" state="0">
- <bounds x="20" y="3" width="5" height="1" />
- </element>
- <element name="dmd_32" ref="dotmatrix5dot" state="0">
- <bounds x="20" y="4" width="5" height="1" />
- </element>
- <element name="dmd_33" ref="dotmatrix5dot" state="0">
- <bounds x="20" y="5" width="5" height="1" />
- </element>
- <element name="dmd_34" ref="dotmatrix5dot" state="0">
- <bounds x="20" y="6" width="5" height="1" />
- </element>
- <element name="dmd_35" ref="dotmatrix5dot" state="0">
- <bounds x="25" y="0" width="5" height="1" />
- </element>
- <element name="dmd_36" ref="dotmatrix5dot" state="0">
- <bounds x="25" y="1" width="5" height="1" />
- </element>
- <element name="dmd_37" ref="dotmatrix5dot" state="0">
- <bounds x="25" y="2" width="5" height="1" />
- </element>
- <element name="dmd_38" ref="dotmatrix5dot" state="0">
- <bounds x="25" y="3" width="5" height="1" />
- </element>
- <element name="dmd_39" ref="dotmatrix5dot" state="0">
- <bounds x="25" y="4" width="5" height="1" />
- </element>
- <element name="dmd_40" ref="dotmatrix5dot" state="0">
- <bounds x="25" y="5" width="5" height="1" />
- </element>
- <element name="dmd_41" ref="dotmatrix5dot" state="0">
- <bounds x="25" y="6" width="5" height="1" />
- </element>
- <element name="dmd_42" ref="dotmatrix5dot" state="0">
- <bounds x="30" y="0" width="5" height="1" />
- </element>
- <element name="dmd_43" ref="dotmatrix5dot" state="0">
- <bounds x="30" y="1" width="5" height="1" />
- </element>
- <element name="dmd_44" ref="dotmatrix5dot" state="0">
- <bounds x="30" y="2" width="5" height="1" />
- </element>
- <element name="dmd_45" ref="dotmatrix5dot" state="0">
- <bounds x="30" y="3" width="5" height="1" />
- </element>
- <element name="dmd_46" ref="dotmatrix5dot" state="0">
- <bounds x="30" y="4" width="5" height="1" />
- </element>
- <element name="dmd_47" ref="dotmatrix5dot" state="0">
- <bounds x="30" y="5" width="5" height="1" />
- </element>
- <element name="dmd_48" ref="dotmatrix5dot" state="0">
- <bounds x="30" y="6" width="5" height="1" />
- </element>
- <element name="dmd_49" ref="dotmatrix5dot" state="0">
- <bounds x="35" y="0" width="5" height="1" />
- </element>
- <element name="dmd_50" ref="dotmatrix5dot" state="0">
- <bounds x="35" y="1" width="5" height="1" />
- </element>
- <element name="dmd_51" ref="dotmatrix5dot" state="0">
- <bounds x="35" y="2" width="5" height="1" />
- </element>
- <element name="dmd_52" ref="dotmatrix5dot" state="0">
- <bounds x="35" y="3" width="5" height="1" />
- </element>
- <element name="dmd_53" ref="dotmatrix5dot" state="0">
- <bounds x="35" y="4" width="5" height="1" />
- </element>
- <element name="dmd_54" ref="dotmatrix5dot" state="0">
- <bounds x="35" y="5" width="5" height="1" />
- </element>
- <element name="dmd_55" ref="dotmatrix5dot" state="0">
- <bounds x="35" y="6" width="5" height="1" />
- </element>
- <element name="dmd_56" ref="dotmatrix5dot" state="0">
- <bounds x="40" y="0" width="5" height="1" />
- </element>
- <element name="dmd_57" ref="dotmatrix5dot" state="0">
- <bounds x="40" y="1" width="5" height="1" />
- </element>
- <element name="dmd_58" ref="dotmatrix5dot" state="0">
- <bounds x="40" y="2" width="5" height="1" />
- </element>
- <element name="dmd_59" ref="dotmatrix5dot" state="0">
- <bounds x="40" y="3" width="5" height="1" />
- </element>
- <element name="dmd_60" ref="dotmatrix5dot" state="0">
- <bounds x="40" y="4" width="5" height="1" />
- </element>
- <element name="dmd_61" ref="dotmatrix5dot" state="0">
- <bounds x="40" y="5" width="5" height="1" />
- </element>
- <element name="dmd_62" ref="dotmatrix5dot" state="0">
- <bounds x="40" y="6" width="5" height="1" />
- </element>
- <element name="dmd_63" ref="dotmatrix5dot" state="0">
- <bounds x="45" y="0" width="5" height="1" />
- </element>
- <element name="dmd_64" ref="dotmatrix5dot" state="0">
- <bounds x="45" y="1" width="5" height="1" />
- </element>
- <element name="dmd_65" ref="dotmatrix5dot" state="0">
- <bounds x="45" y="2" width="5" height="1" />
- </element>
- <element name="dmd_66" ref="dotmatrix5dot" state="0">
- <bounds x="45" y="3" width="5" height="1" />
- </element>
- <element name="dmd_67" ref="dotmatrix5dot" state="0">
- <bounds x="45" y="4" width="5" height="1" />
- </element>
- <element name="dmd_68" ref="dotmatrix5dot" state="0">
- <bounds x="45" y="5" width="5" height="1" />
- </element>
- <element name="dmd_69" ref="dotmatrix5dot" state="0">
- <bounds x="45" y="6" width="5" height="1" />
- </element>
- <element name="dmd_70" ref="dotmatrix5dot" state="0">
- <bounds x="50" y="0" width="5" height="1" />
- </element>
- <element name="dmd_71" ref="dotmatrix5dot" state="0">
- <bounds x="50" y="1" width="5" height="1" />
- </element>
- <element name="dmd_72" ref="dotmatrix5dot" state="0">
- <bounds x="50" y="2" width="5" height="1" />
- </element>
- <element name="dmd_73" ref="dotmatrix5dot" state="0">
- <bounds x="50" y="3" width="5" height="1" />
- </element>
- <element name="dmd_74" ref="dotmatrix5dot" state="0">
- <bounds x="50" y="4" width="5" height="1" />
- </element>
- <element name="dmd_75" ref="dotmatrix5dot" state="0">
- <bounds x="50" y="5" width="5" height="1" />
- </element>
- <element name="dmd_76" ref="dotmatrix5dot" state="0">
- <bounds x="50" y="6" width="5" height="1" />
- </element>
- <element name="dmd_77" ref="dotmatrix5dot" state="0">
- <bounds x="55" y="0" width="5" height="1" />
- </element>
- <element name="dmd_78" ref="dotmatrix5dot" state="0">
- <bounds x="55" y="1" width="5" height="1" />
- </element>
- <element name="dmd_79" ref="dotmatrix5dot" state="0">
- <bounds x="55" y="2" width="5" height="1" />
- </element>
- <element name="dmd_80" ref="dotmatrix5dot" state="0">
- <bounds x="55" y="3" width="5" height="1" />
- </element>
- <element name="dmd_81" ref="dotmatrix5dot" state="0">
- <bounds x="55" y="4" width="5" height="1" />
- </element>
- <element name="dmd_82" ref="dotmatrix5dot" state="0">
- <bounds x="55" y="5" width="5" height="1" />
- </element>
- <element name="dmd_83" ref="dotmatrix5dot" state="0">
- <bounds x="55" y="6" width="5" height="1" />
- </element>
- <element name="dmd_84" ref="dotmatrix5dot" state="0">
- <bounds x="60" y="0" width="5" height="1" />
- </element>
- <element name="dmd_85" ref="dotmatrix5dot" state="0">
- <bounds x="60" y="1" width="5" height="1" />
- </element>
- <element name="dmd_86" ref="dotmatrix5dot" state="0">
- <bounds x="60" y="2" width="5" height="1" />
- </element>
- <element name="dmd_87" ref="dotmatrix5dot" state="0">
- <bounds x="60" y="3" width="5" height="1" />
- </element>
- <element name="dmd_88" ref="dotmatrix5dot" state="0">
- <bounds x="60" y="4" width="5" height="1" />
- </element>
- <element name="dmd_89" ref="dotmatrix5dot" state="0">
- <bounds x="60" y="5" width="5" height="1" />
- </element>
- <element name="dmd_90" ref="dotmatrix5dot" state="0">
- <bounds x="60" y="6" width="5" height="1" />
- </element>
- <element name="dmd_91" ref="dotmatrix5dot" state="0">
- <bounds x="65" y="0" width="5" height="1" />
- </element>
- <element name="dmd_92" ref="dotmatrix5dot" state="0">
- <bounds x="65" y="1" width="5" height="1" />
- </element>
- <element name="dmd_93" ref="dotmatrix5dot" state="0">
- <bounds x="65" y="2" width="5" height="1" />
- </element>
- <element name="dmd_94" ref="dotmatrix5dot" state="0">
- <bounds x="65" y="3" width="5" height="1" />
- </element>
- <element name="dmd_95" ref="dotmatrix5dot" state="0">
- <bounds x="65" y="4" width="5" height="1" />
- </element>
- <element name="dmd_96" ref="dotmatrix5dot" state="0">
- <bounds x="65" y="5" width="5" height="1" />
- </element>
- <element name="dmd_97" ref="dotmatrix5dot" state="0">
- <bounds x="65" y="6" width="5" height="1" />
- </element>
+ <repeat count="14">
+ <param name="char" start="0" increment="7" />
+ <param name="x" start="0" increment="5" />
+ <repeat count="7">
+ <param name="n" start="~char~" increment="1" />
+ <param name="y" start="0" increment="1" />
+ <element name="dmd_~n~" ref="dotmatrix5dot" state="0">
+ <bounds x="~x~" y="~y~" width="5" height="1" />
+ <color red="1.0" green="0.0" blue="0.0" />
+ </element>
+ </repeat>
+ </repeat>
</view>
</mamelayout>
diff --git a/src/mame/layout/tmtennis.lay b/src/mame/layout/tmtennis.lay
index db4e50b1aee..aa6a2b48e1a 100644
--- a/src/mame/layout/tmtennis.lay
+++ b/src/mame/layout/tmtennis.lay
@@ -6,54 +6,38 @@ license:CC0
<!-- define elements -->
- <element name="green"><rect><color red="0" green="0.5" blue="0" /></rect></element>
- <element name="greena"><rect><color red="0" green="1" blue="0" /></rect></element>
- <element name="greend"><rect><color red="0" green="1" blue="0" /></rect></element>
-
+ <element name="court">
+ <image><data><![CDATA[
+ <svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" width="700" height="249" viewBox="0 0 700 249" version="1.1" id="svg1">
+ <path id="path1" d="m 1.5,247.5 h 697 l -95,-208 h -507 z"
+ style="fill:none;stroke:#00ff00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path id="path2" d="M 88,58.5 H 612"
+ style="fill:none;stroke:#00ff00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path id="path3" d="M 12,224.5 H 688"
+ style="fill:none;stroke:#00ff00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path id="path4" d="m 138.5,224.5 47,-166"
+ style="fill:none;stroke:#00ff00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path id="path5" d="m 561.5,224.5 -47,-166"
+ style="fill:none;stroke:#00ff00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path id="path6" d="M 163,136.5 H 537"
+ style="fill:none;stroke:#00ff00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path id="path7" d="M 350,247.5 V 38.5"
+ style="fill:none;stroke:#00ff00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <rect id="rect1" width="12" height="39" x="344" y="0" style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:none" />
+ <rect id="rect2" width="12" height="42" x="344" y="206" style="opacity:1;fill:#00ff00;fill-opacity:1;stroke:none" />
+ </svg>
+ ]]></data></image>
+ </element>
<!-- build screen -->
<view name="Internal Layout">
- <screen index="0"><bounds x="10" y="10" width="64" height="13.9" /></screen>
-
- <!-- draw the tennis court -->
-
- <repeat count="201">
- <param name="x" start="6.9" increment="0.0475" />
- <param name="y" start="27" increment="-0.105" />
- <element ref="greend"><bounds x="~x~" y="~y~" width="0.35" height="0.35" /><color alpha="0.18" /></element>
- </repeat>
-
- <repeat count="201">
- <param name="x" start="76.8" increment="-0.0475" />
- <param name="y" start="27" increment="-0.105" />
- <element ref="greend"><bounds x="~x~" y="~y~" width="0.35" height="0.35" /><color alpha="0.18" /></element>
- </repeat>
- <repeat count="159">
- <param name="x" start="20.7" increment="0.029" />
- <param name="y" start="24.7" increment="-0.105" />
- <element ref="greend"><bounds x="~x~" y="~y~" width="0.35" height="0.35" /><color alpha="0.18" /></element>
- </repeat>
+ <screen index="0" blend="add"><bounds x="3" y="7.6" width="64" height="13.9" /></screen>
- <repeat count="159">
- <param name="x" start="63" increment="-0.029" />
- <param name="y" start="24.7" increment="-0.105" />
- <element ref="greend"><bounds x="~x~" y="~y~" width="0.35" height="0.35" /><color alpha="0.18" /></element>
- </repeat>
-
- <element ref="greena"><bounds x="41.85" y="6" width="0.3" height="20" /><color alpha="0.5" /></element>
-
- <element ref="green"><bounds x="16.5" y="6.1" width="51" height="0.3" /></element>
- <element ref="green"><bounds x="15.7" y="8" width="52.6" height="0.3" /></element>
-
- <element ref="green"><bounds x="23.35" y="15.9" width="37.3" height="0.3" /></element>
-
- <element ref="green"><bounds x="8.1" y="24.8" width="67.8" height="0.3" /></element>
- <element ref="green"><bounds x="7" y="27" width="70" height="0.3" /></element>
+ <!-- draw the tennis court -->
- <element ref="green"><bounds x="41.4" y="2.3" width="1.2" height="3.9" /></element>
- <element ref="green"><bounds x="41.4" y="23" width="1.2" height="4.2" /></element>
+ <element ref="court"><bounds width="70" height="24.9" /><color alpha="0.5" /></element>
</view>
</mamelayout>