rem: kprintf( "finding WarpInit..." );
context: InitMixroutine ( struct AHIPrivAudioCtrl *audioctrl ){  BOOL rc = FALSE;kprintf( "InitMixroutine\n" );  // Allocate and initialize the AHIChannelData structures  // This structure could be accessed from from interrupts!  audioctrl->ahiac_ChannelDatas = AHIAllocVec(      audioctrl->ac.ahiac_Channels * sizeof(struct AHIChannelData),      MEMF_PUBLIC | MEMF_CLEAR | MEMF_NOCACHESYNCPPC | MEMF_NOCACHESYNCM68K );  // 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),      MEMF_PUBLIC | MEMF_CLEAR | MEMF_NOCACHESYNCPPC | MEMF_NOCACHESYNCM68K );kprintf( "InitMixroutine #2\n" );  // Allocate structures specific to the PPC version  if( PPCObject != NULL )  {    audioctrl->ahiac_PPCMixBuffer = AHIAllocVec(        audioctrl->ac.ahiac_BuffSize,        MEMF_PUBLIC | MEMF_NOCACHEM68K );    audioctrl->ahiac_PPCMixInterrupt = AllocVec(        sizeof( struct Interrupt ),        MEMF_PUBLIC | MEMF_CLEAR );  }kprintf( "InitMixroutine #3\n" );  // Now link the list and fill in the channel number for each structure.  if( audioctrl->ahiac_ChannelDatas != NULL &&      audioctrl->ahiac_SoundDatas != NULL &&      ( PPCObject == NULL || audioctrl->ahiac_PPCMixBuffer != NULL ) &&      ( PPCObject == NULL || audioctrl->ahiac_PPCMixInterrupt != 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;    }kprintf( "InitMixroutine #4\n" );    if( PPCObject != NULL )    {      int r = ~0;      audioctrl->ahiac_PPCMixInterrupt->is_Node.ln_Type = NT_INTERRUPT;      audioctrl->ahiac_PPCMixInterrupt->is_Node.ln_Pri  = 127;      audioctrl->ahiac_PPCMixInterrupt->is_Node.ln_Name = (STRPTR) DevName;      audioctrl->ahiac_PPCMixInterrupt->is_Data         = audioctrl;      audioctrl->ahiac_PPCMixInterrupt->is_Code         = (void(*)(void)) Interrupt;      AddIntServer( INTB_PORTS, audioctrl->ahiac_PPCMixInterrupt );kprintf( "InitMixroutine #5\n" );#define GetSymbol( name ) r &= AHIGetELFSymbol( #name, (void*) &name ## Ptr )      GetSymbol( AddByteMVH    );      GetSymbol( AddByteSVPH   );      GetSymbol( AddBytesMVH   );      GetSymbol( AddBytesSVPH  );      GetSymbol( AddWordMVH    );      GetSymbol( AddWordSVPH   );      GetSymbol( AddWordsMVH   );      GetSymbol( AddWordsSVPH  );      GetSymbol( AddByteMVHB   );      GetSymbol( AddByteSVPHB  );      GetSymbol( AddBytesMVHB  );      GetSymbol( AddBytesSVPHB );      GetSymbol( AddWordMVHB   );      GetSymbol( AddWordSVPHB  );      GetSymbol( AddWordsMVHB  );      GetSymbol( AddWordsSVPHB );#undef GetSymbolkprintf( "InitMixroutine #6\n" );      // Sucess?      if( r != 0 )      {        if( PPCLibBase != NULL )        {          rc = TRUE;        }        else        {          // Initialize the WarpUp side                  struct PPCArgs args =           {            NULL,            0,            0,            NULL,            0,            { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },            { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }          };kprintf( "finding WarpInit..." );          if( AHIGetELFSymbol( "WarpInit", args.PP_Code ) )          {            int status;kprintf( "%08lx\n", args.PP_Code );            status = RunPPC( &args );                        if( status == PPERR_SUCCESS )            {              rc = TRUE;            }          }        }      }    }    else // PPCObject    {#define GetSymbol( name ) name ## Ptr = name;      GetSymbol( AddByteMVH    );      GetSymbol( AddByteSVPH   );      GetSymbol( AddBytesMVH   );      GetSymbol( AddBytesSVPH  );      GetSymbol( AddWordMVH    );      GetSymbol( AddWordSVPH   );      GetSymbol( AddWordsMVH   );      GetSymbol( AddWordsSVPH  );      GetSymbol( AddByteMVHB   );      GetSymbol( AddByteSVPHB  );      GetSymbol( AddBytesMVHB  );      GetSymbol( AddBytesSVPHB );      GetSymbol( AddWordMVHB   );      GetSymbol( AddWordSVPHB  );      GetSymbol( AddWordsMVHB  );      GetSymbol( AddWordsSVPHB );#undef GetSymbol      // Sucess!          rc = TRUE;    }  }  return rc;}