summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author angelosa <salese_corp_ltd@email.it>2016-09-28 21:13:13 +0200
committer angelosa <salese_corp_ltd@email.it>2016-09-28 21:13:38 +0200
commitdd7d97ad600dfdbe778aa2217109d37457401092 (patch)
tree669b3c0c696eaf6ac9a3e51ba2b20b0050dadee9
parente0747962dad5f7d32a299e477cfb3edf1071c13b (diff)
pdriftl: spotted link ID and link communication mode, game playable in stand-alone, pending MNW promotion, nw
bigrun: link protocol notes, nw
-rw-r--r--src/mame/drivers/cischeat.cpp4
-rw-r--r--src/mame/drivers/segaybd.cpp43
-rw-r--r--src/mame/includes/segaybd.h2
3 files changed, 44 insertions, 5 deletions
diff --git a/src/mame/drivers/cischeat.cpp b/src/mame/drivers/cischeat.cpp
index 70d7aeb64e3..6ae4e0295d6 100644
--- a/src/mame/drivers/cischeat.cpp
+++ b/src/mame/drivers/cischeat.cpp
@@ -214,6 +214,10 @@ static ADDRESS_MAP_START( bigrun_map, AS_PROGRAM, 16, cischeat_state )
AM_RANGE(0x082308, 0x082309) AM_WRITE(cischeat_comms_w)
AM_RANGE(0x082400, 0x082401) AM_WRITE(active_layers_w)
+ /* It's actually 0x840000-0x847ff, divided in four banks and shared with other boards.
+ Each board expects reads from the other boards and writes to own bank.
+ Amusingly, if you run the communication test as ID = X then soft reset -> ID = Y, what was at ID = X gets an OK in the second test
+ so it's likely to be the only thing needed. */
AM_RANGE(0x084000, 0x087fff) AM_RAM // Linking with other units
AM_RANGE(0x088000, 0x08bfff) AM_RAM AM_SHARE("share2") // Sharedram with sub CPU#2
AM_RANGE(0x08c000, 0x08ffff) AM_RAM AM_SHARE("share1") // Sharedram with sub CPU#1
diff --git a/src/mame/drivers/segaybd.cpp b/src/mame/drivers/segaybd.cpp
index c20dccc7c7d..637ce3f72eb 100644
--- a/src/mame/drivers/segaybd.cpp
+++ b/src/mame/drivers/segaybd.cpp
@@ -808,17 +808,19 @@ static ADDRESS_MAP_START( link_map, AS_PROGRAM, 8, segaybd_state )
AM_RANGE(0x4000, 0x47ff) AM_DEVREADWRITE("mb8421", mb8421_device, right_r, right_w)
ADDRESS_MAP_END
+#if 0
READ8_MEMBER(segaybd_state::link_portc0_r)
{
return 0xf8;
}
+#endif
static ADDRESS_MAP_START( link_portmap, AS_IO, 8, segaybd_state )
ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0xff)
-// AM_RANGE(0x40, 0x40) AM_READ_PORT("LinkDSW")
- AM_RANGE(0xc0, 0xc0) AM_READ(link_portc0_r)
+ AM_RANGE(0x40, 0x40) AM_READ_PORT("LinkID_DSW1")
+ AM_RANGE(0xc0, 0xc0) AM_READ_PORT("LinkID_DSW2")
ADDRESS_MAP_END
@@ -1223,11 +1225,11 @@ static INPUT_PORTS_START( pdriftl )
PORT_DIPSETTING( 0xb0, DEF_STR( 6C_1C ) )
PORT_DIPSETTING( 0x00, "Free Play (if Coin A too) or 1/1" )
- PORT_START("LinkDSW")
+ PORT_START("LinkID_DSW1")
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) // Affects banking between
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
@@ -1248,6 +1250,39 @@ static INPUT_PORTS_START( pdriftl )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+
+ PORT_START("LinkID_DSW2")
+ PORT_DIPNAME( 0x0f, 0x01, "Cabinet ID" )
+ PORT_DIPSETTING( 0x00, "0" )
+ PORT_DIPSETTING( 0x01, "1" ) // accessed unmapped areas if stand-alone isn't setup properly?
+ PORT_DIPSETTING( 0x02, "2" )
+ PORT_DIPSETTING( 0x03, "3" )
+ PORT_DIPSETTING( 0x04, "4" )
+ PORT_DIPSETTING( 0x05, "5" )
+ PORT_DIPSETTING( 0x06, "6" )
+ PORT_DIPSETTING( 0x07, "7" )
+ PORT_DIPSETTING( 0x08, "8" )
+ PORT_DIPSETTING( 0x09, "9" )
+ PORT_DIPSETTING( 0x0a, "10" )
+ PORT_DIPSETTING( 0x0b, "11" )
+ // enabled for debugging
+ PORT_DIPSETTING( 0x0c, "12 (invalid)" )
+ PORT_DIPSETTING( 0x0d, "13 (invalid)" )
+ PORT_DIPSETTING( 0x0e, "14 (invalid)" )
+ PORT_DIPSETTING( 0x0f, "15 (invalid)" )
+
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x00, "Communication Mode" )
+ PORT_DIPSETTING( 0x80, "Master/Slave" )
+ PORT_DIPSETTING( 0x00, "Stand-Alone" )
INPUT_PORTS_END
diff --git a/src/mame/includes/segaybd.h b/src/mame/includes/segaybd.h
index 42538b57b69..90b6a2e2777 100644
--- a/src/mame/includes/segaybd.h
+++ b/src/mame/includes/segaybd.h
@@ -62,7 +62,7 @@ public:
DECLARE_READ16_MEMBER( link_r );
DECLARE_READ16_MEMBER( link2_r );
DECLARE_WRITE16_MEMBER( link2_w );
- DECLARE_READ8_MEMBER( link_portc0_r );
+// DECLARE_READ8_MEMBER( link_portc0_r );
// game-specific output handlers
void gforce2_output_cb1(UINT16 data);