From 2a72c9ca91fd464655540087db1656b380e9b159 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Banaan=20Ananas?= Date: Fri, 26 Sep 2014 18:07:54 +0000 Subject: [PATCH] er, pretend you didnt see that --- src/mame/drivers/taitojc.c | 2548 ++++++++++++++++++++++++++---------- src/mame/video/taitojc.c | 2 +- 2 files changed, 1858 insertions(+), 692 deletions(-) diff --git a/src/mame/drivers/taitojc.c b/src/mame/drivers/taitojc.c index 70a9f93e6c7..0d224722b4c 100644 --- a/src/mame/drivers/taitojc.c +++ b/src/mame/drivers/taitojc.c @@ -2,768 +2,1934 @@ Taito JC System - functions to emulate the video hardware + Driver by Ville Linde, based on the preliminary driver by David Haywood -*************************************************************************/ +Taito custom chips on this hardware: +- TC0640FIO : I/O +- TC0770CMU : Math co-processor? +- TC0780FPA x 2 : Polygon/Texture renderer? +- TC0840GLU : 2D graphics? +- TC0870HVP : Vertex processor? -#include "emu.h" -#include "video/poly.h" -#include "includes/taitojc.h" +TODO: +- games are running at wrong speed(unthrottled?) compared to pcb recordings, easily noticeable on sidebs/sidebs2, + for example the selection screens are too fast, and the driving is almost twice as slow +- dendego intro object RAM usage has various gfx bugs (check video file) +- dendego title screen builds up and it shouldn't +- dendego attract mode train doesn't ride, demo mode doesn't set the throttle, but it does set the brake pressure +- landgear has some weird crashes (after playing one round, after a couple of loops in attract mode) (needs testing -AS) +- landgear has huge 3d problems on gameplay (CPU comms?) +- dangcurv DSP program crashes very soon, so no 3d is currently shown. - due to undumped rom? maybe not? +- add idle skips if possible -static const gfx_layout taitojc_char_layout = -{ - 16,16, - 0x80, - 4, - { 0,1,2,3 }, - { 24,28,16,20,8,12,0,4, 56,60,48,52,40,44,32,36 }, - { 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64,8*64,9*64,10*64,11*64,12*64,13*64,14*64,15*64 }, - 16*64 -}; +BTANB: +- incorrect perspective textures, visible when close to the camera such as sidebs rear-view mirror -TILE_GET_INFO_MEMBER(taitojc_state::taitojc_tile_info) -{ - UINT32 val = m_tile_ram[tile_index]; - int color = (val >> 22) & 0xff; - int tile = (val >> 2) & 0x7f; - SET_TILE_INFO_MEMBER(m_gfx_index, tile, color, 0); -} +-------------------------------------------------------------------------- -READ32_MEMBER(taitojc_state::taitojc_palette_r) -{ - return m_palette_ram[offset]; -} - -WRITE32_MEMBER(taitojc_state::taitojc_palette_w) -{ - int r, g, b; - UINT32 color; - - COMBINE_DATA( m_palette_ram + offset ); - - color = m_palette_ram[offset]; - r = (color >> 8) & 0xff; - g = (color >> 16) & 0xff; - b = (color >> 0) & 0xff; - - m_palette->set_pen_color(offset, rgb_t(r, g, b)); -} - -READ32_MEMBER(taitojc_state::taitojc_tile_r) -{ - return m_tile_ram[offset]; -} - -READ32_MEMBER(taitojc_state::taitojc_char_r) -{ - return m_char_ram[offset]; -} - -WRITE32_MEMBER(taitojc_state::taitojc_tile_w) -{ - COMBINE_DATA(m_tile_ram + offset); - m_tilemap->mark_tile_dirty(offset); -} - -WRITE32_MEMBER(taitojc_state::taitojc_char_w) -{ - COMBINE_DATA(m_char_ram + offset); - m_gfxdecode->gfx(m_gfx_index)->mark_dirty(offset/32); -} - -// Object data format: -// -// 0x00: xxxxxx-- -------- -------- -------- Height -// 0x00: ------xx xxxxxxxx -------- -------- Y -// 0x00: -------- -------- xxxxxx-- -------- Width -// 0x00: -------- -------- ------xx xxxxxxxx X -// 0x01: ---xxxxx xx------ -------- -------- Palette -// 0x01: -------- --x----- -------- -------- Priority (0 = below 3D, 1 = above 3D) -// 0x01: -------- -------x -------- -------- Color depth (0) 4bpp / (1) 8bpp -// 0x01: -------- -------- -xxxxxxx xxxxxxxx VRAM data address - -/* - Object RAM is grouped in three different banks (0-0x400 / 0x400-0x800 / 0x800-0xc00), - Initial 6 dwords aren't surely for object stuff (setting global object flags?) - 0xd00-0xdff seems to be a per-bank vregister. Usage of this is mostly unknown, the only - clue we have so far is this config change in dendego: - 0x2000db3f 0x3f3f3f3f 0xfec00090 0x403f00ff 0xd20-0xd2f on Taito logo - 0x2000db3f 0x3f3f3f3f 0xff600090 0x207f00ff 0xd20-0xd2f on intro FMV - - dword 0 bits 14-15 looks up to the object RAM for the given bank. (it's mostly fixed to 0, - 1 and 2 for each bank). Then dwords 2 and 3 should presumably configure bank 1 to a bigger - (doubled?) height and width and a different x/y start point. +PCB notes: - 0xfc0-0xfff is global vregs. 0xfc4 bit 13 is used to swap between bank 0 and bank 1? - It's unknown at current time how bank 2 should show up. +Side By Side 2 +Taito, 1997 - fc0 00000000 always - fc4 c01f0000 boot-up, testmode, sidebs always, sidebs2 always - c0100000 landgear in-game, dendego2 in-game - c0310000 dendego in-game - c0312000 dendego intro 3d parts - c031f000 dendego disclaimer screen (only for a few frames) +This game runs on Taito JC System hardware - fc4 11000000 00------ ----0000 00000000 always 0/1 - -------- --xx---- -------- -------- ? - -------- ----xxxx -------- -------- one of these probably disables textlayer, unknown function otherwise - -------- -------- xxxx---- -------- object bank related +PCB Layout +---------- - fc8 40000000 always - fcc 00000000 always - fd0 c0000000 always - ... - ffc c0000000 always +Top board: MOTHER PCB-C K11X0838A M43E0325A +|---------------------------------------------------------------------------------| +| 43256 | +|54MHz E23-32-1.51 43256 | +| 424210 424210 43256 | +| E23-29.39 | +|E23-25-1.3 TC0870HVP E23-31.46 | +| (QFP208) E23-30.40 E23-34.72 93C46.87 | +|E23-26.4 | +| MC68040RC25 CXD1178Q TC0640FIO | +|424260 TMS320C51 (PGA TYPE) (QFP120) | +| (QFP132) | +| labelled TEST_SW | +|424260 "Taito E07-11" MB3771 RESET_SW | +| E23-33.53 | +| CY7B991 MB8421-90 | +|4218160 43256 CY7B991 | +| | +| 43256 TC0770CMU E23-35.110 | +|4218160 (QFP208) | +| 10MHz MC68EC000 LC321664AJ-80 | +|E23-27.13 TC0780FPA | +| (QFP240) ENSONIC | +| D482445 TC51832 ESPR6 ES5510 | +| TC51832 | +|4218160 D482445 | +| TC0840GLU MC33274 TDA1543 | +| D482445 (QFP144) | +|4218160 16MHz MB87078 | +| TC0780FPA D482445 30.4761MHz | +| (QFP240) ENSONIC | +|E23-28.18 OTISR2 | +| | +|---------------------------------------------------------------------------------| + +Notes: + All 3K files are PALs type PALCE 16V8 and saved in Jedec format. + + +Bottom board: JCG DAUGHTERL PCB-C K91E0677A +|---------------------------------------------------------------------------------| +| | +| | +| E38-19.30 E38-20.31 | +| | +| | +| | +| | +| | +| E38-01.5 E38-09.18 E23-15.32 | +| | +| E38-02.6 E38-10.19 E38-17.33 | +| | +| E38-03.7 E38-11.20 E38-18.34 E17-23.65 | +| | +| E38-04.8 E38-12.21 E38-21.35 TC5563 | +| | +| E38-05.9 E38-13.22 SBS2_P0.36 MC68HC11M0 | +| (QFP80) | +| E38-06.10 E38-14.23 SBS2_P1.37 | +| | +| E38-07.11 E38-15.24 SBS2_P2.38 | +| E23-37.69 | +| E38-08.12 E38-16.25 SBS2_P3.39 SMC_COM20020I | +| | +| | +| E23-38.73 | +| | +| | +| | +| | +| | +|---------------------------------------------------------------------------------| + +Notes: + All 3K files are PALs type PALCE 16V8 and saved in Jedec format. + ROMs .36-.39 are 27C4001, main program. + ROMs .5-.7, .9-.12, .18-.20, .22-.25 are 16M MASK, graphics. + ROMs .32-.35 are 16M MASK, ES5505 samples. + ROMs .8 and .21 are 4M MASK, graphics. + ROMs .30-.31 are 27C2001, 68000 sound program. + ROM .65 is 27C512, MC68HC11 program. + +---- + +-------------------------------------------------------------------------- +SIDE BY SIDE / 2 JC-SYSTEM TYPE-C +-------------------------------------------------------------------------- + SIDE BY SIDE (E23) (C)TAITO 1996 VER 2.5J 1996/6/20 18:13:14 + E23-01 to 24 + E17-23 (BIOS ?) E17:LANDING GEAR + + SIDE BY SIDE 2 (E38) Not dumped + ROMKIT : E38-01 to 21 , 23* to 26* + +-------------------------------------------------------------------------- +DENSHA DE GO! (E35) JC-SYSTEM TYPE-C with TRAIN BOARD (Ext.Sound) +-------------------------------------------------------------------------- + DENSHA DE GO! VER 2.2J 1997/2/4 + E35-01 to 26 + E35-28(TRAIN BOARD) + E17-23(BIOS?) + + DENSHA DE GO! EX VER 2.4J 1997/4/18 13:38:34 + ROMKIT : E35-30 to 33 + +-------------------------------------------------------------------------- +DENSHA DE GO! 2 (E52) JC-SYSTEM TYPE-C with TRAIN BOARD (Ext.Sound) +-------------------------------------------------------------------------- + DENSHA DE GO! 2 (KOUSOKUHEN RYOUSANSYA) VER 2.5 J 1998/3/2 15:30:55 + E52-01 to 24 , 25-1 to 28-1, 29, 30 + E35-28(TRAIN BOARD) + E17-23(BIOS?) + + DENSHA DE GO! 2 (3000BANDAI KOUSOKUHEN) VER 2.20 J 1998/7/15 17:42:38 + ROMKIT : E52-31 to 38 + +---- + +Landing Gear +Taito, 1995 + +This is a flight simulator game running on Taito JC System hardware. +The system comprises two boards plugged together back-to-back via five high density connectors. +The top board contains the main CPU, all RAMs, graphics and sound hardware and the bottom +board contains the game ROMs, communication devices and a MC68HC11 MCU. Landing Gear +is a single player game so the board does not contain any communication hardware. +This hardware seems to be the earliest revision of the JC board. This is the only JC game that +had a 28-way edge connector, which is actually almost JAMMA. The power/GND, video and +most buttons (test/service/coin/start etc) work fine using any standard JAMMA cab. However the +analog controls are wired to another connector on the bottom PCB via an interface board. +When other JC bottom boards are swapped to this top board, they will run fine, but some of the +graphics are messed up. This is probably due to the different PALs and their changed locations. +This seems to mostly affect the texture mapping (tested with swapping Side By Side 2) as the title +and most of the background graphics are ok but the car textures are just a mess of pixels. + + +PCB Layout +---------- + +Top board: MOTHER PCB K11X0835A M43E0304A +|---------------------------------------------------------------------------------| +| 43256 43256 | +|54MHz 43256 | +| | +|TC514260 | +| TC0870HVP uPD424210 TC0640FIO | +|TC514260 (QFP208) uPD424210 E07-08.65 (QFP120) | +|E07-02.4 | +| | +|TMS320C51 43256 | +|(QFP132) 43256 MC68040RC25 E07-10.116 93C46.91 | +|labelled TC0770CMU (PGA TYPE) E07-04.115 TEST_SW | +|"Taito E07-11" (QFP208) E07-09.82 MB3771 | +| | +| MB8421-90 | +|TC528257 E07-06.37 | +| | +|TC528257 TC514260 | +| E07-07.49 CY7B991 | +|TC528257 TC514260 E07-03.50 TC511664 | +| TC0780FPA | +|TC528257 TC514260 (QFP240) 10MHz MC68EC000 ENSONIC | +| CY7B991 ESPR6 ES5510 | +|TC528257 TC514260 | +| | +|TC528257 TC514260 TC0840GLU TC51832 MC33274 TDA1543 | +| (QFP144) TC51832 | +|TC528257 TC514260 16MHz MB87078 | +| TC0780FPA 30.4761MHz | +|TC528257 TC514260 (QFP240) | +| ENSONIC | +|TC528257 E07-05.22 OTISR2 | +|---------------------------------------------------------------------------------| + +Notes: + All 3K files are PALs type PALCE 16V8 and saved in Jedec format. + + +Bottom board: JCG DAUGHTER PCB-L K91E0603A +|---------------------------------------------------------------------------------| +| | +| | +| E17-21.30 E17-22.31 | +| | +| | +| | +| | +| | +| E17-01.5 E17-07.18 E17-13.32 | +| | +| * E17-08.19 E17-14.33 | +| | +| * * E17-15.34 E17-23.65 | +| | +| E17-02.8 * E17-16.35 TC5563 | +| | +| E17-03.9 E17-09.22 E17-37.36 MC68HC11M0 | +| (QFP80) | +| E17-04.10 E17-10.23 E17-38.37 | +| | +| E17-05.11 E17-11.24 E17-39.38 | +| E09-21.69 | +| E17-06.12 E17-12.25 E17-40.39 | +| | +| | +| E09-22.73 | +| | +| | +| E17-32.96 | +| | +| | +|---------------------------------------------------------------------------------| + +Notes: + All 3K files are PALs type PALCE 16V8 and saved in Jedec format. + ROMs .36-.39 are 27C4001, main program. + ROM .65 is 27C512, 68HC11 MCU program. + ROMs .30-.31 are 27C2001, sound program. + ROMs .32-.35 are 16M MASK, sound. + ROMs .5-.25 are 16M MASK, graphics. + * Unpopulated ROM socket + +---- + +Side By Side +Taito, 1996 + +This game runs on Taito JC System hardware and uses a 24kHz monitor. + +PCB Layout +---------- + +Top board: MOTHER PCB-C K11X0838A M43E0325A +|---------------------------------------------------------------------------------| +| 43256 | +|54MHz E23-32-1.51 43256 | +| 424210 424210 43256 | +| E23-29.39 | +|E23-25-1.3 TC0870HVP E23-31.46 | +| (QFP208) E23-30.40 E23-34.72 93C46.87 | +|E23-26.4 | +| MC68040RC25 CXD1178Q TC0640FIO | +|424260 TMS320C51 (PGA TYPE) (QFP120) | +| (QFP132) | +| marked TEST_SW | +|424260 "Taito E07-11" MB3771 RESET_SW | +| E23-33.53 | +| CY7B991 MB8421-90 | +|4218160 43256 CY7B991 | +| | +| 43256 TC0770CMU E23-35.110 | +|4218160 (QFP208) | +| 10MHz MC68EC000 LC321664AJ-80 | +|E23-27.13 TC0780FPA D482445 | +| (QFP240) ENSONIC | +| D482445 TC51832 ESPR6 ES5510 | +| TC51832 | +|4218160 | +| TC0840GLU MC33274 TDA1543 | +| (QFP144) | +|4218160 D482445 16MHz MB87078 | +| TC0780FPA 30.4761MHz | +| (QFP240) D482445 ENSONIC | +|E23-28.18 OTISR2 | +| | +|---------------------------------------------------------------------------------| + +Notes: + All 3k files are PALs type PALCE 16V8 and saved in Jedec format. + CY7B991 - Programmable Skew Clock Buffer (PLCC32) + 4218160 - 2M x8 / 1M x16 DRAM. Compatible with NEC 4218160 & Toshiba TC5118160 + 424210 - 256k x16 DRAM + 424260 - 256k x16 DRAM + 43256 - 32k x8 SRAM + D482445 - 256k x16 Video DRAM. Compatible with Toshiba TC524165/TC52V4165 (also used on Namco System 11 CPU boards) + LC321664- 64k x16 DRAM + TC51832 - 32k x8 SRAM + MB8421 - 16k-bit (2kbytes) Dual Port SRAM + + Measurements: + HSync - 24.639kHz / 24.690kHz (alternates between the two frequencies slowly every ~2 seconds) + VSync - 55.6795Hz + 68040 - 20.000MHz (10MHz*2, source = CY7C991) + 68000 - 15.23805MHz (30.4761/2) + 320C51 - 40.000MHz (pin96 X2/CLKIN. 10MHz*4, source = CY7C991) + OTISR2 - 3.80950MHz (pin12) + ES5510 - 2.22MHz, 2.666MHz, 3.8095125MHz (30.4761/8), 8.000MHz (16/2) + + +Bottom board: JCG DAUGHTERL PCB-C K9100633A J9100434A (Sticker K91J0633A) +|---------------------------------------------------------------------------------| +| | +| | +| E23-23.30 E23-24.31 | +| | +| | +| | +| | +| | +| E23-01.5 E23-08.18 E23-15.32 | +| | +| E23-02.6 E23-09.19 E23-16.33 | +| | +| E23-03.7 E23-10.20 E23-17.34 E17-23.65 | +| | +| E23-04.8 E23-11.21 E23-18.35 6264 | +| | +| E23-05.9 E23-12.22 E23-19.36 MC68HC11M0 | +| (QFP80) | +| E23-06.10 E23-13.23 E23-20.37 | +| | +| * * E23-21.38 | +| E23-37.69 | +| E23-07.12 E23-14.25 E23-22.39 SMC_COM20020I | +| | +| | +| E23-38.73 | +| | +| | +| | +| | +| | +|---------------------------------------------------------------------------------| + +Notes: + All 3k files are PALs type PALCE 16V8 and saved in Jedec format. + 6264: 8k x8 SRAM + SMC_COM20020I: Network communmication IC + ROMs .36-.39 are 27C4001, main program. + ROMs .5-.12, .18-.25 are 16M MASK, graphics. + ROMs .32-.35 are 16M MASK, sound data. + ROMs .30-.31 are 27C2001, sound program. + ROM .65 is 27C512, linked to 68HC11 MCU + * Unpopulated socket. + + Measurements: + 68HC11 - 8.000MHz (16/2 on pin74) */ -void taitojc_state::draw_object(bitmap_ind16 &bitmap, const rectangle &cliprect, UINT32 w1, UINT32 w2, UINT8 bank_type) +#include "emu.h" +#include "cpu/tms32051/tms32051.h" +#include "cpu/m68000/m68000.h" +#include "cpu/mc68hc11/mc68hc11.h" +#include "sound/es5506.h" +#include "sound/okim6295.h" +#include "machine/mb8421.h" +#include "machine/taitoio.h" +#include "machine/eepromser.h" +#include "audio/taito_en.h" +#include "includes/taitojc.h" + +#include "dendego.lh" + + +// lookup tables for densha de go analog controls/meters +static const int dendego_odometer_table[0x100] = { - int x, y, width, height, palette; - int i, j; - int x1, x2, y1, y2; - int ix, iy; - UINT32 address; - UINT8 *v; - UINT8 color_depth; - UINT8 mask_screen; + 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, +}; - color_depth = (w2 & 0x10000) >> 16; - mask_screen = (w2 & 0x20000) >> 17; +static const int dendego_pressure_table[0x100] = +{ + 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, +}; - address = (w2 & 0x7fff) * 0x20; - if (w2 & 0x4000) - address |= 0x40000; - x = ((w1 >> 0) & 0x3ff); - if (x & 0x200) - x |= ~0x1ff; // sign-extend +// hmm, what is the pixel clock? let's assume it's same as the 68040 +// 54MHz(/4) or 16MHz would make HTOTAL unrealistically short +#define PIXEL_CLOCK (10000000*2) - y = ((w1 >> 16) & 0x3ff); - if (y & 0x200) - y |= ~0x1ff; // sign-extend +// VSync - 55.6795Hz +// HSync - 24.639kHz / 24.690kHz (may be inaccurate) +#define HTOTAL (768) +#define HBEND (0) +#define HBSTART (512) - width = ((w1 >> 10) & 0x3f) * 16; - height = ((w1 >> 26) & 0x3f) * 16; - palette = ((w2 >> 22) & 0x7f) << 8; +#define VTOTAL (468) +#define VBEND (0) +#define VBSTART (400) - /* TODO: untangle this! */ - if(address >= 0xff000) - v = (UINT8*)&m_objlist[(address-0xff000)/4]; - if(address >= 0xfc000) - v = (UINT8*)&m_char_ram[(address-0xfc000)/4]; - else if(address >= 0xf8000) - v = (UINT8*)&m_tile_ram[(address-0xf8000)/4]; - else - v = (UINT8*)&m_vram[address/4]; - /* guess, but it's probably doable via a vreg ... */ - if ((width == 0 || height == 0) && bank_type == 2) - width = height = 16; +#define DSP_IDLESKIP 1 /* dsp idle skipping speedup hack */ - if(width == 0 || height == 0) - return; - x1 = x; - x2 = x + width; - y1 = y; - y2 = y + height; +/*************************************************************************** - // trivial rejection - if (x1 > cliprect.max_x || x2 < cliprect.min_x || y1 > cliprect.max_y || y2 < cliprect.min_y) + Interrupts + +***************************************************************************/ + +// boob :( this is probably not the MB8421, need to change this +WRITE_LINE_MEMBER(taitojc_state::mb8421_intl) +{ + // shared ram interrupt request from dsp side + m_maincpu->set_input_line(6, state ? ASSERT_LINE : CLEAR_LINE); +} + +WRITE_LINE_MEMBER(taitojc_state::mb8421_intr) +{ + // shared ram interrupt request from maincpu side + // this is hacky, acquiring the internal dsp romdump should allow it to be cleaned up + if (state) { - return; - } - -// osd_printf_debug("draw_object: %08X %08X, X: %d, Y: %d, W: %d, H: %d\n", w1, w2, x, y, width, height); - - ix = 0; - iy = 0; - - // clip - if (x1 < cliprect.min_x) - { - ix = abs(cliprect.min_x - x1); - x1 = cliprect.min_x; - } - if (x2 > cliprect.max_x) - { - x2 = cliprect.max_x; - } - if (y1 < cliprect.min_y) - { - iy = abs(cliprect.min_y - y1); - y1 = cliprect.min_y; - } - if (y2 > cliprect.max_y) - { - y2 = cliprect.max_y; - } - - /* this bit seems to set up border at left/right of screen (reads at 0xffc00) */ - if(mask_screen) - { - if(address != 0xffc00) + if (m_mb8421->peek(0x7ff) & 0x08) { - popmessage("mask screen with %08x, contact MAMEdev",address); - return; + m_dsp->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); } - - for (j=y1; j < y2; j++) + else { - UINT16 *d = &bitmap.pix16(j); + /* + regarding m_has_dsp_hack: + All games minus Dangerous Curves tests if the DSP is alive with this code snippet: - for (i=x1; i < x2; i++) + 0008C370: 4A79 1000 1FC0 tst.w $10001fc0.l + 0008C376: 33FC 0000 0660 0000 move.w #$0, $6600000.l + 0008C37E: 66F0 bne $8c370 + + Problem is: that move.w in the middle makes the SR to always return a zero flag result, + hence it never branches like it should. CPU bug? + */ + if (!m_first_dsp_reset || !m_has_dsp_hack) { - d[i] = 0x78; //TODO: black - - //index++; - } - - //iy++; - } - } - else if(!color_depth) // Densha de Go 2/2X "credit text", 4bpp - { - for (j=y1; j < y2; j++) - { - UINT16 *d = &bitmap.pix16(j); - int index = (iy * (width / 2)) + ix; - - for (i=x1; i < x2; i+=2) - { - UINT8 pen = (v[BYTE4_XOR_BE(index)] & 0xf0) >> 4; - if (pen != 0) - d[i] = palette + pen; - - pen = (v[BYTE4_XOR_BE(index)] & 0x0f); - if (pen != 0) - d[i+1] = palette + pen; - - index++; - } - - iy++; - } - } - else // 8bpp - { - { - for (j=y1; j < y2; j++) - { - UINT16 *d = &bitmap.pix16(j); - int index = (iy * width) + ix; - - for (i=x1; i < x2; i++) - { - UINT8 pen = v[BYTE4_XOR_BE(index)]; - if (pen != 0) - { - d[i] = palette + pen; - } - - index++; - } - - iy++; + m_dsp->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); } + m_first_dsp_reset = 0; } } } -void taitojc_state::draw_object_bank(bitmap_ind16 &bitmap, const rectangle &cliprect, UINT8 bank_type, UINT8 pri) +INTERRUPT_GEN_MEMBER(taitojc_state::taitojc_vblank) { - UINT16 start_offs; -// UINT8 double_xy; - int i; + device.execute().set_input_line_and_vector(2, HOLD_LINE, 0x82); // where does it come from? +} - start_offs = ((bank_type+1)*0x400)/4; -// double_xy = (m_objlist[(0xd1c+bank_type*0x10)/4] & 0x20000000) >> 29; - - /* probably a core bug in there (otherwise objects sticks on screen in Densha de Go) */ - if(bank_type == 1 && (!(m_objlist[0xfc4/4] & 0x2000))) - return; - - for (i=start_offs-2; i >= (start_offs-0x400/4); i-=2) - { - UINT32 w1 = m_objlist[i + 0]; - UINT32 w2 = m_objlist[i + 1]; - - if (((w2 & 0x200000) >> 21) == pri) - { - draw_object(bitmap, cliprect, w1, w2, bank_type); - } - } +WRITE8_MEMBER(taitojc_state::jc_irq_unk_w) +{ + // gets written to at the end of irq6 routine + // writes $02 or $06, depending on a value in DSP RAM, what does it mean? } -void taitojc_state::video_start() +/*************************************************************************** + + maincpu I/O + +***************************************************************************/ + +READ8_MEMBER(taitojc_state::dsp_shared_r) { - /* find first empty slot to decode gfx */ - for (m_gfx_index = 0; m_gfx_index < MAX_GFX_ELEMENTS; m_gfx_index++) - if (m_gfxdecode->gfx(m_gfx_index) == 0) + return m_dsp_shared_ram_hi[offset]; +} + +WRITE8_MEMBER(taitojc_state::dsp_shared_w) +{ + m_dsp_shared_ram_hi[offset] = data; +} + + +READ8_MEMBER(taitojc_state::mcu_comm_r) +{ + switch (offset) + { + case 0x03: + return m_mcu_data_main; + + case 0x04: + return m_mcu_comm_main | 0x14; + + default: + logerror("mcu_comm_r: %02X at %08X\n", offset, space.device().safe_pc()); break; - - assert(m_gfx_index != MAX_GFX_ELEMENTS); - - m_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(taitojc_state::taitojc_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 64, 64); - - m_tilemap->set_transparent_pen(0); - - m_char_ram = auto_alloc_array_clear(machine(), UINT32, 0x4000/4); - m_tile_ram = auto_alloc_array_clear(machine(), UINT32, 0x4000/4); - - /* create the char set (gfx will then be updated dynamically from RAM) */ - m_gfxdecode->set_gfx(m_gfx_index, global_alloc(gfx_element(m_palette, taitojc_char_layout, (UINT8 *)m_char_ram, 0, m_palette->entries() / 16, 0))); - - m_texture = auto_alloc_array(machine(), UINT8, 0x400000); - - m_screen->register_screen_bitmap(m_framebuffer); - m_screen->register_screen_bitmap(m_zbuffer); - - /* create renderer */ - m_renderer = auto_alloc(machine(), taitojc_renderer(machine(), &m_framebuffer, &m_zbuffer, m_texture)); -} - -UINT32 taitojc_state::screen_update_taitojc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - bitmap.fill(0, cliprect); - - // low priority objects - draw_object_bank(bitmap, cliprect, 0, 0); - draw_object_bank(bitmap, cliprect, 1, 0); - draw_object_bank(bitmap, cliprect, 2, 0); - - // 3D layer - copybitmap_trans(bitmap, m_framebuffer, 0, 0, 0, 0, cliprect, 0); - - // high priority objects - draw_object_bank(bitmap, cliprect, 0, 1); - draw_object_bank(bitmap, cliprect, 1, 1); - draw_object_bank(bitmap, cliprect, 2, 1); - - // text layer - if (m_objlist[0xfc4/4] & 0x10000) - m_tilemap->draw(screen, bitmap, cliprect, 0, 0); + } return 0; } -UINT32 taitojc_state::screen_update_dendego(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +WRITE8_MEMBER(taitojc_state::mcu_comm_w) { - // update controller state in artwork - static const UINT8 dendego_mascon_table[6] = { 0x76, 0x67, 0x75, 0x57, 0x73, 0x37 }; - static const UINT8 dendego_brake_table[11] = { 0x00, 0x05, 0x1d, 0x35, 0x4d, 0x65, 0x7d, 0x95, 0xad, 0xc5, 0xd4 }; - - UINT8 btn = (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 = m_analog_inp[0]->read_safe(0) & 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_update_taitojc(screen, bitmap, cliprect); -} - - - -void taitojc_renderer::render_solid_scan(INT32 scanline, const extent_t &extent, const taitojc_polydata &extradata, int threadid) -{ - float z = extent.param[0].start; - int color = extent.param[1].start; - float dz = extent.param[0].dpdx; - UINT16 *fb = &m_framebuffer->pix16(scanline); - UINT16 *zb = &m_zbuffer->pix16(scanline); - - for (int x = extent.startx; x < extent.stopx; x++) + switch (offset) { - int iz = (int)z & 0xffff; + case 0x00: + m_mcu_data_hc11 = data; + m_mcu_comm_hc11 &= ~0x04; + m_mcu_comm_main &= ~0x20; + break; - if (iz <= zb[x]) - { - fb[x] = color; - zb[x] = iz; - } + case 0x04: + break; - z += dz; + default: + logerror("mcu_comm_w: %02X, %02X at %08X\n", offset, data, space.device().safe_pc()); + break; } } -void taitojc_renderer::render_shade_scan(INT32 scanline, const extent_t &extent, const taitojc_polydata &extradata, int threadid) +READ32_MEMBER(taitojc_state::snd_share_r) { - float z = extent.param[0].start; - float color = extent.param[1].start; - float dz = extent.param[0].dpdx; - float dcolor = extent.param[1].dpdx; - UINT16 *fb = &m_framebuffer->pix16(scanline); - UINT16 *zb = &m_zbuffer->pix16(scanline); - - for (int x = extent.startx; x < extent.stopx; x++) + switch (offset & 3) { - int ic = (int)color & 0xffff; - int iz = (int)z & 0xffff; + case 0: return (m_snd_shared_ram[(offset/4)] << 0) & 0xff000000; + case 1: return (m_snd_shared_ram[(offset/4)] << 8) & 0xff000000; + case 2: return (m_snd_shared_ram[(offset/4)] << 16) & 0xff000000; + case 3: return (m_snd_shared_ram[(offset/4)] << 24) & 0xff000000; + } - if (iz <= zb[x]) + return 0; +} + +WRITE32_MEMBER(taitojc_state::snd_share_w) +{ + if (ACCESSING_BITS_24_31) + { + switch (offset & 3) { - fb[x] = ic; - zb[x] = iz; + case 0: m_snd_shared_ram[(offset/4)] &= ~0xff000000; m_snd_shared_ram[(offset/4)] |= (data >> 0 & 0xff000000); break; + case 1: m_snd_shared_ram[(offset/4)] &= ~0x00ff0000; m_snd_shared_ram[(offset/4)] |= (data >> 8 & 0x00ff0000); break; + case 2: m_snd_shared_ram[(offset/4)] &= ~0x0000ff00; m_snd_shared_ram[(offset/4)] |= (data >> 16 & 0x0000ff00); break; + case 3: m_snd_shared_ram[(offset/4)] &= ~0x000000ff; m_snd_shared_ram[(offset/4)] |= (data >> 24 & 0x000000ff); break; } - - color += dcolor; - z += dz; } } -void taitojc_renderer::render_texture_scan(INT32 scanline, const extent_t &extent, const taitojc_polydata &extradata, int threadid) + +READ8_MEMBER(taitojc_state::jc_pcbid_r) { - float z = extent.param[0].start; - float u = extent.param[1].start; - float v = extent.param[2].start; - float color = extent.param[3].start; - float dz = extent.param[0].dpdx; - float du = extent.param[1].dpdx; - float dv = extent.param[2].dpdx; - float dcolor = extent.param[3].dpdx; - UINT16 *fb = &m_framebuffer->pix16(scanline); - UINT16 *zb = &m_zbuffer->pix16(scanline); - int tex_wrap_x = extradata.tex_wrap_x; - int tex_wrap_y = extradata.tex_wrap_y; - int tex_base_x = extradata.tex_base_x; - int tex_base_y = extradata.tex_base_y; + static const char pcb_id[0x40] = + { "DEV=TC0870HVP SYS=CG VER=1.0"}; + // - any more data after "VER=1."? + // - can we assume it comes from the TC0870HVP chip? - for (int x = extent.startx; x < extent.stopx; x++) + return pcb_id[offset]; +} + + +/* + +Some games (Dangerous Curves, Side by Side, Side by Side 2) were released as Twin cabinets, +allowing 2 players to compete each other via a SMSC COM20020I network IC + +Not emulated yet... + +*/ + +READ8_MEMBER(taitojc_state::jc_lan_r) +{ + return 0xff; +} + +WRITE8_MEMBER(taitojc_state::jc_lan_w) +{ +} + + +static ADDRESS_MAP_START( taitojc_map, AS_PROGRAM, 32, taitojc_state ) + AM_RANGE(0x00000000, 0x001fffff) AM_ROM AM_MIRROR(0x200000) + AM_RANGE(0x00400000, 0x01bfffff) AM_ROM AM_REGION("gfx1", 0) + AM_RANGE(0x04000000, 0x040f7fff) AM_RAM AM_SHARE("vram") + AM_RANGE(0x040f8000, 0x040fbfff) AM_READWRITE(taitojc_tile_r, taitojc_tile_w) + AM_RANGE(0x040fc000, 0x040fefff) AM_READWRITE(taitojc_char_r, taitojc_char_w) + AM_RANGE(0x040ff000, 0x040fffff) AM_RAM AM_SHARE("objlist") + AM_RANGE(0x05800000, 0x0580003f) AM_READ8(jc_pcbid_r, 0xffffffff) + AM_RANGE(0x05900000, 0x05900007) AM_READWRITE8(mcu_comm_r, mcu_comm_w, 0xffffffff) + AM_RANGE(0x06400000, 0x0641ffff) AM_READWRITE(taitojc_palette_r, taitojc_palette_w) AM_SHARE("palette_ram") + AM_RANGE(0x06600000, 0x0660001f) AM_DEVREADWRITE8("tc0640fio", tc0640fio_device, read, write, 0xff000000) + AM_RANGE(0x0660004c, 0x0660004f) AM_WRITE_PORT("EEPROMOUT") + AM_RANGE(0x06800000, 0x06800003) AM_WRITE8(jc_irq_unk_w, 0x00ff0000) + AM_RANGE(0x06a00000, 0x06a01fff) AM_READWRITE(snd_share_r, snd_share_w) AM_SHARE("snd_shared") + AM_RANGE(0x06c00000, 0x06c0001f) AM_READWRITE8(jc_lan_r, jc_lan_w, 0x00ff0000) + AM_RANGE(0x08000000, 0x080fffff) AM_RAM AM_SHARE("main_ram") + AM_RANGE(0x10000000, 0x10001fff) AM_DEVREADWRITE8("mb8421", mb8421_device, left_r, left_w, 0x00ff0000) + AM_RANGE(0x10000000, 0x10001fff) AM_READWRITE8(dsp_shared_r, dsp_shared_w, 0xff000000) // which chip is this? +ADDRESS_MAP_END + + +/* + +Densha de Go games have odometers for speed and brakepressure. +There's a voltmeter too, but seems to be a dummy (always stuck on 1.5kV) + +The OKI is used for seat vibration effects. + +*/ + +WRITE8_MEMBER(taitojc_state::dendego_speedmeter_w) +{ + if (m_speed_meter != dendego_odometer_table[data]) { - int iu, iv; - UINT8 texel; - int palette = ((int)color & 0x7f) << 8; - int iz = (int)z & 0xffff; - - if (!tex_wrap_x) - { - iu = ((int)u >> 4) & 0x7ff; - } - else - { - iu = (tex_base_x + (((int)u >> 4) & 0x3f)) & 0x7ff; - } - - if (!tex_wrap_y) - { - iv = ((int)v >> 4) & 0x7ff; - } - else - { - iv = (tex_base_y + (((int)v >> 4) & 0x3f)) & 0x7ff; - } - - texel = m_texture[(iv * 2048) + iu]; - - if (iz <= zb[x] && texel != 0) - { - fb[x] = palette | texel; - zb[x] = iz; - } - - u += du; - v += dv; - color += dcolor; - z += dz; + m_speed_meter = dendego_odometer_table[data]; + output_set_value("counter2", m_speed_meter / 10); + output_set_value("counter3", m_speed_meter % 10); } } -void taitojc_renderer::render_polygons(running_machine &machine, UINT16 *polygon_fifo, int length) +WRITE8_MEMBER(taitojc_state::dendego_brakemeter_w) { -// taitojc_state *state = machine.driver_data(); - const rectangle visarea = machine.first_screen()->visible_area(); - vertex_t vert[4]; - int i; - int ptr; - - ptr = 0; - while (ptr < length) + if (m_brake_meter != dendego_pressure_table[data]) { - UINT16 cmd = polygon_fifo[ptr++]; - - switch (cmd & 0x7) - { - // screen global clipping for 3d(?) - case 0x00: - { - UINT16 min_x,min_y,min_z,max_x,max_y,max_z; - - min_x = polygon_fifo[ptr+1]; - min_y = polygon_fifo[ptr+0]; - min_z = polygon_fifo[ptr+2]; - max_x = polygon_fifo[ptr+4]; - max_y = polygon_fifo[ptr+3]; - max_z = polygon_fifo[ptr+5]; - - /* let's check if we need to implement this ... */ - if(min_x != 0 || min_y != 0 || min_z != 0 || max_x != 512 || max_y != 400 || max_z != 0x7fff) - { - printf("CMD %04x\n",cmd); - printf("MIN Y %04x\n",polygon_fifo[ptr+0]); - printf("MIN X %04x\n",polygon_fifo[ptr+1]); - printf("MIN Z %04x\n",polygon_fifo[ptr+2]); - printf("MAX Y %04x\n",polygon_fifo[ptr+3]); - printf("MAX X %04x\n",polygon_fifo[ptr+4]); - printf("MAX Z %04x\n",polygon_fifo[ptr+5]); - } - ptr += 6; - break; - } - - // Gouraud Shaded Triangle (Landing Gear) - case 0x01: - { - // 0x00: Command ID (0x0001) - // 0x01: Vertex 1 color - // 0x02: Vertex 1 Y - // 0x03: Vertex 1 X - // 0x04: Vertex 1 Z - // 0x05: Vertex 2 color - // 0x06: Vertex 2 Y - // 0x07: Vertex 2 X - // 0x08: Vertex 2 Z - // 0x09: Vertex 3 color - // 0x0a: Vertex 3 Y - // 0x0b: Vertex 3 X - // 0x0c: Vertex 3 Z - -#if 0 - printf("CMD1: "); - for (i=0; i < 0x0c; i++) - { - printf("%04X ", polygon_fifo[ptr+i]); - } - printf("\n"); -#endif - - for (i=0; i < 3; i++) - { - vert[i].p[1] = polygon_fifo[ptr++]; - vert[i].y = (INT16)(polygon_fifo[ptr++]); - vert[i].x = (INT16)(polygon_fifo[ptr++]); - vert[i].p[0] = (UINT16)(polygon_fifo[ptr++]); - } - - if (vert[0].p[0] < 0x8000 && vert[1].p[0] < 0x8000 && vert[2].p[0] < 0x8000) - { - if (vert[0].p[1] == vert[1].p[1] && - vert[1].p[1] == vert[2].p[1]) - { - // optimization: all colours the same -> render solid - render_triangle(visarea, render_delegate(FUNC(taitojc_renderer::render_solid_scan), this), 2, vert[0], vert[1], vert[2]); - } - else - { - render_triangle(visarea, render_delegate(FUNC(taitojc_renderer::render_shade_scan), this), 2, vert[0], vert[1], vert[2]); - } - } - break; - } - - // Textured Triangle - case 0x03: - { - // 0x00: Command ID (0x0003) - // 0x01: Texture base - // 0x02: Vertex 1 Palette - // 0x03: Vertex 1 V - // 0x04: Vertex 1 U - // 0x05: Vertex 1 Y - // 0x06: Vertex 1 X - // 0x07: Vertex 1 Z - // 0x08: Vertex 2 Palette - // 0x09: Vertex 2 V - // 0x0a: Vertex 2 U - // 0x0b: Vertex 2 Y - // 0x0c: Vertex 2 X - // 0x0d: Vertex 2 Z - // 0x0e: Vertex 3 Palette - // 0x0f: Vertex 3 V - // 0x10: Vertex 3 U - // 0x11: Vertex 3 Y - // 0x12: Vertex 3 X - // 0x13: Vertex 3 Z - -#if 0 - printf("CMD3: "); - for (i=0; i < 0x13; i++) - { - printf("%04X ", polygon_fifo[ptr+i]); - } - printf("\n"); -#endif - - taitojc_polydata &extra = object_data_alloc(); - UINT16 texbase = polygon_fifo[ptr++]; - - extra.tex_base_x = ((texbase >> 0) & 0xff) << 4; - extra.tex_base_y = ((texbase >> 8) & 0xff) << 4; - - extra.tex_wrap_x = (cmd & 0xc0) ? 1 : 0; - extra.tex_wrap_y = (cmd & 0x30) ? 1 : 0; - - for (i=0; i < 3; i++) - { - vert[i].p[3] = polygon_fifo[ptr++] + 0.5; // palette - vert[i].p[2] = (UINT16)(polygon_fifo[ptr++]); - vert[i].p[1] = (UINT16)(polygon_fifo[ptr++]); - vert[i].y = (INT16)(polygon_fifo[ptr++]); - vert[i].x = (INT16)(polygon_fifo[ptr++]); - vert[i].p[0] = (UINT16)(polygon_fifo[ptr++]); - } - - if (vert[0].p[0] < 0x8000 && vert[1].p[0] < 0x8000 && vert[2].p[0] < 0x8000) - { - render_triangle(visarea, render_delegate(FUNC(taitojc_renderer::render_texture_scan), this), 4, vert[0], vert[1], vert[2]); - } - break; - } - - // Gouraud shaded Quad - case 0x04: - { - // 0x00: Command ID (0x0004) - // 0x01: Vertex 1 color - // 0x02: Vertex 1 Y - // 0x03: Vertex 1 X - // 0x04: Vertex 1 Z - // 0x05: Vertex 2 color - // 0x06: Vertex 2 Y - // 0x07: Vertex 2 X - // 0x08: Vertex 2 Z - // 0x09: Vertex 3 color - // 0x0a: Vertex 3 Y - // 0x0b: Vertex 3 X - // 0x0c: Vertex 3 Z - // 0x0d: Vertex 4 color - // 0x0e: Vertex 4 Y - // 0x0f: Vertex 4 X - // 0x10: Vertex 4 Z - -#if 0 - printf("CMD4: "); - for (i=0; i < 0x10; i++) - { - printf("%04X ", polygon_fifo[ptr+i]); - } - printf("\n"); -#endif - - for (i=0; i < 4; i++) - { - vert[i].p[1] = polygon_fifo[ptr++]; - vert[i].y = (INT16)(polygon_fifo[ptr++]); - vert[i].x = (INT16)(polygon_fifo[ptr++]); - vert[i].p[0] = (UINT16)(polygon_fifo[ptr++]); - } - - if (vert[0].p[0] < 0x8000 && vert[1].p[0] < 0x8000 && vert[2].p[0] < 0x8000 && vert[3].p[0] < 0x8000) - { - if (vert[0].p[1] == vert[1].p[1] && - vert[1].p[1] == vert[2].p[1] && - vert[2].p[1] == vert[3].p[1]) - { - // optimization: all colours the same -> render solid - render_polygon<4>(visarea, render_delegate(FUNC(taitojc_renderer::render_solid_scan), this), 2, vert); - } - else - { - render_polygon<4>(visarea, render_delegate(FUNC(taitojc_renderer::render_shade_scan), this), 2, vert); - } - } - break; - } - - // Textured Quad - case 0x06: - { - // 0x00: Command ID (0x0006) - // 0x01: Texture base - // 0x02: Vertex 1 Palette - // 0x03: Vertex 1 V - // 0x04: Vertex 1 U - // 0x05: Vertex 1 Y - // 0x06: Vertex 1 X - // 0x07: Vertex 1 Z - // 0x08: Vertex 2 Palette - // 0x09: Vertex 2 V - // 0x0a: Vertex 2 U - // 0x0b: Vertex 2 Y - // 0x0c: Vertex 2 X - // 0x0d: Vertex 2 Z - // 0x0e: Vertex 3 Palette - // 0x0f: Vertex 3 V - // 0x10: Vertex 3 U - // 0x11: Vertex 3 Y - // 0x12: Vertex 3 X - // 0x13: Vertex 3 Z - // 0x14: Vertex 4 Palette - // 0x15: Vertex 4 V - // 0x16: Vertex 4 U - // 0x17: Vertex 4 Y - // 0x18: Vertex 4 X - // 0x19: Vertex 4 Z - -#if 0 - printf("CMD6: "); - for (i=0; i < 0x19; i++) - { - printf("%04X ", polygon_fifo[ptr+i]); - } - printf("\n"); -#endif - - taitojc_polydata &extra = object_data_alloc(); - UINT16 texbase = polygon_fifo[ptr++]; - - extra.tex_base_x = ((texbase >> 0) & 0xff) << 4; - extra.tex_base_y = ((texbase >> 8) & 0xff) << 4; - - extra.tex_wrap_x = (cmd & 0xc0) ? 1 : 0; - extra.tex_wrap_y = (cmd & 0x30) ? 1 : 0; - - for (i=0; i < 4; i++) - { - vert[i].p[3] = polygon_fifo[ptr++] + 0.5; // palette - vert[i].p[2] = (UINT16)(polygon_fifo[ptr++]); - vert[i].p[1] = (UINT16)(polygon_fifo[ptr++]); - vert[i].y = (INT16)(polygon_fifo[ptr++]); - vert[i].x = (INT16)(polygon_fifo[ptr++]); - vert[i].p[0] = (UINT16)(polygon_fifo[ptr++]); - } - - if (vert[0].p[0] < 0x8000 && vert[1].p[0] < 0x8000 && vert[2].p[0] < 0x8000 && vert[3].p[0] < 0x8000) - { - render_polygon<4>(visarea, render_delegate(FUNC(taitojc_renderer::render_texture_scan), this), 4, vert); - } - break; - } - - default: - { - printf("render_polygons: unknown command %04X %d\n", cmd,ptr); - break; - } - } + m_brake_meter = dendego_pressure_table[data]; + output_set_value("counter4", m_brake_meter); } - - wait("Finished render"); } -void taitojc_state::taitojc_clear_frame() +static ADDRESS_MAP_START( dendego_map, AS_PROGRAM, 32, taitojc_state ) + AM_RANGE(0x06e00000, 0x06e00003) AM_WRITE8(dendego_speedmeter_w, 0x00ff0000) + AM_RANGE(0x06e00004, 0x06e00007) AM_WRITE8(dendego_brakemeter_w, 0x00ff0000) + AM_RANGE(0x06e0000c, 0x06e0000f) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff0000) + AM_IMPORT_FROM( taitojc_map ) +ADDRESS_MAP_END + + + + +/*************************************************************************** + + MCU I/O + +***************************************************************************/ + +READ8_MEMBER(taitojc_state::hc11_comm_r) { - m_framebuffer.fill(0, m_screen->visible_area()); - m_zbuffer.fill(0xffff, m_screen->visible_area()); + return m_mcu_comm_hc11; } + +WRITE8_MEMBER(taitojc_state::hc11_comm_w) +{ +} + +READ8_MEMBER(taitojc_state::hc11_data_r) +{ + m_mcu_comm_hc11 |= 0x04; + m_mcu_comm_main |= 0x20; + return m_mcu_data_hc11; +} + +WRITE8_MEMBER(taitojc_state::hc11_data_w) +{ + m_mcu_data_main = data; +} + +READ8_MEMBER(taitojc_state::hc11_output_r) +{ + return m_mcu_output; +} + +WRITE8_MEMBER(taitojc_state::hc11_output_w) +{ +/* + cabinet lamps, active high + + dendego/dendego2: + d0: START + d1: DOOR + d2: JYOUYO (normal) + d3: HIJYOU (emergency) + d4: DENSEI (three-stage power) + d5: POP L + d6: POP R + d7: ------- (?) + + landgear: + unused? + + sidebs/sidebs2: + ? +*/ + for (int i = 0; i < 8; i++) + output_set_lamp_value(i, data >> i & 1); + + m_mcu_output = data; +} + +READ8_MEMBER(taitojc_state::hc11_analog_r) +{ + return m_analog_inp[offset]->read_safe(0); +} + + +static ADDRESS_MAP_START( hc11_pgm_map, AS_PROGRAM, 8, taitojc_state ) + AM_RANGE(0x4000, 0x5fff) AM_RAM + AM_RANGE(0x8000, 0xffff) AM_ROM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( hc11_io_map, AS_IO, 8, taitojc_state ) + AM_RANGE(MC68HC11_IO_PORTA, MC68HC11_IO_PORTA ) AM_READNOP // ? + AM_RANGE(MC68HC11_IO_PORTG, MC68HC11_IO_PORTG ) AM_READWRITE(hc11_comm_r, hc11_comm_w) + AM_RANGE(MC68HC11_IO_PORTH, MC68HC11_IO_PORTH ) AM_READWRITE(hc11_output_r, hc11_output_w) + AM_RANGE(MC68HC11_IO_SPI2_DATA, MC68HC11_IO_SPI2_DATA) AM_READWRITE(hc11_data_r, hc11_data_w) + AM_RANGE(MC68HC11_IO_AD0, MC68HC11_IO_AD7 ) AM_READ(hc11_analog_r) +ADDRESS_MAP_END + + + + +/*************************************************************************** + + DSP I/O + +***************************************************************************/ + +/* + Math co-processor memory map + + 0x7000: Projection point Y + 0x7001: Projection point X + 0x7002: Projection point Z + 0x7003: Frustum Min Z(?) + 0x7004: Frustum Max Z(?) + 0x7010: Line intersection, parameter length + 0x7011: Line intersection, intersection point + 0x7012: Line intersection, line length + 0x7013: Viewport Width / 2 + 0x7014: Viewport Height / 2 + 0x7015: Viewport Z / 2 (?) + 0x701b: Line intersection, parameter interpolation read + 0x701d: Projected point Y read + 0x701f: Projected point X read + 0x7022: Unknown read + 0x7030: Unknown write + 0x703b: Unknown read/write +*/ + +WRITE16_MEMBER(taitojc_state::dsp_math_projection_w) +{ + m_projection_data[offset] = data; +} + +WRITE16_MEMBER(taitojc_state::dsp_math_viewport_w) +{ + m_viewport_data[offset] = data; +} + +READ16_MEMBER(taitojc_state::dsp_math_projection_y_r) +{ + return (m_projection_data[2] != 0) ? (m_projection_data[0] * m_viewport_data[0]) / m_projection_data[2] : 0; +} + +READ16_MEMBER(taitojc_state::dsp_math_projection_x_r) +{ + return (m_projection_data[2] != 0) ? (m_projection_data[1] * m_viewport_data[1]) / m_projection_data[2] : 0; +} + +WRITE16_MEMBER(taitojc_state::dsp_math_intersection_w) +{ + m_intersection_data[offset] = data; +} + +READ16_MEMBER(taitojc_state::dsp_math_intersection_r) +{ + return (m_intersection_data[2] != 0) ? (m_intersection_data[0] * m_intersection_data[1]) / m_intersection_data[2] : 0; +} + +READ16_MEMBER(taitojc_state::dsp_math_unk_r) +{ + return 0x7fff; +} + + +/**************************************************************************/ + +READ16_MEMBER(taitojc_state::dsp_rom_r) +{ + assert (m_dsp_rom_pos < 0x800000); // never happens + return ((UINT16*)m_gfx2->base())[m_dsp_rom_pos++]; +} + +WRITE16_MEMBER(taitojc_state::dsp_rom_w) +{ + if (offset == 0) + { + m_dsp_rom_pos &= 0xffff; + m_dsp_rom_pos |= data << 16; + } + else + { + m_dsp_rom_pos &= 0xffff0000; + m_dsp_rom_pos |= data; + } +} + +WRITE16_MEMBER(taitojc_state::dsp_texture_w) +{ + int index; + int x, y; + + x = (m_dsp_tex_offset >> 0 & 0x1f) | (m_dsp_tex_offset >> 5 & 0x20); + y = (m_dsp_tex_offset >> 5 & 0x1f) | (m_dsp_tex_offset >> 6 & 0x20); + + index = (((m_texture_y * 32) + y) * 2048) + ((m_texture_x * 32) + x); + m_texture[index] = data & 0xff; + + m_dsp_tex_offset++; +} + +READ16_MEMBER(taitojc_state::dsp_texaddr_r) +{ + return m_dsp_tex_address; +} + +WRITE16_MEMBER(taitojc_state::dsp_texaddr_w) +{ + m_dsp_tex_address = data; + + m_texture_x = (((data >> 0) & 0x1f) << 1) | ((data >> 12) & 0x1); + m_texture_y = (((data >> 5) & 0x1f) << 1) | ((data >> 13) & 0x1); + + m_dsp_tex_offset = 0; +} + +WRITE16_MEMBER(taitojc_state::dsp_polygon_fifo_w) +{ + assert (m_polygon_fifo_ptr < TAITOJC_POLYGON_FIFO_SIZE); // never happens + m_polygon_fifo[m_polygon_fifo_ptr++] = data; +} + +WRITE16_MEMBER(taitojc_state::dsp_unk2_w) +{ + if (offset == 0) + { + taitojc_clear_frame(); + m_renderer->render_polygons(machine(), m_polygon_fifo, m_polygon_fifo_ptr); + + m_polygon_fifo_ptr = 0; + } +} + +static ADDRESS_MAP_START( tms_program_map, AS_PROGRAM, 16, taitojc_state ) + AM_RANGE(0x0000, 0x1fff) AM_RAM AM_MIRROR(0x4000) + AM_RANGE(0x6000, 0x7fff) AM_RAM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( tms_data_map, AS_DATA, 16, taitojc_state ) + AM_RANGE(0x6a01, 0x6a02) AM_WRITE(dsp_unk2_w) + AM_RANGE(0x6a11, 0x6a12) AM_NOP // same as 0x6a01..02 for the second renderer chip? + AM_RANGE(0x6b20, 0x6b20) AM_WRITE(dsp_polygon_fifo_w) + AM_RANGE(0x6b22, 0x6b22) AM_WRITE(dsp_texture_w) + AM_RANGE(0x6b23, 0x6b23) AM_READWRITE(dsp_texaddr_r, dsp_texaddr_w) + AM_RANGE(0x6c00, 0x6c01) AM_READWRITE(dsp_rom_r, dsp_rom_w) + AM_RANGE(0x7000, 0x7002) AM_WRITE(dsp_math_projection_w) + AM_RANGE(0x7010, 0x7012) AM_WRITE(dsp_math_intersection_w) + AM_RANGE(0x7013, 0x7015) AM_WRITE(dsp_math_viewport_w) + AM_RANGE(0x701b, 0x701b) AM_READ(dsp_math_intersection_r) + AM_RANGE(0x701d, 0x701d) AM_READ(dsp_math_projection_y_r) + AM_RANGE(0x701f, 0x701f) AM_READ(dsp_math_projection_x_r) + AM_RANGE(0x7022, 0x7022) AM_READ(dsp_math_unk_r) + AM_RANGE(0x7800, 0x7fff) AM_DEVREADWRITE8("mb8421", mb8421_device, right_r, right_w, 0x00ff) + AM_RANGE(0x7800, 0x7fff) AM_READWRITE8(dsp_shared_r, dsp_shared_w, 0xff00) // which chip is this? + AM_RANGE(0x8000, 0xffff) AM_RAM +ADDRESS_MAP_END + + + + +/*************************************************************************** + + Inputs + +***************************************************************************/ + +static INPUT_PORTS_START( common ) + PORT_START("SERVICE") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("COINS") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) + PORT_DIPNAME( 0x02, 0x02, "Dev Skip RAM Test" ) // skips mainram test on page 1 of POST + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("START") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_TILT ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("UNUSED") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_DIPNAME( 0x40, 0x40, "Dev Debug" ) // debug related in dendego/sidebs + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("BUTTONS") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("EEPROMOUT") + PORT_BIT( 0x04000000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) + PORT_BIT( 0x08000000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) + PORT_BIT( 0x10000000, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) +INPUT_PORTS_END + +// Mascon must always be in a defined state, Densha de Go 2 in particular returns black screen if the Mascon input is undefined +static const ioport_value dendego_mascon_table[6] = { 0x76, 0x67, 0x75, 0x57, 0x73, 0x37 }; + +static INPUT_PORTS_START( dendego ) + PORT_INCLUDE( common ) + + PORT_MODIFY("UNUSED") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Horn Pedal") + + PORT_MODIFY("BUTTONS") // Throttle Lever at left, move down to speed up, 6 positions + PORT_BIT( 0x77, 0x00, IPT_POSITIONAL_V ) PORT_POSITIONS(6) PORT_REMAP_TABLE(dendego_mascon_table) PORT_SENSITIVITY(10) PORT_KEYDELTA(1) PORT_CENTERDELTA(0) PORT_NAME("Throttle Lever") + PORT_BIT( 0x88, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("AN.0") // 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, 0xef) PORT_SENSITIVITY(35) PORT_KEYDELTA(10) PORT_CENTERDELTA(0) PORT_NAME("Brake Lever") +INPUT_PORTS_END + +static INPUT_PORTS_START( landgear ) + PORT_INCLUDE( common ) + + PORT_MODIFY("UNUSED") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("View Switch") + + PORT_START("AN.0") // Lever X + PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5) PORT_REVERSE + + PORT_START("AN.1") // Lever Y + PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5) + + PORT_START("AN.2") // Throttle + PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5) PORT_REVERSE +INPUT_PORTS_END + +static INPUT_PORTS_START( sidebs ) + PORT_INCLUDE( common ) + + PORT_MODIFY("START") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) // no start button + + PORT_MODIFY("UNUSED") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("View Switch") + + PORT_MODIFY("BUTTONS") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("Shift Up") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("Shift Down") + + PORT_START("AN.0") // Steering + PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(35) PORT_KEYDELTA(10) PORT_NAME("Steering Wheel") + + PORT_START("AN.1") // Acceleration + PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(25) PORT_NAME("Gas Pedal") + + PORT_START("AN.2") // Brake + PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(25) PORT_NAME("Brake Pedal") +INPUT_PORTS_END + +static INPUT_PORTS_START( dangcurv ) + PORT_INCLUDE( common ) + + PORT_MODIFY("START") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) // no start button + + PORT_MODIFY("UNUSED") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("View Switch") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Rear Switch") + + PORT_MODIFY("BUTTONS") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("Shift Up") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("Shift Down") + + PORT_START("AN.0") // Steering + PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(35) PORT_KEYDELTA(10) PORT_REVERSE PORT_NAME("Steering Wheel") + + PORT_START("AN.1") // Acceleration + PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(25) PORT_REVERSE PORT_NAME("Gas Pedal") + + PORT_START("AN.2") // Brake + PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_MINMAX(0x00, 0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(25) PORT_REVERSE PORT_NAME("Brake Pedal") +INPUT_PORTS_END + + + + +/*************************************************************************** + + Machine Config + +***************************************************************************/ + +void taitojc_state::machine_reset() +{ + m_first_dsp_reset = 1; + + m_mcu_comm_main = 0; + m_mcu_comm_hc11 = 0; + m_mcu_data_main = 0; + m_mcu_data_hc11 = 0; + + m_texture_x = 0; + m_texture_y = 0; + + m_dsp_rom_pos = 0; + m_dsp_tex_address = 0; + m_dsp_tex_offset = 0; + m_polygon_fifo_ptr = 0; + + memset(m_dsp_shared_ram_hi, 0, sizeof(m_dsp_shared_ram_hi)); + memset(m_viewport_data, 0, sizeof(m_viewport_data)); + memset(m_projection_data, 0, sizeof(m_projection_data)); + memset(m_intersection_data, 0, sizeof(m_intersection_data)); + + // hold the TMS in reset until we have code + m_dsp->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); +} + +void taitojc_state::machine_start() +{ + // register for savestates + save_item(NAME(m_texture_x)); + save_item(NAME(m_texture_y)); + save_item(NAME(m_dsp_rom_pos)); + save_item(NAME(m_dsp_tex_address)); + save_item(NAME(m_dsp_tex_offset)); + save_item(NAME(m_first_dsp_reset)); + save_item(NAME(m_dsp_shared_ram_hi)); + save_item(NAME(m_viewport_data)); + save_item(NAME(m_projection_data)); + save_item(NAME(m_intersection_data)); + save_item(NAME(m_gfx_index)); + save_item(NAME(m_polygon_fifo_ptr)); + + save_item(NAME(m_mcu_comm_main)); + save_item(NAME(m_mcu_comm_hc11)); + save_item(NAME(m_mcu_data_main)); + save_item(NAME(m_mcu_data_hc11)); + save_item(NAME(m_mcu_output)); + + save_item(NAME(m_speed_meter)); + save_item(NAME(m_brake_meter)); +} + + +static MACHINE_CONFIG_START( taitojc, taitojc_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", M68040, XTAL_10MHz*2) // 20MHz, clock source = CY7C991 + MCFG_CPU_PROGRAM_MAP(taitojc_map) + MCFG_CPU_VBLANK_INT_DRIVER("screen", taitojc_state, taitojc_vblank) + + MCFG_CPU_ADD("sub", MC68HC11, XTAL_16MHz/2) // 8MHz, MC68HC11M0 + MCFG_CPU_PROGRAM_MAP(hc11_pgm_map) + MCFG_CPU_IO_MAP(hc11_io_map) + MCFG_MC68HC11_CONFIG( 1, 1280, 0x00 ) + + MCFG_CPU_ADD("dsp", TMS32051, XTAL_10MHz*4) // 40MHz, clock source = CY7C991 + MCFG_CPU_PROGRAM_MAP(tms_program_map) + MCFG_CPU_DATA_MAP(tms_data_map) + + MCFG_QUANTUM_TIME(attotime::from_hz(6000)) + + MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") + + MCFG_DEVICE_ADD("mb8421", MB8421, 0) + MCFG_MB8421_INTL_HANDLER(WRITELINE(taitojc_state, mb8421_intl)) + MCFG_MB8421_INTR_HANDLER(WRITELINE(taitojc_state, mb8421_intr)) + + MCFG_DEVICE_ADD("tc0640fio", TC0640FIO, 0) + MCFG_TC0640FIO_READ_0_CB(IOPORT("SERVICE")) + MCFG_TC0640FIO_READ_1_CB(IOPORT("COINS")) + MCFG_TC0640FIO_READ_2_CB(IOPORT("START")) + MCFG_TC0640FIO_READ_3_CB(IOPORT("UNUSED")) + MCFG_TC0640FIO_READ_7_CB(IOPORT("BUTTONS")) + + MCFG_GFXDECODE_ADD("gfxdecode", "palette", empty) + + /* video hardware */ + MCFG_SCREEN_ADD("screen", RASTER) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) + MCFG_SCREEN_UPDATE_DRIVER(taitojc_state, screen_update_taitojc) + MCFG_SCREEN_PALETTE("palette") + + MCFG_PALETTE_ADD("palette", 32768) + + /* sound hardware */ + MCFG_FRAGMENT_ADD(taito_en_sound) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( dendego, taitojc ) + + /* basic machine hardware */ + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(dendego_map) + + /* video hardware */ + MCFG_SCREEN_MODIFY("screen") + MCFG_SCREEN_UPDATE_DRIVER(taitojc_state, screen_update_dendego) + + /* sound hardware */ + MCFG_SPEAKER_ADD("subwoofer", 0.0, 0.0, 1.0) + MCFG_OKIM6295_ADD("oki", 1056000, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "subwoofer", 0.20) +MACHINE_CONFIG_END + + + + +/*************************************************************************** + + Game Drivers + +***************************************************************************/ + +READ16_MEMBER(taitojc_state::taitojc_dsp_idle_skip_r) +{ + if (space.device().safe_pc() == 0x404c) + space.device().execute().spin_until_time(attotime::from_usec(500)); + + return m_dsp_shared_ram_hi[0x7f0] << 8 | m_mb8421->peek(0x7f0); +} + +READ16_MEMBER(taitojc_state::dendego2_dsp_idle_skip_r) +{ + if (space.device().safe_pc() == 0x402e) + space.device().execute().spin_until_time(attotime::from_usec(500)); + + return m_dsp_shared_ram_hi[0x7f0] << 8 | m_mb8421->peek(0x7f0); +} + + +DRIVER_INIT_MEMBER(taitojc_state,taitojc) +{ + m_polygon_fifo = auto_alloc_array(machine(), UINT16, TAITOJC_POLYGON_FIFO_SIZE); + + m_has_dsp_hack = 1; + + if (DSP_IDLESKIP) + m_dsp->space(AS_DATA).install_read_handler(0x7ff0, 0x7ff0, read16_delegate(FUNC(taitojc_state::taitojc_dsp_idle_skip_r),this)); +} + +DRIVER_INIT_MEMBER(taitojc_state,dendego2) +{ + DRIVER_INIT_CALL(taitojc); + + if (DSP_IDLESKIP) + m_dsp->space(AS_DATA).install_read_handler(0x7ff0, 0x7ff0, read16_delegate(FUNC(taitojc_state::dendego2_dsp_idle_skip_r),this)); +} + +DRIVER_INIT_MEMBER(taitojc_state,dangcurv) +{ + DRIVER_INIT_CALL(taitojc); + + m_has_dsp_hack = 0; +} + + +/**************************************************************************/ + +ROM_START( sidebs ) /* Side by Side ver 2.7 J */ + ROM_REGION(0x200000, "maincpu", 0) /* 68040 code */ + ROM_LOAD32_BYTE( "e23-47.ic36", 0x000000, 0x80000, CRC(c67dc173) SHA1(fb16f75683b42cafc28c50d6c823d0987b09cd00) ) + ROM_LOAD32_BYTE( "e23-48.ic37", 0x000001, 0x80000, CRC(e3da7652) SHA1(a872e8d26e3e376786762f2571f75f282e2481f1) ) + ROM_LOAD32_BYTE( "e23-49.ic38", 0x000002, 0x80000, CRC(b2fdded3) SHA1(8e0f2d2d967a2e6b7d1954548941bc6257799d2d) ) + ROM_LOAD32_BYTE( "e23-50.ic39", 0x000003, 0x80000, CRC(76510731) SHA1(b8b9836fa121d2028e0218f4d439af0d7dae295e) ) + + ROM_REGION( 0x180000, "audiocpu", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "e23-23.ic30", 0x100001, 0x40000, CRC(cffbffe5) SHA1(c01ac44390dacab4b49bb066a46d81a184b07a1e) ) + ROM_LOAD16_BYTE( "e23-24.ic31", 0x100000, 0x40000, CRC(64bae246) SHA1(f929f664881487615b1259db43a0721135830274) ) + + ROM_REGION( 0x010000, "sub", 0 ) /* MC68HC11M0 code */ + ROM_LOAD( "e17-23.ic65", 0x000000, 0x010000, CRC(80ac1428) SHA1(5a2a1e60a11ecdb8743c20ddacfb61f9fd00f01c) ) + + ROM_REGION( 0x4000, "dsp", ROMREGION_ERASE00 ) /* TMS320C51 internal rom */ + ROM_LOAD16_WORD( "e07-11.ic29", 0x0000, 0x4000, NO_DUMP ) + + ROM_REGION( 0x1800000, "gfx1", 0 ) + ROM_LOAD32_WORD( "e23-05.ic9", 0x0800002, 0x200000, CRC(6e5d11ec) SHA1(e5c39d80577bf8ae9fc6162dc54571c6c8421160) ) + ROM_LOAD32_WORD( "e23-12.ic22", 0x0800000, 0x200000, CRC(7365333c) SHA1(4f7b75088799ea37f714bc7e5c5b276a7e5d933f) ) + ROM_LOAD32_WORD( "e23-06.ic10", 0x0c00002, 0x200000, CRC(ffcfd153) SHA1(65fa486cf0156e2988bd6e7060d66f87f765a123) ) + ROM_LOAD32_WORD( "e23-13.ic23", 0x0c00000, 0x200000, CRC(16982d37) SHA1(134370f7dfadb1886f1e5e5dd16f8b72ad08fc68) ) + ROM_LOAD32_WORD( "e23-07.ic12", 0x1400002, 0x200000, CRC(90f2a87c) SHA1(770bb89fa42cb2a1d5a58525b8d72ed7df3f93ed) ) + ROM_LOAD32_WORD( "e23-14.ic25", 0x1400000, 0x200000, CRC(1bc5a914) SHA1(92f82a4e2fbac73dbb3293726fc09022bd11a8fe) ) + + ROM_REGION( 0x1000000, "gfx2", 0 ) /* only accessible to the TMS */ + ROM_LOAD( "e23-01.ic5", 0x0000000, 0x200000, CRC(2cbe4bbd) SHA1(ed6fe4344c86d50914b5ddbc720dd15544f4d07f) ) + ROM_LOAD( "e23-02.ic6", 0x0200000, 0x200000, CRC(7ebada03) SHA1(d75c992aa33dd7f71de6a6d09aac471012b0daa3) ) + ROM_LOAD( "e23-03.ic7", 0x0400000, 0x200000, CRC(5bf1f30b) SHA1(6e0c07b9f92962eec55ee444732a10ac78f8b050) ) + ROM_LOAD( "e23-04.ic8", 0x0600000, 0x200000, CRC(0f860fb5) SHA1(47c0db4ec6d02e10d8abfacd1fa332f7af3976dd) ) + ROM_LOAD( "e23-08.ic18", 0x0800000, 0x200000, CRC(bceea63e) SHA1(eeec1e2306aa37431c5ba69bdb9c5524ab7b7ba4) ) + ROM_LOAD( "e23-09.ic19", 0x0a00000, 0x200000, CRC(3917c12f) SHA1(e3a568f638bb6b0cd6237c9fee5fc350983ea1e7) ) + ROM_LOAD( "e23-10.ic20", 0x0c00000, 0x200000, CRC(038370d9) SHA1(c02f68a25121d2d5aae62c419522b25cd6ec32b6) ) + ROM_LOAD( "e23-11.ic21", 0x0e00000, 0x200000, CRC(91fab03d) SHA1(1865d8b679faa6f2b3c14db2c6c461c00afd547c) ) + + ROM_REGION16_BE( 0x1000000, "ensoniq.0", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "e23-15.ic32", 0x000000, 0x200000, CRC(8955b7c7) SHA1(767626bd5cf6810b0368ee85e487c12ef7e8a23d) ) + ROM_LOAD16_BYTE( "e23-16.ic33", 0x400000, 0x200000, CRC(1d63d785) SHA1(0cf74bb433e9c453e35f7a552fdf9e22084b2f49) ) + ROM_LOAD16_BYTE( "e23-17.ic34", 0x800000, 0x200000, CRC(1c54021a) SHA1(a1efbdb02d23a5d32ebd25cb8e99dface3178ebd) ) + ROM_LOAD16_BYTE( "e23-18.ic35", 0xc00000, 0x200000, CRC(1816f38a) SHA1(6451bdb4b4297aaf4987451bc0ddd97b0072e113) ) +ROM_END + +ROM_START( sidebsja ) /* Side by Side ver 2.5 J */ + ROM_REGION(0x200000, "maincpu", 0) /* 68040 code */ + ROM_LOAD32_BYTE( "e23-19.ic36", 0x000000, 0x80000, CRC(7b75481b) SHA1(47332e045f92b31e4f35c38e6880a7287b9a5c2c) ) + ROM_LOAD32_BYTE( "e23-20.ic37", 0x000001, 0x80000, CRC(cbd857dd) SHA1(ae33ad8b0c3559a3a9096351e9aa07782d3cb841) ) + ROM_LOAD32_BYTE( "e23-21.ic38", 0x000002, 0x80000, CRC(357f2e10) SHA1(226922f2649d9ac78d253200f5bbff4fb3ac74c8) ) + ROM_LOAD32_BYTE( "e23-22.ic39", 0x000003, 0x80000, CRC(c793ba43) SHA1(0ddbf625320968b4e18309d8e732ce4a2b9f4bce) ) + + ROM_REGION( 0x180000, "audiocpu", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "e23-23.ic30", 0x100001, 0x40000, CRC(cffbffe5) SHA1(c01ac44390dacab4b49bb066a46d81a184b07a1e) ) + ROM_LOAD16_BYTE( "e23-24.ic31", 0x100000, 0x40000, CRC(64bae246) SHA1(f929f664881487615b1259db43a0721135830274) ) + + ROM_REGION( 0x010000, "sub", 0 ) /* MC68HC11M0 code */ + ROM_LOAD( "e17-23.ic65", 0x000000, 0x010000, CRC(80ac1428) SHA1(5a2a1e60a11ecdb8743c20ddacfb61f9fd00f01c) ) + + ROM_REGION( 0x4000, "dsp", ROMREGION_ERASE00 ) /* TMS320C51 internal rom */ + ROM_LOAD16_WORD( "e07-11.ic29", 0x0000, 0x4000, NO_DUMP ) + + ROM_REGION( 0x1800000, "gfx1", 0 ) + ROM_LOAD32_WORD( "e23-05.ic9", 0x0800002, 0x200000, CRC(6e5d11ec) SHA1(e5c39d80577bf8ae9fc6162dc54571c6c8421160) ) + ROM_LOAD32_WORD( "e23-12.ic22", 0x0800000, 0x200000, CRC(7365333c) SHA1(4f7b75088799ea37f714bc7e5c5b276a7e5d933f) ) + ROM_LOAD32_WORD( "e23-06.ic10", 0x0c00002, 0x200000, CRC(ffcfd153) SHA1(65fa486cf0156e2988bd6e7060d66f87f765a123) ) + ROM_LOAD32_WORD( "e23-13.ic23", 0x0c00000, 0x200000, CRC(16982d37) SHA1(134370f7dfadb1886f1e5e5dd16f8b72ad08fc68) ) + ROM_LOAD32_WORD( "e23-07.ic12", 0x1400002, 0x200000, CRC(90f2a87c) SHA1(770bb89fa42cb2a1d5a58525b8d72ed7df3f93ed) ) + ROM_LOAD32_WORD( "e23-14.ic25", 0x1400000, 0x200000, CRC(1bc5a914) SHA1(92f82a4e2fbac73dbb3293726fc09022bd11a8fe) ) + + ROM_REGION( 0x1000000, "gfx2", 0 ) /* only accessible to the TMS */ + ROM_LOAD( "e23-01.ic5", 0x0000000, 0x200000, CRC(2cbe4bbd) SHA1(ed6fe4344c86d50914b5ddbc720dd15544f4d07f) ) + ROM_LOAD( "e23-02.ic6", 0x0200000, 0x200000, CRC(7ebada03) SHA1(d75c992aa33dd7f71de6a6d09aac471012b0daa3) ) + ROM_LOAD( "e23-03.ic7", 0x0400000, 0x200000, CRC(5bf1f30b) SHA1(6e0c07b9f92962eec55ee444732a10ac78f8b050) ) + ROM_LOAD( "e23-04.ic8", 0x0600000, 0x200000, CRC(0f860fb5) SHA1(47c0db4ec6d02e10d8abfacd1fa332f7af3976dd) ) + ROM_LOAD( "e23-08.ic18", 0x0800000, 0x200000, CRC(bceea63e) SHA1(eeec1e2306aa37431c5ba69bdb9c5524ab7b7ba4) ) + ROM_LOAD( "e23-09.ic19", 0x0a00000, 0x200000, CRC(3917c12f) SHA1(e3a568f638bb6b0cd6237c9fee5fc350983ea1e7) ) + ROM_LOAD( "e23-10.ic20", 0x0c00000, 0x200000, CRC(038370d9) SHA1(c02f68a25121d2d5aae62c419522b25cd6ec32b6) ) + ROM_LOAD( "e23-11.ic21", 0x0e00000, 0x200000, CRC(91fab03d) SHA1(1865d8b679faa6f2b3c14db2c6c461c00afd547c) ) + + ROM_REGION16_BE( 0x1000000, "ensoniq.0", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "e23-15.ic32", 0x000000, 0x200000, CRC(8955b7c7) SHA1(767626bd5cf6810b0368ee85e487c12ef7e8a23d) ) + ROM_LOAD16_BYTE( "e23-16.ic33", 0x400000, 0x200000, CRC(1d63d785) SHA1(0cf74bb433e9c453e35f7a552fdf9e22084b2f49) ) + ROM_LOAD16_BYTE( "e23-17.ic34", 0x800000, 0x200000, CRC(1c54021a) SHA1(a1efbdb02d23a5d32ebd25cb8e99dface3178ebd) ) + ROM_LOAD16_BYTE( "e23-18.ic35", 0xc00000, 0x200000, CRC(1816f38a) SHA1(6451bdb4b4297aaf4987451bc0ddd97b0072e113) ) +ROM_END + +ROM_START( sidebs2 ) + ROM_REGION(0x200000, "maincpu", 0) /* 68040 code */ + ROM_LOAD32_BYTE( "sbs2_p0.ic36", 0x000000, 0x80000, CRC(2dd78d09) SHA1(f0a0105c3f2827c8b55d1bc58ebeea0f71150fed) ) + ROM_LOAD32_BYTE( "sbs2_p1.ic37", 0x000001, 0x80000, CRC(befeda1d) SHA1(3171c87b0872f3206653900e3dbd210ea9beba61) ) + ROM_LOAD32_BYTE( "sbs2_p2.ic38", 0x000002, 0x80000, CRC(ade07d7e) SHA1(a5200ea3ddbfef37d302e7cb27015b6f6aa8a7c1) ) + ROM_LOAD32_BYTE( "sbs2_p3.ic39", 0x000003, 0x80000, CRC(94e943d6) SHA1(2bc7332526b969e5084b9d73063f1c0d18ec5181) ) + + ROM_REGION( 0x180000, "audiocpu", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "e38-19.ic30", 0x100001, 0x40000, CRC(3f50cb7b) SHA1(76af65c9b74ede843a3182f79cecda8c3e3febe6) ) + ROM_LOAD16_BYTE( "e38-20.ic31", 0x100000, 0x40000, CRC(d01340e7) SHA1(76ee48d644dc1ec415d47e0df4864c64ac928b9d) ) + + ROM_REGION( 0x4000, "dsp", ROMREGION_ERASE00 ) /* TMS320C51 internal rom */ + ROM_LOAD16_WORD( "e07-11.ic29", 0x0000, 0x4000, NO_DUMP ) + + ROM_REGION( 0x010000, "sub", 0 ) /* MC68HC11M0 code */ + ROM_LOAD( "e17-23.ic65", 0x000000, 0x010000, CRC(80ac1428) SHA1(5a2a1e60a11ecdb8743c20ddacfb61f9fd00f01c) ) + + ROM_REGION( 0x1800000, "gfx1", 0 ) + ROM_LOAD32_WORD( "e38-05.ic9", 0x0800002, 0x200000, CRC(bda366bf) SHA1(a7558e6d5e4583a2d8e3d2bfa8cabcc459d3ee83) ) + ROM_LOAD32_WORD( "e38-13.ic22", 0x0800000, 0x200000, CRC(1bd7582b) SHA1(35763b9489f995433f66ef72d4f6b6ac67df5480) ) + ROM_LOAD32_WORD( "e38-06.ic10", 0x0c00002, 0x200000, CRC(308d2783) SHA1(22c309273444bc6c1df78069850958a739664998) ) + ROM_LOAD32_WORD( "e38-14.ic23", 0x0c00000, 0x200000, CRC(f1699f27) SHA1(3c9a9cefe6f215fd9f0a9746da97147d14df1da4) ) + ROM_LOAD32_WORD( "e38-07.ic11", 0x1000002, 0x200000, CRC(226ba93d) SHA1(98e6342d070ddd988c1e9bff21afcfb28df86844) ) + ROM_LOAD32_WORD( "e38-15.ic24", 0x1000000, 0x200000, CRC(2853c2e3) SHA1(046dbbd4bcb3b07cddab19a284fee9fe736f8def) ) + ROM_LOAD32_WORD( "e38-08.ic12", 0x1400002, 0x200000, CRC(9c513b32) SHA1(fe26e39d3d65073d23d525bc17771f0c244a38c2) ) + ROM_LOAD32_WORD( "e38-16.ic25", 0x1400000, 0x200000, CRC(fceafae2) SHA1(540ecd5d1aa64c0428a08ea1e4e634e00f7e6bd6) ) + + ROM_REGION( 0x1000000, "gfx2", 0 ) /* only accessible to the TMS */ + ROM_LOAD( "e38-01.ic5", 0x0000000, 0x200000, CRC(a3c2e2c7) SHA1(538208534f996782167e4cf0d157ad93ce2937bd) ) + ROM_LOAD( "e38-02.ic6", 0x0200000, 0x200000, CRC(ecdfb75a) SHA1(85e7afa321846816fa3bd9074ad9dec95abe23fe) ) + ROM_LOAD( "e38-03.ic7", 0x0400000, 0x200000, CRC(28e9cb59) SHA1(a2651fd81a1263573f868864ee049f8fc4177ffa) ) + ROM_LOAD( "e38-04.ic8", 0x0600000, 0x080000, CRC(26cab05b) SHA1(d5bcf021646dade834840051e0ce083319c53985) ) + ROM_RELOAD( 0x0680000, 0x080000 ) + ROM_RELOAD( 0x0700000, 0x080000 ) + ROM_RELOAD( 0x0780000, 0x080000 ) + ROM_LOAD( "e38-09.ic18", 0x0800000, 0x200000, CRC(03c95a7f) SHA1(fc046cf5fcfcf5648f68af4bed78576f6d67b32f) ) + ROM_LOAD( "e38-10.ic19", 0x0a00000, 0x200000, CRC(0fb06794) SHA1(2d0e3b07ded698235572fe9e907a84d5779ac2c5) ) + ROM_LOAD( "e38-11.ic20", 0x0c00000, 0x200000, CRC(6a312351) SHA1(8037e377f8eef4cc6dd84aec9c829106f0bb130c) ) + ROM_LOAD( "e38-12.ic21", 0x0e00000, 0x080000, CRC(193a5774) SHA1(aa017ae4fec92bb87c0eb94f59d093853ddbabc9) ) + ROM_RELOAD( 0x0e80000, 0x080000 ) + ROM_RELOAD( 0x0f00000, 0x080000 ) + ROM_RELOAD( 0x0f80000, 0x080000 ) + + ROM_REGION16_BE( 0x1000000, "ensoniq.0", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "e23-15.ic32", 0x000000, 0x200000, CRC(8955b7c7) SHA1(767626bd5cf6810b0368ee85e487c12ef7e8a23d) ) // from sidebs (redump) + ROM_LOAD16_BYTE( "e38-17.ic33", 0x400000, 0x200000, CRC(61e81c7f) SHA1(aa650bc139685ad456c233b79aa60005a8fd6d79) ) + ROM_LOAD16_BYTE( "e38-18.ic34", 0x800000, 0x200000, CRC(43e2f149) SHA1(32ea9156948a886dda5bd071e9f493ddc2b06212) ) + ROM_LOAD16_BYTE( "e38-21.ic35", 0xc00000, 0x200000, CRC(25373c5f) SHA1(ab9f917dbde7c808be2cd836ce2d3fc558e290f1) ) + + /* PALS + e23-28.ic18 NOT A ROM + e23-27.ic13 NOT A ROM + e23-26.ic4 NOT A ROM + e23-25-1.ic3 NOT A ROM + e23-30.ic40 NOT A ROM + e23-29.ic39 NOT A ROM + e23-31.ic46 NOT A ROM + e23-32-1.ic51 NOT A ROM + e23-34.ic72 NOT A ROM + e23-33.ic53 NOT A ROM + e23-35.ic110 NOT A ROM + e23-38.ic73 NOT A ROM + e23-37.ic69 NOT A ROM + */ +ROM_END + +ROM_START( sidebs2j ) /* This version has the sub-title of "Evoluzione" */ + ROM_REGION(0x200000, "maincpu", 0) /* 68040 code */ + ROM_LOAD32_BYTE( "e38-23+.ic36", 0x000000, 0x80000, CRC(b3d8e2d9) SHA1(6de6a51c3d9ace532fa03517bab93101b5a3eaae) ) /* Actual label E38-23* */ + ROM_LOAD32_BYTE( "e38-24+.ic37", 0x000001, 0x80000, CRC(2a47d80d) SHA1(41b889e4a1397c7f0d4f6ef136ed8abfd7e1ed86) ) /* Actual label E38-24* */ + ROM_LOAD32_BYTE( "e38-25+.ic38", 0x000002, 0x80000, CRC(f1a8a4df) SHA1(e4cf75969fb0503df2290522194b097f5cb983a3) ) /* Actual label E38-25* */ + ROM_LOAD32_BYTE( "e38-26+.ic39", 0x000003, 0x80000, CRC(b550fbf2) SHA1(a0a461af7e71c6ad6468cfdee2bc7161ae31bbfb) ) /* Actual label E38-26* */ + + ROM_REGION( 0x180000, "audiocpu", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "e38-19.ic30", 0x100001, 0x040000, CRC(3f50cb7b) SHA1(76af65c9b74ede843a3182f79cecda8c3e3febe6) ) + ROM_LOAD16_BYTE( "e38-20.ic31", 0x100000, 0x040000, CRC(d01340e7) SHA1(76ee48d644dc1ec415d47e0df4864c64ac928b9d) ) + + ROM_REGION( 0x4000, "dsp", ROMREGION_ERASE00 ) /* TMS320C51 internal rom */ + ROM_LOAD16_WORD( "e07-11.ic29", 0x0000, 0x4000, NO_DUMP ) + + ROM_REGION( 0x010000, "sub", 0 ) /* MC68HC11M0 code */ + ROM_LOAD( "e17-23.ic65", 0x000000, 0x010000, CRC(80ac1428) SHA1(5a2a1e60a11ecdb8743c20ddacfb61f9fd00f01c) ) + + ROM_REGION( 0x1800000, "gfx1", 0 ) + ROM_LOAD32_WORD( "e38-05.ic9", 0x0800002, 0x200000, CRC(bda366bf) SHA1(a7558e6d5e4583a2d8e3d2bfa8cabcc459d3ee83) ) + ROM_LOAD32_WORD( "e38-13.ic22", 0x0800000, 0x200000, CRC(1bd7582b) SHA1(35763b9489f995433f66ef72d4f6b6ac67df5480) ) + ROM_LOAD32_WORD( "e38-06.ic10", 0x0c00002, 0x200000, CRC(308d2783) SHA1(22c309273444bc6c1df78069850958a739664998) ) + ROM_LOAD32_WORD( "e38-14.ic23", 0x0c00000, 0x200000, CRC(f1699f27) SHA1(3c9a9cefe6f215fd9f0a9746da97147d14df1da4) ) + ROM_LOAD32_WORD( "e38-07.ic11", 0x1000002, 0x200000, CRC(226ba93d) SHA1(98e6342d070ddd988c1e9bff21afcfb28df86844) ) + ROM_LOAD32_WORD( "e38-15.ic24", 0x1000000, 0x200000, CRC(2853c2e3) SHA1(046dbbd4bcb3b07cddab19a284fee9fe736f8def) ) + ROM_LOAD32_WORD( "e38-08.ic12", 0x1400002, 0x200000, CRC(9c513b32) SHA1(fe26e39d3d65073d23d525bc17771f0c244a38c2) ) + ROM_LOAD32_WORD( "e38-16.ic25", 0x1400000, 0x200000, CRC(fceafae2) SHA1(540ecd5d1aa64c0428a08ea1e4e634e00f7e6bd6) ) + + ROM_REGION( 0x1000000, "gfx2", 0 ) /* only accessible to the TMS */ + ROM_LOAD( "e38-01.ic5", 0x0000000, 0x200000, CRC(a3c2e2c7) SHA1(538208534f996782167e4cf0d157ad93ce2937bd) ) + ROM_LOAD( "e38-02.ic6", 0x0200000, 0x200000, CRC(ecdfb75a) SHA1(85e7afa321846816fa3bd9074ad9dec95abe23fe) ) + ROM_LOAD( "e38-03.ic7", 0x0400000, 0x200000, CRC(28e9cb59) SHA1(a2651fd81a1263573f868864ee049f8fc4177ffa) ) + ROM_LOAD( "e38-04.ic8", 0x0600000, 0x080000, CRC(26cab05b) SHA1(d5bcf021646dade834840051e0ce083319c53985) ) + ROM_RELOAD( 0x0680000, 0x080000 ) + ROM_RELOAD( 0x0700000, 0x080000 ) + ROM_RELOAD( 0x0780000, 0x080000 ) + ROM_LOAD( "e38-09.ic18", 0x0800000, 0x200000, CRC(03c95a7f) SHA1(fc046cf5fcfcf5648f68af4bed78576f6d67b32f) ) + ROM_LOAD( "e38-10.ic19", 0x0a00000, 0x200000, CRC(0fb06794) SHA1(2d0e3b07ded698235572fe9e907a84d5779ac2c5) ) + ROM_LOAD( "e38-11.ic20", 0x0c00000, 0x200000, CRC(6a312351) SHA1(8037e377f8eef4cc6dd84aec9c829106f0bb130c) ) + ROM_LOAD( "e38-12.ic21", 0x0e00000, 0x080000, CRC(193a5774) SHA1(aa017ae4fec92bb87c0eb94f59d093853ddbabc9) ) + ROM_RELOAD( 0x0e80000, 0x080000 ) + ROM_RELOAD( 0x0f00000, 0x080000 ) + ROM_RELOAD( 0x0f80000, 0x080000 ) + + ROM_REGION16_BE( 0x1000000, "ensoniq.0", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "e23-15.ic32", 0x000000, 0x200000, CRC(8955b7c7) SHA1(767626bd5cf6810b0368ee85e487c12ef7e8a23d) ) // from sidebs (redump) + ROM_LOAD16_BYTE( "e38-17.ic33", 0x400000, 0x200000, CRC(61e81c7f) SHA1(aa650bc139685ad456c233b79aa60005a8fd6d79) ) + ROM_LOAD16_BYTE( "e38-18.ic34", 0x800000, 0x200000, CRC(43e2f149) SHA1(32ea9156948a886dda5bd071e9f493ddc2b06212) ) + ROM_LOAD16_BYTE( "e38-21.ic35", 0xc00000, 0x200000, CRC(25373c5f) SHA1(ab9f917dbde7c808be2cd836ce2d3fc558e290f1) ) + + /* PALS + e23-28.ic18 NOT A ROM + e23-27.ic13 NOT A ROM + e23-26.ic4 NOT A ROM + e23-25-1.ic3 NOT A ROM + e23-30.ic40 NOT A ROM + e23-29.ic39 NOT A ROM + e23-31.ic46 NOT A ROM + e23-32-1.ic51 NOT A ROM + e23-34.ic72 NOT A ROM + e23-33.ic53 NOT A ROM + e23-35.ic110 NOT A ROM + e23-38.ic73 NOT A ROM + e23-37.ic69 NOT A ROM + */ +ROM_END + +ROM_START( dendego ) + ROM_REGION( 0x200000, "maincpu", 0 ) /* 68040 code */ + ROM_LOAD32_BYTE( "e35-21.ic36", 0x000000, 0x80000, CRC(bc70ca97) SHA1(724a24da9d6f163c26e7528ee2c15bd06f2c4382) ) + ROM_LOAD32_BYTE( "e35-22.ic37", 0x000001, 0x80000, CRC(83b17de8) SHA1(538ddc16727e08e9a2a8ff6b4f030dc044993aa0) ) + ROM_LOAD32_BYTE( "e35-23.ic38", 0x000002, 0x80000, CRC(1da4acd6) SHA1(2ce11c5f37287526bb1d39185f793d79fc73d5b5) ) + ROM_LOAD32_BYTE( "e35-24.ic39", 0x000003, 0x80000, CRC(0318afb0) SHA1(9c86330c85536fb1a093ed40610b1c3ddb7813c3) ) + + ROM_REGION( 0x180000, "audiocpu", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "e35-25.ic30", 0x100001, 0x40000, CRC(8104de13) SHA1(e518fbaf91704cf5cb8ffbb4833e3adba8c18658) ) + ROM_LOAD16_BYTE( "e35-26.ic31", 0x100000, 0x40000, CRC(61821cc9) SHA1(87cd5bd3bb22c9f4ca4b6d96f75434d48418321b) ) + + ROM_REGION( 0x4000, "dsp", ROMREGION_ERASE00 ) /* TMS320C51 internal rom */ + ROM_LOAD16_WORD( "e07-11.ic29", 0x0000, 0x4000, NO_DUMP ) + + ROM_REGION( 0x010000, "sub", 0 ) /* MC68HC11M0 code */ + ROM_LOAD( "e17-23.ic65", 0x000000, 0x010000, CRC(80ac1428) SHA1(5a2a1e60a11ecdb8743c20ddacfb61f9fd00f01c) ) + + ROM_REGION( 0x1800000, "gfx1", 0 ) + ROM_LOAD32_WORD( "e35-05.ic9", 0x0800002, 0x200000, CRC(a94486c5) SHA1(c3f869aa0557411f747038a1e0ed6eedcf91fda5) ) + ROM_LOAD32_WORD( "e35-13.ic22", 0x0800000, 0x200000, CRC(2dc9dff1) SHA1(bc7ad64bc359f18a065e36749cc29c75e52202e2) ) + ROM_LOAD32_WORD( "e35-06.ic10", 0x0c00002, 0x200000, CRC(cf328021) SHA1(709ce80f9338637172dbf4e9adcacdb3e5b4ccdb) ) + ROM_LOAD32_WORD( "e35-14.ic23", 0x0c00000, 0x200000, CRC(cab50364) SHA1(e3272f844ecadfd63a1e3c965526a851f8cde94d) ) + ROM_LOAD32_WORD( "e35-07.ic11", 0x1000002, 0x200000, CRC(a88a5a86) SHA1(a4a393fe9df3654e41d32e015ca3977d13206dfe) ) + ROM_LOAD32_WORD( "e35-15.ic24", 0x1000000, 0x200000, CRC(aea86b35) SHA1(092f34f844fc6a779a6f18c03d44a9d39a101373) ) + ROM_LOAD32_WORD( "e35-08.ic12", 0x1400002, 0x200000, CRC(99425ff6) SHA1(3bd6fe7204dece55459392170b42d4c6a9d3ef5b) ) + ROM_LOAD32_WORD( "e35-16.ic25", 0x1400000, 0x200000, CRC(161481b6) SHA1(cc3c2939ac8911c197e9930580d316066f345772) ) + + ROM_REGION( 0x1000000, "gfx2", 0 ) /* only accessible to the TMS */ + ROM_LOAD( "e35-01.ic5", 0x0000000, 0x200000, CRC(bd1975cb) SHA1(a08c6f4a84f9d4c2a5aa67cc2045aedd4580b8dc) ) + ROM_LOAD( "e35-02.ic6", 0x0200000, 0x200000, CRC(e5caa459) SHA1(c38d795b96fff193223cd3df9f51ebdc2971b719) ) + ROM_LOAD( "e35-03.ic7", 0x0400000, 0x200000, CRC(86ea5bcf) SHA1(1cee7f677b786b2fa9f50e723decd08cd69fbdef) ) + ROM_LOAD( "e35-04.ic8", 0x0600000, 0x200000, CRC(afc07c36) SHA1(f3f7b04766a9a2c8b298e1692aea24abc7001432) ) + ROM_LOAD( "e35-09.ic18", 0x0800000, 0x200000, CRC(be18ddf1) SHA1(d4fe26e427244c5b421b6421ff3bf9af303673d5) ) + ROM_LOAD( "e35-10.ic19", 0x0a00000, 0x200000, CRC(44ea9474) SHA1(161ff94b31c3dc2fa4b1e556ed62624147687443) ) + ROM_LOAD( "e35-11.ic20", 0x0c00000, 0x200000, CRC(dc8f5e88) SHA1(e311252db8a7232a5325a3eff5c1890d20bd3f8f) ) + ROM_LOAD( "e35-12.ic21", 0x0e00000, 0x200000, CRC(039b604c) SHA1(7e394e7cddc6bf42f3834d5331203e8496597a90) ) + + ROM_REGION( 0x40000, "oki", 0 ) /* train board, OKI6295 sound samples */ + ROM_LOAD( "e35-28.trn", 0x000000, 0x040000, CRC(d1b571c1) SHA1(cac7d3f0285544fe36b8b744edfbac0190cdecab) ) + + ROM_REGION16_BE( 0x1000000, "ensoniq.0", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "e35-17.ic32", 0x000000, 0x200000, CRC(3bc23aa1) SHA1(621e0f2f5f3dbd7d7ce05c9cd317958c361c1c26) ) + ROM_LOAD16_BYTE( "e35-18.ic33", 0x400000, 0x200000, CRC(a084d3aa) SHA1(18ea39366006e362e16d6732ce3e79cd3bfa041e) ) + ROM_LOAD16_BYTE( "e35-19.ic34", 0x800000, 0x200000, CRC(ebe2dcef) SHA1(16ae41e0f3bb242cbc2922f53cacbd99961a3f97) ) + ROM_LOAD16_BYTE( "e35-20.ic35", 0xc00000, 0x200000, CRC(a1d4b30d) SHA1(e02f613b93d3b3ee1eb23f5b7f62c5448ed3966d) ) +ROM_END + +ROM_START( dendegox ) + ROM_REGION( 0x200000, "maincpu", 0 ) /* 68040 code */ + ROM_LOAD32_BYTE( "e35-30.ic36", 0x000000, 0x80000, CRC(57ee0975) SHA1(c7741a7e0e9c1fdebc6b942587d7ac5a6f26f66d) ) //ex + ROM_LOAD32_BYTE( "e35-31.ic37", 0x000001, 0x80000, CRC(bd5f2651) SHA1(73b760df351170ace019e4b61c82d8c6296a3632) ) //ex + ROM_LOAD32_BYTE( "e35-32.ic38", 0x000002, 0x80000, CRC(66be29d5) SHA1(e73937f5bda709a606d5cdf7316b26051317c22f) ) //ex + ROM_LOAD32_BYTE( "e35-33.ic39", 0x000003, 0x80000, CRC(76a6bde2) SHA1(ca456ec3f0410777362e3eb977ae156866271bd5) ) //ex + + ROM_REGION( 0x180000, "audiocpu", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "e35-25.ic30", 0x100001, 0x40000, CRC(8104de13) SHA1(e518fbaf91704cf5cb8ffbb4833e3adba8c18658) ) + ROM_LOAD16_BYTE( "e35-26.ic31", 0x100000, 0x40000, CRC(61821cc9) SHA1(87cd5bd3bb22c9f4ca4b6d96f75434d48418321b) ) + + ROM_REGION( 0x4000, "dsp", ROMREGION_ERASE00 ) /* TMS320C51 internal rom */ + ROM_LOAD16_WORD( "e07-11.ic29", 0x0000, 0x4000, NO_DUMP ) + + ROM_REGION( 0x010000, "sub", 0 ) /* MC68HC11M0 code */ + ROM_LOAD( "e17-23.ic65", 0x000000, 0x010000, CRC(80ac1428) SHA1(5a2a1e60a11ecdb8743c20ddacfb61f9fd00f01c) ) + + ROM_REGION( 0x1800000, "gfx1", 0 ) + ROM_LOAD32_WORD( "e35-05.ic9", 0x0800002, 0x200000, CRC(a94486c5) SHA1(c3f869aa0557411f747038a1e0ed6eedcf91fda5) ) + ROM_LOAD32_WORD( "e35-13.ic22", 0x0800000, 0x200000, CRC(2dc9dff1) SHA1(bc7ad64bc359f18a065e36749cc29c75e52202e2) ) + ROM_LOAD32_WORD( "e35-06.ic10", 0x0c00002, 0x200000, CRC(cf328021) SHA1(709ce80f9338637172dbf4e9adcacdb3e5b4ccdb) ) + ROM_LOAD32_WORD( "e35-14.ic23", 0x0c00000, 0x200000, CRC(cab50364) SHA1(e3272f844ecadfd63a1e3c965526a851f8cde94d) ) + ROM_LOAD32_WORD( "e35-07.ic11", 0x1000002, 0x200000, CRC(a88a5a86) SHA1(a4a393fe9df3654e41d32e015ca3977d13206dfe) ) + ROM_LOAD32_WORD( "e35-15.ic24", 0x1000000, 0x200000, CRC(aea86b35) SHA1(092f34f844fc6a779a6f18c03d44a9d39a101373) ) + ROM_LOAD32_WORD( "e35-08.ic12", 0x1400002, 0x200000, CRC(99425ff6) SHA1(3bd6fe7204dece55459392170b42d4c6a9d3ef5b) ) + ROM_LOAD32_WORD( "e35-16.ic25", 0x1400000, 0x200000, CRC(161481b6) SHA1(cc3c2939ac8911c197e9930580d316066f345772) ) + + ROM_REGION( 0x1000000, "gfx2", 0 ) /* only accessible to the TMS */ + ROM_LOAD( "e35-01.ic5", 0x0000000, 0x200000, CRC(bd1975cb) SHA1(a08c6f4a84f9d4c2a5aa67cc2045aedd4580b8dc) ) + ROM_LOAD( "e35-02.ic6", 0x0200000, 0x200000, CRC(e5caa459) SHA1(c38d795b96fff193223cd3df9f51ebdc2971b719) ) + ROM_LOAD( "e35-03.ic7", 0x0400000, 0x200000, CRC(86ea5bcf) SHA1(1cee7f677b786b2fa9f50e723decd08cd69fbdef) ) + ROM_LOAD( "e35-04.ic8", 0x0600000, 0x200000, CRC(afc07c36) SHA1(f3f7b04766a9a2c8b298e1692aea24abc7001432) ) + ROM_LOAD( "e35-09.ic18", 0x0800000, 0x200000, CRC(be18ddf1) SHA1(d4fe26e427244c5b421b6421ff3bf9af303673d5) ) + ROM_LOAD( "e35-10.ic19", 0x0a00000, 0x200000, CRC(44ea9474) SHA1(161ff94b31c3dc2fa4b1e556ed62624147687443) ) + ROM_LOAD( "e35-11.ic20", 0x0c00000, 0x200000, CRC(dc8f5e88) SHA1(e311252db8a7232a5325a3eff5c1890d20bd3f8f) ) + ROM_LOAD( "e35-12.ic21", 0x0e00000, 0x200000, CRC(039b604c) SHA1(7e394e7cddc6bf42f3834d5331203e8496597a90) ) + + ROM_REGION( 0x40000, "oki", 0 ) /* train board, OKI6295 sound samples */ + ROM_LOAD( "e35-28.trn", 0x000000, 0x040000, CRC(d1b571c1) SHA1(cac7d3f0285544fe36b8b744edfbac0190cdecab) ) + + ROM_REGION16_BE( 0x1000000, "ensoniq.0", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "e35-17.ic32", 0x000000, 0x200000, CRC(3bc23aa1) SHA1(621e0f2f5f3dbd7d7ce05c9cd317958c361c1c26) ) + ROM_LOAD16_BYTE( "e35-18.ic33", 0x400000, 0x200000, CRC(a084d3aa) SHA1(18ea39366006e362e16d6732ce3e79cd3bfa041e) ) + ROM_LOAD16_BYTE( "e35-19.ic34", 0x800000, 0x200000, CRC(ebe2dcef) SHA1(16ae41e0f3bb242cbc2922f53cacbd99961a3f97) ) + ROM_LOAD16_BYTE( "e35-20.ic35", 0xc00000, 0x200000, CRC(a1d4b30d) SHA1(e02f613b93d3b3ee1eb23f5b7f62c5448ed3966d) ) +ROM_END + +ROM_START( dendego2 ) + ROM_REGION( 0x200000, "maincpu", 0 ) /* 68040 code */ + ROM_LOAD32_BYTE( "e52-25-1.ic36", 0x000000, 0x80000, CRC(fadf5b4c) SHA1(48f3e1425bb9552d472a2720e1c9a752db2b43ed) ) + ROM_LOAD32_BYTE( "e52-26-1.ic37", 0x000001, 0x80000, CRC(7cf5230d) SHA1(b3416886d7cfc88520f6bf378529086bf0095db5) ) + ROM_LOAD32_BYTE( "e52-27-1.ic38", 0x000002, 0x80000, CRC(25f0d81d) SHA1(c33c3e6b1ad49b63b31a2f1227d43141faef4eab) ) + ROM_LOAD32_BYTE( "e52-28-1.ic39", 0x000003, 0x80000, CRC(e76ff6a1) SHA1(674c00f19df034de8134d48a8c2d2e42f7eb1be7) ) + + ROM_REGION( 0x180000, "audiocpu", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "e52-29.ic30", 0x100001, 0x40000, CRC(6010162a) SHA1(f14920b26887f5387b3e261b63573d850195982a) ) + ROM_LOAD16_BYTE( "e52-30.ic31", 0x100000, 0x40000, CRC(2881af4a) SHA1(5918f6508b3cd3bef3751e3bda2a48152569c1cd) ) + + ROM_REGION( 0x4000, "dsp", ROMREGION_ERASE00 ) /* TMS320C51 internal rom */ + ROM_LOAD16_WORD( "e07-11.ic29", 0x0000, 0x4000, NO_DUMP ) + + ROM_REGION( 0x010000, "sub", 0 ) /* MC68HC11M0 code */ + ROM_LOAD( "e17-23.ic65", 0x000000, 0x010000, CRC(80ac1428) SHA1(5a2a1e60a11ecdb8743c20ddacfb61f9fd00f01c) ) + + ROM_REGION( 0x1800000, "gfx1", 0 ) + ROM_LOAD32_WORD( "e52-17.ic52", 0x0000002, 0x200000, CRC(4ac11921) SHA1(c4816e1d68bb52ee59e7a2e6de617c1093020944) ) + ROM_LOAD32_WORD( "e52-18.ic53", 0x0000000, 0x200000, CRC(7f3e4af7) SHA1(ab35744014175a802e73c8b70de4e7508f0a1cd1) ) + ROM_LOAD32_WORD( "e52-19.ic54", 0x0400002, 0x200000, CRC(2e5ff408) SHA1(91f95721b98198082e950c50f33324820719e9ed) ) + ROM_LOAD32_WORD( "e52-20.ic55", 0x0400000, 0x200000, CRC(e90eb71e) SHA1(f07518c718f773e20412393c0ebb3243f9b1d96c) ) + ROM_LOAD32_WORD( "e52-05.ic9", 0x0800002, 0x200000, CRC(1ad0c612) SHA1(4ffc373fca8c1e1a5edbad3305b08f0867e9809c) ) + ROM_LOAD32_WORD( "e52-13.ic22", 0x0800000, 0x200000, CRC(943af3f4) SHA1(bfc81aa5e5c22e44601428b9e980f09d0c65e38e) ) + ROM_LOAD32_WORD( "e52-06.ic10", 0x0c00002, 0x200000, CRC(aa35e536) SHA1(2c1b2ee0d2587db6d6dd60b081bfcef3bb0dd9fa) ) + ROM_LOAD32_WORD( "e52-14.ic23", 0x0c00000, 0x200000, CRC(f311a9b4) SHA1(1f25571ac9468d453e92886e003400fffdc149f2) ) + ROM_LOAD32_WORD( "e52-07.ic11", 0x1000002, 0x200000, CRC(80a27984) SHA1(57b8c41809de09582600b8ff30c135d5abd044b8) ) + ROM_LOAD32_WORD( "e52-15.ic24", 0x1000000, 0x200000, CRC(b45a6199) SHA1(9339a1520b38d1f6538171a0b01df87de3e9c2d1) ) + ROM_LOAD32_WORD( "e52-08.ic12", 0x1400002, 0x200000, CRC(d52e6b9c) SHA1(382a5fd4533ab641a09321208464d83f72e161e3) ) + ROM_LOAD32_WORD( "e52-16.ic25", 0x1400000, 0x200000, CRC(db6dd6e2) SHA1(d345dbd745514d4777d52c4360787ea8c462ffb1) ) + + ROM_REGION( 0x1000000, "gfx2", 0 ) /* only accessible to the TMS */ + ROM_LOAD( "e52-01.ic5", 0x0000000, 0x200000, CRC(8db39c3c) SHA1(74b3305ebdf679ae274c73b7b32d2adea602bedc) ) + ROM_LOAD( "e52-02.ic6", 0x0200000, 0x200000, CRC(b8d6f066) SHA1(99553ad66643ebf7fc71a9aee526d8f206b41dcc) ) + ROM_LOAD( "e52-03.ic7", 0x0400000, 0x200000, CRC(a37d164b) SHA1(767a7d2de8b91a00c5fe74710937457e8568a422) ) + ROM_LOAD( "e52-04.ic8", 0x0600000, 0x200000, CRC(403a4142) SHA1(aa5fea79a7a838642152586689d0f9b33311252c) ) + ROM_LOAD( "e52-09.ic18", 0x0800000, 0x200000, CRC(830e0a3c) SHA1(ab96f380e53f72945f73a6cfcc80d12e1b1afce8) ) + ROM_LOAD( "e52-10.ic19", 0x0a00000, 0x200000, CRC(671e41c6) SHA1(281899d83dba104daf7d7c2bd0834cab4c022472) ) + ROM_LOAD( "e52-11.ic20", 0x0c00000, 0x200000, CRC(1bc22680) SHA1(1f71db88d6df3b4bdf090b77bc83a67906bb31da) ) + ROM_LOAD( "e52-12.ic21", 0x0e00000, 0x200000, CRC(a8bb91c5) SHA1(959a9fedb7839e1e4e7658d920bd5da4fd8cae48) ) + + ROM_REGION( 0x40000, "oki", 0 ) /* train board, OKI6295 sound samples */ + ROM_LOAD( "e35-28.trn", 0x000000, 0x040000, CRC(d1b571c1) SHA1(cac7d3f0285544fe36b8b744edfbac0190cdecab) ) + + ROM_REGION16_BE( 0x1000000, "ensoniq.0", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "e52-21.ic32", 0x000000, 0x200000, CRC(ba58081d) SHA1(bcb6c8781191d48f906ed404a3e7388097a64781) ) + ROM_LOAD16_BYTE( "e52-22.ic33", 0x400000, 0x200000, CRC(dda281b1) SHA1(4851a6bf7902548c5033090a0e5c15f74c00ef58) ) + ROM_LOAD16_BYTE( "e52-23.ic34", 0x800000, 0x200000, CRC(ebe2dcef) SHA1(16ae41e0f3bb242cbc2922f53cacbd99961a3f97) ) // same as e35-19.ic34 from dendego + ROM_LOAD16_BYTE( "e52-24.ic35", 0xc00000, 0x200000, CRC(a9a678da) SHA1(b980ae644ef0312acd63b017028af9bf2b084c29) ) +ROM_END + +ROM_START( dendego23k ) + ROM_REGION( 0x200000, "maincpu", 0 ) /* 68040 code */ + ROM_LOAD32_BYTE( "e52-35.ic36", 0x000000, 0x80000, CRC(d5b33eb8) SHA1(e05ad73986741827b7bbeac72af0a8324384bf6b) ) //2ex + ROM_LOAD32_BYTE( "e52-36.ic37", 0x000001, 0x80000, CRC(f3f3fabd) SHA1(4f88080091af2208d671c491284d992b5036908c) ) //2ex + ROM_LOAD32_BYTE( "e52-37.ic38", 0x000002, 0x80000, CRC(65b8ef31) SHA1(b61b391b160e81715ff355aeef65026d7e4dd9af) ) //2ex + ROM_LOAD32_BYTE( "e52-38.ic39", 0x000003, 0x80000, CRC(cf61f321) SHA1(c8493d2499afba673174b26044aca537e384916c) ) //2ex + + ROM_REGION( 0x180000, "audiocpu", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "e52-29.ic30", 0x100001, 0x40000, CRC(6010162a) SHA1(f14920b26887f5387b3e261b63573d850195982a) ) + ROM_LOAD16_BYTE( "e52-30.ic31", 0x100000, 0x40000, CRC(2881af4a) SHA1(5918f6508b3cd3bef3751e3bda2a48152569c1cd) ) + + ROM_REGION( 0x4000, "dsp", ROMREGION_ERASE00 ) /* TMS320C51 internal rom */ + ROM_LOAD16_WORD( "e07-11.ic29", 0x0000, 0x4000, NO_DUMP ) + + ROM_REGION( 0x010000, "sub", 0 ) /* MC68HC11M0 code */ + ROM_LOAD( "e17-23.ic65", 0x000000, 0x010000, CRC(80ac1428) SHA1(5a2a1e60a11ecdb8743c20ddacfb61f9fd00f01c) ) + + ROM_REGION( 0x1800000, "gfx1", 0 ) + ROM_LOAD32_WORD( "e52-17.ic52", 0x0000002, 0x200000, CRC(4ac11921) SHA1(c4816e1d68bb52ee59e7a2e6de617c1093020944) ) + ROM_LOAD32_WORD( "e52-18.ic53", 0x0000000, 0x200000, CRC(7f3e4af7) SHA1(ab35744014175a802e73c8b70de4e7508f0a1cd1) ) + ROM_LOAD32_WORD( "e52-19.ic54", 0x0400002, 0x200000, CRC(2e5ff408) SHA1(91f95721b98198082e950c50f33324820719e9ed) ) + ROM_LOAD32_WORD( "e52-20.ic55", 0x0400000, 0x200000, CRC(e90eb71e) SHA1(f07518c718f773e20412393c0ebb3243f9b1d96c) ) + ROM_LOAD32_WORD( "e52-05.ic9", 0x0800002, 0x200000, CRC(1ad0c612) SHA1(4ffc373fca8c1e1a5edbad3305b08f0867e9809c) ) + ROM_LOAD32_WORD( "e52-13.ic22", 0x0800000, 0x200000, CRC(943af3f4) SHA1(bfc81aa5e5c22e44601428b9e980f09d0c65e38e) ) + ROM_LOAD32_WORD( "e52-31.ic10", 0x0c00002, 0x200000, CRC(e9e2eb3d) SHA1(97e2dc907faa512d3fb140dafe3250f04991ff07) ) //2ex + ROM_LOAD32_WORD( "e52-33.ic23", 0x0c00000, 0x200000, CRC(6906f41f) SHA1(0d3f6fc4772417190d123ad38b0b8a8a532159c6) ) //2ex + ROM_LOAD32_WORD( "e52-32.ic11", 0x1000002, 0x200000, CRC(43d452fd) SHA1(20a4064904cf2f21d5f03236c99c9e21a49a1206) ) //2ex + ROM_LOAD32_WORD( "e52-34.ic24", 0x1000000, 0x200000, CRC(4ae1064b) SHA1(a5f1ad3262f8ffd09e9063a6dbe98d883b11a156) ) //2ex + ROM_LOAD32_WORD( "e52-08.ic12", 0x1400002, 0x200000, CRC(d52e6b9c) SHA1(382a5fd4533ab641a09321208464d83f72e161e3) ) + ROM_LOAD32_WORD( "e52-16.ic25", 0x1400000, 0x200000, CRC(db6dd6e2) SHA1(d345dbd745514d4777d52c4360787ea8c462ffb1) ) + + ROM_REGION( 0x1000000, "gfx2", 0 ) /* only accessible to the TMS */ + ROM_LOAD( "e52-01.ic5", 0x0000000, 0x200000, CRC(8db39c3c) SHA1(74b3305ebdf679ae274c73b7b32d2adea602bedc) ) + ROM_LOAD( "e52-02.ic6", 0x0200000, 0x200000, CRC(b8d6f066) SHA1(99553ad66643ebf7fc71a9aee526d8f206b41dcc) ) + ROM_LOAD( "e52-03.ic7", 0x0400000, 0x200000, CRC(a37d164b) SHA1(767a7d2de8b91a00c5fe74710937457e8568a422) ) + ROM_LOAD( "e52-04.ic8", 0x0600000, 0x200000, CRC(403a4142) SHA1(aa5fea79a7a838642152586689d0f9b33311252c) ) + ROM_LOAD( "e52-09.ic18", 0x0800000, 0x200000, CRC(830e0a3c) SHA1(ab96f380e53f72945f73a6cfcc80d12e1b1afce8) ) + ROM_LOAD( "e52-10.ic19", 0x0a00000, 0x200000, CRC(671e41c6) SHA1(281899d83dba104daf7d7c2bd0834cab4c022472) ) + ROM_LOAD( "e52-11.ic20", 0x0c00000, 0x200000, CRC(1bc22680) SHA1(1f71db88d6df3b4bdf090b77bc83a67906bb31da) ) + ROM_LOAD( "e52-12.ic21", 0x0e00000, 0x200000, CRC(a8bb91c5) SHA1(959a9fedb7839e1e4e7658d920bd5da4fd8cae48) ) + + ROM_REGION( 0x40000, "oki", 0 ) /* train board, OKI6295 sound samples */ + ROM_LOAD( "e35-28.trn", 0x000000, 0x040000, CRC(d1b571c1) SHA1(cac7d3f0285544fe36b8b744edfbac0190cdecab) ) + + ROM_REGION16_BE( 0x1000000, "ensoniq.0", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "e52-21.ic32", 0x000000, 0x200000, CRC(ba58081d) SHA1(bcb6c8781191d48f906ed404a3e7388097a64781) ) + ROM_LOAD16_BYTE( "e52-22.ic33", 0x400000, 0x200000, CRC(dda281b1) SHA1(4851a6bf7902548c5033090a0e5c15f74c00ef58) ) + ROM_LOAD16_BYTE( "e52-23.ic34", 0x800000, 0x200000, CRC(ebe2dcef) SHA1(16ae41e0f3bb242cbc2922f53cacbd99961a3f97) ) // same as e35-19.ic34 from dendego + ROM_LOAD16_BYTE( "e52-24.ic35", 0xc00000, 0x200000, CRC(a9a678da) SHA1(b980ae644ef0312acd63b017028af9bf2b084c29) ) +ROM_END + +/* Landing Gear known program rom sets not dumped: + +E17-28 through E17-31 (E17-32 is a PAL) + +*/ + +ROM_START( landgear ) /* Landing Gear Ver 4.2 O */ + ROM_REGION( 0x200000, "maincpu", 0 ) /* 68040 code */ + ROM_LOAD32_BYTE( "e17-37.ic36", 0x000000, 0x80000, CRC(e6dda113) SHA1(786cbfae420b6ee820a93731e59da3442245b6b8) ) + ROM_LOAD32_BYTE( "e17-38.ic37", 0x000001, 0x80000, CRC(86fa29bd) SHA1(f711528143c042cdc4a26d9e6965a882a73f397c) ) + ROM_LOAD32_BYTE( "e17-39.ic38", 0x000002, 0x80000, CRC(ccbbcc7b) SHA1(52d91fcaa1683d2679ed4f14ebc11dc487527898) ) + ROM_LOAD32_BYTE( "e17-40.ic39", 0x000003, 0x80000, CRC(ce9231d2) SHA1(d2c3955d910dbd0cac95862047c58791af626722) ) /* 0x7ffff == 03 - One byte difference from E17-36.ic39 */ + + ROM_REGION( 0x180000, "audiocpu", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "e17-21.ic30", 0x100001, 0x40000, CRC(8b54f46c) SHA1(c6d16197ab7768945becf9b49b6d286113b4d1cc) ) + ROM_LOAD16_BYTE( "e17-22.ic31", 0x100000, 0x40000, CRC(b96f6cd7) SHA1(0bf086e5dc6d524cd00e33df3e3d2a8b9231eb72) ) + + ROM_REGION( 0x4000, "dsp", ROMREGION_ERASE00 ) /* TMS320C51 internal rom */ + ROM_LOAD16_WORD( "e07-11.ic29", 0x0000, 0x4000, NO_DUMP ) + + ROM_REGION( 0x010000, "sub", 0 ) /* MC68HC11M0 code */ + ROM_LOAD( "e17-23.ic65", 0x000000, 0x010000, CRC(80ac1428) SHA1(5a2a1e60a11ecdb8743c20ddacfb61f9fd00f01c) ) + + ROM_REGION( 0x1800000, "gfx1", 0 ) + ROM_LOAD32_WORD( "e17-03.ic9", 0x0800002, 0x200000, CRC(64820c4f) SHA1(ee18e4e2b01ec21c33ec1f0eb43f6d0cd48d7225) ) + ROM_LOAD32_WORD( "e17-09.ic22", 0x0800000, 0x200000, CRC(19e9a1d1) SHA1(26f1a91e3757da510d685a11add08e3e00317796) ) + ROM_LOAD32_WORD( "e17-04.ic10", 0x0c00002, 0x200000, CRC(7dc2cae3) SHA1(90638a1efc353428ce4155ca29f67accaf0499cd) ) + ROM_LOAD32_WORD( "e17-10.ic23", 0x0c00000, 0x200000, CRC(a6bdf6b8) SHA1(e8d76d38f2c7e428a3c2f555571e314351d74a69) ) + ROM_LOAD32_WORD( "e17-05.ic11", 0x1000002, 0x200000, CRC(3f70acd4) SHA1(e8c1c6214631e3e39d1fc9df13d1862442a47e5d) ) + ROM_LOAD32_WORD( "e17-11.ic24", 0x1000000, 0x200000, CRC(4e986d93) SHA1(b218a0360c1d0eca5a907f2b402f352e0329fe41) ) + ROM_LOAD32_WORD( "e17-06.ic12", 0x1400002, 0x200000, CRC(107ff481) SHA1(2a48cedec9641ff08776e5d8b1bf1f5b250d4179) ) + ROM_LOAD32_WORD( "e17-12.ic25", 0x1400000, 0x200000, CRC(0727ddfa) SHA1(68bf83a3c46cd042a7ad27a530c8bed6360d8492) ) + + ROM_REGION( 0x1000000, "gfx2", ROMREGION_ERASE00 ) /* only accessible to the TMS */ + ROM_LOAD( "e17-01.ic5", 0x0000000, 0x200000, CRC(42aa56a6) SHA1(945c338515ceb946c01480919546869bb8c3d323) ) + ROM_LOAD( "e17-02.ic8", 0x0600000, 0x200000, CRC(df7e2405) SHA1(684d6fc398791c48101e6cb63acbf0d691ed863c) ) + ROM_LOAD( "e17-07.ic18", 0x0800000, 0x200000, CRC(0f180eb0) SHA1(5e1dd920f110a62a029bace6f4cb80fee0fdaf03) ) + ROM_LOAD( "e17-08.ic19", 0x0a00000, 0x200000, CRC(3107e154) SHA1(59a99770c2aa535cac6569f41b03be1554e0e800) ) + + ROM_REGION16_BE( 0x1000000, "ensoniq.0", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "e17-13.ic32", 0x000000, 0x200000, CRC(6cf238e7) SHA1(0745d2dcfea26178adde3ad08650156e8e30651f) ) + ROM_LOAD16_BYTE( "e17-14.ic33", 0x400000, 0x200000, CRC(5efec311) SHA1(f253bc40f2567f59ddfb617fddb8b9a389bfac89) ) + ROM_LOAD16_BYTE( "e17-15.ic34", 0x800000, 0x200000, CRC(41d7a7d0) SHA1(f5a8b79c1d47611e93d46aaf921107b52090bb5f) ) + ROM_LOAD16_BYTE( "e17-16.ic35", 0xc00000, 0x200000, CRC(6cf9f277) SHA1(03ca51fadc6b0b6502804346f18eeb55ab87b0e7) ) + + ROM_REGION( 0x1000, "pals", 0 ) /* PALCE 16V8, saved in Jedec format (unused now) */ + ROM_LOAD( "e07-02.ic4", 0x0000, 0x0bac, CRC(b10110e0) SHA1(574dfa70cbdc910973f4b47a9534f22839baf76d) ) + ROM_LOAD( "e07-03.ic50", 0x0000, 0x0bac, CRC(3fe03710) SHA1(bbccddea0cccb50ea361721e51a0489f6686312c) ) + ROM_LOAD( "e07-04.ic115", 0x0000, 0x0bac, CRC(6c83e648) SHA1(7ed4001d8f27933b31c09d98421dac5bdc265ff4) ) + ROM_LOAD( "e07-05.ic22", 0x0000, 0x0bac, CRC(d2530a9d) SHA1(2f5cafe9ac4e5b3121981dc7498a82b54b2aee08) ) + ROM_LOAD( "e07-06.ic37", 0x0000, 0x0bac, CRC(ade68194) SHA1(95322d49b1f6edac03a7a00bf8876e556ccc2581) ) + ROM_LOAD( "e07-07.ic49", 0x0000, 0x0bac, CRC(76136aac) SHA1(5f28de747e32a4e2622603a7d35e6c979e56977d) ) + ROM_LOAD( "e07-08.ic65", 0x0000, 0x0bac, CRC(33aa1678) SHA1(e0d941c048bec25994dea30fed989d9f9e1af6a6) ) + ROM_LOAD( "e07-09.ic82", 0x0000, 0x0bac, CRC(62e2bf9e) SHA1(fe7055f5f6292f4c613cc3a47245340722299b45) ) + ROM_LOAD( "e07-10.ic116", 0x0000, 0x0bac, CRC(97e36b54) SHA1(2181097bfd7d09a537cbcc4e7ead11532f0ddb20) ) + ROM_LOAD( "e09-21.ic69", 0x0000, 0x0bac, CRC(74b06310) SHA1(0e1f559247a43fbb3852b1b0b92753ed993b876d) ) + ROM_LOAD( "e09-22.ic73", 0x0000, 0x0bac, CRC(58aa9c49) SHA1(7c9b463ea1adc701f326773cc556ab11f290f87e) ) + ROM_LOAD( "e17-32.ic96", 0x0000, 0x0bac, CRC(1d590ca3) SHA1(733e9e34642c1e03fd880fda198b98927c1bb81d) ) +ROM_END + +ROM_START( landgearj ) /* Landing Gear Ver 4.2 J */ + ROM_REGION( 0x200000, "maincpu", 0 ) /* 68040 code */ + ROM_LOAD32_BYTE( "e17-33.ic36", 0x000000, 0x80000, CRC(e6dda113) SHA1(786cbfae420b6ee820a93731e59da3442245b6b8) ) /* matches E17-37.ic36, verified correct */ + ROM_LOAD32_BYTE( "e17-34.ic37", 0x000001, 0x80000, CRC(86fa29bd) SHA1(f711528143c042cdc4a26d9e6965a882a73f397c) ) /* matches E17-38.ic37, verified correct */ + ROM_LOAD32_BYTE( "e17-35.ic38", 0x000002, 0x80000, CRC(ccbbcc7b) SHA1(52d91fcaa1683d2679ed4f14ebc11dc487527898) ) /* matches E17-39.ic38, verified correct */ + ROM_LOAD32_BYTE( "e17-36.ic39", 0x000003, 0x80000, CRC(209c50fe) SHA1(42e0eaa182730e260ee4361d936b133ed85f8221) ) /* 0x7ffff == 01 - One byte difference from E17-40.ic39 */ + + ROM_REGION( 0x180000, "audiocpu", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "e17-21.ic30", 0x100001, 0x40000, CRC(8b54f46c) SHA1(c6d16197ab7768945becf9b49b6d286113b4d1cc) ) + ROM_LOAD16_BYTE( "e17-22.ic31", 0x100000, 0x40000, CRC(b96f6cd7) SHA1(0bf086e5dc6d524cd00e33df3e3d2a8b9231eb72) ) + + ROM_REGION( 0x4000, "dsp", ROMREGION_ERASE00 ) /* TMS320C51 internal rom */ + ROM_LOAD16_WORD( "e07-11.ic29", 0x0000, 0x4000, NO_DUMP ) + + ROM_REGION( 0x010000, "sub", 0 ) /* MC68HC11M0 code */ + ROM_LOAD( "e17-23.ic65", 0x000000, 0x010000, CRC(80ac1428) SHA1(5a2a1e60a11ecdb8743c20ddacfb61f9fd00f01c) ) + + ROM_REGION( 0x1800000, "gfx1", 0 ) + ROM_LOAD32_WORD( "e17-03.ic9", 0x0800002, 0x200000, CRC(64820c4f) SHA1(ee18e4e2b01ec21c33ec1f0eb43f6d0cd48d7225) ) + ROM_LOAD32_WORD( "e17-09.ic22", 0x0800000, 0x200000, CRC(19e9a1d1) SHA1(26f1a91e3757da510d685a11add08e3e00317796) ) + ROM_LOAD32_WORD( "e17-04.ic10", 0x0c00002, 0x200000, CRC(7dc2cae3) SHA1(90638a1efc353428ce4155ca29f67accaf0499cd) ) + ROM_LOAD32_WORD( "e17-10.ic23", 0x0c00000, 0x200000, CRC(a6bdf6b8) SHA1(e8d76d38f2c7e428a3c2f555571e314351d74a69) ) + ROM_LOAD32_WORD( "e17-05.ic11", 0x1000002, 0x200000, CRC(3f70acd4) SHA1(e8c1c6214631e3e39d1fc9df13d1862442a47e5d) ) + ROM_LOAD32_WORD( "e17-11.ic24", 0x1000000, 0x200000, CRC(4e986d93) SHA1(b218a0360c1d0eca5a907f2b402f352e0329fe41) ) + ROM_LOAD32_WORD( "e17-06.ic12", 0x1400002, 0x200000, CRC(107ff481) SHA1(2a48cedec9641ff08776e5d8b1bf1f5b250d4179) ) + ROM_LOAD32_WORD( "e17-12.ic25", 0x1400000, 0x200000, CRC(0727ddfa) SHA1(68bf83a3c46cd042a7ad27a530c8bed6360d8492) ) + + ROM_REGION( 0x1000000, "gfx2", ROMREGION_ERASE00 ) /* only accessible to the TMS */ + ROM_LOAD( "e17-01.ic5", 0x0000000, 0x200000, CRC(42aa56a6) SHA1(945c338515ceb946c01480919546869bb8c3d323) ) + ROM_LOAD( "e17-02.ic8", 0x0600000, 0x200000, CRC(df7e2405) SHA1(684d6fc398791c48101e6cb63acbf0d691ed863c) ) + ROM_LOAD( "e17-07.ic18", 0x0800000, 0x200000, CRC(0f180eb0) SHA1(5e1dd920f110a62a029bace6f4cb80fee0fdaf03) ) + ROM_LOAD( "e17-08.ic19", 0x0a00000, 0x200000, CRC(3107e154) SHA1(59a99770c2aa535cac6569f41b03be1554e0e800) ) + + ROM_REGION16_BE( 0x1000000, "ensoniq.0", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "e17-13.ic32", 0x000000, 0x200000, CRC(6cf238e7) SHA1(0745d2dcfea26178adde3ad08650156e8e30651f) ) + ROM_LOAD16_BYTE( "e17-14.ic33", 0x400000, 0x200000, CRC(5efec311) SHA1(f253bc40f2567f59ddfb617fddb8b9a389bfac89) ) + ROM_LOAD16_BYTE( "e17-15.ic34", 0x800000, 0x200000, CRC(41d7a7d0) SHA1(f5a8b79c1d47611e93d46aaf921107b52090bb5f) ) + ROM_LOAD16_BYTE( "e17-16.ic35", 0xc00000, 0x200000, CRC(6cf9f277) SHA1(03ca51fadc6b0b6502804346f18eeb55ab87b0e7) ) + + ROM_REGION( 0x1000, "pals", 0 ) /* PALCE 16V8, saved in Jedec format (unused now) */ + ROM_LOAD( "e07-02.ic4", 0x0000, 0x0bac, CRC(b10110e0) SHA1(574dfa70cbdc910973f4b47a9534f22839baf76d) ) + ROM_LOAD( "e07-03.ic50", 0x0000, 0x0bac, CRC(3fe03710) SHA1(bbccddea0cccb50ea361721e51a0489f6686312c) ) + ROM_LOAD( "e07-04.ic115", 0x0000, 0x0bac, CRC(6c83e648) SHA1(7ed4001d8f27933b31c09d98421dac5bdc265ff4) ) + ROM_LOAD( "e07-05.ic22", 0x0000, 0x0bac, CRC(d2530a9d) SHA1(2f5cafe9ac4e5b3121981dc7498a82b54b2aee08) ) + ROM_LOAD( "e07-06.ic37", 0x0000, 0x0bac, CRC(ade68194) SHA1(95322d49b1f6edac03a7a00bf8876e556ccc2581) ) + ROM_LOAD( "e07-07.ic49", 0x0000, 0x0bac, CRC(76136aac) SHA1(5f28de747e32a4e2622603a7d35e6c979e56977d) ) + ROM_LOAD( "e07-08.ic65", 0x0000, 0x0bac, CRC(33aa1678) SHA1(e0d941c048bec25994dea30fed989d9f9e1af6a6) ) + ROM_LOAD( "e07-09.ic82", 0x0000, 0x0bac, CRC(62e2bf9e) SHA1(fe7055f5f6292f4c613cc3a47245340722299b45) ) + ROM_LOAD( "e07-10.ic116", 0x0000, 0x0bac, CRC(97e36b54) SHA1(2181097bfd7d09a537cbcc4e7ead11532f0ddb20) ) + ROM_LOAD( "e09-21.ic69", 0x0000, 0x0bac, CRC(74b06310) SHA1(0e1f559247a43fbb3852b1b0b92753ed993b876d) ) + ROM_LOAD( "e09-22.ic73", 0x0000, 0x0bac, CRC(58aa9c49) SHA1(7c9b463ea1adc701f326773cc556ab11f290f87e) ) + ROM_LOAD( "e17-32.ic96", 0x0000, 0x0bac, CRC(1d590ca3) SHA1(733e9e34642c1e03fd880fda198b98927c1bb81d) ) +ROM_END + +ROM_START( landgeara ) /* Landing Gear Ver 3.1 O, is there an alternate set without the "*" on the labels? */ + ROM_REGION( 0x200000, "maincpu", 0 ) /* 68040 code */ + ROM_LOAD32_BYTE( "e17-24+.ic36", 0x000000, 0x80000, CRC(6907e451) SHA1(330eecb5898942514b40e67cf3c9dcb82d4cafab) ) /* Actually labeled E17-24* */ + ROM_LOAD32_BYTE( "e17-25+.ic37", 0x000001, 0x80000, CRC(ecbc8875) SHA1(5f5e4850cbdbdfff4a7f0b781edb2e983c166962) ) /* Actually labeled E17-25* */ + ROM_LOAD32_BYTE( "e17-26+.ic38", 0x000002, 0x80000, CRC(3032bbe7) SHA1(201c61f236c81928f50815d8ad12e312a3c7427b) ) /* Actually labeled E17-26* */ + ROM_LOAD32_BYTE( "e17-27+.ic39", 0x000003, 0x80000, CRC(e936224c) SHA1(8699cbb756844d12b7585e66198b7faed2af8e24) ) /* Actually labeled E17-27* */ + + ROM_REGION( 0x180000, "audiocpu", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "e17-21.ic30", 0x100001, 0x40000, CRC(8b54f46c) SHA1(c6d16197ab7768945becf9b49b6d286113b4d1cc) ) + ROM_LOAD16_BYTE( "e17-22.ic31", 0x100000, 0x40000, CRC(b96f6cd7) SHA1(0bf086e5dc6d524cd00e33df3e3d2a8b9231eb72) ) + + ROM_REGION( 0x4000, "dsp", ROMREGION_ERASE00 ) /* TMS320C51 internal rom */ + ROM_LOAD16_WORD( "e07-11.ic29", 0x0000, 0x4000, NO_DUMP ) + + ROM_REGION( 0x010000, "sub", 0 ) /* MC68HC11M0 code */ + ROM_LOAD( "e17-23.ic65", 0x000000, 0x010000, CRC(80ac1428) SHA1(5a2a1e60a11ecdb8743c20ddacfb61f9fd00f01c) ) + + ROM_REGION( 0x1800000, "gfx1", 0 ) + ROM_LOAD32_WORD( "e17-03.ic9", 0x0800002, 0x200000, CRC(64820c4f) SHA1(ee18e4e2b01ec21c33ec1f0eb43f6d0cd48d7225) ) + ROM_LOAD32_WORD( "e17-09.ic22", 0x0800000, 0x200000, CRC(19e9a1d1) SHA1(26f1a91e3757da510d685a11add08e3e00317796) ) + ROM_LOAD32_WORD( "e17-04.ic10", 0x0c00002, 0x200000, CRC(7dc2cae3) SHA1(90638a1efc353428ce4155ca29f67accaf0499cd) ) + ROM_LOAD32_WORD( "e17-10.ic23", 0x0c00000, 0x200000, CRC(a6bdf6b8) SHA1(e8d76d38f2c7e428a3c2f555571e314351d74a69) ) + ROM_LOAD32_WORD( "e17-05.ic11", 0x1000002, 0x200000, CRC(3f70acd4) SHA1(e8c1c6214631e3e39d1fc9df13d1862442a47e5d) ) + ROM_LOAD32_WORD( "e17-11.ic24", 0x1000000, 0x200000, CRC(4e986d93) SHA1(b218a0360c1d0eca5a907f2b402f352e0329fe41) ) + ROM_LOAD32_WORD( "e17-06.ic12", 0x1400002, 0x200000, CRC(107ff481) SHA1(2a48cedec9641ff08776e5d8b1bf1f5b250d4179) ) + ROM_LOAD32_WORD( "e17-12.ic25", 0x1400000, 0x200000, CRC(0727ddfa) SHA1(68bf83a3c46cd042a7ad27a530c8bed6360d8492) ) + + ROM_REGION( 0x1000000, "gfx2", ROMREGION_ERASE00 ) /* only accessible to the TMS */ + ROM_LOAD( "e17-01.ic5", 0x0000000, 0x200000, CRC(42aa56a6) SHA1(945c338515ceb946c01480919546869bb8c3d323) ) + ROM_LOAD( "e17-02.ic8", 0x0600000, 0x200000, CRC(df7e2405) SHA1(684d6fc398791c48101e6cb63acbf0d691ed863c) ) + ROM_LOAD( "e17-07.ic18", 0x0800000, 0x200000, CRC(0f180eb0) SHA1(5e1dd920f110a62a029bace6f4cb80fee0fdaf03) ) + ROM_LOAD( "e17-08.ic19", 0x0a00000, 0x200000, CRC(3107e154) SHA1(59a99770c2aa535cac6569f41b03be1554e0e800) ) + + ROM_REGION16_BE( 0x1000000, "ensoniq.0", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "e17-13.ic32", 0x000000, 0x200000, CRC(6cf238e7) SHA1(0745d2dcfea26178adde3ad08650156e8e30651f) ) + ROM_LOAD16_BYTE( "e17-14.ic33", 0x400000, 0x200000, CRC(5efec311) SHA1(f253bc40f2567f59ddfb617fddb8b9a389bfac89) ) + ROM_LOAD16_BYTE( "e17-15.ic34", 0x800000, 0x200000, CRC(41d7a7d0) SHA1(f5a8b79c1d47611e93d46aaf921107b52090bb5f) ) + ROM_LOAD16_BYTE( "e17-16.ic35", 0xc00000, 0x200000, CRC(6cf9f277) SHA1(03ca51fadc6b0b6502804346f18eeb55ab87b0e7) ) + + ROM_REGION( 0x1000, "pals", 0 ) /* PALCE 16V8, saved in Jedec format (unused now) */ + ROM_LOAD( "e07-02.ic4", 0x0000, 0x0bac, CRC(b10110e0) SHA1(574dfa70cbdc910973f4b47a9534f22839baf76d) ) + ROM_LOAD( "e07-03.ic50", 0x0000, 0x0bac, CRC(3fe03710) SHA1(bbccddea0cccb50ea361721e51a0489f6686312c) ) + ROM_LOAD( "e07-04.ic115", 0x0000, 0x0bac, CRC(6c83e648) SHA1(7ed4001d8f27933b31c09d98421dac5bdc265ff4) ) + ROM_LOAD( "e07-05.ic22", 0x0000, 0x0bac, CRC(d2530a9d) SHA1(2f5cafe9ac4e5b3121981dc7498a82b54b2aee08) ) + ROM_LOAD( "e07-06.ic37", 0x0000, 0x0bac, CRC(ade68194) SHA1(95322d49b1f6edac03a7a00bf8876e556ccc2581) ) + ROM_LOAD( "e07-07.ic49", 0x0000, 0x0bac, CRC(76136aac) SHA1(5f28de747e32a4e2622603a7d35e6c979e56977d) ) + ROM_LOAD( "e07-08.ic65", 0x0000, 0x0bac, CRC(33aa1678) SHA1(e0d941c048bec25994dea30fed989d9f9e1af6a6) ) + ROM_LOAD( "e07-09.ic82", 0x0000, 0x0bac, CRC(62e2bf9e) SHA1(fe7055f5f6292f4c613cc3a47245340722299b45) ) + ROM_LOAD( "e07-10.ic116", 0x0000, 0x0bac, CRC(97e36b54) SHA1(2181097bfd7d09a537cbcc4e7ead11532f0ddb20) ) + ROM_LOAD( "e09-21.ic69", 0x0000, 0x0bac, CRC(74b06310) SHA1(0e1f559247a43fbb3852b1b0b92753ed993b876d) ) + ROM_LOAD( "e09-22.ic73", 0x0000, 0x0bac, CRC(58aa9c49) SHA1(7c9b463ea1adc701f326773cc556ab11f290f87e) ) + ROM_LOAD( "e17-32.ic96", 0x0000, 0x0bac, CRC(1d590ca3) SHA1(733e9e34642c1e03fd880fda198b98927c1bb81d) ) +ROM_END + +ROM_START( landgearja ) /* Landing Gear Ver 3.0 J, is there an alternate set without the "*" on the labels? */ + ROM_REGION( 0x200000, "maincpu", 0 ) /* 68040 code */ + ROM_LOAD32_BYTE( "e17-17+.ic36", 0x000000, 0x80000, CRC(653e9c43) SHA1(b43c4baf1b3114977faa310c0815ea0940d548b3) ) /* Actually labeled E17-17* */ + ROM_LOAD32_BYTE( "e17-18+.ic37", 0x000001, 0x80000, CRC(4d90b321) SHA1(a919f15dcc105eaa12d7c9816aff4f0daffbb7a1) ) /* Actually labeled E17-18* */ + ROM_LOAD32_BYTE( "e17-19+.ic38", 0x000002, 0x80000, CRC(1c487204) SHA1(f6c8ddd80c57ed63b0785b240c4b00416a1a87f3) ) /* Actually labeled E17-19* */ + ROM_LOAD32_BYTE( "e17-20+.ic39", 0x000003, 0x80000, CRC(1311234f) SHA1(5211cae0d6dc1710bc669bcf81a247b01f8aebff) ) /* Actually labeled E17-20* */ + + ROM_REGION( 0x180000, "audiocpu", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "e17-21.ic30", 0x100001, 0x40000, CRC(8b54f46c) SHA1(c6d16197ab7768945becf9b49b6d286113b4d1cc) ) + ROM_LOAD16_BYTE( "e17-22.ic31", 0x100000, 0x40000, CRC(b96f6cd7) SHA1(0bf086e5dc6d524cd00e33df3e3d2a8b9231eb72) ) + + ROM_REGION( 0x4000, "dsp", ROMREGION_ERASE00 ) /* TMS320C51 internal rom */ + ROM_LOAD16_WORD( "e07-11.ic29", 0x0000, 0x4000, NO_DUMP ) + + ROM_REGION( 0x010000, "sub", 0 ) /* MC68HC11M0 code */ + ROM_LOAD( "e17-23.ic65", 0x000000, 0x010000, CRC(80ac1428) SHA1(5a2a1e60a11ecdb8743c20ddacfb61f9fd00f01c) ) + + ROM_REGION( 0x1800000, "gfx1", 0 ) + ROM_LOAD32_WORD( "e17-03.ic9", 0x0800002, 0x200000, CRC(64820c4f) SHA1(ee18e4e2b01ec21c33ec1f0eb43f6d0cd48d7225) ) + ROM_LOAD32_WORD( "e17-09.ic22", 0x0800000, 0x200000, CRC(19e9a1d1) SHA1(26f1a91e3757da510d685a11add08e3e00317796) ) + ROM_LOAD32_WORD( "e17-04.ic10", 0x0c00002, 0x200000, CRC(7dc2cae3) SHA1(90638a1efc353428ce4155ca29f67accaf0499cd) ) + ROM_LOAD32_WORD( "e17-10.ic23", 0x0c00000, 0x200000, CRC(a6bdf6b8) SHA1(e8d76d38f2c7e428a3c2f555571e314351d74a69) ) + ROM_LOAD32_WORD( "e17-05.ic11", 0x1000002, 0x200000, CRC(3f70acd4) SHA1(e8c1c6214631e3e39d1fc9df13d1862442a47e5d) ) + ROM_LOAD32_WORD( "e17-11.ic24", 0x1000000, 0x200000, CRC(4e986d93) SHA1(b218a0360c1d0eca5a907f2b402f352e0329fe41) ) + ROM_LOAD32_WORD( "e17-06.ic12", 0x1400002, 0x200000, CRC(107ff481) SHA1(2a48cedec9641ff08776e5d8b1bf1f5b250d4179) ) + ROM_LOAD32_WORD( "e17-12.ic25", 0x1400000, 0x200000, CRC(0727ddfa) SHA1(68bf83a3c46cd042a7ad27a530c8bed6360d8492) ) + + ROM_REGION( 0x1000000, "gfx2", ROMREGION_ERASE00 ) /* only accessible to the TMS */ + ROM_LOAD( "e17-01.ic5", 0x0000000, 0x200000, CRC(42aa56a6) SHA1(945c338515ceb946c01480919546869bb8c3d323) ) + ROM_LOAD( "e17-02.ic8", 0x0600000, 0x200000, CRC(df7e2405) SHA1(684d6fc398791c48101e6cb63acbf0d691ed863c) ) + ROM_LOAD( "e17-07.ic18", 0x0800000, 0x200000, CRC(0f180eb0) SHA1(5e1dd920f110a62a029bace6f4cb80fee0fdaf03) ) + ROM_LOAD( "e17-08.ic19", 0x0a00000, 0x200000, CRC(3107e154) SHA1(59a99770c2aa535cac6569f41b03be1554e0e800) ) + + ROM_REGION16_BE( 0x1000000, "ensoniq.0", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "e17-13.ic32", 0x000000, 0x200000, CRC(6cf238e7) SHA1(0745d2dcfea26178adde3ad08650156e8e30651f) ) + ROM_LOAD16_BYTE( "e17-14.ic33", 0x400000, 0x200000, CRC(5efec311) SHA1(f253bc40f2567f59ddfb617fddb8b9a389bfac89) ) + ROM_LOAD16_BYTE( "e17-15.ic34", 0x800000, 0x200000, CRC(41d7a7d0) SHA1(f5a8b79c1d47611e93d46aaf921107b52090bb5f) ) + ROM_LOAD16_BYTE( "e17-16.ic35", 0xc00000, 0x200000, CRC(6cf9f277) SHA1(03ca51fadc6b0b6502804346f18eeb55ab87b0e7) ) + + ROM_REGION( 0x1000, "pals", 0 ) /* PALCE 16V8, saved in Jedec format (unused now) */ + ROM_LOAD( "e07-02.ic4", 0x0000, 0x0bac, CRC(b10110e0) SHA1(574dfa70cbdc910973f4b47a9534f22839baf76d) ) + ROM_LOAD( "e07-03.ic50", 0x0000, 0x0bac, CRC(3fe03710) SHA1(bbccddea0cccb50ea361721e51a0489f6686312c) ) + ROM_LOAD( "e07-04.ic115", 0x0000, 0x0bac, CRC(6c83e648) SHA1(7ed4001d8f27933b31c09d98421dac5bdc265ff4) ) + ROM_LOAD( "e07-05.ic22", 0x0000, 0x0bac, CRC(d2530a9d) SHA1(2f5cafe9ac4e5b3121981dc7498a82b54b2aee08) ) + ROM_LOAD( "e07-06.ic37", 0x0000, 0x0bac, CRC(ade68194) SHA1(95322d49b1f6edac03a7a00bf8876e556ccc2581) ) + ROM_LOAD( "e07-07.ic49", 0x0000, 0x0bac, CRC(76136aac) SHA1(5f28de747e32a4e2622603a7d35e6c979e56977d) ) + ROM_LOAD( "e07-08.ic65", 0x0000, 0x0bac, CRC(33aa1678) SHA1(e0d941c048bec25994dea30fed989d9f9e1af6a6) ) + ROM_LOAD( "e07-09.ic82", 0x0000, 0x0bac, CRC(62e2bf9e) SHA1(fe7055f5f6292f4c613cc3a47245340722299b45) ) + ROM_LOAD( "e07-10.ic116", 0x0000, 0x0bac, CRC(97e36b54) SHA1(2181097bfd7d09a537cbcc4e7ead11532f0ddb20) ) + ROM_LOAD( "e09-21.ic69", 0x0000, 0x0bac, CRC(74b06310) SHA1(0e1f559247a43fbb3852b1b0b92753ed993b876d) ) + ROM_LOAD( "e09-22.ic73", 0x0000, 0x0bac, CRC(58aa9c49) SHA1(7c9b463ea1adc701f326773cc556ab11f290f87e) ) + ROM_LOAD( "e17-32.ic96", 0x0000, 0x0bac, CRC(1d590ca3) SHA1(733e9e34642c1e03fd880fda198b98927c1bb81d) ) +ROM_END + +ROM_START( dangcurv ) + ROM_REGION( 0x200000, "maincpu", 0 ) /* 68040 code */ + ROM_LOAD32_BYTE( "e09-23.ic36", 0x000000, 0x80000, CRC(b4cdadd6) SHA1(84bd1d055ff15afb5438cd5151abf78b0000cebc) ) + ROM_LOAD32_BYTE( "e09-24.ic37", 0x000001, 0x80000, CRC(fb2fc795) SHA1(2f58d043ab9fc0269a5b6827009777cd7ab832fc) ) + ROM_LOAD32_BYTE( "e09-25.ic38", 0x000002, 0x80000, CRC(aa233404) SHA1(a2b14e54eb1b5f6d4ed9f289b30ecfa654f21c87) ) + ROM_LOAD32_BYTE( "e09-26.ic39", 0x000003, 0x80000, CRC(78337271) SHA1(bd29de6a5b6db3baddecf82c3b6c8b366c64289e) ) + + ROM_REGION( 0x180000, "audiocpu", 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "e09-27.ic30", 0x100001, 0x40000, CRC(6d54839c) SHA1(a28c9b0727128b82bb0fa71dc951e3f03ee45e1b) ) + ROM_LOAD16_BYTE( "e09-28.ic31", 0x100000, 0x40000, CRC(566d7d83) SHA1(92661ccb631f843bf704c50d54fae28f6b5b272b) ) + + ROM_REGION( 0x4000, "dsp", ROMREGION_ERASE00 ) /* TMS320C51 internal rom */ + ROM_LOAD16_WORD( "e07-11.ic29", 0x0000, 0x4000, NO_DUMP ) + + ROM_REGION( 0x010000, "sub", 0 ) /* MC68HC11M0 code */ + ROM_LOAD( "e09-29.ic65", 0x000000, 0x010000, CRC(80ac1428) SHA1(5a2a1e60a11ecdb8743c20ddacfb61f9fd00f01c) ) + + ROM_REGION( 0x1800000, "gfx1", 0 ) + ROM_LOAD32_WORD( "e09-05.ic9", 0x0800002, 0x200000, CRC(a948782f) SHA1(2a2b0d2955e036ddf424c54131435a20dbba3dd4) ) + ROM_LOAD32_WORD( "e09-13.ic22", 0x0800000, 0x200000, CRC(985859e2) SHA1(8af9a73eba2151a5ef60799682fe667663a42743) ) + ROM_LOAD32_WORD( "e09-06.ic10", 0x0c00002, 0x200000, CRC(218dcb5b) SHA1(72aedd2890e076540195d738c76ba446769c8e89) ) + ROM_LOAD32_WORD( "e09-14.ic23", 0x0c00000, 0x200000, CRC(6d123616) SHA1(01ac1e920f7c4a03adf365c8a7831b8385f0b78b) ) + ROM_LOAD32_WORD( "e09-07.ic11", 0x1000002, 0x200000, CRC(37fd7efc) SHA1(24a275d302ec8940479d15f1aeb96a288868bd41) ) + ROM_LOAD32_WORD( "e09-15.ic24", 0x1000000, 0x200000, CRC(0d773f3b) SHA1(f867a4d5956c2ebfa9858499d9716b4dc723d76b) ) + ROM_LOAD32_WORD( "e09-08.ic12", 0x1400002, 0x200000, CRC(5c080485) SHA1(c950cd00df5b6d2d0a119ba318fa8b0a3f471b29) ) + ROM_LOAD32_WORD( "e09-16.ic25", 0x1400000, 0x200000, CRC(35cb8346) SHA1(c2ecedd3c2a28213ef83e776f3007c974128189b) ) + + ROM_REGION( 0x1000000, "gfx2", 0 ) /* only accessible to the TMS */ + ROM_LOAD( "e09-01.ic5", 0x0000000, 0x200000, CRC(22a6a53d) SHA1(6efa89151cd5ec43ab9bfa9b92694eb0018dd227) ) + ROM_LOAD( "e09-02.ic6", 0x0200000, 0x200000, CRC(405e2969) SHA1(376b9dd548d876af6798553a6da5deed4de00b76) ) + ROM_LOAD( "e09-03.ic7", 0x0400000, 0x200000, CRC(15327754) SHA1(bf08ab80875b400700241a66715e229dae6752d1) ) + ROM_LOAD( "e09-04.ic8", 0x0600000, 0x200000, CRC(fd598d6e) SHA1(679d9d64a0cd031a6c8cb5e170b77fc5811b6d73) ) + ROM_LOAD( "e09-09.ic18", 0x0800000, 0x200000, CRC(a527b387) SHA1(790240b4dfcdf2bf70edb943ec7aeb2f0d8cdfa9) ) + ROM_LOAD( "e09-10.ic19", 0x0a00000, 0x200000, CRC(4de6253c) SHA1(33517c0895b7ee04f4a84074d0b7bf42b53d5816) ) + ROM_LOAD( "e09-11.ic20", 0x0c00000, 0x200000, CRC(18cc0ba7) SHA1(626929a501def6f1b8bd6a468786efb0b0dda9fa) ) + ROM_LOAD( "e09-12.ic21", 0x0e00000, 0x200000, CRC(3273e438) SHA1(e9581d52f5db1c1924a860464579332a2f23e713) ) + + ROM_REGION16_BE( 0x1000000, "ensoniq.0", ROMREGION_ERASE00 ) + ROM_LOAD16_BYTE( "e09-17.ic32", 0x000000, 0x200000, CRC(a8a6512e) SHA1(71bd3ccd65b731270b92da334b9fb99c28e267fe) ) + ROM_LOAD16_BYTE( "e09-18.ic33", 0x400000, 0x200000, CRC(bdf1f5eb) SHA1(a568a99a90e0afbcd26ddd320f515ed62cf0db1a) ) + ROM_LOAD16_BYTE( "e09-19.ic34", 0x800000, 0x200000, CRC(3626c7ed) SHA1(7535f0457b3d9fe1d54712a26322d6144b9e7de6) ) + ROM_LOAD16_BYTE( "e09-20.ic35", 0xc00000, 0x200000, CRC(9652a5c4) SHA1(2933e4e8e57ff618ce21721036d96347471c5539) ) +ROM_END + + +GAME( 1995, dangcurv, 0, taitojc, dangcurv, taitojc_state, 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_state, 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_state, 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_state, 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_state, 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_state, taitojc, ROT0, "Taito", "Side by Side (Ver 2.7 J)", GAME_IMPERFECT_GRAPHICS ) // SIDE BY SIDE VER 2.7 J 1996/10/11 14:54:10 +GAME( 1996, sidebsja, sidebs, taitojc, sidebs, taitojc_state, 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_state, 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_state, 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_state, 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_state, taitojc, ROT0, "Taito", "Side by Side 2 Evoluzione (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, taitojc_state, 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, taitojc_state, 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/video/taitojc.c b/src/mame/video/taitojc.c index 074287ea1d5..70a9f93e6c7 100644 --- a/src/mame/video/taitojc.c +++ b/src/mame/video/taitojc.c @@ -364,7 +364,7 @@ UINT32 taitojc_state::screen_update_dendego(screen_device &screen, bitmap_ind16 if (level != output_get_value("counter0")) output_set_value("counter0", level); - btn = (ioport("ANALOG1")->read() & 0xff); + btn = m_analog_inp[0]->read_safe(0) & 0xff; for (level = 10; level > 0; level--) if (btn >= dendego_brake_table[level]) break;