// license:BSD-3-Clause // copyright-holders:Pierpaolo Prazzoli, Bryan McPhail, Stephane Humbert, Angelo Salese /*************************************************************************** SNK/Alpha 68000 N based board games derived from alpha68k.cpp TODO: - Super Stingray MCU irq controls timer speed. The MCU has been hooked up but the clock is almost certainly wrong. - GFX region can eventually overflow in jongbou, and in general all three games can probably be run with the same gfx_layout structs ============================================================================ Kyros no Yakata Alpha Denshi, 1986 PCB Layout ---------- Main Board (no PCB number) |----------------------------------------------------------| | | | 0.1T 24MHz | | | | 15.3T 5814 | | PROMG.4R SW1 | | 1| | 16.5T PROMR.5R PROMH.5P 5814 | | 8| | PROMB.6R PROML.6P | | W| | 17.7T 8511 | | A| | 2016 2016 | | Y| | 18.9T 9.9S 8.9R 2016 2016 | | | | | | | | 19.11T 68000 2016 2.10C 4.10A | | 14.12R 12.12N 2016 | | 20.13T 13.12P 11.12M 1.13C 3.13A | |CN | |----------------------------------------------------------| Notes: 68000 clock - 6.000MHz [24/4] 2016 - 2kx8 SRAM 5814 - 2kx8 SRAM CN - 18-pin flat cable connector joining to sound PCB | - ALPHA-INPUT84 custom ceramic module (x2) SW1 - 8-position DIP Switch VSync - 60Hz HSync - 15.20kHz 8511 - Alpha 8511 Microcontroller at location 7C. '8511' is silkscreened on the PCB. Clock input 3.000MHz [24/8] (measured on pin 5). The chip is pin-compatible with Motorola MC68705U3, Motorola MC6805U2 and Hitachi HD6805U1. The 4k MC68705U3 dump in MAME is from a bootleg PCB. Sound Board ----------- SOUND BOARD NO.60MC01 |---------------------| | 40174 324 UPC1181| | 4013 VOL VOL | | YM3014 324 6| | W| | YM2203 AY-3-8910 A| | Y| | AY-3-8910 | | | | DIP28 | | | | 2.1F 2114 | | 2114 | | 1.1D 16MHz | | | | Z80 | |CN | |---------------------| Notes: Z80 clock - 4.000MHz [16/4]. The actual chip is a NEC D780C-1 AY-3-8910 clock - 2.000MHz [16/8] YM2203 clock - 2.000MHz [16/8] YM3014 - Yamaha YM3014 DAC. Clock input 1.33333MHz [16/12] UPC1181 - Power AMP IC 324 - LM324 Quad Op Amp 2114 - 1kx4 SRAM 40xx - 4000-series logic chips CN - 18-pin flat cable connector joining to main PCB DIP28 - Empty socket PCB Pinout ---------- 18-WAY Connector (Main) Parts Solder ----------------- +5V A1 B1 +5V +5V A2 B2 +5V 1P UP A3 B3 2P DOWN 1P DOWN A4 B4 2P RIGHT 1P RIGHT A5 B5 2P LEFT 1P LEFT A6 B6 2P BUTTON 1 1P BUTTON 1 A7 B7 - 1P BUTTON 2 A8 B8 - - A9 B9 COIN 1 1P START A10 B10 COIN 2 2P UP A11 B11 2P BUTTON 2 GREEN A12 B12 - BLUE A13 B13 2P START RED A14 B14 - SYNC A15 B15 - GND A16 B16 GND GND A17 B17 GND GND A18 B18 GND 6-WAY Connector (Sound) Parts Solder ----------------- +12V A1 B1 +12V - A2 B2 - +5V A3 B3 +5V SPK+ A4 B4 SPK+ SPK- A5 B5 GND GND A6 B6 GND ***************************************************************************/ #include "emu.h" #include "includes/alpha68k.h" /* * * Video Section * */ void alpha68k_N_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int c, int d) { for (int offs = 0; offs < 0x400; offs += 0x20) { int mx = m_spriteram[offs + c]; int my = -(mx >> 8) & 0xff; mx &= 0xff; // TODO: not convinced by this if (m_is_super_stingray && mx > 0xf8) mx -= 0x100; if (m_flipscreen) my = 249 - my; for (int i = 0; i < 0x20; i++) { const u16 data = m_spriteram[offs + d + i]; // TODO: not convinced by this either, must be transmask instead of transpen somehow if (data != m_tile_transchar) { u8 color, bank; u16 tile; bank = data >> 10 & 3; tile = data & 0x3ff; if (m_is_super_stingray == true) color = (data >> 7 & 0x18) | (data >> 13 & 7); else { color = m_color_proms[(data >> 1 & 0x1000) | (data & 0xffc) | (data >> 14 & 3)]; bank += ((data >> m_tile_bankshift) & 4); tile += (data >> 3 & 0x400); } // can't be 0xff in super stingray if (color != 0xff) { int fy = ((data & 0x1000) >> 12) ^ m_flipscreen; int fx = m_flipscreen; m_gfxdecode->gfx(bank)->transpen(bitmap,cliprect, tile, color, fx, fy, mx, my, 0); } } if (m_flipscreen) my = (my - 8) & 0xff; else my = (my + 8) & 0xff; } } } u32 alpha68k_N_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { m_palette->set_pen_indirect(0x100, *m_videoram & 0xff); bitmap.fill(0x100, cliprect); draw_sprites(bitmap, cliprect, 2, 0x0800); draw_sprites(bitmap, cliprect, 3, 0x0c00); draw_sprites(bitmap, cliprect, 1, 0x0400); return 0; } /* * * MCU simulation * */ u16 alpha68k_N_state::kyros_alpha_trigger_r(offs_t offset) { /* possible jump codes: - Kyros : 0x22 - Super Stingray : 0x21,0x22,0x23,0x24,0x34,0x37,0x3a,0x3d,0x40,0x43,0x46,0x49 */ static const u8 coinage1[8][2] = {{1,1}, {1,5}, {1,3}, {2,3}, {1,2}, {1,6}, {1,4}, {3,2}}; static const u8 coinage2[8][2] = {{1,1}, {5,1}, {3,1}, {7,1}, {2,1}, {6,1}, {4,1}, {8,1}}; const u16 source = m_shared_ram[offset]; switch (offset) { case 0x22: /* Coin value */ m_shared_ram[0x22] = (source & 0xff00) | (m_credits & 0x00ff); return 0; case 0x29: /* Query microcontroller for coin insert */ m_trigstate++; if ((m_in[2]->read() & 0x3) == 3) m_latch = 0; if ((m_in[2]->read() & 0x1) == 0 && !m_latch) { m_shared_ram[0x29] = (source & 0xff00) | (m_coin_id & 0xff); // coinA m_shared_ram[0x22] = (source & 0xff00) | 0x0; m_latch = 1; m_coinvalue = (~m_in[1]->read() >> 1) & 7; m_deposits1++; if (m_deposits1 == coinage1[m_coinvalue][0]) { m_credits = coinage1[m_coinvalue][1]; m_deposits1 = 0; } else m_credits = 0; } else if ((m_in[2]->read() & 0x2) == 0 && !m_latch) { m_shared_ram[0x29] = (source & 0xff00) | (m_coin_id >> 8); // coinB m_shared_ram[0x22] = (source & 0xff00) | 0x0; m_latch = 1; m_coinvalue = (~m_in[1]->read() >>1 ) & 7; m_deposits2++; if (m_deposits2 == coinage2[m_coinvalue][0]) { m_credits = coinage2[m_coinvalue][1]; m_deposits2 = 0; } else m_credits = 0; } else { if (m_microcontroller_id == 0x00ff) /* Super Stingry */ { if (m_trigstate >= 12 || m_game_id == ALPHA68K_JONGBOU) /* arbitrary value ! */ { m_trigstate = 0; m_microcontroller_data = 0x21; // timer } else m_microcontroller_data = 0x00; } else m_microcontroller_data = 0x00; m_shared_ram[0x29] = (source & 0xff00) | m_microcontroller_data; } return 0; case 0xff: /* Custom check, only used at bootup */ m_shared_ram[0xff] = (source & 0xff00) | m_microcontroller_id; break; } logerror("%04x: Alpha read trigger at %04x\n", m_maincpu->pc(), offset); return 0; /* Values returned don't matter */ } u8 sstingray_state::alpha8511_command_r(offs_t offset) { if (!machine().side_effects_disabled()) m_alpha8511_sync_timer->adjust(attotime::zero, offset << 8 | 0x100ff); return 0; } void sstingray_state::alpha8511_command_w(offs_t offset, u8 data) { m_alpha8511_sync_timer->adjust(attotime::zero, offset << 8 | data); } TIMER_CALLBACK_MEMBER(sstingray_state::alpha8511_sync) { m_microcontroller_data = param & 0xff; m_alpha8511_address = (param >> 8) & 0xff; m_alpha8511_read_mode = BIT(param, 16); if (BIT(m_alpha8511_control, 4)) { m_alpha8511->set_input_line(MCS48_INPUT_IRQ, ASSERT_LINE); m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); } } u8 sstingray_state::alpha8511_bus_r() { return m_microcontroller_data; } void sstingray_state::alpha8511_bus_w(u8 data) { m_microcontroller_data = data; } u8 sstingray_state::alpha8511_address_r() { return m_alpha8511_address; } u8 sstingray_state::alpha8511_rw_r() { return m_alpha8511_read_mode ? 0xff : 0xf7; } void sstingray_state::alpha8511_control_w(u8 data) { if (!BIT(data, 4)) { m_alpha8511->set_input_line(MCS48_INPUT_IRQ, CLEAR_LINE); m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); } if (BIT(data, 5)) m_maincpu->set_input_line(M68K_IRQ_2, HOLD_LINE); if (!BIT(data, 6)) m_shared_ram[m_alpha8511_address] = (m_shared_ram[m_alpha8511_address] & 0xff00) | m_microcontroller_data; m_flipscreen = !BIT(data, 7); m_alpha8511_control = data; } u16 jongbou_state::dial_inputs_r() { u8 inp1 = m_in[3]->read(); u8 inp2 = m_in[4]->read(); inp1 = ((inp1 & 0x01) << 3) + ((inp1 & 0x02) << 1) + ((inp1 & 0x04) >> 1) + ((inp1 & 0x08) >> 3); inp2 = ((inp2 & 0x01) << 3) + ((inp2 & 0x02) << 1) + ((inp2 & 0x04) >> 1) + ((inp2 & 0x08) >> 3); return m_in[0]->read() | inp1 | inp2 << 4; } /* * * Memory Maps * */ void sstingray_state::main_map(address_map &map) { map(0x000000, 0x01ffff).rom(); // main program map(0x020000, 0x020fff).ram().share("shared_ram"); // work RAM map(0x040000, 0x041fff).ram().share("spriteram"); // sprite RAM map(0x060000, 0x060001).ram().share("videoram"); // MSB: watchdog, LSB: BGC map(0x080000, 0x0801ff).rw(FUNC(sstingray_state::alpha8511_command_r), FUNC(sstingray_state::alpha8511_command_w)).umask16(0x00ff); map(0x0c0000, 0x0c0001).portr("IN0"); map(0x0e0000, 0x0e0000).lr8(NAME([this] () -> u8 { return m_in[1]->read(); })).w(m_soundlatch, FUNC(generic_latch_8_device::write)); } void alpha68k_N_state::main_map(address_map &map) { map(0x000000, 0x01ffff).rom(); // main program map(0x020000, 0x020fff).ram().share("shared_ram"); // work RAM map(0x040000, 0x041fff).ram().share("spriteram"); // sprite RAM map(0x060000, 0x060001).ram().share("videoram"); // MSB: watchdog, LSB: BGC map(0x080000, 0x0801ff).rw(FUNC(kyros_state::kyros_alpha_trigger_r), FUNC(kyros_state::alpha_microcontroller_w)); map(0x0c0000, 0x0c0001).portr("IN0"); map(0x0e0000, 0x0e0000).lr8(NAME([this] () -> u8 { return m_in[1]->read(); })).w(m_soundlatch, FUNC(generic_latch_8_device::write)); } void jongbou_state::main_map(address_map &map) { alpha68k_N_state::main_map(map); map(0x0c0000, 0x0c0001).r(FUNC(jongbou_state::dial_inputs_r)); } void alpha68k_N_state::sound_map(address_map &map) { map(0x0000, 0xbfff).rom(); map(0xc000, 0xc7ff).ram(); map(0xe000, 0xe000).r(m_soundlatch, FUNC(generic_latch_8_device::read)); map(0xe002, 0xe002).w(m_soundlatch, FUNC(generic_latch_8_device::clear_w)); map(0xe004, 0xe004).w("dac", FUNC(dac_byte_interface::data_w)); map(0xe006, 0xe00e).nopw(); // soundboard I/O's, ignored /* reference only map(0xe006, 0xe006).nopw(); // NMI: diminishing saw-tooth map(0xe008, 0xe008).nopw(); // NMI: 00 map(0xe00a, 0xe00a).nopw(); // RST38: 20 map(0xe00c, 0xe00c).nopw(); // RST30: 00 on entry map(0xe00e, 0xe00e).nopw(); // RST30: 00,02,ff on exit(0x1d88) */ } void sstingray_state::sound_map(address_map &map) { map(0x0000, 0x7fff).rom(); map(0x8000, 0x87ff).ram(); map(0xc100, 0xc100).r(m_soundlatch, FUNC(generic_latch_8_device::read)); map(0xc102, 0xc102).w(m_soundlatch, FUNC(generic_latch_8_device::clear_w)); map(0xc104, 0xc104).w("dac", FUNC(dac_byte_interface::data_w)); map(0xc106, 0xc10e).nopw(); // soundboard I/O's, ignored } void alpha68k_N_state::sound_iomap(address_map &map) { map.global_mask(0xff); map(0x10, 0x11).w("ym1", FUNC(ym2203_device::write)); map(0x80, 0x80).w("ym2", FUNC(ym2203_device::write_port_w)); map(0x81, 0x81).w("ym2", FUNC(ym2203_device::control_port_w)); map(0x90, 0x90).w("ym3", FUNC(ym2203_device::write_port_w)); map(0x91, 0x91).w("ym3", FUNC(ym2203_device::control_port_w)); } void jongbou_state::sound_map(address_map &map) { map(0x0000, 0x7fff).rom(); map(0x8000, 0x83ff).ram(); } void jongbou_state::sound_iomap(address_map &map) { map.global_mask(0xff); map(0x00, 0x00).w("aysnd", FUNC(ay8910_device::address_w)); map(0x01, 0x01).rw("aysnd", FUNC(ay8910_device::data_r), FUNC(ay8910_device::data_w)); map(0x02, 0x02).w(m_soundlatch, FUNC(generic_latch_8_device::clear_w)); map(0x06, 0x06).nopw(); } /* * * GFX definitions * */ static const gfx_layout sstingry_layout1 = { 8,8, /* 8*8 chars */ 1024, 3, /* 3 bits per pixel */ { 4, 0+(0x10000*4), 4+(0x8000*8) }, { 8*8+3, 8*8+2, 8*8+1, 8*8+0, 3, 2, 1, 0 }, { STEP8(0,8) }, 16*8 /* every char takes 16 consecutive bytes */ }; static const gfx_layout sstingry_layout2 = { 8,8, /* 8*8 chars */ 1024, 3, /* 3 bits per pixel */ { 0, 0+(0x28000*8), 4+(0x28000*8) }, { 8*8+3, 8*8+2, 8*8+1, 8*8+0, 3, 2, 1, 0 }, { STEP8(0,8) }, 16*8 /* every char takes 16 consecutive bytes */ }; static const gfx_layout sstingry_layout3 = { 8,8, /* 8*8 chars */ 1024, 3, /* 3 bits per pixel */ { 0, 0+(0x10000*8), 4+(0x10000*8) }, { 8*8+3, 8*8+2, 8*8+1, 8*8+0, 3, 2, 1, 0 }, { STEP8(0,8) }, 16*8 /* every char takes 16 consecutive bytes */ }; static const gfx_layout kyros_char_layout1 = { 8,8, /* 8*8 chars */ 0x8000/16, 3, /* 3 bits per pixel */ { 4,0x8000*8,0x8000*8+4 }, { 8*8+3, 8*8+2, 8*8+1, 8*8+0, 3, 2, 1, 0 }, { STEP8(0,8) }, 16*8 /* every char takes 16 consecutive bytes */ }; static const gfx_layout kyros_char_layout2 = { 8,8, /* 8*8 chars */ 0x8000/16, 3, /* 3 bits per pixel */ { 0,0x10000*8,0x10000*8+4 }, { 8*8+3, 8*8+2, 8*8+1, 8*8+0, 3, 2, 1, 0 }, { STEP8(0,8) }, 16*8 /* every char takes 16 consecutive bytes */ }; static const gfx_layout jongbou_layout1 = { 8,8, /* 8*8 chars */ 1024, 3, /* 3 bits per pixel */ { 4, 0+0x20000*8, 4+0x20000*8 }, { 8*8+3, 8*8+2, 8*8+1, 8*8+0, 3, 2, 1, 0 }, { STEP8(0,8) }, 16*8 /* every char takes 16 consecutive bytes */ }; static const gfx_layout jongbou_layout2 = { 8,8, /* 8*8 chars */ 1024, 3, /* 3 bits per pixel */ { 0, 0+0x28000*8, 4+0x28000*8 }, { 8*8+3, 8*8+2, 8*8+1, 8*8+0, 3, 2, 1, 0 }, { STEP8(0,8) }, 16*8 /* every char takes 16 consecutive bytes */ }; static const gfx_layout jongbou_layout3 = { 8,8, /* 8*8 chars */ 1024, 3, /* 3 bits per pixel */ { 4+0x8000*8, 0+0x10000*8, 4+0x10000*8 }, { 8*8+3, 8*8+2, 8*8+1, 8*8+0, 3, 2, 1, 0 }, { STEP8(0,8) }, 16*8 /* every char takes 16 consecutive bytes */ }; static const gfx_layout jongbou_layout4 = { 8,8, /* 8*8 chars */ 1024, 3, /* 3 bits per pixel */ { 0x8000*8, 0x18000*8, 4+0x18000*8 }, { 8*8+3, 8*8+2, 8*8+1, 8*8+0, 3, 2, 1, 0 }, { STEP8(0,8) }, 16*8 /* every char takes 16 consecutive bytes */ }; static const gfx_layout jongbou_layout5 = { 8,8, /* 8*8 chars */ 1024, 3, /* 3 bits per pixel */ { 4+0x4000*8, 0+0x24000*8, 4+0x24000*8 }, { 8*8+3, 8*8+2, 8*8+1, 8*8+0, 3, 2, 1, 0 }, { STEP8(0,8) }, 16*8 /* every char takes 16 consecutive bytes */ }; static GFXDECODE_START( gfx_sstingry ) GFXDECODE_ENTRY( "gfx1", 0x00000, sstingry_layout1, 0, 32 ) GFXDECODE_ENTRY( "gfx1", 0x00000, sstingry_layout2, 0, 32 ) GFXDECODE_ENTRY( "gfx1", 0x10000, sstingry_layout1, 0, 32 ) GFXDECODE_ENTRY( "gfx1", 0x10000, sstingry_layout3, 0, 32 ) GFXDECODE_END static GFXDECODE_START( gfx_kyros ) GFXDECODE_ENTRY( "gfx1", 0x00000, kyros_char_layout1, 0, 32 ) GFXDECODE_ENTRY( "gfx1", 0x00000, kyros_char_layout2, 0, 32 ) GFXDECODE_ENTRY( "gfx1", 0x18000, kyros_char_layout1, 0, 32 ) GFXDECODE_ENTRY( "gfx1", 0x18000, kyros_char_layout2, 0, 32 ) GFXDECODE_ENTRY( "gfx1", 0x30000, kyros_char_layout1, 0, 32 ) GFXDECODE_ENTRY( "gfx1", 0x30000, kyros_char_layout2, 0, 32 ) GFXDECODE_ENTRY( "gfx1", 0x48000, kyros_char_layout1, 0, 32 ) GFXDECODE_ENTRY( "gfx1", 0x48000, kyros_char_layout2, 0, 32 ) GFXDECODE_END static GFXDECODE_START( gfx_jongbou ) GFXDECODE_ENTRY( "gfx1", 0, jongbou_layout1, 0, 32 ) GFXDECODE_ENTRY( "gfx1", 0, jongbou_layout2, 0, 32 ) GFXDECODE_ENTRY( "gfx1", 0, jongbou_layout3, 0, 32 ) GFXDECODE_ENTRY( "gfx1", 0, jongbou_layout4, 0, 32 ) GFXDECODE_ENTRY( "gfx1", 0, jongbou_layout5, 0, 32 ) GFXDECODE_END /* * * Input Defs * */ #define ALPHA68K_PLAYER_INPUT_SWAP_LR_LSB( player, button3, start, active ) \ PORT_BIT( 0x0001, active, IPT_JOYSTICK_UP ) PORT_PLAYER(player) \ PORT_BIT( 0x0002, active, IPT_JOYSTICK_DOWN ) PORT_PLAYER(player) \ PORT_BIT( 0x0004, active, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(player) \ PORT_BIT( 0x0008, active, IPT_JOYSTICK_LEFT ) PORT_PLAYER(player) \ PORT_BIT( 0x0010, active, IPT_BUTTON1 ) PORT_PLAYER(player) \ PORT_BIT( 0x0020, active, IPT_BUTTON2 ) PORT_PLAYER(player) \ PORT_BIT( 0x0040, active, button3 ) PORT_PLAYER(player) \ PORT_BIT( 0x0080, active, start ) #define ALPHA68K_PLAYER_INPUT_SWAP_LR_MSB( player, button3, start, active ) \ PORT_BIT( 0x0100, active, IPT_JOYSTICK_UP ) PORT_PLAYER(player) \ PORT_BIT( 0x0200, active, IPT_JOYSTICK_DOWN ) PORT_PLAYER(player) \ PORT_BIT( 0x0400, active, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(player) \ PORT_BIT( 0x0800, active, IPT_JOYSTICK_LEFT ) PORT_PLAYER(player) \ PORT_BIT( 0x1000, active, IPT_BUTTON1 ) PORT_PLAYER(player) \ PORT_BIT( 0x2000, active, IPT_BUTTON2 ) PORT_PLAYER(player) \ PORT_BIT( 0x4000, active, button3 ) PORT_PLAYER(player) \ PORT_BIT( 0x8000, active, start ) static INPUT_PORTS_START( sstingry ) PORT_START("IN0") ALPHA68K_PLAYER_INPUT_SWAP_LR_LSB( 1, IPT_UNKNOWN, IPT_START1, IP_ACTIVE_HIGH ) ALPHA68K_PLAYER_INPUT_SWAP_LR_MSB( 2, IPT_UNKNOWN, IPT_START2, IP_ACTIVE_HIGH ) PORT_START("IN1") PORT_DIPNAME( 0x01, 0x01, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:!1") PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x01, DEF_STR( On ) ) PORT_DIPNAME( 0x0e, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:!2,!3,!4") PORT_DIPSETTING( 0x00, "A 1C/1C B 1C/1C" ) PORT_DIPSETTING( 0x02, "A 1C/2C B 2C/1C" ) PORT_DIPSETTING( 0x04, "A 1C/3C B 3C/1C" ) PORT_DIPSETTING( 0x06, "A 1C/4C B 4C/1C" ) PORT_DIPSETTING( 0x08, "A 1C/5C B 5C/1C" ) PORT_DIPSETTING( 0x0a, "A 1C/6C B 6C/1C" ) PORT_DIPSETTING( 0x0c, "A 2C/3C B 7C/1C" ) PORT_DIPSETTING( 0x0e, "A 3C/2C B 8C/1C" ) PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:!5,!6") PORT_DIPSETTING( 0x00, "3" ) PORT_DIPSETTING( 0x10, "4" ) PORT_DIPSETTING( 0x20, "5" ) PORT_DIPSETTING( 0x30, "6" ) PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW1:!7") PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x40, DEF_STR( On ) ) PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:!8") PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x80, DEF_STR( Cocktail ) ) ALPHA68K_MCU INPUT_PORTS_END static INPUT_PORTS_START( kyros ) PORT_START("IN0") ALPHA68K_PLAYER_INPUT_SWAP_LR_LSB( 1, IPT_UNKNOWN, IPT_START1, IP_ACTIVE_HIGH ) ALPHA68K_PLAYER_INPUT_SWAP_LR_MSB( 2, IPT_UNKNOWN, IPT_START2, IP_ACTIVE_HIGH ) PORT_START("IN1") /* dipswitches */ PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:!1") PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x0e, 0x0e, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:2,3,4") PORT_DIPSETTING( 0x0e, "A 1C/1C B 1C/1C" ) PORT_DIPSETTING( 0x06, "A 1C/2C B 2C/1C" ) PORT_DIPSETTING( 0x0a, "A 1C/3C B 3C/1C" ) PORT_DIPSETTING( 0x02, "A 1C/4C B 4C/1C" ) PORT_DIPSETTING( 0x0c, "A 1C/5C B 5C/1C" ) PORT_DIPSETTING( 0x04, "A 1C/6C B 6C/1C" ) PORT_DIPSETTING( 0x08, "A 2C/3C B 7C/1C" ) PORT_DIPSETTING( 0x00, "A 3C/2C B 8C/1C" ) PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:!5,!6") PORT_DIPSETTING( 0x00, "3" ) PORT_DIPSETTING( 0x10, "4" ) PORT_DIPSETTING( 0x20, "5" ) PORT_DIPSETTING( 0x30, "6" ) PORT_DIPNAME( 0x40, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:!7") PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x40, DEF_STR( Hard ) ) PORT_DIPNAME( 0x80, 0x80, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:!8") PORT_DIPSETTING( 0x80, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) ALPHA68K_MCU INPUT_PORTS_END static INPUT_PORTS_START( jongbou ) PORT_START("IN0") PORT_BIT( 0x0fff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_START1 ) PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_START2 ) PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_START("IN1") PORT_DIPNAME( 0x01, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:!1") PORT_DIPSETTING( 0x00, "3" ) PORT_DIPSETTING( 0x01, "5" ) PORT_DIPNAME( 0x02, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:!2") PORT_DIPSETTING( 0x00, "A 1C/1C B 1C/5C" ) PORT_DIPSETTING( 0x02, "A 1C/2C B 1C/3C" ) PORT_DIPNAME( 0x04, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:!3") PORT_DIPSETTING( 0x00, "30000 - 60000" ) PORT_DIPSETTING( 0x04, "Every 30000" ) PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:!4") PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPNAME( 0x30, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:!5,!6") PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x20, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x10, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x30, DEF_STR( Very_Hard ) ) PORT_DIPNAME( 0x40, 0x40, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:!7") PORT_DIPSETTING( 0x40, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) PORT_DIPNAME( 0x80, 0x80, "Show Girls" ) PORT_DIPLOCATION("SW1:!8") PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) PORT_DIPSETTING( 0x80, DEF_STR( On ) ) ALPHA68K_MCU PORT_START("IN3") PORT_BIT( 0x0f, 0, IPT_DIAL ) PORT_SENSITIVITY(50) PORT_KEYDELTA(20) PORT_START("IN4") PORT_BIT( 0x0f, 0, IPT_DIAL ) PORT_MINMAX(0, 15) PORT_SENSITIVITY(50) PORT_KEYDELTA(20) PORT_PLAYER(2) INPUT_PORTS_END /* * * Machine Config * */ void alpha68k_N_state::base_config(machine_config &config) { MCFG_MACHINE_START_OVERRIDE(alpha68k_N_state,common) MCFG_MACHINE_RESET_OVERRIDE(alpha68k_N_state,common) GENERIC_LATCH_8(config, m_soundlatch); SPEAKER(config, "speaker").front_center(); } void alpha68k_N_state::video_config(machine_config &config, u8 tile_transchar, u8 tile_bankshift, bool is_super_stingray) { /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); set_screen_raw_params(config); m_screen->set_screen_update(FUNC(alpha68k_N_state::screen_update)); m_screen->set_palette(m_palette); PALETTE(config, m_palette, FUNC(alpha68k_N_state::palette_init), 256 + 1, 256); m_tile_transchar = tile_transchar; m_tile_bankshift = tile_bankshift; m_is_super_stingray = is_super_stingray; } void sstingray_state::sstingry(machine_config &config) { base_config(config); /* basic machine hardware */ M68000(config, m_maincpu, 6000000); /* 24MHz/4? */ m_maincpu->set_addrmap(AS_PROGRAM, &sstingray_state::main_map); m_maincpu->set_vblank_int("screen", FUNC(sstingray_state::irq1_line_hold)); //m_maincpu->set_periodic_int(FUNC(sstingray_state::irq2_line_hold), attotime::from_hz(60)); // MCU irq Z80(config, m_audiocpu, 3579545); m_audiocpu->set_addrmap(AS_PROGRAM, &sstingray_state::sound_map); m_audiocpu->set_addrmap(AS_IO, &sstingray_state::sound_iomap); m_audiocpu->set_vblank_int("screen", FUNC(sstingray_state::irq0_line_hold)); m_audiocpu->set_periodic_int(FUNC(sstingray_state::nmi_line_pulse), attotime::from_hz(4000)); I8748(config, m_alpha8511, 9263750); /* 9.263750 MHz(?) oscillator, divided by 3*5 internally */ m_alpha8511->bus_in_cb().set(FUNC(sstingray_state::alpha8511_bus_r)); m_alpha8511->bus_out_cb().set(FUNC(sstingray_state::alpha8511_bus_w)); m_alpha8511->p1_in_cb().set(FUNC(sstingray_state::alpha8511_address_r)); m_alpha8511->p2_in_cb().set(FUNC(sstingray_state::alpha8511_rw_r)); m_alpha8511->p2_out_cb().set(FUNC(sstingray_state::alpha8511_control_w)); m_alpha8511->t0_in_cb().set_ioport("IN2").bit(0); m_alpha8511->t1_in_cb().set_ioport("IN2").bit(1); GFXDECODE(config, m_gfxdecode, m_palette, gfx_sstingry); video_config(config, 0x40, 0, true); /* sound hardware */ ym2203_device &ym1(YM2203(config, "ym1", 3000000)); ym1.add_route(ALL_OUTPUTS, "speaker", 0.35); ym2203_device &ym2(YM2203(config, "ym2", 3000000)); ym2.add_route(ALL_OUTPUTS, "speaker", 0.35); ym2203_device &ym3(YM2203(config, "ym3", 3000000)); ym3.add_route(ALL_OUTPUTS, "speaker", 0.5); DAC_8BIT_R2R(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.75); // unknown DAC voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0)); vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); } void kyros_state::kyros(machine_config &config) { base_config(config); /* basic machine hardware */ M68000(config, m_maincpu, 24_MHz_XTAL / 4); /* Verified on bootleg PCB */ m_maincpu->set_addrmap(AS_PROGRAM, &kyros_state::main_map); m_maincpu->set_vblank_int("screen", FUNC(kyros_state::irq1_line_hold)); m_maincpu->set_periodic_int(FUNC(kyros_state::irq2_line_hold), attotime::from_hz(60)); // MCU irq Z80(config, m_audiocpu, 24_MHz_XTAL / 6); /* Verified on bootleg PCB */ m_audiocpu->set_addrmap(AS_PROGRAM, &kyros_state::sound_map); m_audiocpu->set_addrmap(AS_IO, &kyros_state::sound_iomap); m_audiocpu->set_vblank_int("screen", FUNC(kyros_state::irq0_line_hold)); m_audiocpu->set_periodic_int(FUNC(kyros_state::nmi_line_pulse), attotime::from_hz(4000)); /* video hardware */ video_config(config, 0x20, 13, false); GFXDECODE(config, m_gfxdecode, m_palette, gfx_kyros); /* sound hardware */ ym2203_device &ym1(YM2203(config, "ym1", 24_MHz_XTAL / 12)); /* Verified on bootleg PCB */ ym1.add_route(ALL_OUTPUTS, "speaker", 0.35); ym2203_device &ym2(YM2203(config, "ym2", 24_MHz_XTAL / 12)); /* Verified on bootleg PCB */ ym2.add_route(ALL_OUTPUTS, "speaker", 0.35); ym2203_device &ym3(YM2203(config, "ym3", 24_MHz_XTAL / 12)); /* Verified on bootleg PCB */ ym3.add_route(ALL_OUTPUTS, "speaker", 0.9); DAC_8BIT_R2R(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.75); // unknown DAC voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0)); vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); } void jongbou_state::jongbou(machine_config &config) { base_config(config); /* basic machine hardware */ M68000(config, m_maincpu, 8000000); m_maincpu->set_addrmap(AS_PROGRAM, &jongbou_state::main_map); m_maincpu->set_vblank_int("screen", FUNC(jongbou_state::irq1_line_hold)); m_maincpu->set_periodic_int(FUNC(jongbou_state::irq2_line_hold), attotime::from_hz(60*16)); // MCU irq Z80(config, m_audiocpu, 4000000); m_audiocpu->set_addrmap(AS_PROGRAM, &jongbou_state::sound_map); m_audiocpu->set_addrmap(AS_IO, &jongbou_state::sound_iomap); m_audiocpu->set_periodic_int(FUNC(jongbou_state::irq0_line_hold), attotime::from_hz(160*60)); /* video hardware */ video_config(config, 0x20, 11, false); GFXDECODE(config, m_gfxdecode, m_palette, gfx_jongbou); /* sound hardware */ ay8910_device &aysnd(AY8910(config, "aysnd", 2000000)); aysnd.port_a_read_callback().set(m_soundlatch, FUNC(generic_latch_8_device::read)); aysnd.add_route(ALL_OUTPUTS, "speaker", 0.65); } ROM_START( sstingry ) ROM_REGION( 0x20000, "maincpu", 0 ) /* 68000 code */ ROM_LOAD16_BYTE( "ss_05.rom", 0x0000, 0x4000, CRC(bfb28d53) SHA1(64a1b8627529ed13074bb949cb104077eb3eac1f) ) ROM_LOAD16_BYTE( "ss_07.rom", 0x0001, 0x4000, CRC(eb1b65c5) SHA1(cffc4df82b7950358dd28f6a492e0aefaff73048) ) ROM_LOAD16_BYTE( "ss_04.rom", 0x8000, 0x4000, CRC(2e477a79) SHA1(0af9238979c8a740ba49776cd65ffbc024339621) ) ROM_LOAD16_BYTE( "ss_06.rom", 0x8001, 0x4000, CRC(597620cb) SHA1(5549df4843e029df17ce5de2159cc82bd985804b) ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound cpu */ ROM_LOAD( "ss_01.rom", 0x0000, 0x4000, CRC(fef09a92) SHA1(77b6aded1eed1bd5e6ffb25b56b62b10b7b9a304) ) ROM_LOAD( "ss_02.rom", 0x4000, 0x4000, CRC(ab4e8c01) SHA1(d96e7f97945fff48fb7b4661fdb575ac7ff77445) ) ROM_REGION( 0x0400, "alpha8511", 0 ) /* 8748 MCU code */ // Was this dumped from a bootleg? The original "ALPHA-8511" MCU appears to be some sort of Hitachi part. ROM_LOAD( "d8748.bin", 0x0000, 0x0400, CRC(7fcbfc30) SHA1(6d087a3d44e475b6c8260a5134952097f26459b7) ) ROM_REGION( 0x60000, "gfx1", 0 ) ROM_LOAD( "ss_12.rom", 0x00000, 0x4000, CRC(74caa9e9) SHA1(9f0874b2fcdf45acb941bd56b44bf2b9b08641e9) ) ROM_LOAD( "ss_08.rom", 0x08000, 0x4000, CRC(32368925) SHA1(af26f73d33936410063de3164ec80f45bed487c7) ) ROM_LOAD( "ss_13.rom", 0x10000, 0x4000, CRC(13da6203) SHA1(afa778c26da1adfdc8b2e2a1c7b2b46944b5d008) ) ROM_LOAD( "ss_10.rom", 0x18000, 0x4000, CRC(2903234a) SHA1(552295ec60469227883eafb6756c86abc20455b5) ) ROM_LOAD( "ss_11.rom", 0x20000, 0x4000, CRC(d134302e) SHA1(4c020ff41458c738596ab7a094d4a33a6dda64bf) ) ROM_LOAD( "ss_09.rom", 0x28000, 0x4000, CRC(6f9d938a) SHA1(eb6934f8eaa7b22441ec4470280f228fe5f134a3) ) ROM_REGION( 0x300, "proms", 0 ) ROM_LOAD( "ic92", 0x0000, 0x0100, CRC(e7ce1179) SHA1(36835c46c1c3f820df39c59c16c362db07b32dc9) ) ROM_LOAD( "ic93", 0x0100, 0x0100, CRC(9af8a375) SHA1(abb8b094a2df41acea688f87004207dc35233db5) ) ROM_LOAD( "ic91", 0x0200, 0x0100, CRC(c3965079) SHA1(6b1f22afd2a849f0003ddcad344079e8043681f9) ) ROM_REGION( 0x200, "clut_proms", 0 ) ROM_LOAD( "ssprom2.bin", 0x0100, 0x0100, CRC(c2205b71) SHA1(a7db60ac7d559fe53a35264fab17f1d5e48d3f10) ) ROM_LOAD( "ssprom1.bin", 0x0000, 0x0100, CRC(1003186c) SHA1(e50b60036d6b32a4d524c92d35c4d9901ee7ec0e) ) ROM_END ROM_START( kyros ) ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD16_BYTE( "2.10c", 0x00000, 0x4000, CRC(4bd030b1) SHA1(e503dae8e12995ab0a551022a848a62315908e8b) ) ROM_CONTINUE ( 0x10000, 0x4000 ) ROM_LOAD16_BYTE( "1.13c", 0x00001, 0x4000, CRC(75cfbc5e) SHA1(2a70c56fd7192279157df8294743038a7ed7e68d) ) ROM_CONTINUE ( 0x10001, 0x4000 ) ROM_LOAD16_BYTE( "4.10b", 0x08000, 0x4000, CRC(be2626c2) SHA1(c3b01ec4b65172560a993b37421df6a61b780e43) ) ROM_CONTINUE ( 0x18000, 0x4000 ) ROM_LOAD16_BYTE( "3.13b", 0x08001, 0x4000, CRC(fb25e71a) SHA1(fab8fcbd2c5a8600d6e8577de4875e409cad723b) ) ROM_CONTINUE ( 0x18001, 0x4000 ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU */ ROM_LOAD( "2s.1f", 0x00000, 0x4000, CRC(800ceb27) SHA1(4daa1b8adcad7a90cfd5d20704a7c431673c4995) ) ROM_LOAD( "1s.1d", 0x04000, 0x8000, CRC(87d3e719) SHA1(4b8b1b600c7c1de3a77030001e7e6f0ff118f294) ) // not hooked up yet ROM_REGION( 0x1000, "mcu", 0 ) ROM_LOAD( "kyros_68705u3.bin", 0x0000, 0x1000, CRC(c20880b7) SHA1(b041c36cbc4f348d74e0548df5cb14727f2d353b) ) // this one is from a bootleg PCB, program code *might* be compatible. ROM_LOAD( "kyros_mcu.bin", 0x0800, 0x0800, BAD_DUMP CRC(3a902a19) SHA1(af1be8894c899b27b1106663ffaf2ab43fa1cdaa) ) // original MCU? (HD6805U1) zero-page ROM not dumped ROM_REGION( 0x60000, "gfx1", 0 ) ROM_LOAD( "8.9pr", 0x00000, 0x8000, CRC(c5290944) SHA1(ec97482dc59220002780ae4d02be4cd172cf65ac) ) ROM_LOAD( "11.11m", 0x08000, 0x8000, CRC(fbd44f1e) SHA1(d095544ea76674a7ad17c1b8c88614e65890281c) ) ROM_LOAD( "12.11n", 0x10000, 0x8000, CRC(10fed501) SHA1(71c0b4b94f86046745105307938f6e2c5661e2a1) ) ROM_LOAD( "9.9s", 0x18000, 0x8000, CRC(dd40ca33) SHA1(91a1d8b6b69fb0d27ed315cd2591f352360bc8e7) ) ROM_LOAD( "13.11p", 0x20000, 0x8000, CRC(e6a02030) SHA1(0de58f8cc69dc76d4b0a45fba04972634a4021a6) ) ROM_LOAD( "14.11r", 0x28000, 0x8000, CRC(722ad23a) SHA1(0e1be976c5a406e33236def5a0dce73911ebac28) ) ROM_LOAD( "15.3t", 0x30000, 0x8000, CRC(045fdda4) SHA1(ac25368e446e6dcfb3ed244e7d6d699f917c202d) ) ROM_LOAD( "17.7t", 0x38000, 0x8000, CRC(7618ec00) SHA1(7346ba41fd2b04e404225726ede2e42e62ca7901) ) ROM_LOAD( "18.9t", 0x40000, 0x8000, CRC(0ee74171) SHA1(1fda8a1066eb7dafeaeffebfe718b408b34f1767) ) ROM_LOAD( "16.5t", 0x48000, 0x8000, CRC(2cf14824) SHA1(07f6b232c4ca6c42b3f75443b0328653f5a3f71d) ) ROM_LOAD( "19.11t", 0x50000, 0x8000, CRC(4f336306) SHA1(83e0c021d2732d3199c70ac433a31863075a5a72) ) ROM_LOAD( "20.13t", 0x58000, 0x8000, CRC(a165d06b) SHA1(ef7f38a71c2f3fc836b28f0eac1c14a3877f0802) ) ROM_REGION( 0x300, "proms", 0 ) ROM_LOAD( "mb7114l.5r", 0x000, 0x100, CRC(3628bf36) SHA1(33b7b873a6e5da59f535d754f8c8257c0f4d0a31) ) ROM_LOAD( "mb7114l.4r", 0x100, 0x100, CRC(850704e4) SHA1(8a9da9efc7bc6a037d4cd27152b853a7839ccd67) ) ROM_LOAD( "mb7114l.6r", 0x200, 0x100, CRC(a54f60d7) SHA1(af039dee847913cb79f85d7abf4846322bba2e5b) ) ROM_REGION( 0x200, "clut_proms", 0 ) ROM_LOAD( "mb7114l.5p", 0x100, 0x100, CRC(1cc53765) SHA1(2b665f3e24ddb3ab591273f027ff7740f1c97e27) ) ROM_LOAD( "mb7114l.6p", 0x000, 0x100, CRC(b0d6971f) SHA1(4aa2e9a89f9ea7487433e54ef4aa95a632477c4f) ) ROM_REGION( 0x2000, "color_proms", 0 ) ROM_LOAD( "0.1t", 0x0000,0x2000, CRC(5d0acb4c) SHA1(52fcdcb2bf6d6ada04aa447b5526c39848bf587f) ) ROM_END ROM_START( kyrosj ) ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD16_BYTE( "2j.10c",0x00000, 0x4000, CRC(b324c11b) SHA1(9330ee0db8555a3623118c7bc5363b4f6fa87dbc) ) ROM_CONTINUE ( 0x10000, 0x4000 ) ROM_LOAD16_BYTE( "1j.13c",0x00001, 0x4000, CRC(8496241b) SHA1(474cdce735dcc2ff2111ae2f4cd11c0d27a4b4fc) ) ROM_CONTINUE ( 0x10001, 0x4000 ) ROM_LOAD16_BYTE( "4.10a", 0x08000, 0x4000, CRC(0187f59d) SHA1(3bc1b811cb29aa33c38bc8c76e066c8b37104167) ) ROM_CONTINUE ( 0x18000, 0x4000 ) ROM_LOAD16_BYTE( "3.13a", 0x08001, 0x4000, CRC(ab97941d) SHA1(014a55540e1777de5bee23e59773dbbd7efa8f91) ) ROM_CONTINUE ( 0x18001, 0x4000 ) ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU */ ROM_LOAD( "2s.1f", 0x00000, 0x4000, CRC(800ceb27) SHA1(4daa1b8adcad7a90cfd5d20704a7c431673c4995) ) ROM_LOAD( "1s.1d", 0x04000, 0x8000, CRC(87d3e719) SHA1(4b8b1b600c7c1de3a77030001e7e6f0ff118f294) ) ROM_REGION( 0x1000, "mcu", 0 ) // these comes from original set ROM_LOAD( "kyros_68705u3.bin", 0x0000, 0x1000, BAD_DUMP CRC(c20880b7) SHA1(b041c36cbc4f348d74e0548df5cb14727f2d353b) ) // this one is from a bootleg PCB, program code *might* be compatible. ROM_LOAD( "kyros_mcu.bin", 0x0800, 0x0800, BAD_DUMP CRC(3a902a19) SHA1(af1be8894c899b27b1106663ffaf2ab43fa1cdaa) ) // original MCU? (HD6805U1) ROM_REGION( 0x60000, "gfx1", 0 ) ROM_LOAD( "8.9r", 0x00000, 0x8000, CRC(d8203284) SHA1(7dede410239be6b674644fa76c91dd01837f841f) ) ROM_LOAD( "11.12m", 0x08000, 0x8000, CRC(a2f9738c) SHA1(31be81274bf70674bf0c32fcddbacf0f58d8f897) ) ROM_LOAD( "12.11n", 0x10000, 0x8000, CRC(10fed501) SHA1(71c0b4b94f86046745105307938f6e2c5661e2a1) ) ROM_LOAD( "9j.9s", 0x18000, 0x8000, CRC(3e725349) SHA1(79c431d83a0f0d5e0d69086f54f6e60a42b69e14) ) ROM_LOAD( "13.11p", 0x20000, 0x8000, CRC(e6a02030) SHA1(0de58f8cc69dc76d4b0a45fba04972634a4021a6) ) ROM_LOAD( "14.12r", 0x28000, 0x8000, CRC(39d07db9) SHA1(05c0785eea29bc6329892f1e8f0bd37327163080) ) ROM_LOAD( "15.3t", 0x30000, 0x8000, CRC(045fdda4) SHA1(ac25368e446e6dcfb3ed244e7d6d699f917c202d) ) ROM_LOAD( "17.7t", 0x38000, 0x8000, CRC(7618ec00) SHA1(7346ba41fd2b04e404225726ede2e42e62ca7901) ) ROM_LOAD( "18.9t", 0x40000, 0x8000, CRC(0ee74171) SHA1(1fda8a1066eb7dafeaeffebfe718b408b34f1767) ) ROM_LOAD( "16j.5t", 0x48000, 0x8000, CRC(e1566679) SHA1(3653c3160798bea203e1c7713043729b356a7358) ) ROM_LOAD( "19.11t", 0x50000, 0x8000, CRC(4f336306) SHA1(83e0c021d2732d3199c70ac433a31863075a5a72) ) ROM_LOAD( "20j.13t",0x58000, 0x8000, CRC(0624b4c0) SHA1(a8ebdb1f9b7fd0b78102b54523e8680aaa8bcf42) ) ROM_REGION( 0x300, "proms", 0 ) ROM_LOAD( "mb7114l.5r", 0x000, 0x100, CRC(3628bf36) SHA1(33b7b873a6e5da59f535d754f8c8257c0f4d0a31) ) ROM_LOAD( "mb7114l.4r", 0x100, 0x100, CRC(850704e4) SHA1(8a9da9efc7bc6a037d4cd27152b853a7839ccd67) ) ROM_LOAD( "mb7114l.6r", 0x200, 0x100, CRC(a54f60d7) SHA1(af039dee847913cb79f85d7abf4846322bba2e5b) ) ROM_REGION( 0x200, "clut_proms", 0 ) ROM_LOAD( "mb7114l.5p", 0x100, 0x100, CRC(1cc53765) SHA1(2b665f3e24ddb3ab591273f027ff7740f1c97e27) ) ROM_LOAD( "mb7114l.6p", 0x000, 0x100, CRC(b0d6971f) SHA1(4aa2e9a89f9ea7487433e54ef4aa95a632477c4f) ) ROM_REGION( 0x2000, "color_proms", 0 ) ROM_LOAD( "0j.1t", 0x0000,0x2000, CRC(a34ecb29) SHA1(60a0b0cfcd2d9830bc112774bac700ded40d4afb) ) ROM_END ROM_START( jongbou ) ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD16_BYTE( "p2.a13", 0x00000, 0x10000, CRC(ee59e67a) SHA1(d73f15994879c645a8021dcd4f53948bcbd0748e) ) ROM_LOAD16_BYTE( "p1.a15", 0x00001, 0x10000, CRC(1ab6803e) SHA1(a217138332d61b8f5996ead0280c970481db9abe) ) ROM_REGION( 0x10000, "audiocpu", 0 ) ROM_LOAD( "p7.i1", 0x00000, 0x8000, CRC(88d74794) SHA1(98dbbb4d88c1e96a0e251e39ef43b02bd68e0bba) ) ROM_REGION( 0x10000, "mcu", 0 ) ROM_LOAD( "alpha.mcu", 0x000, 0x1000, NO_DUMP ) ROM_REGION( 0x30000, "gfx1", 0 ) ROM_LOAD( "p6.l15", 0x00000, 0x10000, CRC(1facee65) SHA1(6c98338c616e53106960063d0d31483131b492b0) ) ROM_LOAD( "p5.k15", 0x10000, 0x10000, CRC(db0ad6bb) SHA1(c2ce0e78a4be9314f4f14ea87f521a79bab3697c) ) ROM_LOAD( "p4.j15", 0x20000, 0x10000, CRC(56842cfa) SHA1(141ed992332540487cec951eab61c18be994b618) ) ROM_REGION( 0x300, "proms", 0 ) ROM_LOAD( "r.k2", 0x0000, 0x0100, CRC(0563235a) SHA1(c337a9a15c1a27012a963fc4e1345605aaa1401f) ) ROM_LOAD( "g.k1", 0x0100, 0x0100, CRC(81fc51f2) SHA1(92df86898a1cc1fa2faf620466737f4e1cf83a58) ) ROM_LOAD( "b.k3", 0x0200, 0x0100, CRC(6dfeba56) SHA1(abf569c400dc4366a0c7e483dbb672c089692c7e) ) ROM_REGION( 0x200, "clut_proms", 0 ) ROM_LOAD( "h.l9", 0x0100, 0x0100, CRC(e6e93b0b) SHA1(f64ff63699451910982a1a44c94ccd2c18fd389e) ) ROM_LOAD( "l.l10", 0x0000, 0x0100, CRC(51676dac) SHA1(685d14f448501a63cc9fa063f65842caddad8f39) ) ROM_REGION( 0x2000, "color_proms", 0 ) ROM_LOAD( "p3.i15", 0x0000, 0x2000, CRC(8c09cd2a) SHA1(317764e0f5af29e78fd764bdf28579bf6be5630f) ) ROM_END void sstingray_state::init_sstingry() { m_invert_controls = 0; m_microcontroller_id = 0x00ff; m_coin_id = 0x22 | (0x22 << 8); m_game_id = 0; m_alpha8511_sync_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sstingray_state::alpha8511_sync), this)); save_item(NAME(m_alpha8511_address)); save_item(NAME(m_alpha8511_control)); save_item(NAME(m_alpha8511_read_mode)); } void kyros_state::init_kyros() { m_invert_controls = 0; m_microcontroller_id = 0x0012; m_coin_id = 0x22 | (0x22 << 8); m_game_id = ALPHA68K_KYROS; } void jongbou_state::init_jongbou() { m_invert_controls = 0; m_microcontroller_id = 0x00ff; m_coin_id = 0x23 | (0x24 << 8); m_game_id = ALPHA68K_JONGBOU; } GAME( 1986, sstingry, 0, sstingry, sstingry, sstingray_state, init_sstingry, ROT90, "Alpha Denshi Co.", "Super Stingray (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) GAME( 1987, kyros, 0, kyros, kyros, kyros_state, init_kyros, ROT90, "Alpha Denshi Co. (World Games Inc. license)", "Kyros", MACHINE_SUPPORTS_SAVE ) GAME( 1986, kyrosj, kyros, kyros, kyros, kyros_state, init_kyros, ROT90, "Alpha Denshi Co.", "Kyros no Yakata (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1987, jongbou, 0, jongbou, jongbou, jongbou_state, init_jongbou, ROT90, "SNK", "Mahjong Block Jongbou (Japan)", MACHINE_SUPPORTS_SAVE )