k28: rename to k28o

This commit is contained in:
hap 2024-07-12 16:21:48 +02:00
parent 0fe26ad681
commit 866adc351e
3 changed files with 36 additions and 31 deletions

View File

@ -44749,12 +44749,12 @@ monkmonk
@source:tiger/gamecom.cpp @source:tiger/gamecom.cpp
gamecom // Tiger Game.com gamecom // Tiger Game.com
@source:tiger/k28.cpp
k28
@source:tiger/k28m2.cpp @source:tiger/k28m2.cpp
k28m2 k28m2
@source:tiger/k28o.cpp
k28o
@source:tiger/pylo.cpp @source:tiger/pylo.cpp
pylo pylo

View File

@ -8,7 +8,11 @@ Tiger Electronics K-2-8: Talking Learning Computer (model 7-230/7-231)
3 models exist: 3 models exist:
- 7-230: darkblue case, toy-ish looks - 7-230: darkblue case, toy-ish looks
- 7-231: gray case, hardware is the same - 7-231: gray case, hardware is the same
- 7-232: this one is completely different hw --> driver k28m2.cpp - 7-232: this one is on completely different hardware*
*: Considering the different look and feel and the 4 year difference, k28o is not
a MAME clone set of k28. It's more like a predecessor instead of an older revision.
See k28.cpp for the newer version.
Hardware notes: Hardware notes:
- PCB label: PB-123 WIZARD, TIGER - PCB label: PB-123 WIZARD, TIGER
@ -18,8 +22,8 @@ Hardware notes:
- SC-01-A speech chip - SC-01-A speech chip
- module slot - module slot
6 modules were announced (see back of the box), but it's not known if they 6 modules were announced (see back of the box), but it's not known if they were
were actually released. actually released.
TODO: TODO:
- plosive consonants are very difficult to hear, it's an issue in votrax.cpp - plosive consonants are very difficult to hear, it's an issue in votrax.cpp
@ -38,15 +42,15 @@ TODO:
#include "speaker.h" #include "speaker.h"
// internal artwork // internal artwork
#include "k28.lh" #include "k28o.lh"
namespace { namespace {
class k28_state : public driver_device class k28o_state : public driver_device
{ {
public: public:
k28_state(const machine_config &mconfig, device_type type, const char *tag) : k28o_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag), driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_vfd(*this, "vfd"), m_vfd(*this, "vfd"),
@ -56,7 +60,7 @@ public:
m_inputs(*this, "IN.%u", 0) m_inputs(*this, "IN.%u", 0)
{ } { }
void k28(machine_config &config); void k28o(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(power_on); DECLARE_INPUT_CHANGED_MEMBER(power_on);
@ -89,7 +93,7 @@ private:
void power_off(); void power_off();
}; };
void k28_state::machine_start() void k28o_state::machine_start()
{ {
// register for savestates // register for savestates
save_item(NAME(m_power_on)); save_item(NAME(m_power_on));
@ -106,7 +110,7 @@ void k28_state::machine_start()
Power Power
*******************************************************************************/ *******************************************************************************/
void k28_state::machine_reset() void k28o_state::machine_reset()
{ {
m_vfd_data = 0; m_vfd_data = 0;
m_power_on = true; m_power_on = true;
@ -116,13 +120,13 @@ void k28_state::machine_reset()
m_onbutton_time = machine().time() + attotime::from_msec(250); m_onbutton_time = machine().time() + attotime::from_msec(250);
} }
INPUT_CHANGED_MEMBER(k28_state::power_on) INPUT_CHANGED_MEMBER(k28o_state::power_on)
{ {
if (newval && !m_power_on) if (newval && !m_power_on)
machine_reset(); machine_reset();
} }
void k28_state::power_off() void k28o_state::power_off()
{ {
m_power_on = false; m_power_on = false;
m_maincpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); m_maincpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
@ -137,7 +141,7 @@ void k28_state::power_off()
// MM5445 VFD // MM5445 VFD
void k28_state::vfd_output_w(u64 data) void k28o_state::vfd_output_w(u64 data)
{ {
// O1-O16: digit segment data // O1-O16: digit segment data
// O17-O25: digit select // O17-O25: digit select
@ -153,7 +157,7 @@ void k28_state::vfd_output_w(u64 data)
// I8021 ports // I8021 ports
void k28_state::mcu_p0_w(u8 data) void k28o_state::mcu_p0_w(u8 data)
{ {
// d0,d1: phoneme high bits // d0,d1: phoneme high bits
// d0-d2: input mux high bits // d0-d2: input mux high bits
@ -179,7 +183,7 @@ void k28_state::mcu_p0_w(u8 data)
m_tms6100->clk_w(0); m_tms6100->clk_w(0);
} }
u8 k28_state::mcu_p1_r() u8 k28o_state::mcu_p1_r()
{ {
u8 data = 0; u8 data = 0;
@ -197,13 +201,13 @@ u8 k28_state::mcu_p1_r()
return data ^ 0xff; return data ^ 0xff;
} }
u8 k28_state::mcu_p2_r() u8 k28o_state::mcu_p2_r()
{ {
// d3: VSM data // d3: VSM data
return (m_tms6100->data_line_r()) ? 8 : 0; return (m_tms6100->data_line_r()) ? 8 : 0;
} }
void k28_state::mcu_p2_w(u8 data) void k28o_state::mcu_p2_w(u8 data)
{ {
// d0: VFD driver serial data // d0: VFD driver serial data
m_vfd->data_w(data & 1); m_vfd->data_w(data & 1);
@ -220,7 +224,7 @@ void k28_state::mcu_p2_w(u8 data)
Input Ports Input Ports
*******************************************************************************/ *******************************************************************************/
static INPUT_PORTS_START( k28 ) static INPUT_PORTS_START( k28o )
PORT_START("IN.0") PORT_START("IN.0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("Yes/True") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("Yes/True")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('G') PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('G')
@ -272,7 +276,7 @@ static INPUT_PORTS_START( k28 )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME(".") PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME(".")
PORT_START("IN.5") PORT_START("IN.5")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_POWER_ON ) PORT_CHANGED_MEMBER(DEVICE_SELF, k28_state, power_on, 0) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_POWER_ON ) PORT_CHANGED_MEMBER(DEVICE_SELF, k28o_state, power_on, 0)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('B') PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('B')
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('L') PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('L')
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('V') PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('V')
@ -298,24 +302,25 @@ INPUT_PORTS_END
Machine Configs Machine Configs
*******************************************************************************/ *******************************************************************************/
void k28_state::k28(machine_config &config) void k28o_state::k28o(machine_config &config)
{ {
// basic machine hardware // basic machine hardware
I8021(config, m_maincpu, 3.579545_MHz_XTAL); I8021(config, m_maincpu, 3.579545_MHz_XTAL);
m_maincpu->bus_out_cb().set(FUNC(k28_state::mcu_p0_w)); m_maincpu->bus_out_cb().set(FUNC(k28o_state::mcu_p0_w));
m_maincpu->p1_in_cb().set(FUNC(k28_state::mcu_p1_r)); m_maincpu->p1_in_cb().set(FUNC(k28o_state::mcu_p1_r));
m_maincpu->p2_in_cb().set(FUNC(k28_state::mcu_p2_r)); m_maincpu->p2_in_cb().set(FUNC(k28o_state::mcu_p2_r));
m_maincpu->p2_out_cb().set(FUNC(k28_state::mcu_p2_w)); m_maincpu->p2_out_cb().set(FUNC(k28o_state::mcu_p2_w));
m_maincpu->prog_out_cb().set("vfd", FUNC(mm5445_device::clock_w)); m_maincpu->prog_out_cb().set("vfd", FUNC(mm5445_device::clock_w));
m_maincpu->t1_in_cb().set("speech", FUNC(votrax_sc01_device::request)); m_maincpu->t1_in_cb().set("speech", FUNC(votrax_sc01_device::request));
TMS6100(config, m_tms6100, 3.579545_MHz_XTAL / 15); // CLK tied to 8021 ALE pin TMS6100(config, m_tms6100, 3.579545_MHz_XTAL / 15); // CLK tied to 8021 ALE pin
// video hardware // video hardware
MM5445(config, m_vfd).output_cb().set(FUNC(k28_state::vfd_output_w)); MM5445(config, m_vfd).output_cb().set(FUNC(k28o_state::vfd_output_w));
PWM_DISPLAY(config, m_display).set_size(9, 16); PWM_DISPLAY(config, m_display).set_size(9, 16);
m_display->set_segmask(0x1ff, 0x3fff); m_display->set_segmask(0x1ff, 0x3fff);
config.set_default_layout(layout_k28);
config.set_default_layout(layout_k28o);
// sound hardware // sound hardware
SPEAKER(config, "mono").front_center(); SPEAKER(config, "mono").front_center();
@ -328,7 +333,7 @@ void k28_state::k28(machine_config &config)
ROM Definitions ROM Definitions
*******************************************************************************/ *******************************************************************************/
ROM_START( k28 ) ROM_START( k28o )
ROM_REGION( 0x1000, "maincpu", 0 ) ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "p8021_7-230-itl", 0x0000, 0x0400, CRC(15536d20) SHA1(fac98ce652340ffb2d00952697c3a9ce75393fa4) ) ROM_LOAD( "p8021_7-230-itl", 0x0000, 0x0400, CRC(15536d20) SHA1(fac98ce652340ffb2d00952697c3a9ce75393fa4) )
@ -346,4 +351,4 @@ ROM_END
*******************************************************************************/ *******************************************************************************/
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
SYST( 1981, k28, 0, 0, k28, k28, k28_state, empty_init, "Tiger Electronics", "K-2-8: Talking Learning Computer (model 7-230)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) SYST( 1981, k28o, 0, 0, k28o, k28o, k28o_state, empty_init, "Tiger Electronics", "K-2-8: Talking Learning Computer (model 7-230)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )