diff options
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 |
commit | 77de7cba8939b2d4756796f944c1739dc0aa24f8 (patch) | |
tree | 47c55128d5cf1cb4c71f4013be75929bb5ae6297 | |
parent | a952a2fa89aba071a12b136ef6797eb1447ac5a5 (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.cpp | 7 | ||||
-rw-r--r-- | src/devices/machine/sunplus_gcm394.h | 2 | ||||
-rw-r--r-- | src/devices/machine/sunplus_gcm394_video.cpp | 2 | ||||
-rw-r--r-- | src/mame/drivers/sunplus_gcm394.cpp | 20 | ||||
-rw-r--r-- | src/mame/drivers/vii.cpp | 74 |
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 ) |