mirror of
https://github.com/holub/mame
synced 2025-06-06 21:03:47 +03:00
fidelbase: split off some drivers (nw)
This commit is contained in:
parent
61db5737b5
commit
75805ea2f0
@ -2132,8 +2132,11 @@ files {
|
||||
MAME_DIR .. "src/mame/drivers/fidelbase.cpp",
|
||||
MAME_DIR .. "src/mame/includes/fidelbase.h",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_as12.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_cc10.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_cc7.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_chesster.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_csc.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_dames.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_desdis.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_eag68k.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_elite.cpp",
|
||||
@ -2141,8 +2144,8 @@ files {
|
||||
MAME_DIR .. "src/mame/drivers/fidel_phantom.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_sc12.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_sc6.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_sc8.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_sc9.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_elite.cpp",
|
||||
}
|
||||
|
||||
createMESSProjects(_target, _subtarget, "force")
|
||||
|
@ -3,7 +3,7 @@
|
||||
// thanks-to:yoyo_chessboard
|
||||
/******************************************************************************
|
||||
|
||||
Elegance Chess Challenger (AS12)
|
||||
Fidelity Elegance Chess Challenger (AS12)
|
||||
----------------
|
||||
R65C02P4 CPU @ 4MHz
|
||||
3*8KB ROM(TMM2764), 2*2KB RAM(HM6116)
|
||||
@ -170,7 +170,7 @@ void as12_state::as12(machine_config &config)
|
||||
ROM Definitions
|
||||
******************************************************************************/
|
||||
|
||||
ROM_START( feleg ) // model AS12(or 6085), PCB label 510-1084B01
|
||||
ROM_START( feleg ) // model AS12(or 6085)
|
||||
ROM_REGION( 0x10000, "mainmap", 0 )
|
||||
ROM_LOAD("feleg.1", 0x8000, 0x2000, CRC(e9df31e8) SHA1(31c52bb8f75580c82093eb950959c1bc294189a8) ) // TMM2764, no label
|
||||
ROM_LOAD("feleg.2", 0xc000, 0x2000, CRC(bed9c84b) SHA1(c12f39765b054d2ad81f747e698715ad4246806d) ) // "
|
||||
|
260
src/mame/drivers/fidel_cc10.cpp
Normal file
260
src/mame/drivers/fidel_cc10.cpp
Normal file
@ -0,0 +1,260 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Jonathan Gevaryahu,Sandro Ronco,hap
|
||||
// thanks-to:Berger
|
||||
/******************************************************************************
|
||||
|
||||
Fidelity Chess Challenger 10 (CCX)
|
||||
-------------------
|
||||
4 versions are known to exist: A,B,C,D. Strangely, version C(UCC10) has an 8080
|
||||
instead of Z80. Chess Challenger 1,3 and 7 also run on very similar hardware.
|
||||
|
||||
Z80A CPU @ 4MHz
|
||||
4KB ROM(NEC 2332A), 2*256 bytes RAM(4*NEC 2111AL-4)
|
||||
|
||||
This is an earlier hardware upon which the VCC and UVC were based on;
|
||||
The hardware is nearly the same; in fact the only significant differences are
|
||||
the RAM being located in a different place, the lack of a speech chip, and
|
||||
the connections to ports A and B on the PPI:
|
||||
|
||||
8255 connections:
|
||||
-----------------
|
||||
PA.0 - segment G (W)
|
||||
PA.1 - segment F (W)
|
||||
PA.2 - segment E (W)
|
||||
PA.3 - segment D (W)
|
||||
PA.4 - segment C (W)
|
||||
PA.5 - segment B (W)
|
||||
PA.6 - segment A (W)
|
||||
PA.7 - 'beeper' direct speaker output (W)
|
||||
|
||||
The beeper is via a 556 timer, fixed-frequency at around 1300-1400Hz.
|
||||
Not all hardware configurations include the beeper.
|
||||
|
||||
PB.0 - dot commons (W)
|
||||
PB.1 - NC
|
||||
PB.2 - digit 0, bottom dot (W)
|
||||
PB.3 - digit 1, top dot (W)
|
||||
PB.4 - digit 2 (W)
|
||||
PB.5 - digit 3 (W)
|
||||
PB.6 - NC
|
||||
PB.7 - Mode select? (cc3 vs cc10, R)
|
||||
|
||||
Note: there is no CC3 with 16 buttons, and things get glitchy in this mode.
|
||||
|
||||
PC.0 - button row 0 (R)
|
||||
PC.1 - button row 1 (R)
|
||||
PC.2 - button row 2 (R)
|
||||
PC.3 - button row 3 (R)
|
||||
PC.4 - button column A (W)
|
||||
PC.5 - button column B (W)
|
||||
PC.6 - button column C (W)
|
||||
PC.7 - button column D (W)
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/fidelbase.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/i8255.h"
|
||||
#include "sound/beep.h"
|
||||
#include "speaker.h"
|
||||
|
||||
// internal artwork
|
||||
#include "fidel_cc10.lh" // clickable
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
class ccx_state : public fidelbase_state
|
||||
{
|
||||
public:
|
||||
ccx_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
fidelbase_state(mconfig, type, tag),
|
||||
m_ppi8255(*this, "ppi8255"),
|
||||
m_beeper_off(*this, "beeper_off"),
|
||||
m_beeper(*this, "beeper")
|
||||
{ }
|
||||
|
||||
void ccx(machine_config &config);
|
||||
|
||||
private:
|
||||
// devices/pointers
|
||||
required_device<i8255_device> m_ppi8255;
|
||||
required_device<timer_device> m_beeper_off;
|
||||
required_device<beep_device> m_beeper;
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(beeper_off) { m_beeper->set_state(0); }
|
||||
|
||||
// address maps
|
||||
void main_map(address_map &map);
|
||||
void main_io(address_map &map);
|
||||
|
||||
// I/O handlers
|
||||
void prepare_display();
|
||||
DECLARE_WRITE8_MEMBER(ppi_porta_w);
|
||||
DECLARE_WRITE8_MEMBER(ppi_portb_w);
|
||||
DECLARE_READ8_MEMBER(ppi_portc_r);
|
||||
DECLARE_WRITE8_MEMBER(ppi_portc_w);
|
||||
};
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Devices, I/O
|
||||
******************************************************************************/
|
||||
|
||||
// misc handlers
|
||||
|
||||
void ccx_state::prepare_display()
|
||||
{
|
||||
// 4 7seg leds (note: sel d0 for extra leds)
|
||||
u8 outdata = (m_7seg_data & 0x7f) | (m_led_select << 7 & 0x80);
|
||||
set_display_segmask(0xf, 0x7f);
|
||||
display_matrix(8, 4, outdata, m_led_select >> 2 & 0xf);
|
||||
}
|
||||
|
||||
|
||||
// I8255 PPI
|
||||
|
||||
WRITE8_MEMBER(ccx_state::ppi_porta_w)
|
||||
{
|
||||
// d7: enable beeper on falling edge (555 monostable)
|
||||
if (~data & m_7seg_data & 0x80 && !m_beeper_off->enabled())
|
||||
{
|
||||
m_beeper->set_state(1);
|
||||
m_beeper_off->adjust(attotime::from_msec(80)); // duration is approximate
|
||||
}
|
||||
|
||||
// d0-d6: digit segment data
|
||||
m_7seg_data = bitswap<8>(data,7,0,1,2,3,4,5,6);
|
||||
prepare_display();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(ccx_state::ppi_portb_w)
|
||||
{
|
||||
// d0,d2-d5: digit/led select
|
||||
m_led_select = data;
|
||||
prepare_display();
|
||||
}
|
||||
|
||||
READ8_MEMBER(ccx_state::ppi_portc_r)
|
||||
{
|
||||
// d0-d3: multiplexed inputs (active low)
|
||||
return ~read_inputs(4) & 0xf;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(ccx_state::ppi_portc_w)
|
||||
{
|
||||
// d4-d7: input mux (inverted)
|
||||
m_inp_mux = ~data >> 4 & 0xf;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Address Maps
|
||||
******************************************************************************/
|
||||
|
||||
void ccx_state::main_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map.global_mask(0x3fff);
|
||||
map(0x0000, 0x0fff).rom();
|
||||
map(0x1000, 0x10ff).mirror(0x0f00).ram();
|
||||
map(0x3000, 0x30ff).mirror(0x0f00).ram();
|
||||
}
|
||||
|
||||
void ccx_state::main_io(address_map &map)
|
||||
{
|
||||
map.global_mask(0x03);
|
||||
map(0x00, 0x03).rw(m_ppi8255, FUNC(i8255_device::read), FUNC(i8255_device::write));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Input Ports
|
||||
******************************************************************************/
|
||||
|
||||
static INPUT_PORTS_START( ccx )
|
||||
PORT_START("IN.0")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LV") PORT_CODE(KEYCODE_L)
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("A1") PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CODE(KEYCODE_A)
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("E5") PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_CODE(KEYCODE_E)
|
||||
|
||||
PORT_START("IN.1")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Speaker") PORT_CODE(KEYCODE_SPACE)
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("DM") PORT_CODE(KEYCODE_M)
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("B2") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CODE(KEYCODE_B)
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("F6") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CODE(KEYCODE_F)
|
||||
|
||||
PORT_START("IN.2")
|
||||
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("PB") PORT_CODE(KEYCODE_P)
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("C3") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CODE(KEYCODE_C)
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("G7") PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CODE(KEYCODE_G)
|
||||
|
||||
PORT_START("IN.3")
|
||||
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("PV") PORT_CODE(KEYCODE_V)
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("D4") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(KEYCODE_D)
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("H8") PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_H)
|
||||
|
||||
PORT_START("RESET") // is not on matrix IN.0 d0
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RE") PORT_CODE(KEYCODE_R) PORT_CHANGED_MEMBER(DEVICE_SELF, ccx_state, reset_button, nullptr)
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Machine Drivers
|
||||
******************************************************************************/
|
||||
|
||||
void ccx_state::ccx(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
Z80(config, m_maincpu, 4_MHz_XTAL);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &ccx_state::main_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &ccx_state::main_io);
|
||||
|
||||
I8255(config, m_ppi8255);
|
||||
m_ppi8255->out_pa_callback().set(FUNC(ccx_state::ppi_porta_w));
|
||||
m_ppi8255->tri_pa_callback().set_constant(0);
|
||||
m_ppi8255->in_pb_callback().set_constant(0); // 0x80 for '3 level mode'
|
||||
m_ppi8255->out_pb_callback().set(FUNC(ccx_state::ppi_portb_w));
|
||||
m_ppi8255->in_pc_callback().set(FUNC(ccx_state::ppi_portc_r));
|
||||
m_ppi8255->tri_pb_callback().set_constant(0);
|
||||
m_ppi8255->out_pc_callback().set(FUNC(ccx_state::ppi_portc_w));
|
||||
|
||||
TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1));
|
||||
config.set_default_layout(layout_fidel_cc10);
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "speaker").front_center();
|
||||
BEEP(config, m_beeper, 1360); // approximation, from 556 timer ic
|
||||
m_beeper->add_route(ALL_OUTPUTS, "speaker", 0.25);
|
||||
TIMER(config, "beeper_off").configure_generic(FUNC(ccx_state::beeper_off));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
ROM Definitions
|
||||
******************************************************************************/
|
||||
|
||||
ROM_START( cc10 ) // model CCX
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "cn19053n_cc10b", 0x0000, 0x1000, CRC(afd3ca99) SHA1(870d09b2b52ccb8572d69642c59b5215d5fb26ab) ) // 2332
|
||||
ROM_END
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Drivers
|
||||
******************************************************************************/
|
||||
|
||||
// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
|
||||
CONS( 1978, cc10, 0, 0, ccx, ccx, ccx_state, empty_init, "Fidelity Electronics", "Chess Challenger 10 (model CCX, rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
243
src/mame/drivers/fidel_cc7.cpp
Normal file
243
src/mame/drivers/fidel_cc7.cpp
Normal file
@ -0,0 +1,243 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:hap
|
||||
// thanks-to:Berger
|
||||
/******************************************************************************
|
||||
|
||||
Fidelity Chess Challenger 7 (BCC)
|
||||
------------------------
|
||||
model CC7 is an older version
|
||||
RE information from netlist by Berger
|
||||
|
||||
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.
|
||||
2000-2FFF: ROM/RAM bus conflict!
|
||||
3000-3FFF: 256 bytes RAM (2111 SRAM x2)
|
||||
4000-FFFF: Z80 A14/A15 not connected
|
||||
|
||||
Port map (Write):
|
||||
---------
|
||||
D0-D3: digit select and keypad mux
|
||||
D4: LOSE led
|
||||
D5: CHECK led
|
||||
A0-A2: NE591 A0-A2
|
||||
D7: NE591 D (_C not used)
|
||||
NE591 Q0-Q6: digit segments A-G
|
||||
NE591 Q7: buzzer
|
||||
|
||||
Port map (Read):
|
||||
---------
|
||||
D0-D3: keypad row
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/fidelbase.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "sound/volt_reg.h"
|
||||
#include "speaker.h"
|
||||
|
||||
// internal artwork
|
||||
#include "fidel_bcc.lh" // clickable
|
||||
#include "fidel_bkc.lh" // clickable
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
class bcc_state : public fidelbase_state
|
||||
{
|
||||
public:
|
||||
bcc_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
fidelbase_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
// machine drivers
|
||||
void bcc(machine_config &config);
|
||||
void bkc(machine_config &config);
|
||||
|
||||
private:
|
||||
// address maps
|
||||
void main_map(address_map &map);
|
||||
void main_io(address_map &map);
|
||||
|
||||
// I/O handlers
|
||||
DECLARE_READ8_MEMBER(input_r);
|
||||
DECLARE_WRITE8_MEMBER(control_w);
|
||||
};
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Devices, I/O
|
||||
******************************************************************************/
|
||||
|
||||
// TTL
|
||||
|
||||
WRITE8_MEMBER(bcc_state::control_w)
|
||||
{
|
||||
// a0-a2,d7: digit segment data via NE591
|
||||
u8 mask = 1 << (offset & 7);
|
||||
m_7seg_data = (m_7seg_data & ~mask) | ((data & 0x80) ? mask : 0);
|
||||
|
||||
// BCC: NE591 Q7 is speaker out
|
||||
if (m_dac != nullptr)
|
||||
m_dac->write(BIT(m_7seg_data, 7));
|
||||
|
||||
// d0-d3: led select, input mux
|
||||
// d4,d5: upper leds(direct)
|
||||
set_display_segmask(0xf, 0x7f);
|
||||
display_matrix(8, 6, m_7seg_data, data & 0x3f);
|
||||
m_inp_mux = data & 0xf;
|
||||
}
|
||||
|
||||
READ8_MEMBER(bcc_state::input_r)
|
||||
{
|
||||
// d0-d3: multiplexed inputs
|
||||
return read_inputs(4);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Address Maps
|
||||
******************************************************************************/
|
||||
|
||||
void bcc_state::main_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map.global_mask(0x3fff);
|
||||
map(0x0000, 0x0fff).rom();
|
||||
map(0x3000, 0x30ff).mirror(0x0f00).ram();
|
||||
}
|
||||
|
||||
void bcc_state::main_io(address_map &map)
|
||||
{
|
||||
map.global_mask(0x07);
|
||||
map(0x00, 0x07).rw(FUNC(bcc_state::input_r), FUNC(bcc_state::control_w));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Input Ports
|
||||
******************************************************************************/
|
||||
|
||||
static INPUT_PORTS_START( bcc )
|
||||
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("PV") PORT_CODE(KEYCODE_V)
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("D4") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(KEYCODE_D)
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("H8") PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_H)
|
||||
|
||||
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("PB") PORT_CODE(KEYCODE_P)
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("C3") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CODE(KEYCODE_C)
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("G7") PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CODE(KEYCODE_G)
|
||||
|
||||
PORT_START("IN.2")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CB") PORT_CODE(KEYCODE_SPACE)
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("DM") PORT_CODE(KEYCODE_M)
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("B2") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CODE(KEYCODE_B)
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("F6") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CODE(KEYCODE_F)
|
||||
|
||||
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("LV") PORT_CODE(KEYCODE_L)
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("A1") PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CODE(KEYCODE_A)
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("E5") PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_CODE(KEYCODE_E)
|
||||
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
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Machine Drivers
|
||||
******************************************************************************/
|
||||
|
||||
void bcc_state::bkc(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
Z80(config, m_maincpu, 3.579545_MHz_XTAL);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &bcc_state::main_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &bcc_state::main_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 bcc_state::bcc(machine_config &config)
|
||||
{
|
||||
bkc(config);
|
||||
config.set_default_layout(layout_fidel_bcc);
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "speaker").front_center();
|
||||
DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.25);
|
||||
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
|
||||
vref.set_output(5.0);
|
||||
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
ROM Definitions
|
||||
******************************************************************************/
|
||||
|
||||
ROM_START( cc7 ) // model BCC
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "cn19103n_bcc-revb", 0x0000, 0x1000, CRC(a397d471) SHA1(9b12bc442fccee40f4d8500c792bc9d886c5e1a5) ) // 2332
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( backgamc ) // model BKC, PCB label P-380A-5
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "cn19255n_101-32012", 0x0000, 0x1000, CRC(0a8a19b7) SHA1(d6f0dd44b33c9b79570cf0ceac02a036ec91ba57) ) // 2332
|
||||
ROM_END
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Drivers
|
||||
******************************************************************************/
|
||||
|
||||
// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
|
||||
CONS( 1979, cc7, 0, 0, bcc, bcc, bcc_state, empty_init, "Fidelity Electronics", "Chess Challenger 7 (model BCC, rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
|
||||
CONS( 1979, backgamc, 0, 0, bkc, bkc, bcc_state, empty_init, "Fidelity Electronics", "Backgammon Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NO_SOUND_HW )
|
@ -3,7 +3,7 @@
|
||||
// thanks-to:yoyo_chessboard
|
||||
/******************************************************************************
|
||||
|
||||
Chesster (model 6120)
|
||||
Fidelity Chesster (model 6120)
|
||||
There is also a German version titled Kishon Chesster (model 6120G, or 6127)
|
||||
----------------
|
||||
|
||||
|
176
src/mame/drivers/fidel_dames.cpp
Normal file
176
src/mame/drivers/fidel_dames.cpp
Normal file
@ -0,0 +1,176 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:hap
|
||||
// thanks-to:yoyo_chessboard
|
||||
/******************************************************************************
|
||||
|
||||
Fidelity Dame Sensory Challenger (DSC)
|
||||
It's a checkers game for once instead of chess
|
||||
---------------
|
||||
Z80A CPU @ 3.9MHz
|
||||
8KB ROM(MOS 2364), 1KB RAM(2*TMM314APL)
|
||||
4-digit 7seg panel, sensory board with 50 buttons
|
||||
PCB label 510-1030A01
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/fidelbase.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "sound/volt_reg.h"
|
||||
#include "speaker.h"
|
||||
|
||||
// internal artwork
|
||||
#include "fidel_dsc.lh" // clickable
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
class dsc_state : public fidelbase_state
|
||||
{
|
||||
public:
|
||||
dsc_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
fidelbase_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
void dsc(machine_config &config);
|
||||
|
||||
private:
|
||||
void main_map(address_map &map);
|
||||
|
||||
// I/O handlers
|
||||
void prepare_display();
|
||||
DECLARE_WRITE8_MEMBER(control_w);
|
||||
DECLARE_WRITE8_MEMBER(select_w);
|
||||
DECLARE_READ8_MEMBER(input_r);
|
||||
};
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Devices, I/O
|
||||
******************************************************************************/
|
||||
|
||||
// TTL
|
||||
|
||||
void dsc_state::prepare_display()
|
||||
{
|
||||
// 4 7seg leds
|
||||
set_display_segmask(0xf, 0x7f);
|
||||
display_matrix(8, 4, m_7seg_data, m_led_select);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dsc_state::control_w)
|
||||
{
|
||||
// d0-d7: input mux, 7seg data
|
||||
m_inp_mux = ~data;
|
||||
m_7seg_data = data;
|
||||
prepare_display();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dsc_state::select_w)
|
||||
{
|
||||
// d4: speaker out
|
||||
m_dac->write(BIT(~data, 4));
|
||||
|
||||
// d0-d3: digit select
|
||||
m_led_select = data & 0xf;
|
||||
prepare_display();
|
||||
}
|
||||
|
||||
READ8_MEMBER(dsc_state::input_r)
|
||||
{
|
||||
// d0-d7: multiplexed inputs (active low)
|
||||
return ~read_inputs(8);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Address Maps
|
||||
******************************************************************************/
|
||||
|
||||
void dsc_state::main_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map(0x0000, 0x1fff).rom();
|
||||
map(0x4000, 0x4000).mirror(0x1fff).w(FUNC(dsc_state::control_w));
|
||||
map(0x6000, 0x6000).mirror(0x1fff).w(FUNC(dsc_state::select_w));
|
||||
map(0x8000, 0x8000).mirror(0x1fff).r(FUNC(dsc_state::input_r));
|
||||
map(0xa000, 0xa3ff).mirror(0x1c00).ram();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Input Ports
|
||||
******************************************************************************/
|
||||
|
||||
static INPUT_PORTS_START( dsc )
|
||||
PORT_INCLUDE( fidel_cb_buttons )
|
||||
|
||||
PORT_MODIFY("IN.4")
|
||||
PORT_BIT(0x8f, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
|
||||
PORT_MODIFY("IN.6")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Black King")
|
||||
|
||||
PORT_MODIFY("IN.7")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Black")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("White King")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("White")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("RV")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("RE")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("PB")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("LV")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("CL")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Machine Drivers
|
||||
******************************************************************************/
|
||||
|
||||
void dsc_state::dsc(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
Z80(config, m_maincpu, 3.9_MHz_XTAL); // 3.9MHz resonator
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &dsc_state::main_map);
|
||||
|
||||
const attotime irq_period = attotime::from_hz(523); // from 555 timer (22nF, 120K, 2.7K)
|
||||
TIMER(config, m_irq_on).configure_periodic(FUNC(dsc_state::irq_on<INPUT_LINE_IRQ0>), irq_period);
|
||||
m_irq_on->set_start_delay(irq_period - attotime::from_usec(41)); // active for 41us
|
||||
TIMER(config, "irq_off").configure_periodic(FUNC(dsc_state::irq_off<INPUT_LINE_IRQ0>), irq_period);
|
||||
|
||||
TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1));
|
||||
config.set_default_layout(layout_fidel_dsc);
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "speaker").front_center();
|
||||
DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.25);
|
||||
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
|
||||
vref.set_output(5.0);
|
||||
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
ROM Definitions
|
||||
******************************************************************************/
|
||||
|
||||
ROM_START( damesc ) // model DSC
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "101-1027a01", 0x0000, 0x2000, CRC(d86c985c) SHA1(20f923a24420050fd16e1172f5e889f144d17ac9) ) // MOS 2364
|
||||
ROM_END
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Drivers
|
||||
******************************************************************************/
|
||||
|
||||
// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
|
||||
CONS( 1981, damesc, 0, 0, dsc, dsc, dsc_state, empty_init, "Fidelity Electronics", "Dame Sensory Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
@ -663,25 +663,25 @@ ROM_END
|
||||
******************************************************************************/
|
||||
|
||||
// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
|
||||
CONS( 1983, feasbu, 0, 0, eas, eas, elite_state, init_language<0>, "Fidelity Electronics", "Elite A/S Challenger (Budapest program, English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1983, feasbug, feasbu, 0, eas, eas, elite_state, init_language<1>, "Fidelity Electronics", "Elite A/S Challenger (Budapest program, German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1983, feasbusp, feasbu, 0, eas, eas, elite_state, init_language<2>, "Fidelity Electronics", "Elite A/S Challenger (Budapest program, Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1983, feasbufr, feasbu, 0, eas, eas, elite_state, init_language<3>, "Fidelity Electronics", "Elite A/S Challenger (Budapest program, French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1984, feasgla, feasbu, 0, eas, eas, elite_state, init_language<0>, "Fidelity Electronics", "Elite A/S Challenger (Glasgow program, English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1984, feasglag, feasbu, 0, eas, eas, elite_state, init_language<1>, "Fidelity Electronics", "Elite A/S Challenger (Glasgow program, German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1984, feasglasp, feasbu, 0, eas, eas, elite_state, init_language<2>, "Fidelity Electronics", "Elite A/S Challenger (Glasgow program, Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1984, feasglafr, feasbu, 0, eas, eas, elite_state, init_language<3>, "Fidelity Electronics", "Elite A/S Challenger (Glasgow program, French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1983, feasbu, 0, 0, eas, eas, elite_state, init_language<0>, "Fidelity Electronics", "Elite A/S Challenger (Budapest program, English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
|
||||
CONS( 1983, feasbug, feasbu, 0, eas, eas, elite_state, init_language<1>, "Fidelity Electronics", "Elite A/S Challenger (Budapest program, German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
|
||||
CONS( 1983, feasbusp, feasbu, 0, eas, eas, elite_state, init_language<2>, "Fidelity Electronics", "Elite A/S Challenger (Budapest program, Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
|
||||
CONS( 1983, feasbufr, feasbu, 0, eas, eas, elite_state, init_language<3>, "Fidelity Electronics", "Elite A/S Challenger (Budapest program, French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
|
||||
CONS( 1984, feasgla, feasbu, 0, eas, eas, elite_state, init_language<0>, "Fidelity Electronics", "Elite A/S Challenger (Glasgow program, English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
|
||||
CONS( 1984, feasglag, feasbu, 0, eas, eas, elite_state, init_language<1>, "Fidelity Electronics", "Elite A/S Challenger (Glasgow program, German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
|
||||
CONS( 1984, feasglasp, feasbu, 0, eas, eas, elite_state, init_language<2>, "Fidelity Electronics", "Elite A/S Challenger (Glasgow program, Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
|
||||
CONS( 1984, feasglafr, feasbu, 0, eas, eas, elite_state, init_language<3>, "Fidelity Electronics", "Elite A/S Challenger (Glasgow program, French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
|
||||
|
||||
CONS( 1982, fpres, 0, 0, pc, eas, elite_state, init_language<0>, "Fidelity Electronics", "Prestige Challenger (original program, English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1982, fpresg, fpres, 0, pc, eas, elite_state, init_language<1>, "Fidelity Electronics", "Prestige Challenger (original program, German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1982, fpressp, fpres, 0, pc, eas, elite_state, init_language<2>, "Fidelity Electronics", "Prestige Challenger (original program, Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1982, fpresfr, fpres, 0, pc, eas, elite_state, init_language<3>, "Fidelity Electronics", "Prestige Challenger (original program, French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1983, fpresbu, fpres, 0, pc, eas, elite_state, init_language<0>, "Fidelity Electronics", "Prestige Challenger (Budapest program, English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1983, fpresbug, fpres, 0, pc, eas, elite_state, init_language<1>, "Fidelity Electronics", "Prestige Challenger (Budapest program, German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1983, fpresbusp, fpres, 0, pc, eas, elite_state, init_language<2>, "Fidelity Electronics", "Prestige Challenger (Budapest program, Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1983, fpresbufr, fpres, 0, pc, eas, elite_state, init_language<3>, "Fidelity Electronics", "Prestige Challenger (Budapest program, French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1982, fpres, 0, 0, pc, eas, elite_state, init_language<0>, "Fidelity Electronics", "Prestige Challenger (original program, English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
|
||||
CONS( 1982, fpresg, fpres, 0, pc, eas, elite_state, init_language<1>, "Fidelity Electronics", "Prestige Challenger (original program, German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
|
||||
CONS( 1982, fpressp, fpres, 0, pc, eas, elite_state, init_language<2>, "Fidelity Electronics", "Prestige Challenger (original program, Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
|
||||
CONS( 1982, fpresfr, fpres, 0, pc, eas, elite_state, init_language<3>, "Fidelity Electronics", "Prestige Challenger (original program, French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
|
||||
CONS( 1983, fpresbu, fpres, 0, pc, eas, elite_state, init_language<0>, "Fidelity Electronics", "Prestige Challenger (Budapest program, English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
|
||||
CONS( 1983, fpresbug, fpres, 0, pc, eas, elite_state, init_language<1>, "Fidelity Electronics", "Prestige Challenger (Budapest program, German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
|
||||
CONS( 1983, fpresbusp, fpres, 0, pc, eas, elite_state, init_language<2>, "Fidelity Electronics", "Prestige Challenger (Budapest program, Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
|
||||
CONS( 1983, fpresbufr, fpres, 0, pc, eas, elite_state, init_language<3>, "Fidelity Electronics", "Prestige Challenger (Budapest program, French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
|
||||
|
||||
CONS( 1986, feag2100, 0, 0, eag, eag, elite_state, init_eag<0>, "Fidelity Electronics", "Elite Avant Garde 2100 (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1986, feag2100g, feag2100, 0, eag, eag, elite_state, init_eag<1>, "Fidelity Electronics", "Elite Avant Garde 2100 (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1986, feag2100sp, feag2100, 0, eag, eag, elite_state, init_eag<2>, "Fidelity Electronics", "Elite Avant Garde 2100 (Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1986, feag2100fr, feag2100, 0, eag, eag, elite_state, init_eag<3>, "Fidelity Electronics", "Elite Avant Garde 2100 (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
CONS( 1986, feag2100, 0, 0, eag, eag, elite_state, init_eag<0>, "Fidelity Electronics", "Elite Avant Garde 2100 (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
|
||||
CONS( 1986, feag2100g, feag2100, 0, eag, eag, elite_state, init_eag<1>, "Fidelity Electronics", "Elite Avant Garde 2100 (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
|
||||
CONS( 1986, feag2100sp, feag2100, 0, eag, eag, elite_state, init_eag<2>, "Fidelity Electronics", "Elite Avant Garde 2100 (Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
|
||||
CONS( 1986, feag2100fr, feag2100, 0, eag, eag, elite_state, init_eag<3>, "Fidelity Electronics", "Elite Avant Garde 2100 (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_IMPERFECT_TIMING )
|
||||
|
@ -7,7 +7,7 @@ Fidelity Excellence series hardware (for Excel 68000, see fidel_eag68k.cpp)
|
||||
|
||||
TODO:
|
||||
- granits gives error beeps at start, need to press clear to play
|
||||
- granits buttons seem too sensitive
|
||||
- granits chessboard buttons seem too sensitive (detects input on falling edge if held too long)
|
||||
|
||||
*******************************************************************************
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
// thanks-to:Berger,yoyo_chessboard
|
||||
/******************************************************************************
|
||||
|
||||
Sensory 12 Chess Challenger (SC12-B, 6086)
|
||||
Fidelity Sensory 12 Chess Challenger (SC12-B, 6086)
|
||||
4 versions are known to exist: A,B,C, and X, with increasing CPU speed.
|
||||
---------------------------------
|
||||
RE information from netlist by Berger
|
||||
|
@ -3,7 +3,7 @@
|
||||
// thanks-to:yoyo_chessboard
|
||||
/******************************************************************************
|
||||
|
||||
Sensory Chess Challenger 6 (model SC6):
|
||||
Fidelity Sensory Chess Challenger 6 (model SC6):
|
||||
- PCB label 510-1045B01
|
||||
- INS8040N-11 MCU, 11MHz XTAL
|
||||
- external 4KB ROM 2332 101-1035A01, in module slot
|
||||
|
155
src/mame/drivers/fidel_sc8.cpp
Normal file
155
src/mame/drivers/fidel_sc8.cpp
Normal file
@ -0,0 +1,155 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:hap
|
||||
// thanks-to:yoyo_chessboard
|
||||
/******************************************************************************
|
||||
|
||||
Fidelity Sensory Chess Challenger 8
|
||||
---------------
|
||||
Z80A CPU @ 3.9MHz
|
||||
4KB ROM(MOS 2732), 256 bytes RAM(35391CP)
|
||||
chessboard buttons, 8*8+1 leds
|
||||
PCB label 510-1011 REV.2
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/fidelbase.h"
|
||||
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "sound/volt_reg.h"
|
||||
#include "speaker.h"
|
||||
|
||||
// internal artwork
|
||||
#include "fidel_sc8.lh" // clickable
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
class scc_state : public fidelbase_state
|
||||
{
|
||||
public:
|
||||
scc_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
fidelbase_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
void scc(machine_config &config);
|
||||
|
||||
private:
|
||||
// address maps
|
||||
void main_map(address_map &map);
|
||||
void main_io(address_map &map);
|
||||
|
||||
// I/O handlers
|
||||
DECLARE_READ8_MEMBER(input_r);
|
||||
DECLARE_WRITE8_MEMBER(control_w);
|
||||
};
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Devices, I/O
|
||||
******************************************************************************/
|
||||
|
||||
// TTL
|
||||
|
||||
WRITE8_MEMBER(scc_state::control_w)
|
||||
{
|
||||
// a0-a2,d7: led data
|
||||
u8 mask = 1 << (offset & 7);
|
||||
m_led_data = (m_led_data & ~mask) | ((data & 0x80) ? mask : 0);
|
||||
|
||||
// d0-d3: led select, input mux (row 9 is speaker out)
|
||||
// d4: corner led(direct)
|
||||
m_inp_mux = 1 << (data & 0xf);
|
||||
m_dac->write(BIT(m_inp_mux, 9));
|
||||
display_matrix(8, 9, m_led_data, (m_inp_mux & 0xff) | (data << 4 & 0x100));
|
||||
}
|
||||
|
||||
READ8_MEMBER(scc_state::input_r)
|
||||
{
|
||||
// d0-d7: multiplexed inputs (active low)
|
||||
return ~read_inputs(9);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Address Maps
|
||||
******************************************************************************/
|
||||
|
||||
void scc_state::main_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x0fff).rom();
|
||||
map(0x5000, 0x50ff).ram();
|
||||
}
|
||||
|
||||
void scc_state::main_io(address_map &map)
|
||||
{
|
||||
map.global_mask(0x07);
|
||||
map(0x00, 0x07).rw(FUNC(scc_state::input_r), FUNC(scc_state::control_w));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Input Ports
|
||||
******************************************************************************/
|
||||
|
||||
static INPUT_PORTS_START( scc )
|
||||
PORT_INCLUDE( fidel_cb_buttons )
|
||||
|
||||
PORT_START("IN.8")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Pawn")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Rook")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Knight")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Bishop")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Queen")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("King")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("CL")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("RE")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Machine Drivers
|
||||
******************************************************************************/
|
||||
|
||||
void scc_state::scc(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
Z80(config, m_maincpu, 3.9_MHz_XTAL);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &scc_state::main_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &scc_state::main_io);
|
||||
|
||||
TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1));
|
||||
config.set_default_layout(layout_fidel_sc8);
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "speaker").front_center();
|
||||
DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.25);
|
||||
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
|
||||
vref.set_output(5.0);
|
||||
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
ROM Definitions
|
||||
******************************************************************************/
|
||||
|
||||
ROM_START( fscc8 ) // model SCC
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "101-32017", 0x0000, 0x1000, CRC(5340820d) SHA1(e3494c7624b3cacbbb9a0a8cc9e1ed3e00326dfd) ) // 2732
|
||||
ROM_END
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Drivers
|
||||
******************************************************************************/
|
||||
|
||||
// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
|
||||
CONS( 1980, fscc8, 0, 0, scc, scc, scc_state, empty_init, "Fidelity Electronics", "Sensory Chess Challenger 8", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
@ -3,7 +3,7 @@
|
||||
// thanks-to:Berger,yoyo_chessboard
|
||||
/******************************************************************************
|
||||
|
||||
Sensory Chess Challenger "9" (SC9)
|
||||
Fidelity Sensory Chess Challenger "9" (SC9)
|
||||
3 versions were available, the newest "B" version was 2MHz and included the Budapest program.
|
||||
The Playmatic S was only released in Germany, it's basically a 'deluxe' version of SC9
|
||||
with magnet sensors and came with CB9 and CB16.
|
||||
|
@ -150,85 +150,6 @@ determination and give you a language option on power up or something.
|
||||
|
||||
*******************************************************************************
|
||||
|
||||
Chess Challenger 10 (CCX)
|
||||
-------------------
|
||||
4 versions are known to exist: A,B,C,D. Strangely, version C(UCC10) has an 8080
|
||||
instead of Z80. Chess Challenger 1,3 and 7 also run on very similar hardware.
|
||||
|
||||
This is an earlier hardware upon which the VCC and UVC above were based on;
|
||||
The hardware is nearly the same; in fact the only significant differences are
|
||||
the RAM being located in a different place, the lack of a speech chip, and
|
||||
the connections to ports A and B on the PPI:
|
||||
|
||||
8255 connections:
|
||||
-----------------
|
||||
PA.0 - segment G (W)
|
||||
PA.1 - segment F (W)
|
||||
PA.2 - segment E (W)
|
||||
PA.3 - segment D (W)
|
||||
PA.4 - segment C (W)
|
||||
PA.5 - segment B (W)
|
||||
PA.6 - segment A (W)
|
||||
PA.7 - 'beeper' direct speaker output (W)
|
||||
|
||||
The beeper is via a 556 timer, fixed-frequency at around 1300-1400Hz.
|
||||
Not all hardware configurations include the beeper.
|
||||
|
||||
PB.0 - dot commons (W)
|
||||
PB.1 - NC
|
||||
PB.2 - digit 0, bottom dot (W)
|
||||
PB.3 - digit 1, top dot (W)
|
||||
PB.4 - digit 2 (W)
|
||||
PB.5 - digit 3 (W)
|
||||
PB.6 - NC
|
||||
PB.7 - Mode select (cc3 vs cc10, R) - note: there is no CC3 with 16 buttons
|
||||
|
||||
(button rows pulled up to 5V through 2.2K resistors)
|
||||
PC.0 - button row 0 (R)
|
||||
PC.1 - button row 1 (R)
|
||||
PC.2 - button row 2 (R)
|
||||
PC.3 - button row 3 (R)
|
||||
PC.4 - button column A (W)
|
||||
PC.5 - button column B (W)
|
||||
PC.6 - button column C (W)
|
||||
PC.7 - button column D (W)
|
||||
|
||||
|
||||
*******************************************************************************
|
||||
|
||||
Chess Challenger 7 (BCC)
|
||||
------------------------
|
||||
model CC7 is an older version
|
||||
RE information from netlist by Berger
|
||||
|
||||
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.
|
||||
2000-2FFF: ROM/RAM bus conflict!
|
||||
3000-3FFF: 256 bytes RAM (2111 SRAM x2)
|
||||
4000-FFFF: Z80 A14/A15 not connected
|
||||
|
||||
Port map (Write):
|
||||
---------
|
||||
D0-D3: digit select and keypad mux
|
||||
D4: LOSE led
|
||||
D5: CHECK led
|
||||
A0-A2: NE591 A0-A2
|
||||
D7: NE591 D (_C not used)
|
||||
NE591 Q0-Q6: digit segments A-G
|
||||
NE591 Q7: buzzer
|
||||
|
||||
Port map (Read):
|
||||
---------
|
||||
D0-D3: keypad row
|
||||
|
||||
|
||||
*******************************************************************************
|
||||
|
||||
@ -507,16 +428,10 @@ expect that the software reads these once on startup only.
|
||||
#include "machine/i8255.h"
|
||||
#include "machine/i8243.h"
|
||||
#include "machine/z80pio.h"
|
||||
#include "sound/beep.h"
|
||||
#include "sound/volt_reg.h"
|
||||
#include "speaker.h"
|
||||
|
||||
// internal artwork
|
||||
#include "fidel_cc10.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
|
||||
#include "fidel_vbrc.lh" // clickable
|
||||
#include "fidel_bv3.lh" // clickable
|
||||
@ -568,63 +483,6 @@ void fidelbase_state::machine_reset()
|
||||
|
||||
|
||||
|
||||
class scc_state : public fidelbase_state
|
||||
{
|
||||
public:
|
||||
scc_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
fidelbase_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
void scc(machine_config &config);
|
||||
|
||||
private:
|
||||
void main_map(address_map &map);
|
||||
void main_io(address_map &map);
|
||||
|
||||
// I/O handlers
|
||||
DECLARE_READ8_MEMBER(input_r);
|
||||
DECLARE_WRITE8_MEMBER(control_w);
|
||||
};
|
||||
|
||||
|
||||
class dsc_state : public fidelbase_state
|
||||
{
|
||||
public:
|
||||
dsc_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
fidelbase_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
void dsc(machine_config &config);
|
||||
|
||||
private:
|
||||
void main_map(address_map &map);
|
||||
|
||||
// I/O handlers
|
||||
void prepare_display();
|
||||
DECLARE_WRITE8_MEMBER(control_w);
|
||||
DECLARE_WRITE8_MEMBER(select_w);
|
||||
DECLARE_READ8_MEMBER(input_r);
|
||||
};
|
||||
|
||||
|
||||
class bcc_state : public fidelbase_state
|
||||
{
|
||||
public:
|
||||
bcc_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
fidelbase_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
void bcc(machine_config &config);
|
||||
void bkc(machine_config &config);
|
||||
|
||||
private:
|
||||
void main_map(address_map &map);
|
||||
void main_io(address_map &map);
|
||||
|
||||
// I/O handlers
|
||||
DECLARE_READ8_MEMBER(input_r);
|
||||
DECLARE_WRITE8_MEMBER(control_w);
|
||||
};
|
||||
|
||||
|
||||
class vsc_state : public fidelbase_state
|
||||
@ -660,37 +518,6 @@ private:
|
||||
};
|
||||
|
||||
|
||||
class ccx_state : public fidelbase_state
|
||||
{
|
||||
public:
|
||||
ccx_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
fidelbase_state(mconfig, type, tag),
|
||||
m_ppi8255(*this, "ppi8255"),
|
||||
m_beeper_off(*this, "beeper_off"),
|
||||
m_beeper(*this, "beeper")
|
||||
{ }
|
||||
|
||||
void ccx(machine_config &config);
|
||||
|
||||
private:
|
||||
// devices/pointers
|
||||
required_device<i8255_device> m_ppi8255;
|
||||
required_device<timer_device> m_beeper_off;
|
||||
required_device<beep_device> m_beeper;
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(beeper_off) { m_beeper->set_state(0); }
|
||||
|
||||
void main_map(address_map &map);
|
||||
void main_io(address_map &map);
|
||||
|
||||
// I/O handlers
|
||||
void prepare_display();
|
||||
DECLARE_WRITE8_MEMBER(ppi_porta_w);
|
||||
DECLARE_WRITE8_MEMBER(ppi_portb_w);
|
||||
DECLARE_READ8_MEMBER(ppi_portc_r);
|
||||
DECLARE_WRITE8_MEMBER(ppi_portc_w);
|
||||
};
|
||||
|
||||
|
||||
class card_state : public fidelbase_state
|
||||
{
|
||||
@ -1021,49 +848,6 @@ WRITE8_MEMBER(vcc_state::ppi_portc_w)
|
||||
|
||||
// CCX-specific (no speech chip, 1-bit beeper instead)
|
||||
|
||||
void ccx_state::prepare_display()
|
||||
{
|
||||
// 4 7seg leds (note: sel d0 for extra leds)
|
||||
u8 outdata = (m_7seg_data & 0x7f) | (m_led_select << 7 & 0x80);
|
||||
set_display_segmask(0xf, 0x7f);
|
||||
display_matrix(8, 4, outdata, m_led_select >> 2 & 0xf);
|
||||
}
|
||||
|
||||
|
||||
// I8255 PPI
|
||||
|
||||
WRITE8_MEMBER(ccx_state::ppi_porta_w)
|
||||
{
|
||||
// d7: enable beeper on falling edge (555 monostable)
|
||||
if (~data & m_7seg_data & 0x80 && !m_beeper_off->enabled())
|
||||
{
|
||||
m_beeper->set_state(1);
|
||||
m_beeper_off->adjust(attotime::from_msec(80)); // duration is approximate
|
||||
}
|
||||
|
||||
// d0-d6: digit segment data
|
||||
m_7seg_data = bitswap<8>(data,7,0,1,2,3,4,5,6);
|
||||
prepare_display();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(ccx_state::ppi_portb_w)
|
||||
{
|
||||
// d0,d2-d5: digit/led select
|
||||
m_led_select = data;
|
||||
prepare_display();
|
||||
}
|
||||
|
||||
READ8_MEMBER(ccx_state::ppi_portc_r)
|
||||
{
|
||||
// d0-d3: multiplexed inputs (active low)
|
||||
return ~read_inputs(4) & 0xf;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(ccx_state::ppi_portc_w)
|
||||
{
|
||||
// d4-d7: input mux (inverted)
|
||||
m_inp_mux = ~data >> 4 & 0xf;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -1071,57 +855,6 @@ WRITE8_MEMBER(ccx_state::ppi_portc_w)
|
||||
BCC, BKC
|
||||
******************************************************************************/
|
||||
|
||||
// TTL
|
||||
|
||||
WRITE8_MEMBER(bcc_state::control_w)
|
||||
{
|
||||
// a0-a2,d7: digit segment data via NE591
|
||||
u8 mask = 1 << (offset & 7);
|
||||
m_7seg_data = (m_7seg_data & ~mask) | ((data & 0x80) ? mask : 0);
|
||||
|
||||
// BCC: NE591 Q7 is speaker out
|
||||
if (m_dac != nullptr)
|
||||
m_dac->write(BIT(m_7seg_data, 7));
|
||||
|
||||
// d0-d3: led select, input mux
|
||||
// d4,d5: upper leds(direct)
|
||||
set_display_segmask(0xf, 0x7f);
|
||||
display_matrix(8, 6, m_7seg_data, data & 0x3f);
|
||||
m_inp_mux = data & 0xf;
|
||||
}
|
||||
|
||||
READ8_MEMBER(bcc_state::input_r)
|
||||
{
|
||||
// d0-d3: multiplexed inputs
|
||||
return read_inputs(4);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
SCC
|
||||
******************************************************************************/
|
||||
|
||||
// TTL
|
||||
|
||||
WRITE8_MEMBER(scc_state::control_w)
|
||||
{
|
||||
// a0-a2,d7: led data
|
||||
u8 mask = 1 << (offset & 7);
|
||||
m_led_data = (m_led_data & ~mask) | ((data & 0x80) ? mask : 0);
|
||||
|
||||
// d0-d3: led select, input mux (row 9 is speaker out)
|
||||
// d4: corner led(direct)
|
||||
m_inp_mux = 1 << (data & 0xf);
|
||||
m_dac->write(BIT(m_inp_mux, 9));
|
||||
display_matrix(8, 9, m_led_data, (m_inp_mux & 0xff) | (data << 4 & 0x100));
|
||||
}
|
||||
|
||||
READ8_MEMBER(scc_state::input_r)
|
||||
{
|
||||
// d0-d7: multiplexed inputs (active low)
|
||||
return ~read_inputs(9);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -1270,43 +1003,6 @@ READ8_MEMBER(card_state::mcu_p2_r)
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
DSC
|
||||
******************************************************************************/
|
||||
|
||||
// TTL
|
||||
|
||||
void dsc_state::prepare_display()
|
||||
{
|
||||
// 4 7seg leds
|
||||
set_display_segmask(0xf, 0x7f);
|
||||
display_matrix(8, 4, m_7seg_data, m_led_select);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dsc_state::control_w)
|
||||
{
|
||||
// d0-d7: input mux, 7seg data
|
||||
m_inp_mux = ~data;
|
||||
m_7seg_data = data;
|
||||
prepare_display();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dsc_state::select_w)
|
||||
{
|
||||
// d4: speaker out
|
||||
m_dac->write(BIT(~data, 4));
|
||||
|
||||
// d0-d3: digit select
|
||||
m_led_select = data & 0xf;
|
||||
prepare_display();
|
||||
}
|
||||
|
||||
READ8_MEMBER(dsc_state::input_r)
|
||||
{
|
||||
// d0-d7: multiplexed inputs (active low)
|
||||
return ~read_inputs(8);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
@ -1315,21 +1011,6 @@ READ8_MEMBER(dsc_state::input_r)
|
||||
|
||||
// CCX, VCC/UVC
|
||||
|
||||
void ccx_state::main_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map.global_mask(0x3fff);
|
||||
map(0x0000, 0x0fff).rom();
|
||||
map(0x1000, 0x10ff).mirror(0x0f00).ram();
|
||||
map(0x3000, 0x30ff).mirror(0x0f00).ram();
|
||||
}
|
||||
|
||||
void ccx_state::main_io(address_map &map)
|
||||
{
|
||||
map.global_mask(0x03);
|
||||
map(0x00, 0x03).rw(m_ppi8255, FUNC(i8255_device::read), FUNC(i8255_device::write));
|
||||
}
|
||||
|
||||
void vcc_state::main_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
@ -1346,34 +1027,6 @@ void vcc_state::main_io(address_map &map)
|
||||
|
||||
// BCC, BKC
|
||||
|
||||
void bcc_state::main_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map.global_mask(0x3fff);
|
||||
map(0x0000, 0x0fff).rom();
|
||||
map(0x3000, 0x30ff).mirror(0x0f00).ram();
|
||||
}
|
||||
|
||||
void bcc_state::main_io(address_map &map)
|
||||
{
|
||||
map.global_mask(0x07);
|
||||
map(0x00, 0x07).rw(FUNC(bcc_state::input_r), FUNC(bcc_state::control_w));
|
||||
}
|
||||
|
||||
|
||||
// SCC
|
||||
|
||||
void scc_state::main_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x0fff).rom();
|
||||
map(0x5000, 0x50ff).ram();
|
||||
}
|
||||
|
||||
void scc_state::main_io(address_map &map)
|
||||
{
|
||||
map.global_mask(0x07);
|
||||
map(0x00, 0x07).rw(FUNC(scc_state::input_r), FUNC(scc_state::control_w));
|
||||
}
|
||||
|
||||
|
||||
// VSC
|
||||
@ -1430,18 +1083,6 @@ void card_state::main_io(address_map &map)
|
||||
}
|
||||
|
||||
|
||||
// DSC
|
||||
|
||||
void dsc_state::main_map(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map(0x0000, 0x1fff).rom();
|
||||
map(0x4000, 0x4000).mirror(0x1fff).w(FUNC(dsc_state::control_w));
|
||||
map(0x6000, 0x6000).mirror(0x1fff).w(FUNC(dsc_state::select_w));
|
||||
map(0x8000, 0x8000).mirror(0x1fff).r(FUNC(dsc_state::input_r));
|
||||
map(0xa000, 0xa3ff).mirror(0x1c00).ram();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
@ -1479,93 +1120,7 @@ static INPUT_PORTS_START( vcc )
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RE") PORT_CODE(KEYCODE_R) PORT_CHANGED_MEMBER(DEVICE_SELF, vcc_state, reset_button, nullptr)
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( ccx )
|
||||
PORT_START("IN.0")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LV") PORT_CODE(KEYCODE_L)
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("A1") PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CODE(KEYCODE_A)
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("E5") PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_CODE(KEYCODE_E)
|
||||
|
||||
PORT_START("IN.1")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Speaker") PORT_CODE(KEYCODE_SPACE)
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("DM") PORT_CODE(KEYCODE_M)
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("B2") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CODE(KEYCODE_B)
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("F6") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CODE(KEYCODE_F)
|
||||
|
||||
PORT_START("IN.2")
|
||||
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("PB") PORT_CODE(KEYCODE_P)
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("C3") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CODE(KEYCODE_C)
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("G7") PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CODE(KEYCODE_G)
|
||||
|
||||
PORT_START("IN.3")
|
||||
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("PV") PORT_CODE(KEYCODE_V)
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("D4") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(KEYCODE_D)
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("H8") PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_H)
|
||||
|
||||
PORT_START("RESET") // is not on matrix IN.0 d0
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RE") PORT_CODE(KEYCODE_R) PORT_CHANGED_MEMBER(DEVICE_SELF, ccx_state, reset_button, nullptr)
|
||||
|
||||
PORT_START("LEVEL") // hardwired (VCC/GND?)
|
||||
PORT_CONFNAME( 0x80, 0x00, "Maximum Levels" )
|
||||
PORT_CONFSETTING( 0x00, "10" ) // factory setting
|
||||
PORT_CONFSETTING( 0x80, "3" )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( bcc )
|
||||
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("PV") PORT_CODE(KEYCODE_V)
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("D4") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(KEYCODE_D)
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("H8") PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_H)
|
||||
|
||||
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("PB") PORT_CODE(KEYCODE_P)
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("C3") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CODE(KEYCODE_C)
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("G7") PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CODE(KEYCODE_G)
|
||||
|
||||
PORT_START("IN.2")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CB") PORT_CODE(KEYCODE_SPACE)
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("DM") PORT_CODE(KEYCODE_M)
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("B2") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CODE(KEYCODE_B)
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("F6") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CODE(KEYCODE_F)
|
||||
|
||||
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("LV") PORT_CODE(KEYCODE_L)
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("A1") PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CODE(KEYCODE_A)
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("E5") PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_CODE(KEYCODE_E)
|
||||
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
|
||||
|
||||
INPUT_CHANGED_MEMBER(card_state::reset_button)
|
||||
{
|
||||
@ -1574,7 +1129,17 @@ INPUT_CHANGED_MEMBER(card_state::reset_button)
|
||||
m_mcu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
|
||||
static INPUT_PORTS_START( common )
|
||||
PORT_START("RESET") // is not on matrix IN.7 d0
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_CHANGED_MEMBER(DEVICE_SELF, card_state, reset_button, nullptr) PORT_NAME("RE")
|
||||
|
||||
PORT_START("BARCODE")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_F1) PORT_NAME("Card Scanner")
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( vbrc )
|
||||
PORT_INCLUDE( common )
|
||||
|
||||
PORT_START("IN.0")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("A")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_0) PORT_NAME("10")
|
||||
@ -1622,16 +1187,12 @@ static INPUT_PORTS_START( vbrc )
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("BR")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("DL")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Clubs")
|
||||
|
||||
PORT_START("RESET") // is not on matrix IN.7 d0
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_CHANGED_MEMBER(DEVICE_SELF, card_state, reset_button, nullptr) PORT_NAME("RE")
|
||||
|
||||
PORT_START("BARCODE")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_F1) PORT_NAME("Card Scanner")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( bv3 )
|
||||
PORT_INCLUDE( common )
|
||||
|
||||
PORT_START("IN.0")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("Ace")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_0) PORT_NAME("10")
|
||||
@ -1679,12 +1240,6 @@ static INPUT_PORTS_START( bv3 )
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Review")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("Dealer")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Clubs")
|
||||
|
||||
PORT_START("RESET") // is not on matrix IN.7 d0
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_CHANGED_MEMBER(DEVICE_SELF, card_state, reset_button, nullptr) PORT_NAME("Reset")
|
||||
|
||||
PORT_START("BARCODE")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_F1) PORT_NAME("Card Scanner")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
@ -1855,7 +1410,7 @@ INPUT_PORTS_START( fidel_cb_magnets )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( scc )
|
||||
static INPUT_PORTS_START( vsc )
|
||||
PORT_INCLUDE( fidel_cb_buttons )
|
||||
|
||||
PORT_START("IN.8")
|
||||
@ -1867,11 +1422,6 @@ static INPUT_PORTS_START( scc )
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("King")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("CL")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("RE")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( vsc )
|
||||
PORT_INCLUDE( scc )
|
||||
|
||||
PORT_START("IN.9")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("TM")
|
||||
@ -1884,99 +1434,12 @@ static INPUT_PORTS_START( vsc )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( dsc )
|
||||
PORT_INCLUDE( fidel_cb_buttons )
|
||||
|
||||
PORT_MODIFY("IN.4")
|
||||
PORT_BIT(0x8f, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
|
||||
PORT_MODIFY("IN.6")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Black King")
|
||||
|
||||
PORT_MODIFY("IN.7")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Black")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("White King")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("White")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("RV")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("RE")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("PB")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("LV")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("CL")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Machine Drivers
|
||||
******************************************************************************/
|
||||
|
||||
void bcc_state::bkc(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
Z80(config, m_maincpu, 3.579545_MHz_XTAL);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &bcc_state::main_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &bcc_state::main_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 bcc_state::bcc(machine_config &config)
|
||||
{
|
||||
bkc(config);
|
||||
config.set_default_layout(layout_fidel_bcc);
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "speaker").front_center();
|
||||
DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.25);
|
||||
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
|
||||
vref.set_output(5.0);
|
||||
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
|
||||
}
|
||||
|
||||
void scc_state::scc(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
Z80(config, m_maincpu, 3.9_MHz_XTAL);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &scc_state::main_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &scc_state::main_io);
|
||||
|
||||
TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1));
|
||||
config.set_default_layout(layout_fidel_sc8);
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "speaker").front_center();
|
||||
DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.25);
|
||||
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
|
||||
vref.set_output(5.0);
|
||||
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
|
||||
}
|
||||
|
||||
void ccx_state::ccx(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
Z80(config, m_maincpu, 4_MHz_XTAL);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &ccx_state::main_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &ccx_state::main_io);
|
||||
|
||||
I8255(config, m_ppi8255);
|
||||
m_ppi8255->out_pa_callback().set(FUNC(ccx_state::ppi_porta_w));
|
||||
m_ppi8255->tri_pa_callback().set_constant(0);
|
||||
m_ppi8255->in_pb_callback().set_ioport("LEVEL");
|
||||
m_ppi8255->out_pb_callback().set(FUNC(ccx_state::ppi_portb_w));
|
||||
m_ppi8255->in_pc_callback().set(FUNC(ccx_state::ppi_portc_r));
|
||||
m_ppi8255->tri_pb_callback().set_constant(0);
|
||||
m_ppi8255->out_pc_callback().set(FUNC(ccx_state::ppi_portc_w));
|
||||
|
||||
TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1));
|
||||
config.set_default_layout(layout_fidel_cc10);
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "speaker").front_center();
|
||||
BEEP(config, m_beeper, 1360); // approximation, from 556 timer ic
|
||||
m_beeper->add_route(ALL_OUTPUTS, "speaker", 0.25);
|
||||
TIMER(config, "beeper_off").configure_generic(FUNC(ccx_state::beeper_off));
|
||||
}
|
||||
|
||||
void vcc_state::vcc(machine_config &config)
|
||||
{
|
||||
@ -2094,57 +1557,14 @@ void card_state::bv3(machine_config &config)
|
||||
config.set_default_layout(layout_fidel_bv3);
|
||||
}
|
||||
|
||||
void dsc_state::dsc(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
Z80(config, m_maincpu, 3.9_MHz_XTAL); // 3.9MHz resonator
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &dsc_state::main_map);
|
||||
|
||||
const attotime irq_period = attotime::from_hz(523); // from 555 timer (22nF, 120K, 2.7K)
|
||||
TIMER(config, m_irq_on).configure_periodic(FUNC(dsc_state::irq_on<INPUT_LINE_IRQ0>), irq_period);
|
||||
m_irq_on->set_start_delay(irq_period - attotime::from_usec(41)); // active for 41us
|
||||
TIMER(config, "irq_off").configure_periodic(FUNC(dsc_state::irq_off<INPUT_LINE_IRQ0>), irq_period);
|
||||
|
||||
TIMER(config, "display_decay").configure_periodic(FUNC(fidelbase_state::display_decay_tick), attotime::from_msec(1));
|
||||
config.set_default_layout(layout_fidel_dsc);
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "speaker").front_center();
|
||||
DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.25);
|
||||
voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0));
|
||||
vref.set_output(5.0);
|
||||
vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
ROM Definitions
|
||||
******************************************************************************/
|
||||
|
||||
ROM_START( cc10 ) // model CCX
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "cn19053n_cc10b", 0x0000, 0x1000, CRC(afd3ca99) SHA1(870d09b2b52ccb8572d69642c59b5215d5fb26ab) ) // 2332
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( cc7 ) // model BCC
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "cn19103n_bcc-revb", 0x0000, 0x1000, CRC(a397d471) SHA1(9b12bc442fccee40f4d8500c792bc9d886c5e1a5) ) // 2332
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( backgamc ) // model BKC, PCB label P-380A-5
|
||||
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
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( vcc )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
@ -2306,11 +1726,6 @@ ROM_START( bridgec3 ) // model BV3 aka 7014, PCB label 510-1016 Rev.1
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( damesc ) // model DSC, PCB label 510-1030A01
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "101-1027a01", 0x0000, 0x2000, CRC(d86c985c) SHA1(20f923a24420050fd16e1172f5e889f144d17ac9) ) // MOS 2364
|
||||
ROM_END
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
@ -2318,11 +1733,6 @@ ROM_END
|
||||
******************************************************************************/
|
||||
|
||||
// YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY FULLNAME, FLAGS
|
||||
CONS( 1978, cc10, 0, 0, ccx, ccx, ccx_state, empty_init, "Fidelity Electronics", "Chess Challenger 10 (model CCX, rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
CONS( 1979, cc7, 0, 0, bcc, bcc, bcc_state, empty_init, "Fidelity Electronics", "Chess Challenger 7 (model BCC, rev. B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
CONS( 1979, backgamc, 0, 0, bkc, bkc, bcc_state, empty_init, "Fidelity Electronics", "Backgammon Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NO_SOUND_HW )
|
||||
|
||||
CONS( 1980, fscc8, 0, 0, scc, scc, scc_state, empty_init, "Fidelity Electronics", "Sensory Chess Challenger 8", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
|
||||
CONS( 1979, vcc, 0, 0, vcc, vcc, vcc_state, init_language<0>, "Fidelity Electronics", "Voice Chess Challenger (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
CONS( 1979, vccg, vcc, 0, vcc, vcc, vcc_state, init_language<1>, "Fidelity Electronics", "Voice Chess Challenger (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
@ -2342,5 +1752,3 @@ CONS( 1980, vscfr, vsc, 0, vsc, vsc, vsc_state, init_language<3>, "Fid
|
||||
CONS( 1980, vbrc, 0, 0, vbrc, vbrc, card_state, empty_init, "Fidelity Electronics", "Voice Bridge Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_NOT_WORKING )
|
||||
CONS( 1980, bridgeca, vbrc, 0, ubc, vbrc, card_state, empty_init, "Fidelity Electronics", "Advanced Bridge Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_NOT_WORKING )
|
||||
CONS( 1982, bridgec3, 0, 0, bv3, bv3, card_state, empty_init, "Fidelity Electronics", "Bridge Challenger III", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS | MACHINE_NOT_WORKING )
|
||||
|
||||
CONS( 1981, damesc, 0, 0, dsc, dsc, dsc_state, empty_init, "Fidelity Electronics", "Dame Sensory Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||
|
@ -12852,6 +12852,13 @@ fgoala // MF (c) 1979 Taito Corporation
|
||||
@source:fidel_as12.cpp
|
||||
feleg //
|
||||
|
||||
@source:fidel_cc10.cpp
|
||||
cc10 //
|
||||
|
||||
@source:fidel_cc7.cpp
|
||||
backgamc //
|
||||
cc7 //
|
||||
|
||||
@source:fidel_chesster.cpp
|
||||
chesster //
|
||||
chesstera //
|
||||
@ -12868,6 +12875,9 @@ super9ccfr // * French
|
||||
super9ccg // * German
|
||||
super9ccsp // * Spanish
|
||||
|
||||
@source:fidel_dames.cpp
|
||||
damesc //
|
||||
|
||||
@source:fidel_desdis.cpp
|
||||
fdes2000d //
|
||||
fdes2100d //
|
||||
@ -12934,6 +12944,9 @@ fscc12b //
|
||||
@source:fidel_sc6.cpp
|
||||
fscc6 //
|
||||
|
||||
@source:fidel_sc8.cpp
|
||||
fscc8 //
|
||||
|
||||
@source:fidel_sc9.cpp
|
||||
fscc9 //
|
||||
fscc9b //
|
||||
@ -12941,13 +12954,8 @@ fscc9c //
|
||||
fscc9ps //
|
||||
|
||||
@source:fidelbase.cpp
|
||||
backgamc //
|
||||
bridgec3 //
|
||||
bridgeca //
|
||||
cc10 //
|
||||
cc7 //
|
||||
damesc //
|
||||
fscc8 //
|
||||
uvc // UVC: Advanced Voice Chess Challenger (English)
|
||||
uvcfr // * French
|
||||
uvcg // * German
|
||||
|
@ -242,8 +242,11 @@ fc100.cpp
|
||||
fccpu20.cpp
|
||||
fccpu30.cpp
|
||||
fidel_as12.cpp
|
||||
fidel_cc10.cpp
|
||||
fidel_cc7.cpp
|
||||
fidel_chesster.cpp
|
||||
fidel_csc.cpp
|
||||
fidel_dames.cpp
|
||||
fidel_desdis.cpp
|
||||
fidel_eag68k.cpp
|
||||
fidel_elite.cpp
|
||||
@ -251,6 +254,7 @@ fidel_excel.cpp
|
||||
fidel_phantom.cpp
|
||||
fidel_sc12.cpp
|
||||
fidel_sc6.cpp
|
||||
fidel_sc8.cpp
|
||||
fidel_sc9.cpp
|
||||
fidelbase.cpp
|
||||
fk1.cpp
|
||||
|
Loading…
Reference in New Issue
Block a user