diff options
Diffstat (limited to 'trunk/src/mame/drivers/gticlub.c')
-rw-r--r-- | trunk/src/mame/drivers/gticlub.c | 1184 |
1 files changed, 1184 insertions, 0 deletions
diff --git a/trunk/src/mame/drivers/gticlub.c b/trunk/src/mame/drivers/gticlub.c new file mode 100644 index 00000000000..bb599ea0808 --- /dev/null +++ b/trunk/src/mame/drivers/gticlub.c @@ -0,0 +1,1184 @@ +/* Konami GTI Club System + + Driver by Ville Linde + + + + Hardware overview: + + GN672 CPU board: + ---------------- + IBM PowerPC 403GA at 32MHz (main CPU) + Motorola MC68EC000 at 16MHz (sound CPU) + Konami K056800 (MIRAC), sound system interface + Konami K056230 (LANC), LAN interface + Ricoh RF5c400 sound chip + + GN678 GFX board: + ---------------- + Analog Devices ADSP-21062 SHARC DSP at 36MHz + Konami K001604 (2D tilemaps + 2x ROZ) + 2x KS10071 (custom 3D pixel unit) + 2x KS10081 (custom 3D texel unit) + + + + Hardware configurations: + + Game | ID | CPU PCB | CG Board(s) | notes + ----------------------------------------------------------------------------------------------- + GTI Club | GX688 | GN672(A) | GN678(B) | + Operation Thunder Hurricane | GX792 | GN672(A) | GN678(B) | extra board for gun controls(?) + Solar Assault | GX680 | GN672(A) | GN678(B) | + + Hang Pilot | GN685 | ?? | 2x ?? | 3dfx-based CG boards + + +Konami 'GTI Club' Hardware +Konami, 1996-1998 + +Known games on this hardware include.... + +Game (C) Year +----------------------------------------- +GTI Club Konami 1996 +Jet Wave / Wave Shark Konami 1996 (video board only) +Operation Thunder Hurricane Konami 1997 +Solar Assault Konami 1997 +Solar Assault : Revised Konami 1998 + + +PCB Layouts +----------- + +Top Board + +GN672 PWB(A)3020088 +Konami 1996 +|--------------------------------------------------------------| +| DRAM1M MASKROM.2S | +|CN13 NJM5532 PAL(002616) | +| SM5877 MASKROM.5S | +| AN7395S NJM5532 | +| RF5C400 MASKROM.7S | +| | +| 056800 SRAM256K MASKROM.9S | +| 058232 SRAM256K | +| RESET_SW EPROM.13K MASKROM.12U| +|5 | +|6 MASKROM.14U| +|W TEST_SW 68EC000FN16 | +|A EPROM.19R EPROM.19U| +|Y EPROM.19R EPROM.19U| +| 33.868MHz | +| PAL(002248) |---------| | +| PAL(002249) |PPC403GA | | +| 93C56 | | | +|LED PAL(002247) DRAM4MX16 | | | +| |---------| | +| 056230 DRAM4MX16 | +|SRAM64K | +| 64MHz MACH111 | +|CN4 | +| PAL(056787A) | +|CN5 | +|DSW(4) CN12 | +|--------------------------------------------------------------| +Notes: + DRAM1M - OKI M514256 1Mx4 DRAM (SOJ26/20) + SRAM64K - 8kx8 SRAM (DIP28) + SRAM256K - Fujitsu 84256 32kx8 SRAM (DIP28) + DRAM4MX16 - Hitachi HM514260 4Mx16 DRAM (SOJ42) + RF5C400 - Ricoh RF5C400 PCM 32Ch, 44.1 kHz Stereo, 3D Effect Spatializer, clock input 16.934MHz (33.868/2) + 056800 - Konami Custom (QFP80) + 056230 - Konami Custom (QFP80) + 058232 - Konami Custom Ceramic Package (SIL14, D/A filter?) + MACH111 - AMD MACH111 PLCC44 CPLD (stamped '002246') + 68EC000 - Motorola MC68EC000, running at 16.0MHz (64/4) + 93C56 - EEPROM (DIP8) + PPC403GA - IBM PowerPC 403GA CPU, clock input 32.0MHz (64/2) (QFP160) + SM5877AM - Nippon Precision Circuits 3rd Order 2-Channel D/A Converter (SOIC24) + NJM5532AN - Dual Low-Noise High-Speed Audio OP Amp (DIP8) + AN7395S - Panasonic AN7395S Spatializer Audio Processor IC for 3D surround (SOIC20) + CN4/5 - Network connectors + CN12 - DIN96 connector joining to lower PCB + CN13 - Audio OUT connector + LED - Alpha-numeric 7-segment LED + +ROM Usage +--------- + |--------------------------------------- ROM Locations --------------------------------------| +Game 13K 2S 5S 7S 9S 12U 14U 19R 19U 21R 21U +-------------------------------------------------------------------------------------------------------------------------- +GTI Club 688A07 688A12 688A11 688A10 688A09 688A06 688A05 688AAA04 688AAA02 688AAA03 688AAA01 +Jet Wave - see note - +Hang Pilot 685A07 - - 685A10 685A09 685A06 685A05 685JAB04 685JAB02 685JAB03 685JAB01 +Operation Thunder Hurricane 680A07 680A12 680A11 680A10 680A09 680A06 680A05 680UAA04 680UAA02 680UAA03 680UAA01 +Solar Assault 792A07 792A12 792A11 792A10 792A09 792A06 792A05 792UAA04 792UAA02 792UAA03 792UAA01 +Solar Assault : Revised - N/A - + +Note : Jet Wave uses the lower board (GN678) from GTI Club, but it uses a different top board (ZR107 PWB(A)300769A) +Check zr107.c for details on the top board. + +Operation Thunder Hurricane uses an additional top board for sound, network and analog +control functions... + +GN680 PWB(E)403381B +|------------------------------------------| +|CN11 CN12 CN8 CN9 CN10 DSW(4)| +| NRPS11 NRPS11 | +| | +| LM1881 LM1881 | +| | +|LED(x4) | +| | +| 68EC000FN16 8464 | +| RESET_SW 8464 | +|32MHz 680C22.20K| +|8464 PAL(002962) | +|CN4 056230 PAL(002961) | +| PAL(056787A) PAL(002960) | +|CN5 | +|------------------------------------------| +Notes: + 68000 @ 16MHz (32/2) + CN11/12 - Power connectors + CN8/9 - 6-pin analog control connectors + CN10 - 4-pin sound output connector + NRPS11 - Idec NRPS11 PC Board circuit protector + LM1881 - Video sync separator (DIP8) + + +Bottom Board + +GN678 PWB(B)302009A +Konami 1996 +|-------------------------------------------------------------------------------------------| +|CN4 MASKROM.2D |--------| SDR4M16 SDR4M16 |--------| SDR4M16 SDR4M16 | +| |KS10081 | |KS10081 | | +| MASKROM.4D | | | | SDR4M16| +| |--------| |----------| |--------| |----------| | +|CN2 MASKROM.6D | KS10071 | SDR4M16 | KS10071 | | +| | | | | | +| MASKROM.9D | | SDR4M16 | | | +| |----------| |----------| | +| MASKROM.11D SDR4M16| +| SDR4M16 SDR4M16 | +| MASKROM.13D | +| MC88916 | +| MASKROM.16D PAL(002304) | +| MC44200 PAL(002303) | +| MASKROM.18D | +| | +| 36MHz | +| AM7203 AM7203 AM7203 AM7203 |-------------| | +| 256KSRAM 256KSRAM |ANALOG | | +| |DEVICES | | +| PAL(002305) 64KSRAM 64KSRAM 256KSRAM 256KSRAM |ADSP-21062 | | +| |SHARC | | +| |--------| MACH110 |KS-160X | | +|1MSRAM |KONAMI | |-------------| | +|1MSRAM |001604 | | +|1MSRAM | | 1MSRAM 1MSRAM | +|1MSRAM |--------| | +|1MSRAM 256KSRAM 1MSRAM 1MSRAM | +|1MSRAM 256KSRAM 256KSRAM CN1 | +|-------------------------------------------------------------------------------------------| +Notes: + SDR4M16 - Fujitsu 81141622-015 4M SDRAM (TSOP50) + 1MSRAM - Sharp LH521007 128kx8 SRAM (SOJ32) + 256KSRAM - Cypress CY7C199 32kx8 SRAM (SOJ28) + 64KSRAM - Cypress CY7C185 8kx8 SRAM (DIP28) + KS10071 - Konami Custom video chip + KS10081 - Konami Custom video chip + 001604 - Konami Custom (QFP208) + MC44200FT - Motorola MC44200FT 3 Channel Video D/A Converter (QFP44) + MACH110 - AMD MACH110 or MACH111 PLCC44 CPLD (Jet Wave stamped '002302') + (GTI Club stamped '003161') + (Thund.Hurr. stamped '003161') + AM7203 - AMD AM7203 FIFO (PLCC32) + MC88916 - Motorola MC88916 Low Skew CMOS PLL Clock Driver + CN1 - 96 Pin joining connector to upper PCB + CN2 - 8-Pin 24kHz RGB OUT + CN4 - 6-Pin Power Connector + +ROM Usage +--------- + |---------------------- ROM Locations -----------------------| +Game 2D 4D 6D 9D 11D 13D 16D 18D +------------------------------------------------------------------------------------------ +GTI Club - 688A16 - 688A15 - 688A14 - 688A13 +Jet Wave - 678A16 - 678A15 - 678A14 - 678A13 +Operation Thunder Hurricane - 680A16 - 680A15 - 680A14 - 680A13 +Solar Assault - 792A16 - 792A15 - 792A14 - 792A13 +Solar Assault : Revised - N/A - + +Hang Pilot (uses an unknown but similar video board) 12W 4W + - - - - - 678A14 - 678A13 + +*/ + +#include "emu.h" +#include "cpu/m68000/m68000.h" +#include "machine/eeprom.h" +#include "cpu/powerpc/ppc.h" +#include "cpu/sharc/sharc.h" +#include "machine/konppc.h" +#include "machine/adc1038.h" +#include "machine/k056230.h" +#include "machine/k033906.h" +#include "sound/rf5c400.h" +#include "sound/k056800.h" +#include "video/voodoo.h" +#include "video/gticlub.h" +#include "video/konicdev.h" + +#include "rendlay.h" + +class gticlub_state : public driver_device +{ +public: + gticlub_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) { } + + UINT32 *m_work_ram; + UINT32 *m_sharc_dataram_0; + UINT32 *m_sharc_dataram_1; +}; + + +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, param ? ASSERT_LINE : CLEAR_LINE); +} + +static void voodoo_vblank_1(device_t *device, int param) +{ + cputag_set_input_line(device->machine(), "maincpu", INPUT_LINE_IRQ1, param ? ASSERT_LINE : CLEAR_LINE); +} + +static READ32_HANDLER( gticlub_k001604_tile_r ) +{ + device_t *k001604 = space->machine().device(get_cgboard_id() ? "k001604_2" : "k001604_1"); + return k001604_tile_r(k001604, offset, mem_mask); +} + +static WRITE32_HANDLER( gticlub_k001604_tile_w ) +{ + device_t *k001604 = space->machine().device(get_cgboard_id() ? "k001604_2" : "k001604_1"); + k001604_tile_w(k001604, offset, data, mem_mask); +} + + +static READ32_HANDLER( gticlub_k001604_char_r ) +{ + device_t *k001604 = space->machine().device(get_cgboard_id() ? "k001604_2" : "k001604_1"); + return k001604_char_r(k001604, offset, mem_mask); +} + +static WRITE32_HANDLER( gticlub_k001604_char_w ) +{ + device_t *k001604 = space->machine().device(get_cgboard_id() ? "k001604_2" : "k001604_1"); + k001604_char_w(k001604, offset, data, mem_mask); +} + +static READ32_HANDLER( gticlub_k001604_reg_r ) +{ + device_t *k001604 = space->machine().device(get_cgboard_id() ? "k001604_2" : "k001604_1"); + return k001604_reg_r(k001604, offset, mem_mask); +} + +static WRITE32_HANDLER( gticlub_k001604_reg_w ) +{ + device_t *k001604 = space->machine().device(get_cgboard_id() ? "k001604_2" : "k001604_1"); + k001604_reg_w(k001604, offset, data, mem_mask); +} + + +/******************************************************************/ + +/* 93C56 EEPROM */ +static const eeprom_interface eeprom_intf = +{ + 8, /* address bits */ + 16, /* data bits */ + "*110", /* read command */ + "*101", /* write command */ + "*111", /* erase command */ + "*10000xxxxxx", /* lock command */ + "*10011xxxxxx", /* unlock command */ + 1, /* enable_multi_read */ + 0 /* reset_delay */ +}; + +static READ8_HANDLER( sysreg_r ) +{ + static const char *const portnames[] = { "IN0", "IN1", "IN2", "IN3" }; + device_t *adc1038 = space->machine().device("adc1038"); + eeprom_device *eeprom = space->machine().device<eeprom_device>("eeprom"); + + switch (offset) + { + case 0: + case 1: + case 3: + return input_port_read(space->machine(), portnames[offset]); + + case 2: + return adc1038_sars_read(adc1038) << 7; + + case 4: + { + // 7 0 + // |?????ae?| + // + // a = ADC readout + // e = EEPROM data out + + UINT32 eeprom_bit = (eeprom->read_bit() << 1); + UINT32 adc_bit = (adc1038_do_read(adc1038) << 2); + return (eeprom_bit | adc_bit); + } + + default: + mame_printf_debug("sysreg_r %d\n", offset); + break; + } + return 0; +} + +static WRITE8_HANDLER( sysreg_w ) +{ + device_t *adc1038 = space->machine().device("adc1038"); + eeprom_device *eeprom = space->machine().device<eeprom_device>("eeprom"); + + switch (offset) + { + case 0: + case 1: + gticlub_led_setreg(offset, data); + break; + + case 3: + eeprom->write_bit((data & 0x01) ? 1 : 0); + eeprom->set_clock_line((data & 0x02) ? ASSERT_LINE : CLEAR_LINE); + eeprom->set_cs_line((data & 0x04) ? CLEAR_LINE : ASSERT_LINE); + break; + + case 4: + 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); + + adc1038_di_write(adc1038, (data >> 0) & 1); + adc1038_clk_write(adc1038, (data >> 1) & 1); + + set_cgboard_id((data >> 4) & 0x3); + break; + } +} + +/******************************************************************/ + +static MACHINE_START( gticlub ) +{ + gticlub_state *state = machine.driver_data<gticlub_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, 0x000fffff, FALSE, state->m_work_ram); +} + +static ADDRESS_MAP_START( gticlub_map, AS_PROGRAM, 32 ) + AM_RANGE(0x00000000, 0x000fffff) AM_RAM AM_BASE_MEMBER(gticlub_state, m_work_ram) /* Work RAM */ + AM_RANGE(0x74000000, 0x740000ff) AM_READWRITE(gticlub_k001604_reg_r, gticlub_k001604_reg_w) + AM_RANGE(0x74010000, 0x7401ffff) AM_RAM_WRITE(paletteram32_w) AM_BASE_GENERIC(paletteram) + AM_RANGE(0x74020000, 0x7403ffff) AM_READWRITE(gticlub_k001604_tile_r, gticlub_k001604_tile_w) + AM_RANGE(0x74040000, 0x7407ffff) AM_READWRITE(gticlub_k001604_char_r, gticlub_k001604_char_w) + AM_RANGE(0x78000000, 0x7800ffff) AM_READWRITE(cgboard_dsp_shared_r_ppc, cgboard_dsp_shared_w_ppc) + AM_RANGE(0x78040000, 0x7804000f) AM_READWRITE(K001006_0_r, K001006_0_w) + AM_RANGE(0x78080000, 0x7808000f) AM_READWRITE(K001006_1_r, K001006_1_w) + AM_RANGE(0x780c0000, 0x780c0003) AM_READWRITE(cgboard_dsp_comm_r_ppc, cgboard_dsp_comm_w_ppc) + AM_RANGE(0x7e000000, 0x7e003fff) AM_READWRITE8(sysreg_r, sysreg_w, 0xffffffff) + AM_RANGE(0x7e008000, 0x7e009fff) AM_DEVREADWRITE8("k056230", k056230_r, k056230_w, 0xffffffff) + AM_RANGE(0x7e00a000, 0x7e00bfff) AM_DEVREADWRITE("k056230", lanc_ram_r, lanc_ram_w) + AM_RANGE(0x7e00c000, 0x7e00c007) AM_DEVWRITE("k056800", k056800_host_w) + AM_RANGE(0x7e00c000, 0x7e00c007) AM_DEVREAD("k056800", k056800_host_r) // Hang Pilot + AM_RANGE(0x7e00c008, 0x7e00c00f) AM_DEVREAD("k056800", k056800_host_r) + AM_RANGE(0x7f000000, 0x7f3fffff) AM_ROM AM_REGION("user2", 0) /* Data ROM */ + AM_RANGE(0x7f800000, 0x7f9fffff) 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(0x200000, 0x20ffff) AM_RAM + AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE("k056800", k056800_sound_r, k056800_sound_w) + AM_RANGE(0x400000, 0x400fff) AM_DEVREADWRITE("rfsnd", rf5c400_r, rf5c400_w) /* Ricoh RF5C400 */ + AM_RANGE(0x580000, 0x580001) AM_WRITENOP + AM_RANGE(0x600000, 0x600001) AM_WRITENOP +ADDRESS_MAP_END + +/*****************************************************************************/ + +static READ32_HANDLER( dsp_dataram0_r ) +{ + gticlub_state *state = space->machine().driver_data<gticlub_state>(); + return state->m_sharc_dataram_0[offset] & 0xffff; +} + +static WRITE32_HANDLER( dsp_dataram0_w ) +{ + gticlub_state *state = space->machine().driver_data<gticlub_state>(); + state->m_sharc_dataram_0[offset] = data; +} + +static READ32_HANDLER( dsp_dataram1_r ) +{ + gticlub_state *state = space->machine().driver_data<gticlub_state>(); + return state->m_sharc_dataram_1[offset] & 0xffff; +} + +static WRITE32_HANDLER( dsp_dataram1_w ) +{ + gticlub_state *state = space->machine().driver_data<gticlub_state>(); + state->m_sharc_dataram_1[offset] = data; +} + +static ADDRESS_MAP_START( sharc_map, AS_DATA, 32 ) + AM_RANGE(0x400000, 0x41ffff) AM_READWRITE(cgboard_0_shared_sharc_r, cgboard_0_shared_sharc_w) + AM_RANGE(0x500000, 0x5fffff) AM_READWRITE(dsp_dataram0_r, dsp_dataram0_w) + AM_RANGE(0x600000, 0x6fffff) AM_READWRITE(K001005_r, K001005_w) + AM_RANGE(0x700000, 0x7000ff) AM_READWRITE(cgboard_0_comm_sharc_r, cgboard_0_comm_sharc_w) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( hangplt_sharc0_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_dataram0_r, dsp_dataram0_w) + AM_RANGE(0x1400000, 0x14fffff) AM_RAM + AM_RANGE(0x2400000, 0x27fffff) AM_DEVREADWRITE("voodoo0", nwk_voodoo_0_r, voodoo_w) + AM_RANGE(0x3400000, 0x34000ff) AM_READWRITE(cgboard_0_comm_sharc_r, cgboard_0_comm_sharc_w) + AM_RANGE(0x3401000, 0x34fffff) AM_DEVWRITE("voodoo0", nwk_fifo_0_w) + AM_RANGE(0x3500000, 0x3507fff) AM_READWRITE(K033906_0_r, K033906_0_w) + AM_RANGE(0x3600000, 0x37fffff) AM_ROMBANK("bank5") +ADDRESS_MAP_END + +static ADDRESS_MAP_START( hangplt_sharc1_map, AS_DATA, 32 ) + AM_RANGE(0x0400000, 0x041ffff) AM_READWRITE(cgboard_1_shared_sharc_r, cgboard_1_shared_sharc_w) + AM_RANGE(0x0500000, 0x05fffff) AM_READWRITE(dsp_dataram1_r, dsp_dataram1_w) + AM_RANGE(0x1400000, 0x14fffff) AM_RAM + AM_RANGE(0x2400000, 0x27fffff) AM_DEVREADWRITE("voodoo1", nwk_voodoo_1_r, voodoo_w) + AM_RANGE(0x3400000, 0x34000ff) AM_READWRITE(cgboard_1_comm_sharc_r, cgboard_1_comm_sharc_w) + AM_RANGE(0x3401000, 0x34fffff) AM_DEVWRITE("voodoo1", nwk_fifo_1_w) + AM_RANGE(0x3500000, 0x3507fff) AM_READWRITE(K033906_1_r, K033906_1_w) + AM_RANGE(0x3600000, 0x37fffff) AM_ROMBANK("bank6") +ADDRESS_MAP_END + +/*****************************************************************************/ + +static INPUT_PORTS_START( gticlub ) + PORT_START("IN0") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) // View switch + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) // Shift Down + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) // Shift Up + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON4 ) // AT/MT switch + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Service Button") PORT_CODE(KEYCODE_8) + PORT_BIT( 0x0b, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN1") + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN2") + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN3") + PORT_SERVICE_NO_TOGGLE( 0x80, IP_ACTIVE_LOW ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_DIPNAME( 0x03, 0x03, "Network ID" ) + PORT_DIPSETTING( 0x03, "1" ) + PORT_DIPSETTING( 0x02, "2" ) + PORT_DIPSETTING( 0x01, "3" ) + PORT_DIPSETTING( 0x00, "4" ) + PORT_DIPNAME( 0x04, 0x04, "DIP3" ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, "DIP4" ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("AN0") /* mask default type sens delta min max */ + PORT_BIT( 0x3ff, 0x200, IPT_PADDLE ) PORT_MINMAX(0x000,0x3ff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5) + + PORT_START("AN1") + PORT_BIT( 0x3ff, 0x000, IPT_PEDAL ) PORT_MINMAX(0x000,0x3ff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5) + + PORT_START("AN2") + PORT_BIT( 0x3ff, 0x000, IPT_PEDAL2 ) PORT_MINMAX(0x000,0x3ff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5) + + PORT_START("AN3") + PORT_BIT( 0x3ff, 0x000, IPT_PEDAL3 ) PORT_MINMAX(0x000,0x3ff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5) + +INPUT_PORTS_END + +static INPUT_PORTS_START( slrasslt ) + PORT_START("IN0") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) // View Shift + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) // Trigger + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) // Missile + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) // Power Up + + PORT_START("IN1") + 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_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + + PORT_START("IN2") + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN3") + PORT_SERVICE_NO_TOGGLE( 0x80, IP_ACTIVE_LOW ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Service Button") PORT_CODE(KEYCODE_8) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_DIPNAME( 0x01, 0x01, "DIP1" ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, "DIP2" ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, "DIP3" ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, "DIP4" ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("AN0") + PORT_BIT( 0x3ff, 0x000, IPT_AD_STICK_Y ) PORT_MINMAX(0x000,0x3ff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5) + + PORT_START("AN1") + PORT_BIT( 0x3ff, 0x000, IPT_AD_STICK_X ) PORT_MINMAX(0x000,0x3ff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5) PORT_REVERSE + + PORT_START("AN2") + PORT_BIT( 0x3ff, 0x000, IPT_UNUSED ) + + PORT_START("AN3") + PORT_BIT( 0x3ff, 0x000, IPT_UNUSED ) +INPUT_PORTS_END + +static INPUT_PORTS_START( thunderh ) + PORT_START("IN0") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) 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( 0x80, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + + PORT_START("IN2") + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN3") + PORT_SERVICE_NO_TOGGLE( 0x80, IP_ACTIVE_LOW ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Service Button") PORT_CODE(KEYCODE_8) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_DIPNAME( 0x01, 0x00, "DIP1" ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, "DIP2" ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, "DIP3" ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, "DIP4" ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + +INPUT_PORTS_END + +static INPUT_PORTS_START( hangplt ) + 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( 0x07, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN1") + PORT_BIT( 0x8f, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) // Push limit switch + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) // Pull limit switch + + PORT_START("IN2") + PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN3") + PORT_SERVICE_NO_TOGGLE( 0x80, IP_ACTIVE_LOW ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Service Button") PORT_CODE(KEYCODE_8) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_DIPNAME( 0x08, 0x08, "DIP4" ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, "DIP3" ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, "Disable Test Mode" ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x01, 0x00, "Disable Machine Init" ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("AN0") + PORT_BIT( 0x3ff, 0x000, IPT_UNKNOWN ) + + PORT_START("AN1") + PORT_BIT( 0x3ff, 0x000, IPT_UNKNOWN ) + + PORT_START("AN2") + PORT_BIT( 0x3ff, 0x000, IPT_UNKNOWN ) + + PORT_START("AN3") + PORT_BIT( 0x3ff, 0x000, IPT_UNKNOWN ) +INPUT_PORTS_END + +/* PowerPC interrupts + + IRQ0: Vblank + IRQ2: LANC + DMA0 + +*/ +static INTERRUPT_GEN( gticlub_vblank ) +{ + device_set_input_line(device, INPUT_LINE_IRQ0, ASSERT_LINE); +} + + +static const sharc_config sharc_cfg = +{ + BOOT_MODE_EPROM +}; + + +static TIMER_CALLBACK( irq_off ) +{ + cputag_set_input_line(machine, "audiocpu", param, CLEAR_LINE); +} + +static void sound_irq_callback( running_machine &machine, int irq ) +{ + int line = (irq == 0) ? INPUT_LINE_IRQ1 : INPUT_LINE_IRQ2; + + cputag_set_input_line(machine, "audiocpu", line, ASSERT_LINE); + machine.scheduler().timer_set(attotime::from_usec(1), FUNC(irq_off), line); +} + +static const k056800_interface gticlub_k056800_interface = +{ + sound_irq_callback +}; + + +static int adc1038_input_callback( device_t *device, int input ) +{ + int value = 0; + switch (input) + { + case 0: value = input_port_read(device->machine(), "AN0"); break; + case 1: value = input_port_read(device->machine(), "AN1"); break; + case 2: value = input_port_read(device->machine(), "AN2"); break; + case 3: value = input_port_read(device->machine(), "AN3"); break; + case 4: value = 0x000; break; + case 5: value = 0x000; break; + case 6: value = 0x000; break; + case 7: value = 0x000; break; + } + + return value; +} + +static const adc1038_interface gticlub_adc1038_intf = +{ + 1, + adc1038_input_callback +}; + +static const adc1038_interface thunderh_adc1038_intf = +{ + 0, + adc1038_input_callback +}; + +static const k056230_interface gticlub_k056230_intf = +{ + "maincpu", + 0 +}; + +static const k056230_interface thunderh_k056230_intf = +{ + "maincpu", + 1 +}; + +static const k001604_interface gticlub_k001604_intf = +{ + 1, 2, /* gfx index 1 & 2 */ + 1, 1, /* layer_size, roz_size */ + 0 /* slrasslt hack */ +}; + +static const k001604_interface slrasslt_k001604_intf = +{ + 1, 2, /* gfx index 1 & 2 */ + 0, 0, /* layer_size, roz_size */ + 1 /* slrasslt hack */ +}; + +static const k001604_interface hangplt_k001604_intf_l = +{ + 1, 2, /* gfx index 1 & 2 */ + 0, 1, /* layer_size, roz_size */ + 0 /* slrasslt hack */ +}; + +static const k001604_interface hangplt_k001604_intf_r = +{ + 3, 4, /* gfx index 1 & 2 */ + 0, 1, /* layer_size, roz_size */ + 0 /* slrasslt hack */ +}; + + +static MACHINE_RESET( gticlub ) +{ + cputag_set_input_line(machine, "dsp", INPUT_LINE_RESET, ASSERT_LINE); +} + +static MACHINE_CONFIG_START( gticlub, gticlub_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", PPC403GA, 64000000/2) /* PowerPC 403GA 32MHz */ + MCFG_CPU_PROGRAM_MAP(gticlub_map) + MCFG_CPU_VBLANK_INT("screen", gticlub_vblank) + + 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_EEPROM_ADD("eeprom", eeprom_intf) + + MCFG_MACHINE_START(gticlub) + MCFG_MACHINE_RESET(gticlub) + + MCFG_ADC1038_ADD("adc1038", gticlub_adc1038_intf) + + MCFG_K056230_ADD("k056230", gticlub_k056230_intf) + + /* 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(gticlub) + + MCFG_PALETTE_LENGTH(65536) + + MCFG_VIDEO_START(gticlub) + + MCFG_K001604_ADD("k001604_1", gticlub_k001604_intf) + + MCFG_K056800_ADD("k056800", gticlub_k056800_interface) + + MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + + MCFG_SOUND_ADD("rfsnd", RF5C400, 64000000/4) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( thunderh, gticlub ) + + MCFG_DEVICE_REMOVE("adc1038") + MCFG_ADC1038_ADD("adc1038", thunderh_adc1038_intf) + + MCFG_DEVICE_REMOVE("k056230") + MCFG_K056230_ADD("k056230", thunderh_k056230_intf) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( slrasslt, gticlub ) + + MCFG_DEVICE_REMOVE("adc1038") + MCFG_ADC1038_ADD("adc1038", thunderh_adc1038_intf) + + MCFG_DEVICE_REMOVE("k001604_1") + MCFG_K001604_ADD("k001604_1", slrasslt_k001604_intf) +MACHINE_CONFIG_END + + +static const k033906_interface hangplt_k033906_intf_0 = +{ + "voodoo0" +}; + +static const k033906_interface hangplt_k033906_intf_1 = +{ + "voodoo1" +}; + +static MACHINE_RESET( hangplt ) +{ + cputag_set_input_line(machine, "dsp", INPUT_LINE_RESET, ASSERT_LINE); + cputag_set_input_line(machine, "dsp2", INPUT_LINE_RESET, ASSERT_LINE); +} + +static MACHINE_CONFIG_START( hangplt, gticlub_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", PPC403GA, 64000000/2) /* PowerPC 403GA 32MHz */ + MCFG_CPU_PROGRAM_MAP(gticlub_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(hangplt_sharc0_map) + + MCFG_CPU_ADD("dsp2", ADSP21062, 36000000) + MCFG_CPU_CONFIG(sharc_cfg) + MCFG_CPU_DATA_MAP(hangplt_sharc1_map) + + MCFG_QUANTUM_TIME(attotime::from_hz(6000)) + + MCFG_EEPROM_ADD("eeprom", eeprom_intf) + + MCFG_MACHINE_START(gticlub) + MCFG_MACHINE_RESET(hangplt) + + MCFG_ADC1038_ADD("adc1038", thunderh_adc1038_intf) + MCFG_K056230_ADD("k056230", gticlub_k056230_intf) + + MCFG_3DFX_VOODOO_1_ADD("voodoo0", STD_VOODOO_1_CLOCK, 2, "lscreen") + 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_3DFX_VOODOO_1_ADD("voodoo1", STD_VOODOO_1_CLOCK, 2, "rscreen") + MCFG_3DFX_VOODOO_CPU("dsp2") + MCFG_3DFX_VOODOO_TMU_MEMORY(0, 2) + MCFG_3DFX_VOODOO_TMU_MEMORY(1, 2) + MCFG_3DFX_VOODOO_VBLANK(voodoo_vblank_1) + + MCFG_K033906_ADD("k033906_1", hangplt_k033906_intf_0) + MCFG_K033906_ADD("k033906_2", hangplt_k033906_intf_1) + + /* video hardware */ + MCFG_PALETTE_LENGTH(65536) + + MCFG_SCREEN_ADD("lscreen", RASTER) + MCFG_SCREEN_FORMAT(BITMAP_FORMAT_RGB32) + MCFG_SCREEN_REFRESH_RATE(60) + MCFG_SCREEN_SIZE(512, 384) + MCFG_SCREEN_VISIBLE_AREA(0, 511, 0, 383) + MCFG_SCREEN_UPDATE(hangplt) + + MCFG_SCREEN_ADD("rscreen", RASTER) + MCFG_SCREEN_FORMAT(BITMAP_FORMAT_RGB32) + MCFG_SCREEN_REFRESH_RATE(60) + MCFG_SCREEN_SIZE(512, 384) + MCFG_SCREEN_VISIBLE_AREA(0, 511, 0, 383) + MCFG_SCREEN_UPDATE(hangplt) + + MCFG_K001604_ADD("k001604_1", hangplt_k001604_intf_l) + MCFG_K001604_ADD("k001604_2", hangplt_k001604_intf_r) + + MCFG_K056800_ADD("k056800", gticlub_k056800_interface) + + MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + + MCFG_SOUND_ADD("rfsnd", RF5C400, 64000000/4) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) +MACHINE_CONFIG_END + +/*************************************************************************/ + +ROM_START( gticlub ) /* Euro version EAA */ + ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE("688eaa01.21u", 0x000003, 0x80000, CRC(824944ad) SHA1(a7bb86a2495e0579f5d82808aeed4895be2dbe3b) ) + ROM_LOAD32_BYTE("688eaa02.19u", 0x000002, 0x80000, CRC(88e7bfb9) SHA1(fc0e945291204ee0c82bbd2c81ff241e1565c6ae) ) + ROM_LOAD32_BYTE("688eaa03.21r", 0x000001, 0x80000, CRC(ea1c696b) SHA1(fd778afaa1de3a35b38a67b8e4c9a08fe9cf1b9e) ) + ROM_LOAD32_BYTE("688eaa04.19r", 0x000000, 0x80000, CRC(94fa2334) SHA1(04edf840f841b9713fa93e7ebb6aad2000b738c0) ) + + ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */ + ROM_LOAD32_WORD_SWAP("688a05.14u", 0x000000, 0x200000, CRC(7caa3f80) SHA1(28409dc17c4e010173396fdc069a409fbea0d58d) ) + ROM_LOAD32_WORD_SWAP("688a06.12u", 0x000002, 0x200000, CRC(83e7ce0a) SHA1(afe185f6ed700baaf4c8affddc29f8afdfec4423) ) + + ROM_REGION(0x80000, "audiocpu", 0) /* 68k program */ + ROM_LOAD16_WORD_SWAP( "688a07.13k", 0x000000, 0x040000, CRC(f0805f06) SHA1(4b87e02b89e7ea812454498603767668e4619025) ) + + ROM_REGION(0x800000, "rfsnd", 0) /* sound roms */ + ROM_LOAD( "688a09.9s", 0x000000, 0x200000, CRC(fb582963) SHA1(ce8fe6a4d7ac7d7f4b6591f9150b1d351e636354) ) + ROM_LOAD( "688a10.7s", 0x200000, 0x200000, CRC(b3ddc5f1) SHA1(a3f76c86e85eb17f20efb037c1ad64e9cb8566c8) ) + ROM_LOAD( "688a11.5s", 0x400000, 0x200000, CRC(fc706183) SHA1(c8ce6de0588be1023ef48577bc88a4e5effdcd25) ) + ROM_LOAD( "688a12.2s", 0x600000, 0x200000, CRC(510c70e3) SHA1(5af77bc98772ab7961308c3af0a80cb1bca690e3) ) + + ROM_REGION(0x800000, "gfx1", 0) /* texture roms */ + ROM_LOAD64_WORD( "688a13.18d", 0x000000, 0x200000, CRC(c8f04f91) SHA1(9da8cc3a94dbf0a1fce87c2bc9249df712ae0b0d) ) + ROM_LOAD64_WORD( "688a14.13d", 0x000002, 0x200000, CRC(b9932735) SHA1(2492244d2acb350974202a6718bc7121325d2121) ) + ROM_LOAD64_WORD( "688a15.9d", 0x000004, 0x200000, CRC(8aadee51) SHA1(be9020a47583da9d4ff586d227836dc5b7dc31f0) ) + ROM_LOAD64_WORD( "688a16.4d", 0x000006, 0x200000, CRC(7f4e1893) SHA1(585be7b31ab7a48300c22b00443b00d631f4c49d) ) + + ROM_REGION16_BE( 0x200, "eeprom", 0 ) + ROM_LOAD( "gticlub.nv", 0x0000, 0x0200, CRC(eca78a49) SHA1(3dcaccc4bee58f7ff5d6ecae551887cc967deaf7) ) +ROM_END + +ROM_START( gticluba ) /* Asia version AAA */ + ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE("688aaa01.21u", 0x000003, 0x80000, CRC(06a56474) SHA1(3a457b885a35e3ee030fd51d847bcf75fce46208) ) + ROM_LOAD32_BYTE("688aaa02.19u", 0x000002, 0x80000, CRC(3c1e714a) SHA1(557f8542b855b2b35f242c8db7396017aca6dbd8) ) + ROM_LOAD32_BYTE("688aaa03.21r", 0x000001, 0x80000, CRC(e060580b) SHA1(50242f3f3b949cc03082e4e75d9dcc89e17f0a75) ) + ROM_LOAD32_BYTE("688aaa04.19r", 0x000000, 0x80000, CRC(928c23cd) SHA1(cce54398e1e5b98bfb717839cc422f1f60502788) ) + + ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */ + ROM_LOAD32_WORD_SWAP("688a05.14u", 0x000000, 0x200000, CRC(7caa3f80) SHA1(28409dc17c4e010173396fdc069a409fbea0d58d) ) + ROM_LOAD32_WORD_SWAP("688a06.12u", 0x000002, 0x200000, CRC(83e7ce0a) SHA1(afe185f6ed700baaf4c8affddc29f8afdfec4423) ) + + ROM_REGION(0x80000, "audiocpu", 0) /* 68k program */ + ROM_LOAD16_WORD_SWAP( "688a07.13k", 0x000000, 0x040000, CRC(f0805f06) SHA1(4b87e02b89e7ea812454498603767668e4619025) ) + + ROM_REGION(0x800000, "rfsnd", 0) /* sound roms */ + ROM_LOAD( "688a09.9s", 0x000000, 0x200000, CRC(fb582963) SHA1(ce8fe6a4d7ac7d7f4b6591f9150b1d351e636354) ) + ROM_LOAD( "688a10.7s", 0x200000, 0x200000, CRC(b3ddc5f1) SHA1(a3f76c86e85eb17f20efb037c1ad64e9cb8566c8) ) + ROM_LOAD( "688a11.5s", 0x400000, 0x200000, CRC(fc706183) SHA1(c8ce6de0588be1023ef48577bc88a4e5effdcd25) ) + ROM_LOAD( "688a12.2s", 0x600000, 0x200000, CRC(510c70e3) SHA1(5af77bc98772ab7961308c3af0a80cb1bca690e3) ) + + ROM_REGION(0x800000, "gfx1", 0) /* texture roms */ + ROM_LOAD64_WORD( "688a13.18d", 0x000000, 0x200000, CRC(c8f04f91) SHA1(9da8cc3a94dbf0a1fce87c2bc9249df712ae0b0d) ) + ROM_LOAD64_WORD( "688a14.13d", 0x000002, 0x200000, CRC(b9932735) SHA1(2492244d2acb350974202a6718bc7121325d2121) ) + ROM_LOAD64_WORD( "688a15.9d", 0x000004, 0x200000, CRC(8aadee51) SHA1(be9020a47583da9d4ff586d227836dc5b7dc31f0) ) + ROM_LOAD64_WORD( "688a16.4d", 0x000006, 0x200000, CRC(7f4e1893) SHA1(585be7b31ab7a48300c22b00443b00d631f4c49d) ) + + ROM_REGION16_BE( 0x200, "eeprom", 0 ) + ROM_LOAD( "gticlub.nv", 0x0000, 0x0200, CRC(eca78a49) SHA1(3dcaccc4bee58f7ff5d6ecae551887cc967deaf7) ) +ROM_END + +ROM_START( gticlubj ) /* Japan version JAA */ + ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE("688jaa01.21u", 0x000003, 0x80000, CRC(1492059c) SHA1(176dbd87f23f4cd8e1397e67da501738e20e5a57) ) + ROM_LOAD32_BYTE("688jaa02.19u", 0x000002, 0x80000, CRC(7896dd69) SHA1(a3ab7b872132a5e66238e414f4b497cf7beb8b1c) ) + ROM_LOAD32_BYTE("688jaa03.21r", 0x000001, 0x80000, CRC(94e2be50) SHA1(f206ac201903f3aae29196ab6fccdef104859346) ) + ROM_LOAD32_BYTE("688jaa04.19r", 0x000000, 0x80000, CRC(ff539bb6) SHA1(1a225eca4377d82a2b6cb99c1d16580b9ccf2f08) ) + + ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */ + ROM_LOAD32_WORD_SWAP("688a05.14u", 0x000000, 0x200000, CRC(7caa3f80) SHA1(28409dc17c4e010173396fdc069a409fbea0d58d) ) + ROM_LOAD32_WORD_SWAP("688a06.12u", 0x000002, 0x200000, CRC(83e7ce0a) SHA1(afe185f6ed700baaf4c8affddc29f8afdfec4423) ) + + ROM_REGION(0x80000, "audiocpu", 0) /* 68k program */ + ROM_LOAD16_WORD_SWAP( "688a07.13k", 0x000000, 0x040000, CRC(f0805f06) SHA1(4b87e02b89e7ea812454498603767668e4619025) ) + + ROM_REGION(0x800000, "rfsnd", 0) /* sound roms */ + ROM_LOAD( "688a09.9s", 0x000000, 0x200000, CRC(fb582963) SHA1(ce8fe6a4d7ac7d7f4b6591f9150b1d351e636354) ) + ROM_LOAD( "688a10.7s", 0x200000, 0x200000, CRC(b3ddc5f1) SHA1(a3f76c86e85eb17f20efb037c1ad64e9cb8566c8) ) + ROM_LOAD( "688a11.5s", 0x400000, 0x200000, CRC(fc706183) SHA1(c8ce6de0588be1023ef48577bc88a4e5effdcd25) ) + ROM_LOAD( "688a12.2s", 0x600000, 0x200000, CRC(510c70e3) SHA1(5af77bc98772ab7961308c3af0a80cb1bca690e3) ) + + ROM_REGION(0x800000, "gfx1", 0) /* texture roms */ + ROM_LOAD64_WORD( "688a13.18d", 0x000000, 0x200000, CRC(c8f04f91) SHA1(9da8cc3a94dbf0a1fce87c2bc9249df712ae0b0d) ) + ROM_LOAD64_WORD( "688a14.13d", 0x000002, 0x200000, CRC(b9932735) SHA1(2492244d2acb350974202a6718bc7121325d2121) ) + ROM_LOAD64_WORD( "688a15.9d", 0x000004, 0x200000, CRC(8aadee51) SHA1(be9020a47583da9d4ff586d227836dc5b7dc31f0) ) + ROM_LOAD64_WORD( "688a16.4d", 0x000006, 0x200000, CRC(7f4e1893) SHA1(585be7b31ab7a48300c22b00443b00d631f4c49d) ) + + ROM_REGION16_BE( 0x200, "eeprom", 0 ) + ROM_LOAD( "gticlub.nv", 0x0000, 0x0200, CRC(eca78a49) SHA1(3dcaccc4bee58f7ff5d6ecae551887cc967deaf7) ) +ROM_END + +ROM_START( thunderh ) /* Euro version EAA */ + ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE( "680eaa01.21u", 0x000003, 0x080000, CRC(796e2678) SHA1(8051a228aa6d1a3f1fef26de15f4fdb785c2c8ee) ) + ROM_LOAD32_BYTE( "680eaa02.19u", 0x000002, 0x080000, CRC(767e6db0) SHA1(0f29f56fe485f30100ce54e64bda5d5a124c1d09) ) + ROM_LOAD32_BYTE( "680eaa03.21r", 0x000001, 0x080000, CRC(5a5b59b5) SHA1(542c0722437f40829559b09120fde995246d52ae) ) + ROM_LOAD32_BYTE( "680eaa04.19r", 0x000000, 0x080000, CRC(4a973a5c) SHA1(1d84f6416c3b5a85d7ebfbc15fc08e0dd8dc2414) ) + + ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */ + ROM_LOAD32_WORD_SWAP( "680a05.14u", 0x000000, 0x200000, CRC(0c9f334d) SHA1(99ac622a04a7140244d81031df69a796b6fd2657) ) + ROM_LOAD32_WORD_SWAP( "680a06.12u", 0x000002, 0x200000, CRC(83074217) SHA1(bbf782ac125cd98d9147ef4e0373bf61f74726f7) ) + + ROM_REGION(0x80000, "audiocpu", 0) /* 68k program */ + ROM_LOAD16_WORD_SWAP( "680a07.13k", 0x000000, 0x080000, CRC(12247a3e) SHA1(846cd9423efd3c9b17fce08393c6c83307d72f92) ) + + ROM_REGION(0x20000, "dsp", 0) /* 68k program for outboard sound? network? board */ + ROM_LOAD16_WORD_SWAP( "680c22.20k", 0x000000, 0x020000, CRC(d93c0ee2) SHA1(4b58418cbb01b51e12d6e7c86b2c81cd35d86248) ) + + ROM_REGION(0x800000, "rfsnd", 0) /* sound roms */ + ROM_LOAD( "680a09.9s", 0x000000, 0x200000, CRC(71c2b049) SHA1(ce360172c8774b31edf16a80104c35b1caf26cd9) ) + ROM_LOAD( "680a10.7s", 0x200000, 0x200000, CRC(19882bf3) SHA1(7287da58853c84cbadbfb42bed37f2b0032c4b4d) ) + ROM_LOAD( "680a11.5s", 0x400000, 0x200000, CRC(0c74fe3f) SHA1(2e69f8d37552a74bbda65b134f747b4380ed33b0) ) + ROM_LOAD( "680a12.2s", 0x600000, 0x200000, CRC(b052919d) SHA1(a61c8eaf378ab7d780478db61217302d1b9f8f73) ) + + ROM_REGION(0x800000, "gfx1", 0) /* texture roms */ + ROM_LOAD64_WORD( "680a13.18d", 0x000000, 0x200000, CRC(233f9074) SHA1(78ce42c35407d61df37cc0d16cdee84f8de968fa) ) + ROM_LOAD64_WORD( "680a14.13d", 0x000002, 0x200000, CRC(9ae15033) SHA1(12e291114629632b81f53811a6c8666aff4e92f3) ) + ROM_LOAD64_WORD( "680a15.9d", 0x000004, 0x200000, CRC(dc47c86f) SHA1(71af9b21f1ecc063135f501b1561869ee910c236) ) + ROM_LOAD64_WORD( "680a16.4d", 0x000006, 0x200000, CRC(ea388143) SHA1(3de5314a009d702186d5e285c8edefdd48139eab) ) +ROM_END + +ROM_START( thunderhu ) /* USA version UAA */ + ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE( "680uaa01.21u", 0x000003, 0x080000, CRC(f2bb2ba1) SHA1(311e88d63179486014376c4af4ff0ef28673ee5a) ) + ROM_LOAD32_BYTE( "680uaa02.19u", 0x000002, 0x080000, CRC(52f617b5) SHA1(fda3133d3a7e04eb4432c69becdcf1872b3660d9) ) + ROM_LOAD32_BYTE( "680uaa03.21r", 0x000001, 0x080000, CRC(086a0574) SHA1(32fb93dbb93d2fe6af743ea4310b50a6cd03647d) ) + ROM_LOAD32_BYTE( "680uaa04.19r", 0x000000, 0x080000, CRC(85e1f8e3) SHA1(9172c54b6663f1bf390795068271198083a6860d) ) + + ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */ + ROM_LOAD32_WORD_SWAP( "680a05.14u", 0x000000, 0x200000, CRC(0c9f334d) SHA1(99ac622a04a7140244d81031df69a796b6fd2657) ) + ROM_LOAD32_WORD_SWAP( "680a06.12u", 0x000002, 0x200000, CRC(83074217) SHA1(bbf782ac125cd98d9147ef4e0373bf61f74726f7) ) + + ROM_REGION(0x80000, "audiocpu", 0) /* 68k program */ + ROM_LOAD16_WORD_SWAP( "680a07.13k", 0x000000, 0x080000, CRC(12247a3e) SHA1(846cd9423efd3c9b17fce08393c6c83307d72f92) ) + + ROM_REGION(0x20000, "dsp", 0) /* 68k program for outboard sound? network? board */ + ROM_LOAD16_WORD_SWAP( "680c22.20k", 0x000000, 0x020000, CRC(d93c0ee2) SHA1(4b58418cbb01b51e12d6e7c86b2c81cd35d86248) ) + + ROM_REGION(0x800000, "rfsnd", 0) /* sound roms */ + ROM_LOAD( "680a09.9s", 0x000000, 0x200000, CRC(71c2b049) SHA1(ce360172c8774b31edf16a80104c35b1caf26cd9) ) + ROM_LOAD( "680a10.7s", 0x200000, 0x200000, CRC(19882bf3) SHA1(7287da58853c84cbadbfb42bed37f2b0032c4b4d) ) + ROM_LOAD( "680a11.5s", 0x400000, 0x200000, CRC(0c74fe3f) SHA1(2e69f8d37552a74bbda65b134f747b4380ed33b0) ) + ROM_LOAD( "680a12.2s", 0x600000, 0x200000, CRC(b052919d) SHA1(a61c8eaf378ab7d780478db61217302d1b9f8f73) ) + + ROM_REGION(0x800000, "gfx1", 0) /* texture roms */ + ROM_LOAD64_WORD( "680a13.18d", 0x000000, 0x200000, CRC(233f9074) SHA1(78ce42c35407d61df37cc0d16cdee84f8de968fa) ) + ROM_LOAD64_WORD( "680a14.13d", 0x000002, 0x200000, CRC(9ae15033) SHA1(12e291114629632b81f53811a6c8666aff4e92f3) ) + ROM_LOAD64_WORD( "680a15.9d", 0x000004, 0x200000, CRC(dc47c86f) SHA1(71af9b21f1ecc063135f501b1561869ee910c236) ) + ROM_LOAD64_WORD( "680a16.4d", 0x000006, 0x200000, CRC(ea388143) SHA1(3de5314a009d702186d5e285c8edefdd48139eab) ) +ROM_END + +ROM_START( slrasslt ) /* USA version UAA */ + ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE( "792uaa01.21u", 0x000003, 0x080000, CRC(c73bf7fb) SHA1(ffe0fea155473827929339a9261a158287ce30a8) ) + ROM_LOAD32_BYTE( "792uaa02.19u", 0x000002, 0x080000, CRC(a940bb9b) SHA1(65a60157697a21cc2485c02c689c9addb3ac91f1) ) + ROM_LOAD32_BYTE( "792uaa03.21r", 0x000001, 0x080000, CRC(363e8411) SHA1(b9c70033d8e3de4b339b61a66172bfecb7c2b3ab) ) + ROM_LOAD32_BYTE( "792uaa04.19r", 0x000000, 0x080000, CRC(7910d99c) SHA1(e2114d369060528998b58331d590c086d306f541) ) + + ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */ + ROM_LOAD32_WORD_SWAP( "792a05.14u", 0x000000, 0x200000, CRC(9a27edfc) SHA1(c028b6440eb1b0c814c4db45918e580662ac2d9a) ) + ROM_LOAD32_WORD_SWAP( "792a06.12u", 0x000002, 0x200000, CRC(c272f171) SHA1(df492287eadc5e8668fe46cfa3ed3ca77c57feca) ) + + ROM_REGION(0x80000, "audiocpu", 0) /* 68k program */ + ROM_LOAD16_WORD_SWAP( "792a07.10k", 0x000000, 0x080000, CRC(89a65ad1) SHA1(d814ef0b560c8e68da57ad5c6096e4fc05e9913e) ) + + ROM_REGION(0x800000, "rfsnd", 0) /* sound roms */ + ROM_LOAD( "792a09.9s", 0x000000, 0x200000, CRC(7d7ea427) SHA1(a9a311a7c17223cc87140fe2890e20a321464831) ) + ROM_LOAD( "792a10.7s", 0x200000, 0x200000, CRC(e585e5d9) SHA1(ec44ad324a66eeea4c45933dda5a8a9a4398879d) ) + ROM_LOAD( "792a11.5s", 0x400000, 0x200000, CRC(c9c3a04c) SHA1(f834659f67712c9fcd93b7407669d7f35517b790) ) + ROM_LOAD( "792a12.2s", 0x600000, 0x200000, CRC(da8fcdd5) SHA1(daa7b3a086ada69e93c3d7cd9130befc79e422dc) ) + + ROM_REGION(0x800000, "gfx1", 0) /* texture roms */ + ROM_LOAD64_WORD( "792a13.18d", 0x000000, 0x200000, CRC(16d6a134) SHA1(3f53f3c6759d7c5f40aa25a598df899fbac35a60) ) + ROM_LOAD64_WORD( "792a14.13d", 0x000002, 0x200000, CRC(cf57e830) SHA1(607b4dec3b8180a63e29d9dab1ca28d7226dda1e) ) + ROM_LOAD64_WORD( "792a15.9d", 0x000004, 0x200000, CRC(1c5531cb) SHA1(1b514f181c92e16d07bfe4719604f1e4caf15377) ) + ROM_LOAD64_WORD( "792a16.4d", 0x000006, 0x200000, CRC(df89e392) SHA1(af37c5460d43bf8d8a1ab4213c4528083a7363c2) ) + + ROM_REGION16_BE(0x200, "eeprom", 0) /* default eeprom with magic number */ + ROM_LOAD16_WORD( "eeprom-slrasslt.bin", 0x0000, 0x0200, CRC(924b4ed8) SHA1(247bf0c1394cbab3af03c26b9c016302b9b5723c) ) +ROM_END + +ROM_START( hangplt ) /* Japan version JAB */ + ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ + ROM_LOAD32_BYTE( "685jab01.21u", 0x000003, 0x080000, CRC(f98a3e82) SHA1(94ebaa172b0e98c5cd08efaea5f56e707e5032b4) ) + ROM_LOAD32_BYTE( "685jab02.19u", 0x000002, 0x080000, CRC(20730cdc) SHA1(71b2cf7077ab7db875f9030e21afd05905f57ce5) ) + ROM_LOAD32_BYTE( "685jab03.21r", 0x000001, 0x080000, CRC(77fa2248) SHA1(a662b84945b3d268fed15952cc793d821233735e) ) + ROM_LOAD32_BYTE( "685jab04.19r", 0x000000, 0x080000, CRC(ab6773df) SHA1(91d3f849a1cc5fa4b2fbd876d53402a548198c41) ) + + ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */ + ROM_LOAD32_WORD_SWAP( "685a05.14u", 0x000000, 0x200000, CRC(ba1c8f40) SHA1(ce4ed641c1d6d44447eaaada16f305f1d7fb9ee2) ) + ROM_LOAD32_WORD_SWAP( "685a06.12u", 0x000002, 0x200000, CRC(2429935c) SHA1(4da9e169adcac81ea1bc135d727c2bd13ad372fa) ) + + ROM_REGION(0x80000, "audiocpu", 0) /* 68k program */ + ROM_LOAD16_WORD_SWAP( "685a07.13k", 0x000000, 0x080000, CRC(5b72fd80) SHA1(a150837fa0d66dc0c3832495a4c8ce4f9b92cd98) ) + + ROM_REGION(0x1000000, "rfsnd", 0) /* sound roms */ + ROM_LOAD( "685a09.9s", 0x000000, 0x400000, CRC(b8ae40aa) SHA1(eee27a8929e0e805f1045fd9638e661b36a1e3c7) ) + ROM_LOAD( "685a10.7s", 0x400000, 0x400000, CRC(fef3dc36) SHA1(566c7469fc452b5965a31fa42291082ec8e48a24) ) + + ROM_REGION(0x800000, "user5", 0) /* texture roms */ + ROM_LOAD32_WORD( "685a13.4w", 0x000002, 0x400000, CRC(06329af4) SHA1(76cad9db604751ce48bb67bfd29e57bac0ee9a16) ) + ROM_LOAD32_WORD( "685a14.12w", 0x000000, 0x400000, CRC(87437739) SHA1(0d45637af40938a54d5efd29c125b0fafd55f9a4) ) + + ROM_REGION16_BE( 0x200, "eeprom", 0 ) + ROM_LOAD( "hangplt.nv", 0x0000, 0x0200, CRC(35f482c8) SHA1(445918156770449dce1a010aab9d310f15670092) ) +ROM_END + +static DRIVER_INIT(gticlub) +{ + gticlub_state *state = machine.driver_data<gticlub_state>(); + + init_konami_cgboard(machine, 1, CGBOARD_TYPE_GTICLUB); + + state->m_sharc_dataram_0 = auto_alloc_array(machine, UINT32, 0x100000/4); + + K001005_preprocess_texture_data(machine.region("gfx1")->base(), machine.region("gfx1")->bytes(), 1); +} + +static DRIVER_INIT(hangplt) +{ + gticlub_state *state = machine.driver_data<gticlub_state>(); + + init_konami_cgboard(machine, 2, CGBOARD_TYPE_HANGPLT); + set_cgboard_texture_bank(machine, 0, "bank5", machine.region("user5")->base()); + set_cgboard_texture_bank(machine, 1, "bank6", machine.region("user5")->base()); + + state->m_sharc_dataram_0 = auto_alloc_array(machine, UINT32, 0x100000/4); + state->m_sharc_dataram_1 = auto_alloc_array(machine, UINT32, 0x100000/4); +} + +/*************************************************************************/ + +GAME( 1996, gticlub, 0, gticlub, gticlub, gticlub, ROT0, "Konami", "GTI Club (ver EAA)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) +GAME( 1996, gticluba, gticlub, gticlub, gticlub, gticlub, ROT0, "Konami", "GTI Club (ver AAA)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) +GAME( 1996, gticlubj, gticlub, gticlub, gticlub, gticlub, ROT0, "Konami", "GTI Club (ver JAA)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) +GAME( 1996, thunderh, 0, thunderh, thunderh, gticlub, ROT0, "Konami", "Operation Thunder Hurricane (ver EAA)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) +GAME( 1996, thunderhu,thunderh, thunderh, thunderh, gticlub, ROT0, "Konami", "Operation Thunder Hurricane (ver UAA)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) +GAME( 1997, slrasslt, 0, slrasslt, slrasslt, gticlub, ROT0, "Konami", "Solar Assault (ver UAA)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND ) +GAMEL( 1997, hangplt, 0, hangplt, hangplt, hangplt, ROT0, "Konami", "Hang Pilot", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND, layout_dualhovu ) |