Line 59:
Line 59:
|}
|}
−
Total_frames is at least 0x4 normally. When a sysupdate is included, total_frames is 0x4+<total frames required for the titlelist(normally 0x1)>.
+
Total_frames is at least 0x4 normally. When a sysupdate is included, total_frames is 0x4+<total frames required for the titlelist(normally 0x1)>. Total_frames should be <=0x20, but the code doesn't check for this specific value.
−
Frames:
+
==== Checksum ====
+
The checksum seed is the 4-byte output from [[PS:EncryptDecryptAes|encrypting]] zeros with AES-CTR using [[PSPXI:EncryptDecryptAes|keytype5]]. The CTR is the output from this: "for(i=0; i<0x10; i++)ctr[i] = ctrseed[i] ^ host_macaddress[i % 6];" This ctrseed is a fixed 0x10-byte random-data block stored in DLP-sysmodule .rodata.
+
This seed is initialized after connecting to/creating the DLP network.
+
+
The checksum stored in the above data frame header is then calculated using this checksum seed.
+
+
==== Frames ====
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 83:
Line 89:
The structure of each spectator frame relative to "frame-specific payload" is described below.
The structure of each spectator frame relative to "frame-specific payload" is described below.
−
==== Metadata frame ====
+
===== Metadata frame =====
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 185:
Line 191:
If the u16 at frameheader+0x6 is less than 0x101, the 8-bytes at outptr are cleared to all-zero, instead of copying the data from offset 0x2E8.
If the u16 at frameheader+0x6 is less than 0x101, the 8-bytes at outptr are cleared to all-zero, instead of copying the data from offset 0x2E8.
−
==== Icon gfx frame ====
+
===== Icon gfx frame =====
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 197:
Line 203:
|}
|}
−
==== Sysupdate titlelist frame ====
+
===== Sysupdate titlelist frame =====
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-