Previous 199869 Revisions Next

r35035 Saturday 14th February, 2015 at 17:48:58 UTC by hap
renamed generic leds_decay stuff to display_decay so it makes sense on vfd/lamp/lcd devices
[src/mess/drivers]cnsector.c comp4.c elecdet.c splitsec.c starwbc.c stopthie.c ticalc1x.c tispeak.c wildfire.c

trunk/src/mess/drivers/cnsector.c
r243546r243547
3838
3939   UINT16 m_o;
4040
41   UINT16 m_leds_state[0x10];
42   UINT16 m_leds_cache[0x10];
43   UINT8 m_leds_decay[0x100];
41   UINT16 m_display_state[0x10];
42   UINT16 m_display_cache[0x10];
43   UINT8 m_display_decay[0x100];
4444
4545   DECLARE_READ8_MEMBER(read_k);
4646   DECLARE_WRITE16_MEMBER(write_o);
4747   DECLARE_WRITE16_MEMBER(write_r);
4848
49   TIMER_DEVICE_CALLBACK_MEMBER(leds_decay_tick);
50   void leds_update();
49   TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
50   void display_update();
5151
5252   virtual void machine_start();
5353};
r243546r243547
5656
5757/***************************************************************************
5858
59  LEDs
59  LED Display
6060
6161***************************************************************************/
6262
r243546r243547
6464// To prevent flickering here, we need to simulate a decay.
6565
6666// decay time, in steps of 10ms
67#define LEDS_DECAY_TIME 4
67#define DISPLAY_DECAY_TIME 4
6868
69void cnsector_state::leds_update()
69void cnsector_state::display_update()
7070{
7171   UINT16 active_state[0x10];
7272
r243546r243547
7878      {
7979         int di = j << 4 | i;
8080
81         // turn on powered leds
82         if (m_leds_state[i] >> j & 1)
83            m_leds_decay[di] = LEDS_DECAY_TIME;
81         // turn on powered segments
82         if (m_display_state[i] >> j & 1)
83            m_display_decay[di] = DISPLAY_DECAY_TIME;
8484
8585         // determine active state
86         int ds = (m_leds_decay[di] != 0) ? 1 : 0;
86         int ds = (m_display_decay[di] != 0) ? 1 : 0;
8787         active_state[i] |= (ds << j);
8888      }
8989   }
9090
9191   // on difference, send to output
9292   for (int i = 0; i < 0x10; i++)
93      if (m_leds_cache[i] != active_state[i])
93      if (m_display_cache[i] != active_state[i])
9494         output_set_digit_value(i, active_state[i]);
9595
96   memcpy(m_leds_cache, active_state, sizeof(m_leds_cache));
96   memcpy(m_display_cache, active_state, sizeof(m_display_cache));
9797}
9898
99TIMER_DEVICE_CALLBACK_MEMBER(cnsector_state::leds_decay_tick)
99TIMER_DEVICE_CALLBACK_MEMBER(cnsector_state::display_decay_tick)
100100{
101   // slowly turn off unpowered leds
101   // slowly turn off unpowered segments
102102   for (int i = 0; i < 0x100; i++)
103      if (!(m_leds_state[i & 0xf] >> (i>>4) & 1) && m_leds_decay[i])
104         m_leds_decay[i]--;
103      if (!(m_display_state[i & 0xf] >> (i>>4) & 1) && m_display_decay[i])
104         m_display_decay[i]--;
105105
106   leds_update();
106   display_update();
107107}
108108
109109
r243546r243547
130130{
131131   // R0-R5: select digit (right-to-left)
132132   for (int i = 0; i < 6; i++)
133      m_leds_state[i] = (data >> i & 1) ? m_o : 0;
134   leds_update();
133      m_display_state[i] = (data >> i & 1) ? m_o : 0;
134   display_update();
135135
136136   // R6-R9: direction leds
137137   for (int i = 6; i < 10; i++)
r243546r243547
196196void cnsector_state::machine_start()
197197{
198198   // zerofill
199   memset(m_leds_state, 0, sizeof(m_leds_state));
200   memset(m_leds_cache, 0, sizeof(m_leds_cache));
201   memset(m_leds_decay, 0, sizeof(m_leds_decay));
199   memset(m_display_state, 0, sizeof(m_display_state));
200   memset(m_display_cache, 0, sizeof(m_display_cache));
201   memset(m_display_decay, 0, sizeof(m_display_decay));
202202
203203   m_o = 0;
204204
205205   // register for savestates
206   save_item(NAME(m_leds_state));
207   save_item(NAME(m_leds_cache));
208   save_item(NAME(m_leds_decay));
206   save_item(NAME(m_display_state));
207   save_item(NAME(m_display_cache));
208   save_item(NAME(m_display_decay));
209209
210210   save_item(NAME(m_o));
211211}
r243546r243547
219219   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(cnsector_state, write_o))
220220   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(cnsector_state, write_r))
221221
222   MCFG_TIMER_DRIVER_ADD_PERIODIC("leds_decay", cnsector_state, leds_decay_tick, attotime::from_msec(10))
222   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", cnsector_state, display_decay_tick, attotime::from_msec(10))
223223
224224   MCFG_DEFAULT_LAYOUT(layout_cnsector)
225225
trunk/src/mess/drivers/comp4.c
r243546r243547
4141
4242   UINT16 m_o;
4343
44   UINT16 m_leds_state;
45   UINT8 m_leds_decay[0x10];
44   UINT16 m_display_state;
45   UINT8 m_display_decay[0x10];
4646
4747   DECLARE_READ8_MEMBER(read_k);
4848   DECLARE_WRITE16_MEMBER(write_o);
4949   DECLARE_WRITE16_MEMBER(write_r);
5050
51   TIMER_DEVICE_CALLBACK_MEMBER(leds_decay_tick);
52   void leds_update();
51   TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
52   void display_update();
5353
5454   virtual void machine_start();
5555};
r243546r243547
5757
5858/***************************************************************************
5959
60  LEDs
60  LED Display
6161
6262***************************************************************************/
6363
r243546r243547
6565// To prevent flickering here, we need to simulate a decay.
6666
6767// decay time, in steps of 10ms
68#define LEDS_DECAY_TIME 2
68#define DISPLAY_DECAY_TIME 2
6969
70void comp4_state::leds_update()
70void comp4_state::display_update()
7171{
7272   for (int i = 0; i < 0x10; i++)
7373   {
74      // turn on powered leds
75      if (m_leds_state >> i & 1)
76         m_leds_decay[i] = LEDS_DECAY_TIME;
74      // turn on powered segments
75      if (m_display_state >> i & 1)
76         m_display_decay[i] = DISPLAY_DECAY_TIME;
7777
7878      // send to output
79      output_set_lamp_value(i, (m_leds_decay[i] != 0) ? 1 : 0);
79      output_set_lamp_value(i, (m_display_decay[i] != 0) ? 1 : 0);
8080   }
8181}
8282
83TIMER_DEVICE_CALLBACK_MEMBER(comp4_state::leds_decay_tick)
83TIMER_DEVICE_CALLBACK_MEMBER(comp4_state::display_decay_tick)
8484{
85   // slowly turn off unpowered leds
85   // slowly turn off unpowered segments
8686   for (int i = 0; i < 0x10; i++)
87      if (!(m_leds_state >> i & 1) && m_leds_decay[i])
88         m_leds_decay[i]--;
87      if (!(m_display_state >> i & 1) && m_display_decay[i])
88         m_display_decay[i]--;
8989
90   leds_update();
90   display_update();
9191}
9292
9393
r243546r243547
118118   // R2    R7
119119   // R1    R6
120120   // R0    R5
121   m_leds_state = data;
122   leds_update();
121   m_display_state = data;
122   display_update();
123123}
124124
125125WRITE16_MEMBER(comp4_state::write_o)
r243546r243547
169169void comp4_state::machine_start()
170170{
171171   // zerofill
172   m_leds_state = 0;
173   memset(m_leds_decay, 0, sizeof(m_leds_decay));
172   m_display_state = 0;
173   memset(m_display_decay, 0, sizeof(m_display_decay));
174174
175175   m_o = 0;
176176
177177   // register for savestates
178   save_item(NAME(m_leds_state));
179   save_item(NAME(m_leds_decay));
178   save_item(NAME(m_display_state));
179   save_item(NAME(m_display_decay));
180180
181181   save_item(NAME(m_o));
182182}
r243546r243547
190190   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(comp4_state, write_o))
191191   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(comp4_state, write_r))
192192
193   MCFG_TIMER_DRIVER_ADD_PERIODIC("leds_decay", comp4_state, leds_decay_tick, attotime::from_msec(10))
193   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", comp4_state, display_decay_tick, attotime::from_msec(10))
194194
195195   MCFG_DEFAULT_LAYOUT(layout_comp4)
196196
trunk/src/mess/drivers/elecdet.c
r243546r243547
4444   UINT16 m_o;
4545   bool m_power_on;
4646
47   UINT16 m_leds_state[0x10];
48   UINT16 m_leds_cache[0x10];
49   UINT8 m_leds_decay[0x100];
47   UINT16 m_display_state[0x10];
48   UINT16 m_display_cache[0x10];
49   UINT8 m_display_decay[0x100];
5050
5151   DECLARE_READ8_MEMBER(read_k);
5252   DECLARE_WRITE16_MEMBER(write_o);
r243546r243547
5555   DECLARE_INPUT_CHANGED_MEMBER(power_button);
5656   DECLARE_WRITE_LINE_MEMBER(auto_power_off);
5757
58   TIMER_DEVICE_CALLBACK_MEMBER(leds_decay_tick);
59   void leds_update();
58   TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
59   void display_update();
6060
6161   virtual void machine_reset();
6262   virtual void machine_start();
r243546r243547
6666
6767/***************************************************************************
6868
69  LEDs
69  LED Display
7070
7171***************************************************************************/
7272
r243546r243547
7474// To prevent flickering here, we need to simulate a decay.
7575
7676// decay time, in steps of 10ms
77#define LEDS_DECAY_TIME 4
77#define DISPLAY_DECAY_TIME 4
7878
79void elecdet_state::leds_update()
79void elecdet_state::display_update()
8080{
8181   UINT16 active_state[0x10];
8282
r243546r243547
8888      {
8989         int di = j << 4 | i;
9090
91         // turn on powered leds
92         if (m_power_on && m_leds_state[i] >> j & 1)
93            m_leds_decay[di] = LEDS_DECAY_TIME;
91         // turn on powered segments
92         if (m_power_on && m_display_state[i] >> j & 1)
93            m_display_decay[di] = DISPLAY_DECAY_TIME;
9494
9595         // determine active state
96         int ds = (m_leds_decay[di] != 0) ? 1 : 0;
96         int ds = (m_display_decay[di] != 0) ? 1 : 0;
9797         active_state[i] |= (ds << j);
9898      }
9999   }
100100
101101   // on difference, send to output
102102   for (int i = 0; i < 0x10; i++)
103      if (m_leds_cache[i] != active_state[i])
103      if (m_display_cache[i] != active_state[i])
104104         output_set_digit_value(i, active_state[i]);
105105
106   memcpy(m_leds_cache, active_state, sizeof(m_leds_cache));
106   memcpy(m_display_cache, active_state, sizeof(m_display_cache));
107107}
108108
109TIMER_DEVICE_CALLBACK_MEMBER(elecdet_state::leds_decay_tick)
109TIMER_DEVICE_CALLBACK_MEMBER(elecdet_state::display_decay_tick)
110110{
111   // slowly turn off unpowered leds
111   // slowly turn off unpowered segments
112112   for (int i = 0; i < 0x100; i++)
113      if (!(m_leds_state[i & 0xf] >> (i>>4) & 1) && m_leds_decay[i])
114         m_leds_decay[i]--;
113      if (!(m_display_state[i & 0xf] >> (i>>4) & 1) && m_display_decay[i])
114         m_display_decay[i]--;
115115
116   leds_update();
116   display_update();
117117}
118118
119119
r243546r243547
145145   // R0-R6: select digit
146146   UINT8 o = BITSWAP8(m_o,7,5,2,1,4,0,6,3) & 0x7f;
147147   for (int i = 0; i < 7; i++)
148      m_leds_state[i] = (data >> i & 1) ? o : 0;
148      m_display_state[i] = (data >> i & 1) ? o : 0;
149149
150   leds_update();
150   display_update();
151151
152152   // R7,R8: speaker on
153153   m_speaker->level_w((data & 0x180 && m_o & 0x80) ? 1 : 0);
r243546r243547
249249void elecdet_state::machine_start()
250250{
251251   // zerofill
252   memset(m_leds_state, 0, sizeof(m_leds_state));
253   memset(m_leds_cache, 0, sizeof(m_leds_cache));
254   memset(m_leds_decay, 0, sizeof(m_leds_decay));
252   memset(m_display_state, 0, sizeof(m_display_state));
253   memset(m_display_cache, 0, sizeof(m_display_cache));
254   memset(m_display_decay, 0, sizeof(m_display_decay));
255255
256256   m_o = 0;
257257   m_power_on = false;
258258
259259   // register for savestates
260   save_item(NAME(m_leds_state));
261   save_item(NAME(m_leds_cache));
262   save_item(NAME(m_leds_decay));
260   save_item(NAME(m_display_state));
261   save_item(NAME(m_display_cache));
262   save_item(NAME(m_display_decay));
263263
264264   save_item(NAME(m_o));
265265   save_item(NAME(m_power_on));
r243546r243547
275275   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(elecdet_state, write_r))
276276   MCFG_TMS1XXX_POWER_OFF_CB(WRITELINE(elecdet_state, auto_power_off))
277277
278   MCFG_TIMER_DRIVER_ADD_PERIODIC("leds_decay", elecdet_state, leds_decay_tick, attotime::from_msec(10))
278   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", elecdet_state, display_decay_tick, attotime::from_msec(10))
279279
280280   MCFG_DEFAULT_LAYOUT(layout_elecdet)
281281
trunk/src/mess/drivers/splitsec.c
r243546r243547
7272   UINT16 m_r;
7373   UINT16 m_o;
7474
75   UINT16 m_leds_state[0x10];
76   UINT16 m_leds_cache[0x10];
77   UINT8 m_leds_decay[0x100];
75   UINT16 m_display_state[0x10];
76   UINT16 m_display_cache[0x10];
77   UINT8 m_display_decay[0x100];
7878
7979   DECLARE_READ8_MEMBER(read_k);
8080   DECLARE_WRITE16_MEMBER(write_o);
8181   DECLARE_WRITE16_MEMBER(splitsec_write_r);
8282   DECLARE_WRITE16_MEMBER(bankshot_write_r);
8383
84   TIMER_DEVICE_CALLBACK_MEMBER(leds_decay_tick);
85   void leds_update();
84   TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
85   void display_update();
8686
8787   virtual void machine_start();
8888};
r243546r243547
9191
9292/***************************************************************************
9393
94  LEDs
94  LED Display
9595
9696***************************************************************************/
9797
r243546r243547
9999// To prevent flickering here, we need to simulate a decay.
100100
101101// decay time, in steps of 10ms
102#define LEDS_DECAY_TIME 4
102#define DISPLAY_DECAY_TIME 4
103103
104104/* display layout, where number xy is lamp R(x),O(y)
105105
r243546r243547
122122
123123*/
124124
125void splitsec_state::leds_update()
125void splitsec_state::display_update()
126126{
127127   UINT16 active_state[0x10];
128128
129129   for (int i = 0; i < 0x10; i++)
130130   {
131131      // update current state
132      m_leds_state[i] = (m_r >> i & 1) ? m_o : 0;
132      m_display_state[i] = (m_r >> i & 1) ? m_o : 0;
133133
134134      active_state[i] = 0;
135135
r243546r243547
137137      {
138138         int di = j << 4 | i;
139139
140         // turn on powered leds
141         if (m_leds_state[i] >> j & 1)
142            m_leds_decay[di] = LEDS_DECAY_TIME;
140         // turn on powered segments
141         if (m_display_state[i] >> j & 1)
142            m_display_decay[di] = DISPLAY_DECAY_TIME;
143143
144144         // determine active state
145         int ds = (m_leds_decay[di] != 0) ? 1 : 0;
145         int ds = (m_display_decay[di] != 0) ? 1 : 0;
146146         active_state[i] |= (ds << j);
147147      }
148148   }
149149
150150   // on difference, send to output
151151   for (int i = 0; i < 0x10; i++)
152      if (m_leds_cache[i] != active_state[i])
152      if (m_display_cache[i] != active_state[i])
153153      {
154154         for (int j = 0; j < 8; j++)
155155            output_set_lamp_value(i*10 + j, active_state[i] >> j & 1);
156156      }
157157
158   memcpy(m_leds_cache, active_state, sizeof(m_leds_cache));
158   memcpy(m_display_cache, active_state, sizeof(m_display_cache));
159159}
160160
161TIMER_DEVICE_CALLBACK_MEMBER(splitsec_state::leds_decay_tick)
161TIMER_DEVICE_CALLBACK_MEMBER(splitsec_state::display_decay_tick)
162162{
163   // slowly turn off unpowered leds
163   // slowly turn off unpowered segments
164164   for (int i = 0; i < 0x100; i++)
165      if (!(m_leds_state[i & 0xf] >> (i>>4) & 1) && m_leds_decay[i])
166         m_leds_decay[i]--;
165      if (!(m_display_state[i & 0xf] >> (i>>4) & 1) && m_display_decay[i])
166         m_display_decay[i]--;
167167
168   leds_update();
168   display_update();
169169}
170170
171171
r243546r243547
193193   // O0-O6: led rows
194194   // O7: N/C
195195   m_o = data;
196   leds_update();
196   display_update();
197197}
198198
199199WRITE16_MEMBER(splitsec_state::splitsec_write_r)
r243546r243547
206206   
207207   // R0-R7: led columns
208208   m_r = data & 0xff;
209   leds_update();
209   display_update();
210210}
211211
212212WRITE16_MEMBER(splitsec_state::bankshot_write_r)
r243546r243547
219219   
220220   // R2-R10: led columns
221221   m_r = data & ~3;
222   leds_update();
222   display_update();
223223}
224224
225225
r243546r243547
281281void splitsec_state::machine_start()
282282{
283283   // zerofill
284   memset(m_leds_state, 0, sizeof(m_leds_state));
285   memset(m_leds_cache, 0, sizeof(m_leds_cache));
286   memset(m_leds_decay, 0, sizeof(m_leds_decay));
284   memset(m_display_state, 0, sizeof(m_display_state));
285   memset(m_display_cache, 0, sizeof(m_display_cache));
286   memset(m_display_decay, 0, sizeof(m_display_decay));
287287
288288   m_input_mux = 0;
289289   m_r = 0;
290290   m_o = 0;
291291
292292   // register for savestates
293   save_item(NAME(m_leds_state));
294   save_item(NAME(m_leds_cache));
295   save_item(NAME(m_leds_decay));
293   save_item(NAME(m_display_state));
294   save_item(NAME(m_display_cache));
295   save_item(NAME(m_display_decay));
296296
297297   save_item(NAME(m_input_mux));
298298   save_item(NAME(m_r));
r243546r243547
308308   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(splitsec_state, write_o))
309309   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(splitsec_state, splitsec_write_r))
310310
311   MCFG_TIMER_DRIVER_ADD_PERIODIC("leds_decay", splitsec_state, leds_decay_tick, attotime::from_msec(10))
311   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", splitsec_state, display_decay_tick, attotime::from_msec(10))
312312
313313   MCFG_DEFAULT_LAYOUT(layout_splitsec)
314314
trunk/src/mess/drivers/starwbc.c
r243546r243547
3939   UINT16 m_r;
4040   UINT16 m_o;
4141
42   UINT16 m_leds_state[0x10];
43   UINT16 m_leds_cache[0x10];
44   UINT8 m_leds_decay[0x100];
42   UINT16 m_display_state[0x10];
43   UINT16 m_display_cache[0x10];
44   UINT8 m_display_decay[0x100];
4545
4646   DECLARE_READ8_MEMBER(read_k);
4747   DECLARE_WRITE16_MEMBER(write_o);
4848   DECLARE_WRITE16_MEMBER(write_r);
4949
50   TIMER_DEVICE_CALLBACK_MEMBER(leds_decay_tick);
51   void leds_update();
50   TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
51   void display_update();
5252   void prepare_and_update();
5353
5454   virtual void machine_start();
r243546r243547
5858
5959/***************************************************************************
6060
61  LEDs
61  LED Display
6262
6363***************************************************************************/
6464
r243546r243547
6666// To prevent flickering here, we need to simulate a decay.
6767
6868// decay time, in steps of 10ms
69#define LEDS_DECAY_TIME 4
69#define DISPLAY_DECAY_TIME 4
7070
71void starwbc_state::leds_update()
71void starwbc_state::display_update()
7272{
7373   UINT16 active_state[0x10];
7474
r243546r243547
8080      {
8181         int di = j << 4 | i;
8282
83         // turn on powered leds
84         if (m_leds_state[i] >> j & 1)
85            m_leds_decay[di] = LEDS_DECAY_TIME;
83         // turn on powered segments
84         if (m_display_state[i] >> j & 1)
85            m_display_decay[di] = DISPLAY_DECAY_TIME;
8686
8787         // determine active state
88         int ds = (m_leds_decay[di] != 0) ? 1 : 0;
88         int ds = (m_display_decay[di] != 0) ? 1 : 0;
8989         active_state[i] |= (ds << j);
9090      }
9191   }
9292
9393   // on difference, send to output
9494   for (int i = 0; i < 0x10; i++)
95      if (m_leds_cache[i] != active_state[i])
95      if (m_display_cache[i] != active_state[i])
9696      {
9797         output_set_digit_value(i, active_state[i]);
9898
r243546r243547
100100            output_set_lamp_value(i*10 + j, active_state[i] >> j & 1);
101101      }
102102
103   memcpy(m_leds_cache, active_state, sizeof(m_leds_cache));
103   memcpy(m_display_cache, active_state, sizeof(m_display_cache));
104104}
105105
106TIMER_DEVICE_CALLBACK_MEMBER(starwbc_state::leds_decay_tick)
106TIMER_DEVICE_CALLBACK_MEMBER(starwbc_state::display_decay_tick)
107107{
108   // slowly turn off unpowered leds
108   // slowly turn off unpowered segments
109109   for (int i = 0; i < 0x100; i++)
110      if (!(m_leds_state[i & 0xf] >> (i>>4) & 1) && m_leds_decay[i])
111         m_leds_decay[i]--;
110      if (!(m_display_state[i & 0xf] >> (i>>4) & 1) && m_display_decay[i])
111         m_display_decay[i]--;
112112
113   leds_update();
113   display_update();
114114}
115115
116116void starwbc_state::prepare_and_update()
r243546r243547
120120
121121   // R0,R2,R4,R6,R8
122122   for (int i = 0; i < 5; i++)
123      m_leds_state[i*2] = (m_r >> (i*2) & 1) ? (o & mask[i]) : 0;
123      m_display_state[i*2] = (m_r >> (i*2) & 1) ? (o & mask[i]) : 0;
124124
125   leds_update();
125   display_update();
126126}
127127
128128
r243546r243547
227227void starwbc_state::machine_start()
228228{
229229   // zerofill
230   memset(m_leds_state, 0, sizeof(m_leds_state));
231   memset(m_leds_cache, 0, sizeof(m_leds_cache));
232   memset(m_leds_decay, 0, sizeof(m_leds_decay));
230   memset(m_display_state, 0, sizeof(m_display_state));
231   memset(m_display_cache, 0, sizeof(m_display_cache));
232   memset(m_display_decay, 0, sizeof(m_display_decay));
233233
234234   m_r = 0;
235235   m_o = 0;
236236
237237   // register for savestates
238   save_item(NAME(m_leds_state));
239   save_item(NAME(m_leds_cache));
240   save_item(NAME(m_leds_decay));
238   save_item(NAME(m_display_state));
239   save_item(NAME(m_display_cache));
240   save_item(NAME(m_display_decay));
241241
242242   save_item(NAME(m_r));
243243   save_item(NAME(m_o));
r243546r243547
252252   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(starwbc_state, write_o))
253253   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(starwbc_state, write_r))
254254
255   MCFG_TIMER_DRIVER_ADD_PERIODIC("leds_decay", starwbc_state, leds_decay_tick, attotime::from_msec(10))
255   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", starwbc_state, display_decay_tick, attotime::from_msec(10))
256256
257257   MCFG_DEFAULT_LAYOUT(layout_starwbc)
258258
trunk/src/mess/drivers/stopthie.c
r243546r243547
4343   UINT16 m_o;
4444   bool m_power_on;
4545
46   UINT16 m_leds_state[0x10];
47   UINT16 m_leds_cache[0x10];
48   UINT8 m_leds_decay[0x100];
46   UINT16 m_display_state[0x10];
47   UINT16 m_display_cache[0x10];
48   UINT8 m_display_decay[0x100];
4949
5050   DECLARE_READ8_MEMBER(read_k);
5151   DECLARE_WRITE16_MEMBER(write_o);
r243546r243547
5454   DECLARE_INPUT_CHANGED_MEMBER(power_button);
5555   DECLARE_WRITE_LINE_MEMBER(auto_power_off);
5656
57   TIMER_DEVICE_CALLBACK_MEMBER(leds_decay_tick);
58   void leds_update();
57   TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
58   void display_update();
5959
6060   virtual void machine_reset();
6161   virtual void machine_start();
r243546r243547
6565
6666/***************************************************************************
6767
68  LEDs
68  LED Display
6969
7070***************************************************************************/
7171
r243546r243547
7373// To prevent flickering here, we need to simulate a decay.
7474
7575// decay time, in steps of 10ms
76#define LEDS_DECAY_TIME 4
76#define DISPLAY_DECAY_TIME 4
7777
78void stopthief_state::leds_update()
78void stopthief_state::display_update()
7979{
8080   UINT16 active_state[0x10];
8181
r243546r243547
8787      {
8888         int di = j << 4 | i;
8989
90         // turn on powered leds
91         if (m_power_on && m_leds_state[i] >> j & 1)
92            m_leds_decay[di] = LEDS_DECAY_TIME;
90         // turn on powered segments
91         if (m_power_on && m_display_state[i] >> j & 1)
92            m_display_decay[di] = DISPLAY_DECAY_TIME;
9393
9494         // determine active state
95         int ds = (m_leds_decay[di] != 0) ? 1 : 0;
95         int ds = (m_display_decay[di] != 0) ? 1 : 0;
9696         active_state[i] |= (ds << j);
9797      }
9898   }
9999
100100   // on difference, send to output
101101   for (int i = 0; i < 0x10; i++)
102      if (m_leds_cache[i] != active_state[i])
102      if (m_display_cache[i] != active_state[i])
103103         output_set_digit_value(i, active_state[i]);
104104
105   memcpy(m_leds_cache, active_state, sizeof(m_leds_cache));
105   memcpy(m_display_cache, active_state, sizeof(m_display_cache));
106106}
107107
108TIMER_DEVICE_CALLBACK_MEMBER(stopthief_state::leds_decay_tick)
108TIMER_DEVICE_CALLBACK_MEMBER(stopthief_state::display_decay_tick)
109109{
110   // slowly turn off unpowered leds
110   // slowly turn off unpowered segments
111111   for (int i = 0; i < 0x100; i++)
112      if (!(m_leds_state[i & 0xf] >> (i>>4) & 1) && m_leds_decay[i])
113         m_leds_decay[i]--;
112      if (!(m_display_state[i & 0xf] >> (i>>4) & 1) && m_display_decay[i])
113         m_display_decay[i]--;
114114
115   leds_update();
115   display_update();
116116}
117117
118118
r243546r243547
144144   // R0-R2: select digit
145145   UINT8 o = BITSWAP8(m_o,3,5,2,1,4,0,6,7) & 0x7f;
146146   for (int i = 0; i < 3; i++)
147      m_leds_state[i] = (data >> i & 1) ? o : 0;
147      m_display_state[i] = (data >> i & 1) ? o : 0;
148148
149   leds_update();
149   display_update();
150150
151151   // R3-R8: speaker on
152152   m_speaker->level_w((data & 0x1f8 && m_o & 8) ? 1 : 0);
r243546r243547
234234void stopthief_state::machine_start()
235235{
236236   // zerofill
237   memset(m_leds_state, 0, sizeof(m_leds_state));
238   memset(m_leds_cache, 0, sizeof(m_leds_cache));
239   memset(m_leds_decay, 0, sizeof(m_leds_decay));
237   memset(m_display_state, 0, sizeof(m_display_state));
238   memset(m_display_cache, 0, sizeof(m_display_cache));
239   memset(m_display_decay, 0, sizeof(m_display_decay));
240240
241241   m_o = 0;
242242   m_power_on = false;
243243
244244   // register for savestates
245   save_item(NAME(m_leds_state));
246   save_item(NAME(m_leds_cache));
247   save_item(NAME(m_leds_decay));
245   save_item(NAME(m_display_state));
246   save_item(NAME(m_display_cache));
247   save_item(NAME(m_display_decay));
248248
249249   save_item(NAME(m_o));
250250   save_item(NAME(m_power_on));
r243546r243547
260260   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(stopthief_state, write_r))
261261   MCFG_TMS1XXX_POWER_OFF_CB(WRITELINE(stopthief_state, auto_power_off))
262262
263   MCFG_TIMER_DRIVER_ADD_PERIODIC("leds_decay", stopthief_state, leds_decay_tick, attotime::from_msec(10))
263   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", stopthief_state, display_decay_tick, attotime::from_msec(10))
264264
265265   MCFG_DEFAULT_LAYOUT(layout_stopthie)
266266
trunk/src/mess/drivers/ticalc1x.c
r243546r243547
3737   UINT16 m_o;
3838   bool m_power_on;
3939
40   UINT16 m_leds_state[0x10];
41   UINT16 m_leds_cache[0x10];
42   UINT8 m_leds_decay[0x100];
40   UINT16 m_display_state[0x10];
41   UINT16 m_display_cache[0x10];
42   UINT8 m_display_decay[0x100];
4343
4444   DECLARE_READ8_MEMBER(tisr16_read_k);
4545   DECLARE_WRITE16_MEMBER(tisr16_write_o);
4646   DECLARE_WRITE16_MEMBER(tisr16_write_r);
47   void tisr16_leds_update();
47   void tisr16_display_update();
4848
4949   DECLARE_READ8_MEMBER(ti1270_read_k);
5050   DECLARE_WRITE16_MEMBER(ti1270_write_o);
r243546r243547
6161   DECLARE_INPUT_CHANGED_MEMBER(power_button);
6262   DECLARE_WRITE_LINE_MEMBER(auto_power_off);
6363
64   TIMER_DEVICE_CALLBACK_MEMBER(leds_decay_tick);
65   void leds_update();
64   TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
65   void display_update();
6666
6767   virtual void machine_reset();
6868   virtual void machine_start();
r243546r243547
7272
7373/***************************************************************************
7474
75  LEDs
75  LED Display
7676
7777***************************************************************************/
7878
r243546r243547
8080// To prevent flickering here, we need to simulate a decay.
8181
8282// decay time, in steps of 10ms
83#define LEDS_DECAY_TIME 5
83#define DISPLAY_DECAY_TIME 5
8484
85void ticalc1x_state::leds_update()
85void ticalc1x_state::display_update()
8686{
8787   UINT16 active_state[0x10];
8888
r243546r243547
9494      {
9595         int di = j << 4 | i;
9696
97         // turn on powered leds
98         if (m_power_on && m_leds_state[i] >> j & 1)
99            m_leds_decay[di] = LEDS_DECAY_TIME;
97         // turn on powered segments
98         if (m_power_on && m_display_state[i] >> j & 1)
99            m_display_decay[di] = DISPLAY_DECAY_TIME;
100100
101101         // determine active state
102         int ds = (m_leds_decay[di] != 0) ? 1 : 0;
102         int ds = (m_display_decay[di] != 0) ? 1 : 0;
103103         active_state[i] |= (ds << j);
104104      }
105105   }
106106
107107   // on difference, send to output
108108   for (int i = 0; i < 0x10; i++)
109      if (m_leds_cache[i] != active_state[i])
109      if (m_display_cache[i] != active_state[i])
110110      {
111111         output_set_digit_value(i, active_state[i]);
112112
r243546r243547
114114            output_set_lamp_value(i*10 + j, active_state[i] >> j & 1);
115115      }
116116
117   memcpy(m_leds_cache, active_state, sizeof(m_leds_cache));
117   memcpy(m_display_cache, active_state, sizeof(m_display_cache));
118118}
119119
120TIMER_DEVICE_CALLBACK_MEMBER(ticalc1x_state::leds_decay_tick)
120TIMER_DEVICE_CALLBACK_MEMBER(ticalc1x_state::display_decay_tick)
121121{
122   // slowly turn off unpowered leds
122   // slowly turn off unpowered segments
123123   for (int i = 0; i < 0x100; i++)
124      if (!(m_leds_state[i & 0xf] >> (i>>4) & 1) && m_leds_decay[i])
125         m_leds_decay[i]--;
124      if (!(m_display_state[i & 0xf] >> (i>>4) & 1) && m_display_decay[i])
125         m_display_decay[i]--;
126126
127   leds_update();
127   display_update();
128128}
129129
130130
r243546r243547
137137
138138// SR-16: TMS1000 MCU labeled TMS1001NL. die labeled 1001A
139139
140void ticalc1x_state::tisr16_leds_update()
140void ticalc1x_state::tisr16_display_update()
141141{
142142   // update leds state
143143   for (int i = 0; i < 11; i++)
144144      if (m_r >> i & 1)
145         m_leds_state[i] = m_o;
145         m_display_state[i] = m_o;
146146
147147   // exponent sign (not 100% sure this is correct)
148   m_leds_state[11] = (m_leds_state[0] | m_leds_state[1]) ? 0x40 : 0;
148   m_display_state[11] = (m_display_state[0] | m_display_state[1]) ? 0x40 : 0;
149149
150150   // send to output
151151   for (int i = 0; i < 12; i++)
152      output_set_digit_value(i, m_leds_state[i]);
152      output_set_digit_value(i, m_display_state[i]);
153153}
154154
155155READ8_MEMBER(ticalc1x_state::tisr16_read_k)
r243546r243547
170170   // R0-R10: select digit (right-to-left)
171171   m_r = data;
172172
173   tisr16_leds_update();
173   tisr16_display_update();
174174}
175175
176176WRITE16_MEMBER(ticalc1x_state::tisr16_write_o)
r243546r243547
178178   // O0-O7: digit segments
179179   m_o = data;
180180
181   tisr16_leds_update();
181   tisr16_display_update();
182182}
183183
184184
r243546r243547
200200{
201201   // R0-R7: select digit (right-to-left)
202202   for (int i = 0; i < 8; i++)
203      m_leds_state[i] = (data >> i & 1) ? m_o : 0;
203      m_display_state[i] = (data >> i & 1) ? m_o : 0;
204204
205   leds_update();
205   display_update();
206206}
207207
208208WRITE16_MEMBER(ticalc1x_state::ti1270_write_o)
r243546r243547
232232   // R0-R8: select digit (right-to-left)
233233   // note: 3rd digit is custom(not 7seg), for math symbols
234234   for (int i = 0; i < 9; i++)
235      m_leds_state[i] = (data >> i & 1) ? m_o : 0;
235      m_display_state[i] = (data >> i & 1) ? m_o : 0;
236236
237237   // 6th digit only has A and G for =
238   m_leds_state[3] &= 0x41;
238   m_display_state[3] &= 0x41;
239239
240   leds_update();
240   display_update();
241241}
242242
243243WRITE16_MEMBER(ticalc1x_state::wizatron_write_o)
r243546r243547
271271   // R0-R8: select digit
272272   UINT8 o = BITSWAP8(m_o,7,5,2,1,4,0,6,3);
273273   for (int i = 0; i < 9; i++)
274      m_leds_state[i] = (data >> i & 1) ? o : 0;
274      m_display_state[i] = (data >> i & 1) ? o : 0;
275275
276276   // 1st digit only has segments B,F,G,DP
277   m_leds_state[0] &= 0xe2;
277   m_display_state[0] &= 0xe2;
278278
279   leds_update();
279   display_update();
280280}
281281
282282WRITE16_MEMBER(ticalc1x_state::ti30_write_o)
r243546r243547
654654void ticalc1x_state::machine_start()
655655{
656656   // zerofill
657   memset(m_leds_state, 0, sizeof(m_leds_state));
658   memset(m_leds_cache, 0, sizeof(m_leds_cache));
659   memset(m_leds_decay, 0, sizeof(m_leds_decay));
657   memset(m_display_state, 0, sizeof(m_display_state));
658   memset(m_display_cache, 0, sizeof(m_display_cache));
659   memset(m_display_decay, 0, sizeof(m_display_decay));
660660
661661   m_r = 0;
662662   m_o = 0;
663663   m_power_on = false;
664664
665665   // register for savestates
666   save_item(NAME(m_leds_state));
667   save_item(NAME(m_leds_cache));
668   save_item(NAME(m_leds_decay));
666   save_item(NAME(m_display_state));
667   save_item(NAME(m_display_cache));
668   save_item(NAME(m_display_decay));
669669
670670   save_item(NAME(m_r));
671671   save_item(NAME(m_o));
r243546r243547
688688static MACHINE_CONFIG_START( t9base, ticalc1x_state )
689689
690690   /* basic machine hardware */
691   MCFG_TIMER_DRIVER_ADD_PERIODIC("leds_decay", ticalc1x_state, leds_decay_tick, attotime::from_msec(10))
691   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", ticalc1x_state, display_decay_tick, attotime::from_msec(10))
692692
693693   /* no video! */
694694
trunk/src/mess/drivers/tispeak.c
r243546r243547
5454   UINT16 m_o;
5555   int m_power_on;
5656
57   UINT16 m_leds_state[0x10];
58   UINT16 m_leds_cache[0x10];
59   UINT8 m_leds_decay[0x100];
60   void leds_update();
61   TIMER_DEVICE_CALLBACK_MEMBER(leds_decay_tick);
57   UINT16 m_display_state[0x10];
58   UINT16 m_display_cache[0x10];
59   UINT8 m_display_decay[0x100];
60   void display_update();
61   TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
6262
6363   UINT32 m_cart_max_size;
6464   UINT8* m_cart_base;
r243546r243547
128128// To prevent flickering here, we need to simulate a decay.
129129
130130// decay time, in steps of 10ms
131#define LEDS_DECAY_TIME 4
131#define DISPLAY_DECAY_TIME 4
132132
133void tispeak_state::leds_update()
133void tispeak_state::display_update()
134134{
135135   int filament_on = (m_r & 0x8000) ? 1 : 0;
136136   UINT16 active_state[0x10];
r243546r243547
138138   for (int i = 0; i < 0x10; i++)
139139   {
140140      // update current state
141      m_leds_state[i] = (m_r >> i & 1) ? m_o : 0;
141      m_display_state[i] = (m_r >> i & 1) ? m_o : 0;
142142
143143      active_state[i] = 0;
144144
r243546r243547
146146      {
147147         int di = j << 4 | i;
148148
149         // turn on powered leds
150         if (m_power_on && filament_on && m_leds_state[i] >> j & 1)
151            m_leds_decay[di] = LEDS_DECAY_TIME;
149         // turn on powered segments
150         if (m_power_on && filament_on && m_display_state[i] >> j & 1)
151            m_display_decay[di] = DISPLAY_DECAY_TIME;
152152
153153         // determine active state
154         int ds = (m_leds_decay[di] != 0) ? 1 : 0;
154         int ds = (m_display_decay[di] != 0) ? 1 : 0;
155155         active_state[i] |= (ds << j);
156156      }
157157   }
158158
159159   // on difference, send to output
160160   for (int i = 0; i < 0x10; i++)
161      if (m_leds_cache[i] != active_state[i])
161      if (m_display_cache[i] != active_state[i])
162162      {
163163         output_set_digit_value(i, active_state[i] & 0x3fff);
164164
r243546r243547
166166            output_set_lamp_value(i*0x10 + j, active_state[i] >> j & 1);
167167      }
168168
169   memcpy(m_leds_cache, active_state, sizeof(m_leds_cache));
169   memcpy(m_display_cache, active_state, sizeof(m_display_cache));
170170}
171171
172TIMER_DEVICE_CALLBACK_MEMBER(tispeak_state::leds_decay_tick)
172TIMER_DEVICE_CALLBACK_MEMBER(tispeak_state::display_decay_tick)
173173{
174   // slowly turn off unpowered leds
174   // slowly turn off unpowered segments
175175   for (int i = 0; i < 0x100; i++)
176      if (!(m_leds_state[i & 0xf] >> (i>>4) & 1) && m_leds_decay[i])
177         m_leds_decay[i]--;
176      if (!(m_display_state[i & 0xf] >> (i>>4) & 1) && m_display_decay[i])
177         m_display_decay[i]--;
178178
179   leds_update();
179   display_update();
180180}
181181
182182
r243546r243547
212212
213213   // other bits: MCU internal use
214214   m_r = data;
215   leds_update();
215   display_update();
216216}
217217
218218WRITE16_MEMBER(tispeak_state::snspell_write_o)
r243546r243547
221221   // E,D,C,G,B,A,I,M,L,K,N,J,[AP],H,F,[DP] (sidenote: TI KLMN = MAME MLNK)
222222   m_o = BITSWAP16(data,12,15,10,7,8,9,11,6,13,3,14,0,1,2,4,5);
223223
224   leds_update();
224   display_update();
225225}
226226
227227
r243546r243547
243243   // [DP],D,C,H,F,B,I,M,L,K,N,J,[AP],E,G,A (sidenote: TI KLMN = MAME MLNK)
244244   m_o = BITSWAP16(data,12,0,10,7,8,9,11,6,3,14,4,13,1,2,5,15);
245245
246   leds_update();
246   display_update();
247247}
248248
249249
r243546r243547
253253{
254254   // same as default, except R13 is used for an extra digit
255255   m_r = data;
256   leds_update();
256   display_update();
257257}
258258
259259
r243546r243547
442442void tispeak_state::machine_start()
443443{
444444   // zerofill
445   memset(m_leds_state, 0, sizeof(m_leds_state));
446   memset(m_leds_cache, 0, sizeof(m_leds_cache));
447   memset(m_leds_decay, 0, sizeof(m_leds_decay));
445   memset(m_display_state, 0, sizeof(m_display_state));
446   memset(m_display_cache, 0, sizeof(m_display_cache));
447   memset(m_display_decay, 0, sizeof(m_display_decay));
448448
449449   m_r = 0;
450450   m_o = 0;
451451   m_power_on = 0;
452452
453453   // register for savestates
454   save_item(NAME(m_leds_state));
455   save_item(NAME(m_leds_cache));
456   save_item(NAME(m_leds_decay));
454   save_item(NAME(m_display_state));
455   save_item(NAME(m_display_cache));
456   save_item(NAME(m_display_decay));
457457
458458   save_item(NAME(m_r));
459459   save_item(NAME(m_o));
r243546r243547
482482   MCFG_TMS0270_WRITE_CTL_CB(DEVWRITE8("tms5100", tms5100_device, ctl_w))
483483   MCFG_TMS0270_WRITE_PDC_CB(DEVWRITELINE("tms5100", tms5100_device, pdc_w))
484484
485   MCFG_TIMER_DRIVER_ADD_PERIODIC("leds_decay", tispeak_state, leds_decay_tick, attotime::from_msec(10))
485   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", tispeak_state, display_decay_tick, attotime::from_msec(10))
486486   MCFG_DEFAULT_LAYOUT(layout_snspell) // max 9 digits
487487
488488   /* no video! */
trunk/src/mess/drivers/wildfire.c
r243546r243547
4646   UINT8 m_d;
4747   UINT16 m_a;
4848
49   UINT16 m_leds_state[0x10];
50   UINT16 m_leds_cache[0x10];
51   UINT8 m_leds_decay[0x100];
49   UINT16 m_display_state[0x10];
50   UINT16 m_display_cache[0x10];
51   UINT8 m_display_decay[0x100];
5252
5353   DECLARE_READ8_MEMBER(read_k);
5454   DECLARE_WRITE8_MEMBER(write_d);
5555   DECLARE_WRITE16_MEMBER(write_a);
5656
57   TIMER_DEVICE_CALLBACK_MEMBER(leds_decay_tick);
58   void leds_update();
57   TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
58   void display_update();
5959   bool index_is_7segled(int index);
6060
6161   virtual void machine_start();
r243546r243547
6565
6666/***************************************************************************
6767
68  LEDs
68  LED Display
6969
7070***************************************************************************/
7171
r243546r243547
7373// To prevent flickering here, we need to simulate a decay.
7474
7575// decay time, in steps of 10ms
76#define LEDS_DECAY_TIME 4
76#define DISPLAY_DECAY_TIME 4
7777
7878inline bool wildfire_state::index_is_7segled(int index)
7979{
r243546r243547
8181   return (index < 3);
8282}
8383
84void wildfire_state::leds_update()
84void wildfire_state::display_update()
8585{
8686   UINT16 active_state[0x10];
8787
8888   for (int i = 0; i < 0x10; i++)
8989   {
9090      // update current state
91      m_leds_state[i] = (~m_a >> i & 1) ? m_d : 0;
91      m_display_state[i] = (~m_a >> i & 1) ? m_d : 0;
9292
9393      active_state[i] = 0;
9494
r243546r243547
9696      {
9797         int di = j << 4 | i;
9898
99         // turn on powered leds
100         if (m_leds_state[i] >> j & 1)
101            m_leds_decay[di] = LEDS_DECAY_TIME;
99         // turn on powered segments
100         if (m_display_state[i] >> j & 1)
101            m_display_decay[di] = DISPLAY_DECAY_TIME;
102102
103103         // determine active state
104         int ds = (m_leds_decay[di] != 0) ? 1 : 0;
104         int ds = (m_display_decay[di] != 0) ? 1 : 0;
105105         active_state[i] |= (ds << j);
106106      }
107107   }
108108
109109   // on difference, send to output
110110   for (int i = 0; i < 0x10; i++)
111      if (m_leds_cache[i] != active_state[i])
111      if (m_display_cache[i] != active_state[i])
112112      {
113113         if (index_is_7segled(i))
114114            output_set_digit_value(i, BITSWAP8(active_state[i],7,0,1,2,3,4,5,6) & 0x7f);
r243546r243547
117117            output_set_lamp_value(i*10 + j, active_state[i] >> j & 1);
118118      }
119119
120   memcpy(m_leds_cache, active_state, sizeof(m_leds_cache));
120   memcpy(m_display_cache, active_state, sizeof(m_display_cache));
121121}
122122
123TIMER_DEVICE_CALLBACK_MEMBER(wildfire_state::leds_decay_tick)
123TIMER_DEVICE_CALLBACK_MEMBER(wildfire_state::display_decay_tick)
124124{
125   // slowly turn off unpowered leds
125   // slowly turn off unpowered segments
126126   for (int i = 0; i < 0x100; i++)
127      if (!(m_leds_state[i & 0xf] >> (i>>4) & 1) && m_leds_decay[i])
128         m_leds_decay[i]--;
127      if (!(m_display_state[i & 0xf] >> (i>>4) & 1) && m_display_decay[i])
128         m_display_decay[i]--;
129129
130   leds_update();
130   display_update();
131131}
132132
133133
r243546r243547
147147WRITE8_MEMBER(wildfire_state::write_d)
148148{
149149   m_d = data;
150   leds_update();
150   display_update();
151151}
152152
153153WRITE16_MEMBER(wildfire_state::write_a)
154154{
155155   m_a = data;
156   leds_update();
156   display_update();
157157}
158158
159159
r243546r243547
183183void wildfire_state::machine_start()
184184{
185185   // zerofill
186   memset(m_leds_state, 0, sizeof(m_leds_state));
187   memset(m_leds_cache, 0, sizeof(m_leds_cache));
188   memset(m_leds_decay, 0, sizeof(m_leds_decay));
186   memset(m_display_state, 0, sizeof(m_display_state));
187   memset(m_display_cache, 0, sizeof(m_display_cache));
188   memset(m_display_decay, 0, sizeof(m_display_decay));
189189
190190   m_d = 0;
191191   m_a = 0;
192192
193193   // register for savestates
194   save_item(NAME(m_leds_state));
195   save_item(NAME(m_leds_cache));
196   save_item(NAME(m_leds_decay));
194   save_item(NAME(m_display_state));
195   save_item(NAME(m_display_cache));
196   save_item(NAME(m_display_decay));
197197
198198   save_item(NAME(m_d));
199199   save_item(NAME(m_a));
r243546r243547
209209   MCFG_AMI_S2000_WRITE_D_CB(WRITE8(wildfire_state, write_d))
210210   MCFG_AMI_S2000_WRITE_A_CB(WRITE16(wildfire_state, write_a))
211211
212   MCFG_TIMER_DRIVER_ADD_PERIODIC("leds_decay", wildfire_state, leds_decay_tick, attotime::from_msec(10))
212   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", wildfire_state, display_decay_tick, attotime::from_msec(10))
213213
214214   MCFG_DEFAULT_LAYOUT(layout_wildfire)
215215


Previous 199869 Revisions Next


© 1997-2024 The MAME Team