summaryrefslogtreecommitdiffstatshomepage
path: root/trunk/src/mame/drivers/nwk-tr.c
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src/mame/drivers/nwk-tr.c')
-rw-r--r--trunk/src/mame/drivers/nwk-tr.c898
1 files changed, 898 insertions, 0 deletions
diff --git a/trunk/src/mame/drivers/nwk-tr.c b/trunk/src/mame/drivers/nwk-tr.c
new file mode 100644
index 00000000000..dfd87e3ccee
--- /dev/null
+++ b/trunk/src/mame/drivers/nwk-tr.c
@@ -0,0 +1,898 @@
+/* Konami NWK-TR System
+
+ Driver by Ville Linde
+
+
+
+ Hardware overview:
+
+ GN676 CPU Board:
+ ----------------
+ IBM PowerPC 403GA at 32MHz (main CPU)
+ Motorola MC68EC000 at 16MHz (sound CPU)
+ Konami K056800 (MIRAC), sound system interface
+ Ricoh RF5c400 sound chip
+ National Semiconductor ADC12138
+
+ GN676 GFX Board:
+ ----------------
+ Analog Devices ADSP-21062 SHARC DSP at 36MHz
+ Konami K001604 (2D tilemaps + 2x ROZ)
+ Konami 0000033906 (PCI bridge)
+ 3DFX 500-0003-03 (Voodoo) FBI with 2MB RAM
+ 2x 3DFX 500-0004-02 (Voodoo) TMU with 2MB RAM
+
+ GN676 LAN Board:
+ ----------------
+ Xilinx XC5210 FPGA
+ Xilinx XC5204 FPGA
+
+
+Konami 'NWK-TR' Hardware
+Konami, 1998-1999
+
+Known games on this hardware include....
+
+Game (C) Year
+---------------------------------------
+Racing Jam Konami 1998
+Racing Jam : Chapter 2 Konami 1999
+Thrill Drive Konami 1998
+
+PCB Layouts
+-----------
+
+Note, the top board is virtually identical to GN715 used on Hornet.
+Some extra RCA connectors have been added (for dual sound output), the LED and
+DIPSW are present on the main board (instead of on the filter board) and the
+SOIC8 chip (a secured PIC?) is not populated (the solder pads are there though).
+There's an extra sound IC AN7395S (it's not populated on Hornet).
+The PALs/PLDs are the same on NWK-TR and Hornet.
+
+
+Top Board
+GN676 PWB(A)B
+Konami 1997
+|--------------------------------------------------------------|
+| SP485CS CN10 CN11 7805 CN9 JP8 JP9 JP10 JP11|
+|CN19 7809 PAL1 |
+|CN21 JP13 PAL2 68EC000 EPROM.7S |
+| NE5532 PAL3 CN12|
+| JP12 JP16 DRM1M4SJ8 CN13|
+| NE5532 AN7395S MASKROM.9P MASKROM.9T |
+| SM5877 JP15 RF5C400 |
+|CN18 MASKROM.12P MASKROM.12T|
+| SM5877 16.9344MHz CN7|
+|CN14 SRAM256K MASKROM.14P MASKROM.14T|
+| |
+|CN16 SRAM256K MASKROM.16P MASKROM.16T|
+| ADC12138 |
+|CN15 056800 JP5 |
+| JP4 |
+|CN17 MACH111 JP3 |---------| |
+| TEST_SW EPROM.22P | | |
+|CN1 DRAM16X16 |PPC403GA | |
+| EPROM.25P | | |
+| | | |
+| DRAM16X16 EPROM.27P |---------| |
+| 4AK16 JP6|
+| |
+|CN3 |
+| PAL4 CN5 7.3728MHz|
+| 058232 |
+| 50.000MHz|
+|CN2 RESET_SW JP1 JP2 |
+|M48T58Y-70PC1 CN4 DSW(8) CN6 64.000MHz|
+|--------------------------------------------------------------|
+Notes:
+ DRM1M4SJ8 - Fujitsu 81C4256 256kx4 DRAM (SOJ24)
+ SRAM256K - Cypress CY7C199 32kx8 SRAM (SOJ28)
+ DRAM16X16 - Fujitsu 8118160A-60 16megx16 DRAM (SOJ42)
+ M48T58Y-70PC1 - ST Timekeeper RAM
+ RF5C400 - Ricoh RF5C400 PCM 32Ch, 44.1 kHz Stereo, 3D Effect Spatializer, clock input 16.9344MHz
+ 056800 - Konami Custom (QFP80)
+ 058232 - Konami Custom Ceramic Package (SIL14)
+ ADC12138 - National Semiconductor ADC12138 A/D Converter, 12-bit + Serial I/O With MUX (SOP28)
+ MACH111 - AMD MACH111 CPLD (Stamped 'N676A1', PLCC44)
+ 68EC000 - Motorola MC68EC000, running at 16.0MHz (64/4)
+ PPC403GA - IBM PowerPC 403GA CPU, clock input 32.0MHz (64/2) (QFP160)
+ SM5877AM - Nippon Precision Circuits 3rd Order 2-Channel D/A Converter (SOIC24)
+ 4AK16 - Hitachi 4AK16 Silicon N-Channel Power MOS FET Array (SIL10)
+ NE5532AN - Philips, Dual Low-Noise High-Speed Audio OP Amp (DIP8)
+ SP485CS - Sipex SP485CS Low Power Half Duplex RS485 Transceiver (DIP8)
+ AN7395S - Panasonic AM7395S Spatializer Audio Processor IC for 3D surround (SOIC20)
+ PAL1 - AMD PALCE16V8 (stamped 'N676A4', DIP20)
+ PAL2 - AMD PALCE16V8 (stamped 'N676A2', DIP20)
+ PAL3 - AMD PALCE16V8 (stamped 'N676A3', DIP20)
+ PAL4 - AMD PALCE16V8 (stamped 'N676A5', DIP20)
+ JP1 - 25M O O-O 32M
+ JP2 - 25M O O-O 32M
+ JP3 - RW O O O RO
+ JP4 - PROG 32M O O-O 16M
+ JP5 - DATA 32M O-O O 16M
+ JP6 - BOOT 16 O-O O 32
+ JP7 - SRC DOUT2 O O-O 0
+ JP8 - 64M&32M O-O O 16M
+ JP9 - 64M O O-O 32M&16M
+ JP10 - 64M&32M O-O O 16M
+ JP11 - 64M O O-O 32M&16M
+ JP12 - through O-O O SP
+ JP13 - through O-O O SP
+ JP14 - WDT O O
+ JP15 - MONO O-O O SURR
+ JP16 - HIGH O O O MID (N/C LOW)
+ CN1 to CN3 - D-SUB Connectors
+ CN4 - Multi-pin Connector for Network PCB
+ CN5 - DIN96 connector (pads only, not used)
+ CN6 - DIN96 joining connector to lower PCB
+ CN7 - Multi-pin connector (pads only, not used)
+ CN9 to CN13 - Power Connectors
+ CN14 to CN17 - RCA Stereo Audio OUT
+ CN18 - RCA Mono Audio OUT
+ CN19 - USB Connector
+
+
+ROM Usage
+---------
+ |------------------------------- ROM Locations -------------------------------------|
+Game 27P 25P 22P 16P 14P 12P 9P 16T 14T 12T 9T 7S
+--------------------------------------------------------------------------------------------------
+Racing Jam 676NC01 - - 676A09 676A10 - - 676A04 676A05 - - 676A08
+Racing Jam 2 888A01 - - 888A09 888A10 - - 676A04 676A05 888A06 - 888A08
+Thrill Drive 713BE01 - - 713A09 713A10 - - 713A04 713A05 - - 713A08
+
+
+Bottom Board
+GN676 PWB(B)B
+|-------------------------------------------------------------------------------------------|
+|CN4 CN2 CN8 CN6 CN5|
+|JP1 |---------| 4M_EDO 4M_EDO |
+| | | |----------| |
+| 4M_EDO 4M_EDO | TEXELFX | | | 4M_EDO MASKROM.8X |
+|CN3 | | | PIXELFX | MASKROM.8Y |
+| 4M_EDO 4M_EDO | | | | |
+| |---------| | | 4M_EDO |
+| 4M_EDO 4M_EDO |----------| |
+| |---------| 50MHz |--------| |
+| 4M_EDO 4M_EDO | | |KONAMI | |
+| | TEXELFX | |33906 | MASKROM.16X |
+| | | | | MASKROM.16Y |
+| | | PLCC44_SOCKET |--------| AM7201 |
+| MC44200 |---------| |
+| |
+| |
+| PAL3 256KSRAM 36MHz |
+| 256KSRAM AM7201 AM7201 |-------------| |
+| 256KSRAM |ANALOG | |
+| 256KSRAM MACH111 256KSRAM AM7201 AM7201 |DEVICES | |
+| 256KSRAM AV9170 |ADSP-21062 | |
+| |SHARC | |
+| |--------| |KS-160 | |
+| |KONAMI | |-------------| |
+| |001604 | 1MSRAM 1MSRAM 1MSRAM 1MSRAM |
+|1MSRAM | | 1MSRAM 1MSRAM 1MSRAM 1MSRAM |
+| |--------| |
+|1MSRAM 256KSRAM PAL1 |
+| 256KSRAM 256KSRAM JP2 CN1 PAL2 |
+|-------------------------------------------------------------------------------------------|
+Notes:
+ 4M_EDO - Silicon Magic SM81C256K16CJ-35 EDO DRAM 66MHz (SOJ40)
+ 1MSRAM - Cypress CY7C109-25VC 1Meg SRAM (SOJ32)
+ 256KSRAM - Winbond W24257AJ-15 256k SRAM (SOJ28)
+ TEXELFX - 3DFX 500-0004-02 BD0665.1 TMU (QFP208)
+ PIXELFX - 3DFX 500-0003-03 F001701.1 FBI (QFP240)
+ 001604 - Konami Custom (QFP208)
+ MC44200FT - Motorola MC44200FT 3 Channel Video D/A Converter (QFP44)
+ MACH111 - AMD MACH111 CPLD (Stamped '03161A', PLCC44)
+PLCC44_SOCKET- empty PLCC44 socket
+ AV9170 - Integrated Circuit Systems Inc. Clock Multiplier (SOIC8)
+ AM7201 - AMD AM7201 FIFO (PLCC32)
+ PAL1 - AMD PALCE16V8 (stamped 'N676B4', DIP20)
+ PAL2 - AMD PALCE16V8 (stamped 'N676B5', DIP20)
+ PAL3 - AMD PALCE16V8 (stamped 'N676B2', DIP20)
+ JP1 - SLV O O-O MST,TWN
+ JP2 - SLV O O-O MST
+ CN1 - 96 Pin joining connector to upper PCB
+ CN2 - 8-Pin 24kHz RGB OUT
+ CN3 - 15-Pin DSUB VGA Video MAIN OUT
+ CN4 - 6-Pin Power Connector
+ CN5 - 4-Pin Power Connector
+ CN6 - 2-Pin Connector (Not Used)
+ CN7 - 6-Pin Connector
+
+
+ROM Usage
+---------
+ |------ ROM Locations -------|
+Game 8X 8Y 16X 16Y
+-------------------------------------------
+Racing Jam 676A13 - 676A14 -
+Racing Jam 2 888A13 - 888A14 -
+Thrill Drive 713A13 - 713A14 -
+
+*/
+
+#include "emu.h"
+#include "cpu/m68000/m68000.h"
+#include "cpu/powerpc/ppc.h"
+#include "cpu/sharc/sharc.h"
+#include "machine/adc1213x.h"
+#include "machine/k033906.h"
+#include "machine/konppc.h"
+#include "machine/timekpr.h"
+#include "sound/rf5c400.h"
+#include "sound/k056800.h"
+#include "video/voodoo.h"
+#include "video/konicdev.h"
+
+
+class nwktr_state : public driver_device
+{
+public:
+ nwktr_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag) { }
+
+ UINT8 m_led_reg0;
+ UINT8 m_led_reg1;
+ UINT32 *m_work_ram;
+ int m_fpga_uploaded;
+ int m_lanc2_ram_r;
+ int m_lanc2_ram_w;
+ UINT8 *m_lanc2_ram;
+ UINT32 *m_sharc_dataram;
+};
+
+
+
+
+
+static WRITE32_HANDLER( paletteram32_w )
+{
+ COMBINE_DATA(&space->machine().generic.paletteram.u32[offset]);
+ data = space->machine().generic.paletteram.u32[offset];
+ palette_set_color_rgb(space->machine(), offset, pal5bit(data >> 10), pal5bit(data >> 5), pal5bit(data >> 0));
+}
+
+static void voodoo_vblank_0(device_t *device, int param)
+{
+ cputag_set_input_line(device->machine(), "maincpu", INPUT_LINE_IRQ0, ASSERT_LINE);
+}
+
+
+static SCREEN_UPDATE( nwktr )
+{
+ nwktr_state *state = screen->machine().driver_data<nwktr_state>();
+ device_t *voodoo = screen->machine().device("voodoo");
+ device_t *k001604 = screen->machine().device("k001604");
+
+ bitmap_fill(bitmap, cliprect, screen->machine().pens[0]);
+
+ voodoo_update(voodoo, bitmap, cliprect);
+
+ k001604_draw_front_layer(k001604, bitmap, cliprect);
+
+ draw_7segment_led(bitmap, 3, 3, state->m_led_reg0);
+ draw_7segment_led(bitmap, 9, 3, state->m_led_reg1);
+ return 0;
+}
+
+/*****************************************************************************/
+
+static READ32_HANDLER( sysreg_r )
+{
+ device_t *adc12138 = space->machine().device("adc12138");
+ UINT32 r = 0;
+ if (offset == 0)
+ {
+ if (ACCESSING_BITS_24_31)
+ {
+ r |= input_port_read(space->machine(), "IN0") << 24;
+ }
+ if (ACCESSING_BITS_16_23)
+ {
+ r |= input_port_read(space->machine(), "IN1") << 16;
+ }
+ if (ACCESSING_BITS_8_15)
+ {
+ r |= input_port_read(space->machine(), "IN2") << 8;
+ }
+ if (ACCESSING_BITS_0_7)
+ {
+ r |= adc1213x_do_r(adc12138, 0) | (adc1213x_eoc_r(adc12138, 0) << 2);
+ }
+ }
+ else if (offset == 1)
+ {
+ if (ACCESSING_BITS_24_31)
+ {
+ r |= input_port_read(space->machine(), "DSW") << 24;
+ }
+ }
+ return r;
+}
+
+static WRITE32_HANDLER( sysreg_w )
+{
+ nwktr_state *state = space->machine().driver_data<nwktr_state>();
+ device_t *adc12138 = space->machine().device("adc12138");
+ if( offset == 0 )
+ {
+ if (ACCESSING_BITS_24_31)
+ {
+ state->m_led_reg0 = (data >> 24) & 0xff;
+ }
+ if (ACCESSING_BITS_16_23)
+ {
+ state->m_led_reg1 = (data >> 16) & 0xff;
+ }
+ return;
+ }
+ if( offset == 1 )
+ {
+ if (ACCESSING_BITS_24_31)
+ {
+ int cs = (data >> 27) & 0x1;
+ int conv = (data >> 26) & 0x1;
+ int di = (data >> 25) & 0x1;
+ int sclk = (data >> 24) & 0x1;
+
+ adc1213x_cs_w(adc12138, 0, cs);
+ adc1213x_conv_w(adc12138, 0, conv);
+ adc1213x_di_w(adc12138, 0, di);
+ adc1213x_sclk_w(adc12138, 0, sclk);
+ }
+ if (ACCESSING_BITS_0_7)
+ {
+ if (data & 0x80) // CG Board 1 IRQ Ack
+ {
+ //cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_IRQ1, CLEAR_LINE);
+ }
+ if (data & 0x40) // CG Board 0 IRQ Ack
+ {
+ //cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_IRQ0, CLEAR_LINE);
+ }
+ }
+ return;
+ }
+}
+
+
+static void lanc2_init(running_machine &machine)
+{
+ nwktr_state *state = machine.driver_data<nwktr_state>();
+ state->m_fpga_uploaded = 0;
+ state->m_lanc2_ram_r = 0;
+ state->m_lanc2_ram_w = 0;
+ state->m_lanc2_ram = auto_alloc_array(machine, UINT8, 0x8000);
+}
+
+static READ32_HANDLER( lanc1_r )
+{
+ nwktr_state *state = space->machine().driver_data<nwktr_state>();
+ switch (offset)
+ {
+ case 0x40/4:
+ {
+ UINT32 r = 0;
+
+ r |= (state->m_fpga_uploaded) ? (1 << 6) : 0;
+ r |= 1 << 5;
+
+ return (r) << 24;
+ }
+
+ default:
+ {
+ //printf("lanc1_r: %08X, %08X at %08X\n", offset, mem_mask, cpu_get_pc(&space->device()));
+ return 0xffffffff;
+ }
+ }
+}
+
+static WRITE32_HANDLER( lanc1_w )
+{
+ //printf("lanc1_w: %08X, %08X, %08X at %08X\n", data, offset, mem_mask, cpu_get_pc(&space->device()));
+}
+
+static READ32_HANDLER( lanc2_r )
+{
+ nwktr_state *state = space->machine().driver_data<nwktr_state>();
+ UINT32 r = 0;
+
+ if (offset == 0)
+ {
+ if (ACCESSING_BITS_0_7)
+ {
+ r |= state->m_lanc2_ram[state->m_lanc2_ram_r & 0x7fff];
+ state->m_lanc2_ram_r++;
+ }
+ else
+ {
+ r |= 0xffffff00;
+ }
+ }
+
+ if (offset == 4)
+ {
+ if (ACCESSING_BITS_24_31)
+ {
+ r |= 0x00000000;
+ }
+ }
+
+ //printf("lanc2_r: %08X, %08X at %08X\n", offset, mem_mask, cpu_get_pc(&space->device()));
+
+ return r;
+}
+
+static WRITE32_HANDLER( lanc2_w )
+{
+ nwktr_state *state = space->machine().driver_data<nwktr_state>();
+ if (offset == 0)
+ {
+ if (ACCESSING_BITS_24_31)
+ {
+ UINT8 value = data >> 24;
+
+ value = ((value >> 7) & 0x01) |
+ ((value >> 5) & 0x02) |
+ ((value >> 3) & 0x04) |
+ ((value >> 1) & 0x08) |
+ ((value << 1) & 0x10) |
+ ((value << 3) & 0x20) |
+ ((value << 5) & 0x40) |
+ ((value << 7) & 0x80);
+
+ state->m_fpga_uploaded = 1;
+
+ //printf("lanc2_fpga_w: %02X at %08X\n", value, cpu_get_pc(&space->device()));
+ }
+ else if (ACCESSING_BITS_0_7)
+ {
+ state->m_lanc2_ram[state->m_lanc2_ram_w & 0x7fff] = data & 0xff;
+ state->m_lanc2_ram_w++;
+ }
+ else
+ {
+ //printf("lanc2_w: %08X, %08X, %08X at %08X\n", data, offset, mem_mask, cpu_get_pc(&space->device()));
+ }
+ }
+ if (offset == 4)
+ {
+ if (mame_stricmp(space->machine().system().name, "thrilld") == 0)
+ {
+ state->m_work_ram[(0x3ffed0/4) + 0] = 0x472a3731;
+ state->m_work_ram[(0x3ffed0/4) + 1] = 0x33202020;
+ state->m_work_ram[(0x3ffed0/4) + 2] = 0x2d2d2a2a;
+ state->m_work_ram[(0x3ffed0/4) + 3] = 0x2a207878;
+
+ state->m_work_ram[(0x3fff40/4) + 0] = 0x47433731;
+ state->m_work_ram[(0x3fff40/4) + 1] = 0x33000000;
+ state->m_work_ram[(0x3fff40/4) + 2] = 0x19994a41;
+ state->m_work_ram[(0x3fff40/4) + 3] = 0x4100a9b1;
+ }
+ }
+
+ //printf("lanc2_w: %08X, %08X, %08X at %08X\n", data, offset, mem_mask, cpu_get_pc(&space->device()));
+}
+
+/*****************************************************************************/
+
+static MACHINE_START( nwktr )
+{
+ nwktr_state *state = machine.driver_data<nwktr_state>();
+ /* set conservative DRC options */
+ ppcdrc_set_options(machine.device("maincpu"), PPCDRC_COMPATIBLE_OPTIONS);
+
+ /* configure fast RAM regions for DRC */
+ ppcdrc_add_fastram(machine.device("maincpu"), 0x00000000, 0x003fffff, FALSE, state->m_work_ram);
+}
+
+static ADDRESS_MAP_START( nwktr_map, AS_PROGRAM, 32 )
+ AM_RANGE(0x00000000, 0x003fffff) AM_RAM AM_BASE_MEMBER(nwktr_state, m_work_ram) /* Work RAM */
+ AM_RANGE(0x74000000, 0x740000ff) AM_DEVREADWRITE("k001604", k001604_reg_r, k001604_reg_w)
+ AM_RANGE(0x74010000, 0x74017fff) AM_RAM_WRITE(paletteram32_w) AM_BASE_GENERIC(paletteram)
+ AM_RANGE(0x74020000, 0x7403ffff) AM_DEVREADWRITE("k001604", k001604_tile_r, k001604_tile_w)
+ AM_RANGE(0x74040000, 0x7407ffff) AM_DEVREADWRITE("k001604", k001604_char_r, k001604_char_w)
+ AM_RANGE(0x78000000, 0x7800ffff) AM_READWRITE(cgboard_dsp_shared_r_ppc, cgboard_dsp_shared_w_ppc)
+ AM_RANGE(0x780c0000, 0x780c0003) AM_READWRITE(cgboard_dsp_comm_r_ppc, cgboard_dsp_comm_w_ppc)
+ AM_RANGE(0x7d000000, 0x7d00ffff) AM_READ(sysreg_r)
+ AM_RANGE(0x7d010000, 0x7d01ffff) AM_WRITE(sysreg_w)
+ AM_RANGE(0x7d020000, 0x7d021fff) AM_DEVREADWRITE8("m48t58", timekeeper_r, timekeeper_w, 0xffffffff) /* M48T58Y RTC/NVRAM */
+ AM_RANGE(0x7d030000, 0x7d030007) AM_DEVREAD("k056800", k056800_host_r)
+ AM_RANGE(0x7d030000, 0x7d030007) AM_DEVWRITE("k056800", k056800_host_w)
+ AM_RANGE(0x7d030008, 0x7d03000f) AM_DEVWRITE("k056800", k056800_host_w)
+ AM_RANGE(0x7d040000, 0x7d04ffff) AM_READWRITE(lanc1_r, lanc1_w)
+ AM_RANGE(0x7d050000, 0x7d05ffff) AM_READWRITE(lanc2_r, lanc2_w)
+ AM_RANGE(0x7e000000, 0x7e7fffff) AM_ROM AM_REGION("user2", 0) /* Data ROM */
+ AM_RANGE(0x7f000000, 0x7f1fffff) AM_ROM AM_SHARE("share2")
+ AM_RANGE(0x7fe00000, 0x7fffffff) AM_ROM AM_REGION("user1", 0) AM_SHARE("share2") /* Program ROM */
+ADDRESS_MAP_END
+
+/*****************************************************************************/
+
+static ADDRESS_MAP_START( sound_memmap, AS_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x07ffff) AM_ROM
+ AM_RANGE(0x100000, 0x10ffff) AM_RAM /* Work RAM */
+ AM_RANGE(0x200000, 0x200fff) AM_DEVREADWRITE("rfsnd", rf5c400_r, rf5c400_w) /* Ricoh RF5C400 */
+ AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE("k056800", k056800_sound_r, k056800_sound_w)
+ AM_RANGE(0x600000, 0x600001) AM_NOP
+ADDRESS_MAP_END
+
+/*****************************************************************************/
+
+
+static READ32_HANDLER( dsp_dataram_r )
+{
+ nwktr_state *state = space->machine().driver_data<nwktr_state>();
+ return state->m_sharc_dataram[offset] & 0xffff;
+}
+
+static WRITE32_HANDLER( dsp_dataram_w )
+{
+ nwktr_state *state = space->machine().driver_data<nwktr_state>();
+ state->m_sharc_dataram[offset] = data;
+}
+
+static ADDRESS_MAP_START( sharc_map, AS_DATA, 32 )
+ AM_RANGE(0x0400000, 0x041ffff) AM_READWRITE(cgboard_0_shared_sharc_r, cgboard_0_shared_sharc_w)
+ AM_RANGE(0x0500000, 0x05fffff) AM_READWRITE(dsp_dataram_r, dsp_dataram_w)
+ AM_RANGE(0x1400000, 0x14fffff) AM_RAM
+ AM_RANGE(0x2400000, 0x27fffff) AM_DEVREADWRITE("voodoo", nwk_voodoo_0_r, nwk_voodoo_0_w)
+ AM_RANGE(0x3400000, 0x34000ff) AM_READWRITE(cgboard_0_comm_sharc_r, cgboard_0_comm_sharc_w)
+ AM_RANGE(0x3500000, 0x35000ff) AM_READWRITE(K033906_0_r, K033906_0_w)
+ AM_RANGE(0x3600000, 0x37fffff) AM_ROMBANK("bank5")
+ADDRESS_MAP_END
+
+/*****************************************************************************/
+
+static INPUT_PORTS_START( nwktr )
+ PORT_START("IN0")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
+
+ PORT_START("IN1")
+ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("IN2")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Service Button") PORT_CODE(KEYCODE_7)
+ PORT_SERVICE_NO_TOGGLE( 0x10, IP_ACTIVE_LOW )
+ PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x80, 0x00, "Test Mode" ) PORT_DIPLOCATION("SW:1")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x00, "Disable Machine Init" ) PORT_DIPLOCATION("SW:2")
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, "DIP3" ) PORT_DIPLOCATION("SW:3")
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, "DIP4" ) PORT_DIPLOCATION("SW:4")
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, "DIP5" ) PORT_DIPLOCATION("SW:5")
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, "DIP6" ) PORT_DIPLOCATION("SW:6")
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, "DIP7" ) PORT_DIPLOCATION("SW:7")
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x01, 0x01, "DIP8" ) PORT_DIPLOCATION("SW:8")
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+
+ PORT_START("ANALOG1") // Steering
+ PORT_BIT( 0xfff, 0x800, IPT_PADDLE ) PORT_MINMAX(0x000, 0xfff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5)
+
+ PORT_START("ANALOG2") // Acceleration pedal
+ PORT_BIT( 0x7ff, 0x000, IPT_PEDAL ) PORT_MINMAX(0x000, 0x7ff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5)
+
+ PORT_START("ANALOG3") // Foot brake pedal
+ PORT_BIT( 0x7ff, 0x000, IPT_PEDAL2 ) PORT_MINMAX(0x000, 0x7ff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5)
+
+ PORT_START("ANALOG4") // Hand brake lever
+ PORT_BIT( 0x7ff, 0x000, IPT_AD_STICK_Y ) PORT_MINMAX(0x000, 0x7ff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5)
+
+ PORT_START("ANALOG5") // Clutch pedal
+ PORT_BIT( 0x7ff, 0x000, IPT_PEDAL3 ) PORT_MINMAX(0x000, 0x7ff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5)
+
+INPUT_PORTS_END
+
+static const sharc_config sharc_cfg =
+{
+ BOOT_MODE_EPROM
+};
+
+
+static double adc12138_input_callback( device_t *device, UINT8 input )
+{
+ int value = 0;
+ switch (input)
+ {
+ case 0: value = input_port_read(device->machine(), "ANALOG1") - 0x800; break;
+ case 1: value = input_port_read(device->machine(), "ANALOG2"); break;
+ case 2: value = input_port_read(device->machine(), "ANALOG3"); break;
+ case 3: value = input_port_read(device->machine(), "ANALOG4"); break;
+ case 4: value = input_port_read(device->machine(), "ANALOG5"); break;
+ }
+
+ return (double)(value) / 2047.0;
+}
+
+static const adc12138_interface nwktr_adc_interface = {
+ adc12138_input_callback
+};
+
+static void sound_irq_callback(running_machine &machine, int irq)
+{
+ if (irq == 0)
+ generic_pulse_irq_line(machine.device("audiocpu"), INPUT_LINE_IRQ1);
+ else
+ generic_pulse_irq_line(machine.device("audiocpu"), INPUT_LINE_IRQ2);
+}
+
+static const k056800_interface nwktr_k056800_interface =
+{
+ sound_irq_callback
+};
+
+static const k033906_interface nwktr_k033906_interface =
+{
+ "voodoo"
+};
+
+static const k001604_interface racingj_k001604_intf =
+{
+ 0, 1, /* gfx index 1 & 2 */
+ 0, 1, /* layer_size, roz_size */
+ 0 /* slrasslt hack */
+};
+
+static const k001604_interface thrilld_k001604_intf =
+{
+ 0, 1, /* gfx index 1 & 2 */
+ 1, 1, /* layer_size, roz_size */
+ 0 /* slrasslt hack */
+};
+
+static MACHINE_RESET( nwktr )
+{
+ cputag_set_input_line(machine, "dsp", INPUT_LINE_RESET, ASSERT_LINE);
+}
+
+static MACHINE_CONFIG_START( nwktr, nwktr_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", PPC403GA, 64000000/2) /* PowerPC 403GA 32MHz */
+ MCFG_CPU_PROGRAM_MAP(nwktr_map)
+
+ MCFG_CPU_ADD("audiocpu", M68000, 64000000/4) /* 16MHz */
+ MCFG_CPU_PROGRAM_MAP(sound_memmap)
+
+ MCFG_CPU_ADD("dsp", ADSP21062, 36000000)
+ MCFG_CPU_CONFIG(sharc_cfg)
+ MCFG_CPU_DATA_MAP(sharc_map)
+
+ MCFG_QUANTUM_TIME(attotime::from_hz(6000))
+
+ MCFG_MACHINE_START(nwktr)
+ MCFG_MACHINE_RESET(nwktr)
+
+ MCFG_3DFX_VOODOO_1_ADD("voodoo", STD_VOODOO_1_CLOCK, 2, "screen")
+ MCFG_3DFX_VOODOO_CPU("dsp")
+ MCFG_3DFX_VOODOO_TMU_MEMORY(0, 2)
+ MCFG_3DFX_VOODOO_TMU_MEMORY(1, 2)
+ MCFG_3DFX_VOODOO_VBLANK(voodoo_vblank_0)
+
+ MCFG_K033906_ADD("k033906_1", nwktr_k033906_interface)
+
+ /* video hardware */
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_REFRESH_RATE(60)
+ MCFG_SCREEN_FORMAT(BITMAP_FORMAT_RGB32)
+ MCFG_SCREEN_SIZE(512, 384)
+ MCFG_SCREEN_VISIBLE_AREA(0, 511, 0, 383)
+ MCFG_SCREEN_UPDATE(nwktr)
+
+ MCFG_PALETTE_LENGTH(65536)
+
+ MCFG_K001604_ADD("k001604", racingj_k001604_intf)
+
+ MCFG_K056800_ADD("k056800", nwktr_k056800_interface)
+
+ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
+
+ MCFG_SOUND_ADD("rfsnd", RF5C400, 16934400) // as per Guru readme above
+ MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
+ MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
+
+ MCFG_M48T58_ADD( "m48t58" )
+
+ MCFG_ADC12138_ADD( "adc12138", nwktr_adc_interface )
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_DERIVED( thrilld, nwktr )
+
+ MCFG_DEVICE_REMOVE("k001604")
+ MCFG_K001604_ADD("k001604", thrilld_k001604_intf)
+MACHINE_CONFIG_END
+
+
+/*****************************************************************************/
+
+static DRIVER_INIT(nwktr)
+{
+ nwktr_state *state = machine.driver_data<nwktr_state>();
+ init_konami_cgboard(machine, 1, CGBOARD_TYPE_NWKTR);
+ set_cgboard_texture_bank(machine, 0, "bank5", machine.region("user5")->base());
+
+ state->m_sharc_dataram = auto_alloc_array(machine, UINT32, 0x100000/4);
+ state->m_led_reg0 = state->m_led_reg1 = 0x7f;
+
+ lanc2_init(machine);
+}
+
+
+/*****************************************************************************/
+
+ROM_START(racingj)
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD16_WORD_SWAP("676nc01.bin", 0x000000, 0x200000, CRC(690346b5) SHA1(157ab6788382ef4f5a8772f08819f54d0856fcc8) )
+
+ ROM_REGION32_BE(0x800000, "user2", 0) /* Data roms */
+ ROM_LOAD32_WORD_SWAP("676a04.bin", 0x000000, 0x200000, CRC(d7808cb6) SHA1(0668fae5bb94cc120fe196d4b18200f7b512317f) )
+ ROM_LOAD32_WORD_SWAP("676a05.bin", 0x000002, 0x200000, CRC(fb4de1ad) SHA1(f6aa4eb1b5d22901a2aaf899ed3237a9dfdc55b5) )
+
+ ROM_REGION32_BE(0x800000, "user5", 0) /* CG Board texture roms */
+ ROM_LOAD32_WORD_SWAP( "676a13.8x", 0x000000, 0x400000, CRC(29077763) SHA1(ee087ca0d41966ca0fd10727055bb1dcd05a0873) )
+ ROM_LOAD32_WORD_SWAP( "676a14.16x", 0x000002, 0x400000, CRC(50a7e3c0) SHA1(7468a66111a3ddf7c043cd400fa175cae5f65632) )
+
+ ROM_REGION(0x80000, "audiocpu", 0) /* 68k program roms */
+ ROM_LOAD16_WORD_SWAP( "676gna08.7s", 0x000000, 0x080000, CRC(8973f6f2) SHA1(f5648a7e0205f7e979ccacbb52936809ce14a184) )
+
+ ROM_REGION(0x1000000, "rfsnd", 0) /* other roms (textures?) */
+ ROM_LOAD( "676a09.16p", 0x000000, 0x400000, CRC(f85c8dc6) SHA1(8b302c80be309b5cc68b75945fcd7b87a56a4c9b) )
+ ROM_LOAD( "676a10.14p", 0x400000, 0x400000, CRC(7b5b7828) SHA1(aec224d62e4b1e8fdb929d7947ce70d84ba676cf) )
+
+ ROM_REGION(0x2000, "m48t58",0)
+ ROM_LOAD( "m48t58y-70pc1", 0x000000, 0x002000, CRC(47e1628c) SHA1(7c42d06ae2f2cd24d083890f333552cbf4f1d3c9) )
+ROM_END
+
+ROM_START(racingj2j)
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD16_WORD_SWAP("888a01.27p", 0x000000, 0x200000, CRC(d077890a) SHA1(08b252324cf46fbcdb95e8f9312287920cd87c5d) )
+
+ ROM_REGION32_BE(0x800000, "user2", 0) /* Data roms */
+ ROM_LOAD32_WORD_SWAP( "676a04.bin", 0x000000, 0x200000, CRC(d7808cb6) SHA1(0668fae5bb94cc120fe196d4b18200f7b512317f) )
+ ROM_LOAD32_WORD_SWAP( "676a05.bin", 0x000002, 0x200000, CRC(fb4de1ad) SHA1(f6aa4eb1b5d22901a2aaf899ed3237a9dfdc55b5) )
+ ROM_LOAD32_WORD_SWAP( "888a06.12t", 0x400000, 0x200000, CRC(00cbec4d) SHA1(1ce7807d86e90edbf4eecba462a27c725f5ad862) )
+
+ ROM_REGION32_BE(0x800000, "user5", 0) /* CG Board Texture roms */
+ ROM_LOAD32_WORD_SWAP( "888a13.8x", 0x000000, 0x400000, CRC(2292f530) SHA1(0f4d1332708fd5366a065e0a928cc9610558b42d) )
+ ROM_LOAD32_WORD_SWAP( "888a14.16x", 0x000002, 0x400000, CRC(6a834a26) SHA1(d1fbd7ae6afd05f0edac4efde12a5a45aa2bc7df) )
+
+ ROM_REGION(0x80000, "audiocpu", 0) /* 68k program roms */
+ ROM_LOAD16_WORD_SWAP( "888a08.7s", 0x000000, 0x080000, CRC(55fbea65) SHA1(ad953f758181731efccadcabc4326e6634c359e8) )
+
+ ROM_REGION(0x1000000, "rfsnd", 0) /* PCM sample roms */
+ ROM_LOAD( "888a09.16p", 0x000000, 0x400000, CRC(11e2fed2) SHA1(24b8a367b59fedb62c56f066342f2fa87b135fc5) )
+ ROM_LOAD( "888a10.14p", 0x400000, 0x400000, CRC(328ce610) SHA1(dbbc779a1890c53298c0db129d496df048929496) )
+
+ ROM_REGION(0x2000, "m48t58",0)
+ ROM_LOAD( "m48t58y-70pc1", 0x000000, 0x002000, CRC(f691f5ab) SHA1(e81f652c5caa2caa8bd1c6d6db488d849bda058e) )
+ROM_END
+
+ROM_START(racingj2)
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD16_WORD_SWAP("888a01.27p", 0x000000, 0x200000, CRC(d077890a) SHA1(08b252324cf46fbcdb95e8f9312287920cd87c5d) )
+
+ ROM_REGION32_BE(0x800000, "user2", 0) /* Data roms */
+ ROM_LOAD32_WORD_SWAP( "676a04.bin", 0x000000, 0x200000, CRC(d7808cb6) SHA1(0668fae5bb94cc120fe196d4b18200f7b512317f) )
+ ROM_LOAD32_WORD_SWAP( "676a05.bin", 0x000002, 0x200000, CRC(fb4de1ad) SHA1(f6aa4eb1b5d22901a2aaf899ed3237a9dfdc55b5) )
+ ROM_LOAD32_WORD_SWAP( "888a06.12t", 0x400000, 0x200000, CRC(00cbec4d) SHA1(1ce7807d86e90edbf4eecba462a27c725f5ad862) )
+
+ ROM_REGION32_BE(0x800000, "user5", 0) /* CG Board Texture roms */
+ ROM_LOAD32_WORD_SWAP( "888a13.8x", 0x000000, 0x400000, CRC(2292f530) SHA1(0f4d1332708fd5366a065e0a928cc9610558b42d) )
+ ROM_LOAD32_WORD_SWAP( "888a14.16x", 0x000002, 0x400000, CRC(6a834a26) SHA1(d1fbd7ae6afd05f0edac4efde12a5a45aa2bc7df) )
+
+ ROM_REGION(0x80000, "audiocpu", 0) /* 68k program roms */
+ ROM_LOAD16_WORD_SWAP( "888a08.7s", 0x000000, 0x080000, CRC(55fbea65) SHA1(ad953f758181731efccadcabc4326e6634c359e8) )
+
+ ROM_REGION(0x1000000, "rfsnd", 0) /* PCM sample roms */
+ ROM_LOAD( "888a09.16p", 0x000000, 0x400000, CRC(11e2fed2) SHA1(24b8a367b59fedb62c56f066342f2fa87b135fc5) )
+ ROM_LOAD( "888a10.14p", 0x400000, 0x400000, CRC(328ce610) SHA1(dbbc779a1890c53298c0db129d496df048929496) )
+
+ ROM_REGION(0x2000, "m48t58",0)
+ ROM_LOAD( "m48t58y-70pc1.35d", 0x000000, 0x002000, CRC(1aa43a1f) SHA1(814b691b8a358bf1545a13d595d17070e612e9a4) )
+ROM_END
+
+ROM_START(thrilld)
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD16_WORD_SWAP("713be01.27p", 0x000000, 0x200000, CRC(d84a7723) SHA1(f4e9e08591b7e5e8419266dbe744d56a185384ed) )
+
+ ROM_REGION32_BE(0x800000, "user2", 0) /* Data roms */
+ ROM_LOAD32_WORD_SWAP("713a04.16t", 0x000000, 0x200000, CRC(c994aaa8) SHA1(d82b9930a11e5384ad583684a27c95beec03cd5a) )
+ ROM_LOAD32_WORD_SWAP("713a05.14t", 0x000002, 0x200000, CRC(6f1e6802) SHA1(91f8a170327e9b4ee6a64aee0c106b981a317e69) )
+
+ ROM_REGION32_BE(0x800000, "user5", 0) /* CG Board Texture roms */
+ ROM_LOAD32_WORD_SWAP( "713a13.8x", 0x000000, 0x400000, CRC(b795c66b) SHA1(6e50de0d5cc444ffaa0fec7ada8c07f643374bb2) )
+ ROM_LOAD32_WORD_SWAP( "713a14.16x", 0x000002, 0x400000, CRC(5275a629) SHA1(16fadef06975f0f3625cac8f84e2e77ed7d75e15) )
+
+ ROM_REGION(0x80000, "audiocpu", 0) /* 68k program roms */
+ ROM_LOAD16_WORD_SWAP( "713a08.7s", 0x000000, 0x080000, CRC(6a72a825) SHA1(abeac99c5343efacabcb0cdff6d34f9f967024db) )
+
+ ROM_REGION(0x1000000, "rfsnd", 0) /* PCM sample roms */
+ ROM_LOAD( "713a09.16p", 0x000000, 0x400000, CRC(058f250a) SHA1(63b8e60004ec49009633e86b4992c00083def9a8) )
+ ROM_LOAD( "713a10.14p", 0x400000, 0x400000, CRC(27f9833e) SHA1(1540f00d2571ecb81b914c553682b67fca94bbbd) )
+
+ ROM_REGION(0x2000, "m48t58",0)
+ ROM_LOAD( "m48t58y-70pc1", 0x000000, 0x002000, CRC(5d8fbcb2) SHA1(74ad91544d2a200cf599a565005476623075e7d6) )
+ROM_END
+
+ROM_START(thrilldb)
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD16_WORD_SWAP("713bb01.27p", 0x000000, 0x200000, CRC(535fe4e8) SHA1(acd8194a4dafce289dbdfd874f0b799f25aeb73f) )
+
+ ROM_REGION32_BE(0x800000, "user2", 0) /* Data roms */
+ ROM_LOAD32_WORD_SWAP("713a04.16t", 0x000000, 0x200000, CRC(c994aaa8) SHA1(d82b9930a11e5384ad583684a27c95beec03cd5a) )
+ ROM_LOAD32_WORD_SWAP("713a05.14t", 0x000002, 0x200000, CRC(6f1e6802) SHA1(91f8a170327e9b4ee6a64aee0c106b981a317e69) )
+
+ ROM_REGION32_BE(0x800000, "user5", 0) /* CG Board Texture roms */
+ ROM_LOAD32_WORD_SWAP( "713a13.8x", 0x000000, 0x400000, CRC(b795c66b) SHA1(6e50de0d5cc444ffaa0fec7ada8c07f643374bb2) )
+ ROM_LOAD32_WORD_SWAP( "713a14.16x", 0x000002, 0x400000, CRC(5275a629) SHA1(16fadef06975f0f3625cac8f84e2e77ed7d75e15) )
+
+ ROM_REGION(0x80000, "audiocpu", 0) /* 68k program roms */
+ ROM_LOAD16_WORD_SWAP( "713a08.7s", 0x000000, 0x080000, CRC(6a72a825) SHA1(abeac99c5343efacabcb0cdff6d34f9f967024db) )
+
+ ROM_REGION(0x1000000, "rfsnd", 0) /* PCM sample roms */
+ ROM_LOAD( "713a09.16p", 0x000000, 0x400000, CRC(058f250a) SHA1(63b8e60004ec49009633e86b4992c00083def9a8) )
+ ROM_LOAD( "713a10.14p", 0x400000, 0x400000, CRC(27f9833e) SHA1(1540f00d2571ecb81b914c553682b67fca94bbbd) )
+
+ ROM_REGION(0x2000, "m48t58",0)
+ ROM_LOAD( "m48t58y-70pc1", 0x000000, 0x002000, CRC(5d8fbcb2) SHA1(74ad91544d2a200cf599a565005476623075e7d6) )
+ROM_END
+
+ROM_START(thrilldae)
+ ROM_REGION32_BE(0x200000, "user1", 0) /* PowerPC program roms */
+ ROM_LOAD16_WORD_SWAP("713bb01.27p", 0x000000, 0x200000, CRC(535fe4e8) SHA1(acd8194a4dafce289dbdfd874f0b799f25aeb73f) )
+
+ ROM_REGION32_BE(0x800000, "user2", 0) /* Data roms */
+ ROM_LOAD32_WORD_SWAP("713a04.16t", 0x000000, 0x200000, CRC(c994aaa8) SHA1(d82b9930a11e5384ad583684a27c95beec03cd5a) )
+ ROM_LOAD32_WORD_SWAP("713a05.14t", 0x000002, 0x200000, CRC(6f1e6802) SHA1(91f8a170327e9b4ee6a64aee0c106b981a317e69) )
+
+ ROM_REGION32_BE(0x800000, "user5", 0) /* CG Board Texture roms */
+ ROM_LOAD32_WORD_SWAP( "713a13.8x", 0x000000, 0x400000, CRC(b795c66b) SHA1(6e50de0d5cc444ffaa0fec7ada8c07f643374bb2) )
+ ROM_LOAD32_WORD_SWAP( "713a14.16x", 0x000002, 0x400000, CRC(5275a629) SHA1(16fadef06975f0f3625cac8f84e2e77ed7d75e15) )
+
+ ROM_REGION(0x80000, "audiocpu", 0) /* 68k program roms */
+ ROM_LOAD16_WORD_SWAP( "713a08.7s", 0x000000, 0x080000, CRC(6a72a825) SHA1(abeac99c5343efacabcb0cdff6d34f9f967024db) )
+
+ ROM_REGION(0x1000000, "rfsnd", 0) /* PCM sample roms */
+ ROM_LOAD( "713a09.16p", 0x000000, 0x400000, CRC(058f250a) SHA1(63b8e60004ec49009633e86b4992c00083def9a8) )
+ ROM_LOAD( "713a10.14p", 0x400000, 0x400000, CRC(27f9833e) SHA1(1540f00d2571ecb81b914c553682b67fca94bbbd) )
+
+ ROM_REGION(0x2000, "m48t58",0)
+ ROM_LOAD( "m48t58y-70pc1", 0x000000, 0x002000, CRC(056ea8fa) SHA1(23574e0c1d011dab8644f3d98763d4a2d11a05b3) )
+ROM_END
+
+/*****************************************************************************/
+
+GAME( 1998, racingj, 0, nwktr, nwktr, nwktr, ROT0, "Konami", "Racing Jam (JAC)", GAME_NOT_WORKING | GAME_NO_SOUND )
+GAME( 1999, racingj2, racingj, nwktr, nwktr, nwktr, ROT0, "Konami", "Racing Jam: Chapter 2 (EAE)", GAME_NOT_WORKING | GAME_NO_SOUND )
+GAME( 1999, racingj2j, racingj, nwktr, nwktr, nwktr, ROT0, "Konami", "Racing Jam: Chapter 2 (JAE)", GAME_NOT_WORKING | GAME_NO_SOUND )
+GAME( 1998, thrilld, 0, thrilld, nwktr, nwktr, ROT0, "Konami", "Thrill Drive (JAE)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND )
+GAME( 1998, thrilldb, thrilld, thrilld, nwktr, nwktr, ROT0, "Konami", "Thrill Drive (JAB)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND )
+GAME( 1998, thrilldae, thrilld, thrilld, nwktr, nwktr, ROT0, "Konami", "Thrill Drive (EAA)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND )
+