dsp_interface.cpp 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // Copyright 2008 Dolphin Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include "dsp_interface.h"
  4. void IDSP::SendTask(void* addr, u16 iram_addr, u16 len, u16 start)
  5. {
  6. // addr main ram addr 4byte aligned (1 Gekko word)
  7. // iram_addr dsp addr 4byte aligned (2 DSP words)
  8. // len block length in bytes multiple of 4 (wtf? if you want to fill whole iram, you need
  9. // 8191)
  10. // (8191 % 4 = 3) wtffff
  11. // start dsp iram entry point
  12. while (CheckMailTo())
  13. ;
  14. SendMailTo(0x80F3A001);
  15. while (CheckMailTo())
  16. ;
  17. SendMailTo((u32)addr);
  18. while (CheckMailTo())
  19. ;
  20. SendMailTo(0x80F3C002);
  21. while (CheckMailTo())
  22. ;
  23. SendMailTo(iram_addr);
  24. while (CheckMailTo())
  25. ;
  26. SendMailTo(0x80F3A002);
  27. while (CheckMailTo())
  28. ;
  29. SendMailTo(len);
  30. while (CheckMailTo())
  31. ;
  32. SendMailTo(0x80F3B002);
  33. while (CheckMailTo())
  34. ;
  35. SendMailTo(0);
  36. while (CheckMailTo())
  37. ;
  38. SendMailTo(0x80F3D001);
  39. while (CheckMailTo())
  40. ;
  41. SendMailTo(start);
  42. while (CheckMailTo())
  43. ;
  44. }