rendlay: allow user variables and repetition in layouts, also add a few more predefined variables

This commit is contained in:
Vas Crabb 2018-07-22 03:22:31 +10:00
parent 10f9ec6fcc
commit dce955c68d
14 changed files with 1586 additions and 1518 deletions

View File

@ -93,7 +93,8 @@ class XmlError(Exception):
class LayoutChecker(Minifyer):
BADTAGPATTERN = re.compile('[^abcdefghijklmnopqrstuvwxyz0123456789_.:^$]')
VARPATTERN = re.compile('^~scr(0|[1-9][0-9]*)(native[xy]aspect|width|height)~$')
VARPATTERN = re.compile('^.*~[0-9A-Za-z_]+~.*$')
FLOATCHARS = re.compile('^.*[.eE].*$')
SHAPES = frozenset(('disk', 'led14seg', 'led14segsc', 'led16seg', 'led16segsc', 'led7seg', 'led8seg_gts1', 'rect'))
OBJECTS = frozenset(('backdrop', 'bezel', 'cpanel', 'marquee', 'overlay'))
@ -106,8 +107,6 @@ class LayoutChecker(Minifyer):
self.views = { }
self.referenced_elements = { }
self.referenced_groups = { }
self.have_bounds = [ ]
self.have_color = [ ]
def formatLocation(self):
return '%s:%d:%d' % (self.locator.getSystemId(), self.locator.getLineNumber(), self.locator.getColumnNumber())
@ -116,36 +115,125 @@ class LayoutChecker(Minifyer):
self.errors += 1
sys.stderr.write('error: %s: %s\n' % (self.formatLocation(), msg))
def checkBoundsDimension(self, attrs, name):
if name in attrs:
try:
return float(attrs[name])
except:
if not self.VARPATTERN.match(attrs[name]):
self.handleError('Element bounds attribute %s "%s" is not numeric' % (name, attrs[name]))
return None
def checkIntAttribute(self, name, attrs, key, default):
if key not in attrs:
return default
val = attrs[key]
if self.VARPATTERN.match(val):
return None
base = 10
offs = 0
if (len(val) >= 1) and ('$' == val[0]):
base = 16
offs = 1
elif (len(val) >= 2) and ('0' == val[0]) and (('x' == val[1]) or ('X' == val[1])):
base = 16
offs = 2
elif (len(val) >= 1) and ('#' == val[0]):
offs = 1
try:
return int(val[offs:], base)
except:
self.handleError('Element %s attribute %s "%s" is not an integer' % (name, key, val))
return None
def checkFloatAttribute(self, name, attrs, key, default):
if key not in attrs:
return default
val = attrs[key]
if self.VARPATTERN.match(val):
return None
try:
return float(val)
except:
self.handleError('Element %s attribute %s "%s" is not a floating point number' % (name, key, val))
return None
def checkNumericAttribute(self, name, attrs, key, default):
if key not in attrs:
return default
val = attrs[key]
if self.VARPATTERN.match(val):
return None
base = 0
offs = 0
try:
if (len(val) >= 1) and ('$' == val[0]):
base = 16
offs = 1
elif (len(val) >= 2) and ('0' == val[0]) and (('x' == val[1]) or ('X' == val[1])):
base = 16
offs = 2
elif (len(val) >= 1) and ('#' == val[0]):
base = 10
offs = 1
elif self.FLOATCHARS.match(val):
return float(val)
return int(val[offs:], base)
except:
self.handleError('Element %s attribute %s "%s" is not a number' % (name, key, val))
return None
def checkParameter(self, attrs):
if 'name' not in attrs:
self.handleError('Element param missing attribute name')
else:
name = attrs['name']
self.checkNumericAttribute('param', attrs, 'increment', None)
lshift = self.checkIntAttribute('param', attrs, 'lshift', None)
if (lshift is not None) and (0 > lshift):
self.handleError('Element param attribute lshift "%s" is negative', (attrs['lshift'], ))
rshift = self.checkIntAttribute('param', attrs, 'rshift', None)
if (rshift is not None) and (0 > rshift):
self.handleError('Element param attribute rshift "%s" is negative', (attrs['rshift'], ))
if self.repeat_depth and self.repeat_depth[-1]:
if 'start' in attrs:
if 'value' in attrs:
self.handleError('Element param has both start and value attributes')
if 'name' in attrs:
if name not in self.variable_scopes[-1]:
self.variable_scopes[-1][name] = True
elif not self.VARPATTERN.match(name):
self.handleError('Incrementing parameter "%s" redefined', (name, ))
else:
if 'value' not in attrs:
self.handleError('Element param missing attribute value')
if ('increment' in attrs) or ('lshift' in attrs) or ('rshift' in attrs):
self.handleError('Element param has increment/lshift/rshift attribute(s) without start attribute')
if 'name' in attrs:
if not self.variable_scopes[-1].get(name, False):
self.variable_scopes[-1][name] = False
elif not self.VARPATTERN.match(name):
self.handleError('Incrementing parameter "%s" redefined', (name, ))
else:
if ('start' in attrs) or ('increment' in attrs) or ('lshift' in attrs) or ('rshift' in attrs):
self.handleError('Element param with start/increment/lshift/rshift attribute(s) not in repeat scope')
if 'value' not in attrs:
self.handleError('Element param missing attribute value')
if 'name' in attrs:
self.variable_scopes[-1][attrs['name']] = False
def checkBounds(self, attrs):
if self.have_bounds[-1]:
self.handleError('Duplicate element bounds')
else:
self.have_bounds[-1] = True
left = self.checkBoundsDimension(attrs, 'left')
top = self.checkBoundsDimension(attrs, 'top')
right = self.checkBoundsDimension(attrs, 'right')
bottom = self.checkBoundsDimension(attrs, 'bottom')
x = self.checkBoundsDimension(attrs, 'bottom')
y = self.checkBoundsDimension(attrs, 'bottom')
width = self.checkBoundsDimension(attrs, 'width')
height = self.checkBoundsDimension(attrs, 'height')
left = self.checkFloatAttribute('bounds', attrs, 'left', 0.0)
top = self.checkFloatAttribute('bounds', attrs, 'top', 0.0)
right = self.checkFloatAttribute('bounds', attrs, 'right', 1.0)
bottom = self.checkFloatAttribute('bounds', attrs, 'bottom', 1.0)
x = self.checkFloatAttribute('bounds', attrs, 'x', 0.0)
y = self.checkFloatAttribute('bounds', attrs, 'y', 0.0)
width = self.checkFloatAttribute('bounds', attrs, 'width', 1.0)
height = self.checkFloatAttribute('bounds', attrs, 'height', 1.0)
if (left is not None) and (right is not None) and (left > right):
self.handleError('Element bounds attribute left "%s" is greater than attribute right "%s"' % (
attrs['left'],
attrs['right']))
attrs.get('left', 0.0),
attrs.get('right', 1.0)))
if (top is not None) and (bottom is not None) and (top > bottom):
self.handleError('Element bounds attribute top "%s" is greater than attribute bottom "%s"' % (
attrs['top'],
attrs['bottom']))
attrs.get('top', 0.0),
attrs.get('bottom', 1.0)))
if (width is not None) and (0.0 > width):
self.handleError('Element bounds attribute width "%s" is negative' % (attrs['width'], ))
if (height is not None) and (0.0 > height):
@ -155,16 +243,12 @@ class LayoutChecker(Minifyer):
has_ltrb = ('left' in attrs) or ('top' in attrs) or ('right' in attrs) or ('bottom' in attrs)
has_origin_size = ('x' in attrs) or ('y' in attrs) or ('width' in attrs) or ('height' in attrs)
if has_ltrb and has_origin_size:
self.handleError('Element bounds has both left/top/right/bottom and origin/size')
self.handleError('Element bounds has both left/top/right/bottom and origin/size attributes')
def checkColorChannel(self, attrs, name):
if name in attrs:
try:
channel = float(attrs[name])
if (0.0 > channel) or (1.0 < channel):
self.handleError('Element color attribute %s "%s" outside valid range 0.0-1.0' % (name, attrs[name]))
except:
self.handleError('Element color attribute %s "%s" is not numeric' % (name, attrs[name]))
channel = self.checkFloatAttribute('color', attrs, name, None)
if (channel is not None) and ((0.0 > channel) or (1.0 < channel)):
self.handleError('Element color attribute %s "%s" outside valid range 0.0-1.0' % (name, attrs[name]))
def checkTag(self, tag, element, attr):
if '' == tag:
@ -177,7 +261,118 @@ class LayoutChecker(Minifyer):
if tag.find('::') >= 0:
self.handleError('Element %s attribute %s "%s" contains double separator' % (element, attr, tag))
def checkGroupViewItem(self, name, attrs):
def rootStartHandler(self, name, attrs):
if 'mamelayout' != name:
self.ignored_depth = 1
self.handleError('Expected root element mamelayout but found %s' % (name, ))
else:
if 'version' not in attrs:
self.handleError('Element mamelayout missing attribute version')
else:
try:
long(attrs['version'])
except:
self.handleError('Element mamelayout attribute version "%s" is not an integer' % (attrs['version'], ))
self.variable_scopes.append({ })
self.handlers.append((self.layoutStartHandler, self.layoutEndHandler))
def rootEndHandler(self, name, attrs):
pass # should be unreachable
def layoutStartHandler(self, name, attrs):
if 'element' == name:
if 'name' not in attrs:
self.handleError('Element element missing attribute name')
else:
if attrs['name'] not in self.elements:
self.elements[attrs['name']] = self.formatLocation()
elif not self.VARPATTERN.match(attrs['name']):
self.handleError('Element element has duplicate name (previous %s)' % (self.elements[attrs['name']], ))
self.handlers.append((self.elementStartHandler, self.elementEndHandler))
elif 'group' == name:
if 'name' not in attrs:
self.handleError('Element group missing attribute name')
else:
if attrs['name'] not in self.groups:
self.groups[attrs['name']] = self.formatLocation()
elif not self.VARPATTERN.match(attrs['name']):
self.handleError('Element group has duplicate name (previous %s)' % (self.groups[attrs['name']], ))
self.handlers.append((self.groupViewStartHandler, self.groupViewEndHandler))
self.variable_scopes.append({ })
self.repeat_depth.append(0)
self.have_bounds.append(False)
elif 'view' == name:
if 'name' not in attrs:
self.handleError('Element view missing attribute name')
else:
if attrs['name'] not in self.views:
self.views[attrs['name']] = self.formatLocation()
elif not self.VARPATTERN.match(attrs['name']):
self.handleError('Element view has duplicate name (previous %s)' % (self.views[attrs['name']], ))
self.handlers.append((self.groupViewStartHandler, self.groupViewEndHandler))
self.variable_scopes.append({ })
self.repeat_depth.append(0)
self.have_bounds.append(False)
elif 'param' == name:
self.checkParameter(attrs)
self.ignored_depth = 1
elif 'script' == name:
self.ignored_depth = 1
else:
self.handleError('Encountered unexpected element %s' % (name, ))
self.ignored_depth = 1
def layoutEndHandler(self, name):
for element in self.referenced_elements:
if (element not in self.elements) and (not self.VARPATTERN.match(element)):
self.handleError('Element "%s" not found (first referenced at %s)' % (element, self.referenced_elements[element]))
for group in self.referenced_groups:
if (group not in self.groups) and (not self.VARPATTERN.match(group)):
self.handleError('Group "%s" not found (first referenced at %s)' % (group, self.referenced_groups[group]))
self.variable_scopes.pop()
self.handlers.pop()
def elementStartHandler(self, name, attrs):
if name in self.SHAPES:
self.handlers.append((self.shapeStartHandler, self.shapeEndHandler))
self.have_bounds.append(False)
self.have_color.append(False)
elif 'text' == name:
if 'string' not in attrs:
self.handleError('Element bounds missing attribute string')
if 'align' in attrs:
align = self.checkIntAttribute(name, attrs, 'align', None)
if (align is not None) and ((0 > align) or (2 < align)):
self.handleError('Element text attribute align "%s" not in valid range 0-2' % (attrs['align'], ))
self.handlers.append((self.shapeStartHandler, self.shapeEndHandler))
self.have_bounds.append(False)
self.have_color.append(False)
else:
self.ignored_depth = 1
def elementEndHandler(self, name):
self.handlers.pop()
def shapeStartHandler(self, name, attrs):
if 'bounds' == name:
self.checkBounds(attrs)
elif 'color' == name:
if self.have_color[-1]:
self.handleError('Duplicate bounds element')
else:
self.have_color[-1] = True
self.checkColorChannel(attrs, 'red')
self.checkColorChannel(attrs, 'green')
self.checkColorChannel(attrs, 'blue')
self.checkColorChannel(attrs, 'alpha')
self.ignored_depth = 1
def shapeEndHandler(self, name):
self.have_bounds.pop()
self.have_color.pop()
self.handlers.pop()
def groupViewStartHandler(self, name, attrs):
if name in self.OBJECTS:
if 'element' not in attrs:
self.handleError('Element %s missing attribute element', (name, ))
@ -187,21 +382,14 @@ class LayoutChecker(Minifyer):
if 'inputmask' not in attrs:
self.handleError('Element %s has inputtag without inputmask attribute' % (name, ))
self.checkTag(attrs['inputtag'], name, 'inputtag')
if 'inputmask' in attrs:
try:
int(attrs['inputmask'], 0)
except:
self.handleError('Element %s attribute inputmask "%s" is not an integer' % (name, attrs['inputmask']))
self.in_object = True
self.checkIntAttribute(name, attrs, 'inputmask', None)
self.handlers.append((self.objectStartHandler, self.objectEndHandler))
self.have_bounds.append(False)
elif 'screen' == name:
if 'index' in attrs:
try:
index = long(attrs['index'], 0)
if 0 > index:
self.handleError('Element screen attribute index "%s" is negative' % (attrs['index'], ))
except:
self.handleError('Element screen attribute index "%s" is not an integer' % (attrs['index'], ))
index = self.checkIntAttribute(name, attrs, 'index', None)
if (index is not None) and (0 > index):
self.handleError('Element screen attribute index "%s" is negative' % (attrs['index'], ))
if 'tag' in attrs:
self.handleError('Element screen has both index and tag attributes')
if 'tag' in attrs:
@ -209,34 +397,65 @@ class LayoutChecker(Minifyer):
self.checkTag(tag, name, 'tag')
if self.BADTAGPATTERN.search(tag):
self.handleError('Element screen attribute tag "%s" contains invalid characters' % (tag, ))
self.in_object = True
self.handlers.append((self.objectStartHandler, self.objectEndHandler))
self.have_bounds.append(False)
elif 'group' == name:
if 'ref' not in attrs:
self.handleError('Element group missing attribute ref')
elif attrs['ref'] not in self.referenced_groups:
self.referenced_groups[attrs['ref']] = self.formatLocation()
self.in_object = True
self.handlers.append((self.objectStartHandler, self.objectEndHandler))
self.have_bounds.append(False)
elif 'repeat' == name:
if 'count' not in attrs:
self.handleError('Element repeat missing attribute count')
else:
count = self.checkIntAttribute(name, attrs, 'count', None)
if (count is not None) and (0 >= count):
self.handleError('Element repeat attribute count "%s" is negative' % (attrs['count'], ))
self.variable_scopes.append({ })
self.repeat_depth[-1] += 1
elif 'param' == name:
self.checkParameter(attrs)
self.ignored_depth = 1
elif 'bounds' == name:
self.checkBounds(attrs)
if self.repeat_depth[-1]:
self.handleError('Element bounds inside repeat')
self.ignored_depth = 1
else:
self.handleError('Encountered unexpected element %s' % (name, ))
self.ignored_depth = 1
def groupViewEndHandler(self, name):
self.variable_scopes.pop()
if self.repeat_depth[-1]:
self.repeat_depth[-1] -= 1
else:
self.repeat_depth.pop()
self.have_bounds.pop()
self.handlers.pop()
def objectStartHandler(self, name, attrs):
if 'bounds' == name:
self.checkBounds(attrs)
self.ignored_depth = 1
def objectEndHandler(self, name):
self.have_bounds.pop()
self.handlers.pop()
def setDocumentLocator(self, locator):
self.locator = locator
super(LayoutChecker, self).setDocumentLocator(locator)
def startDocument(self):
self.in_layout = False
self.in_element = False
self.in_group = False
self.in_view = False
self.in_shape = False
self.in_object = False
self.handlers = [(self.rootStartHandler, self.rootEndHandler)]
self.ignored_depth = 0
self.variable_scopes = [ ]
self.repeat_depth = [ ]
self.have_bounds = [ ]
self.have_color = [ ]
super(LayoutChecker, self).startDocument()
def endDocument(self):
@ -246,127 +465,26 @@ class LayoutChecker(Minifyer):
self.views.clear()
self.referenced_elements.clear()
self.referenced_groups.clear()
del self.have_bounds[:]
del self.have_color[:]
del self.handlers
del self.ignored_depth
del self.variable_scopes
del self.repeat_depth
del self.have_bounds
del self.have_color
super(LayoutChecker, self).endDocument()
def startElement(self, name, attrs):
if 0 < self.ignored_depth:
self.ignored_depth += 1
elif not self.in_layout:
if 'mamelayout' != name:
self.ignored_depth = 1
self.handleError('Expected root element mamelayout but found %s' % (name, ))
else:
if 'version' not in attrs:
self.handleError('Element mamelayout missing attribute version')
else:
try:
long(attrs['version'])
except:
self.handleError('Element mamelayout attribute version "%s" is not an integer' % (attrs['version'], ))
self.in_layout = True
elif self.in_object:
if 'bounds' == name:
self.checkBounds(attrs)
self.ignored_depth = 1
elif self.in_shape:
if 'bounds' == name:
self.checkBounds(attrs)
elif 'color' == name:
if self.have_color[-1]:
self.handleError('Duplicate bounds element')
else:
self.have_color[-1] = True
self.checkColorChannel(attrs, 'red')
self.checkColorChannel(attrs, 'green')
self.checkColorChannel(attrs, 'blue')
self.checkColorChannel(attrs, 'alpha')
self.ignored_depth = 1
elif self.in_element:
if name in self.SHAPES:
self.in_shape = True
self.have_bounds.append(False)
self.have_color.append(False)
elif 'text' == name:
if 'string' not in attrs:
self.handleError('Element bounds missing attribute string')
if 'align' in attrs:
try:
align = long(attrs['align'])
if (0 > align) or (2 < align):
self.handleError('Element text attribute align "%s" not in valid range 0-2' % (attrs['align'], ))
except:
self.handleError('Element text attribute align "%s" is not an integer' % (attrs['align'], ))
self.in_shape = True
self.have_bounds.append(False)
self.have_color.append(False)
else:
self.ignored_depth = 1
elif self.in_group or self.in_view:
self.checkGroupViewItem(name, attrs)
elif 'element' == name:
if 'name' not in attrs:
self.handleError('Element element missing attribute name')
else:
if attrs['name'] in self.elements:
self.handleError('Element element has duplicate name (previous %s)' % (self.elements[attrs['name']], ))
else:
self.elements[attrs['name']] = self.formatLocation()
self.in_element = True
elif 'group' == name:
if 'name' not in attrs:
self.handleError('Element group missing attribute name')
else:
if attrs['name'] in self.groups:
self.handleError('Element group has duplicate name (previous %s)' % (self.groups[attrs['name']], ))
else:
self.groups[attrs['name']] = self.formatLocation()
self.in_group = True
self.have_bounds.append(False)
elif 'view' == name:
if 'name' not in attrs:
self.handleError('Element view missing attribute name')
else:
if attrs['name'] in self.views:
self.handleError('Element view has duplicate name (previous %s)' % (self.views[attrs['name']], ))
else:
self.views[attrs['name']] = self.formatLocation()
self.in_view = True
self.have_bounds.append(False)
elif 'script' == name:
self.ignored_depth = 1
else:
self.handleError('Encountered unexpected element %s' % (name, ))
self.ignored_depth = 1
self.handlers[-1][0](name, attrs)
super(LayoutChecker, self).startElement(name, attrs)
def endElement(self, name):
if 0 < self.ignored_depth:
self.ignored_depth -= 1
elif self.in_object:
self.in_object = False
self.have_bounds.pop()
elif self.in_shape:
self.in_shape = False
self.have_bounds.pop()
self.have_color.pop()
elif self.in_element:
self.in_element = False
elif self.in_group:
self.in_group = False
self.have_bounds.pop()
elif self.in_view:
self.in_view = False
self.have_bounds.pop()
elif self.in_layout:
for element in self.referenced_elements:
if element not in self.elements:
self.handleError('Element "%s" not found (first referenced at %s)' % (element, self.referenced_elements[element]))
for group in self.referenced_groups:
if group not in self.groups:
self.handleError('Group "%s" not found (first referenced at %s)' % (group, self.referenced_groups[group]))
self.in_layout = False
else:
self.handlers[-1][1](name)
super(LayoutChecker, self).endElement(name)

