From e8f1daea2ea3583b8593c8016f92c660a92c924d Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 25 Feb 2017 17:57:04 +0100 Subject: novag6502: added cforte internal layout (nw) --- src/mame/drivers/hh_tms1k.cpp | 3 +- src/mame/drivers/novag6502.cpp | 77 +++++-- src/mame/includes/novagbase.h | 1 + src/mame/layout/fidel_desdis.lay | 2 +- src/mame/layout/novag_cforte.lay | 433 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 497 insertions(+), 19 deletions(-) create mode 100644 src/mame/layout/novag_cforte.lay diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp index 442f4f663a6..b3294fda2e4 100644 --- a/src/mame/drivers/hh_tms1k.cpp +++ b/src/mame/drivers/hh_tms1k.cpp @@ -27,6 +27,7 @@ *MP0230 TMS1000 1980, Entex Blast It (6015) @MP0271 TMS1000 1982, Tandy Radio Shack Monkey See @MP0907 TMS1000 1979, Conic Basketball (101-006) + *MP0908 TMS1000 1979, Conic I.Q. *MP0910 TMS1000 1979, Conic Basketball (101-003) @MP0914 TMS1000 1979, Entex Baseball 1 @MP0915 TMS1000 1979, Bandai System Control Car: Cheetah/The Incredible Brain Buggy @@ -60,7 +61,7 @@ @MP3208 TMS1000 1977, Milton Bradley Electronic Battleship (1977, model 4750B) @MP3226 TMS1000 1978, Milton Bradley Simon (model 4850) *MP3232 TMS1000 1979, Fonas 2-Player Baseball (no "MP" on chip label) - *MP3300 TMS1000 1980, Estrela Genius (from Brazil, looks and plays identical to Simon) + *MP3300 TMS1000 1979, Milton Bradley Simon (newer) @MP3301A TMS1000 1979, Milton Bradley Big Trak *MP3320A TMS1000 1979, Coleco Head to Head Basketball *M32001 TMS1000 1981, Coleco Quiz Wiz Challenger (note: MP3398, MP3399, M3200x?) diff --git a/src/mame/drivers/novag6502.cpp b/src/mame/drivers/novag6502.cpp index 1a0e0390fd4..93b688ba3d3 100644 --- a/src/mame/drivers/novag6502.cpp +++ b/src/mame/drivers/novag6502.cpp @@ -11,7 +11,7 @@ such as Arena(in editmode). TODO: - - cforteb emulation (was initially sforteba romset) + - cforteb lcd (chip unknown, probably serially via 1f00 w) - verify supercon IRQ and beeper frequency - sforte irq active time (21.5us is too long) - sforte/sexpert led handling is correct? @@ -29,11 +29,14 @@ Super Constellation Chess Computer (model 844): ****************************************************************************** Constellation Forte: -- x +- 65C02 @ 5MHz +- 4KB RAM, 64KB ROM +- 10-digit 7seg LCD display +- TTL, 18 LEDs, 8*8 chessboard buttons When it was first added to MAME as skeleton driver in mmodular.c, this romset was assumed to be Super Forte B, but it definitely isn't. I/O is similar to -Super Constellation, let's assume for now it's a Constellation Forte B. +Super Constellation, it's near-certainly a Constellation Forte B. ****************************************************************************** @@ -61,6 +64,7 @@ instead of magnet sensors. #include "machine/nvram.h" // internal artwork +#include "novag_cforte.lh" // clickable #include "novag_sexpert.lh" // clickable #include "novag_sforte.lh" // clickable #include "novag_supercon.lh" // clickable @@ -216,6 +220,17 @@ void novagbase_state::set_display_size(int maxx, int maxy) m_display_maxy = maxy; } +void novagbase_state::set_display_segmask(u32 digits, u32 mask) +{ + // set a segment mask per selected digit, but leave unselected ones alone + for (int i = 0; i < 0x20; i++) + { + if (digits & 1) + m_display_segmask[i] = mask; + digits >>= 1; + } +} + void novagbase_state::display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update) { set_display_size(maxx, maxy); @@ -422,7 +437,7 @@ WRITE8_MEMBER(novag6502_state::sforte_lcd_data_w) Address Maps ******************************************************************************/ -// Super Constellation +// Super Constellation / Constellation Forte static ADDRESS_MAP_START( supercon_map, AS_PROGRAM, 8, novag6502_state ) AM_RANGE(0x0000, 0x0fff) AM_RAM AM_SHARE("nvram") @@ -434,15 +449,6 @@ static ADDRESS_MAP_START( supercon_map, AS_PROGRAM, 8, novag6502_state ) ADDRESS_MAP_END -// Constellation Forte - -static ADDRESS_MAP_START( cforte_map, AS_PROGRAM, 8, novag6502_state ) - ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x0000, 0x0fff) AM_RAM - AM_RANGE(0x2000, 0xffff) AM_ROM -ADDRESS_MAP_END - - // Super Expert / Super Forte static ADDRESS_MAP_START( sforte_map, AS_PROGRAM, 8, novag6502_state ) @@ -674,6 +680,43 @@ static INPUT_PORTS_START( supercon ) INPUT_PORTS_END +static INPUT_PORTS_START( cforte ) + PORT_INCLUDE( cb_buttons ) + + PORT_MODIFY("IN.0") + PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("New Game") + PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_NAME("Player/Player / Gambit/Large / King") + + PORT_MODIFY("IN.1") + PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_NAME("Verify/Set Up / Pro-Op") + PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_NAME("Random/Tour/Normal / Training Level / Queen") + + PORT_MODIFY("IN.2") + PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_NAME("Change Color / Time Control / Priority") + PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_NAME("Sound / Depth Search / Bishop") + + PORT_MODIFY("IN.3") + PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Flip Display / Clear Board / Clear Book") + PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_NAME("Solve Mate / Infinite / Knight") + + PORT_MODIFY("IN.4") + PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("Print Moves / Print Evaluations / Print Book") + PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_NAME("Print Board / Interface / Rook") + + PORT_MODIFY("IN.5") + PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Trace Forward / Auto Play / No/End") + PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_NAME("Print List / Acc. Time / Pawn") + + PORT_MODIFY("IN.6") + PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("Hint / Next Best / Yes/Start") + PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_NAME("Set Level") + + PORT_MODIFY("IN.7") + PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("Go / ->") + PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Take Back / Restore / <-") +INPUT_PORTS_END + + static INPUT_PORTS_START( sexy_shared ) PORT_MODIFY("IN.0") PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("Go") @@ -765,12 +808,12 @@ static MACHINE_CONFIG_START( cforte, novag6502_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M65C02, 5000000) // 5MHz MCFG_CPU_PERIODIC_INT_DRIVER(novag6502_state, irq0_line_hold, 250) // guessed - MCFG_CPU_PROGRAM_MAP(cforte_map) + MCFG_CPU_PROGRAM_MAP(supercon_map) - //MCFG_NVRAM_ADD_1FILL("nvram") + MCFG_NVRAM_ADD_1FILL("nvram") MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", novagbase_state, display_decay_tick, attotime::from_msec(1)) - //MCFG_DEFAULT_LAYOUT(layout_novag_cforte) + MCFG_DEFAULT_LAYOUT(layout_novag_cforte) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") @@ -922,7 +965,7 @@ ROM_END /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */ CONS( 1984, supercon, 0, 0, supercon, supercon, driver_device, 0, "Novag", "Super Constellation", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1986, cforteb, 0, 0, cforte, supercon, driver_device, 0, "Novag", "Constellation Forte (version B)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +CONS( 1986, cforteb, 0, 0, cforte, cforte, driver_device, 0, "Novag", "Constellation Forte (version B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NOT_WORKING ) CONS( 1987, sfortea, 0, 0, sforte, sforte, novag6502_state, sexpert, "Novag", "Super Forte (version A, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1987, sfortea1, sfortea, 0, sforte, sforte, novag6502_state, sexpert, "Novag", "Super Forte (version A, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/includes/novagbase.h b/src/mame/includes/novagbase.h index e4072a0cf3b..9bbefb01c45 100644 --- a/src/mame/includes/novagbase.h +++ b/src/mame/includes/novagbase.h @@ -50,6 +50,7 @@ public: TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick); void display_update(); void set_display_size(int maxx, int maxy); + void set_display_segmask(u32 digits, u32 mask); void display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update = true); DECLARE_PALETTE_INIT(novag_lcd); diff --git a/src/mame/layout/fidel_desdis.lay b/src/mame/layout/fidel_desdis.lay index 18921dbee47..06381c86b11 100644 --- a/src/mame/layout/fidel_desdis.lay +++ b/src/mame/layout/fidel_desdis.lay @@ -5,7 +5,7 @@ - + diff --git a/src/mame/layout/novag_cforte.lay b/src/mame/layout/novag_cforte.lay new file mode 100644 index 00000000000..0c8416e8024 --- /dev/null +++ b/src/mame/layout/novag_cforte.lay @@ -0,0 +1,433 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3