Previous 199869 Revisions Next

r44426 Sunday 24th January, 2016 at 21:32:22 UTC by hap
fidel6502: improved CSC driver
[src/mame/drivers]fidel6502.cpp fidelz80.cpp tispeak.cpp

trunk/src/mame/drivers/fidel6502.cpp
r252937r252938
66    See drivers/fidelz80.cpp for hardware description
77
88    TODO:
9    - speech doesn't work
9    - x
1010
1111******************************************************************************/
1212
1313#include "emu.h"
1414#include "cpu/m6502/m6502.h"
1515#include "machine/6821pia.h"
16#include "sound/speaker.h"
1617
1718#include "includes/fidelz80.h"
1819
20// internal artwork
21extern const char layout_fidel_vsc[]; // same layout as fidelz80/vsc
1922
2023
21// same layout of Sensory Chess Challenger
22//extern const char layout_vsc[];
23
2424class fidel6502_state : public fidelz80base_state
2525{
2626public:
2727   fidel6502_state(const machine_config &mconfig, device_type type, const char *tag)
2828      : fidelz80base_state(mconfig, type, tag),
29      m_6821pia(*this, "6821pia")
29      m_6821pia(*this, "6821pia"),
30      m_speaker(*this, "speaker")
3031   { }
3132
3233   // devices/pointers
3334   optional_device<pia6821_device> m_6821pia;
35   optional_device<speaker_sound_device> m_speaker;
3436
35   UINT16 input_read(int index);
36   DECLARE_WRITE8_MEMBER( pia0_pa_w );
37   DECLARE_WRITE8_MEMBER( pia0_pb_w );
38   DECLARE_READ8_MEMBER( pia0_pb_r );
39   DECLARE_WRITE_LINE_MEMBER( pia0_ca2_w );
40   DECLARE_WRITE8_MEMBER( pia1_pa_w );
41   DECLARE_WRITE8_MEMBER( pia1_pb_w );
42   DECLARE_READ8_MEMBER( pia1_pa_r );
43   DECLARE_WRITE_LINE_MEMBER( pia1_ca2_w );
44   DECLARE_WRITE_LINE_MEMBER( pia1_cb2_w );
45   DECLARE_READ_LINE_MEMBER( pia1_ca1_r );
46   DECLARE_READ_LINE_MEMBER( pia1_cb1_r );
37   // model CSC
38   void csc_prepare_display();
39   DECLARE_READ8_MEMBER(csc_speech_r);
40   DECLARE_WRITE8_MEMBER(csc_pia0_pa_w);
41   DECLARE_WRITE8_MEMBER(csc_pia0_pb_w);
42   DECLARE_READ8_MEMBER(csc_pia0_pb_r);
43   DECLARE_WRITE_LINE_MEMBER(csc_pia0_ca2_w);
44   DECLARE_WRITE8_MEMBER(csc_pia1_pa_w);
45   DECLARE_WRITE8_MEMBER(csc_pia1_pb_w);
46   DECLARE_READ8_MEMBER(csc_pia1_pa_r);
47   DECLARE_WRITE_LINE_MEMBER(csc_pia1_ca2_w);
48   DECLARE_WRITE_LINE_MEMBER(csc_pia1_cb2_w);
49   DECLARE_READ_LINE_MEMBER(csc_pia1_ca1_r);
50   DECLARE_READ_LINE_MEMBER(csc_pia1_cb1_r);
4751
48   UINT8 m_selector;
4952   TIMER_DEVICE_CALLBACK_MEMBER(irq_timer);
5053
5154protected:
r252937r252938
5457
5558
5659
60// Devices, I/O
5761
62/******************************************************************************
63    CSC
64******************************************************************************/
5865
59UINT16 fidel6502_state::input_read(int index)
66// misc handlers
67
68void fidel6502_state::csc_prepare_display()
6069{
61   static const char *const col_tag[] =
70   // 7442 output, also update input mux (9 is unused)
71   m_inp_mux = (1 << m_led_select) & 0x1ff;
72   
73   // 4 7seg leds + H
74   for (int i = 0; i < 4; i++)
6275   {
63      "IN.0", "IN.1", "IN.2", "IN.3", "IN.4",
64      "IN.5", "IN.6", "IN.7", "IN.8"
65   };
76      m_display_segmask[i] = 0x7f;
77      m_display_state[i] = (m_inp_mux >> i & 1) ? m_7seg_data : 0;
78   }
79   
80   // 8*8 chessboard leds
81   for (int i = 0; i < 8; i++)
82      m_display_state[i+4] = (m_inp_mux >> i & 1) ? m_led_data : 0;
6683
67   return ioport(col_tag[index])->read();
84   set_display_size(8, 12);
85   display_update();
6886}
6987
70
71WRITE8_MEMBER( fidel6502_state::pia0_pa_w )
88READ8_MEMBER(fidel6502_state::csc_speech_r)
7289{
73   UINT8 out_digit = BITSWAP8(data,0,1,5,6,7,2,3,4 );
90   return m_speech_rom[m_speech_bank << 12 | offset];
91}
7492
75   switch (m_selector)
76   {
77   case 0:
78      output().set_digit_value(0, out_digit & 0x7f);
79      output().set_value("pm_led", BIT(out_digit, 7));
80      break;
81   case 1:
82      output().set_digit_value(1, out_digit & 0x7f);
83      break;
84   case 2:
85      output().set_digit_value(2, out_digit & 0x7f);
86      output().set_value("up_dot", BIT(out_digit, 7));
87      break;
88   case 3:
89      output().set_digit_value(3, out_digit & 0x7f);
90      output().set_value("low_dot", BIT(out_digit, 7));
91      break;
92   }
9393
94//  m_speech->data_w(space, 0, data & 0x3f);
94// 6821 PIA 0
9595
96   // for avoid the digit flashing
97   m_selector |= 0x80;
96WRITE8_MEMBER(fidel6502_state::csc_pia0_pa_w)
97{
98   // d0-d5: TSI C0-C5
99   m_speech->data_w(space, 0, data & 0x3f);
100
101   // d0-d7: data for the 4 7seg leds, bits are ABFGHCDE (H is extra led)
102   m_7seg_data = BITSWAP8(data,0,1,5,6,7,2,3,4);
103   csc_prepare_display();
98104}
99105
100WRITE8_MEMBER( fidel6502_state::pia0_pb_w )
106WRITE8_MEMBER(fidel6502_state::csc_pia0_pb_w)
101107{
102//  m_speech->start_w(BIT(data, 1));
108   // d0: speech ROM A12
109   m_speech->force_update(); // update stream to now
110   m_speech_bank = data & 1;
111
112   // d1: TSI START line
113   m_speech->start_w(data >> 1 & 1);
114
115   // d4: tone line
116   m_speaker->level_w(data >> 4 & 1);
103117}
104118
105READ8_MEMBER( fidel6502_state::pia0_pb_r )
119READ8_MEMBER(fidel6502_state::csc_pia0_pb_r)
106120{
121   // d2: printer?
107122   UINT8 data = 0x04;
108123
109   if(m_speech->busy_r())
124   // d3: TSI BUSY line
125   if (m_speech->busy_r())
110126      data |= 0x08;
111127
112   if (m_selector<9)
113      if (input_read(m_selector) & 0x100)
114         data |= 0x20;
128   // d5: button row 8 (active low)
129   if (!(read_inputs(9) & 0x100))
130      data |= 0x20;
131   
132   // d6,d7: language switches
133   data|=0xc0;
115134
116135   return data;
117136}
118137
119WRITE_LINE_MEMBER( fidel6502_state::pia0_ca2_w )
138WRITE_LINE_MEMBER(fidel6502_state::csc_pia0_ca2_w)
120139{
140   // printer?
121141}
122142
123WRITE8_MEMBER( fidel6502_state::pia1_pa_w )
143
144// 6821 PIA 1
145
146READ8_MEMBER(fidel6502_state::csc_pia1_pa_r)
124147{
125   m_selector = (m_selector & 0x0c) | ((data>>6) & 0x03);
148   // d0-d5: button row 0-5 (active low)
149   return (read_inputs(9) & 0x3f) ^ 0xff;
126150}
127151
128WRITE8_MEMBER( fidel6502_state::pia1_pb_w )
152WRITE8_MEMBER(fidel6502_state::csc_pia1_pa_w)
129153{
130   static const char *const row_tag[] =
131   {
132      "led_a", "led_b", "led_c", "led_d",
133      "led_e", "led_f", "led_g", "led_h"
134   };
135
136   if (m_selector < 8)
137      for (int i=0; i<8; i++)
138         output().set_indexed_value(row_tag[m_selector], i+1, BIT(data, 7-i));
154   // d6,d7: 7442 A0,A1
155   m_led_select = (m_led_select & ~3) | (data >> 6 & 3);
156   csc_prepare_display();
139157}
140158
141READ8_MEMBER( fidel6502_state::pia1_pa_r )
159WRITE8_MEMBER(fidel6502_state::csc_pia1_pb_w)
142160{
143   UINT8 data = 0xff;
144
145   if (m_selector<9)
146      data = input_read(m_selector);
147
148   return data & 0x3f;
161   // d0-d7: led row data
162   m_led_data = data;
163   csc_prepare_display();
149164}
150165
151WRITE_LINE_MEMBER( fidel6502_state::pia1_ca2_w )
166READ_LINE_MEMBER(fidel6502_state::csc_pia1_ca1_r)
152167{
153   m_selector = (m_selector & 0x07) | (state ? 8 : 0);
168   // button row 6 (active low)
169   return ~read_inputs(9) >> 6 & 1;
154170}
155171
156WRITE_LINE_MEMBER( fidel6502_state::pia1_cb2_w )
172READ_LINE_MEMBER(fidel6502_state::csc_pia1_cb1_r)
157173{
158   m_selector = (m_selector & 0x0b) | (state ? 4 : 0);
174   // button row 7 (active low)
175   return ~read_inputs(9) >> 7 & 1;
159176}
160177
161READ_LINE_MEMBER( fidel6502_state::pia1_ca1_r )
178WRITE_LINE_MEMBER(fidel6502_state::csc_pia1_cb2_w)
162179{
163   int data = 0x01;
164
165   if (m_selector<9)
166      data = BIT(input_read(m_selector), 6);
167
168   return data;
180   // 7442 A2
181   m_led_select = (m_led_select & ~4) | (state ? 4 : 0);
182   csc_prepare_display();
169183}
170184
171READ_LINE_MEMBER( fidel6502_state::pia1_cb1_r )
185WRITE_LINE_MEMBER(fidel6502_state::csc_pia1_ca2_w)
172186{
173   int data = 0x01;
187   // 7442 A3
188   m_led_select = (m_led_select & ~8) | (state ? 8 : 0);
189   csc_prepare_display();
190}
174191
175   if (m_selector<9)
176      data = BIT(input_read(m_selector),7);
177192
178   return data;
179}
180193
181194
182195TIMER_DEVICE_CALLBACK_MEMBER(fidel6502_state::irq_timer)
r252937r252938
184197   m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
185198}
186199
187/* Address maps */
188static ADDRESS_MAP_START(csc_mem, AS_PROGRAM, 8, fidel6502_state)
200/******************************************************************************
201    Address Maps
202******************************************************************************/
203
204static ADDRESS_MAP_START( csc_map, AS_PROGRAM, 8, fidel6502_state )
189205   ADDRESS_MAP_UNMAP_HIGH
190   AM_RANGE( 0x0000, 0x07ff) AM_RAM AM_MIRROR(0x4000)  //2K RAM
191   AM_RANGE( 0x0800, 0x0bff) AM_RAM AM_MIRROR(0x4400)  //1K RAM
206   AM_RANGE( 0x0000, 0x07ff) AM_RAM AM_MIRROR(0x4000)
207   AM_RANGE( 0x0800, 0x0bff) AM_RAM AM_MIRROR(0x4400)
192208   AM_RANGE( 0x1000, 0x1003) AM_DEVREADWRITE("pia0", pia6821_device, read, write) AM_MIRROR(0x47fc)
193209   AM_RANGE( 0x1800, 0x1803) AM_DEVREADWRITE("pia1", pia6821_device, read, write) AM_MIRROR(0x47fc)
194   AM_RANGE( 0x2000, 0x3fff) AM_ROM  AM_MIRROR(0x4000)
195   AM_RANGE( 0x8000, 0x9fff) AM_NOP
210   AM_RANGE( 0x2000, 0x3fff) AM_ROM AM_MIRROR(0x4000)
196211   AM_RANGE( 0xa000, 0xffff) AM_ROM
197212ADDRESS_MAP_END
198213
199/* Input ports */
214
215
216/******************************************************************************
217    Input Ports
218******************************************************************************/
219
200220static INPUT_PORTS_START( csc )
201221   PORT_START("IN.0")
202   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD)
203   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD)
204   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD)
205   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD)
206   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD)
207   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD)
208   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD)
209   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD)
210   PORT_BIT(0x100,IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Speak") PORT_CODE(KEYCODE_SPACE)
222   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD)
223   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD)
224   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD)
225   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD)
226   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD)
227   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD)
228   PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD)
229   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD)
230   PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Speak") PORT_CODE(KEYCODE_SPACE)
211231
212232   PORT_START("IN.1")
213   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD)
214   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD)
215   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD)
216   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD)
217   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD)
218   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD)
219   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD)
220   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD)
221   PORT_BIT(0x100,IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("RV")   PORT_CODE(KEYCODE_V)
233   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD)
234   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD)
235   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD)
236   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD)
237   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD)
238   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD)
239   PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD)
240   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD)
241   PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RV") PORT_CODE(KEYCODE_V)
222242
223243   PORT_START("IN.2")
224   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD)
225   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD)
226   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD)
227   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD)
228   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD)
229   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD)
230   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD)
231   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD)
232   PORT_BIT(0x100,IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("TM")   PORT_CODE(KEYCODE_T)
244   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD)
245   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD)
246   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD)
247   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD)
248   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD)
249   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD)
250   PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD)
251   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD)
252   PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("TM") PORT_CODE(KEYCODE_T)
233253
234254   PORT_START("IN.3")
235   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD)
236   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD)
237   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD)
238   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD)
239   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD)
240   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD)
241   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD)
242   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD)
243   PORT_BIT(0x100,IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("LV")   PORT_CODE(KEYCODE_L)
255   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD)
256   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD)
257   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD)
258   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD)
259   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD)
260   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD)
261   PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD)
262   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD)
263   PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LV") PORT_CODE(KEYCODE_L) // level
244264
245265   PORT_START("IN.4")
246   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD)
247   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD)
248   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD)
249   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD)
250   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD)
251   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD)
252   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD)
253   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD)
254   PORT_BIT(0x100,IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("DM")   PORT_CODE(KEYCODE_M)
266   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD)
267   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD)
268   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD)
269   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD)
270   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD)
271   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD)
272   PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD)
273   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD)
274   PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("DM") PORT_CODE(KEYCODE_M)
255275
256276   PORT_START("IN.5")
257   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD)
258   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD)
259   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD)
260   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD)
261   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD)
262   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD)
263   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD)
264   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD)
265   PORT_BIT(0x100,IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("ST")   PORT_CODE(KEYCODE_S)
277   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD)
278   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD)
279   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD)
280   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD)
281   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD)
282   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD)
283   PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD)
284   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD)
285   PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ST") PORT_CODE(KEYCODE_S)
266286
267287   PORT_START("IN.6")
268   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD)
269   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD)
270   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD)
271   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD)
272   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD)
273   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD)
274   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD)
275   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD)
276   PORT_BIT(0x100,IP_ACTIVE_LOW, IPT_UNUSED) PORT_UNUSED
288   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD)
289   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD)
290   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD)
291   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD)
292   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD)
293   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD)
294   PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD)
295   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD)
296   PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_UNUSED)
277297
278298   PORT_START("IN.7")
279   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD)
280   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD)
281   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD)
282   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD)
283   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD)
284   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD)
285   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD)
286   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD)
287   PORT_BIT(0x100,IP_ACTIVE_LOW, IPT_UNUSED) PORT_UNUSED
299   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD)
300   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD)
301   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD)
302   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD)
303   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD)
304   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD)
305   PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD)
306   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD)
307   PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_UNUSED)
288308
289309   PORT_START("IN.8")
290   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Pawn")     PORT_CODE(KEYCODE_1)
291   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Rook")     PORT_CODE(KEYCODE_2)
292   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Knight")   PORT_CODE(KEYCODE_3)
293   PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Bishop")   PORT_CODE(KEYCODE_4)
294   PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Queen")    PORT_CODE(KEYCODE_5)
295   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("King")     PORT_CODE(KEYCODE_6)
296   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("CL")       PORT_CODE(KEYCODE_DEL)
297   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("RE")       PORT_CODE(KEYCODE_R)
298   PORT_BIT(0x100,IP_ACTIVE_LOW, IPT_UNUSED) PORT_UNUSED
310   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Pawn") PORT_CODE(KEYCODE_1)
311   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Rook") PORT_CODE(KEYCODE_2)
312   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Knight") PORT_CODE(KEYCODE_3)
313   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Bishop") PORT_CODE(KEYCODE_4)
314   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Queen") PORT_CODE(KEYCODE_5)
315   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("King") PORT_CODE(KEYCODE_6)
316   PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL) // clear
317   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RE") PORT_CODE(KEYCODE_R) // reset
318   PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_UNUSED) PORT_UNUSED
299319INPUT_PORTS_END
300320
301321
302322void fidel6502_state::machine_start()
303323{
304324   fidelz80base_state::machine_start();
305   save_item(NAME(m_selector));
306325}
307326
308/* Machine driver */
327
328/******************************************************************************
329    Machine Drivers
330******************************************************************************/
331
309332static MACHINE_CONFIG_START( csc, fidel6502_state )
333
310334   /* basic machine hardware */
311335   MCFG_CPU_ADD("maincpu", M6502, 3900000/2)
312   MCFG_CPU_PROGRAM_MAP(csc_mem)
336   MCFG_CPU_PROGRAM_MAP(csc_map)
313337
314   //MCFG_DEFAULT_LAYOUT(layout_vsc)
315338
316339   MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_timer", fidel6502_state, irq_timer, attotime::from_hz(38400/64))
317340
318341   MCFG_DEVICE_ADD("pia0", PIA6821, 0)
319   MCFG_PIA_READPB_HANDLER(READ8(fidel6502_state, pia0_pb_r))
320   MCFG_PIA_WRITEPA_HANDLER(WRITE8(fidel6502_state, pia0_pa_w))
321   MCFG_PIA_WRITEPB_HANDLER(WRITE8(fidel6502_state, pia0_pb_w))
322   MCFG_PIA_CA2_HANDLER(WRITELINE(fidel6502_state, pia0_ca2_w))
342   MCFG_PIA_READPB_HANDLER(READ8(fidel6502_state, csc_pia0_pb_r))
343   MCFG_PIA_WRITEPA_HANDLER(WRITE8(fidel6502_state, csc_pia0_pa_w))
344   MCFG_PIA_WRITEPB_HANDLER(WRITE8(fidel6502_state, csc_pia0_pb_w))
345   MCFG_PIA_CA2_HANDLER(WRITELINE(fidel6502_state, csc_pia0_ca2_w))
323346
324347   MCFG_DEVICE_ADD("pia1", PIA6821, 0)
325   MCFG_PIA_READPA_HANDLER(READ8(fidel6502_state, pia1_pa_r))
326   MCFG_PIA_READCA1_HANDLER(READLINE(fidel6502_state, pia1_ca1_r))
327   MCFG_PIA_READCB1_HANDLER(READLINE(fidel6502_state, pia1_cb1_r))
328   MCFG_PIA_WRITEPA_HANDLER(WRITE8(fidel6502_state, pia1_pa_w))
329   MCFG_PIA_WRITEPB_HANDLER(WRITE8(fidel6502_state, pia1_pb_w))
330   MCFG_PIA_CA2_HANDLER(WRITELINE(fidel6502_state, pia1_ca2_w))
331   MCFG_PIA_CB2_HANDLER(WRITELINE(fidel6502_state, pia1_cb2_w))
348   MCFG_PIA_READPA_HANDLER(READ8(fidel6502_state, csc_pia1_pa_r))
349   MCFG_PIA_READCA1_HANDLER(READLINE(fidel6502_state, csc_pia1_ca1_r))
350   MCFG_PIA_READCB1_HANDLER(READLINE(fidel6502_state, csc_pia1_cb1_r))
351   MCFG_PIA_WRITEPA_HANDLER(WRITE8(fidel6502_state, csc_pia1_pa_w))
352   MCFG_PIA_WRITEPB_HANDLER(WRITE8(fidel6502_state, csc_pia1_pb_w))
353   MCFG_PIA_CA2_HANDLER(WRITELINE(fidel6502_state, csc_pia1_ca2_w))
354   MCFG_PIA_CB2_HANDLER(WRITELINE(fidel6502_state, csc_pia1_cb2_w))
332355
356   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80base_state, display_decay_tick, attotime::from_msec(1))
357   MCFG_DEFAULT_LAYOUT(layout_fidel_vsc)
358
333359   /* sound hardware */
334360   MCFG_SPEAKER_STANDARD_MONO("mono")
335   MCFG_SOUND_ADD("speech", S14001A, 25000) // around 25khz
361   MCFG_SOUND_ADD("speech", S14001A, 25000) // R/C circuit, around 25khz
362   MCFG_S14001A_EXT_READ_HANDLER(READ8(fidel6502_state, csc_speech_r))
336363   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
364
365   MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
366   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
337367MACHINE_CONFIG_END
338368
339/* ROM definition */
340ROM_START(csc)
341   ROM_REGION(0x10000, "maincpu", 0)
342   ROM_LOAD("101-64109.bin", 0x2000, 0x2000, CRC(08a3577c) SHA1(69fe379d21a9d4b57c84c3832d7b3e7431eec341))
343   ROM_LOAD("1025a03.bin", 0xa000,  0x2000, CRC(63982c07) SHA1(5ed4356323d5c80df216da55994abe94ba4aa94c))
344   ROM_LOAD("1025a02.bin", 0xc000,  0x2000, CRC(9e6e7c69) SHA1(4f1ed9141b6596f4d2b1217d7a4ba48229f3f1b0))
345   ROM_LOAD("1025a01.bin", 0xe000,  0x2000, CRC(57f068c3) SHA1(7d2ac4b9a2fba19556782863bdd89e2d2d94e97b))
369/******************************************************************************
370    ROM Definitions
371******************************************************************************/
346372
347   ROM_LOAD("74s474.bin", 0xfe00,  0x0200, CRC(4511ba31) SHA1(e275b1739f8c3aa445cccb6a2b597475f507e456))
373ROM_START( csc )
374   ROM_REGION( 0x10000, "maincpu", 0 )
375   ROM_LOAD("101-64109.bin", 0x2000, 0x2000, CRC(08a3577c) SHA1(69fe379d21a9d4b57c84c3832d7b3e7431eec341) )
376   ROM_LOAD("1025a03.bin",   0xa000, 0x2000, CRC(63982c07) SHA1(5ed4356323d5c80df216da55994abe94ba4aa94c) )
377   ROM_LOAD("1025a02.bin",   0xc000, 0x2000, CRC(9e6e7c69) SHA1(4f1ed9141b6596f4d2b1217d7a4ba48229f3f1b0) )
378   ROM_LOAD("1025a01.bin",   0xe000, 0x2000, CRC(57f068c3) SHA1(7d2ac4b9a2fba19556782863bdd89e2d2d94e97b) )
379   ROM_LOAD("74s474.bin",    0xfe00, 0x0200, CRC(4511ba31) SHA1(e275b1739f8c3aa445cccb6a2b597475f507e456) )
348380
349   ROM_REGION(0x2000, "speech", 0)
350   ROM_LOAD("101-32107.bin", 0x0000, 0x1000, CRC(f35784f9) SHA1(348e54a7fa1e8091f89ac656b4da22f28ca2e44d))
381   ROM_REGION( 0x2000, "speech", 0 )
382   ROM_LOAD("101-32107.bin", 0x0000, 0x1000, CRC(f35784f9) SHA1(348e54a7fa1e8091f89ac656b4da22f28ca2e44d) )
383   ROM_RELOAD(               0x1000, 0x1000)
351384ROM_END
352385
353386ROM_START( fexcelv )
r252937r252938
358391   ROM_LOAD("101-1081a01.ic2", 0x0000, 0x8000, CRC(c8ae1607) SHA1(6491ce6be60ed77f3dd931c0ca17616f13af943e) )
359392ROM_END
360393
361/* Driver */
394/******************************************************************************
395    Drivers
396******************************************************************************/
362397
363/*    YEAR  NAME          PARENT  COMPAT  MACHINE    INPUT       INIT      COMPANY  FULLNAME                     FLAGS */
364COMP( 1981, csc,     0,      0,      csc,  csc, driver_device,   0, "Fidelity Electronics", "Champion Sensory Chess Challenger",   MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK)
398/*    YEAR  NAME      PARENT  COMPAT  MACHINE  INPUT     INIT              COMPANY, FULLNAME, FLAGS */
399COMP( 1981, csc,     0,      0,      csc,  csc, driver_device,   0, "Fidelity Electronics", "Champion Sensory Chess Challenger", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
365400
366401COMP( 1987, fexcelv,     0,      0,      csc,  csc, driver_device,   0, "Fidelity Electronics", "Voice Excellence", MACHINE_NOT_WORKING )
trunk/src/mame/drivers/fidelz80.cpp
r252937r252938
55    Fidelity Electronics Z80 based board driver
66    for 6502 based boards, see drivers/fidel6502.cpp
77
8    All detailed RE work done by Kevin 'kevtris' Horton
8    Detailed RE work done by Kevin 'kevtris' Horton, except where noted
99
1010    TODO:
1111    - Figure out why it says the first speech line twice; it shouldn't?
r252937r252938
235235PROG - I/O expander
236236
237237T0 - optical card sensor (high = bright/reflective, low = dark/non reflective)
238T1 - connects to inverter, then nothing
238T1 - connects to inverter, then nothing?
239239
240240
241241D8243C I/O expander:
r252937r252938
332332PIA 0:
333333------
334334
335PA0 - 7seg segments H, TSI A0
336PA1 - 7seg segments G, TSI A1
335PA0 - 7seg segments E, TSI A0
336PA1 - 7seg segments D, TSI A1
337337PA2 - 7seg segments C, TSI A2
338PA3 - 7seg segments B, TSI A3
339PA4 - 7seg segments A, TSI A4
338PA3 - 7seg segments H, TSI A3
339PA4 - 7seg segments G, TSI A4
340340PA5 - 7seg segments F, TSI A5
341PA6 - 7seg segments E
342PA7 - 7seg segments D
341PA6 - 7seg segments B
342PA7 - 7seg segments A
343343
344344PB0 - A12 on speech ROM (if used... not used on this model, ROM is 4K)
345345PB1 - START line on S14001A
346346PB2 - white wire
347347PB3 - BUSY line from S14001A
348348PB4 - Tone line (toggle to make a tone in the speaker)
349PB5 - button column I
349PB5 - button row 9
350350PB6 - selection jumper (resistor to 5V)
351351PB7 - selection jumper (resistor to ground)
352352
r252937r252938
568568PA.7 - button row 8
569569
570570PB.0 - button column I
571PB.1 - button row 9
571PB.1 - button column J
572572PB.2 - Tone line (toggle to make tone in the speaker)
573573PB.3 - violet wire
574574PB.4 - white wire (and TSI BUSY line)
r252937r252938
863863// Devices, I/O
864864
865865/******************************************************************************
866    I8255 Device, for VCC/UVC
866    CC10 and VCC/UVC
867867******************************************************************************/
868868
869// misc handlers
870
869871void fidelz80_state::vcc_prepare_display()
870872{
871873   // 4 7seg leds
r252937r252938
882884   return m_speech_rom[m_speech_bank << 12 | offset];
883885}
884886
887
888// I8255 PPI
889
885890WRITE8_MEMBER(fidelz80_state::vcc_ppi_porta_w)
886891{
887892   // d0-d6: digit segment data, bits are xABCDEFG
r252937r252938
918923
919924READ8_MEMBER(fidelz80_state::vcc_ppi_portc_r)
920925{
921   // d0-d3: multiplexed inputs (inverted), also language switches
926   // d0-d3: multiplexed inputs (active low), also language switches
922927   UINT8 lan = (~m_led_select & 0x40) ? m_inp_matrix[4]->read() : 0;
923928   return ~(lan | read_inputs(4)) & 0xf;
924929}
r252937r252938
929934   m_inp_mux = ~data >> 4 & 0xf;
930935}
931936
937
932938// CC10-specific (no speech chip, 1-bit beeper instead)
933939
934940TIMER_DEVICE_CALLBACK_MEMBER(fidelz80_state::beeper_off_callback)
r252937r252938
951957}
952958
953959
960
954961/******************************************************************************
955    I8255 Device, for VSC
962    VSC
956963******************************************************************************/
957964
965// misc handlers
966
958967void fidelz80_state::vsc_prepare_display()
959968{
960969   // 4 7seg leds + H
r252937r252938
972981   display_update();
973982}
974983
984
985// I8255 PPI
986
975987WRITE8_MEMBER(fidelz80_state::vsc_ppi_porta_w)
976988{
977989   // d0-d5: TSI C0-C5
r252937r252938
9991011}
10001012
10011013
1002/******************************************************************************
1003    Z80 PIO Device, for VSC
1004******************************************************************************/
1014// Z80 PIO
10051015
10061016READ8_MEMBER(fidelz80_state::vsc_pio_porta_r)
10071017{
r252937r252938
10321042}
10331043
10341044
1045
10351046/******************************************************************************
1036    I8243 I/O Expander Device, for VBRC
1047    VBRC
10371048******************************************************************************/
10381049
1050// misc handlers
1051
10391052void fidelz80_state::vbrc_prepare_display()
10401053{
10411054   // 14seg led segments, d15 is extra led, d14 is unused (tone on prototype?)
r252937r252938
10461059   display_matrix(16, 8, outdata, m_led_select);
10471060}
10481061
1062
1063// I8243 I/O expander
1064
10491065WRITE8_MEMBER(fidelz80_state::vbrc_ioexp_port_w)
10501066{
10511067   // P4-P7: digit segment data
r252937r252938
10541070}
10551071
10561072
1057/******************************************************************************
1058    I8041 MCU, for VBRC
1059******************************************************************************/
1073// I8041 MCU
10601074
10611075WRITE8_MEMBER(fidelz80_state::vbrc_mcu_p1_w)
10621076{
r252937r252938
10681082READ8_MEMBER(fidelz80_state::vbrc_mcu_p2_r)
10691083{
10701084   // d0-d3: I8243 P2
1071   // d4-d7: multiplexed inputs (inverted)
1085   // d4-d7: multiplexed inputs (active low)
10721086   return (m_i8243->i8243_p2_r(space, offset) & 0x0f) | (read_inputs(8) << 4 ^ 0xf0);
10731087}
10741088
r252937r252938
11871201static INPUT_PORTS_START( fidelz80 )
11881202   PORT_START("IN.0")
11891203   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
1190   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LV") PORT_CODE(KEYCODE_V)
1204   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LV") PORT_CODE(KEYCODE_L)
11911205   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("A1") PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_A)
11921206   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("E5") PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_E)
11931207
r252937r252938
13161330   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("King") PORT_CODE(KEYCODE_6)
13171331   PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL)
13181332   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RE") PORT_CODE(KEYCODE_R)
1319   PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_UNUSED)
13201333
13211334   PORT_START("IN.9") // buttons beside the display
13221335   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("TM") PORT_CODE(KEYCODE_T)
r252937r252938
14011414   MCFG_I8255_IN_PORTC_CB(READ8(fidelz80_state, vcc_ppi_portc_r))
14021415   MCFG_I8255_OUT_PORTC_CB(WRITE8(fidelz80_state, vcc_ppi_portc_w))
14031416
1404   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80_state, display_decay_tick, attotime::from_msec(1))
1417   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80base_state, display_decay_tick, attotime::from_msec(1))
14051418   MCFG_DEFAULT_LAYOUT(layout_fidel_cc)
14061419
14071420   /* sound hardware */
r252937r252938
14251438   MCFG_I8255_IN_PORTC_CB(READ8(fidelz80_state, vcc_ppi_portc_r))
14261439   MCFG_I8255_OUT_PORTC_CB(WRITE8(fidelz80_state, vcc_ppi_portc_w))
14271440
1428   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80_state, display_decay_tick, attotime::from_msec(1))
1441   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80base_state, display_decay_tick, attotime::from_msec(1))
14291442   MCFG_DEFAULT_LAYOUT(layout_fidel_vcc)
14301443
14311444   /* sound hardware */
r252937r252938
14411454   MCFG_CPU_ADD("maincpu", Z80, XTAL_4MHz)
14421455   MCFG_CPU_PROGRAM_MAP(vsc_map)
14431456   MCFG_CPU_IO_MAP(vsc_io)
1444   MCFG_CPU_PERIODIC_INT_DRIVER(fidelz80_state, nmi_line_pulse, 600) // 555 timer, approx 600hz
1457   MCFG_CPU_PERIODIC_INT_DRIVER(fidelz80base_state, nmi_line_pulse, 600) // 555 timer, approx 600hz
14451458
14461459   MCFG_DEVICE_ADD("ppi8255", I8255, 0)
14471460   MCFG_I8255_OUT_PORTA_CB(WRITE8(fidelz80_state, vsc_ppi_porta_w))
r252937r252938
14531466   MCFG_Z80PIO_IN_PB_CB(READ8(fidelz80_state, vsc_pio_portb_r))
14541467   MCFG_Z80PIO_OUT_PB_CB(WRITE8(fidelz80_state, vsc_pio_portb_w))
14551468
1456   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80_state, display_decay_tick, attotime::from_msec(1))
1469   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80base_state, display_decay_tick, attotime::from_msec(1))
14571470   MCFG_DEFAULT_LAYOUT(layout_fidel_vsc)
14581471
14591472   /* sound hardware */
r252937r252938
14781491
14791492   MCFG_I8243_ADD("i8243", NOOP, WRITE8(fidelz80_state, vbrc_ioexp_port_w))
14801493
1481   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80_state, display_decay_tick, attotime::from_msec(1))
1494   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80base_state, display_decay_tick, attotime::from_msec(1))
14821495   MCFG_DEFAULT_LAYOUT(layout_fidel_vbrc)
14831496
14841497   /* sound hardware */
trunk/src/mame/drivers/tispeak.cpp
r252937r252938
102102    - notes: no display, MCU is TMS1100 instead of TMS0270, overall similar to Touch & Tell
103103
104104    Speak & Spell Compact (UK) "Speak & Write", 1981
105    - MCU & TMS51xx: same as US 1981 version
105    - MCU: same as US 1981 version
106    - TMS51xx: CD2801A
106107    - VSM: 16KB CD62174(rev.A)
107108    - notes: BTANB: gibberish when the module button is pressed (with module present),
108109      anecdotes from the developer, the same person working on the original UK version:
r252937r252938
11701171   MCFG_SOFTWARE_LIST_ADD("cart_list", "snspell")
11711172MACHINE_CONFIG_END
11721173
1174static MACHINE_CONFIG_DERIVED( snspellcuk, snspellc )
11731175
1176   /* sound hardware */
1177   MCFG_SOUND_REPLACE("tms5100", CD2801, MASTER_CLOCK) // CD2801A!
1178   MCFG_FRAGMENT_ADD(tms5110_route)
1179MACHINE_CONFIG_END
1180
1181
11741182static MACHINE_CONFIG_START( vocaid, tispeak_state )
11751183
11761184   /* basic machine hardware */
r252937r252938
15411549
15421550COMP( 1981, snspellc,   0,        0, snspellc,     snspellc,   tispeak_state, snspell,  "Texas Instruments", "Speak & Spell Compact (US, 1981 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
15431551COMP( 1982, snspellca,  snspellc, 0, snspellc,     snspellc,   tispeak_state, snspell,  "Texas Instruments", "Speak & Spell Compact (US, 1982 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
1544COMP( 1982, snspellcuk, snspellc, 0, snspellc,     snspellcuk, tispeak_state, snspell,  "Texas Instruments", "Speak & Write (UK)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
1552COMP( 1982, snspellcuk, snspellc, 0, snspellcuk,   snspellcuk, tispeak_state, snspell,  "Texas Instruments", "Speak & Write (UK)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
15451553
15461554COMP( 1986, snmath,     0,        0, snmath,       snmath,     driver_device, 0,        "Texas Instruments", "Speak & Math (US, 1986 version)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
15471555COMP( 1980, snmathp,    snmath,   0, snmath,       snmath,     driver_device, 0,        "Texas Instruments", "Speak & Math (US, 1980 version/patent)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )


Previous 199869 Revisions Next


© 1997-2024 The MAME Team