summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/banprestoms.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/banprestoms.cpp')
-rw-r--r--src/mame/drivers/banprestoms.cpp136
1 files changed, 117 insertions, 19 deletions
diff --git a/src/mame/drivers/banprestoms.cpp b/src/mame/drivers/banprestoms.cpp
index 1e77a137a88..5f667bce04f 100644
--- a/src/mame/drivers/banprestoms.cpp
+++ b/src/mame/drivers/banprestoms.cpp
@@ -26,16 +26,13 @@ The audio section also has unpopulated spaces marked for a Z80, a YM2203 and a S
TODO:
+- printer or hopper emulation
- the GFX emulation was adapted from other drivers using the Seibu customs, it needs more adjustments (i.e sprite / tilemap priority in doors' scene in attract mode)
- the Oki sounds terribly, only missing banking or what's going on?
-- controls / dips need to be completed;
-- currently stuck at the call assistant screen due to vendor test failing (printer?), but can enter test mode.
- To test, it's possible to get to the title screen with the following debugger commands:
- bpset ed0,1,{do PC=edc;g}
- bpset ee2,1,{do PC=ee4;g}
- bpset f20,1,{do PC=f24;g}
- bpset f28,1,{do PC=f30;g}
- soft reset (F3)
+- controls / dips need to be completed and better arranged;
+- currently stuck at the call assistant screen due to vendor test failing (printer / hopper?), but can enter test mode.
+ To test the games, it's possible to get the attract mode running by enabling the hack in the memory map at 0xe0004-0xe0005.
+ mariound won't let you coin up, while tvphoned will go back to the call assistant screen shortly after starting (both believed to be because of missing printer or hopper emulation)
*/
#include "emu.h"
@@ -221,7 +218,7 @@ void banprestoms_state::prg_map(address_map &map)
//map(0xc0140, 0xc0141).nopw();
map(0xe0000, 0xe0001).portr("DSW1");
map(0xe0002, 0xe0003).portr("IN1");
- map(0xe0004, 0xe0005).portr("IN2");
+ map(0xe0004, 0xe0005).portr("IN2"); //.lr16(NAME([this] () -> uint16_t { return (machine().rand() & 0x0004) | (ioport("IN2")->read() & 0xfffb); }));
}
static INPUT_PORTS_START( tvphoned )
@@ -244,14 +241,14 @@ static INPUT_PORTS_START( tvphoned )
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("IN2")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON13 ) // Card Emp in switch test
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON14 ) // Card Pos in switch test
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON15 ) // Card Pay in switch test
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) // ?
- PORT_SERVICE( 0x20, IP_ACTIVE_LOW )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) // ?
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON16 ) // Hook in switch test
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON13 ) // Card Emp in switch test
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON14 ) // Card Pos in switch test
+ PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_BUTTON15 ) // Card Pay in switch test
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNUSED ) // ?
+ PORT_SERVICE( 0x0020, IP_ACTIVE_LOW )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED ) // ?
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON16 ) // Hook in switch test
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNUSED ) // couldn't find anything from here on
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNUSED )
@@ -287,6 +284,73 @@ static INPUT_PORTS_START( tvphoned )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( marioun ) // inputs defined as IPT_UNKNOWN don't show any effect in switch test in test mode
+ PORT_START("IN1")
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) // upper space on the feet platform
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) // right space on the feet platform
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON3 ) // lower space on the feet platform
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON4 ) // left space on the feet platform
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON5 ) // left central space on the feet platform
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON6 ) // right central space on the feet platform
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_SERVICE_NO_TOGGLE( 0x0200, IP_ACTIVE_LOW ) // also used to navigate in test mode
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("IN2")
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON7 ) // Card Emp
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON8 ) // Card Pos
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON9 ) // Card Pay
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+
+ PORT_START("DSW1") // marked SW0913 on PCB
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:1")
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:2")
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:3")
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:4")
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:5")
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:6")
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:7")
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:8")
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
@@ -316,8 +380,8 @@ static const gfx_layout charlayout =
static GFXDECODE_START( gfx_banprestoms )
GFXDECODE_ENTRY( "spr_gfx",0, tilelayout, 0x000, 0x40 )
- GFXDECODE_ENTRY( "bg_gfx", 0, tilelayout, 0x100, 0x10 ) // TODO, doesn't seem to be used by Doraemon
- GFXDECODE_ENTRY( "md_gfx", 0, tilelayout, 0x100, 0x10 ) // TODO, doesn't seem to be used by Doraemon
+ GFXDECODE_ENTRY( "bg_gfx", 0, tilelayout, 0x100, 0x10 ) // TODO, doesn't seem to be used by the dumped games
+ GFXDECODE_ENTRY( "md_gfx", 0, tilelayout, 0x100, 0x10 ) // TODO, doesn't seem to be used by the dumped games
GFXDECODE_ENTRY( "fg_gfx", 0, tilelayout, 0x100, 0x10 )
GFXDECODE_ENTRY( "tx_gfx", 0, charlayout, 0x200, 0x10 )
GFXDECODE_END
@@ -388,10 +452,44 @@ ROM_START( tvphoned )
ROM_LOAD( "sc003.u36", 0x400, 0x155, NO_DUMP ) // 18cv8pc-25
ROM_LOAD( "sc004c.u68", 0x600, 0x117, NO_DUMP ) // gal16v8a
ROM_LOAD( "sc006.u248", 0x800, 0x117, NO_DUMP ) // gal16v8a
+ROM_END
+
+ROM_START( marioun )
+ ROM_REGION( 0x100000, "maincpu", 0 )
+ ROM_LOAD16_BYTE( "s98_b02.u15", 0x00000, 0x20000, CRC(d88eecfc) SHA1(5a15a1f925ae10e439e5aee8f3ef5a2fa956b80f) )
+ ROM_LOAD16_BYTE( "s98_b01.u14", 0x00001, 0x20000, CRC(60f5e7b0) SHA1(ccbdc42d0d59ec4f96ced682afd879c9fa9f24cc) )
+
+ ROM_REGION( 0x80000, "spr_gfx", 0 )
+ ROM_LOAD( "s98_a05.u119", 0x00000, 0x80000, CRC(b8317dd8) SHA1(37f0be38607e40d7925faf9731b95577cbd56bb0) )
+
+ ROM_REGION( 0x80000, "gfx_tiles", 0 )
+ ROM_LOAD( "s98_a04.u18", 0x00000, 0x80000, CRC(b107c5a0) SHA1(d4e7ef71bfb9a10e72b6292405d0378c95ebba25) ) // TODO: are all of the following used? in attract it seems only fg_gfx and tx_gfx are used
+
+ ROM_REGION( 0x80000, "bg_gfx", 0 )
+ ROM_COPY( "gfx_tiles" , 0x00000, 0x00000, 0x80000)
+
+ ROM_REGION( 0x80000, "md_gfx", 0 )
+ ROM_COPY( "gfx_tiles" , 0x00000, 0x00000, 0x80000)
+ ROM_REGION( 0x80000, "fg_gfx", 0 )
+ ROM_COPY( "gfx_tiles" , 0x00000, 0x00000, 0x80000)
+
+ ROM_REGION( 0x80000, "tx_gfx", 0 )
+ ROM_COPY( "gfx_tiles" , 0x00000, 0x00000, 0x80000)
+
+ ROM_REGION( 0x100000, "oki", 0 )
+ ROM_LOAD( "s98_a03.u17", 0x000000, 0x100000, CRC(d6b89223) SHA1(7d7ab34decb994caac82178455f014628cf070b8) )
+
+ ROM_REGION( 0xa00, "plds", 0 )
+ ROM_LOAD( "sc001.u110", 0x000, 0x104, NO_DUMP ) // tibpal16l8-25cn
+ ROM_LOAD( "sc002.u235", 0x200, 0x104, NO_DUMP ) // tibpal16l8-25cn
+ ROM_LOAD( "sc003.u36", 0x400, 0x155, NO_DUMP ) // 18cv8pc-25
+ ROM_LOAD( "sc004c.u68", 0x600, 0x117, NO_DUMP ) // gal16v8a
+ ROM_LOAD( "sc006.u248", 0x800, 0x117, NO_DUMP ) // gal16v8a
ROM_END
} // Anonymous namespace
GAME( 1991, tvphoned, 0, banprestoms, tvphoned, banprestoms_state, empty_init, ROT0, "Banpresto", "TV Phone Doraemon", MACHINE_IS_SKELETON )
+GAME( 1993, marioun, 0, banprestoms, marioun, banprestoms_state, empty_init, ROT0, "Banpresto", "Mario Sports Day", MACHINE_IS_SKELETON )