diff options
Diffstat (limited to 'src/mame/drivers/xyonix.cpp')
-rw-r--r-- | src/mame/drivers/xyonix.cpp | 296 |
1 files changed, 0 insertions, 296 deletions
diff --git a/src/mame/drivers/xyonix.cpp b/src/mame/drivers/xyonix.cpp deleted file mode 100644 index 01d513f4e3c..00000000000 --- a/src/mame/drivers/xyonix.cpp +++ /dev/null @@ -1,296 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:David Haywood -/* Xyonix ********************************************************************* - -driver by David Haywood and Stephh - -Notes about the board: - -Ram is 2x 6264 (near Z80) and 1x 6264 near UM6845. Xtal is verified 16.000MHz, -I can also see another special chip . PHILKO PK8801. chip looks about the same as a -TMS3615 (though i have no idea what the chip actually is). its located next to the -prom, the 2x 256k roms, and the 1x 6264 ram. -Dip SW is 1 x 8-position - -on the PCB is an empty socket. written next to the socket is 68705P3. "oh no" you -say..... well, its unpopulated, so maybe it was never used? (another PCB was -found with the 68705 populated) - - -TODO: -- there are some more unknown commands for the I/O chip - -******************************************************************************/ - -#include "emu.h" -#include "includes/xyonix.h" - -#include "cpu/z80/z80.h" -#include "sound/sn76496.h" -#include "screen.h" -#include "speaker.h" - - -void xyonix_state::machine_start() -{ - save_item(NAME(m_e0_data)); - save_item(NAME(m_credits)); - save_item(NAME(m_coins)); - save_item(NAME(m_prev_coin)); - save_item(NAME(m_nmi_mask)); -} - -void xyonix_state::machine_reset() -{ - m_nmi_mask = false; -} - -WRITE8_MEMBER(xyonix_state::irqack_w) -{ - m_maincpu->set_input_line(0, CLEAR_LINE); -} - -WRITE_LINE_MEMBER(xyonix_state::nmiclk_w) -{ - if (state && m_nmi_mask) - m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); -} - -WRITE8_MEMBER(xyonix_state::nmiack_w) -{ - m_nmi_mask = BIT(data, 0); - if (!m_nmi_mask) - m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); -} - - -/* Inputs ********************************************************************/ - -void xyonix_state::handle_coins(int coin) -{ - static const int coinage_table[4][2] = {{2,3},{2,1},{1,2},{1,1}}; - int tmp = 0; - - //popmessage("Coin %d", m_coin); - - if (coin & 1) // Coin 2 ! - { - tmp = (ioport("DSW")->read() & 0xc0) >> 6; - m_coins++; - if (m_coins >= coinage_table[tmp][0]) - { - m_credits += coinage_table[tmp][1]; - m_coins -= coinage_table[tmp][0]; - } - machine().bookkeeping().coin_lockout_global_w(0); /* Unlock all coin slots */ - machine().bookkeeping().coin_counter_w(1,1); machine().bookkeeping().coin_counter_w(1,0); /* Count slot B */ - } - - if (coin & 2) // Coin 1 ! - { - tmp = (ioport("DSW")->read() & 0x30) >> 4; - m_coins++; - if (m_coins >= coinage_table[tmp][0]) - { - m_credits += coinage_table[tmp][1]; - m_coins -= coinage_table[tmp][0]; - } - machine().bookkeeping().coin_lockout_global_w(0); /* Unlock all coin slots */ - machine().bookkeeping().coin_counter_w(0,1); machine().bookkeeping().coin_counter_w(0,0); /* Count slot A */ - } - - if (m_credits >= 9) - m_credits = 9; -} - - -READ8_MEMBER(xyonix_state::io_r) -{ - int regPC = m_maincpu->pc(); - - if (regPC == 0x27ba) - return 0x88; - - if (regPC == 0x27c2) - return m_e0_data; - - if (regPC == 0x27c7) - { - int coin; - - switch (m_e0_data) - { - case 0x81 : - return ioport("P1")->read() & 0x7f; - case 0x82 : - return ioport("P2")->read() & 0x7f; - case 0x91: - /* check coin inputs */ - coin = ((ioport("P1")->read() & 0x80) >> 7) | ((ioport("P2")->read() & 0x80) >> 6); - if (coin ^ m_prev_coin && coin != 3) - { - if (m_credits < 9) handle_coins(coin); - } - m_prev_coin = coin; - return m_credits; - case 0x92: - return ((ioport("P1")->read() & 0x80) >> 7) | ((ioport("P2")->read() & 0x80) >> 6); - case 0xe0: /* reset? */ - m_coins = 0; - m_credits = 0; - return 0xff; - case 0xe1: - m_credits--; - return 0xff; - case 0xfe: /* Dip Switches 1 to 4 */ - return ioport("DSW")->read() & 0x0f; - case 0xff: /* Dip Switches 5 to 8 */ - return ioport("DSW")->read() >> 4; - } - } - - //logerror ("xyonix_port_e0_r - PC = %04x - port = %02x\n", regPC, m_e0_data); - //popmessage("%02x",m_e0_data); - - return 0xff; -} - -WRITE8_MEMBER(xyonix_state::io_w) -{ - //logerror ("xyonix_port_e0_w %02x - PC = %04x\n", data, m_maincpu->pc()); - m_e0_data = data; -} - -/* Mem / Port Maps ***********************************************************/ - -void xyonix_state::main_map(address_map &map) -{ - map(0x0000, 0xbfff).rom(); - map(0xc000, 0xdfff).ram(); - map(0xe000, 0xffff).ram().w(FUNC(xyonix_state::vidram_w)).share("vidram"); -} - -void xyonix_state::port_map(address_map &map) -{ - map.global_mask(0xff); - map(0x20, 0x20).nopr().w("sn1", FUNC(sn76496_device::write)); /* SN76496 ready signal */ - map(0x21, 0x21).nopr().w("sn2", FUNC(sn76496_device::write)); - map(0x40, 0x40).w(FUNC(xyonix_state::nmiack_w)); - map(0x50, 0x50).w(FUNC(xyonix_state::irqack_w)); - map(0x60, 0x61).nopw(); /* mc6845 */ - map(0xe0, 0xe0).rw(FUNC(xyonix_state::io_r), FUNC(xyonix_state::io_w)); -} - -/* Inputs Ports **************************************************************/ - -static INPUT_PORTS_START( xyonix ) - PORT_START("P1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) /* handled by xyonix_io_r() */ - - PORT_START("P2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) /* handled by xyonix_io_r() */ - - PORT_START("DSW") - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) - PORT_DIPSETTING( 0x03, DEF_STR( Easy ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x01, DEF_STR( Hard ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) // DEF_STR( Very_Hard ) - PORT_DIPNAME( 0x04, 0x00, DEF_STR( Allow_Continue ) ) - PORT_DIPSETTING( 0x04, DEF_STR( No ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) - PORT_SERVICE( 0x08, IP_ACTIVE_LOW ) - PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coin_A ) ) - PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x30, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 2C_3C ) ) - PORT_DIPSETTING( 0x20, DEF_STR( 1C_2C ) ) - PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coin_B ) ) - PORT_DIPSETTING( 0x40, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0xc0, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 2C_3C ) ) - PORT_DIPSETTING( 0x80, DEF_STR( 1C_2C ) ) -INPUT_PORTS_END - -/* GFX Decode ****************************************************************/ - -static const gfx_layout charlayout = -{ - 4,8, - RGN_FRAC(1,2), - 4, - { 0, 4, RGN_FRAC(1,2)+0, RGN_FRAC(1,2)+4 }, - { 3, 2, 1, 0 }, - { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, - 4*16 -}; - -static GFXDECODE_START( gfx_xyonix ) - GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 16 ) -GFXDECODE_END - - -/* MACHINE driver *************************************************************/ - -void xyonix_state::xyonix(machine_config &config) -{ - /* basic machine hardware */ - Z80(config, m_maincpu, 16000000 / 4); /* 4 MHz ? */ - m_maincpu->set_addrmap(AS_PROGRAM, &xyonix_state::main_map); - m_maincpu->set_addrmap(AS_IO, &xyonix_state::port_map); - m_maincpu->set_periodic_int(FUNC(xyonix_state::irq0_line_assert), attotime::from_hz(4*60)); /* ?? controls music tempo */ - - /* video hardware */ - screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); - screen.set_refresh_hz(60); - screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); - screen.set_size(80*4, 32*8); - screen.set_visarea(0, 80*4-1, 0, 28*8-1); - screen.set_screen_update(FUNC(xyonix_state::screen_update)); - screen.set_palette("palette"); - screen.screen_vblank().set(FUNC(xyonix_state::nmiclk_w)); - - GFXDECODE(config, m_gfxdecode, "palette", gfx_xyonix); - PALETTE(config, "palette", FUNC(xyonix_state::xyonix_palette), 256); - - /* sound hardware */ - SPEAKER(config, "mono").front_center(); - - SN76496(config, "sn1", 16000000/4).add_route(ALL_OUTPUTS, "mono", 1.0); - SN76496(config, "sn2", 16000000/4).add_route(ALL_OUTPUTS, "mono", 1.0); -} - -/* ROM Loading ***************************************************************/ - -ROM_START( xyonix ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "xyonix3.bin", 0x00000, 0x10000, CRC(1960a74e) SHA1(5fd7bc31ca2f5f1e114d3d0ccf6554ebd712cbd3) ) - - ROM_REGION( 0x10000, "mcu", 0 ) - ROM_LOAD( "mc68705p3s.e7", 0x00000, 0x780, BAD_DUMP CRC(f60cdd86) SHA1(e18cc598153b3e108942328ee9c5b9f83b034c41) ) // FIXED BITS (xxxxxx0x) - - ROM_REGION( 0x10000, "gfx1", 0 ) - ROM_LOAD( "xyonix1.bin", 0x00000, 0x08000, CRC(3dfa9596) SHA1(52cdbbe18f83cea7248c29588ea3a18c4bb7984f) ) - ROM_LOAD( "xyonix2.bin", 0x08000, 0x08000, CRC(db87343e) SHA1(62bc30cd65b2f8976cd73a0b349a9ccdb3faaad2) ) - - ROM_REGION( 0x0100, "proms", 0 ) - ROM_LOAD( "xyonix.pr", 0x0000, 0x0100, CRC(0012cfc9) SHA1(c7454107a1a8083a370b662c617117b769c0dc1c) ) -ROM_END - -/* GAME drivers **************************************************************/ - -GAME( 1989, xyonix, 0, xyonix, xyonix, xyonix_state, empty_init, ROT0, "Philko", "Xyonix", MACHINE_SUPPORTS_SAVE ) |