summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/mjsenpu.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/mjsenpu.cpp')
-rw-r--r--src/mame/drivers/mjsenpu.cpp545
1 files changed, 0 insertions, 545 deletions
diff --git a/src/mame/drivers/mjsenpu.cpp b/src/mame/drivers/mjsenpu.cpp
deleted file mode 100644
index 697afbaa279..00000000000
--- a/src/mame/drivers/mjsenpu.cpp
+++ /dev/null
@@ -1,545 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:David Haywood
-/********************************************************************
-
- PCB is marked 'Ver 1.8 B/D-' on 2 of the edges
-
- Custom chip marked
- ORIENTAL SOFT
- SPR800F1
- 0011E
-
- inputs need finishing off
-
- -- Test Mode Note --
-
- The test mode for this game is very buggy, this is not a MAME bug
- the same behavior has been observed on the original PCB.
-
- One example of this is the dipswitch viewer, which should show 3
- rows of 8 1/0 values, one for each switch. ie
-
- 00000000
- 00000000
- 00000000
-
- However..
-
- Instead of properly representing each of the dips, the 1st switch in
- each bank ends up turning on/off the entire row display (for rows 2/3
- it shifts row 1 by one pixel)
-
- This then means the 2nd switch changes the digit in the 1st position
- so
-
- 10000000
-
- the 8th switch changes the 7th digit so
-
- 10000010
-
- and there's no way at all to change the last digit.
-
-*********************************************************************/
-
-#include "emu.h"
-#include "cpu/e132xs/e132xs.h"
-#include "machine/nvram.h"
-#include "machine/ticket.h"
-#include "sound/okim6295.h"
-#include "emupal.h"
-#include "screen.h"
-#include "speaker.h"
-
-class mjsenpu_state : public driver_device
-{
-public:
- mjsenpu_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag)
- , m_maincpu(*this, "maincpu")
- , m_oki(*this, "oki")
- , m_hopper(*this, "hopper")
- , m_mainram(*this, "mainram")
- // , m_vram(*this, "vram")
- , m_palette(*this, "palette")
- {
- }
-
- void mjsenpu(machine_config &config);
-
- void init_mjsenpu();
-
-private:
- /* devices */
- required_device<e132xt_device> m_maincpu;
- required_device<okim6295_device> m_oki;
- required_device<ticket_dispenser_device> m_hopper;
-
- required_shared_ptr<uint32_t> m_mainram;
-// required_shared_ptr<uint32_t> m_vram;
- uint8_t m_pal[0x200];
- uint32_t m_vram0[0x20000 / 4];
- uint32_t m_vram1[0x20000 / 4];
- uint8_t m_control;
- uint8_t m_mux;
-
- DECLARE_READ8_MEMBER(palette_low_r);
- DECLARE_READ8_MEMBER(palette_high_r);
- DECLARE_WRITE8_MEMBER(palette_low_w);
- DECLARE_WRITE8_MEMBER(palette_high_w);
- void set_palette(int offset);
-
- DECLARE_WRITE8_MEMBER(control_w);
- DECLARE_WRITE8_MEMBER(mux_w);
-
- DECLARE_READ32_MEMBER(muxed_inputs_r);
-
- DECLARE_READ32_MEMBER(mjsenpu_speedup_r);
-
- DECLARE_READ32_MEMBER(vram_r);
- DECLARE_WRITE32_MEMBER(vram_w);
-
- virtual void machine_start() override;
- virtual void machine_reset() override;
- virtual void video_start() override;
- uint32_t screen_update_mjsenpu(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
-
- required_device<palette_device> m_palette;
- void mjsenpu_32bit_map(address_map &map);
- void mjsenpu_io(address_map &map);
-};
-
-
-READ8_MEMBER(mjsenpu_state::palette_low_r)
-{
- return m_pal[(offset * 2) + 0];
-}
-
-
-READ8_MEMBER(mjsenpu_state::palette_high_r)
-{
- return m_pal[(offset * 2) + 1];
-}
-
-void mjsenpu_state::set_palette(int offset)
-{
- uint16_t paldata = (m_pal[(offset * 2) + 0] << 8) | (m_pal[(offset * 2) + 1]);
- m_palette->set_pen_color(offset, pal5bit(paldata >> 0), pal5bit(paldata >> 5), pal6bit(paldata >> 10));
-}
-
-WRITE8_MEMBER(mjsenpu_state::palette_low_w)
-{
- m_pal[(offset * 2)+0] = data;
- set_palette(offset);
-}
-
-WRITE8_MEMBER(mjsenpu_state::palette_high_w)
-{
- m_pal[(offset * 2)+1] = data;
- set_palette(offset);
-}
-
-
-READ32_MEMBER(mjsenpu_state::vram_r)
-{
- if (m_control & 0x01) return m_vram1[offset];
- else return m_vram0[offset];
-}
-
-WRITE32_MEMBER(mjsenpu_state::vram_w)
-{
- if (m_control & 0x01) COMBINE_DATA(&m_vram1[offset]);
- else COMBINE_DATA(&m_vram0[offset]);
-}
-
-WRITE8_MEMBER(mjsenpu_state::control_w)
-{
- // bit 0x80 is always set? (sometimes disabled during screen transitions briefly, could be display enable?)
-
- // bit 0x40 not used?
- // bit 0x20 not used?
-
- // bit 0x10 is the M6295 bank, samples <26 are the same in both banks and so bank switch isn't written for them, not even in sound test.
- m_oki->set_rom_bank((data&0x10)>>4);
-
- // bits 0x08 is used in the alt payout / hopper mode (see dipswitches)
-
- // 0x04 seem to be hopper/ticket related? different ones get used depending on the dips
- m_hopper->motor_w(data & 0x04);
-
- // bit 0x02 could be coin counter?
- machine().bookkeeping().coin_counter_w(0, data & 0x02 );
-
- // bit 0x01 alternates frequently, using as video buffer, but that's a complete guess
- m_control = data;
-
-// if (data &~0x9e)
-// printf("control_w %02x\n", data);
-}
-
-WRITE8_MEMBER(mjsenpu_state::mux_w)
-{
- if ((data != 0x80) &&
- (data != 0x9e) &&
- (data != 0x9d) &&
- (data != 0x9b) &&
- (data != 0x97) &&
- (data != 0x8f))
- printf("mux_w %02x\n", data);
-
- m_mux = data;
-}
-
-READ32_MEMBER(mjsenpu_state::muxed_inputs_r)
-{
- switch (m_mux)
- {
- case 0x80: // not read
- break;
-
- case 0x9e:
- return ioport("MUX_9E")->read();
-
- case 0x9d:
- return ioport("MUX_9D")->read();
-
- case 0x9b:
- return ioport("MUX_9B")->read();
-
- case 0x97:
- return ioport("MUX_97")->read();
-
- case 0x8f:
- return ioport("MUX_8F")->read();
- }
-
- logerror("muxed_inputs_r with %02x\n", m_mux);
-
- return 0x00000000;// 0xffffffff;
-}
-
-void mjsenpu_state::mjsenpu_32bit_map(address_map &map)
-{
- map(0x00000000, 0x001fffff).ram().share("mainram");
- map(0x40000000, 0x401fffff).rom().region("user2", 0); // main game rom
-
- map(0x80000000, 0x8001ffff).rw(FUNC(mjsenpu_state::vram_r), FUNC(mjsenpu_state::vram_w));
-
- map(0xffc00000, 0xffc000ff).rw(FUNC(mjsenpu_state::palette_low_r), FUNC(mjsenpu_state::palette_low_w));
- map(0xffd00000, 0xffd000ff).rw(FUNC(mjsenpu_state::palette_high_r), FUNC(mjsenpu_state::palette_high_w));
-
- map(0xffe00000, 0xffe007ff).ram().share("nvram");
-
- map(0xfff80000, 0xffffffff).rom().region("user1", 0); // boot rom
-}
-
-
-void mjsenpu_state::mjsenpu_io(address_map &map)
-{
- map(0x4000, 0x4003).r(FUNC(mjsenpu_state::muxed_inputs_r));
- map(0x4010, 0x4013).portr("IN1");
-
- map(0x4023, 0x4023).w(FUNC(mjsenpu_state::control_w));
-
- map(0x4030, 0x4033).portr("DSW1");
- map(0x4040, 0x4043).portr("DSW2");
- map(0x4050, 0x4053).portr("DSW3");
-
- map(0x4063, 0x4063).w(FUNC(mjsenpu_state::mux_w));
-
- map(0x4073, 0x4073).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
-}
-
-static INPUT_PORTS_START( mjsenpu )
-
- PORT_START("MUX_8F") // in joystick mode?
- PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_START1 ) PORT_CONDITION("DSW3",0x08,EQUALS,0x00)
- PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_CONDITION("DSW3",0x08,EQUALS,0x00)
- PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_CONDITION("DSW3",0x08,EQUALS,0x00)
- PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_CONDITION("DSW3",0x08,EQUALS,0x00)
- PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_CONDITION("DSW3",0x08,EQUALS,0x00)
- PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CONDITION("DSW3",0x08,EQUALS,0x00)
- PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CONDITION("DSW3",0x08,EQUALS,0x00)
- PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_CONDITION("DSW3",0x08,EQUALS,0x00)
- PORT_BIT( 0x000000ff, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW3",0x08,EQUALS,0x08)
- PORT_BIT( 0xffffff00, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("MUX_9E")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_CONDITION("DSW3",0x08,EQUALS,0x08)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_CONDITION("DSW3",0x08,EQUALS,0x08)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_CONDITION("DSW3",0x08,EQUALS,0x08)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_CONDITION("DSW3",0x08,EQUALS,0x08)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_CONDITION("DSW3",0x08,EQUALS,0x08)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) PORT_CONDITION("DSW3",0x08,EQUALS,0x08)
- PORT_BIT( 0x0000003f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW3",0x08,EQUALS,0x00)
- PORT_BIT( 0xffffffc0, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("MUX_9D")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_CONDITION("DSW3",0x08,EQUALS,0x08)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_CONDITION("DSW3",0x08,EQUALS,0x08)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_CONDITION("DSW3",0x08,EQUALS,0x08)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_CONDITION("DSW3",0x08,EQUALS,0x08)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_CONDITION("DSW3",0x08,EQUALS,0x08)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) PORT_CONDITION("DSW3",0x08,EQUALS,0x08)
- PORT_BIT( 0x0000003f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW3",0x08,EQUALS,0x00)
- PORT_BIT( 0xffffffc0, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
- PORT_START("MUX_9B")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_CONDITION("DSW3",0x08,EQUALS,0x08)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_CONDITION("DSW3",0x08,EQUALS,0x08)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_CONDITION("DSW3",0x08,EQUALS,0x08)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_CONDITION("DSW3",0x08,EQUALS,0x08)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_CONDITION("DSW3",0x08,EQUALS,0x08)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW3",0x08,EQUALS,0x08)
- PORT_BIT( 0x0000003f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW3",0x08,EQUALS,0x00)
- PORT_BIT( 0xffffffc0, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
- PORT_START("MUX_97")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_CONDITION("DSW3",0x08,EQUALS,0x08)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_CONDITION("DSW3",0x08,EQUALS,0x08)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_CONDITION("DSW3",0x08,EQUALS,0x08)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_CONDITION("DSW3",0x08,EQUALS,0x08)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW3",0x08,EQUALS,0x08)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSW3",0x08,EQUALS,0x08)
- PORT_BIT( 0x0000003f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW3",0x08,EQUALS,0x00)
- PORT_BIT( 0xffffffc0, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
- PORT_START("IN1")
- PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("hopper", ticket_dispenser_device, line_r) // might be coin out
- PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK )
- PORT_SERVICE_NO_TOGGLE( 0x00000010, IP_ACTIVE_LOW )
- PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) // clears stats in bookkeeping
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) PORT_CONDITION("DSW3", 0x08,EQUALS,0x00)
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_CONDITION("DSW3", 0x08, EQUALS, 0x08)
- PORT_DIPNAME( 0x00000080, 0x00000080, DEF_STR( Unknown ) ) // unused??
- PORT_DIPSETTING( 0x00000080, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
- PORT_BIT( 0xffffff00, IP_ACTIVE_LOW, IPT_UNUSED )
-
-
-
-
- PORT_START("DSW1")
- PORT_DIPNAME( 0x00000003, 0x00000003, DEF_STR( Coin_A ) )
- PORT_DIPSETTING( 0x00000000, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x00000003, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x00000002, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x00000001, DEF_STR( 1C_3C ) )
- PORT_DIPNAME( 0x0000000c, 0x0000000c, "Note Value" ) // used if DSW3 bit 0x02 is changed
- PORT_DIPSETTING( 0x00000000, "100" )
- PORT_DIPSETTING( 0x00000004, "50" )
- PORT_DIPSETTING( 0x00000008, "10" )
- PORT_DIPSETTING( 0x0000000c, "5" )
- PORT_DIPNAME( 0x00000030, 0x00000030, "Ratio 2" )
- PORT_DIPSETTING( 0x00000000, "1:10" )
- PORT_DIPSETTING( 0x00000010, "1:5" )
- PORT_DIPSETTING( 0x00000020, "1:2" )
- PORT_DIPSETTING( 0x00000030, "1:1" )
- PORT_DIPNAME( 0x000000c0, 0x000000c0, "Percentage 1" )
- PORT_DIPSETTING( 0x00000000, "96" )
- PORT_DIPSETTING( 0x00000040, "92" )
- PORT_DIPSETTING( 0x00000080, "88" )
- PORT_DIPSETTING( 0x000000c0, "84" )
- PORT_BIT( 0xffffff00, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("DSW2")
- PORT_DIPNAME( 0x00000003, 0x00000003, "Value 2" )
- PORT_DIPSETTING( 0x00000000, "5" )
- PORT_DIPSETTING( 0x00000001, "3" )
- PORT_DIPSETTING( 0x00000002, "2" )
- PORT_DIPSETTING( 0x00000003, "1" )
- PORT_DIPNAME( 0x00000004, 0x00000004, "Value 3" )
- PORT_DIPSETTING( 0x00000004, "10" )
- PORT_DIPSETTING( 0x00000000, "20" )
- PORT_DIPNAME( 0x00000008, 0x00000000, DEF_STR( Demo_Sounds ) )
- PORT_DIPSETTING( 0x00000008, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
- PORT_DIPNAME( 0x00000010, 0x00000010, DEF_STR( Flip_Screen ) )
- PORT_DIPSETTING( 0x00000010, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
- PORT_DIPNAME( 0x000000e0, 0x000000e0, "Percentage 2" )
- PORT_DIPSETTING( 0x00000000, "60" )
- PORT_DIPSETTING( 0x00000020, "65" )
- PORT_DIPSETTING( 0x00000040, "70" )
- PORT_DIPSETTING( 0x00000060, "75" )
- PORT_DIPSETTING( 0x00000080, "80" )
- PORT_DIPSETTING( 0x000000a0, "85" )
- PORT_DIPSETTING( 0x000000c0, "90" )
- PORT_DIPSETTING( 0x000000e0, "95" )
- PORT_BIT( 0xffffff00, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("DSW3")
- PORT_DIPNAME( 0x00000001, 0x00000001, "Credit Limit" )
- PORT_DIPSETTING( 0x00000001, "100" )
- PORT_DIPSETTING( 0x00000000, "500" )
- PORT_DIPNAME( 0x00000002, 0x00000002, "Coin Type?" ) // uses different coinage
- PORT_DIPSETTING( 0x00000002, "Coins?" )
- PORT_DIPSETTING( 0x00000000, "Notes?" )
- PORT_DIPNAME( 0x00000004, 0x00000004, "Hopper Type?" )
- PORT_DIPSETTING( 0x00000004, "Normal?" ) // pressing Pay Out button activates hopper on bit 0x04 and pays out
- PORT_DIPSETTING( 0x00000000, "Other?" ) // pressing Pay Out activates something on bit 0x08, prints KEY OUT and quickly resets the game
- PORT_DIPNAME( 0x00000008, 0x00000008, "Control Type" )
- PORT_DIPSETTING( 0x00000008, "Mahjong Panel" )
- PORT_DIPSETTING( 0x00000000, "Joystick" )
- PORT_DIPNAME( 0x00000010, 0x00000010, "Symbol 5" )
- PORT_DIPSETTING( 0x00000010, "0" )
- PORT_DIPSETTING( 0x00000000, "1" )
- PORT_DIPNAME( 0x00000060, 0x00000060, "Percentage 3" )
- PORT_DIPSETTING( 0x00000000, "92" )
- PORT_DIPSETTING( 0x00000020, "88" )
- PORT_DIPSETTING( 0x00000040, "84" )
- PORT_DIPSETTING( 0x00000060, "80" )
- PORT_DIPNAME( 0x00000080, 0x00000080, "Symbol 6" )
- PORT_DIPSETTING( 0x00000080, "0" )
- PORT_DIPSETTING( 0x00000000, "1" )
- PORT_BIT( 0xffffff00, IP_ACTIVE_LOW, IPT_UNUSED )
-
-INPUT_PORTS_END
-
-
-void mjsenpu_state::video_start()
-{
-}
-
-
-
-uint32_t mjsenpu_state::screen_update_mjsenpu(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
-{
- int x,y,count;
- int color;
-
- uint32_t* vram;
-
- if (m_control & 0x01) vram = m_vram0;
- else vram = m_vram1;
-
-
-
- count = 0;
- for (y=0;y < 256;y++)
- {
- for (x=0;x < 512/4;x++)
- {
- color = vram[count] & 0x000000ff;
- bitmap.pix16(y, x*4 + 2) = color;
-
- color = (vram[count] & 0x0000ff00) >> 8;
- bitmap.pix16(y, x*4 + 3) = color;
-
- color = (vram[count] & 0x00ff0000) >> 16;
- bitmap.pix16(y, x*4 + 0) = color;
-
- color = (vram[count] & 0xff000000) >> 24;
- bitmap.pix16(y, x*4 + 1) = color;
-
- count++;
- }
- }
- return 0;
-}
-
-
-void mjsenpu_state::machine_start()
-{
- save_item(NAME(m_pal));
- save_item(NAME(m_vram0));
- save_item(NAME(m_vram1));
- save_item(NAME(m_control));
- save_item(NAME(m_mux));
-}
-
-void mjsenpu_state::machine_reset()
-{
-}
-
-/*
-following clocks are on the PCB
-
-22.1184
-27.000
-1.0000000
-
-*/
-
-void mjsenpu_state::mjsenpu(machine_config &config)
-{
- /* basic machine hardware */
- E132XT(config, m_maincpu, 27000000*2); /* ?? Mhz */
- m_maincpu->set_addrmap(AS_PROGRAM, &mjsenpu_state::mjsenpu_32bit_map);
- m_maincpu->set_addrmap(AS_IO, &mjsenpu_state::mjsenpu_io);
- m_maincpu->set_vblank_int("screen", FUNC(mjsenpu_state::irq0_line_hold));
-
- NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_1);
-
- // more likely coins out?
- TICKET_DISPENSER(config, m_hopper, attotime::from_msec(50), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_HIGH);
-
- /* 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(512, 256);
- screen.set_visarea(0, 512-1, 0, 256-16-1);
- screen.set_screen_update(FUNC(mjsenpu_state::screen_update_mjsenpu));
- screen.set_palette(m_palette);
-
- PALETTE(config, m_palette).set_entries(0x100);
-
- SPEAKER(config, "mono").front_center();
-
- OKIM6295(config, m_oki, 1000000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.00); /* 1 Mhz? */
-}
-
-
-ROM_START( mjsenpu )
- ROM_REGION32_BE( 0x80000, "user1", 0 ) /* Hyperstone CPU Code */
- ROM_LOAD( "u1", 0x000000, 0x080000, CRC(ebfb1079) SHA1(9d676c635d5ee464df5730518399e141ebc515ed) )
-
- ROM_REGION32_BE( 0x200000, "user2", 0 ) /* Hyperstone CPU Code */
- ROM_LOAD16_WORD_SWAP( "u13", 0x000000, 0x200000, CRC(a803c5a5) SHA1(61c7386a1bb6224b788de01293697d0e896839a8) )
-
- ROM_REGION( 0x080000, "oki", 0 )
- ROM_LOAD( "su2", 0x000000, 0x080000, CRC(848045d5) SHA1(4d32e1a5bd0937069dd8d50dfd8b63d4a45e40e6) )
-ROM_END
-
-
-
-READ32_MEMBER(mjsenpu_state::mjsenpu_speedup_r)
-{
- int pc = m_maincpu->pc();
-
- if (pc == 0xadb8)
- {
- m_maincpu->spin_until_interrupt();
- }
- else
- {
- // printf("%08x\n", pc);
- }
-
- return m_mainram[0x23468/4];
-}
-
-
-
-
-void mjsenpu_state::init_mjsenpu()
-{
-/*
-0000ADAE: LDHU.D L42, L38, $0
-0000ADB2: LDW.A 0, L39, $23468
-0000ADB8: ADDI L38, $1
-0000ADBA: STHU.D L42, L38, $0
-0000ADBE: CMPI L39, $0
-0000ADC0: BNE $adae
-
- (loops for 744256 instructions)
-*/
- // not especially effective, might be wrong.
- m_maincpu->space(AS_PROGRAM).install_read_handler(0x23468, 0x2346b, read32_delegate(*this, FUNC(mjsenpu_state::mjsenpu_speedup_r)));
-}
-
-
-GAME( 2002, mjsenpu, 0, mjsenpu, mjsenpu, mjsenpu_state, init_mjsenpu, ROT0, "Oriental Soft", "Mahjong Senpu", 0 )