Previous 199869 Revisions Next

r22776 Sunday 12th May, 2013 at 00:12:47 UTC by smf
fixed variable and parameter conflict (nw)
[src/emu/machine]ds2401.c ds2401.h

trunk/src/emu/machine/ds2401.c
r22775r22776
4040   t_pdh  = attotime::from_usec( 30);
4141   t_pdl  = attotime::from_usec(120);
4242
43   save_item(NAME(state));
44   save_item(NAME(bit));
45   save_item(NAME(byte));
46   save_item(NAME(shift));
47   save_item(NAME(rx));
48   save_item(NAME(tx));
43   save_item(NAME(m_state));
44   save_item(NAME(m_bit));
45   save_item(NAME(m_byte));
46   save_item(NAME(m_shift));
47   save_item(NAME(m_rx));
48   save_item(NAME(m_tx));
4949
50   timer_main  = timer_alloc(TIMER_MAIN);
51   timer_reset = timer_alloc(TIMER_RESET);
50   m_timer_main  = timer_alloc(TIMER_MAIN);
51   m_timer_reset = timer_alloc(TIMER_RESET);
5252}
5353
5454void ds2401_device::device_reset()
5555{
56   state = STATE_IDLE;
57   bit = 0;
58   byte = 0;
59   shift = 0;
60   rx = true;
61   tx = true;
56   m_state = STATE_IDLE;
57   m_bit = 0;
58   m_byte = 0;
59   m_shift = 0;
60   m_rx = true;
61   m_tx = true;
6262
6363   if(m_region)
6464   {
6565      if(m_region->bytes() == SIZE_DATA)
6666      {
67         memcpy(data, m_region->base(), SIZE_DATA);
67         memcpy(m_data, m_region->base(), SIZE_DATA);
6868         return;
6969      }
7070
r22775r22776
7575      logerror("ds2401 %s: Warning, no id provided, answer will be all zeroes.\n", tag());
7676   }
7777
78   memset(data, 0, SIZE_DATA);
78   memset(m_data, 0, SIZE_DATA);
7979}
8080
8181void ds2401_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
r22775r22776
8484   {
8585   case TIMER_RESET:
8686      verboselog(1, "timer_reset\n");
87      state = STATE_RESET;
88      timer_reset->adjust(attotime::never);
87      m_state = STATE_RESET;
88      m_timer_reset->adjust(attotime::never);
8989      break;
9090
9191   case TIMER_MAIN:
92      switch(state)
92      switch(m_state)
9393      {
9494      case STATE_RESET1:
95         verboselog(2, "timer_main state_reset1 %d\n", rx);
96         tx = false;
97         state = STATE_RESET2;
98         timer_main->adjust(t_pdl);
95         verboselog(2, "timer_main state_reset1 %d\n", m_rx);
96         m_tx = false;
97         m_state = STATE_RESET2;
98         m_timer_main->adjust(t_pdl);
9999         break;
100100
101101      case STATE_RESET2:
102         verboselog(2, "timer_main state_reset2 %d\n", rx);
103         tx = true;
104         bit = 0;
105         shift = 0;
106         state = STATE_COMMAND;
102         verboselog(2, "timer_main state_reset2 %d\n", m_rx);
103         m_tx = true;
104         m_bit = 0;
105         m_shift = 0;
106         m_state = STATE_COMMAND;
107107         break;
108108
109109      case STATE_COMMAND:
110         verboselog(2, "timer_main state_command %d\n", rx);
110         verboselog(2, "timer_main state_command %d\n", m_rx);
111111
112         shift >>= 1;
113         if(rx)
112         m_shift >>= 1;
113         if(m_rx)
114114         {
115            shift |= 0x80;
115            m_shift |= 0x80;
116116         }
117117
118         bit++;
119         if(bit == 8)
118         m_bit++;
119         if(m_bit == 8)
120120         {
121            switch(shift)
121            switch(m_shift)
122122            {
123123            case COMMAND_READROM:
124124               verboselog(1, "timer_main readrom\n");
125               bit = 0;
126               byte = 0;
127               state = STATE_READROM;
125               m_bit = 0;
126               m_byte = 0;
127               m_state = STATE_READROM;
128128               break;
129129
130130            default:
131               verboselog(0, "timer_main command not handled %02x\n", shift);
132               state = STATE_IDLE;
131               verboselog(0, "timer_main command not handled %02x\n", m_shift);
132               m_state = STATE_IDLE;
133133               break;
134134            }
135135         }
136136         break;
137137
138138      case STATE_READROM:
139         tx = true;
139         m_tx = true;
140140
141         if(byte == SIZE_DATA)
141         if( m_byte == SIZE_DATA )
142142         {
143143            verboselog(1, "timer_main readrom finished\n");
144            state = STATE_IDLE;
144            m_state = STATE_IDLE;
145145         }
146146         else
147147         {
r22775r22776
149149         }
150150         break;
151151      default:
152         verboselog(0, "timer_main state not handled: %d\n", state);
152         verboselog(0, "timer_main state not handled: %d\n", m_state);
153153         break;
154154      }
155155   }
r22775r22776
159159{
160160   verboselog(1, "write(%d)\n", state);
161161
162   if(!state && rx)
162   if(!state && m_rx)
163163   {
164      switch(state)
164      switch(m_state)
165165      {
166166      case STATE_IDLE:
167167         break;
168168
169169      case STATE_COMMAND:
170170         verboselog(2, "state_command\n");
171         timer_main->adjust(t_samp);
171         m_timer_main->adjust(t_samp);
172172         break;
173173
174174      case STATE_READROM:
175         if(!bit)
175         if(!m_bit)
176176         {
177            shift = data[7 - byte];
178            verboselog(1, "<- data %02x\n", shift);
177            m_shift = m_data[7 - m_byte];
178            verboselog(1, "<- data %02x\n", m_shift);
179179         }
180180
181         tx = shift & 1;
182         shift >>= 1;
181         m_tx = m_shift & 1;
182         m_shift >>= 1;
183183
184         bit++;
185         if(bit == 8)
184         m_bit++;
185         if(m_bit == 8)
186186         {
187            bit = 0;
188            byte++;
187            m_bit = 0;
188            m_byte++;
189189         }
190190
191         verboselog(2, "state_readrom %d\n", tx);
192         timer_main->adjust(t_rdv);
191         verboselog(2, "state_readrom %d\n", m_tx);
192         m_timer_main->adjust(t_rdv);
193193         break;
194194
195195      default:
196         verboselog(0, "state not handled: %d\n", state );
196         verboselog(0, "state not handled: %d\n", m_state );
197197         break;
198198      }
199199
200      timer_reset->adjust(t_rstl);
200      m_timer_reset->adjust(t_rstl);
201201   }
202   else if(state && !rx)
202   else if(state && !m_rx)
203203   {
204      switch(state)
204      switch(m_state)
205205      {
206206      case STATE_RESET:
207         state = STATE_RESET1;
208         timer_main->adjust(t_pdh);
207         m_state = STATE_RESET1;
208         m_timer_main->adjust(t_pdh);
209209         break;
210210      }
211211
212      timer_reset->adjust(attotime::never);
212      m_timer_reset->adjust(attotime::never);
213213   }
214214
215   rx = state;
215   m_rx = state;
216216}
217217
218218READ_LINE_MEMBER( ds2401_device::read )
219219{
220   verboselog(2, "read %d\n", tx && rx);
221   return tx && rx;
220   verboselog(2, "read %d\n", m_tx && m_rx);
221   return m_tx && m_rx;
222222}
223223
224224UINT8 ds2401_device::direct_read(int index)
225225{
226   return data[index];
226   return m_data[index];
227227}
228228
229229/*
trunk/src/emu/machine/ds2401.h
r22775r22776
5151   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
5252
5353   // internal state
54   int state, bit, shift;
55   UINT8 byte;
56   bool rx, tx;
57   UINT8 data[SIZE_DATA];
58   emu_timer *timer_main, *timer_reset;
54   int m_state, m_bit, m_shift;
55   UINT8 m_byte;
56   bool m_rx, m_tx;
57   UINT8 m_data[SIZE_DATA];
58   emu_timer *m_timer_main, *m_timer_reset;
5959   attotime t_samp, t_rdv, t_rstl, t_pdh, t_pdl;
6060
6161private:

Previous 199869 Revisions Next


© 1997-2024 The MAME Team