Advertisement
Huntereb

ARM11 Mario Kart 7 Unlock Everything (All regions)

Jan 25th, 2015
21,364
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.50 KB | None | 0 0
  1. #define START_SECTION __attribute__ ((section (".text.start"), naked))
  2.  
  3. // make sure code is PIE
  4. #ifndef __PIE__
  5. #error "Must compile with -fPIE"
  6. #endif
  7.  
  8. int(*IFile_Open)(void *this, const short *path, int flags) = 0x0022FE08;
  9. int(*IFile_Write)(void *this, unsigned int *written, void *src, unsigned int len) = 0x00168764;
  10. int (*GX_SetTextureCopy)(void *input_buffer, void *output_buffer, unsigned int size, int in_x, int in_y, int out_x, int out_y, int flags) = 0x0011DD48;
  11. int (*GSPGPU_FlushDataCache)(void *addr, unsigned int len) = 0x00191504;
  12. int (*svcSleepThread)(unsigned long long nanoseconds) = 0x0023FFE8;
  13.  
  14. int uvl_entry();
  15.  
  16. int START_SECTION
  17. uvl_start ()
  18. {
  19.     __asm__ volatile (".word 0xE1A00000");
  20.     uvl_entry();
  21.     __asm__ volatile ("bx lr");
  22. }
  23.  
  24. int
  25. uvl_entry ()
  26. {
  27.     unsigned int addr;
  28.     void *this = 0x08F10000;
  29.     int *written = 0x08F01000;
  30.     int *buf = 0x18410000;
  31.  
  32.     unsigned int offset = 0;
  33.     unsigned int i;
  34.     unsigned int f;
  35.  
  36.     svcSleepThread(0x400000LL);
  37.  
  38.     //copy block of memory to buffer
  39.     addr = 0x1413B000;      //This is the address we'll take memory from in the game
  40.     GSPGPU_FlushDataCache(addr, 0x10000);
  41.     GX_SetTextureCopy(addr, buf, 0x10000, 0, 0, 0, 0, 8);
  42.     GSPGPU_FlushDataCache(buf, 0x10000);
  43.  
  44.     for (i = 0; i < 0x10000; i++)   //Scan ram for a constant value between regions
  45.     {
  46.         if ((buf[i] == 0x00610064) && (buf[i + 1] == 0x00610074) && (buf[i + 2] == 0x002F003A) && (buf[i + 3] == 0x0073002F))
  47.         {
  48.             offset = i - 2291;
  49.  
  50.             //Write screen buff so we know it worked
  51.             GSPGPU_FlushDataCache(0x18000000, 0x00038400);
  52.             GX_SetTextureCopy(0x18000000, 0x1F48F000, 0x00038400, 0, 0, 0, 0, 8);
  53.             svcSleepThread(0x400000LL);
  54.             GSPGPU_FlushDataCache(0x18000000, 0x00038400);
  55.             GX_SetTextureCopy(0x18000000, 0x1F4C7800, 0x00038400, 0, 0, 0, 0, 8);
  56.             svcSleepThread(0x400000LL);
  57.         }
  58.     }
  59.  
  60.         f = offset + 1;
  61.  
  62.         buf[f] = 0xFF01869F;//VR + Tracks
  63.  
  64.         f = offset + 2;
  65.  
  66.         buf[f] = 0xFFFFFFFF;//Characters
  67.  
  68.         f = offset + 4;
  69.  
  70.         buf[f] = 0x0000FFFF;//Karts
  71.  
  72.         f = offset + 5;
  73.  
  74.         buf[f] = 0x000000FF;//Wheels
  75.  
  76.         f = offset + 6;
  77.  
  78.         buf[f] = 0x000000FF;//Gliders
  79.  
  80.         f = offset + 7;
  81.  
  82.         buf[f] = 0x000900FF;//Mirror Mode & Title Art & 10,000 VR flag
  83.  
  84.         //flush back to memory and also write to file for debuging
  85.         svcSleepThread(0x400000LL);
  86.         GSPGPU_FlushDataCache(buf, 0x10000);
  87.         GX_SetTextureCopy(buf, addr, 0x10000, 0, 0, 0, 0, 8);
  88.         GSPGPU_FlushDataCache(addr, 0x10000);
  89.         //IFile_Write(this, written, buf, 0x10000);
  90.         svcSleepThread(0x400000LL);
  91.  
  92.     return 0;
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement