mirror of
https://github.com/holub/mame
synced 2025-04-21 16:01:56 +03:00
new WORKING machines (#3427)
* new WORKING machines Master Boy (1987, Z80 hardware) [David Haywood, ARPA, Recreativas.org, The Dumping Union] * info update (nw)
This commit is contained in:
parent
8886db2a79
commit
26d3f01402
@ -1858,6 +1858,7 @@ files {
|
||||
MAME_DIR .. "src/mame/includes/glass.h",
|
||||
MAME_DIR .. "src/mame/video/glass.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/mastboy.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/mastboyo.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/rollext.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/splash.cpp",
|
||||
MAME_DIR .. "src/mame/includes/splash.h",
|
||||
|
@ -3,6 +3,8 @@
|
||||
/*
|
||||
Master Boy - Gaelco (c)1991
|
||||
|
||||
this is the 2nd release of Master Boy, the original 1987 game is on different hardware, see mastboyo.cpp for that one
|
||||
|
||||
MAME Driver by David Haywood
|
||||
|
||||
Special Thanks to Charles MacDonald
|
||||
@ -923,10 +925,10 @@ ROM_START( mastboya )
|
||||
/* 0x1c0000 tt 0x1fffff EMPTY */
|
||||
ROM_END
|
||||
|
||||
/* Is this actually official, or a hack? */
|
||||
/* Is this actually official, or a hack? - I think the internal ROM shouild be different on the Italian sets as it indexes the wrong strings on the startup screens, showing MARK instead of PLAY MARK etc. so marked as BAD_DUMP on these sets */
|
||||
ROM_START( mastboyi )
|
||||
ROM_REGION( 0x20000, "maincpu", 0 )
|
||||
ROM_LOAD( "hd647180.bin", 0x00000, 0x4000, CRC(75716dd1) SHA1(9b14b9b889b29b6022a3815de95487fb6a720d7a) ) // game code is internal to the CPU!
|
||||
ROM_LOAD( "hd647180.bin", 0x00000, 0x4000, BAD_DUMP CRC(75716dd1) SHA1(9b14b9b889b29b6022a3815de95487fb6a720d7a) ) // game code is internal to the CPU!
|
||||
ROM_LOAD( "3-mem-a.ic77", 0x04000, 0x4000, CRC(3ee33282) SHA1(26371e3bb436869461e9870409b69aa9fb1845d6) ) // sound data? (+ 1 piece of) 1ST AND 2ND HALF IDENTICAL
|
||||
ROM_CONTINUE( 0x04000, 0x4000 )
|
||||
ROM_CONTINUE( 0x04000, 0x4000 )
|
||||
@ -961,7 +963,7 @@ ROM_END
|
||||
// only one of the question roms differs (minor wording / spelling changes in most cases)
|
||||
ROM_START( mastboyia )
|
||||
ROM_REGION( 0x20000, "maincpu", 0 )
|
||||
ROM_LOAD( "hd647180.bin", 0x00000, 0x4000, CRC(75716dd1) SHA1(9b14b9b889b29b6022a3815de95487fb6a720d7a) ) // game code is internal to the CPU!
|
||||
ROM_LOAD( "hd647180.bin", 0x00000, 0x4000, BAD_DUMP CRC(75716dd1) SHA1(9b14b9b889b29b6022a3815de95487fb6a720d7a) ) // game code is internal to the CPU!
|
||||
ROM_LOAD( "3-mem-a.ic77", 0x04000, 0x4000, CRC(3ee33282) SHA1(26371e3bb436869461e9870409b69aa9fb1845d6) ) // sound data? (+ 1 piece of) 1ST AND 2ND HALF IDENTICAL
|
||||
ROM_CONTINUE( 0x04000, 0x4000 )
|
||||
ROM_CONTINUE( 0x04000, 0x4000 )
|
||||
|
240
src/mame/drivers/mastboyo.cpp
Normal file
240
src/mame/drivers/mastboyo.cpp
Normal file
@ -0,0 +1,240 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:David Haywood
|
||||
/*
|
||||
|
||||
Master Boy, Z80 hardware version
|
||||
|
||||
this is Gaelco's first game, although there should be a 1986 release too, likely on the same hardware
|
||||
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "sound/ay8910.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
#include "machine/nvram.h"
|
||||
|
||||
class mastboyo_state : public driver_device
|
||||
{
|
||||
public:
|
||||
mastboyo_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_fgram(*this, "fgram"),
|
||||
m_fgram2(*this, "fgram2"),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_bank1(*this, "bank1"),
|
||||
m_questionrom(*this, "questions"),
|
||||
m_paletterom(*this, "palette")
|
||||
{ }
|
||||
|
||||
DECLARE_WRITE8_MEMBER(fgram_w);
|
||||
DECLARE_WRITE8_MEMBER(fgram2_w);
|
||||
DECLARE_WRITE8_MEMBER(rombank_w);
|
||||
TILE_GET_INFO_MEMBER(get_fg_tile_info);
|
||||
DECLARE_PALETTE_INIT(mastboyo);
|
||||
|
||||
void mastboyo(machine_config &config);
|
||||
void mastboyo_map(address_map &map);
|
||||
void mastboyo_portmap(address_map &map);
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void video_start() override;
|
||||
uint32_t screen_update_mastboyo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
private:
|
||||
tilemap_t *m_fg_tilemap;
|
||||
|
||||
required_shared_ptr<uint8_t> m_fgram;
|
||||
required_shared_ptr<uint8_t> m_fgram2;
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_memory_bank m_bank1;
|
||||
required_region_ptr<uint8_t> m_questionrom;
|
||||
required_region_ptr<uint8_t> m_paletterom;
|
||||
};
|
||||
|
||||
TILE_GET_INFO_MEMBER(mastboyo_state::get_fg_tile_info)
|
||||
{
|
||||
int code = m_fgram[tile_index];
|
||||
int attr = m_fgram2[tile_index];
|
||||
SET_TILE_INFO_MEMBER(0,
|
||||
code,
|
||||
attr&0xf,
|
||||
0);
|
||||
}
|
||||
|
||||
void mastboyo_state::video_start()
|
||||
{
|
||||
m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(mastboyo_state::get_fg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mastboyo_state::fgram_w)
|
||||
{
|
||||
m_fgram[offset] = data;
|
||||
m_fg_tilemap->mark_tile_dirty(offset);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mastboyo_state::fgram2_w)
|
||||
{
|
||||
m_fgram2[offset] = data;
|
||||
m_fg_tilemap->mark_tile_dirty(offset);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(mastboyo_state::rombank_w)
|
||||
{
|
||||
m_bank1->set_entry(data&0xf);
|
||||
}
|
||||
|
||||
uint32_t mastboyo_state::screen_update_mastboyo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void mastboyo_state::mastboyo_portmap(address_map &map)
|
||||
{
|
||||
map.global_mask(0xff);
|
||||
map(0x00, 0x01).w("aysnd", FUNC(ym2149_device::address_data_w));
|
||||
map(0x00, 0x00).r("aysnd", FUNC(ym2149_device::data_r));
|
||||
}
|
||||
|
||||
|
||||
void mastboyo_state::mastboyo_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x3fff).rom();
|
||||
map(0x4000, 0x47ff).ram().share("nvram");
|
||||
map(0x5000, 0x53ff).ram().w(this, FUNC(mastboyo_state::fgram_w)).share("fgram");
|
||||
map(0x5400, 0x57ff).ram().w(this, FUNC(mastboyo_state::fgram2_w)).share("fgram2");
|
||||
map(0x6000, 0x6000).w(this, FUNC(mastboyo_state::rombank_w));
|
||||
// map(0x7000, 0x7000).portr("UNK"); // possible watchdog? or IRQ ack?
|
||||
map(0x8000, 0xffff).bankr("bank1");
|
||||
}
|
||||
|
||||
|
||||
static INPUT_PORTS_START( mastboyo )
|
||||
PORT_START("IN0")
|
||||
PORT_DIPNAME( 0x03, 0x01, DEF_STR( Coin_A ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) )
|
||||
PORT_DIPSETTING( 0x01, DEF_STR( 1C_1C ) )
|
||||
PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
|
||||
PORT_DIPSETTING( 0x03, "Disabled" )
|
||||
PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Coin_B ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
|
||||
PORT_DIPSETTING( 0x04, DEF_STR( 1C_2C ) )
|
||||
PORT_DIPSETTING( 0x0c, DEF_STR( 1C_3C ) )
|
||||
PORT_DIPSETTING( 0x08, DEF_STR( 1C_4C ) )
|
||||
PORT_DIPNAME( 0x30, 0x20, DEF_STR( Lives ) )
|
||||
PORT_DIPSETTING( 0x00, "2" )
|
||||
PORT_DIPSETTING( 0x10, "3" )
|
||||
PORT_DIPSETTING( 0x20, "4" )
|
||||
PORT_DIPSETTING( 0x30, "6" )
|
||||
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||
PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
|
||||
|
||||
PORT_START("IN1")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN2 )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START2 )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START1 )
|
||||
// note, Player 2 buttons must be used when entering name, and can be used for answering questions even in single player mode
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 Red / Enter Initial")
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("P2 Green / Delete Initial")
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 Red / <<")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 Green / >>")
|
||||
INPUT_PORTS_END
|
||||
|
||||
static const gfx_layout tiles8x8_layout =
|
||||
{
|
||||
8,8,
|
||||
RGN_FRAC(1,1),
|
||||
4,
|
||||
{ 0, 1, 2, 3 },
|
||||
{ 24, 28, 0, 4, 8, 12, 16, 20,}, // note, slightly strange order
|
||||
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
|
||||
32*8
|
||||
};
|
||||
|
||||
static GFXDECODE_START( mastboyo )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, tiles8x8_layout, 0, 16 )
|
||||
GFXDECODE_END
|
||||
|
||||
void mastboyo_state::machine_start()
|
||||
{
|
||||
m_bank1->configure_entries(0, 0x10, &m_questionrom[0x00000], 0x08000);
|
||||
m_bank1->set_entry(1);
|
||||
}
|
||||
|
||||
PALETTE_INIT_MEMBER(mastboyo_state, mastboyo)
|
||||
{
|
||||
for (int i = 0; i < palette.entries(); i++)
|
||||
{
|
||||
const int pal = (m_paletterom[i]&0x0f) | ((m_paletterom[palette.entries() + i]&0x0f) << 4);
|
||||
const int green = (pal & 0x07);
|
||||
const int red = (pal & 0x38) >> 3;
|
||||
const int blue = (pal & 0xc0) >> 6;
|
||||
|
||||
palette.set_pen_color(i, pal3bit(red), pal3bit(green), pal2bit(blue));
|
||||
}
|
||||
}
|
||||
|
||||
MACHINE_CONFIG_START(mastboyo_state::mastboyo)
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", Z80, 20_MHz_XTAL/6)
|
||||
MCFG_CPU_PROGRAM_MAP(mastboyo_map)
|
||||
MCFG_CPU_IO_MAP(mastboyo_portmap)
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(mastboyo_state, irq0_line_hold, 256.244f) // not sure, INT0 pin was measured at 256.244Hz
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
|
||||
MCFG_SCREEN_SIZE(256, 256)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 2*8, 256-2*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(mastboyo_state, screen_update_mastboyo)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", mastboyo)
|
||||
|
||||
MCFG_PALETTE_ADD("palette", 256)
|
||||
MCFG_PALETTE_INIT_OWNER(mastboyo_state, mastboyo)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_SOUND_ADD("aysnd", AY8910, 20_MHz_XTAL/4)
|
||||
MCFG_AY8910_PORT_A_READ_CB(IOPORT("IN0")) // DSW
|
||||
MCFG_AY8910_PORT_B_READ_CB(IOPORT("IN1")) // player inputs
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
ROM_START( mastboyo )
|
||||
ROM_REGION( 0x04000, "maincpu", 0 )
|
||||
ROM_LOAD( "masterboy-1987-27128-ic14.bin", 0x00000, 0x04000, CRC(d05a22eb) SHA1(528eb27622d28d098ceefc6a6fb43bb1a527444d) )
|
||||
|
||||
ROM_REGION( 0x04000, "gfx1", 0 )
|
||||
ROM_LOAD( "masterboy-1987-27128-mbfij-ic36.bin", 0x00000, 0x04000, CRC(aa2a174d) SHA1(a27eae023453877131646594100b575af7a3c473) )
|
||||
|
||||
ROM_REGION( 0x80000, "questions", ROMREGION_ERASEFF )
|
||||
/* IC6 - IC9 empty */
|
||||
ROM_LOAD( "masterboy-1987-27c512-ic10.bin", 0x40000, 0x10000, CRC(66da2826) SHA1(ef86efbfa251fc7cf62fe99b26551203fd599294) )
|
||||
ROM_LOAD( "masterboy-1987-27256-ic11.bin", 0x50000, 0x08000, CRC(40b07eeb) SHA1(93f62e0a2a330f7ff1041eaa7cba3ef42121b1a8) )
|
||||
ROM_LOAD( "masterboy-1987-27c512-ic12.bin", 0x60000, 0x10000, CRC(b2819e38) SHA1(e4dd036747221926d0f9f86e00e28f578decc942) )
|
||||
ROM_LOAD( "masterboy-1987-27c512-ic13.bin", 0x70000, 0x10000, CRC(71df82e9) SHA1(a0d75ec1181094e39d2246805e4dac5a621daa1a) )
|
||||
|
||||
ROM_REGION( 0x100, "proms", 0 ) // timing or memory mapping?
|
||||
ROM_LOAD( "masterboy-1987-82s129-d-ic23.bin", 0x000, 0x100, CRC(d5fd2dfd) SHA1(66e3afa9e73507db0647d125c0be992b27d08adc) )
|
||||
|
||||
ROM_REGION( 0x200, "palette", 0 )
|
||||
ROM_LOAD( "masterboy-1987-82s129-h-ic39.bin", 0x100, 0x100, CRC(8e965fc3) SHA1(b52c8e505438937c7a5d3e1393d54f0ad0425e78) )
|
||||
ROM_LOAD( "masterboy-1987-82s129-l-ic40.bin", 0x000, 0x100, CRC(4d061216) SHA1(1abf9320da75a3fd23c6bdbcc4088d18e133c4e5) )
|
||||
ROM_END
|
||||
|
||||
GAME( 1987, mastboyo, 0, mastboyo, mastboyo, mastboyo_state, 0, ROT0, "Gaelco (Covielsa license)", "Master Boy (1987, Z80 hardware)", MACHINE_SUPPORTS_SAVE )
|
@ -18510,10 +18510,13 @@ markham // TVG14 (c) 1983 Sun Electronics
|
||||
marywu //
|
||||
|
||||
@source:mastboy.cpp
|
||||
mastboy // (c) 1987 - No Ref on the PCB
|
||||
mastboya // (c) 1987 - No Ref on the PCB
|
||||
mastboyi // (c) 1987 - No Ref on the PCB
|
||||
mastboyia // (c) 1987 - No Ref on the PCB
|
||||
mastboy // (c) 1991 - No Ref on the PCB
|
||||
mastboya // (c) 1991 - No Ref on the PCB
|
||||
mastboyi // (c) 1991 - No Ref on the PCB
|
||||
mastboyia // (c) 1991 - No Ref on the PCB
|
||||
|
||||
@source:mastboyo.cpp
|
||||
mastboyo // (c) 1987 - No Ref on the PCB
|
||||
|
||||
@source:matmania.cpp
|
||||
excthour // TA-0015 (c) 1985 + Taito license
|
||||
|
Loading…
Reference in New Issue
Block a user