Line 76:
Line 76:
== Version history ==
== Version history ==
β
There are '''12''' known normal versions (along with '''9''' [[#vWii note|matching vWii versions]]) of the DI driver found in various [[IOS History|IOS versions]], based on the IOS versions still present on NUS. These are generalized into 5 version families, based on observable behavior (this is not strictly chronological, presumably as Nintendo was working on multiple versions with the same features at the same time). It is quite likely that there are additional changes not noted here.
+
There are '''13''' known normal versions (along with '''9''' [[#vWii note|matching vWii versions]]) of the DI driver found in various [[IOS History|IOS versions]], based on the IOS versions present on NUS and those found on various game discs. These are generalized into 5 version families, based on observable behavior (this is not strictly chronological, presumably as Nintendo was working on multiple versions with the same features at the same time). It is quite likely that there are additional changes not noted here.
The DI driver includes a full set of [[:/dev/es|ES]] IoctlV wrappers, although it only uses ES_DiVerify and ES_DiVerifyWithTicketView. It also includes instructions for all [[syscalls]], even though most are not used. Both of those change across versions, even though those differences do not actually show up in practice.
The DI driver includes a full set of [[:/dev/es|ES]] IoctlV wrappers, although it only uses ES_DiVerify and ES_DiVerifyWithTicketView. It also includes instructions for all [[syscalls]], even though most are not used. Both of those change across versions, even though those differences do not actually show up in practice.
Line 129:
Line 129:
|data-sort-value="z" {{Partial|vWii}}
|data-sort-value="z" {{Partial|vWii}}
|-
|-
β
| [[#Group B|B]]
+
|rowspan="2"| [[#Group B|B]]
|data-sort-value="1181326629"| [[#Jun 8 2007 18:17:09|Jun 8 2007 18:17:09]]
|data-sort-value="1181326629"| [[#Jun 8 2007 18:17:09|Jun 8 2007 18:17:09]]
β
| {{Yes}}
+
|rowspan="2" {{Yes}}
β
| {{No}}
+
|rowspan="2" {{No}}
β
| {{Yes}}
+
|rowspan="2" {{Yes}}
β
| {{Yes}}
+
|rowspan="2" {{Yes}}
β
| {{Yes}}
+
|rowspan="2" {{Yes}}
β
| {{Yes}}
+
|rowspan="2" {{Yes}}
β
| {{Yes}}
+
|rowspan="2" {{Yes}}
β
| {{Yes}}
+
|rowspan="2" {{Yes}}
β
| {{Yes}}
+
|rowspan="2" {{Yes}}
+
|rowspan="2" {{No}}
+
|rowspan="2" {{No}}
+
|rowspan="2" data-sort-value="118"| 0x76
+
|rowspan="2" data-sort-value="61" | 0x3d
| {{No}}
| {{No}}
β
| {{No}}
+
|-
β
|data-sort-value="118"| 0x76
+
|data-sort-value="1181326810"| [[#Jun 8 2007 18:20:10|Jun 8 2007 18:20:10]]
β
|data-sort-value="61" | 0x3d
| {{No}}
| {{No}}
|-
|-
Line 533:
Line 536:
| Open heap
| Open heap
| 13600000
| 13600000
+
| ?
+
| 0x18000
+
|}
+
+
==== Jun 8 2007 18:20:10 ====
+
+
Only found in [[IOS28]] version 1288 (which is the first build that split things into modules). This version is not present on NUS, but can be found on the update partition of some discs, such as ''LEGO Star Wars: The Complete Saga'' and ''Marble Saga: Kororinpa''. The only difference between the build from the earlier build is that the open heap is at address 0x13800000 (0x9c << 0x15) instead of address 0x13600000 (0x9b << 0x15). This is a 1-byte difference at offset bfc in the file or at address 20200ad4. (There are also differences for the build dates).
+
+
{| class="wikitable"
+
! MD5
+
| colspan="3"| 0f6a5281e0cec477147baabf0c69fbdc
+
|-
+
! Thing
+
! Virtual address
+
! Physical address
+
! Size
+
|-
+
| Code (and entry point)
+
| 20200000
+
| 139B0000
+
| 0x80E0
+
|-
+
| Data (ES vars)
+
| 20209000
+
| 139B9000
+
| 0x140
+
|-
+
| BSS (zero'd)
+
| 2020A000
+
| 139BA000
+
| 0x2BDC4
+
|-
+
| Stack
+
| 2022ddc4
+
| ?
+
| 0x8000
+
|-
+
| Protected heap
+
| 2020A020
+
| ?
+
| 0x4000
+
|-
+
| Open heap
+
| 13800000
| ?
| ?
| 0x18000
| 0x18000