<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3997450343586226773</id><updated>2011-07-30T06:42:39.436-07:00</updated><title type='text'>PSP HACKING</title><subtitle type='html'>All the resource you need while hacking your PSP.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://skyend-pspslimhacks.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3997450343586226773/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://skyend-pspslimhacks.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>skyend</name><uri>http://www.blogger.com/profile/04669064968788426270</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_IKZST8cfbyg/TFu-WJr22gI/AAAAAAAAAAU/opWkmjPr7YA/S220/Avatar.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3997450343586226773.post-1500864333841936558</id><published>2010-08-06T00:33:00.000-07:00</published><updated>2010-08-06T00:33:37.008-07:00</updated><title type='text'>MIPS ASM TUTORIAL BY SiberianSTAR</title><content type='html'>[18:17] &amp;lt;+SiberianSTAR&amp;gt; Assembly is a low-level programming language where each instruction corresponds to CPU op-code&lt;br /&gt;[18:19] &amp;lt;+SiberianSTAR&amp;gt; Every CPU architecture has different set of opcodes and instructions, an op-code is an instruction that the CPU can understand&lt;br /&gt;[18:20] &amp;lt;+SiberianSTAR&amp;gt; Every mips opcode is formed by 32 bits&lt;br /&gt;[18:22] &amp;lt;+SiberianSTAR&amp;gt; This was the introduction&lt;br /&gt;[18:23] &amp;lt;+SiberianSTAR&amp;gt; You can see the memory like a big matrix of bytes, where each byte is addressed with a 32bits value&lt;br /&gt;[18:23] &amp;lt;+SiberianSTAR&amp;gt; The first byte is 0x0000000, the second is 0x00000001 and so on&lt;br /&gt;[18:23] &amp;lt;+SiberianSTAR&amp;gt; A byte is formed by 8 bits, where each bits can be 1 or 0, on or off&lt;br /&gt;[18:24] &amp;lt;+SiberianSTAR&amp;gt; An 8 bits value can store a number between 0 and 255, 2^0 - 2^8 - 1&lt;br /&gt;[18:25] &amp;lt;+SiberianSTAR&amp;gt; On intel CPU the values are stored in the little-endian form, so the MSB (most significant byte) is the last byte&lt;br /&gt;[18:25] &amp;lt;+SiberianSTAR&amp;gt; like&lt;br /&gt;[18:25] &amp;lt;+SiberianSTAR&amp;gt; 0x12345678 - in memory is 0x78563412&lt;br /&gt;[18:26] &amp;lt;+SiberianSTAR&amp;gt; Converting a number from hex to decimal is simple&lt;br /&gt;[18:26] &amp;lt;+SiberianSTAR&amp;gt; Hexdecimal has 16 digits, 0-9 A-F&lt;br /&gt;[18:26] &amp;lt;+SiberianSTAR&amp;gt; A = 10, B = 11, C = 12, D = 13, E = 14, F = 15&lt;br /&gt;[18:27] &amp;lt;+SiberianSTAR&amp;gt; to convert for example 0xAA into Decimal you have to do 16^1 * A + 16^0 * A&lt;br /&gt;[18:27] &amp;lt;+SiberianSTAR&amp;gt; A = 10 so, the number is 16*10 + 10 = 170 some more&lt;br /&gt;[18:28] &amp;lt;+SiberianSTAR&amp;gt; The simpler operation that a CPU can perform between numbers are called bitwise-operations&lt;br /&gt;[18:29] &amp;lt;+SiberianSTAR&amp;gt; The most common bitwise operation are OR, AND, NOT and XOR&lt;br /&gt;[18:29] &amp;lt;+SiberianSTAR&amp;gt; they operate directly to each binary digit of a value&lt;br /&gt;[18:29] &amp;lt;+SiberianSTAR&amp;gt; for example&lt;br /&gt;[18:30] &amp;lt;+SiberianSTAR&amp;gt; OR&lt;br /&gt;[18:30] &amp;lt;+SiberianSTAR&amp;gt; in1 in2 out&lt;br /&gt;[18:30] &amp;lt;+SiberianSTAR&amp;gt; -----------&lt;br /&gt;[18:30] &amp;lt;+SiberianSTAR&amp;gt;  0  0   0&lt;br /&gt;[18:30] &amp;lt;+SiberianSTAR&amp;gt;  0  1   1&lt;br /&gt;[18:30] &amp;lt;+SiberianSTAR&amp;gt;  1  0   1&lt;br /&gt;[18:30] &amp;lt;+SiberianSTAR&amp;gt;  1  1   1&lt;br /&gt;[18:30] &amp;lt;+SiberianSTAR&amp;gt; Takes as example the values 0xAA, 0x45&lt;br /&gt;[18:31] &amp;lt;+SiberianSTAR&amp;gt; the binary rapresentation of the two values are 10101010 (0xAA) 01000101 (0x45)&lt;br /&gt;[18:32] &amp;lt;+SiberianSTAR&amp;gt; An OR is a sum without the carry&lt;br /&gt;[18:33] &amp;lt;+SiberianSTAR&amp;gt; Another bitwise logic operation is AND&lt;br /&gt;[18:33] &amp;lt;+SiberianSTAR&amp;gt; in1 in2 out&lt;br /&gt;[18:33] &amp;lt;+SiberianSTAR&amp;gt; -----------&lt;br /&gt;[18:33] &amp;lt;+SiberianSTAR&amp;gt;  0  0   0&lt;br /&gt;[18:33] &amp;lt;+SiberianSTAR&amp;gt;  0  1   0&lt;br /&gt;[18:33] &amp;lt;+SiberianSTAR&amp;gt;  1  0   0&lt;br /&gt;[18:33] &amp;lt;+SiberianSTAR&amp;gt;  1  1   1&lt;br /&gt;[18:33] &amp;lt;+SiberianSTAR&amp;gt; And returns TRUE only if both bits are TRUE&lt;br /&gt;[18:34] &amp;lt;+SiberianSTAR&amp;gt; In most cases AND is used to get only certain digits of an hex-number&lt;br /&gt;[18:34] &amp;lt;+SiberianSTAR&amp;gt; for example&lt;br /&gt;[18:34] &amp;lt;+SiberianSTAR&amp;gt; if you have&lt;br /&gt;[18:34] &amp;lt;+SiberianSTAR&amp;gt; 0xABCD&lt;br /&gt;[18:34] &amp;lt;+SiberianSTAR&amp;gt; but you want to get only the first and the last digit&lt;br /&gt;[18:35] &amp;lt;+SiberianSTAR&amp;gt; you may do&lt;br /&gt;[18:35] &amp;lt;+SiberianSTAR&amp;gt; 0xABCD AND 0xF00F&lt;br /&gt;[18:35] &amp;lt;+SiberianSTAR&amp;gt; the output number will be 0XA00D&lt;br /&gt;[18:35] &amp;lt;+SiberianSTAR&amp;gt; XOR is one of the most important bitwise logic operation&lt;br /&gt;[18:35] &amp;lt;+SiberianSTAR&amp;gt; XOR means Exclusive-OR&lt;br /&gt;[18:35] &amp;lt;+SiberianSTAR&amp;gt; It return TRUE only if the two bits are different&lt;br /&gt;[18:36] &amp;lt;+SiberianSTAR&amp;gt; XOR&lt;br /&gt;[18:36] &amp;lt;+SiberianSTAR&amp;gt; in1 in2 out&lt;br /&gt;[18:36] &amp;lt;+SiberianSTAR&amp;gt; -----------&lt;br /&gt;[18:36] &amp;lt;+SiberianSTAR&amp;gt;  0  0   0&lt;br /&gt;[18:36] &amp;lt;+SiberianSTAR&amp;gt;  0  1   1&lt;br /&gt;[18:36] &amp;lt;+SiberianSTAR&amp;gt;  1  0   1&lt;br /&gt;[18:36] &amp;lt;+SiberianSTAR&amp;gt;  1  1   0&lt;br /&gt;[18:36] &amp;lt;+SiberianSTAR&amp;gt; Another important bitwise logic instruction is left/right SHIFT&lt;br /&gt;[18:37] &amp;lt;+SiberianSTAR&amp;gt; if you shift a number left you will multiply the number by 2&lt;br /&gt;[18:37] &amp;lt;+SiberianSTAR&amp;gt; If you shift a number right you will divide a number by 2&lt;br /&gt;[18:37] &amp;lt;+SiberianSTAR&amp;gt; Shift instructions are very fast&lt;br /&gt;[18:38] &amp;lt;+SiberianSTAR&amp;gt; So if you have to divide a number by two you may use the shift instead of the slower division&lt;br /&gt;[18:38] &amp;lt;+FreePlay&amp;gt; it's integer division, of course&lt;br /&gt;[18:38] &amp;lt;+SiberianSTAR&amp;gt; yes&lt;br /&gt;[18:39] &amp;lt;@harleyg&amp;gt; so in binary you have 2... 10, moving to the right is 1, 1&lt;br /&gt;[18:39] &amp;lt;@harleyg&amp;gt; which in c is &amp;gt;&amp;gt; right?&lt;br /&gt;[18:39] &amp;lt;+SiberianSTAR&amp;gt; &amp;gt;&amp;gt; is the right shift and corresponds to a division by two&lt;br /&gt;[18:39] &amp;lt;+SiberianSTAR&amp;gt; So if in C you do A = 10 &amp;gt;&amp;gt; 1, A = 5&lt;br /&gt;[18:40] &amp;lt;@harleyg&amp;gt; yes&lt;br /&gt;[18:40] &amp;lt;+SiberianSTAR&amp;gt; and &amp;lt;&amp;lt; is the multiplication&lt;br /&gt;[18:40] &amp;lt;+SiberianSTAR&amp;gt; ok&lt;br /&gt;[18:40] &amp;lt;+SiberianSTAR&amp;gt; In ASM you don't have variables&lt;br /&gt;[18:41] &amp;lt;+SiberianSTAR&amp;gt; But you will have to operate directly to the registers of the CPU or on the memory&lt;br /&gt;[18:42] &amp;lt;+SiberianSTAR&amp;gt; The memory is divided by text segment (code of the program), data segment (where you store your static data) and stack segment&lt;br /&gt;[18:43] &amp;lt;+SiberianSTAR&amp;gt; The C compilers uses the stack segment to store your local variables of the functions&lt;br /&gt;[18:44] &amp;lt;+SiberianSTAR&amp;gt; A register is a part of the CPU that can contain a value, each register of the psp is 32bits length&lt;br /&gt;[18:44] &amp;lt;+SiberianSTAR&amp;gt; there are 32 Registers of general purposes and 32 floating point registers&lt;br /&gt;[18:44] &amp;lt;+SiberianSTAR&amp;gt; The general purposes registers are named $0 .. $31&lt;br /&gt;[18:45] &amp;lt;+SiberianSTAR&amp;gt; those registers have a mnemonic name,&lt;br /&gt;[18:45] &amp;lt;+SiberianSTAR&amp;gt; $0 is also $zero and usually contains 0x00000000&lt;br /&gt;[18:45] &amp;lt;+SiberianSTAR&amp;gt; $1 is a temporary register of the assembler&lt;br /&gt;[18:45] &amp;lt;+FreePlay&amp;gt; "usually"?&lt;br /&gt;[18:46] &amp;lt;+SiberianSTAR&amp;gt; well if you don't change that it will contains always 0&lt;br /&gt;[18:46] &amp;lt;+SiberianSTAR&amp;gt; &lt;br /&gt;[18:46] &amp;lt;+SiberianSTAR&amp;gt; $2 and $3 are $v0 and $v1, and are used to store the return value of the functions&lt;br /&gt;[18:47] &amp;lt;+SiberianSTAR&amp;gt; (in intel 286+ cpus was used EAX to store the return value of a function)&lt;br /&gt;[18:47] &amp;lt;+SiberianSTAR&amp;gt; $4, $5, $6, $7 are used to pass the arguments to a function&lt;br /&gt;[18:48] &amp;lt;+SiberianSTAR&amp;gt; $28, $gp is named global pointer&lt;br /&gt;[18:48] &amp;lt;+SiberianSTAR&amp;gt; $29, $sp is the stack pointer&lt;br /&gt;[18:48] &amp;lt;@harleyg&amp;gt; $80$27?&lt;br /&gt;[18:48] &amp;lt;@harleyg&amp;gt; $8-$27?&lt;br /&gt;[18:49] &amp;lt;+SiberianSTAR&amp;gt; the stack pointer register contains the address of the first free stack byte from the top&lt;br /&gt;[18:49] &amp;lt;+SiberianSTAR&amp;gt; $26 and $27 are used from the operating system&lt;br /&gt;[18:50] &amp;lt;+SiberianSTAR&amp;gt; $24, $25 are for general use&lt;br /&gt;[18:50] &amp;lt;+SiberianSTAR&amp;gt; $8 and $15 are for general use and are not preserved on a function call&lt;br /&gt;[18:51] &amp;lt;+SiberianSTAR&amp;gt; $16 and $23 are for general use and are preserved on a function call&lt;br /&gt;[18:51] &amp;lt;+SiberianSTAR&amp;gt; $30 is the frame pointer and $31 is the return address, it automatically set after a JAL instruction&lt;br /&gt;[18:52] &amp;lt;+SiberianSTAR&amp;gt; ok so start with the asm instructions&lt;br /&gt;[18:54] &amp;lt;+SiberianSTAR&amp;gt; The arithmetic and bitwise instructions can operate only on the registers&lt;br /&gt;[18:54] &amp;lt;+SiberianSTAR&amp;gt; if you want to do a multiplication of a value stored in memory you have first to load it on a register&lt;br /&gt;[18:55] &amp;lt;+SiberianSTAR&amp;gt; You can load values into registers only if the address is 4byte aligned, this means that the address is a multiple of four&lt;br /&gt;[18:56] &amp;lt;+SiberianSTAR&amp;gt; the LW instruction loads a value from the memory into a register&lt;br /&gt;[18:56] &amp;lt;@harleyg&amp;gt; how couldnt it be a multiple of 4?&lt;br /&gt;[18:56] &amp;lt;+SiberianSTAR&amp;gt; ??&lt;br /&gt;[18:56] &amp;lt;@harleyg&amp;gt; You can load values into registers only if the address is 4byte aligned, this means that the address is&lt;br /&gt;[18:56] &amp;lt;@harleyg&amp;gt;                                    a multiple of four&lt;br /&gt;[18:56] &amp;lt;+SiberianSTAR&amp;gt; yes&lt;br /&gt;[18:56] &amp;lt;+SiberianSTAR&amp;gt; for example&lt;br /&gt;[18:56] &amp;lt;+SiberianSTAR&amp;gt; 0x00000000&lt;br /&gt;[18:56] &amp;lt;+SiberianSTAR&amp;gt; 0x00000004&lt;br /&gt;[18:57] &amp;lt;+SiberianSTAR&amp;gt; 0x00000008&lt;br /&gt;[18:57] &amp;lt;+SiberianSTAR&amp;gt; and so on&lt;br /&gt;[18:57] &amp;lt;+SiberianSTAR&amp;gt; the instruction to load a value from memory to a register is LW&lt;br /&gt;[18:57] &amp;lt;+SiberianSTAR&amp;gt; the general syntax of an instruction is&lt;br /&gt;[18:58] &amp;lt;+SiberianSTAR&amp;gt; mnemonic destination, source&lt;br /&gt;[18:58] &amp;lt;+SiberianSTAR&amp;gt; so for example&lt;br /&gt;[18:59] &amp;lt;+SiberianSTAR&amp;gt; to load the 32bits value in the position 0x00000000 of the memory in $t0&lt;br /&gt;[18:59] &amp;lt;+SiberianSTAR&amp;gt; you can do&lt;br /&gt;[18:59] &amp;lt;+SiberianSTAR&amp;gt; lw $t0, 0&lt;br /&gt;[19:00] &amp;lt;+SiberianSTAR&amp;gt; the store instruction SW copy a value from a register into memory&lt;br /&gt;[19:00] &amp;lt;+SiberianSTAR&amp;gt; sw $t0, 0&lt;br /&gt;[19:00] &amp;lt;+SiberianSTAR&amp;gt; will save $t0 in the position 0 of the memory&lt;br /&gt;[19:00] &amp;lt;+SiberianSTAR&amp;gt; you may set a base offset into a register, for example $t1 = 0x0000A0000&lt;br /&gt;[19:01] &amp;lt;+SiberianSTAR&amp;gt; and then use that register as base offset&lt;br /&gt;[19:01] &amp;lt;+SiberianSTAR&amp;gt; doing&lt;br /&gt;[19:01] &amp;lt;+SiberianSTAR&amp;gt; lw $t0, 0x10($t1)&lt;br /&gt;[19:01] &amp;lt;+SiberianSTAR&amp;gt; you will load into $t0 the value in the memory position 0x10 + $t1&lt;br /&gt;[19:02] &amp;lt;+SiberianSTAR&amp;gt; If you see an assembly file generated by the psp-gcc compiler&lt;br /&gt;[19:02] &amp;lt;+SiberianSTAR&amp;gt; you will see often the LUI instruction&lt;br /&gt;[19:02] &amp;lt;+SiberianSTAR&amp;gt; with syntax is&lt;br /&gt;[19:02] &amp;lt;+SiberianSTAR&amp;gt; LUI dest_register, immediate&lt;br /&gt;[19:03] &amp;lt;+SiberianSTAR&amp;gt; dest_register = immediate * 0x10000&lt;br /&gt;[19:04] &amp;lt;+SiberianSTAR&amp;gt; so for example&lt;br /&gt;[19:05] &amp;lt;+SiberianSTAR&amp;gt; if you want to set in $2 the base offset 0x89000000&lt;br /&gt;[19:05] &amp;lt;+SiberianSTAR&amp;gt; you do&lt;br /&gt;[19:05] &amp;lt;+SiberianSTAR&amp;gt; LUI $2, 0x8900&lt;br /&gt;[19:05] &amp;lt;+SiberianSTAR&amp;gt; and then you can use $2 as an base offset register&lt;br /&gt;[19:06] &amp;lt;+SiberianSTAR&amp;gt; let see an example program&lt;br /&gt;[19:08] &amp;lt;+SiberianSTAR&amp;gt; http://rafb.net/paste/results/IHjZ3163.html&lt;br /&gt;[19:10] &amp;lt;@harleyg&amp;gt; ok&lt;br /&gt;[19:10] &amp;lt;+SiberianSTAR&amp;gt; you can try to generate your asm code of an your c source doing psp-gcc -S code.c&lt;br /&gt;[19:10] &amp;lt;+SiberianSTAR&amp;gt; let's see the asm generated by a simple C program&lt;br /&gt;[19:11] &amp;lt;+SiberianSTAR&amp;gt; http://rafb.net/paste/results/f4vwze96.html&lt;br /&gt;[19:11] &amp;lt;+SiberianSTAR&amp;gt; the asm generated code is&lt;br /&gt;[19:11] &amp;lt;+SiberianSTAR&amp;gt; http://rafb.net/paste/results/q7sNRo73.html&lt;br /&gt;[19:12] &amp;lt;+SiberianSTAR&amp;gt; you can see how for each function is used a label&lt;br /&gt;[19:12] &amp;lt;+SiberianSTAR&amp;gt; the code of "function" is very simple&lt;br /&gt;[19:12] &amp;lt;@harleyg&amp;gt; can you explain ?&lt;br /&gt;[19:12] &amp;lt;+SiberianSTAR&amp;gt; as the first operation it sets the stack pointer&lt;br /&gt;[19:13] &amp;lt;+SiberianSTAR&amp;gt; each function has to set his stack pointer&lt;br /&gt;[19:13] &amp;lt;+SiberianSTAR&amp;gt; you see&lt;br /&gt;[19:13] &amp;lt;+SiberianSTAR&amp;gt; addiu   $sp,$sp,-16&lt;br /&gt;[19:13] &amp;lt;+SiberianSTAR&amp;gt; addiu          $sp,$sp,-16&lt;br /&gt;[19:13] &amp;lt;@harleyg&amp;gt; yes&lt;br /&gt;[19:13] &amp;lt;+SiberianSTAR&amp;gt; this puts in $sp, $sp - 16&lt;br /&gt;[19:13] &amp;lt;+SiberianSTAR&amp;gt; why this ?&lt;br /&gt;[19:14] &amp;lt;@harleyg&amp;gt; $sp = $sp + -16?&lt;br /&gt;[19:14] &amp;lt;@harleyg&amp;gt; or is that addu&lt;br /&gt;[19:14] &amp;lt;+SiberianSTAR&amp;gt; yes&lt;br /&gt;[19:14] &amp;lt;+SiberianSTAR&amp;gt; but&lt;br /&gt;[19:14] &amp;lt;+SiberianSTAR&amp;gt; each variable declared on your c source code takes 4 byte&lt;br /&gt;[19:14] &amp;lt;+SiberianSTAR&amp;gt; some generated code is unuseful&lt;br /&gt;[19:15] &amp;lt;+SiberianSTAR&amp;gt; like&lt;br /&gt;[19:16] &amp;lt;+SiberianSTAR&amp;gt; moment, before i explain&lt;br /&gt;[19:16] &amp;lt;@harleyg&amp;gt; ok&lt;br /&gt;[19:16] &amp;lt;+SiberianSTAR&amp;gt; why it does $sp - 16 ?&lt;br /&gt;[19:16] &amp;lt;@harleyg&amp;gt; huh?&lt;br /&gt;[19:17] &amp;lt;+SiberianSTAR&amp;gt; bcz that function uses the first 16bytes free of the stack to store his variables and temporary data&lt;br /&gt;[19:17] &amp;lt;+SiberianSTAR&amp;gt; for the first thing he sets his frame pointer&lt;br /&gt;[19:17] &amp;lt;@harleyg&amp;gt; isnt it $sp = -16?&lt;br /&gt;[19:17] &amp;lt;+SiberianSTAR&amp;gt; yes&lt;br /&gt;[19:17] &amp;lt;+SiberianSTAR&amp;gt; the stack is LIFO style&lt;br /&gt;[19:17] &amp;lt;@harleyg&amp;gt; wouldnt it be subiu if it was $sp - 16?&lt;br /&gt;[19:17] &amp;lt;+SiberianSTAR&amp;gt; nono&lt;br /&gt;[19:17] &amp;lt;+SiberianSTAR&amp;gt; it does&lt;br /&gt;[19:18] &amp;lt;+SiberianSTAR&amp;gt; $sp = $sp - 16&lt;br /&gt;[19:18] &amp;lt;@harleyg&amp;gt; isnt it add thougjh?&lt;br /&gt;[19:18] &amp;lt;+SiberianSTAR&amp;gt; well if you have studied math you know that adding a negative value on a positive is equal to subtract&lt;br /&gt;[19:19] &amp;lt;+SiberianSTAR&amp;gt; function(int a, int b)&lt;br /&gt;[19:19] &amp;lt;+SiberianSTAR&amp;gt; and 4bytes to store the original stack pointer&lt;br /&gt;[19:19] &amp;lt;+SiberianSTAR&amp;gt; - frame pointer - sorry&lt;br /&gt;[19:19] &amp;lt;@harleyg&amp;gt; ok&lt;br /&gt;[19:20] &amp;lt;+SiberianSTAR&amp;gt; frame pointer is used as a base-offset for variables&lt;br /&gt;[19:20] &amp;lt;+SiberianSTAR&amp;gt;    sw   $fp,8($sp)&lt;br /&gt;[19:20] &amp;lt;+SiberianSTAR&amp;gt;    move   $fp,$sp&lt;br /&gt;[19:20] &amp;lt;+SiberianSTAR&amp;gt; in the first instruction it saves the original frame pointer in 8 + $sp&lt;br /&gt;[19:20] &amp;lt;+SiberianSTAR&amp;gt; then it moves on the $fp the value of $sp&lt;br /&gt;[19:21] &amp;lt;+SiberianSTAR&amp;gt; and because we compiled the code with no optimization&lt;br /&gt;[19:21] &amp;lt;+SiberianSTAR&amp;gt; the generated code is stupid&lt;br /&gt;[19:21] &amp;lt;+SiberianSTAR&amp;gt;    sw   $4,0($fp)&lt;br /&gt;[19:21] &amp;lt;+SiberianSTAR&amp;gt;    sw   $5,4($fp)&lt;br /&gt;[19:21] &amp;lt;+SiberianSTAR&amp;gt;    lw   $3,0($fp)&lt;br /&gt;[19:21] &amp;lt;+SiberianSTAR&amp;gt;    lw   $2,4($fp)&lt;br /&gt;[19:21] &amp;lt;+SiberianSTAR&amp;gt; in the first two instructions&lt;br /&gt;[19:21] &amp;lt;+SiberianSTAR&amp;gt; the value of the variables a and b are stored into $4 and $5&lt;br /&gt;[19:21] &amp;lt;+SiberianSTAR&amp;gt; ehm&lt;br /&gt;[19:21] &amp;lt;@harleyg&amp;gt; ok&lt;br /&gt;[19:21] &amp;lt;+SiberianSTAR&amp;gt; the value of the variables a and b are stored from the registers $4 and $5 into memory&lt;br /&gt;[19:21] &amp;lt;+SiberianSTAR&amp;gt; 0 + $fp&lt;br /&gt;[19:21] &amp;lt;+SiberianSTAR&amp;gt; and&lt;br /&gt;[19:21] &amp;lt;+SiberianSTAR&amp;gt; 4 + $fp&lt;br /&gt;[19:22] &amp;lt;+SiberianSTAR&amp;gt; (each variables is 4byte length)&lt;br /&gt;[19:22] &amp;lt;+SiberianSTAR&amp;gt; then it reload the contents from the memory into the registers $3 and $2&lt;br /&gt;[19:22] &amp;lt;@harleyg&amp;gt; ok&lt;br /&gt;[19:22] &amp;lt;+SiberianSTAR&amp;gt; so&lt;br /&gt;[19:22] &amp;lt;+SiberianSTAR&amp;gt; $3 = $4 and $2 = $5&lt;br /&gt;[19:22] &amp;lt;+SiberianSTAR&amp;gt; in the next instruction it performs the addition&lt;br /&gt;[19:22] &amp;lt;+SiberianSTAR&amp;gt; addu   $2,$3,$2&lt;br /&gt;[19:23] &amp;lt;+SiberianSTAR&amp;gt; it saves in the register $2 the result of $3+$2&lt;br /&gt;[19:23] &amp;lt;@harleyg&amp;gt; $2 = $3 + $2&lt;br /&gt;[19:23] &amp;lt;+SiberianSTAR&amp;gt; exactly&lt;br /&gt;[19:23] &amp;lt;@harleyg&amp;gt; yeah&lt;br /&gt;[19:24] &amp;lt;+SiberianSTAR&amp;gt; the register $2 is used from the gcc compiler to return the value of a function&lt;br /&gt;[19:24] &amp;lt;+SiberianSTAR&amp;gt; then it restores the stack pointer and the frame pointer&lt;br /&gt;[19:24] &amp;lt;+SiberianSTAR&amp;gt; the register $2 is used from the gcc compiler to return the value of a function&lt;br /&gt;[19:24] &amp;lt;+SiberianSTAR&amp;gt; then it restores the stack pointer and the frame pointer&lt;br /&gt;[19:24] &amp;lt;+SiberianSTAR&amp;gt;    lw   $fp,8($sp)&lt;br /&gt;[19:24] &amp;lt;+SiberianSTAR&amp;gt;    addiu   $sp,$sp,16&lt;br /&gt;[19:25] &amp;lt;+SiberianSTAR&amp;gt; and jumps into the address contained into the register $31&lt;br /&gt;[19:25] &amp;lt;+SiberianSTAR&amp;gt; the main function is simpler&lt;br /&gt;[19:25] &amp;lt;+SiberianSTAR&amp;gt; more simple&lt;br /&gt;[19:25] &amp;lt;+SiberianSTAR&amp;gt;    addiu   $sp,$sp,-16&lt;br /&gt;[19:25] &amp;lt;+SiberianSTAR&amp;gt;    sw   $31,12($sp)&lt;br /&gt;[19:25] &amp;lt;+SiberianSTAR&amp;gt;    sw   $fp,8($sp)&lt;br /&gt;[19:25] &amp;lt;+SiberianSTAR&amp;gt;    move   $fp,$sp&lt;br /&gt;[19:25] &amp;lt;+SiberianSTAR&amp;gt;    li   $4,10         # 0xa&lt;br /&gt;[19:25] &amp;lt;+SiberianSTAR&amp;gt;    li   $5,20         # 0x14&lt;br /&gt;[19:25] &amp;lt;+SiberianSTAR&amp;gt;    jal   function&lt;br /&gt;[19:25] &amp;lt;+SiberianSTAR&amp;gt;    nop&lt;br /&gt;[19:25] &amp;lt;+SiberianSTAR&amp;gt; for each function the stack-pointer and the frame pointer is set up&lt;br /&gt;[19:26] &amp;lt;+SiberianSTAR&amp;gt; &lt;siberianstar&gt;    li   $4,10         # 0xa&lt;br /&gt;[19:26] &amp;lt;+SiberianSTAR&amp;gt; &lt;siberianstar&gt;    li   $5,20         # 0x14&lt;br /&gt;[19:26] &amp;lt;+SiberianSTAR&amp;gt; with these two instructions it loads on the registers $4 and $5 the value of the function call function(10, 20)&lt;br /&gt;[19:26] &amp;lt;@harleyg&amp;gt; hmm&lt;br /&gt;[19:26] &amp;lt;@harleyg&amp;gt; 10 = $4?&lt;br /&gt;[19:26] &amp;lt;+SiberianSTAR&amp;gt; yes&lt;br /&gt;[19:26] &amp;lt;@harleyg&amp;gt; ok&lt;br /&gt;[19:26] &amp;lt;+SiberianSTAR&amp;gt; you know &lt;br /&gt;[19:26] &amp;lt;@harleyg&amp;gt; &lt;br /&gt;[19:26] &amp;lt;+SiberianSTAR&amp;gt; $4 = 10&lt;br /&gt;[19:27] &amp;lt;+SiberianSTAR&amp;gt; $5 = 20&lt;br /&gt;[19:27] &amp;lt;+SiberianSTAR&amp;gt; registers $4-$7 are used to send the arguments to the functions&lt;br /&gt;[19:27] &amp;lt;+SiberianSTAR&amp;gt; then it calls the 'function'&lt;br /&gt;[19:28] &amp;lt;+SiberianSTAR&amp;gt; JAL jump at the address specified and saves the return address into the register $31&lt;br /&gt;[19:28] &amp;lt;@harleyg&amp;gt; $4 - $7 yeah?&lt;br /&gt;[19:28] &amp;lt;+SiberianSTAR&amp;gt; uh?&lt;br /&gt;[19:28] &amp;lt;@harleyg&amp;gt; what if the function requires... 10 arguements&lt;br /&gt;[19:28] &amp;lt;@harleyg&amp;gt; hwo cn you use $4 and $7 ? &lt;br /&gt;[19:28] &amp;lt;+SiberianSTAR&amp;gt; we try and we see what it does &lt;br /&gt;[19:30] &amp;lt;+SiberianSTAR&amp;gt; http://rafb.net/paste/results/sXt4CF33.html&lt;br /&gt;[19:30] &amp;lt;+SiberianSTAR&amp;gt; http://rafb.net/paste/results/FMRk1r73.html&lt;br /&gt;[19:31] &amp;lt;+SiberianSTAR&amp;gt; it goes over&lt;br /&gt;[19:31] &amp;lt;+SiberianSTAR&amp;gt; li $8,50 # 0x32&lt;br /&gt;[19:31] &amp;lt;+SiberianSTAR&amp;gt; li $9,60 # 0x3c&lt;br /&gt;[19:31] &amp;lt;+SiberianSTAR&amp;gt; li $10,70 # 0x46&lt;br /&gt;[19:31] &amp;lt;+SiberianSTAR&amp;gt; li $11,80 # 0x50&lt;br /&gt;[19:31] &amp;lt;+SiberianSTAR&amp;gt; and use the next registers&lt;br /&gt;[19:31] &amp;lt;+SiberianSTAR&amp;gt; that are general-purpose registers&lt;/siberianstar&gt;&lt;/siberianstar&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3997450343586226773-1500864333841936558?l=skyend-pspslimhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skyend-pspslimhacks.blogspot.com/feeds/1500864333841936558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://skyend-pspslimhacks.blogspot.com/2010/08/mips-asm-tutorial-by-siberianstar.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3997450343586226773/posts/default/1500864333841936558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3997450343586226773/posts/default/1500864333841936558'/><link rel='alternate' type='text/html' href='http://skyend-pspslimhacks.blogspot.com/2010/08/mips-asm-tutorial-by-siberianstar.html' title='MIPS ASM TUTORIAL BY SiberianSTAR'/><author><name>skyend</name><uri>http://www.blogger.com/profile/04669064968788426270</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_IKZST8cfbyg/TFu-WJr22gI/AAAAAAAAAAU/opWkmjPr7YA/S220/Avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3997450343586226773.post-639292654831437096</id><published>2010-08-06T00:17:00.000-07:00</published><updated>2010-08-06T00:17:35.468-07:00</updated><title type='text'>Half Byte Loader</title><content type='html'>Half Byte Loader ( hbl ) is an e-loader developed for patapon 2 exploit.&lt;br /&gt;It lets you use homebrews on Official Firmwares upto 6.20.&lt;br /&gt;&lt;br /&gt;You can find more info about it &lt;a href="http://forums.pspslimhacks.com/hacking/6016-only-topic-patapon-2-save-game-exploit-half-byte-loader.html"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Source Code for HBL is available at &lt;a href="http://code.google.com/p/valentine-hbl/"&gt;Google Code SVN&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For a list of working homebrew apps, go &lt;a href="http://advancedpsp.tk/foro_es/viewtopic.php?f=41&amp;amp;t=425"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3997450343586226773-639292654831437096?l=skyend-pspslimhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skyend-pspslimhacks.blogspot.com/feeds/639292654831437096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://skyend-pspslimhacks.blogspot.com/2010/08/half-byte-loader.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3997450343586226773/posts/default/639292654831437096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3997450343586226773/posts/default/639292654831437096'/><link rel='alternate' type='text/html' href='http://skyend-pspslimhacks.blogspot.com/2010/08/half-byte-loader.html' title='Half Byte Loader'/><author><name>skyend</name><uri>http://www.blogger.com/profile/04669064968788426270</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_IKZST8cfbyg/TFu-WJr22gI/AAAAAAAAAAU/opWkmjPr7YA/S220/Avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3997450343586226773.post-6585464798668050106</id><published>2010-02-13T00:17:00.000-08:00</published><updated>2010-08-06T00:31:31.255-07:00</updated><title type='text'>SKYEND'S BLOG</title><content type='html'>&lt;div align="left"&gt;Hiya every one, this is skyend bringing you all the usefull links in one place.&lt;br /&gt;&lt;br /&gt;Visit &lt;a href="http://forums.pspslimhacks.com/"&gt;PSP SLIM HACKS FORUMS&amp;nbsp;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://forums.pspslimhacks.com/members/skyend.html"&gt;My profile &lt;/a&gt;&lt;br /&gt;&lt;a href="http://skyend.blog.co.in/files/2010/02/screenshot0072.jpg"&gt;&lt;img alt="" class="alignnone size-medium wp-image-6" height="170" src="http://skyend.blog.co.in/files/2010/02/screenshot0072-300x170.jpg" width="300" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;:: GUIDES ::&lt;/b&gt;&lt;/div&gt;&lt;div align="center"&gt;These tutorials are written by my fellow mates ( &amp;amp; me ) at PSH forums.&lt;/div&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;a href="http://forums.pspslimhacks.com/user-help/121-psp-hackable-allow-me-answer.html"&gt;IS THIS PSP HACKABLE ? ALLOW ME TO ANSWER THAT&lt;/a&gt;&lt;/div&gt;&lt;div align="left"&gt;Use this guide to identify which motherboard you have.&lt;/div&gt;&lt;div align="left"&gt;&lt;br /&gt;&lt;a href="http://forums.pspslimhacks.com/tutorials/2179-tutorial-how-install-cfw-any-psp.html"&gt;How To Install CFW on Any PSP&lt;/a&gt;&lt;/div&gt;&lt;div align="left"&gt;As the title says, full CFW guide.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://forums.pspslimhacks.com/tutorials/4711-tutorial-how-downgrade-upgrade-your-psps-ofw-cfw.html"&gt;How To Upgrade/Downgrade Your PSPs OFW/CFW&lt;/a&gt;&lt;/div&gt;&lt;div align="left"&gt;Simple methods to upgrade/downgarde your firmware.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://forums.pspslimhacks.com/tutorials/4606-tutorial-how-play-5-50-gen-d3-games-5-50-gen-d2-5-50-gen-b2-quickfix.html"&gt;Tutorial To Play 5.50 gen-d3 games on 5.50 gen-d2&lt;/a&gt;&lt;/div&gt;&lt;div align="left"&gt;Allows you to play latest games on GEN-D2 without updating to the buggy GEN-D3&lt;br /&gt;&lt;br /&gt;&lt;a href="http://forums.pspslimhacks.com/tutorials/10-custom-firmware-terminology.html"&gt;Custom Firmware Terminology&lt;/a&gt;&lt;/div&gt;&lt;div align="left"&gt;Contains all the terms/abbreviations a newbie needs to know&lt;br /&gt;&lt;br /&gt;&lt;a href="http://forums.pspslimhacks.com/tutorials/2934-hacking-psp-3000-tutorial.html"&gt;Hacking a PSP 3000&lt;/a&gt;&lt;/div&gt;&lt;div align="left"&gt;As the title says...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://forums.pspslimhacks.com/tutorials/3884-tutorial-psp2000v3-psp3000-hacking-comprehensive-guide.html"&gt;TUTORIAL - PSP2000v3 and PSP3000 Hacking - A comprehensive Guide&lt;/a&gt;&lt;/div&gt;&lt;div align="left"&gt;As the title says...it also has tips &amp;amp; tricks to load chickHEN&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://forums.pspslimhacks.com/tutorials/4416-ultimate-theme-guide-2010-a.html"&gt;The Ultimate Theme Guide! 2010 &lt;/a&gt;&lt;br /&gt;Simply the best theme guide out there.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://forums.pspslimhacks.com/tutorials/2482-using-yoshihiros-game-decrypter-v4-w-screens.html"&gt;Using Yoshihiro's Game Decrypter V4 (w/screens)&lt;/a&gt;&lt;br /&gt;Use this to decrypt games if you are 5.03 MHU ( CFWE ) user.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://forums.pspslimhacks.com/user-help/3466-guide-using-despertar-cementerio-v8.html"&gt;Using Despertar Del Cementerio v8&lt;/a&gt;&lt;br /&gt;Use this to unbrick your bricked fully hackable PSP.&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;b&gt;:: DOWNLOADS ::&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;:: OFW FILES ::&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://pspslimhacks.com/index.php?dl_id=138"&gt;5.00 FIRMWARE UPDATE&amp;nbsp;&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;b&gt;&lt;a href="http://pspslimhacks.com/index.php?dl_id=427"&gt;5.03 FIRMWARE UPDATE&lt;/a&gt; &amp;nbsp; { required for chickHEN }&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://pspslimhacks.com/index.php?dl_id=231"&gt;5.50 FIRMWARE UPDATE&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;a href="http://pspslimhacks.com/index.php?dl_id=337"&gt;6.00 FIRMWARE UPDATE&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://pspslimhacks.com/index.php?dl_id=360"&gt;6.10 FIRMWARE UPDATE&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://pspslimhacks.com/index.php?dl_id=404"&gt;6.20 FIRMWARE UPDATE&lt;/a&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt; &lt;a href="http://pspslimhacks.com/download/514/"&gt;6.30 FIRMWARE UPDATE&lt;/a&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://www.mediafire.com/?vp26bdzuz8b7xrn"&gt;6.31 FIRMWARE UPDATE&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;:: CFW FILES :: (&lt;/b&gt;&lt;b&gt; For FULLY HACKABLE PSPs )&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://pspslimhacks.com/custom-firmware-500-m33-6-released/"&gt;5.00 M33-6&lt;/a&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; { latest CFW by team M33 }&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://pspslimhacks.com/custom-firmware-5-50-gen-d-released/"&gt;5.50 GEN-D&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://pspslimhacks.com/custom-firmware-5-50-gen-d2-released/"&gt;5.50 GEN-D2&lt;/a&gt; &amp;nbsp; { most stable in the GEN family }&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://pspslimhacks.com/custom-firmware-5-50-gen-d3-final-released/"&gt;5.50 GEN-D3 " FINAL BUILD"&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P.S I wont include Prometheus here as its buggy.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;I recommend using M33_620 or Prometheus plugin.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;You can find the links in the plugins section.&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;For PARTIALLY HACKABLE PSPs ( ie 3000 &amp;amp; SLIMS with ta-088v3 )&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://pspslimhacks.com/custom-firmware-enabler-3-60-released/"&gt;CFWE 3.60&lt;/a&gt; &amp;nbsp; &amp;nbsp;{ more stable in CFWE, &amp;nbsp;latest games&amp;nbsp;require decyption }&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://pspslimhacks.com/custom-firmware-enabler-3-70-released-cfwenabler"&gt;CFWE 3.70&lt;/a&gt; &amp;nbsp; &amp;nbsp;{&lt;/b&gt;&lt;b&gt; latest games require decyption }&lt;/b&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://pspslimhacks.com/custom-firmware-5-03-gen-b-for-hen-released"&gt;5.03 GEN-B&lt;/a&gt; &amp;nbsp; { more stable in GENs, has inbuilt game&lt;/b&gt;&lt;b&gt; decryp&lt;/b&gt;&lt;b&gt;ter }&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://pspslimhacks.com/custom-firmware-5-03-gen-c-released/"&gt;5.03 GEN-C&lt;/a&gt; &amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;b&gt;{ has inbuilt game decrypter }&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;:: chickHEN ::&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://pspslimhacks.com/chickhen-r2-for-frimware-503-released/"&gt;chickHEN R2&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://advancedpsp.tk/foro_es/viewtopic.php?f=23&amp;amp;t=21"&gt;chickHEN mod2&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://www.psp-hacks.com/2009/12/01/mhuspeed-v3-an-alternative-to-chickhen/"&gt;MHUSPEED v3&lt;/a&gt; &amp;nbsp;{ loads easily }&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;:: DOWNGRADERS ::&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://pspslimhacks.com/hellcats-recovery-flasher-v160-detection-for-hen-mode/"&gt;HELLCAT'S RECOVERY FLASHER v1.60 [LATEST]&amp;nbsp;&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;This is for fully hackable PSPs only.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;You will brick your PSP if you downgrade a Partially Hackable one.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://fserv.skill-club.com/get_1187_f341.html"&gt;5.50 GEN-D3 Final Firmware Pack for Hellcats Recovery Flasher v1.60&lt;/a&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;( open the readme.txt for very clear instructions )&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;b&gt;:: UTILITIES AND PLUGINS ::&lt;/b&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;b&gt;&lt;a href="http://pspslimhacks.com/pspident-04-find-out-what-psp-motherboard-you-have/"&gt;PSPIdent 0.4&lt;/a&gt;&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;b&gt;Use this to find out your PSP's motherboard.&lt;/b&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;b&gt;&lt;a href="http://pspslimhacks.com/rains-ultralite-mms-maker-for-500-m33-4/"&gt;Rains Ultralite MMS Maker&lt;/a&gt;&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;b&gt;Use this to make a Magic Memory Stick&lt;/b&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;b&gt;&lt;a href="http://pspslimhacks.com/ultimate-vsh-menu-revised-by-total_noob/"&gt;Ultimate VSH Menu Revised by Total Noob&lt;/a&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Addon to the normal VSH menu&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;b&gt;&lt;a href="http://pspslimhacks.com/go-tube-version-1-1-released-youtube-on-your-psp/"&gt;Go Tube v1.1 Use this to watch youtube videos&lt;/a&gt;&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;b&gt;&lt;a href="http://pspslimhacks.com/index.php?dl_id=452"&gt;PSP Cheat dev: DayPR Rev.6 bugfix&lt;/a&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Go cheating !&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;b&gt;&lt;a href="http://pspslimhacks.com/cxmb-for-3-71-5-50/"&gt;CXMB for 3.71-5.50&lt;/a&gt;&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;b&gt;Use this to install CTF themes to your fully hackable PSP.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://dl.qj.net/psp/homebrew-applications/unofficial-cxmb-for-503-m33/gen-v2.html"&gt;CXMB MOD for 5.03 CFW&lt;/a&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;CXMB mod for partially hackable PSP.&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;b&gt;&lt;a href="http://pspslimhacks.com/pspdisp-v0-4-use-your-psp-as-a-second-display/"&gt;PSPdisp v0.4 – Use your PSP as a second display&lt;/a&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Displays your PC's monitor on PSP&lt;/b&gt;&lt;/div&gt;&lt;div align="center"&gt;&lt;b&gt;:: EMULATORS ::&lt;/b&gt;&lt;br /&gt;&lt;div align="left"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;b&gt;&lt;a href="http://pspslimhacks.com/psp-emulators/"&gt;All latest emulators are here&lt;/a&gt;&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div align="left"&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://widgets.amung.us/tab.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;WAU_tab('1j6mzn539zwl', 'left-middle')&lt;/script&gt;&lt;br /&gt;&lt;a href="http://www.freebloghitcounter.com/" target="_blank"&gt;&lt;img alt="blog counter" border="0" src="http://www.freebloghitcounter.com//counter.php?page=skyend-pspslimhacks.blogspot.com&amp;amp;digits=33&amp;amp;unique=0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.freebloghitcounter.com/" style="color: black; font-family: Verdana; font-size: 9px; text-decoration: none;" target="_blank"&gt;blog counter&lt;/a&gt;&lt;br /&gt;&lt;div id="eXTReMe"&gt;&lt;a href="http://extremetracking.com/open?login=skypsh"&gt;&lt;br /&gt;&lt;img alt="eXTReMe Tracker" height="38" id="EXim" src="http://t1.extreme-dm.com/i.gif" style="border: 0;" width="41" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;!--var EXlogin='skypsh' // Loginvar EXvsrv='s10' // VServerEXs=screen;EXw=EXs.width;navigator.appName!="Netscape"?EXb=EXs.colorDepth:EXb=EXs.pixelDepth;EXsrc="src";navigator.javaEnabled()==1?EXjv="y":EXjv="n";EXd=document;EXw?"":EXw="na";EXb?"":EXb="na";EXd.write("&lt;img "+EXsrc+"=http://e1.extreme-dm.com","/"+EXvsrv+".g?login="+EXlogin+"&amp;amp;","jv="+EXjv+"&amp;amp;j=y&amp;amp;srw="+EXw+"&amp;amp;srb="+EXb+"&amp;amp;","l="+escape(EXd.referrer)+" height=1 width=1&gt;");//--&gt;&lt;/script&gt;&lt;noscript&gt;&amp;lt;div id="neXTReMe"&amp;gt;&amp;lt;img height="1" width="1" alt="" src="http://e1.extreme-dm.com/s10.g?login=skypsh&amp;amp;j=n&amp;amp;jv=n" /&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt;&lt;/noscript&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3997450343586226773-6585464798668050106?l=skyend-pspslimhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://skyend-pspslimhacks.blogspot.com/feeds/6585464798668050106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://skyend-pspslimhacks.blogspot.com/2010/02/psp-hacking.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3997450343586226773/posts/default/6585464798668050106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3997450343586226773/posts/default/6585464798668050106'/><link rel='alternate' type='text/html' href='http://skyend-pspslimhacks.blogspot.com/2010/02/psp-hacking.html' title='SKYEND&apos;S BLOG'/><author><name>skyend</name><uri>http://www.blogger.com/profile/04669064968788426270</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_IKZST8cfbyg/TFu-WJr22gI/AAAAAAAAAAU/opWkmjPr7YA/S220/Avatar.png'/></author><thr:total>6</thr:total></entry></feed>
