Changes

807 bytes added ,  15:34, 10 June 2017
no edit summary
Line 13: Line 13:  
| 0 || 27-24 || Number of buf B descriptors (each: 3 words).
 
| 0 || 27-24 || Number of buf B descriptors (each: 3 words).
 
|-
 
|-
| 0 || 31-28 || Number of type W desciptors (each: 3 words), never observed.
+
| 0 || 31-28 || Number of buf W desciptors (each: 3 words), never observed.
 
|-
 
|-
 
| 1 || 9-0 || Total word count (in u32's).
 
| 1 || 9-0 || Total word count (in u32's).
Line 118: Line 118:  
| ... || Rest of raw data.
 
| ... || Rest of raw data.
 
|}
 
|}
 +
 +
== Official marshalling code ==
 +
The official marshalling function takes an array of (buf_ptr, size) pairs and a type-field for each such pair.
 +
 +
Bitmask 0x10 seems to indicate null-terminated strings, but that flag is ignored by the marshalling code.
    
== Official marshalling code ==
 
== Official marshalling code ==
Line 127: Line 132:  
! Type Mask || Description || Direction
 
! Type Mask || Description || Direction
 
|-
 
|-
| 4 + 1 || Creates an A descriptor || In
+
| 4 + 1 || Creates a A descriptor with flags=0. || In
 +
|-
 +
| 0x40 + 4 + 1 || Creates a A descriptor with flags=1. || In
 +
|-
 +
| 0x80 + 4 + 1 || Creates a A descriptor with flags=3. || In?
 
|-
 
|-
| 4 + 2 || Creates a B descriptor || Out
+
| 4 + 2 || Creates a B descriptor with flags=0. || Out
 +
|-
 +
| 0x40 + 4 + 2 || Creates a B descriptor with flags=1. || Out
 +
|-
 +
| 0x80 + 4 + 2 || Creates a B descriptor with flags=3. || Out?
 
|-
 
|-
 
| 8 + 1 || Creates an X descriptor ||
 
| 8 + 1 || Creates an X descriptor ||
 
|-
 
|-
 
| 8 + 2 || Creates a C descriptor || Out
 
| 8 + 2 || Creates a C descriptor || Out
 +
|-
 +
| 0x10 + 8 + 2 || Creates a C descriptor, and writes the u16 size to an offset into raw data. || Out
 
|-
 
|-
 
| 0x20 + 1 || Creates both an A and X descriptor ||
 
| 0x20 + 1 || Creates both an A and X descriptor ||
 +
|-
 +
| 0x20 + 2 || Creates both an B and C descriptor ||
 
|}
 
|}
 +
 +
For types 0x21, 0x22 if size doesn't fit in u16, it's added to a list.
 +
    
== Official IPC Cmd Structure ==
 
== Official IPC Cmd Structure ==
Line 156: Line 176:  
   u32 offset_a_descriptors;
 
   u32 offset_a_descriptors;
 
   u32 offset_b_descriptors;
 
   u32 offset_b_descriptors;
 +
  u32 offset_w_descriptors; /* this is a guess */
 +
  u32 offset_raw_data;
 
   u32 offset_c_descriptors;
 
   u32 offset_c_descriptors;
  u32 offset_raw_data;
  −
  u32 unk1;
   
   u32 unk2;
 
   u32 unk2;
 
   u32 unk3;
 
   u32 unk3;
 
  }
 
  }