<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.theiphonewiki.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=1am3r</id>
	<title>The iPhone Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.theiphonewiki.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=1am3r"/>
	<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/wiki/Special:Contributions/1am3r"/>
	<updated>2026-06-09T14:18:56Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.14</generator>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=S5L8720_(Hardware_-_SHA1)&amp;diff=3661</id>
		<title>S5L8720 (Hardware - SHA1)</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=S5L8720_(Hardware_-_SHA1)&amp;diff=3661"/>
		<updated>2009-04-30T17:21:43Z</updated>

		<summary type="html">&lt;p&gt;1am3r: /* Programming Guide */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==S5L8720 SHA-1 Hardware==&lt;br /&gt;
Base Address: 0x38000000&lt;br /&gt;
&lt;br /&gt;
===Programming Guide===&lt;br /&gt;
As there is no real documentation of the hardware (The Samsung S3C6400X seams to use a very similar SHA-1 generator, but not the same), this is based on what [[iBoot]] does and on a lot of trial-and-error.&lt;br /&gt;
====How it works====&lt;br /&gt;
Basically it is like a hardware version of a SHA-1 algorithm. The hardware processes data in 512Bit (64 Bytes) chunks (Just like a software algorithm). &amp;lt;br&amp;gt;&lt;br /&gt;
It does NO pre-processing (appending a '1' Bit to the data, pad the data so that the length mod 512 is 448, and append the bit-length of the data as a 64-bit big-endian integer). &amp;lt;br&amp;gt;&lt;br /&gt;
This has to be done in software.&lt;br /&gt;
&lt;br /&gt;
====Calculating the SHA-1 of a message====&lt;br /&gt;
# Prepare the message as usual. See [http://en.wikipedia.org/wiki/SHA_hash_functions Wikipedia on SHA]&lt;br /&gt;
# Switch on the clock for the SHA-1 generator&lt;br /&gt;
# Reset the generator. To do this set bit 0 of reset register and clear it afterwards (iBoot waits until the hash is ready before resetting it)&lt;br /&gt;
# Clear (Write 0) to the Configuration Register (Not sure if this is needed as it already reads 0 after resetting, but iBoot does it)&lt;br /&gt;
# Clear register 0x80 and 0x10 (Also not sure why, as they also read 0)&lt;br /&gt;
# Write 64 bytes of the message to the data input registers starting at the lowest&lt;br /&gt;
# If this were the the first 64 bytes clear bit 3 in the Configuration register, else set it&lt;br /&gt;
# Set bit 1 (Start Hash) of the Configuration register and wait until bit 0 (Hash Busy) is cleared&lt;br /&gt;
# If more data to hash go to point 6&lt;br /&gt;
# Read the calculated hash of the Output SHA-1 Hash registers&lt;br /&gt;
# Switch off the clock&lt;br /&gt;
&lt;br /&gt;
==Registers==&lt;br /&gt;
===Register Summary===&lt;br /&gt;
&amp;lt;table border=1 width=100%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;&amp;lt;b&amp;gt;Register&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x00&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Configuration&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x04&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Reset&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x08&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Unknown, but referenced in iBoot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x0C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Unknown, but referenced in iBoot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x10&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Unknown, but referenced in iBoot (Set to 0 before calculating a hash)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x20 - 0x30&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Output SHA-1 hash / Input Initialization Vector&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x40 - 0x7C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Data Input (64 Bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x80&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Unknown, but referenced in iBoot (Set to 0 before calculating a hash)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x84&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Unknown, but referenced in iBoot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x8C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Unknown, but referenced in iBoot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Configuration Register===&lt;br /&gt;
&amp;lt;table border=1 width=100%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;&amp;lt;b&amp;gt;Bit&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Function&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;Bit 0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Hash Busy. Is set when the hash calculation is started and cleared when the generator is done.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;Bit 1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Start Hash. Set to 1 to start hashing of the data in the Input Data registers.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;Bit 2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Unknown&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;Bit 3&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Config IV. Use arbitary IV (=1), Use SHA-1 constants (=0) (Used for starting a new hash (=0), or continue a previous one (=1)).&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
All other bits are unknown or not used&lt;br /&gt;
&lt;br /&gt;
===Reset Register===&lt;br /&gt;
&amp;lt;table border=1 width=100%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;&amp;lt;b&amp;gt;Bit&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Function&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;Bit 0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Reset Hash. Resets the generator and all registers.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
All other bits are unknown or not used&lt;br /&gt;
&lt;br /&gt;
===Hash Out / IV In===&lt;br /&gt;
Read: Outputs the hash in little-endian &amp;lt;br&amp;gt;&lt;br /&gt;
Write: Set the initialization vectors&lt;br /&gt;
&lt;br /&gt;
===Data Input===&lt;br /&gt;
Read: Read what was previously written there (like normal RAM) &amp;lt;br&amp;gt;&lt;br /&gt;
Write: The current 64 byte data chunk to calculate the hash of. (little-endian)&lt;/div&gt;</summary>
		<author><name>1am3r</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=S5L8720_(Hardware_-_SHA1)&amp;diff=3381</id>
		<title>S5L8720 (Hardware - SHA1)</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=S5L8720_(Hardware_-_SHA1)&amp;diff=3381"/>
		<updated>2009-04-09T09:44:48Z</updated>

		<summary type="html">&lt;p&gt;1am3r: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==S5L8720 SHA-1 Hardware==&lt;br /&gt;
Base Address: 0x38000000&lt;br /&gt;
&lt;br /&gt;
===Programming Guide===&lt;br /&gt;
As i have no real documentation of the hardware (The Samsung S3C6400X seams to use a very similar SHA-1 generator, but not the same), this is based on what [[iBoot]] does and what i found out by trying myself.&lt;br /&gt;
====How it works====&lt;br /&gt;
Basically it is like a hardware version of a SHA-1 algorithm. The hardware processes data in 512Bit (64 Bytes) chunks (Just like a software algorithm). &amp;lt;br&amp;gt;&lt;br /&gt;
It does NO pre-processing (appending a '1' Bit to the data, pad the data so that the length mod 512 is 448, and append the bit-length of the data as a 64-bit big-endian integer). &amp;lt;br&amp;gt;&lt;br /&gt;
This has to be done in software.&lt;br /&gt;
&lt;br /&gt;
====Calculating the SHA-1 of a message====&lt;br /&gt;
# Prepare the message as usual. See [http://en.wikipedia.org/wiki/SHA_hash_functions Wikipedia on SHA]&lt;br /&gt;
# Switch on the clock for the SHA-1 generator&lt;br /&gt;
# Reset the generator. To do this set bit 0 of reset register and clear it afterwards (iBoot waits until the hash is ready before resetting it)&lt;br /&gt;
# Clear (Write 0) to the Configuration Register (Not sure if this is needed as it already reads 0 after resetting, but iBoot does it)&lt;br /&gt;
# Clear register 0x80 and 0x10 (Also not sure why, as they also read 0)&lt;br /&gt;
# Write 64 bytes of the message to the data input registers starting at the lowest&lt;br /&gt;
# If this were the the first 64 bytes clear bit 3 in the Configuration register, else set it&lt;br /&gt;
# Set bit 1 (Start Hash) of the Configuration register and wait until bit 0 (Hash Busy) is cleared&lt;br /&gt;
# If more data to hash go to point 6&lt;br /&gt;
# Read the calculated hash of the Output SHA-1 Hash registers&lt;br /&gt;
# Switch off the clock&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Registers==&lt;br /&gt;
===Register Summary===&lt;br /&gt;
&amp;lt;table border=1 width=100%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;&amp;lt;b&amp;gt;Register&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x00&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Configuration&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x04&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Reset&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x08&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Unknown, but referenced in iBoot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x0C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Unknown, but referenced in iBoot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x10&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Unknown, but referenced in iBoot (Set to 0 before calculating a hash)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x20 - 0x30&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Output SHA-1 hash / Input Initialization Vector&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x40 - 0x7C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Data Input (64 Bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x80&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Unknown, but referenced in iBoot (Set to 0 before calculating a hash)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x84&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Unknown, but referenced in iBoot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x8C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Unknown, but referenced in iBoot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Configuration Register===&lt;br /&gt;
&amp;lt;table border=1 width=100%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;&amp;lt;b&amp;gt;Bit&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Function&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;Bit 0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Hash Busy. Is set when the hash calculation is started and cleared when the generator is done.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;Bit 1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Start Hash. Set to 1 to start hashing of the data in the Input Data registers.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;Bit 2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Unknown&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;Bit 3&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Config IV. Use arbitary IV (=1), Use SHA-1 constants (=0) (Used for starting a new hash (=0), or continue a previous one (=1)).&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
All other bits are unknown or not used&lt;br /&gt;
&lt;br /&gt;
===Reset Register===&lt;br /&gt;
&amp;lt;table border=1 width=100%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;&amp;lt;b&amp;gt;Bit&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Function&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;Bit 0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Reset Hash. Resets the generator and all registers.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
All other bits are unknown or not used&lt;br /&gt;
&lt;br /&gt;
===Hash Out / IV In===&lt;br /&gt;
Read: Outputs the hash in little-endian &amp;lt;br&amp;gt;&lt;br /&gt;
Write: Set the initialization vectors&lt;br /&gt;
&lt;br /&gt;
===Data Input===&lt;br /&gt;
Read: Read what was previously written there (like normal RAM) &amp;lt;br&amp;gt;&lt;br /&gt;
Write: The current 64 byte data chunk to calculate the hash of. (little-endian)&lt;/div&gt;</summary>
		<author><name>1am3r</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=Talk:S5L8720_(Hardware_-_SHA1)&amp;diff=3369</id>
		<title>Talk:S5L8720 (Hardware - SHA1)</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=Talk:S5L8720_(Hardware_-_SHA1)&amp;diff=3369"/>
		<updated>2009-04-08T18:15:36Z</updated>

		<summary type="html">&lt;p&gt;1am3r: New page: ===iBoot functions=== Is it allowed to post reverse engineered functions of iBoot, and/or is it of some help? &amp;lt;br&amp;gt; ~~~~&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===iBoot functions===&lt;br /&gt;
Is it allowed to post reverse engineered functions of iBoot, and/or is it of some help? &amp;lt;br&amp;gt;&lt;br /&gt;
[[User:1am3r|1am3r]] 18:15, 8 April 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>1am3r</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=S5L8720_(Hardware_-_SHA1)&amp;diff=3368</id>
		<title>S5L8720 (Hardware - SHA1)</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=S5L8720_(Hardware_-_SHA1)&amp;diff=3368"/>
		<updated>2009-04-08T18:10:49Z</updated>

		<summary type="html">&lt;p&gt;1am3r: New page describing the sha-1 hardware in detail&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==S5L8720 SHA-1 Hardware==&lt;br /&gt;
Base Address: 0x38000000&lt;br /&gt;
&lt;br /&gt;
===Programming Guide===&lt;br /&gt;
As i have no real documentation of the hardware (The Samsung S3C6400X seams to use a very similar SHA-1 generator, but not the same), this is based on what iBoot does and what i found out by trying myself.&lt;br /&gt;
====How it works====&lt;br /&gt;
Basically it is like a hardware version of a SHA-1 algorithm. The hardware processes data in 512Bit (64 Bytes) chunks (Just like a software algorithm). &amp;lt;br&amp;gt;&lt;br /&gt;
It does NO pre-processing (appending a '1' Bit to the data, pad the data so that the length mod 512 is 448, and append the bit-length of the data as a 64-bit big-endian integer). &amp;lt;br&amp;gt;&lt;br /&gt;
This has to be done in software.&lt;br /&gt;
&lt;br /&gt;
====Calculating the SHA-1 of a message====&lt;br /&gt;
# Prepare the message as usual. See [http://en.wikipedia.org/wiki/SHA_hash_functions Wikipedia on SHA]&lt;br /&gt;
# Switch on the clock for the SHA-1 generator&lt;br /&gt;
# Reset the generator. To do this set bit 0 of reset register and clear it afterwards (iBoot waits until the hash is ready before resetting it)&lt;br /&gt;
# Clear (Write 0) to the Configuration Register (Not sure if this is needed as it already reads 0 after resetting, but iBoot does it)&lt;br /&gt;
# Clear register 0x80 and 0x10 (Also not sure why, as they also read 0)&lt;br /&gt;
# Write 64 bytes of the message to the data input registers starting at the lowest&lt;br /&gt;
# If this were the the first 64 bytes clear bit 3 in the Configuration register, else set it&lt;br /&gt;
# Set bit 1 (Start Hash) of the Configuration register and wait until bit 0 (Hash Busy) is cleared&lt;br /&gt;
# If more data to hash go to point 6&lt;br /&gt;
# Read the calculated hash of the Output SHA-1 Hash registers&lt;br /&gt;
# Switch off the clock&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Registers==&lt;br /&gt;
===Register Summary===&lt;br /&gt;
&amp;lt;table border=1 width=100%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;&amp;lt;b&amp;gt;Register&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x00&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Configuration&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x04&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Reset&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x08&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Unknown, but referenced in iBoot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x0C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Unknown, but referenced in iBoot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x10&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Unknown, but referenced in iBoot (Set to 0 before calculating a hash)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x20 - 0x30&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Output SHA-1 hash / Input Initialization Vector&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x40 - 0x7C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Data Input (64 Bytes)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x80&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Unknown, but referenced in iBoot (Set to 0 before calculating a hash)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x84&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Unknown, but referenced in iBoot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;0x8C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Unknown, but referenced in iBoot&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Configuration Register===&lt;br /&gt;
&amp;lt;table border=1 width=100%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;&amp;lt;b&amp;gt;Bit&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Function&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;Bit 0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Hash Busy. Is set when the hash calculation is started and cleared when the generator is done.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;Bit 1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Start Hash. Set to 1 to start hashing of the data in the Input Data registers.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;Bit 2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Unknown&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;Bit 3&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Config IV. Use arbitary IV (=1), Use SHA-1 constants (=0) (Used for starting a new hash (=0), or continue a previous one (=1)).&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
All other bits are unknown or not used&lt;br /&gt;
&lt;br /&gt;
===Reset Register===&lt;br /&gt;
&amp;lt;table border=1 width=100%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;&amp;lt;b&amp;gt;Bit&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Function&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=left width=100pix&amp;gt;Bit 0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=left&amp;gt;Reset Hash. Resets the generator and all registers.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
All other bits are unknown or not used&lt;br /&gt;
&lt;br /&gt;
===Hash Out / IV In===&lt;br /&gt;
Read: Outputs the hash in little-endian &amp;lt;br&amp;gt;&lt;br /&gt;
Write: Set the initialization vectors&lt;br /&gt;
&lt;br /&gt;
===Data Input===&lt;br /&gt;
Read: Read what was previously written there (like normal RAM) &amp;lt;br&amp;gt;&lt;br /&gt;
Write: The current 64 byte data chunk to calculate the hash of. (little-endian)&lt;/div&gt;</summary>
		<author><name>1am3r</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=S5L8720_(Hardware)&amp;diff=3367</id>
		<title>S5L8720 (Hardware)</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=S5L8720_(Hardware)&amp;diff=3367"/>
		<updated>2009-04-08T16:43:37Z</updated>

		<summary type="html">&lt;p&gt;1am3r: /* SHA1 */  Added some registers and a link to the detailed description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This should help people reversing iBoot and friends. It is a work in progress.&lt;br /&gt;
&lt;br /&gt;
==SHA1==&lt;br /&gt;
&amp;lt;table border=1 width=100%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=2&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Base&amp;lt;/b&amp;gt;: 0x38000000&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Register&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x00&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Configuration&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x04&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Setup&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x20 through 0x30&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Output SHA1 hash&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x40 through 0x7C&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Data Input (64 Bytes)&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
See [[S5L8720 (Hardware) SHA1|S5L8720 SHA1]] for a more detailed description&lt;br /&gt;
&lt;br /&gt;
==DMA (PL080)==&lt;br /&gt;
This appears to use an ARM PrimeCell PL080. You can read the technical reference manual [http://www.mediafire.com/download.php?mjy2m1do0jg here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=1 width=100%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=2&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Base (dmac0)&amp;lt;/b&amp;gt;: 0x38200000&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;Base (dmac1)&amp;lt;/b&amp;gt;: 0x39900000&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Register&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x0&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Interrupt Status&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x4&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;TC Status (If HIGH, transaction complete)&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x8&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;TC Interrupt Clear&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0xC&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Error Interrupt Status&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x10&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Error Interrupt Clear&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x14&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;TC Interrupt Status Before Masking (Raw)&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x18&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Error Interrupt Status Before Masking (Raw)&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x1C&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;DMA Channels Enabled&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x30&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Controller Configuration&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x34&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Enable / Disable Synchronization&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x100&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Channel 0 Source Address&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x104&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Channel 0 Destination Address&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x108&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Channel 0 Linked List Address&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x10C&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Channel 0 Control 1&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x110&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Channel 0 Control 2&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x114&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Channel 0 Configuration&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==VIC (PL192)==&lt;br /&gt;
This appears to use an ARM PrimeCell PL192. You can read the technical reference manual [http://www.mediafire.com/download.php?mmjdnud0iuz here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=1 width=100%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=2&amp;gt;&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Base (vic0)&amp;lt;/b&amp;gt;: 0x38E00000&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Base (vic1)&amp;lt;/b&amp;gt;: 0x38E01000&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Register&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x0&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;IRQ Status&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x4&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;FIQ Status&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x8&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Raw Interrupt Status&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0xC&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Interrupt Select (0=IRQ, 1=FIQ)&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x10&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Interrupt Enable (0=Disabled, 1=Enabled)&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x14&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Interrupt Enable Clear (Write-Only; 0=No Effect, 1=Interrupt enabled with previous reg disabled)&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x18&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Software Interrupt (0=Disabled, 1=Enabled)&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x1C&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Software Interrupt Clear (Write-Only; 0=No Effect, 1=Interrupt enabled with previous reg disabled)&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x20&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Register Protection Mode. If bit 0 is set to 1, then Protection Mode is on and only privileged mode writes will work.&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x24&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Software Interrupt Priority Mask (0=Masked, 1=Not Masked)&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x100&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Vector Addresses&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x200&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Vector Priority Levels&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0xFE0 through 0xFEC&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Peripheral Identification Registers&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Part Number&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Bits 7 through 0 of register 0xFE0 is one portion of the part number (0x92), then bits 3 through 0 of register 0xFE4 is the other portion of it (0x1). If you do some annoying shifting, to put it together, you get 0x192 (0x92|0x11&amp;lt;&amp;lt;8&amp;amp;0xFFF==0x192). 0x192 indicates that it is an ARM PrimeCell PL192.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Designer&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Bits 7 through 4 of register 0xFE4 is one portion of the designer tag (0x1), then bits 3 through 0 of register 0xFE8 is the other portion of it (0x4). Like above, we can do (0x11 | 0x4&amp;lt;&amp;lt;4) and we get 0x41, which is &amp;quot;A&amp;quot; in ASCII, meaning it was designed by ARM Limited.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Revision Number&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Unlike the above two, this one is pretty easy. Bits 7 through 4 of register 0xFE8 is the revision number, which is &amp;quot;0&amp;quot; at least for the iPod touch 2G.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Configuration&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The reference manual simply states that bits 7 through 2 should read back as 0, and nothing more about them. It also states that bits 1 through 0 indicate the number of interrupts supported, which appear to be 32 for the iPod touch 2G ('''0b00=32 Supported''', 0b01=64 Supported, 0b10=128 Supported, 0b11=256 Supported).&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0xFF0 through 0xFFC&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;PrimeCell Identification Registers&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Register 0xFF0&amp;lt;/b&amp;gt;: Should read as 0x0D&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Register 0xFF4&amp;lt;/b&amp;gt;: Should read as 0xF0&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Register 0xFF8&amp;lt;/b&amp;gt;: Should read as 0x05&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Register 0xFFC&amp;lt;/b&amp;gt;: Should read as 0xB1&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==CHIPID==&lt;br /&gt;
All information here was gathered by reversing iBoot and friends.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=1 width=100%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=2&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Base&amp;lt;/b&amp;gt;: 0x3D100000&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Register&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x0&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Unused &amp;amp; Unreferenced Register&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x4&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Not yet documented&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x8&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Chip Info&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Chip ID&amp;lt;/b&amp;gt;: Bits 31 through 16 (0x8720, meaning it is an [[S5L8720]])&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;SCEP&amp;lt;/b&amp;gt;: Bits 15 through 1 (0x01)&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==WDT (Watchdog Timer)==&lt;br /&gt;
&amp;lt;table border=1 width=100%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=2&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Base&amp;lt;/b&amp;gt;: 0x3C800000&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Register&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x0&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Control Register&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;NOTE: It seems that you can disable Watchdog Timer by rewriting this register to 0x00000000, and you can reboot the device by rewriting it to 0x100000&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x4&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Watchdog Timeout Duration&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0xC&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Interrupt Clear&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Timers==&lt;br /&gt;
See separate article [[S5L8720 Timers (Hardware)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==ARM7 (Second CPU)==&lt;br /&gt;
All information here was gathered by looking at the code for the [[ARM7 Go]] command, as well as noting that although 2.1.1 iBoots reference this as 0xB8600000, 0x80000000 through 0xFFFFFFFF is mapped to 0x0 through 0x7FFFFFFF when the MMU does it's stuff.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=1 width=100%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=2&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Base&amp;lt;/b&amp;gt;: 0x38600000&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Register&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x100&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Running Status&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;To halt the ARM7&amp;lt;/b&amp;gt;: Write 0x0 then 0x10 to this register&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;To make it resume&amp;lt;/b&amp;gt;: Write 0x1 to this register&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x110&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Code Address&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
To run code, halt the ARM7, write the load address of the code to this register, write 0x3FF0000 to register 0x114, then resume the ARM7&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x114&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;quot;Code Waiting&amp;quot;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
I don't know exactly what this register does, but I named it like this because 0x3FF0000 is written to this register when there is a load address of code to be jumped to in register 0x110&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UART==&lt;br /&gt;
&amp;lt;table border=1 width=100%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=2&amp;gt;&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Base (uart0 - Serial)&amp;lt;/b&amp;gt;: 0x3CC00000&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Base (uart1 - Bluetooth)&amp;lt;/b&amp;gt;: 0x3DB00000&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Base (uart2)&amp;lt;/b&amp;gt;: 0x3DC00000&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Base (uart3)&amp;lt;/b&amp;gt;: 0x3DD00000&amp;lt;br&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Register&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SPI==&lt;br /&gt;
&amp;lt;table border=1 width=100%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=2&amp;gt;&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Base (spi0 - NOR Flash)&amp;lt;/b&amp;gt;: 0x3C300000&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Base (spi1 - NOR Flash)&amp;lt;/b&amp;gt;: 0x3CE00000&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Base (spi2)&amp;lt;/b&amp;gt;: 0x3D200000&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Base (spi3)&amp;lt;/b&amp;gt;: 0x3DA00000&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Base (spi4 - Multi Touch)&amp;lt;/b&amp;gt;: 0x3E100000&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Register&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* [http://github.com/planetbeing/iphonelinux/tree/27b57ac836053d59421a02755920b5be6b1e7805/openiboot OpeniBoot]&lt;br /&gt;
* [http://code.google.com/p/chronicdev/wiki/N72APDevTree Decoded iPod touch 2G DevTree]&lt;/div&gt;</summary>
		<author><name>1am3r</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=S5L8720_Timers_(Hardware)&amp;diff=3299</id>
		<title>S5L8720 Timers (Hardware)</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=S5L8720_Timers_(Hardware)&amp;diff=3299"/>
		<updated>2009-03-30T19:08:27Z</updated>

		<summary type="html">&lt;p&gt;1am3r: /* IRQ Status Register */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==S5L8720 Timer Hardware==&lt;br /&gt;
Base Address: 0x3C700000&lt;br /&gt;
&lt;br /&gt;
==Common Registers==&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot; |Register	&lt;br /&gt;
!align=&amp;quot;left&amp;quot; |Function&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot; |0x118&lt;br /&gt;
|align=&amp;quot;left&amp;quot; |Timer 4-7 IRQ Status, write to clear interrupt request&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====IRQ Status Register (0x118)====&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot; |Bit&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;60px&amp;quot; |Access&lt;br /&gt;
!align=&amp;quot;left&amp;quot; |Function&lt;br /&gt;
|-&lt;br /&gt;
|2-0||R||Timer 7 Flags (execute handler 1 to 3)&lt;br /&gt;
|-&lt;br /&gt;
|7-3||x||No Function / Unknown&lt;br /&gt;
|-&lt;br /&gt;
|10-8||R||Timer 6 Flags (execute handler 1 to 3)&lt;br /&gt;
|-&lt;br /&gt;
|15-11||x||No Function / Unknown&lt;br /&gt;
|-&lt;br /&gt;
|18-16||R||Timer 5 Flags (execute handler 1 to 3)&lt;br /&gt;
|-&lt;br /&gt;
|23-19||x||No Function / Unknown&lt;br /&gt;
|-&lt;br /&gt;
|26-24||R||Timer 4 Flags (execute handler 1 to 3)&lt;br /&gt;
|-&lt;br /&gt;
|31-27||x||No Function / Unknown&lt;br /&gt;
|}&lt;br /&gt;
RW: Read/Write Access, x: Don't know&lt;br /&gt;
&lt;br /&gt;
==RTC Registers==&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot; |Register&lt;br /&gt;
!align=&amp;quot;left&amp;quot; |Function&lt;br /&gt;
|-&lt;br /&gt;
|0x80&lt;br /&gt;
|RTC Ticks High&lt;br /&gt;
|-&lt;br /&gt;
|0x84&lt;br /&gt;
|RTC Ticks Low&lt;br /&gt;
|-&lt;br /&gt;
|0x88&lt;br /&gt;
|On init: 0xA, then after the others: 0x18010&lt;br /&gt;
|-&lt;br /&gt;
|0x8C&lt;br /&gt;
|On init: 0xFFFFFFFF&lt;br /&gt;
|-&lt;br /&gt;
|0x90&lt;br /&gt;
|On init: 0xFFFFFFFF&lt;br /&gt;
|-&lt;br /&gt;
|0x94&lt;br /&gt;
|On init: 0xFFFFFFFF&lt;br /&gt;
|-&lt;br /&gt;
|0x98&lt;br /&gt;
|On init: 0xFFFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Timers==&lt;br /&gt;
===Timer Bases===&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot; |TimerNumber&lt;br /&gt;
! 0 !! 1 !! 2 !! 3 !! 4 !! 5 !! 6 !! 7&lt;br /&gt;
|-&lt;br /&gt;
|Base ||align=&amp;quot;center&amp;quot;| 0x0 ||align=&amp;quot;center&amp;quot;| 0x20 ||align=&amp;quot;center&amp;quot;| 0x40 ||align=&amp;quot;center&amp;quot;| 0x60 &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| 0xA0 ||align=&amp;quot;center&amp;quot;| 0xC0 ||align=&amp;quot;center&amp;quot;| 0xE0 ||align=&amp;quot;center&amp;quot;| 0x100&lt;br /&gt;
|-&lt;br /&gt;
|Width ||align=&amp;quot;center&amp;quot;| 16Bit ||align=&amp;quot;center&amp;quot;| 16Bit ||align=&amp;quot;center&amp;quot;| 16Bit ||align=&amp;quot;center&amp;quot;| 16Bit &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| 32Bit ||align=&amp;quot;center&amp;quot;| 32Bit ||align=&amp;quot;center&amp;quot;| 32Bit ||align=&amp;quot;center&amp;quot;| 32Bit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Timer Registers===&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot; |Register&lt;br /&gt;
!align=&amp;quot;left&amp;quot; |Name&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|Config Register&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|Control Register&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|Compare Buffer Register (TCMPB)&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|Counter Buffer register (TCNTB)&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|10-Bit Prescaler&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|Observation Register (TCNTO)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Register Description===&lt;br /&gt;
====Config Register====&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot; |Bit&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;60px&amp;quot; |Access&lt;br /&gt;
!align=&amp;quot;left&amp;quot; |Function&lt;br /&gt;
|-&lt;br /&gt;
|2-0||x||No Function / Unknown&lt;br /&gt;
|-&lt;br /&gt;
|3||RW||Switches Bit 23 (TOUT) randomly if set...&lt;br /&gt;
|-&lt;br /&gt;
|4||RW||Compare Mode: Counter runs up to TCMPB (Modebit 0)&lt;br /&gt;
|-&lt;br /&gt;
|5||RW||Auto-Reload: (Modebit 1)&lt;br /&gt;
{|&lt;br /&gt;
|1 = One-Shoot&lt;br /&gt;
|-&lt;br /&gt;
|0 = Interval Mode&lt;br /&gt;
|-&lt;br /&gt;
|Counter runs up to TCMPB&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
|6||RW||Clock Select&lt;br /&gt;
{| &lt;br /&gt;
|0 ||=&amp;gt;||align=&amp;quot;right&amp;quot;|133MHz Timer Clock&lt;br /&gt;
|-&lt;br /&gt;
|1 and Divider = 1 and Prescaler = 0 ||=&amp;gt;||align=&amp;quot;right&amp;quot;|133MHz Timer Clock&lt;br /&gt;
|-&lt;br /&gt;
|1 and (Divider &amp;gt; 1 or Prescaler &amp;gt; 0) ||=&amp;gt;||align=&amp;quot;right&amp;quot;|24MHz Timer Clock&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
|7||RW||Unknown&lt;br /&gt;
|-&lt;br /&gt;
|10-8||RW||Divider&lt;br /&gt;
|-&lt;br /&gt;
|11||RW||Invert TOUT&lt;br /&gt;
|-&lt;br /&gt;
|14-12||RW||Unknown&lt;br /&gt;
|-&lt;br /&gt;
|15||x||No Function / Unknown&lt;br /&gt;
|-&lt;br /&gt;
|22-16||x||Unknown&lt;br /&gt;
|-&lt;br /&gt;
|23||RW&lt;br /&gt;
|Timer Out (TOUT)&lt;br /&gt;
{|&lt;br /&gt;
|In mode 0x00: Bit 23 = Toggle when TCNT = 0&lt;br /&gt;
|-&lt;br /&gt;
|In mode 0x01: Bit 23 = (TCNT &amp;gt;= TCMP)&lt;br /&gt;
|-&lt;br /&gt;
|In mode 0x10: Bit 23 = (TCNT &amp;gt;= TCMP)&lt;br /&gt;
|-&lt;br /&gt;
|In mode 0x11: Bit 23 = Toggle when TCNT = TCMP&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
|24||RW||Counting Direction: 0 = Up, 1 = Down (Only on Timer 4-7)&lt;br /&gt;
|-&lt;br /&gt;
|27-25||x||No Function / Unknown&lt;br /&gt;
|-&lt;br /&gt;
|28||RW||When counting down, count down starting at TCMPB (Only on Timer 4-7)&lt;br /&gt;
|-&lt;br /&gt;
|31-29||x||No Function / Unknown&lt;br /&gt;
|}&lt;br /&gt;
RW: Read/Write Access, x: Don't know&lt;br /&gt;
&lt;br /&gt;
====Control Register====&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot; |Bit&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;60px&amp;quot; |Access&lt;br /&gt;
!align=&amp;quot;left&amp;quot; |Function&lt;br /&gt;
|-&lt;br /&gt;
|0||RW||Start / Stop&lt;br /&gt;
|-&lt;br /&gt;
|1||RW||Manual Update&lt;br /&gt;
|-&lt;br /&gt;
|3-2||x||No Function/ Unknown&lt;br /&gt;
|-&lt;br /&gt;
|4||RW||Resets all counter registers to 0&lt;br /&gt;
|-&lt;br /&gt;
|31-5||x||No Function/ Unknown&lt;br /&gt;
|}&lt;br /&gt;
RW: Read/Write Access, x: Don't know&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
Information gathered from:&lt;br /&gt;
*Reversing iBoot&lt;br /&gt;
*openiBoot&lt;br /&gt;
*Playing with the registers when iBoot is running&lt;/div&gt;</summary>
		<author><name>1am3r</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=S5L8720_Timers_(Hardware)&amp;diff=3298</id>
		<title>S5L8720 Timers (Hardware)</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=S5L8720_Timers_(Hardware)&amp;diff=3298"/>
		<updated>2009-03-30T19:07:33Z</updated>

		<summary type="html">&lt;p&gt;1am3r: Added simple description of IRQ Status Register&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==S5L8720 Timer Hardware==&lt;br /&gt;
Base Address: 0x3C700000&lt;br /&gt;
&lt;br /&gt;
==Common Registers==&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot; |Register	&lt;br /&gt;
!align=&amp;quot;left&amp;quot; |Function&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot; |0x118&lt;br /&gt;
|align=&amp;quot;left&amp;quot; |Timer 4-7 IRQ Status, write to clear interrupt request&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====IRQ Status Register====&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot; |Bit&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;60px&amp;quot; |Access&lt;br /&gt;
!align=&amp;quot;left&amp;quot; |Function&lt;br /&gt;
|-&lt;br /&gt;
|2-0||R||Timer 7 Flags (execute handler 1 to 3)&lt;br /&gt;
|-&lt;br /&gt;
|7-3||x||No Function / Unknown&lt;br /&gt;
|-&lt;br /&gt;
|10-8||R||Timer 6 Flags (execute handler 1 to 3)&lt;br /&gt;
|-&lt;br /&gt;
|15-11||x||No Function / Unknown&lt;br /&gt;
|-&lt;br /&gt;
|18-16||R||Timer 5 Flags (execute handler 1 to 3)&lt;br /&gt;
|-&lt;br /&gt;
|23-19||x||No Function / Unknown&lt;br /&gt;
|-&lt;br /&gt;
|26-24||R||Timer 4 Flags (execute handler 1 to 3)&lt;br /&gt;
|-&lt;br /&gt;
|31-27||x||No Function / Unknown&lt;br /&gt;
|}&lt;br /&gt;
RW: Read/Write Access, x: Don't know&lt;br /&gt;
&lt;br /&gt;
==RTC Registers==&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot; |Register&lt;br /&gt;
!align=&amp;quot;left&amp;quot; |Function&lt;br /&gt;
|-&lt;br /&gt;
|0x80&lt;br /&gt;
|RTC Ticks High&lt;br /&gt;
|-&lt;br /&gt;
|0x84&lt;br /&gt;
|RTC Ticks Low&lt;br /&gt;
|-&lt;br /&gt;
|0x88&lt;br /&gt;
|On init: 0xA, then after the others: 0x18010&lt;br /&gt;
|-&lt;br /&gt;
|0x8C&lt;br /&gt;
|On init: 0xFFFFFFFF&lt;br /&gt;
|-&lt;br /&gt;
|0x90&lt;br /&gt;
|On init: 0xFFFFFFFF&lt;br /&gt;
|-&lt;br /&gt;
|0x94&lt;br /&gt;
|On init: 0xFFFFFFFF&lt;br /&gt;
|-&lt;br /&gt;
|0x98&lt;br /&gt;
|On init: 0xFFFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Timers==&lt;br /&gt;
===Timer Bases===&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot; |TimerNumber&lt;br /&gt;
! 0 !! 1 !! 2 !! 3 !! 4 !! 5 !! 6 !! 7&lt;br /&gt;
|-&lt;br /&gt;
|Base ||align=&amp;quot;center&amp;quot;| 0x0 ||align=&amp;quot;center&amp;quot;| 0x20 ||align=&amp;quot;center&amp;quot;| 0x40 ||align=&amp;quot;center&amp;quot;| 0x60 &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| 0xA0 ||align=&amp;quot;center&amp;quot;| 0xC0 ||align=&amp;quot;center&amp;quot;| 0xE0 ||align=&amp;quot;center&amp;quot;| 0x100&lt;br /&gt;
|-&lt;br /&gt;
|Width ||align=&amp;quot;center&amp;quot;| 16Bit ||align=&amp;quot;center&amp;quot;| 16Bit ||align=&amp;quot;center&amp;quot;| 16Bit ||align=&amp;quot;center&amp;quot;| 16Bit &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| 32Bit ||align=&amp;quot;center&amp;quot;| 32Bit ||align=&amp;quot;center&amp;quot;| 32Bit ||align=&amp;quot;center&amp;quot;| 32Bit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Timer Registers===&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot; |Register&lt;br /&gt;
!align=&amp;quot;left&amp;quot; |Name&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|Config Register&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|Control Register&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|Compare Buffer Register (TCMPB)&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|Counter Buffer register (TCNTB)&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|10-Bit Prescaler&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|Observation Register (TCNTO)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Register Description===&lt;br /&gt;
====Config Register====&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot; |Bit&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;60px&amp;quot; |Access&lt;br /&gt;
!align=&amp;quot;left&amp;quot; |Function&lt;br /&gt;
|-&lt;br /&gt;
|2-0||x||No Function / Unknown&lt;br /&gt;
|-&lt;br /&gt;
|3||RW||Switches Bit 23 (TOUT) randomly if set...&lt;br /&gt;
|-&lt;br /&gt;
|4||RW||Compare Mode: Counter runs up to TCMPB (Modebit 0)&lt;br /&gt;
|-&lt;br /&gt;
|5||RW||Auto-Reload: (Modebit 1)&lt;br /&gt;
{|&lt;br /&gt;
|1 = One-Shoot&lt;br /&gt;
|-&lt;br /&gt;
|0 = Interval Mode&lt;br /&gt;
|-&lt;br /&gt;
|Counter runs up to TCMPB&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
|6||RW||Clock Select&lt;br /&gt;
{| &lt;br /&gt;
|0 ||=&amp;gt;||align=&amp;quot;right&amp;quot;|133MHz Timer Clock&lt;br /&gt;
|-&lt;br /&gt;
|1 and Divider = 1 and Prescaler = 0 ||=&amp;gt;||align=&amp;quot;right&amp;quot;|133MHz Timer Clock&lt;br /&gt;
|-&lt;br /&gt;
|1 and (Divider &amp;gt; 1 or Prescaler &amp;gt; 0) ||=&amp;gt;||align=&amp;quot;right&amp;quot;|24MHz Timer Clock&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
|7||RW||Unknown&lt;br /&gt;
|-&lt;br /&gt;
|10-8||RW||Divider&lt;br /&gt;
|-&lt;br /&gt;
|11||RW||Invert TOUT&lt;br /&gt;
|-&lt;br /&gt;
|14-12||RW||Unknown&lt;br /&gt;
|-&lt;br /&gt;
|15||x||No Function / Unknown&lt;br /&gt;
|-&lt;br /&gt;
|22-16||x||Unknown&lt;br /&gt;
|-&lt;br /&gt;
|23||RW&lt;br /&gt;
|Timer Out (TOUT)&lt;br /&gt;
{|&lt;br /&gt;
|In mode 0x00: Bit 23 = Toggle when TCNT = 0&lt;br /&gt;
|-&lt;br /&gt;
|In mode 0x01: Bit 23 = (TCNT &amp;gt;= TCMP)&lt;br /&gt;
|-&lt;br /&gt;
|In mode 0x10: Bit 23 = (TCNT &amp;gt;= TCMP)&lt;br /&gt;
|-&lt;br /&gt;
|In mode 0x11: Bit 23 = Toggle when TCNT = TCMP&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
|24||RW||Counting Direction: 0 = Up, 1 = Down (Only on Timer 4-7)&lt;br /&gt;
|-&lt;br /&gt;
|27-25||x||No Function / Unknown&lt;br /&gt;
|-&lt;br /&gt;
|28||RW||When counting down, count down starting at TCMPB (Only on Timer 4-7)&lt;br /&gt;
|-&lt;br /&gt;
|31-29||x||No Function / Unknown&lt;br /&gt;
|}&lt;br /&gt;
RW: Read/Write Access, x: Don't know&lt;br /&gt;
&lt;br /&gt;
====Control Register====&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot; |Bit&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;60px&amp;quot; |Access&lt;br /&gt;
!align=&amp;quot;left&amp;quot; |Function&lt;br /&gt;
|-&lt;br /&gt;
|0||RW||Start / Stop&lt;br /&gt;
|-&lt;br /&gt;
|1||RW||Manual Update&lt;br /&gt;
|-&lt;br /&gt;
|3-2||x||No Function/ Unknown&lt;br /&gt;
|-&lt;br /&gt;
|4||RW||Resets all counter registers to 0&lt;br /&gt;
|-&lt;br /&gt;
|31-5||x||No Function/ Unknown&lt;br /&gt;
|}&lt;br /&gt;
RW: Read/Write Access, x: Don't know&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
Information gathered from:&lt;br /&gt;
*Reversing iBoot&lt;br /&gt;
*openiBoot&lt;br /&gt;
*Playing with the registers when iBoot is running&lt;/div&gt;</summary>
		<author><name>1am3r</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=N72AP&amp;diff=3280</id>
		<title>N72AP</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=N72AP&amp;diff=3280"/>
		<updated>2009-03-20T09:59:19Z</updated>

		<summary type="html">&lt;p&gt;1am3r: Added link to S5L8720_(Hardware)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the 2nd Generation [[iPod Touch]].&lt;br /&gt;
&lt;br /&gt;
'''Model''': n72ap&lt;br /&gt;
&lt;br /&gt;
'''Application Processor (OS Chip)''': s5l8720x&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
See the [[S5L8720_(Hardware)]] for hardware details&lt;br /&gt;
&lt;br /&gt;
==Device IDs==&lt;br /&gt;
'''0x1227''' = DFU Mode 2.0 (Basically WTF 2.0 burned into bootrom)&amp;lt;br&amp;gt;&lt;br /&gt;
'''0x1281''' = Recovery Mode 2.0 (iBEC / iBSS / iBoot)&amp;lt;br&amp;gt;&lt;br /&gt;
'''0x1293''' = Normal Mode (comm with iTunes / MobileDev framework)&lt;br /&gt;
&lt;br /&gt;
==Exploits==&lt;br /&gt;
See the [[S5L8720]] page for all known exploits&lt;/div&gt;</summary>
		<author><name>1am3r</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=S5L8720_(Hardware)&amp;diff=3278</id>
		<title>S5L8720 (Hardware)</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=S5L8720_(Hardware)&amp;diff=3278"/>
		<updated>2009-03-19T23:08:59Z</updated>

		<summary type="html">&lt;p&gt;1am3r: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This should help people reversing iBoot and friends. It is a work in progress.&lt;br /&gt;
&lt;br /&gt;
==SHA1==&lt;br /&gt;
&amp;lt;table border=1 width=100%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=2&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Base&amp;lt;/b&amp;gt;: 0x38000000&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Register&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x20 through 0x30&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Output SHA1 hash&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==DMA (PL080)==&lt;br /&gt;
This appears to use an ARM PrimeCell PL080. You can read the technical reference manual [http://www.mediafire.com/download.php?mjy2m1do0jg here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=1 width=100%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=2&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Base (dmac0)&amp;lt;/b&amp;gt;: 0x38200000&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;Base (dmac1)&amp;lt;/b&amp;gt;: 0x39900000&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Register&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x0&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Interrupt Status&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x4&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;TC Status (If HIGH, transaction complete)&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x8&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;TC Interrupt Clear&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0xC&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Error Interrupt Status&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x10&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Error Interrupt Clear&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x14&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;TC Interrupt Status Before Masking (Raw)&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x18&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Error Interrupt Status Before Masking (Raw)&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x1C&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;DMA Channels Enabled&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x30&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Controller Configuration&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x34&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Enable / Disable Synchronization&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x100&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Channel 0 Source Address&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x104&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Channel 0 Destination Address&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x108&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Channel 0 Linked List Address&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x10C&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Channel 0 Control 1&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x110&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Channel 0 Control 2&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x114&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Channel 0 Configuration&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==VIC (PL192)==&lt;br /&gt;
This appears to use an ARM PrimeCell PL192. You can read the technical reference manual [http://www.mediafire.com/download.php?mmjdnud0iuz here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=1 width=100%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=2&amp;gt;&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Base (vic0)&amp;lt;/b&amp;gt;: 0x38E00000&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Base (vic1)&amp;lt;/b&amp;gt;: 0x38E01000&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Register&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x0&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;IRQ Status&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x4&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;FIQ Status&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x8&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Raw Interrupt Status&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0xC&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Interrupt Select (0=IRQ, 1=FIQ)&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x10&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Interrupt Enable (0=Disabled, 1=Enabled)&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x14&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Interrupt Enable Clear (Write-Only; 0=No Effect, 1=Interrupt enabled with previous reg disabled)&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x18&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Software Interrupt (0=Disabled, 1=Enabled)&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x1C&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Software Interrupt Clear (Write-Only; 0=No Effect, 1=Interrupt enabled with previous reg disabled)&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x20&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Register Protection Mode. If bit 0 is set to 1, then Protection Mode is on and only privileged mode writes will work.&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x24&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Software Interrupt Priority Mask (0=Masked, 1=Not Masked)&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x100&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Vector Addresses&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x200&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Vector Priority Levels&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0xFE0 through 0xFEC&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Peripheral Identification Registers&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Part Number&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Bits 7 through 0 of register 0xFE0 is one portion of the part number (0x92), then bits 3 through 0 of register 0xFE4 is the other portion of it (0x1). If you do some annoying shifting, to put it together, you get 0x192 (0x92|0x11&amp;lt;&amp;lt;8&amp;amp;0xFFF==0x192). 0x192 indicates that it is an ARM PrimeCell PL192.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Designer&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Bits 7 through 4 of register 0xFE4 is one portion of the designer tag (0x1), then bits 3 through 0 of register 0xFE8 is the other portion of it (0x4). Like above, we can do (0x11 | 0x4&amp;lt;&amp;lt;4) and we get 0x41, which is &amp;quot;A&amp;quot; in ASCII, meaning it was designed by ARM Limited.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Revision Number&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Unlike the above two, this one is pretty easy. Bits 7 through 4 of register 0xFE8 is the revision number, which is &amp;quot;0&amp;quot; at least for the iPod touch 2G.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Configuration&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The reference manual simply states that bits 7 through 2 should read back as 0, and nothing more about them. It also states that bits 1 through 0 indicate the number of interrupts supported, which appear to be 32 for the iPod touch 2G ('''0b00=32 Supported''', 0b01=64 Supported, 0b10=128 Supported, 0b11=256 Supported).&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0xFF0 through 0xFFC&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;PrimeCell Identification Registers&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Register 0xFF0&amp;lt;/b&amp;gt;: Should read as 0x0D&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Register 0xFF4&amp;lt;/b&amp;gt;: Should read as 0xF0&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Register 0xFF8&amp;lt;/b&amp;gt;: Should read as 0x05&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Register 0xFFC&amp;lt;/b&amp;gt;: Should read as 0xB1&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==CHIPID==&lt;br /&gt;
All information here was gathered by reversing iBoot and friends.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=1 width=100%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=2&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Base&amp;lt;/b&amp;gt;: 0x3D100000&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Register&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x0&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Unused &amp;amp; Unreferenced Register&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x4&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Not yet documented&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x8&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Chip Info&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Chip ID&amp;lt;/b&amp;gt;: Bits 31 through 16 (0x8720, meaning it is an [[S5L8720]])&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;SCEP&amp;lt;/b&amp;gt;: Bits 15 through 1 (0x01)&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==WDT (Watchdog Timer)==&lt;br /&gt;
&amp;lt;table border=1 width=100%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=2&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Base&amp;lt;/b&amp;gt;: 0x3C800000&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Register&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x0&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Control Register&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;NOTE: It seems that you can disable Watchdog Timer by rewriting this register to 0x00000000, and you can reboot the device by rewriting it to 0x100000&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x4&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Watchdog Timeout Duration&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0xC&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Interrupt Clear&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Timers==&lt;br /&gt;
See separate article [[S5L8720 Timers (Hardware)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==ARM7 (Second CPU)==&lt;br /&gt;
All information here was gathered by looking at the code for the [[ARM7 Go]] command, as well as noting that although 2.1.1 iBoots reference this as 0xB8600000, 0x80000000 through 0xFFFFFFFF is mapped to 0x0 through 0x7FFFFFFF when the MMU does it's stuff.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=1 width=100%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=2&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Base&amp;lt;/b&amp;gt;: 0x38600000&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Register&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x100&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Running Status&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;To halt the ARM7&amp;lt;/b&amp;gt;: Write 0x0 then 0x10 to this register&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;To make it resume&amp;lt;/b&amp;gt;: Write 0x1 to this register&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x110&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;Code Address&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
To run code, halt the ARM7, write the load address of the code to this register, write 0x3FF0000 to register 0x114, then resume the ARM7&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;0x114&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;quot;Code Waiting&amp;quot;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
I don't know exactly what this register does, but I named it like this because 0x3FF0000 is written to this register when there is a load address of code to be jumped to in register 0x110&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UART==&lt;br /&gt;
&amp;lt;table border=1 width=100%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=2&amp;gt;&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Base (uart0 - Serial)&amp;lt;/b&amp;gt;: 0x3CC00000&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Base (uart1 - Bluetooth)&amp;lt;/b&amp;gt;: 0x3DB00000&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Base (uart2)&amp;lt;/b&amp;gt;: 0x3DC00000&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Base (uart3)&amp;lt;/b&amp;gt;: 0x3DD00000&amp;lt;br&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Register&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SPI==&lt;br /&gt;
&amp;lt;table border=1 width=100%&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=2&amp;gt;&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Base (spi0 - NOR Flash)&amp;lt;/b&amp;gt;: 0x3C300000&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Base (spi1 - NOR Flash)&amp;lt;/b&amp;gt;: 0x3CE00000&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Base (spi2)&amp;lt;/b&amp;gt;: 0x3D200000&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Base (spi3)&amp;lt;/b&amp;gt;: 0x3DA00000&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Base (spi4 - Multi Touch)&amp;lt;/b&amp;gt;: 0x3E100000&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Register&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50%&amp;gt;&amp;lt;center&amp;gt;&amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&amp;lt;/center&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* [http://github.com/planetbeing/iphonelinux/tree/27b57ac836053d59421a02755920b5be6b1e7805/openiboot OpeniBoot]&lt;br /&gt;
* [http://code.google.com/p/chronicdev/wiki/N72APDevTree Decoded iPod touch 2G DevTree]&lt;/div&gt;</summary>
		<author><name>1am3r</name></author>
		
	</entry>
	<entry>
		<id>https://www.theiphonewiki.com/w/index.php?title=S5L8720_Timers_(Hardware)&amp;diff=3277</id>
		<title>S5L8720 Timers (Hardware)</title>
		<link rel="alternate" type="text/html" href="https://www.theiphonewiki.com/w/index.php?title=S5L8720_Timers_(Hardware)&amp;diff=3277"/>
		<updated>2009-03-19T23:07:03Z</updated>

		<summary type="html">&lt;p&gt;1am3r: New page: ==S5L8720 Timer Hardware== Base Address: 0x3C700000  ==Common Registers== {| style=&amp;quot;width:100%&amp;quot; border=&amp;quot;1&amp;quot; !align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot; |Register	 !align=&amp;quot;left&amp;quot; |Function |- |align=&amp;quot;left&amp;quot; w...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==S5L8720 Timer Hardware==&lt;br /&gt;
Base Address: 0x3C700000&lt;br /&gt;
&lt;br /&gt;
==Common Registers==&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot; |Register	&lt;br /&gt;
!align=&amp;quot;left&amp;quot; |Function&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot; |0x118&lt;br /&gt;
|align=&amp;quot;left&amp;quot; |Timer IRQ Status&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==RTC Registers==&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot; |Register&lt;br /&gt;
!align=&amp;quot;left&amp;quot; |Function&lt;br /&gt;
|-&lt;br /&gt;
|0x80&lt;br /&gt;
|RTC Ticks High&lt;br /&gt;
|-&lt;br /&gt;
|0x84&lt;br /&gt;
|RTC Ticks Low&lt;br /&gt;
|-&lt;br /&gt;
|0x88&lt;br /&gt;
|On init: 0xA, then after the others: 0x18010&lt;br /&gt;
|-&lt;br /&gt;
|0x8C&lt;br /&gt;
|On init: 0xFFFFFFFF&lt;br /&gt;
|-&lt;br /&gt;
|0x90&lt;br /&gt;
|On init: 0xFFFFFFFF&lt;br /&gt;
|-&lt;br /&gt;
|0x94&lt;br /&gt;
|On init: 0xFFFFFFFF&lt;br /&gt;
|-&lt;br /&gt;
|0x98&lt;br /&gt;
|On init: 0xFFFFFFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Timers==&lt;br /&gt;
===Timer Bases===&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot; |TimerNumber&lt;br /&gt;
! 0 !! 1 !! 2 !! 3 !! 4 !! 5 !! 6 !! 7&lt;br /&gt;
|-&lt;br /&gt;
|Base ||align=&amp;quot;center&amp;quot;| 0x0 ||align=&amp;quot;center&amp;quot;| 0x20 ||align=&amp;quot;center&amp;quot;| 0x40 ||align=&amp;quot;center&amp;quot;| 0x60 &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| 0xA0 ||align=&amp;quot;center&amp;quot;| 0xC0 ||align=&amp;quot;center&amp;quot;| 0xE0 ||align=&amp;quot;center&amp;quot;| 0x100&lt;br /&gt;
|-&lt;br /&gt;
|Width ||align=&amp;quot;center&amp;quot;| 16Bit ||align=&amp;quot;center&amp;quot;| 16Bit ||align=&amp;quot;center&amp;quot;| 16Bit ||align=&amp;quot;center&amp;quot;| 16Bit &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| 32Bit ||align=&amp;quot;center&amp;quot;| 32Bit ||align=&amp;quot;center&amp;quot;| 32Bit ||align=&amp;quot;center&amp;quot;| 32Bit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Timer Registers===&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot; |Register&lt;br /&gt;
!align=&amp;quot;left&amp;quot; |Name&lt;br /&gt;
|-&lt;br /&gt;
|0x00&lt;br /&gt;
|Config Register&lt;br /&gt;
|-&lt;br /&gt;
|0x04&lt;br /&gt;
|Control Register&lt;br /&gt;
|-&lt;br /&gt;
|0x08&lt;br /&gt;
|Compare Buffer Register (TCMPB)&lt;br /&gt;
|-&lt;br /&gt;
|0x0C&lt;br /&gt;
|Counter Buffer register (TCNTB)&lt;br /&gt;
|-&lt;br /&gt;
|0x10&lt;br /&gt;
|10-Bit Prescaler&lt;br /&gt;
|-&lt;br /&gt;
|0x14&lt;br /&gt;
|Observation Register (TCNTO)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Register Description===&lt;br /&gt;
====Config Register====&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot; |Bit&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;60px&amp;quot; |Access&lt;br /&gt;
!align=&amp;quot;left&amp;quot; |Function&lt;br /&gt;
|-&lt;br /&gt;
|2-0||x||No Function / Unknown&lt;br /&gt;
|-&lt;br /&gt;
|3||RW||Switches Bit 23 (TOUT) randomly if set...&lt;br /&gt;
|-&lt;br /&gt;
|4||RW||Compare Mode: Counter runs up to TCMPB (Modebit 0)&lt;br /&gt;
|-&lt;br /&gt;
|5||RW||Auto-Reload: (Modebit 1)&lt;br /&gt;
{|&lt;br /&gt;
|1 = One-Shoot&lt;br /&gt;
|-&lt;br /&gt;
|0 = Interval Mode&lt;br /&gt;
|-&lt;br /&gt;
|Counter runs up to TCMPB&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
|6||RW||Clock Select&lt;br /&gt;
{| &lt;br /&gt;
|0 ||=&amp;gt;||align=&amp;quot;right&amp;quot;|133MHz Timer Clock&lt;br /&gt;
|-&lt;br /&gt;
|1 and Divider = 1 and Prescaler = 0 ||=&amp;gt;||align=&amp;quot;right&amp;quot;|133MHz Timer Clock&lt;br /&gt;
|-&lt;br /&gt;
|1 and (Divider &amp;gt; 1 or Prescaler &amp;gt; 0) ||=&amp;gt;||align=&amp;quot;right&amp;quot;|24MHz Timer Clock&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
|7||RW||Unknown&lt;br /&gt;
|-&lt;br /&gt;
|10-8||RW||Divider&lt;br /&gt;
|-&lt;br /&gt;
|11||RW||Invert TOUT&lt;br /&gt;
|-&lt;br /&gt;
|14-12||RW||Unknown&lt;br /&gt;
|-&lt;br /&gt;
|15||x||No Function / Unknown&lt;br /&gt;
|-&lt;br /&gt;
|22-16||x||Unknown&lt;br /&gt;
|-&lt;br /&gt;
|23||RW&lt;br /&gt;
|Timer Out (TOUT)&lt;br /&gt;
{|&lt;br /&gt;
|In mode 0x00: Bit 23 = Toggle when TCNT = 0&lt;br /&gt;
|-&lt;br /&gt;
|In mode 0x01: Bit 23 = (TCNT &amp;gt;= TCMP)&lt;br /&gt;
|-&lt;br /&gt;
|In mode 0x10: Bit 23 = (TCNT &amp;gt;= TCMP)&lt;br /&gt;
|-&lt;br /&gt;
|In mode 0x11: Bit 23 = Toggle when TCNT = TCMP&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
|24||RW||Counting Direction: 0 = Up, 1 = Down (Only on Timer 4-7)&lt;br /&gt;
|-&lt;br /&gt;
|27-25||x||No Function / Unknown&lt;br /&gt;
|-&lt;br /&gt;
|28||RW||When counting down, count down starting at TCMPB (Only on Timer 4-7)&lt;br /&gt;
|-&lt;br /&gt;
|31-29||x||No Function / Unknown&lt;br /&gt;
|}&lt;br /&gt;
RW: Read/Write Access, x: Don't know&lt;br /&gt;
&lt;br /&gt;
====Control Register====&lt;br /&gt;
{| style=&amp;quot;width:100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;100px&amp;quot; |Bit&lt;br /&gt;
!align=&amp;quot;left&amp;quot; width=&amp;quot;60px&amp;quot; |Access&lt;br /&gt;
!align=&amp;quot;left&amp;quot; |Function&lt;br /&gt;
|-&lt;br /&gt;
|0||RW||Start / Stop&lt;br /&gt;
|-&lt;br /&gt;
|1||RW||Manual Update&lt;br /&gt;
|-&lt;br /&gt;
|3-2||x||No Function/ Unknown&lt;br /&gt;
|-&lt;br /&gt;
|4||RW||Resets all counter registers to 0&lt;br /&gt;
|-&lt;br /&gt;
|31-5||x||No Function/ Unknown&lt;br /&gt;
|}&lt;br /&gt;
RW: Read/Write Access, x: Don't know&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
Information gathered from:&lt;br /&gt;
*Reversing iBoot&lt;br /&gt;
*openiBoot&lt;br /&gt;
*Playing with the registers when iBoot is running&lt;/div&gt;</summary>
		<author><name>1am3r</name></author>
		
	</entry>
</feed>