summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Michaël Banaan Ananas <happppp@users.noreply.github.com>2012-07-11 23:05:51 +0000
committer Michaël Banaan Ananas <happppp@users.noreply.github.com>2012-07-11 23:05:51 +0000
commit70d60b3c579d06284fd8bbc91c28666ea3991ca8 (patch)
tree28c035b4124bfbf2241e9a6e21c37ec5ff2dba5d
parentb272581c9baec5cb404a5ad9a07dc8e45832c6fd (diff)
added simple artwork for dendego games
-rw-r--r--.gitattributes1
-rw-r--r--src/emu/rendlay.c16
-rw-r--r--src/mame/drivers/taitojc.c85
-rw-r--r--src/mame/includes/taitojc.h77
-rw-r--r--src/mame/layout/dendego.lay286
-rw-r--r--src/mame/mame.mak2
-rw-r--r--src/mame/video/taitojc.c22
7 files changed, 405 insertions, 84 deletions
diff --git a/.gitattributes b/.gitattributes
index 4912d03ee1a..4642fb7d407 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -4046,6 +4046,7 @@ src/mame/layout/crusnexo.lay svneol=native#text/plain
src/mame/layout/darius.lay svneol=native#text/plain
src/mame/layout/dblaxle.lay svneol=native#text/plain
src/mame/layout/deadeye.lay svneol=native#text/plain
+src/mame/layout/dendego.lay svneol=native#text/plain
src/mame/layout/depthch.lay svneol=native#text/plain
src/mame/layout/destroyr.lay svneol=native#text/plain
src/mame/layout/dlair.lay svneol=native#text/plain
diff --git a/src/emu/rendlay.c b/src/emu/rendlay.c
index fe6346c7ad2..b283caab27f 100644
--- a/src/emu/rendlay.c
+++ b/src/emu/rendlay.c
@@ -486,14 +486,10 @@ layout_element::layout_element(running_machine &machine, xml_data_node &elemnode
m_maxstate = 31;
if (newcomp.m_type == component::CTYPE_DOTMATRIXDOT)
m_maxstate = 1;
- if (newcomp.m_type == component::CTYPE_SIMPLECOUNTER)
- {
+ if (newcomp.m_type == component::CTYPE_SIMPLECOUNTER)
m_maxstate = xml_get_attribute_int_with_subst(machine, *compnode, "maxstate", 999);
- }
if (newcomp.m_type == component::CTYPE_REEL)
- {
m_maxstate = 65536;
- }
}
// determine the scale/offset for normalization
@@ -621,8 +617,6 @@ layout_element::component::component(running_machine &machine, xml_data_node &co
m_file[i] = NULL;
}
-
-
// fetch common data
m_state = xml_get_attribute_int_with_subst(machine, compnode, "state", -1);
parse_bounds(machine, xml_get_sibling(compnode.child, "bounds"), m_bounds);
@@ -660,12 +654,15 @@ layout_element::component::component(running_machine &machine, xml_data_node &co
{
m_type = CTYPE_DOTMATRIXDOT;
}
+
// simplecounter nodes
else if (strcmp(compnode.name, "simplecounter") == 0)
{
m_type = CTYPE_SIMPLECOUNTER;
m_digits = xml_get_attribute_int_with_subst(machine, compnode, "digits", 2);
+ m_textalign = xml_get_attribute_int_with_subst(machine, compnode, "align", 0);
}
+
// fruit machine reels
else if (strcmp(compnode.name, "reel") == 0)
{
@@ -715,6 +712,7 @@ layout_element::component::component(running_machine &machine, xml_data_node &co
m_numsymbolsvisible = xml_get_attribute_int_with_subst(machine, compnode, "numsymbolsvisible", 3);
m_reelreversed = xml_get_attribute_int_with_subst(machine, compnode, "reelreversed", 0);
}
+
// led7seg nodes
else if (strcmp(compnode.name, "led7seg") == 0)
m_type = CTYPE_LED7SEG;
@@ -1031,8 +1029,6 @@ void layout_element::component::draw_simplecounter(running_machine &machine, bit
/* state is a normalized value between 0 and 65536 so that we don't need to worry about how many motor steps here or in the .lay, only the number of symbols */
void layout_element::component::draw_reel(running_machine &machine, bitmap_argb32 &dest, const rectangle &bounds, int state)
{
-
-
const int max_state_used = 0x10000;
// shift the reels a bit based on this param, allows fine tuning
@@ -1055,8 +1051,6 @@ void layout_element::component::draw_reel(running_machine &machine, bitmap_argb3
for (int fruit = 0;fruit<m_numstops;fruit++)
{
-
-
int basey;
if (m_reelreversed==1)
diff --git a/src/mame/drivers/taitojc.c b/src/mame/drivers/taitojc.c
index d81c7e5293d..ade968fd18e 100644
--- a/src/mame/drivers/taitojc.c
+++ b/src/mame/drivers/taitojc.c
@@ -347,7 +347,6 @@ Notes:
- Train board (external sound board with OKI6295) is not emulated.
- dangcurv DSP program crashes very soon, so no 3d is currently shown.
- add idle skips if possible
- - dendego and clones needs output lamps and an artwork for the inputs (helps with the playability);
- POST has a PCB ID (shown at top of screen) that can't be faked without a proper reference.
*/
@@ -361,6 +360,9 @@ Notes:
#include "audio/taito_en.h"
#include "includes/taitojc.h"
+#include "dendego.lh"
+
+
#define POLYGON_FIFO_SIZE 100000
READ32_MEMBER(taitojc_state::taitojc_palette_r)
@@ -814,22 +816,32 @@ WRITE32_MEMBER(taitojc_state::jc_meters_w)
{
switch (offset & 3)
{
- case 0: m_speed_meter = dendego_odometer_table[(data >> 16) & 0xff]; break;
- case 1: m_brake_meter = dendego_brake_table[(data >> 16) & 0xff]; break;
+ case 0:
+ {
+ int val = dendego_odometer_table[(data >> 16) & 0xff];
+ if (val != m_speed_meter)
+ {
+ m_speed_meter = val;
+ output_set_value("counter2", val / 10);
+ output_set_value("counter3", val % 10);
+ }
+ break;
+ }
+
+ case 1:
+ {
+ int val = dendego_pressure_table[(data >> 16) & 0xff];
+ if (val != m_brake_meter)
+ {
+ m_brake_meter = val;
+ output_set_value("counter4", val);
+ }
+ break;
+ }
case 2: break; // unused?
case 3: break; // motor (used in dendego2 to shake seat)
}
}
-
- if(ioport("METER")->read_safe(0))
- {
- UINT8 btn = (ioport("BUTTONS")->read() & 0x77);
- int mascon_lv;
- for (mascon_lv = 5; mascon_lv > 0; mascon_lv--)
- if (btn == dendego_mascon_table[mascon_lv]) break;
-
- popmessage("%d %.02f km/h %.02f MPa",mascon_lv,m_speed_meter,m_brake_meter/10);
- }
}
READ32_MEMBER(taitojc_state::jc_lan_r)
@@ -879,12 +891,12 @@ WRITE8_MEMBER(taitojc_state::hc11_lamps_w)
dendego/dendego2:
d0: START
d1: DOOR
- d2: JYOUYO
- d3: HIJYOU
- d4: DENSEI
+ d2: JYOUYO (normal)
+ d3: HIJYOU (emergency)
+ d4: DENSEI (three-stage power)
d5: POP L
d6: POP R
- d7: -------
+ d7: ------- (?)
landgear:
unused?
@@ -1180,12 +1192,7 @@ static INPUT_PORTS_START( dendego )
PORT_BIT( 0x88, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("ANALOG1") // Brake Lever at right, rotate handle right (anti clockwise) to increase pressure, 11 positions but not at constant intervals like the throttle lever
- PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(20) PORT_KEYDELTA(5) PORT_CENTERDELTA(0) PORT_NAME("Brake Lever")
-
- PORT_START("METER")
- PORT_CONFNAME( 0x01, 0x01, "Show Meters" )
- PORT_CONFSETTING( 0x01, DEF_STR( Yes ) )
- PORT_CONFSETTING( 0x00, DEF_STR( No ) )
+ PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_MINMAX(0x00, 0xef) PORT_SENSITIVITY(20) PORT_KEYDELTA(5) PORT_CENTERDELTA(0) PORT_NAME("Brake Lever")
INPUT_PORTS_END
static INPUT_PORTS_START( landgear )
@@ -1297,7 +1304,7 @@ static const hc11_config taitojc_config =
static MACHINE_CONFIG_START( taitojc, taitojc_state )
-
+ /* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68040, 25000000)
MCFG_CPU_PROGRAM_MAP(taitojc_map)
MCFG_CPU_VBLANK_INT("screen", taitojc_vblank)
@@ -1316,6 +1323,7 @@ static MACHINE_CONFIG_START( taitojc, taitojc_state )
MCFG_MACHINE_RESET(taitojc)
MCFG_EEPROM_93C46_ADD("eeprom")
+ /* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
@@ -1332,6 +1340,11 @@ static MACHINE_CONFIG_START( taitojc, taitojc_state )
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( dendego, taitojc )
+ /* video hardware */
+ MCFG_SCREEN_MODIFY("screen")
+ MCFG_SCREEN_UPDATE_STATIC(dendego)
+
+ /* sound hardware */
MCFG_OKIM6295_ADD("oki", 32000000/32, OKIM6295_PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50)
@@ -2025,15 +2038,15 @@ ROM_START( dangcurv )
ROM_END
-GAME( 1995, dangcurv, 0, taitojc, dangcurv, dangcurv, ROT0, "Taito", "Dangerous Curves (Ver 2.2 J)", GAME_NOT_WORKING ) // DANGEROUS CURVES VER 2.2 J 1995.07.20 17:45
-GAME( 1995, landgear, 0, taitojc, landgear, taitojc, ROT0, "Taito", "Landing Gear (Ver 4.2 O)", GAME_IMPERFECT_GRAPHICS ) // LANDING GEAR VER 4.2 O Feb 8 1996 09:46:22
-GAME( 1995, landgearj, landgear, taitojc, landgear, taitojc, ROT0, "Taito", "Landing Gear (Ver 4.2 J)", GAME_IMPERFECT_GRAPHICS ) // LANDING GEAR VER 4.2 J Feb 8 1996 09:46:22
-GAME( 1995, landgeara, landgear, taitojc, landgear, taitojc, ROT0, "Taito", "Landing Gear (Ver 3.1 O)", GAME_IMPERFECT_GRAPHICS ) // LANDING GEAR VER 3.1 O Feb 8 1996 09:46:22
-GAME( 1995, landgearja,landgear, taitojc, landgear, taitojc, ROT0, "Taito", "Landing Gear (Ver 3.0 J)", GAME_IMPERFECT_GRAPHICS ) // LANDING GEAR VER 3.0 J Feb 8 1996 09:46:22
-GAME( 1996, sidebs, 0, taitojc, sidebs, taitojc, ROT0, "Taito", "Side by Side (Ver 2.5 J)", GAME_IMPERFECT_GRAPHICS ) // SIDE BY SIDE VER 2.5 J 1996/ 6/20 18:13:14
-GAME( 1996, dendego, 0, dendego, dendego, taitojc, ROT0, "Taito", "Densha de GO! (Ver 2.2 J)", GAME_IMPERFECT_GRAPHICS ) // DENSYA DE GO VER 2.2 J 1997/ 2/ 4 12:00:28
-GAME( 1996, dendegox, dendego, dendego, dendego, taitojc, ROT0, "Taito", "Densha de GO! EX (Ver 2.4 J)", GAME_IMPERFECT_GRAPHICS ) // DENSYA DE GO VER 2.4 J 1997/ 4/18 13:38:34
-GAME( 1997, sidebs2, 0, taitojc, sidebs, taitojc, ROT0, "Taito", "Side by Side 2 (Ver 2.6 A)", GAME_IMPERFECT_GRAPHICS ) // SIDE BY SIDE2 VER 2.6 A 1997/ 6/19 09:39:22
-GAME( 1997, sidebs2j, sidebs2, taitojc, sidebs, taitojc, ROT0, "Taito", "Side by Side 2 (Ver 2.4 J)", GAME_IMPERFECT_GRAPHICS ) // SIDE BY SIDE2 VER 2.4 J 1997/ 5/26 13:06:37
-GAME( 1998, dendego2, 0, dendego, dendego, dendego2, ROT0, "Taito", "Densha de GO! 2 Kousoku-hen (Ver 2.5 J)", GAME_IMPERFECT_GRAPHICS ) // DENSYA DE GO2 VER 2.5 J 1998/ 3/ 2 15:30:55
-GAME( 1998, dendego23k,dendego2, dendego, dendego, dendego2, ROT0, "Taito", "Densha de GO! 2 Kousoku-hen 3000-bandai (Ver 2.20 J)", GAME_IMPERFECT_GRAPHICS ) // DENSYA DE GO! 2 3000 VER 2.20 J 1998/ 7/15 17:42:38
+GAME( 1995, dangcurv, 0, taitojc, dangcurv, dangcurv, ROT0, "Taito", "Dangerous Curves (Ver 2.2 J)", GAME_NOT_WORKING ) // DANGEROUS CURVES VER 2.2 J 1995.07.20 17:45
+GAME( 1995, landgear, 0, taitojc, landgear, taitojc, ROT0, "Taito", "Landing Gear (Ver 4.2 O)", GAME_IMPERFECT_GRAPHICS ) // LANDING GEAR VER 4.2 O Feb 8 1996 09:46:22
+GAME( 1995, landgearj, landgear, taitojc, landgear, taitojc, ROT0, "Taito", "Landing Gear (Ver 4.2 J)", GAME_IMPERFECT_GRAPHICS ) // LANDING GEAR VER 4.2 J Feb 8 1996 09:46:22
+GAME( 1995, landgeara, landgear, taitojc, landgear, taitojc, ROT0, "Taito", "Landing Gear (Ver 3.1 O)", GAME_IMPERFECT_GRAPHICS ) // LANDING GEAR VER 3.1 O Feb 8 1996 09:46:22
+GAME( 1995, landgearja,landgear, taitojc, landgear, taitojc, ROT0, "Taito", "Landing Gear (Ver 3.0 J)", GAME_IMPERFECT_GRAPHICS ) // LANDING GEAR VER 3.0 J Feb 8 1996 09:46:22
+GAME( 1996, sidebs, 0, taitojc, sidebs, taitojc, ROT0, "Taito", "Side by Side (Ver 2.5 J)", GAME_IMPERFECT_GRAPHICS ) // SIDE BY SIDE VER 2.5 J 1996/ 6/20 18:13:14
+GAMEL(1996, dendego, 0, dendego, dendego, taitojc, ROT0, "Taito", "Densha de GO! (Ver 2.2 J)", GAME_IMPERFECT_GRAPHICS, layout_dendego ) // DENSYA DE GO VER 2.2 J 1997/ 2/ 4 12:00:28
+GAMEL(1996, dendegox, dendego, dendego, dendego, taitojc, ROT0, "Taito", "Densha de GO! EX (Ver 2.4 J)", GAME_IMPERFECT_GRAPHICS, layout_dendego ) // DENSYA DE GO VER 2.4 J 1997/ 4/18 13:38:34
+GAME( 1997, sidebs2, 0, taitojc, sidebs, taitojc, ROT0, "Taito", "Side by Side 2 (Ver 2.6 A)", GAME_IMPERFECT_GRAPHICS ) // SIDE BY SIDE2 VER 2.6 A 1997/ 6/19 09:39:22
+GAME( 1997, sidebs2j, sidebs2, taitojc, sidebs, taitojc, ROT0, "Taito", "Side by Side 2 (Ver 2.4 J)", GAME_IMPERFECT_GRAPHICS ) // SIDE BY SIDE2 VER 2.4 J 1997/ 5/26 13:06:37
+GAMEL(1998, dendego2, 0, dendego, dendego, dendego2, ROT0, "Taito", "Densha de GO! 2 Kousoku-hen (Ver 2.5 J)", GAME_IMPERFECT_GRAPHICS, layout_dendego ) // DENSYA DE GO2 VER 2.5 J 1998/ 3/ 2 15:30:55
+GAMEL(1998, dendego23k,dendego2, dendego, dendego, dendego2, ROT0, "Taito", "Densha de GO! 2 Kousoku-hen 3000-bandai (Ver 2.20 J)", GAME_IMPERFECT_GRAPHICS, layout_dendego ) // DENSYA DE GO! 2 3000 VER 2.20 J 1998/ 7/15 17:42:38
diff --git a/src/mame/includes/taitojc.h b/src/mame/includes/taitojc.h
index e0c0658280e..9a79612a881 100644
--- a/src/mame/includes/taitojc.h
+++ b/src/mame/includes/taitojc.h
@@ -70,8 +70,8 @@ public:
UINT8 m_has_dsp_hack;
- double m_speed_meter;
- double m_brake_meter;
+ int m_speed_meter;
+ int m_brake_meter;
UINT32 m_outputs;
DECLARE_READ32_MEMBER(taitojc_palette_r);
DECLARE_WRITE32_MEMBER(taitojc_palette_w);
@@ -125,47 +125,50 @@ void taitojc_render_polygons(running_machine &machine, UINT16 *polygon_fifo, int
VIDEO_START(taitojc);
SCREEN_UPDATE_IND16(taitojc);
+SCREEN_UPDATE_IND16(dendego);
// lookup tables for densha de go analog controls/meters
-const double dendego_odometer_table[0x100] =
+const int dendego_odometer_table[0x100] =
{
- 0.0, 0.3, 0.7, 1.0, 1.4, 1.7, 2.1, 2.4, 2.8, 3.1, 3.4, 3.8, 4.1, 4.5, 4.8, 5.2,
- 5.5, 5.9, 6.2, 6.6, 6.9, 7.2, 7.6, 7.9, 8.3, 8.6, 9.0, 9.3, 9.7, 10.0, 10.5, 11.1,
- 11.6, 12.1, 12.6, 13.2, 13.7, 14.2, 14.7, 15.3, 15.8, 16.3, 16.8, 17.4, 17.9, 18.4, 18.9, 19.5,
- 20.0, 20.6, 21.1, 21.7, 22.2, 22.8, 23.3, 23.9, 24.4, 25.0, 25.6, 26.1, 26.7, 27.2, 27.8, 28.3,
- 28.9, 29.4, 30.0, 30.6, 31.1, 31.7, 32.2, 32.8, 33.3, 33.9, 34.4, 35.0, 35.6, 36.1, 36.7, 37.2,
- 37.8, 38.3, 38.9, 39.4, 40.0, 40.6, 41.2, 41.8, 42.4, 42.9, 43.5, 44.1, 44.7, 45.3, 45.9, 46.5,
- 47.1, 47.6, 48.2, 48.8, 49.4, 50.0, 50.5, 51.1, 51.6, 52.1, 52.6, 53.2, 53.7, 54.2, 54.7, 55.3,
- 55.8, 56.3, 56.8, 57.4, 57.9, 58.4, 58.9, 59.5, 60.0, 60.7, 61.3, 62.0, 62.7, 63.3, 64.0, 64.7,
- 65.3, 66.0, 66.7, 67.3, 68.0, 68.7, 69.3, 70.0, 70.5, 71.1, 71.6, 72.1, 72.6, 73.2, 73.7, 74.2,
- 74.7, 75.3, 75.8, 76.3, 76.8, 77.4, 77.9, 78.4, 78.9, 79.5, 80.0, 80.6, 81.2, 81.8, 82.4, 82.9,
- 83.5, 84.1, 84.7, 85.3, 85.9, 86.5, 87.1, 87.6, 88.2, 88.8, 89.4, 90.0, 90.6, 91.1, 91.7, 92.2,
- 92.8, 93.3, 93.9, 94.4, 95.0, 95.6, 96.1, 96.7, 97.2, 97.8, 98.3, 98.9, 99.4, 100.0, 100.5, 101.1,
- 101.6, 102.1, 102.6, 103.2, 103.7, 104.2, 104.7, 105.3, 105.8, 106.3, 106.8, 107.4, 107.9, 108.4, 108.9, 109.5,
- 110.0, 110.7, 111.3, 112.0, 112.7, 113.3, 114.0, 114.7, 115.3, 116.0, 116.7, 117.3, 118.0, 118.7, 119.3, 120.0,
- 120.3, 120.6, 120.9, 121.2, 121.6, 121.9, 122.2, 122.5, 122.8, 123.1, 123.4, 123.8, 124.1, 124.4, 124.7, 125.0,
- 125.3, 125.6, 125.9, 126.2, 126.6, 126.9, 127.2, 127.5, 127.8, 128.1, 128.4, 128.8, 129.1, 129.4, 129.7, 130.0,
+ 0, 3, 7, 10, 14, 17, 21, 24, 28, 31, 34, 38, 41, 45, 48, 52,
+ 55, 59, 62, 66, 69, 72, 76, 79, 83, 86, 90, 93, 97, 100, 105, 111,
+ 116, 121, 126, 132, 137, 142, 147, 153, 158, 163, 168, 174, 179, 184, 189, 195,
+ 200, 206, 211, 217, 222, 228, 233, 239, 244, 250, 256, 261, 267, 272, 278, 283,
+ 289, 294, 300, 306, 311, 317, 322, 328, 333, 339, 344, 350, 356, 361, 367, 372,
+ 378, 383, 389, 394, 400, 406, 412, 418, 424, 429, 435, 441, 447, 453, 459, 465,
+ 471, 476, 482, 488, 494, 500, 505, 511, 516, 521, 526, 532, 537, 542, 547, 553,
+ 558, 563, 568, 574, 579, 584, 589, 595, 600, 607, 613, 620, 627, 633, 640, 647,
+ 653, 660, 667, 673, 680, 687, 693, 700, 705, 711, 716, 721, 726, 732, 737, 742,
+ 747, 753, 758, 763, 768, 774, 779, 784, 789, 795, 800, 806, 812, 818, 824, 829,
+ 835, 841, 847, 853, 859, 865, 871, 876, 882, 888, 894, 900, 906, 911, 917, 922,
+ 928, 933, 939, 944, 950, 956, 961, 967, 972, 978, 983, 989, 994, 1000, 1005, 1011,
+ 1016, 1021, 1026, 1032, 1037, 1042, 1047, 1053, 1058, 1063, 1068, 1074, 1079, 1084, 1089, 1095,
+ 1100, 1107, 1113, 1120, 1127, 1133, 1140, 1147, 1153, 1160, 1167, 1173, 1180, 1187, 1193, 1200,
+ 1203, 1206, 1209, 1212, 1216, 1219, 1222, 1225, 1228, 1231, 1234, 1238, 1241, 1244, 1247, 1250,
+ 1253, 1256, 1259, 1262, 1266, 1269, 1272, 1275, 1278, 1281, 1284, 1288, 1291, 1294, 1297, 1300,
};
-const double dendego_brake_table[0x100] =
+const int dendego_pressure_table[0x100] =
{
- 0.00, 0.00, 0.00, 0.00, 0.05, 0.10, 0.14, 0.19, 0.24, 0.29, 0.33, 0.38, 0.43, 0.48, 0.52, 0.57,
- 0.62, 0.67, 0.71, 0.76, 0.81, 0.86, 0.90, 0.95, 1.00, 1.06, 1.12, 1.19, 1.25, 1.31, 1.38, 1.44,
- 1.50, 1.56, 1.62, 1.69, 1.75, 1.81, 1.88, 1.94, 2.00, 2.06, 2.12, 2.19, 2.25, 2.31, 2.38, 2.44,
- 2.50, 2.56, 2.62, 2.69, 2.75, 2.81, 2.88, 2.94, 3.00, 3.06, 3.12, 3.18, 3.24, 3.29, 3.35, 3.41,
- 3.47, 3.53, 3.59, 3.65, 3.71, 3.76, 3.82, 3.88, 3.94, 4.00, 4.07, 4.13, 4.20, 4.27, 4.33, 4.40,
- 4.47, 4.53, 4.60, 4.67, 4.73, 4.80, 4.87, 4.93, 5.00, 5.07, 5.14, 5.21, 5.29, 5.36, 5.43, 5.50,
- 5.57, 5.64, 5.71, 5.79, 5.86, 5.93, 6.00, 6.07, 6.14, 6.21, 6.29, 6.36, 6.43, 6.50, 6.57, 6.64,
- 6.71, 6.79, 6.86, 6.93, 7.00, 7.06, 7.12, 7.19, 7.25, 7.31, 7.38, 7.44, 7.50, 7.56, 7.62, 7.69,
- 7.75, 7.81, 7.88, 7.94, 8.00, 8.07, 8.14, 8.21, 8.29, 8.36, 8.43, 8.50, 8.57, 8.64, 8.71, 8.79,
- 8.86, 8.93, 9.00, 9.07, 9.14, 9.21, 9.29, 9.36, 9.43, 9.50, 9.57, 9.64, 9.71, 9.79, 9.86, 9.93,
- 10.00, 10.08, 10.15, 10.23, 10.31, 10.38, 10.46, 10.54, 10.62, 10.69, 10.77, 10.85, 10.92, 11.00, 11.08, 11.15,
- 11.23, 11.31, 11.38, 11.46, 11.54, 11.62, 11.69, 11.77, 11.85, 11.92, 12.00, 12.07, 12.14, 12.21, 12.29, 12.36,
- 12.43, 12.50, 12.57, 12.64, 12.71, 12.79, 12.86, 12.93, 13.00, 13.07, 13.14, 13.21, 13.29, 13.36, 13.43, 13.50,
- 13.57, 13.64, 13.71, 13.79, 13.86, 13.93, 14.00, 14.07, 14.14, 14.21, 14.29, 14.36, 14.43, 14.50, 14.57, 14.64,
- 14.71, 14.79, 14.86, 14.93, 15.00, 15.04, 15.07, 15.11, 15.15, 15.19, 15.22, 15.26, 15.30, 15.33, 15.37, 15.41,
- 15.44, 15.48, 15.52, 15.56, 15.59, 15.63, 15.67, 15.70, 15.74, 15.78, 15.81, 15.85, 15.89, 15.93, 15.96, 16.00,
+ 0, 0, 0, 0, 5, 10, 14, 19, 24, 29, 33, 38, 43, 48, 52, 57,
+ 62, 67, 71, 76, 81, 86, 90, 95, 100, 106, 112, 119, 125, 131, 138, 144,
+ 150, 156, 162, 169, 175, 181, 188, 194, 200, 206, 212, 219, 225, 231, 238, 244,
+ 250, 256, 262, 269, 275, 281, 288, 294, 300, 306, 312, 318, 324, 329, 335, 341,
+ 347, 353, 359, 365, 371, 376, 382, 388, 394, 400, 407, 413, 420, 427, 433, 440,
+ 447, 453, 460, 467, 473, 480, 487, 493, 500, 507, 514, 521, 529, 536, 543, 550,
+ 557, 564, 571, 579, 586, 593, 600, 607, 614, 621, 629, 636, 643, 650, 657, 664,
+ 671, 679, 686, 693, 700, 706, 712, 719, 725, 731, 738, 744, 750, 756, 762, 769,
+ 775, 781, 788, 794, 800, 807, 814, 821, 829, 836, 843, 850, 857, 864, 871, 879,
+ 886, 893, 900, 907, 914, 921, 929, 936, 943, 950, 957, 964, 971, 979, 986, 993,
+ 1000, 1008, 1015, 1023, 1031, 1038, 1046, 1054, 1062, 1069, 1077, 1085, 1092, 1100, 1108, 1115,
+ 1123, 1131, 1138, 1146, 1154, 1162, 1169, 1177, 1185, 1192, 1200, 1207, 1214, 1221, 1229, 1236,
+ 1243, 1250, 1257, 1264, 1271, 1279, 1286, 1293, 1300, 1307, 1314, 1321, 1329, 1336, 1343, 1350,
+ 1357, 1364, 1371, 1379, 1386, 1393, 1400, 1407, 1414, 1421, 1429, 1436, 1443, 1450, 1457, 1464,
+ 1471, 1479, 1486, 1493, 1500, 1504, 1507, 1511, 1515, 1519, 1522, 1526, 1530, 1533, 1537, 1541,
+ 1544, 1548, 1552, 1556, 1559, 1563, 1567, 1570, 1574, 1578, 1581, 1585, 1589, 1593, 1596, 1600,
};
+const int dendego_brake_table[11] = { 0x00, 0x05, 0x1d, 0x35, 0x4d, 0x65, 0x7d, 0x95, 0xad, 0xc5, 0xd4 };
+
// Mascon must always be in a defined state, Densha de Go 2 in particular returns black screen if the Mascon input is undefined
-const ioport_value dendego_mascon_table[] = { 0x76, 0x67, 0x75, 0x57, 0x73, 0x37 };
+const ioport_value dendego_mascon_table[6] = { 0x76, 0x67, 0x75, 0x57, 0x73, 0x37 };
diff --git a/src/mame/layout/dendego.lay b/src/mame/layout/dendego.lay
new file mode 100644
index 00000000000..33110da9c78
--- /dev/null
+++ b/src/mame/layout/dendego.lay
@@ -0,0 +1,286 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+<!-- define elements -->
+
+ <element name="static_black">
+ <rect>
+ <color red="0.0" green="0.0" blue="0.0" />
+ </rect>
+ </element>
+ <element name="static_darkgray">
+ <rect>
+ <color red="0.25" green="0.25" blue="0.25" />
+ </rect>
+ </element>
+ <element name="static_lightgray">
+ <rect>
+ <color red="0.6" green="0.6" blue="0.6" />
+ </rect>
+ </element>
+ <element name="static_white">
+ <rect>
+ <color red="0.85" green="0.85" blue="0.85" />
+ </rect>
+ </element>
+ <element name="static_yellow">
+ <rect>
+ <color red="0.8" green="0.8" blue="0.1" />
+ </rect>
+ </element>
+ <element name="static_blue">
+ <rect>
+ <color red="0.2" green="0.5" blue="0.8" />
+ </rect>
+ </element>
+
+
+<!-- panel text -->
+
+ <element name="text_power">
+ <text string="PWR">
+ <color red="0.0" green="0.0" blue="0.0" />
+ </text>
+ </element>
+ <element name="text_normal">
+ <text string="OK">
+ <color red="0.0" green="0.0" blue="0.0" />
+ </text>
+ </element>
+ <element name="text_emergency">
+ <text string="EM!">
+ <color red="0.0" green="0.0" blue="0.0" />
+ </text>
+ </element>
+ <element name="text_door">
+ <text string="doors" align="1">
+ <color red="0.0" green="0.0" blue="0.0" />
+ </text>
+ </element>
+
+ <element name="text_lets">
+ <text string="LET'S GO BY TRAIN!" align="1">
+ <color red="0.3" green="0.6" blue="0.9" />
+ </text>
+ </element>
+
+
+<!-- throttle -->
+
+ <element name="text_throttle">
+ <text string="THROTTLE:" align="1">
+ <color red="0.8" green="0.8" blue="0.8" />
+ </text>
+ </element>
+ <element name="text_dot">
+ <text string="." align="1">
+ <color red="1.0" green="1.0" blue="0.0" />
+ </text>
+ </element>
+ <element name="text_kmh">
+ <text string="km/h" align="1">
+ <color red="1.0" green="1.0" blue="0.0" />
+ </text>
+ </element>
+
+ <element name="counter_throttle" defstate="0">
+ <simplecounter maxstate="9" digits="1" align="1">
+ <color red="1.0" green="1.0" blue="1.0" />
+ </simplecounter>
+ </element>
+ <element name="counter_speed1" defstate="0">
+ <simplecounter maxstate="999" digits="3" align="1">
+ <color red="1.0" green="1.0" blue="0.0" />
+ </simplecounter>
+ </element>
+ <element name="counter_speed2" defstate="0">
+ <simplecounter maxstate="9" digits="1" align="1">
+ <color red="1.0" green="1.0" blue="0.0" />
+ </simplecounter>
+ </element>
+
+
+<!-- brake -->
+
+ <element name="text_brake">
+ <text string="BRAKE:" align="1">
+ <color red="0.8" green="0.8" blue="0.8" />
+ </text>
+ </element>
+ <element name="text_kpa">
+ <text string="kPa" align="1">
+ <color red="1.0" green="1.0" blue="0.0" />
+ </text>
+ </element>
+
+ <element name="counter_brake" defstate="0">
+ <simplecounter maxstate="99" digits="2" align="1">
+ <color red="1.0" green="1.0" blue="1.0" />
+ </simplecounter>
+ </element>
+ <element name="counter_pressure" defstate="0">
+ <simplecounter maxstate="9999" digits="4" align="1">
+ <color red="1.0" green="1.0" blue="0.0" />
+ </simplecounter>
+ </element>
+
+
+<!-- lamps -->
+
+ <element name="lamp_rect_white" defstate="0">
+ <rect state="1">
+ <color red="1.0" green="1.0" blue="1.0" />
+ </rect>
+ <rect state="0">
+ <color red="0.2" green="0.2" blue="0.2" />
+ </rect>
+ </element>
+ <element name="lamp_rect_red" defstate="0">
+ <rect state="1">
+ <color red="1.0" green="0.1" blue="0.1" />
+ </rect>
+ <rect state="0">
+ <color red="0.3" green="0.0" blue="0.0" />
+ </rect>
+ </element>
+ <element name="lamp_disk_white" defstate="0">
+ <disk state="1">
+ <color red="1.0" green="1.0" blue="1.0" />
+ </disk>
+ <disk state="0">
+ <color red="0.2" green="0.2" blue="0.2" />
+ </disk>
+ </element>
+ <element name="lamp_disk_red" defstate="0">
+ <disk>
+ <color red="0.0" green="0.0" blue="0.0" />
+ </disk>
+ <disk state="1">
+ <color red="1.0" green="0.1" blue="0.1" />
+ <bounds x="0.1" y="0.1" width="0.79" height="0.79" />
+ </disk>
+ <disk state="0">
+ <color red="0.4" green="0.04" blue="0.04" />
+ <bounds x="0.1" y="0.1" width="0.79" height="0.79" />
+ </disk>
+ </element>
+
+
+
+
+<!-- build screen -->
+
+ <view name="Simple Artwork">
+ <bounds left="0" right="400" top="0" bottom="330" />
+ <screen index="0">
+ <bounds left="0" right="400" top="0" bottom="300" />
+ </screen>
+
+<!-- static background -->
+
+ <bezel element="static_black">
+ <bounds left="0" right="400" top="300" bottom="330" />
+ </bezel>
+ <bezel element="static_lightgray">
+ <bounds left="0" right="113" top="302" bottom="330" />
+ </bezel>
+ <bezel element="static_yellow">
+ <bounds left="113" right="400" top="302" bottom="330" />
+ </bezel>
+ <bezel element="static_darkgray">
+ <bounds left="115" right="225" top="304" bottom="328" />
+ </bezel>
+ <bezel element="static_white">
+ <bounds left="245" right="380" top="302" bottom="330" />
+ </bezel>
+ <bezel element="static_black">
+ <bounds left="245" right="245.5" top="302" bottom="330" />
+ </bezel>
+ <bezel element="static_black">
+ <bounds left="380" right="380.5" top="302" bottom="330" />
+ </bezel>
+ <bezel element="static_blue">
+ <bounds left="360" right="380" top="302" bottom="330" />
+ </bezel>
+
+ <bezel element="text_lets">
+ <bounds x="264" y="306" width="120" height="10" />
+ </bezel>
+
+
+<!-- lamps -->
+
+ <bezel name="lamp4" element="lamp_rect_white">
+ <bounds x="8" y="304" width="17" height="24" />
+ </bezel>
+ <bezel element="text_power">
+ <bounds x="8" y="312" width="17" height="9" />
+ </bezel>
+
+ <bezel name="lamp2" element="lamp_rect_white">
+ <bounds x="31" y="304" width="17" height="24" />
+ </bezel>
+ <bezel element="text_normal">
+ <bounds x="31" y="312" width="17" height="9" />
+ </bezel>
+
+ <bezel name="lamp3" element="lamp_rect_red">
+ <bounds x="54" y="304" width="17" height="24" />
+ </bezel>
+ <bezel element="text_emergency">
+ <bounds x="54" y="312" width="17" height="9" />
+ </bezel>
+
+ <bezel name="lamp1" element="lamp_disk_white">
+ <bounds x="86" y="314" width="14" height="14" />
+ </bezel>
+ <bezel element="text_door">
+ <bounds x="84" y="304" width="25" height="9" />
+ </bezel>
+
+ <bezel name="lamp5" element="lamp_disk_red">
+ <bounds x="352" y="300" width="20" height="20" />
+ </bezel>
+ <bezel name="lamp6" element="lamp_disk_red">
+ <bounds x="370" y="300" width="20" height="20" />
+ </bezel>
+
+
+<!-- meters -->
+
+ <bezel element="text_throttle">
+ <bounds x="121" y="306" width="45" height="10" />
+ </bezel>
+ <bezel name="counter0" element="counter_throttle">
+ <bounds x="164" y="306" width="10" height="10" />
+ </bezel>
+
+ <bezel name="counter2" element="counter_speed1">
+ <bounds x="121" y="316" width="30" height="10" />
+ </bezel>
+ <bezel element="text_dot">
+ <bounds x="134" y="316" width="10" height="10" />
+ </bezel>
+ <bezel name="counter3" element="counter_speed2">
+ <bounds x="137" y="316" width="10" height="10" />
+ </bezel>
+ <bezel element="text_kmh">
+ <bounds x="146" y="316" width="30" height="10" />
+ </bezel>
+
+ <bezel element="text_brake">
+ <bounds x="180" y="306" width="40" height="10" />
+ </bezel>
+ <bezel name="counter1" element="counter_brake">
+ <bounds x="209" y="306" width="20" height="10" />
+ </bezel>
+
+ <bezel name="counter4" element="counter_pressure">
+ <bounds x="180" y="316" width="30" height="10" />
+ </bezel>
+ <bezel element="text_kpa">
+ <bounds x="201" y="316" width="30" height="10" />
+ </bezel>
+
+ </view>
+</mamelayout>
diff --git a/src/mame/mame.mak b/src/mame/mame.mak
index 0f018b7e2db..0bca36630f5 100644
--- a/src/mame/mame.mak
+++ b/src/mame/mame.mak
@@ -2163,6 +2163,8 @@ $(DRIVERS)/sfbonus.o: $(LAYOUT)/pirpok2.lh
$(DRIVERS)/taito_z.o: $(LAYOUT)/contcirc.lh \
$(LAYOUT)/dblaxle.lh
+$(DRIVERS)/taitojc.o: $(LAYOUT)/dendego.lh
+
$(DRIVERS)/tatsumi.o: $(LAYOUT)/roundup5.lh
$(DRIVERS)/tceptor.o: $(LAYOUT)/tceptor2.lh
diff --git a/src/mame/video/taitojc.c b/src/mame/video/taitojc.c
index 856772360e4..e288874109e 100644
--- a/src/mame/video/taitojc.c
+++ b/src/mame/video/taitojc.c
@@ -378,6 +378,28 @@ SCREEN_UPDATE_IND16( taitojc )
return 0;
}
+SCREEN_UPDATE_IND16( dendego )
+{
+ taitojc_state *state = screen.machine().driver_data<taitojc_state>();
+
+ // update controller state in artwork
+ UINT8 btn = (state->ioport("BUTTONS")->read() & 0x77);
+ int level;
+ for (level = 5; level > 0; level--)
+ if (btn == dendego_mascon_table[level]) break;
+
+ if (level != output_get_value("counter0"))
+ output_set_value("counter0", level);
+
+ btn = (state->ioport("ANALOG1")->read() & 0xff);
+ for (level = 10; level > 0; level--)
+ if (btn >= dendego_brake_table[level]) break;
+
+ if (level != output_get_value("counter1"))
+ output_set_value("counter1", level);
+
+ return SCREEN_UPDATE16_CALL(taitojc);
+}