trunk/src/emu/sound/k053260.c
r32475 | r32476 | |
128 | 128 | |
129 | 129 | void k053260_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) |
130 | 130 | { |
131 | | static const long dpcmcnv[] = { 0,1,2,4,8,16,32,64, -128, -64, -32, -16, -8, -4, -2, -1}; |
| 131 | static const INT8 dpcmcnv[] = { 0,1,2,4,8,16,32,64, -128, -64, -32, -16, -8, -4, -2, -1}; |
132 | 132 | |
133 | | int i, j, lvol[4], rvol[4], play[4], loop[4], ppcm_data[4], ppcm[4]; |
134 | | unsigned char *rom[4]; |
| 133 | int lvol[4], rvol[4], play[4], loop[4], ppcm[4]; |
| 134 | UINT8 *rom[4]; |
135 | 135 | UINT32 delta[4], end[4], pos[4]; |
| 136 | INT8 ppcm_data[4]; |
136 | 137 | int dataL, dataR; |
137 | | signed char d; |
| 138 | INT8 d; |
138 | 139 | |
139 | 140 | /* precache some values */ |
140 | | for ( i = 0; i < 4; i++ ) { |
| 141 | for ( int i = 0; i < 4; i++ ) { |
141 | 142 | rom[i]= &m_rom[m_channels[i].start + ( m_channels[i].bank << 16 )]; |
142 | 143 | delta[i] = m_delta_table[m_channels[i].rate]; |
143 | 144 | lvol[i] = m_channels[i].volume * m_channels[i].pan; |
r32475 | r32476 | |
152 | 153 | delta[i] /= 2; |
153 | 154 | } |
154 | 155 | |
155 | | for ( j = 0; j < samples; j++ ) { |
| 156 | for ( int j = 0; j < samples; j++ ) { |
156 | 157 | dataL = dataR = 0; |
157 | 158 | |
158 | | for ( i = 0; i < 4; i++ ) { |
| 159 | for ( int i = 0; i < 4; i++ ) { |
159 | 160 | /* see if the voice is on */ |
160 | 161 | if ( play[i] ) { |
161 | 162 | /* see if we're done */ |
r32475 | r32476 | |
183 | 184 | newdata = ( ( rom[i][pos[i] >> BASE_SHIFT] ) ) & 0x0f; /*low nybble*/ |
184 | 185 | } |
185 | 186 | |
186 | | ppcm_data[i] = (( ( ppcm_data[i] * 62 ) >> 6 ) + dpcmcnv[newdata]); |
187 | | |
188 | | if ( ppcm_data[i] > 127 ) |
189 | | ppcm_data[i] = 127; |
190 | | else |
191 | | if ( ppcm_data[i] < -128 ) |
192 | | ppcm_data[i] = -128; |
| 187 | ppcm_data[i] += dpcmcnv[newdata]; |
193 | 188 | } |
194 | 189 | |
195 | 190 | |
r32475 | r32476 | |
215 | 210 | } |
216 | 211 | |
217 | 212 | /* update the regs now */ |
218 | | for ( i = 0; i < 4; i++ ) { |
| 213 | for ( int i = 0; i < 4; i++ ) { |
219 | 214 | m_channels[i].pos = pos[i]; |
220 | 215 | m_channels[i].play = play[i]; |
221 | 216 | m_channels[i].ppcm_data = ppcm_data[i]; |