mirror of
https://github.com/holub/mame
synced 2025-05-12 09:08:53 +03:00
1133 lines
46 KiB
C++
1133 lines
46 KiB
C++
// 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
|
|
|
|
INTERRUPT_GEN_MEMBER(simpl156_state::interrupt)
|
|
{
|
|
device.execute().set_input_line(ARM_IRQ_LINE, HOLD_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);
|
|
m_maincpu->set_vblank_int("screen", FUNC(simpl156_state::interrupt));
|
|
|
|
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);
|
|
|
|
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), this);
|
|
m_deco_tilegen->set_bank2_callback(FUNC(simpl156_state::bank_callback), this);
|
|
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), this);
|
|
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(FUNC(simpl156_state::joemacr_speedup_r),this));
|
|
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(FUNC(simpl156_state::chainrec_speedup_r),this));
|
|
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(FUNC(simpl156_state::prtytime_speedup_r),this));
|
|
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(FUNC(simpl156_state::charlien_speedup_r),this));
|
|
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(FUNC(simpl156_state::osman_speedup_r),this));
|
|
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 )
|