rem: case MB_MORPHOS:
context: update_DSPEcho ( struct AHIEffDSPEcho *echo,                 struct AHIPrivAudioCtrl *audioctrl ){  ULONG size, samplesize;  struct Echo *es;  ULONG data_flags = MEMF_ANY;    switch( MixBackend )  {    case MB_NATIVE:    case MB_MORPHOS:      data_flags = MEMF_PUBLIC | MEMF_CLEAR;      break;          case MB_WARPUP:      // Non-cached from both the PPC and m68k side      data_flags = MEMF_PUBLIC | MEMF_CLEAR | MEMF_CHIP;      break;  }  /* Set up the delay buffer format */  switch(audioctrl->ac.ahiac_BuffType)  {    case AHIST_M16S:    case AHIST_M32S:      samplesize = 2;      break;    case AHIST_S16S:    case AHIST_S32S:      samplesize = 4;      break;    default:      return FALSE; // Panic  }  size = samplesize * (echo->ahiede_Delay + audioctrl->ac.ahiac_MaxBuffSamples);  es = AHIAllocVec( sizeof(struct Echo) + size,                    data_flags );    if(es)  {    ULONG mode = 0;    es->ahiecho_Offset       = 0;    es->ahiecho_SrcPtr       = es->ahiecho_Buffer;    es->ahiecho_DstPtr       = es->ahiecho_Buffer + (samplesize * echo->ahiede_Delay);    es->ahiecho_EndPtr       = es->ahiecho_Buffer + size;    es->ahiecho_BufferLength = echo->ahiede_Delay + audioctrl->ac.ahiac_MaxBuffSamples;    es->ahiecho_BufferSize   = size;    switch(audioctrl->ac.ahiac_BuffType)    {      case AHIST_M16S:        echo->ahiede_Cross = 0;        break;      case AHIST_S16S:        mode |= mode_stereo;        break;      case AHIST_M32S:        echo->ahiede_Cross = 0;        mode |= mode_32bit;        break;      case AHIST_S32S:        mode |= (mode_32bit | mode_stereo);        break;    }    es->ahiecho_Delay      = echo->ahiede_Delay;    es->ahiecho_MixD       = echo->ahiede_Mix;    es->ahiecho_MixN       = 0x10000 - echo->ahiede_Mix;    es->ahiecho_FeedbackDO = (echo->ahiede_Feedback >> 8) *                             (echo->ahiede_Cross >> 8);    es->ahiecho_FeedbackDS = (echo->ahiede_Feedback >> 8) *                             ((0x10000 - echo->ahiede_Cross) >> 8);    es->ahiecho_FeedbackNO = ((0x10000 - echo->ahiede_Feedback) >> 8) *                             (echo->ahiede_Cross >> 8);    es->ahiecho_FeedbackNS = ((0x10000 - echo->ahiede_Feedback) >> 8) *                             ((0x10000 - echo->ahiede_Cross) >> 8);    audioctrl->ahiac_EchoMasterVolume = 0x10000;    update_MasterVolume( audioctrl );    switch(mode)    {      // 16 bit      case 0:        es->ahiecho_Code   = do_DSPEchoMono16;        break;      // stereo 16 bit      case 1:        es->ahiecho_Code   = do_DSPEchoStereo16;        break;      // 32 bit      case 2:        es->ahiecho_Code   = do_DSPEchoMono32;        break;      // stereo 32 bit      case 3:        es->ahiecho_Code   = do_DSPEchoStereo32;        break;      // Should not happen!      default:        AHIFreeVec(es);        return FALSE;    }    // Structure filled, make it available to the mixing routine    audioctrl->ahiac_EffDSPEchoStruct = es;    return TRUE;  }  return FALSE;}