// license:BSD-3-Clause // copyright-holders:Ville Linde /* Konami 'ZR107' Hardware Konami, 1995-1996 Driver by Ville Linde Hardware overview: ZR107 CPU board: ---------------- IBM PowerPC 403GA at 32MHz (main CPU) Motorola MC68EC000 at 8MHz (sound CPU) Konami K056800 (MIRAC), sound system interface Konami K056230 (LANC), LAN interface Konami K058141 sound chip (same as 2x K054539) ZR107 GFX board: ---------------- Analog Devices ADSP-21062 SHARC DSP at 36MHz Konami K056832 tilemap chip KS10071 (custom 3D pixel unit) KS10081 (custom 3D texel unit) GN678 GFX board (same as in gticlub.c): ---------------- 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) Known games on this hardware: Game | Year | ID | CPU PCB | CG Board(s) -------------------------------------------------------------------------- Midnight Run | 1995 | GX476 | ZR107 | ZR107 Winding Heat | 1996 | GX677 | ZR107 | ZR107 Jet Wave / Wave Shark | 1996 | GX678 | ZR107 | GN678 PCB Layouts ----------- Top Board ZR107 PWB(A)300769A |------------------------------------------------------------| | MASKROM.3R | | MASKROM.5N MASKROM.5R | |056602 056800 058141 68EC000FN8 TSOP56 DIP42 | | RESET_SW TSOP56 DIP42 | |058232 | | PAL(001535) PAL(001536) 8464 8464 EPROM.13U | | | | SOJ40 EPROM.15U | | | | DIP32 SOJ40 EPROM.17U | | EPROM.19L 18.432MHz | | 93C46.20E EPROM.20U | | LED 814260-70 | | PAL(001534) | | ADC0838 | | PAL(001533) 814260-70 | | TEST_SW | | PAL(001532) | | PAL(056787A) | | | | 8464 |--------| | | |IBM | | | 64MHz |POWERPC | | | 056230 QFP44 |403GA | | | |--------| | | DSW(4) | |------------------------------------------------------------| Notes: 403GA: clock 32.000MHz (64/2) 68000: clock 8.000MHz (64/8) TSOP56: Unpopulated position for 2Mx8 TSOP56 FlashROM DIP42: Unpopulated position for 2Mx8 DIP42 mask ROM DIP32: Unpopulated position for 512kx8 EPROM SOJ40: Unpopulated position for DRAM 814260-70 QFP44: Unpopulated position for MB89371FL 056230: Konami custom, also marked KS40011, used for network functions 058141: Konami custom 056800: Konami custom 058232: Konami custom filter/DAC? 056602: Konami custom sound ceramic module (contains a small IC, some OP amps, resistors, caps etc) 8464: 8kx8 SRAM (NDIP28) 814260: 256kx16 DRAM (SOJ40) LED: 2 digit alpha-numeric 7-segment LED ROM Usage --------- |-------------------------- ROM Locations -------------------------------| Game 5R 3R 5N 13U 15U 17U 20U 19L ------------------------------------------------------------------------------------------------------ Midnight Run 477A08 477A09 477A10 476EA1A04 476EA1A03 476EA1A02 476EA1A01 477A07 Jet Wave 678A08 678A09 678A10 678UAB04 678UAB03 678UAB02 678UAB01 678A07 Winding Heat 677A08 677A09 677A10 677UBC04 677UBC03 677UBC02 677UBC01 677A07 Bottom Board ZR107 PWB(B)300816D |------------------------------------------------------------| | |-------| | | DIP42 MASKROM.2H |KS10081| 81141622 81141622 | | |-------| | | DIP42 MASKROM.5H |---------| 81141622 | | | KS10071 | | | DIP42 MASKROM.7H | | 81141622 | | |---------| | | DIP42 MASKROM.9H 81141622 | | | | MC88916 | | PAL(001785) AM7203 AM7203 AM7203 AM7203 | | | | | | PAL(001782) | | PAL(001781)| | | | | | MC44200 CY7C128 CY7C128 CY7C199 CY7C199 | | CY7C199 CY7C199 36MHz | | MACH110 | |(001779) 056832 |---------| | | |ADSP21062| | | PAL(001784) 058143 |SHARC | | |MASKROM.35A MACH110 |KS-160 | | | 62256 62256 (001780) |---------| | |MASKROM.35B 62256 CY7C109 CY7C109 | | DSW(4) CY7C109 CY7C109 | |------------------------------------------------------------| Notes: KS10081 : Konami custom video chip, also marked 001006 KS10071 : Konami custom video chip, also marked 001005. Chip is heatsinked 056832 : Konami custom 058143 : Konami custom AM7203 : AMD AM7203 2kx9 FIFO (PLCC32) MACH110 : MACH110 CPLD stamped 001779 & 001780 DSW(4) : 4 position DIP SWITCH PAL : PALCE16V8H stamped 001781, 001782, 001784, 001785 81141622: 256kx16 SDRAM CY7C128 : 2kx8 SRAM CY7C199 : 32kx8 SRAM CY7C109 : 128kx8 SRAM 62256 : 32kx8 SRAM DIP42 : Unpopulated position for 1Mx8 DIP42 mask ROM MC88916 : Motorola MC88916 Low Skew CMOS PLL Clock Driver ROM Usage --------- |--------------- ROM Locations ---------------| Game 35A 35B 2H 5H 7H 9H --------------------------------------------------------------- Midnight Run 477A12 477A11 477A16 477A15 477A14 477A13 Jet Wave - see note - Winding Heat 677A12 677A11 677A16 677A15 677A14 677A13 Note: Jet Wave uses the lower board from GTI Club (GN678), and a ZR107(PWB(A)300769A top board. Check gticlub.c for details on the bottom board. */ #include "emu.h" #include "cpu/m68000/m68000.h" #include "cpu/powerpc/ppc.h" #include "cpu/sharc/sharc.h" #include "machine/konppc.h" #include "machine/adc083x.h" #include "machine/k056230.h" #include "machine/eepromser.h" #include "machine/watchdog.h" #include "sound/k056800.h" #include "sound/k054539.h" #include "video/k001604.h" #include "video/k001005.h" #include "video/k001006.h" #include "video/k054156_k054157_k056832.h" #include "video/konami_helper.h" #include "emupal.h" #include "speaker.h" class zr107_state : public driver_device { public: zr107_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_dsp(*this, "dsp"), m_watchdog(*this, "watchdog"), m_k056800(*this, "k056800"), m_workram(*this, "workram"), m_k001005(*this, "k001005"), m_k001006_1(*this, "k001006_1"), m_in0(*this, "IN0"), m_in1(*this, "IN1"), m_in2(*this, "IN2"), m_in3(*this, "IN3"), m_in4(*this, "IN4"), m_out4(*this, "OUT4"), m_eepromout(*this, "EEPROMOUT"), m_analog1(*this, "ANALOG1"), m_analog2(*this, "ANALOG2"), m_analog3(*this, "ANALOG3"), m_screen(*this, "screen"), m_palette(*this, "palette"), m_generic_paletteram_32(*this, "paletteram"), m_konppc(*this, "konppc") { } void zr107(machine_config &config); virtual void driver_init() override; protected: required_device m_maincpu; required_device m_audiocpu; required_device m_dsp; required_device m_watchdog; required_device m_k056800; required_shared_ptr m_workram; required_device m_k001005; required_device m_k001006_1; required_ioport m_in0, m_in1, m_in2, m_in3, m_in4, m_out4, m_eepromout, m_analog1, m_analog2, m_analog3; required_device m_screen; required_device m_palette; required_shared_ptr m_generic_paletteram_32; required_device m_konppc; std::unique_ptr m_sharc_dataram; uint8_t m_led_reg0; uint8_t m_led_reg1; int m_ccu_vcth; int m_ccu_vctl; uint8_t m_sound_ctrl; uint8_t m_sound_intck; DECLARE_WRITE32_MEMBER(paletteram32_w); DECLARE_READ8_MEMBER(sysreg_r); DECLARE_WRITE8_MEMBER(sysreg_w); DECLARE_READ32_MEMBER(ccu_r); DECLARE_WRITE32_MEMBER(ccu_w); DECLARE_READ32_MEMBER(dsp_dataram_r); DECLARE_WRITE32_MEMBER(dsp_dataram_w); DECLARE_WRITE16_MEMBER(sound_ctrl_w); WRITE_LINE_MEMBER(vblank); WRITE_LINE_MEMBER(k054539_irq_gen); double adc0838_callback(uint8_t input); void sharc_memmap(address_map &map); void sound_memmap(address_map &map); virtual void machine_start() override; virtual void machine_reset() override; }; class midnrun_state : public zr107_state { public: midnrun_state(const machine_config &mconfig, device_type type, const char *tag) : zr107_state(mconfig, type, tag), m_k056832(*this, "k056832") { } void midnrun(machine_config &config); private: virtual void video_start() override; void main_memmap(address_map &map); K056832_CB_MEMBER(tile_callback); required_device m_k056832; uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); }; class jetwave_state : public zr107_state { public: jetwave_state(const machine_config &mconfig, device_type type, const char *tag) : zr107_state(mconfig, type, tag), m_k001604(*this, "k001604"), m_k001006_2(*this, "k001006_2") { } void jetwave(machine_config &config); private: DECLARE_WRITE32_MEMBER(palette_w); void main_memmap(address_map &map); uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); required_device m_k001604; required_device m_k001006_2; }; uint32_t jetwave_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { bitmap.fill(m_palette->pen(0), cliprect); m_k001604->draw_back_layer(bitmap, cliprect); m_k001005->draw(bitmap, cliprect); m_k001604->draw_front_layer(screen, bitmap, cliprect); draw_7segment_led(bitmap, 3, 3, m_led_reg0); draw_7segment_led(bitmap, 9, 3, m_led_reg1); return 0; } /*****************************************************************************/ WRITE32_MEMBER(zr107_state::paletteram32_w) { COMBINE_DATA(&m_generic_paletteram_32[offset]); data = m_generic_paletteram_32[offset]; m_palette->set_pen_color((offset * 2) + 0, pal5bit(data >> 26), pal5bit(data >> 21), pal5bit(data >> 16)); m_palette->set_pen_color((offset * 2) + 1, pal5bit(data >> 10), pal5bit(data >> 5), pal5bit(data >> 0)); } K056832_CB_MEMBER(midnrun_state::tile_callback) { *color += layer * 0x40; } void midnrun_state::video_start() { m_k056832->set_layer_offs(0, -29, -27); m_k056832->set_layer_offs(1, -29, -27); m_k056832->set_layer_offs(2, -29, -27); m_k056832->set_layer_offs(3, -29, -27); m_k056832->set_layer_offs(4, -29, -27); m_k056832->set_layer_offs(5, -29, -27); m_k056832->set_layer_offs(6, -29, -27); m_k056832->set_layer_offs(7, -29, -27); } uint32_t midnrun_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { bitmap.fill(m_palette->pen(0), cliprect); m_k056832->tilemap_draw(screen, bitmap, cliprect, 1, 0, 0); m_k001005->draw(bitmap, cliprect); m_k056832->tilemap_draw(screen, bitmap, cliprect, 0, 0, 0); draw_7segment_led(bitmap, 3, 3, m_led_reg0); draw_7segment_led(bitmap, 9, 3, m_led_reg1); return 0; } /******************************************************************/ READ8_MEMBER(zr107_state::sysreg_r) { uint32_t r = 0; switch (offset) { case 0: /* I/O port 0 */ r = m_in0->read(); break; case 1: /* I/O port 1 */ r = m_in1->read(); break; case 2: /* I/O port 2 */ r = m_in2->read(); break; case 3: /* System Port 0 */ r = m_in3->read(); break; case 4: /* System Port 1 */ r = m_in4->read(); break; case 5: /* Parallel data port */ break; } return r; } WRITE8_MEMBER(zr107_state::sysreg_w) { switch (offset) { case 0: /* LED Register 0 */ m_led_reg0 = data; break; case 1: /* LED Register 1 */ m_led_reg1 = data; break; case 2: /* Parallel data register */ osd_printf_debug("Parallel data = %02X\n", data); break; case 3: /* System Register 0 */ /* 0x80 = unused 0x40 = COINREQ1 0x20 = COINREQ2 0x10 = SNDRES 0x08 = unused 0x04 = EEPCS 0x02 = EEPCLK 0x01 = EEPDI */ m_eepromout->write(data & 0x07, 0xff); m_audiocpu->set_input_line(INPUT_LINE_RESET, (data & 0x10) ? CLEAR_LINE : ASSERT_LINE); osd_printf_debug("System register 0 = %02X\n", data); break; case 4: /* System Register 1 */ /* 0x80 = EXRES1 0x40 = EXRES0 0x20 = EXID1 0x10 = EXID0 0x08 = unused 0x04 = ADCS (ADC CS) 0x02 = ADDI (ADC DI) 0x01 = ADDSCLK (ADC SCLK) */ if (data & 0x80) /* CG Board 1 IRQ Ack */ m_maincpu->set_input_line(INPUT_LINE_IRQ1, CLEAR_LINE); if (data & 0x40) /* CG Board 0 IRQ Ack */ m_maincpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); m_konppc->set_cgboard_id((data >> 4) & 3); m_out4->write(data, 0xff); osd_printf_debug("System register 1 = %02X\n", data); break; case 5: /* System Register 2 */ /* 0x01 = AFE */ if (data & 0x01) m_watchdog->watchdog_reset(); break; } } READ32_MEMBER(zr107_state::ccu_r) { uint32_t r = 0; switch (offset) { case 0x1c/4: { // Midnight Run polls the vertical counter in vblank if (ACCESSING_BITS_24_31) { m_ccu_vcth ^= 0xff; r |= m_ccu_vcth << 24; } if (ACCESSING_BITS_8_15) { m_ccu_vctl++; m_ccu_vctl &= 0x1ff; r |= (m_ccu_vctl >> 2) << 8; } } } return r; } WRITE32_MEMBER(zr107_state::ccu_w) { } /******************************************************************/ void zr107_state::machine_start() { /* set conservative DRC options */ m_maincpu->ppcdrc_set_options(PPCDRC_COMPATIBLE_OPTIONS); /* configure fast RAM regions for DRC */ m_maincpu->ppcdrc_add_fastram(0x00000000, 0x000fffff, false, m_workram); } void midnrun_state::main_memmap(address_map &map) { map(0x00000000, 0x000fffff).ram().share("workram"); /* Work RAM */ map(0x74000000, 0x74003fff).rw(m_k056832, FUNC(k056832_device::ram_word_r), FUNC(k056832_device::ram_word_w)); map(0x74020000, 0x7402003f).rw(m_k056832, FUNC(k056832_device::word_r), FUNC(k056832_device::word_w)); map(0x74060000, 0x7406003f).rw(FUNC(midnrun_state::ccu_r), FUNC(midnrun_state::ccu_w)); map(0x74080000, 0x74081fff).ram().w(FUNC(midnrun_state::paletteram32_w)).share("paletteram"); map(0x740a0000, 0x740a3fff).r(m_k056832, FUNC(k056832_device::rom_word_r)); map(0x78000000, 0x7800ffff).rw(m_konppc, FUNC(konppc_device::cgboard_dsp_shared_r_ppc), FUNC(konppc_device::cgboard_dsp_shared_w_ppc)); /* 21N 21K 23N 23K */ map(0x78010000, 0x7801ffff).w(m_konppc, FUNC(konppc_device::cgboard_dsp_shared_w_ppc)); map(0x78040000, 0x7804000f).rw(m_k001006_1, FUNC(k001006_device::read), FUNC(k001006_device::write)); map(0x780c0000, 0x780c0007).rw(m_konppc, FUNC(konppc_device::cgboard_dsp_comm_r_ppc), FUNC(konppc_device::cgboard_dsp_comm_w_ppc)); map(0x7e000000, 0x7e003fff).rw(FUNC(midnrun_state::sysreg_r), FUNC(midnrun_state::sysreg_w)); map(0x7e008000, 0x7e009fff).rw("k056230", FUNC(k056230_device::read), FUNC(k056230_device::write)); /* LANC registers */ map(0x7e00a000, 0x7e00bfff).rw("k056230", FUNC(k056230_device::lanc_ram_r), FUNC(k056230_device::lanc_ram_w)); /* LANC Buffer RAM (27E) */ map(0x7e00c000, 0x7e00c00f).rw(m_k056800, FUNC(k056800_device::host_r), FUNC(k056800_device::host_w)); map(0x7f800000, 0x7f9fffff).rom().share("share2"); map(0x7fe00000, 0x7fffffff).rom().region("user1", 0).share("share2"); /* Program ROM */ } WRITE32_MEMBER(jetwave_state::palette_w) { COMBINE_DATA(&m_generic_paletteram_32[offset]); data = m_generic_paletteram_32[offset]; m_palette->set_pen_color(offset, pal5bit(data >> 10), pal5bit(data >> 5), pal5bit(data >> 0)); } void jetwave_state::main_memmap(address_map &map) { map(0x00000000, 0x000fffff).ram().share("workram"); /* Work RAM */ map(0x74000000, 0x740000ff).rw(m_k001604, FUNC(k001604_device::reg_r), FUNC(k001604_device::reg_w)); map(0x74010000, 0x7401ffff).ram().w(FUNC(jetwave_state::palette_w)).share("paletteram"); map(0x74020000, 0x7403ffff).rw(m_k001604, FUNC(k001604_device::tile_r), FUNC(k001604_device::tile_w)); map(0x74040000, 0x7407ffff).rw(m_k001604, FUNC(k001604_device::char_r), FUNC(k001604_device::char_w)); map(0x78000000, 0x7800ffff).rw(m_konppc, FUNC(konppc_device::cgboard_dsp_shared_r_ppc), FUNC(konppc_device::cgboard_dsp_shared_w_ppc)); /* 21N 21K 23N 23K */ map(0x78010000, 0x7801ffff).w(m_konppc, FUNC(konppc_device::cgboard_dsp_shared_w_ppc)); map(0x78040000, 0x7804000f).rw(m_k001006_1, FUNC(k001006_device::read), FUNC(k001006_device::write)); map(0x78080000, 0x7808000f).rw(m_k001006_2, FUNC(k001006_device::read), FUNC(k001006_device::write)); map(0x780c0000, 0x780c0007).rw(m_konppc, FUNC(konppc_device::cgboard_dsp_comm_r_ppc), FUNC(konppc_device::cgboard_dsp_comm_w_ppc)); map(0x7e000000, 0x7e003fff).rw(FUNC(jetwave_state::sysreg_r), FUNC(jetwave_state::sysreg_w)); map(0x7e008000, 0x7e009fff).rw("k056230", FUNC(k056230_device::read), FUNC(k056230_device::write)); /* LANC registers */ map(0x7e00a000, 0x7e00bfff).rw("k056230", FUNC(k056230_device::lanc_ram_r), FUNC(k056230_device::lanc_ram_w)); /* LANC Buffer RAM (27E) */ map(0x7e00c000, 0x7e00c00f).rw(m_k056800, FUNC(k056800_device::host_r), FUNC(k056800_device::host_w)); map(0x7f000000, 0x7f3fffff).rom().region("user2", 0); map(0x7f800000, 0x7f9fffff).rom().share("share2"); map(0x7fe00000, 0x7fffffff).rom().region("user1", 0).share("share2"); /* Program ROM */ } /**********************************************************************/ WRITE16_MEMBER(zr107_state::sound_ctrl_w) { if (ACCESSING_BITS_0_7) { if (!(data & 1)) m_audiocpu->set_input_line(M68K_IRQ_2, CLEAR_LINE); m_sound_ctrl = data; } } void zr107_state::sound_memmap(address_map &map) { map(0x000000, 0x01ffff).rom(); map(0x100000, 0x103fff).ram(); /* Work RAM */ map(0x200000, 0x2004ff).rw("k054539_1", FUNC(k054539_device::read), FUNC(k054539_device::write)).umask16(0xff00); map(0x200000, 0x2004ff).rw("k054539_2", FUNC(k054539_device::read), FUNC(k054539_device::write)).umask16(0x00ff); map(0x400000, 0x40001f).rw(m_k056800, FUNC(k056800_device::sound_r), FUNC(k056800_device::sound_w)).umask16(0x00ff); map(0x500000, 0x500001).w(FUNC(zr107_state::sound_ctrl_w)); map(0x580000, 0x580001).nopw(); // 'NRES' - D2: K056602 /RESET } /*****************************************************************************/ READ32_MEMBER(zr107_state::dsp_dataram_r) { return m_sharc_dataram[offset] & 0xffff; } WRITE32_MEMBER(zr107_state::dsp_dataram_w) { m_sharc_dataram[offset] = data; } void zr107_state::sharc_memmap(address_map &map) { map(0x400000, 0x41ffff).rw(m_konppc, FUNC(konppc_device::cgboard_0_shared_sharc_r), FUNC(konppc_device::cgboard_0_shared_sharc_w)); map(0x500000, 0x5fffff).rw(FUNC(zr107_state::dsp_dataram_r), FUNC(zr107_state::dsp_dataram_w)); map(0x600000, 0x6fffff).rw(m_k001005, FUNC(k001005_device::read), FUNC(k001005_device::write)); map(0x700000, 0x7000ff).rw(m_konppc, FUNC(konppc_device::cgboard_0_comm_sharc_r), FUNC(konppc_device::cgboard_0_comm_sharc_w)); } /*****************************************************************************/ static INPUT_PORTS_START( zr107 ) PORT_START("IN0") PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start/View") PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("Shift Up") PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("Shift Down") PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("AT/MT Switch") PORT_TOGGLE PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Service Button") PORT_CODE(KEYCODE_9) PORT_BIT( 0x0b, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("IN1") PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("IN2") PORT_BIT( 0x7f, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("adc0838", adc083x_device, do_read) PORT_START("IN4") PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* PARAACK */ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("adc0838", adc083x_device, sars_read) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) PORT_START("EEPROMOUT") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write) PORT_START("OUT4") PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("adc0838", adc083x_device, cs_write) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("adc0838", adc083x_device, di_write) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("adc0838", adc083x_device, clk_write) INPUT_PORTS_END static INPUT_PORTS_START( midnrun ) PORT_INCLUDE( zr107 ) 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_UNKNOWN ) PORT_DIPNAME( 0x0c, 0x0c, "Network ID" ) PORT_DIPLOCATION("SW:4,3") PORT_DIPSETTING( 0x0c, "1" ) PORT_DIPSETTING( 0x08, "2" ) PORT_DIPSETTING( 0x04, "3" ) PORT_DIPSETTING( 0x00, "4" ) PORT_DIPNAME( 0x02, 0x02, "Transmission Type" ) PORT_DIPLOCATION("SW:2") PORT_DIPSETTING( 0x02, "Button" ) PORT_DIPSETTING( 0x00, "'T'Gate" ) //unused PORT_DIPNAME( 0x01, 0x01, "CG Board Type" ) PORT_DIPLOCATION("SW:1") PORT_DIPSETTING( 0x01, "Single" ) PORT_DIPSETTING( 0x00, "Twin" ) //unused PORT_START("ANALOG1") PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_NAME("Steering Wheel") PORT_MINMAX(0x00,0xff) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) PORT_START("ANALOG2") PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_NAME("Gas Pedal") PORT_MINMAX(0x00,0xf0) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) PORT_START("ANALOG3") PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_NAME("Brake Pedal") PORT_MINMAX(0x00,0xf0) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) INPUT_PORTS_END static INPUT_PORTS_START( jetwave ) PORT_INCLUDE( zr107 ) PORT_MODIFY("IN0") PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start/View") PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("T-Center") //Non-analog acell PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_NAME("Angle") PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_NAME("Left Turn") //Non-analog left PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_NAME("Right Turn") //Non-analog right PORT_BIT( 0x07, 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_9) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_DIPNAME( 0x0c, 0x0c, "Network ID" ) PORT_DIPLOCATION("SW:4,3") PORT_DIPSETTING( 0x0c, "1" ) PORT_DIPSETTING( 0x08, "2" ) PORT_DIPSETTING( 0x04, "3" ) PORT_DIPSETTING( 0x00, "4" ) PORT_DIPNAME( 0x02, 0x00, "Drive System" ) PORT_DIPLOCATION("SW:2") //Sensors for force feedback. Todo: "Disable" the sensors so this switch can be set to off without errors. PORT_DIPSETTING( 0x02, "On" ) // Enables the sensors/normal use. PORT_DIPSETTING( 0x00, "Off" ) //Disables and bypasses all sensor checks. This disables the force feedback on actual hardware. PORT_DIPNAME( 0x01, 0x01, "Running Mode" ) PORT_DIPLOCATION("SW:1") PORT_DIPSETTING( 0x01, "Product" ) //Enables the analog inputs; normal usage PORT_DIPSETTING( 0x00, "Check" ) //Disables them for use with a JAMMA interface; intended for development purposes. PORT_START("ANALOG1") PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_NAME("Steering") PORT_MINMAX(0x20,0xe0) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) PORT_REVERSE PORT_START("ANALOG2") PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_NAME("Accelerator") PORT_MINMAX(0x00,0x90) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) PORT_START("ANALOG3") //actually required else MAME will crash if this port is removed. PORT_BIT( 0xff, 0x00, IPT_UNUSED ) INPUT_PORTS_END /* ADC0838 Interface */ double zr107_state::adc0838_callback(uint8_t input) { switch (input) { case ADC083X_CH0: return (double)(5 * m_analog1->read()) / 255.0; case ADC083X_CH1: return (double)(5 * m_analog2->read()) / 255.0; case ADC083X_CH2: return (double)(5 * m_analog3->read()) / 255.0; case ADC083X_VREF: return 5; default: return 0; } } WRITE_LINE_MEMBER(zr107_state::k054539_irq_gen) { if (m_sound_ctrl & 1) { // Trigger an interrupt on the rising edge if (!m_sound_intck && state) m_audiocpu->set_input_line(M68K_IRQ_2, ASSERT_LINE); } m_sound_intck = state; } /* PowerPC interrupts IRQ0: Vblank IRQ2: LANC DMA0 */ WRITE_LINE_MEMBER(zr107_state::vblank) { if (state) { m_maincpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE); m_dsp->set_flag_input(1, ASSERT_LINE); } } void zr107_state::machine_reset() { m_dsp->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); } void zr107_state::zr107(machine_config &config) { /* basic machine hardware */ PPC403GA(config, m_maincpu, XTAL(64'000'000)/2); /* PowerPC 403GA 32MHz */ M68000(config, m_audiocpu, XTAL(64'000'000)/8); /* 8MHz */ m_audiocpu->set_addrmap(AS_PROGRAM, &zr107_state::sound_memmap); ADSP21062(config, m_dsp, XTAL(36'000'000)); m_dsp->set_boot_mode(adsp21062_device::BOOT_MODE_EPROM); m_dsp->set_addrmap(AS_DATA, &zr107_state::sharc_memmap); EEPROM_93C46_16BIT(config, "eeprom"); K056230(config, "k056230", m_maincpu); WATCHDOG_TIMER(config, m_watchdog); /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_refresh_hz(60); m_screen->set_size(64*8, 48*8); m_screen->set_visarea(0*8, 64*8-1, 0*8, 48*8-1); m_screen->screen_vblank().set(FUNC(zr107_state::vblank)); PALETTE(config, m_palette).set_entries(65536); K001005(config, m_k001005, 0, m_k001006_1); K001006(config, m_k001006_1, 0); m_k001006_1->set_gfx_region("gfx1"); m_k001006_1->set_tex_layout(0); K056800(config, m_k056800, XTAL(18'432'000)); m_k056800->int_callback().set_inputline(m_audiocpu, M68K_IRQ_1); SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); k054539_device &k054539_1(K054539(config, "k054539_1", XTAL(18'432'000))); k054539_1.set_device_rom_tag("k054539"); k054539_1.timer_handler().set(FUNC(zr107_state::k054539_irq_gen)); k054539_1.add_route(0, "lspeaker", 0.75); k054539_1.add_route(1, "rspeaker", 0.75); k054539_device &k054539_2(K054539(config, "k054539_2", XTAL(18'432'000))); k054539_2.set_device_rom_tag("k054539"); k054539_2.add_route(0, "lspeaker", 0.75); k054539_2.add_route(1, "rspeaker", 0.75); adc0838_device &adc(ADC0838(config, "adc0838")); adc.set_input_callback(FUNC(zr107_state::adc0838_callback)); KONPPC(config, m_konppc, 0); m_konppc->set_num_boards(1); m_konppc->set_cbboard_type(konppc_device::CGBOARD_TYPE_ZR107); } void midnrun_state::midnrun(machine_config &config) { zr107(config); m_maincpu->set_addrmap(AS_PROGRAM, &midnrun_state::main_memmap); config.set_maximum_quantum(attotime::from_hz(750000)); // Very high sync needed to prevent lockups - why? /* video hardware */ m_screen->set_screen_update(FUNC(midnrun_state::screen_update)); K056832(config, m_k056832, 0); m_k056832->set_tile_callback(FUNC(midnrun_state::tile_callback)); m_k056832->set_config(K056832_BPP_8, 1, 0); m_k056832->set_palette(m_palette); } void jetwave_state::jetwave(machine_config &config) { zr107(config); m_maincpu->set_addrmap(AS_PROGRAM, &jetwave_state::main_memmap); config.set_maximum_quantum(attotime::from_hz(2000000)); // Very high sync needed to prevent lockups - why? /* video hardware */ m_screen->set_screen_update(FUNC(jetwave_state::screen_update)); K001604(config, m_k001604, 0); m_k001604->set_layer_size(0); m_k001604->set_roz_size(0); m_k001604->set_txt_mem_offset(0); m_k001604->set_roz_mem_offset(0x4000); m_k001604->set_palette(m_palette); // The second K001006 chip connects to the second K001005 chip. // Hook this up when the K001005 separation is understood (seems the load balancing is done on hardware). K001006(config, m_k001006_2, 0); m_k001006_2->set_gfx_region("gfx1"); m_k001006_2->set_tex_layout(0); m_konppc->set_cbboard_type(konppc_device::CGBOARD_TYPE_GTICLUB); } /*****************************************************************************/ void zr107_state::driver_init() { m_sharc_dataram = std::make_unique(0x100000/4); m_led_reg0 = m_led_reg1 = 0x7f; m_ccu_vcth = m_ccu_vctl = 0; m_dsp->enable_recompiler(); } /*****************************************************************************/ ROM_START( midnrun ) ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ ROM_LOAD32_BYTE( "476ea1a01.20u", 0x000003, 0x80000, CRC(ea70edf2) SHA1(51c882383a150ba118ccd39eb869525fcf5eee3c) ) /* Program version EAA, v1.11 (EUR) */ ROM_LOAD32_BYTE( "476ea1a02.17u", 0x000002, 0x80000, CRC(1462994f) SHA1(c8614c6c416f81737cc77c46eea6d8d440bc8cf3) ) ROM_LOAD32_BYTE( "476ea1a03.15u", 0x000001, 0x80000, CRC(b770ae46) SHA1(c61daa8353802957eb1c2e2c6204c3a98569627e) ) ROM_LOAD32_BYTE( "476ea1a04.13u", 0x000000, 0x80000, CRC(9644b277) SHA1(b9cb812b6035dfd93032d277c8aa0037cf6b3dbe) ) ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */ ROM_LOAD16_WORD_SWAP( "477a07.19l", 0x000000, 0x20000, CRC(a82c0ba1) SHA1(dad69f2e5e75009d70cc2748477248ec47627c30) ) ROM_REGION(0x100000, "k056832", 0) /* Tilemap */ ROM_LOAD16_BYTE( "477a11.35b", 0x000000, 0x80000, CRC(85eef04b) SHA1(02e26d2d4a8b29894370f28d2a49fdf5c7d23f95) ) ROM_LOAD16_BYTE( "477a12.35a", 0x000001, 0x80000, CRC(451d7777) SHA1(0bf280ca475100778bbfd3f023547bf0413fc8b7) ) ROM_REGION(0x800000, "gfx1", 0) /* Texture data */ ROM_LOAD32_BYTE( "477a13.9h", 0x000000, 0x200000, CRC(b1ee901d) SHA1(b1432cb1379b35d99d3f2b7f6409db6f7e88121d) ) ROM_LOAD32_BYTE( "477a14.7h", 0x000001, 0x200000, CRC(9ffa8cc5) SHA1(eaa19e26df721bec281444ca1c5ccc9e48df1b0b) ) ROM_LOAD32_BYTE( "477a15.5h", 0x000002, 0x200000, CRC(e337fce7) SHA1(c84875f3275efd47273508b340231721f5a631d2) ) ROM_LOAD32_BYTE( "477a16.2h", 0x000003, 0x200000, CRC(2c03ee63) SHA1(6b74d340dddf92bb4e4b1e037f003d58c65d8d9b) ) ROM_REGION(0x600000, "k054539", 0) /* Sound data */ ROM_LOAD( "477a08.5r", 0x000000, 0x200000, CRC(d320dbde) SHA1(eb602cad6ac7c7151c9f29d39b10041d5a354164) ) ROM_LOAD( "477a09.3r", 0x200000, 0x200000, CRC(f431e29f) SHA1(e6082d88f86abb63d02ac34e70873b58f88b0ddc) ) ROM_LOAD( "477a10.5n", 0x400000, 0x200000, CRC(8db31bd4) SHA1(d662d3bb6e8b44a01ffa158f5d7425454aad49a3) ) ROM_END ROM_START( midnrunj ) ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ ROM_LOAD32_BYTE( "476ja1d01.20u", 0x000003, 0x80000, CRC(68d05950) SHA1(d0ff9b9b628563e18a3eaa7b96b7e9e442c001a9) ) /* Program version JAD, v1.10 (JPN) */ ROM_LOAD32_BYTE( "476ja1d02.17u", 0x000002, 0x80000, CRC(b12a14be) SHA1(d65281791874b90351442b94173d96582cfacd10) ) ROM_LOAD32_BYTE( "476ja1d03.15u", 0x000001, 0x80000, CRC(f768c8f1) SHA1(b8242995bdb4f9ac078fd59ffc70c31014396c92) ) ROM_LOAD32_BYTE( "476ja1d04.13u", 0x000000, 0x80000, CRC(6fd4fce7) SHA1(0ef25ec98a13f7beca1231db5a4db9004caadb0b) ) ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */ ROM_LOAD16_WORD_SWAP( "477a07.19l", 0x000000, 0x20000, CRC(a82c0ba1) SHA1(dad69f2e5e75009d70cc2748477248ec47627c30) ) ROM_REGION(0x100000, "k056832", 0) /* Tilemap */ ROM_LOAD16_BYTE( "477a11.35b", 0x000000, 0x80000, CRC(85eef04b) SHA1(02e26d2d4a8b29894370f28d2a49fdf5c7d23f95) ) ROM_LOAD16_BYTE( "477a12.35a", 0x000001, 0x80000, CRC(451d7777) SHA1(0bf280ca475100778bbfd3f023547bf0413fc8b7) ) ROM_REGION(0x800000, "gfx1", 0) /* Texture data */ ROM_LOAD32_BYTE( "477a13.9h", 0x000000, 0x200000, CRC(b1ee901d) SHA1(b1432cb1379b35d99d3f2b7f6409db6f7e88121d) ) ROM_LOAD32_BYTE( "477a14.7h", 0x000001, 0x200000, CRC(9ffa8cc5) SHA1(eaa19e26df721bec281444ca1c5ccc9e48df1b0b) ) ROM_LOAD32_BYTE( "477a15.5h", 0x000002, 0x200000, CRC(e337fce7) SHA1(c84875f3275efd47273508b340231721f5a631d2) ) ROM_LOAD32_BYTE( "477a16.2h", 0x000003, 0x200000, CRC(2c03ee63) SHA1(6b74d340dddf92bb4e4b1e037f003d58c65d8d9b) ) ROM_REGION(0x600000, "k054539", 0) /* Sound data */ ROM_LOAD( "477a08.5r", 0x000000, 0x200000, CRC(d320dbde) SHA1(eb602cad6ac7c7151c9f29d39b10041d5a354164) ) ROM_LOAD( "477a09.3r", 0x200000, 0x200000, CRC(f431e29f) SHA1(e6082d88f86abb63d02ac34e70873b58f88b0ddc) ) ROM_LOAD( "477a10.5n", 0x400000, 0x200000, CRC(8db31bd4) SHA1(d662d3bb6e8b44a01ffa158f5d7425454aad49a3) ) ROM_END ROM_START( midnruna ) ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ ROM_LOAD32_BYTE( "477aaa01.20u", 0x000003, 0x80000, CRC(3aa31517) SHA1(315d9c3c930493e39bc497ceafa0c4ef6fa64e4d) ) /* Program version AAA, v1.10 (ASA) */ ROM_LOAD32_BYTE( "477aaa02.17u", 0x000002, 0x80000, CRC(c506bd3d) SHA1(d44ed2cb39f0da44f681190132c7603dfca813d9) ) ROM_LOAD32_BYTE( "477aaa03.15u", 0x000001, 0x80000, CRC(53f8e898) SHA1(ba83a60a411bb307cb0e424099716ccf888a4f39) ) ROM_LOAD32_BYTE( "477aaa04.13u", 0x000000, 0x80000, CRC(0eb264b7) SHA1(179a3d58c0f554fd1b283ee3640ce09d5142b288) ) ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */ ROM_LOAD16_WORD_SWAP( "477a07.19l", 0x000000, 0x20000, CRC(a82c0ba1) SHA1(dad69f2e5e75009d70cc2748477248ec47627c30) ) ROM_REGION(0x100000, "k056832", 0) /* Tilemap */ ROM_LOAD16_BYTE( "477a11.35b", 0x000000, 0x80000, CRC(85eef04b) SHA1(02e26d2d4a8b29894370f28d2a49fdf5c7d23f95) ) ROM_LOAD16_BYTE( "477a12.35a", 0x000001, 0x80000, CRC(451d7777) SHA1(0bf280ca475100778bbfd3f023547bf0413fc8b7) ) ROM_REGION(0x800000, "gfx1", 0) /* Texture data */ ROM_LOAD32_BYTE( "477a13.9h", 0x000000, 0x200000, CRC(b1ee901d) SHA1(b1432cb1379b35d99d3f2b7f6409db6f7e88121d) ) ROM_LOAD32_BYTE( "477a14.7h", 0x000001, 0x200000, CRC(9ffa8cc5) SHA1(eaa19e26df721bec281444ca1c5ccc9e48df1b0b) ) ROM_LOAD32_BYTE( "477a15.5h", 0x000002, 0x200000, CRC(e337fce7) SHA1(c84875f3275efd47273508b340231721f5a631d2) ) ROM_LOAD32_BYTE( "477a16.2h", 0x000003, 0x200000, CRC(2c03ee63) SHA1(6b74d340dddf92bb4e4b1e037f003d58c65d8d9b) ) ROM_REGION(0x600000, "k054539", 0) /* Sound data */ ROM_LOAD( "477a08.5r", 0x000000, 0x200000, CRC(d320dbde) SHA1(eb602cad6ac7c7151c9f29d39b10041d5a354164) ) ROM_LOAD( "477a09.3r", 0x200000, 0x200000, CRC(f431e29f) SHA1(e6082d88f86abb63d02ac34e70873b58f88b0ddc) ) ROM_LOAD( "477a10.5n", 0x400000, 0x200000, CRC(8db31bd4) SHA1(d662d3bb6e8b44a01ffa158f5d7425454aad49a3) ) ROM_END ROM_START( windheat ) ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ ROM_LOAD32_BYTE( "677eaa01.20u", 0x000003, 0x080000, CRC(500b61f4) SHA1(ec39165412978c0dbd3cbf1f7b6989b5d7ba20a0) ) /* Program version EAA, v2.11 (EUR) */ ROM_LOAD32_BYTE( "677eaa02.17u", 0x000002, 0x080000, CRC(99f9fd3b) SHA1(aaec5d7f4e46648aab3738ab09e46b312caee58f) ) ROM_LOAD32_BYTE( "677eaa03.15u", 0x000001, 0x080000, CRC(c46eba6b) SHA1(80fea082d09071875d30a6a838736cf3a3e4501d) ) ROM_LOAD32_BYTE( "677eaa04.13u", 0x000000, 0x080000, CRC(20dfcf4e) SHA1(4de8e22507f4719441f14fe96e25f0e0712dfa95) ) ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */ ROM_LOAD16_WORD_SWAP( "677a07.19l", 0x000000, 0x020000, CRC(05b14f2d) SHA1(3753f71173594ee741980e08eed0f7c3fc3588c9) ) ROM_REGION(0x100000, "k056832", 0) /* Tilemap */ ROM_LOAD16_BYTE( "677a11.35b", 0x000000, 0x080000, CRC(bf34f00f) SHA1(ca0d390c8b30d0cfdad4cfe5a601cc1f6e8c263d) ) ROM_LOAD16_BYTE( "677a12.35a", 0x000001, 0x080000, CRC(458f0b1d) SHA1(8e11023c75c80b496dfc62b6645cfedcf2a80db4) ) ROM_REGION(0x800000, "gfx1", 0) /* Texture data */ ROM_LOAD32_BYTE( "677a13.9h", 0x000000, 0x200000, CRC(7937d226) SHA1(c2ba777292c293e31068eeb3a27353ad2595b413) ) ROM_LOAD32_BYTE( "677a14.7h", 0x000001, 0x200000, CRC(2568cf41) SHA1(6ed01922943486dafbdc863b76b2036c1fbe5281) ) ROM_LOAD32_BYTE( "677a15.5h", 0x000002, 0x200000, CRC(62e2c3dd) SHA1(c9127ed70bdff947c3da2908a08974091615a685) ) ROM_LOAD32_BYTE( "677a16.2h", 0x000003, 0x200000, CRC(7cc75539) SHA1(4bd8d88debf7489f30008bd4cbded67cb1a20ab0) ) ROM_REGION(0x600000, "k054539", 0) /* Sound data */ ROM_LOAD( "677a08.5r", 0x000000, 0x200000, CRC(bde38850) SHA1(aaf1bdfc25ecdffc1f6076c9c1b2edbe263171d2) ) ROM_LOAD( "677a09.3r", 0x200000, 0x200000, CRC(4dfc1ea9) SHA1(4ab264c1902b522bc0589766e42f2b6ca276808d) ) ROM_LOAD( "677a10.5n", 0x400000, 0x200000, CRC(d8f77a68) SHA1(ff251863ef096f0864f6cbe6caa43b0aa299d9ee) ) ROM_END ROM_START( windheatu ) ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ ROM_LOAD32_BYTE( "677ubc01.20u", 0x000003, 0x080000, CRC(63198721) SHA1(7f34131bf51d573d0c683b28df2567a0b911c98c) ) /* Program version UBC, v2.22 (USA) */ ROM_LOAD32_BYTE( "677ubc02.17u", 0x000002, 0x080000, CRC(bdb00e2d) SHA1(c54b2250047576e12e9936300989e40494b4659d) ) ROM_LOAD32_BYTE( "677ubc03.15u", 0x000001, 0x080000, CRC(0f7d8c1f) SHA1(63de03c7be794b6dae8d0af69e894ac573dbbc11) ) ROM_LOAD32_BYTE( "677ubc04.13u", 0x000000, 0x080000, CRC(4e42791c) SHA1(a53c6374c6b46db578be4ced2ee7c2af7062d961) ) ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */ ROM_LOAD16_WORD_SWAP( "677a07.19l", 0x000000, 0x020000, CRC(05b14f2d) SHA1(3753f71173594ee741980e08eed0f7c3fc3588c9) ) ROM_REGION(0x100000, "k056832", 0) /* Tilemap */ ROM_LOAD16_BYTE( "677a11.35b", 0x000000, 0x080000, CRC(bf34f00f) SHA1(ca0d390c8b30d0cfdad4cfe5a601cc1f6e8c263d) ) ROM_LOAD16_BYTE( "677a12.35a", 0x000001, 0x080000, CRC(458f0b1d) SHA1(8e11023c75c80b496dfc62b6645cfedcf2a80db4) ) ROM_REGION(0x800000, "gfx1", 0) /* Texture data */ ROM_LOAD32_BYTE( "677a13.9h", 0x000000, 0x200000, CRC(7937d226) SHA1(c2ba777292c293e31068eeb3a27353ad2595b413) ) ROM_LOAD32_BYTE( "677a14.7h", 0x000001, 0x200000, CRC(2568cf41) SHA1(6ed01922943486dafbdc863b76b2036c1fbe5281) ) ROM_LOAD32_BYTE( "677a15.5h", 0x000002, 0x200000, CRC(62e2c3dd) SHA1(c9127ed70bdff947c3da2908a08974091615a685) ) ROM_LOAD32_BYTE( "677a16.2h", 0x000003, 0x200000, CRC(7cc75539) SHA1(4bd8d88debf7489f30008bd4cbded67cb1a20ab0) ) ROM_REGION(0x600000, "k054539", 0) /* Sound data */ ROM_LOAD( "677a08.5r", 0x000000, 0x200000, CRC(bde38850) SHA1(aaf1bdfc25ecdffc1f6076c9c1b2edbe263171d2) ) ROM_LOAD( "677a09.3r", 0x200000, 0x200000, CRC(4dfc1ea9) SHA1(4ab264c1902b522bc0589766e42f2b6ca276808d) ) ROM_LOAD( "677a10.5n", 0x400000, 0x200000, CRC(d8f77a68) SHA1(ff251863ef096f0864f6cbe6caa43b0aa299d9ee) ) ROM_END ROM_START( windheatj ) ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ ROM_LOAD32_BYTE( "677jaa01.20u", 0x000003, 0x080000, CRC(559b8def) SHA1(6f2e8f29b0d9a950e71015270560813adc20b689) ) /* Program version JAA, v2.11 (JPN) */ ROM_LOAD32_BYTE( "677jaa02.17u", 0x000002, 0x080000, CRC(cc230575) SHA1(be2da67600ab5edad2e8b7711c4cf985befe28bf) ) ROM_LOAD32_BYTE( "677jaa03.15u", 0x000001, 0x080000, CRC(20b04701) SHA1(463be36c7f65b4aa3c3f2b1f37d1e6c1f5106cbb) ) ROM_LOAD32_BYTE( "677jaa04.13u", 0x000000, 0x080000, CRC(f563b2a5) SHA1(b55b486b6af926eff4729f402116d45b61c5d25a) ) ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */ ROM_LOAD16_WORD_SWAP( "677a07.19l", 0x000000, 0x020000, CRC(05b14f2d) SHA1(3753f71173594ee741980e08eed0f7c3fc3588c9) ) ROM_REGION(0x100000, "k056832", 0) /* Tilemap */ ROM_LOAD16_BYTE( "677a11.35b", 0x000000, 0x080000, CRC(bf34f00f) SHA1(ca0d390c8b30d0cfdad4cfe5a601cc1f6e8c263d) ) ROM_LOAD16_BYTE( "677a12.35a", 0x000001, 0x080000, CRC(458f0b1d) SHA1(8e11023c75c80b496dfc62b6645cfedcf2a80db4) ) ROM_REGION(0x800000, "gfx1", 0) /* Texture data */ ROM_LOAD32_BYTE( "677a13.9h", 0x000000, 0x200000, CRC(7937d226) SHA1(c2ba777292c293e31068eeb3a27353ad2595b413) ) ROM_LOAD32_BYTE( "677a14.7h", 0x000001, 0x200000, CRC(2568cf41) SHA1(6ed01922943486dafbdc863b76b2036c1fbe5281) ) ROM_LOAD32_BYTE( "677a15.5h", 0x000002, 0x200000, CRC(62e2c3dd) SHA1(c9127ed70bdff947c3da2908a08974091615a685) ) ROM_LOAD32_BYTE( "677a16.2h", 0x000003, 0x200000, CRC(7cc75539) SHA1(4bd8d88debf7489f30008bd4cbded67cb1a20ab0) ) ROM_REGION(0x600000, "k054539", 0) /* Sound data */ ROM_LOAD( "677a08.5r", 0x000000, 0x200000, CRC(bde38850) SHA1(aaf1bdfc25ecdffc1f6076c9c1b2edbe263171d2) ) ROM_LOAD( "677a09.3r", 0x200000, 0x200000, CRC(4dfc1ea9) SHA1(4ab264c1902b522bc0589766e42f2b6ca276808d) ) ROM_LOAD( "677a10.5n", 0x400000, 0x200000, CRC(d8f77a68) SHA1(ff251863ef096f0864f6cbe6caa43b0aa299d9ee) ) ROM_END ROM_START( windheata ) ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ ROM_LOAD32_BYTE( "677aaa01.20u", 0x000003, 0x080000, CRC(0d88d0e2) SHA1(93da258bfdb2baa1796916ea8350fff521d43373) ) /* Program version AAA, 2.11 (ASA) */ ROM_LOAD32_BYTE( "677aaa02.17u", 0x000002, 0x080000, CRC(f71044a3) SHA1(a88990d4a65b610f695f4a6ff42868d04f6ba1b3) ) ROM_LOAD32_BYTE( "677aaa03.15u", 0x000001, 0x080000, CRC(3c897588) SHA1(718b0eb57f23a3117d2ad3c58e53196f72fc61bf) ) ROM_LOAD32_BYTE( "677aaa04.13u", 0x000000, 0x080000, CRC(aee84b7d) SHA1(b69a44e51e21f28bcd5cd87297066fc7ba7b5043) ) ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */ ROM_LOAD16_WORD_SWAP( "677a07.19l", 0x000000, 0x020000, CRC(05b14f2d) SHA1(3753f71173594ee741980e08eed0f7c3fc3588c9) ) ROM_REGION(0x100000, "k056832", 0) /* Tilemap */ ROM_LOAD16_BYTE( "677a11.35b", 0x000000, 0x080000, CRC(bf34f00f) SHA1(ca0d390c8b30d0cfdad4cfe5a601cc1f6e8c263d) ) ROM_LOAD16_BYTE( "677a12.35a", 0x000001, 0x080000, CRC(458f0b1d) SHA1(8e11023c75c80b496dfc62b6645cfedcf2a80db4) ) ROM_REGION(0x800000, "gfx1", 0) /* Texture data */ ROM_LOAD32_BYTE( "677a13.9h", 0x000000, 0x200000, CRC(7937d226) SHA1(c2ba777292c293e31068eeb3a27353ad2595b413) ) ROM_LOAD32_BYTE( "677a14.7h", 0x000001, 0x200000, CRC(2568cf41) SHA1(6ed01922943486dafbdc863b76b2036c1fbe5281) ) ROM_LOAD32_BYTE( "677a15.5h", 0x000002, 0x200000, CRC(62e2c3dd) SHA1(c9127ed70bdff947c3da2908a08974091615a685) ) ROM_LOAD32_BYTE( "677a16.2h", 0x000003, 0x200000, CRC(7cc75539) SHA1(4bd8d88debf7489f30008bd4cbded67cb1a20ab0) ) ROM_REGION(0x600000, "k054539", 0) /* Sound data */ ROM_LOAD( "677a08.5r", 0x000000, 0x200000, CRC(bde38850) SHA1(aaf1bdfc25ecdffc1f6076c9c1b2edbe263171d2) ) ROM_LOAD( "677a09.3r", 0x200000, 0x200000, CRC(4dfc1ea9) SHA1(4ab264c1902b522bc0589766e42f2b6ca276808d) ) ROM_LOAD( "677a10.5n", 0x400000, 0x200000, CRC(d8f77a68) SHA1(ff251863ef096f0864f6cbe6caa43b0aa299d9ee) ) ROM_END ROM_START( jetwave ) ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ ROM_LOAD32_BYTE( "678eab01.20u", 0x000003, 0x080000, CRC(bc657198) SHA1(e521bb2c1b1a3ae934c98ce1656d35821fc287c9) ) /* Program version EAB, EUR v1.04 */ ROM_LOAD32_BYTE( "678eab02.17u", 0x000002, 0x080000, CRC(a9a57090) SHA1(ae0273b00c64687f8f835aba531580654edd1097) ) ROM_LOAD32_BYTE( "678eab03.15u", 0x000001, 0x080000, CRC(483aaff0) SHA1(86e011337532f6ff0174393758784b276143ba10) ) ROM_LOAD32_BYTE( "678eab04.13u", 0x000000, 0x080000, CRC(c7580d72) SHA1(6a5652365a85917ac48b0f1ced70b9c311e89a4f) ) ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */ ROM_LOAD16_WORD_SWAP( "678a07.19l", 0x000000, 0x020000, CRC(bb3f5875) SHA1(97f80d9b55d4177217b7cd1ba14e8ed2d64376bb) ) ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */ ROM_LOAD32_WORD_SWAP( "685a05.10u", 0x000000, 0x200000, CRC(00e59741) SHA1(d799910d4e85482b0e92a3cc9043f81d97b2fb02) ) ROM_LOAD32_WORD_SWAP( "685a06.8u", 0x000002, 0x200000, CRC(fc98c6a5) SHA1(a84583bb7296fa9e0c284b2ac59e2dc7b2689eee) ) ROM_REGION(0x800000, "gfx1", 0) /* Texture data */ ROM_LOAD32_BYTE( "678a13.18d", 0x000000, 0x200000, CRC(ccf75722) SHA1(f48d21dfc4f82adbb4c9c841a809267cfd028a3d) ) ROM_LOAD32_BYTE( "678a14.13d", 0x000001, 0x200000, CRC(333a1ab4) SHA1(79df4a98b7871eba4157307a7709da8f8b5da39b) ) ROM_LOAD32_BYTE( "678a15.9d", 0x000002, 0x200000, CRC(58b670f8) SHA1(5d4facb00e34de3ad11ed60c19835918a9cf6cb9) ) ROM_LOAD32_BYTE( "678a16.4d", 0x000003, 0x200000, CRC(137b9bff) SHA1(5052c1fa30cc1d6affd78f48d483415dca89d10b) ) ROM_REGION(0x600000, "k054539", 0) /* Sound data */ ROM_LOAD( "678a08.5r", 0x000000, 0x200000, CRC(4aeb61ad) SHA1(ec6872cb2e4776849963f48c1c245ca7697849e0) ) ROM_LOAD( "678a09.3r", 0x200000, 0x200000, CRC(39baef23) SHA1(9f7bda0f9c06eee94703f9ceb06975c8e28338cc) ) ROM_LOAD( "678a10.5n", 0x400000, 0x200000, CRC(0508280e) SHA1(a36c5dc377b0ba597f131bd9dfc6019e7fc2d243) ) ROM_END ROM_START( waveshrk ) ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ ROM_LOAD32_BYTE( "678uab01.20u", 0x000003, 0x080000, CRC(a9b9ceed) SHA1(36f0d18481d7c3e7358e02473e54bc6b52d5c26b) ) /* Program version UAB, USA v1.04 */ ROM_LOAD32_BYTE( "678uab02.17u", 0x000002, 0x080000, CRC(5ed24ac8) SHA1(d659c751558d4f8d89314466a37c04ac2df46879) ) ROM_LOAD32_BYTE( "678uab03.15u", 0x000001, 0x080000, CRC(f4a595e7) SHA1(e05e7ea6613ecf70d8470af5fe0c6a7274c6e45b) ) ROM_LOAD32_BYTE( "678uab04.13u", 0x000000, 0x080000, CRC(fd3320a7) SHA1(03a50a7bba9eb7cdb9f84953d6fb5c09f2d4b2db) ) ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */ ROM_LOAD16_WORD_SWAP( "678a07.19l", 0x000000, 0x020000, CRC(bb3f5875) SHA1(97f80d9b55d4177217b7cd1ba14e8ed2d64376bb) ) ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */ ROM_LOAD32_WORD_SWAP( "685a05.10u", 0x000000, 0x200000, CRC(00e59741) SHA1(d799910d4e85482b0e92a3cc9043f81d97b2fb02) ) ROM_LOAD32_WORD_SWAP( "685a06.8u", 0x000002, 0x200000, CRC(fc98c6a5) SHA1(a84583bb7296fa9e0c284b2ac59e2dc7b2689eee) ) ROM_REGION(0x800000, "gfx1", 0) /* Texture data */ ROM_LOAD32_BYTE( "678a13.18d", 0x000000, 0x200000, CRC(ccf75722) SHA1(f48d21dfc4f82adbb4c9c841a809267cfd028a3d) ) ROM_LOAD32_BYTE( "678a14.13d", 0x000001, 0x200000, CRC(333a1ab4) SHA1(79df4a98b7871eba4157307a7709da8f8b5da39b) ) ROM_LOAD32_BYTE( "678a15.9d", 0x000002, 0x200000, CRC(58b670f8) SHA1(5d4facb00e34de3ad11ed60c19835918a9cf6cb9) ) ROM_LOAD32_BYTE( "678a16.4d", 0x000003, 0x200000, CRC(137b9bff) SHA1(5052c1fa30cc1d6affd78f48d483415dca89d10b) ) ROM_REGION(0x600000, "k054539", 0) /* Sound data */ ROM_LOAD( "678a08.5r", 0x000000, 0x200000, CRC(4aeb61ad) SHA1(ec6872cb2e4776849963f48c1c245ca7697849e0) ) ROM_LOAD( "678a09.3r", 0x200000, 0x200000, CRC(39baef23) SHA1(9f7bda0f9c06eee94703f9ceb06975c8e28338cc) ) ROM_LOAD( "678a10.5n", 0x400000, 0x200000, CRC(0508280e) SHA1(a36c5dc377b0ba597f131bd9dfc6019e7fc2d243) ) ROM_END ROM_START( jetwavej ) ROM_REGION(0x200000, "user1", 0) /* PowerPC program roms */ ROM_LOAD32_BYTE( "678jab01.20u", 0x000003, 0x080000, CRC(fa3da5cc) SHA1(33307e701e6eb28d44e0653ac3f1de47fc17779d) ) /* Program version JAB, JPN v1.04 */ ROM_LOAD32_BYTE( "678jab02.17u", 0x000002, 0x080000, CRC(01c6713e) SHA1(68e27c018f974e820ba2e99d89a743e53faf1e65) ) ROM_LOAD32_BYTE( "678jab03.15u", 0x000001, 0x080000, CRC(21c757cb) SHA1(1de6df8e4c52d40882cbf771ff7215ed7b53f251) ) ROM_LOAD32_BYTE( "678jab04.13u", 0x000000, 0x080000, CRC(fdcc1ecc) SHA1(206cb98a6587cd8e5a9287037d85f392bd2f6e82) ) ROM_REGION(0x20000, "audiocpu", 0) /* M68K program */ ROM_LOAD16_WORD_SWAP( "678a07.19l", 0x000000, 0x020000, CRC(bb3f5875) SHA1(97f80d9b55d4177217b7cd1ba14e8ed2d64376bb) ) ROM_REGION32_BE(0x400000, "user2", 0) /* data roms */ ROM_LOAD32_WORD_SWAP( "685a05.10u", 0x000000, 0x200000, CRC(00e59741) SHA1(d799910d4e85482b0e92a3cc9043f81d97b2fb02) ) ROM_LOAD32_WORD_SWAP( "685a06.8u", 0x000002, 0x200000, CRC(fc98c6a5) SHA1(a84583bb7296fa9e0c284b2ac59e2dc7b2689eee) ) ROM_REGION(0x800000, "gfx1", 0) /* Texture data */ ROM_LOAD32_BYTE( "678a13.18d", 0x000000, 0x200000, CRC(ccf75722) SHA1(f48d21dfc4f82adbb4c9c841a809267cfd028a3d) ) ROM_LOAD32_BYTE( "678a14.13d", 0x000001, 0x200000, CRC(333a1ab4) SHA1(79df4a98b7871eba4157307a7709da8f8b5da39b) ) ROM_LOAD32_BYTE( "678a15.9d", 0x000002, 0x200000, CRC(58b670f8) SHA1(5d4facb00e34de3ad11ed60c19835918a9cf6cb9) ) ROM_LOAD32_BYTE( "678a16.4d", 0x000003, 0x200000, CRC(137b9bff) SHA1(5052c1fa30cc1d6affd78f48d483415dca89d10b) ) ROM_REGION(0x600000, "k054539", 0) /* Sound data */ ROM_LOAD( "678a08.5r", 0x000000, 0x200000, CRC(4aeb61ad) SHA1(ec6872cb2e4776849963f48c1c245ca7697849e0) ) ROM_LOAD( "678a09.3r", 0x200000, 0x200000, CRC(39baef23) SHA1(9f7bda0f9c06eee94703f9ceb06975c8e28338cc) ) ROM_LOAD( "678a10.5n", 0x400000, 0x200000, CRC(0508280e) SHA1(a36c5dc377b0ba597f131bd9dfc6019e7fc2d243) ) ROM_END /*****************************************************************************/ GAME( 1995, midnrun, 0, midnrun, midnrun, midnrun_state, driver_init, ROT0, "Konami", "Midnight Run: Road Fighter 2 (EAA, Euro v1.11)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) GAME( 1995, midnrunj, midnrun, midnrun, midnrun, midnrun_state, driver_init, ROT0, "Konami", "Midnight Run: Road Fighter 2 (JAD, Japan v1.10)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) GAME( 1995, midnruna, midnrun, midnrun, midnrun, midnrun_state, driver_init, ROT0, "Konami", "Midnight Run: Road Fighter 2 (AAA, Asia v1.10)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) GAME( 1996, windheat, 0, midnrun, midnrun, midnrun_state, driver_init, ROT0, "Konami", "Winding Heat (EAA, Euro v2.11)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) GAME( 1996, windheatu,windheat, midnrun, midnrun, midnrun_state, driver_init, ROT0, "Konami", "Winding Heat (UBC, USA v2.22)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) GAME( 1996, windheatj,windheat, midnrun, midnrun, midnrun_state, driver_init, ROT0, "Konami", "Winding Heat (JAA, Japan v2.11)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) GAME( 1996, windheata,windheat, midnrun, midnrun, midnrun_state, driver_init, ROT0, "Konami", "Winding Heat (AAA, Asia v2.11)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) GAME( 1996, jetwave, 0, jetwave, jetwave, jetwave_state, driver_init, ROT0, "Konami", "Jet Wave (EAB, Euro v1.04)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) GAME( 1996, waveshrk, jetwave, jetwave, jetwave, jetwave_state, driver_init, ROT0, "Konami", "Wave Shark (UAB, USA v1.04)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) GAME( 1996, jetwavej, jetwave, jetwave, jetwave, jetwave_state, driver_init, ROT0, "Konami", "Jet Wave (JAB, Japan v1.04)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN )