From bd1215606542ee9843710d658100be303db17b6d Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 6 Feb 2016 22:11:27 +0100 Subject: [PATCH 01/10] tispeak: moved ctteach to here --- src/mame/drivers/hh_tms1k.cpp | 2 +- src/mame/drivers/tispeak.cpp | 71 ++++++++++++++++++++++++++++++++++- src/mame/mess.lst | 9 +++-- 3 files changed, 76 insertions(+), 6 deletions(-) diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp index 9b30fd89b66..208751f7f9d 100644 --- a/src/mame/drivers/hh_tms1k.cpp +++ b/src/mame/drivers/hh_tms1k.cpp @@ -74,7 +74,7 @@ *MP7303 TMS1400? 19??, Tiger 7-in-1 Sports Stadium @MP7313 TMS1400 1980, Parker Brothers Bank Shot @MP7314 TMS1400 1980, Parker Brothers Split Second - *MP7324 TMS1400? 1985, Coleco Talking Teacher + MP7324 TMS1400 1985, Coleco Talking Teacher -> tispeak.cpp MP7332 TMS1400 1981, Milton Bradley Dark Tower -> mbdtower.cpp @MP7334 TMS1400 1981, Coleco Total Control 4 @MP7351 TMS1400CR 1982, Parker Brothers Master Merlin diff --git a/src/mame/drivers/tispeak.cpp b/src/mame/drivers/tispeak.cpp index 94d62dd1350..0e11898ca51 100644 --- a/src/mame/drivers/tispeak.cpp +++ b/src/mame/drivers/tispeak.cpp @@ -351,10 +351,17 @@ Language Tutor modules: - English(4/4): VSM: 16KB CD3529 +Other manufacturers: + +Coleco Talking Teacher: + +x + ---------------------------------------------------------------------------- TODO: - why doesn't lantutor work? + - identify and emulate ctteach LCD - emulate other known devices @@ -412,6 +419,10 @@ public: DECLARE_WRITE16_MEMBER(snspellc_write_r); DECLARE_READ8_MEMBER(tntell_read_k); + DECLARE_READ8_MEMBER(ctteach_read_k); + DECLARE_WRITE16_MEMBER(ctteach_write_o); + DECLARE_WRITE16_MEMBER(ctteach_write_r); + // cartridge UINT32 m_cart_max_size; UINT8* m_cart_base; @@ -631,6 +642,22 @@ TIMER_DEVICE_CALLBACK_MEMBER(tispeak_state::tntell_get_overlay) } +// ctteach specific + +WRITE16_MEMBER(tispeak_state::ctteach_write_r) +{ +} + +WRITE16_MEMBER(tispeak_state::ctteach_write_o) +{ +} + +READ8_MEMBER(tispeak_state::ctteach_read_k) +{ + return 0; +} + + /*************************************************************************** @@ -799,7 +826,7 @@ static INPUT_PORTS_START( snmath ) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("+") PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("-") PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME(UTF8_MULTIPLY) - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE) // / + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("Mix It") PORT_START("IN.6") // R6 @@ -1031,6 +1058,12 @@ static INPUT_PORTS_START( tntell ) INPUT_PORTS_END +static INPUT_PORTS_START( ctteach ) + + +INPUT_PORTS_END + + /*************************************************************************** @@ -1210,6 +1243,26 @@ static MACHINE_CONFIG_DERIVED( tntell, vocaid ) MACHINE_CONFIG_END +static MACHINE_CONFIG_START( ctteach, tispeak_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", TMS1400, MASTER_CLOCK/2) + MCFG_TMS1XXX_READ_K_CB(READ8(tispeak_state, ctteach_read_k)) + MCFG_TMS1XXX_WRITE_O_CB(WRITE16(tispeak_state, ctteach_write_o)) + MCFG_TMS1XXX_WRITE_R_CB(WRITE16(tispeak_state, ctteach_write_r)) + + //MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) + //MCFG_DEFAULT_LAYOUT(layout_ctteach) + + /* sound hardware */ + MCFG_DEVICE_ADD("tms6100", TMS6100, MASTER_CLOCK/4) + + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("tms5100", TMS5110A, MASTER_CLOCK) + MCFG_FRAGMENT_ADD(tms5110_route) +MACHINE_CONFIG_END + + /*************************************************************************** @@ -1551,6 +1604,20 @@ ROM_START( vocaid ) ROM_END +ROM_START( ctteach ) + ROM_REGION( 0x1000, "maincpu", 0 ) + ROM_LOAD( "mp7324", 0x0000, 0x1000, CRC(08d15ab6) SHA1(5b0f6c53e6732a362c4bb25d966d4072fdd33db8) ) + + ROM_REGION( 867, "maincpu:mpla", 0 ) + ROM_LOAD( "tms1100_common1_micro.pla", 0, 867, CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) + ROM_REGION( 557, "maincpu:opla", 0 ) + ROM_LOAD( "tms1400_ctteach_output.pla", 0, 557, CRC(3a5c7005) SHA1(3fe5819c138a90e7fc12817415f2622ca81b40b2) ) + + ROM_REGION( 0x8000, "tms6100", ROMREGION_ERASEFF ) + ROM_LOAD( "cm62084.vsm", 0x0000, 0x4000, CRC(cd1376f7) SHA1(96fa484c392c451599bc083b8376cad9c998df7d) ) +ROM_END + + /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */ COMP( 1979, snspell, 0, 0, sns_tmc0281, snspell, tispeak_state, snspell, "Texas Instruments", "Speak & Spell (US, 1979 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) @@ -1581,3 +1648,5 @@ COMP( 1981, tntelluk, tntell, 0, tntell, tntell, tispeak_state, tn COMP( 1981, tntellfr, tntell, 0, tntell, tntell, tispeak_state, tntell, "Texas Instruments", "Le Livre Magique (France)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_CLICKABLE_ARTWORK | MACHINE_REQUIRES_ARTWORK ) COMP( 1982, vocaid, 0, 0, vocaid, tntell, driver_device, 0, "Texas Instruments", "Vocaid", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_REQUIRES_ARTWORK ) + +COMP( 1985, ctteach, 0, 0, ctteach, ctteach, driver_device, 0, "Coleco", "Talking Teacher", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) diff --git a/src/mame/mess.lst b/src/mame/mess.lst index 9f41ab0709e..459fae8a81f 100644 --- a/src/mame/mess.lst +++ b/src/mame/mess.lst @@ -2332,6 +2332,10 @@ lilprof lilprof78 dataman +// hh_tms1k tispellb.cpp +spellb +mrchalgr + // hh_tms1k tispeak.cpp snspell snspellp @@ -2355,10 +2359,7 @@ tntelluk tntellfr tntellp vocaid - -// hh_tms1k tispellb.cpp -spellb -mrchalgr +ctteach // Coleco // hh_ucom4 ufombs // Bambino From 02d1107016ef1f8cd56d19ac7688c6150248b4b7 Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 6 Feb 2016 22:18:32 +0100 Subject: [PATCH 02/10] tispeak: added ctteach i/o and keyboard --- src/mame/drivers/tispeak.cpp | 73 +++++++++++++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 1 deletion(-) diff --git a/src/mame/drivers/tispeak.cpp b/src/mame/drivers/tispeak.cpp index 0e11898ca51..dfd3502470f 100644 --- a/src/mame/drivers/tispeak.cpp +++ b/src/mame/drivers/tispeak.cpp @@ -646,15 +646,35 @@ TIMER_DEVICE_CALLBACK_MEMBER(tispeak_state::tntell_get_overlay) WRITE16_MEMBER(tispeak_state::ctteach_write_r) { + // R1234: TMS5100 CTL8421 + m_tms5100->ctl_w(space, 0, BITSWAP8(data,0,0,0,0,1,2,3,4) & 0xf); + + // R0: TMS5100 PDC pin + m_tms5100->pdc_w(data & 1); + + // R5: input mux high bit + m_inp_mux = (m_inp_mux & 0xff) | (data << 3 & 0x100); + + // R6: power-off request, on falling edge + if ((m_r >> 6 & 1) && !(data >> 6 & 1)) + power_off(); + + // R7-R10: LCD data + //.. + + m_r = data; } WRITE16_MEMBER(tispeak_state::ctteach_write_o) { + // O0-O7: input mux low + m_inp_mux = (m_inp_mux & ~0xff) | data; } READ8_MEMBER(tispeak_state::ctteach_read_k) { - return 0; + // K: TMS5100 CTL, multiplexed inputs + return m_tms5100->ctl_r(space, 0) | read_inputs(9); } @@ -1059,8 +1079,59 @@ INPUT_PORTS_END static INPUT_PORTS_START( ctteach ) + PORT_START("IN.0") // O0 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("Off") // -> auto_power_off + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR('A') PORT_NAME("A/1") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR('J') PORT_NAME("J/0") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('S') + PORT_START("IN.1") // O1 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGUP) PORT_NAME("On") PORT_CHANGED_MEMBER(DEVICE_SELF, tispeak_state, power_button, (void *)true) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR('B') PORT_NAME("B/2") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR('K') PORT_NAME("K/+") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('T') + PORT_START("IN.2") // O2 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("Repeat") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR('C') PORT_NAME("C/3") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR('L') PORT_NAME("L/-") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('U') + + PORT_START("IN.3") // O3 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("Prompt") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR('D') PORT_NAME("D/4") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR('M') PORT_NAME("M/" UTF8_MULTIPLY) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('V') + + PORT_START("IN.4") // O4 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_HOME) PORT_NAME("Menu") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR('E') PORT_NAME("E/5") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CODE(KEYCODE_SLASH_PAD) PORT_CHAR('N') PORT_NAME("N/" UTF8_DIVIDE) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('W') + + PORT_START("IN.5") // O5 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_END) PORT_NAME("Module") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR('F') PORT_NAME("F/6") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('O') + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('X') + + PORT_START("IN.6") // O6 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE) PORT_NAME("Select") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR('G') PORT_NAME("G/7") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('P') + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') + + PORT_START("IN.7") // O7 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("Clear") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR('H') PORT_NAME("H/8") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') + + PORT_START("IN.8") // R5 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR('I') PORT_NAME("I/9") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('R') + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Enter") INPUT_PORTS_END From 9e482e16820180f6359d374b93a45d6bc813116c Mon Sep 17 00:00:00 2001 From: briantro Date: Sat, 6 Feb 2016 15:39:59 -0600 Subject: [PATCH 03/10] new Working Game This replaces David's Big Apple clone New games added or promoted from NOT_WORKING status --------------------------------------------------- Michigan Super Draw (2131-16, U5-2) [Charles MacDonald, Brian Troha, David Haywood, The Dumping Union] --- src/mame/arcade.lst | 4 ++-- src/mame/drivers/merit.cpp | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/mame/arcade.lst b/src/mame/arcade.lst index c460da1fea6..331e64bb462 100644 --- a/src/mame/arcade.lst +++ b/src/mame/arcade.lst @@ -10978,8 +10978,8 @@ phrcrazea // (c) 1986 Merit phrcrazeb // (c) 1986 Merit phrcrazec // (c) 1986 Merit phrcrazev // (c) 1986 Merit -bigappg // (c) 1986 Merit -bigappga // +bigappg // (c) 1986 Merit / Big Apple Games +misdraw // (c) 1986 Merit / Big Apple Games riviera // (c) 1987 Merit rivieraa // (c) 1986 Merit rivierab // (c) 1986 Merit diff --git a/src/mame/drivers/merit.cpp b/src/mame/drivers/merit.cpp index daf603d10f5..f438e37dea9 100644 --- a/src/mame/drivers/merit.cpp +++ b/src/mame/drivers/merit.cpp @@ -59,7 +59,7 @@ Merit Riviera Notes - There are several known versions: Riviera Super Star (not dumped) Riviera Montana Version (with journal printer, not dumped) Riviera Tennessee Draw (not dumped) - Michigan Superstar Draw Poker (not dumped) + Michigan Super Draw Poker (Is there a "Superstar" version?) Americana There are several law suites over the Riviera games. Riviera Distributors Inc. bought earlier versions @@ -422,7 +422,7 @@ static ADDRESS_MAP_START( bigappg_map, AS_PROGRAM, 8, merit_state ) AM_RANGE(0xf800, 0xfbff) AM_READWRITE(palette_r, palette_w) ADDRESS_MAP_END -static ADDRESS_MAP_START( bigappga_map, AS_PROGRAM, 8, merit_state ) +static ADDRESS_MAP_START( misdraw_map, AS_PROGRAM, 8, merit_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0xb000, 0xb7ff) AM_RAM AM_SHARE("cpunvram") // overlays other NVRAM? or is it banked? AM_RANGE(0xa000, 0xbfff) AM_RAM AM_SHARE("nvram") @@ -1275,10 +1275,10 @@ static MACHINE_CONFIG_DERIVED( bigappg, pitboss ) MCFG_NVRAM_ADD_0FILL("nvram") MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( bigappga, bigappg ) +static MACHINE_CONFIG_DERIVED( misdraw, bigappg ) MCFG_CPU_MODIFY("maincpu") - MCFG_CPU_PROGRAM_MAP(bigappga_map) + MCFG_CPU_PROGRAM_MAP(misdraw_map) MCFG_NVRAM_ADD_0FILL("cpunvram") MACHINE_CONFIG_END @@ -1502,9 +1502,9 @@ ROM_START( bigappg ) ROM_LOAD( "haip_u40.u40", 0x0000, 0x2000, CRC(ac4983b8) SHA1(a552a15f813c331de67eaae2ed42cc037b26c5bd) ) ROM_END -ROM_START( bigappga ) +ROM_START( misdraw ) ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "2131-16_u5-2.u5", 0x0000, 0x8000, CRC(fc756320) SHA1(6b810c57ed1be844a04a6081d727e182509604b4) ) /* 2131-16 U5-0 081889 */ + ROM_LOAD( "2131-16_u5-2.u5", 0x0000, 0x8000, CRC(fc756320) SHA1(6b810c57ed1be844a04a6081d727e182509604b4) ) /* 2131-16 U5-2 081889 */ ROM_REGION( 0x6000, "gfx1", 0 ) ROM_LOAD( "u39.u39", 0x0000, 0x2000, CRC(0f09d19b) SHA1(1f98559d5bad7c84d92ecea5a6df9429914a47f0) ) @@ -2225,7 +2225,7 @@ GAME( 1986, rivieraa, riviera, dodge, riviera, driver_device, 0, ROT0, " GAME( 1986, rivierab, riviera, dodge, rivierab, driver_device, 0, ROT0, "Merit", "Riviera Hi-Score (2131-08, U5-2D)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) GAME( 1986, bigappg, 0, bigappg, bigappg, driver_device, 0, ROT0, "Big Apple Games / Merit", "The Big Apple (2131-13, U5-0)", MACHINE_SUPPORTS_SAVE ) -GAME( 1986, bigappga, bigappg, bigappga, bigappg, driver_device, 0, ROT0, "Big Apple Games / Merit", "The Big Apple (2131-16, U5-0 081889)", MACHINE_SUPPORTS_SAVE ) +GAME( 1986, misdraw, 0, misdraw, bigappg, driver_device, 0, ROT0, "Big Apple Games / Merit", "Michigan Super Draw (2131-16, U5-2)", MACHINE_SUPPORTS_SAVE ) GAME( 1986, dodgectya,dodgecty,dodge, dodge, driver_device, 0, ROT0, "Merit", "Dodge City (2131-82, U5-0D)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) GAME( 1986, dodgectyb,dodgecty,dodge, dodge, driver_device, 0, ROT0, "Merit", "Dodge City (2131-82, U5-50)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) From 2f32d226cc42154c6d2726fcdcd1893fe09e4b3e Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 6 Feb 2016 22:49:00 +0100 Subject: [PATCH 04/10] tispeak: added ctteach layout file --- src/mame/drivers/tispeak.cpp | 30 ++++++++++++++++++++++++------ src/mame/layout/ctteach.lay | 26 ++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 6 deletions(-) create mode 100644 src/mame/layout/ctteach.lay diff --git a/src/mame/drivers/tispeak.cpp b/src/mame/drivers/tispeak.cpp index dfd3502470f..3f51ca6f1eb 100644 --- a/src/mame/drivers/tispeak.cpp +++ b/src/mame/drivers/tispeak.cpp @@ -353,9 +353,20 @@ Language Tutor modules: Other manufacturers: -Coleco Talking Teacher: + Coleco Talking Teacher: + - MCU: TMS1400 MP7324 + - TMS51xx: TMS5110A + - VSM: 16KB CM62084 + - LCD: unknown 8*16-seg + - known releases: + + Coleco: Talking Teacher + + Sears: Talkatron - Learning Computer + + Tiger Electronics(Hong Kong): K-2-8 -x + An earlier revision used the SC-01 speech chip? + + modules: + - x ---------------------------------------------------------------------------- @@ -375,6 +386,7 @@ x #include "softlist.h" // internal artwork +#include "ctteach.lh" #include "lantutor.lh" #include "snmath.lh" #include "snspell.lh" @@ -419,6 +431,7 @@ public: DECLARE_WRITE16_MEMBER(snspellc_write_r); DECLARE_READ8_MEMBER(tntell_read_k); + void ctteach_prepare_display(UINT8 old, UINT8 data); DECLARE_READ8_MEMBER(ctteach_read_k); DECLARE_WRITE16_MEMBER(ctteach_write_o); DECLARE_WRITE16_MEMBER(ctteach_write_r); @@ -644,6 +657,12 @@ TIMER_DEVICE_CALLBACK_MEMBER(tispeak_state::tntell_get_overlay) // ctteach specific +void tispeak_state::ctteach_prepare_display(UINT8 old, UINT8 data) +{ + if (data == old) + return; +} + WRITE16_MEMBER(tispeak_state::ctteach_write_r) { // R1234: TMS5100 CTL8421 @@ -660,8 +679,7 @@ WRITE16_MEMBER(tispeak_state::ctteach_write_r) power_off(); // R7-R10: LCD data - //.. - + ctteach_prepare_display(m_r >> 7 & 0xf, data >> 7 & 0xf); m_r = data; } @@ -1322,8 +1340,8 @@ static MACHINE_CONFIG_START( ctteach, tispeak_state ) MCFG_TMS1XXX_WRITE_O_CB(WRITE16(tispeak_state, ctteach_write_o)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(tispeak_state, ctteach_write_r)) - //MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) - //MCFG_DEFAULT_LAYOUT(layout_ctteach) + MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) + MCFG_DEFAULT_LAYOUT(layout_ctteach) /* sound hardware */ MCFG_DEVICE_ADD("tms6100", TMS6100, MASTER_CLOCK/4) diff --git a/src/mame/layout/ctteach.lay b/src/mame/layout/ctteach.lay new file mode 100644 index 00000000000..dde1a20e295 --- /dev/null +++ b/src/mame/layout/ctteach.lay @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + From a560877764e0bad6cc7946f3a7a751a7953f0de5 Mon Sep 17 00:00:00 2001 From: David Haywood Date: Sat, 6 Feb 2016 22:17:48 +0000 Subject: [PATCH 05/10] new clones World Cup Volley '95 Extra Version (Asia v2.0B) [Kevin Eshbach] --- src/mame/arcade.lst | 1 + src/mame/drivers/deco156.cpp | 23 ++++++++++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/mame/arcade.lst b/src/mame/arcade.lst index 331e64bb462..45f41a0882a 100644 --- a/src/mame/arcade.lst +++ b/src/mame/arcade.lst @@ -6367,6 +6367,7 @@ charlien // MBR (c) 1994 Mitchell // MBV ?? // MBW ?? wcvol95 // MBX (c) 1993 Data East +wcvol95x // ? // MBY ?? backfire // MBZ (c) 1995 backfirea // MBZ (c) 1995 diff --git a/src/mame/drivers/deco156.cpp b/src/mame/drivers/deco156.cpp index faa0f3bb6a5..e77e5ac0c09 100644 --- a/src/mame/drivers/deco156.cpp +++ b/src/mame/drivers/deco156.cpp @@ -8,9 +8,6 @@ See also deco32.c, deco_mlc.c, backfire.c - Todo: - complete co-processor emulation for wcvol95 - Emulation by Bryan McPhail, mish@tendril.co.uk */ @@ -630,6 +627,25 @@ ROM_START( wcvol95 ) // ROM_LOAD( "93c46.3k", 0x00, 0x80, CRC(88f8e270) SHA1(cb82203ad38e0c12ea998562b7b785979726afe5) ) ROM_END + + +ROM_START( wcvol95x ) + ROM_REGION( 0x100000, "maincpu", 0 ) /* DE156 code (encrypted) */ + // no label markings were present + ROM_LOAD32_WORD( "2f.bin", 0x000002, 0x080000, CRC(ac06633d) SHA1(5d37ca3050f35d5fc06f70e91b1522e325471585) ) + ROM_LOAD32_WORD( "4f.bin", 0x000000, 0x080000, CRC(e211f67a) SHA1(d008c2b809482f17ada608134357fa1205d767d4) ) + + ROM_REGION( 0x080000, "gfx1", 0 ) + ROM_LOAD( "mbx-00.9a", 0x000000, 0x080000, CRC(a0b24204) SHA1(cec8089c6c635f23b3a4aeeef2c43f519568ad70) ) + + ROM_REGION( 0x200000, "gfx2", 0 ) + ROM_LOAD16_BYTE( "mbx-01.12a", 0x000000, 0x100000, CRC(73deb3f1) SHA1(c0cabecfd88695afe0f27c5bb115b4973907207d) ) + ROM_LOAD16_BYTE( "mbx-02.13a", 0x000001, 0x100000, CRC(3204d324) SHA1(44102f71bae44bf3a9bd2de7e5791d959a2c9bdd) ) + + ROM_REGION( 0x200000, "ymz", 0 ) /* YMZ280B-F samples */ + ROM_LOAD( "mbx-03.13j", 0x00000, 0x200000, CRC(061632bc) SHA1(7900ac56e59f4a4e5768ce72f4a4b7c5875f5ae8) ) +ROM_END + /**********************************************************************************/ void deco156_state::descramble_sound( const char *tag ) @@ -677,3 +693,4 @@ GAME( 1993, hvysmsh, 0, hvysmsh, hvysmsh, deco156_state, hvysmsh, ROT0, GAME( 1993, hvysmsha, hvysmsh, hvysmsh, hvysmsh, deco156_state, hvysmsh, ROT0, "Data East Corporation", "Heavy Smash (Asia version -4)", MACHINE_SUPPORTS_SAVE ) GAME( 1993, hvysmshj, hvysmsh, hvysmsh, hvysmsh, deco156_state, hvysmsh, ROT0, "Data East Corporation", "Heavy Smash (Japan version -2)", MACHINE_SUPPORTS_SAVE ) GAME( 1995, wcvol95, 0, wcvol95, wcvol95, deco156_state, wcvol95, ROT0, "Data East Corporation", "World Cup Volley '95 (Japan v1.0)", MACHINE_SUPPORTS_SAVE ) +GAME( 1995, wcvol95x, wcvol95, wcvol95, wcvol95, deco156_state, wcvol95, ROT0, "Data East Corporation", "World Cup Volley '95 Extra Version (Asia v2.0B)", MACHINE_SUPPORTS_SAVE ) From d18260287d31e49368b5cd956ebacb61209c4d6a Mon Sep 17 00:00:00 2001 From: David Haywood Date: Sat, 6 Feb 2016 22:43:08 +0000 Subject: [PATCH 06/10] gals (nw) --- src/mame/drivers/deco156.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/mame/drivers/deco156.cpp b/src/mame/drivers/deco156.cpp index e77e5ac0c09..b8ab102bee1 100644 --- a/src/mame/drivers/deco156.cpp +++ b/src/mame/drivers/deco156.cpp @@ -625,6 +625,10 @@ ROM_START( wcvol95 ) // ROM_REGION( 0x80, "user1", 0 ) /* eeprom */ // ROM_LOAD( "93c46.3k", 0x00, 0x80, CRC(88f8e270) SHA1(cb82203ad38e0c12ea998562b7b785979726afe5) ) + + ROM_REGION( 0x200, "gals", 0 ) + ROM_LOAD( "GAL16V8B.10J.bin", 0x000, 0x117, CRC(06bbcbd5) SHA1(f7adb4bca13bb799bc42411eb178edfdc11a76c7) ) + ROM_LOAD( "GAL16V8B.5D.bin", 0x000, 0x117, CRC(117784f0) SHA1(daf3720740621fc3af49333c96795718b693f4d2)) ROM_END @@ -644,8 +648,13 @@ ROM_START( wcvol95x ) ROM_REGION( 0x200000, "ymz", 0 ) /* YMZ280B-F samples */ ROM_LOAD( "mbx-03.13j", 0x00000, 0x200000, CRC(061632bc) SHA1(7900ac56e59f4a4e5768ce72f4a4b7c5875f5ae8) ) + + ROM_REGION( 0x200, "gals", 0 ) + ROM_LOAD( "GAL16V8B.10J.bin", 0x000, 0x117, CRC(06bbcbd5) SHA1(f7adb4bca13bb799bc42411eb178edfdc11a76c7) ) + ROM_LOAD( "GAL16V8B.5D.bin", 0x000, 0x117, CRC(117784f0) SHA1(daf3720740621fc3af49333c96795718b693f4d2)) ROM_END + /**********************************************************************************/ void deco156_state::descramble_sound( const char *tag ) From 0174ccbbe185da0c9a4b2330995a4c2243809979 Mon Sep 17 00:00:00 2001 From: Justin Kerk Date: Sat, 6 Feb 2016 15:59:15 -0800 Subject: [PATCH 07/10] Fix indentation (nw) --- src/osd/modules/sound/js_sound.js | 298 +++++++++++++++--------------- 1 file changed, 149 insertions(+), 149 deletions(-) diff --git a/src/osd/modules/sound/js_sound.js b/src/osd/modules/sound/js_sound.js index 393bcd66e93..b06cbb44365 100644 --- a/src/osd/modules/sound/js_sound.js +++ b/src/osd/modules/sound/js_sound.js @@ -2,10 +2,10 @@ // copyright-holders:Grant Galitz, Katelyn Gadd /*************************************************************************** - JSMAME web audio backend v0.3 + JSMAME web audio backend v0.3 - Original by katelyn gadd - kg at luminance dot org ; @antumbral on twitter - Substantial changes by taisel + Original by katelyn gadd - kg at luminance dot org ; @antumbral on twitter + Substantial changes by taisel ***************************************************************************/ @@ -23,187 +23,187 @@ var watchDogDateLast = null; var watchDogTimerEvent = null; function lazy_init () { - //Make - if (context) { - //Return if already created: - return; - } - if (typeof AudioContext != "undefined") { - //Standard context creation: - context = new AudioContext(); - } - else if (typeof webkitAudioContext != "undefined") { - //Older webkit context creation: - context = new webkitAudioContext(); - } - else { - //API not found! - return; - } - //Generate a volume control node: - gain_node = context.createGain(); - //Set initial volume to 1: - gain_node.gain.value = 1.0; - //Connect volume node to output: - gain_node.connect(context.destination); - //Initialize the streaming event: - init_event(); + //Make + if (context) { + //Return if already created: + return; + } + if (typeof AudioContext != "undefined") { + //Standard context creation: + context = new AudioContext(); + } + else if (typeof webkitAudioContext != "undefined") { + //Older webkit context creation: + context = new webkitAudioContext(); + } + else { + //API not found! + return; + } + //Generate a volume control node: + gain_node = context.createGain(); + //Set initial volume to 1: + gain_node.gain.value = 1.0; + //Connect volume node to output: + gain_node.connect(context.destination); + //Initialize the streaming event: + init_event(); }; function init_event() { - //Generate a streaming node point: - if (typeof context.createScriptProcessor == "function") { - //Current standard compliant way: - eventNode = context.createScriptProcessor(4096, 0, 2); - } - else { - //Deprecated way: - eventNode = context.createJavaScriptNode(4096, 0, 2); - } - //Make our tick function the audio callback function: - eventNode.onaudioprocess = tick; - //Connect stream to volume control node: - eventNode.connect(gain_node); - //WORKAROUND FOR FIREFOX BUG: - initializeWatchDogForFirefoxBug(); + //Generate a streaming node point: + if (typeof context.createScriptProcessor == "function") { + //Current standard compliant way: + eventNode = context.createScriptProcessor(4096, 0, 2); + } + else { + //Deprecated way: + eventNode = context.createJavaScriptNode(4096, 0, 2); + } + //Make our tick function the audio callback function: + eventNode.onaudioprocess = tick; + //Connect stream to volume control node: + eventNode.connect(gain_node); + //WORKAROUND FOR FIREFOX BUG: + initializeWatchDogForFirefoxBug(); }; function initializeWatchDogForFirefoxBug() { - //TODO: decide if we want to user agent sniff firefox here, - //since Google Chrome doesn't need this: - watchDogDateLast = (new Date()).getTime(); - if (watchDogTimerEvent === null) { - watchDogTimerEvent = setInterval(function () { - var timeDiff = (new Date()).getTime() - watchDogDateLast; - if (timeDiff > 500) { - disconnect_old_event(); - init_event(); - } - }, 500); - } + //TODO: decide if we want to user agent sniff firefox here, + //since Google Chrome doesn't need this: + watchDogDateLast = (new Date()).getTime(); + if (watchDogTimerEvent === null) { + watchDogTimerEvent = setInterval(function () { + var timeDiff = (new Date()).getTime() - watchDogDateLast; + if (timeDiff > 500) { + disconnect_old_event(); + init_event(); + } + }, 500); + } }; function disconnect_old_event() { - //Disconnect from audio graph: - eventNode.disconnect(); - //IIRC there was a firefox bug that did not GC this event when nulling the node itself: - eventNode.onaudioprocess = null; - //Null the glitched/unused node: - eventNode = null; + //Disconnect from audio graph: + eventNode.disconnect(); + //IIRC there was a firefox bug that did not GC this event when nulling the node itself: + eventNode.onaudioprocess = null; + //Null the glitched/unused node: + eventNode = null; }; function set_mastervolume ( - // even though it's 'attenuation' the value is negative, so... - attenuation_in_decibels + // even though it's 'attenuation' the value is negative, so... + attenuation_in_decibels ) { - lazy_init(); - if (!context) return; + lazy_init(); + if (!context) return; - // http://stackoverflow.com/questions/22604500/web-audio-api-working-with-decibels - // seemingly incorrect/broken. figures. welcome to Web Audio - // var gain_web_audio = 1.0 - Math.pow(10, 10 / attenuation_in_decibels); + // http://stackoverflow.com/questions/22604500/web-audio-api-working-with-decibels + // seemingly incorrect/broken. figures. welcome to Web Audio + // var gain_web_audio = 1.0 - Math.pow(10, 10 / attenuation_in_decibels); - // HACK: Max attenuation in JSMESS appears to be 32. - // Hit ' then left/right arrow to test. - // FIXME: This is linear instead of log10 scale. - var gain_web_audio = 1.0 + (+attenuation_in_decibels / +32); - if (gain_web_audio < +0) - gain_web_audio = +0; - else if (gain_web_audio > +1) - gain_web_audio = +1; + // HACK: Max attenuation in JSMESS appears to be 32. + // Hit ' then left/right arrow to test. + // FIXME: This is linear instead of log10 scale. + var gain_web_audio = 1.0 + (+attenuation_in_decibels / +32); + if (gain_web_audio < +0) + gain_web_audio = +0; + else if (gain_web_audio > +1) + gain_web_audio = +1; - gain_node.gain.value = gain_web_audio; + gain_node.gain.value = gain_web_audio; }; function update_audio_stream ( - pBuffer, // pointer into emscripten heap. int16 samples - samples_this_frame // int. number of samples at pBuffer address. + pBuffer, // pointer into emscripten heap. int16 samples + samples_this_frame // int. number of samples at pBuffer address. ) { - lazy_init(); - if (!context) return; + lazy_init(); + if (!context) return; - for ( - var i = 0, - l = samples_this_frame | 0; - i < l; - i++ - ) { - var offset = - // divide by sizeof(INT16) since pBuffer is offset - // in bytes - ((pBuffer / 2) | 0) + - ((i * 2) | 0); + for ( + var i = 0, + l = samples_this_frame | 0; + i < l; + i++ + ) { + var offset = + // divide by sizeof(INT16) since pBuffer is offset + // in bytes + ((pBuffer / 2) | 0) + + ((i * 2) | 0); - var left_sample = HEAP16[offset]; - var right_sample = HEAP16[(offset + 1) | 0]; + var left_sample = HEAP16[offset]; + var right_sample = HEAP16[(offset + 1) | 0]; - // normalize from signed int16 to signed float - var left_sample_float = left_sample / sampleScale; - var right_sample_float = right_sample / sampleScale; + // normalize from signed int16 to signed float + var left_sample_float = left_sample / sampleScale; + var right_sample_float = right_sample / sampleScale; - inputBuffer[rear++] = left_sample_float; - inputBuffer[rear++] = right_sample_float; - if (rear == bufferSize) { - rear = 0; - } - if (start == rear) { - start += 2; - if (start == bufferSize) { - start = 0; - } - } - } + inputBuffer[rear++] = left_sample_float; + inputBuffer[rear++] = right_sample_float; + if (rear == bufferSize) { + rear = 0; + } + if (start == rear) { + start += 2; + if (start == bufferSize) { + start = 0; + } + } + } }; function tick (event) { - //Find all output channels: - for (var bufferCount = 0, buffers = []; bufferCount < 2; ++bufferCount) { - buffers[bufferCount] = event.outputBuffer.getChannelData(bufferCount); - } - //Copy samples from the input buffer to the Web Audio API: - for (var index = 0; index < 4096 && start != rear; ++index) { - buffers[0][index] = inputBuffer[start++]; - buffers[1][index] = inputBuffer[start++]; - if (start == bufferSize) { - start = 0; - } - } - //Pad with silence if we're underrunning: - while (index < 4096) { - buffers[0][index] = 0; - buffers[1][index++] = 0; - } - //Deep inside the bowels of vendors bugs, - //we're using watchdog for a firefox bug, - //where the user agent decides to stop firing events - //if the user agent lags out due to system load. - //Don't even ask.... - watchDogDateLast = (new Date()).getTime(); + //Find all output channels: + for (var bufferCount = 0, buffers = []; bufferCount < 2; ++bufferCount) { + buffers[bufferCount] = event.outputBuffer.getChannelData(bufferCount); + } + //Copy samples from the input buffer to the Web Audio API: + for (var index = 0; index < 4096 && start != rear; ++index) { + buffers[0][index] = inputBuffer[start++]; + buffers[1][index] = inputBuffer[start++]; + if (start == bufferSize) { + start = 0; + } + } + //Pad with silence if we're underrunning: + while (index < 4096) { + buffers[0][index] = 0; + buffers[1][index++] = 0; + } + //Deep inside the bowels of vendors bugs, + //we're using watchdog for a firefox bug, + //where the user agent decides to stop firing events + //if the user agent lags out due to system load. + //Don't even ask.... + watchDogDateLast = (new Date()).getTime(); } function get_context() { - return context; + return context; }; function sample_count() { - //TODO get someone to call this from the emulator, - //so the emulator can do proper audio buffering by - //knowing how many samples are left: - if (!context) { - //Use impossible value as an error code: - return -1; - } - var count = rear - start; - if (start > rear) { - count += bufferSize; - } - return count; + //TODO get someone to call this from the emulator, + //so the emulator can do proper audio buffering by + //knowing how many samples are left: + if (!context) { + //Use impossible value as an error code: + return -1; + } + var count = rear - start; + if (start > rear) { + count += bufferSize; + } + return count; } return { - set_mastervolume: set_mastervolume, - update_audio_stream: update_audio_stream, - get_context: get_context, - sample_count: sample_count + set_mastervolume: set_mastervolume, + update_audio_stream: update_audio_stream, + get_context: get_context, + sample_count: sample_count }; })(); From 7f6752bacb0e89ef3c133c4fa0317c55aaea85d5 Mon Sep 17 00:00:00 2001 From: hap Date: Sun, 7 Feb 2016 01:03:23 +0100 Subject: [PATCH 08/10] k28: renamed ctteach to k28 and added softwarelist --- hash/k28.xml | 81 +++++++++++++++++++++++ src/mame/drivers/hh_tms1k.cpp | 2 +- src/mame/drivers/tispeak.cpp | 82 ++++++++++++++---------- src/mame/layout/{ctteach.lay => k28.lay} | 0 src/mame/mess.lst | 2 +- 5 files changed, 132 insertions(+), 35 deletions(-) create mode 100644 hash/k28.xml rename src/mame/layout/{ctteach.lay => k28.lay} (100%) diff --git a/hash/k28.xml b/hash/k28.xml new file mode 100644 index 00000000000..842c7da0312 --- /dev/null +++ b/hash/k28.xml @@ -0,0 +1,81 @@ + + + + + + + Expansion Module 1 + 1986? + Tiger Electronics + + + + + + + + + + Expansion Module 2 + 1986 + Tiger Electronics + + + + + + + + + + Expansion Module 3 + 1986 + Tiger Electronics + + + + + + + + + + Expansion Module 4 + 1986 + Tiger Electronics + + + + + + + + + + + + Expansion Module 6 + 1987 + Tiger Electronics + + + + + + + + + + diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp index 208751f7f9d..68e14d4514b 100644 --- a/src/mame/drivers/hh_tms1k.cpp +++ b/src/mame/drivers/hh_tms1k.cpp @@ -74,7 +74,7 @@ *MP7303 TMS1400? 19??, Tiger 7-in-1 Sports Stadium @MP7313 TMS1400 1980, Parker Brothers Bank Shot @MP7314 TMS1400 1980, Parker Brothers Split Second - MP7324 TMS1400 1985, Coleco Talking Teacher -> tispeak.cpp + MP7324 TMS1400 1985, Tiger K28/Coleco Talking Teacher -> tispeak.cpp MP7332 TMS1400 1981, Milton Bradley Dark Tower -> mbdtower.cpp @MP7334 TMS1400 1981, Coleco Total Control 4 @MP7351 TMS1400CR 1982, Parker Brothers Master Merlin diff --git a/src/mame/drivers/tispeak.cpp b/src/mame/drivers/tispeak.cpp index 3f51ca6f1eb..0415dce272f 100644 --- a/src/mame/drivers/tispeak.cpp +++ b/src/mame/drivers/tispeak.cpp @@ -353,26 +353,36 @@ Language Tutor modules: Other manufacturers: - Coleco Talking Teacher: +Tiger Electronics K28 (model 7-232) Sold in Hong Kong, distributed in US as: +- Coleco: Talking Teacher +- Sears: Talkatron - Learning Computer + +Earlier K28 models 7-230 and 7-231 are on different hardware, showing a different keyboard, +VFD display, and presumed to use the SC-01 speech chip. + + K28 model 7-232 (HK), 1985 - MCU: TMS1400 MP7324 - TMS51xx: TMS5110A - VSM: 16KB CM62084 - LCD: unknown 8*16-seg - - known releases: - + Coleco: Talking Teacher - + Sears: Talkatron - Learning Computer - + Tiger Electronics(Hong Kong): K-2-8 - An earlier revision used the SC-01 speech chip? - - modules: - - x +K28 modules: + + - Spelling I: VSM: 16KB CM62086 + - Spelling II: VSM: 16KB CM62085? + - Spelling III: VSM: 16KB CM62087 + - Expansion Module 1: VSM: 16KB CM62214? - assumed same VSM as CM62086 + - Expansion Module 2: VSM: 16KB CM62216 - assumed same VSM as the one in Spelling II + - Expansion Module 3: VSM: 16KB CM62215 - same VSM as CM62087 + - Expansion Module 4: VSM: 16KB CM62217 + - Expansion Module 5: VSM: 16KB CM62218* + - Expansion Module 6: VSM: 16KB CM62219 ---------------------------------------------------------------------------- TODO: - why doesn't lantutor work? - - identify and emulate ctteach LCD + - identify and emulate k28 LCD - emulate other known devices @@ -386,7 +396,7 @@ Other manufacturers: #include "softlist.h" // internal artwork -#include "ctteach.lh" +#include "k28.lh" #include "lantutor.lh" #include "snmath.lh" #include "snspell.lh" @@ -431,10 +441,10 @@ public: DECLARE_WRITE16_MEMBER(snspellc_write_r); DECLARE_READ8_MEMBER(tntell_read_k); - void ctteach_prepare_display(UINT8 old, UINT8 data); - DECLARE_READ8_MEMBER(ctteach_read_k); - DECLARE_WRITE16_MEMBER(ctteach_write_o); - DECLARE_WRITE16_MEMBER(ctteach_write_r); + void k28_prepare_display(UINT8 old, UINT8 data); + DECLARE_READ8_MEMBER(k28_read_k); + DECLARE_WRITE16_MEMBER(k28_write_o); + DECLARE_WRITE16_MEMBER(k28_write_r); // cartridge UINT32 m_cart_max_size; @@ -655,15 +665,14 @@ TIMER_DEVICE_CALLBACK_MEMBER(tispeak_state::tntell_get_overlay) } -// ctteach specific +// k28 specific -void tispeak_state::ctteach_prepare_display(UINT8 old, UINT8 data) +void tispeak_state::k28_prepare_display(UINT8 old, UINT8 data) { - if (data == old) - return; + // ? } -WRITE16_MEMBER(tispeak_state::ctteach_write_r) +WRITE16_MEMBER(tispeak_state::k28_write_r) { // R1234: TMS5100 CTL8421 m_tms5100->ctl_w(space, 0, BITSWAP8(data,0,0,0,0,1,2,3,4) & 0xf); @@ -679,17 +688,17 @@ WRITE16_MEMBER(tispeak_state::ctteach_write_r) power_off(); // R7-R10: LCD data - ctteach_prepare_display(m_r >> 7 & 0xf, data >> 7 & 0xf); + k28_prepare_display(m_r >> 7 & 0xf, data >> 7 & 0xf); m_r = data; } -WRITE16_MEMBER(tispeak_state::ctteach_write_o) +WRITE16_MEMBER(tispeak_state::k28_write_o) { // O0-O7: input mux low m_inp_mux = (m_inp_mux & ~0xff) | data; } -READ8_MEMBER(tispeak_state::ctteach_read_k) +READ8_MEMBER(tispeak_state::k28_read_k) { // K: TMS5100 CTL, multiplexed inputs return m_tms5100->ctl_r(space, 0) | read_inputs(9); @@ -1096,7 +1105,7 @@ static INPUT_PORTS_START( tntell ) INPUT_PORTS_END -static INPUT_PORTS_START( ctteach ) +static INPUT_PORTS_START( k28 ) PORT_START("IN.0") // O0 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("Off") // -> auto_power_off PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR('A') PORT_NAME("A/1") @@ -1332,16 +1341,16 @@ static MACHINE_CONFIG_DERIVED( tntell, vocaid ) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( ctteach, tispeak_state ) +static MACHINE_CONFIG_START( k28, tispeak_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", TMS1400, MASTER_CLOCK/2) - MCFG_TMS1XXX_READ_K_CB(READ8(tispeak_state, ctteach_read_k)) - MCFG_TMS1XXX_WRITE_O_CB(WRITE16(tispeak_state, ctteach_write_o)) - MCFG_TMS1XXX_WRITE_R_CB(WRITE16(tispeak_state, ctteach_write_r)) + MCFG_TMS1XXX_READ_K_CB(READ8(tispeak_state, k28_read_k)) + MCFG_TMS1XXX_WRITE_O_CB(WRITE16(tispeak_state, k28_write_o)) + MCFG_TMS1XXX_WRITE_R_CB(WRITE16(tispeak_state, k28_write_r)) MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1)) - MCFG_DEFAULT_LAYOUT(layout_ctteach) + MCFG_DEFAULT_LAYOUT(layout_k28) /* sound hardware */ MCFG_DEVICE_ADD("tms6100", TMS6100, MASTER_CLOCK/4) @@ -1349,6 +1358,13 @@ static MACHINE_CONFIG_START( ctteach, tispeak_state ) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("tms5100", TMS5110A, MASTER_CLOCK) MCFG_FRAGMENT_ADD(tms5110_route) + + /* cartridge */ + MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "k28") + MCFG_GENERIC_EXTENSIONS("vsm") + MCFG_GENERIC_LOAD(tispeak_state, tispeak_cartridge) + + MCFG_SOFTWARE_LIST_ADD("cart_list", "k28") MACHINE_CONFIG_END @@ -1693,16 +1709,16 @@ ROM_START( vocaid ) ROM_END -ROM_START( ctteach ) +ROM_START( k28 ) ROM_REGION( 0x1000, "maincpu", 0 ) ROM_LOAD( "mp7324", 0x0000, 0x1000, CRC(08d15ab6) SHA1(5b0f6c53e6732a362c4bb25d966d4072fdd33db8) ) ROM_REGION( 867, "maincpu:mpla", 0 ) ROM_LOAD( "tms1100_common1_micro.pla", 0, 867, CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) ROM_REGION( 557, "maincpu:opla", 0 ) - ROM_LOAD( "tms1400_ctteach_output.pla", 0, 557, CRC(3a5c7005) SHA1(3fe5819c138a90e7fc12817415f2622ca81b40b2) ) + ROM_LOAD( "tms1400_k28_output.pla", 0, 557, CRC(3a5c7005) SHA1(3fe5819c138a90e7fc12817415f2622ca81b40b2) ) - ROM_REGION( 0x8000, "tms6100", ROMREGION_ERASEFF ) + ROM_REGION( 0x10000, "tms6100", ROMREGION_ERASEFF ) // 8000-bfff = space reserved for cartridge? ROM_LOAD( "cm62084.vsm", 0x0000, 0x4000, CRC(cd1376f7) SHA1(96fa484c392c451599bc083b8376cad9c998df7d) ) ROM_END @@ -1738,4 +1754,4 @@ COMP( 1981, tntellfr, tntell, 0, tntell, tntell, tispeak_state, tn COMP( 1982, vocaid, 0, 0, vocaid, tntell, driver_device, 0, "Texas Instruments", "Vocaid", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_REQUIRES_ARTWORK ) -COMP( 1985, ctteach, 0, 0, ctteach, ctteach, driver_device, 0, "Coleco", "Talking Teacher", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) +COMP( 1985, k28, 0, 0, k28, k28, tispeak_state, snspell, "Tiger Electronics", "K28: Talking Learning Computer (model 7-232)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) diff --git a/src/mame/layout/ctteach.lay b/src/mame/layout/k28.lay similarity index 100% rename from src/mame/layout/ctteach.lay rename to src/mame/layout/k28.lay diff --git a/src/mame/mess.lst b/src/mame/mess.lst index 459fae8a81f..d43909d9e41 100644 --- a/src/mame/mess.lst +++ b/src/mame/mess.lst @@ -2359,7 +2359,7 @@ tntelluk tntellfr tntellp vocaid -ctteach // Coleco +k28 // Tiger Electronics // hh_ucom4 ufombs // Bambino From b383bebc2d76981f71e0771694286f9471a44c51 Mon Sep 17 00:00:00 2001 From: Scott Stone Date: Sat, 6 Feb 2016 19:20:53 -0500 Subject: [PATCH 09/10] hash.xml format fixes (nw) --- hash/casloopy.xml | 2 +- hash/pico.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hash/casloopy.xml b/hash/casloopy.xml index 6573fddaa37..26e36c95a97 100644 --- a/hash/casloopy.xml +++ b/hash/casloopy.xml @@ -91,7 +91,7 @@ 1996 Casio - + diff --git a/hash/pico.xml b/hash/pico.xml index 71ba190c791..08dc5b5ec30 100644 --- a/hash/pico.xml +++ b/hash/pico.xml @@ -1818,7 +1818,7 @@ Published by Others (T-yyy*** serial codes, for yyy depending on the publisher) 1995 Imagineer - + From 45b5f1e5d2e95e44fa852f7a9598ac253d5af562 Mon Sep 17 00:00:00 2001 From: hap Date: Sun, 7 Feb 2016 02:33:14 +0100 Subject: [PATCH 10/10] fidelz80: small update --- src/mame/drivers/fidelz80.cpp | 28 ++++++++++++---------------- src/mame/drivers/tispeak.cpp | 6 +++--- 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/src/mame/drivers/fidelz80.cpp b/src/mame/drivers/fidelz80.cpp index 7fdf806f635..3ebb4f2919e 100644 --- a/src/mame/drivers/fidelz80.cpp +++ b/src/mame/drivers/fidelz80.cpp @@ -10,7 +10,7 @@ It sometimes does this on Voice Sensory Chess Challenger real hardware. It can also be heard on Advanced Voice Chess Challenger real hardware, but not the whole line: "I I am Fidelity's chess challenger", instead. - - correctly hook up VBRC speech so that the z80 is halted while words are being spoken + - VBRC card scanner Chess pieces are required, but theoretically blindfold chess is possible. Chessboard artwork is provided for boards with pressure/magnet sensors. @@ -1327,21 +1327,16 @@ ADDRESS_MAP_END WRITE8_MEMBER(fidelz80_state::vbrc_speech_w) { - //printf("%X ",data); - - // todo: HALT THE z80 here, and set up a callback to poll the s14001a BUSY line to resume z80 m_speech->data_w(space, 0, data & 0x3f); m_speech->start_w(1); m_speech->start_w(0); - - //m_speech->start_w(BIT(data, 7)); } static ADDRESS_MAP_START( vbrc_main_map, AS_PROGRAM, 8, fidelz80_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0x5fff) AM_ROM AM_RANGE(0x6000, 0x63ff) AM_MIRROR(0x1c00) AM_RAM - AM_RANGE(0xe000, 0xffff) AM_MIRROR(0x1fff) AM_WRITE(vbrc_speech_w) + AM_RANGE(0xe000, 0xe000) AM_MIRROR(0x1fff) AM_WRITE(vbrc_speech_w) ADDRESS_MAP_END static ADDRESS_MAP_START( vbrc_main_io, AS_IO, 8, fidelz80_state ) @@ -1408,13 +1403,13 @@ static INPUT_PORTS_START( vcc ) PORT_INCLUDE( vcc_base ) PORT_START("IN.4") // PCB jumpers, not consumer accessible - PORT_CONFNAME( 0x01, 0x00, "Language: French" ) + PORT_CONFNAME( 0x01, 0x00, "Language: German" ) PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) PORT_CONFSETTING( 0x01, DEF_STR( On ) ) - PORT_CONFNAME( 0x02, 0x00, "Language: Spanish" ) + PORT_CONFNAME( 0x02, 0x00, "Language: French" ) PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) PORT_CONFSETTING( 0x02, DEF_STR( On ) ) - PORT_CONFNAME( 0x04, 0x00, "Language: German" ) + PORT_CONFNAME( 0x04, 0x00, "Language: Spanish" ) PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) PORT_CONFSETTING( 0x04, DEF_STR( On ) ) PORT_CONFNAME( 0x08, 0x00, "Language: Special" ) @@ -1426,27 +1421,27 @@ static INPUT_PORTS_START( vccfr ) PORT_INCLUDE( vcc ) PORT_MODIFY("IN.4") - PORT_CONFNAME( 0x01, 0x01, "Language: French" ) + PORT_CONFNAME( 0x02, 0x02, "Language: French" ) PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) - PORT_CONFSETTING( 0x01, DEF_STR( On ) ) + PORT_CONFSETTING( 0x02, DEF_STR( On ) ) INPUT_PORTS_END static INPUT_PORTS_START( vccsp ) PORT_INCLUDE( vcc ) PORT_MODIFY("IN.4") - PORT_CONFNAME( 0x02, 0x02, "Language: Spanish" ) + PORT_CONFNAME( 0x04, 0x04, "Language: Spanish" ) PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) - PORT_CONFSETTING( 0x02, DEF_STR( On ) ) + PORT_CONFSETTING( 0x04, DEF_STR( On ) ) INPUT_PORTS_END static INPUT_PORTS_START( vccg ) PORT_INCLUDE( vcc ) PORT_MODIFY("IN.4") - PORT_CONFNAME( 0x04, 0x04, "Language: German" ) + PORT_CONFNAME( 0x01, 0x01, "Language: German" ) PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) - PORT_CONFSETTING( 0x04, DEF_STR( On ) ) + PORT_CONFSETTING( 0x01, DEF_STR( On ) ) INPUT_PORTS_END @@ -1766,6 +1761,7 @@ static MACHINE_CONFIG_START( vbrc, fidelz80_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("speech", S14001A, 25000) // R/C circuit, around 25khz + MCFG_S14001A_BSY_HANDLER(INPUTLINE("maincpu", Z80_INPUT_LINE_WAIT)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) MACHINE_CONFIG_END diff --git a/src/mame/drivers/tispeak.cpp b/src/mame/drivers/tispeak.cpp index 0415dce272f..0bfc1888c5c 100644 --- a/src/mame/drivers/tispeak.cpp +++ b/src/mame/drivers/tispeak.cpp @@ -357,8 +357,8 @@ Tiger Electronics K28 (model 7-232) Sold in Hong Kong, distributed in US as: - Coleco: Talking Teacher - Sears: Talkatron - Learning Computer -Earlier K28 models 7-230 and 7-231 are on different hardware, showing a different keyboard, -VFD display, and presumed to use the SC-01 speech chip. +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. K28 model 7-232 (HK), 1985 - MCU: TMS1400 MP7324 @@ -1718,7 +1718,7 @@ ROM_START( k28 ) ROM_REGION( 557, "maincpu:opla", 0 ) ROM_LOAD( "tms1400_k28_output.pla", 0, 557, CRC(3a5c7005) SHA1(3fe5819c138a90e7fc12817415f2622ca81b40b2) ) - ROM_REGION( 0x10000, "tms6100", ROMREGION_ERASEFF ) // 8000-bfff = space reserved for cartridge? + ROM_REGION( 0x10000, "tms6100", ROMREGION_ERASEFF ) // 8000-bfff? = space reserved for cartridge ROM_LOAD( "cm62084.vsm", 0x0000, 0x4000, CRC(cd1376f7) SHA1(96fa484c392c451599bc083b8376cad9c998df7d) ) ROM_END