FSPXI:ReadFileSHA256: Difference between revisions

From 3dbrew
Jump to navigation Jump to search
Luigi2us (talk | contribs)
No edit summary
Luigi2us (talk | contribs)
No edit summary
Line 9: Line 9:
|-
|-
| 1
| 1
| File(/archive?) handle lower word
| File handle lower word
|-
|-
| 2
| 2
Line 21: Line 21:
|-
|-
| 5
| 5
| Size of second memory block
| Size of read buffer
|-
|-
| 6
| 6
Line 27: Line 27:
|-
|-
| 7
| 7
| Size of first memory block
| Size of hashtable
|-
|-
| 8
| 8
| (size of first mem block << 8)  <nowiki>|</nowiki> 4
| (size of hashtable << 8)  <nowiki>|</nowiki> 4
|-
|-
| 9
| 9
| Pointer to first memory block
| Pointer to hashtable
|-
|-
| 10
| 10
| (size of second mem block << 8)  <nowiki>|</nowiki> 0x14
| (size of read buffer << 8)  <nowiki>|</nowiki> 0x14
|-
|-
| 11
| 11
| Pointer to second memory block
| Pointer to read buffer
|}
|}


Line 61: Line 61:
|}
|}


The data read are stored in the second memory block. The first memory block is filled with hashes, in an unknown manner.
The data read are stored in the read buffer. For each 0x1000-byte block read, a SHA256 hash of the block is stored in the hashtable.


Reads seem to be sector-aligned (one sector = 0x1000 bytes when reading from the cart, not sure if that is true everywhere). The first memory block seems to be filled with one hash per sector read.
It is unknown how hashing behaves if the read offset/size are not aligned to a 0x1000-byte boundary.

Revision as of 15:36, 28 March 2015

Request

Index Word Description
0 Header code [0x004D01C4]
1 File handle lower word
2 File handle upper word
3 Offset lower word
4 Offset upper word
5 Size of read buffer
6 Unknown (always 0x00001000)
7 Size of hashtable
8 (size of hashtable << 8) | 4
9 Pointer to hashtable
10 (size of read buffer << 8) | 0x14
11 Pointer to read buffer

Response

Index Word Description
0 Header code
1 Result code
2 Size read
3 4

The data read are stored in the read buffer. For each 0x1000-byte block read, a SHA256 hash of the block is stored in the hashtable.

It is unknown how hashing behaves if the read offset/size are not aligned to a 0x1000-byte boundary.