View File

@ -604,13 +604,13 @@ ROM_START( ie15 )
ROM_END
MACHINE_CONFIG_START(ie15_device::device_add_mconfig)
ie15core(config);
MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green())
MCFG_SCREEN_UPDATE_DRIVER(ie15_device, screen_update)
MCFG_SCREEN_RAW_PARAMS(XTAL(30'800'000)/2, IE15_TOTAL_HORZ, IE15_HORZ_START,
IE15_HORZ_START+IE15_DISP_HORZ, IE15_TOTAL_VERT, IE15_VERT_START,
IE15_VERT_START+IE15_DISP_VERT);
MCFG_SCREEN_RAW_PARAMS(XTAL(30'800'000)/2,
IE15_TOTAL_HORZ, IE15_HORZ_START, IE15_HORZ_START+IE15_DISP_HORZ,
IE15_TOTAL_VERT, IE15_VERT_START, IE15_VERT_START+IE15_DISP_VERT);
ie15core(config);
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_ie15)
MCFG_PALETTE_ADD_MONOCHROME("palette")

View File

@ -1,53 +1,5 @@
<?xml version="1.0"?>
<mamelayout version="2">
<view name="Screen 0 Standard (4:3)">
<screen index="0">
<bounds left="0" top="0" right="4" bottom="3" />
</screen>
</view>
<view name="Screen 1 Standard (4:3)">
<screen index="1">
<bounds left="0" top="0" right="4" bottom="3" />
</screen>
</view>
<view name="Screen 2 Standard (4:3)">
<screen index="2">
<bounds left="0" top="0" right="4" bottom="3" />
</screen>
</view>
<view name="Screen 3 Standard (4:3)">
<screen index="3">
<bounds left="0" top="0" right="4" bottom="3" />
</screen>
</view>
<view name="Screen 0 Pixel Aspect (~scr0nativexaspect~:~scr0nativeyaspect~)">
<screen index="0">
<bounds left="0" top="0" right="~scr0width~" bottom="~scr0height~" />
</screen>
</view>
<view name="Screen 1 Pixel Aspect (~scr1nativexaspect~:~scr1nativeyaspect~)">
<screen index="1">
<bounds left="0" top="0" right="~scr1width~" bottom="~scr1height~" />
</screen>
</view>
<view name="Screen 2 Pixel Aspect (~scr2nativexaspect~:~scr2nativeyaspect~)">
<screen index="2">
<bounds left="0" top="0" right="~scr2width~" bottom="~scr2height~" />
</screen>
</view>
<view name="Screen 3 Pixel Aspect (~scr3nativexaspect~:~scr3nativeyaspect~)">
<screen index="3">
<bounds left="0" top="0" right="~scr3width~" bottom="~scr3height~" />
</screen>
</view>
<view name="Quad Side-by-Side">
<screen index="0">
<bounds x="0" y="0" width="4" height="3" />

View File

