summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/fidelz80.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/fidelz80.cpp')
-rw-r--r--src/mame/drivers/fidelz80.cpp91
1 files changed, 75 insertions, 16 deletions
diff --git a/src/mame/drivers/fidelz80.cpp b/src/mame/drivers/fidelz80.cpp
index f5038d8b269..8de482d6ced 100644
--- a/src/mame/drivers/fidelz80.cpp
+++ b/src/mame/drivers/fidelz80.cpp
@@ -198,6 +198,9 @@ Zilog Z80A, 3.579MHz from XTAL
Z80 IRQ/NMI unused, no timer IC.
This is a cost-reduced design from CC10, no special I/O chips.
+Backgammon Challenger (BKC) is the same PCB, with the speaker connection going
+to the display panel instead.
+
Memory map:
-----------
0000-0FFF: 4K 2332 ROM CN19103N BCC-REVB.
@@ -503,6 +506,7 @@ expect that the software reads these once on startup only.
// internal artwork
#include "fidel_cc.lh" // clickable
#include "fidel_bcc.lh" // clickable
+#include "fidel_bkc.lh" // clickable
#include "fidel_dsc.lh" // clickable
#include "fidel_sc8.lh" // clickable
#include "fidel_vcc.lh" // clickable
@@ -526,15 +530,11 @@ public:
void cc10(machine_config &config);
void vcc(machine_config &config);
-
void bcc(machine_config &config);
-
+ void bkc(machine_config &config);
void scc(machine_config &config);
-
void vsc(machine_config &config);
-
void vbrc(machine_config &config);
-
void dsc(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(reset_button);
@@ -552,7 +552,7 @@ private:
TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE); }
TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); }
- // CC10 and VCC/UVC
+ // CC10, VCC/UVC
void vcc_prepare_display();
DECLARE_READ8_MEMBER(vcc_speech_r);
DECLARE_WRITE8_MEMBER(vcc_ppi_porta_w);
@@ -567,10 +567,12 @@ private:
void vcc_io(address_map &map);
void vcc_map(address_map &map);
- // BCC
+ // BCC, BKC
DECLARE_READ8_MEMBER(bcc_input_r);
DECLARE_WRITE8_MEMBER(bcc_control_w);
+ DECLARE_WRITE8_MEMBER(bkc_control_w);
void bcc_io(address_map &map);
+ void bkc_io(address_map &map);
void bcc_map(address_map &map);
// SCC
@@ -792,7 +794,7 @@ READ8_MEMBER(fidelbase_state::cartridge_r)
// Devices, I/O
/******************************************************************************
- CC10 and VCC/UVC
+ CC10, VCC/UVC
******************************************************************************/
// misc handlers
@@ -894,25 +896,31 @@ WRITE8_MEMBER(fidelz80_state::cc10_ppi_porta_w)
/******************************************************************************
- BCC
+ BCC, BKC
******************************************************************************/
// TTL
-WRITE8_MEMBER(fidelz80_state::bcc_control_w)
+WRITE8_MEMBER(fidelz80_state::bkc_control_w)
{
- // a0-a2,d7: digit segment data via NE591, Q7 is speaker out
+ // a0-a2,d7: digit segment data via NE591
u8 mask = 1 << (offset & 7);
m_7seg_data = (m_7seg_data & ~mask) | ((data & 0x80) ? mask : 0);
- m_dac->write(BIT(m_7seg_data, 7));
// d0-d3: led select, input mux
- // d4,d5: check,lose leds(direct)
+ // d4,d5: upper leds(direct)
set_display_segmask(0xf, 0x7f);
- display_matrix(7, 6, m_7seg_data & 0x7f, data & 0x3f);
+ display_matrix(8, 6, m_7seg_data, data & 0x3f);
m_inp_mux = data & 0xf;
}
+WRITE8_MEMBER(fidelz80_state::bcc_control_w)
+{
+ // same as BKC, and NE591 Q7 is speaker out
+ bkc_control_w(space, offset, data);
+ m_dac->write(BIT(m_7seg_data, 7));
+}
+
READ8_MEMBER(fidelz80_state::bcc_input_r)
{
// d0-d3: multiplexed inputs
@@ -1134,7 +1142,7 @@ READ8_MEMBER(fidelz80_state::dsc_input_r)
Address Maps
******************************************************************************/
-// CC10 and VCC/UVC
+// CC10, VCC/UVC
void fidelz80_state::cc10_map(address_map &map)
{
@@ -1159,7 +1167,7 @@ void fidelz80_state::vcc_io(address_map &map)
}
-// BCC
+// BCC, BKC
void fidelz80_state::bcc_map(address_map &map)
{
@@ -1175,6 +1183,12 @@ void fidelz80_state::bcc_io(address_map &map)
map(0x00, 0x07).rw(FUNC(fidelz80_state::bcc_input_r), FUNC(fidelz80_state::bcc_control_w));
}
+void fidelz80_state::bkc_io(address_map &map)
+{
+ map.global_mask(0x07);
+ map(0x00, 0x07).rw(FUNC(fidelz80_state::bcc_input_r), FUNC(fidelz80_state::bkc_control_w));
+}
+
// SCC
@@ -1362,6 +1376,33 @@ static INPUT_PORTS_START( bcc )
INPUT_PORTS_END
+static INPUT_PORTS_START( bkc )
+ PORT_START("IN.0")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("EN") PORT_CODE(KEYCODE_ENTER)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("3") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD)
+
+ PORT_START("IN.1")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("8") PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD)
+
+ PORT_START("IN.2")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("GM") PORT_CODE(KEYCODE_SPACE)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("4") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD)
+
+ PORT_START("IN.3")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RE") PORT_CODE(KEYCODE_R)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("PB") PORT_CODE(KEYCODE_P)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("PV") PORT_CODE(KEYCODE_V)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD)
+INPUT_PORTS_END
+
+
static INPUT_PORTS_START( vbrc )
PORT_START("IN.0")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("A")
@@ -1680,6 +1721,17 @@ void fidelz80_state::bcc(machine_config &config)
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
}
+void fidelz80_state::bkc(machine_config &config)
+{
+ /* basic machine hardware */
+ Z80(config, m_maincpu, 3.579545_MHz_XTAL);
+ m_maincpu->set_addrmap(AS_PROGRAM, &fidelz80_state::bcc_map);
+ m_maincpu->set_addrmap(AS_IO, &fidelz80_state::bkc_io);
+
+ TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1));
+ config.set_default_layout(layout_fidel_bkc);
+}
+
void fidelz80_state::scc(machine_config &config)
{
/* basic machine hardware */
@@ -1850,6 +1902,12 @@ ROM_START( cc7 ) // model BCC
ROM_END
+ROM_START( backgamc ) // model BKC
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "cn19255n_101-32012", 0x0000, 0x1000, CRC(0a8a19b7) SHA1(d6f0dd44b33c9b79570cf0ceac02a036ec91ba57) ) // 2332
+ROM_END
+
+
ROM_START( fscc8 ) // model SCC, PCB label 510-1011 REV.2
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "101-32017", 0x0000, 0x1000, CRC(5340820d) SHA1(e3494c7624b3cacbbb9a0a8cc9e1ed3e00326dfd) ) // 2732
@@ -2021,6 +2079,7 @@ ROM_END
// YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY FULLNAME, FLAGS
CONS( 1978, cc10, 0, 0, cc10, cc10, fidelz80_state, empty_init, "Fidelity Electronics", "Chess Challenger 10 (rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1979, cc7, 0, 0, bcc, bcc, fidelz80_state, empty_init, "Fidelity Electronics", "Chess Challenger 7 (rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1979, backgamc, 0, 0, bkc, bkc, fidelz80_state, empty_init, "Fidelity Electronics", "Backgammon Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NO_SOUND_HW )
CONS( 1980, fscc8, 0, 0, scc, scc, fidelz80_state, empty_init, "Fidelity Electronics", "Sensory Chess Challenger 8", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )