diff options
Diffstat (limited to 'src/mame/drivers/go2000.cpp')
-rw-r--r-- | src/mame/drivers/go2000.cpp | 394 |
1 files changed, 0 insertions, 394 deletions
diff --git a/src/mame/drivers/go2000.cpp b/src/mame/drivers/go2000.cpp deleted file mode 100644 index 6be6e18b51e..00000000000 --- a/src/mame/drivers/go2000.cpp +++ /dev/null @@ -1,394 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:David Haywood -/* - -Go 2000 - Korean Card game - -Newer PCB, very sparse with newer surface mounted CPUs - -MC68EC000FU10 -Z84C0006FEC -TM29F550ZX -OSC: 32.000MHz -2 8-way Dipswitch banks -Ram: - 2 UM61256FK-15 (near 3 & 4 (68k program roms)) - 3 Windbond W24257AK-15 (near TM29F550ZX) - 2 UM61256AK-15 (near Z80) - -P1, P2 & P3 4-pin connectors (unknown purpose) - -2008-08: -Added Dips and Dip locations based on Service Mode. - -TODO: -- Merge this driver with SunA16 driver. - -Notes: -- Maybe SA stands for SunA? The z80 memory map matches the one seen in Ultra Balloon, - and the only difference stands in the DAC used. And the sprite chip is the same as - the one used in SunA16 driver as well. - -*/ - -#include "emu.h" -#include "cpu/m68000/m68000.h" -#include "cpu/z80/z80.h" -#include "machine/gen_latch.h" -#include "sound/dac.h" -#include "sound/volt_reg.h" -#include "emupal.h" -#include "screen.h" -#include "speaker.h" - - -class go2000_state : public driver_device -{ -public: - go2000_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_videoram(*this, "videoram"), - m_videoram2(*this, "videoram2"), - m_maincpu(*this, "maincpu"), - m_soundcpu(*this, "soundcpu"), - m_gfxdecode(*this, "gfxdecode"), - m_screen(*this, "screen"), - m_palette(*this, "palette"), - m_soundlatch(*this, "soundlatch") - { } - - void go2000(machine_config &config); - -private: - /* memory pointers */ - required_shared_ptr<uint16_t> m_videoram; - required_shared_ptr<uint16_t> m_videoram2; - - /* devices */ - required_device<cpu_device> m_maincpu; - required_device<cpu_device> m_soundcpu; - required_device<gfxdecode_device> m_gfxdecode; - required_device<screen_device> m_screen; - required_device<palette_device> m_palette; - required_device<generic_latch_8_device> m_soundlatch; - - DECLARE_WRITE16_MEMBER(sound_cmd_w); - DECLARE_WRITE8_MEMBER(go2000_pcm_1_bankswitch_w); - virtual void machine_start() override; - virtual void video_start() override; - uint32_t screen_update_go2000(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void go2000_map(address_map &map); - void go2000_sound_io(address_map &map); - void go2000_sound_map(address_map &map); -}; - - -WRITE16_MEMBER(go2000_state::sound_cmd_w) -{ - m_soundlatch->write(data & 0xff); - m_soundcpu->set_input_line(0, HOLD_LINE); -} - -void go2000_state::go2000_map(address_map &map) -{ - map(0x000000, 0x03ffff).rom(); - map(0x200000, 0x203fff).ram(); - map(0x600000, 0x60ffff).ram().share("videoram"); - map(0x610000, 0x61ffff).ram().share("videoram2"); - map(0x800000, 0x800fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); - map(0xa00000, 0xa00001).portr("INPUTS"); - map(0xa00002, 0xa00003).portr("DSW"); - map(0x620002, 0x620003).w(FUNC(go2000_state::sound_cmd_w)); -// map(0xe00000, 0xe00001).nopw(); -// map(0xe00010, 0xe00011).nopw(); -// map(0xe00020, 0xe00021).nopw(); -} - -WRITE8_MEMBER(go2000_state::go2000_pcm_1_bankswitch_w) -{ - membank("bank1")->set_entry(data & 0x07); -} - -void go2000_state::go2000_sound_map(address_map &map) -{ - map(0x0000, 0x03ff).rom(); - map(0x0400, 0xffff).bankr("bank1"); -} - -void go2000_state::go2000_sound_io(address_map &map) -{ - map.global_mask(0xff); - map(0x00, 0x00).r(m_soundlatch, FUNC(generic_latch_8_device::read)); - map(0x00, 0x00).w("dac", FUNC(dac_byte_interface::data_w)); - map(0x03, 0x03).w(FUNC(go2000_state::go2000_pcm_1_bankswitch_w)); -} - - -static INPUT_PORTS_START( go2000 ) - PORT_START("INPUTS") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) // continue - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON2 ) // korean symbol - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON3 ) // out - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) // high - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) // low - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED) // unused? - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNUSED) // unused? - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNUSED) // unused? - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNUSED) // unused? - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("P1 M1") // m1 - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("P1 M2") // m2 - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("P1 M3") // m3 - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNUSED) // unused? - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_COIN2 ) // coin2 - - PORT_START("DSW") - PORT_DIPNAME( 0x0003, 0x0003, "Coin / Credits" ) PORT_DIPLOCATION("SW-1:1,2") - PORT_DIPSETTING( 0x0000, "1 Coin / 50 Credits" ) - PORT_DIPSETTING( 0x0003, "1 Coin / 100 Credits" ) - PORT_DIPSETTING( 0x0002, "1 Coin / 125 Credits" ) - PORT_DIPSETTING( 0x0001, "1 Coin / 150 Credits" ) - PORT_DIPNAME( 0x000c, 0x000c, "Minimum Coin" ) PORT_DIPLOCATION("SW-1:3,4") - PORT_DIPSETTING( 0x000c, "1" ) - PORT_DIPSETTING( 0x0008, "2" ) - PORT_DIPSETTING( 0x0004, "3" ) - PORT_DIPSETTING( 0x0000, "5" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0010, IP_ACTIVE_LOW, "SW-1:5" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0020, IP_ACTIVE_LOW, "SW-1:6" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0040, IP_ACTIVE_LOW, "SW-1:7" ) - PORT_SERVICE_DIPLOC( 0x0080, IP_ACTIVE_LOW, "SW-1:8" ) - PORT_DIPNAME( 0x0700, 0x0700, "Difficult-1" ) PORT_DIPLOCATION("SW-2:1,2,3") - PORT_DIPSETTING( 0x0700, "1" ) - PORT_DIPSETTING( 0x0600, "2" ) - PORT_DIPSETTING( 0x0500, "3" ) - PORT_DIPSETTING( 0x0400, "4" ) - PORT_DIPSETTING( 0x0300, "5" ) - PORT_DIPSETTING( 0x0200, "6" ) - PORT_DIPSETTING( 0x0100, "7" ) - PORT_DIPSETTING( 0x0000, "8" ) - PORT_DIPNAME( 0x1800, 0x1800, "M1 value" ) PORT_DIPLOCATION("SW-2:4,5") - PORT_DIPSETTING( 0x0800, "3000" ) PORT_CONDITION("DSW", 0x0003, EQUALS, 0x0000) - PORT_DIPSETTING( 0x0000, "3500" ) PORT_CONDITION("DSW", 0x0003, EQUALS, 0x0000) - PORT_DIPSETTING( 0x1800, "4000" ) PORT_CONDITION("DSW", 0x0003, EQUALS, 0x0000) - PORT_DIPSETTING( 0x1000, "4500" ) PORT_CONDITION("DSW", 0x0003, EQUALS, 0x0000) - PORT_DIPSETTING( 0x0800, "6000" ) PORT_CONDITION("DSW", 0x0003, NOTEQUALS, 0x0000) - PORT_DIPSETTING( 0x0000, "7000" ) PORT_CONDITION("DSW", 0x0003, NOTEQUALS, 0x0000) - PORT_DIPSETTING( 0x1800, "8000" ) PORT_CONDITION("DSW", 0x0003, NOTEQUALS, 0x0000) - PORT_DIPSETTING( 0x1000, "9000" ) PORT_CONDITION("DSW", 0x0003, NOTEQUALS, 0x0000) - PORT_DIPUNKNOWN_DIPLOC( 0x2000, IP_ACTIVE_LOW, "SW-2:6" ) - PORT_DIPNAME( 0xc000, 0xc000, "Difficult-2" ) PORT_DIPLOCATION("SW-2:7,8") - PORT_DIPSETTING( 0xc000, "1" ) - PORT_DIPSETTING( 0x8000, "2" ) - PORT_DIPSETTING( 0x4000, "3" ) - PORT_DIPSETTING( 0x0000, "4" ) -INPUT_PORTS_END - - -static const gfx_layout go2000_layout = -{ - 8,8, - RGN_FRAC(1,1), - 4, - { 8,12,0,4 }, - { 3,2,1,0, 19,18,17,16 }, - { 0*32, 1*32, 2*32, 3*32,4*32,5*32,6*32,7*32 }, - 8*32 -}; - -static GFXDECODE_START( gfx_go2000 ) - GFXDECODE_ENTRY( "gfx1", 0, go2000_layout, 0x0, 0x80 ) /* tiles */ -GFXDECODE_END - -void go2000_state::video_start() -{ -} - -uint32_t go2000_state::screen_update_go2000(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - int count = 0; - - /* 0x600000 - 0x601fff / 0x610000 - 0x611fff */ - for (int x = 0; x < 64; x++) - { - for (int y = 0; y < 32; y++) - { - int tile = m_videoram[count]; - int attr = m_videoram2[count]; - m_gfxdecode->gfx(0)->opaque(bitmap,cliprect, tile, attr, 0, 0, x * 8, y * 8); - count++; - } - } - - /* 0x602000 - 0x603fff / 0x612000 - 0x613fff */ - for (int x = 0; x < 64; x++) - { - for (int y = 0; y < 32; y++) - { - int tile = m_videoram[count]; - int attr = m_videoram2[count]; - m_gfxdecode->gfx(0)->transpen(bitmap,cliprect, tile, attr, 0, 0, x * 8, y * 8, 0xf); - count++; - } - } - - /*Sprite RAM code actually copied from video/suna16.c with minor modifications.*/ - int max_x = m_screen->width() - 8; - int max_y = m_screen->height() - 8; - - for (int offs = 0xf800 / 2; offs < 0x10000 / 2 ; offs += 4/2) - { - int srcpg, srcx, srcy, dimx, dimy; - int tile_x, tile_xinc, tile_xstart; - int tile_y, tile_yinc; - int dx, dy; - int flipx, y0; - - int y = m_videoram[offs + 0 + 0x00000 / 2]; - int x = m_videoram[offs + 1 + 0x00000 / 2]; - int dim = m_videoram2[offs + 0 + 0x00000 / 2]; - - int bank = (x >> 12) & 0xf; - - srcpg = ((y & 0xf000) >> 12) + ((x & 0x0200) >> 5); // src page - srcx = ((y >> 8) & 0xf) * 2; // src col - srcy = ((dim >> 0) & 0xf) * 2; // src row - - switch ((dim >> 4) & 0xc) - { - case 0x0: dimx = 2; dimy = 2; y0 = 0x100; break; - case 0x4: dimx = 4; dimy = 4; y0 = 0x100; break; - case 0x8: dimx = 2; dimy = 32; y0 = 0x130; break; - default: - case 0xc: dimx = 4; dimy = 32; y0 = 0x120; break; - } - - if (dimx == 4) - { - flipx = srcx & 2; - srcx &= ~2; - } - else - flipx = 0; - - x = (x & 0xff) - (x & 0x100); - y = (y0 - (y & 0xff) - dimy * 8) & 0xff; - - if (flipx) - { - tile_xstart = dimx - 1; - tile_xinc = -1; - } - else - { - tile_xstart = 0; - tile_xinc = +1; - } - - tile_y = 0; - tile_yinc = +1; - - for (dy = 0; dy < dimy * 8; dy += 8) - { - tile_x = tile_xstart; - - for (dx = 0; dx < dimx * 8; dx += 8) - { - int addr = (srcpg * 0x20 * 0x20) + ((srcx + tile_x) & 0x1f) * 0x20 + ((srcy + tile_y) & 0x1f); - int tile = m_videoram[addr + 0x00000 / 2]; - int attr = m_videoram2[addr + 0x00000 / 2]; - - int sx = x + dx; - int sy = (y + dy) & 0xff; - - int tile_flipx = tile & 0x4000; - int tile_flipy = tile & 0x8000; - - if (flipx) - tile_flipx = !tile_flipx; - - if (flip_screen()) - { - sx = max_x - sx; - sy = max_y - sy; - tile_flipx = !tile_flipx; - tile_flipy = !tile_flipy; - } - - m_gfxdecode->gfx(0)->transpen(bitmap,cliprect, - (tile & 0x1fff) + bank*0x4000, - attr, - tile_flipx, tile_flipy, - sx, sy,15 ); - - tile_x += tile_xinc; - } - - tile_y += tile_yinc; - } - } - - return 0; -} - - -void go2000_state::machine_start() -{ - uint8_t *SOUND = memregion("soundcpu")->base(); - int i; - - for (i = 0; i < 8; i++) - membank("bank1")->configure_entry(i, &SOUND[0x00400 + i * 0x10000]); - - membank("bank1")->set_entry(0); - -} - -void go2000_state::go2000(machine_config &config) -{ - M68000(config, m_maincpu, 10000000); - m_maincpu->set_addrmap(AS_PROGRAM, &go2000_state::go2000_map); - m_maincpu->set_vblank_int("screen", FUNC(go2000_state::irq1_line_hold)); - - Z80(config, m_soundcpu, 4000000); - m_soundcpu->set_addrmap(AS_PROGRAM, &go2000_state::go2000_sound_map); - m_soundcpu->set_addrmap(AS_IO, &go2000_state::go2000_sound_io); - - - GFXDECODE(config, m_gfxdecode, m_palette, gfx_go2000); - - SCREEN(config, m_screen, SCREEN_TYPE_RASTER); - m_screen->set_refresh_hz(60); - m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); - m_screen->set_size(64*8, 32*8); - m_screen->set_visarea(0*8, 48*8-1, 2*8, 30*8-1); - m_screen->set_screen_update(FUNC(go2000_state::screen_update_go2000)); - m_screen->set_palette(m_palette); - - PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 0x800); - - - GENERIC_LATCH_8(config, m_soundlatch); - - SPEAKER(config, "speaker").front_center(); - DAC_8BIT_R2R(config, "dac", 0).add_route(0, "speaker", 0.25); // unknown DAC - voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref")); - vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); - vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); -} - -ROM_START( go2000 ) - ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 Code */ - ROM_LOAD16_BYTE( "3.bin", 0x00000, 0x20000, CRC(fe1fb269) SHA1(266b8acddfcfd960b8e44f8606bf0873da42b9f8) ) - ROM_LOAD16_BYTE( "4.bin", 0x00001, 0x20000, CRC(d6246ae3) SHA1(f2618dcabaa0c0a6e377e4acd1cdec8bea90bea8) ) - - ROM_REGION( 0x080000, "soundcpu", 0 ) /* Z80? */ - ROM_LOAD( "5.bin", 0x00000, 0x80000, CRC(a32676ee) SHA1(2dab73497c0818fce479be21ed589985db51560b) ) - - ROM_REGION( 0x40000, "gfx1", ROMREGION_INVERT ) - ROM_LOAD16_BYTE( "1.bin", 0x00000, 0x20000, CRC(96e50aba) SHA1(caa1aadab855c3a758378dc8c48eec859e8110a4) ) - ROM_LOAD16_BYTE( "2.bin", 0x00001, 0x20000, CRC(b0adf1cb) SHA1(2afb30691182dbf46be709f0d5b03b0f8ff52790) ) -ROM_END - - -GAME( 2000, go2000, 0, go2000, go2000, go2000_state, empty_init, ROT0, "SunA?", "Go 2000", MACHINE_SUPPORTS_SAVE ) |