add: dd->current_buffer = dst;
context: Mixer_interrupt( REG( a1, struct AHIAudioCtrlDrv* AudioCtrl ) ){  if( dd->mixbuffer != NULL && dd->current_buffer != NULL )  {    PreTimer_proto*  pretimer  = (PreTimer_proto*)  AudioCtrl->ahiac_PreTimer;    PostTimer_proto* posttimer = (PostTimer_proto*) AudioCtrl->ahiac_PostTimer;    BOOL             pretimer_rc;    WORD*            src;    WORD*            dst;    size_t           skip;    size_t           samples;    int              i;    pretimer_rc = pretimer( AudioCtrl );	    CallHookPkt( AudioCtrl->ahiac_PlayerFunc, (Object*) AudioCtrl, NULL );    if( ! pretimer_rc )    {      CallHookPkt( AudioCtrl->ahiac_MixerFunc, (Object*) AudioCtrl, dd->mixbuffer );    }    /* Now translate and transfer to the DMA buffer */    skip    = ( AudioCtrl->ahiac_Flags & AHIACF_HIFI ) ? 2 : 1;    samples = dd->current_length;    src     = dd->mixbuffer;    dst     = dd->current_buffer;    i = min( samples,	     AudioCtrl->ahiac_MaxBuffSamples * 2 - dd->current_position );    /* Update 'current_position' and 'samples' before destroying 'i' */        dd->current_position += i;    samples -= i;        if( AudioCtrl->ahiac_Flags & AHIACF_STEREO )    {      i *= 2;    }    while( i > 0 )    {      *dst = ( ( *src & 0xff ) << 8 ) | ( ( *src & 0xff00 ) >> 8 );      src += skip;      dst += 1;      --i;    }    if( samples > 0 )    {      dst = dd->voice.mem.addr;      /* Update 'current_position' before destroying 'samples' */          dd->current_position = samples;      if( AudioCtrl->ahiac_Flags & AHIACF_STEREO )      {	samples *= 2;      }          while( samples > 0 )      {	*dst = ( ( *src & 0xff ) << 8 ) | ( ( *src & 0xff00 ) >> 8 );	src += skip;	dst += 1;	--samples;      }    }    /* Update 'current_buffer' */    dd->current_buffer = dst;        /* Flush to RAM */      CacheClearE( dd->current_buffer, dd->current_size, CACRF_ClearD );      posttimer( AudioCtrl );  }  dd->mixing_enabled = TRUE;}