trunk/src/emu/sound/k053260.c
| r22043 | r22044 | |
| 13 | 13 | |
| 14 | 14 | #define BASE_SHIFT 16 |
| 15 | 15 | |
| 16 | | struct k053260_channel |
| 17 | | { |
| 18 | | UINT32 rate; |
| 19 | | UINT32 size; |
| 20 | | UINT32 start; |
| 21 | | UINT32 bank; |
| 22 | | UINT32 volume; |
| 23 | | int play; |
| 24 | | UINT32 pan; |
| 25 | | UINT32 pos; |
| 26 | | int loop; |
| 27 | | int ppcm; /* packed PCM ( 4 bit signed ) */ |
| 28 | | int ppcm_data; |
| 29 | | }; |
| 30 | 16 | |
| 31 | | struct k053260_state |
| 32 | | { |
| 33 | | sound_stream * channel; |
| 34 | | int mode; |
| 35 | | int regs[0x30]; |
| 36 | | UINT8 *rom; |
| 37 | | int rom_size; |
| 38 | | UINT32 *delta_table; |
| 39 | | k053260_channel channels[4]; |
| 40 | | const k053260_interface *intf; |
| 41 | | device_t *device; |
| 42 | | }; |
| 17 | // device type definition |
| 18 | const device_type K053260 = &device_creator<k053260_device>; |
| 43 | 19 | |
| 44 | | INLINE k053260_state *get_safe_token(device_t *device) |
| 20 | |
| 21 | //************************************************************************** |
| 22 | // LIVE DEVICE |
| 23 | //************************************************************************** |
| 24 | |
| 25 | //------------------------------------------------- |
| 26 | // k053260_device - constructor |
| 27 | //------------------------------------------------- |
| 28 | |
| 29 | k053260_device::k053260_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 30 | : device_t(mconfig, K053260, "K053260", tag, owner, clock), |
| 31 | device_sound_interface(mconfig, *this), |
| 32 | m_channel(NULL), |
| 33 | m_mode(0), |
| 34 | m_rom(NULL), |
| 35 | m_rom_size(0), |
| 36 | m_delta_table(NULL), |
| 37 | m_intf(NULL) |
| 45 | 38 | { |
| 46 | | assert(device != NULL); |
| 47 | | assert(device->type() == K053260); |
| 48 | | return (k053260_state *)downcast<k053260_device *>(device)->token(); |
| 39 | memset(m_regs, 0, sizeof(int)*0x30); |
| 49 | 40 | } |
| 50 | 41 | |
| 51 | 42 | |
| 52 | | static void InitDeltaTable( k053260_state *ic, int rate, int clock ) |
| 43 | //------------------------------------------------- |
| 44 | // device_start - device-specific startup |
| 45 | //------------------------------------------------- |
| 46 | |
| 47 | void k053260_device::device_start() |
| 53 | 48 | { |
| 54 | | int i; |
| 55 | | double base = ( double )rate; |
| 56 | | double max = (double)(clock); /* Hz */ |
| 57 | | UINT32 val; |
| 49 | static const k053260_interface defintrf = { 0 }; |
| 50 | int rate = clock() / 32; |
| 51 | int i; |
| 58 | 52 | |
| 59 | | for( i = 0; i < 0x1000; i++ ) { |
| 60 | | double v = ( double )( 0x1000 - i ); |
| 61 | | double target = (max) / v; |
| 62 | | double fixed = ( double )( 1 << BASE_SHIFT ); |
| 53 | /* Initialize our chip structure */ |
| 54 | m_intf = (static_config() != NULL) ? (const k053260_interface *)static_config() : &defintrf; |
| 63 | 55 | |
| 64 | | if ( target && base ) { |
| 65 | | target = fixed / ( base / target ); |
| 66 | | val = ( UINT32 )target; |
| 67 | | if ( val == 0 ) |
| 68 | | val = 1; |
| 69 | | } else |
| 70 | | val = 1; |
| 56 | m_mode = 0; |
| 71 | 57 | |
| 72 | | ic->delta_table[i] = val; |
| 58 | memory_region *region = (m_intf->rgnoverride != NULL) ? memregion(m_intf->rgnoverride) : this->region(); |
| 59 | |
| 60 | m_rom = *region; |
| 61 | m_rom_size = region->bytes(); |
| 62 | |
| 63 | device_reset(); |
| 64 | |
| 65 | for ( i = 0; i < 0x30; i++ ) |
| 66 | m_regs[i] = 0; |
| 67 | |
| 68 | m_delta_table = auto_alloc_array( machine(), UINT32, 0x1000 ); |
| 69 | |
| 70 | m_channel = stream_alloc( 0, 2, rate ); |
| 71 | |
| 72 | InitDeltaTable( rate, clock() ); |
| 73 | |
| 74 | /* register with the save state system */ |
| 75 | save_item(NAME(m_mode)); |
| 76 | save_item(NAME(m_regs)); |
| 77 | |
| 78 | for ( i = 0; i < 4; i++ ) |
| 79 | { |
| 80 | save_item(NAME(m_channels[i].rate), i); |
| 81 | save_item(NAME(m_channels[i].size), i); |
| 82 | save_item(NAME(m_channels[i].start), i); |
| 83 | save_item(NAME(m_channels[i].bank), i); |
| 84 | save_item(NAME(m_channels[i].volume), i); |
| 85 | save_item(NAME(m_channels[i].play), i); |
| 86 | save_item(NAME(m_channels[i].pan), i); |
| 87 | save_item(NAME(m_channels[i].pos), i); |
| 88 | save_item(NAME(m_channels[i].loop), i); |
| 89 | save_item(NAME(m_channels[i].ppcm), i); |
| 90 | save_item(NAME(m_channels[i].ppcm_data), i); |
| 73 | 91 | } |
| 92 | |
| 93 | /* setup SH1 timer if necessary */ |
| 94 | if ( m_intf->irq ) |
| 95 | machine().scheduler().timer_pulse( attotime::from_hz(clock()) * 32, m_intf->irq, "m_intf->irq" ); |
| 74 | 96 | } |
| 75 | 97 | |
| 76 | | static DEVICE_RESET( k053260 ) |
| 98 | |
| 99 | //------------------------------------------------- |
| 100 | // device_reset - device-specific reset |
| 101 | //------------------------------------------------- |
| 102 | |
| 103 | void k053260_device::device_reset() |
| 77 | 104 | { |
| 78 | | k053260_state *ic = get_safe_token(device); |
| 79 | 105 | int i; |
| 80 | 106 | |
| 81 | 107 | for( i = 0; i < 4; i++ ) { |
| 82 | | ic->channels[i].rate = 0; |
| 83 | | ic->channels[i].size = 0; |
| 84 | | ic->channels[i].start = 0; |
| 85 | | ic->channels[i].bank = 0; |
| 86 | | ic->channels[i].volume = 0; |
| 87 | | ic->channels[i].play = 0; |
| 88 | | ic->channels[i].pan = 0; |
| 89 | | ic->channels[i].pos = 0; |
| 90 | | ic->channels[i].loop = 0; |
| 91 | | ic->channels[i].ppcm = 0; |
| 92 | | ic->channels[i].ppcm_data = 0; |
| 108 | m_channels[i].rate = 0; |
| 109 | m_channels[i].size = 0; |
| 110 | m_channels[i].start = 0; |
| 111 | m_channels[i].bank = 0; |
| 112 | m_channels[i].volume = 0; |
| 113 | m_channels[i].play = 0; |
| 114 | m_channels[i].pan = 0; |
| 115 | m_channels[i].pos = 0; |
| 116 | m_channels[i].loop = 0; |
| 117 | m_channels[i].ppcm = 0; |
| 118 | m_channels[i].ppcm_data = 0; |
| 93 | 119 | } |
| 94 | 120 | } |
| 95 | 121 | |
| 122 | |
| 96 | 123 | INLINE int limit( int val, int max, int min ) |
| 97 | 124 | { |
| 98 | 125 | if ( val > max ) |
| r22043 | r22044 | |
| 106 | 133 | #define MAXOUT 0x7fff |
| 107 | 134 | #define MINOUT -0x8000 |
| 108 | 135 | |
| 109 | | static STREAM_UPDATE( k053260_update ) |
| 136 | //------------------------------------------------- |
| 137 | // sound_stream_update - handle a stream update |
| 138 | //------------------------------------------------- |
| 139 | |
| 140 | void k053260_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) |
| 110 | 141 | { |
| 111 | 142 | static const long dpcmcnv[] = { 0,1,2,4,8,16,32,64, -128, -64, -32, -16, -8, -4, -2, -1}; |
| 112 | 143 | |
| r22043 | r22044 | |
| 115 | 146 | UINT32 delta[4], end[4], pos[4]; |
| 116 | 147 | int dataL, dataR; |
| 117 | 148 | signed char d; |
| 118 | | k053260_state *ic = (k053260_state *)param; |
| 119 | 149 | |
| 120 | 150 | /* precache some values */ |
| 121 | 151 | for ( i = 0; i < 4; i++ ) { |
| 122 | | rom[i]= &ic->rom[ic->channels[i].start + ( ic->channels[i].bank << 16 )]; |
| 123 | | delta[i] = ic->delta_table[ic->channels[i].rate]; |
| 124 | | lvol[i] = ic->channels[i].volume * ic->channels[i].pan; |
| 125 | | rvol[i] = ic->channels[i].volume * ( 8 - ic->channels[i].pan ); |
| 126 | | end[i] = ic->channels[i].size; |
| 127 | | pos[i] = ic->channels[i].pos; |
| 128 | | play[i] = ic->channels[i].play; |
| 129 | | loop[i] = ic->channels[i].loop; |
| 130 | | ppcm[i] = ic->channels[i].ppcm; |
| 131 | | ppcm_data[i] = ic->channels[i].ppcm_data; |
| 152 | rom[i]= &m_rom[m_channels[i].start + ( m_channels[i].bank << 16 )]; |
| 153 | delta[i] = m_delta_table[m_channels[i].rate]; |
| 154 | lvol[i] = m_channels[i].volume * m_channels[i].pan; |
| 155 | rvol[i] = m_channels[i].volume * ( 8 - m_channels[i].pan ); |
| 156 | end[i] = m_channels[i].size; |
| 157 | pos[i] = m_channels[i].pos; |
| 158 | play[i] = m_channels[i].play; |
| 159 | loop[i] = m_channels[i].loop; |
| 160 | ppcm[i] = m_channels[i].ppcm; |
| 161 | ppcm_data[i] = m_channels[i].ppcm_data; |
| 132 | 162 | if ( ppcm[i] ) |
| 133 | 163 | delta[i] /= 2; |
| 134 | 164 | } |
| r22043 | r22044 | |
| 184 | 214 | pos[i] += delta[i]; |
| 185 | 215 | } |
| 186 | 216 | |
| 187 | | if ( ic->mode & 2 ) { |
| 217 | if ( m_mode & 2 ) { |
| 188 | 218 | dataL += ( d * lvol[i] ) >> 2; |
| 189 | 219 | dataR += ( d * rvol[i] ) >> 2; |
| 190 | 220 | } |
| r22043 | r22044 | |
| 197 | 227 | |
| 198 | 228 | /* update the regs now */ |
| 199 | 229 | for ( i = 0; i < 4; i++ ) { |
| 200 | | ic->channels[i].pos = pos[i]; |
| 201 | | ic->channels[i].play = play[i]; |
| 202 | | ic->channels[i].ppcm_data = ppcm_data[i]; |
| 230 | m_channels[i].pos = pos[i]; |
| 231 | m_channels[i].play = play[i]; |
| 232 | m_channels[i].ppcm_data = ppcm_data[i]; |
| 203 | 233 | } |
| 204 | 234 | } |
| 205 | 235 | |
| 206 | | static DEVICE_START( k053260 ) |
| 236 | |
| 237 | void k053260_device::InitDeltaTable( int rate, int clock ) |
| 207 | 238 | { |
| 208 | | static const k053260_interface defintrf = { 0 }; |
| 209 | | k053260_state *ic = get_safe_token(device); |
| 210 | | int rate = device->clock() / 32; |
| 211 | | int i; |
| 239 | int i; |
| 240 | double base = ( double )rate; |
| 241 | double max = (double)(clock); /* Hz */ |
| 242 | UINT32 val; |
| 212 | 243 | |
| 213 | | /* Initialize our chip structure */ |
| 214 | | ic->device = device; |
| 215 | | ic->intf = (device->static_config() != NULL) ? (const k053260_interface *)device->static_config() : &defintrf; |
| 244 | for( i = 0; i < 0x1000; i++ ) { |
| 245 | double v = ( double )( 0x1000 - i ); |
| 246 | double target = (max) / v; |
| 247 | double fixed = ( double )( 1 << BASE_SHIFT ); |
| 216 | 248 | |
| 217 | | ic->mode = 0; |
| 249 | if ( target && base ) { |
| 250 | target = fixed / ( base / target ); |
| 251 | val = ( UINT32 )target; |
| 252 | if ( val == 0 ) |
| 253 | val = 1; |
| 254 | } else |
| 255 | val = 1; |
| 218 | 256 | |
| 219 | | memory_region *region = (ic->intf->rgnoverride != NULL) ? device->machine().root_device().memregion(ic->intf->rgnoverride) : device->region(); |
| 220 | | |
| 221 | | ic->rom = *region; |
| 222 | | ic->rom_size = region->bytes(); |
| 223 | | |
| 224 | | DEVICE_RESET_CALL(k053260); |
| 225 | | |
| 226 | | for ( i = 0; i < 0x30; i++ ) |
| 227 | | ic->regs[i] = 0; |
| 228 | | |
| 229 | | ic->delta_table = auto_alloc_array( device->machine(), UINT32, 0x1000 ); |
| 230 | | |
| 231 | | ic->channel = device->machine().sound().stream_alloc( *device, 0, 2, rate, ic, k053260_update ); |
| 232 | | |
| 233 | | InitDeltaTable( ic, rate, device->clock() ); |
| 234 | | |
| 235 | | /* register with the save state system */ |
| 236 | | device->save_item(NAME(ic->mode)); |
| 237 | | device->save_item(NAME(ic->regs)); |
| 238 | | |
| 239 | | for ( i = 0; i < 4; i++ ) |
| 240 | | { |
| 241 | | device->save_item(NAME(ic->channels[i].rate), i); |
| 242 | | device->save_item(NAME(ic->channels[i].size), i); |
| 243 | | device->save_item(NAME(ic->channels[i].start), i); |
| 244 | | device->save_item(NAME(ic->channels[i].bank), i); |
| 245 | | device->save_item(NAME(ic->channels[i].volume), i); |
| 246 | | device->save_item(NAME(ic->channels[i].play), i); |
| 247 | | device->save_item(NAME(ic->channels[i].pan), i); |
| 248 | | device->save_item(NAME(ic->channels[i].pos), i); |
| 249 | | device->save_item(NAME(ic->channels[i].loop), i); |
| 250 | | device->save_item(NAME(ic->channels[i].ppcm), i); |
| 251 | | device->save_item(NAME(ic->channels[i].ppcm_data), i); |
| 257 | m_delta_table[i] = val; |
| 252 | 258 | } |
| 253 | | |
| 254 | | /* setup SH1 timer if necessary */ |
| 255 | | if ( ic->intf->irq ) |
| 256 | | device->machine().scheduler().timer_pulse( attotime::from_hz(device->clock()) * 32, ic->intf->irq, "ic->intf->irq" ); |
| 257 | 259 | } |
| 258 | 260 | |
| 259 | | INLINE void check_bounds( k053260_state *ic, int channel ) |
| 261 | |
| 262 | void k053260_device::check_bounds( int channel ) |
| 260 | 263 | { |
| 261 | | int channel_start = ( ic->channels[channel].bank << 16 ) + ic->channels[channel].start; |
| 262 | | int channel_end = channel_start + ic->channels[channel].size - 1; |
| 264 | int channel_start = ( m_channels[channel].bank << 16 ) + m_channels[channel].start; |
| 265 | int channel_end = channel_start + m_channels[channel].size - 1; |
| 263 | 266 | |
| 264 | | if ( channel_start > ic->rom_size ) { |
| 267 | if ( channel_start > m_rom_size ) { |
| 265 | 268 | logerror("K53260: Attempting to start playing past the end of the ROM ( start = %06x, end = %06x ).\n", channel_start, channel_end ); |
| 266 | 269 | |
| 267 | | ic->channels[channel].play = 0; |
| 270 | m_channels[channel].play = 0; |
| 268 | 271 | |
| 269 | 272 | return; |
| 270 | 273 | } |
| 271 | 274 | |
| 272 | | if ( channel_end > ic->rom_size ) { |
| 275 | if ( channel_end > m_rom_size ) { |
| 273 | 276 | logerror("K53260: Attempting to play past the end of the ROM ( start = %06x, end = %06x ).\n", channel_start, channel_end ); |
| 274 | 277 | |
| 275 | | ic->channels[channel].size = ic->rom_size - channel_start; |
| 278 | m_channels[channel].size = m_rom_size - channel_start; |
| 276 | 279 | } |
| 277 | | if (LOG) logerror("K053260: Sample Start = %06x, Sample End = %06x, Sample rate = %04x, PPCM = %s\n", channel_start, channel_end, ic->channels[channel].rate, ic->channels[channel].ppcm ? "yes" : "no" ); |
| 280 | if (LOG) logerror("K053260: Sample Start = %06x, Sample End = %06x, Sample rate = %04x, PPCM = %s\n", channel_start, channel_end, m_channels[channel].rate, m_channels[channel].ppcm ? "yes" : "no" ); |
| 278 | 281 | } |
| 279 | 282 | |
| 280 | | WRITE8_DEVICE_HANDLER( k053260_w ) |
| 283 | |
| 284 | WRITE8_MEMBER( k053260_device::k053260_w ) |
| 281 | 285 | { |
| 282 | 286 | int i, t; |
| 283 | 287 | int r = offset; |
| 284 | 288 | int v = data; |
| 285 | 289 | |
| 286 | | k053260_state *ic = get_safe_token(device); |
| 287 | | |
| 288 | 290 | if ( r > 0x2f ) { |
| 289 | 291 | logerror("K053260: Writing past registers\n" ); |
| 290 | 292 | return; |
| 291 | 293 | } |
| 292 | 294 | |
| 293 | | ic->channel->update(); |
| 295 | m_channel->update(); |
| 294 | 296 | |
| 295 | 297 | /* before we update the regs, we need to check for a latched reg */ |
| 296 | 298 | if ( r == 0x28 ) { |
| 297 | | t = ic->regs[r] ^ v; |
| 299 | t = m_regs[r] ^ v; |
| 298 | 300 | |
| 299 | 301 | for ( i = 0; i < 4; i++ ) { |
| 300 | 302 | if ( t & ( 1 << i ) ) { |
| 301 | 303 | if ( v & ( 1 << i ) ) { |
| 302 | | ic->channels[i].play = 1; |
| 303 | | ic->channels[i].pos = 0; |
| 304 | | ic->channels[i].ppcm_data = 0; |
| 305 | | check_bounds( ic, i ); |
| 304 | m_channels[i].play = 1; |
| 305 | m_channels[i].pos = 0; |
| 306 | m_channels[i].ppcm_data = 0; |
| 307 | check_bounds( i ); |
| 306 | 308 | } else |
| 307 | | ic->channels[i].play = 0; |
| 309 | m_channels[i].play = 0; |
| 308 | 310 | } |
| 309 | 311 | } |
| 310 | 312 | |
| 311 | | ic->regs[r] = v; |
| 313 | m_regs[r] = v; |
| 312 | 314 | return; |
| 313 | 315 | } |
| 314 | 316 | |
| 315 | 317 | /* update regs */ |
| 316 | | ic->regs[r] = v; |
| 318 | m_regs[r] = v; |
| 317 | 319 | |
| 318 | 320 | /* communication registers */ |
| 319 | 321 | if ( r < 8 ) |
| r22043 | r22044 | |
| 325 | 327 | |
| 326 | 328 | switch ( ( r - 8 ) & 0x07 ) { |
| 327 | 329 | case 0: /* sample rate low */ |
| 328 | | ic->channels[channel].rate &= 0x0f00; |
| 329 | | ic->channels[channel].rate |= v; |
| 330 | m_channels[channel].rate &= 0x0f00; |
| 331 | m_channels[channel].rate |= v; |
| 330 | 332 | break; |
| 331 | 333 | |
| 332 | 334 | case 1: /* sample rate high */ |
| 333 | | ic->channels[channel].rate &= 0x00ff; |
| 334 | | ic->channels[channel].rate |= ( v & 0x0f ) << 8; |
| 335 | m_channels[channel].rate &= 0x00ff; |
| 336 | m_channels[channel].rate |= ( v & 0x0f ) << 8; |
| 335 | 337 | break; |
| 336 | 338 | |
| 337 | 339 | case 2: /* size low */ |
| 338 | | ic->channels[channel].size &= 0xff00; |
| 339 | | ic->channels[channel].size |= v; |
| 340 | m_channels[channel].size &= 0xff00; |
| 341 | m_channels[channel].size |= v; |
| 340 | 342 | break; |
| 341 | 343 | |
| 342 | 344 | case 3: /* size high */ |
| 343 | | ic->channels[channel].size &= 0x00ff; |
| 344 | | ic->channels[channel].size |= v << 8; |
| 345 | m_channels[channel].size &= 0x00ff; |
| 346 | m_channels[channel].size |= v << 8; |
| 345 | 347 | break; |
| 346 | 348 | |
| 347 | 349 | case 4: /* start low */ |
| 348 | | ic->channels[channel].start &= 0xff00; |
| 349 | | ic->channels[channel].start |= v; |
| 350 | m_channels[channel].start &= 0xff00; |
| 351 | m_channels[channel].start |= v; |
| 350 | 352 | break; |
| 351 | 353 | |
| 352 | 354 | case 5: /* start high */ |
| 353 | | ic->channels[channel].start &= 0x00ff; |
| 354 | | ic->channels[channel].start |= v << 8; |
| 355 | m_channels[channel].start &= 0x00ff; |
| 356 | m_channels[channel].start |= v << 8; |
| 355 | 357 | break; |
| 356 | 358 | |
| 357 | 359 | case 6: /* bank */ |
| 358 | | ic->channels[channel].bank = v & 0xff; |
| 360 | m_channels[channel].bank = v & 0xff; |
| 359 | 361 | break; |
| 360 | 362 | |
| 361 | 363 | case 7: /* volume is 7 bits. Convert to 8 bits now. */ |
| 362 | | ic->channels[channel].volume = ( ( v & 0x7f ) << 1 ) | ( v & 1 ); |
| 364 | m_channels[channel].volume = ( ( v & 0x7f ) << 1 ) | ( v & 1 ); |
| 363 | 365 | break; |
| 364 | 366 | } |
| 365 | 367 | |
| r22043 | r22044 | |
| 369 | 371 | switch( r ) { |
| 370 | 372 | case 0x2a: /* loop, ppcm */ |
| 371 | 373 | for ( i = 0; i < 4; i++ ) |
| 372 | | ic->channels[i].loop = ( v & ( 1 << i ) ) != 0; |
| 374 | m_channels[i].loop = ( v & ( 1 << i ) ) != 0; |
| 373 | 375 | |
| 374 | 376 | for ( i = 4; i < 8; i++ ) |
| 375 | | ic->channels[i-4].ppcm = ( v & ( 1 << i ) ) != 0; |
| 377 | m_channels[i-4].ppcm = ( v & ( 1 << i ) ) != 0; |
| 376 | 378 | break; |
| 377 | 379 | |
| 378 | 380 | case 0x2c: /* pan */ |
| 379 | | ic->channels[0].pan = v & 7; |
| 380 | | ic->channels[1].pan = ( v >> 3 ) & 7; |
| 381 | m_channels[0].pan = v & 7; |
| 382 | m_channels[1].pan = ( v >> 3 ) & 7; |
| 381 | 383 | break; |
| 382 | 384 | |
| 383 | 385 | case 0x2d: /* more pan */ |
| 384 | | ic->channels[2].pan = v & 7; |
| 385 | | ic->channels[3].pan = ( v >> 3 ) & 7; |
| 386 | m_channels[2].pan = v & 7; |
| 387 | m_channels[3].pan = ( v >> 3 ) & 7; |
| 386 | 388 | break; |
| 387 | 389 | |
| 388 | 390 | case 0x2f: /* control */ |
| 389 | | ic->mode = v & 7; |
| 391 | m_mode = v & 7; |
| 390 | 392 | /* bit 0 = read ROM */ |
| 391 | 393 | /* bit 1 = enable sound output */ |
| 392 | 394 | /* bit 2 = unknown */ |
| r22043 | r22044 | |
| 394 | 396 | } |
| 395 | 397 | } |
| 396 | 398 | |
| 397 | | READ8_DEVICE_HANDLER( k053260_r ) |
| 399 | READ8_MEMBER( k053260_device::k053260_r ) |
| 398 | 400 | { |
| 399 | | k053260_state *ic = get_safe_token(device); |
| 400 | | |
| 401 | 401 | switch ( offset ) { |
| 402 | 402 | case 0x29: /* channel status */ |
| 403 | 403 | { |
| 404 | 404 | int i, status = 0; |
| 405 | 405 | |
| 406 | 406 | for ( i = 0; i < 4; i++ ) |
| 407 | | status |= ic->channels[i].play << i; |
| 407 | status |= m_channels[i].play << i; |
| 408 | 408 | |
| 409 | 409 | return status; |
| 410 | 410 | } |
| 411 | 411 | break; |
| 412 | 412 | |
| 413 | 413 | case 0x2e: /* read ROM */ |
| 414 | | if ( ic->mode & 1 ) |
| 414 | if ( m_mode & 1 ) |
| 415 | 415 | { |
| 416 | | UINT32 offs = ic->channels[0].start + ( ic->channels[0].pos >> BASE_SHIFT ) + ( ic->channels[0].bank << 16 ); |
| 416 | UINT32 offs = m_channels[0].start + ( m_channels[0].pos >> BASE_SHIFT ) + ( m_channels[0].bank << 16 ); |
| 417 | 417 | |
| 418 | | ic->channels[0].pos += ( 1 << 16 ); |
| 418 | m_channels[0].pos += ( 1 << 16 ); |
| 419 | 419 | |
| 420 | | if ( offs > ic->rom_size ) { |
| 421 | | logerror("%s: K53260: Attempting to read past ROM size in ROM Read Mode (offs = %06x, size = %06x).\n", device->machine().describe_context(),offs,ic->rom_size ); |
| 420 | if ( offs > m_rom_size ) { |
| 421 | logerror("%s: K53260: Attempting to read past ROM size in ROM Read Mode (offs = %06x, size = %06x).\n", machine().describe_context(),offs,m_rom_size ); |
| 422 | 422 | |
| 423 | 423 | return 0; |
| 424 | 424 | } |
| 425 | 425 | |
| 426 | | return ic->rom[offs]; |
| 426 | return m_rom[offs]; |
| 427 | 427 | } |
| 428 | 428 | break; |
| 429 | 429 | } |
| 430 | 430 | |
| 431 | | return ic->regs[offset]; |
| 431 | return m_regs[offset]; |
| 432 | 432 | } |
| 433 | | |
| 434 | | const device_type K053260 = &device_creator<k053260_device>; |
| 435 | | |
| 436 | | k053260_device::k053260_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 437 | | : device_t(mconfig, K053260, "K053260", tag, owner, clock), |
| 438 | | device_sound_interface(mconfig, *this) |
| 439 | | { |
| 440 | | m_token = global_alloc_clear(k053260_state); |
| 441 | | } |
| 442 | | |
| 443 | | //------------------------------------------------- |
| 444 | | // device_config_complete - perform any |
| 445 | | // operations now that the configuration is |
| 446 | | // complete |
| 447 | | //------------------------------------------------- |
| 448 | | |
| 449 | | void k053260_device::device_config_complete() |
| 450 | | { |
| 451 | | } |
| 452 | | |
| 453 | | //------------------------------------------------- |
| 454 | | // device_start - device-specific startup |
| 455 | | //------------------------------------------------- |
| 456 | | |
| 457 | | void k053260_device::device_start() |
| 458 | | { |
| 459 | | DEVICE_START_NAME( k053260 )(this); |
| 460 | | } |
| 461 | | |
| 462 | | //------------------------------------------------- |
| 463 | | // device_reset - device-specific reset |
| 464 | | //------------------------------------------------- |
| 465 | | |
| 466 | | void k053260_device::device_reset() |
| 467 | | { |
| 468 | | DEVICE_RESET_NAME( k053260 )(this); |
| 469 | | } |
| 470 | | |
| 471 | | //------------------------------------------------- |
| 472 | | // sound_stream_update - handle a stream update |
| 473 | | //------------------------------------------------- |
| 474 | | |
| 475 | | void k053260_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) |
| 476 | | { |
| 477 | | // should never get here |
| 478 | | fatalerror("sound_stream_update called; not applicable to legacy sound devices\n"); |
| 479 | | } |
trunk/src/mame/drivers/overdriv.c
| r22043 | r22044 | |
| 133 | 133 | |
| 134 | 134 | READ8_MEMBER(overdriv_state::overdriv_1_sound_r) |
| 135 | 135 | { |
| 136 | | device_t *device = machine().device("k053260_1"); |
| 137 | | return k053260_r(device, space, 2 + offset); |
| 136 | k053260_device *device = machine().device<k053260_device>("k053260_1"); |
| 137 | return device->k053260_r(space, 2 + offset); |
| 138 | 138 | } |
| 139 | 139 | |
| 140 | 140 | READ8_MEMBER(overdriv_state::overdriv_2_sound_r) |
| 141 | 141 | { |
| 142 | | device_t *device = machine().device("k053260_2"); |
| 143 | | return k053260_r(device, space, 2 + offset); |
| 142 | k053260_device *device = machine().device<k053260_device>("k053260_2"); |
| 143 | return device->k053260_r(space, 2 + offset); |
| 144 | 144 | } |
| 145 | 145 | |
| 146 | 146 | WRITE16_MEMBER(overdriv_state::overdriv_soundirq_w) |
| r22043 | r22044 | |
| 171 | 171 | AM_RANGE(0x1c0000, 0x1c001f) AM_DEVWRITE8_LEGACY("k051316_1", k051316_ctrl_w, 0xff00) |
| 172 | 172 | AM_RANGE(0x1c8000, 0x1c801f) AM_DEVWRITE8_LEGACY("k051316_2", k051316_ctrl_w, 0xff00) |
| 173 | 173 | AM_RANGE(0x1d0000, 0x1d001f) AM_DEVWRITE_LEGACY("k053251", k053251_msb_w) |
| 174 | | AM_RANGE(0x1d8000, 0x1d8003) AM_READ8(overdriv_1_sound_r, 0x00ff) AM_DEVWRITE8_LEGACY("k053260_1", k053260_w, 0x00ff) /* K053260 */ |
| 175 | | AM_RANGE(0x1e0000, 0x1e0003) AM_READ8(overdriv_2_sound_r, 0x00ff) AM_DEVWRITE8_LEGACY("k053260_2", k053260_w, 0x00ff) /* K053260 */ |
| 174 | AM_RANGE(0x1d8000, 0x1d8003) AM_READ8(overdriv_1_sound_r, 0x00ff) AM_DEVWRITE8("k053260_1", k053260_device, k053260_w, 0x00ff) /* K053260 */ |
| 175 | AM_RANGE(0x1e0000, 0x1e0003) AM_READ8(overdriv_2_sound_r, 0x00ff) AM_DEVWRITE8("k053260_2", k053260_device, k053260_w, 0x00ff) /* K053260 */ |
| 176 | 176 | AM_RANGE(0x1e8000, 0x1e8001) AM_WRITE(overdriv_soundirq_w) |
| 177 | 177 | AM_RANGE(0x1f0000, 0x1f0001) AM_WRITE(cpuA_ctrl_w) /* halt cpu B, coin counter, start lamp, other? */ |
| 178 | 178 | AM_RANGE(0x1f8000, 0x1f8001) AM_WRITE(eeprom_w) |
| r22043 | r22044 | |
| 203 | 203 | |
| 204 | 204 | static ADDRESS_MAP_START( overdriv_sound_map, AS_PROGRAM, 8, overdriv_state ) |
| 205 | 205 | AM_RANGE(0x0200, 0x0201) AM_DEVREADWRITE("ymsnd", ym2151_device,read,write) |
| 206 | | AM_RANGE(0x0400, 0x042f) AM_DEVREADWRITE_LEGACY("k053260_1", k053260_r, k053260_w) |
| 207 | | AM_RANGE(0x0600, 0x062f) AM_DEVREADWRITE_LEGACY("k053260_2", k053260_r, k053260_w) |
| 206 | AM_RANGE(0x0400, 0x042f) AM_DEVREADWRITE("k053260_1", k053260_device, k053260_r, k053260_w) |
| 207 | AM_RANGE(0x0600, 0x062f) AM_DEVREADWRITE("k053260_2", k053260_device, k053260_r, k053260_w) |
| 208 | 208 | AM_RANGE(0x0800, 0x0fff) AM_RAM |
| 209 | 209 | AM_RANGE(0x1000, 0xffff) AM_ROM |
| 210 | 210 | ADDRESS_MAP_END |
| r22043 | r22044 | |
| 370 | 370 | MCFG_SOUND_ROUTE(0, "lspeaker", 0.5) |
| 371 | 371 | MCFG_SOUND_ROUTE(1, "rspeaker", 0.5) |
| 372 | 372 | |
| 373 | | MCFG_SOUND_ADD("k053260_1", K053260, 3579545) |
| 373 | MCFG_K053260_ADD("k053260_1", 3579545) |
| 374 | 374 | MCFG_SOUND_CONFIG(k053260_config) |
| 375 | 375 | MCFG_SOUND_ROUTE(0, "lspeaker", 0.35) |
| 376 | 376 | MCFG_SOUND_ROUTE(1, "rspeaker", 0.35) |
| 377 | 377 | |
| 378 | | MCFG_SOUND_ADD("k053260_2", K053260, 3579545) |
| 378 | MCFG_K053260_ADD("k053260_2", 3579545) |
| 379 | 379 | MCFG_SOUND_CONFIG(k053260_config) |
| 380 | 380 | MCFG_SOUND_ROUTE(0, "lspeaker", 0.35) |
| 381 | 381 | MCFG_SOUND_ROUTE(1, "rspeaker", 0.35) |
trunk/src/mame/drivers/tmnt.c
| r22043 | r22044 | |
| 185 | 185 | |
| 186 | 186 | READ8_MEMBER(tmnt_state::punkshot_sound_r) |
| 187 | 187 | { |
| 188 | | device_t *device = machine().device("k053260"); |
| 189 | 188 | /* If the sound CPU is running, read the status, otherwise |
| 190 | 189 | just make it pass the test */ |
| 191 | | return k053260_r(device, space, 2 + offset); |
| 190 | k053260_device *device = machine().device<k053260_device>("k053260"); |
| 191 | return device->k053260_r(space, 2 + offset); |
| 192 | 192 | } |
| 193 | 193 | |
| 194 | 194 | WRITE8_MEMBER(tmnt_state::glfgreat_sound_w) |
| 195 | 195 | { |
| 196 | | device_t *device = machine().device("k053260"); |
| 197 | | k053260_w(device, space, offset, data); |
| 196 | k053260_device *device = machine().device<k053260_device>("k053260"); |
| 197 | device->k053260_w(space, offset, data); |
| 198 | 198 | |
| 199 | 199 | if (offset) |
| 200 | 200 | m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); |
| r22043 | r22044 | |
| 614 | 614 | AM_RANGE(0x0a0006, 0x0a0007) AM_READ_PORT("P1/P2") |
| 615 | 615 | AM_RANGE(0x0a0020, 0x0a0021) AM_WRITE(punkshot_0a0020_w) |
| 616 | 616 | AM_RANGE(0x0a0040, 0x0a0043) AM_READ8(punkshot_sound_r, 0x00ff) /* K053260 */ |
| 617 | | AM_RANGE(0x0a0040, 0x0a0041) AM_DEVWRITE8_LEGACY("k053260", k053260_w, 0x00ff) |
| 617 | AM_RANGE(0x0a0040, 0x0a0041) AM_DEVWRITE8("k053260", k053260_device, k053260_w, 0x00ff) |
| 618 | 618 | AM_RANGE(0x0a0060, 0x0a007f) AM_DEVWRITE_LEGACY("k053251", k053251_lsb_w) |
| 619 | 619 | AM_RANGE(0x0a0080, 0x0a0081) AM_WRITE(watchdog_reset16_w) |
| 620 | 620 | AM_RANGE(0x100000, 0x107fff) AM_READWRITE(k052109_word_noA12_r, punkshot_k052109_word_noA12_w) |
| r22043 | r22044 | |
| 636 | 636 | AM_RANGE(0x0a0010, 0x0a0011) AM_READ_PORT("DSW3") |
| 637 | 637 | AM_RANGE(0x0a0018, 0x0a0019) AM_WRITE(lgtnfght_0a0018_w) |
| 638 | 638 | AM_RANGE(0x0a0020, 0x0a0023) AM_READ8(punkshot_sound_r, 0x00ff) /* K053260 */ |
| 639 | | AM_RANGE(0x0a0020, 0x0a0021) AM_DEVWRITE8_LEGACY("k053260", k053260_w, 0x00ff) |
| 639 | AM_RANGE(0x0a0020, 0x0a0021) AM_DEVWRITE8("k053260", k053260_device, k053260_w, 0x00ff) |
| 640 | 640 | AM_RANGE(0x0a0028, 0x0a0029) AM_WRITE(watchdog_reset16_w) |
| 641 | 641 | AM_RANGE(0x0b0000, 0x0b3fff) AM_READWRITE(k053245_scattered_word_r, k053245_scattered_word_w) AM_SHARE("spriteram") |
| 642 | 642 | AM_RANGE(0x0c0000, 0x0c001f) AM_READWRITE(k053244_word_noA1_r, k053244_word_noA1_w) |
| r22043 | r22044 | |
| 667 | 667 | AM_RANGE(0x700300, 0x700301) AM_WRITE(blswhstl_700300_w) |
| 668 | 668 | AM_RANGE(0x700400, 0x700401) AM_WRITE(watchdog_reset16_w) |
| 669 | 669 | AM_RANGE(0x780600, 0x780603) AM_READ8(punkshot_sound_r, 0x00ff) /* K053260 */ |
| 670 | | AM_RANGE(0x780600, 0x780601) AM_DEVWRITE8_LEGACY("k053260", k053260_w, 0x00ff) |
| 670 | AM_RANGE(0x780600, 0x780601) AM_DEVWRITE8("k053260", k053260_device, k053260_w, 0x00ff) |
| 671 | 671 | AM_RANGE(0x780604, 0x780605) AM_WRITE(ssriders_soundkludge_w) |
| 672 | 672 | AM_RANGE(0x780700, 0x78071f) AM_DEVWRITE_LEGACY("k053251", k053251_lsb_w) |
| 673 | 673 | ADDRESS_MAP_END |
| r22043 | r22044 | |
| 996 | 996 | AM_RANGE(0x1c0800, 0x1c081f) AM_WRITE(tmnt2_1c0800_w) AM_SHARE("tmnt2_1c0800") /* protection device */ |
| 997 | 997 | AM_RANGE(0x5a0000, 0x5a001f) AM_READWRITE(k053244_word_noA1_r, k053244_word_noA1_w) |
| 998 | 998 | AM_RANGE(0x5c0600, 0x5c0603) AM_READ8(punkshot_sound_r, 0x00ff) /* K053260 */ |
| 999 | | AM_RANGE(0x5c0600, 0x5c0601) AM_DEVWRITE8_LEGACY("k053260", k053260_w, 0x00ff) |
| 999 | AM_RANGE(0x5c0600, 0x5c0601) AM_DEVWRITE8("k053260", k053260_device, k053260_w, 0x00ff) |
| 1000 | 1000 | AM_RANGE(0x5c0604, 0x5c0605) AM_WRITE(ssriders_soundkludge_w) |
| 1001 | 1001 | AM_RANGE(0x5c0700, 0x5c071f) AM_DEVWRITE_LEGACY("k053251", k053251_lsb_w) |
| 1002 | 1002 | AM_RANGE(0x600000, 0x603fff) AM_DEVREADWRITE_LEGACY("k052109", k052109_word_r, k052109_word_w) |
| r22043 | r22044 | |
| 1022 | 1022 | AM_RANGE(0x1c0800, 0x1c0803) AM_WRITE(ssriders_protection_w) |
| 1023 | 1023 | AM_RANGE(0x5a0000, 0x5a001f) AM_READWRITE(k053244_word_noA1_r, k053244_word_noA1_w) |
| 1024 | 1024 | AM_RANGE(0x5c0600, 0x5c0603) AM_READ8(punkshot_sound_r, 0x00ff) /* K053260 */ |
| 1025 | | AM_RANGE(0x5c0600, 0x5c0601) AM_DEVWRITE8_LEGACY("k053260", k053260_w, 0x00ff) |
| 1025 | AM_RANGE(0x5c0600, 0x5c0601) AM_DEVWRITE8("k053260", k053260_device, k053260_w, 0x00ff) |
| 1026 | 1026 | AM_RANGE(0x5c0604, 0x5c0605) AM_WRITE(ssriders_soundkludge_w) |
| 1027 | 1027 | AM_RANGE(0x5c0700, 0x5c071f) AM_DEVWRITE_LEGACY("k053251", k053251_lsb_w) |
| 1028 | 1028 | AM_RANGE(0x600000, 0x603fff) AM_DEVREADWRITE_LEGACY("k052109", k052109_word_r, k052109_word_w) |
| r22043 | r22044 | |
| 1061 | 1061 | AM_RANGE(0x200000, 0x200fff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram") |
| 1062 | 1062 | AM_RANGE(0x300000, 0x30001f) AM_DEVWRITE_LEGACY("k053251", k053251_lsb_w) |
| 1063 | 1063 | AM_RANGE(0x400000, 0x400003) AM_READ8(punkshot_sound_r, 0x00ff) /* K053260 */ |
| 1064 | | AM_RANGE(0x400000, 0x400001) AM_DEVWRITE8_LEGACY("k053260", k053260_w, 0x00ff) |
| 1064 | AM_RANGE(0x400000, 0x400001) AM_DEVWRITE8("k053260", k053260_device, k053260_w, 0x00ff) |
| 1065 | 1065 | AM_RANGE(0x500000, 0x50003f) AM_DEVREADWRITE_LEGACY("k054000", k054000_lsb_r, k054000_lsb_w) |
| 1066 | 1066 | AM_RANGE(0x500100, 0x500101) AM_WRITE(thndrx2_eeprom_w) |
| 1067 | 1067 | AM_RANGE(0x500200, 0x500201) AM_READ_PORT("P1/COINS") |
| r22043 | r22044 | |
| 1101 | 1101 | AM_RANGE(0xf000, 0xf7ff) AM_RAM |
| 1102 | 1102 | AM_RANGE(0xf800, 0xf801) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) |
| 1103 | 1103 | AM_RANGE(0xfa00, 0xfa00) AM_WRITE(sound_arm_nmi_w) |
| 1104 | | AM_RANGE(0xfc00, 0xfc2f) AM_DEVREADWRITE_LEGACY("k053260", k053260_r, k053260_w) |
| 1104 | AM_RANGE(0xfc00, 0xfc2f) AM_DEVREADWRITE("k053260", k053260_device, k053260_r, k053260_w) |
| 1105 | 1105 | ADDRESS_MAP_END |
| 1106 | 1106 | |
| 1107 | 1107 | |
| r22043 | r22044 | |
| 1109 | 1109 | AM_RANGE(0x0000, 0x7fff) AM_ROM |
| 1110 | 1110 | AM_RANGE(0x8000, 0x87ff) AM_RAM |
| 1111 | 1111 | AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) |
| 1112 | | AM_RANGE(0xc000, 0xc02f) AM_DEVREADWRITE_LEGACY("k053260", k053260_r, k053260_w) |
| 1112 | AM_RANGE(0xc000, 0xc02f) AM_DEVREADWRITE("k053260", k053260_device, k053260_r, k053260_w) |
| 1113 | 1113 | ADDRESS_MAP_END |
| 1114 | 1114 | |
| 1115 | 1115 | |
| 1116 | 1116 | static ADDRESS_MAP_START( glfgreat_audio_map, AS_PROGRAM, 8, tmnt_state ) |
| 1117 | 1117 | AM_RANGE(0x0000, 0x7fff) AM_ROM |
| 1118 | 1118 | AM_RANGE(0xf000, 0xf7ff) AM_RAM |
| 1119 | | AM_RANGE(0xf800, 0xf82f) AM_DEVREADWRITE_LEGACY("k053260", k053260_r, k053260_w) |
| 1119 | AM_RANGE(0xf800, 0xf82f) AM_DEVREADWRITE("k053260", k053260_device, k053260_r, k053260_w) |
| 1120 | 1120 | AM_RANGE(0xfa00, 0xfa00) AM_WRITE(sound_arm_nmi_w) |
| 1121 | 1121 | ADDRESS_MAP_END |
| 1122 | 1122 | |
| r22043 | r22044 | |
| 1125 | 1125 | AM_RANGE(0x0000, 0xefff) AM_ROM |
| 1126 | 1126 | AM_RANGE(0xf000, 0xf7ff) AM_RAM |
| 1127 | 1127 | AM_RANGE(0xf800, 0xf801) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) |
| 1128 | | AM_RANGE(0xfa00, 0xfa2f) AM_DEVREADWRITE_LEGACY("k053260", k053260_r, k053260_w) |
| 1128 | AM_RANGE(0xfa00, 0xfa2f) AM_DEVREADWRITE("k053260", k053260_device, k053260_r, k053260_w) |
| 1129 | 1129 | AM_RANGE(0xfc00, 0xfc00) AM_WRITE(sound_arm_nmi_w) |
| 1130 | 1130 | ADDRESS_MAP_END |
| 1131 | 1131 | |
| r22043 | r22044 | |
| 1135 | 1135 | AM_RANGE(0xf000, 0xf7ff) AM_RAM |
| 1136 | 1136 | AM_RANGE(0xf800, 0xf801) AM_MIRROR(0x0010) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) |
| 1137 | 1137 | AM_RANGE(0xfa00, 0xfa00) AM_WRITE(sound_arm_nmi_w) |
| 1138 | | AM_RANGE(0xfc00, 0xfc2f) AM_DEVREADWRITE_LEGACY("k053260", k053260_r, k053260_w) |
| 1138 | AM_RANGE(0xfc00, 0xfc2f) AM_DEVREADWRITE("k053260", k053260_device, k053260_r, k053260_w) |
| 1139 | 1139 | ADDRESS_MAP_END |
| 1140 | 1140 | |
| 1141 | 1141 | |
| r22043 | r22044 | |
| 2391 | 2391 | MCFG_SOUND_ROUTE(0, "mono", 1.0) |
| 2392 | 2392 | MCFG_SOUND_ROUTE(1, "mono", 1.0) |
| 2393 | 2393 | |
| 2394 | | MCFG_SOUND_ADD("k053260", K053260, XTAL_3_579545MHz) |
| 2394 | MCFG_K053260_ADD("k053260", XTAL_3_579545MHz) |
| 2395 | 2395 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.70) |
| 2396 | 2396 | MACHINE_CONFIG_END |
| 2397 | 2397 | |
| r22043 | r22044 | |
| 2434 | 2434 | MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) |
| 2435 | 2435 | MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) |
| 2436 | 2436 | |
| 2437 | | MCFG_SOUND_ADD("k053260", K053260, XTAL_3_579545MHz) |
| 2437 | MCFG_K053260_ADD("k053260", XTAL_3_579545MHz) |
| 2438 | 2438 | MCFG_SOUND_ROUTE(0, "lspeaker", 0.70) |
| 2439 | 2439 | MCFG_SOUND_ROUTE(1, "rspeaker", 0.70) |
| 2440 | 2440 | MACHINE_CONFIG_END |
| r22043 | r22044 | |
| 2483 | 2483 | MCFG_SOUND_ROUTE(0, "lspeaker", 0.70) |
| 2484 | 2484 | MCFG_SOUND_ROUTE(1, "rspeaker", 0.70) |
| 2485 | 2485 | |
| 2486 | | MCFG_SOUND_ADD("k053260", K053260, XTAL_3_579545MHz) |
| 2486 | MCFG_K053260_ADD("k053260", XTAL_3_579545MHz) |
| 2487 | 2487 | MCFG_SOUND_ROUTE(0, "rspeaker", 0.50) /* fixed inverted stereo channels */ |
| 2488 | 2488 | MCFG_SOUND_ROUTE(1, "lspeaker", 0.50) |
| 2489 | 2489 | MACHINE_CONFIG_END |
| r22043 | r22044 | |
| 2543 | 2543 | /* sound hardware */ |
| 2544 | 2544 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| 2545 | 2545 | |
| 2546 | | MCFG_SOUND_ADD("k053260", K053260, XTAL_3_579545MHz) |
| 2546 | MCFG_K053260_ADD("k053260", XTAL_3_579545MHz) |
| 2547 | 2547 | MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) |
| 2548 | 2548 | MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) |
| 2549 | 2549 | MACHINE_CONFIG_END |
| r22043 | r22044 | |
| 2659 | 2659 | MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) |
| 2660 | 2660 | MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) |
| 2661 | 2661 | |
| 2662 | | MCFG_SOUND_ADD("k053260", K053260, XTAL_3_579545MHz) |
| 2662 | MCFG_K053260_ADD("k053260", XTAL_3_579545MHz) |
| 2663 | 2663 | MCFG_SOUND_ROUTE(0, "lspeaker", 0.75) |
| 2664 | 2664 | MCFG_SOUND_ROUTE(1, "rspeaker", 0.75) |
| 2665 | 2665 | MACHINE_CONFIG_END |
| r22043 | r22044 | |
| 2706 | 2706 | MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) |
| 2707 | 2707 | MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) |
| 2708 | 2708 | |
| 2709 | | MCFG_SOUND_ADD("k053260", K053260, XTAL_3_579545MHz) |
| 2709 | MCFG_K053260_ADD("k053260", XTAL_3_579545MHz) |
| 2710 | 2710 | MCFG_SOUND_ROUTE(0, "lspeaker", 0.70) |
| 2711 | 2711 | MCFG_SOUND_ROUTE(1, "rspeaker", 0.70) |
| 2712 | 2712 | MACHINE_CONFIG_END |
| r22043 | r22044 | |
| 2788 | 2788 | MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) |
| 2789 | 2789 | MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) |
| 2790 | 2790 | |
| 2791 | | MCFG_SOUND_ADD("k053260", K053260, XTAL_3_579545MHz) |
| 2791 | MCFG_K053260_ADD("k053260", XTAL_3_579545MHz) |
| 2792 | 2792 | MCFG_SOUND_ROUTE(0, "lspeaker", 0.75) |
| 2793 | 2793 | MCFG_SOUND_ROUTE(1, "rspeaker", 0.75) |
| 2794 | 2794 | MACHINE_CONFIG_END |