Previous 199869 Revisions Next

r41705 Thursday 12th November, 2015 at 21:37:59 UTC by hap
small cleanup 1, let's OCD with me
[src/mame/drivers]fidelz80.cpp
[src/mame/includes]fidelz80.h

trunk/src/mame/drivers/fidelz80.cpp
r250216r250217
1010*  TODO:
1111*  * Figure out why it says the first speech line twice; it shouldn't?
1212*    It sometimes does this on Voice Sensory Chess Challenger real hardware.
13*    It can also be heard on Advanced Talking Chess Challenger real hardware, cold boot.
13*    It can also be heard on Advanced Talking Chess Challenger real hardware, but not the whole line:
14*    "I I am Fidelity's chess challenger", instead.
1415*  * Get rom locations from pcb (done for UVC, VCC is probably similar)
1516*  * correctly hook up 7002/VBRC and 7014/bridgec3 speech so that the z80 is halted while words are being spoken
1617*
r250216r250217
5152
5253I/O map:
5354--------
5400-FF: 8255 port chip [LN edit: 00-03, mirrored over the 00-FF range; program accesses F4-F7]
5500-03: 8255 port chip, mirrored over the 00-FF range; program accesses F4-F7
5556
5657
57588255 connections:
r250216r250217
607608void fidelz80_state::update_display()
608609{
609610   // data for the 4x 7seg leds, bits are 0bxABCDEFG
610   UINT8 out_digit = BITSWAP8( m_digit_data,7,0,1,2,3,4,5,6 ) & 0x7f;
611   UINT8 out_digit = BITSWAP8(m_digit_data,7,0,1,2,3,4,5,6) & 0x7f;
611612
612613   if (m_led_selected&0x04)
613614   {
614615      output_set_digit_value(0, out_digit);
615616
616      output_set_led_value(1, m_led_data & 0x01);
617      output_set_led_value(1, m_led_data);
617618   }
618619   if (m_led_selected&0x08)
619620   {
620621      output_set_digit_value(1, out_digit);
621622
622      output_set_led_value(0, m_led_data & 0x01);
623      output_set_led_value(0, m_led_data);
623624   }
624625   if (m_led_selected&0x10)
625626   {
r250216r250217
631632   }
632633}
633634
634READ8_MEMBER( fidelz80_state::fidelz80_portc_r )
635READ8_MEMBER(fidelz80_state::fidelz80_portc_r)
635636{
636637   UINT8 data = 0xff;
637638
r250216r250217
655656   return data;
656657}
657658
658WRITE8_MEMBER( fidelz80_state::fidelz80_portb_w )
659WRITE8_MEMBER(fidelz80_state::fidelz80_portb_w)
659660{
660661   if (!(data & 0x80))
661662   {
662      m_led_data = (data&0x01);  // common for two leds
663      m_led_data = data & 1; // common for two leds
663664
664665      m_led_selected = data;
665666
r250216r250217
669670   // ignoring the language switch enable for now, is bit 0x40
670671}
671672
672WRITE8_MEMBER( fidelz80_state::fidelz80_portc_w )
673WRITE8_MEMBER(fidelz80_state::fidelz80_portc_w)
673674{
674675   m_kp_matrix = data;
675676}
676677
677WRITE8_MEMBER( fidelz80_state::cc10_porta_w )
678WRITE8_MEMBER(fidelz80_state::cc10_porta_w)
678679{
679680   m_beep->set_state((data & 0x80) ? 0 : 1);
680681
r250216r250217
683684   update_display();
684685}
685686
686READ8_MEMBER( fidelz80_state::vcc_portb_r )
687READ8_MEMBER(fidelz80_state::vcc_portb_r)
687688{
688689   return (m_speech->bsy_r() != 0) ? 0x80 : 0x00;
689690}
690691
691WRITE8_MEMBER( fidelz80_state::vcc_porta_w )
692WRITE8_MEMBER(fidelz80_state::vcc_porta_w)
692693{
693694   m_speech->set_volume(15); // hack, s14001a core should assume a volume of 15 unless otherwise stated...
694695   m_speech->reg_w(data & 0x3f);
r250216r250217
703704    I8255 Device, for VSC
704705******************************************************************************/
705706
706WRITE8_MEMBER( fidelz80_state::vsc_porta_w )
707WRITE8_MEMBER(fidelz80_state::vsc_porta_w)
707708{
708   UINT8 out_digit = BITSWAP8( data,7,6,2,1,0,5,4,3 );
709   UINT8 out_digit = BITSWAP8(data,7,6,2,1,0,5,4,3);
709710
710711   if (m_kp_matrix & 0x01)
711712   {
r250216r250217
730731   m_speech->reg_w(data & 0x3f);
731732}
732733
733WRITE8_MEMBER( fidelz80_state::vsc_portb_w )
734WRITE8_MEMBER(fidelz80_state::vsc_portb_w)
734735{
735   for (int row=1; row<=8; row++)
736   for (int row = 1; row <= 8; row++)
736737   {
737738      if (m_kp_matrix & 0x01)
738739         output_set_indexed_value("led_a", row, BIT(data, 8-row));
r250216r250217
753754   }
754755}
755756
756WRITE8_MEMBER( fidelz80_state::vsc_portc_w )
757WRITE8_MEMBER(fidelz80_state::vsc_portc_w)
757758{
758759   m_kp_matrix = (m_kp_matrix & 0x300) | data;
759760}
r250216r250217
762763    PIO Device, for VSC
763764******************************************************************************/
764765
765READ8_MEMBER( fidelz80_state::vsc_pio_porta_r )
766READ8_MEMBER(fidelz80_state::vsc_pio_porta_r)
766767{
767768   UINT8 data = 0;
768769
r250216r250217
790791   return data & 0xff;
791792}
792793
793READ8_MEMBER( fidelz80_state::vsc_pio_portb_r )
794READ8_MEMBER(fidelz80_state::vsc_pio_portb_r)
794795{
795796   UINT8 data = 0x00;
796797
r250216r250217
800801   return data;
801802}
802803
803WRITE8_MEMBER( fidelz80_state::vsc_pio_portb_w )
804WRITE8_MEMBER(fidelz80_state::vsc_pio_portb_w)
804805{
805806   m_kp_matrix = (m_kp_matrix & 0xff) | ((data & 0x03)<<8);
806807
r250216r250217
957958   return m_i8041->upi41_master_r(space, 1);
958959}
959960
960WRITE8_MEMBER( fidelz80_state::bridgec_speech_w )
961WRITE8_MEMBER(fidelz80_state::bridgec_speech_w)
961962{
962963   // todo: HALT THE z80 here, and set up a callback to poll the s14001a DONE line to resume z80
963964   m_speech->set_volume(15); // hack, s14001a core should assume a volume of 15 unless otherwise stated...
r250216r250217
965966   m_speech->rst_w(BIT(data, 7));
966967}
967968
968void fidelz80_state::machine_reset()
969void fidelz80_state::machine_start()
969970{
971   // zerofill
970972   m_led_selected = 0;
971973   m_kp_matrix = 0;
972974   m_digit_data = 0;
973975   m_led_data = 0;
974976   memset(m_digit_line_status, 0, sizeof(m_digit_line_status));
977   
978   // register for savestates
979   save_item(NAME(m_led_selected));
980   save_item(NAME(m_kp_matrix));
981   save_item(NAME(m_digit_data));
982   save_item(NAME(m_led_data));
983   save_item(NAME(m_digit_line_status));
975984}
976985
977986TIMER_DEVICE_CALLBACK_MEMBER(fidelz80_state::nmi_timer)
r250216r250217
10111020   AM_RANGE(0x2000, 0x3fff) AM_ROM // 8k rom
10121021   AM_RANGE(0x4000, 0x5fff) AM_ROM // 8k rom
10131022   AM_RANGE(0x6000, 0x63ff) AM_RAM AM_MIRROR(0x1c00) // 1k ram (2114*2) mirrored 8 times
1014   AM_RANGE(0xE000, 0xE000) AM_WRITE(bridgec_speech_w) AM_MIRROR(0x1FFF) // write to speech chip, halts cpu
1023   AM_RANGE(0xe000, 0xe000) AM_WRITE(bridgec_speech_w) AM_MIRROR(0x1fff) // write to speech chip, halts cpu
10151024ADDRESS_MAP_END
10161025
10171026static ADDRESS_MAP_START(fidel_z80_io, AS_IO, 8, fidelz80_state)
r250216r250217
10611070}
10621071
10631072static INPUT_PORTS_START( fidelz80 )
1064   PORT_START("LEVEL")     // cc10 only
1073   PORT_START("LEVEL") // cc10 only
10651074      PORT_CONFNAME( 0x80, 0x00, "Number of levels" )
10661075      PORT_CONFSETTING( 0x00, "10" )
10671076      PORT_CONFSETTING( 0x80, "3" )
r250216r250217
12501259******************************************************************************/
12511260
12521261static MACHINE_CONFIG_START( cc10, fidelz80_state )
1262
12531263   /* basic machine hardware */
12541264   MCFG_CPU_ADD("maincpu", Z80, XTAL_4MHz)
12551265   MCFG_CPU_PROGRAM_MAP(cc10_z80_mem)
r250216r250217
12681278   MCFG_I8255_OUT_PORTC_CB(WRITE8(fidelz80_state, fidelz80_portc_w))
12691279
12701280   /* sound hardware */
1271   MCFG_SPEAKER_STANDARD_MONO( "mono" )
1272   MCFG_SOUND_ADD( "beeper", BEEP, 0 )
1273   MCFG_SOUND_ROUTE( ALL_OUTPUTS, "mono", 1.00 )
1281   MCFG_SPEAKER_STANDARD_MONO("mono")
1282   MCFG_SOUND_ADD("beeper", BEEP, 0)
1283   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
12741284MACHINE_CONFIG_END
12751285
12761286static MACHINE_CONFIG_START( vcc, fidelz80_state )
1287
12771288   /* basic machine hardware */
12781289   MCFG_CPU_ADD("maincpu", Z80, XTAL_4MHz)
12791290   MCFG_CPU_PROGRAM_MAP(vcc_z80_mem)
r250216r250217
12991310MACHINE_CONFIG_END
13001311
13011312static MACHINE_CONFIG_START( vsc, fidelz80_state )
1313
13021314   /* basic machine hardware */
13031315   MCFG_CPU_ADD("maincpu", Z80, XTAL_4MHz)
13041316   MCFG_CPU_PROGRAM_MAP(vsc_mem)
r250216r250217
13271339MACHINE_CONFIG_END
13281340
13291341static MACHINE_CONFIG_START( bridgec, fidelz80_state )
1342
13301343   /* basic machine hardware */
13311344   MCFG_CPU_ADD("maincpu", Z80, XTAL_5MHz/2) // 2.5MHz
13321345   MCFG_CPU_PROGRAM_MAP(bridgec_z80_mem)
r250216r250217
13431356   MCFG_I8243_ADD("i8243", NOOP, WRITE8(fidelz80_state,digit_w))
13441357
13451358   /* sound hardware */
1346   MCFG_SPEAKER_STANDARD_MONO( "mono" )
1359   MCFG_SPEAKER_STANDARD_MONO("mono")
13471360   MCFG_SOUND_ADD("speech", S14001A, 25000) // around 25khz
1348   MCFG_SOUND_ROUTE( ALL_OUTPUTS, "mono", 1.00 )
1361   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
13491362MACHINE_CONFIG_END
13501363
13511364
r250216r250217
14191432 Drivers
14201433******************************************************************************/
14211434
1422/*    YEAR  NAME        PARENT      COMPAT  MACHINE     INPUT   INIT      COMPANY                     FULLNAME                                                    FLAGS */
1423COMP( 1978, cc10,       0,          0,      cc10,  fidelz80, driver_device, 0,      "Fidelity Electronics",   "Chess Challenger 10 (Model CC10/BCC)", MACHINE_NOT_WORKING )
1424COMP( 1979, vcc,        0,          0,      vcc,   fidelz80, driver_device, 0,      "Fidelity Electronics",   "Talking Chess Challenger (model VCC)", MACHINE_NOT_WORKING )
1425COMP( 1979, vbrc,       0,          0,      bridgec,   bridgec, driver_device,      0,      "Fidelity Electronics",   "Bridge Challenger (model VBRC/7002)",  MACHINE_NOT_WORKING )
1426COMP( 1980, uvc,        vcc,        0,      vcc,   fidelz80, driver_device, 0,      "Fidelity Electronics",   "Advanced Talking Chess Challenger (model UVC)", MACHINE_NOT_WORKING )
1427COMP( 1980, bridgec3,   vbrc,       0,      bridgec,   bridgec, driver_device,      0,      "Fidelity Electronics",   "Bridge Challenger 3 (model 7014)", MACHINE_NOT_WORKING )
1428COMP( 1980, vsc,        0,          0,      vsc,   vsc, driver_device,      0,      "Fidelity Electronics",   "Voice Sensory Chess Challenger (model VSC)", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK )
1435/*    YEAR  NAME      PARENT  COMPAT  MACHINE  INPUT     INIT              COMPANY, FULLNAME, FLAGS */
1436COMP( 1978, cc10,     0,      0,      cc10,    fidelz80, driver_device, 0, "Fidelity Electronics", "Chess Challenger 10 (Model CC10/BCC)", MACHINE_NOT_WORKING )
1437COMP( 1979, vcc,      0,      0,      vcc,     fidelz80, driver_device, 0, "Fidelity Electronics", "Talking Chess Challenger (model VCC)", MACHINE_NOT_WORKING )
1438COMP( 1979, vbrc,     0,      0,      bridgec, bridgec,  driver_device, 0, "Fidelity Electronics", "Bridge Challenger (model VBRC/7002)",  MACHINE_NOT_WORKING )
1439COMP( 1980, uvc,      vcc,    0,      vcc,     fidelz80, driver_device, 0, "Fidelity Electronics", "Advanced Talking Chess Challenger (model UVC)", MACHINE_NOT_WORKING )
1440COMP( 1980, bridgec3, vbrc,   0,      bridgec, bridgec,  driver_device, 0, "Fidelity Electronics", "Bridge Challenger 3 (model 7014)", MACHINE_NOT_WORKING )
1441COMP( 1980, vsc,      0,      0,      vsc,     vsc,      driver_device, 0, "Fidelity Electronics", "Voice Sensory Chess Challenger (model VSC)", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK )
trunk/src/mame/includes/fidelz80.h
r250216r250217
22// copyright-holders:Kevin Horton,Jonathan Gevaryahu,Sandro Ronco
33/***************************************************************************
44
5        fidelz80.h
5    Fidelity Electronics Z80 based board driver
66
77****************************************************************************/
88
r250216r250217
1919public:
2020   fidelz80_state(const machine_config &mconfig, device_type type, const char *tag)
2121      : driver_device(mconfig, type, tag),
22         m_maincpu(*this, "maincpu"),
23         m_speech(*this, "speech"),
24         m_beep(*this, "beeper"),
25         m_i8041(*this, "mcu"),
26         m_i8243(*this, "i8243")
27      { }
22      m_maincpu(*this, "maincpu"),
23      m_speech(*this, "speech"),
24      m_beep(*this, "beeper"),
25      m_i8041(*this, "mcu"),
26      m_i8243(*this, "i8243")
27   { }
2828
2929   required_device<cpu_device> m_maincpu;
3030   optional_device<s14001a_device> m_speech;
r250216r250217
3232   optional_device<i8041_device> m_i8041;
3333   optional_device<i8243_device> m_i8243;
3434
35   UINT16 m_kp_matrix;         // keypad/leds matrix
36   UINT8 m_led_data;           // data for the two individual leds, in 0bxxxx12xx format
37   UINT8 m_led_selected;       // 5 bit selects for 7 seg leds and for common other leds, bits are (7seg leds are 0 1 2 3, common other leds are C) 0bxx3210xc
38   UINT16 m_digit_data;        // data for seg leds
35   UINT16 m_kp_matrix;             // keypad/leds matrix
36   UINT8 m_led_data;               // data for the two individual leds, in 0bxxxx12xx format
37   UINT8 m_led_selected;           // 5 bit selects for 7 seg leds and for common other leds, bits are (7seg leds are 0 1 2 3, common other leds are C) 0bxx3210xc
38   UINT16 m_digit_data;            // data for seg leds
3939   UINT8 m_digit_line_status[4];   // prevent overwrite of m_digit_data
4040
41   virtual void machine_reset();
42
4341   //model VCC/UVC
4442   void update_display();
45   DECLARE_READ8_MEMBER( fidelz80_portc_r );
46   DECLARE_WRITE8_MEMBER( fidelz80_portb_w );
47   DECLARE_WRITE8_MEMBER( fidelz80_portc_w );
48   DECLARE_WRITE8_MEMBER( cc10_porta_w );
49   DECLARE_READ8_MEMBER( vcc_portb_r );
50   DECLARE_WRITE8_MEMBER( vcc_porta_w );
43   DECLARE_READ8_MEMBER(fidelz80_portc_r);
44   DECLARE_WRITE8_MEMBER(fidelz80_portb_w);
45   DECLARE_WRITE8_MEMBER(fidelz80_portc_w);
46   DECLARE_WRITE8_MEMBER(cc10_porta_w);
47   DECLARE_READ8_MEMBER(vcc_portb_r);
48   DECLARE_WRITE8_MEMBER(vcc_porta_w);
5149
5250   //model 7014 and VBC
53   DECLARE_WRITE8_MEMBER(bridgec_speech_w );
51   DECLARE_WRITE8_MEMBER(bridgec_speech_w);
5452   DECLARE_WRITE8_MEMBER(kp_matrix_w);
5553   DECLARE_READ8_MEMBER(unknown_r);
5654   DECLARE_READ8_MEMBER(unknown2_r);
r250216r250217
7371   TIMER_DEVICE_CALLBACK_MEMBER(nmi_timer);
7472
7573   DECLARE_WRITE8_MEMBER(digit_w);
74
75   virtual void machine_start();
7676};
7777
7878


Previous 199869 Revisions Next


© 1997-2024 The MAME Team