trunk/src/mess/audio/wswan.c
| r31091 | r31092 | |
| 200 | 200 | |
| 201 | 201 | if ( m_audio4.on ) |
| 202 | 202 | { |
| 203 | | if ( m_audio4_noise ) |
| 203 | sample = m_audio4.signal; |
| 204 | m_audio4.pos++; |
| 205 | if ( m_audio4.pos >= m_audio4.period / 2 ) |
| 204 | 206 | { |
| 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) |
| 212 | 211 | { |
| 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 | } |
| 215 | 237 | } |
| 216 | 238 | } |
| 217 | 239 | left += m_audio4.vol_left * sample; |
| r31091 | r31092 | |
| 305 | 327 | m_noise_type = data & 0x07; |
| 306 | 328 | m_noise_reset = ( data & 0x08 ) >> 3; |
| 307 | 329 | m_noise_enable = ( data & 0x10 ) >> 4; |
| 330 | if (m_noise_reset) |
| 331 | { |
| 332 | m_noise_shift = (m_noise_type == 0) ? 0x80 : 0; |
| 333 | } |
| 308 | 334 | break; |
| 309 | 335 | |
| 310 | 336 | case 0x8F: /* Sample location */ |
| r31091 | r31092 | |
| 333 | 359 | break; |
| 334 | 360 | |
| 335 | 361 | 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 ); |
| 337 | 363 | break; |
| 338 | 364 | |
| 339 | 365 | case 0x94: /* Master volume */ |