@ -79,7 +79,7 @@ enum
//**************************************************************************
// an object_transform is used to track transformations when building an object list
struct object_transform
struct render_target::object_transform
{
float xoffs, yoffs; // offset transforms
float xscale, yscale; // scale transforms

View File

@ -57,6 +57,9 @@
#include <vector>
namespace emu { namespace render { namespace detail { class layout_environment; } } }
//**************************************************************************
// CONSTANTS
//**************************************************************************
@ -127,41 +130,38 @@ constexpr u32 PRIMFLAG_PACKABLE = 1 << PRIMFLAG_PACKABLE_SHIFT;
// MACROS
//**************************************************************************
#define PRIMFLAG_TEXORIENT(x) ((x) << PRIMFLAG_TEXORIENT_SHIFT)
#define PRIMFLAG_GET_TEXORIENT(x) (((x) & PRIMFLAG_TEXORIENT_MASK) >> PRIMFLAG_TEXORIENT_SHIFT)
constexpr u32 PRIMFLAG_TEXORIENT(u32 x) { return x << PRIMFLAG_TEXORIENT_SHIFT; }
constexpr u32 PRIMFLAG_GET_TEXORIENT(u32 x) { return (x & PRIMFLAG_TEXORIENT_MASK) >> PRIMFLAG_TEXORIENT_SHIFT; }
#define PRIMFLAG_TEXFORMAT(x) ((x) << PRIMFLAG_TEXFORMAT_SHIFT)
#define PRIMFLAG_GET_TEXFORMAT(x) (((x) & PRIMFLAG_TEXFORMAT_MASK) >> PRIMFLAG_TEXFORMAT_SHIFT)
constexpr u32 PRIMFLAG_TEXFORMAT(u32 x) { return x << PRIMFLAG_TEXFORMAT_SHIFT; }
constexpr u32 PRIMFLAG_GET_TEXFORMAT(u32 x) { return (x & PRIMFLAG_TEXFORMAT_MASK) >> PRIMFLAG_TEXFORMAT_SHIFT; }
#define PRIMFLAG_BLENDMODE(x) ((x) << PRIMFLAG_BLENDMODE_SHIFT)
#define PRIMFLAG_GET_BLENDMODE(x) (((x) & PRIMFLAG_BLENDMODE_MASK) >> PRIMFLAG_BLENDMODE_SHIFT)
constexpr u32 PRIMFLAG_BLENDMODE(u32 x) { return x << PRIMFLAG_BLENDMODE_SHIFT; }
constexpr u32 PRIMFLAG_GET_BLENDMODE(u32 x) { return (x & PRIMFLAG_BLENDMODE_MASK) >> PRIMFLAG_BLENDMODE_SHIFT; }
#define PRIMFLAG_ANTIALIAS(x) ((x) << PRIMFLAG_ANTIALIAS_SHIFT)
#define PRIMFLAG_GET_ANTIALIAS(x) (((x) & PRIMFLAG_ANTIALIAS_MASK) >> PRIMFLAG_ANTIALIAS_SHIFT)
constexpr u32 PRIMFLAG_ANTIALIAS(u32 x) { return x << PRIMFLAG_ANTIALIAS_SHIFT; }
constexpr u32 PRIMFLAG_GET_ANTIALIAS(u32 x) { return (x & PRIMFLAG_ANTIALIAS_MASK) >> PRIMFLAG_ANTIALIAS_SHIFT; }
#define PRIMFLAG_SCREENTEX(x) ((x) << PRIMFLAG_SCREENTEX_SHIFT)
#define PRIMFLAG_GET_SCREENTEX(x) (((x) & PRIMFLAG_SCREENTEX_MASK) >> PRIMFLAG_SCREENTEX_SHIFT)
constexpr u32 PRIMFLAG_SCREENTEX(u32 x) { return x << PRIMFLAG_SCREENTEX_SHIFT; }
constexpr u32 PRIMFLAG_GET_SCREENTEX(u32 x) { return (x & PRIMFLAG_SCREENTEX_MASK) >> PRIMFLAG_SCREENTEX_SHIFT; }
#define PRIMFLAG_TEXWRAP(x) ((x) << PRIMFLAG_TEXWRAP_SHIFT)
#define PRIMFLAG_GET_TEXWRAP(x) (((x) & PRIMFLAG_TEXWRAP_MASK) >> PRIMFLAG_TEXWRAP_SHIFT)
constexpr u32 PRIMFLAG_TEXWRAP(u32 x) { return x << PRIMFLAG_TEXWRAP_SHIFT; }
constexpr u32 PRIMFLAG_GET_TEXWRAP(u32 x) { return (x & PRIMFLAG_TEXWRAP_MASK) >> PRIMFLAG_TEXWRAP_SHIFT; }
#define PRIMFLAG_TEXSHADE(x) ((x) << PRIMFLAG_TEXSHADE_SHIFT)
#define PRIMFLAG_GET_TEXSHADE(x) (((x) & PRIMFLAG_TEXSHADE_MASK) >> PRIMFLAG_TEXSHADE_SHIFT)
constexpr u32 PRIMFLAG_TEXSHADE(u32 x) { return x << PRIMFLAG_TEXSHADE_SHIFT; }
constexpr u32 PRIMFLAG_GET_TEXSHADE(u32 x) { return (x & PRIMFLAG_TEXSHADE_MASK) >> PRIMFLAG_TEXSHADE_SHIFT; }
#define PRIMFLAG_VECTOR(x) ((x) << PRIMFLAG_VECTOR_SHIFT)
#define PRIMFLAG_GET_VECTOR(x) (((x) & PRIMFLAG_VECTOR_MASK) >> PRIMFLAG_VECTOR_SHIFT)
constexpr u32 PRIMFLAG_VECTOR(u32 x) { return x << PRIMFLAG_VECTOR_SHIFT; }
constexpr u32 PRIMFLAG_GET_VECTOR(u32 x) { return (x & PRIMFLAG_VECTOR_MASK) >> PRIMFLAG_VECTOR_SHIFT; }
#define PRIMFLAG_VECTORBUF(x) ((x) << PRIMFLAG_VECTORBUF_SHIFT)
#define PRIMFLAG_GET_VECTORBUF(x) (((x) & PRIMFLAG_VECTORBUF_MASK) >> PRIMFLAG_VECTORBUF_SHIFT)
constexpr u32 PRIMFLAG_VECTORBUF(u32 x) { return x << PRIMFLAG_VECTORBUF_SHIFT; }
constexpr u32 PRIMFLAG_GET_VECTORBUF(u32 x) { return (x & PRIMFLAG_VECTORBUF_MASK) >> PRIMFLAG_VECTORBUF_SHIFT; }
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
// private classes declared in render.cpp
struct object_transform;
// texture scaling callback
typedef void (*texture_scaler_func)(bitmap_argb32 &dest, bitmap_argb32 &source, const rectangle &sbounds, void *param);
@ -173,8 +173,8 @@ struct render_bounds
float x1; // rightmost X coordinate
float y1; // bottommost Y coordinate
float width() const { return x1 - x0; }
float height() const { return y1 - y0; }
constexpr float width() const { return x1 - x0; }
constexpr float height() const { return y1 - y0; }
};
@ -232,12 +232,10 @@ class render_screen_list
public:
// construction/destruction
item(screen_device &screen)
: m_next(nullptr),
m_screen(screen) { }
item(screen_device &screen) : m_screen(screen) { }
// state
item * m_next; // next screen in list
item * m_next = nullptr; // next screen in list
screen_device & m_screen; // reference to screen device
};
@ -253,7 +251,7 @@ public:
int contains(screen_device &screen) const
{
int count = 0;
for (item *curitem = m_list.first(); curitem != nullptr; curitem = curitem->m_next)
for (item *curitem = m_list.first(); curitem; curitem = curitem->m_next)
if (&curitem->m_screen == &screen) count++;
return count;
}
@ -269,6 +267,7 @@ private:
// render_layer_config - describes the state of layers
class render_layer_config
{
private:
static constexpr u8 ENABLE_BACKDROP = 0x01; // enable backdrop layers
static constexpr u8 ENABLE_OVERLAY = 0x02; // enable overlay layers
static constexpr u8 ENABLE_BEZEL = 0x04; // enable bezel layers
@ -278,31 +277,36 @@ class render_layer_config
static constexpr u8 ENABLE_SCREEN_OVERLAY = 0x40; // enable screen overlays
static constexpr u8 DEFAULT = ENABLE_BACKDROP | ENABLE_OVERLAY | ENABLE_BEZEL | ENABLE_CPANEL | ENABLE_MARQUEE | ENABLE_SCREEN_OVERLAY;
u8 m_state = DEFAULT;
render_layer_config &set_flag(u8 flag, bool enable)
{
if (enable) m_state |= flag;
else m_state &= ~flag;
return *this;
}
public:
render_layer_config()
: m_state(DEFAULT) { }
constexpr render_layer_config() { }
bool operator==(const render_layer_config &rhs) const { return m_state == rhs.m_state; }
bool operator!=(const render_layer_config &rhs) const { return m_state != rhs.m_state; }
bool backdrops_enabled() const { return ((m_state & ENABLE_BACKDROP) != 0); }
bool overlays_enabled() const { return ((m_state & ENABLE_OVERLAY) != 0); }
bool bezels_enabled() const { return ((m_state & ENABLE_BEZEL) != 0); }
bool cpanels_enabled() const { return ((m_state & ENABLE_CPANEL) != 0); }
bool marquees_enabled() const { return ((m_state & ENABLE_MARQUEE) != 0); }
bool screen_overlay_enabled() const { return ((m_state & ENABLE_SCREEN_OVERLAY) != 0); }
bool zoom_to_screen() const { return ((m_state & ZOOM_TO_SCREEN) != 0); }
constexpr bool backdrops_enabled() const { return (m_state & ENABLE_BACKDROP) != 0; }
constexpr bool overlays_enabled() const { return (m_state & ENABLE_OVERLAY) != 0; }
constexpr bool bezels_enabled() const { return (m_state & ENABLE_BEZEL) != 0; }
constexpr bool cpanels_enabled() const { return (m_state & ENABLE_CPANEL) != 0; }
constexpr bool marquees_enabled() const { return (m_state & ENABLE_MARQUEE) != 0; }
constexpr bool screen_overlay_enabled() const { return (m_state & ENABLE_SCREEN_OVERLAY) != 0; }
constexpr bool zoom_to_screen() const { return (m_state & ZOOM_TO_SCREEN) != 0; }
render_layer_config &set_backdrops_enabled(bool enable) { if (enable) m_state |= ENABLE_BACKDROP; else m_state &= ~ENABLE_BACKDROP; return *this; }
render_layer_config &set_overlays_enabled(bool enable) { if (enable) m_state |= ENABLE_OVERLAY; else m_state &= ~ENABLE_OVERLAY; return *this; }
render_layer_config &set_bezels_enabled(bool enable) { if (enable) m_state |= ENABLE_BEZEL; else m_state &= ~ENABLE_BEZEL; return *this; }
render_layer_config &set_cpanels_enabled(bool enable) { if (enable) m_state |= ENABLE_CPANEL; else m_state &= ~ENABLE_CPANEL; return *this; }
render_layer_config &set_marquees_enabled(bool enable) { if (enable) m_state |= ENABLE_MARQUEE; else m_state &= ~ENABLE_MARQUEE; return *this; }
render_layer_config &set_screen_overlay_enabled(bool enable) { if (enable) m_state |= ENABLE_SCREEN_OVERLAY; else m_state &= ~ENABLE_SCREEN_OVERLAY; return *this; }
render_layer_config &set_zoom_to_screen(bool zoom) { if (zoom) m_state |= ZOOM_TO_SCREEN; else m_state &= ~ZOOM_TO_SCREEN; return *this; }
private:
u8 m_state;
render_layer_config &set_backdrops_enabled(bool enable) { return set_flag(ENABLE_BACKDROP, enable); }
render_layer_config &set_overlays_enabled(bool enable) { return set_flag(ENABLE_OVERLAY, enable); }
render_layer_config &set_bezels_enabled(bool enable) { return set_flag(ENABLE_BEZEL, enable); }
render_layer_config &set_cpanels_enabled(bool enable) { return set_flag(ENABLE_CPANEL, enable); }
render_layer_config &set_marquees_enabled(bool enable) { return set_flag(ENABLE_MARQUEE, enable); }
render_layer_config &set_screen_overlay_enabled(bool enable) { return set_flag(ENABLE_SCREEN_OVERLAY, enable); }
render_layer_config &set_zoom_to_screen(bool zoom) { return set_flag(ZOOM_TO_SCREEN, zoom); }
};
@ -314,13 +318,7 @@ class render_primitive
friend class simple_list<render_primitive>;
public:
render_primitive():
type(),
flags(0),
width(0),
container(nullptr),
m_next(nullptr)
{}
render_primitive() { }
// render primitive types
enum primitive_type
@ -342,19 +340,19 @@ public:
void reset();
// public state
primitive_type type; // type of primitive
primitive_type type = INVALID; // type of primitive
render_bounds bounds; // bounds or positions
render_bounds full_bounds; // bounds or positions (unclipped)
render_color color; // RGBA values
u32 flags; // flags
float width; // width (for line primitives)
u32 flags = 0U; // flags
float width = 0.0F; // width (for line primitives)
render_texinfo texture; // texture info (for quad primitives)
render_quad_texuv texcoords; // texture coordinates (for quad primitives)
render_container * container; // the render container we belong to
render_container * container = nullptr;// the render container we belong to
private:
// internal state
render_primitive * m_next; // pointer to next element
render_primitive * m_next = nullptr; // pointer to next element
};
@ -459,7 +457,7 @@ private:
struct scaled_texture
{
bitmap_argb32 * bitmap; // final bitmap
u32 seqid; // sequence number
u32 seqid; // sequence number
};
// internal state
@ -468,12 +466,12 @@ private:
bitmap_t * m_bitmap; // pointer to the original bitmap
rectangle m_sbounds; // source bounds within the bitmap
texture_format m_format; // format of the texture data
u64 m_osddata; // aux data to pass to osd
u64 m_osddata; // aux data to pass to osd
// scaling state (ARGB32 only)
texture_scaler_func m_scaler; // scaling callback
void * m_param; // scaling callback parameter
u32 m_curseq; // current sequence number
u32 m_curseq; // current sequence number
scaled_texture m_scaled[MAX_TEXTURE_SCALES];// array of scaled variants of this texture
};
@ -566,11 +564,11 @@ private:
private:
// internal state
item * m_next; // pointer to the next element in the list
u8 m_type; // type of element
u8 m_type; // type of element
render_bounds m_bounds; // bounds of the element
render_color m_color; // RGBA factors
u32 m_flags; // option flags
u32 m_internal; // internal flags
u32 m_flags; // option flags
u32 m_internal; // internal flags
float m_width; // width of the line (lines only)
render_texture * m_texture; // pointer to the source texture (quads only)
};
@ -635,8 +633,10 @@ DECLARE_ENUM_INCDEC_OPERATORS(item_layer)
class layout_element
{
public:
using environment = emu::render::detail::layout_environment;
// construction/destruction
layout_element(running_machine &machine, util::xml::data_node const &elemnode, const char *dirname);
layout_element(environment &env, util::xml::data_node const &elemnode, const char *dirname);
virtual ~layout_element();
// getters
@ -659,7 +659,7 @@ private:
typedef std::unique_ptr<component> ptr;
// construction/destruction
component(running_machine &machine, util::xml::data_node const &compnode, const char *dirname);
component(environment &env, util::xml::data_node const &compnode, const char *dirname);
virtual ~component() = default;
// setup
@ -727,13 +727,13 @@ private:
int m_state; // associated state number
};
typedef component::ptr (*make_component_func)(running_machine &machine, util::xml::data_node const &compnode, const char *dirname);
typedef component::ptr (*make_component_func)(environment &env, util::xml::data_node const &compnode, const char *dirname);
typedef std::map<std::string, make_component_func> make_component_map;
// internal helpers
static void element_scale(bitmap_argb32 &dest, bitmap_argb32 &source, const rectangle &sbounds, void *param);
template <typename T> static component::ptr make_component(running_machine &machine, util::xml::data_node const &compnode, const char *dirname);
template <int D> static component::ptr make_dotmatrix_component(running_machine &machine, util::xml::data_node const &compnode, const char *dirname);
template <typename T> static component::ptr make_component(environment &env, util::xml::data_node const &compnode, const char *dirname);
template <int D> static component::ptr make_dotmatrix_component(environment &env, util::xml::data_node const &compnode, const char *dirname);
static make_component_map const s_make_component; // maps component XML names to creator functions
@ -757,9 +757,10 @@ private:
class layout_group
{
public:
typedef std::unordered_map<std::string, layout_group> group_map;
using environment = emu::render::detail::layout_environment;
using group_map = std::unordered_map<std::string, layout_group>;
layout_group(running_machine &machine, util::xml::data_node const &groupnode);
layout_group(util::xml::data_node const &groupnode);
~layout_group();
util::xml::data_node const &get_groupnode() const { return m_groupnode; }
@ -767,12 +768,19 @@ public:
render_bounds make_transform(render_bounds const &dest) const;
render_bounds make_transform(render_bounds const &dest, render_bounds const &transform) const;
void resolve_bounds(group_map &groupmap);
void set_bounds_unresolved();
void resolve_bounds(environment &env, group_map &groupmap);
private:
void resolve_bounds(group_map &groupmap, std::vector<layout_group const *> &seen);
void resolve_bounds(environment &env, group_map &groupmap, std::vector<layout_group const *> &seen);
void resolve_bounds(
environment &env,
util::xml::data_node const &parentnode,
group_map &groupmap,
std::vector<layout_group const *> &seen,
bool repeat,
bool init);
running_machine & m_machine;
util::xml::data_node const & m_groupnode;
render_bounds m_bounds;
bool m_bounds_resolved;
@ -787,6 +795,7 @@ private:
class layout_view
{
public:
using environment = emu::render::detail::layout_environment;
using element_map = std::unordered_map<std::string, layout_element>;
using group_map = std::unordered_map<std::string, layout_group>;
@ -806,7 +815,7 @@ public:
public:
// construction/destruction
item(
device_t &device,
environment &env,
util::xml::data_node const &itemnode,
element_map &elemmap,
render_bounds const &transform);
@ -846,10 +855,10 @@ public:
// construction/destruction
layout_view(
device_t &device,
environment &env,
util::xml::data_node const &viewnode,
element_map &elemmap,
group_map const &groupmap);
group_map &groupmap);
~layout_view();
// getters
@ -873,13 +882,16 @@ public:
private:
// add items, recursing for groups
void add_items(
device_t &device,
environment &env,
util::xml::data_node const &parentnode,
element_map &elemmap,
group_map const &groupmap,
render_bounds const &transform);
group_map &groupmap,
render_bounds const &transform,
bool root,
bool repeat,
bool init);
static std::string make_name(device_t &device, util::xml::data_node const &viewnode);
static std::string make_name(environment &env, util::xml::data_node const &viewnode);
// internal state
std::string m_name; // name of the layout
@ -1014,6 +1026,9 @@ public:
void resolve_tags();
private:
// private classes declared in render.cpp
struct object_transform;
// internal helpers
enum constructor_impl_t { CONSTRUCTOR_IMPL };
template <typename T> render_target(render_manager &manager, T&& layout, u32 flags, constructor_impl_t);

File diff suppressed because it is too large Load Diff

View File

@ -598,7 +598,7 @@ int data_node::get_attribute_int(const char *attribute, int defvalue) const
stream >> std::hex >> uvalue;
result = int(uvalue);
}
else if (string[0] == '0' && string[1] == 'x')
else if ((string[0] == '0') && ((string[1] == 'x') || (string[1] == 'X')))
{
stream.str(&string[2]);
unsigned uvalue;

View File

@ -164,21 +164,6 @@ Intel INTELLEC® 4/MOD 40 layout
<cpanel element="background"><bounds left="0" top="0" right="1000" bottom="400" /></cpanel>
<cpanel element="label_address"><bounds left="72" top="55" right="506" bottom="63" /></cpanel>
<cpanel element="label_a3"><bounds left="81" top="63" right="185" bottom="70" /></cpanel>
<cpanel element="label_a2"><bounds left="237" top="63" right="341" bottom="70" /></cpanel>
<cpanel element="label_a1"><bounds left="393" top="63" right="497" bottom="70" /></cpanel>
<cpanel element="label_11"><bounds left="81" top="71" right="92" bottom="78" /></cpanel>
<cpanel element="label_10"><bounds left="112" top="71" right="123" bottom="78" /></cpanel>
<cpanel element="label_9"><bounds left="143" top="71" right="154" bottom="78" /></cpanel>
<cpanel element="label_8"><bounds left="174" top="71" right="185" bottom="78" /></cpanel>
<cpanel element="label_7"><bounds left="237" top="71" right="248" bottom="78" /></cpanel>
<cpanel element="label_6"><bounds left="268" top="71" right="279" bottom="78" /></cpanel>
<cpanel element="label_5"><bounds left="299" top="71" right="310" bottom="78" /></cpanel>
<cpanel element="label_4"><bounds left="330" top="71" right="341" bottom="78" /></cpanel>
<cpanel element="label_3"><bounds left="393" top="71" right="404" bottom="78" /></cpanel>
<cpanel element="label_2"><bounds left="424" top="71" right="435" bottom="78" /></cpanel>
<cpanel element="label_1"><bounds left="455" top="71" right="466" bottom="78" /></cpanel>
<cpanel element="label_0"><bounds left="486" top="71" right="497" bottom="78" /></cpanel>
<cpanel element="label_status"><bounds left="540" top="55" right="662" bottom="63" /></cpanel>
<cpanel element="label_search"><bounds left="561" top="63" right="610" bottom="70" /></cpanel>
@ -188,16 +173,6 @@ Intel INTELLEC® 4/MOD 40 layout
<cpanel element="label_cpu"><bounds left="611" top="71" right="626" bottom="78" /></cpanel>
<cpanel element="label_instruction"><bounds left="72" top="104" right="350" bottom="112" /></cpanel>
<cpanel element="label_m1"><bounds left="81" top="112" right="185" bottom="119" /></cpanel>
<cpanel element="label_m2"><bounds left="237" top="112" right="341" bottom="119" /></cpanel>
<cpanel element="label_7"><bounds left="81" top="120" right="92" bottom="127" /></cpanel>
<cpanel element="label_6"><bounds left="112" top="120" right="123" bottom="127" /></cpanel>
<cpanel element="label_5"><bounds left="143" top="120" right="154" bottom="127" /></cpanel>
<cpanel element="label_4"><bounds left="174" top="120" right="185" bottom="127" /></cpanel>
<cpanel element="label_3"><bounds left="237" top="120" right="248" bottom="127" /></cpanel>
<cpanel element="label_2"><bounds left="268" top="120" right="279" bottom="127" /></cpanel>
<cpanel element="label_1"><bounds left="299" top="120" right="310" bottom="127" /></cpanel>
<cpanel element="label_0"><bounds left="330" top="120" right="341" bottom="127" /></cpanel>
<cpanel element="label_active_bank"><bounds left="384" top="104" right="506" bottom="112" /></cpanel>
<cpanel element="label_cm_ram"><bounds left="393" top="112" right="497" bottom="119" /></cpanel>
@ -212,42 +187,10 @@ Intel INTELLEC® 4/MOD 40 layout
<cpanel element="label_prom"><bounds left="639" top="120" right="656" bottom="127" /></cpanel>
<cpanel element="label_execution"><bounds left="72" top="153" right="350" bottom="161" /></cpanel>
<cpanel element="label_x2"><bounds left="81" top="161" right="185" bottom="168" /></cpanel>
<cpanel element="label_x3"><bounds left="237" top="161" right="341" bottom="168" /></cpanel>
<cpanel element="label_3"><bounds left="81" top="169" right="92" bottom="176" /></cpanel>
<cpanel element="label_2"><bounds left="112" top="169" right="123" bottom="176" /></cpanel>
<cpanel element="label_1"><bounds left="143" top="169" right="154" bottom="176" /></cpanel>
<cpanel element="label_0"><bounds left="174" top="169" right="185" bottom="176" /></cpanel>
<cpanel element="label_3"><bounds left="237" top="169" right="248" bottom="176" /></cpanel>
<cpanel element="label_2"><bounds left="268" top="169" right="279" bottom="176" /></cpanel>
<cpanel element="label_1"><bounds left="299" top="169" right="310" bottom="176" /></cpanel>
<cpanel element="label_0"><bounds left="330" top="169" right="341" bottom="176" /></cpanel>
<cpanel element="label_last_ptr"><bounds left="384" top="153" right="662" bottom="161" /></cpanel>
<cpanel element="label_x2"><bounds left="393" top="161" right="497" bottom="168" /></cpanel>
<cpanel element="label_x3"><bounds left="549" top="161" right="653" bottom="168" /></cpanel>
<cpanel element="label_3"><bounds left="393" top="169" right="404" bottom="176" /></cpanel>
<cpanel element="label_2"><bounds left="424" top="169" right="435" bottom="176" /></cpanel>
<cpanel element="label_1"><bounds left="455" top="169" right="466" bottom="176" /></cpanel>
<cpanel element="label_0"><bounds left="486" top="169" right="497" bottom="176" /></cpanel>
<cpanel element="label_3"><bounds left="549" top="169" right="560" bottom="176" /></cpanel>
<cpanel element="label_2"><bounds left="580" top="169" right="591" bottom="176" /></cpanel>
<cpanel element="label_1"><bounds left="611" top="169" right="622" bottom="176" /></cpanel>
<cpanel element="label_0"><bounds left="642" top="169" right="653" bottom="176" /></cpanel>
<cpanel element="label_addr_data"><bounds left="72" top="214" right="506" bottom="222" /></cpanel>
<cpanel element="label_11"><bounds left="74" top="230" right="99" bottom="237" /></cpanel>
<cpanel element="label_10"><bounds left="105" top="230" right="130" bottom="237" /></cpanel>
<cpanel element="label_9"><bounds left="136" top="230" right="161" bottom="237" /></cpanel>
<cpanel element="label_8"><bounds left="167" top="230" right="192" bottom="237" /></cpanel>
<cpanel element="label_7"><bounds left="230" top="230" right="255" bottom="237" /></cpanel>
<cpanel element="label_6"><bounds left="261" top="230" right="286" bottom="237" /></cpanel>
<cpanel element="label_5"><bounds left="292" top="230" right="317" bottom="237" /></cpanel>
<cpanel element="label_4"><bounds left="323" top="230" right="348" bottom="237" /></cpanel>
<cpanel element="label_3"><bounds left="386" top="230" right="411" bottom="237" /></cpanel>
<cpanel element="label_2"><bounds left="417" top="230" right="442" bottom="237" /></cpanel>
<cpanel element="label_1"><bounds left="448" top="230" right="473" bottom="237" /></cpanel>
<cpanel element="label_0"><bounds left="479" top="230" right="504" bottom="237" /></cpanel>
<cpanel element="label_mode_ctrl"><bounds left="571" top="214" right="662" bottom="222" /></cpanel>
<cpanel element="label_mon"><bounds left="573" top="230" right="598" bottom="237" /></cpanel>
@ -262,10 +205,6 @@ Intel INTELLEC® 4/MOD 40 layout
<cpanel element="label_pass_counter"><bounds left="72" top="296" right="194" bottom="304" /></cpanel>
<cpanel element="label_passes"><bounds left="74" top="304" right="192" bottom="311" /></cpanel>
<cpanel element="label_3"><bounds left="74" top="312" right="99" bottom="319" /></cpanel>
<cpanel element="label_2"><bounds left="105" top="312" right="130" bottom="319" /></cpanel>
<cpanel element="label_1"><bounds left="136" top="312" right="161" bottom="319" /></cpanel>
<cpanel element="label_0"><bounds left="167" top="312" right="192" bottom="319" /></cpanel>
<cpanel element="label_search_ctrl"><bounds left="228" top="296" right="381" bottom="304" /></cpanel>
<cpanel element="label_run"><bounds left="230" top="312" right="255" bottom="319" /></cpanel>
@ -291,42 +230,35 @@ Intel INTELLEC® 4/MOD 40 layout
<cpanel element="label_system"><bounds left="727" top="321" right="783" bottom="328" /></cpanel>
<cpanel element="label_reset_cpu"><bounds left="727" top="361" right="783" bottom="368" /></cpanel>
<cpanel name="led_address_a3_3" element="led">
<bounds left="81" top="79" right="92" bottom="86" />
</cpanel>
<cpanel name="led_address_a3_2" element="led">
<bounds left="112" top="79" right="123" bottom="86" />
</cpanel>
<cpanel name="led_address_a3_1" element="led">
<bounds left="143" top="79" right="154" bottom="86" />
</cpanel>
<cpanel name="led_address_a3_0" element="led">
<bounds left="174" top="79" right="185" bottom="86" />
</cpanel>
<cpanel name="led_address_a2_3" element="led">
<bounds left="237" top="79" right="248" bottom="86" />
</cpanel>
<cpanel name="led_address_a2_2" element="led">
<bounds left="268" top="79" right="279" bottom="86" />
</cpanel>
<cpanel name="led_address_a2_1" element="led">
<bounds left="299" top="79" right="310" bottom="86" />
</cpanel>
<cpanel name="led_address_a2_0" element="led">
<bounds left="330" top="79" right="341" bottom="86" />
</cpanel>
<cpanel name="led_address_a1_3" element="led">
<bounds left="393" top="79" right="404" bottom="86" />
</cpanel>
<cpanel name="led_address_a1_2" element="led">
<bounds left="424" top="79" right="435" bottom="86" />
</cpanel>
<cpanel name="led_address_a1_1" element="led">
<bounds left="455" top="79" right="466" bottom="86" />
</cpanel>
<cpanel name="led_address_a1_0" element="led">
<bounds left="486" top="79" right="497" bottom="86" />
</cpanel>
<repeat count="3">
<param name="labelnum" start="11" increment="-4" />
<param name="ledpos" start="81" increment="156" />
<param name="nybble" start="3" increment="-1" />
<param name="switchpos" start="74" increment="156" />
<param name="mask" start="0x0800" rshift="4" />
<cpanel element="label_a~nybble~">
<bounds x="~ledpos~" y="63" width="104" height="7" />
</cpanel>
<repeat count="4">
<param name="labelnum" start="~labelnum~" increment="-1" />
<param name="ledpos" start="~ledpos~" increment="31" />
<param name="switchpos" start="~switchpos~" increment="31" />
<param name="bit" start="3" increment="-1" />
<param name="mask" start="~mask~" rshift="1" />
<cpanel element="label_~labelnum~">
<bounds x="~ledpos~" y="71" width="11" height="7" />
</cpanel>
<cpanel element="label_~labelnum~">
<bounds x="~switchpos~" y="230" width="25" height="7" />
</cpanel>
<cpanel name="led_address_a~nybble~_~bit~" element="led">
<bounds x="~ledpos~" y="79" width="11" height="7" />
</cpanel>
<cpanel element="switch" inputtag="ADDRDAT" inputmask="~mask~">
<bounds x="~switchpos~" y="240" width="25" height="46" />
</cpanel>
</repeat>
</repeat>
<cpanel name="led_status_search" element="led">
<bounds left="580" top="79" right="591" bottom="86" />
@ -338,31 +270,6 @@ Intel INTELLEC® 4/MOD 40 layout
<bounds left="642" top="79" right="653" bottom="86" />
</cpanel>
<cpanel name="led_instruction_m1_3" element="led">
<bounds left="81" top="128" right="92" bottom="135" />
</cpanel>
<cpanel name="led_instruction_m1_2" element="led">
<bounds left="112" top="128" right="123" bottom="135" />
</cpanel>
<cpanel name="led_instruction_m1_1" element="led">
<bounds left="143" top="128" right="154" bottom="135" />
</cpanel>
<cpanel name="led_instruction_m1_0" element="led">
<bounds left="174" top="128" right="185" bottom="135" />
</cpanel>
<cpanel name="led_instruction_m2_3" element="led">
<bounds left="237" top="128" right="248" bottom="135" />
</cpanel>
<cpanel name="led_instruction_m2_2" element="led">
<bounds left="268" top="128" right="279" bottom="135" />
</cpanel>
<cpanel name="led_instruction_m2_1" element="led">
<bounds left="299" top="128" right="310" bottom="135" />
</cpanel>
<cpanel name="led_instruction_m2_0" element="led">
<bounds left="330" top="128" right="341" bottom="135" />
</cpanel>
<cpanel name="led_active_bank_3" element="led">
<bounds left="393" top="128" right="404" bottom="135" />
</cpanel>
@ -386,92 +293,53 @@ Intel INTELLEC® 4/MOD 40 layout
<bounds left="642" top="128" right="653" bottom="135" />
</cpanel>
<cpanel name="led_execution_x2_3" element="led">
<bounds left="81" top="177" right="92" bottom="184" />
</cpanel>
<cpanel name="led_execution_x2_2" element="led">
<bounds left="112" top="177" right="123" bottom="184" />
</cpanel>
<cpanel name="led_execution_x2_1" element="led">
<bounds left="143" top="177" right="154" bottom="184" />
</cpanel>
<cpanel name="led_execution_x2_0" element="led">
<bounds left="174" top="177" right="185" bottom="184" />
</cpanel>
<cpanel name="led_execution_x3_3" element="led">
<bounds left="237" top="177" right="248" bottom="184" />
</cpanel>
<cpanel name="led_execution_x3_2" element="led">
<bounds left="268" top="177" right="279" bottom="184" />
</cpanel>
<cpanel name="led_execution_x3_1" element="led">
<bounds left="299" top="177" right="310" bottom="184" />
</cpanel>
<cpanel name="led_execution_x3_0" element="led">
<bounds left="330" top="177" right="341" bottom="184" />
</cpanel>
<repeat count="2">
<param name="xpos" start="81" increment="156" />
<param name="mnybble" start="1" increment="1" />
<param name="xnybble" start="2" increment="1" />
<param name="mbit" start="7" increment="-4" />
<cpanel element="label_m~mnybble~">
<bounds x="~xpos~" y="112" width="104" height="7" />
</cpanel>
<cpanel element="label_x~xnybble~">
<bounds x="~xpos~" y="161" width="104" height="7" />
</cpanel>
<repeat count="4">
<param name="xpos" start="~xpos~" increment="31" />
<param name="mbit" start="~mbit~" increment="-1" />
<param name="bit" start="3" increment="-1" />
<cpanel element="label_~mbit~">
<bounds x="~xpos~" y="120" width="11" height="7" />
</cpanel>
<cpanel element="label_~bit~">
<bounds x="~xpos~" y="169" width="11" height="7" />
</cpanel>
<cpanel name="led_instruction_m~mnybble~_~bit~" element="led">
<bounds x="~xpos~" y="128" width="11" height="7" />
</cpanel>
<cpanel name="led_execution_x~xnybble~_~bit~" element="led">
<bounds x="~xpos~" y="177" width="11" height="7" />
</cpanel>
</repeat>
</repeat>
<cpanel name="led_last_ptr_x2_3" element="led">
<bounds left="393" top="177" right="404" bottom="184" />
</cpanel>
<cpanel name="led_last_ptr_x2_2" element="led">
<bounds left="424" top="177" right="435" bottom="184" />
</cpanel>
<cpanel name="led_last_ptr_x2_1" element="led">
<bounds left="455" top="177" right="466" bottom="184" />
</cpanel>
<cpanel name="led_last_ptr_x2_0" element="led">
<bounds left="486" top="177" right="497" bottom="184" />
</cpanel>
<cpanel name="led_last_ptr_x3_3" element="led">
<bounds left="549" top="177" right="560" bottom="184" />
</cpanel>
<cpanel name="led_last_ptr_x3_2" element="led">
<bounds left="580" top="177" right="591" bottom="184" />
</cpanel>
<cpanel name="led_last_ptr_x3_1" element="led">
<bounds left="611" top="177" right="622" bottom="184" />
</cpanel>
<cpanel name="led_last_ptr_x3_0" element="led">
<bounds left="642" top="177" right="653" bottom="184" />
</cpanel>
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0800">
<bounds left="74" top="240" right="99" bottom="286" />
</cpanel>
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0400">
<bounds left="105" top="240" right="130" bottom="286" />
</cpanel>
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0200">
<bounds left="136" top="240" right="161" bottom="286" />
</cpanel>
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0100">
<bounds left="167" top="240" right="192" bottom="286" />
</cpanel>
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0080">
<bounds left="230" top="240" right="255" bottom="286" />
</cpanel>
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0040">
<bounds left="261" top="240" right="286" bottom="286" />
</cpanel>
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0020">
<bounds left="292" top="240" right="317" bottom="286" />
</cpanel>
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0010">
<bounds left="323" top="240" right="348" bottom="286" />
</cpanel>
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0008">
<bounds left="386" top="240" right="411" bottom="286" />
</cpanel>
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0004">
<bounds left="417" top="240" right="442" bottom="286" />
</cpanel>
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0002">
<bounds left="448" top="240" right="473" bottom="286" />
</cpanel>
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0001">
<bounds left="479" top="240" right="504" bottom="286" />
</cpanel>
<repeat count="2">
<param name="xpos" start="393" increment="156" />
<param name="nybble" start="2" increment="1" />
<cpanel element="label_x~nybble~">
<bounds x="~xpos~" y="161" width="104" height="7" />
</cpanel>
<repeat count="4">
<param name="xpos" start="~xpos~" increment="31" />
<param name="bit" start="3" increment="-1" />
<cpanel element="label_~bit~">
<bounds x="~xpos~" y="169" width="11" height="7" />
</cpanel>
<cpanel name="led_last_ptr_x~nybble~_~bit~" element="led">
<bounds x="~xpos~" y="177" width="11" height="7" />
</cpanel>
</repeat>
</repeat>
<cpanel element="switch" inputtag="MODE" inputmask="0x0010">
<bounds left="573" top="240" right="598" bottom="286" />
@ -487,18 +355,17 @@ Intel INTELLEC® 4/MOD 40 layout
<bounds left="728" top="240" right="753" bottom="286" />
</cpanel>
<cpanel element="switch" inputtag="PASSES" inputmask="0x08">
<bounds left="74" top="322" right="99" bottom="368" />
</cpanel>
<cpanel element="switch" inputtag="PASSES" inputmask="0x04">
<bounds left="105" top="322" right="130" bottom="368" />
</cpanel>
<cpanel element="switch" inputtag="PASSES" inputmask="0x02">
<bounds left="136" top="322" right="161" bottom="368" />
</cpanel>
<cpanel element="switch" inputtag="PASSES" inputmask="0x01">
<bounds left="167" top="322" right="192" bottom="368" />
</cpanel>
<repeat count="4">
<param name="xpos" start="74" increment="31" />
<param name="mask" start="0x08" rshift="1" />
<param name="bit" start="3" increment="-1" />
<cpanel element="label_~bit~">
<bounds x="~xpos~" y="312" width="25" height="7" />
</cpanel>
<cpanel element="switch" inputtag="PASSES" inputmask="~mask~">
<bounds x="~xpos~" y="322" width="25" height="46" />
</cpanel>
</repeat>
<cpanel element="switch" inputtag="CONTROL" inputmask="0x0001">
<bounds left="230" top="322" right="255" bottom="368" />

View File

@ -160,21 +160,6 @@ Intel INTELLEC® 4/MOD 40 layout
<cpanel element="background"><bounds left="0" top="0" right="1000" bottom="400" /></cpanel>
<cpanel element="label_address"><bounds left="72" top="55" right="506" bottom="63" /></cpanel>
<cpanel element="label_a3"><bounds left="81" top="63" right="185" bottom="70" /></cpanel>
<cpanel element="label_a2"><bounds left="237" top="63" right="341" bottom="70" /></cpanel>
<cpanel element="label_a1"><bounds left="393" top="63" right="497" bottom="70" /></cpanel>
<cpanel element="label_11"><bounds left="81" top="71" right="92" bottom="78" /></cpanel>
<cpanel element="label_10"><bounds left="112" top="71" right="123" bottom="78" /></cpanel>
<cpanel element="label_9"><bounds left="143" top="71" right="154" bottom="78" /></cpanel>
<cpanel element="label_8"><bounds left="174" top="71" right="185" bottom="78" /></cpanel>
<cpanel element="label_7"><bounds left="237" top="71" right="248" bottom="78" /></cpanel>
<cpanel element="label_6"><bounds left="268" top="71" right="279" bottom="78" /></cpanel>
<cpanel element="label_5"><bounds left="299" top="71" right="310" bottom="78" /></cpanel>
<cpanel element="label_4"><bounds left="330" top="71" right="341" bottom="78" /></cpanel>
<cpanel element="label_3"><bounds left="393" top="71" right="404" bottom="78" /></cpanel>
<cpanel element="label_2"><bounds left="424" top="71" right="435" bottom="78" /></cpanel>
<cpanel element="label_1"><bounds left="455" top="71" right="466" bottom="78" /></cpanel>
<cpanel element="label_0"><bounds left="486" top="71" right="497" bottom="78" /></cpanel>
<cpanel element="label_status"><bounds left="540" top="55" right="662" bottom="63" /></cpanel>
<cpanel element="label_search"><bounds left="561" top="63" right="610" bottom="70" /></cpanel>
@ -184,16 +169,6 @@ Intel INTELLEC® 4/MOD 40 layout
<cpanel element="label_run"><bounds left="611" top="71" right="626" bottom="78" /></cpanel>
<cpanel element="label_instruction"><bounds left="72" top="104" right="350" bottom="112" /></cpanel>
<cpanel element="label_m1"><bounds left="81" top="112" right="185" bottom="119" /></cpanel>
<cpanel element="label_m2"><bounds left="237" top="112" right="341" bottom="119" /></cpanel>
<cpanel element="label_7"><bounds left="81" top="120" right="92" bottom="127" /></cpanel>
<cpanel element="label_6"><bounds left="112" top="120" right="123" bottom="127" /></cpanel>
<cpanel element="label_5"><bounds left="143" top="120" right="154" bottom="127" /></cpanel>
<cpanel element="label_4"><bounds left="174" top="120" right="185" bottom="127" /></cpanel>
<cpanel element="label_3"><bounds left="237" top="120" right="248" bottom="127" /></cpanel>
<cpanel element="label_2"><bounds left="268" top="120" right="279" bottom="127" /></cpanel>
<cpanel element="label_1"><bounds left="299" top="120" right="310" bottom="127" /></cpanel>
<cpanel element="label_0"><bounds left="330" top="120" right="341" bottom="127" /></cpanel>
<cpanel element="label_active_bank"><bounds left="384" top="104" right="506" bottom="112" /></cpanel>
<cpanel element="label_cm_ram"><bounds left="393" top="112" right="497" bottom="119" /></cpanel>
@ -208,42 +183,10 @@ Intel INTELLEC® 4/MOD 40 layout
<cpanel element="label_prom"><bounds left="639" top="120" right="656" bottom="127" /></cpanel>
<cpanel element="label_execution"><bounds left="72" top="153" right="350" bottom="161" /></cpanel>
<cpanel element="label_x2"><bounds left="81" top="161" right="185" bottom="168" /></cpanel>
<cpanel element="label_x3"><bounds left="237" top="161" right="341" bottom="168" /></cpanel>
<cpanel element="label_3"><bounds left="81" top="169" right="92" bottom="176" /></cpanel>
<cpanel element="label_2"><bounds left="112" top="169" right="123" bottom="176" /></cpanel>
<cpanel element="label_1"><bounds left="143" top="169" right="154" bottom="176" /></cpanel>
<cpanel element="label_0"><bounds left="174" top="169" right="185" bottom="176" /></cpanel>
<cpanel element="label_3"><bounds left="237" top="169" right="248" bottom="176" /></cpanel>
<cpanel element="label_2"><bounds left="268" top="169" right="279" bottom="176" /></cpanel>
<cpanel element="label_1"><bounds left="299" top="169" right="310" bottom="176" /></cpanel>
<cpanel element="label_0"><bounds left="330" top="169" right="341" bottom="176" /></cpanel>
<cpanel element="label_last_ptr"><bounds left="384" top="153" right="662" bottom="161" /></cpanel>
<cpanel element="label_x2"><bounds left="393" top="161" right="497" bottom="168" /></cpanel>
<cpanel element="label_x3"><bounds left="549" top="161" right="653" bottom="168" /></cpanel>
<cpanel element="label_3"><bounds left="393" top="169" right="404" bottom="176" /></cpanel>
<cpanel element="label_2"><bounds left="424" top="169" right="435" bottom="176" /></cpanel>
<cpanel element="label_1"><bounds left="455" top="169" right="466" bottom="176" /></cpanel>
<cpanel element="label_0"><bounds left="486" top="169" right="497" bottom="176" /></cpanel>
<cpanel element="label_3"><bounds left="549" top="169" right="560" bottom="176" /></cpanel>
<cpanel element="label_2"><bounds left="580" top="169" right="591" bottom="176" /></cpanel>
<cpanel element="label_1"><bounds left="611" top="169" right="622" bottom="176" /></cpanel>
<cpanel element="label_0"><bounds left="642" top="169" right="653" bottom="176" /></cpanel>
<cpanel element="label_addr_data"><bounds left="72" top="214" right="506" bottom="222" /></cpanel>
<cpanel element="label_11"><bounds left="74" top="230" right="99" bottom="237" /></cpanel>
<cpanel element="label_10"><bounds left="105" top="230" right="130" bottom="237" /></cpanel>
<cpanel element="label_9"><bounds left="136" top="230" right="161" bottom="237" /></cpanel>
<cpanel element="label_8"><bounds left="167" top="230" right="192" bottom="237" /></cpanel>
<cpanel element="label_7"><bounds left="230" top="230" right="255" bottom="237" /></cpanel>
<cpanel element="label_6"><bounds left="261" top="230" right="286" bottom="237" /></cpanel>
<cpanel element="label_5"><bounds left="292" top="230" right="317" bottom="237" /></cpanel>
<cpanel element="label_4"><bounds left="323" top="230" right="348" bottom="237" /></cpanel>
<cpanel element="label_3"><bounds left="386" top="230" right="411" bottom="237" /></cpanel>
<cpanel element="label_2"><bounds left="417" top="230" right="442" bottom="237" /></cpanel>
<cpanel element="label_1"><bounds left="448" top="230" right="473" bottom="237" /></cpanel>
<cpanel element="label_0"><bounds left="479" top="230" right="504" bottom="237" /></cpanel>
<cpanel element="label_mode_ctrl"><bounds left="571" top="214" right="662" bottom="222" /></cpanel>
<cpanel element="label_mon"><bounds left="573" top="230" right="598" bottom="237" /></cpanel>
@ -258,10 +201,6 @@ Intel INTELLEC® 4/MOD 40 layout
<cpanel element="label_pass_counter"><bounds left="72" top="296" right="194" bottom="304" /></cpanel>
<cpanel element="label_passes"><bounds left="74" top="304" right="192" bottom="311" /></cpanel>
<cpanel element="label_3"><bounds left="74" top="312" right="99" bottom="319" /></cpanel>
<cpanel element="label_2"><bounds left="105" top="312" right="130" bottom="319" /></cpanel>
<cpanel element="label_1"><bounds left="136" top="312" right="161" bottom="319" /></cpanel>
<cpanel element="label_0"><bounds left="167" top="312" right="192" bottom="319" /></cpanel>
<cpanel element="label_search_ctrl"><bounds left="228" top="296" right="381" bottom="304" /></cpanel>
<cpanel element="label_run"><bounds left="230" top="312" right="255" bottom="319" /></cpanel>
@ -286,42 +225,35 @@ Intel INTELLEC® 4/MOD 40 layout
<cpanel element="label_system"><bounds left="727" top="321" right="783" bottom="328" /></cpanel>
<cpanel element="label_reset_cpu"><bounds left="727" top="361" right="783" bottom="368" /></cpanel>
<cpanel name="led_address_a3_3" element="led">
<bounds left="81" top="79" right="92" bottom="86" />
</cpanel>
<cpanel name="led_address_a3_2" element="led">
<bounds left="112" top="79" right="123" bottom="86" />
</cpanel>
<cpanel name="led_address_a3_1" element="led">
<bounds left="143" top="79" right="154" bottom="86" />
</cpanel>
<cpanel name="led_address_a3_0" element="led">
<bounds left="174" top="79" right="185" bottom="86" />
</cpanel>
<cpanel name="led_address_a2_3" element="led">
<bounds left="237" top="79" right="248" bottom="86" />
</cpanel>
<cpanel name="led_address_a2_2" element="led">
<bounds left="268" top="79" right="279" bottom="86" />
</cpanel>
<cpanel name="led_address_a2_1" element="led">
<bounds left="299" top="79" right="310" bottom="86" />
</cpanel>
<cpanel name="led_address_a2_0" element="led">
<bounds left="330" top="79" right="341" bottom="86" />
</cpanel>
<cpanel name="led_address_a1_3" element="led">
<bounds left="393" top="79" right="404" bottom="86" />
</cpanel>
<cpanel name="led_address_a1_2" element="led">
<bounds left="424" top="79" right="435" bottom="86" />
</cpanel>
<cpanel name="led_address_a1_1" element="led">
<bounds left="455" top="79" right="466" bottom="86" />
</cpanel>
<cpanel name="led_address_a1_0" element="led">
<bounds left="486" top="79" right="497" bottom="86" />
</cpanel>
<repeat count="3">
<param name="labelnum" start="11" increment="-4" />
<param name="ledpos" start="81" increment="156" />
<param name="nybble" start="3" increment="-1" />
<param name="switchpos" start="74" increment="156" />
<param name="mask" start="0x0800" rshift="4" />
<cpanel element="label_a~nybble~">
<bounds x="~ledpos~" y="63" width="104" height="7" />
</cpanel>
<repeat count="4">
<param name="labelnum" start="~labelnum~" increment="-1" />
<param name="ledpos" start="~ledpos~" increment="31" />
<param name="switchpos" start="~switchpos~" increment="31" />
<param name="bit" start="3" increment="-1" />
<param name="mask" start="~mask~" rshift="1" />
<cpanel element="label_~labelnum~">
<bounds x="~ledpos~" y="71" width="11" height="7" />
</cpanel>
<cpanel element="label_~labelnum~">
<bounds x="~switchpos~" y="230" width="25" height="7" />
</cpanel>
<cpanel name="led_address_a~nybble~_~bit~" element="led">
<bounds x="~ledpos~" y="79" width="11" height="7" />
</cpanel>
<cpanel element="switch" inputtag="ADDRDAT" inputmask="~mask~">
<bounds x="~switchpos~" y="240" width="25" height="46" />
</cpanel>
</repeat>
</repeat>
<cpanel name="led_status_search" element="led">
<bounds left="580" top="79" right="591" bottom="86" />
@ -333,31 +265,6 @@ Intel INTELLEC® 4/MOD 40 layout
<bounds left="642" top="79" right="653" bottom="86" />
</cpanel>
<cpanel name="led_instruction_m1_3" element="led">
<bounds left="81" top="128" right="92" bottom="135" />
</cpanel>
<cpanel name="led_instruction_m1_2" element="led">
<bounds left="112" top="128" right="123" bottom="135" />
</cpanel>
<cpanel name="led_instruction_m1_1" element="led">
<bounds left="143" top="128" right="154" bottom="135" />
</cpanel>
<cpanel name="led_instruction_m1_0" element="led">
<bounds left="174" top="128" right="185" bottom="135" />
</cpanel>
<cpanel name="led_instruction_m2_3" element="led">
<bounds left="237" top="128" right="248" bottom="135" />
</cpanel>
<cpanel name="led_instruction_m2_2" element="led">
<bounds left="268" top="128" right="279" bottom="135" />
</cpanel>
<cpanel name="led_instruction_m2_1" element="led">
<bounds left="299" top="128" right="310" bottom="135" />
</cpanel>
<cpanel name="led_instruction_m2_0" element="led">
<bounds left="330" top="128" right="341" bottom="135" />
</cpanel>
<cpanel name="led_active_bank_3" element="led">
<bounds left="393" top="128" right="404" bottom="135" />
</cpanel>
@ -381,92 +288,53 @@ Intel INTELLEC® 4/MOD 40 layout
<bounds left="642" top="128" right="653" bottom="135" />
</cpanel>
<cpanel name="led_execution_x2_3" element="led">
<bounds left="81" top="177" right="92" bottom="184" />
</cpanel>
<cpanel name="led_execution_x2_2" element="led">
<bounds left="112" top="177" right="123" bottom="184" />
</cpanel>
<cpanel name="led_execution_x2_1" element="led">
<bounds left="143" top="177" right="154" bottom="184" />
</cpanel>
<cpanel name="led_execution_x2_0" element="led">
<bounds left="174" top="177" right="185" bottom="184" />
</cpanel>
<cpanel name="led_execution_x3_3" element="led">
<bounds left="237" top="177" right="248" bottom="184" />
</cpanel>
<cpanel name="led_execution_x3_2" element="led">
<bounds left="268" top="177" right="279" bottom="184" />
</cpanel>
<cpanel name="led_execution_x3_1" element="led">
<bounds left="299" top="177" right="310" bottom="184" />
</cpanel>
<cpanel name="led_execution_x3_0" element="led">
<bounds left="330" top="177" right="341" bottom="184" />
</cpanel>
<repeat count="2">
<param name="xpos" start="81" increment="156" />
<param name="mnybble" start="1" increment="1" />
<param name="xnybble" start="2" increment="1" />
<param name="mbit" start="7" increment="-4" />
<cpanel element="label_m~mnybble~">
<bounds x="~xpos~" y="112" width="104" height="7" />
</cpanel>
<cpanel element="label_x~xnybble~">
<bounds x="~xpos~" y="161" width="104" height="7" />
</cpanel>
<repeat count="4">
<param name="xpos" start="~xpos~" increment="31" />
<param name="mbit" start="~mbit~" increment="-1" />
<param name="bit" start="3" increment="-1" />
<cpanel element="label_~mbit~">
<bounds x="~xpos~" y="120" width="11" height="7" />
</cpanel>
<cpanel element="label_~bit~">
<bounds x="~xpos~" y="169" width="11" height="7" />
</cpanel>
<cpanel name="led_instruction_m~mnybble~_~bit~" element="led">
<bounds x="~xpos~" y="128" width="11" height="7" />
</cpanel>
<cpanel name="led_execution_x~xnybble~_~bit~" element="led">
<bounds x="~xpos~" y="177" width="11" height="7" />
</cpanel>
</repeat>
</repeat>
<cpanel name="led_last_ptr_x2_3" element="led">
<bounds left="393" top="177" right="404" bottom="184" />
</cpanel>
<cpanel name="led_last_ptr_x2_2" element="led">
<bounds left="424" top="177" right="435" bottom="184" />
</cpanel>
<cpanel name="led_last_ptr_x2_1" element="led">
<bounds left="455" top="177" right="466" bottom="184" />
</cpanel>
<cpanel name="led_last_ptr_x2_0" element="led">
<bounds left="486" top="177" right="497" bottom="184" />
</cpanel>
<cpanel name="led_last_ptr_x3_3" element="led">
<bounds left="549" top="177" right="560" bottom="184" />
</cpanel>
<cpanel name="led_last_ptr_x3_2" element="led">
<bounds left="580" top="177" right="591" bottom="184" />
</cpanel>
<cpanel name="led_last_ptr_x3_1" element="led">
<bounds left="611" top="177" right="622" bottom="184" />
</cpanel>
<cpanel name="led_last_ptr_x3_0" element="led">
<bounds left="642" top="177" right="653" bottom="184" />
</cpanel>
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0800">
<bounds left="74" top="240" right="99" bottom="286" />
</cpanel>
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0400">
<bounds left="105" top="240" right="130" bottom="286" />
</cpanel>
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0200">
<bounds left="136" top="240" right="161" bottom="286" />
</cpanel>
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0100">
<bounds left="167" top="240" right="192" bottom="286" />
</cpanel>
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0080">
<bounds left="230" top="240" right="255" bottom="286" />
</cpanel>
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0040">
<bounds left="261" top="240" right="286" bottom="286" />
</cpanel>
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0020">
<bounds left="292" top="240" right="317" bottom="286" />
</cpanel>
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0010">
<bounds left="323" top="240" right="348" bottom="286" />
</cpanel>
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0008">
<bounds left="386" top="240" right="411" bottom="286" />
</cpanel>
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0004">
<bounds left="417" top="240" right="442" bottom="286" />
</cpanel>
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0002">
<bounds left="448" top="240" right="473" bottom="286" />
</cpanel>
<cpanel element="switch" inputtag="ADDRDAT" inputmask="0x0001">
<bounds left="479" top="240" right="504" bottom="286" />
</cpanel>
<repeat count="2">
<param name="xpos" start="393" increment="156" />
<param name="nybble" start="2" increment="1" />
<cpanel element="label_x~nybble~">
<bounds x="~xpos~" y="161" width="104" height="7" />
</cpanel>
<repeat count="4">
<param name="xpos" start="~xpos~" increment="31" />
<param name="bit" start="3" increment="-1" />
<cpanel element="label_~bit~">
<bounds x="~xpos~" y="169" width="11" height="7" />
</cpanel>
<cpanel name="led_last_ptr_x~nybble~_~bit~" element="led">
<bounds x="~xpos~" y="177" width="11" height="7" />
</cpanel>
</repeat>
</repeat>
<cpanel element="switch" inputtag="MODE" inputmask="0x0010">
<bounds left="573" top="240" right="598" bottom="286" />
@ -482,18 +350,17 @@ Intel INTELLEC® 4/MOD 40 layout
<bounds left="728" top="240" right="753" bottom="286" />
</cpanel>
<cpanel element="switch" inputtag="PASSES" inputmask="0x08">
<bounds left="74" top="322" right="99" bottom="368" />
</cpanel>
<cpanel element="switch" inputtag="PASSES" inputmask="0x04">
<bounds left="105" top="322" right="130" bottom="368" />
</cpanel>
<cpanel element="switch" inputtag="PASSES" inputmask="0x02">
<bounds left="136" top="322" right="161" bottom="368" />
</cpanel>
<cpanel element="switch" inputtag="PASSES" inputmask="0x01">
<bounds left="167" top="322" right="192" bottom="368" />
</cpanel>
<repeat count="4">
<param name="xpos" start="74" increment="31" />
<param name="mask" start="0x08" rshift="1" />
<param name="bit" start="3" increment="-1" />
<cpanel element="label_~bit~">
<bounds x="~xpos~" y="312" width="25" height="7" />
</cpanel>
<cpanel element="switch" inputtag="PASSES" inputmask="~mask~">
<bounds x="~xpos~" y="322" width="25" height="46" />
</cpanel>
</repeat>
<cpanel element="switch" inputtag="CONTROL" inputmask="0x0001">
<bounds left="230" top="322" right="255" bottom="368" />

View File

@ -1,6 +1,6 @@
<?xml version="1.0"?>
<mamelayout version="2">
<!-- define elements -->
<!-- define elements -->
<element name="led" defstate="0">
<disk state="0">
<color red="0.20" green="0.0" blue="0.0" />
@ -69,7 +69,7 @@
<element name="text_p6"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="&#x265f;"> <color red="1" green="1" blue="1" /></text> </element>
<element name="text_lcd"> <rect><color red="0.59" green="0.39" blue="0.20" /></rect> <text string="MULTI INFO LCD"><color red="1" green="1" blue="1" /></text> </element>
<!-- build screen -->
<!-- build screen -->
<group name="panel">
<bezel element="background"><bounds x="25" y="0" width="50.25" height="8.5" /></bezel>
<bezel element="background"><bounds x="1" y="0" width="24" height="1" /></bezel>
@ -119,16 +119,15 @@
<view name="Chessboard + Display">
<bezel element="background"><bounds x="-1" y="0" width="87" height="88" /></bezel>
<!-- chessboard coords -->
<!-- chessboard coords -->
<bezel element="text_8"><bounds x="-0.8" y="7" width="2" height="2" /></bezel>
<bezel element="text_7"><bounds x="-0.8" y="17" width="2" height="2" /></bezel>
<bezel element="text_6"><bounds x="-0.8" y="27" width="2" height="2" /></bezel>
<bezel element="text_5"><bounds x="-0.8" y="37" width="2" height="2" /></bezel>
<bezel element="text_4"><bounds x="-0.8" y="47" width="2" height="2" /></bezel>
<bezel element="text_3"><bounds x="-0.8" y="57" width="2" height="2" /></bezel>
<bezel element="text_2"><bounds x="-0.8" y="67" width="2" height="2" /></bezel>
<bezel element="text_1"><bounds x="-0.8" y="77" width="2" height="2" /></bezel>
<repeat count="8">
<param name="num" start="8" increment="-1" />
<param name="y" start="7" increment="10" />
<bezel element="text_~num~">
<bounds x="-0.8" y="~y~" width="2" height="2" />
</bezel>
</repeat>
<bezel element="text_a"><bounds x="7" y="85" width="2" height="2" /></bezel>
<bezel element="text_b"><bounds x="17" y="85" width="2" height="2" /></bezel>
@ -139,7 +138,7 @@
<bezel element="text_g"><bounds x="67" y="85" width="2" height="2" /></bezel>
<bezel element="text_h"><bounds x="77" y="85" width="2" height="2" /></bezel>
<!-- chessboard bezel -->
<!-- chessboard bezel -->
<bezel element="white"><bounds x="2" y="2" width="82" height="82" /></bezel>
<bezel element="white"><bounds x="3" y="3" width="80" height="80" /></bezel>
@ -184,155 +183,46 @@
<bezel element="black"><bounds x="43" y="73" width="10" height="10.5" /></bezel>
<bezel element="black"><bounds x="63" y="73" width="10" height="10.5" /></bezel>
<!-- chessboard leds -->
<!-- chessboard LEDs -->
<repeat count="8">
<param name="ledy" start="81.3" increment="-10" />
<param name="ledno" start="0" increment="8" />
<repeat count="8">
<param name="ledx" start="11.2" increment="10" />
<param name="ledno" start="~ledno~" increment="1" />
<bezel name="led~ledno~" element="led">
<bounds x="~ledx~" y="~ledy~" width="1.5" height="1.5" />
</bezel>
</repeat>
</repeat>
<bezel name="led0" element="led"><bounds x="11.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="led1" element="led"><bounds x="21.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="led2" element="led"><bounds x="31.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="led3" element="led"><bounds x="41.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="led4" element="led"><bounds x="51.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="led5" element="led"><bounds x="61.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="led6" element="led"><bounds x="71.2" y="81.3" width="1.5" height="1.5" /></bezel>
<bezel name="led7" element="led"><bounds x="81.2" y="81.3" width="1.5" height="1.5" /></bezel>
<!-- chessboard sensors -->
<repeat count="4">
<param name="ipty" start="3" increment="20" />
<param name="iptno" start="7" increment="-2" />
<repeat count="2">
<param name="ipty" start="~ipty~" increment="10" />
<param name="iptno" start="~iptno~" increment="-1" />
<param name="lalpha" start="0.4" increment="-0.2" />
<param name="ralpha" start="0.2" increment="0.2" />
<repeat count="4">
<param name="lx" start="3" increment="20" />
<param name="rx" start="13" increment="20" />
<param name="lmask" start="0x01" lshift="2" />
<param name="rmask" start="0x02" lshift="2" />
<bezel element="hl" inputtag="board:IN.~iptno~" inputmask="~lmask~">
<bounds x="~lx~" y="~ipty~" width="10" height="10" />
<color alpha="~lalpha~" />
</bezel>
<bezel element="hl" inputtag="board:IN.~iptno~" inputmask="~rmask~">
<bounds x="~rx~" y="~ipty~" width="10" height="10" />
<color alpha="~ralpha~" />
</bezel>
</repeat>
</repeat>
</repeat>
<bezel name="led8" element="led"><bounds x="11.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="led9" element="led"><bounds x="21.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="led10" element="led"><bounds x="31.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="led11" element="led"><bounds x="41.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="led12" element="led"><bounds x="51.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="led13" element="led"><bounds x="61.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="led14" element="led"><bounds x="71.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="led15" element="led"><bounds x="81.2" y="71.3" width="1.5" height="1.5" /></bezel>
<bezel name="led16" element="led"><bounds x="11.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="led17" element="led"><bounds x="21.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="led18" element="led"><bounds x="31.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="led19" element="led"><bounds x="41.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="led20" element="led"><bounds x="51.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="led21" element="led"><bounds x="61.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="led22" element="led"><bounds x="71.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="led23" element="led"><bounds x="81.2" y="61.3" width="1.5" height="1.5" /></bezel>
<bezel name="led24" element="led"><bounds x="11.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="led25" element="led"><bounds x="21.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="led26" element="led"><bounds x="31.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="led27" element="led"><bounds x="41.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="led28" element="led"><bounds x="51.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="led29" element="led"><bounds x="61.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="led30" element="led"><bounds x="71.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="led31" element="led"><bounds x="81.2" y="51.3" width="1.5" height="1.5" /></bezel>
<bezel name="led32" element="led"><bounds x="11.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="led33" element="led"><bounds x="21.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="led34" element="led"><bounds x="31.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="led35" element="led"><bounds x="41.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="led36" element="led"><bounds x="51.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="led37" element="led"><bounds x="61.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="led38" element="led"><bounds x="71.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="led39" element="led"><bounds x="81.2" y="41.3" width="1.5" height="1.5" /></bezel>
<bezel name="led40" element="led"><bounds x="11.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="led41" element="led"><bounds x="21.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="led42" element="led"><bounds x="31.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="led43" element="led"><bounds x="41.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="led44" element="led"><bounds x="51.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="led45" element="led"><bounds x="61.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="led46" element="led"><bounds x="71.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="led47" element="led"><bounds x="81.2" y="31.3" width="1.5" height="1.5" /></bezel>
<bezel name="led48" element="led"><bounds x="11.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="led49" element="led"><bounds x="21.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="led50" element="led"><bounds x="31.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="led51" element="led"><bounds x="41.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="led52" element="led"><bounds x="51.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="led53" element="led"><bounds x="61.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="led54" element="led"><bounds x="71.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="led55" element="led"><bounds x="81.2" y="21.3" width="1.5" height="1.5" /></bezel>
<bezel name="led56" element="led"><bounds x="11.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="led57" element="led"><bounds x="21.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="led58" element="led"><bounds x="31.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="led59" element="led"><bounds x="41.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="led60" element="led"><bounds x="51.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="led61" element="led"><bounds x="61.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="led62" element="led"><bounds x="71.2" y="11.3" width="1.5" height="1.5" /></bezel>
<bezel name="led63" element="led"><bounds x="81.2" y="11.3" width="1.5" height="1.5" /></bezel>
<!-- chessboard sensors -->
<bezel element="hl" inputtag="board:IN.7" inputmask="0x01"><bounds x="3" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.7" inputmask="0x02"><bounds x="13" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.7" inputmask="0x04"><bounds x="23" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.7" inputmask="0x08"><bounds x="33" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.7" inputmask="0x10"><bounds x="43" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.7" inputmask="0x20"><bounds x="53" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.7" inputmask="0x40"><bounds x="63" y="3" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.7" inputmask="0x80"><bounds x="73" y="3" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.6" inputmask="0x01"><bounds x="3" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.6" inputmask="0x02"><bounds x="13" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.6" inputmask="0x04"><bounds x="23" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.6" inputmask="0x08"><bounds x="33" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.6" inputmask="0x10"><bounds x="43" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.6" inputmask="0x20"><bounds x="53" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.6" inputmask="0x40"><bounds x="63" y="13" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.6" inputmask="0x80"><bounds x="73" y="13" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.5" inputmask="0x01"><bounds x="3" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.5" inputmask="0x02"><bounds x="13" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.5" inputmask="0x04"><bounds x="23" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.5" inputmask="0x08"><bounds x="33" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.5" inputmask="0x10"><bounds x="43" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.5" inputmask="0x20"><bounds x="53" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.5" inputmask="0x40"><bounds x="63" y="23" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.5" inputmask="0x80"><bounds x="73" y="23" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.4" inputmask="0x01"><bounds x="3" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.4" inputmask="0x02"><bounds x="13" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.4" inputmask="0x04"><bounds x="23" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.4" inputmask="0x08"><bounds x="33" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.4" inputmask="0x10"><bounds x="43" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.4" inputmask="0x20"><bounds x="53" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.4" inputmask="0x40"><bounds x="63" y="33" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.4" inputmask="0x80"><bounds x="73" y="33" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.3" inputmask="0x01"><bounds x="3" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.3" inputmask="0x02"><bounds x="13" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.3" inputmask="0x04"><bounds x="23" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.3" inputmask="0x08"><bounds x="33" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.3" inputmask="0x10"><bounds x="43" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.3" inputmask="0x20"><bounds x="53" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.3" inputmask="0x40"><bounds x="63" y="43" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.3" inputmask="0x80"><bounds x="73" y="43" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.2" inputmask="0x01"><bounds x="3" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.2" inputmask="0x02"><bounds x="13" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.2" inputmask="0x04"><bounds x="23" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.2" inputmask="0x08"><bounds x="33" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.2" inputmask="0x10"><bounds x="43" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.2" inputmask="0x20"><bounds x="53" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.2" inputmask="0x40"><bounds x="63" y="53" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.2" inputmask="0x80"><bounds x="73" y="53" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.1" inputmask="0x01"><bounds x="3" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.1" inputmask="0x02"><bounds x="13" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.1" inputmask="0x04"><bounds x="23" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.1" inputmask="0x08"><bounds x="33" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.1" inputmask="0x10"><bounds x="43" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.1" inputmask="0x20"><bounds x="53" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.1" inputmask="0x40"><bounds x="63" y="63" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.1" inputmask="0x80"><bounds x="73" y="63" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.0" inputmask="0x01"><bounds x="3" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.0" inputmask="0x02"><bounds x="13" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.0" inputmask="0x04"><bounds x="23" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.0" inputmask="0x08"><bounds x="33" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.0" inputmask="0x10"><bounds x="43" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.0" inputmask="0x20"><bounds x="53" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
<bezel element="hl" inputtag="board:IN.0" inputmask="0x40"><bounds x="63" y="73" width="10" height="10" /><color alpha="0.2" /></bezel>
<bezel element="hl" inputtag="board:IN.0" inputmask="0x80"><bounds x="73" y="73" width="10" height="10" /><color alpha="0.4" /></bezel>
<!-- LCD panel -->
<!-- LCD panel -->
<bezel element="background"><bounds x="-1" y="88" width="6" height="8.5" /></bezel>
<bezel element="background"><bounds x="80" y="88" width="6" height="8.5" /></bezel>
<group ref="panel"><bounds x="5" y="88" width="75.25" height="8.5" /></group>

View File

@ -1,41 +1,5 @@
<?xml version="1.0"?>
<mamelayout version="2">
<view name="Screen 0 Standard (4:3)">
<screen index="0">
<bounds left="0" top="0" right="4" bottom="3" />
</screen>
</view>
<view name="Screen 1 Standard (4:3)">
<screen index="1">
<bounds left="0" top="0" right="4" bottom="3" />
</screen>
</view>
<view name="Screen 2 Standard (4:3)">
<screen index="2">
<bounds left="0" top="0" right="4" bottom="3" />
</screen>
</view>
<view name="Screen 0 Pixel Aspect (~scr0nativexaspect~:~scr0nativeyaspect~)">
<screen index="0">
<bounds left="0" top="0" right="~scr0width~" bottom="~scr0height~" />
</screen>
</view>
<view name="Screen 1 Pixel Aspect (~scr1nativexaspect~:~scr1nativeyaspect~)">
<screen index="1">
<bounds left="0" top="0" right="~scr1width~" bottom="~scr1height~" />
</screen>
</view>
<view name="Screen 2 Pixel Aspect (~scr2nativexaspect~:~scr2nativeyaspect~)">
<screen index="2">
<bounds left="0" top="0" right="~scr2width~" bottom="~scr2height~" />
</screen>
</view>
<view name="Triple Side-by-Side">
<screen index="0">
<bounds x="0" y="0" width="4" height="3" />

View File

@ -6,30 +6,6 @@
</led7seg>
</element>
<view name="Screen 0 Standard (4:3)">
<screen index="0">
<bounds left="0" top="0" right="4" bottom="3" />
</screen>
</view>
<view name="Screen 1 Standard (4:3)">
<screen index="1">
<bounds left="0" top="0" right="4" bottom="3" />
</screen>
</view>
<view name="Screen 0 Pixel Aspect (~scr0nativexaspect~:~scr0nativeyaspect~)">
<screen index="0">
<bounds left="0" top="0" right="~scr0width~" bottom="~scr0height~" />
</screen>
</view>
<view name="Screen 1 Pixel Aspect (~scr1nativexaspect~:~scr1nativeyaspect~)">
<screen index="1">
<bounds left="0" top="0" right="~scr1width~" bottom="~scr1height~" />
</screen>
</view>
<view name="Single Screen">
<bounds x="0" y="0" width="40" height="35" />
<bezel name="digit_3" element="digit">

View File

@ -1,41 +1,5 @@
<?xml version="1.0"?>
<mamelayout version="2">
<view name="Screen 0 Standard (4:3)">
<screen index="0">
<bounds left="0" top="0" right="4" bottom="3" />
</screen>
</view>
<view name="Screen 1 Standard (4:3)">
<screen index="1">
<bounds left="0" top="0" right="4" bottom="3" />
</screen>
</view>
<view name="Screen 2 Standard (4:3)">
<screen index="2">
<bounds left="0" top="0" right="4" bottom="3" />
</screen>
</view>
<view name="Screen 0 Pixel Aspect (~scr0nativexaspect~:~scr0nativeyaspect~)">
<screen index="0">
<bounds left="0" top="0" right="~scr0width~" bottom="~scr0height~" />
</screen>
</view>
<view name="Screen 1 Pixel Aspect (~scr1nativexaspect~:~scr1nativeyaspect~)">
<screen index="1">
<bounds left="0" top="0" right="~scr1width~" bottom="~scr1height~" />
</screen>
</view>
<view name="Screen 2 Pixel Aspect (~scr2nativexaspect~:~scr2nativeyaspect~)">
<screen index="2">
<bounds left="0" top="0" right="~scr2width~" bottom="~scr2height~" />
</screen>
</view>
<view name="Poka Poka Satan Custom">
<screen index="0">
<bounds x="0" y="0" width="4" height="3" />
@ -47,5 +11,4 @@
<bounds x="+2.2" y="3.4" width="4" height="3" />
</screen>
</view>
</mamelayout>

View File

@ -26,125 +26,18 @@
<bezel name="digit1" element="digit"><bounds x="10" y="0" width="10" height="15" /></bezel>
<bezel name="digit2" element="digit"><bounds x="20" y="0" width="10" height="15" /></bezel>
<!-- 13*8 matrix (first 3 are the 7segs) -->
<bezel name="lamp0" element="led"><bounds x="0" y="20" width="1" height="1" /></bezel>
<bezel name="lamp1" element="led"><bounds x="2" y="20" width="1" height="1" /></bezel>
<bezel name="lamp2" element="led"><bounds x="4" y="20" width="1" height="1" /></bezel>
<bezel name="lamp3" element="led"><bounds x="6" y="20" width="1" height="1" /></bezel>
<bezel name="lamp4" element="led"><bounds x="8" y="20" width="1" height="1" /></bezel>
<bezel name="lamp5" element="led"><bounds x="10" y="20" width="1" height="1" /></bezel>
<bezel name="lamp6" element="led"><bounds x="12" y="20" width="1" height="1" /></bezel>
<bezel name="lamp7" element="led"><bounds x="14" y="20" width="1" height="1" /></bezel>
<bezel name="lamp10" element="led"><bounds x="0" y="22" width="1" height="1" /></bezel>
<bezel name="lamp11" element="led"><bounds x="2" y="22" width="1" height="1" /></bezel>
<bezel name="lamp12" element="led"><bounds x="4" y="22" width="1" height="1" /></bezel>
<bezel name="lamp13" element="led"><bounds x="6" y="22" width="1" height="1" /></bezel>
<bezel name="lamp14" element="led"><bounds x="8" y="22" width="1" height="1" /></bezel>
<bezel name="lamp15" element="led"><bounds x="10" y="22" width="1" height="1" /></bezel>
<bezel name="lamp16" element="led"><bounds x="12" y="22" width="1" height="1" /></bezel>
<bezel name="lamp17" element="led"><bounds x="14" y="22" width="1" height="1" /></bezel>
<bezel name="lamp20" element="led"><bounds x="0" y="24" width="1" height="1" /></bezel>
<bezel name="lamp21" element="led"><bounds x="2" y="24" width="1" height="1" /></bezel>
<bezel name="lamp22" element="led"><bounds x="4" y="24" width="1" height="1" /></bezel>
<bezel name="lamp23" element="led"><bounds x="6" y="24" width="1" height="1" /></bezel>
<bezel name="lamp24" element="led"><bounds x="8" y="24" width="1" height="1" /></bezel>
<bezel name="lamp25" element="led"><bounds x="10" y="24" width="1" height="1" /></bezel>
<bezel name="lamp26" element="led"><bounds x="12" y="24" width="1" height="1" /></bezel>
<bezel name="lamp27" element="led"><bounds x="14" y="24" width="1" height="1" /></bezel>
<bezel name="lamp30" element="led"><bounds x="0" y="26" width="1" height="1" /></bezel>
<bezel name="lamp31" element="led"><bounds x="2" y="26" width="1" height="1" /></bezel>
<bezel name="lamp32" element="led"><bounds x="4" y="26" width="1" height="1" /></bezel>
<bezel name="lamp33" element="led"><bounds x="6" y="26" width="1" height="1" /></bezel>
<bezel name="lamp34" element="led"><bounds x="8" y="26" width="1" height="1" /></bezel>
<bezel name="lamp35" element="led"><bounds x="10" y="26" width="1" height="1" /></bezel>
<bezel name="lamp36" element="led"><bounds x="12" y="26" width="1" height="1" /></bezel>
<bezel name="lamp37" element="led"><bounds x="14" y="26" width="1" height="1" /></bezel>
<bezel name="lamp40" element="led"><bounds x="0" y="28" width="1" height="1" /></bezel>
<bezel name="lamp41" element="led"><bounds x="2" y="28" width="1" height="1" /></bezel>
<bezel name="lamp42" element="led"><bounds x="4" y="28" width="1" height="1" /></bezel>
<bezel name="lamp43" element="led"><bounds x="6" y="28" width="1" height="1" /></bezel>
<bezel name="lamp44" element="led"><bounds x="8" y="28" width="1" height="1" /></bezel>
<bezel name="lamp45" element="led"><bounds x="10" y="28" width="1" height="1" /></bezel>
<bezel name="lamp46" element="led"><bounds x="12" y="28" width="1" height="1" /></bezel>
<bezel name="lamp47" element="led"><bounds x="14" y="28" width="1" height="1" /></bezel>
<bezel name="lamp50" element="led"><bounds x="0" y="30" width="1" height="1" /></bezel>
<bezel name="lamp51" element="led"><bounds x="2" y="30" width="1" height="1" /></bezel>
<bezel name="lamp52" element="led"><bounds x="4" y="30" width="1" height="1" /></bezel>
<bezel name="lamp53" element="led"><bounds x="6" y="30" width="1" height="1" /></bezel>
<bezel name="lamp54" element="led"><bounds x="8" y="30" width="1" height="1" /></bezel>
<bezel name="lamp55" element="led"><bounds x="10" y="30" width="1" height="1" /></bezel>
<bezel name="lamp56" element="led"><bounds x="12" y="30" width="1" height="1" /></bezel>
<bezel name="lamp57" element="led"><bounds x="14" y="30" width="1" height="1" /></bezel>
<bezel name="lamp60" element="led"><bounds x="0" y="32" width="1" height="1" /></bezel>
<bezel name="lamp61" element="led"><bounds x="2" y="32" width="1" height="1" /></bezel>
<bezel name="lamp62" element="led"><bounds x="4" y="32" width="1" height="1" /></bezel>
<bezel name="lamp63" element="led"><bounds x="6" y="32" width="1" height="1" /></bezel>
<bezel name="lamp64" element="led"><bounds x="8" y="32" width="1" height="1" /></bezel>
<bezel name="lamp65" element="led"><bounds x="10" y="32" width="1" height="1" /></bezel>
<bezel name="lamp66" element="led"><bounds x="12" y="32" width="1" height="1" /></bezel>
<bezel name="lamp67" element="led"><bounds x="14" y="32" width="1" height="1" /></bezel>
<bezel name="lamp70" element="led"><bounds x="0" y="34" width="1" height="1" /></bezel>
<bezel name="lamp71" element="led"><bounds x="2" y="34" width="1" height="1" /></bezel>
<bezel name="lamp72" element="led"><bounds x="4" y="34" width="1" height="1" /></bezel>
<bezel name="lamp73" element="led"><bounds x="6" y="34" width="1" height="1" /></bezel>
<bezel name="lamp74" element="led"><bounds x="8" y="34" width="1" height="1" /></bezel>
<bezel name="lamp75" element="led"><bounds x="10" y="34" width="1" height="1" /></bezel>
<bezel name="lamp76" element="led"><bounds x="12" y="34" width="1" height="1" /></bezel>
<bezel name="lamp77" element="led"><bounds x="14" y="34" width="1" height="1" /></bezel>
<bezel name="lamp80" element="led"><bounds x="0" y="36" width="1" height="1" /></bezel>
<bezel name="lamp81" element="led"><bounds x="2" y="36" width="1" height="1" /></bezel>
<bezel name="lamp82" element="led"><bounds x="4" y="36" width="1" height="1" /></bezel>
<bezel name="lamp83" element="led"><bounds x="6" y="36" width="1" height="1" /></bezel>
<bezel name="lamp84" element="led"><bounds x="8" y="36" width="1" height="1" /></bezel>
<bezel name="lamp85" element="led"><bounds x="10" y="36" width="1" height="1" /></bezel>
<bezel name="lamp86" element="led"><bounds x="12" y="36" width="1" height="1" /></bezel>
<bezel name="lamp87" element="led"><bounds x="14" y="36" width="1" height="1" /></bezel>
<bezel name="lamp90" element="led"><bounds x="0" y="38" width="1" height="1" /></bezel>
<bezel name="lamp91" element="led"><bounds x="2" y="38" width="1" height="1" /></bezel>
<bezel name="lamp92" element="led"><bounds x="4" y="38" width="1" height="1" /></bezel>
<bezel name="lamp93" element="led"><bounds x="6" y="38" width="1" height="1" /></bezel>
<bezel name="lamp94" element="led"><bounds x="8" y="38" width="1" height="1" /></bezel>
<bezel name="lamp95" element="led"><bounds x="10" y="38" width="1" height="1" /></bezel>
<bezel name="lamp96" element="led"><bounds x="12" y="38" width="1" height="1" /></bezel>
<bezel name="lamp97" element="led"><bounds x="14" y="38" width="1" height="1" /></bezel>
<bezel name="lamp100" element="led"><bounds x="0" y="40" width="1" height="1" /></bezel>
<bezel name="lamp101" element="led"><bounds x="2" y="40" width="1" height="1" /></bezel>
<bezel name="lamp102" element="led"><bounds x="4" y="40" width="1" height="1" /></bezel>
<bezel name="lamp103" element="led"><bounds x="6" y="40" width="1" height="1" /></bezel>
<bezel name="lamp104" element="led"><bounds x="8" y="40" width="1" height="1" /></bezel>
<bezel name="lamp105" element="led"><bounds x="10" y="40" width="1" height="1" /></bezel>
<bezel name="lamp106" element="led"><bounds x="12" y="40" width="1" height="1" /></bezel>
<bezel name="lamp107" element="led"><bounds x="14" y="40" width="1" height="1" /></bezel>
<bezel name="lamp110" element="led"><bounds x="0" y="42" width="1" height="1" /></bezel>
<bezel name="lamp111" element="led"><bounds x="2" y="42" width="1" height="1" /></bezel>
<bezel name="lamp112" element="led"><bounds x="4" y="42" width="1" height="1" /></bezel>
<bezel name="lamp113" element="led"><bounds x="6" y="42" width="1" height="1" /></bezel>
<bezel name="lamp114" element="led"><bounds x="8" y="42" width="1" height="1" /></bezel>
<bezel name="lamp115" element="led"><bounds x="10" y="42" width="1" height="1" /></bezel>
<bezel name="lamp116" element="led"><bounds x="12" y="42" width="1" height="1" /></bezel>
<bezel name="lamp117" element="led"><bounds x="14" y="42" width="1" height="1" /></bezel>
<bezel name="lamp120" element="led"><bounds x="0" y="44" width="1" height="1" /></bezel>
<bezel name="lamp121" element="led"><bounds x="2" y="44" width="1" height="1" /></bezel>
<bezel name="lamp122" element="led"><bounds x="4" y="44" width="1" height="1" /></bezel>
<bezel name="lamp123" element="led"><bounds x="6" y="44" width="1" height="1" /></bezel>
<bezel name="lamp124" element="led"><bounds x="8" y="44" width="1" height="1" /></bezel>
<bezel name="lamp125" element="led"><bounds x="10" y="44" width="1" height="1" /></bezel>
<bezel name="lamp126" element="led"><bounds x="12" y="44" width="1" height="1" /></bezel>
<bezel name="lamp127" element="led"><bounds x="14" y="44" width="1" height="1" /></bezel>
<!-- 13*8 matrix (first 3 are the 7segs) -->
<repeat count="13">
<param name="ypos" start="20" increment="2" />
<param name="lampno" start="0" increment="10" />
<repeat count="8">
<param name="xpos" start="0" increment="2" />
<param name="lampno" start="~lampno~" increment="1" />
<bezel name="lamp~lampno~" element="led">
<bounds x="~xpos~" y="~ypos~" width="1" height="1" />
</bezel>
</repeat>
</repeat>
</view>
</mamelayout>