rem: case MB_MORPHOS:
context: InitMixroutine( struct AHIPrivAudioCtrl *audioctrl ){  BOOL rc = FALSE;  // Allocate and initialize the AHIChannelData structures  // This structure could be accessed from from interrupts!  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;  }  audioctrl->ahiac_ChannelDatas = AHIAllocVec(      audioctrl->ac.ahiac_Channels * sizeof( struct AHIChannelData ),      data_flags );  // Allocate and initialize the AHISoundData structures  // This structure could be accessed from from interrupts!  audioctrl->ahiac_SoundDatas = AHIAllocVec(      audioctrl->ac.ahiac_Sounds * sizeof( struct AHISoundData ),      data_flags );  // Now link the list and fill in the channel number for each structure.  if( audioctrl->ahiac_ChannelDatas != NULL      && audioctrl->ahiac_SoundDatas != NULL )  {    struct AHIChannelData *cd;    struct AHISoundData   *sd;    int                    i;    cd = audioctrl->ahiac_ChannelDatas;    audioctrl->ahiac_WetList = cd;    audioctrl->ahiac_DryList = NULL;    for(i = 0; i < audioctrl->ac.ahiac_Channels - 1; i++)    {      // Set Channel No      cd->cd_ChannelNo = i;      // Set link to next channel      cd->cd_Succ = cd + 1;      cd++;    }    // Set the last No    cd->cd_ChannelNo = i;    // Clear the last link;    cd->cd_Succ = NULL;    sd = audioctrl->ahiac_SoundDatas;    for( i = 0; i < audioctrl->ac.ahiac_Sounds; i++)    {      sd->sd_Type = AHIST_NOTYPE;      sd++;    }  }  switch( MixBackend )  {    case MB_NATIVE:    case MB_MORPHOS:      rc = TRUE;      break;          case MB_WARPUP:      rc = WarpUpInit( audioctrl );      break;  }  return rc;}