diff options
Diffstat (limited to 'src/mame/drivers/wgp.cpp')
-rw-r--r-- | src/mame/drivers/wgp.cpp | 1214 |
1 files changed, 0 insertions, 1214 deletions
diff --git a/src/mame/drivers/wgp.cpp b/src/mame/drivers/wgp.cpp deleted file mode 100644 index 18be11575c4..00000000000 --- a/src/mame/drivers/wgp.cpp +++ /dev/null @@ -1,1214 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:David Graves -// thanks-to:Richard Bush -/*************************************************************************** - -World Grand Prix (c) Taito Corporation 1989 -================ - -David Graves - -(Thanks to Richard Bush and the Raine team for their -preliminary driver.) - -It seems likely there are a LOT of undumped versions of this game... -If you have access to a board, please check the rom numbers to see if -any are different from the ones listed below. - - ***** - -World Grand Prix runs on hardware which is pretty different from the -system Taito commonly used for their pseudo-3d racing games of the -time, the Z system. Different screen and sprite hardware is used. -There's also a LAN hookup (for multiple machines). - -As well as a TC0100SCN tilemap generator (two 64x64 layers of 8x8 -tiles and a layer of 8x8 tiles with graphics data taken from RAM) -there's a "piv" tilemap generator, which creates three scrollable -row-scrollable zoomable 64x64 tilemaps composed of 16x16 tiles. - -As well as these six tilemap layers, there is a sprite layer with -individually zoomable / rotatable sprites. Big sprites are created -from 16x16 gfx chunks via a sprite mapping area in RAM. - -The piv and sprite layers are rotatable (but not individually, only -together). - -World Grand Prix has twin 68K CPUs which communicate via $4000 bytes -of shared ram. - -There is a Z80 as well, which takes over sound duties. Commands are -written to it by the one of the 68000s (the same as Taito F2 games). - -Dumper's info (Raine) -------------- - - TC0100SCN - known - TC0140SYT - known - TC0170ABT - ? - TC0220IOC - known - TC0240PBJ - motion objects ?? - TC0250SCR - piv tilemaps ?? [TC0280GRD was a rotatable tilemap chip in DonDokoD, also 1989] - TC0260DAR - color related, paired with TC0360PRI in many F2 games - TC0330CHL - ? (perhaps lan related) -This game has LAN interface board, it uses uPD72105C. - -Video Map ---------- - -400000 area is used for sprites. The game does tile mapping - in ram to create big sprites from the 16x16 tiles of gfx0. - See notes in \video\ for details. - -500000 area is for the "piv" tilemaps. - See notes in \video\ for details. - - -TODO -==== - -Offer fake-dip selectable analogue steer - -Is piv/sprite layers rotation control at 0x600000 ? - -Verify y-zoom is correct on the stages that use it (including Wgp2 -default course). Row zoom may be hard to verify, but Wgp2 course -selection screen is probably a good test. - -Implement proper positioning/zoom/rotation for sprites. - -(The current sprite coord calculations are kludgy and flawed and -ignore four control words. The sprites also seem jerky -and have [int?] timing glitches.) - -DIP coinage - - -Wgp ---- - -Analogue brake pedal works but won't register in service mode. - -$28336 is code that shows brake value in service mode. -$ac3e sub (called off int4) at $ac78 does three calcs to the six - AD values: results are stored at ($d22 / $d24 / $d26,A5) - It is the third one, ($d26,A5) which gets displayed - in service mode as brake. - - -Wgp2 ----- - -Piv y zoom may be imperfect. Check the up/down hill part of the -default course. The road looks a little odd. - -Sprite colors seem ok except smoke after you crash. (And one sign on -first bend of default course doesn't go yellow for a few frames.) - -[Used to die with common ram error. When CPUA enables CPUB, CPUB -writes to $140000/2 - unfortunately while CPUA is in the middle of -testing that ram. We hack prog for CPUB to disable the writes.] - - - ***** - -[Wgp stopped with LAN error. (Looks like CPUB tells CPUA what is wrong -with LAN in shared ram $142048. Examined at $e57c which prints out -relevant lan error message). Ended up at $e57c from $b14e-xx code -section. CPUA does PEA of $e57c which is the fallback if CPUB doesn't -respond in timely fashion to command 0x1 poked by code at $b1a6. - -CPUB $830c-8332 loops waiting for command 1-8 in $140002 from CPUA. -it executes this then clears $140002 to indicate command completed. -It wasn't clearing this fast enough for CPUA, because $142048 wasn't -clear:- and that affects the amount of code command 0x1 runs. - -CPUB code at $104d8 had already detected error on LAN and set $142048 -to 4. We now return correct lan status read from $380000, so -no LAN problem is detected.] - - -Code Documentation ------------------- - -CPUA ----- - -$1064e main game loop starting with a trap#$5 - -Calls $37e78 sub off which spriteram eventually gets updated - -Strangely main loop does not seem to be synced to any interrupt. -This may be why the sprites are so glitchy and don't seem to -update every frame. Maybe trap#$5 should be getting us to a known -point in the frame ?? - -$21f4 copies sprite tilemapping data from data rom to tilemap -area then flows into: - -$223c code that fills a sprite entry in spriteram - -[$12770 - $133cd seems to be an irregular lookup table used to -calculate extra zoom word poked into each sprite entry.] - -$23a8 picks data out of data rom and stores it to sprite tile- -mapping area by heading through to $21f4. (May also enter sprite -details into spriteram.) It uses $a0000 area of data rom. - -(Alternate entry point at $23c2 uses $90000 area of data rom.) - -$25ee routine stores data from rom into sprite tilemapping area -including the bad parts that produce junk sprites. - -It calls interesting sub at $25be which has a table of the number -of sequential words to be pulled out of the data rom, depending -on the first word value in the data rom for that entry ("code"). -Each code will pull out the following multiple of 16 words: - - Code Words Tiles Actual data rom entry - 0 1 4x4 [same] - 1 2 8x4 [same] - 2 4 8x8 [same] - 3 3 12x4 [same, see $98186] - 4 6 12x8 - 5 9 12x12 [same] - 6 2 4x8 [WRONG! says 8x12 in data rom, see $982bf] - 7 6 8x12 [WRONG! says 4x8 in data rom] - 8 1 (2x2)*4 [2x2 in data rom] (copies 12 unwanted - words - causing junk sprites) - -$4083c0-47f in sprite mapping area has junk words - due to code 7 -making it read 6*16 words. 0x60 words are copied from the data rom -when 0x20 would be correct. Careless programming: in the lookup -table Taito got codes 6 and 7 back to front. Enable the patch in -init_wgp to correct this... I can't see what changes. - -I'm guessing sprites may be variable size, and the junk sprites -mapped +0x9b80-9d80 are 2x2 tiles rather than 4x4. - -If we only use the first 4 tilemapping words, then the junk sprites -look fine. But their spacing is bad: they have gaps left between -them. They'll need to be magnified to 2x size - the pixel zoom -value must do this automatically. - -This ties in with the lookup table we need to draw the sprites: -it makes sense if our standard 4x4 tile sprite is actually 4 2x2 -sprites. - -But what tells the sprite hardware if a sprite is 2x2 or 4x4 ?? - - -Data rom entry --------------- - -+0x00 Control word - (determines how many words copied to tilemapping area) - -+0x01 Sprite X size [tiles] - (2,4,8 or 12) - -+0x02 Sprite Y size [tiles] - (2,4,8 or 12) - -+0x03 sprite tile words, total (X size * Y size) - on... - -The X size and Y size values don't seem to be used by the game, and -may be a hangover from the gfx development system used. - - -Data Rom --------- - -$80000-$8ffff piv tilemaps, preceded by lookup table -$90000-$9ffff sprite tilemap data, preceded by lookup table -$a0000-$affff sprite tilemap data, preceded by lookup table -$b0000-$cffff TC0100SCN tilemaps, preceded by lookup table - - Note that only just over half this space is used, rest is - 0xff fill. - -$d0000-$dffff is the pivot port data table - - Four separate start points are available, contained in the - first 4 long words. - - (Data words up to $da410 then 0xff fill) - -$e0000-$e7ffe is a logarithmic curve table - - This is used to look up perceived height of an object at - "distance" (offset/2). - - ffff 8000 5555 4000 3333 2aaa etc. - (tapering to value of 4 towards the end) - - The sprite routine shifts this one bit right and subtracts one - before poking into spriteram. Hence 4 => 1 - -$e7fff-$e83fe is an unknown word table -$e83ff-$effff empty (0xff fill) -$f0000-$f03ff unknown lookup table -$f0400-$fcbff series of unknown lookup tables - - Seems to be a series of (zoom/rotate ??) lookup - tables all $400 words long. (Total no. of tables = 25?) - - Each table starts at zero and tends upwards: the first reaches 0xfe7. - The final one reaches 0x3ff (i.e. each successive word is 1 higher - than the last). The values in the tables tend to go up smoothly but - with discontinuities at regular intervals. The intervals change - between tables. - -$fcc00-$fffff empty (0xff fill) - - -Additional notes : - -1) 'wgp' and 'wgpj' - -LAN stuff : - -LAN RAM seems to be 0x4000 bytes wide (0x380000-0x383fff in CPUB) - -Lan tests start at 0x00f86a (CPUB) where a copy of the 256 bytes from -0x00f8d4 is made to 0x383f00. This is text about the version of the LAN -stuff ("1990 VER 1.06") . Note that at least version 1.05 is required. - -Dip Switches : - -To see the effect of the "Communication" Dip Switch you must add the memory -read/write handlers for 0x380000 to 0x383fff instead of using the 'lan_status_r' -one. Of course, there will be an error message, but this might help in -finding the useful addresses in the LAN RAM. - -Note that the first time you run the game with the new handlers (I've put -standard RAM, let me know if you have a better idea), you'll need to reset -the game ! Is it because the tests in CPUB are too late ? - -In the "test mode", if "Communication" Dip Switch is ON, you'll see "NG" -("Not Good") under each machine ID (this is logical). - -Be aware that the "Machine ID" Dip Switch must be set to 1, or the tests are -NOT performed (I can't explain why for the moment) ! - -2) 'wgpjoy*' - -LAN stuff : - -It is very surprising, but you also find the text about the LAN stuff in -the ROMS (still version 1.06), but you can't perform lan tests in the -"test mode". - -As the LAN version is the same, I'll have to look at the code to see where -the differences are. - -3) 'wgp2' - -LAN stuff : - -I haven't tested the LAN stuff for the moment. - - -Stephh's notes (based on the game M68000 code and some tests) : - -1) 'wgp', 'wgpu' and 'wgpj' - - - Region stored at 0x03fffe.w and sub-region stored at 0x03fffc.w - - Sets : - * 'wgp' : region = 0x0001 - sub-region = 0x0002 - * 'wgpj' : region = 0x0000 - sub-region = 0x0000 - - Coinage relies on the region (code at 0x00dd10) : - * 0x0000 (Japan) use TAITO_COINAGE_JAPAN_NEW - * 0x0001 (US) use TAITO_COINAGE_US - * 0x0002 (World), 0x0003 (US, licensed to ROMSTAR) and 0x0004 (licensed to PHOENIX ELECTRONICS CO.) - use slightly different TAITO_COINAGE_WORLD : 1C_7C instead of 1C_6C for Coin B - - GP order relies on the sub-region (code at 0x00bc9c) : - * 0x0000 : 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 - * 0x0001 : 0x01 0x00 0x02 0x03 0x04 0x05 0x06 0x07 - * 0x0002 : 0x02 0x00 0x01 0x02 0x04 0x05 0x06 0x07 - * 0x0003 : 0x03 0x00 0x01 0x03 0x04 0x05 0x06 0x07 - * 0x0004 : 0x04 0x00 0x01 0x02 0x03 0x05 0x06 0x07 - * 0x0005 : 0x05 0x00 0x01 0x02 0x03 0x04 0x06 0x07 - * 0x0006 : 0x06 0x00 0x01 0x02 0x03 0x04 0x05 0x07 - * 0x0007 : 0x07 0x00 0x01 0x02 0x03 0x04 0x05 0x06 - GP country : - * 0x00 : Japan - * 0x01 : Australia - * 0x02 : USA - * 0x03 : Germany - * 0x04 : Netherlands - * 0x05 : Belgium - * 0x06 : France - * 0x07 : England - - Notice screen only if region = 0x0000 or region = 0x0001 - - FBI logo only if region = 0x0001 - - DSWA bit 0 does the following things when set to ON : - * "MACHINE TEST" message and additional tests on startup (code at 0x00b06e) - * alternate "SHIFT PATTERN SELECT" screen (code at 0x00ccdc) - * accel / brake "buttons" have different behaviour (code at 0x029ca0) : - . same as default when selecting "NORMAL" (4 gears, street machines) - . swapped "buttons" when selecting "RACING" (6 gears, racing machines) - * additional value sent to shared memory every frame (code at 0x00afd2) - * additional "MOTOR TEST" in the "test mode" - - -2) 'wgpjoy*' - - - Region stored at 0x03fffe.w and sub-region stored at 0x03fffc.w - - Sets : - * 'wgpjoy' : region = 0x0000 - sub-region = 0x0000 - * 'wgpjoya' : region = 0x0000 - sub-region = 0x0000 - - DSWA bit 0 does the following things when set to ON : - * "MACHINE TEST" message and additional tests on startup (code at 0x00b094) - * alternate "SHIFT PATTERN SELECT" screen (code at 0x00cd02) - * accel / brake "buttons" have different behaviour (code at 0x0298c6) : - . same as default when selecting "NORMAL" (4 gears, street machines) - . swapped "buttons" when selecting "RACING" (6 gears, racing machines) - * additional value sent to shared memory every frame (code at 0x00aff8) - - DSWB bits 4 to 7 ("Communication" and "Machine ID") have no effect - due to "ori.w #$f0ff, D0" instruction at 0x003300 ! - - "Test mode" is completely different - - Same other notes as for 'wgp' (different addresses though) - - -3) 'wgp2' - - - Region stored at 0x03fffe.w and sub-region stored at 0x03fffc.w - - Sets : - * 'wgp2' : region = 0x0000 - sub-region = 0x0000 - - Coinage relies on the region (code at 0x00166e) : - * 0x0000 (Japan) use TAITO_COINAGE_JAPAN_NEW - * 0x0001 (US) use TAITO_COINAGE_US - * 0x0002 (World) use slightly different TAITO_COINAGE_WORLD : - 1C_7C instead of 1C_6C for Coin B, same settings otherwise - - Notice screen only if region = 0x0000 or region = 0x0001 - - FBI logo only if region = 0x0001 - - Routine at 0x01116c is the same as the one in 'wgp' based on sub-region; - however, as you can practically select your GP at start, and as I suck - at such driving game, I wonder if this routine is still called ! - - DSWA bit 0 does the following things when set to ON : - * unknown effect (code at 0x0126f6) - * accel / brake "buttons" have different behaviour (code at 0x0142d2) : - . same as default when selecting "NORMAL" (4 gears, street machines) - . swapped "buttons" when selecting "RACING" (6 gears, racing machines) - - Always "MOTOR TEST" in the "test mode" - -***************************************************************************/ - -#include "emu.h" -#include "includes/wgp.h" -#include "includes/taitoipt.h" - -#include "cpu/z80/z80.h" -#include "cpu/m68000/m68000.h" -#include "machine/adc0808.h" -#include "sound/2610intf.h" -#include "screen.h" -#include "speaker.h" - -#include <algorithm> - -void wgp_state::parse_control() -{ - /* bit 0 enables cpu B */ - /* however this fails when recovering from a save state - if cpu B is disabled !! */ - m_subcpu->set_input_line(INPUT_LINE_RESET, (m_cpua_ctrl & 0x1) ? CLEAR_LINE : ASSERT_LINE); - - /* bit 1 is "vibration" acc. to test mode */ -} - -void wgp_state::cpua_ctrl_w(u16 data)/* assumes Z80 sandwiched between 68Ks */ -{ - if ((data &0xff00) && ((data &0xff) == 0)) - data = data >> 8; /* for Wgp */ - m_cpua_ctrl = data; - - parse_control(); - - logerror("CPU #0 PC %06x: write %04x to cpu control\n",m_maincpu->pc(),data); -} - - -/*********************************************************** - INTERRUPTS -***********************************************************/ - -void wgp_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) -{ - switch (id) - { - /* 68000 A */ - case TIMER_INTERRUPT4: - m_maincpu->set_input_line(4, HOLD_LINE); - break; - /* 68000 B */ - case TIMER_CPUB_INTERRUPT6: - m_subcpu->set_input_line(6, HOLD_LINE); /* assumes Z80 sandwiched between the 68Ks */ - break; - default: - throw emu_fatalerror("Unknown id in wgp_state::device_timer"); - } -} - - -/***** Routines for particular games *****/ - -/* FWIW offset of 10000,10500 on ints can get CPUB obeying the - first CPUA command the same frame; probably not necessary */ - -INTERRUPT_GEN_MEMBER(wgp_state::cpub_interrupt) -{ - m_cpub_int6_timer->adjust(m_subcpu->cycles_to_attotime(200000-500)); - device.execute().set_input_line(4, HOLD_LINE); -} - - -/********************************************************** - GAME INPUTS -**********************************************************/ - -u16 wgp_state::lan_status_r() -{ - logerror("CPU #2 PC %06x: warning - read lan status\n",m_subcpu->pc()); - - return (0x4 << 8); /* CPUB expects this in code at $104d0 (Wgp) */ -} - -void wgp_state::rotate_port_w(offs_t offset, u16 data) -{ - /* This port may be for piv/sprite layer rotation. - - Wgp2 pokes a single set of values (see 2 routines from - $4e4a), so if this is rotation then Wgp2 *doesn't* use - it. - - Wgp pokes a wide variety of values here, which appear - to move up and down as rotation control words might. - See $ae06-d8 which pokes piv ctrl words, then pokes - values to this port. - - There is a lookup area in the data rom from $d0000-$da400 - which contains sets of 4 words (used for ports 0-3). - NB: port 6 is not written. - */ - - switch (offset) - { - case 0x00: - { -//logerror("CPU #0 PC %06x: warning - port %04x write %04x\n",m_maincpu->pc(),port_sel,data); - - m_rotate_ctrl[m_port_sel] = data; - return; - } - - case 0x01: - { - m_port_sel = data & 0x7; - } - } -} - -u8 wgp_state::accel_r() -{ - if (m_fake.read_safe(0) & 0x40) // pressing accel - return 0xff; - else - return 0x00; -} - -u8 wgp_state::steer_r() -{ - int steer = 0x40; - int fake = m_fake.read_safe(0); - - if (!(fake & 0x10)) // Analogue steer (the real control method) - { - // Reduce span to 0x80 - steer = (m_steer.read_safe(0) * 0x80) / 0x100; - } - else // Digital steer - { - if (fake & 0x08) // pressing down - steer = 0x20; - - if (fake & 0x04) // pressing up - steer = 0x60; - - if (fake & 0x02) // pressing right - steer = 0x00; - - if (fake & 0x01) // pressing left - steer = 0x80; - } - - return steer; -} - -u8 wgp_state::steer_offset_r() -{ - return 0xc0; // steer offset, correct acc. to service mode -} - -u8 wgp_state::accel_offset_r() -{ - return 0xbf; // accel offset, correct acc. to service mode -} - -u8 wgp_state::brake_r() -{ - if (m_fake.read_safe(0) & 0x80) // pressing brake - return 0xcf; - else - return 0xff; -} - -u8 wgp_state::unknown_r() -{ - return m_unknown.read_safe(0); // unknown -} - -void wgp_state::coins_w(u8 data) -{ - machine().bookkeeping().coin_lockout_w(0, ~data & 0x01); - machine().bookkeeping().coin_lockout_w(1, ~data & 0x02); - machine().bookkeeping().coin_counter_w(0, data & 0x04); - machine().bookkeeping().coin_counter_w(1, data & 0x08); -} - - -/********************************************************** - SOUND -**********************************************************/ - -void wgp_state::sound_bankswitch_w(u8 data) -{ - m_z80bank->set_entry(data & 3); -} - -/***************************************************************** - MEMORY STRUCTURES -*****************************************************************/ - -void wgp_state::main_map(address_map &map) -{ - map(0x000000, 0x0fffff).rom(); - map(0x100000, 0x10ffff).ram(); /* main CPUA ram */ - map(0x140000, 0x143fff).ram().share("sharedram"); - map(0x180000, 0x18000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0xff00); - map(0x1c0000, 0x1c0001).w(FUNC(wgp_state::cpua_ctrl_w)); - map(0x200000, 0x20000f).rw("adc", FUNC(adc0809_device::data_r), FUNC(adc0809_device::address_offset_start_w)).umask16(0x00ff); - map(0x300000, 0x30ffff).rw(m_tc0100scn, FUNC(tc0100scn_device::ram_r), FUNC(tc0100scn_device::ram_w)); /* tilemaps */ - map(0x320000, 0x32000f).rw(m_tc0100scn, FUNC(tc0100scn_device::ctrl_r), FUNC(tc0100scn_device::ctrl_w)); - map(0x400000, 0x40bfff).ram().share("spritemap"); /* sprite tilemaps */ - map(0x40c000, 0x40dfff).ram().share("spriteram"); /* sprite ram */ - map(0x40fff0, 0x40fff1).nopw(); /* ?? (writes 0x8000 and 0 alternately - Wgp2 just 0) */ - map(0x500000, 0x501fff).ram(); /* unknown/unused */ - map(0x502000, 0x517fff).ram().w(FUNC(wgp_state::pivram_word_w)).share("pivram"); /* piv tilemaps */ - map(0x520000, 0x52001f).ram().w(FUNC(wgp_state::piv_ctrl_word_w)).share("piv_ctrlram"); - map(0x600000, 0x600003).w(FUNC(wgp_state::rotate_port_w)); /* rotation control ? */ - map(0x700000, 0x701fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); -} - -void wgp_state::cpu2_map(address_map &map) -{ /* LAN areas not mapped... */ - map(0x000000, 0x03ffff).rom(); - map(0x100000, 0x103fff).ram(); - map(0x140000, 0x143fff).ram().share("sharedram"); - map(0x200001, 0x200001).w(m_tc0140syt, FUNC(tc0140syt_device::master_port_w)); - map(0x200003, 0x200003).rw(m_tc0140syt, FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w)); -// map(0x380000, 0x383fff).ram(); // LAN RAM - map(0x380000, 0x380001).r(FUNC(wgp_state::lan_status_r)); // ?? - // a lan input area is read somewhere above the status - // (make the status return 0 and log)... -} - - -/***************************************************************************/ - -void wgp_state::z80_sound_map(address_map &map) -{ - map(0x0000, 0x3fff).rom(); - map(0x4000, 0x7fff).bankr("z80bank"); - map(0xc000, 0xdfff).ram(); - map(0xe000, 0xe003).rw("ymsnd", FUNC(ym2610_device::read), FUNC(ym2610_device::write)); - map(0xe200, 0xe200).nopr().w(m_tc0140syt, FUNC(tc0140syt_device::slave_port_w)); - map(0xe201, 0xe201).rw(m_tc0140syt, FUNC(tc0140syt_device::slave_comm_r), FUNC(tc0140syt_device::slave_comm_w)); - map(0xe400, 0xe403).nopw(); /* pan */ - map(0xea00, 0xea00).nopr(); - map(0xee00, 0xee00).nopw(); /* ? */ - map(0xf000, 0xf000).nopw(); /* ? */ - map(0xf200, 0xf200).w(FUNC(wgp_state::sound_bankswitch_w)); -} - - -/*********************************************************** - INPUT PORTS, DIPs -***********************************************************/ - -static INPUT_PORTS_START( wgp_joy_generic ) - PORT_START("DSWA") - PORT_DIPNAME( 0x01, 0x01, "Gear Shift" ) /* see notes */ - PORT_DIPSETTING( 0x01, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x00, "Normal / Racing" ) - TAITO_DSWA_BITS_1_TO_3 - /* The 4 following Dip Switches will be filled by TAITO_COINAGE_* macros */ - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - - PORT_START("DSWB") - TAITO_DIFFICULTY - PORT_DIPNAME( 0x04, 0x04, "Shift Pattern Select" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x04, DEF_STR( On ) ) - PORT_DIPUNUSED( 0x08, IP_ACTIVE_LOW ) - PORT_DIPUNUSED( 0x10, IP_ACTIVE_LOW ) /* see notes */ - PORT_DIPUNUSED( 0x20, IP_ACTIVE_LOW ) /* see notes */ - PORT_DIPUNUSED( 0x40, IP_ACTIVE_LOW ) /* see notes */ - PORT_DIPUNUSED( 0x80, IP_ACTIVE_LOW ) /* see notes */ - - PORT_START("IN0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) /* shift up - see notes */ - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) /* shift down - see notes */ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("IN1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("IN2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) /* brake */ - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) /* accel */ - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) -INPUT_PORTS_END - -static INPUT_PORTS_START( wgp_no_joy_generic ) - PORT_INCLUDE(wgp_joy_generic) - - PORT_MODIFY("DSWB") - PORT_DIPNAME( 0x10, 0x10, "Communication" ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0xe0, 0xe0, "Machine ID" ) - PORT_DIPSETTING( 0xe0, "1" ) - PORT_DIPSETTING( 0xc0, "2" ) - PORT_DIPSETTING( 0xa0, "3" ) - PORT_DIPSETTING( 0x80, "4" ) - PORT_DIPSETTING( 0x60, "5" ) - PORT_DIPSETTING( 0x40, "6" ) - PORT_DIPSETTING( 0x20, "7" ) - PORT_DIPSETTING( 0x00, "8" ) - - PORT_MODIFY("IN0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Freeze") PORT_CODE(KEYCODE_F1) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) /* shift up - see notes */ - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) /* shift down - see notes */ - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) - - PORT_MODIFY("IN2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_TILT ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 ) - - PORT_START("STEER") - PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(20) PORT_KEYDELTA(25) PORT_REVERSE PORT_PLAYER(1) - - PORT_START("UNKNOWN") - PORT_BIT( 0xff, 0x00, IPT_AD_STICK_Y ) PORT_SENSITIVITY(20) PORT_KEYDELTA(10) PORT_PLAYER(2) - - /* fake inputs, allowing digital steer etc. */ - PORT_START("FAKE") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(1) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(1) - PORT_CONFNAME( 0x10, 0x10, "Steering type" ) - PORT_CONFSETTING( 0x10, "Digital" ) - PORT_CONFSETTING( 0x00, "Analogue" ) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) /* accel */ - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) /* brake */ -INPUT_PORTS_END - - -static INPUT_PORTS_START( wgpu ) - PORT_INCLUDE(wgp_no_joy_generic) - - /* 0x180000 -> 0x10bf16 and 0x140010 (shared RAM) */ - PORT_MODIFY("DSWA") - TAITO_COINAGE_US - - /* 0x180002 -> 0x10bf18 and 0x140012 (shared RAM) : DSWB */ - - PORT_MODIFY("IN1") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_PLAYER(1) /* "start lump" (lamp?) - test mode only */ - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_PLAYER(1) /* "brake lump" (lamp?) - test mode only */ -INPUT_PORTS_END - -static INPUT_PORTS_START( wgpj ) - PORT_INCLUDE(wgpu) - - PORT_MODIFY("DSWA") - TAITO_COINAGE_JAPAN_NEW -INPUT_PORTS_END - -static INPUT_PORTS_START( wgp ) - PORT_INCLUDE(wgpu) - - PORT_MODIFY("DSWA") - TAITO_COINAGE_WORLD -INPUT_PORTS_END - -static INPUT_PORTS_START( wgpjoy ) - PORT_INCLUDE(wgp_joy_generic) - - /* 0x180000 -> 0x10bf1a and 0x140010 (shared RAM) */ - PORT_MODIFY("DSWA") - TAITO_COINAGE_JAPAN_NEW - - /* 0x180002 -> 0x10bf1c and 0x140012 (shared RAM) : DSWB*/ -INPUT_PORTS_END - -static INPUT_PORTS_START( wgp2 ) - PORT_INCLUDE(wgp_no_joy_generic) - - /* 0x180000 -> 0x107d3a.b (-$2c6,A5) and 0x140018 (shared RAM) */ - PORT_MODIFY("DSWA") - TAITO_COINAGE_JAPAN_NEW - - /* 0x180002 -> 0x107d3b.b (-$2c5,A5) and 0x140012 (shared RAM) : DSWB */ -INPUT_PORTS_END - - -/*********************************************************** - GFX DECODING -***********************************************************/ - -static GFXDECODE_START( gfx_wgp ) - GFXDECODE_ENTRY( "sprites", 0x0, gfx_16x16x4_packed_lsb, 0, 256 ) /* sprites */ - GFXDECODE_ENTRY( "piv", 0x0, gfx_16x16x4_packed_lsb, 0, 256 ) /* piv */ -GFXDECODE_END - - -/*********************************************************** - MACHINE DRIVERS - -Wgp has high interleaving to prevent "common ram error". -However sync to vblank is lacking, which is causing the -graphics glitches. -***********************************************************/ - -void wgp_state::device_post_load() -{ - parse_control(); -} - -void wgp_state::machine_reset() -{ - m_cpua_ctrl = 0xff; - m_port_sel = 0; - m_piv_ctrl_reg = 0; - - for (int i = 0; i < 3; i++) - { - m_piv_zoom[i] = 0; - m_piv_scrollx[i] = 0; - m_piv_scrolly[i] = 0; - } - - std::fill(std::begin(m_rotate_ctrl), std::end(m_rotate_ctrl), 0); -} - -void wgp_state::machine_start() -{ - m_z80bank->configure_entries(0, 4, memregion("audiocpu")->base(), 0x4000); - - m_cpub_int6_timer = timer_alloc(TIMER_CPUB_INTERRUPT6); - - save_item(NAME(m_cpua_ctrl)); - save_item(NAME(m_port_sel)); -} - -void wgp_state::wgp(machine_config &config) -{ - /* basic machine hardware */ - M68000(config, m_maincpu, 12000000); /* 12 MHz ??? */ - m_maincpu->set_addrmap(AS_PROGRAM, &wgp_state::main_map); - m_maincpu->set_vblank_int("screen", FUNC(wgp_state::irq4_line_hold)); - - Z80(config, m_audiocpu, 16000000/4); /* 4 MHz ??? */ - m_audiocpu->set_addrmap(AS_PROGRAM, &wgp_state::z80_sound_map); - - M68000(config, m_subcpu, 12000000); /* 12 MHz ??? */ - m_subcpu->set_addrmap(AS_PROGRAM, &wgp_state::cpu2_map); - m_subcpu->set_vblank_int("screen", FUNC(wgp_state::cpub_interrupt)); - - config.set_maximum_quantum(attotime::from_hz(30000)); - - TC0220IOC(config, m_tc0220ioc, 0); - m_tc0220ioc->read_0_callback().set_ioport("DSWA"); - m_tc0220ioc->read_1_callback().set_ioport("DSWB"); - m_tc0220ioc->read_2_callback().set_ioport("IN0"); - m_tc0220ioc->read_3_callback().set_ioport("IN1"); - m_tc0220ioc->write_4_callback().set(FUNC(wgp_state::coins_w)); - m_tc0220ioc->read_7_callback().set_ioport("IN2"); - - adc0809_device &adc(ADC0809(config, "adc", 16_MHz_XTAL / 32)); // TODO: verify divider - adc.eoc_ff_callback().set_inputline(m_maincpu, M68K_IRQ_6); - adc.in_callback<0>().set(FUNC(wgp_state::accel_r)); - adc.in_callback<1>().set(FUNC(wgp_state::steer_r)); - adc.in_callback<2>().set(FUNC(wgp_state::steer_offset_r)); - adc.in_callback<3>().set(FUNC(wgp_state::accel_offset_r)); - adc.in_callback<4>().set(FUNC(wgp_state::brake_r)); - adc.in_callback<5>().set(FUNC(wgp_state::unknown_r)); - - /* video hardware */ - screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); - screen.set_refresh_hz(60); - screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); - screen.set_size(40*8, 32*8); - screen.set_visarea(0*8, 40*8-1, 2*8, 32*8-1); - screen.set_screen_update(FUNC(wgp_state::screen_update)); - screen.set_palette(m_palette); - - GFXDECODE(config, m_gfxdecode, m_palette, gfx_wgp); - PALETTE(config, m_palette).set_format(palette_device::RGBx_444, 4096); - - TC0100SCN(config, m_tc0100scn, 0); - m_tc0100scn->set_palette(m_palette); - - /* sound hardware */ - SPEAKER(config, "lspeaker").front_left(); - SPEAKER(config, "rspeaker").front_right(); - - ym2610_device &ymsnd(YM2610(config, "ymsnd", 16000000/2)); - ymsnd.irq_handler().set_inputline(m_audiocpu, 0); // assumes Z80 sandwiched between 68Ks - ymsnd.add_route(0, "lspeaker", 0.25); - ymsnd.add_route(0, "rspeaker", 0.25); - ymsnd.add_route(1, "lspeaker", 1.0); - ymsnd.add_route(2, "rspeaker", 1.0); - - TC0140SYT(config, m_tc0140syt, 0); - m_tc0140syt->set_master_tag(m_subcpu); - m_tc0140syt->set_slave_tag(m_audiocpu); -} - -void wgp_state::wgp2(machine_config &config) -{ - wgp(config); - - config.set_maximum_quantum(attotime::from_hz(12000)); - - /* video hardware */ - MCFG_VIDEO_START_OVERRIDE(wgp_state, wgp2) - - m_tc0100scn->set_offsets(4, 2); -} - - -/*************************************************************************** - DRIVERS -***************************************************************************/ - -ROM_START( wgp ) // labels actually have the character * instead of + - ROM_REGION( 0x100000, "maincpu", 0 ) /* 256K for 68000 code (CPU A) */ - ROM_LOAD16_BYTE( "c32-25++.12", 0x00000, 0x20000, CRC(2c7a863b) SHA1(f1e0d6829e74c6f48c4c5a3230e4bea14dbc3c01) ) - ROM_LOAD16_BYTE( "c32-31++.13", 0x00001, 0x20000, CRC(42ff25c0) SHA1(42bdbbd24389384b8772edb38cca3a42312bb59c) ) - ROM_LOAD16_WORD_SWAP( "c32-10.9", 0x80000, 0x80000, CRC(a44c66e9) SHA1(b5fa978e43303003969033b8096fd68885cfc202) ) /* data rom */ - - ROM_REGION( 0x40000, "sub", 0 ) /* 256K for 68000 code (CPU B) */ - ROM_LOAD16_BYTE( "c32-28+.64", 0x00000, 0x20000, CRC(38f3c7bf) SHA1(bfcaa036e5ff23f2bbf74d738498eda7d6ccd554) ) - ROM_LOAD16_BYTE( "c32-27+.63", 0x00001, 0x20000, CRC(be2397fb) SHA1(605a02d56ae6007b36299a2eceb7ca180cbf6df9) ) - - ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 sound cpu */ - ROM_LOAD( "c32-24.34", 0x00000, 0x10000, CRC(e9adb447) SHA1(8b7044b6ea864e4cfd60b87abd28c38caecb147d) ) - - ROM_REGION( 0x80000, "tc0100scn", 0 ) - ROM_LOAD16_WORD_SWAP( "c32-09.16", 0x00000, 0x80000, CRC(96495f35) SHA1(ce99b4d8aeb98304e8ae3aa4966289c76ae4ff69) ) /* SCR */ - - ROM_REGION( 0x200000, "piv", 0 ) - ROM_LOAD64_WORD( "c32-04.9", 0x000006, 0x80000, CRC(473a19c9) SHA1(4c632f4d5b725790a1be9d1143318d2f682fe9be) ) /* PIV */ - ROM_LOAD64_WORD( "c32-03.10", 0x000004, 0x80000, CRC(9ec3e134) SHA1(e82a50927e10e551124a3b81399b052974cfba12) ) - ROM_LOAD64_WORD( "c32-02.11", 0x000002, 0x80000, CRC(c5721f3a) SHA1(4a8e9412de23001b09eb3425ba6006b4c09a907b) ) - ROM_LOAD64_WORD( "c32-01.12", 0x000000, 0x80000, CRC(d27d7d93) SHA1(82ae5856bbdb49cb8c2ca20eef86f6b617ea2c45) ) - - ROM_REGION( 0x200000, "sprites", 0 ) - ROM_LOAD32_WORD( "c32-05.71", 0x000000, 0x80000, CRC(3698d47a) SHA1(71978f9e1f58fa1259e67d8a7ea68e3ec1314c6b) ) /* OBJ */ - ROM_LOAD32_WORD( "c32-06.70", 0x000002, 0x80000, CRC(f0267203) SHA1(7fd7b8d7a9efa405fc647c16fb99ffcb1fe985c5) ) - ROM_LOAD32_WORD( "c32-07.69", 0x100000, 0x80000, CRC(743d46bd) SHA1(6b655b3fbfad8b52e38d7388aab564f5fa3e778c) ) - ROM_LOAD32_WORD( "c32-08.68", 0x100002, 0x80000, CRC(faab63b0) SHA1(6e1aaf2642bee7d7bc9e21a7bf7f81d9ff766c50) ) - - ROM_REGION( 0x80000, "ymsnd", 0 ) /* ADPCM samples */ - ROM_LOAD( "c32-11.8", 0x00000, 0x80000, CRC(2b326ff0) SHA1(3c442e3c97234e4514a7bed31644212586869bd0) ) - - ROM_REGION( 0x80000, "ymsnd.deltat", 0 ) /* Delta-T samples */ - ROM_LOAD( "c32-12.7", 0x00000, 0x80000, CRC(df48a37b) SHA1(c0c191f4b8a5f55c0f1e52dac9cd3f7d15adace6) ) - -// Pals (Guru dump) -// ROM_LOAD( "c32-13.14", 0x00000, 0x00???, NO_DUMP ) -// ROM_LOAD( "c32-14.19", 0x00000, 0x00???, NO_DUMP ) -// ROM_LOAD( "c32-15.52", 0x00000, 0x00???, NO_DUMP ) -// ROM_LOAD( "c32-16.54", 0x00000, 0x00???, NO_DUMP ) -// ROM_LOAD( "c32-17.53", 0x00000, 0x00???, NO_DUMP ) -// ROM_LOAD( "c32-18.64", 0x00000, 0x00???, NO_DUMP ) -// ROM_LOAD( "c32-19.27", 0x00000, 0x00???, NO_DUMP ) -// ROM_LOAD( "c32-20.67", 0x00000, 0x00???, NO_DUMP ) -// ROM_LOAD( "c32-21.85", 0x00000, 0x00???, NO_DUMP ) -// ROM_LOAD( "c32-22.24", 0x00000, 0x00???, NO_DUMP ) -// ROM_LOAD( "c32-23.13", 0x00000, 0x00???, NO_DUMP ) - -// Pals on lan interface board -// ROM_LOAD( "c32-34", 0x00000, 0x00???, NO_DUMP ) -// ROM_LOAD( "c32-35", 0x00000, 0x00???, NO_DUMP ) -ROM_END - -ROM_START( wgpu ) - ROM_REGION( 0x100000, "maincpu", 0 ) /* 256K for 68000 code (CPU A) */ - ROM_LOAD16_BYTE( "c32-25.12", 0x00000, 0x20000, CRC(0cc81e77) SHA1(435190bc24423e1e34134dff3cd4b79e120852d1) ) - ROM_LOAD16_BYTE( "c32-29.13", 0x00001, 0x20000, CRC(fab47cf0) SHA1(c0129c0290b48f24c25e4dd7c6c937675e31842a) ) - ROM_LOAD16_WORD_SWAP( "c32-10.9", 0x80000, 0x80000, CRC(a44c66e9) SHA1(b5fa978e43303003969033b8096fd68885cfc202) ) /* data rom */ - - ROM_REGION( 0x40000, "sub", 0 ) /* 256K for 68000 code (CPU B) */ - ROM_LOAD16_BYTE( "c32-28.64", 0x00000, 0x20000, CRC(38f3c7bf) SHA1(bfcaa036e5ff23f2bbf74d738498eda7d6ccd554) ) - ROM_LOAD16_BYTE( "c32-27.63", 0x00001, 0x20000, CRC(be2397fb) SHA1(605a02d56ae6007b36299a2eceb7ca180cbf6df9) ) - - ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 sound cpu */ - ROM_LOAD( "c32-24.34", 0x00000, 0x10000, CRC(e9adb447) SHA1(8b7044b6ea864e4cfd60b87abd28c38caecb147d) ) - - ROM_REGION( 0x80000, "tc0100scn", 0 ) - ROM_LOAD16_WORD_SWAP( "c32-09.16", 0x00000, 0x80000, CRC(96495f35) SHA1(ce99b4d8aeb98304e8ae3aa4966289c76ae4ff69) ) /* SCR */ - - ROM_REGION( 0x200000, "piv", 0 ) - ROM_LOAD64_WORD( "c32-04.9", 0x000006, 0x80000, CRC(473a19c9) SHA1(4c632f4d5b725790a1be9d1143318d2f682fe9be) ) /* PIV */ - ROM_LOAD64_WORD( "c32-03.10", 0x000004, 0x80000, CRC(9ec3e134) SHA1(e82a50927e10e551124a3b81399b052974cfba12) ) - ROM_LOAD64_WORD( "c32-02.11", 0x000002, 0x80000, CRC(c5721f3a) SHA1(4a8e9412de23001b09eb3425ba6006b4c09a907b) ) - ROM_LOAD64_WORD( "c32-01.12", 0x000000, 0x80000, CRC(d27d7d93) SHA1(82ae5856bbdb49cb8c2ca20eef86f6b617ea2c45) ) - - ROM_REGION( 0x200000, "sprites", 0 ) - ROM_LOAD32_WORD( "c32-05.71", 0x000000, 0x80000, CRC(3698d47a) SHA1(71978f9e1f58fa1259e67d8a7ea68e3ec1314c6b) ) /* OBJ */ - ROM_LOAD32_WORD( "c32-06.70", 0x000002, 0x80000, CRC(f0267203) SHA1(7fd7b8d7a9efa405fc647c16fb99ffcb1fe985c5) ) - ROM_LOAD32_WORD( "c32-07.69", 0x100000, 0x80000, CRC(743d46bd) SHA1(6b655b3fbfad8b52e38d7388aab564f5fa3e778c) ) - ROM_LOAD32_WORD( "c32-08.68", 0x100002, 0x80000, CRC(faab63b0) SHA1(6e1aaf2642bee7d7bc9e21a7bf7f81d9ff766c50) ) - - ROM_REGION( 0x80000, "ymsnd", 0 ) /* ADPCM samples */ - ROM_LOAD( "c32-11.8", 0x00000, 0x80000, CRC(2b326ff0) SHA1(3c442e3c97234e4514a7bed31644212586869bd0) ) - - ROM_REGION( 0x80000, "ymsnd.deltat", 0 ) /* Delta-T samples */ - ROM_LOAD( "c32-12.7", 0x00000, 0x80000, CRC(df48a37b) SHA1(c0c191f4b8a5f55c0f1e52dac9cd3f7d15adace6) ) - -// Pals (Guru dump) -// ROM_LOAD( "c32-13.14", 0x00000, 0x00???, NO_DUMP ) -// ROM_LOAD( "c32-14.19", 0x00000, 0x00???, NO_DUMP ) -// ROM_LOAD( "c32-15.52", 0x00000, 0x00???, NO_DUMP ) -// ROM_LOAD( "c32-16.54", 0x00000, 0x00???, NO_DUMP ) -// ROM_LOAD( "c32-17.53", 0x00000, 0x00???, NO_DUMP ) -// ROM_LOAD( "c32-18.64", 0x00000, 0x00???, NO_DUMP ) -// ROM_LOAD( "c32-19.27", 0x00000, 0x00???, NO_DUMP ) -// ROM_LOAD( "c32-20.67", 0x00000, 0x00???, NO_DUMP ) -// ROM_LOAD( "c32-21.85", 0x00000, 0x00???, NO_DUMP ) -// ROM_LOAD( "c32-22.24", 0x00000, 0x00???, NO_DUMP ) -// ROM_LOAD( "c32-23.13", 0x00000, 0x00???, NO_DUMP ) - -// Pals on lan interface board -// ROM_LOAD( "c32-34", 0x00000, 0x00???, NO_DUMP ) -// ROM_LOAD( "c32-35", 0x00000, 0x00???, NO_DUMP ) -ROM_END - -ROM_START( wgpj ) - ROM_REGION( 0x100000, "maincpu", 0 ) /* 256K for 68000 code (CPU A) */ - ROM_LOAD16_BYTE( "c32-48.12", 0x00000, 0x20000, CRC(819cc134) SHA1(501bb1038979117586f6d8202ca6e1e44191f421) ) - ROM_LOAD16_BYTE( "c32-49.13", 0x00001, 0x20000, CRC(4a515f02) SHA1(d0be52bbb5cc8151b23363092ac04e27b2d20a50) ) - ROM_LOAD16_WORD_SWAP( "c32-10.9", 0x80000, 0x80000, CRC(a44c66e9) SHA1(b5fa978e43303003969033b8096fd68885cfc202) ) /* data rom */ - - ROM_REGION( 0x40000, "sub", 0 ) /* 256K for 68000 code (CPU B) */ - ROM_LOAD16_BYTE( "c32-28.64", 0x00000, 0x20000, CRC(38f3c7bf) SHA1(bfcaa036e5ff23f2bbf74d738498eda7d6ccd554) ) - ROM_LOAD16_BYTE( "c32-27.63", 0x00001, 0x20000, CRC(be2397fb) SHA1(605a02d56ae6007b36299a2eceb7ca180cbf6df9) ) - - ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 sound cpu */ - ROM_LOAD( "c32-24.34", 0x00000, 0x10000, CRC(e9adb447) SHA1(8b7044b6ea864e4cfd60b87abd28c38caecb147d) ) - - ROM_REGION( 0x80000, "tc0100scn", 0 ) - ROM_LOAD16_WORD_SWAP( "c32-09.16", 0x00000, 0x80000, CRC(96495f35) SHA1(ce99b4d8aeb98304e8ae3aa4966289c76ae4ff69) ) /* SCR */ - - ROM_REGION( 0x200000, "piv", 0 ) - ROM_LOAD64_WORD( "c32-04.9", 0x000006, 0x80000, CRC(473a19c9) SHA1(4c632f4d5b725790a1be9d1143318d2f682fe9be) ) /* PIV */ - ROM_LOAD64_WORD( "c32-03.10", 0x000004, 0x80000, CRC(9ec3e134) SHA1(e82a50927e10e551124a3b81399b052974cfba12) ) - ROM_LOAD64_WORD( "c32-02.11", 0x000002, 0x80000, CRC(c5721f3a) SHA1(4a8e9412de23001b09eb3425ba6006b4c09a907b) ) - ROM_LOAD64_WORD( "c32-01.12", 0x000000, 0x80000, CRC(d27d7d93) SHA1(82ae5856bbdb49cb8c2ca20eef86f6b617ea2c45) ) - - ROM_REGION( 0x200000, "sprites", 0 ) - ROM_LOAD32_WORD( "c32-05.71", 0x000000, 0x80000, CRC(3698d47a) SHA1(71978f9e1f58fa1259e67d8a7ea68e3ec1314c6b) ) /* OBJ */ - ROM_LOAD32_WORD( "c32-06.70", 0x000002, 0x80000, CRC(f0267203) SHA1(7fd7b8d7a9efa405fc647c16fb99ffcb1fe985c5) ) - ROM_LOAD32_WORD( "c32-07.69", 0x100000, 0x80000, CRC(743d46bd) SHA1(6b655b3fbfad8b52e38d7388aab564f5fa3e778c) ) - ROM_LOAD32_WORD( "c32-08.68", 0x100002, 0x80000, CRC(faab63b0) SHA1(6e1aaf2642bee7d7bc9e21a7bf7f81d9ff766c50) ) - - ROM_REGION( 0x80000, "ymsnd", 0 ) /* ADPCM samples */ - ROM_LOAD( "c32-11.8", 0x00000, 0x80000, CRC(2b326ff0) SHA1(3c442e3c97234e4514a7bed31644212586869bd0) ) - - ROM_REGION( 0x80000, "ymsnd.deltat", 0 ) /* Delta-T samples */ - ROM_LOAD( "c32-12.7", 0x00000, 0x80000, CRC(df48a37b) SHA1(c0c191f4b8a5f55c0f1e52dac9cd3f7d15adace6) ) -ROM_END - -ROM_START( wgpjoy ) - ROM_REGION( 0x100000, "maincpu", 0 ) /* 256K for 68000 code (CPU A) */ - ROM_LOAD16_BYTE( "c32-57.12", 0x00000, 0x20000, CRC(13a78911) SHA1(d3ace25dddce56cc35e93992f4fae01e87693d36) ) - ROM_LOAD16_BYTE( "c32-58.13", 0x00001, 0x20000, CRC(326d367b) SHA1(cbfb15841f61fa856876d4321fbce190f89a5020) ) - ROM_LOAD16_WORD_SWAP( "c32-10.9", 0x80000, 0x80000, CRC(a44c66e9) SHA1(b5fa978e43303003969033b8096fd68885cfc202) ) /* data rom */ - - ROM_REGION( 0x40000, "sub", 0 ) /* 256K for 68000 code (CPU B) */ - ROM_LOAD16_BYTE( "c32-60.64", 0x00000, 0x20000, CRC(7a980312) SHA1(c85beff4c8201061b99d87f8db67e2b85dff00e3) ) - ROM_LOAD16_BYTE( "c32-59.63", 0x00001, 0x20000, CRC(ed75b333) SHA1(fa47ea38f7ba1cb3463065357db9a9b0f0eeab77) ) - - ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 sound cpu */ - ROM_LOAD( "c32-61.34", 0x00000, 0x10000, CRC(2fcad5a3) SHA1(f0f658490655b521af631af763c07e37834dc5a0) ) - - ROM_REGION( 0x80000, "tc0100scn", 0 ) - ROM_LOAD16_WORD_SWAP( "c32-09.16", 0x00000, 0x80000, CRC(96495f35) SHA1(ce99b4d8aeb98304e8ae3aa4966289c76ae4ff69) ) /* SCR */ - - ROM_REGION( 0x200000, "piv", 0 ) - ROM_LOAD64_WORD( "c32-04.9", 0x000006, 0x80000, CRC(473a19c9) SHA1(4c632f4d5b725790a1be9d1143318d2f682fe9be) ) /* PIV */ - ROM_LOAD64_WORD( "c32-03.10", 0x000004, 0x80000, CRC(9ec3e134) SHA1(e82a50927e10e551124a3b81399b052974cfba12) ) - ROM_LOAD64_WORD( "c32-02.11", 0x000002, 0x80000, CRC(c5721f3a) SHA1(4a8e9412de23001b09eb3425ba6006b4c09a907b) ) - ROM_LOAD64_WORD( "c32-01.12", 0x000000, 0x80000, CRC(d27d7d93) SHA1(82ae5856bbdb49cb8c2ca20eef86f6b617ea2c45) ) - - ROM_REGION( 0x200000, "sprites", 0 ) - ROM_LOAD32_WORD( "c32-05.71", 0x000000, 0x80000, CRC(3698d47a) SHA1(71978f9e1f58fa1259e67d8a7ea68e3ec1314c6b) ) /* OBJ */ - ROM_LOAD32_WORD( "c32-06.70", 0x000002, 0x80000, CRC(f0267203) SHA1(7fd7b8d7a9efa405fc647c16fb99ffcb1fe985c5) ) - ROM_LOAD32_WORD( "c32-07.69", 0x100000, 0x80000, CRC(743d46bd) SHA1(6b655b3fbfad8b52e38d7388aab564f5fa3e778c) ) - ROM_LOAD32_WORD( "c32-08.68", 0x100002, 0x80000, CRC(faab63b0) SHA1(6e1aaf2642bee7d7bc9e21a7bf7f81d9ff766c50) ) - - ROM_REGION( 0x80000, "ymsnd", 0 ) /* ADPCM samples */ - ROM_LOAD( "c32-11.8", 0x00000, 0x80000, CRC(2b326ff0) SHA1(3c442e3c97234e4514a7bed31644212586869bd0) ) - - ROM_REGION( 0x80000, "ymsnd.deltat", 0 ) /* delta-t samples */ - ROM_LOAD( "c32-12.7", 0x00000, 0x80000, CRC(df48a37b) SHA1(c0c191f4b8a5f55c0f1e52dac9cd3f7d15adace6) ) -ROM_END - -ROM_START( wgpjoya ) /* Older joystick version ??? */ - ROM_REGION( 0x100000, "maincpu", 0 ) /* 256K for 68000 code (CPU A) */ - ROM_LOAD16_BYTE( "c32-57.12", 0x00000, 0x20000, CRC(13a78911) SHA1(d3ace25dddce56cc35e93992f4fae01e87693d36) ) - ROM_LOAD16_BYTE( "c32-58.13", 0x00001, 0x20000, CRC(326d367b) SHA1(cbfb15841f61fa856876d4321fbce190f89a5020) ) - ROM_LOAD16_WORD_SWAP( "c32-10.9", 0x80000, 0x80000, CRC(a44c66e9) SHA1(b5fa978e43303003969033b8096fd68885cfc202) ) /* data rom */ - - ROM_REGION( 0x40000, "sub", 0 ) /* 256K for 68000 code (CPU B) */ - ROM_LOAD16_BYTE( "c32-46.64", 0x00000, 0x20000, CRC(64191891) SHA1(91d1d51478f1c2785470de0ac2a048e367f7ea48) ) // older rev? - ROM_LOAD16_BYTE( "c32-45.63", 0x00001, 0x20000, CRC(759b39d5) SHA1(ed4ccd295c5595bdcac965b59293efb3c21ce48a) ) // older rev? - - ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 sound cpu */ - ROM_LOAD( "c32-61.34", 0x00000, 0x10000, CRC(2fcad5a3) SHA1(f0f658490655b521af631af763c07e37834dc5a0) ) - - ROM_REGION( 0x80000, "tc0100scn", 0 ) - ROM_LOAD16_WORD_SWAP( "c32-09.16", 0x00000, 0x80000, CRC(96495f35) SHA1(ce99b4d8aeb98304e8ae3aa4966289c76ae4ff69) ) /* SCR */ - - ROM_REGION( 0x200000, "piv", 0 ) - ROM_LOAD64_WORD( "c32-04.9", 0x000006, 0x80000, CRC(473a19c9) SHA1(4c632f4d5b725790a1be9d1143318d2f682fe9be) ) /* PIV */ - ROM_LOAD64_WORD( "c32-03.10", 0x000004, 0x80000, CRC(9ec3e134) SHA1(e82a50927e10e551124a3b81399b052974cfba12) ) - ROM_LOAD64_WORD( "c32-02.11", 0x000002, 0x80000, CRC(c5721f3a) SHA1(4a8e9412de23001b09eb3425ba6006b4c09a907b) ) - ROM_LOAD64_WORD( "c32-01.12", 0x000000, 0x80000, CRC(d27d7d93) SHA1(82ae5856bbdb49cb8c2ca20eef86f6b617ea2c45) ) - - ROM_REGION( 0x200000, "sprites", 0 ) - ROM_LOAD32_WORD( "c32-05.71", 0x000000, 0x80000, CRC(3698d47a) SHA1(71978f9e1f58fa1259e67d8a7ea68e3ec1314c6b) ) /* OBJ */ - ROM_LOAD32_WORD( "c32-06.70", 0x000002, 0x80000, CRC(f0267203) SHA1(7fd7b8d7a9efa405fc647c16fb99ffcb1fe985c5) ) - ROM_LOAD32_WORD( "c32-07.69", 0x100000, 0x80000, CRC(743d46bd) SHA1(6b655b3fbfad8b52e38d7388aab564f5fa3e778c) ) - ROM_LOAD32_WORD( "c32-08.68", 0x100002, 0x80000, CRC(faab63b0) SHA1(6e1aaf2642bee7d7bc9e21a7bf7f81d9ff766c50) ) - - ROM_REGION( 0x80000, "ymsnd", 0 ) /* ADPCM samples */ - ROM_LOAD( "c32-11.8", 0x00000, 0x80000, CRC(2b326ff0) SHA1(3c442e3c97234e4514a7bed31644212586869bd0) ) - - ROM_REGION( 0x80000, "ymsnd.deltat", 0 ) /* delta-t samples */ - ROM_LOAD( "c32-12.7", 0x00000, 0x80000, CRC(df48a37b) SHA1(c0c191f4b8a5f55c0f1e52dac9cd3f7d15adace6) ) -ROM_END - -ROM_START( wgp2 ) - ROM_REGION( 0x100000, "maincpu", 0 ) /* 256K for 68000 code (CPU A) */ - ROM_LOAD16_BYTE( "c73-01.12", 0x00000, 0x20000, CRC(c6434834) SHA1(75b2937a9bf18d268fa7bbfb3e822fba510ec2f1) ) - ROM_LOAD16_BYTE( "c73-02.13", 0x00001, 0x20000, CRC(c67f1ed1) SHA1(c30dc3fd46f103a75aa71f87c1fd6c0e7fed9214) ) - ROM_LOAD16_WORD_SWAP( "c32-10.9", 0x80000, 0x80000, CRC(a44c66e9) SHA1(b5fa978e43303003969033b8096fd68885cfc202) ) /* data rom */ - - ROM_REGION( 0x40000, "sub", 0 ) /* 256K for 68000 code (CPU B) */ - ROM_LOAD16_BYTE( "c73-04.64", 0x00000, 0x20000, CRC(383aa776) SHA1(bad18f0506e99a07d53e50abe7a548ff3d745e09) ) - ROM_LOAD16_BYTE( "c73-03.63", 0x00001, 0x20000, CRC(eb5067ef) SHA1(08d9d921c7a74877d7bb7641ae30c82d4d0653e3) ) - - ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 sound cpu */ - ROM_LOAD( "c73-05.34", 0x00000, 0x10000, CRC(7e00a299) SHA1(93696a229f17a15a92a8d9ef3b34d340de5dec44) ) - - ROM_REGION( 0x80000, "tc0100scn", 0 ) - ROM_LOAD16_WORD_SWAP( "c32-09.16", 0x00000, 0x80000, CRC(96495f35) SHA1(ce99b4d8aeb98304e8ae3aa4966289c76ae4ff69) ) /* SCR */ - - ROM_REGION( 0x200000, "piv", 0 ) - ROM_LOAD64_WORD( "c32-04.9", 0x000006, 0x80000, CRC(473a19c9) SHA1(4c632f4d5b725790a1be9d1143318d2f682fe9be) ) /* PIV */ - ROM_LOAD64_WORD( "c32-03.10", 0x000004, 0x80000, CRC(9ec3e134) SHA1(e82a50927e10e551124a3b81399b052974cfba12) ) - ROM_LOAD64_WORD( "c32-02.11", 0x000002, 0x80000, CRC(c5721f3a) SHA1(4a8e9412de23001b09eb3425ba6006b4c09a907b) ) - ROM_LOAD64_WORD( "c32-01.12", 0x000000, 0x80000, CRC(d27d7d93) SHA1(82ae5856bbdb49cb8c2ca20eef86f6b617ea2c45) ) - - ROM_REGION( 0x200000, "sprites", 0 ) - ROM_LOAD32_WORD( "c32-05.71", 0x000000, 0x80000, CRC(3698d47a) SHA1(71978f9e1f58fa1259e67d8a7ea68e3ec1314c6b) ) /* OBJ */ - ROM_LOAD32_WORD( "c32-06.70", 0x000002, 0x80000, CRC(f0267203) SHA1(7fd7b8d7a9efa405fc647c16fb99ffcb1fe985c5) ) - ROM_LOAD32_WORD( "c32-07.69", 0x100000, 0x80000, CRC(743d46bd) SHA1(6b655b3fbfad8b52e38d7388aab564f5fa3e778c) ) - ROM_LOAD32_WORD( "c32-08.68", 0x100002, 0x80000, CRC(faab63b0) SHA1(6e1aaf2642bee7d7bc9e21a7bf7f81d9ff766c50) ) - - ROM_REGION( 0x80000, "ymsnd", 0 ) /* ADPCM samples */ - ROM_LOAD( "c32-11.8", 0x00000, 0x80000, CRC(2b326ff0) SHA1(3c442e3c97234e4514a7bed31644212586869bd0) ) - - ROM_REGION( 0x80000, "ymsnd.deltat", 0 ) /* delta-t samples */ - ROM_LOAD( "c32-12.7", 0x00000, 0x80000, CRC(df48a37b) SHA1(c0c191f4b8a5f55c0f1e52dac9cd3f7d15adace6) ) - -// WGP2 security board (has TC0190FMC) -// ROM_LOAD( "c73-06", 0x00000, 0x00???, NO_DUMP ) -ROM_END - - -void wgp_state::init_wgp() -{ -#if 0 - /* Patch for coding error that causes corrupt data in - sprite tilemapping area from $4083c0-847f */ - u16 *ROM = (u16 *)memregion("maincpu")->base(); - ROM[0x25dc / 2] = 0x0602; // faulty value is 0x0206 -#endif -} - -void wgp_state::init_wgp2() -{ - /* Code patches to prevent failure in memory checks */ - u16 *ROM = (u16 *)memregion("sub")->base(); - ROM[0x8008 / 2] = 0x0; - ROM[0x8010 / 2] = 0x0; -} - -/* Working Games with some graphics problems - e.g. missing rotation */ - -GAME( 1989, wgp, 0, wgp, wgp, wgp_state, init_wgp, ROT0, "Taito Corporation Japan", "World Grand Prix (World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) -GAME( 1989, wgpu, wgp, wgp, wgpu, wgp_state, init_wgp, ROT0, "Taito America Corporation", "World Grand Prix (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) -GAME( 1989, wgpj, wgp, wgp, wgpj, wgp_state, init_wgp, ROT0, "Taito Corporation", "World Grand Prix (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) -GAME( 1989, wgpjoy, wgp, wgp, wgpjoy, wgp_state, init_wgp, ROT0, "Taito Corporation", "World Grand Prix (joystick version) (Japan, set 1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) -GAME( 1989, wgpjoya, wgp, wgp, wgpjoy, wgp_state, init_wgp, ROT0, "Taito Corporation", "World Grand Prix (joystick version) (Japan, set 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) -GAME( 1990, wgp2, wgp, wgp2, wgp2, wgp_state, init_wgp2, ROT0, "Taito Corporation", "World Grand Prix 2 (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) |