mirror of
https://github.com/holub/mame
synced 2025-04-19 07:00:31 +03:00
k28: added skeleton driver for the SC-01 k28 (not a cloneset of the other one)
This commit is contained in:
parent
9827278296
commit
b0a3533fc5
@ -2767,6 +2767,7 @@ files {
|
||||
MAME_DIR .. "src/mame/includes/gamecom.h",
|
||||
MAME_DIR .. "src/mame/machine/gamecom.cpp",
|
||||
MAME_DIR .. "src/mame/video/gamecom.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/k28.cpp",
|
||||
}
|
||||
|
||||
createMESSProjects(_target, _subtarget, "tigertel")
|
||||
|
181
src/mame/drivers/k28.cpp
Normal file
181
src/mame/drivers/k28.cpp
Normal file
@ -0,0 +1,181 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:hap, Kevin Horton
|
||||
/***************************************************************************
|
||||
|
||||
K28
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
#include "machine/tms6100.h"
|
||||
#include "sound/votrax.h"
|
||||
|
||||
#include "k28.lh"
|
||||
|
||||
|
||||
class k28_state : public driver_device
|
||||
{
|
||||
public:
|
||||
k28_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_inp_matrix(*this, "IN")
|
||||
{ }
|
||||
|
||||
// devices
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_ioport_array<7> m_inp_matrix;
|
||||
|
||||
UINT16 m_inp_mux;
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
};
|
||||
|
||||
void k28_state::machine_start()
|
||||
{
|
||||
// zerofill
|
||||
m_inp_mux = 0;
|
||||
|
||||
// register for savestates
|
||||
save_item(NAME(m_inp_mux));
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
I/O, Address Map(s)
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
static ADDRESS_MAP_START( k28_mcu_map, AS_IO, 8, k28_state )
|
||||
ADDRESS_MAP_UNMAP_LOW
|
||||
//AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1)
|
||||
//AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2)
|
||||
//AM_RANGE(MCS48_PORT_PROG, MCS48_PORT_PROG)
|
||||
//AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T1)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Inputs
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
static INPUT_PORTS_START( k28 )
|
||||
PORT_START("IN.0")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8)
|
||||
|
||||
PORT_START("IN.1")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R)
|
||||
|
||||
PORT_START("IN.2")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S)
|
||||
|
||||
PORT_START("IN.3")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON)
|
||||
|
||||
PORT_START("IN.4")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA)
|
||||
|
||||
PORT_START("IN.5")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2_PAD)
|
||||
|
||||
PORT_START("IN.6")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3_PAD)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4_PAD)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5_PAD)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6_PAD)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7_PAD)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8_PAD)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9_PAD)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0_PAD)
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Machine Config
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
static MACHINE_CONFIG_START( k28, k28_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", I8021, XTAL_3_579545MHz)
|
||||
MCFG_CPU_IO_MAP(k28_mcu_map)
|
||||
|
||||
MCFG_DEFAULT_LAYOUT(layout_k28)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
MCFG_DEVICE_ADD("speech", VOTRAX_SC01, 760000) // measured 760kHz
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
ROM Defs, Game driver(s)
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
ROM_START( k28 )
|
||||
ROM_REGION( 0x1000, "maincpu", 0 )
|
||||
ROM_LOAD( "k28_8021.bin", 0x0000, 0x0400, CRC(15536d20) SHA1(fac98ce652340ffb2d00952697c3a9ce75393fa4) )
|
||||
|
||||
ROM_REGION( 0x10000, "tms6100", ROMREGION_ERASEFF ) // 8000-bfff? = space reserved for cartridge
|
||||
ROM_LOAD( "cm62050.vsm", 0x0000, 0x4000, CRC(6afb8645) SHA1(e22435568ed11c6516a3b4008131f99cd4e47aa9) )
|
||||
ROM_LOAD( "cm62051.vsm", 0x4000, 0x4000, CRC(0fa61baa) SHA1(831be669423ba60c7f85a896b4b09a1295478bd9) )
|
||||
ROM_END
|
||||
|
||||
|
||||
|
||||
COMP( 1981, k28, 0, 0, k28, k28, driver_device, 0, "Tiger Electronics", "K28: Talking Learning Computer (model 7-230)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
|
@ -358,7 +358,7 @@ Tiger Electronics K28 (model 7-232) Sold in Hong Kong, distributed in US as:
|
||||
- Sears: Talkatron - Learning Computer
|
||||
|
||||
Earlier K28 models 7-230 and 7-231 are on different hardware, showing a different
|
||||
keyboard, VFD display, and use the SC-01 speech chip.
|
||||
keyboard, VFD display, and use the SC-01 speech chip. --> driver k28.cpp
|
||||
|
||||
K28 model 7-232 (HK), 1985
|
||||
- MCU: TMS1400 MP7324
|
||||
|
68
src/mame/layout/k28.lay
Normal file
68
src/mame/layout/k28.lay
Normal file
@ -0,0 +1,68 @@
|
||||
<?xml version="1.0"?>
|
||||
<mamelayout version="2">
|
||||
|
||||
<!-- define elements -->
|
||||
|
||||
<element name="digit" defstate="0">
|
||||
<led14seg><color red="0.2" green="1.0" blue="0.85" /></led14seg>
|
||||
</element>
|
||||
|
||||
<!-- add our own for DP(display point) and the CT(comma tail) segments -->
|
||||
<!-- MAME led16segsc won't do, since this one has them on the left side -->
|
||||
|
||||
<element name="lamp_dp" defstate="0">
|
||||
<disk state="0"><color red="0.0235" green="0.1255" blue="0.1059" /></disk>
|
||||
<disk state="1"><color red="0.2" green="1.0" blue="0.85" /></disk>
|
||||
</element>
|
||||
<element name="lamp_ct" defstate="0">
|
||||
<rect state="0"><color red="0.0235" green="0.1255" blue="0.1059" /></rect>
|
||||
<rect state="1"><color red="0.2" green="1.0" blue="0.85" /></rect>
|
||||
</element>
|
||||
|
||||
|
||||
|
||||
<!-- build screen -->
|
||||
|
||||
<view name="Internal Layout">
|
||||
<bounds left="-1.5" right="99" top="0" bottom="15" />
|
||||
|
||||
<!-- 9 digits -->
|
||||
|
||||
<bezel name="digit0" element="digit"><bounds x="0" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="lamp14" element="lamp_dp"><bounds x="-1.5" y="11" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="lamp15" element="lamp_ct"><bounds x="-0.8" y="13.5" width="0.75" height="1.5" /></bezel>
|
||||
|
||||
<bezel name="digit1" element="digit"><bounds x="11" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="lamp114" element="lamp_dp"><bounds x="9.5" y="11" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="lamp115" element="lamp_ct"><bounds x="10.2" y="13.5" width="0.75" height="1.5" /></bezel>
|
||||
|
||||
<bezel name="digit2" element="digit"><bounds x="22" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="lamp214" element="lamp_dp"><bounds x="20.5" y="11" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="lamp215" element="lamp_ct"><bounds x="21.2" y="13.5" width="0.75" height="1.5" /></bezel>
|
||||
|
||||
<bezel name="digit3" element="digit"><bounds x="33" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="lamp314" element="lamp_dp"><bounds x="31.5" y="11" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="lamp315" element="lamp_ct"><bounds x="32.2" y="13.5" width="0.75" height="1.5" /></bezel>
|
||||
|
||||
<bezel name="digit4" element="digit"><bounds x="44" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="lamp414" element="lamp_dp"><bounds x="42.5" y="11" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="lamp415" element="lamp_ct"><bounds x="43.2" y="13.5" width="0.75" height="1.5" /></bezel>
|
||||
|
||||
<bezel name="digit5" element="digit"><bounds x="55" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="lamp514" element="lamp_dp"><bounds x="53.5" y="11" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="lamp515" element="lamp_ct"><bounds x="54.2" y="13.5" width="0.75" height="1.5" /></bezel>
|
||||
|
||||
<bezel name="digit6" element="digit"><bounds x="66" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="lamp614" element="lamp_dp"><bounds x="64.5" y="11" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="lamp615" element="lamp_ct"><bounds x="65.2" y="13.5" width="0.75" height="1.5" /></bezel>
|
||||
|
||||
<bezel name="digit7" element="digit"><bounds x="77" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="lamp714" element="lamp_dp"><bounds x="75.5" y="11" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="lamp715" element="lamp_ct"><bounds x="76.2" y="13.5" width="0.75" height="1.5" /></bezel>
|
||||
|
||||
<bezel name="digit8" element="digit"><bounds x="88" y="0" width="10" height="15" /></bezel>
|
||||
<bezel name="lamp814" element="lamp_dp"><bounds x="86.5" y="11" width="1.5" height="1.5" /></bezel>
|
||||
<bezel name="lamp815" element="lamp_ct"><bounds x="87.2" y="13.5" width="0.75" height="1.5" /></bezel>
|
||||
|
||||
</view>
|
||||
</mamelayout>
|
@ -8,7 +8,7 @@
|
||||
</element>
|
||||
|
||||
<!-- add our own for DP(display point) and the CT(comma tail) segments -->
|
||||
<!-- MAME led16segsc won't do, since Speak & Math has them on the left side -->
|
||||
<!-- MAME led16segsc won't do, since this one has them on the left side -->
|
||||
|
||||
<element name="lamp_dp" defstate="0">
|
||||
<disk state="0"><color red="0.0235" green="0.1255" blue="0.1059" /></disk>
|
||||
|
@ -2393,6 +2393,7 @@ microvsn // Milton Bradley
|
||||
monty // Ritam
|
||||
mmonty // Ritam
|
||||
wildfire // Parker Bros
|
||||
k28 // Tiger Electronics
|
||||
|
||||
|
||||
//********** Misc **********************************************************
|
||||
|
Loading…
Reference in New Issue
Block a user