summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/novag6502.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/novag6502.cpp')
-rw-r--r--src/mame/drivers/novag6502.cpp77
1 files changed, 60 insertions, 17 deletions
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 )