Previous 199869 Revisions Next

r31092 Monday 23rd June, 2014 at 20:49:45 UTC by Wilbert Pol
(MESS) wswan.c: Added noise emulation  [trap15, Wilbert Pol]
[src/mess/audio]wswan.c

trunk/src/mess/audio/wswan.c
r31091r31092
200200
201201      if ( m_audio4.on )
202202      {
203         if ( m_audio4_noise )
203         sample = m_audio4.signal;
204         m_audio4.pos++;
205         if ( m_audio4.pos >= m_audio4.period / 2 )
204206         {
205            sample = 0;
206         }
207         else
208         {
209            sample = m_audio4.signal;
210            m_audio4.pos++;
211            if ( m_audio4.pos >= m_audio4.period / 2 )
207            m_audio4.signal = -m_audio4.signal;
208            m_audio4.pos = 0;
209
210            if (m_noise_enable)
212211            {
213               m_audio4.pos = 0;
214               m_audio4.signal = -m_audio4.signal;
212               UINT16 new_bit = 0;
213
214               if (m_noise_type == 0)
215               {
216                  new_bit = (m_noise_shift ^ (m_noise_shift >> 5) ^ (m_noise_shift >> 8)) & 1;
217               }
218               else
219               {
220                  static int shift_bit[] = { 0, 10, 13, 4, 8, 6, 9, 11 };
221
222                  new_bit = (1 ^ (m_noise_shift >> 7) ^ (m_noise_shift >> shift_bit[m_noise_type])) & 1;
223               }
224               m_noise_shift = (m_noise_shift << 1) | new_bit;
225
226               if (m_audio4_noise)
227               {
228                  m_audio4.signal = (m_noise_shift & 0x8000) ? 16 : -16;
229               }
230
231               m_noise_shift &= 0x7fff;
232
233               if (m_noise_shift == 0x7fff)
234               {
235                  m_noise_shift = (m_noise_type == 0) ? 0x80 : 0;
236               }
215237            }
216238         }
217239         left += m_audio4.vol_left * sample;
r31091r31092
305327         m_noise_type = data & 0x07;
306328         m_noise_reset = ( data & 0x08 ) >> 3;
307329         m_noise_enable = ( data & 0x10 ) >> 4;
330         if (m_noise_reset)
331         {
332            m_noise_shift = (m_noise_type == 0) ? 0x80 : 0;
333         }
308334         break;
309335
310336      case 0x8F:              /* Sample location */
r31091r31092
333359         break;
334360
335361      case 0x93:              /* Noise counter shift register (hi) */
336         m_noise_shift = ( data << 8 ) | ( m_noise_shift & 0x00FF );
362         m_noise_shift = ( ( data & 0x7f ) << 8 ) | ( m_noise_shift & 0x00FF );
337363         break;
338364
339365      case 0x94:              /* Master volume */

Previous 199869 Revisions Next


© 1997-2024 The MAME Team