summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author David Haywood <28625134+DavidHaywood@users.noreply.github.com>2020-01-09 23:01:04 +0000
committer ajrhacker <ajrhacker@users.noreply.github.com>2020-01-09 18:01:04 -0500
commit77de7cba8939b2d4756796f944c1739dc0aa24f8 (patch)
tree47c55128d5cf1cb4c71f4013be75929bb5ae6297
parenta952a2fa89aba071a12b136ef6797eb1447ac5a5 (diff)
telestory - document more buttons (nw) (#6152)
* telestory - document more buttons (nw) * comment that it looks like voice is hooked up tro the SIO * some button info based on test mode (nw) * update note (nw) * jak_s500 notes and observations (nw)
-rw-r--r--src/devices/machine/sunplus_gcm394.cpp7
-rw-r--r--src/devices/machine/sunplus_gcm394.h2
-rw-r--r--src/devices/machine/sunplus_gcm394_video.cpp2
-rw-r--r--src/mame/drivers/sunplus_gcm394.cpp20
-rw-r--r--src/mame/drivers/vii.cpp74
5 files changed, 58 insertions, 47 deletions
diff --git a/src/devices/machine/sunplus_gcm394.cpp b/src/devices/machine/sunplus_gcm394.cpp
index 7dbbbbfdc46..05e74a259a4 100644
--- a/src/devices/machine/sunplus_gcm394.cpp
+++ b/src/devices/machine/sunplus_gcm394.cpp
@@ -212,7 +212,8 @@ WRITE16_MEMBER(sunplus_gcm394_base_device::unkarea_7819_w) { LOGMASKED(LOG_GCM39
// **************************************** 78xx region stubs *************************************************
-READ16_MEMBER(sunplus_gcm394_base_device::unkarea_7868_r) { LOGMASKED(LOG_GCM394, "%s:sunplus_gcm394_base_device::unkarea_7868_r\n", machine().describe_context()); return 0x0000; }
+READ16_MEMBER(sunplus_gcm394_base_device::unkarea_7868_r) { LOGMASKED(LOG_GCM394, "%s:sunplus_gcm394_base_device::unkarea_7868_r\n", machine().describe_context()); return machine().rand(); }
+READ16_MEMBER(sunplus_gcm394_base_device::unkarea_7869_r) { LOGMASKED(LOG_GCM394, "%s:sunplus_gcm394_base_device::unkarea_7869_r\n", machine().describe_context()); return machine().rand(); }
READ16_MEMBER(sunplus_gcm394_base_device::unkarea_782d_r) { LOGMASKED(LOG_GCM394, "%s:sunplus_gcm394_base_device::unkarea_782d_r\n", machine().describe_context()); return m_782d; }
WRITE16_MEMBER(sunplus_gcm394_base_device::unkarea_782d_w) { LOGMASKED(LOG_GCM394, "%s:sunplus_gcm394_base_device::unkarea_782d_w %04x\n", machine().describe_context(), data); m_782d = data; }
@@ -414,6 +415,7 @@ WRITE16_MEMBER(sunplus_gcm394_base_device::unkarea_7935_w)
//checkirq6();
}
+READ16_MEMBER(sunplus_gcm394_base_device::unkarea_7944_r) { LOGMASKED(LOG_GCM394, "%s:sunplus_gcm394_base_device::unkarea_7944_r\n", machine().describe_context()); return machine().rand(); }
READ16_MEMBER(sunplus_gcm394_base_device::unkarea_7945_r) { LOGMASKED(LOG_GCM394, "%s:sunplus_gcm394_base_device::unkarea_7945_r\n", machine().describe_context()); return machine().rand(); }
@@ -584,7 +586,7 @@ void sunplus_gcm394_base_device::base_internal_map(address_map &map)
map(0x007863, 0x007863).rw(FUNC(sunplus_gcm394_base_device::unkarea_7863_r), FUNC(sunplus_gcm394_base_device::unkarea_7863_w)); // 7863 I/O PortA Attribute Register
map(0x007868, 0x007868).r(FUNC(sunplus_gcm394_base_device::unkarea_7868_r)); // on startup // 7868 I/O PortB Data Register
- // 7869 I/O PortB Buffer Register
+ map(0x007869, 0x007869).r(FUNC(sunplus_gcm394_base_device::unkarea_7869_r)); // 7869 I/O PortB Buffer Register // jak_s500
// 786a I/O PortB Direction Register
// 786b I/O PortB Attribute Register
// 786a I/O PortB Direction Register
@@ -657,6 +659,7 @@ void sunplus_gcm394_base_device::base_internal_map(address_map &map)
map(0x007935, 0x007935).rw(FUNC(sunplus_gcm394_base_device::unkarea_7935_r), FUNC(sunplus_gcm394_base_device::unkarea_7935_w));
map(0x007936, 0x007936).rw(FUNC(sunplus_gcm394_base_device::unkarea_7936_r), FUNC(sunplus_gcm394_base_device::unkarea_7936_w));
+ map(0x007944, 0x007944).r(FUNC(sunplus_gcm394_base_device::unkarea_7945_r)); // jak_s500
map(0x007945, 0x007945).r(FUNC(sunplus_gcm394_base_device::unkarea_7945_r)); // jak_s500
// possible adc?
diff --git a/src/devices/machine/sunplus_gcm394.h b/src/devices/machine/sunplus_gcm394.h
index acd9f84ae9a..9fa294e4e27 100644
--- a/src/devices/machine/sunplus_gcm394.h
+++ b/src/devices/machine/sunplus_gcm394.h
@@ -218,6 +218,7 @@ private:
DECLARE_WRITE16_MEMBER(unkarea_7835_w);
DECLARE_READ16_MEMBER(unkarea_7868_r);
+ DECLARE_READ16_MEMBER(unkarea_7869_r);
DECLARE_READ16_MEMBER(unkarea_782d_r);
DECLARE_WRITE16_MEMBER(unkarea_782d_w);
@@ -279,6 +280,7 @@ private:
DECLARE_READ16_MEMBER(unkarea_7936_r);
DECLARE_WRITE16_MEMBER(unkarea_7936_w);
+ DECLARE_READ16_MEMBER(unkarea_7944_r);
DECLARE_READ16_MEMBER(unkarea_7945_r);
DECLARE_WRITE16_MEMBER(unkarea_7960_w);
diff --git a/src/devices/machine/sunplus_gcm394_video.cpp b/src/devices/machine/sunplus_gcm394_video.cpp
index 0b7d1df65d0..1d1b1e9431c 100644
--- a/src/devices/machine/sunplus_gcm394_video.cpp
+++ b/src/devices/machine/sunplus_gcm394_video.cpp
@@ -384,7 +384,7 @@ void gcm394_base_video_device::draw(const rectangle &cliprect, uint32_t line, ui
if (nbits < nc_bpp)
{
- uint16_t b = m_space_read_cb((m++)&0xfffffff);
+ uint16_t b = m_space_read_cb((m++)&0x7ffffff); // smartfp suggests either 0x7ffffff mask, or some bits are being set incorrectly, jak_s500 needs over 0x3ffffff at least
b = (b << 8) | (b >> 8);
bits |= b << (nc_bpp - nbits);
nbits += 16;
diff --git a/src/mame/drivers/sunplus_gcm394.cpp b/src/mame/drivers/sunplus_gcm394.cpp
index e2aee599b3b..ba61226e905 100644
--- a/src/mame/drivers/sunplus_gcm394.cpp
+++ b/src/mame/drivers/sunplus_gcm394.cpp
@@ -1033,24 +1033,14 @@ static INPUT_PORTS_START( jak_s500 )
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) // A
- PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON3 )
PORT_START("P2")
PORT_DIPNAME( 0x0001, 0x0001, "P2" )
diff --git a/src/mame/drivers/vii.cpp b/src/mame/drivers/vii.cpp
index 7e29690a962..27dfeca5575 100644
--- a/src/mame/drivers/vii.cpp
+++ b/src/mame/drivers/vii.cpp
@@ -2317,8 +2317,8 @@ static INPUT_PORTS_START( sentx6p )
INPUT_PORTS_END
-static INPUT_PORTS_START( telestory )
- PORT_START("P1")
+static INPUT_PORTS_START( telestory ) // there is a hidden test mode, if you return rand() on this port you get it, TODO: figure out button combination
+ PORT_START("P1") // I/O test also lists 'Headphone 1' but it isn't mapped to any of these ports?
PORT_DIPNAME( 0x0001, 0x0001, "Port 1" )
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
@@ -2334,27 +2334,24 @@ static INPUT_PORTS_START( telestory )
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Pause / Menu")
- PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_NAME("Pause / Menu")
+ PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON8 ) PORT_NAME("Read To Me")
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Red / Triangle")
- PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Blue / Square")
- PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Yellow / Star")
- PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Green / Circle")
- PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Next Page")
- PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
+ PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Red / Triangle")
+ PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Blue / Square")
+ PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Yellow / Star")
+ PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Green / Circle")
+ PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Right Arrow / Next Page") // Test mode calls this Right Arrow / LED (so probalby LED output too)
+ PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) // port changes on these bits advance the word in manual mode (scroll wheel)
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) // port changes on these bits advance the word in manual mode (scroll wheel)
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("Left Arrow / Previous Page")
+
PORT_START("P2")
PORT_DIPNAME( 0x0001, 0x0001, "Port 2" )
@@ -2907,33 +2904,43 @@ void icanpian_state::icanpian(machine_config &config)
READ16_MEMBER(telestory_state::porta_r)
{
uint16_t data = m_io_p1->read();
- //logerror("Port B Read: %04x\n", data);
+ //logerror("%s: porta_r: %04x\n", machine().describe_context(), data);
return data;
}
-READ16_MEMBER(telestory_state::portb_r)
+WRITE16_MEMBER(telestory_state::porta_w)
{
- uint16_t data = m_io_p2->read();
- //logerror("Port B Read: %04x\n", data);
- return data;
-}
+ /*
+ not used as an output very often
-READ16_MEMBER(telestory_state::portc_r)
-{
- //logerror("%s: portc_r\n", machine().describe_context());
- return machine().rand() & 0x0c00;
+ ':maincpu' (0145D5): porta_w (0000)
+ ':maincpu' (0145DC): porta_w (0000)
+ ':maincpu' (0145F4): porta_w (0000)
+ ':maincpu' (0145F4): porta_w (6000)
+ */
+ logerror("%s: porta_w (%04x)\n", machine().describe_context(), data);
}
-WRITE16_MEMBER(telestory_state::porta_w)
+READ16_MEMBER(telestory_state::portb_r)
{
- //logerror("%s: porta_w (%04x)\n", machine().describe_context(), data);
+ // not used?
+ uint16_t data = m_io_p2->read();
+ logerror("%s: portb_r %04x\n", machine().describe_context(), data);
+ return data;
}
WRITE16_MEMBER(telestory_state::portb_w)
{
- //logerror("%s: portb_w (%04x)\n", machine().describe_context(), data);
+ // not used?
+ logerror("%s: portb_w (%04x)\n", machine().describe_context(), data);
}
+// What is here? accessed using serial protocol with clocked bits
+READ16_MEMBER(telestory_state::portc_r)
+{
+ //logerror("%s: portc_r\n", machine().describe_context());
+ return machine().rand() & 0x0c00; // bits need to change state or it doesn't boot
+}
WRITE16_MEMBER(telestory_state::portc_w)
{
@@ -4214,6 +4221,15 @@ CONS( 2006, icanpian, 0, 0, icanpian, icanpian, icanpian_state, empty_
CONS( 2005, tvgogo, 0, 0, tvgogo, tvgogo, tvgogo_state, empty_init, "Toyquest", "GoGo TV Video Vision", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // or TV Go Go - the game addons call it the 'Video Vision console'
// JAKKS Pacific / Toymax
+
+/* Sound data for the narrator is written to the SIO data port
+ 013127: D319 3D54 [3d54] = r1 (Cinderella) - 4-bit data?
+ The hidden test mode calls the speech test 'CELP' (possibly "Code-excited linear prediction" based?)
+ https://en.wikipedia.org/wiki/Code-excited_linear_prediction
+
+ TODO: check if it's a common implementation eg. Speex
+ SIO port is not currently implemented in spg2xx_io.cpp however
+*/
CONS( 2006, telestry, 0, 0, telestory, telestory, telestory_state, empty_init, "JAKKS Pacific Inc / Toymax", "Telestory", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )