summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/wecleman.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/wecleman.cpp')
-rw-r--r--src/mame/drivers/wecleman.cpp1764
1 files changed, 0 insertions, 1764 deletions
diff --git a/src/mame/drivers/wecleman.cpp b/src/mame/drivers/wecleman.cpp
deleted file mode 100644
index 363cd1dcd13..00000000000
--- a/src/mame/drivers/wecleman.cpp
+++ /dev/null
@@ -1,1764 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Luca Elia
-/***************************************************************************
- WEC Le Mans 24 & Hot Chase
-
- (C) 1986 & 1988 Konami
-
- driver by Luca Elia (l.elia@tin.it)
-
-- Note: press F2 to enter service mode -
-
----------------------------------------------------------------------------
- TODO list
----------------------------------------------------------------------------
-WEC Le Mans 24:
-- The parallactic scrolling is sometimes wrong (related to v-cnt bit enabled?)
-Hot Chase:
-- Sound BGMs are regressed (hiccups badly);
-- Samples pitch is too low, for instance game over speech;
-- Bodysonic speaker outputs aren't implemented
-Common Issues:
-- Too many hacks with protection/blitter/colors.
- Additionally, there's a bug report that claims that current arrangement is broken for later levels in WEC Le Mans.
- 007643 / 007645 could do with a rewrite, in short.
-- One ROM unused (32K in hotchase, 16K in wecleman)
-- Incomplete DSWs
-- Sprite ram is not cleared by the game and no sprite list end-marker
- is written. We cope with that with an hack in the Blitter but there
- must be a register to do the trick
-
-
-
-----------------------------------------------------------------------
-Hardware Main Sub Sound Sound Chips
-----------------------------------------------------------------------
-[WEC Le Mans 24] 68000 68000 Z-80 YM2151 YM3012 1x007232
-
-[CPU PCB GX602 201020A]
- 007640 007641 007232 007452
-
-[VID PCB GX602 201023]
- 003634 003635 007557 007558 007559
-(note: 003634 and 003635 chips locations are marked 007634 and 007635 on PCB)
-
-
-[Hot Chase] 68000 68000 68B09E 3x007232
-
-[CPU PCB GX763 350861B]
- 007641 007770 3x007232 051550
-
-[VID PCB GX763 350860A AI AM-1]
- 007634 007635 3x051316 007558 007557
-----------------------------------------------------------------------
-
-
-----------------------------------------------------------------
-Main CPU [WEC Le Mans 24] [Hot Chase]
-----------------------------------------------------------------
-ROM R 000000-03ffff <
-Work RAM RW 040000-043fff 040000-063fff*
-? RW 060000-060007 -
-Blitter W 080000-080011 <
-Page RAM RW 100000-103fff -
-Text RAM RW 108000-108fff -
-Palette RAM RW 110000-110fff 110000-111fff**
-Shared RAM RW 124000-127fff 120000-123fff
-Sprites RAM RW 130000-130fff <
-Input Ports RW 1400xx-1400xx <
-Background RW 100000-100fff
-Background Ctrl W - 101000-10101f
-Foreground RW - 102000-102fff
-Foreground Ctrl W - 103000-10301f
-
-* weird ** only half used
-
-
-----------------------------------------------------------------
-Sub CPU [WEC Le Mans 24] [Hot Chase]
-----------------------------------------------------------------
-
-ROM R 000000-00ffff 000000-01ffff
-Work RAM RW - 060000-060fff
-Road RAM RW 060000-060fff 020000-020fff
-Shared RAM RW 070000-073fff 040000-043fff
-
-
----------------------------------------------------------------------------
- Game code
- [WEC Le Mans 24]
----------------------------------------------------------------------------
-
- Interesting locations (main cpu)
- --------------------------------
-
-There's some 68000 assembly code in ASCII around d88 :-)
-
-040000+
-7-9 *** hi score/10 (BCD 3 bytes) ***
-b-d *** score/10 (BCD 3 bytes) ***
-1a,127806 <- 140011.b
-1b,127807 <- 140013.b
-1c,127808 <- 140013.b
-1d,127809 <- 140015.b
-1e,12780a <- 140017.b
-1f <- 140013.b
-30 *** credits ***
-3a,3b,3c,3d <-140021.b
-3a = accelerator 3b = ?? 3c = steering 3d = table
-
-d2.w -> 108f24 fg y scroll
-112.w -> 108f26 bg y scroll
-
-16c influences 140031.b
-174 screen address
-180 input port selection (->140003.b ->140021.b)
-181 ->140005.b
-185 bit 7 high -> must copy sprite data to 130000
-1dc+(1da).w ->140001.b
-
-40a.w,c.w *** time (BCD) ***
-411 EF if brake, 0 otherwise
-416 ?
-419 gear: 0=lo,1=hi
-41e.w speed related ->127880
-424.w speed BCD
-43c.w accel?
-440.w level?
-
-806.w scrollx related
-80e.w scrolly related
-
-c08.b routine select: 1>1e1a4 2>1e1ec 3>1e19e other>1e288 (map screen)
-
-117a.b selected letter when entering name in hi-scores
-117e.w cycling color in hi-scores
-
-12c0.w ?time,pos,len related?
-12c2.w
-12c4.w
-12c6.w
-
-1400-1bff color data (0000-1023 chars)
-1c00-23ff color data (1024-2047 sprites?)
-
-2400 Sprite data: 40 entries x 4 bytes = 100
-2800 Sprite data: 40 entries x 40 bytes = 1000
-3800 Sprite data: 40 entries x 10 bytes = 400
-
- Interesting routines (main cpu)
- -------------------------------
-
-804 mem test
-818 end mem test (cksums at 100, addresses at A90)
-82c other cpu test
-a0c rom test
-c1a prints string (a1)
-1028 end test
-204c print 4*3 box of chars to a1, made up from 2 2*6 (a0)=0xLR (Left,Righ index)
-4e62 raws in the fourth page of chars
-6020 test screen (print)
-60d6 test screen
-62c4 motor test?
-6640 print input port values ( 6698 = scr_disp.w,ip.b,bit.b[+/-] )
-
-819c prepares sprite data
-8526 blitter: 42400->130000
-800c 8580 sprites setup on map screen
-
-1833a cycle cols on hi-scores
-18514 hiscores: main loop
-185e8 hiscores: wheel selects letter
-
-TRAP#0 prints string: A0-> addr.l, attr.w, (char.b)*, 0
-
-IRQs [1,3,6] 602
-IRQs [2,7] 1008->12dc ORI.W #$2700,(A7) RTE
-IRQs [4] 1004->124c
-IRQs [5] 106c->1222 calls sequence: $3d24 $1984 $28ca $36d2 $3e78
-
-
- Interesting locations (sub cpu)
- -------------------------------
-
- Interesting routines (sub cpu)
- ------------------------------
-
-1028 'wait for command' loop.
-1138 lev4 irq
-1192 copies E0*4 bytes: (a1)+ -> (a0)+
-
-
----------------------------------------------------------------------------
- Game code
- [Hot Chase]
----------------------------------------------------------------------------
-
-This game has been probably coded by the same programmers of WEC Le Mans 24
-It shares some routines and there is the (hidden?) string "WEC 2" somewhere
-
- Main CPU Sub CPU
-
-Interrupts: [1, 7] FFFFFFFF FFFFFFFF
-Interrupts: [2,3,4,5,6] 221c 1288
-
-Self Test:
- 0] pause,120002==55,pause,120002==AA,pause,120002==CC, (on error set bit d7.0)
- 6] 60000-63fff(d7.1),40000-41fff(d7.2)
- 8] 40000/2<-chksum 0-20000(e/o);40004/6<-chksum 20000-2ffff(e/o) (d7.3456)
- 9] chksums from sub cpu: even->40004 odd->(40006) (d7.78)
- A] 110000-111fff(even)(d7.9),102000-102fff(odd)(d7.a)
- C] 100000-100fff(odd)(d7.b),pause,pause,pause
-10] 120004==0(d7.c),120006==0(d7.d),130000-1307ff(first $A of every $10 bytes only)(d7.e),pause
-14] 102000<-hw screen+(d7==0)? jmp 1934/1000
-15] 195c start of game
-
-
- Interesting locations (main cpu)
- --------------------------------
-
-60024.b <- !140017.b (DSW 1 - coinage)
-60025.b <- !140015.b (DSW 2 - options)
-6102c.w *** time ***
-
- Interesting routines (main cpu)
- -------------------------------
-
-18d2 (d7.d6)?print BAD/OK to (a5)+, jmp(D0)
-1d58 print d2.w to (a4)+, jmp(a6)
-580c writes at 60000
-61fc print test strings
-18cbe print "game over"
-
-Revisions:
-
-05-05-2002 David Haywood(Haze)
-- improved Wec Le Mans steering
-
-05-01-2002 Hiromitsu Shioya(Shica)
-- fixed Hot Chase volume and sound interrupt
-
-xx-xx-2003 Acho A. Tang
-[Wec Le Mans 24]
-- generalized blitter to support Wec Le Mans
-- emulated custom alpha blending chip used for protection
-- fixed game color and sound volume
-- added shadows and sprite-to-sprite priority
-- added curbs effect
-- modified zoom equation to close tile gaps
-- fixed a few tile glitches
-- converted driver to use RGB direct
-- cloud transition(needs verification from board owners)
-- fixed sound banking
-- source clean-up
-
-TODO:
-- check dust color on title screen(I don't think it should be black)
-- check brake light(LED) support
-- check occasional off-pitch music and samples(sound interrupt related?)
-
-* Sprite, road and sky drawings do not support 32-bit color depth.
- Certain sprites with incorrect z-value still pop in front of closer
- billboards and some appear a few pixels off the ground. They could be
- the game's intrinsic flaws. (reference: www.system16.com)
-
-[Hot Chase]
-- shared changes with Wec Le Mans
-- removed junk tiles during introduction(needs verification)
-
-* Special thanks to Luca Elia for bringing us so many enjoyable games.
-
-***************************************************************************/
-
-#include "emu.h"
-#include "includes/wecleman.h"
-
-#include "cpu/m68000/m68000.h"
-#include "cpu/m6809/m6809.h"
-#include "cpu/z80/z80.h"
-#include "machine/adc0804.h"
-#include "machine/gen_latch.h"
-#include "sound/ym2151.h"
-#include "speaker.h"
-
-#include "wecleman.lh"
-
-
-/***************************************************************************
- Common Routines
-***************************************************************************/
-
-uint16_t wecleman_state::wecleman_protection_r()
-{
- int blend, data0, data1, r0, g0, b0, r1, g1, b1;
-
- data0 = m_protection_ram[0];
- blend = m_protection_ram[2];
- data1 = m_protection_ram[1];
- blend &= 0x3ff;
-
- // a precalculated table will take an astronomical 4096^2(colors) x 1024(steps) x 2(word) bytes
- r0 = data0; g0 = data0; b0 = data0;
- r0 &= 0xf; g0 &= 0xf0; b0 &= 0xf00;
- r1 = data1; g1 = data1; b1 = data1;
- r1 &= 0xf; g1 &= 0xf0; b1 &= 0xf00;
- r1 -= r0; g1 -= g0; b1 -= b0;
- r1 *= blend; g1 *= blend; b1 *= blend;
- r1 >>= 10; g1 >>= 10; b1 >>= 10;
- r0 += r1; g0 += g1; b0 += b1;
- g0 &= 0xf0; b0 &= 0xf00;
-
- r0 |= g0;
- r0 |= b0;
-
- return(r0);
-}
-
-void wecleman_state::wecleman_protection_w(offs_t offset, uint16_t data, uint16_t mem_mask)
-{
- if (offset == 2) m_prot_state = data & 0x2000;
- if (!m_prot_state) COMBINE_DATA(m_protection_ram + offset);
-}
-
-
-
-/* 140005.b (WEC Le Mans 24 Schematics)
-
- COMMAND
- ___|____
-| CK 8|--/ 7
-| LS273 7| TV-KILL 6
-| 6| SCR-VCNT 5
-| 5| SCR-HCNT 4
-| 5H 4| SOUND-RST 3
-| 3| SOUND-ON 2
-| 2| NSUBRST 1
-| 1| SUBINT 0
-|__CLR___|
- |
- NEXRES
-
- Schems: SUBRESET does a RST+HALT
- Sub CPU IRQ 4 generated by SUBINT, no other IRQs
-*/
-void wecleman_state::irqctrl_w(offs_t offset, uint16_t data, uint16_t mem_mask)
-{
- if (ACCESSING_BITS_0_7)
- {
- // logerror("CPU #0 - PC = %06X - $140005 <- %02X (old value: %02X)\n",m_maincpu->pc(), data&0xFF, old_data&0xFF);
-
- // Bit 0 : SUBINT
- if ( (m_irqctrl & 1) && (!(data & 1)) ) // 1->0 transition
- m_subcpu->set_input_line(4, HOLD_LINE);
-
- // Bit 1 : NSUBRST
- m_subcpu->set_input_line(INPUT_LINE_RESET, (data & 2) ? CLEAR_LINE : ASSERT_LINE);
-
- // Bit 2 : SOUND-ON: send a interrupt to sound CPU, 0 -> 1 transition
- if ( (m_irqctrl & 4) && (!(data & 4)) )
- {
- if(m_sound_hw_type == WECLEMAN_ID) // wec le mans
- m_audiocpu->set_input_line(0, HOLD_LINE);
- else // hot chase
- {
- m_hotchase_sound_hs = false;
- // TODO: ASSERT_LINE here?
- m_audiocpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE);
- }
- }
- // Bit 3 : SOUNDRST, pc=0x18ea in Hot Chase POST, 1 -> 0 -> 1
- m_audiocpu->set_input_line(INPUT_LINE_RESET, (data & 8) ? CLEAR_LINE : ASSERT_LINE);
- // Bit 4 : SCR-HCNT
- // Bit 5 : SCR-VCNT: active in WEC Le Mans, disabled in Hot Chase (where's the latch anyway?)
- // Bit 6 : TV-KILL: active low, disables screen.
- m_irqctrl = data; // latch the value
- }
-}
-
-/* 140003.b (usually paired with a write to 140021.b)
-
- Bit:
-
- 7------- ?
- -65----- input selection (0-3)
- ---43--- ?
- -----2-- start light
- ------10 ? out 1/2
-
-*/
-void wecleman_state::selected_ip_w(offs_t offset, uint16_t data, uint16_t mem_mask)
-{
- if (ACCESSING_BITS_0_7) m_selected_ip = data & 0xff; // latch the value
-}
-
-/* $140021.b - Return the previously selected input port's value */
-uint8_t wecleman_state::selected_ip_r()
-{
- switch ( (m_selected_ip >> 5) & 3 )
- { // From WEC Le Mans Schems:
- case 0: return ioport("ACCEL")->read(); // Accel - Schems: Accelevr
- case 1: return 0; // ????? - Schems: Not Used
- case 2: return ioport("STEER")->read(); // Wheel - Schems: Handlevr
- case 3: return 0; // Table - Schems: Turnvr
-
- default: return 0;
- }
-}
-
-/* Word Blitter - Copies data around (Work RAM, Sprite RAM etc.)
- It's fed with a list of blits to do
-
- Offset:
-
- 00.b ? Number of words - 1 to add to address per transfer
- 01.b ? logic function / blit mode
- 02.w ? (always 0)
- 04.l Source address (Base address of source data)
- 08.l List of blits address
- 0c.l Destination address
- 01.b ? Number of transfers
- 10.b Triggers the blit
- 11.b Number of words per transfer
-
- The list contains 4 bytes per blit:
-
-
- Offset:
-
- 00.w ?
- 02.w offset from Base address
-
-
- Note:
-
- Hot Chase explicitly copies color information from sprite parameters back to list[4n+1](byte ptr)
- and that tips me off where the colors are actually encoded. List[4n+0] is believed to hold the
- sprites' depth value. Wec Le Mans will z-sort the sprites before writing them to video RAM but
- the order is not always right. It is possible the video hardware performs additional sorting.
-
- The color code in the original sprite encoding has special meanings on the other hand. I'll take
- a shortcut by manually copying list[0] and list[1] to sprite RAM for further process.
-*/
-void wecleman_state::blitter_w(offs_t offset, uint16_t data, uint16_t mem_mask)
-{
- COMBINE_DATA(&m_blitter_regs[offset]);
-
- /* do a blit if $80010.b has been written */
- if ( (offset == 0x10/2) && (ACCESSING_BITS_8_15) )
- {
- auto &mspace = m_maincpu->space(AS_PROGRAM);
- /* 80000.b = ?? usually 0 - other values: 02 ; 00 - ? logic function ? */
- /* 80001.b = ?? usually 0 - other values: 3f ; 01 - ? height ? */
- int minterm = ( m_blitter_regs[0x0/2] & 0xFF00 ) >> 8;
- int list_len = ( m_blitter_regs[0x0/2] & 0x00FF ) >> 0;
-
- /* 80002.w = ?? always 0 - ? increment per horizontal line ? */
- /* no proof at all, it's always 0 */
- //int srcdisp = m_blitter_regs[0x2/2] & 0xFF00;
- //int destdisp = m_blitter_regs[0x2/2] & 0x00FF;
-
- /* 80004.l = source data address */
- int src = ( m_blitter_regs[0x4/2] << 16 ) + m_blitter_regs[0x6/2];
-
- /* 80008.l = list of blits address */
- int list = ( m_blitter_regs[0x8/2] << 16 ) + m_blitter_regs[0xA/2];
-
- /* 8000C.l = destination address */
- int dest = ( m_blitter_regs[0xC/2] << 16 ) + m_blitter_regs[0xE/2];
-
- /* 80010.b = number of words to move */
- int size = ( m_blitter_regs[0x10/2] ) & 0x00FF;
-
- /* Word aligned transfers only ?? */
- src &= (~1); list &= (~1); dest &= (~1);
-
- /* Two minterms / blit modes are used */
- if (minterm != 2)
- {
- /* One single blit */
- for ( ; size > 0 ; size--)
- {
- /* maybe slower than a memcpy but safer (and errors are logged) */
- mspace.write_word(dest, mspace.read_word(src));
- src += 2;
- dest += 2;
- }
- }
- else
- {
- /* Number of blits in the list */
- for ( ; list_len > 0 ; list_len-- )
- {
- int i, j, destptr;
-
- /* Read offset of source from the list of blits */
- i = src + mspace.read_word(list+2);
- j = i + (size<<1);
- destptr = dest;
-
- for (; i<j; destptr+=2, i+=2)
- mspace.write_word(destptr, mspace.read_word(i));
-
- destptr = dest + 14;
- i = mspace.read_word(list) + m_spr_color_offs;
- mspace.write_word(destptr, i);
-
- dest += 16;
- list += 4;
- }
-
- /* hack for the blit to Sprites RAM - Sprite list end-marker */
- mspace.write_word(dest, 0xFFFF);
- }
- }
-}
-
-
-/***************************************************************************
- WEC Le Mans 24 Main CPU Handlers
-***************************************************************************/
-
-void wecleman_state::wecleman_map(address_map &map)
-{
- map(0x000000, 0x03ffff).rom(); // ROM (03c000-03ffff used as RAM sometimes!)
- map(0x040000, 0x040493).ram(); // RAM
- map(0x040494, 0x040495).ram().w(FUNC(wecleman_state::wecleman_videostatus_w)).share("videostatus"); // cloud blending control (HACK)
- map(0x040496, 0x043fff).ram(); // RAM
- map(0x060000, 0x060005).w(FUNC(wecleman_state::wecleman_protection_w)).share("protection_ram");
- map(0x060006, 0x060007).r(FUNC(wecleman_state::wecleman_protection_r)); // MCU read
- map(0x080000, 0x080011).ram().w(FUNC(wecleman_state::blitter_w)).share("blitter_regs"); // Blitter
- map(0x100000, 0x103fff).ram().w(FUNC(wecleman_state::wecleman_pageram_w)).share("pageram"); // Background Layers
- map(0x108000, 0x108fff).ram().w(FUNC(wecleman_state::wecleman_txtram_w)).share("txtram"); // Text Layer
- map(0x110000, 0x110fff).ram().w(FUNC(wecleman_state::wecleman_paletteram16_SSSSBBBBGGGGRRRR_word_w)).share("paletteram");
- map(0x124000, 0x127fff).ram().share("share1"); // Shared with main CPU
- map(0x130000, 0x130fff).ram().share("spriteram"); // Sprites
- map(0x140001, 0x140001).w("soundlatch", FUNC(generic_latch_8_device::write)); // To sound CPU
- map(0x140002, 0x140003).w(FUNC(wecleman_state::selected_ip_w)); // Selects accelerator / wheel / ..
- map(0x140004, 0x140005).w(FUNC(wecleman_state::irqctrl_w)); // Main CPU controls the other CPUs
- map(0x140006, 0x140007).nopw(); // Watchdog reset
- map(0x140010, 0x140011).portr("IN0"); // Coins + brake + gear
- map(0x140012, 0x140013).portr("IN1"); // ??
- map(0x140014, 0x140015).portr("DSWA"); // DSW 2
- map(0x140016, 0x140017).portr("DSWB"); // DSW 1
- map(0x140021, 0x140021).rw("adc", FUNC(adc0804_device::read), FUNC(adc0804_device::write));
- map(0x140030, 0x140031).nopw(); // toggles between 0 & 1 on hitting bumps and crashes (vibration?)
-}
-
-
-/***************************************************************************
- Hot Chase Main CPU Handlers
-***************************************************************************/
-
-
-
-void wecleman_state::hotchase_map(address_map &map)
-{
- map(0x000000, 0x03ffff).rom();
- map(0x040000, 0x041fff).ram(); // RAM
- map(0x060000, 0x063fff).ram(); // RAM
- map(0x080000, 0x080011).ram().w(FUNC(wecleman_state::blitter_w)).share("blitter_regs"); // Blitter
- map(0x100000, 0x100fff).rw("k051316_1", FUNC(k051316_device::read), FUNC(k051316_device::write)).umask16(0x00ff); // Background
- map(0x101000, 0x10101f).w("k051316_1", FUNC(k051316_device::ctrl_w)).umask16(0x00ff); // Background Ctrl
- map(0x102000, 0x102fff).rw("k051316_2", FUNC(k051316_device::read), FUNC(k051316_device::write)).umask16(0x00ff); // Foreground
- map(0x103000, 0x10301f).w("k051316_2", FUNC(k051316_device::ctrl_w)).umask16(0x00ff); // Foreground Ctrl
- map(0x110000, 0x111fff).ram().w(FUNC(wecleman_state::hotchase_paletteram16_SBGRBBBBGGGGRRRR_word_w)).share("paletteram");
- map(0x120000, 0x123fff).ram().share("share1"); // Shared with sub CPU
- map(0x130000, 0x130fff).ram().share("spriteram"); // Sprites
- map(0x140001, 0x140001).w("soundlatch", FUNC(generic_latch_8_device::write)); // To sound CPU
- map(0x140002, 0x140003).w(FUNC(wecleman_state::selected_ip_w)); // Selects accelerator / wheel /
- map(0x140004, 0x140005).w(FUNC(wecleman_state::irqctrl_w)); // Main CPU controls the other CPUs
- map(0x140006, 0x140007).nopr(); // Watchdog reset
- map(0x140010, 0x140011).portr("IN0"); // Coins + brake + gear
- map(0x140012, 0x140013).portr("IN1"); // ?? bit 4 from sound cpu
- map(0x140014, 0x140015).portr("DSW2"); // DSW 2
- map(0x140016, 0x140017).portr("DSW1"); // DSW 1
- map(0x140021, 0x140021).rw("adc", FUNC(adc0804_device::read), FUNC(adc0804_device::write)); // Paired with writes to $140003
- map(0x140022, 0x140023).nopr(); // read and written at $601c0, unknown purpose
- map(0x140030, 0x140031).nopw(); // signal to cabinet vibration motors?
-}
-
-
-/***************************************************************************
- WEC Le Mans 24 Sub CPU Handlers
-***************************************************************************/
-
-void wecleman_state::wecleman_sub_map(address_map &map)
-{
- map(0x000000, 0x00ffff).rom(); // ROM
- map(0x060000, 0x060fff).ram().share("roadram"); // Road
- map(0x070000, 0x073fff).ram().share("share1"); // RAM (Shared with main CPU)
-}
-
-
-/***************************************************************************
- Hot Chase Sub CPU Handlers
-***************************************************************************/
-
-void wecleman_state::hotchase_sub_map(address_map &map)
-{
- map(0x000000, 0x01ffff).rom(); // ROM
- map(0x020000, 0x020fff).ram().share("roadram"); // Road
- map(0x040000, 0x043fff).ram().share("share1"); // Shared with main CPU
- map(0x060000, 0x060fff).ram(); // a table, presumably road related
- map(0x061000, 0x06101f).ram(); // road vregs?
-}
-
-
-/***************************************************************************
- WEC Le Mans 24 Sound CPU Handlers
-***************************************************************************/
-
-/* Protection - an external multiplier connected to the sound CPU */
-uint8_t wecleman_state::multiply_r()
-{
- return (m_multiply_reg[0] * m_multiply_reg[1]) & 0xFF;
-}
-
-void wecleman_state::multiply_w(offs_t offset, uint8_t data)
-{
- m_multiply_reg[offset] = data;
-}
-
-/* K007232 registers reminder:
-
-[Ch A] [Ch B] [Meaning]
-00 06 address step (low byte)
-01 07 address step (high byte, max 1)
-02 08 sample address (low byte)
-03 09 sample address (mid byte)
-04 0a sample address (high byte, max 1 -> max rom size: $20000)
-05 0b Reading this byte triggers the sample
-
-[Ch A & B]
-0c volume
-0d play sample once or looped (2 channels -> 2 bits (0&1))
-
-** sample playing ends when a byte with bit 7 set is reached **/
-
-void wecleman_state::wecleman_volume_callback(uint8_t data)
-{
- m_k007232[0]->set_volume(0, (data >> 4) * 0x11, 0);
- m_k007232[0]->set_volume(1, 0, (data & 0x0f) * 0x11);
-}
-
-void wecleman_state::wecleman_K00723216_bank_w(uint8_t data)
-{
- m_k007232[0]->set_bank(0, ~data&1 ); //* (wecleman062gre)
-}
-
-void wecleman_state::wecleman_sound_map(address_map &map)
-{
- map(0x0000, 0x7fff).rom();
- map(0x8000, 0x83ff).ram();
- map(0x8500, 0x8500).nopw(); // increased with speed (global volume)?
- map(0x9000, 0x9000).r(FUNC(wecleman_state::multiply_r)); // 007452: Protection
- map(0x9000, 0x9001).w(FUNC(wecleman_state::multiply_w)); // 007452: Protection
- map(0x9006, 0x9006).nopw(); // 007452: ?
- map(0xa000, 0xa000).r("soundlatch", FUNC(generic_latch_8_device::read)); // From main CPU
- map(0xb000, 0xb00d).rw("k007232_1", FUNC(k007232_device::read), FUNC(k007232_device::write)); // K007232 (Reading offset 5/b triggers the sample)
- map(0xc000, 0xc001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write));
- map(0xf000, 0xf000).w(FUNC(wecleman_state::wecleman_K00723216_bank_w)); // Samples banking
-}
-
-
-/***************************************************************************
- Hot Chase Sound CPU Handlers
-***************************************************************************/
-
-void wecleman_state::hotchase_sound_control_w(offs_t offset, uint8_t data)
-{
-// int reg[8];
-
-// reg[offset] = data;
-
- switch (offset)
- {
- /* change volume
- offset 00000xxx----- channel select (0:channel 0, 1:channel 1)
- ++------ chip select ( 0:chip 1, 1:chip2, 2:chip3)
- data&0x0f left volume (data>>4)&0x0f right volume
- */
- case 0x0:
- case 0x1:
- case 0x2:
- case 0x3:
- case 0x4:
- case 0x5:
- m_k007232[offset >> 1]->set_volume( offset&1, (data&0x0f) * 0x08, (data>>4) * 0x08 );
- break;
-
- case 0x06: /* Bankswitch for chips 0 & 1 */
- {
- int bank0_a = (data >> 1) & 1;
- int bank1_a = (data >> 2) & 1;
- int bank0_b = (data >> 3) & 1;
- int bank1_b = (data >> 4) & 1;
- // bit 6: chip 2 - ch0 ?
- // bit 7: chip 2 - ch1 ?
-
- m_k007232[0]->set_bank( bank0_a, bank0_b );
- m_k007232[1]->set_bank( bank1_a, bank1_b );
- }
- break;
-
- case 0x07: /* Bankswitch for chip 2 */
- {
- int bank2_a = (data >> 0) & 7;
- int bank2_b = (data >> 3) & 7;
-
- m_k007232[2]->set_bank( bank2_a, bank2_b );
- }
- break;
- }
-}
-
-void wecleman_state::hotchase_sound_hs_w(uint8_t data)
-{
- m_hotchase_sound_hs = true;
-}
-
-/* Read and write handlers for one K007232 chip:
- even and odd register are mapped swapped */
-template<int Chip>
-uint8_t wecleman_state::hotchase_k007232_r(offs_t offset)
-{
- return m_k007232[Chip]->read(offset ^ 1);
-}
-
-template<int Chip>
-void wecleman_state::hotchase_k007232_w(offs_t offset, uint8_t data)
-{
- m_k007232[Chip]->write(offset ^ 1, data);
-}
-
-void wecleman_state::hotchase_sound_map(address_map &map)
-{
- map(0x0000, 0x07ff).ram();
- map(0x1000, 0x100d).rw(FUNC(wecleman_state::hotchase_k007232_r<0>), FUNC(wecleman_state::hotchase_k007232_w<0>)); // 3 x K007232
- map(0x2000, 0x200d).rw(FUNC(wecleman_state::hotchase_k007232_r<1>), FUNC(wecleman_state::hotchase_k007232_w<1>));
- map(0x3000, 0x300d).rw(FUNC(wecleman_state::hotchase_k007232_r<2>), FUNC(wecleman_state::hotchase_k007232_w<2>));
- map(0x4000, 0x4007).w(FUNC(wecleman_state::hotchase_sound_control_w)); // Sound volume, banking, etc.
- map(0x5000, 0x5000).nopw(); // 0 at start of IRQ service, 1 at end (irq mask?)
- map(0x6000, 0x6000).r("soundlatch", FUNC(generic_latch_8_device::read)); // From main CPU (Read on IRQ)
- map(0x7000, 0x7000).w(FUNC(wecleman_state::hotchase_sound_hs_w)); // ACK signal to main CPU
- map(0x8000, 0xffff).rom();
-}
-
-
-/***************************************************************************
- WEC Le Mans 24 Input Ports
-***************************************************************************/
-
-static INPUT_PORTS_START( wecleman )
- PORT_START("IN0") /* $140011.b */
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
- PORT_SERVICE_NO_TOGGLE( 0x04, IP_ACTIVE_HIGH )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SERVICE1 )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START1 )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Shift") PORT_TOGGLE
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Brake")
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
-
- PORT_START("IN1") /* Motor? - $140013.b */
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Right SW") // right sw
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE3 ) PORT_NAME("Left SW") // left sw
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE4 ) PORT_NAME("Thermo SW") // thermo
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("adc", adc0804_device, intr_r)
- PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
- PORT_START("DSWA") /* $140015.b */
- PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_A ) )
- PORT_DIPSETTING( 0x02, DEF_STR( 4C_1C ) )
- PORT_DIPSETTING( 0x05, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x08, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x04, DEF_STR( 3C_2C ) )
- PORT_DIPSETTING( 0x01, DEF_STR( 4C_3C ) )
- PORT_DIPSETTING( 0x0f, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x03, DEF_STR( 3C_4C ) )
- PORT_DIPSETTING( 0x07, DEF_STR( 2C_3C ) )
- PORT_DIPSETTING( 0x0e, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x06, DEF_STR( 2C_5C ) )
- PORT_DIPSETTING( 0x0d, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0x0c, DEF_STR( 1C_4C ) )
- PORT_DIPSETTING( 0x0b, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0x0a, DEF_STR( 1C_6C ) )
- PORT_DIPSETTING( 0x09, DEF_STR( 1C_7C ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) )
- PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_B ) )
- PORT_DIPSETTING( 0x20, DEF_STR( 4C_1C ) )
- PORT_DIPSETTING( 0x50, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x80, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x40, DEF_STR( 3C_2C ) )
- PORT_DIPSETTING( 0x10, DEF_STR( 4C_3C ) )
- PORT_DIPSETTING( 0xf0, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x30, DEF_STR( 3C_4C ) )
- PORT_DIPSETTING( 0x70, DEF_STR( 2C_3C ) )
- PORT_DIPSETTING( 0xe0, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x60, DEF_STR( 2C_5C ) )
- PORT_DIPSETTING( 0xd0, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0xc0, DEF_STR( 1C_4C ) )
- PORT_DIPSETTING( 0xb0, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0xa0, DEF_STR( 1C_6C ) )
- PORT_DIPSETTING( 0x90, DEF_STR( 1C_7C ) )
- PORT_DIPSETTING( 0x00, "No Coin B" )
- /* "No Coin B" = coins produce sound, but no effect on coin counter */
-
- PORT_START("DSWB") /* $140017.b */
- PORT_DIPNAME( 0x01, 0x01, "Speed Unit" )
- PORT_DIPSETTING( 0x01, "km/h" )
- PORT_DIPSETTING( 0x00, "mph" )
- PORT_DIPNAME( 0x02, 0x02, "Unknown B-1" ) // single
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, "Unknown B-2" )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x18, 0x18, DEF_STR( Difficulty ) )
- PORT_DIPSETTING( 0x18, DEF_STR( Easy ) ) // 66 seconds at the start
- PORT_DIPSETTING( 0x10, DEF_STR( Normal ) ) // 64
- PORT_DIPSETTING( 0x08, DEF_STR( Hard ) ) // 62
- PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) // 60
- PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, "Unknown B-6" )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, "Unknown B-7" )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-
- PORT_START("ACCEL") /* Accelerator - $140021.b (0) */
- PORT_BIT( 0xff, 0, IPT_PEDAL ) PORT_MINMAX(0,0x80) PORT_SENSITIVITY(30) PORT_KEYDELTA(10)
-
- PORT_START("STEER") /* Steering Wheel - $140021.b (2) */
- PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(50) PORT_KEYDELTA(5)
-INPUT_PORTS_END
-
-
-/***************************************************************************
- Hot Chase Input Ports
-***************************************************************************/
-
-READ_LINE_MEMBER(wecleman_state::hotchase_sound_status_r)
-{
- return m_hotchase_sound_hs;
-}
-
-static INPUT_PORTS_START( hotchase )
- PORT_START("IN0") /* $140011.b */
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
- PORT_SERVICE_NO_TOGGLE( 0x04, IP_ACTIVE_LOW )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Shift") PORT_TOGGLE
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Brake")
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("IN1") /* Motor? - $140013.b */
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Right SW") // right sw
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE3 ) PORT_NAME("Left SW") // left sw
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE4 ) PORT_NAME("Thermo SW") // thermo
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("adc", adc0804_device, intr_r)
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(wecleman_state, hotchase_sound_status_r)
- PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
- PORT_START("DSW2") /* $140015.b */
- PORT_DIPNAME( 0x01, 0x01, "Speed Unit" )
- PORT_DIPSETTING( 0x01, "KM" )
- PORT_DIPSETTING( 0x00, "M.P.H." )
- PORT_DIPNAME( 0x02, 0x02, "Unknown 2-1" ) // single (wheel related)
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, "Unknown 2-2" )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x18, 0x18, "Unknown 2-3&4" ) // Most likely Difficulty
- PORT_DIPSETTING( 0x18, "0" )
- PORT_DIPSETTING( 0x10, "4" )
- PORT_DIPSETTING( 0x08, "8" )
- PORT_DIPSETTING( 0x00, "c" )
- PORT_DIPNAME( 0x20, 0x20, "Unknown 2-5" ) // single
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- /* wheel <-> brake ; accel -> start */
- PORT_DIPNAME( 0x40, 0x40, "Unknown 2-6" ) // single (wheel<->brake)
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-
- PORT_START("DSW1") /* $140017.b */
- PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_A ) )
- PORT_DIPSETTING( 0x02, DEF_STR( 5C_1C ) )
- PORT_DIPSETTING( 0x04, DEF_STR( 4C_1C ) )
- PORT_DIPSETTING( 0x07, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x0a, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x01, DEF_STR( 5C_3C ) )
- PORT_DIPSETTING( 0x06, DEF_STR( 3C_2C ) )
- PORT_DIPSETTING( 0x03, DEF_STR( 4C_3C ) )
- PORT_DIPSETTING( 0x0f, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x05, DEF_STR( 3C_4C ) )
- PORT_DIPSETTING( 0x09, DEF_STR( 2C_3C ) )
- PORT_DIPSETTING( 0x0e, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x08, DEF_STR( 2C_5C ) )
- PORT_DIPSETTING( 0x0d, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0x0c, DEF_STR( 1C_4C ) )
- PORT_DIPSETTING( 0x0b, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) )
- PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_B ) )
- PORT_DIPSETTING( 0x20, DEF_STR( 5C_1C ) )
- PORT_DIPSETTING( 0x70, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0xa0, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x10, DEF_STR( 5C_3C ) )
- PORT_DIPSETTING( 0x60, DEF_STR( 3C_2C ) )
- PORT_DIPSETTING( 0x30, DEF_STR( 4C_3C ) )
- PORT_DIPSETTING( 0xf0, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x50, DEF_STR( 3C_4C ) )
- PORT_DIPSETTING( 0x90, DEF_STR( 2C_3C ) )
- PORT_DIPSETTING( 0xe0, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x80, DEF_STR( 2C_5C ) )
- PORT_DIPSETTING( 0xd0, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0xc0, DEF_STR( 1C_4C ) )
- PORT_DIPSETTING( 0xb0, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0x00, "1 Coin/99 Credits" )
-
- PORT_START("ACCEL") /* Accelerator - $140021.b (0) */
- PORT_BIT( 0xff, 0, IPT_PEDAL ) PORT_MINMAX(0,0x80) PORT_SENSITIVITY(30) PORT_KEYDELTA(10)
-
- PORT_START("STEER") /* Steering Wheel - $140021.b (2) */
- PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(50) PORT_KEYDELTA(5)
-INPUT_PORTS_END
-
-
-/***************************************************************************
- WEC Le Mans 24 Graphics Layout
-***************************************************************************/
-
-static const gfx_layout wecleman_bg_layout =
-{
- 8,8,
- 8*0x8000*3/(8*8*3),
- 3,
- { 0,0x8000*8,0x8000*8*2 },
- {0,7,6,5,4,3,2,1},
- {0*8,1*8,2*8,3*8,4*8,5*8,6*8,7*8},
- 8*8
-};
-
-static const uint32_t wecleman_road_layout_xoffset[64] =
-{
- 0,7,6,5,4,3,2,1,
- 8,15,14,13,12,11,10,9,
- 16,23,22,21,20,19,18,17,
- 24,31,30,29,28,27,26,25,
-
- 0+32,7+32,6+32,5+32,4+32,3+32,2+32,1+32,
- 8+32,15+32,14+32,13+32,12+32,11+32,10+32,9+32,
- 16+32,23+32,22+32,21+32,20+32,19+32,18+32,17+32,
- 24+32,31+32,30+32,29+32,28+32,27+32,26+32,25+32
-};
-
-/* We draw the road, made of 512 pixel lines, using 64x1 tiles */
-static const gfx_layout wecleman_road_layout =
-{
- 64,1,
- 8*0x4000*3/(64*1*3),
- 3,
- { 0x4000*8*2,0x4000*8*1,0x4000*8*0 },
- EXTENDED_XOFFS,
- {0},
- 64*1,
- wecleman_road_layout_xoffset,
- nullptr
-};
-
-static GFXDECODE_START( gfx_wecleman )
- // "sprites" holds sprite, which are not decoded here
- GFXDECODE_ENTRY( "layers", 0, wecleman_bg_layout, 0, 2048/8 ) // [0] bg + fg + txt
- GFXDECODE_ENTRY( "road", 0, wecleman_road_layout, 0, 2048/8 ) // [1] road
-GFXDECODE_END
-
-
-/***************************************************************************
- Hot Chase Graphics Layout
-***************************************************************************/
-
-static const uint32_t hotchase_road_layout_xoffset[64] =
-{
- 0*4,0*4,1*4,1*4,2*4,2*4,3*4,3*4,4*4,4*4,5*4,5*4,6*4,6*4,7*4,7*4,
- 8*4,8*4,9*4,9*4,10*4,10*4,11*4,11*4,12*4,12*4,13*4,13*4,14*4,14*4,15*4,15*4,
- 16*4,16*4,17*4,17*4,18*4,18*4,19*4,19*4,20*4,20*4,21*4,21*4,22*4,22*4,23*4,23*4,
- 24*4,24*4,25*4,25*4,26*4,26*4,27*4,27*4,28*4,28*4,29*4,29*4,30*4,30*4,31*4,31*4
-};
-
-/* We draw the road, made of 512 pixel lines, using 64x1 tiles */
-/* tiles are doubled horizontally */
-static const gfx_layout hotchase_road_layout =
-{
- 64,1,
- RGN_FRAC(1,1),
- 4,
- { 0, 1, 2, 3 },
- EXTENDED_XOFFS,
- {0},
- 32*4,
- hotchase_road_layout_xoffset,
- nullptr
-};
-
-static GFXDECODE_START( gfx_hotchase )
- // "sprites" holds sprite, which are not decoded here
- GFXDECODE_ENTRY( "road", 0, hotchase_road_layout, 0x70*16, 16 ) // road
-GFXDECODE_END
-
-
-/***************************************************************************
- WEC Le Mans 24 Hardware Definitions
-***************************************************************************/
-
-
-TIMER_DEVICE_CALLBACK_MEMBER(wecleman_state::wecleman_scanline)
-{
- int scanline = param;
-
- if(scanline == 232) // vblank irq
- m_maincpu->set_input_line(4, HOLD_LINE);
- else if(((scanline % 64) == 0)) // timer irq TODO: wrong place maybe? Could do with blitter chip irq (007643/007645?) or "V-CNT" signal.
- m_maincpu->set_input_line(5, HOLD_LINE);
-}
-
-TIMER_DEVICE_CALLBACK_MEMBER(wecleman_state::hotchase_scanline)
-{
- int scanline = param;
-
- if(scanline == 224) // vblank irq
- m_maincpu->set_input_line(4, HOLD_LINE);
-}
-
-MACHINE_RESET_MEMBER(wecleman_state, wecleman)
-{
- m_k007232[0]->set_bank( 0, 1 );
-}
-
-MACHINE_START_MEMBER(wecleman_state, wecleman)
-{
- m_led.resolve();
-}
-
-void wecleman_state::wecleman(machine_config &config)
-{
- /* basic machine hardware */
- M68000(config, m_maincpu, 10000000); /* Schems show 10MHz */
- m_maincpu->set_addrmap(AS_PROGRAM, &wecleman_state::wecleman_map);
- TIMER(config, "scantimer").configure_scanline(FUNC(wecleman_state::wecleman_scanline), "screen", 0, 1);
-
- M68000(config, m_subcpu, 10000000); /* Schems show 10MHz */
- m_subcpu->set_addrmap(AS_PROGRAM, &wecleman_state::wecleman_sub_map);
-
- /* Schems: can be reset, no nmi, soundlatch, 3.58MHz */
- Z80(config, m_audiocpu, 3579545);
- m_audiocpu->set_addrmap(AS_PROGRAM, &wecleman_state::wecleman_sound_map);
-
- config.set_maximum_quantum(attotime::from_hz(6000));
-
- MCFG_MACHINE_START_OVERRIDE(wecleman_state, wecleman)
- MCFG_MACHINE_RESET_OVERRIDE(wecleman_state, wecleman)
-
- adc0804_device &adc(ADC0804(config, "adc", 640000)); // unknown "ADCCLK" (generated on video board?)
- adc.vin_callback().set(FUNC(wecleman_state::selected_ip_r));
-
- /* video hardware */
- SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
- m_screen->set_refresh_hz(60);
- m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
- m_screen->set_size(320 +16, 256);
- m_screen->set_visarea(0 +8, 320-1 +8, 0 +8, 224-1 +8);
- m_screen->set_screen_update(FUNC(wecleman_state::screen_update_wecleman));
-
- GFXDECODE(config, m_gfxdecode, m_palette, gfx_wecleman);
-
- PALETTE(config, m_palette).set_entries(2048);
-
- MCFG_VIDEO_START_OVERRIDE(wecleman_state,wecleman)
-
- /* sound hardware */
- SPEAKER(config, "lspeaker").front_left();
- SPEAKER(config, "rspeaker").front_right();
-
- GENERIC_LATCH_8(config, "soundlatch");
-
- YM2151(config, "ymsnd", 3579545).add_route(0, "lspeaker", 0.85).add_route(1, "rspeaker", 0.85);
-
- K007232(config, m_k007232[0], 3579545);
- m_k007232[0]->port_write().set(FUNC(wecleman_state::wecleman_volume_callback));
- m_k007232[0]->add_route(ALL_OUTPUTS, "lspeaker", 0.20);
- m_k007232[0]->add_route(ALL_OUTPUTS, "rspeaker", 0.20);
-}
-
-
-/***************************************************************************
- Hot Chase Hardware Definitions
-***************************************************************************/
-
-INTERRUPT_GEN_MEMBER(wecleman_state::hotchase_sound_timer)
-{
- device.execute().set_input_line(M6809_FIRQ_LINE, HOLD_LINE);
-}
-
-MACHINE_START_MEMBER(wecleman_state, hotchase)
-{
- m_led.resolve();
-}
-
-MACHINE_RESET_MEMBER(wecleman_state, hotchase)
-{
- int i;
-
- /* TODO: PCB reference clearly shows that the POST has random/filled data on the paletteram.
- For now let's fill everything with white colors until we have better info about it */
- for(i=0;i<0x2000/2;i++)
- {
- m_generic_paletteram_16[i] = 0xffff;
- m_palette->set_pen_color(i,0xff,0xff,0xff);
- }
-}
-
-
-void wecleman_state::hotchase(machine_config &config)
-{
- /* basic machine hardware */
- M68000(config, m_maincpu, 10000000); /* 10 MHz - PCB is drawn in one set's readme */
- m_maincpu->set_addrmap(AS_PROGRAM, &wecleman_state::hotchase_map);
- TIMER(config, "scantimer").configure_scanline(FUNC(wecleman_state::hotchase_scanline), "screen", 0, 1);
-
- M68000(config, m_subcpu, 10000000); /* 10 MHz - PCB is drawn in one set's readme */
- m_subcpu->set_addrmap(AS_PROGRAM, &wecleman_state::hotchase_sub_map);
-
- MC6809E(config, m_audiocpu, 3579545 / 2); /* 3.579/2 MHz - PCB is drawn in one set's readme */
- m_audiocpu->set_addrmap(AS_PROGRAM, &wecleman_state::hotchase_sound_map);
- m_audiocpu->set_periodic_int(FUNC(wecleman_state::hotchase_sound_timer), attotime::from_hz(496));
-
- config.set_maximum_quantum(attotime::from_hz(6000));
-
- MCFG_MACHINE_RESET_OVERRIDE(wecleman_state, hotchase)
- MCFG_MACHINE_START_OVERRIDE(wecleman_state, hotchase)
-
- adc0804_device &adc(ADC0804(config, "adc", 640000)); // unknown clock (generated on video board?)
- adc.vin_callback().set(FUNC(wecleman_state::selected_ip_r));
-
- /* video hardware */
- SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
- m_screen->set_refresh_hz(60);
- m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
- m_screen->set_size(320 +16, 256);
- m_screen->set_visarea(0, 320-1, 0, 224-1);
- m_screen->set_screen_update(FUNC(wecleman_state::screen_update_hotchase));
- m_screen->set_palette(m_palette);
-
- GFXDECODE(config, m_gfxdecode, m_palette, gfx_hotchase);
- PALETTE(config, m_palette).set_entries(8192);
-
- MCFG_VIDEO_START_OVERRIDE(wecleman_state, hotchase)
-
- K051316(config, m_k051316[0], 0);
- m_k051316[0]->set_palette(m_palette);
- m_k051316[0]->set_offsets(-0xb0 / 2, -16);
- m_k051316[0]->set_wrap(1);
- m_k051316[0]->set_zoom_callback(FUNC(wecleman_state::hotchase_zoom_callback_1));
-
- K051316(config, m_k051316[1], 0);
- m_k051316[1]->set_palette(m_palette);
- m_k051316[1]->set_offsets(-0xb0 / 2, -16);
- m_k051316[1]->set_zoom_callback(FUNC(wecleman_state::hotchase_zoom_callback_2));
-
- /* sound hardware */
- SPEAKER(config, "lspeaker").front_left();
- SPEAKER(config, "rspeaker").front_right();
-
- GENERIC_LATCH_8(config, "soundlatch");
-
- K007232(config, m_k007232[0], 3579545);
- // SLEV not used, volume control is elsewhere
- m_k007232[0]->add_route(0, "lspeaker", 0.20);
- m_k007232[0]->add_route(1, "rspeaker", 0.20);
-
- K007232(config, m_k007232[1], 3579545);
- // SLEV not used, volume control is elsewhere
- m_k007232[1]->add_route(0, "lspeaker", 0.20);
- m_k007232[1]->add_route(1, "rspeaker", 0.20);
-
- K007232(config, m_k007232[2], 3579545);
- // SLEV not used, volume control is elsewhere
- m_k007232[2]->add_route(0, "lspeaker", 0.20);
- m_k007232[2]->add_route(1, "rspeaker", 0.20);
-}
-
-
-/***************************************************************************
- WEC Le Mans 24 ROM Definitions
-***************************************************************************/
-
-ROM_START( wecleman )
- ROM_REGION( 0x40000, "maincpu", 0 ) /* Main CPU Code */
- ROM_LOAD16_BYTE( "602g08.17h", 0x00000, 0x10000, CRC(2edf468c) SHA1(6143be7c45a6ab1597207f678602da9ca9d18c6d) )
- ROM_LOAD16_BYTE( "602g11.23h", 0x00001, 0x10000, CRC(ca5ecb25) SHA1(0aeb3cbbf6f7d7293f25fc6d9f56ee934e0c11ff) )
- ROM_LOAD16_BYTE( "602a09.18h", 0x20000, 0x10000, CRC(8a9d756f) SHA1(12605e86ce29e6300b5400720baac7b0293d9e66) )
- ROM_LOAD16_BYTE( "602a10.22h", 0x20001, 0x10000, CRC(569f5001) SHA1(ec2dd331a279083cf847fbbe71c017038a1d562a) )
-
- ROM_REGION( 0x10000, "sub", 0 ) /* Sub CPU Code */
- ROM_LOAD16_BYTE( "602a06.18a", 0x00000, 0x08000, CRC(e12c0d11) SHA1(991afd48bf1b2c303b975ce80c754e5972c39111) )
- ROM_LOAD16_BYTE( "602a07.20a", 0x00001, 0x08000, CRC(47968e51) SHA1(9b01b2c6a14dd80327a8f66a7f1994471a4bc38e) )
-
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU Code */
- ROM_LOAD( "602a01.6d", 0x00000, 0x08000, CRC(deafe5f1) SHA1(4cfbe2841233b1222c22160af7287b7a7821c3a0) )
-
- ROM_REGION( 0x200000 * 2, "sprites", 0 ) /* x2, do not dispose, zooming sprites */
- ROM_LOAD( "602a25.12e", 0x000000, 0x20000, CRC(0eacf1f9) SHA1(b4dcd457e68175ffee3da4aff23a241fe33eb500) )
- ROM_LOAD( "602a26.14e", 0x020000, 0x20000, CRC(2182edaf) SHA1(5ae4223a76b3c0be8f66458707f2e6f63fba0b13) )
- ROM_LOAD( "602a27.15e", 0x040000, 0x20000, CRC(b22f08e9) SHA1(1ba99bc4e00e206507e9bfafc989208d6ae6f8a3) )
- ROM_LOAD( "602a28.17e", 0x060000, 0x20000, CRC(5f6741fa) SHA1(9c81634f502da8682673b3b87efe0497af8abbd7) )
- ROM_LOAD( "602a21.6e", 0x080000, 0x20000, CRC(8cab34f1) SHA1(264df01460f44cd5ccdf3c8bd2d3f327874b69ea) )
- ROM_LOAD( "602a22.7e", 0x0a0000, 0x20000, CRC(e40303cb) SHA1(da943437ea2e208ea477f35bb05f77412ecdf9ac) )
- ROM_LOAD( "602a23.9e", 0x0c0000, 0x20000, CRC(75077681) SHA1(32ad10e9e32779c36bb50b402f5c6d941e293942) )
- ROM_LOAD( "602a24.10e", 0x0e0000, 0x20000, CRC(583dadad) SHA1(181ebe87095d739a5903c17ec851864e2275f571) )
- ROM_LOAD( "602a17.12c", 0x100000, 0x20000, CRC(31612199) SHA1(dff58ec3f7d98bfa7e9405f0f23647ff4ecfee62) )
- ROM_LOAD( "602a18.14c", 0x120000, 0x20000, CRC(3f061a67) SHA1(be57c38410c5635311d26afc44b3065e42fa12b7) )
- ROM_LOAD( "602a19.15c", 0x140000, 0x20000, CRC(5915dbc5) SHA1(61ab123c8a4128a18d7eb2cae99ad58203f03ffc) )
- ROM_LOAD( "602a20.17c", 0x160000, 0x20000, CRC(f87e4ef5) SHA1(4c2f0d036925a7ccd32aef3ca12b960a27247bc3) )
- ROM_LOAD( "602a13.6c", 0x180000, 0x20000, CRC(5d3589b8) SHA1(d146cb8511cfe825bdfe8296c7758545542a0faa) )
- ROM_LOAD( "602a14.7c", 0x1a0000, 0x20000, CRC(e3a75f6c) SHA1(80b20323e3560316ffbdafe4fd2f81326e103045) )
- ROM_LOAD( "602a15.9c", 0x1c0000, 0x20000, CRC(0d493c9f) SHA1(02690a1963cadd469bd67cb362384923916900a1) )
- ROM_LOAD( "602a16.10c", 0x1e0000, 0x20000, CRC(b08770b3) SHA1(41871e9261d08fd372b7deb72d939973fb694b54) )
-
- ROM_REGION( 0x18000, "layers", 0 )
- ROM_LOAD( "602a31.26g", 0x000000, 0x08000, CRC(01fa40dd) SHA1(2b8aa97f5116f39ae6a8e46f109853d70e370884) ) // layers
- ROM_LOAD( "602a30.24g", 0x008000, 0x08000, CRC(be5c4138) SHA1(7aee2ee17ef3e37399a60d9b019cfa733acbf07b) )
- ROM_LOAD( "602a29.23g", 0x010000, 0x08000, CRC(f1a8d33e) SHA1(ed6531f2fd4ad6835a879e9a5600387d8cad6d17) )
-
- ROM_REGION( 0x0c000, "road", 0 ) /* road */
- ROM_LOAD( "602a04.11e", 0x000000, 0x08000, CRC(ade9f359) SHA1(58db6be6217ed697827015e50e99e58602042a4c) )
- ROM_LOAD( "602a05.13e", 0x008000, 0x04000, CRC(f22b7f2b) SHA1(857389c57552c4e2237cb599f4c68c381430475e) ) // may also exist as 32KB with one half empty
-
- ROM_REGION( 0x40000, "k007232_1", 0 ) /* Samples (Channel A 0x20000=Channel B) */
- ROM_LOAD( "602a03.10a", 0x00000, 0x20000, CRC(31392b01) SHA1(0424747bc2015c9c93afd20e6a23083c0dcc4fb7) )
- ROM_LOAD( "602a02.8a", 0x20000, 0x20000, CRC(e2be10ae) SHA1(109c31bf7252c83a062d259143cd8299681db778) )
-
- ROM_REGION( 0x04000, "user1", 0 ) /* extra data for road effects? */
- ROM_LOAD( "602a12.1a", 0x000000, 0x04000, CRC(77b9383d) SHA1(7cb970889677704d6324bb64aafc05326c4503ad) )
-ROM_END
-
-ROM_START( weclemana )
- ROM_REGION( 0x40000, "maincpu", 0 ) /* Main CPU Code */
- ROM_LOAD16_BYTE( "602f08.17h", 0x00000, 0x10000, CRC(493b79d3) SHA1(9625e3b65c211d5081d8ed8977de287eff100842) )
- ROM_LOAD16_BYTE( "602f11.23h", 0x00001, 0x10000, CRC(6bb4f1fa) SHA1(2cfb7885b42b49dab9892e8dfd54914b64eeab06) )
- ROM_LOAD16_BYTE( "602a09.18h", 0x20000, 0x10000, CRC(8a9d756f) SHA1(12605e86ce29e6300b5400720baac7b0293d9e66) )
- ROM_LOAD16_BYTE( "602a10.22h", 0x20001, 0x10000, CRC(569f5001) SHA1(ec2dd331a279083cf847fbbe71c017038a1d562a) )
-
- ROM_REGION( 0x10000, "sub", 0 ) /* Sub CPU Code */
- ROM_LOAD16_BYTE( "602a06.18a", 0x00000, 0x08000, CRC(e12c0d11) SHA1(991afd48bf1b2c303b975ce80c754e5972c39111) )
- ROM_LOAD16_BYTE( "602a07.20a", 0x00001, 0x08000, CRC(47968e51) SHA1(9b01b2c6a14dd80327a8f66a7f1994471a4bc38e) )
-
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU Code */
- ROM_LOAD( "602a01.6d", 0x00000, 0x08000, CRC(deafe5f1) SHA1(4cfbe2841233b1222c22160af7287b7a7821c3a0) )
-
- ROM_REGION( 0x200000 * 2, "sprites", 0 ) /* x2, do not dispose, zooming sprites */
- ROM_LOAD( "602a25.12e", 0x000000, 0x20000, CRC(0eacf1f9) SHA1(b4dcd457e68175ffee3da4aff23a241fe33eb500) )
- ROM_LOAD( "602a26.14e", 0x020000, 0x20000, CRC(2182edaf) SHA1(5ae4223a76b3c0be8f66458707f2e6f63fba0b13) )
- ROM_LOAD( "602a27.15e", 0x040000, 0x20000, CRC(b22f08e9) SHA1(1ba99bc4e00e206507e9bfafc989208d6ae6f8a3) )
- ROM_LOAD( "602a28.17e", 0x060000, 0x20000, CRC(5f6741fa) SHA1(9c81634f502da8682673b3b87efe0497af8abbd7) )
- ROM_LOAD( "602a21.6e", 0x080000, 0x20000, CRC(8cab34f1) SHA1(264df01460f44cd5ccdf3c8bd2d3f327874b69ea) )
- ROM_LOAD( "602a22.7e", 0x0a0000, 0x20000, CRC(e40303cb) SHA1(da943437ea2e208ea477f35bb05f77412ecdf9ac) )
- ROM_LOAD( "602a23.9e", 0x0c0000, 0x20000, CRC(75077681) SHA1(32ad10e9e32779c36bb50b402f5c6d941e293942) )
- ROM_LOAD( "602a24.10e", 0x0e0000, 0x20000, CRC(583dadad) SHA1(181ebe87095d739a5903c17ec851864e2275f571) )
- ROM_LOAD( "602a17.12c", 0x100000, 0x20000, CRC(31612199) SHA1(dff58ec3f7d98bfa7e9405f0f23647ff4ecfee62) )
- ROM_LOAD( "602a18.14c", 0x120000, 0x20000, CRC(3f061a67) SHA1(be57c38410c5635311d26afc44b3065e42fa12b7) )
- ROM_LOAD( "602a19.15c", 0x140000, 0x20000, CRC(5915dbc5) SHA1(61ab123c8a4128a18d7eb2cae99ad58203f03ffc) )
- ROM_LOAD( "602a20.17c", 0x160000, 0x20000, CRC(f87e4ef5) SHA1(4c2f0d036925a7ccd32aef3ca12b960a27247bc3) )
- ROM_LOAD( "602a13.6c", 0x180000, 0x20000, CRC(5d3589b8) SHA1(d146cb8511cfe825bdfe8296c7758545542a0faa) )
- ROM_LOAD( "602a14.7c", 0x1a0000, 0x20000, CRC(e3a75f6c) SHA1(80b20323e3560316ffbdafe4fd2f81326e103045) )
- ROM_LOAD( "602a15.9c", 0x1c0000, 0x20000, CRC(0d493c9f) SHA1(02690a1963cadd469bd67cb362384923916900a1) )
- ROM_LOAD( "602a16.10c", 0x1e0000, 0x20000, CRC(b08770b3) SHA1(41871e9261d08fd372b7deb72d939973fb694b54) )
-
- ROM_REGION( 0x18000, "layers", 0 )
- ROM_LOAD( "602a31.26g", 0x000000, 0x08000, CRC(01fa40dd) SHA1(2b8aa97f5116f39ae6a8e46f109853d70e370884) ) // layers
- ROM_LOAD( "602a30.24g", 0x008000, 0x08000, CRC(be5c4138) SHA1(7aee2ee17ef3e37399a60d9b019cfa733acbf07b) )
- ROM_LOAD( "602a29.23g", 0x010000, 0x08000, CRC(f1a8d33e) SHA1(ed6531f2fd4ad6835a879e9a5600387d8cad6d17) )
-
- ROM_REGION( 0x0c000, "road", 0 ) /* road */
- ROM_LOAD( "602a04.11e", 0x000000, 0x08000, CRC(ade9f359) SHA1(58db6be6217ed697827015e50e99e58602042a4c) )
- ROM_LOAD( "602a05.13e", 0x008000, 0x04000, CRC(f22b7f2b) SHA1(857389c57552c4e2237cb599f4c68c381430475e) ) // may also exist as 32KB with one half empty
-
- ROM_REGION( 0x40000, "k007232_1", 0 ) /* Samples (Channel A 0x20000=Channel B) */
- ROM_LOAD( "602a03.10a", 0x00000, 0x20000, CRC(31392b01) SHA1(0424747bc2015c9c93afd20e6a23083c0dcc4fb7) )
- ROM_LOAD( "602a02.8a", 0x20000, 0x20000, CRC(e2be10ae) SHA1(109c31bf7252c83a062d259143cd8299681db778) )
-
- ROM_REGION( 0x04000, "user1", 0 ) /* extra data for road effects? */
- ROM_LOAD( "602a12.1a", 0x000000, 0x04000, CRC(77b9383d) SHA1(7cb970889677704d6324bb64aafc05326c4503ad) )
-ROM_END
-
-ROM_START( weclemanb )
- ROM_REGION( 0x40000, "maincpu", 0 ) /* Main CPU Code */
- // This set has been hacked, set was provided using same labels as weclemana
- ROM_LOAD16_BYTE( "602f08.17h", 0x00000, 0x10000, CRC(43241265) SHA1(3da1ed0d15b03845c07f07ec6838ce160d81633d) ) // sldh
- ROM_LOAD16_BYTE( "602f11.23h", 0x00001, 0x10000, CRC(3ea7dae0) SHA1(d33d67f4cc65a7680e5f43407136b75512a10230) ) // sldh
- ROM_LOAD16_BYTE( "602a09.18h", 0x20000, 0x10000, CRC(8a9d756f) SHA1(12605e86ce29e6300b5400720baac7b0293d9e66) )
- ROM_LOAD16_BYTE( "602a10.22h", 0x20001, 0x10000, CRC(569f5001) SHA1(ec2dd331a279083cf847fbbe71c017038a1d562a) )
-
- ROM_REGION( 0x10000, "sub", 0 ) /* Sub CPU Code */
- ROM_LOAD16_BYTE( "602a06.18a", 0x00000, 0x08000, CRC(e12c0d11) SHA1(991afd48bf1b2c303b975ce80c754e5972c39111) )
- ROM_LOAD16_BYTE( "602a07.20a", 0x00001, 0x08000, CRC(47968e51) SHA1(9b01b2c6a14dd80327a8f66a7f1994471a4bc38e) )
-
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU Code */
- ROM_LOAD( "602a01.6d", 0x00000, 0x08000, CRC(deafe5f1) SHA1(4cfbe2841233b1222c22160af7287b7a7821c3a0) )
-
- ROM_REGION( 0x200000 * 2, "sprites", 0 ) /* x2, do not dispose, zooming sprites */
- ROM_LOAD( "602a25.12e", 0x000000, 0x20000, CRC(0eacf1f9) SHA1(b4dcd457e68175ffee3da4aff23a241fe33eb500) )
- ROM_LOAD( "602a26.14e", 0x020000, 0x20000, CRC(2182edaf) SHA1(5ae4223a76b3c0be8f66458707f2e6f63fba0b13) )
- ROM_LOAD( "602a27.15e", 0x040000, 0x20000, CRC(b22f08e9) SHA1(1ba99bc4e00e206507e9bfafc989208d6ae6f8a3) )
- ROM_LOAD( "602a28.17e", 0x060000, 0x20000, CRC(5f6741fa) SHA1(9c81634f502da8682673b3b87efe0497af8abbd7) )
- ROM_LOAD( "602a21.6e", 0x080000, 0x20000, CRC(8cab34f1) SHA1(264df01460f44cd5ccdf3c8bd2d3f327874b69ea) )
- ROM_LOAD( "602a22.7e", 0x0a0000, 0x20000, CRC(e40303cb) SHA1(da943437ea2e208ea477f35bb05f77412ecdf9ac) )
- ROM_LOAD( "602a23.9e", 0x0c0000, 0x20000, CRC(75077681) SHA1(32ad10e9e32779c36bb50b402f5c6d941e293942) )
- ROM_LOAD( "602a24.10e", 0x0e0000, 0x20000, CRC(583dadad) SHA1(181ebe87095d739a5903c17ec851864e2275f571) )
- ROM_LOAD( "602a17.12c", 0x100000, 0x20000, CRC(31612199) SHA1(dff58ec3f7d98bfa7e9405f0f23647ff4ecfee62) )
- ROM_LOAD( "602a18.14c", 0x120000, 0x20000, CRC(3f061a67) SHA1(be57c38410c5635311d26afc44b3065e42fa12b7) )
- ROM_LOAD( "602a19.15c", 0x140000, 0x20000, CRC(5915dbc5) SHA1(61ab123c8a4128a18d7eb2cae99ad58203f03ffc) )
- ROM_LOAD( "602a20.17c", 0x160000, 0x20000, CRC(f87e4ef5) SHA1(4c2f0d036925a7ccd32aef3ca12b960a27247bc3) )
- ROM_LOAD( "602a13.6c", 0x180000, 0x20000, CRC(5d3589b8) SHA1(d146cb8511cfe825bdfe8296c7758545542a0faa) )
- ROM_LOAD( "602a14.7c", 0x1a0000, 0x20000, CRC(e3a75f6c) SHA1(80b20323e3560316ffbdafe4fd2f81326e103045) )
- ROM_LOAD( "602a15.9c", 0x1c0000, 0x20000, CRC(0d493c9f) SHA1(02690a1963cadd469bd67cb362384923916900a1) )
- ROM_LOAD( "602a16.10c", 0x1e0000, 0x20000, CRC(b08770b3) SHA1(41871e9261d08fd372b7deb72d939973fb694b54) )
-
- ROM_REGION( 0x18000, "layers", 0 )
- ROM_LOAD( "602a31.26g", 0x000000, 0x08000, CRC(01fa40dd) SHA1(2b8aa97f5116f39ae6a8e46f109853d70e370884) ) // layers
- ROM_LOAD( "602a30.24g", 0x008000, 0x08000, CRC(be5c4138) SHA1(7aee2ee17ef3e37399a60d9b019cfa733acbf07b) )
- ROM_LOAD( "602a29.23g", 0x010000, 0x08000, CRC(f1a8d33e) SHA1(ed6531f2fd4ad6835a879e9a5600387d8cad6d17) )
-
- ROM_REGION( 0x0c000, "road", 0 ) /* road */
- ROM_LOAD( "602a04.11e", 0x000000, 0x08000, CRC(ade9f359) SHA1(58db6be6217ed697827015e50e99e58602042a4c) )
- ROM_LOAD( "602a05.13e", 0x008000, 0x04000, CRC(f22b7f2b) SHA1(857389c57552c4e2237cb599f4c68c381430475e) ) // may also exist as 32KB with one half empty
-
- ROM_REGION( 0x40000, "k007232_1", 0 ) /* Samples (Channel A 0x20000=Channel B) */
- ROM_LOAD( "602a03.10a", 0x00000, 0x20000, CRC(31392b01) SHA1(0424747bc2015c9c93afd20e6a23083c0dcc4fb7) )
- ROM_LOAD( "602a02.8a", 0x20000, 0x20000, CRC(e2be10ae) SHA1(109c31bf7252c83a062d259143cd8299681db778) )
-
- ROM_REGION( 0x04000, "user1", 0 ) /* extra data for road effects? */
- ROM_LOAD( "602a12.1a", 0x000000, 0x04000, CRC(77b9383d) SHA1(7cb970889677704d6324bb64aafc05326c4503ad) )
-ROM_END
-/*
-early set V.1.26
-rom labels faded out, all other roms match
-*/
-ROM_START( weclemanc )
- ROM_REGION( 0x40000, "maincpu", 0 ) /* Main CPU Code */
- ROM_LOAD16_BYTE( "17h", 0x00000, 0x10000, CRC(66901326) SHA1(672aab497e9b94843451e016de6ca6d3c358362e) )
- ROM_LOAD16_BYTE( "23h", 0x00001, 0x10000, CRC(d9d492f4) SHA1(12c177fa5cc541be86431f314e96a4f3a74f95c6) )
- ROM_LOAD16_BYTE( "602a09.18h", 0x20000, 0x10000, CRC(8a9d756f) SHA1(12605e86ce29e6300b5400720baac7b0293d9e66) )
- ROM_LOAD16_BYTE( "602a10.22h", 0x20001, 0x10000, CRC(569f5001) SHA1(ec2dd331a279083cf847fbbe71c017038a1d562a) )
-
- ROM_REGION( 0x10000, "sub", 0 ) /* Sub CPU Code */
- ROM_LOAD16_BYTE( "602a06.18a", 0x00000, 0x08000, CRC(e12c0d11) SHA1(991afd48bf1b2c303b975ce80c754e5972c39111) )
- ROM_LOAD16_BYTE( "602a07.20a", 0x00001, 0x08000, CRC(47968e51) SHA1(9b01b2c6a14dd80327a8f66a7f1994471a4bc38e) )
-
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU Code */
- ROM_LOAD( "602a01.6d", 0x00000, 0x08000, CRC(deafe5f1) SHA1(4cfbe2841233b1222c22160af7287b7a7821c3a0) )
-
- ROM_REGION( 0x200000 * 2, "sprites", 0 ) /* x2, do not dispose, zooming sprites */
- ROM_LOAD( "602a25.12e", 0x000000, 0x20000, CRC(0eacf1f9) SHA1(b4dcd457e68175ffee3da4aff23a241fe33eb500) )
- ROM_LOAD( "602a26.14e", 0x020000, 0x20000, CRC(2182edaf) SHA1(5ae4223a76b3c0be8f66458707f2e6f63fba0b13) )
- ROM_LOAD( "602a27.15e", 0x040000, 0x20000, CRC(b22f08e9) SHA1(1ba99bc4e00e206507e9bfafc989208d6ae6f8a3) )
- ROM_LOAD( "602a28.17e", 0x060000, 0x20000, CRC(5f6741fa) SHA1(9c81634f502da8682673b3b87efe0497af8abbd7) )
- ROM_LOAD( "602a21.6e", 0x080000, 0x20000, CRC(8cab34f1) SHA1(264df01460f44cd5ccdf3c8bd2d3f327874b69ea) )
- ROM_LOAD( "602a22.7e", 0x0a0000, 0x20000, CRC(e40303cb) SHA1(da943437ea2e208ea477f35bb05f77412ecdf9ac) )
- ROM_LOAD( "602a23.9e", 0x0c0000, 0x20000, CRC(75077681) SHA1(32ad10e9e32779c36bb50b402f5c6d941e293942) )
- ROM_LOAD( "602a24.10e", 0x0e0000, 0x20000, CRC(583dadad) SHA1(181ebe87095d739a5903c17ec851864e2275f571) )
- ROM_LOAD( "602a17.12c", 0x100000, 0x20000, CRC(31612199) SHA1(dff58ec3f7d98bfa7e9405f0f23647ff4ecfee62) )
- ROM_LOAD( "602a18.14c", 0x120000, 0x20000, CRC(3f061a67) SHA1(be57c38410c5635311d26afc44b3065e42fa12b7) )
- ROM_LOAD( "602a19.15c", 0x140000, 0x20000, CRC(5915dbc5) SHA1(61ab123c8a4128a18d7eb2cae99ad58203f03ffc) )
- ROM_LOAD( "602a20.17c", 0x160000, 0x20000, CRC(f87e4ef5) SHA1(4c2f0d036925a7ccd32aef3ca12b960a27247bc3) )
- ROM_LOAD( "602a13.6c", 0x180000, 0x20000, CRC(5d3589b8) SHA1(d146cb8511cfe825bdfe8296c7758545542a0faa) )
- ROM_LOAD( "602a14.7c", 0x1a0000, 0x20000, CRC(e3a75f6c) SHA1(80b20323e3560316ffbdafe4fd2f81326e103045) )
- ROM_LOAD( "602a15.9c", 0x1c0000, 0x20000, CRC(0d493c9f) SHA1(02690a1963cadd469bd67cb362384923916900a1) )
- ROM_LOAD( "602a16.10c", 0x1e0000, 0x20000, CRC(b08770b3) SHA1(41871e9261d08fd372b7deb72d939973fb694b54) )
-
- ROM_REGION( 0x18000, "layers", 0 )
- ROM_LOAD( "602a31.26g", 0x000000, 0x08000, CRC(01fa40dd) SHA1(2b8aa97f5116f39ae6a8e46f109853d70e370884) ) // layers
- ROM_LOAD( "602a30.24g", 0x008000, 0x08000, CRC(be5c4138) SHA1(7aee2ee17ef3e37399a60d9b019cfa733acbf07b) )
- ROM_LOAD( "602a29.23g", 0x010000, 0x08000, CRC(f1a8d33e) SHA1(ed6531f2fd4ad6835a879e9a5600387d8cad6d17) )
-
- ROM_REGION( 0x0c000, "road", 0 ) /* road */
- ROM_LOAD( "602a04.11e", 0x000000, 0x08000, CRC(ade9f359) SHA1(58db6be6217ed697827015e50e99e58602042a4c) )
- ROM_LOAD( "602a05.13e", 0x008000, 0x04000, CRC(f22b7f2b) SHA1(857389c57552c4e2237cb599f4c68c381430475e) ) // may also exist as 32KB with one half empty
-
- ROM_REGION( 0x40000, "k007232_1", 0 ) /* Samples (Channel A 0x20000=Channel B) */
- ROM_LOAD( "602a03.10a", 0x00000, 0x20000, CRC(31392b01) SHA1(0424747bc2015c9c93afd20e6a23083c0dcc4fb7) )
- ROM_LOAD( "602a02.8a", 0x20000, 0x20000, CRC(e2be10ae) SHA1(109c31bf7252c83a062d259143cd8299681db778) )
-
- ROM_REGION( 0x04000, "user1", 0 ) /* extra data for road effects? */
- ROM_LOAD( "602a12.1a", 0x000000, 0x04000, CRC(77b9383d) SHA1(7cb970889677704d6324bb64aafc05326c4503ad) )
-ROM_END
-
-void wecleman_state::wecleman_unpack_sprites()
-{
- const uint32_t len = m_sprite_region.length(); // sprites
- uint8_t *src = m_sprite_region + len / 2 - 1;
- uint8_t *dst = m_sprite_region + len - 1;
-
- while(dst > src)
- {
- uint8_t data = *src--;
- if( (data&0xf0) == 0xf0 ) data &= 0x0f;
- if( (data&0x0f) == 0x0f ) data &= 0xf0;
- *dst-- = data & 0xF; *dst-- = data >> 4;
- }
-}
-
-void wecleman_state::bitswap(uint8_t *src,size_t len,int _14,int _13,int _12,int _11,int _10,int _f,int _e,int _d,int _c,int _b,int _a,int _9,int _8,int _7,int _6,int _5,int _4,int _3,int _2,int _1,int _0)
-{
- std::vector<uint8_t> buffer(len);
- int i;
-
- memcpy(&buffer[0],src,len);
- for (i = 0;i < len;i++)
- {
- src[i] =
- buffer[::bitswap<24>(i,23,22,21,_14,_13,_12,_11,_10,_f,_e,_d,_c,_b,_a,_9,_8,_7,_6,_5,_4,_3,_2,_1,_0)];
- }
-}
-
-/* Unpack sprites data and do some patching */
-void wecleman_state::init_wecleman()
-{
-// uint16_t *RAM1 = (uint16_t *) memregion("maincpu")->base(); /* Main CPU patches */
-// RAM1[0x08c2/2] = 0x601e; // faster self test
-
- /* Decode GFX Roms - Compensate for the address lines scrambling */
-
- /* Sprites - decrypting the sprites nearly KILLED ME!
- It's been the main cause of the delay of this driver ...
- I hope you'll appreciate this effort! */
-
- /* let's swap even and odd *pixels* of the sprites */
- uint8_t *RAM = m_sprite_region;
- int len = m_sprite_region.length();
- for (int i = 0; i < len; i ++)
- {
- /* TODO: could be wrong, colors have to be fixed. */
- /* The only certain thing is that 87 must convert to f0 */
- /* otherwise stray lines appear, made of pens 7 & 8 */
- RAM[i] = ::bitswap<8>(RAM[i],7,0,1,2,3,4,5,6);
- }
-
- bitswap(m_sprite_region, m_sprite_region.length(),
- 0,1,20,19,18,17,14,9,16,6,4,7,8,15,10,11,13,5,12,3,2);
-
- /* Now we can unpack each nibble of the sprites into a pixel (one byte) */
- wecleman_unpack_sprites();
-
- /* Bg & Fg & Txt */
- bitswap(memregion("layers")->base(), memregion("layers")->bytes(),
- 20,19,18,17,16,15,12,7,14,4,2,5,6,13,8,9,11,3,10,1,0);
-
- /* Road */
- bitswap(memregion("road")->base(), memregion("road")->bytes(),
- 20,19,18,17,16,15,14,7,12,4,2,5,6,13,8,9,11,3,10,1,0);
-
- m_spr_color_offs = 0x40;
- m_sound_hw_type = WECLEMAN_ID;
-}
-
-
-/***************************************************************************
- Hot Chase ROM Definitions
-***************************************************************************/
-
-ROM_START( hotchase )
- ROM_REGION( 0x40000, "maincpu", 0 ) /* Main Code */
- ROM_LOAD16_BYTE( "763k05", 0x000000, 0x010000, CRC(f34fef0b) SHA1(9edaf6da988348cb32d5686fe7a67fb92b1c9777) )
- ROM_LOAD16_BYTE( "763k04", 0x000001, 0x010000, CRC(60f73178) SHA1(49c919d09fa464b205d7eccce337349e3a633a14) )
- ROM_LOAD16_BYTE( "763k03", 0x020000, 0x010000, CRC(28e3a444) SHA1(106b22a3cbe8301eac2e46674a267b96e72ac72f) )
- ROM_LOAD16_BYTE( "763k02", 0x020001, 0x010000, CRC(9510f961) SHA1(45b1920cab08a0dacd044c851d4e7f0cb5772b46) )
-
- ROM_REGION( 0x20000, "sub", 0 ) /* Sub Code */
- ROM_LOAD16_BYTE( "763k07", 0x000000, 0x010000, CRC(ae12fa90) SHA1(7f76f09916fe152411b5af3c504ee7be07497ef4) )
- ROM_LOAD16_BYTE( "763k06", 0x000001, 0x010000, CRC(b77e0c07) SHA1(98bf492ac889d31419df706029fdf3d51b85c936) )
-
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound Code */
- ROM_LOAD( "763f01", 0x8000, 0x8000, CRC(4fddd061) SHA1(ff0aa18605612f6102107a6be1f93ae4c5edc84f) )
-
- ROM_REGION( 0x300000 * 2, "sprites", 0 ) /* x2, do not dispose, zooming sprites */
- ROM_LOAD16_WORD_SWAP( "763e17", 0x000000, 0x080000, CRC(8db4e0aa) SHA1(376cb3cae110998f2f9df7e6cdd35c06732fea69) )
- ROM_LOAD16_WORD_SWAP( "763e20", 0x080000, 0x080000, CRC(a22c6fce) SHA1(174fb9c1706c092947bcce386831acd33a237046) )
- ROM_LOAD16_WORD_SWAP( "763e18", 0x100000, 0x080000, CRC(50920d01) SHA1(313c7ecbd154b3f4c96f25c29a7734a9b3facea4) )
- ROM_LOAD16_WORD_SWAP( "763e21", 0x180000, 0x080000, CRC(77e0e93e) SHA1(c8e415438a1f5ad79b10fd3ad5cb22de0d562e5d) )
- ROM_LOAD16_WORD_SWAP( "763e19", 0x200000, 0x080000, CRC(a2622e56) SHA1(0a0ed9713882b987518e6f06a02dba417c1f4f32) )
- ROM_LOAD16_WORD_SWAP( "763e22", 0x280000, 0x080000, CRC(967c49d1) SHA1(01979d216a9fd8085298445ac5f7870d1598db74) )
-
- ROM_REGION( 0x20000, "k051316_1", 0 ) /* bg */
- ROM_LOAD( "763e14", 0x000000, 0x020000, CRC(60392aa1) SHA1(8499eb40a246587e24f6fd00af2eaa6d75ee6363) )
-
- ROM_REGION( 0x08000, "k051316_2", 0 ) /* fg */
- /* first half empty - PCB silkscreen reads "27256/27512" */
- ROM_LOAD( "763a13", 0x000000, 0x008000, CRC(8bed8e0d) SHA1(ccff330abc23fe499e76c16cab5783c3daf155dd) )
- ROM_CONTINUE( 0x000000, 0x008000 )
-
- ROM_REGION( 0x20000, "road", 0 ) /* road */
- ROM_LOAD( "763e15", 0x000000, 0x020000, CRC(7110aa43) SHA1(639dc002cc1580f0530bb5bb17f574e2258d5954) )
-
- ROM_REGION( 0x40000, "k007232_1", 0 ) /* Samples, 2 banks */
- ROM_LOAD( "763e11", 0x000000, 0x040000, CRC(9d99a5a7) SHA1(96e37bbb259e0a91d124c26b6b1a9b70de2e19a4) )
-
- ROM_REGION( 0x40000, "k007232_2", 0 ) /* Samples, 2 banks */
- ROM_LOAD( "763e10", 0x000000, 0x040000, CRC(ca409210) SHA1(703d7619c4bd33d2ff5fad127d98c82906fede33) )
-
- ROM_REGION( 0x100000, "k007232_3", 0 ) /* Samples, 4 banks for each ROM */
- ROM_LOAD( "763e08", 0x000000, 0x080000, CRC(054a9a63) SHA1(45d7926c9e7af47c041ba9b733e334bccd730a6d) )
- ROM_LOAD( "763e09", 0x080000, 0x080000, CRC(c39857db) SHA1(64b135a9ccf9e1dd50789cdd5c6bc03da8decfd0) )
-
- ROM_REGION( 0x08000, "user1", 0 ) /* extra data for road effects? */
- ROM_LOAD( "763a12", 0x000000, 0x008000, CRC(05f1e553) SHA1(8aaeb7374bd93038c24e6470398936f22cabb0fe) )
-ROM_END
-
-/*
-
-Hot Chase
-Konami 1988
-
-
-
- E08D E08B E09D E09B E10D E10B
- E08A E08C E09A E09C E10A E10C
-
-GX763 350861
-
- E09 E10 E11
- E08 07232 07232
- 07232 3.579MHz 2128
- 6809 P01.R10
- SW1
- SW2 2128 2128
- 6264 6264 6264 6264
- R02.P14 R03.R14
- 07770 R04.P16 R05.R16
- 2018-45 D06.E18 D07.H18 10MHz
- 2018-45 68000-10 07641 68000-10
-
-GX763 350860
-
- 051316 PSAC 051316 PSAC A13.H5 A14.J5
- 2018-45 2018-R6
- 2018-45
- 2018-45 07558
- 051316 PSAC 2018-45 A12.R13
-
- A15.H14
-
- A23.B17 07634
- 07635
- 2018-45 2018-45
- 2018-45 2018-45 07557
- 2018-45 2018-45 25.2MHz
- 2018-45 2018-45
-
-
-Left EPROM board
-
- E19A.A8 E19B.A7 E19C.A6 E19D.A5
-E22E.B12 E22F.B11 E22G.B10 E22H.B9 E19E.B8 E19F.B7 E19G.B6 E19H.B5
- E22A.D9 E22B.D7 E22C.D6 E22D.D5
-
-Right EPROM board
-
-E21E E21F E21G E21H E17A E17B E17C E17D E18A E18B E18C E18D
-E20E E20F E20G E20H E17E E17F E17G E17H E18E E18F E18G E18H
- E20A E20B E20C E20D E21A E21B E21C E21D
-
-*/
-
-// uses EPROM sub-boards in place of some of the MASK roms, different program too
-ROM_START( hotchasea )
- ROM_REGION( 0x40000, "maincpu", 0 ) /* Main Code */
- ROM_LOAD16_BYTE( "763r05.r16", 0x000000, 0x010000, CRC(c880d5e4) SHA1(3c3ab3ad5496cfbc8de76620eedc06601ee7a8c7) )
- ROM_LOAD16_BYTE( "763r04.p16", 0x000001, 0x010000, CRC(b732ee2c) SHA1(b3d73cf5039980ac74927eef656326515fd2026b) )
- ROM_LOAD16_BYTE( "763r03.r14", 0x020000, 0x010000, CRC(13dd71de) SHA1(4b86b81ef79e0e92a1e458010b0b9574183a9c29) )
- ROM_LOAD16_BYTE( "763r02.p14", 0x020001, 0x010000, CRC(6cd1a18e) SHA1(0ddfe6a46e95052534325f228b7f0faba121950e) )
-
- ROM_REGION( 0x20000, "sub", 0 ) /* Sub Code */
- ROM_LOAD16_BYTE( "763d07.h18", 0x000000, 0x010000, CRC(ae12fa90) SHA1(7f76f09916fe152411b5af3c504ee7be07497ef4) )
- ROM_LOAD16_BYTE( "763d06.e18", 0x000001, 0x010000, CRC(b77e0c07) SHA1(98bf492ac889d31419df706029fdf3d51b85c936) )
-
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound Code */
- ROM_LOAD( "763p01.r10", 0x8000, 0x8000, CRC(15dbca7b) SHA1(ac0c965b72a8579a3b60dbadfb942248d2cff2d8) )
-
- ROM_REGION( 0x300000 * 2, "sprites", 0 ) /* x2, do not dispose, zooming sprites */
- ROM_LOAD16_BYTE( "763e17a", 0x000000, 0x010000, CRC(8542d7d7) SHA1(a7c8aa7d8e0cabdc5269eb7adff944aaa0f819b6) )
- ROM_LOAD16_BYTE( "763e17e", 0x000001, 0x010000, CRC(4b4d919c) SHA1(0364eb74da8db7238888274d12011de876662d5a) )
- ROM_LOAD16_BYTE( "763e17b", 0x020000, 0x010000, CRC(ba9d7e72) SHA1(3af618087dcc66552ffabaf655f97b20e597122c) )
- ROM_LOAD16_BYTE( "763e17f", 0x020001, 0x010000, CRC(582400bb) SHA1(9479e45087d908c9b20392dba2a752a7ec1482e2) )
- ROM_LOAD16_BYTE( "763e17c", 0x040000, 0x010000, CRC(0ed292f8) SHA1(8c161e73c7f27925377799f67585b888bade6d82) )
- ROM_LOAD16_BYTE( "763e17g", 0x040001, 0x010000, CRC(35b27ed7) SHA1(e17e7674ee210ff340482a16dce3439b55c29f72) )
- ROM_LOAD16_BYTE( "763e17d", 0x060000, 0x010000, CRC(0166d00d) SHA1(e58f6deabc5743f6610252242f97bd5e973316ae) )
- ROM_LOAD16_BYTE( "763e17h", 0x060001, 0x010000, CRC(e5b8e8e6) SHA1(ae1349977559ff24dcd1678d6fd3a3e118612d07) )
- ROM_LOAD16_BYTE( "763e20a", 0x080000, 0x010000, CRC(256fe63c) SHA1(414325f2ff9abc411e2401dddd216e1a4de8a01e) )
- ROM_LOAD16_BYTE( "763e20e", 0x080001, 0x010000, CRC(ee8ca7e1) SHA1(fee544d6508f4106176f39e3765961e9f80fe620) )
- ROM_LOAD16_BYTE( "763e20b", 0x0a0000, 0x010000, CRC(b6714c24) SHA1(88f6437e181f36b7e44f1c70872314d8c0cc30e7) )
- ROM_LOAD16_BYTE( "763e20f", 0x0a0001, 0x010000, CRC(9dbc4b21) SHA1(31559903707a4f8ba3b044e8aad928de38403dcf) )
- ROM_LOAD16_BYTE( "763e20c", 0x0c0000, 0x010000, CRC(5173ad9b) SHA1(afe82c69f7036c7595f1a56b22176ba202b00b5c) )
- ROM_LOAD16_BYTE( "763e20g", 0x0c0001, 0x010000, CRC(b8c77f99) SHA1(e3bea1481c5b1c4733130651f9cf18587d3efc46) )
- ROM_LOAD16_BYTE( "763e20d", 0x0e0000, 0x010000, CRC(4ebdba32) SHA1(ac7daa291c82f75b09faf7bc5f6257870cc46061) )
- ROM_LOAD16_BYTE( "763e20h", 0x0e0001, 0x010000, CRC(0a428654) SHA1(551026f6f57d38aedd3498cce33af7bb2cf07184) )
- ROM_LOAD16_BYTE( "763e18a", 0x100000, 0x010000, CRC(09748099) SHA1(1821e2067b9a50a0638c8d105c617f4030d61877) )
- ROM_LOAD16_BYTE( "763e18e", 0x100001, 0x010000, CRC(049d4fcf) SHA1(aed18297677a3bb0b7197f59ea329aef9b678c01) )
- ROM_LOAD16_BYTE( "763e18b", 0x120000, 0x010000, CRC(ed0c3369) SHA1(84f336546dee01fec31c9c256ee00a9f8448cea4) )
- ROM_LOAD16_BYTE( "763e18f", 0x120001, 0x010000, CRC(b596a9ce) SHA1(dea0fe1c3386b5f0d19df4467f42d077678ae220) )
- ROM_LOAD16_BYTE( "763e18c", 0x140000, 0x010000, CRC(5a278291) SHA1(05c529baa68ef5877a28901c6f221e3d3593735f) )
- ROM_LOAD16_BYTE( "763e18g", 0x140001, 0x010000, CRC(aa7263cd) SHA1(b2acf66c02faf7777c5cb947aaf8e038f29c0f2e) )
- ROM_LOAD16_BYTE( "763e18d", 0x160000, 0x010000, CRC(b0b79a71) SHA1(46d0f17b7a6e4fb94ac9b8335bc598339d7707a5) )
- ROM_LOAD16_BYTE( "763e18h", 0x160001, 0x010000, CRC(a18b9127) SHA1(890971d2922a59ff4beea00238e710c8d3e0f19d) )
- ROM_LOAD16_BYTE( "763e21a", 0x180000, 0x010000, CRC(60788c29) SHA1(4faaa192d07f6acac0e7d11676146ecd0e71541f) )
- ROM_LOAD16_BYTE( "763e21e", 0x180001, 0x010000, CRC(844799ff) SHA1(8dc3ae3bb30ecb4e921a5b2068d3cd9421577844) )
- ROM_LOAD16_BYTE( "763e21b", 0x1a0000, 0x010000, CRC(1eefed61) SHA1(9c09dbff073d63384bf1ec9df4db4833afa33826) )
- ROM_LOAD16_BYTE( "763e21f", 0x1a0001, 0x010000, CRC(3aacfb10) SHA1(fb3eebf1f0850ed2f8f02cd4b5b564524e391afd) )
- ROM_LOAD16_BYTE( "763e21c", 0x1c0000, 0x010000, CRC(97e48b37) SHA1(864c73f48d839c2afeecec99605be6111f450ddd) )
- ROM_LOAD16_BYTE( "763e21g", 0x1c0001, 0x010000, CRC(74fefb12) SHA1(7746918c3ea8981c9cb2ead79a252939ba8bde3f) )
- ROM_LOAD16_BYTE( "763e21d", 0x1e0000, 0x010000, CRC(dd41569e) SHA1(065ee2de9ad6980788807cb563feccef1c3d1b9d) )
- ROM_LOAD16_BYTE( "763e21h", 0x1e0001, 0x010000, CRC(7ea52bf6) SHA1(2be93f88ccdea989b05beca13ebbfb77626ea41f) )
- ROM_LOAD16_BYTE( "763e19a", 0x200000, 0x010000, CRC(8c912c46) SHA1(e314edc39c32471c6fa2969e7c5c771c19fda88c) )
- ROM_LOAD16_BYTE( "763e19e", 0x200001, 0x010000, CRC(0eb34787) SHA1(9b8145dae210a177585e672fce30339b39c3c0f3) )
- ROM_LOAD16_BYTE( "763e19b", 0x220000, 0x010000, CRC(79960729) SHA1(f5c20ed7683aad8a435c292fbd5a1acc2a97ecee) )
- ROM_LOAD16_BYTE( "763e19f", 0x220001, 0x010000, CRC(1764ec5f) SHA1(4f7a0a3667087523a1ccdfc2d0e54a520f1216b3) )
- ROM_LOAD16_BYTE( "763e19c", 0x240000, 0x010000, CRC(f13377ac) SHA1(89f8d730cb457cc9cf55049b7002514302b2b04f) )
- ROM_LOAD16_BYTE( "763e19g", 0x240001, 0x010000, CRC(f2102e89) SHA1(41ff5d8904618a77c7c3c78c52c6f1b9c5a318fd) )
- ROM_LOAD16_BYTE( "763e19d", 0x260000, 0x010000, CRC(0b2a19f4) SHA1(3689b2c1f6227224fbcecc0d2470048a99510794) )
- ROM_LOAD16_BYTE( "763e19h", 0x260001, 0x010000, CRC(cd6d08a5) SHA1(ce13a8bba84f24e7d1fb25254e2e95f591fe1d67) )
- ROM_LOAD16_BYTE( "763e22a", 0x280000, 0x010000, CRC(16eec250) SHA1(f50375f207575e9d280285aca493902afbb7d729) )
- ROM_LOAD16_BYTE( "763e22e", 0x280001, 0x010000, CRC(c184b1c0) SHA1(d765e6eb2631b77dff5331840ac2a99cf1250362) )
- ROM_LOAD16_BYTE( "763e22b", 0x2a0000, 0x010000, CRC(1afe4b0c) SHA1(ce5a855291b443c1e16dbf54730960600c754fee) )
- ROM_LOAD16_BYTE( "763e22f", 0x2a0001, 0x010000, CRC(61f27c98) SHA1(d80af1a3e424c8dbab4fd21d494a0580ab96cd8d) )
- ROM_LOAD16_BYTE( "763e22c", 0x2c0000, 0x010000, CRC(c19b4b63) SHA1(93708b8769c44d5b93dcd2928a0d1120cc52c6ee) )
- ROM_LOAD16_BYTE( "763e22g", 0x2c0001, 0x010000, CRC(5bcbaf29) SHA1(621aa19606a15abb1539c07a033b32fc374a2d6a) )
- ROM_LOAD16_BYTE( "763e22d", 0x2e0000, 0x010000, CRC(fd5b669d) SHA1(fd5d82886708187e53c204c574ee252fc8a793af) )
- ROM_LOAD16_BYTE( "763e22h", 0x2e0001, 0x010000, CRC(9a9f45d8) SHA1(24fa9425b00441fff124eae7b40df7e65c920323) )
-
- ROM_REGION( 0x20000, "k051316_1", 0 ) /* bg */
- ROM_LOAD( "763a14", 0x000000, 0x020000, CRC(60392aa1) SHA1(8499eb40a246587e24f6fd00af2eaa6d75ee6363) )
-
- ROM_REGION( 0x08000, "k051316_2", 0 ) /* fg */
- /* first half empty - PCB silkscreen reads "27256/27512" */
- ROM_LOAD( "763a13", 0x000000, 0x008000, CRC(8bed8e0d) SHA1(ccff330abc23fe499e76c16cab5783c3daf155dd) )
- ROM_CONTINUE( 0x000000, 0x008000 )
-
- ROM_REGION( 0x20000, "road", 0 ) /* road */
- ROM_LOAD( "763a15", 0x000000, 0x020000, CRC(7110aa43) SHA1(639dc002cc1580f0530bb5bb17f574e2258d5954) )
-
- ROM_REGION( 0x40000, "k007232_1", 0 ) /* Samples, 2 banks */
- ROM_LOAD( "763e11a", 0x000000, 0x010000, CRC(a60a93c8) SHA1(ce319f2b30c82f66fee0bab65d091ef4bef58a89) )
- ROM_LOAD( "763e11b", 0x010000, 0x010000, CRC(7750feb5) SHA1(e0900b8af400a50a22907ffa514847003cef342d) )
- ROM_LOAD( "763e11c", 0x020000, 0x010000, CRC(78b89bf8) SHA1(b74427e363a486d4be003df39f4ca8d10b9d5fc9) )
- ROM_LOAD( "763e11d", 0x030000, 0x010000, CRC(5f38d054) SHA1(ce0c87a7b7c0806e09cce5d48a651f12f790dd27) )
-
- ROM_REGION( 0x40000, "k007232_2", 0 ) /* Samples, 2 banks */
- ROM_LOAD( "763e10a", 0x000000, 0x010000, CRC(2b1cbefc) SHA1(f23fb943c277a05f2aa4d25de692d1fb3bb752ac) )
- ROM_LOAD( "763e10b", 0x010000, 0x010000, CRC(8209c950) SHA1(944c2afb4cfc67bd243de499f5ca6a7982980f45) )
- ROM_LOAD( "763e10c", 0x020000, 0x010000, CRC(b91d6c07) SHA1(ef90457cb495750c5793cd1716d0dc44d33d0a95) )
- ROM_LOAD( "763e10d", 0x030000, 0x010000, CRC(5b465d20) SHA1(66f10b58873e738f5539b960468c7f92d07c28bc) )
-
- ROM_REGION( 0x100000, "k007232_3", 0 ) /* Samples, 4 banks for each ROM */
- ROM_LOAD( "763e08a", 0x000000, 0x020000, CRC(02e4e7ef) SHA1(1622e4d85a333acae6e5f9304a037389bfeb71dc) )
- ROM_LOAD( "763e08b", 0x020000, 0x020000, CRC(94edde2f) SHA1(b124f83f271dab710d5ecb67a70cac7b4b41931c) )
- ROM_LOAD( "763e08c", 0x040000, 0x020000, CRC(b1ab1529) SHA1(962ad45fdccf6431e05eaec65d1b2f7842bddc02) )
- ROM_LOAD( "763e08d", 0x060000, 0x020000, CRC(ee8d14db) SHA1(098ba4f27b8cbb0ce017b28e5b69d6a3d2efa1df) )
-
- ROM_LOAD( "763e09a", 0x080000, 0x020000, CRC(1e6628ec) SHA1(9d24da1d32cb39dcbe3d0633045054d398ca8eb8) )
- ROM_LOAD( "763e09b", 0x0a0000, 0x020000, CRC(f0c2feb8) SHA1(9454d45a97dc2e823baf68dce85acce8e82a18f2) )
- ROM_LOAD( "763e09c", 0x0c0000, 0x020000, CRC(a0ade3e4) SHA1(1c94cede76f9350769a589625fadaee855c38866) )
- ROM_LOAD( "763e09d", 0x0e0000, 0x020000, CRC(c74e484d) SHA1(dd7ef64c30443847c638291f6cd2b45a5f0b2310) )
-
- ROM_REGION( 0x08000, "user1", 0 ) /* extra data for road effects? */
- ROM_LOAD( "763a12", 0x000000, 0x008000, CRC(05f1e553) SHA1(8aaeb7374bd93038c24e6470398936f22cabb0fe) )
-
- ROM_REGION( 0x200, "user2", 0 )
- ROM_LOAD( "763a23.b17", 0x00000, 0x200, CRC(81c30352) SHA1(20700aed065929835ef5c3b564a6f531f0a8fedf) )
-ROM_END
-
-
-/* Important: you must leave extra space when listing sprite ROMs
- in a ROM module definition. This routine unpacks each sprite nibble
- into a byte, doubling the memory consumption. */
-
-void wecleman_state::hotchase_sprite_decode( int num16_banks, int bank_size )
-{
- uint8_t *base;
- int i;
-
- base = m_sprite_region; // sprites
- std::vector<uint8_t> temp( bank_size );
-
- for( i = num16_banks; i >0; i-- ){
- uint8_t *finish = base + 2*bank_size*i;
- uint8_t *dest = finish - 2*bank_size;
-
- uint8_t *p1 = &temp[0];
- uint8_t *p2 = &temp[bank_size/2];
-
- uint8_t data;
-
- memcpy (&temp[0], base+bank_size*(i-1), bank_size);
-
- do {
- data = *p1++;
- if( (data&0xf0) == 0xf0 ) data &= 0x0f;
- if( (data&0x0f) == 0x0f ) data &= 0xf0;
- *dest++ = data >> 4;
- *dest++ = data & 0xF;
- data = *p1++;
- if( (data&0xf0) == 0xf0 ) data &= 0x0f;
- if( (data&0x0f) == 0x0f ) data &= 0xf0;
- *dest++ = data >> 4;
- *dest++ = data & 0xF;
-
-
- data = *p2++;
- if( (data&0xf0) == 0xf0 ) data &= 0x0f;
- if( (data&0x0f) == 0x0f ) data &= 0xf0;
- *dest++ = data >> 4;
- *dest++ = data & 0xF;
- data = *p2++;
- if( (data&0xf0) == 0xf0 ) data &= 0x0f;
- if( (data&0x0f) == 0x0f ) data &= 0xf0;
- *dest++ = data >> 4;
- *dest++ = data & 0xF;
- } while( dest<finish );
- }
-}
-
-/* Unpack sprites data and do some patching */
-void wecleman_state::init_hotchase()
-{
-// uint16_t *RAM1 = (uint16_t) memregion("maincpu")->base(); /* Main CPU patches */
-// RAM[0x1140/2] = 0x0015; RAM[0x195c/2] = 0x601A; // faster self test
-
- /* Now we can unpack each nibble of the sprites into a pixel (one byte) */
- hotchase_sprite_decode(3,0x80000*2); // num banks, bank len
-
- m_spr_color_offs = 0;
- m_sound_hw_type = HOTCHASE_ID;
-}
-
-
-/***************************************************************************
- Game driver(s)
-***************************************************************************/
-
-GAMEL( 1986, wecleman, 0, wecleman, wecleman, wecleman_state, init_wecleman, ROT0, "Konami", "WEC Le Mans 24 (v2.01)", 0, layout_wecleman )
-GAMEL( 1986, weclemana, wecleman, wecleman, wecleman, wecleman_state, init_wecleman, ROT0, "Konami", "WEC Le Mans 24 (v2.00)", 0, layout_wecleman )
-GAMEL( 1988, weclemanb, wecleman, wecleman, wecleman, wecleman_state, init_wecleman, ROT0, "hack", "WEC Le Mans 24 (v2.00, hack)", 0, layout_wecleman ) // small section of code inserted, year changed to 1988
-GAMEL( 1986, weclemanc, wecleman, wecleman, wecleman, wecleman_state, init_wecleman, ROT0, "Konami", "WEC Le Mans 24 (v1.26)", 0, layout_wecleman )
-// a version 1.21 is known to exist too, see https://www.youtube.com/watch?v=4l8vYJi1OeU
-
-GAMEL( 1988, hotchase, 0, hotchase, hotchase, wecleman_state, init_hotchase, ROT0, "Konami", "Hot Chase (set 1)", 0, layout_wecleman )
-GAMEL( 1988, hotchasea, hotchase, hotchase, hotchase, wecleman_state, init_hotchase, ROT0, "Konami", "Hot Chase (set 2)", 0, layout_wecleman )