summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/srmp6.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/srmp6.cpp')
-rw-r--r--src/mame/drivers/srmp6.cpp744
1 files changed, 0 insertions, 744 deletions
diff --git a/src/mame/drivers/srmp6.cpp b/src/mame/drivers/srmp6.cpp
deleted file mode 100644
index 351c3d67bb5..00000000000
--- a/src/mame/drivers/srmp6.cpp
+++ /dev/null
@@ -1,744 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Sebastien Volpe, Tomasz Slanina, David Haywood
-/*
- Super Real Mahjong P6 (JPN Ver.)
- (c)1996 Seta
-
-WIP driver by Sebastien Volpe, Tomasz Slanina and David Haywood
-
-Emulation Notes:
-The graphics are compressed, using the same 8bpp RLE scheme as CPS3 uses
-for the background on Sean's stage of Street Fighter III.
-
-DMA Operations are not fully understood
-
-
-according prg ROM (offset $0fff80):
-
- S12 SYSTEM
- SUPER REAL MAJAN P6
- SETA CO.,LTD
- 19960410
- V1.00
-
-TODO:
- - fix sound emulation
- - fix DMA operations
- - fix video emulation
-
-Video reference : https://youtu.be/wNm3tu1iGvM
-
-Are there other games on this 'System S12' hardware ???
-
----------------- dump infos ----------------
-
-[Jun/15/2000]
-
-Super Real Mahjong P6 (JPN Ver.)
-(c)1996 Seta
-
-SX011
-E47-REV01B
-
-CPU: 68000-16
-Sound: NiLe
-OSC: 16.0000MHz
- 42.9545MHz
- 56.0000MHz
-
-Chips: ST-0026 NiLe (video, sound)
- ST-0017
-
-
-SX011-01.22 chr, samples (?)
-SX011-02.21
-SX011-03.20
-SX011-04.19
-SX011-05.18
-SX011-06.17
-SX011-07.16
-SX011-08.15
-
-SX011-09.10 68000 data
-
-SX011-10.4 68000 prg.
-SX011-11.5
-
-
-Dumped 06/15/2000
-
-*/
-
-
-#include "emu.h"
-#include "cpu/m68000/m68000.h"
-#include "video/bufsprite.h"
-#include "sound/nile.h"
-#include "emupal.h"
-#include "screen.h"
-#include "speaker.h"
-
-
-class srmp6_state : public driver_device
-{
-public:
- srmp6_state(const machine_config &mconfig, device_type type, const char *tag) :
- driver_device(mconfig, type, tag),
- m_chrram(*this, "chrram"),
- m_dmaram(*this, "dmaram"),
- m_video_regs(*this, "video_regs"),
- m_nile_region(*this, "nile"),
- m_nile_bank(*this, "nile_bank"),
- m_key_io(*this, "KEY%u", 0U),
- m_maincpu(*this, "maincpu"),
- m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette"),
- m_sprram(*this, "sprram")
- { }
-
- void srmp6(machine_config &config);
-
-protected:
- virtual void machine_start() override;
- virtual void video_start() override;
- virtual void device_post_load() override { m_gfxdecode->gfx(0)->mark_all_dirty(); }
-
-private:
- std::unique_ptr<u16[]> m_tileram;
- required_shared_ptr<u16> m_chrram;
- optional_shared_ptr<u16> m_dmaram;
- required_shared_ptr<u16> m_video_regs;
- required_region_ptr<u8> m_nile_region;
-
- required_memory_bank m_nile_bank;
- required_ioport_array<4> m_key_io;
-
- u16 m_brightness;
- u8 m_input_select;
-
- u16 m_lastb;
- u16 m_lastb2;
- int m_destl;
-
- void input_select_w(u16 data);
- u16 inputs_r();
- void video_regs_w(offs_t offset, u16 data, u16 mem_mask = ~0);
- u16 video_regs_r(offs_t offset);
- void dma_w(offs_t offset, u16 data, u16 mem_mask = ~0);
- u16 tileram_r(offs_t offset);
- void tileram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
- void paletteram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
- u16 irq_ack_r();
-
- u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
- void update_palette();
- u32 process(u8 b,u32 dst_offset);
- required_device<cpu_device> m_maincpu;
- required_device<gfxdecode_device> m_gfxdecode;
- required_device<palette_device> m_palette;
- required_device<buffered_spriteram16_device> m_sprram;
- void srmp6_map(address_map &map);
-};
-
-#define VERBOSE 0
-#define LOG(x) do { if (VERBOSE) logerror x; } while (0)
-
-static const gfx_layout tiles8x8_layout =
-{
- 8,8,
- (0x100000*16)/0x40,
- 8,
- { STEP8(0,1) },
- { STEP8(0,8) },
- { STEP8(0,8*8) },
- 8*64
-};
-
-static inline u8 get_fade(int c, int f) // same as CPS3?
-{
- // bit 7 unknown
- // bit 6 fade enable / disable
- // bit 5 fade mode
- // bit 4-0 fade value
- if (f & 0x40) // Fading enable / disable
- {
- f &= 0x3f;
- c = (f & 0x20) ? (c + (((0x1f - c) * (f & 0x1f)) / 0x1f)) : ((c * f) / 0x1f);
- c = std::max(0, std::min(0x1f, c));
- }
- return c;
-}
-
-void srmp6_state::update_palette()
-{
- int brg = m_brightness & 0x7f;
-
- for (int i = 0; i < m_palette->entries(); i++)
- {
- u8 r = m_palette->basemem().read16(i) >> 0 & 0x1f;
- u8 g = m_palette->basemem().read16(i) >> 5 & 0x1f;
- u8 b = m_palette->basemem().read16(i) >> 10 & 0x1f;
-
- if (brg & 0x40)
- {
- r = get_fade(r, brg);
- g = get_fade(g, brg);
- b = get_fade(b, brg);
- }
- m_palette->set_pen_color(i, pal5bit(r), pal5bit(g), pal5bit(b));
- }
-}
-
-void srmp6_state::video_start()
-{
- m_tileram = make_unique_clear<u16[]>(0x100000*16/2);
- m_dmaram.allocate(0x100/2);
-
- // create the char set (gfx will then be updated dynamically from RAM)
- m_gfxdecode->set_gfx(0, std::make_unique<gfx_element>(m_palette, tiles8x8_layout, (u8*)m_tileram.get(), 0, m_palette->entries() / 256, 0));
- m_gfxdecode->gfx(0)->set_granularity(256);
-
- m_brightness = 0;
-
- save_pointer(NAME(m_tileram), 0x100000*16/2);
- save_item(NAME(m_brightness));
- save_item(NAME(m_destl));
- save_item(NAME(m_lastb));
- save_item(NAME(m_lastb2));
-}
-
-#if 0
-static int xixi = 0;
-#endif
-
-u32 srmp6_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
-{
- int alpha;
- int x,y,tileno,height,width,xw,yw,sprite,xb,yb;
- u16 *sprite_list = m_sprram->buffer();
- u16 mainlist_offset = 0;
-
- union
- {
- s16 a;
- u16 b;
- } temp;
-
- bitmap.fill(0, cliprect);
-
-#if 0
- //debug
- if (machine().input().code_pressed_once(KEYCODE_Q))
- {
- ++xixi;
- logerror("%x\n",xixi);
- }
-
- if (machine().input().code_pressed_once(KEYCODE_W))
- {
- --xixi;
- logerror("%x\n",xixi);
- }
-#endif
-
- // Main spritelist is 0x0000 - 0x1fff in spriteram, sublists follow
- while (mainlist_offset<0x2000/2)
- {
- u16 *sprite_sublist = &sprite_list[sprite_list[mainlist_offset+1]<<3];
- u16 sublist_length=sprite_list[mainlist_offset+0] & 0x7fff; //+1 ?
- s16 global_x,global_y, flip_x, flip_y;
- u16 global_pal;
-
- // end of list marker
- if (sprite_list[mainlist_offset+0] == 0x8000)
- break;
-
- if (sprite_list[mainlist_offset+0] != 0)
- {
- temp.b=sprite_list[mainlist_offset+2];
- global_x=temp.a;
- temp.b=sprite_list[mainlist_offset+3];
- global_y=temp.a;
-
- global_pal = sprite_list[mainlist_offset+4] & 0x7;
-
- if ((sprite_list[mainlist_offset+5] & 0x700) == 0x700)
- {
- alpha = pal5bit(sprite_list[mainlist_offset+5] & 0x1f);
- }
- else
- {
- alpha = 255;
- }
- // logerror("%x %x \n",sprite_list[mainlist_offset+1],sublist_length);
-
- while (sublist_length)
- {
- sprite=sprite_sublist[0] & 0x7fff;
- flip_x=sprite_sublist[1]>>8&1;
- flip_y=sprite_sublist[1]>>9&1;
- temp.b=sprite_sublist[2];
- x=temp.a;
- temp.b=sprite_sublist[3];
- y=temp.a;
- //x+=global_x;
- //y+=global_y;
-
- width=((sprite_sublist[1]) & 0x3);
- height=((sprite_sublist[1]>>2) & 0x3);
-
- height = 1 << height;
- width = 1 << width;
-
- y-=height*8;
- tileno = sprite;
- //tileno += (sprite_list[4] & 0xf)*0x4000; // this makes things worse in places (title screen for example)
-
- for (xw = 0; xw < width; xw++)
- {
- for (yw = 0; yw < height; yw++)
- {
- if (!flip_x)
- xb=x+xw*8+global_x;
- else
- xb=x+(width-xw-1)*8+global_x;
-
- if (!flip_y)
- yb=y+yw*8+global_y;
- else
- yb=y+(height-yw-1)*8+global_y;
-
- m_gfxdecode->gfx(0)->alpha(bitmap,cliprect,tileno,global_pal,flip_x,flip_y,xb,yb,0,alpha);
- tileno++;
- }
- }
- sprite_sublist+=8;
- --sublist_length;
- }
- }
- mainlist_offset+=8;
- }
-
- m_sprram->copy();
-
- if (machine().input().code_pressed_once(KEYCODE_Q))
- {
- FILE *p=fopen("tileram.bin","wb");
- fwrite(m_tileram.get(), 1, 0x100000*16, p);
- fclose(p);
- }
-
-
- return 0;
-}
-
-/***************************************************************************
- Main CPU memory handlers
-***************************************************************************/
-
-void srmp6_state::machine_start()
-{
- m_nile_bank->configure_entries(0, 16, memregion("nile")->base(), 0x200000);
- save_item(NAME(m_input_select));
-}
-
-void srmp6_state::input_select_w(u16 data)
-{
- m_input_select = data & 0x0f;
-}
-
-u16 srmp6_state::inputs_r()
-{
- switch (m_input_select) // inputs
- {
- case 1<<0: return m_key_io[0]->read();
- case 1<<1: return m_key_io[1]->read();
- case 1<<2: return m_key_io[2]->read();
- case 1<<3: return m_key_io[3]->read();
- }
-
- return 0;
-}
-
-
-void srmp6_state::video_regs_w(offs_t offset, u16 data, u16 mem_mask)
-{
- switch (offset)
- {
- case 0x5e/2: // bank switch, used by ROM check
- {
- LOG(("%x\n",data));
- m_nile_bank->set_entry(data & 0x0f);
- break;
- }
-
- // set by IT4
- case 0x5c/2: // either 0x40 explicitly in many places, or according $2083b0 (IT4)
- //Fade in/out (0x40(dark)-0x60(normal)-0x7e?(bright) reset by 0x00?
- if (m_brightness != data)
- {
- m_brightness = data;
- update_palette();
- }
- break;
-
- // unknown registers - there are others
-
- // set by IT4 (jsr $b3c), according flip screen dsw
- case 0x48/2: // 0 / 0xb0 if flipscreen
- case 0x52/2: // 0 / 0x2ef if flipscreen
- case 0x54/2: // 0x152 / 0x15e if flipscreen
-
- // set by IT4 ($82e-$846)
- case 0x56/2: // written 8,9,8,9 successively
-
- default:
- logerror("video_regs_w (PC=%06X): %04x = %04x & %04x\n", m_maincpu->pcbase(), offset*2, data, mem_mask);
- break;
- }
- COMBINE_DATA(&m_video_regs[offset]);
-}
-
-u16 srmp6_state::video_regs_r(offs_t offset)
-{
- logerror("video_regs_r (PC=%06X): %04x\n", m_maincpu->pcbase(), offset*2);
- return m_video_regs[offset];
-}
-
-
-// DMA RLE stuff - the same as CPS3
-u32 srmp6_state::process(u8 b,u32 dst_offset)
-{
- int l = 0;
-
- u8 *tram=(u8*)m_tileram.get();
-
- if (m_lastb == m_lastb2) //rle
- {
- int rle=(b+1) & 0xff;
-
- for (int i = 0; i <rle; ++i)
- {
- tram[dst_offset + m_destl] = m_lastb;
- m_gfxdecode->gfx(0)->mark_dirty((dst_offset + m_destl)/0x40);
-
- dst_offset++;
- ++l;
- }
- m_lastb2 = 0xffff;
-
- return l;
- }
- else
- {
- m_lastb2 = m_lastb;
- m_lastb = b;
- tram[dst_offset + m_destl] = b;
- m_gfxdecode->gfx(0)->mark_dirty((dst_offset + m_destl)/0x40);
-
- return 1;
- }
-}
-
-
-void srmp6_state::dma_w(offs_t offset, u16 data, u16 mem_mask)
-{
- COMBINE_DATA(&m_dmaram[offset]);
- if (offset==13 && m_dmaram[offset]==0x40)
- {
- u32 srctab=2*((((u32)m_dmaram[5])<<16)|m_dmaram[4]);
- u32 srcdata=2*((((u32)m_dmaram[11])<<16)|m_dmaram[10]);
- u32 len=4*(((((u32)m_dmaram[7]&3)<<16)|m_dmaram[6])+1); //??? WRONG!
- int tempidx = 0;
-
- // show params
- LOG(("DMA! %04x %04x %04x %04x %04x %04x %04x %04x %04x %04x %04x %04x %04x %04x\n",
- m_dmaram[0x00/2],
- m_dmaram[0x02/2],
- m_dmaram[0x04/2],
- m_dmaram[0x06/2],
- m_dmaram[0x08/2],
- m_dmaram[0x0a/2],
- m_dmaram[0x0c/2],
- m_dmaram[0x0e/2],
- m_dmaram[0x10/2],
- m_dmaram[0x12/2],
- m_dmaram[0x14/2],
- m_dmaram[0x16/2],
- m_dmaram[0x18/2],
- m_dmaram[0x1a/2]));
-
- m_destl = m_dmaram[9]*0x40000;
-
- m_lastb = 0xfffe;
- m_lastb2 = 0xffff;
-
- while (1)
- {
- u8 ctrl=m_nile_region[srcdata];
- ++srcdata;
-
- for (int i = 0; i < 8; ++i)
- {
- u8 p=m_nile_region[srcdata];
-
- if (ctrl & 0x80)
- {
- u8 real_byte;
- real_byte = m_nile_region[srctab+p*2];
- tempidx+=process(real_byte,tempidx);
- real_byte = m_nile_region[srctab+p*2+1];//px[DMA_XOR((current_table_address+p*2+1))];
- tempidx+=process(real_byte,tempidx);
- }
- else
- {
- tempidx+=process(p,tempidx);
- }
-
- ctrl<<=1;
- ++srcdata;
-
- if (tempidx >= len)
- {
- LOG(("%x\n",srcdata));
- return;
- }
- }
- }
- }
-}
-
-// if tileram is actually bigger than the mapped area, how do we access the rest?
-u16 srmp6_state::tileram_r(offs_t offset)
-{
- return m_chrram[offset];
-}
-
-void srmp6_state::tileram_w(offs_t offset, u16 data, u16 mem_mask)
-{
- //u16 tmp;
- COMBINE_DATA(&m_chrram[offset]);
-
- // are the DMA registers enabled some other way, or always mapped here, over RAM?
- if (offset >= 0xfff00/2 && offset <= 0xfff1a/2 )
- {
- offset &=0x1f;
- dma_w(offset ,data, mem_mask);
- }
-}
-
-void srmp6_state::paletteram_w(offs_t offset, u16 data, u16 mem_mask)
-{
- int brg = m_brightness & 0x7f;
-
- m_palette->write16(offset, data, mem_mask);
-
- if (brg & 0x40)
- {
- u8 r = m_palette->basemem().read16(offset) >> 0 & 0x1f;
- u8 g = m_palette->basemem().read16(offset) >> 5 & 0x1f;
- u8 b = m_palette->basemem().read16(offset) >> 10 & 0x1f;
-
- r = get_fade(r, brg);
- g = get_fade(g, brg);
- b = get_fade(b, brg);
-
- m_palette->set_pen_color(offset, pal5bit(r), pal5bit(g), pal5bit(b));
- }
-}
-
-u16 srmp6_state::irq_ack_r()
-{
- m_maincpu->set_input_line(4, CLEAR_LINE);
- return 0; // value read doesn't matter
-}
-
-void srmp6_state::srmp6_map(address_map &map)
-{
- map(0x000000, 0x0fffff).rom();
- map(0x200000, 0x23ffff).ram(); // work RAM
-
- map(0x300000, 0x300005).w(FUNC(srmp6_state::input_select_w)); // inputs
- map(0x300000, 0x300001).portr("DSW");
- map(0x300002, 0x300005).r(FUNC(srmp6_state::inputs_r)); // inputs
-
- // OBJ RAM: checked [$400000-$47dfff]
- map(0x400000, 0x47ffff).ram().share("sprram");
-
- map(0x480000, 0x480fff).ram().w(FUNC(srmp6_state::paletteram_w)).share("palette");
-
- map(0x4c0000, 0x4c006f).rw(FUNC(srmp6_state::video_regs_r), FUNC(srmp6_state::video_regs_w)).share(m_video_regs); // ? gfx regs ST-0026 NiLe
- map(0x4d0000, 0x4d0001).r(FUNC(srmp6_state::irq_ack_r));
- map(0x4e0000, 0x4e00ff).rw("nile", FUNC(nile_device::nile_snd_r), FUNC(nile_device::nile_snd_w));
- map(0x4e0100, 0x4e0101).rw("nile", FUNC(nile_device::nile_sndctrl_r), FUNC(nile_device::nile_sndctrl_w));
- //map(0x4e0110, 0x4e0111).noprw(); // ? accessed once ($268dc, written $b.w)
-
- // CHR RAM: checked [$500000-$5fffff]
- map(0x500000, 0x5fffff).rw(FUNC(srmp6_state::tileram_r), FUNC(srmp6_state::tileram_w)).share(m_chrram);
- //map(0x5fff00, 0x5fff1f).ram(); // ? see routine $5ca8, video_regs related ???
- //map(0x5fff00, 0x5fffff).w(FUNC(srmp6_state::dma_w)).share(m_dmaram);
-
- map(0x600000, 0x7fffff).bankr(m_nile_bank); // banked ROM (used by ROM check)
- map(0x800000, 0x9fffff).rom().region("user1", 0);
- //map(0xf00004, 0xf00005).ram(); // ?
- //map(0xf00006, 0xf00007).ram(); // ?
-
-}
-
-
-/***************************************************************************
- Port definitions
-***************************************************************************/
-
-static INPUT_PORTS_START( srmp6 )
-
- PORT_START("KEY0")
- PORT_BIT( 0xfe01, IP_ACTIVE_LOW, IPT_UNUSED ) // explicitly discarded
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_A )
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_E )
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_I )
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_M )
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_START1 )
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2)
- PORT_SERVICE_NO_TOGGLE( 0x0100, IP_ACTIVE_LOW )
-
- PORT_START("KEY1")
- PORT_BIT( 0xfe41, IP_ACTIVE_LOW, IPT_UNUSED ) // explicitly discarded
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_B )
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_F )
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_J )
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_N )
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )
- PORT_BIT( 0x0180, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("KEY2")
- PORT_BIT( 0xfe41, IP_ACTIVE_LOW, IPT_UNUSED ) // explicitly discarded
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_C )
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_G )
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_K )
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_MAHJONG_RON )
- PORT_BIT( 0x0180, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("KEY3")
- PORT_BIT( 0xfe61, IP_ACTIVE_LOW, IPT_UNUSED ) // explicitly discarded
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_MAHJONG_D )
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_MAHJONG_H )
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_MAHJONG_L )
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_MAHJONG_PON )
- PORT_BIT( 0x0180, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("DSW") // 16-bit DSW1 (0x0000) +DSW2 (0x0700)
- PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSW1:1,2,3")
- PORT_DIPSETTING( 0x0000, DEF_STR( 5C_1C ) )
- PORT_DIPSETTING( 0x0001, DEF_STR( 4C_1C ) )
- PORT_DIPSETTING( 0x0002, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x0003, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x0007, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x0006, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x0005, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0x0004, DEF_STR( 1C_4C ) )
- PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unused ) ) PORT_DIPLOCATION("DSW1:4")
- PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unused ) ) PORT_DIPLOCATION("DSW1:5")
- PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) ) PORT_DIPLOCATION("DSW1:6")
- PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0040, 0x0000, "Re-Clothe" ) PORT_DIPLOCATION("DSW1:7")
- PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0040, DEF_STR( On ) )
- PORT_DIPNAME( 0x0080, 0x0080, "Nudity" ) PORT_DIPLOCATION("DSW1:8")
- PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0080, DEF_STR( On ) )
- PORT_DIPNAME( 0x0700, 0x0700, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSW2:1,2,3")
- PORT_DIPSETTING( 0x0000, "8" )
- PORT_DIPSETTING( 0x0100, "7" )
- PORT_DIPSETTING( 0x0200, "6" )
- PORT_DIPSETTING( 0x0300, "5" )
- PORT_DIPSETTING( 0x0400, "3" )
- PORT_DIPSETTING( 0x0500, "2" )
- PORT_DIPSETTING( 0x0600, "1" )
- PORT_DIPSETTING( 0x0700, "4" )
- PORT_DIPNAME( 0x0800, 0x0000, "Kuitan" ) PORT_DIPLOCATION("DSW2:4")
- PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0800, DEF_STR( On ) )
- PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Continues ) ) PORT_DIPLOCATION("DSW2:5")
- PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x1000, DEF_STR( On ) )
- PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSW2:6")
- PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x2000, DEF_STR( On ) )
- PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("DSW2:7")
- PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_SERVICE_DIPLOC( 0x8000, IP_ACTIVE_LOW, "DSW2:8" ) PORT_DIPLOCATION("DSW2:8")
-INPUT_PORTS_END
-
-/***************************************************************************
- Machine driver
-***************************************************************************/
-
-void srmp6_state::srmp6(machine_config &config)
-{
- M68000(config, m_maincpu, 16000000);
- m_maincpu->set_addrmap(AS_PROGRAM, &srmp6_state::srmp6_map);
- m_maincpu->set_vblank_int("screen", FUNC(srmp6_state::irq4_line_assert)); // irq3 is a timer irq, but it's never enabled
-
- 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(64*8, 64*8);
- screen.set_visarea(0*8, 42*8-1, 0*8, 30*8-1);
- screen.set_screen_update(FUNC(srmp6_state::screen_update));
-
- PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 0x800);
-
- GFXDECODE(config, m_gfxdecode, m_palette, gfxdecode_device::empty);
-
- BUFFERED_SPRITERAM16(config, m_sprram);
-
- // sound hardware
- SPEAKER(config, "lspeaker").front_left();
- SPEAKER(config, "rspeaker").front_right();
-
- nile_device &nile(NILE(config, "nile", 0));
- nile.add_route(0, "lspeaker", 1.0);
- nile.add_route(1, "rspeaker", 1.0);
-}
-
-
-/***************************************************************************
- ROM definition(s)
-***************************************************************************/
-
-ROM_START( srmp6 )
- ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 Code
- ROM_LOAD16_BYTE( "sx011-10.4", 0x000001, 0x080000, CRC(8f4318a5) SHA1(44160968cca027b3d42805f2dd42662d11257ef6) )
- ROM_LOAD16_BYTE( "sx011-11.5", 0x000000, 0x080000, CRC(7503d9cf) SHA1(03ab35f13b6166cb362aceeda18e6eda8d3abf50) )
-
- ROM_REGION16_BE( 0x200000, "user1", 0 ) // 68000 Data
- ROM_LOAD16_WORD_SWAP( "sx011-09.10", 0x000000, 0x200000, CRC(58f74438) SHA1(a256e39ca0406e513ab4dbd812fb0b559b4f61f2) )
-
- // these are accessed directly by the 68k, DMA device etc. NOT decoded
- ROM_REGION( 0x2000000, "nile", 0) // Banked ROM
- ROM_LOAD16_WORD_SWAP( "sx011-08.15", 0x0000000, 0x0400000, CRC(01b3b1f0) SHA1(bbd60509c9ba78358edbcbb5953eafafd6e2eaf5) ) // CHR00
- ROM_LOAD16_WORD_SWAP( "sx011-07.16", 0x0400000, 0x0400000, CRC(26e57dac) SHA1(91272268977c5fbff7e8fbe1147bf108bd2ed321) ) // CHR01
- ROM_LOAD16_WORD_SWAP( "sx011-06.17", 0x0800000, 0x0400000, CRC(220ee32c) SHA1(77f39b54891c2381b967534b0f6d380962eadcae) ) // CHR02
- ROM_LOAD16_WORD_SWAP( "sx011-05.18", 0x0c00000, 0x0400000, CRC(87e5fea9) SHA1(abd751b5744d6ac7e697774ea9a7f7455bf3ac7c) ) // CHR03
- ROM_LOAD16_WORD_SWAP( "sx011-04.19", 0x1000000, 0x0400000, CRC(e90d331e) SHA1(d8afb1497cec8fe6de10d23d49427e11c4c57910) ) // CHR04
- ROM_LOAD16_WORD_SWAP( "sx011-03.20", 0x1400000, 0x0400000, CRC(f1f24b35) SHA1(70d6848f77940331e1be8591a33d62ac22a3aee9) ) // CHR05
- ROM_LOAD16_WORD_SWAP( "sx011-02.21", 0x1800000, 0x0400000, CRC(c56d7e50) SHA1(355c64b38e7b266f386b9c0b906c8581fc15374b) ) // CHR06
- ROM_LOAD16_WORD_SWAP( "sx011-01.22", 0x1c00000, 0x0400000, CRC(785409d1) SHA1(3e31254452a30d929161a1ea3a3daa69de058364) ) // CHR07
-ROM_END
-
-
-
-/***************************************************************************
- Game driver(s)
-***************************************************************************/
-
-GAME( 1995, srmp6, 0, srmp6, srmp6, srmp6_state, empty_init, ROT0, "Seta", "Super Real Mahjong P6 (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )