Advertisement
Guest User

Untitled

a guest
Aug 25th, 2011
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.36 KB | None | 0 0
  1. #include <stdint.h>
  2.  
  3. typedef struct
  4. {
  5.     uint8_t cmd;
  6.     union
  7.     {
  8.          unsigned ext:24;
  9.          struct
  10.          {
  11.              uint8_t count;
  12.              uint16_t __unused_00;
  13.          };
  14.     }
  15.     union
  16.     {
  17.          uint32_t word;
  18.          struct
  19.          {
  20.              uint8_t bank;
  21.              unsigned offset:24;
  22.          };
  23.     };
  24. }
  25. map_header_cmd;
  26.  
  27. void*
  28. seg_to_ram( int seg )
  29. {
  30.     void *seg_table = 0x80166FA8;
  31.  
  32.     if(seg == 0x80)
  33.         return 0x80000000;
  34.  
  35.     seg &= 0xF;
  36.  
  37.     if(seg_table[seg])
  38.         return seg_table[seg] | 0x80000000;
  39.  
  40.     return 0;
  41. }
  42.  
  43. void
  44. set_segment( int seg_n, void *ptr )
  45. {
  46.     uint32_t **dl_ptr;
  47.     dl_ptr = (uint32_t*)(*(uint32_t*)(z_ctxt) + 0x2D0);
  48.     **(*dl_ptr++) = 0xDB060000 | (seg_n * 4);
  49.     **(*dl_ptr++) = (uint32_t)ptr;
  50.     **(*dl_ptr++) = 0xE7000000;
  51.     **(*dl_ptr++) = 0x00000000;
  52. }
  53.  
  54. void
  55. texture_bytecode(void *z_ctxt)
  56. {
  57.     map_header_cmd *map_ptr;
  58.     void *(tex_func)( void *z_ctxt );
  59.  
  60.     for(
  61.         map_ptr = (uint32_t*)(*(uint32_t*)(z_ctxt + 0x11CC8));
  62.         map_ptr->cmd != 0x14;
  63.         map_ptr++
  64.     {
  65.         if(map_ptr->cmd == 0xA
  66.         && map_ptr->ext
  67.         && map_ptr->bank)
  68.             goto do_texture;
  69.     }
  70.  
  71.     return;
  72.  
  73.   do_texture:
  74.     tex_func = (void*)(map_ptr->ext + seg_to_ram(map_ptr->bank));
  75.     tex_func( z_ctxt );
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement