Better documented various bit latches.

Hooked up crusnexo lamp board (added layout).
Fixed year in MK4 startup test.
Switched to XTALs.
This commit is contained in:
Aaron Giles 2008-01-02 15:16:59 +00:00
parent 34642a5def
commit 008440aa62
5 changed files with 477 additions and 84 deletions

1
.gitattributes vendored
View File

@ -2312,6 +2312,7 @@ src/mame/layout/clowns.lay svneol=native#text/plain
src/mame/layout/connect4.lay svneol=native#text/plain
src/mame/layout/copsnrob.lay svneol=native#text/plain
src/mame/layout/crash.lay svneol=native#text/plain
src/mame/layout/crusnexo.lay svneol=native#text/plain
src/mame/layout/darius.lay svneol=native#text/plain
src/mame/layout/deadeye.lay svneol=native#text/plain
src/mame/layout/dlair.lay svneol=native#text/plain

View File

@ -16,6 +16,7 @@
**************************************************************************/
#include "driver.h"
#include "debugger.h"
#include "cpu/tms34010/tms34010.h"
#include "cpu/adsp2100/adsp2100.h"
#include "includes/midzeus.h"
@ -23,8 +24,10 @@
#include "machine/timekpr.h"
#include "audio/dcs.h"
#include "crusnexo.lh"
#define CPU_CLOCK 60000000
#define CPU_CLOCK XTAL_60MHz
#define BEAM_DY 3
#define BEAM_DX 3
@ -35,11 +38,17 @@ static UINT8 gun_irq_state;
static emu_timer * gun_timer[2];
static INT32 gun_x[2], gun_y[2];
static UINT8 crusnexo_leds_select;
static UINT8 keypad_select;
static UINT8 bitlatch[10];
static UINT32 *ram_base;
static UINT32 *zpram;
static size_t zpram_size;
static UINT8 cmos_protected;
static UINT32 *linkram;
static emu_timer *timer[2];
static UINT32 *tms32031_control;
@ -67,6 +76,8 @@ static MACHINE_START( midzeus )
state_save_register_global(gun_irq_state);
state_save_register_global_array(gun_x);
state_save_register_global_array(gun_y);
state_save_register_global(crusnexo_leds_select);
state_save_register_global(keypad_select);
}
@ -114,15 +125,17 @@ static INTERRUPT_GEN( display_irq )
static WRITE32_HANDLER( cmos_w )
{
if (!cmos_protected)
if (bitlatch[2] && !cmos_protected)
COMBINE_DATA(&generic_nvram32[offset]);
else
logerror("%06X:timekeeper_w with bitlatch[2] = %d, cmos_protected = %d\n", activecpu_get_pc(), bitlatch[2], cmos_protected);
cmos_protected = TRUE;
}
static READ32_HANDLER( cmos_r )
{
return generic_nvram32[offset];
return generic_nvram32[offset] | 0xffffff00;
}
@ -135,41 +148,23 @@ static WRITE32_HANDLER( cmos_protect_w )
/*************************************
*
* Timekeeper access (Zeus 2 only)
* Timekeeper and ZPRAM access
* (Zeus 2 only)
*
*************************************/
static READ32_HANDLER( timekeeper_r )
{
UINT8 result = timekeeper_0_r(offset);
// logerror("%06X:cmos_time_r(%X) = %02X\n", activecpu_get_pc(), offset, result);
return result;
return timekeeper_0_r(offset) | 0xffffff00;
}
static WRITE32_HANDLER( timekeeper_w )
{
if (!cmos_protected)
{
// logerror("%06X:cmos_time_w(%X) = %02X\n", activecpu_get_pc(), offset, data);
if (bitlatch[2] && !cmos_protected)
timekeeper_0_w(offset, data);
}
cmos_protected = TRUE;
}
/*************************************
*
* Zero-power RAM access (Zeus 2 only)
*
*************************************/
static WRITE32_HANDLER( zpram_w )
{
/* ZPRAM seems to use the same protection control as CMOS */
// if (!cmos_protected)
COMBINE_DATA(zpram + offset);
else
logerror("%06X:timekeeper_w with bitlatch[2] = %d, cmos_protected = %d\n", activecpu_get_pc(), bitlatch[2], cmos_protected);
cmos_protected = TRUE;
}
@ -180,6 +175,15 @@ static READ32_HANDLER( zpram_r )
}
static WRITE32_HANDLER( zpram_w )
{
if (bitlatch[2])
COMBINE_DATA(&zpram[offset]);
else
logerror("%06X:zpram_w with bitlatch[2] = %d\n", activecpu_get_pc(), bitlatch[2]);
}
/*************************************
*
@ -201,6 +205,186 @@ static NVRAM_HANDLER( midzeus2 )
/*************************************
*
* Miscellaneous bit latches
*
*************************************/
static READ32_HANDLER( bitlatches_r )
{
switch (offset)
{
/* unknown purpose; two bits are apparently used */
case 1:
return bitlatch[offset] | ~3;
/* CMOS/ZPRAM extra enable latch; only low bit is used */
case 2:
return bitlatch[offset] | ~1;
/* unknown purpose; mk4/invasn/thegrid read at startup; invasn freaks if it is 1 at startup */
/* only low bit is used */
case 3:
return bitlatch[offset] | ~1;
/* ROM bank selection on Zeus 2; two bits are used */
case 5:
return bitlatch[offset] | ~3;
/* unknown purpose; crusnexo reads at startup: if (val & 0xf0) == 0xa0 it affects */
/* how the Zeus is used (reg 0x5d is set to 0x54580006) */
/* thegrid does the same, writing either 0xD4580006 or 0xC4180006 depending */
/* this is the value reported as DISK JR ASIC version in thegrid startup test */
case 6:
return 0xa0 | ~0xff;
/* unknown purpose */
default:
logerror("%06X:bitlatches_r(%X)\n", activecpu_get_pc(), offset);
break;
}
return ~0;
}
static WRITE32_HANDLER( bitlatches_w )
{
UINT32 oldval = bitlatch[offset];
bitlatch[offset] = data;
switch (offset)
{
/* unknown purpose */
default:
if (oldval ^ data)
logerror("%06X:bitlatches_w(%X) = %X\n", activecpu_get_pc(), offset, data);
break;
/* unknown purpose; crusnexo toggles this between 0 and 1 every 20 frames; thegrid writes 1 */
case 0:
if (data != 0 && data != 1)
logerror("%06X:bitlatches_w(%X) = %X (unexpected)\n", activecpu_get_pc(), offset, data);
break;
/* unknown purpose; mk4/invasn write 1 here at initialization; crusnexo/thegrid write 3 */
case 1:
if (data != 1 && data != 3)
logerror("%06X:bitlatches_w(%X) = %X (unexpected)\n", activecpu_get_pc(), offset, data);
break;
/* CMOS/ZPRAM extra enable latch; only low bit is used */
case 2:
break;
/* unknown purpose; invasn writes 2 here at startup */
case 4:
if (data != 2)
logerror("%06X:bitlatches_w(%X) = %X (unexpected)\n", activecpu_get_pc(), offset, data);
break;
/* ROM bank selection on Zeus 2 */
case 5:
memory_set_bank(1, bitlatch[offset] & 3);
break;
/* unknown purpose; crusnexo/thegrid write 1 at startup */
case 7:
if (data != 1)
logerror("%06X:bitlatches_w(%X) = %X (unexpected)\n", activecpu_get_pc(), offset, data);
break;
/* unknown purpose; crusnexo writes 4 at startup; thegrid writes 6 */
case 8:
if (data != 4 && data != 6)
logerror("%06X:bitlatches_w(%X) = %X (unexpected)\n", activecpu_get_pc(), offset, data);
break;
/* unknown purpose; thegrid writes 1 at startup */
case 9:
if (data != 1)
logerror("%06X:bitlatches_w(%X) = %X (unexpected)\n", activecpu_get_pc(), offset, data);
break;
}
}
/*************************************
*
* 7-segment LED controls
*
*************************************/
static READ32_HANDLER( crusnexo_leds_r )
{
/* reads appear to just be for synchronization */
return ~0;
}
static WRITE32_HANDLER( crusnexo_leds_w )
{
int bit, led;
switch (offset)
{
case 0: /* unknown purpose */
break;
case 1: /* controls lamps */
for (bit = 0; bit < 8; bit++)
output_set_lamp_value(bit, (data >> bit) & 1);
break;
case 2: /* sets state of selected LEDs */
/* selection bits 4-6 select the 3 7-segment LEDs */
for (bit = 4; bit < 7; bit++)
if ((crusnexo_leds_select & (1 << bit)) == 0)
output_set_digit_value(bit, ~data & 0xff);
/* selection bits 0-2 select the tachometer LEDs */
for (bit = 0; bit < 3; bit++)
if ((crusnexo_leds_select & (1 << bit)) == 0)
for (led = 0; led < 8; led++)
output_set_led_value(bit * 8 + led, (~data >> led) & 1);
break;
case 3: /* selects which set of LEDs we are addressing */
crusnexo_leds_select = data;
break;
}
}
/*************************************
*
* Link controller access (Zeus 2 only)
*
*************************************/
// read 8d0003, check bit 1, skip some stuff if 0
// write junk to 9e0000
static READ32_HANDLER( linkram_r )
{
logerror("%06X:unknown_8a000_r(%02X)\n", activecpu_get_pc(), offset);
if (offset == 0)
return 0x30313042;
else if (offset == 0x3c)
return 0xffffffff;
return linkram[offset];
}
static WRITE32_HANDLER( linkram_w )
{
logerror("%06X:unknown_8a000_w(%02X) = %08X\n", activecpu_get_pc(), offset, data);
COMBINE_DATA(&linkram[offset]);
}
/*************************************
*
* TMS32031 I/O accesses
@ -262,6 +446,26 @@ static UINT32 custom_49way_r(void *param)
}
static WRITE32_HANDLER( keypad_select_w )
{
if (offset == 1)
keypad_select = data;
}
static UINT32 keypad_r(void *param)
{
UINT32 bits = readinputportbytag(param);
UINT8 select = keypad_select;
while ((select & 1) != 0)
{
select >>= 1;
bits >>= 4;
}
return bits;
}
/*************************************
*
@ -373,57 +577,14 @@ static READ32_HANDLER( invasn_gun_r )
*
*************************************/
// read 8d0003, check bit 1, skip some stuff if 0
// write junk to 9e0000
static UINT32 *unknown_8a0000;
static UINT32 *unknown_8d0000;
static READ32_HANDLER( unknown_8d0000_r )
{
return unknown_8d0000[offset];
}
static WRITE32_HANDLER( unknown_8d0000_w )
{
// logerror("%06X:write to %06X = %08X\n", activecpu_get_pc(), 0x8d0000 + offset, data);
COMBINE_DATA(&unknown_8d0000[offset]);
}
static WRITE32_HANDLER( unknown_9d0000_w )
{
// logerror("%06X:write to %06X = %08X\n", activecpu_get_pc(), 0x9d0000 + offset, data);
COMBINE_DATA(&unknown_8d0000[offset]);
}
static WRITE32_HANDLER( rombank_select_w )
{
if (data >= 0 && data <= 2)
memory_set_bank(1, data);
}
static READ32_HANDLER( unknown_8a0000_r )
{
logerror("%06X:unknown_8a000_r(%02X)\n", activecpu_get_pc(), offset);
if (offset == 0)
return 0x30313042;
return unknown_8a0000[offset];
}
static WRITE32_HANDLER( unknown_8a0000_w )
{
logerror("%06X:unknown_8a000_w(%02X) = %08X\n", activecpu_get_pc(), offset, data);
COMBINE_DATA(&unknown_8a0000[offset]);
}
static ADDRESS_MAP_START( zeus_map, ADDRESS_SPACE_PROGRAM, 32 )
ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) )
AM_RANGE(0x000000, 0x03ffff) AM_RAM AM_BASE(&ram_base)
AM_RANGE(0x400000, 0x41ffff) AM_RAM
AM_RANGE(0x808000, 0x80807f) AM_READWRITE(tms32031_control_r, tms32031_control_w) AM_BASE(&tms32031_control)
AM_RANGE(0x880000, 0x8803ff) AM_READWRITE(zeus_r, zeus_w) AM_BASE(&zeusbase)
AM_RANGE(0x8d0000, 0x8d0003) AM_READWRITE(unknown_8d0000_r, unknown_8d0000_w) AM_BASE(&unknown_8d0000)
AM_RANGE(0x8d0000, 0x8d0004) AM_READWRITE(bitlatches_r, bitlatches_w)
AM_RANGE(0x990000, 0x99000f) AM_READWRITE(midway_ioasic_r, midway_ioasic_w)
AM_RANGE(0x9d0000, 0x9d0001) AM_WRITE(unknown_9d0000_w)
AM_RANGE(0x9e0000, 0x9e0000) AM_WRITENOP // watchdog?
AM_RANGE(0x9f0000, 0x9f7fff) AM_READWRITE(cmos_r, cmos_w) AM_BASE(&generic_nvram32) AM_SIZE(&generic_nvram_size)
AM_RANGE(0x9f8000, 0x9f8000) AM_WRITE(cmos_protect_w)
@ -437,9 +598,8 @@ static ADDRESS_MAP_START( zeus2_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x400000, 0x43ffff) AM_RAM
AM_RANGE(0x808000, 0x80807f) AM_READWRITE(tms32031_control_r, tms32031_control_w) AM_BASE(&tms32031_control)
AM_RANGE(0x880000, 0x88007f) AM_READWRITE(zeus2_r, zeus2_w) AM_BASE(&zeusbase)
AM_RANGE(0x8a0000, 0x8a0027) AM_READWRITE(unknown_8a0000_r, unknown_8a0000_w) AM_BASE(&unknown_8a0000)
AM_RANGE(0x8d0000, 0x8d0003) AM_READWRITE(unknown_8d0000_r, unknown_8d0000_w) AM_BASE(&unknown_8d0000)
AM_RANGE(0x8d0005, 0x8d0005) AM_WRITE(rombank_select_w)
AM_RANGE(0x8a0000, 0x8a003f) AM_READWRITE(linkram_r, linkram_w) AM_BASE(&linkram)
AM_RANGE(0x8d0000, 0x8d000a) AM_READWRITE(bitlatches_r, bitlatches_w)
AM_RANGE(0x900000, 0x91ffff) AM_READWRITE(zpram_r, zpram_w) AM_BASE(&zpram) AM_SIZE(&zpram_size) AM_MIRROR(0x020000)
AM_RANGE(0x990000, 0x99000f) AM_READWRITE(midway_ioasic_r, midway_ioasic_w)
AM_RANGE(0x9c0000, 0x9c000f) AM_READWRITE(analog_r, analog_w)
@ -450,6 +610,43 @@ static ADDRESS_MAP_START( zeus2_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0xc00000, 0xffffff) AM_ROMBANK(1) AM_REGION(REGION_USER2, 0)
ADDRESS_MAP_END
/*
mk4:
writes to 9D0000: 00000009, FFFFFFFF
reads from 9D0000
writes to 9D0001: 00000000
writes to 9D0003: 00000374
writes to 9D0005: 00000000
crusnexo:
reads from 8A0000
writes to 9D0000: 00000000, 00000008, 00000009, FFFFFFFF
reads from 9D0000
writes to 9D0001: 00000000, 00000004, 00000204
writes to 9D0003: 00000374
-- hard coded to $374 at startup
writes to 9D0004: 0000000F
-- hard coded to $F at startup
writes to 9E0008: 00000000
writes to 9E8000: 00810081
thegrid:
writes to 9D0000: 00000008, 00000009, 0000008D
writes to 9D0001: 00000000, 00000004, 00000204
writes to 9D0003: 00000354
reads from 9D0003
writes to 9D0004: FFFFFFFF
writes to 9D0005: 00000000
writes to 9E8000: 00810081
*/
/*************************************
@ -751,15 +948,22 @@ static INPUT_PORTS_START( crusnexo )
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START
PORT_BIT( 0x0007, IP_ACTIVE_HIGH, IPT_SPECIAL) PORT_CUSTOM( keypad_r, "KEYPAD" )
PORT_BIT( 0xfff8, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START_TAG("KEYPAD")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3) /* keypad 3 */
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3) /* keypad 1 */
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3) /* keypad 2 */
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(3) /* keypad 2 */
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(3) /* keypad 2 */
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(3) /* keypad 2 */
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_PLAYER(3) /* keypad 2 */
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_PLAYER(3) /* keypad 2 */
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(3) /* keypad 6 */
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(3) /* keypad 4 */
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(3) /* keypad 5 */
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON9 ) PORT_PLAYER(3) /* keypad 9 */
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_PLAYER(3) /* keypad 7 */
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_PLAYER(3) /* keypad 8 */
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON12 ) PORT_PLAYER(3) /* keypad # */
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON11 ) PORT_PLAYER(3) /* keypad * */
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON10 ) PORT_PLAYER(3) /* keypad 0 */
PORT_START_TAG("ANALOG3")
PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_MINMAX(0x10,0xf0) PORT_SENSITIVITY(25) PORT_KEYDELTA(20)
@ -1077,7 +1281,7 @@ ROM_END
static DRIVER_INIT( mk4 )
{
dcs2_init(0, 0);
midway_ioasic_init(MIDWAY_IOASIC_STANDARD, 461/* or 474 */, 97, NULL);
midway_ioasic_init(MIDWAY_IOASIC_STANDARD, 461/* or 474 */, 94, NULL);
midway_ioasic_set_shuffle_state(1);
}
@ -1085,7 +1289,7 @@ static DRIVER_INIT( mk4 )
static DRIVER_INIT( invasn )
{
dcs2_init(0, 0);
midway_ioasic_init(MIDWAY_IOASIC_STANDARD, 468/* or 488 */, 97, NULL);
midway_ioasic_init(MIDWAY_IOASIC_STANDARD, 468/* or 488 */, 94, NULL);
memory_install_readwrite32_handler(0, ADDRESS_SPACE_PROGRAM, 0x9c0000, 0x9c0000, 0, 0, invasn_gun_r, invasn_gun_w);
}
@ -1095,6 +1299,9 @@ static DRIVER_INIT( crusnexo )
dcs2_init(0, 0);
midway_ioasic_init(MIDWAY_IOASIC_STANDARD, 472/* or 476,477,478,110 */, 99, NULL);
memory_configure_bank(1, 0, 3, memory_region(REGION_USER2), 0x400000*4);
memory_install_readwrite32_handler(0, ADDRESS_SPACE_PROGRAM, 0x9b0004, 0x9b0007, 0, 0, crusnexo_leds_r, crusnexo_leds_w);
memory_install_write32_handler (0, ADDRESS_SPACE_PROGRAM, 0x8d0009, 0x8d000a, 0, 0, keypad_select_w);
}
@ -1116,5 +1323,5 @@ static DRIVER_INIT( thegrid )
GAME( 1997, mk4, 0, midzeus, mk4, mk4, ROT0, "Midway", "Mortal Kombat 4 (3.0)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
GAME( 1997, mk4a, mk4, midzeus, mk4, mk4, ROT0, "Midway", "Mortal Kombat 4 (2.1)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
GAME( 1999, invasn, 0, midzeus, invasn, invasn, ROT0, "Midway", "Invasion (Midway)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
GAME( 1999, crusnexo, 0, midzeus2, crusnexo, crusnexo, ROT0, "Midway", "Cruis'n Exotica", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
GAMEL( 1999, crusnexo, 0, midzeus2, crusnexo, crusnexo, ROT0, "Midway", "Cruis'n Exotica", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE, layout_crusnexo )
GAME( 2001, thegrid, 0, midzeus2, thegrid, thegrid, ROT0, "Midway", "The Grid (version 1.1)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )

View File

@ -4,7 +4,7 @@
**************************************************************************/
#define MIDZEUS_VIDEO_CLOCK 66000000
#define MIDZEUS_VIDEO_CLOCK XTAL_66_6667MHz
/*----------- defined in video/midzeus.c -----------*/

View File

@ -0,0 +1,183 @@
<?xml version="1.0"?>
<mamelayout version="2">
<element name="digit" defstate="0">
<led7seg>
<color red="1.0" green="0.3" blue="0.0" />
</led7seg>
</element>
<element name="led" defstate="0">
<disk state="1">
<color red="0.2" green="1.0" blue="0.2" />
</disk>
</element>
<element name="start" defstate="0">
<disk state="0">
<bounds x="0.1" y="0" width="0.8" height="1" />
<color red="0.1" green="0.1" blue="0.1" />
</disk>
<disk state="1">
<bounds x="0.1" y="0" width="0.8" height="1" />
<color red="1.0" green="1.0" blue="1.0" />
</disk>
<text string="START">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.8" />
</text>
</element>
<element name="radio" defstate="1">
<disk state="0">
<bounds x="0.1" y="0" width="0.8" height="1" />
<color red="0.1" green="0.1" blue="0.1" />
</disk>
<disk state="1">
<bounds x="0.1" y="0" width="0.8" height="1" />
<color red="1.0" green="1.0" blue="1.0" />
</disk>
<text string="RADIO">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.8" />
</text>
</element>
<element name="view1" defstate="0">
<disk state="0">
<bounds x="0.1" y="0" width="0.8" height="1" />
<color red="0.1" green="0.02" blue="0.02" />
</disk>
<disk state="1">
<bounds x="0.1" y="0" width="0.8" height="1" />
<color red="1.0" green="0.2" blue="0.2" />
</disk>
<text string="VIEW 1">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.8" />
</text>
</element>
<element name="view2" defstate="0">
<disk state="0">
<bounds x="0.1" y="0" width="0.8" height="1" />
<color red="0.1" green="0.1" blue="0.1" />
</disk>
<disk state="1">
<bounds x="0.1" y="0" width="0.8" height="1" />
<color red="1.0" green="1.0" blue="1.0" />
</disk>
<text string="VIEW 2">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.8" />
</text>
</element>
<element name="view3" defstate="0">
<disk state="0">
<bounds x="0.1" y="0" width="0.8" height="1" />
<color red="0.02" green="0.02" blue="0.1" />
</disk>
<disk state="1">
<bounds x="0.1" y="0" width="0.8" height="1" />
<color red="0.2" green="0.2" blue="1.0" />
</disk>
<text string="VIEW 3">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.8" />
</text>
</element>
<view name="Simple LEDs">
<bounds left="0" top="0" right="4" bottom="3.472" />
<screen index="0">
<bounds left="0" top="0" right="4" bottom="3" />
</screen>
<bezel name="digit6" element="digit">
<bounds x="1.70" y="3.136" width="0.134" height="0.2" />
</bezel>
<bezel name="digit5" element="digit">
<bounds x="1.90" y="3.136" width="0.134" height="0.2" />
</bezel>
<bezel name="digit4" element="digit">
<bounds x="2.10" y="3.136" width="0.134" height="0.2" />
</bezel>
<bezel name="led0" element="led">
<bounds x="0.533" y="3.461" width="0.02" height="0.02" />
</bezel>
<bezel name="led1" element="led">
<bounds x="0.533" y="3.370" width="0.02" height="0.02" />
</bezel>
<bezel name="led2" element="led">
<bounds x="0.549" y="3.279" width="0.02" height="0.02" />
</bezel>
<bezel name="led3" element="led">
<bounds x="0.596" y="3.195" width="0.02" height="0.02" />
</bezel>
<bezel name="led4" element="led">
<bounds x="0.670" y="3.123" width="0.02" height="0.02" />
</bezel>
<bezel name="led5" element="led">
<bounds x="0.767" y="3.067" width="0.02" height="0.02" />
</bezel>
<bezel name="led6" element="led">
<bounds x="0.879" y="3.032" width="0.02" height="0.02" />
</bezel>
<bezel name="led7" element="led">
<bounds x="1.000" y="3.020" width="0.02" height="0.02" />
</bezel>
<bezel name="led16" element="led">
<bounds x="1.121" y="3.032" width="0.02" height="0.02" />
</bezel>
<bezel name="led17" element="led">
<bounds x="1.233" y="3.067" width="0.02" height="0.02" />
</bezel>
<bezel name="led8" element="led">
<bounds x="3.467" y="3.461" width="0.02" height="0.02" />
</bezel>
<bezel name="led9" element="led">
<bounds x="3.467" y="3.370" width="0.02" height="0.02" />
</bezel>
<bezel name="led10" element="led">
<bounds x="3.451" y="3.279" width="0.02" height="0.02" />
</bezel>
<bezel name="led11" element="led">
<bounds x="3.404" y="3.195" width="0.02" height="0.02" />
</bezel>
<bezel name="led12" element="led">
<bounds x="3.330" y="3.123" width="0.02" height="0.02" />
</bezel>
<bezel name="led13" element="led">
<bounds x="3.233" y="3.067" width="0.02" height="0.02" />
</bezel>
<bezel name="led14" element="led">
<bounds x="3.121" y="3.032" width="0.02" height="0.02" />
</bezel>
<bezel name="led15" element="led">
<bounds x="3.000" y="3.020" width="0.02" height="0.02" />
</bezel>
<bezel name="led22" element="led">
<bounds x="2.879" y="3.032" width="0.02" height="0.02" />
</bezel>
<bezel name="led23" element="led">
<bounds x="2.767" y="3.067" width="0.02" height="0.02" />
</bezel>
<bezel name="lamp0" element="start">
<bounds x="3.5" y="3.3" width="0.4" height="0.1" />
</bezel>
<bezel name="lamp1" element="view1">
<bounds x="0.1" y="3.1" width="0.4" height="0.1" />
</bezel>
<bezel name="lamp2" element="view2">
<bounds x="0.1" y="3.2" width="0.4" height="0.1" />
</bezel>
<bezel name="lamp3" element="view3">
<bounds x="0.1" y="3.3" width="0.4" height="0.1" />
</bezel>
</view>
</mamelayout>

View File

@ -1681,6 +1681,8 @@ $(DRIVERS)/mw8080bw.o: $(LAYOUT)/clowns.lh \
$(DRIVERS)/meadows.o: $(LAYOUT)/deadeye.lh \
$(LAYOUT)/gypsyjug.lh
$(DRIVERS)/midzeus.o: $(LAYOUT)/crusnexo.lh
$(DRIVERS)/nbmj8688.o: $(LAYOUT)/nbmj8688.lh
$(DRIVERS)/peplus.o: $(LAYOUT)/peplus.lh \