fidel_card: disconnect from fidelbase class (nw)

This commit is contained in:
hap 2019-07-02 01:16:36 +02:00
parent 35af77fcfa
commit b1dff791ed
5 changed files with 75 additions and 51 deletions

View File

@ -2,8 +2,6 @@
// copyright-holders:Kevin Horton, Jonathan Gevaryahu, Sandro Ronco, hap // copyright-holders:Kevin Horton, Jonathan Gevaryahu, Sandro Ronco, hap
/****************************************************************************** /******************************************************************************
* fidel_card.cpp, subdriver of machine/fidelbase.cpp, machine/chessbase.cpp
Fidelity electronic card games Fidelity electronic card games
- *Bridge Challenger (BRC) - *Bridge Challenger (BRC)
- Advanced Bridge Challenger (UBC) - Advanced Bridge Challenger (UBC)
@ -17,9 +15,6 @@ Fidelity electronic card games
NOTE: The card scanner is simulated, but the player is kind of forced to cheat NOTE: The card scanner is simulated, but the player is kind of forced to cheat
and has to peek at the card before it is scanned. and has to peek at the card before it is scanned.
TODO:
- Z80 WAIT pin is not fully emulated, affecting VBRC speech busy state
******************************************************************************* *******************************************************************************
Voice Bridge Challenger (Model VBRC, later reissued as Model 7002) Voice Bridge Challenger (Model VBRC, later reissued as Model 7002)
@ -164,12 +159,14 @@ Two card decks exist (red and blue), each has the same set of barcodes.
******************************************************************************/ ******************************************************************************/
#include "emu.h" #include "emu.h"
#include "includes/fidelbase.h"
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
#include "cpu/mcs48/mcs48.h" #include "cpu/mcs48/mcs48.h"
#include "video/pwm.h"
#include "machine/i8243.h" #include "machine/i8243.h"
#include "machine/clock.h" #include "machine/clock.h"
#include "machine/timer.h"
#include "sound/dac.h"
#include "sound/s14001a.h"
#include "sound/volt_reg.h" #include "sound/volt_reg.h"
#include "speaker.h" #include "speaker.h"
@ -181,13 +178,18 @@ Two card decks exist (red and blue), each has the same set of barcodes.
namespace { namespace {
class card_state : public fidelbase_state class card_state : public driver_device
{ {
public: public:
card_state(const machine_config &mconfig, device_type type, const char *tag) : card_state(const machine_config &mconfig, device_type type, const char *tag) :
fidelbase_state(mconfig, type, tag), driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_mcu(*this, "mcu"), m_mcu(*this, "mcu"),
m_i8243(*this, "i8243") m_i8243(*this, "i8243"),
m_display(*this, "display"),
m_speech(*this, "speech"),
m_dac(*this, "dac"),
m_inputs(*this, "IN.%u", 0)
{ } { }
// machine drivers // machine drivers
@ -196,7 +198,7 @@ public:
void bv3(machine_config &config); void bv3(machine_config &config);
void gin(machine_config &config); void gin(machine_config &config);
virtual DECLARE_INPUT_CHANGED_MEMBER(reset_button) override; DECLARE_INPUT_CHANGED_MEMBER(reset_button);
DECLARE_INPUT_CHANGED_MEMBER(start_scan); DECLARE_INPUT_CHANGED_MEMBER(start_scan);
protected: protected:
@ -206,8 +208,13 @@ private:
void brc_base(machine_config &config); void brc_base(machine_config &config);
// devices/pointers // devices/pointers
required_device<cpu_device> m_maincpu;
required_device<i8041a_device> m_mcu; required_device<i8041a_device> m_mcu;
required_device<i8243_device> m_i8243; required_device<i8243_device> m_i8243;
required_device<pwm_display_device> m_display;
optional_device<s14001a_device> m_speech;
optional_device<dac_bit_interface> m_dac;
required_ioport_array<8> m_inputs;
// address maps // address maps
void main_map(address_map &map); void main_map(address_map &map);
@ -215,6 +222,8 @@ private:
TIMER_DEVICE_CALLBACK_MEMBER(barcode_shift) { m_barcode >>= 1; } TIMER_DEVICE_CALLBACK_MEMBER(barcode_shift) { m_barcode >>= 1; }
u32 m_barcode; u32 m_barcode;
u16 m_vfd_data;
u8 m_inp_mux;
// I/O handlers // I/O handlers
void update_display(); void update_display();
@ -227,14 +236,19 @@ private:
void card_state::machine_start() void card_state::machine_start()
{ {
fidelbase_state::machine_start(); // zerofill
// zerofill/register for savestates
m_barcode = 0; m_barcode = 0;
m_vfd_data = 0;
m_inp_mux = 0;
// register for savestates
save_item(NAME(m_barcode)); save_item(NAME(m_barcode));
save_item(NAME(m_vfd_data));
save_item(NAME(m_inp_mux));
} }
/****************************************************************************** /******************************************************************************
Devices, I/O Devices, I/O
******************************************************************************/ ******************************************************************************/
@ -243,10 +257,9 @@ void card_state::machine_start()
void card_state::update_display() void card_state::update_display()
{ {
// 14seg led segments, d15(12) is extra led // 14seg VFD segments, d15(12) is extra LED
u16 outdata = bitswap<16>(m_7seg_data,12,13,1,6,5,2,0,7,15,11,10,14,4,3,9,8); u16 outdata = bitswap<16>(m_vfd_data,12,13,1,6,5,2,0,7,15,11,10,14,4,3,9,8);
set_display_segmask(0xff, 0x3fff); m_display->matrix(m_inp_mux, outdata);
display_matrix(16, 8, outdata, m_led_select);
} }
WRITE8_MEMBER(card_state::speech_w) WRITE8_MEMBER(card_state::speech_w)
@ -266,7 +279,7 @@ template<int P>
void card_state::ioexp_port_w(uint8_t data) void card_state::ioexp_port_w(uint8_t data)
{ {
// P4x-P7x: digit segment data // P4x-P7x: digit segment data
m_7seg_data = (m_7seg_data & ~(0xf << (4*P))) | ((data & 0xf) << (4*P)); m_vfd_data = (m_vfd_data & ~(0xf << (4*P))) | ((data & 0xf) << (4*P));
update_display(); update_display();
// P71 is tone (not on speech model) // P71 is tone (not on speech model)
@ -279,16 +292,22 @@ void card_state::ioexp_port_w(uint8_t data)
WRITE8_MEMBER(card_state::mcu_p1_w) WRITE8_MEMBER(card_state::mcu_p1_w)
{ {
// P10-P17: select digits, input mux // P10-P17: input mux, digit select
m_inp_mux = m_led_select = data; m_inp_mux = data;
update_display(); update_display();
} }
READ8_MEMBER(card_state::mcu_p2_r) READ8_MEMBER(card_state::mcu_p2_r)
{ {
// P20-P23: I8243 P2 // P20-P23: I8243 P2
u8 data = m_i8243->p2_r() & 0x0f;
// P24-P27: multiplexed inputs (active low) // P24-P27: multiplexed inputs (active low)
return (m_i8243->p2_r() & 0x0f) | (read_inputs(8) << 4 ^ 0xf0); for (int i = 0; i < 8; i++)
if (BIT(m_inp_mux, i))
data |= m_inputs[i]->read() << 4;
return data ^ 0xf0;
} }
READ_LINE_MEMBER(card_state::mcu_t0_r) READ_LINE_MEMBER(card_state::mcu_t0_r)
@ -567,7 +586,9 @@ void card_state::brc_base(machine_config &config)
TIMER(config, "barcode_shift").configure_periodic(FUNC(card_state::barcode_shift), attotime::from_msec(2)); TIMER(config, "barcode_shift").configure_periodic(FUNC(card_state::barcode_shift), attotime::from_msec(2));
TIMER(config, "display_decay").configure_periodic(FUNC(card_state::display_decay_tick), attotime::from_msec(1)); /* video hardware */
PWM_DISPLAY(config, m_display).set_size(8, 16);
m_display->set_segmask(0xff, 0x3fff);
config.set_default_layout(layout_fidel_brc); config.set_default_layout(layout_fidel_brc);
} }

View File

@ -124,8 +124,8 @@ PA.7 - button row 8
PB.0 - button column I PB.0 - button column I
PB.1 - button column J PB.1 - button column J
PB.2 - hi/lo TSI speaker volume PB.2 - hi/lo TSI speaker volume
PB.3 - violet wire PB.3 - violet wire to printer port?
PB.4 - white wire (and TSI BUSY line) PB.4 - white wire to printer port? (and TSI BUSY line)
PB.5 - selection jumper input (see below) PB.5 - selection jumper input (see below)
PB.6 - TSI start line PB.6 - TSI start line
PB.7 - TSI ROM A12 line PB.7 - TSI ROM A12 line
@ -142,6 +142,13 @@ Anyways, the two jumpers are connected to button columns A and B and the common
connects to Z80A PIO PB.5, which basically makes a 10th button row. I would connects to Z80A PIO PB.5, which basically makes a 10th button row. I would
expect that the software reads these once on startup only. expect that the software reads these once on startup only.
printer:
--------
This is the 1st Fidelity chess computer with a printer port. Many later Fidelity chess
computers also have support for it. Two models were released:
FP: Challenger Printer - thermal printer, MCU=D8048C243
IFP: Impact Printer - also compatible with C64 apparently.
******************************************************************************/ ******************************************************************************/
#include "emu.h" #include "emu.h"

View File

@ -877,7 +877,6 @@ static INPUT_PORTS_START( splasfgt )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END INPUT_PORTS_END
void splasfgt_state::splasfgt(machine_config &config) void splasfgt_state::splasfgt(machine_config &config)
{ {
/* basic machine hardware */ /* basic machine hardware */

View File

@ -358,34 +358,34 @@
<element name="text_uit2"><text string="INTERFACE"><color red="0.81" green="0.8" blue="0.79" /></text></element> <element name="text_uit2"><text string="INTERFACE"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_uib1"><text string="BOARD:"><color red="0.81" green="0.8" blue="0.79" /></text></element> <element name="text_uib1"><text string="BOARD:"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_uib2"> <element name="text_uib2">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect> <rect><color red="0.7" green="0.8" blue="0.8" /></rect>
<text string="RESET"><color red="0.01" green="0.01" blue="0.01" /></text> <text string="RESET"><color red="0.01" green="0.01" blue="0.01" /></text>
</element> </element>
<element name="text_uib3"> <element name="text_uib3">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect> <rect><color red="0.7" green="0.8" blue="0.8" /></rect>
<text string="CLEAR"><color red="0.01" green="0.01" blue="0.01" /></text> <text string="CLEAR"><color red="0.01" green="0.01" blue="0.01" /></text>
</element> </element>
<element name="text_uis1"><text string="SPAWN:"><color red="0.81" green="0.8" blue="0.79" /></text></element> <element name="text_uis1"><text string="SPAWN:"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_uih1"><text string="HAND:"><color red="0.81" green="0.8" blue="0.79" /></text></element> <element name="text_uih1"><text string="HAND:"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_uih2"> <element name="text_uih2">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect> <rect><color red="0.7" green="0.8" blue="0.8" /></rect>
<text string="REMOVE"><color red="0.01" green="0.01" blue="0.01" /></text> <text string="REMOVE"><color red="0.01" green="0.01" blue="0.01" /></text>
</element> </element>
<element name="text_uiu1"><text string="UNDO:"><color red="0.81" green="0.8" blue="0.79" /></text></element> <element name="text_uiu1"><text string="UNDO:"><color red="0.81" green="0.8" blue="0.79" /></text></element>
<element name="text_uiu2a"> <element name="text_uiu2a">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect> <rect><color red="0.7" green="0.8" blue="0.8" /></rect>
<text string=" &lt;&lt;"><color red="0.01" green="0.01" blue="0.01" /></text> <text string=" &lt;&lt;"><color red="0.01" green="0.01" blue="0.01" /></text>
</element> </element>
<element name="text_uiu2b"> <element name="text_uiu2b">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect> <rect><color red="0.7" green="0.8" blue="0.8" /></rect>
<text string=" &lt; "><color red="0.01" green="0.01" blue="0.01" /></text> <text string=" &lt; "><color red="0.01" green="0.01" blue="0.01" /></text>
</element> </element>
<element name="text_uiu2c"> <element name="text_uiu2c">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect> <rect><color red="0.7" green="0.8" blue="0.8" /></rect>
<text string=" &gt;"><color red="0.01" green="0.01" blue="0.01" /></text> <text string=" &gt;"><color red="0.01" green="0.01" blue="0.01" /></text>
</element> </element>
<element name="text_uiu2d"> <element name="text_uiu2d">
<rect><color red="0.81" green="0.8" blue="0.79" /></rect> <rect><color red="0.7" green="0.8" blue="0.8" /></rect>
<text string=" &gt;&gt;"><color red="0.01" green="0.01" blue="0.01" /></text> <text string=" &gt;&gt;"><color red="0.01" green="0.01" blue="0.01" /></text>
</element> </element>
<element name="text_uiu3a" defstate="0"> <element name="text_uiu3a" defstate="0">
@ -402,14 +402,16 @@
<group name="sb_ui"> <group name="sb_ui">
<bounds x="0" y="0" width="10" height="80" /> <bounds x="0" y="0" width="10" height="80" />
<bezel element="cblack"><bounds x="0" y="0" width="10" height="1" /></bezel>
<bezel element="cblack"><bounds x="0" y="7" width="10" height="1" /></bezel> <bezel element="cblack"><bounds x="0" y="7" width="10" height="1" /></bezel>
<bezel element="cblack"><bounds x="0" y="79" width="10" height="1" /></bezel>
<bezel element="text_uit1"><bounds x="0" y="2" width="10" height="2" /></bezel> <bezel element="text_uit1"><bounds x="0" y="2" width="10" height="2" /></bezel>
<bezel element="text_uit2"><bounds x="0" y="4" width="10" height="2" /></bezel> <bezel element="text_uit2"><bounds x="0" y="4" width="10" height="2" /></bezel>
<!-- board --> <!-- board -->
<bezel element="text_uib1"><bounds x="0" y="9" width="10" height="2" /></bezel> <bezel element="text_uib1"><bounds x="0" y="9" width="10" height="2" /></bezel>
<bezel element="white"><bounds x="1" y="11.5" width="8" height="2.5" /></bezel> <bezel element="cwhite"><bounds x="1" y="11.5" width="8" height="2.5" /></bezel>
<bezel element="white"><bounds x="1" y="15" width="8" height="2.5" /></bezel> <bezel element="cwhite"><bounds x="1" y="15" width="8" height="2.5" /></bezel>
<bezel element="text_uib2"><bounds x="1.5" y="11.75" width="7" height="2" /></bezel> <bezel element="text_uib2"><bounds x="1.5" y="11.75" width="7" height="2" /></bezel>
<bezel element="text_uib3"><bounds x="1.5" y="15.25" width="7" height="2" /></bezel> <bezel element="text_uib3"><bounds x="1.5" y="15.25" width="7" height="2" /></bezel>
@ -419,8 +421,8 @@
<!-- spawn --> <!-- spawn -->
<bezel element="text_uis1"><bounds x="0" y="20.5" width="10" height="2" /></bezel> <bezel element="text_uis1"><bounds x="0" y="20.5" width="10" height="2" /></bezel>
<bezel element="white"><bounds x="1" y="23" width="8" height="12" /></bezel> <bezel element="cwhite"><bounds x="1" y="23" width="8" height="12" /></bezel>
<bezel element="white"><bounds x="1" y="36" width="8" height="12" /></bezel> <bezel element="cwhite"><bounds x="1" y="36" width="8" height="12" /></bezel>
<bezel name="piece_ui1" element="piece"><bounds x="1" y="23" width="4" height="4" /></bezel> <bezel name="piece_ui1" element="piece"><bounds x="1" y="23" width="4" height="4" /></bezel>
<bezel name="piece_ui2" element="piece"><bounds x="1" y="27" width="4" height="4" /></bezel> <bezel name="piece_ui2" element="piece"><bounds x="1" y="27" width="4" height="4" /></bezel>
@ -453,16 +455,16 @@
<bezel element="cblack"><bounds x="1" y="53.5" width="8" height="6" /></bezel> <bezel element="cblack"><bounds x="1" y="53.5" width="8" height="6" /></bezel>
<bezel name="piece_ui0" element="piece"><bounds x="2" y="53.5" width="6" height="6" /></bezel> <bezel name="piece_ui0" element="piece"><bounds x="2" y="53.5" width="6" height="6" /></bezel>
<bezel element="white"><bounds x="1" y="60.5" width="8" height="2.5" /></bezel> <bezel element="cwhite"><bounds x="1" y="60.5" width="8" height="2.5" /></bezel>
<bezel element="text_uih2"><bounds x="1.5" y="60.75" width="7" height="2" /></bezel> <bezel element="text_uih2"><bounds x="1.5" y="60.75" width="7" height="2" /></bezel>
<bezel element="hlub" inputtag="board:UI" inputmask="0x08"><bounds x="1" y="60.5" width="8" height="2.5" /><color alpha="0.25" /></bezel> <bezel element="hlub" inputtag="board:UI" inputmask="0x08"><bounds x="1" y="60.5" width="8" height="2.5" /><color alpha="0.25" /></bezel>
<!-- undo --> <!-- undo -->
<bezel element="text_uiu1"><bounds x="0" y="66" width="10" height="2" /></bezel> <bezel element="text_uiu1"><bounds x="0" y="66" width="10" height="2" /></bezel>
<bezel element="white"><bounds x="1" y="68.5" width="1.7" height="6" /></bezel> <bezel element="cwhite"><bounds x="1" y="68.5" width="1.7" height="6" /></bezel>
<bezel element="white"><bounds x="3.1" y="68.5" width="1.7" height="6" /></bezel> <bezel element="cwhite"><bounds x="3.1" y="68.5" width="1.7" height="6" /></bezel>
<bezel element="white"><bounds x="5.2" y="68.5" width="1.7" height="6" /></bezel> <bezel element="cwhite"><bounds x="5.2" y="68.5" width="1.7" height="6" /></bezel>
<bezel element="white"><bounds x="7.3" y="68.5" width="1.7" height="6" /></bezel> <bezel element="cwhite"><bounds x="7.3" y="68.5" width="1.7" height="6" /></bezel>
<bezel element="text_uiu2a"><bounds x="1" y="69.5" width="1.7" height="4" /></bezel> <bezel element="text_uiu2a"><bounds x="1" y="69.5" width="1.7" height="4" /></bezel>
<bezel element="text_uiu2b"><bounds x="3.1" y="69.5" width="1.7" height="4" /></bezel> <bezel element="text_uiu2b"><bounds x="3.1" y="69.5" width="1.7" height="4" /></bezel>
<bezel element="text_uiu2c"><bounds x="5.2" y="69.5" width="1.7" height="4" /></bezel> <bezel element="text_uiu2c"><bounds x="5.2" y="69.5" width="1.7" height="4" /></bezel>
@ -549,14 +551,12 @@
<!-- build screen --> <!-- build screen -->
<view name="Internal Layout (Full)"> <view name="Internal Layout (Full)">
<bounds left="-5.5" right="31.775" top="-12.3" bottom="39.3" /> <bounds left="-5" right="31.775" top="-11.8" bottom="39.3" />
<bezel element="white"><bounds x="-5.5" y="-4.975" width="37.275" height="32.55" /></bezel> <group ref="sb_board"><bounds x="0" y="-3.8" width="31" height="31" /></group>
<bezel element="blackb"><bounds x="-5.5" y="-4.5875" width="5" height="31.775" /></bezel> <group ref="sb_ui"><bounds x="-4.5" y="-3.8" width="3.875" height="31" /></group>
<group ref="sb_board"><bounds x="0" y="-4.2" width="31" height="31" /></group>
<group ref="sb_ui"><bounds x="-5" y="-4.975" width="4.06875" height="32.55" /></group>
<group ref="digits"><bounds x="8" y="-11.2" width="15" height="5" /></group> <group ref="digits"><bounds x="8" y="-10.4" width="15" height="5" /></group>
<group ref="buttons"><bounds x="-1" y="28.5" width="32" height="10.1" /></group> <group ref="buttons"><bounds x="-1" y="28.5" width="32" height="10.1" /></group>
</view> </view>

View File

@ -27,9 +27,6 @@ Keypad legend:
Read the official manual(s) on how to play. Read the official manual(s) on how to play.
Peripherals, compatible with various boards:
- Fidelity Challenger Printer - thermal printer, MCU=D8048C243
Program/data cartridges, for various boards, some cross-compatible: Program/data cartridges, for various boards, some cross-compatible:
- CB9: Challenger Book Openings 1 - 8KB (label not known) - CB9: Challenger Book Openings 1 - 8KB (label not known)
- CB16: Challenger Book Openings 2 - 8+8KB 101-1042A01,02 - CB16: Challenger Book Openings 2 - 8+8KB 101-1042A01,02