summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/meijinsn.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/meijinsn.cpp')
-rw-r--r--src/mame/drivers/meijinsn.cpp422
1 files changed, 0 insertions, 422 deletions
diff --git a/src/mame/drivers/meijinsn.cpp b/src/mame/drivers/meijinsn.cpp
deleted file mode 100644
index fab8e143cfa..00000000000
--- a/src/mame/drivers/meijinsn.cpp
+++ /dev/null
@@ -1,422 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Tomasz Slanina
-/*
- Meijinsen (snk/alpha)
- ---------------------
-
- driver by Tomasz Slanina
-
-It's something between typical alpha 68k hardware
-(alpha mcu, sound hw (same as in jongbou)) and
-old alpha shougi hardware (framebuffer).
-
-There's probably no upright cabinet, only
-cocktail table (controls in 2p mode are inverted).
-
-Buttons:
- 1st = 'decision'
- 2nd = 'promotion'
-
- Service switch = memory clear
-
---------------------------------------------------
-
-
-
- p8 p7
- 16mhz p6 p5
- 5816 p4 p3
- 5816 p2 p1
- ?
- 68000-8
-
- 4416 4416 4416 4416
- clr 8910
- z80 p9 p10 2016
-
-
-
-5816 = Sony CXK5816-10L (Ram for video)
-2016 = Toshiba TMM2016AP-10 (SRAM for sound)
-4416 = TI TMS4416-15NL (DRAM for MC68000)
-clr = TI TBP18S030N (32*8 Bipolar PROM)
-Z80 = Sharp LH0080A Z80A-CPU-D
-8910 = GI AY-3-8910A (Sound chip)
-? = Chip with Surface Scratched ....
-
-"0" "1" MC68000 Program ROMs:
-p1 p2
-p3 p4
-p5 p6
-p7 p8
-
-P9 = Z80 Program
-P10 = AY-3-8910A Sounds
-
-Text inside P9:
-
-ALPHA DENSHI CO.,LTD JUNE / 24 / 1986 FOR
-* SHOUGI * GAME USED SOUND BOARD CONTROL
-SOFT PSG & VOICE BY M.C & S.H
-
-*/
-#include "emu.h"
-#include "cpu/z80/z80.h"
-#include "cpu/m68000/m68000.h"
-#include "machine/gen_latch.h"
-#include "machine/timer.h"
-#include "video/resnet.h"
-#include "sound/ay8910.h"
-#include "emupal.h"
-#include "screen.h"
-#include "speaker.h"
-
-class meijinsn_state : public driver_device
-{
-public:
- meijinsn_state(const machine_config &mconfig, device_type type, const char *tag) :
- driver_device(mconfig, type, tag),
- m_maincpu(*this,"maincpu"),
- m_soundlatch(*this, "soundlatch"),
- m_videoram(*this, "videoram"),
- m_shared_ram(*this, "shared_ram")
- { }
-
- void meijinsn(machine_config &config);
-
- void meijinsn_map(address_map &map);
-
-private:
- DECLARE_WRITE16_MEMBER(sound_w);
- DECLARE_READ16_MEMBER(alpha_mcu_r);
- void meijinsn_palette(palette_device &palette) const;
- uint32_t screen_update_meijinsn(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- TIMER_DEVICE_CALLBACK_MEMBER(meijinsn_interrupt);
-
- virtual void machine_start() override;
- virtual void machine_reset() override;
- virtual void video_start() override;
- void meijinsn_sound_io_map(address_map &map);
- void meijinsn_sound_map(address_map &map);
-
- required_device<cpu_device> m_maincpu;
- required_device<generic_latch_8_device> m_soundlatch;
- /* memory pointers */
- required_shared_ptr<uint16_t> m_videoram;
- required_shared_ptr<uint16_t> m_shared_ram;
-
- /* misc */
- uint8_t m_deposits1;
- uint8_t m_deposits2;
- uint8_t m_credits;
- uint8_t m_coinvalue;
- int m_mcu_latch;
-};
-
-
-
-WRITE16_MEMBER(meijinsn_state::sound_w)
-{
- if (ACCESSING_BITS_0_7)
- m_soundlatch->write(data & 0xff);
-}
-
-READ16_MEMBER(meijinsn_state::alpha_mcu_r)
-{
- static const uint8_t coinage1[2][2] = {{1,1}, {1,2}};
- static const uint8_t coinage2[2][2] = {{1,5}, {2,1}};
-
- int source = m_shared_ram[offset];
-
- switch (offset)
- {
- case 0: /* Dipswitch 2 */
- m_shared_ram[0] = (source & 0xff00) | ioport("DSW")->read();
- return 0;
-
- case 0x22: /* Coin value */
- m_shared_ram[0x22] = (source & 0xff00) | (m_credits & 0x00ff);
- return 0;
-
- case 0x29: /* Query microcontroller for coin insert */
-
- m_credits = 0;
-
- if ((ioport("COINS")->read() & 0x3) == 3)
- m_mcu_latch = 0;
-
- if ((ioport("COINS")->read() & 0x1) == 0 && !m_mcu_latch)
- {
- m_shared_ram[0x29] = (source & 0xff00) | 0x22; // coinA
- m_shared_ram[0x22] = (source & 0xff00) | 0x00;
- m_mcu_latch = 1;
-
- m_coinvalue = (~ioport("DSW")->read()>>3) & 1;
-
- m_deposits1++;
- if (m_deposits1 == coinage1[m_coinvalue][0])
- {
- m_credits = coinage1[m_coinvalue][1];
- m_deposits1 = 0;
- }
- else
- m_credits = 0;
- }
- else if ((ioport("COINS")->read() & 0x2) == 0 && !m_mcu_latch)
- {
- m_shared_ram[0x29] = (source & 0xff00) | 0x22; // coinA
- m_shared_ram[0x22] = (source & 0xff00) | 0x00;
- m_mcu_latch = 1;
-
- m_coinvalue = (~ioport("DSW")->read() >> 3) & 1;
-
- m_deposits2++;
- if (m_deposits2 == coinage2[m_coinvalue][0])
- {
- m_credits = coinage2[m_coinvalue][1];
- m_deposits2 = 0;
- }
- else
- m_credits = 0;
- }
- else
- {
- m_shared_ram[0x29] = (source & 0xff00) | 0x22;
- }
- return 0;
- }
- return 0;
-}
-
-
-
-void meijinsn_state::meijinsn_map(address_map &map)
-{
- map(0x000000, 0x03ffff).rom();
- map(0x080e00, 0x080fff).r(FUNC(meijinsn_state::alpha_mcu_r)).nopw();
- map(0x100000, 0x107fff).ram().share("videoram");
- map(0x180000, 0x180dff).ram();
- map(0x180e00, 0x180fff).ram().share("shared_ram");
- map(0x181000, 0x181fff).ram();
- map(0x1c0000, 0x1c0001).portr("P2");
- map(0x1a0000, 0x1a0001).portr("P1").w(FUNC(meijinsn_state::sound_w));
-}
-
-void meijinsn_state::meijinsn_sound_map(address_map &map)
-{
- map(0x0000, 0x7fff).rom();
- map(0x8000, 0x87ff).ram();
-}
-
-void meijinsn_state::meijinsn_sound_io_map(address_map &map)
-{
- map.global_mask(0xff);
- map(0x00, 0x01).w("aysnd", FUNC(ay8910_device::address_data_w));
- map(0x01, 0x01).r("aysnd", FUNC(ay8910_device::data_r));
- map(0x02, 0x02).w(m_soundlatch, FUNC(generic_latch_8_device::clear_w));
- map(0x06, 0x06).nopw();
-}
-
-static INPUT_PORTS_START( meijinsn )
- PORT_START("P1")
- PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
- PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
- PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
- PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
- PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)
- PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)
- PORT_BIT( 0x7cc0, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_START1 )
- PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_START2 )
- PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_SERVICE )
-
- PORT_START("P2")
- PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
- PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
- PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT) PORT_PLAYER(2)
- PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
- PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
- PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)
- PORT_BIT( 0xc0ff, IP_ACTIVE_HIGH, IPT_UNKNOWN )
-
- PORT_START("DSW")
- PORT_DIPNAME( 0x07, 0x00, "Game time (actual game)" )
- PORT_DIPSETTING( 0x07, "1:00" )
- PORT_DIPSETTING( 0x06, "2:00" )
- PORT_DIPSETTING( 0x05, "3:00" )
- PORT_DIPSETTING( 0x04, "4:00" )
- PORT_DIPSETTING( 0x03, "5:00" )
- PORT_DIPSETTING( 0x02, "10:00" )
- PORT_DIPSETTING( 0x01, "20:00" )
- PORT_DIPSETTING( 0x00, "0:30" )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Coinage ) )
- PORT_DIPSETTING( 0x08, "A 1C/1C B 1C/5C" )
- PORT_DIPSETTING( 0x00, "A 1C/2C B 2C/1C" )
- PORT_DIPNAME( 0x10, 0x00, "2 Player" )
- PORT_DIPSETTING( 0x00, "1C" )
- PORT_DIPSETTING( 0x10, "2C" )
- PORT_DIPNAME( 0x20, 0x00, "Game time (tsumeshougi)" )
- PORT_DIPSETTING( 0x20, "1:00" )
- PORT_DIPSETTING( 0x00, "2:00" )
-
- PORT_START("COINS") /* Coin input to microcontroller */
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
-INPUT_PORTS_END
-
-void meijinsn_state::video_start()
-{
-}
-
-void meijinsn_state::meijinsn_palette(palette_device &palette) const
-{
- uint8_t const *const color_prom = memregion("proms")->base();
- static const int resistances_b[2] = { 470, 220 };
- static const int resistances_rg[3] = { 1000, 470, 220 };
-
- double weights_r[3], weights_g[3], weights_b[2];
- compute_resistor_weights(0, 255, -1.0,
- 3, resistances_rg, weights_r, 0, 1000+1000,
- 3, resistances_rg, weights_g, 0, 1000+1000,
- 2, resistances_b, weights_b, 0, 1000+1000);
-
- for (int i = 0; i < palette.entries(); i++)
- {
- int bit0, bit1, bit2;
-
- /* red component */
- bit0 = BIT(color_prom[i], 0);
- bit1 = BIT(color_prom[i], 1);
- bit2 = BIT(color_prom[i], 2);
- int const r = combine_weights(weights_r, bit0, bit1, bit2);
-
- /* green component */
- bit0 = BIT(color_prom[i], 3);
- bit1 = BIT(color_prom[i], 4);
- bit2 = BIT(color_prom[i], 5);
- int const g = combine_weights(weights_g, bit0, bit1, bit2);
-
- /* blue component */
- bit0 = BIT(color_prom[i], 6);
- bit1 = BIT(color_prom[i], 7);
- int const b = combine_weights(weights_b, bit0, bit1);
-
- palette.set_pen_color(i, rgb_t(r, g, b));
- }
-}
-
-
-uint32_t meijinsn_state::screen_update_meijinsn(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
-{
- int offs;
-
- for (offs = 0; offs < 0x4000; offs++)
- {
- int sx, sy, x, data1, data2, color, data;
-
- sx = offs >> 8;
- sy = offs & 0xff;
-
- data1 = m_videoram[offs] >> 8;
- data2 = m_videoram[offs] & 0xff;
-
- for (x = 0; x < 4; x++)
- {
- color= BIT(data1, x) | (BIT(data1, x + 4) << 1);
- data = BIT(data2, x) | (BIT(data2, x + 4) << 1);
- bitmap.pix16(sy, (sx * 4 + (3 - x))) = color * 4 + data;
- }
- }
- return 0;
-}
-
-
-TIMER_DEVICE_CALLBACK_MEMBER(meijinsn_state::meijinsn_interrupt)
-{
- int scanline = param;
-
- if(scanline == 240)
- m_maincpu->set_input_line(1, HOLD_LINE);
-
- if(scanline == 0)
- m_maincpu->set_input_line(2, HOLD_LINE);
-}
-
-void meijinsn_state::machine_start()
-{
- save_item(NAME(m_deposits1));
- save_item(NAME(m_deposits2));
- save_item(NAME(m_credits));
-}
-
-void meijinsn_state::machine_reset()
-{
- m_deposits1 = 0;
- m_deposits2 = 0;
- m_credits = 0;
-}
-
-
-void meijinsn_state::meijinsn(machine_config &config)
-{
- /* basic machine hardware */
- M68000(config, m_maincpu, 9000000);
- m_maincpu->set_addrmap(AS_PROGRAM, &meijinsn_state::meijinsn_map);
- TIMER(config, "scantimer").configure_scanline(FUNC(meijinsn_state::meijinsn_interrupt), "screen", 0, 1);
-
- z80_device &audiocpu(Z80(config, "audiocpu", 4000000));
- audiocpu.set_addrmap(AS_PROGRAM, &meijinsn_state::meijinsn_sound_map);
- audiocpu.set_addrmap(AS_IO, &meijinsn_state::meijinsn_sound_io_map);
- audiocpu.set_periodic_int(FUNC(meijinsn_state::irq0_line_hold), attotime::from_hz(160*60));
-
-
- /* 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(32*8, 32*8);
- screen.set_visarea(12, 243, 2*8, 30*8-1);
- screen.set_screen_update(FUNC(meijinsn_state::screen_update_meijinsn));
- screen.set_palette("palette");
-
- PALETTE(config, "palette", FUNC(meijinsn_state::meijinsn_palette), 32);
-
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
-
- GENERIC_LATCH_8(config, m_soundlatch);
-
- 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, "mono", 0.75);
-}
-
-
-ROM_START( meijinsn )
- ROM_REGION( 0x40000, "maincpu", 0 )
- ROM_LOAD16_BYTE( "p1", 0x00000, 0x04000, CRC(8c9697a3) SHA1(19258e20a6aaadd6ba3469079fef85bc6dba548c) )
- ROM_CONTINUE ( 0x20000, 0x4000 )
- ROM_LOAD16_BYTE( "p2", 0x00001, 0x04000, CRC(f7da3535) SHA1(fdbacd075d45abda782966b16b3ea1ad68d60f91) )
- ROM_CONTINUE ( 0x20001, 0x4000 )
- ROM_LOAD16_BYTE( "p3", 0x08000, 0x04000, CRC(0af0b266) SHA1(d68ed31bc932bc5e9c554b2c0df06a751dc8eb96) )
- ROM_CONTINUE ( 0x28000, 0x4000 )
- ROM_LOAD16_BYTE( "p4", 0x08001, 0x04000, CRC(aab159c5) SHA1(0c9cad8f9893f4080b498433068e9324c7f2e13c) )
- ROM_CONTINUE ( 0x28001, 0x4000 )
- ROM_LOAD16_BYTE( "p5", 0x10000, 0x04000, CRC(0ed10a47) SHA1(9e89ec69f1f4e1ffa712f2e0c590d067c8c63026) )
- ROM_CONTINUE ( 0x30000, 0x4000 )
- ROM_LOAD16_BYTE( "p6", 0x10001, 0x04000, CRC(60b58755) SHA1(1786fc1b4c6d1793fb8e9311356fa4119611cfae) )
- ROM_CONTINUE ( 0x30001, 0x4000 )
- ROM_LOAD16_BYTE( "p7", 0x18000, 0x04000, CRC(604c76f1) SHA1(37fdf904f5e4d69dc8cb711cf3dece8f3075254a) )
- ROM_CONTINUE ( 0x38000, 0x4000 )
- ROM_LOAD16_BYTE( "p8", 0x18001, 0x04000, CRC(e3eaef19) SHA1(b290922f252a790443109e5023c3c35b133275cc) )
- ROM_CONTINUE ( 0x38001, 0x4000 )
-
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU */
- ROM_LOAD( "p9", 0x00000, 0x04000, CRC(aedfefdf) SHA1(f9d35737a0e942fe7d483f87c52efa92a1bbb3e5) )
- ROM_LOAD( "p10",0x04000, 0x04000, CRC(93b4d764) SHA1(4fedd3fd1f3ef6c5f60ca86219f877df68d3027d) )
-
- ROM_REGION( 0x20, "proms", 0 ) /* Colour PROM */
- ROM_LOAD( "clr", 0x00, 0x20, CRC(7b95b5a7) SHA1(c15be28bcd6f5ffdde659f2d352ae409f04b2557) )
-ROM_END
-
-GAME( 1986, meijinsn, 0, meijinsn, meijinsn, meijinsn_state, empty_init, ROT0, "SNK", "Meijinsen", MACHINE_SUPPORTS_SAVE )