Advertisement
xerpi

Vita CDRAM enable

Jan 12th, 2024 (edited)
677
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.86 KB | None | 0 0
  1.   cdram_magic_value_3 = 0x2251;
  2.   cdram_magic_value_2 = 0x8c;
  3.   cdram_magic_value_1 = 0x69462300;
  4.   cdram_magic_value_4 = 0x23;
  5.   cdram_magic_value_5 = 0x18100800;
  6.  
  7. int smc_0x117_cdram_enable(void)
  8. {
  9.   uint uVar1;
  10.   undefined4 uVar2;
  11.   undefined4 uVar3;
  12.   uint tmp;
  13.   uint uVar4;
  14.   uint emctop_regs;
  15.  
  16.   if (cdram_enabled == 0) {
  17.     cdram_enabled = 1;
  18.     tmp = sceKernelSysrootGetErnieWakeupFactor();
  19.     emctop_regs = SceEmcTop_vaddr;
  20.     if ((tmp & 0x80) == 0) {
  21.       sceKernelDisableIntr(0x22);
  22.       uVar3 = cdram_magic_value_1;
  23.       uVar2 = cdram_magic_value_2;
  24.       uVar4 = cdram_magic_value_3 & 0xfffffdff;
  25.       *(uint *)emctop_regs = uVar4;
  26.       *(undefined4 *)(emctop_regs + 4) = 0x72233;
  27.       *(undefined4 *)(emctop_regs + 8) = 0x7725245;
  28.       *(undefined4 *)(emctop_regs + 0xc) = 0x1414;
  29.       *(undefined4 *)(emctop_regs + 0x10) = 0x1f0704;
  30.       *(undefined4 *)(emctop_regs + 0x14) = 0x1f0c0f;
  31.       *(undefined4 *)(emctop_regs + 0x18) = 0x20b;
  32.       *(undefined4 *)(emctop_regs + 0x1c) = 6;
  33.       *(undefined4 *)(emctop_regs + 0x38) = uVar2;
  34.       *(undefined4 *)(emctop_regs + 0x3c) = uVar3;
  35.       *(undefined4 *)(emctop_regs + 0x2c) = 0x15fff;
  36.       tmp = SceEmcTop_vaddr;
  37.       DataMemoryBarrier(0x1f);
  38.       if (SceEmcTop_vaddr != 0) {
  39.         *(undefined4 *)(SceEmcTop_vaddr + 0x28) = 0xe0000;
  40.         *(uint *)(tmp + 0x24) = *(uint *)(tmp + 0x24) & 0x30 | 1;
  41.         DataMemoryBarrier(0x1f);
  42.         do {
  43.         } while (*(int *)(tmp + 0x24) << 0x1f < 0);
  44.       }
  45.       sceKernelUsleep(200000);
  46.       *(undefined4 *)(emctop_regs + 0x24) = 0x30;
  47.       *(undefined4 *)(emctop_regs + 0x24) = 0;
  48.       tmp = SceEmcTop_vaddr;
  49.       DataSynchronizationBarrier(0xf);
  50.       if (SceEmcTop_vaddr != 0) {
  51.         *(undefined4 *)(SceEmcTop_vaddr + 0x28) = 0x40400;
  52.         *(uint *)(tmp + 0x24) = *(uint *)(tmp + 0x24) & 0x30 | 1;
  53.         uVar1 = SceEmcTop_vaddr;
  54.         DataMemoryBarrier(0x1f);
  55.         do {
  56.         } while (*(int *)(tmp + 0x24) << 0x1f < 0);
  57.         if (SceEmcTop_vaddr != 0) {
  58.           *(undefined4 *)(SceEmcTop_vaddr + 0x28) = 0x20000;
  59.           *(uint *)(uVar1 + 0x24) = *(uint *)(uVar1 + 0x24) & 0x30 | 1;
  60.           tmp = SceEmcTop_vaddr;
  61.           DataMemoryBarrier(0x1f);
  62.           do {
  63.           } while (*(int *)(uVar1 + 0x24) << 0x1f < 0);
  64.           if (SceEmcTop_vaddr != 0) {
  65.             *(undefined4 *)(SceEmcTop_vaddr + 0x28) = 0x20000;
  66.             *(uint *)(tmp + 0x24) = *(uint *)(tmp + 0x24) & 0x30 | 1;
  67.             uVar1 = SceEmcTop_vaddr;
  68.             DataMemoryBarrier(0x1f);
  69.             do {
  70.             } while (*(int *)(tmp + 0x24) << 0x1f < 0);
  71.             if (SceEmcTop_vaddr != 0) {
  72.               *(undefined4 *)(SceEmcTop_vaddr + 0x28) = 0x31;
  73.               *(uint *)(uVar1 + 0x24) = *(uint *)(uVar1 + 0x24) & 0x30 | 1;
  74.               tmp = SceEmcTop_vaddr;
  75.               DataMemoryBarrier(0x1f);
  76.               do {
  77.               } while (*(int *)(uVar1 + 0x24) << 0x1f < 0);
  78.               if (SceEmcTop_vaddr != 0) {
  79.                 *(undefined4 *)(SceEmcTop_vaddr + 0x28) = 0x200000;
  80.                 *(uint *)(tmp + 0x24) = *(uint *)(tmp + 0x24) & 0x30 | 3;
  81.                 DataMemoryBarrier(0x1f);
  82.                 do {
  83.                 } while (*(int *)(tmp + 0x24) << 0x1f < 0);
  84.               }
  85.             }
  86.           }
  87.         }
  88.       }
  89.     }
  90.     else {
  91.       sceKernelDisableIntr(0x22);
  92.       uVar3 = cdram_magic_value_1;
  93.       uVar2 = cdram_magic_value_2;
  94.       uVar4 = cdram_magic_value_3 & 0xfffffdff;
  95.       *(uint *)emctop_regs = uVar4;
  96.       *(undefined4 *)(emctop_regs + 4) = 0x72233;
  97.       *(undefined4 *)(emctop_regs + 8) = 0x7725245;
  98.       *(undefined4 *)(emctop_regs + 0xc) = 0x1414;
  99.       *(undefined4 *)(emctop_regs + 0x10) = 0x1f0704;
  100.       *(undefined4 *)(emctop_regs + 0x14) = 0x1f0c0f;
  101.       *(undefined4 *)(emctop_regs + 0x18) = 0x20b;
  102.       *(undefined4 *)(emctop_regs + 0x1c) = 6;
  103.       *(undefined4 *)(emctop_regs + 0x38) = uVar2;
  104.       *(undefined4 *)(emctop_regs + 0x3c) = uVar3;
  105.       *(undefined4 *)(emctop_regs + 0x2c) = 0x15fff;
  106.       DataMemoryBarrier(0x1f);
  107.       *(undefined4 *)(emctop_regs + 0x24) = 0;
  108.       tmp = SceEmcTop_vaddr;
  109.       DataSynchronizationBarrier(0xf);
  110.       if (SceEmcTop_vaddr != 0) {
  111.         *(undefined4 *)(SceEmcTop_vaddr + 0x28) = 0xe0000;
  112.         *(uint *)(tmp + 0x24) = *(uint *)(tmp + 0x24) & 0x30 | 1;
  113.         DataMemoryBarrier(0x1f);
  114.         do {
  115.         } while (*(int *)(tmp + 0x24) << 0x1f < 0);
  116.       }
  117.       sceKernelUsleep(200000);
  118.     }
  119.     *(uint *)emctop_regs = uVar4 | 0x600;
  120.     DataMemoryBarrier(0x1f);
  121.     *(undefined4 *)(emctop_regs + 0x230) = 0;
  122.     *(undefined4 *)(emctop_regs + 0x244) = 1;
  123.     DataMemoryBarrier(0x1f);
  124.     *(undefined4 *)(emctop_regs + 0x234) = 0;
  125.     *(undefined4 *)(emctop_regs + 0x230) = 1;
  126.     DataMemoryBarrier(0x1f);
  127.     sceKernelEnableIntr(0x22);
  128.     return 0;
  129.   }
  130.   return 0;
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement