<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Samsung SPH-i300 on All About Jake</title><link>https://www.allaboutjake.com/phone/i300/</link><description>Recent content in Samsung SPH-i300 on All About Jake</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 02 Nov 2006 15:43:34 +0000</lastBuildDate><atom:link href="https://www.allaboutjake.com/phone/i300/index.xml" rel="self" type="application/rss+xml"/><item><title>i300 Skins</title><link>https://www.allaboutjake.com/phone/i300/skins/</link><pubDate>Thu, 02 Nov 2006 15:43:34 +0000</pubDate><guid>https://www.allaboutjake.com/phone/i300/skins/</guid><description>&lt;div style="position: relative;"&gt;
 &lt;div style="position: absolute; top: -80px; left: 200px;"&gt;
 &lt;a style="border: medium none " href="https://www.allaboutjake.com/about/archive"&gt; &lt;img decoding="async" usemap="#map1" src="https://www.allaboutjake.com/images/archive_stamp.png" border="0" alt="" /&gt;&lt;/a&gt;
 &lt;/div&gt;
&lt;/div&gt;
&lt;h1 id="building-i300-grafitti-skins"&gt;Building i300 Grafitti Skins&lt;a class="anchor" href="#building-i300-grafitti-skins"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The latest version of the i300 Grafitti Hack has a separate skins database. This was done to facilitate the creation of skins by third party developers. This is a guide to building your own custom skins database.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What you’ll need&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You’ll need a few developers tools to build a skin.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;build-prc&lt;/strong&gt; – this tool is found in &lt;a href="http://www.palmos.com/dev/tools/gcc/"&gt;the PRC-Tools&lt;/a&gt; distribution. You can go set up yourself a complete gcc compiling environment, or just pull out the build-prc binary.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pilrc&lt;/strong&gt; – the resource compiler can be found at &lt;a href="http://www.ardiri.com/index.php?redir=palm&amp;amp;cat=pilrc"&gt;Ardiri&lt;/a&gt;. Go download it and get it working.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A text editor&lt;/strong&gt; – notepad works fine.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="steps"&gt;Steps&lt;a class="anchor" href="#steps"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;First, make your skins. Save them as 256 color bitmaps with the Palm color palette. I found a copy of the color palette &lt;a href="http://palm.dahm.com/"&gt;here&lt;/a&gt;. The image should be 160 pixels wide by 65 pixels tall.&lt;/li&gt;
&lt;li&gt;Next, you need to make a resource definition file, which will read your bitmap(s) and build palm-compatible resources. First let me expalin a bit about resources as they relate to the skins…Palm resources have an ID and an index. The ID is a developer assigned number. The index is the &lt;strong&gt;order which they appear&lt;/strong&gt; in the database. Each skin needs exactly two resources in your file. First, a STRING resource, with a small text description. Second, a BITMAP resource, with the actual image. The hack will pull out the resources based on their &lt;strong&gt;index&lt;/strong&gt;. This means that the first string resource in the file is paired to the first bitmap. If you have an odd number of resource (one too many strings or one too many bitmaps) there will be problems. You don’t want problems.Below is an excerpt of a skin resource definition file (usually ends in the extension .rcp):
&lt;pre&gt;STRING ID 1001 "Aqua by PatWoods"
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;STRING ID 1002 &amp;quot;Emblem by TrentLott&amp;quot;
STRING ID 1003 &amp;quot;Creamsicle by DigiBoy&amp;quot;
STRING ID 1004 &amp;quot;MatrixCode by jwbworks&amp;quot;
BITMAPCOLOR ID 2001 &amp;quot;aqua-patwoods.bmp&amp;quot;		 COMPRESS
BITMAPCOLOR ID 2002 &amp;quot;usflag-trentlott.bmp&amp;quot;	 COMPRESS
BITMAPCOLOR ID 2003 &amp;quot;creamsicle-digiboy.bmp&amp;quot;	 COMPRESS
BITMAPCOLOR ID 2004 &amp;quot;matrix-jwbworks.bmp&amp;quot;	 COMPRESS&lt;/pre&gt;&lt;/p&gt;</description></item><item><title>i300 Hacking</title><link>https://www.allaboutjake.com/phone/i300/hack/</link><pubDate>Thu, 02 Nov 2006 13:51:27 +0000</pubDate><guid>https://www.allaboutjake.com/phone/i300/hack/</guid><description>&lt;div style="position: relative;"&gt;
&lt;div style="position: absolute; top: -80px; left: 200px;"&gt;&lt;a style="border: medium none " href="https://www.allaboutjake.com/about/archive"&gt; &lt;img usemap="#map1" src="https://www.allaboutjake.com/images/archive_stamp.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h1&gt;Basics of Hacking the i300&lt;/h1&gt;
Hacking the i300 is a pretty elaborate process. Here's how I do it:
&lt;ul&gt;
	&lt;li&gt;First I identify a database that I'd like to examine. For example the phExtn 	database. In the phExtn database, there is a "exte" resource with resource ID 0. This 	resource looks to contain some executable code...&lt;/li&gt;
	&lt;li&gt;I use &lt;a href="http://www.nosleep.net/filez.asp"&gt;FILEZ&lt;/a&gt; to beam the database that 	I'm interested to my desktop PC. Then, I use &lt;a href="http://www.massena.com/darrin/pilot/tanda.htm"&gt;PRC2BIN&lt;/a&gt; 	to split it into its component resources. Finally, I take the resource that I want to disassemble and using a 	utility like &lt;a href="http://www.palmblvd.com/software/pc/PilotDis-2000-05-04-palm-pc.html"&gt;PilotDis&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;Now I look for debug symbols. Debug symbols are like little text flags that you can read 	to identify functions in the assembly code:
&lt;pre&gt;00000267 [...] 		DC.B	'WinSetExtendedWindow'&lt;/pre&gt;
Debug Symbols are located below the function that they mark. So, after finding a debug symbol 	of interest, scroll up in the assembly to find the beginning of the next function. Usually 	this is below the previous debug symbol. Functions usually start with a LINK instruction as well. 	You'll find the start of this function here:
&lt;pre&gt;0000016c [...]	L6 LINK	A6,#-4&lt;/pre&gt;
&lt;/li&gt;
	&lt;li&gt;Then the hard part... you've gotta figure out how the function works, what parameters it 	takes, and what its return value is. This is done by reading the assembly. Sorry, no short 	cuts here. In this case, I use this function prototype:
&lt;pre&gt;void WinSetExtendedWindow(char truefalse);&lt;/pre&gt;
&lt;/li&gt;
	&lt;li&gt;Now you need to make a function pointer to your function... convert your prototype to 	a function pointer:
&lt;pre&gt;void (*funcp)(char);&lt;/pre&gt;
&lt;/li&gt;
	&lt;li&gt;Before calling your function pointer, you need to point it to something. You see the 	start of the function was at an offset 0x16C from the start of the resource. So, use the 	standard resource functions to get a pointer to the extn resource. I'm not going to go 	over this here. Lets just say that you've got a pointer to the resource in a pointer called 	"ptr_to_resource"...
&lt;pre&gt;funcp = ptr_to_resource + 0x16C;&lt;/pre&gt;
&lt;/li&gt;
	&lt;li&gt;Now that you're function pointers all pointing the right way, you can run it:
&lt;pre&gt;(*func)(1);&lt;/pre&gt;
&lt;/li&gt;
	&lt;li&gt;If you're lucky, and you're pointing to a valid function, then you haven't crashed 	and you've actually executed a function that does something useful.&lt;/li&gt;
&lt;/ul&gt;
For the whole code, get the full example &lt;a href="http://allaboutjake.com/wp-content/uploads/2006/11/i300demo-src.zip"&gt;here&lt;/a&gt;.
&lt;h1&gt;Downloads&lt;/h1&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://allaboutjake.com/wp-content/uploads/2006/11/i300demo-src.zip" id="p64" title="i300Demo Source Code"&gt;i300demo-src.zip&lt;/a&gt; Source code that shows how to enlarge 	the application area to the full screen by hiding the graffiti area. &lt;font color="RED"&gt;&lt;strong&gt;This is now 	deprecated!&lt;/strong&gt; See PhExLib below&lt;/font&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://allaboutjake.com/wp-content/uploads/2006/11/phexlib-10.zip" id="p65" title="PhExLib Source Code"&gt;phexlib-10.zip&lt;/a&gt; a header file and small source code file which uses 	a jump table to access the phone extension functions. This method is better than the absolute offset 	method used in the i300demo above. Also, this method is apparently compatible with the i330. As 	always, no promises.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://allaboutjake.com/wp-content/uploads/2006/11/i300dialdemo-src.zip" id="p66" title="i300 Dialing Demo Source Code"&gt;i300dialdemo-src.zip&lt;/a&gt; Source code that shows how to dial 	the phone from within your own application. This is also apparently compatible with the i330.&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>