https://wikiti.brandonw.net/api.php?action=feedcontributions&user=Hooloovoo&feedformat=atomWikiTI - User contributions [en]2024-03-28T10:44:47ZUser contributionsMediaWiki 1.23.5https://wikiti.brandonw.net/index.php?title=84PCE:Ports:200084PCE:Ports:20002015-04-18T18:37:39Z<p>Hooloovoo: </p>
<hr />
<div>[[Category:84PCE:Ports:By_Address|2000 - SHA256]] [[Category:84PCE:Ports:By_Name|SHA256]]<br />
== Synopsis ==<br />
'''Port Number:''' 2000-?<br />
<br />
'''Memory-mapped Address:''' ??<br />
<br />
'''Function:''' Cryptography<br />
<br />
This is the SHA256 chip. It is very similar to [http://hackspire.unsads.com/wiki/index.php/Memory-mapped_I/O_ports#CC000000_-_SHA-256_hash_generator]. The inputs are 32-bit big-endian, but TI fails to compensate for this.<br />
This port is protected. Flash must be unlocked to read and write from this port.<br />
<br />
{|-<br />
|<u>Port</u>&nbsp;&nbsp;&nbsp;<br />
|<u>Default</u>&nbsp;&nbsp;&nbsp;<br />
|<u>Bits</u>&nbsp;&nbsp;&nbsp;<br />
|<u>Information</u>&nbsp;&nbsp;&nbsp;<br />
|}</div>Hooloovoohttps://wikiti.brandonw.net/index.php?title=84PCE:Ports:200084PCE:Ports:20002015-04-16T04:17:14Z<p>Hooloovoo: </p>
<hr />
<div>[[Category:84PCE:Ports:By_Address|2000 - Crypto]] [[Category:84PCE:Ports:By_Name|Crypto]]<br />
== Synopsis ==<br />
'''Port Number:''' 2000-?<br />
<br />
'''Memory-mapped Address:''' ??<br />
<br />
'''Function:''' Cryptography<br />
<br />
This is the crypto chip. It is very similar to [http://hackspire.unsads.com/wiki/index.php/Memory-mapped_I/O_ports#CC000000_-_SHA-256_hash_generator], but I cannot get it to produce sane SHA256 hashes.<br />
This port is protected. Flash must be unlocked to read and write from this port.<br />
<br />
{|-<br />
|<u>Port</u>&nbsp;&nbsp;&nbsp;<br />
|<u>Default</u>&nbsp;&nbsp;&nbsp;<br />
|<u>Bits</u>&nbsp;&nbsp;&nbsp;<br />
|<u>Information</u>&nbsp;&nbsp;&nbsp;<br />
|}</div>Hooloovoohttps://wikiti.brandonw.net/index.php?title=84PCE:Ports:200084PCE:Ports:20002015-04-16T04:08:06Z<p>Hooloovoo: Created page with "2000 - Crypto Crypto == Synopsis == '''Port Number:''' 2000-? '''Memory-mapped Address:''' ?? '''Functio..."</p>
<hr />
<div>[[Category:84PCE:Ports:By_Address|2000 - Crypto]] [[Category:84PCE:Ports:By_Name|Crypto]]<br />
== Synopsis ==<br />
'''Port Number:''' 2000-?<br />
<br />
'''Memory-mapped Address:''' ??<br />
<br />
'''Function:''' Cryptography<br />
<br />
This is the crypto chip. It is very similar to [http://hackspire.unsads.com/wiki/index.php/Memory-mapped_I/O_ports#CC000000_-_SHA-256_hash_generator], but I cannot get it to produce sane SHA256 hashes.<br />
<br />
<br />
{|-<br />
|<u>Port</u>&nbsp;&nbsp;&nbsp;<br />
|<u>Default</u>&nbsp;&nbsp;&nbsp;<br />
|<u>Bits</u>&nbsp;&nbsp;&nbsp;<br />
|<u>Information</u>&nbsp;&nbsp;&nbsp;<br />
|}</div>Hooloovoohttps://wikiti.brandonw.net/index.php?title=83Plus:OS:Certificate/Headers83Plus:OS:Certificate/Headers2015-04-08T16:25:25Z<p>Hooloovoo: </p>
<hr />
<div>[[Category:83Plus:OS_Information|Certificate / Headers]]<br />
<br />
== Certificate ==<br />
Each calculator has a certificate which is stored on the certification page. This is page 1E on the 83P, 3E on the 84P regular, and 7E on the 83P SE and 84P SE. The certification page is actually two physical sectors of the flash chip, each 8 KB in size. Only one sector is used for the certificate at a time, and new certificates are loaded into the currently unused sector.<br />
<br />
== Headers ==<br />
Every signed calculator variable has a header; this includes both the OS and apps. The header always comes before the variable and tells important information like the size of the variable and also the developer key used to sign it. The reason that the certificate and headers are grouped together is because they are both made up of fields.<br />
<br />
== Format ==<br />
Each field has the same general format. They all include the type of field, the size of the field, and usually, data.<br />
<br />
The general format is: TT TS [SS] [SS] [SS] [SS] [SS] [DD] [DD] [DD] ... [DD]<br />
<br />
Where T is the type, S is the size, D is data, and bracketed bytes are optional.<br />
<br />
=== Type ===<br />
These 12 bits are where the name of the field originates. <br />
* Certificate start with a 0, then the group number, and finally the field within that group.<br />
* OS and app header fields usually start with 80 and their specific type is the final nibble.<br />
<br />
=== Size ===<br />
The size bits indicate the number of bytes in the data field. The fist nibble can be any number from 0-F but D, E, and F are special case.<br />
* 0-C - This is the literal size of the data. If the nibble is 5, there are five data bytes following.<br />
* D - This means that there is a one byte size following.<br />
* E - This means that there are two size bytes following and the size of the data is stored in big endian.<br />
* F - F is rarely used. It is always the size byte of the initial field and indicates four size bytes following in big endian. There is really no reason to use F other than starting an OS or an app.<br />
<br />
=== Data ===<br />
The data for the field is purely data. It's format depends on the field type. All that is really important is that the amount of data is equal to the amount indicated by the size bits.<br />
<br />
== Fields ==<br />
The certificate and header and nothing more than several fields nested within each other. Here is a list of the [[:Category:83Plus:OS:Certificate/Headers:Fields_By_Number|known fields]].<br />
<br />
<br />
== Other Areas ==<br />
=== OS Valid Flag ===<br />
The OS valid flag is located at byte 1FE0h in the certificate at bit 7. Reset means the OS is valid.<br />
<br />
=== App Valid Bitmap ===<br />
The app valid bitmap is also located starting at 1FE0h. Each app page gets its own bit and the table works its way down.<br />
<br />
To sum it up, on a TI-84+SE:<br />
* bit 1, 1FE0h = page 69h<br />
* bit 2, 1FE0h = page 68h<br />
* bit 3, 1FE0h = page 67h<br />
* bit 4, 1FE0h = page 66h<br />
* bit 5, 1FE0h = page 65h<br />
* bit 6, 1FE0h = page 64h<br />
* bit 7, 1FE0h = page 63h<br />
* bit 0, 1FE1h = page 62h<br />
...<br />
<br />
The way the system works is that normally, the whole table is full of zeros. But when an app should be deleted, the OS sets its bit. The bit is also set while the app is being transferred so that you cannot pull the batteries during validation.<br />
<br />
=== App Trials Table ===<br />
This table is stored at 1F18h on the 83+ and 1E50 on everything else. Each app page gets two bytes in this table. The numbering starts with the last app and continues on from there.<br />
* 80h 00h - the app is completely free<br />
* 00h 00h - the app has a time stamp after which it won't work<br />
* 00h XXh - XX is the number of times you can execute the app<br />
<br />
=== 1DEAh ===<br />
This area is used to store important information during garbage collection.<br />
<br />
<br />
<br />
== Certificate / Header bcalls ==<br />
Some entry points useful for working with certificates:<br />
* [[83Plus:BCALLs:8027|FindFirstCertificateField]]<br />
* [[83Plus:BCALLs:8078|FindNextCertificateField]]<br />
* [[83Plus:BCALLs:802D|GetCertificateEnd]]<br />
* [[83Plus:BCALLs:8057|GetCertificateStart]]<br />
* [[83Plus:BCALLs:805A|GetFieldSize]]<br />
<br />
<br />
== Calculator ID number ==<br />
The calculator ID number is organized as follows:<br />
PPHSS-SSSSS-VVVV<br />
* P - product number <br />
* H - hardware revision<br />
* S - serial number<br />
* V - validation code<br />
<br />
<br />
Product numbers are as follows:<br />
* 01 - TI-92 Plus<br />
* 02 - TI-73<br />
* 03 - TI-89<br />
* 04 - TI-83 Plus<br />
* 08 - Voyage 200<br />
* 09 - TI-89 Titanium<br />
* 0A - TI-84 Plus<br />
* 0E - TI-Nspire<br />
* 13 - TI-84 Plus CE</div>Hooloovoohttps://wikiti.brandonw.net/index.php?title=83Plus:Ports:1683Plus:Ports:162014-10-21T22:46:13Z<p>Hooloovoo: </p>
<hr />
<div>[[Category:83Plus:Ports:By_Address:Protected|16 - Flash Sector Exclusion]] [[Category:83Plus:Ports:By_Address|16 - Flash Page Exclusion]] [[Category:83Plus:Ports:By_Name|Flash Page Exclusion]]<br />
{{Protected Port}}<br />
<br />
== Synopsis ==<br />
'''Port Number:''' 16h<br />
<br />
'''Function:''' Flash Sector/Page Exclusion<br />
<br />
This port controls which sectors or pages of Flash may contain executable code.<br />
<br />
=== Read Values ===<br />
* Nothing useful (mirror of [[83Plus:Ports:14|port 14]], I think.)<br />
<br />
=== Write Values ===<br />
* Each bit maps to a page, as determined by [[83Plus:Ports:05|port 5]]. Set a bit to disallow execution on that page.<br />
<br />
== Comments ==<br />
The above only applies to the 83+ basic; the port's function on the SE and 84+ is not known.<br />
<br />
This port is protected, just as [[83Plus:Ports:14|port 14]] is; it is the only other protected port in the original hardware. Note that as with most protected ports, Flash must be write-enabled for writing to have any effect.<br />
<br />
It is used, as are ports [[83Plus:Ports:22|22]] and [[83Plus:Ports:23|23]] on the SE, to prevent code in the archive from executing, thus theoretically limiting Flash execution privileges to FlashApps.<br />
<br />
=== An alternate version? ===<br />
The TI-73 uses this port differently. Instead of controlling individual pages, each bit corresponds to a Flash ''sector:''<br />
<br />
* Bit 0: Set if execution is not allowed in sector SA2 (pages 08-0B.)<br />
* Bit 1: Set if execution is not allowed in sector SA3 (pages 0C-0F.)<br />
* Bit 2: Set if execution is not allowed in sector SA4 (pages 10-13.)<br />
* Bit 3: Set if execution is not allowed in sector SA5 (pages 14-17.)<br />
<br />
== Credits and Contributions ==<br />
* '''Tijl Coosemans:''' Documentation [http://tijl.ulyssis.be/83phwinfo.txt here].<br />
<br />
== See Also ==<br />
* [[83Plus:Ports:05#Synopsis (TI-83 Plus)|Port 5]]<br />
* [[83Plus:Ports:22|Port 22]]<br />
* [[83Plus:Ports:23|Port 23]]</div>Hooloovoo