summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/simpl156.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/simpl156.cpp')
-rw-r--r--src/mame/drivers/simpl156.cpp1132
1 files changed, 0 insertions, 1132 deletions
diff --git a/src/mame/drivers/simpl156.cpp b/src/mame/drivers/simpl156.cpp
deleted file mode 100644
index be31c5e2848..00000000000
--- a/src/mame/drivers/simpl156.cpp
+++ /dev/null
@@ -1,1132 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:David Haywood
-/*
-
- "Simple" 156 based Data East Hardware
-
- Data East
- DE-0409-1
- DE-0491-1
-
- Mitchell
- MT5601-0 (slightly different component arrangement to Deco PCBs)
-
-
- Games Supported
-
- Data East:
- Joe & Mac Returns (Japanese version called Caveman Ninja 2 might exist)
- Chain Reaction / Magical Drop / Magical Drop Plus 1
-
- Mitchell games:
- Charlie Ninja
- Party Time: Gonta the Diver II / Ganbare! Gonta!! 2
- Osman / Cannon Dancer
-
-
- The DECO 156 is a 32-bit custom encrypted ARM5 chip connected to
- 16-bit hardware. Only ROM and System Work RAM is accessed via all
- 32 data lines.
-
- Info from Charles MacDonald:
-
- - The sound effects 6295 is clocked at exactly half the rate of the
- music 6295.
- - Both have the SS pin pulled high to select the sample rate of the
- ADPCM data. Depends on the input clock though, the rates are described
- in the data sheet.
- - Both are connected directly to their ROMs with no swapping on the
- address or data lines. The music ROM is a 16-bit ROM in byte mode.
-
- The 156 data bus has pull-up resistors so reading unused locations will
- return $FFFF.
-
- I traced out all the connections and confirmed that both video chips (52
- and 141) really are on the lower 16 bits of the 32-bit data bus, same
- with the palette RAM. Just the program ROM and 4K internal RAM to the
- 223 should be accessed as 32-bit. Not sure why that part isn't working
- right though.
-
- Each game has a 512K block of memory that is decoded in the same way.
- One of the PALs controls where this block starts at, for example
- 0x380000 for Magical Drop and 0x180000 for Osman:
-
- 000000-00FFFF : Main RAM (16K)
- 010000-01FFFF : Sprite RAM (8K)
- 020000-02FFFF : Palette RAM (4K)
- 030000-03FFFF : Read player inputs, write EEPROM and OKI banking
- 040000-04FFFF : PF1,2 control registers
- 050000-05FFFF : PF1,2 name tables
- 060000-06FFFF : PF1,2 row scroll
- 070000-07FFFF : Control register
-
- The ordering of items within the block does not change and the size of
- each region is always 64K. If any RAM or other I/O has to be mirrored,
- it likely fills out the entire 64K range.
-
- The control register (marked as MWA_NOP in the driver) pulls one of the
- DE156 pins high for a brief moment and low again. Perhaps it triggers an
- interrupt or reset? It doesn't seem to be connected to anything else, at
- least on my board.
-
- The sprite chip has 16K RAM but the highest address line is tied to
- ground, so only 8K is available. This is correctly implemented in the
- driver, I'm mentioning it to confirm it isn't banked or anything like that.
-
-
- Notes:
-
- Magical Drop / Magical Drop Plus / Chain Reaction
-
- Random crashes at 7mhz..
-
--- check this ---
-
-Are the OKI M6295 clocks from Heavy Smash are correct at least for the Mitchell games:
-
- - OKI M6295(1) clock: 1.000MHz (28 / 28), sample rate = 1000000 / 132
- - OKI M6295(2) clock: 2.000MHz (28 / 14), sample rate = 2000000 / 132
-
-Clocks for both chips appear to be generated by the 223 I/O ASIC. The divider might
-even be configurable.
-
-*/
-
-#include "emu.h"
-#include "includes/simpl156.h"
-
-#include "machine/decocrpt.h"
-#include "machine/deco156.h"
-#include "cpu/arm/arm.h"
-#include "machine/eepromser.h"
-#include "sound/okim6295.h"
-#include "screen.h"
-#include "speaker.h"
-
-
-static INPUT_PORTS_START( simpl156 )
- PORT_START("IN0")
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 )
- PORT_SERVICE_NO_TOGGLE( 0x0008, IP_ACTIVE_LOW )
- PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen") // all bits? check..
- PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read)
- PORT_BIT( 0xffff0000, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("IN1")
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 )
- PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
- PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
- PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
- PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
- PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
- PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
- PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
- PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START2 )
- PORT_BIT( 0xffff0000, IP_ACTIVE_LOW, IPT_UNUSED )
-INPUT_PORTS_END
-
-static INPUT_PORTS_START( magdrop )
- PORT_INCLUDE(simpl156)
-
- PORT_MODIFY("IN1")
- PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(1)
- PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(1)
- PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(1)
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(1)
- PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(2)
- PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(2)
- PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(2)
- PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(2)
- PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_OPTIONAL // not used in gameplay
- PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_OPTIONAL // not used in gameplay
-INPUT_PORTS_END
-
-
-void simpl156_state::eeprom_w(u32 data)
-{
- //int okibank;
-
- //okibank = data & 0x07;
-
- m_okimusic->set_rom_bank(data & 0x7);
-
- m_eeprom->clk_write(BIT(data, 5) ? ASSERT_LINE : CLEAR_LINE);
- m_eeprom->di_write(BIT(data, 4));
- m_eeprom->cs_write(BIT(data, 6) ? ASSERT_LINE : CLEAR_LINE);
-}
-
-
-/* we need to throw away bits for all ram accesses as the devices are connected as 16-bit */
-
-u32 simpl156_state::spriteram_r(offs_t offset)
-{
- return m_spriteram[offset] ^ 0xffff0000;
-}
-
-void simpl156_state::spriteram_w(offs_t offset, u32 data, u32 mem_mask)
-{
- data &= 0x0000ffff;
- mem_mask &= 0x0000ffff;
-
- COMBINE_DATA(&m_spriteram[offset]);
-}
-
-
-u32 simpl156_state::mainram_r(offs_t offset)
-{
- return m_mainram[offset] ^ 0xffff0000;
-}
-
-void simpl156_state::mainram_w(offs_t offset, u32 data, u32 mem_mask)
-{
- data &= 0x0000ffff;
- mem_mask &= 0x0000ffff;
-
- COMBINE_DATA(&m_mainram[offset]);
-}
-
-template<unsigned Layer>
-u32 simpl156_state::rowscroll_r(offs_t offset)
-{
- return m_rowscroll[Layer][offset] ^ 0xffff0000;
-}
-
-template<unsigned Layer>
-void simpl156_state::rowscroll_w(offs_t offset, u32 data, u32 mem_mask)
-{
- data &= 0x0000ffff;
- mem_mask &= 0x0000ffff;
-
- COMBINE_DATA(&m_rowscroll[Layer][offset]);
-}
-
-/* Memory Map controled by PALs */
-
-/* Joe and Mac Returns */
-void simpl156_state::joemacr_map(address_map &map)
-{
- map.unmap_value_high();
- map(0x000000, 0x07ffff).rom();
- map(0x100000, 0x107fff).rw(FUNC(simpl156_state::mainram_r), FUNC(simpl156_state::mainram_w)).share("mainram"); // main ram
- map(0x110000, 0x111fff).rw(FUNC(simpl156_state::spriteram_r), FUNC(simpl156_state::spriteram_w));
- map(0x120000, 0x120fff).rw(m_palette, FUNC(palette_device::read16), FUNC(palette_device::write16)).umask32(0x0000ffff).share("palette");
- map(0x130000, 0x130003).portr("IN1").w(FUNC(simpl156_state::eeprom_w));
- map(0x140000, 0x14001f).rw(m_deco_tilegen, FUNC(deco16ic_device::pf_control_dword_r), FUNC(deco16ic_device::pf_control_dword_w));
- map(0x150000, 0x151fff).rw(m_deco_tilegen, FUNC(deco16ic_device::pf1_data_dword_r), FUNC(deco16ic_device::pf1_data_dword_w));
- map(0x152000, 0x153fff).rw(m_deco_tilegen, FUNC(deco16ic_device::pf1_data_dword_r), FUNC(deco16ic_device::pf1_data_dword_w));
- map(0x154000, 0x155fff).rw(m_deco_tilegen, FUNC(deco16ic_device::pf2_data_dword_r), FUNC(deco16ic_device::pf2_data_dword_w));
- map(0x160000, 0x161fff).rw(FUNC(simpl156_state::rowscroll_r<0>), FUNC(simpl156_state::rowscroll_w<0>));
- map(0x164000, 0x165fff).rw(FUNC(simpl156_state::rowscroll_r<1>), FUNC(simpl156_state::rowscroll_w<1>));
- map(0x170000, 0x170003).readonly().nopw(); // ?
- map(0x180000, 0x180000).rw("okisfx", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- map(0x1c0000, 0x1c0000).rw(m_okimusic, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- map(0x200000, 0x200003).portr("IN0");
- map(0x201000, 0x201fff).ram().share("systemram"); // work ram (32-bit)
-}
-
-
-/* Chain Reaction */
-void simpl156_state::chainrec_map(address_map &map)
-{
- map.unmap_value_high();
- map(0x000000, 0x07ffff).rom(); // rom (32-bit)
- map(0x200000, 0x200003).portr("IN0");
- map(0x201000, 0x201fff).ram().share("systemram"); // work ram (32-bit)
- map(0x3c0000, 0x3c0000).rw(m_okimusic, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- map(0x400000, 0x407fff).rw(FUNC(simpl156_state::mainram_r), FUNC(simpl156_state::mainram_w)).share("mainram"); // main ram?
- map(0x410000, 0x411fff).rw(FUNC(simpl156_state::spriteram_r), FUNC(simpl156_state::spriteram_w));
- map(0x420000, 0x420fff).rw(m_palette, FUNC(palette_device::read16), FUNC(palette_device::write16)).umask32(0x0000ffff).share("palette");
- map(0x430000, 0x430003).portr("IN1").w(FUNC(simpl156_state::eeprom_w));
- map(0x440000, 0x44001f).rw(m_deco_tilegen, FUNC(deco16ic_device::pf_control_dword_r), FUNC(deco16ic_device::pf_control_dword_w));
- map(0x450000, 0x451fff).rw(m_deco_tilegen, FUNC(deco16ic_device::pf1_data_dword_r), FUNC(deco16ic_device::pf1_data_dword_w));
- map(0x452000, 0x453fff).rw(m_deco_tilegen, FUNC(deco16ic_device::pf1_data_dword_r), FUNC(deco16ic_device::pf1_data_dword_w));
- map(0x454000, 0x455fff).rw(m_deco_tilegen, FUNC(deco16ic_device::pf2_data_dword_r), FUNC(deco16ic_device::pf2_data_dword_w));
- map(0x460000, 0x461fff).rw(FUNC(simpl156_state::rowscroll_r<0>), FUNC(simpl156_state::rowscroll_w<0>));
- map(0x464000, 0x465fff).rw(FUNC(simpl156_state::rowscroll_r<1>), FUNC(simpl156_state::rowscroll_w<1>));
- map(0x470000, 0x470003).readonly().nopw(); // ??
- map(0x480000, 0x480000).rw("okisfx", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
-}
-
-
-/* Magical Drop */
-void simpl156_state::magdrop_map(address_map &map)
-{
- map.unmap_value_high();
- map(0x000000, 0x07ffff).rom();
- map(0x200000, 0x200003).portr("IN0");
- map(0x201000, 0x201fff).ram().share("systemram"); // work ram (32-bit)
- map(0x340000, 0x340000).rw(m_okimusic, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- map(0x380000, 0x387fff).rw(FUNC(simpl156_state::mainram_r), FUNC(simpl156_state::mainram_w)).share("mainram"); // main ram?
- map(0x390000, 0x391fff).rw(FUNC(simpl156_state::spriteram_r), FUNC(simpl156_state::spriteram_w));
- map(0x3a0000, 0x3a0fff).rw(m_palette, FUNC(palette_device::read16), FUNC(palette_device::write16)).umask32(0x0000ffff).share("palette");
- map(0x3b0000, 0x3b0003).portr("IN1").w(FUNC(simpl156_state::eeprom_w));
- map(0x3c0000, 0x3c001f).rw(m_deco_tilegen, FUNC(deco16ic_device::pf_control_dword_r), FUNC(deco16ic_device::pf_control_dword_w));
- map(0x3d0000, 0x3d1fff).rw(m_deco_tilegen, FUNC(deco16ic_device::pf1_data_dword_r), FUNC(deco16ic_device::pf1_data_dword_w));
- map(0x3d2000, 0x3d3fff).rw(m_deco_tilegen, FUNC(deco16ic_device::pf1_data_dword_r), FUNC(deco16ic_device::pf1_data_dword_w));
- map(0x3d4000, 0x3d5fff).rw(m_deco_tilegen, FUNC(deco16ic_device::pf2_data_dword_r), FUNC(deco16ic_device::pf2_data_dword_w));
- map(0x3e0000, 0x3e1fff).rw(FUNC(simpl156_state::rowscroll_r<0>), FUNC(simpl156_state::rowscroll_w<0>));
- map(0x3e4000, 0x3e5fff).rw(FUNC(simpl156_state::rowscroll_r<1>), FUNC(simpl156_state::rowscroll_w<1>));
- map(0x3f0000, 0x3f0003).readonly().nopw(); //?
- map(0x400000, 0x400000).rw("okisfx", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
-}
-
-
-/* Magical Drop Plus 1 */
-void simpl156_state::magdropp_map(address_map &map)
-{
- map.unmap_value_high();
- map(0x000000, 0x07ffff).rom();
- map(0x200000, 0x200003).portr("IN0");
- map(0x201000, 0x201fff).ram().share("systemram"); // work ram (32-bit)
- map(0x4c0000, 0x4c0000).rw(m_okimusic, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- map(0x680000, 0x687fff).rw(FUNC(simpl156_state::mainram_r), FUNC(simpl156_state::mainram_w)).share("mainram"); // main ram?
- map(0x690000, 0x691fff).rw(FUNC(simpl156_state::spriteram_r), FUNC(simpl156_state::spriteram_w));
- map(0x6a0000, 0x6a0fff).rw(m_palette, FUNC(palette_device::read16), FUNC(palette_device::write16)).umask32(0x0000ffff).share("palette");
- map(0x6b0000, 0x6b0003).portr("IN1").w(FUNC(simpl156_state::eeprom_w));
- map(0x6c0000, 0x6c001f).rw(m_deco_tilegen, FUNC(deco16ic_device::pf_control_dword_r), FUNC(deco16ic_device::pf_control_dword_w));
- map(0x6d0000, 0x6d1fff).rw(m_deco_tilegen, FUNC(deco16ic_device::pf1_data_dword_r), FUNC(deco16ic_device::pf1_data_dword_w));
- map(0x6d2000, 0x6d3fff).rw(m_deco_tilegen, FUNC(deco16ic_device::pf1_data_dword_r), FUNC(deco16ic_device::pf1_data_dword_w));
- map(0x6d4000, 0x6d5fff).rw(m_deco_tilegen, FUNC(deco16ic_device::pf2_data_dword_r), FUNC(deco16ic_device::pf2_data_dword_w));
- map(0x6e0000, 0x6e1fff).rw(FUNC(simpl156_state::rowscroll_r<0>), FUNC(simpl156_state::rowscroll_w<0>));
- map(0x6e4000, 0x6e5fff).rw(FUNC(simpl156_state::rowscroll_r<1>), FUNC(simpl156_state::rowscroll_w<1>));
- map(0x6f0000, 0x6f0003).readonly().nopw(); // ?
- map(0x780000, 0x780000).rw("okisfx", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
-}
-
-
-/* Mitchell MT5601-0 PCB (prtytime, charlien, osman) */
-void simpl156_state::mitchell156_map(address_map &map)
-{
- map.unmap_value_high();
- map(0x000000, 0x07ffff).rom();
- map(0x100000, 0x100000).rw("okisfx", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- map(0x140000, 0x140000).rw(m_okimusic, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
- map(0x180000, 0x187fff).rw(FUNC(simpl156_state::mainram_r), FUNC(simpl156_state::mainram_w)).share("mainram"); // main ram
- map(0x190000, 0x191fff).rw(FUNC(simpl156_state::spriteram_r), FUNC(simpl156_state::spriteram_w));
- map(0x1a0000, 0x1a0fff).rw(m_palette, FUNC(palette_device::read16), FUNC(palette_device::write16)).umask32(0x0000ffff).share("palette");
- map(0x1b0000, 0x1b0003).portr("IN1").w(FUNC(simpl156_state::eeprom_w));
- map(0x1c0000, 0x1c001f).rw(m_deco_tilegen, FUNC(deco16ic_device::pf_control_dword_r), FUNC(deco16ic_device::pf_control_dword_w));
- map(0x1d0000, 0x1d1fff).rw(m_deco_tilegen, FUNC(deco16ic_device::pf1_data_dword_r), FUNC(deco16ic_device::pf1_data_dword_w));
- map(0x1d2000, 0x1d3fff).rw(m_deco_tilegen, FUNC(deco16ic_device::pf1_data_dword_r), FUNC(deco16ic_device::pf1_data_dword_w));
- map(0x1d4000, 0x1d5fff).rw(m_deco_tilegen, FUNC(deco16ic_device::pf2_data_dword_r), FUNC(deco16ic_device::pf2_data_dword_w));
- map(0x1e0000, 0x1e1fff).rw(FUNC(simpl156_state::rowscroll_r<0>), FUNC(simpl156_state::rowscroll_w<0>));
- map(0x1e4000, 0x1e5fff).rw(FUNC(simpl156_state::rowscroll_r<1>), FUNC(simpl156_state::rowscroll_w<1>));
- map(0x1f0000, 0x1f0003).readonly().nopw(); // ?
- map(0x200000, 0x200003).portr("IN0");
- map(0x201000, 0x201fff).ram().share("systemram"); // work ram (32-bit)
-}
-
-
-static const gfx_layout tile_8x8_layout =
-{
- 8,8,
- RGN_FRAC(1,2),
- 4,
- { RGN_FRAC(1,2)+8,RGN_FRAC(1,2)+0,RGN_FRAC(0,2)+8,RGN_FRAC(0,2)+0 },
- { STEP8(0,1) },
- { STEP8(0,8*2) },
- 8*16
-};
-
-static const gfx_layout tile_16x16_layout =
-{
- 16,16,
- RGN_FRAC(1,2),
- 4,
- { RGN_FRAC(1,2)+8,RGN_FRAC(1,2)+0,RGN_FRAC(0,2)+8,RGN_FRAC(0,2)+0 },
- { STEP8(8*2*16,1), STEP8(0,1) },
- { STEP16(0,8*2) },
- 32*16
-};
-
-static GFXDECODE_START( gfx_simpl156 )
- GFXDECODE_ENTRY( "gfx1", 0, tile_8x8_layout, 0, 32 ) /* Tiles (8x8) */
- GFXDECODE_ENTRY( "gfx1", 0, tile_16x16_layout, 0, 32 ) /* Tiles (16x16) */
- GFXDECODE_ENTRY( "gfx2", 0, tile_16x16_layout, 0x200, 32 ) /* Sprites (16x16) */
-GFXDECODE_END
-
-WRITE_LINE_MEMBER(simpl156_state::vblank_interrupt)
-{
- m_maincpu->set_input_line(ARM_IRQ_LINE, state ? HOLD_LINE : CLEAR_LINE);
-}
-
-
-DECO16IC_BANK_CB_MEMBER(simpl156_state::bank_callback)
-{
- return ((bank >> 4) & 0x7) * 0x1000;
-}
-
-DECOSPR_PRIORITY_CB_MEMBER(simpl156_state::pri_callback)
-{
- switch (pri & 0xc000)
- {
- case 0x0000: return 0;
- case 0x4000: return 0xf0;
- case 0x8000: return 0xf0 | 0xcc;
- case 0xc000: return 0xf0 | 0xcc; /* or 0xf0|0xcc|0xaa ? */
- }
-
- return 0;
-}
-
-
-void simpl156_state::chainrec(machine_config &config)
-{
- /* basic machine hardware */
- ARM(config, m_maincpu, 28_MHz_XTAL /* /4 */); /*DE156*/ /* 7.000 MHz */ /* measured at 7.. seems to need 28? */
- m_maincpu->set_addrmap(AS_PROGRAM, &simpl156_state::chainrec_map);
-
- EEPROM_93C46_16BIT(config, "eeprom"); // 93C45
-
- /* video hardware */
- screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
- screen.set_refresh_hz(58);
- screen.set_vblank_time(ATTOSECONDS_IN_USEC(800));
- screen.set_size(64*8, 32*8);
- screen.set_visarea(0*8, 40*8-1, 1*8, 31*8-1);
- screen.set_screen_update(FUNC(simpl156_state::screen_update));
- screen.set_palette(m_palette);
- screen.screen_vblank().set(FUNC(simpl156_state::vblank_interrupt));
-
- PALETTE(config, m_palette);
- m_palette->set_format(palette_device::xBGR_555, 4096);
- m_palette->set_membits(16);
-
- GFXDECODE(config, "gfxdecode", m_palette, gfx_simpl156);
-
- DECO16IC(config, m_deco_tilegen, 0);
- m_deco_tilegen->set_pf1_size(DECO_64x32);
- m_deco_tilegen->set_pf2_size(DECO_64x32);
- m_deco_tilegen->set_pf1_trans_mask(0x0f);
- m_deco_tilegen->set_pf2_trans_mask(0x0f);
- m_deco_tilegen->set_pf1_col_bank(0x00);
- m_deco_tilegen->set_pf2_col_bank(0x10);
- m_deco_tilegen->set_pf1_col_mask(0x0f);
- m_deco_tilegen->set_pf2_col_mask(0x0f);
- m_deco_tilegen->set_bank1_callback(FUNC(simpl156_state::bank_callback));
- m_deco_tilegen->set_bank2_callback(FUNC(simpl156_state::bank_callback));
- m_deco_tilegen->set_pf12_8x8_bank(0);
- m_deco_tilegen->set_pf12_16x16_bank(1);
- m_deco_tilegen->set_gfxdecode_tag("gfxdecode");
-
- DECO_SPRITE(config, m_sprgen, 0);
- m_sprgen->set_gfx_region(2);
- m_sprgen->set_pri_callback(FUNC(simpl156_state::pri_callback));
- m_sprgen->set_gfxdecode_tag("gfxdecode");
-
- SPEAKER(config, "lspeaker").front_left();
- SPEAKER(config, "rspeaker").front_right();
-
- okim6295_device &okisfx(OKIM6295(config, "okisfx", 28_MHz_XTAL / 28, okim6295_device::PIN7_HIGH)); // divider not verified
- okisfx.add_route(ALL_OUTPUTS, "lspeaker", 0.6);
- okisfx.add_route(ALL_OUTPUTS, "rspeaker", 0.6);
-
- OKIM6295(config, m_okimusic, 28_MHz_XTAL / 14, okim6295_device::PIN7_HIGH); // divider not verified
- m_okimusic->add_route(ALL_OUTPUTS, "lspeaker", 0.2);
- m_okimusic->add_route(ALL_OUTPUTS, "rspeaker", 0.2);
-}
-
-void simpl156_state::magdrop(machine_config &config)
-{
- chainrec(config);
-
- /* basic machine hardware */
- m_maincpu->set_addrmap(AS_PROGRAM, &simpl156_state::magdrop_map);
-}
-
-void simpl156_state::magdropp(machine_config &config)
-{
- chainrec(config);
-
- /* basic machine hardware */
- m_maincpu->set_addrmap(AS_PROGRAM, &simpl156_state::magdropp_map);
-}
-
-void simpl156_state::joemacr(machine_config &config)
-{
- chainrec(config);
-
- /* basic machine hardware */
- m_maincpu->set_addrmap(AS_PROGRAM, &simpl156_state::joemacr_map);
-}
-
-void simpl156_state::mitchell156(machine_config &config)
-{
- chainrec(config);
-
- /* basic machine hardware */
- m_maincpu->set_addrmap(AS_PROGRAM, &simpl156_state::mitchell156_map);
-
- m_okimusic->set_clock(28_MHz_XTAL / 28);
-}
-
-
-/*
-
-Joe and Mac Returns
-Data East 1994
-
-This is a higher quality bootleg made with genuine DECO chips/parts.
-
-+-------------------------------+
-| 07.u46 04.u12|
-| VOL M6296 M6295 52 03.u11|
-|J 06.u45 62256 |
-|A 62256 02.u8h|
-|M PAL 141 01.u8l|
-|M 62256 |
-|A 223 62256 PAL 28MHz |
-| 62256 156 |
-| SW1 62256 223 |
-| 93C45 05.u29 |
-+-------------------------------+
-
-All roms are socketed eproms, no labels, just a number in pencel.
-
-05.u29 27c4096
-01.u8l 27c4096
-02.u8h 27c4096
-03.u11 27c4096
-04.u12 27c4096
-06.u45 27c160
-07.u46 27c020
-
-*/
-
-ROM_START( joemacr )
- ROM_REGION( 0x80000, "maincpu", 0 ) /* DE156 code (encrypted) */
- ROM_LOAD( "05.u29", 0x000000, 0x080000, CRC(74e9a158) SHA1(eee447303ac0884e152b89f59a9694afade87336) )
-
- ROM_REGION( 0x100000, "gfx1", 0 )
- ROM_LOAD( "01.u8l", 0x000000, 0x080000, CRC(4da4a2c1) SHA1(1ed4bd4337d8b185b56e326e662a8715e4d09e17) )
- ROM_LOAD( "02.u8h", 0x080000, 0x080000, CRC(642c08db) SHA1(9a541fd56ae34c24f803e08869702be6fafd81d1) )
-
- ROM_REGION( 0x100000, "gfx2", 0 )
- ROM_LOAD( "mbn01", 0x080000, 0x080000, CRC(a3a37353) SHA1(c4509c8268afb647c20e71b42ae8ebd2bdf075e6) ) /* 03.u11 */
- ROM_LOAD( "mbn02", 0x000000, 0x080000, CRC(aa2230c5) SHA1(43b7ac5c69cde1840a5255a8897e1c5d5f89fd7b) ) /* 04.u12 */
-
- ROM_REGION( 0x80000, "okisfx", 0 ) /* Oki samples */
- ROM_LOAD( "mbn04", 0x00000, 0x40000, CRC(dcbd4771) SHA1(2a1ab6b0fc372333c7eb17aab077fe1ca5ba1dea) ) /* 07.u46 */
-
- ROM_REGION( 0x200000, "okimusic", 0 ) /* samples? (banked?) */
- ROM_LOAD( "mbn03", 0x00000, 0x200000, CRC(70b71a2a) SHA1(45851b0692de73016fc9b913316001af4690534c) ) /* 06.u45 */
-ROM_END
-
-/*
-
-Joe and Mac Returns
-Data East 1994
-
-DE-0491-1
-
-156 MW00
- 223 223
- 141
-
- MBN00
-
- MBN01 52 MBN03 M6295
- MBN02 MBN04 M6295
-
-*/
-
-ROM_START( joemacra )
- ROM_REGION( 0x80000, "maincpu", 0 ) /* DE156 code (encrypted) */
- ROM_LOAD( "mw00", 0x000000, 0x080000, CRC(e1b78f40) SHA1(e611c317ada5a049a5e05d69c051e22a43fa2845) )
-
- ROM_REGION( 0x100000, "gfx1", 0 ) // rebuilt with roms from other set
- ROM_LOAD( "mbn00", 0x000000, 0x100000, CRC(11b2dac7) SHA1(71a50f606caddeb0ef266e2d3df9e429a4873f21) )
-
- ROM_REGION( 0x100000, "gfx2", 0 )
- ROM_LOAD( "mbn01", 0x080000, 0x080000, CRC(a3a37353) SHA1(c4509c8268afb647c20e71b42ae8ebd2bdf075e6) )
- ROM_LOAD( "mbn02", 0x000000, 0x080000, CRC(aa2230c5) SHA1(43b7ac5c69cde1840a5255a8897e1c5d5f89fd7b) )
-
- ROM_REGION( 0x80000, "okisfx", 0 ) /* Oki samples */
- ROM_LOAD( "mbn04", 0x00000, 0x40000, CRC(dcbd4771) SHA1(2a1ab6b0fc372333c7eb17aab077fe1ca5ba1dea) )
-
- ROM_REGION( 0x200000, "okimusic", 0 ) /* samples? (banked?) */
- ROM_LOAD( "mbn03", 0x00000, 0x200000, CRC(70b71a2a) SHA1(45851b0692de73016fc9b913316001af4690534c) )
-ROM_END
-
-ROM_START( joemacrj )
- ROM_REGION( 0x80000, "maincpu", 0 ) /* DE156 code (encrypted) */
- ROM_LOAD( "my00-.e1", 0x000000, 0x080000, CRC(2c184981) SHA1(976fbb554de96aa6405f6f64cd75b633439fe583) )
-
- ROM_REGION( 0x100000, "gfx1", 0 ) // rebuilt with roms from other set
- ROM_LOAD( "mbn00", 0x000000, 0x100000, CRC(11b2dac7) SHA1(71a50f606caddeb0ef266e2d3df9e429a4873f21) )
-
- ROM_REGION( 0x100000, "gfx2", 0 )
- ROM_LOAD( "mbn01", 0x080000, 0x080000, CRC(a3a37353) SHA1(c4509c8268afb647c20e71b42ae8ebd2bdf075e6) )
- ROM_LOAD( "mbn02", 0x000000, 0x080000, CRC(aa2230c5) SHA1(43b7ac5c69cde1840a5255a8897e1c5d5f89fd7b) )
-
- ROM_REGION( 0x80000, "okisfx", 0 ) /* Oki samples */
- ROM_LOAD( "mbn04", 0x00000, 0x40000, CRC(dcbd4771) SHA1(2a1ab6b0fc372333c7eb17aab077fe1ca5ba1dea) )
-
- ROM_REGION( 0x200000, "okimusic", 0 ) /* samples? (banked?) */
- ROM_LOAD( "mbn03", 0x00000, 0x200000, CRC(70b71a2a) SHA1(45851b0692de73016fc9b913316001af4690534c) )
-
- ROM_REGION16_BE( 0x80, "eeprom", 0 ) /* eeprom */
- ROM_LOAD16_WORD( "jmrj_ak93c45.h3", 0x00, 0x80, CRC(31f17522) SHA1(88fc10ffa2e0e3887ebaeafc0b132507e4c77d0d) )
-ROM_END
-
-/*
-
-Chain Reaction
-Data East 1995
-
-DEC-22VO
-DE-0409-1
-
-156 E1
- 223 2063 93C45
- 2063
- 223
- 141
- 28MHz 5864
- 5864
- 6264
- 6264
- MCC-00
-
- U5* U6* 52 MCC-03 AD-65
- U3* U4* MCC-04 AD-65
-
-* NOTE: These 4 roms are on a sub-board connecting through mcc-01 & mcc-02 sockets
-
-*/
-
-ROM_START( chainrec )
- ROM_REGION( 0x80000, "maincpu", 0 ) /* DE156 code (encrypted) */
- ROM_LOAD( "e1", 0x000000, 0x080000, CRC(8a8340ef) SHA1(4aaee56127b73453b862ff2a33dc241eeabf5658) ) /* No DECO ID number on label */
-
- ROM_REGION( 0x100000, "gfx1", 0 )
- ROM_LOAD( "mcc-00", 0x000000, 0x100000, CRC(646b03ec) SHA1(9a2fc11b1575032b5a784d88c3a90913068d1e69) )
-
- ROM_REGION( 0x200000, "gfx2", 0 )
- ROM_LOAD16_BYTE( "u3", 0x000000, 0x080000, CRC(92659721) SHA1(b446ce98ec9c2c16375ef00639cfb463b365b8f7) ) /* No DECO ID numbers on labels */
- ROM_LOAD16_BYTE( "u4", 0x000001, 0x080000, CRC(e304eb32) SHA1(61a647ec89695a6b25ff924bdc6d29cbd7aca82b) )
- ROM_LOAD16_BYTE( "u5", 0x100000, 0x080000, CRC(1b6f01ea) SHA1(753fc670707432e317d035b09b0bad0762fea731) )
- ROM_LOAD16_BYTE( "u6", 0x100001, 0x080000, CRC(531a56f2) SHA1(89602bb873a3b110bffc216f921ba228e53380f9) )
-
- ROM_REGION( 0x80000, "okisfx", 0 ) /* Oki samples */
- ROM_LOAD( "mcc-04", 0x00000, 0x40000, CRC(86ee6ade) SHA1(56ad3f432c7f430f19fcba7c89940c63da165906) )
-
- ROM_REGION( 0x200000, "okimusic", 0 ) /* samples? (banked?) */
- ROM_LOAD( "mcc-03", 0x00000, 0x100000, CRC(da2ebba0) SHA1(96d31dea4c7226ee1d386b286919fa334388c7a1) )
-
- ROM_REGION16_BE( 0x80, "eeprom", 0 ) /* eeprom */
- ROM_LOAD16_WORD( "eeprom-chainrec.bin", 0x00, 0x80, CRC(b6da3fbf) SHA1(bdc2bdeabf8686c1454737faf785b0d7501f9bde) )
-ROM_END
-
-/*
-
-Magical Drop / Magical Drop Plus 1
-Data East 1995
-
-DE-0409-1
-
-156 E1
- 223 2063 93C45
- 2063
- 223
- 141
- 28MHz 5864
- 5864
- 6264
- 6264
- MCC-00
-
- mcc-01 52 MCC-03 AD-65
- mcc-02 MCC-04 AD-65
-
-
-*/
-
-ROM_START( magdrop )
- ROM_REGION( 0x80000, "maincpu", 0 ) /* DE156 code (encrypted) */
- ROM_LOAD( "re00-2.e1", 0x000000, 0x080000, CRC(7138f10f) SHA1(ca93c3c2dc9a7dd6901c8429a6bf6883076a9b8f) )
-
- ROM_REGION( 0x100000, "gfx1", 0 )
- ROM_LOAD( "mcc-00", 0x000000, 0x100000, CRC(646b03ec) SHA1(9a2fc11b1575032b5a784d88c3a90913068d1e69) )
-
- ROM_REGION( 0x200000, "gfx2", 0 )
- ROM_LOAD( "mcc-01.a13", 0x100000, 0x100000, CRC(13d88745) SHA1(0ce4ec1481f31be860ee80322de6e32f9a566229) )
- ROM_LOAD( "mcc-02.a14", 0x000000, 0x100000, CRC(d0f97126) SHA1(3848a6f00d0e57aaf383298c4d111eb63a88b073) )
-
- ROM_REGION( 0x80000, "okisfx", 0 ) /* Oki samples */
- ROM_LOAD( "mcc-04", 0x00000, 0x40000, CRC(86ee6ade) SHA1(56ad3f432c7f430f19fcba7c89940c63da165906) )
-
- ROM_REGION( 0x200000, "okimusic", 0 ) /* samples? (banked?) */
- ROM_LOAD( "mcc-03", 0x00000, 0x100000, CRC(da2ebba0) SHA1(96d31dea4c7226ee1d386b286919fa334388c7a1) )
-
- ROM_REGION16_BE( 0x80, "eeprom", 0 ) /* eeprom */
- ROM_LOAD16_WORD_SWAP( "93c45.2h", 0x00, 0x80, CRC(16ce8d2d) SHA1(1a6883c75d34febbd92a16cfe204ff12550c85fd) )
-ROM_END
-
-ROM_START( magdropp )
- ROM_REGION( 0x80000, "maincpu", 0 ) /* DE156 code (encrypted) */
- ROM_LOAD( "rz00-1.e1", 0x000000, 0x080000, CRC(28caf639) SHA1(a17e792c82e65009e21680094acf093c0c4f1021) )
-
- ROM_REGION( 0x100000, "gfx1", 0 )
- ROM_LOAD( "mcc-00", 0x000000, 0x100000, CRC(646b03ec) SHA1(9a2fc11b1575032b5a784d88c3a90913068d1e69) )
-
- ROM_REGION( 0x200000, "gfx2", 0 )
- ROM_LOAD( "mcc-01.a13", 0x100000, 0x100000, CRC(13d88745) SHA1(0ce4ec1481f31be860ee80322de6e32f9a566229) )
- ROM_LOAD( "mcc-02.a14", 0x000000, 0x100000, CRC(d0f97126) SHA1(3848a6f00d0e57aaf383298c4d111eb63a88b073) )
-
- ROM_REGION( 0x80000, "okisfx", 0 ) /* Oki samples */
- ROM_LOAD( "mcc-04", 0x00000, 0x40000, CRC(86ee6ade) SHA1(56ad3f432c7f430f19fcba7c89940c63da165906) )
-
- ROM_REGION( 0x200000, "okimusic", 0 ) /* samples? (banked?) */
- ROM_LOAD( "mcc-03", 0x00000, 0x100000, CRC(da2ebba0) SHA1(96d31dea4c7226ee1d386b286919fa334388c7a1) )
-
- ROM_REGION16_BE( 0x80, "eeprom", 0 ) /* eeprom */
- ROM_LOAD16_WORD_SWAP( "eeprom.2h", 0x00, 0x80, CRC(d13d9edd) SHA1(e98ee2b696f0a7a8752dc30ef8b41bfe6598cbe4) )
-ROM_END
-
-/*
-
-Charlie Ninja
-(c)1995 Mitchell Corp.
-
-DEC-22VO (board is manufactured by DECO)
-MT5601-0
-------------------------------------------------------------
-| MBR03.14H MBR-01.14A |
-| |
-| OKI M6295 ND01-0.13H 52 |
-| |
---| OKI M6295 MBR02.12F |
- | |
---| CY7C185-25 MBR-00.9A |
-| CY7C185-25 |
-| |
-| |
-|J GAL16V8 28.000MHz |
-|A CY7C185-25 |
-|M CY7C185-25 141 |
-|M |
-|A 223 |
-| GAL16V8 |
-| GAL16V8 |
-| CY7C185-25 223 |
---| 93C45.2H CY7C185-25 |
- | 156 |
---| TESTSW ND00-1.1E |
-| |
-------------------------------------------------------------
-
-eprom 1e 27c4002 labeled ND 00-1
-eprom 13h 27c2001 labeled ND 01-0
-
-maskrom 14a 27c800 labeled MBR-01
-maskrom 14h 27c800 labeled MBR-03
-maskrom 12f 27c800 labeled MBR-02
-maskrom 9a 27c160 labeled MBR-00
-
-*/
-
-ROM_START( charlien )
- ROM_REGION( 0x80000, "maincpu", 0 ) /* DE156 code (encrypted) */
- ROM_LOAD( "nd00-1.1e", 0x000000, 0x080000, CRC(f18f4b23) SHA1(cb0c159b4dde3a3c5f295f270485996811e5e4d2) )
-
- ROM_REGION( 0x200000, "gfx1", 0 )
- ROM_LOAD( "mbr-00.9a", 0x000000, 0x080000, CRC(ecf2c7f0) SHA1(3c735a4eef2bc49f16ac9365a5689101f43c13e9) )
- ROM_CONTINUE( 0x100000, 0x080000)
- ROM_CONTINUE( 0x080000, 0x080000)
- ROM_CONTINUE( 0x180000, 0x080000)
-
- ROM_REGION( 0x200000, "gfx2", 0 )
- ROM_LOAD( "mbr-01.14a", 0x100000, 0x100000, CRC(46c90215) SHA1(152acdeea34ec1db3f761066a0c1ff6e43e47f9d) )
- ROM_LOAD( "mbr-03.14h", 0x000000, 0x100000, CRC(c448a68a) SHA1(4b607dfee269abdfeb710b74b73ef87dc2b30e8c) )
-
- ROM_REGION( 0x80000, "okisfx", 0 ) /* Oki samples */
- ROM_LOAD( "nd01-0.13h", 0x00000, 0x40000, CRC(635a100a) SHA1(f6ec70890892e7557097ccd519de37247bb8c98d) )
-
- ROM_REGION( 0x200000, "okimusic", 0 ) /* samples? (banked?) */
- ROM_LOAD( "mbr-02.12f", 0x00000, 0x100000, CRC(4f67d333) SHA1(608f921bfa6b7020c0ce72e5229b3f1489208b23) ) // 00, 01, 04, 05
-ROM_END
-
-
-/*
-
-Party Time: Gonta the Diver II / Ganbare! Gonta!! 2
-(c)1995 Mitchell Corp.
-
-DEC-22VO (board is manufactured by DECO)
-MT5601-0
-------------------------------------------------------------
-| MCB05.14H MCB-03.14D MCB-02.14A |
-| |
-| OKI M6295 PZ01-0.13H 52 MCB-01.13A |
-| |
---| OKI M6295 MCB04.12F |
- | |
---| CY7C185-25 MCB-00.9A |
-| CY7C185-25 |
-| |
-| |
-|J GAL16V8 28.000MHz |
-|A CY7C185-25 |
-|M CY7C185-25 141 |
-|M |
-|A 223 |
-| GAL16V8 |
-| GAL16V8 |
-| CY7C185-25 223 |
---| 93C45.2H CY7C185-25 |
- | 156 |
---| TESTSW PZ00-0.1E |
-| |
-------------------------------------------------------------
-
-CPU : DECO 156 100pin PQFP custom encrypted ARM
-Sound: M6295x2
-OSC : 28.0000MHz
-
-ROMs:
-pz_00-0.1e - Main program (27c4096) Party Time: Gonta the Diver II
-rd_00-0.1e - Main program (27c4096) Ganbare! Gonta!! 2
-
-mcb-00.9a - Graphics (23c16000)
-
-mcb-01.13a - Graphics (23c16000)
-mcb-02.14a |
-mcb-03.14d |
-mcb-05.14h /
-
-pz_01-0.13h - Samples (27c020) Party Time: Gonta the Diver II
-rd_01-0.13h - Samples (27c020) Ganbare! Gonta!! 2
-
-mcb-04.12f - Samples (23c16000)
-
-GALs (16V8B, not dumped):
-vz-00.5c
-vz-01.4e
-vz-02.8f
-
-*/
-
-ROM_START( prtytime )
- ROM_REGION( 0x80000, "maincpu", 0 ) /* DE156 code (encrypted) */
- ROM_LOAD( "pz_00-0.1e", 0x000000, 0x080000, CRC(ec715c87) SHA1(c9f28399d59b37977f31a5c67cb97af6c58947ae) )
-
- ROM_REGION( 0x200000, "gfx1", 0 )
- ROM_LOAD( "mcb-00.9a", 0x000000, 0x080000, CRC(c48a4f2b) SHA1(2dee5f8507b2a7e6f7e44b14f9abca36d0ebf78b) )
- ROM_CONTINUE( 0x100000, 0x080000)
- ROM_CONTINUE( 0x080000, 0x080000)
- ROM_CONTINUE( 0x180000, 0x080000)
-
- ROM_REGION( 0x800000, "gfx2", 0 )
- ROM_LOAD( "mcb-01.13a", 0x600000, 0x200000, CRC(06f40a57) SHA1(896f1d373e911dcff7223bf21756ad35b28b4c5d) )
- ROM_LOAD( "mcb-02.14a", 0x400000, 0x200000, CRC(423cfb38) SHA1(b8c772a8ab471c365a11a88c85e1c8c7d2ad6e80) )
- ROM_LOAD( "mcb-03.14d", 0x200000, 0x200000, CRC(0aef73af) SHA1(76cf13f53da5202da80820f98660edee1eef7f1a) )
- ROM_LOAD( "mcb-05.14h", 0x000000, 0x200000, CRC(81540cfb) SHA1(6f7bc62c3c4d4a29eb1e0cfb261ace461bbca57c) )
-
- ROM_REGION( 0x80000, "okisfx", 0 ) /* Oki samples */
- ROM_LOAD( "pz_01-0.13h", 0x00000, 0x40000, CRC(8925bce2) SHA1(0ff2d5db7a24a2af30bd753eba274572c32cc2e7) )
-
- ROM_REGION( 0x200000, "okimusic", 0 ) /* samples? (banked?) */
- ROM_LOAD( "mcb-04.12f", 0x00000, 0x200000, CRC(e23d3590) SHA1(dc8418edc525f56e84f26e9334d5576000b14e5f) )
-
- ROM_REGION16_BE( 0x80, "eeprom", 0 ) /* eeprom */
- ROM_LOAD16_WORD( "eeprom-prtytime.bin", 0x00, 0x80, CRC(105700da) SHA1(650d11236c5692c1454d7b823d5be4d3278d6576) )
-ROM_END
-
-ROM_START( gangonta )
- ROM_REGION( 0x80000, "maincpu", 0 ) /* DE156 code (encrypted) */
- ROM_LOAD( "rd_00-0.1e", 0x000000, 0x080000, CRC(f80f43bb) SHA1(f9d26829eb90d41a6c410d4d673fe9595f814868) )
-
- ROM_REGION( 0x200000, "gfx1", 0 )
- ROM_LOAD( "mcb-00.9a", 0x000000, 0x080000, CRC(c48a4f2b) SHA1(2dee5f8507b2a7e6f7e44b14f9abca36d0ebf78b) )
- ROM_CONTINUE( 0x100000, 0x080000)
- ROM_CONTINUE( 0x080000, 0x080000)
- ROM_CONTINUE( 0x180000, 0x080000)
-
- ROM_REGION( 0x800000, "gfx2", 0 )
- ROM_LOAD( "mcb-01.13a", 0x600000, 0x200000, CRC(06f40a57) SHA1(896f1d373e911dcff7223bf21756ad35b28b4c5d) )
- ROM_LOAD( "mcb-02.14a", 0x400000, 0x200000, CRC(423cfb38) SHA1(b8c772a8ab471c365a11a88c85e1c8c7d2ad6e80) )
- ROM_LOAD( "mcb-03.14d", 0x200000, 0x200000, CRC(0aef73af) SHA1(76cf13f53da5202da80820f98660edee1eef7f1a) )
- ROM_LOAD( "mcb-05.14h", 0x000000, 0x200000, CRC(81540cfb) SHA1(6f7bc62c3c4d4a29eb1e0cfb261ace461bbca57c) )
-
- ROM_REGION( 0x80000, "okisfx", 0 ) /* Oki samples */
- ROM_LOAD( "rd_01-0.13h", 0x00000, 0x40000, CRC(70fd18c6) SHA1(368cd8e10c5f5a13eb3813974a7e6b46a4fa6b6c) )
-
- ROM_REGION( 0x200000, "okimusic", 0 ) /* samples? (banked?) */
- ROM_LOAD( "mcb-04.12f", 0x00000, 0x200000, CRC(e23d3590) SHA1(dc8418edc525f56e84f26e9334d5576000b14e5f) )
-
- ROM_REGION16_BE( 0x80, "eeprom", 0 ) /* eeprom */
- ROM_LOAD16_WORD( "eeprom-gangonta.bin", 0x00, 0x80, CRC(27ba60a5) SHA1(1f65be84cfecda5545e7083bcea9db1681425279) )
-ROM_END
-
-/*
-
-Osman / Cannon Dancer
-(c)1996 Mitchell Corp.
-
-The game is very similar to Strider as it was programmed by some of the same programmers.
-
-PCB Layout
-----------
-
-DEC-22VO (board is manufactured by DECO)
-MT5601-0
-------------------------------------------------------------
-| MCF04.14H MCF-03.14D MCF-02.14A |
-| |
-| OKI M6295 SA01-0.13H 52 MCF-01.13A |
-| |
---| OKI M6295 MCF05.12F |
- | |
---| CY7C185-25 MCF-00.9A |
-| CY7C185-25 |
-| |
-| |
-|J GAL16V8 28.000MHz |
-|A CY7C185-25 |
-|M CY7C185-25 141 |
-|M |
-|A 223 |
-| GAL16V8 |
-| GAL16V8 |
-| CY7C185-25 223 |
---| 93C45.2H CY7C185-25 |
- | 156 |
---| TESTSW SA00-0.1E |
-| |
-------------------------------------------------------------
-
-*/
-
-ROM_START( osman )
- ROM_REGION( 0x80000, "maincpu", 0 ) /* DE156 code (encrypted) */
- ROM_LOAD( "sa00-0.1e", 0x000000, 0x080000, CRC(ec6b3257) SHA1(10a42a680ce122ab030eaa2ccd99d302cb77854e) )
-
- ROM_REGION( 0x200000, "gfx1", 0 )
- ROM_LOAD( "mcf-00.9a", 0x000000, 0x080000, CRC(247712dc) SHA1(bcb765afd7e756b68131c97c30d210de115d6b50) )
- ROM_CONTINUE( 0x100000, 0x080000)
- ROM_CONTINUE( 0x080000, 0x080000)
- ROM_CONTINUE( 0x180000, 0x080000)
-
- ROM_REGION( 0x800000, "gfx2", 0 )
- ROM_LOAD( "mcf-01.13a", 0x600000, 0x200000, CRC(83881e25) SHA1(ae82cf0f704e6efea94c6c1d276d4e3e5b3ebe43) )
- ROM_LOAD( "mcf-02.14a", 0x400000, 0x200000, CRC(21251b33) SHA1(d252fe5c6eef8cbc9327e4176b4868b1cb17a738) )
- ROM_LOAD( "mcf-03.14d", 0x200000, 0x200000, CRC(faf1d51d) SHA1(675dbbfe15b8010d54b2b3af26d42cdd753c2ce2) )
- ROM_LOAD( "mcf-04.14h", 0x000000, 0x200000, CRC(4fa55577) SHA1(e229ba9cce46b92ce255aa33b974e19b214c4017) )
-
- ROM_REGION( 0x80000, "okisfx", 0 ) /* Oki samples */
- ROM_LOAD( "sa01-0.13h", 0x00000, 0x40000, CRC(cea8368e) SHA1(1fcc641381fdc29bd50d3a4b23e67647f79e505a))
-
- ROM_REGION( 0x200000, "okimusic", 0 ) /* samples? (banked?) */
- ROM_LOAD( "mcf-05.12f", 0x00000, 0x200000, CRC(f007d376) SHA1(4ba20e5dabeacc3278b7f30c4462864cbe8f6984) )
-
- ROM_REGION16_BE( 0x80, "eeprom", 0 ) /* eeprom */
- ROM_LOAD16_WORD( "eeprom-osman.bin", 0x00, 0x80, CRC(509552b2) SHA1(b506692180ccd67f6ad48503a36ebfc4819817b1) )
-ROM_END
-
-/* NOTE: Cannon Dancer uses IDENTICAL roms to Osman. Region is contained in the eeprom settings which we set in the INIT function */
-
-ROM_START( candance )
- ROM_REGION( 0x80000, "maincpu", 0 ) /* DE156 code (encrypted) */
- ROM_LOAD( "sa00-0.1e", 0x000000, 0x080000, CRC(ec6b3257) SHA1(10a42a680ce122ab030eaa2ccd99d302cb77854e) )
-
- ROM_REGION( 0x200000, "gfx1", 0 )
- ROM_LOAD( "mcf-00.9a", 0x000000, 0x080000, CRC(247712dc) SHA1(bcb765afd7e756b68131c97c30d210de115d6b50) )
- ROM_CONTINUE( 0x100000, 0x080000)
- ROM_CONTINUE( 0x080000, 0x080000)
- ROM_CONTINUE( 0x180000, 0x080000)
-
- ROM_REGION( 0x800000, "gfx2", 0 )
- ROM_LOAD( "mcf-01.13a", 0x600000, 0x200000, CRC(83881e25) SHA1(ae82cf0f704e6efea94c6c1d276d4e3e5b3ebe43) )
- ROM_LOAD( "mcf-02.14a", 0x400000, 0x200000, CRC(21251b33) SHA1(d252fe5c6eef8cbc9327e4176b4868b1cb17a738) )
- ROM_LOAD( "mcf-03.14d", 0x200000, 0x200000, CRC(faf1d51d) SHA1(675dbbfe15b8010d54b2b3af26d42cdd753c2ce2) )
- ROM_LOAD( "mcf-04.14h", 0x000000, 0x200000, CRC(4fa55577) SHA1(e229ba9cce46b92ce255aa33b974e19b214c4017) )
-
- ROM_REGION( 0x80000, "okisfx", 0 ) /* Oki samples */
- ROM_LOAD( "sa01-0.13h", 0x00000, 0x40000, CRC(cea8368e) SHA1(1fcc641381fdc29bd50d3a4b23e67647f79e505a))
-
- ROM_REGION( 0x200000, "okimusic", 0 ) /* samples? (banked?) */
- ROM_LOAD( "mcf-05.12f", 0x00000, 0x200000, CRC(f007d376) SHA1(4ba20e5dabeacc3278b7f30c4462864cbe8f6984) )
-
- ROM_REGION16_BE( 0x80, "eeprom", 0 ) /* eeprom */
- ROM_LOAD16_WORD( "eeprom-candance.bin", 0x00, 0x80, CRC(0a0a8f6b) SHA1(4e07138ba7d615291c67162958c889540615e06f) )
-ROM_END
-
-
-/*
- Cannon Dancer / Osman are odd, they don't init their own Eeprom...
- Roms on boths games are identical, and the Eeprom contains several settings the user isn't
- permitted to change, including region and button config.. the first 2 bytes must match the
- last first 2 bytes in the last block of 8 bytes, and the at 0x20 there must be 0088 or the
- game won't boot
-
- The second byte of Eeprom contains the following
-
- (Switch 0 in test mode)
-
- -bss llfr (byte 0x01 / 0x79 of eeprom)
-
- *- = unknown / unused (no observed effect)
- *b = button config (2 buttons, or 3 buttons)
- s = number of special weapons (bombs)
- l = lives
- f = flip (screen rotation)
- *r = region
-
-
- other settings
-
- Switch 1 (byte 0x00 / 0x78 of eeprom)
-
- ppdd -ecs
-
- p = number of players (health bar?)
- d = difficulty
- *- = unknown / unused (no observed effect)
- e = extend score
- c = continue
- s = demo sound
-
- Switch 2 (byte 0x7d of eeprom)
-
- cccC CCxb
-
- ccc = coin1
- CCC = coin 2
- *x = breaks attract mode / game..
- b = blood
-
-
- items marked * the user can't configure in test mode
-
- I don't know if any of the other bytes in the eeprom are tested / used.
-
- 1 in eeprom is 0 in test mode
-
- Both games are currently configured to 3 buttons, its possible the game was never
- released with a 2 button configuration.
-
- NOTE: an actual read of the eeprom appears to be byteswapped vs. this data / the file
- MAME outputs
-
-*/
-
-
-void simpl156_state::init_simpl156()
-{
- uint8_t *rom = memregion("okimusic")->base();
- int length = memregion("okimusic")->bytes();
- std::vector<uint8_t> buf1(length);
-
- /* hmm low address line goes to banking chip instead? */
- for (u32 x = 0; x < length; x++)
- {
- u32 addr = bitswap<24> (x,23,
- 22,21, 0,20,
- 19,18,17,16,
- 15,14,13,12,
- 11,10, 9, 8,
- 7, 6, 5, 4,
- 3, 2, 1 );
-
- buf1[addr] = rom[x];
- }
-
- memcpy(rom, &buf1[0], length);
-
- deco56_decrypt_gfx(machine(), "gfx1");
- deco156_decrypt(machine());
-}
-
-/* Everything seems more stable if we run the CPU speed x4 and use Idle skips.. maybe it has an internal multipler? */
-READ32_MEMBER(simpl156_state::joemacr_speedup_r)
-{
- if (m_maincpu->pc() == 0x284)
- m_maincpu->spin_until_time(attotime::from_usec(400));
- return m_systemram[0x18/4];
-}
-
-
-void simpl156_state::init_joemacr()
-{
- m_maincpu->space(AS_PROGRAM).install_read_handler(0x0201018, 0x020101b, read32_delegate(*this, FUNC(simpl156_state::joemacr_speedup_r)));
- init_simpl156();
-}
-
-READ32_MEMBER(simpl156_state::chainrec_speedup_r)
-{
- if (m_maincpu->pc() == 0x2d4)
- m_maincpu->spin_until_time(attotime::from_usec(400));
- return m_systemram[0x18/4];
-}
-
-void simpl156_state::init_chainrec()
-{
- m_maincpu->space(AS_PROGRAM).install_read_handler(0x0201018, 0x020101b, read32_delegate(*this, FUNC(simpl156_state::chainrec_speedup_r)));
- init_simpl156();
-}
-
-READ32_MEMBER(simpl156_state::prtytime_speedup_r)
-{
- if (m_maincpu->pc() == 0x4f0)
- m_maincpu->spin_until_time(attotime::from_usec(400));
- return m_systemram[0xae0/4];
-}
-
-void simpl156_state::init_prtytime()
-{
- m_maincpu->space(AS_PROGRAM).install_read_handler(0x0201ae0, 0x0201ae3, read32_delegate(*this, FUNC(simpl156_state::prtytime_speedup_r)));
- init_simpl156();
-}
-
-
-READ32_MEMBER(simpl156_state::charlien_speedup_r)
-{
- if (m_maincpu->pc() == 0xc8c8)
- m_maincpu->spin_until_time(attotime::from_usec(400));
- return m_systemram[0x10/4];
-}
-
-void simpl156_state::init_charlien()
-{
- m_maincpu->space(AS_PROGRAM).install_read_handler(0x0201010, 0x0201013, read32_delegate(*this, FUNC(simpl156_state::charlien_speedup_r)));
- init_simpl156();
-}
-
-READ32_MEMBER(simpl156_state::osman_speedup_r)
-{
- if (m_maincpu->pc() == 0x5974)
- m_maincpu->spin_until_time(attotime::from_usec(400));
- return m_systemram[0x10/4];
-}
-
-void simpl156_state::init_osman()
-{
- m_maincpu->space(AS_PROGRAM).install_read_handler(0x0201010, 0x0201013, read32_delegate(*this, FUNC(simpl156_state::osman_speedup_r)));
- init_simpl156();
-
-}
-
-/* Data East games running on the DE-0409-1 or DE-0491-1 PCB */
-GAME( 1994, joemacr, 0, joemacr, simpl156, simpl156_state, init_joemacr, ROT0, "Data East Corporation", "Joe & Mac Returns (World, Version 1.1, 1994.05.27)", MACHINE_SUPPORTS_SAVE ) /* bootleg board with genuine DECO parts */
-GAME( 1994, joemacra, joemacr, joemacr, simpl156, simpl156_state, init_joemacr, ROT0, "Data East Corporation", "Joe & Mac Returns (World, Version 1.0, 1994.05.19)", MACHINE_SUPPORTS_SAVE )
-GAME( 1994, joemacrj, joemacr, joemacr, simpl156, simpl156_state, init_joemacr, ROT0, "Data East Corporation", "Joe & Mac Returns (Japan, Version 1.2, 1994.06.06)", MACHINE_SUPPORTS_SAVE )
-GAME( 1995, chainrec, 0, chainrec, magdrop, simpl156_state, init_chainrec, ROT0, "Data East Corporation", "Chain Reaction (World, Version 2.2, 1995.09.25)", MACHINE_SUPPORTS_SAVE )
-GAME( 1995, magdrop, chainrec, magdrop, magdrop, simpl156_state, init_chainrec, ROT0, "Data East Corporation", "Magical Drop (Japan, Version 1.1, 1995.06.21)", MACHINE_SUPPORTS_SAVE )
-GAME( 1995, magdropp, chainrec, magdropp, magdrop, simpl156_state, init_chainrec, ROT0, "Data East Corporation", "Magical Drop Plus 1 (Japan, Version 2.1, 1995.09.12)", MACHINE_SUPPORTS_SAVE )
-
-/* Mitchell games running on the DEC-22VO / MT5601-0 PCB */
-GAME( 1995, charlien, 0, mitchell156, simpl156, simpl156_state, init_charlien, ROT0, "Mitchell", "Charlie Ninja" , MACHINE_SUPPORTS_SAVE ) /* language in service mode */
-GAME( 1995, prtytime, 0, mitchell156, simpl156, simpl156_state, init_prtytime, ROT90, "Mitchell", "Party Time: Gonta the Diver II / Ganbare! Gonta!! 2 (World Release)", MACHINE_SUPPORTS_SAVE ) /* language in service mode */
-GAME( 1995, gangonta, prtytime, mitchell156, simpl156, simpl156_state, init_prtytime, ROT90, "Mitchell", "Ganbare! Gonta!! 2 / Party Time: Gonta the Diver II (Japan Release)", MACHINE_SUPPORTS_SAVE ) /* language in service mode */
-GAME( 1996, osman, 0, mitchell156, simpl156, simpl156_state, init_osman, ROT0, "Mitchell", "Osman (World)", MACHINE_SUPPORTS_SAVE )
-GAME( 1996, candance, osman, mitchell156, simpl156, simpl156_state, init_osman, ROT0, "Mitchell (Atlus license)", "Cannon Dancer (Japan)", MACHINE_SUPPORTS_SAVE )