... рдпрд╛ рдПрдХ рдХрд╣рд╛рдиреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рдкреЗрдВрдЧреБрдЗрди рдиреЗ рдЕрдореЗрд░рд┐рдХрд╛ рдФрд░ рдЬрд╛рдкрд╛рди рдХреЗ рд╕рд╛рде рджреЛрд╕реНрддреА рдХреАред

рдЗрд╕рд▓рд┐рдП, рдкреНрд░рд╛рдЪреАрди рд╕рдордп рдореЗрдВ, рд▓реЛрдЧ рд╕реЛрдиреА рдкреНрд▓реЗрд╕реНрдЯреЗрд╢рди рдкрд░ рдЦреЗрд▓рддреЗ рдереЗ рдФрд░ рд╡реЗ рд╣рд░ рдЪреАрдЬ рд╕реЗ рдЦреБрд╢ рдереЗред рд▓реЗрдХрд┐рди рдкреНрд░рдЧрддрд┐ рддрдм рднреА рдЯрд┐рдХ рдирд╣реАрдВ рдкрд╛рдИред Microcircuits рдХреЗ рдПрдХреАрдХрд░рдг рдХреА рдбрд┐рдЧреНрд░реА рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реБрдИред рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рд▓рдЧрд╛рддрд╛рд░ рдирдП рдлреЙрд░реНрдо рдХрд╛рд░рдХреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рдФрд░ рдорд╛рд░реНрдХреЗрдЯрд┐рдВрдЧ рдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдирдП рдмрд╛рдЬрд╛рд░реЛрдВ рдХреА рддрд▓рд╛рд╢ рд╣реИред рдЗрд╕рд▓рд┐рдП 2005 рдореЗрдВ, рд╕реЛрдиреА Playstation рдкреЛрд░реНрдЯреЗрдмрд▓, рдПрдХ рдкреЛрд░реНрдЯреЗрдмрд▓ рдЧреЗрдорд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо, рдЬрд╛рдкрд╛рди рдХреЗ рдмрд╛рд╣рд░ рдмрд┐рдХреНрд░реА рдкрд░
рдЪрд▓рд╛ рдЧрдпрд╛ ред рдЙрд╕рдХреА рдЧреЗрдо рд▓рд╛рдЗрди (рдХрд┐рд╕реА рдЕрдиреНрдп рдХрдВрд╕реЛрд▓ рдХреЗ рд╕рд╛рде) PSP рдЖрдпрд░рди рдЧреЗрдореНрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдереАред рд▓реЗрдХрд┐рди рдЙрд╕рдХреЗ рдкрд╛рд╕ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЗрдореНрдпреВрд▓реЗрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореВрд▓ рдкреНрд▓реЗрд╕реНрдЯреЗрд╢рди рд╕реЗ рдЧреЗрдо рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╢рдХреНрддрд┐ рднреА рдереАред рдпрджреНрдпрдкрд┐, рд╢рд╛рдпрдж, рдореБрдЦреНрдп рднреВрдорд┐рдХрд╛ рдЗрд╕ рддрдереНрдп рд╕реЗ рдирд┐рднрд╛рдИ рдЧрдИ рдереА рдХрд┐ PlayStation рдФрд░ PSP рджреЛрдиреЛрдВ рдореЗрдВ рдПрдХ рд╣реА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдерд╛ - рдЕрд░реНрдерд╛рддреН, MIPSред рд▓реЗрдХрд┐рди рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдмрд╕реЗ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд▓реЙрдиреНрдЪ рдХреЗ рд╡рд░реНрд╖ рдореЗрдВ, рддреБрд░рдВрдд, PSP рдПрд╕рдбреАрдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдиреЗрдЯрд╡рд░реНрдХ рдкрд░
рд▓реАрдХ рд╣реЛ рдЧрдПред рдирддреАрдЬрддрди, рд▓реЙрдиреНрдЪ рдХреЗ рд▓рдЧрднрдЧ 10 рд╕рд╛рд▓ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЦреЗрд▓реЛрдВ рдХреА рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реЛрдордмреНрд░реЗрд╡ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдм, рд░реВрд╕ рдХреЗ рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рд╢рд╣рд░ рдореЗрдВ рдирд╣реАрдВ, рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ PSP (рд╕рдмрд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╕рдВрд╢реЛрдзрди) 3000 рд░реВрдмрд▓ рдХреЗ рд▓рд┐рдП рдЦрд░реАрджрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╕рдм рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рдЖрдХрд░реНрд╖рдХ рдмрдЬрдЯ рдЧреЗрдорд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рд┐рд░реНрдл рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдмреЗрд╕ рд╣реИред рд╕рдмрд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╕рдВрд╢реЛрдзрди рдореЗрдВ рдПрдХ рдЯреАрд╡реА рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдШрдЯрдХ рдЖрдЙрдЯрдкреБрдЯ рд╣реИред рд▓реЗрдХрд┐рди рд▓рдВрдмреЗ рд╕рдордп рддрдХ PSP рдХреЛ рдЧреЗрдордкреИрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЯреАрд╡реА рдХрдиреЗрдХреНрдЯрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рддреИрдирд╛рдд рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде, рдЪрд╛рд░реНрдЬрд░ рд╕реЗ - рдПрдХ рджреВрд╕рд░реЗ рддрд╛рд░ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЪрд┐рдореЗрд░рд╛ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд╕реНрддреЗ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ geeky рд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП - рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ PSP рдХреЗ рд▓рд┐рдП USB рдХреНрд▓рд╛рдЗрдВрдЯ рдбреНрд░рд╛рдЗрд╡рд░ рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд╡рд┐рд╖рдп рд╣реИрдВ, PSP рдореЗрдВ рд╣реБрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐, USB рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рдФрд░ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЙрдпрд╕реНрдЯрд┐рдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ред рд╣рдо рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдкреЛрд░реНрдЯреЗрдмрд▓ рдХрдВрд╕реЛрд▓ рдХреЛ рдЯреАрд╡реА рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдирдпрд╛ рдирд╣реАрдВ рд╣реИ
рд▓реЗрдХрд┐рди рд╣рдо рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред рдЪреВрдВрдХрд┐ PSP рд▓рдЧрднрдЧ 10 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╕реЛрдиреА рдХреА рдкреЛрд░реНрдЯреЗрдмрд▓ рдХрдВрд╕реЛрд▓ рдХреА рдЕрдЧрд▓реА рдкреАрдврд╝реА, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╕реЛрдиреА рдкреНрд▓реЗрд╕реНрдЯреЗрд╢рди рд╡реАрдЯрд╛ рд╣реИ, рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред рдФрд░ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЬрд╛рдкрд╛рди рдореЗрдВ рдПрдХ рдкреЛрд░реНрдЯреЗрдмрд▓ рдХрдВрд╕реЛрд▓ рдХрд╛ рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг рдерд╛ред рд╕реЛрдиреА рдкреНрд▓реЗрд╕реНрдЯреЗрд╢рди рд╡реАрдЯрд╛ рдЯреАрд╡реАред
рдкреАрдПрд╕ рд╡реАрдЯрд╛ рдЯреА.рд╡реА. рдЧреЗрдордкреИрдб рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ Playstation 3 рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдбреНрдпреВрд▓рд╢реЙрдХ 3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдпреВрдПрд╕рдмреА рдпрд╛ рдмреНрд▓реВрдЯреВрде рдХрдиреЗрдХреНрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд╡реАрдЯрд╛ рдХреА рддрд░рд╣ рд╡реАрдЯрд╛ рдЯреАрд╡реА, рдореВрд▓ рдкреНрд▓реЗрд╕реНрдЯреЗрд╢рди рд╕реЗ рд╡реАрдЯрд╛, рдкреАрдПрд╕рдкреА рдФрд░ рдЧреЗрдо рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, "рд╕реНрдерд┐рд░ рдкреЛрд░реНрдЯреЗрдмрд▓" рдХрдВрд╕реЛрд▓ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд╛рдлреА рд╕реБрд╕рдВрдЧрдд рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред
рджреЛрд╕реНрддреЛрдВ рдХреЛ рдЧреЗрдордкреИрдб рдФрд░ рдкреАрдПрд╕рдкреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛?
рдЕрдЧрд▓рд╛, рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмрд╛рд╣рд░реА рдЧреЗрдордкреИрдб рдХреЛ рдкреАрдПрд╕рдкреА рд╕реЗ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреАрдПрд╕рдкреА рдореЗрдВ рдПрдХ рдпреВрдПрд╕рдмреА рдХрдиреЗрдХреНрдЯрд░ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрддреНрд╕рд╛рд╣реА рд▓реЛрдЧреЛрдВ рдиреЗ рдкреАрдПрд╕рдкреА
рдХреЛ рдХрдиреЗрдХреНрдЯреЗрдб рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдЧреЗрдо
рдЪрд▓рд╛рдирд╛ рд╕рд┐рдЦрд╛рдпрд╛ рд╣реИ рдпрд╛ рдЧреЗрдо рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд╕реНрд╡реАрд░ рдХреЛ рдЗрд╕реА рдпреВрдПрд╕рдмреА рдХрдиреЗрдХреНрдЯреЗрдб рдХрдВрдкреНрдпреВрдЯрд░ рдХреА рд╡рд┐рдВрдбреЛ рдореЗрдВ
рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд┐рдпрд╛ рд╣реИ ред рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐
рдпрд╣ рдирд┐рдХрд▓рд╛ , рдкреАрдПрд╕рдкреА рдореЗрдВ рдпреВрдПрд╕рдмреА рдХреЗрд╡рд▓ рдПрдХ рдЧреНрд░рд╛рд╣рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рдорд╛рди (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреИрдорд░рд╛) рд╣реЛрд╕реНрдЯ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рд╡реИрд╕реЗ, рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдмрд╛рд╣реНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ Google рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдореЛрдб рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА
рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реИ)ред рдпрд╛рдиреА рдПрдХ PSP рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреЗрдордкреИрдб рдХреЛ рд╕реАрдзреЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдмреЗрдХрд╛рд░ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдордзреНрдпрд╡рд░реНрддреА рдЙрдкрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рд╕реНрдЯреЛрд░ рдореЗрдВ, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбрд┐рдЧреНрд░реА рдХреЗ рдбрд┐рдмрдЧ рдмреЛрд░реНрдб рдХреА рд▓рд╛рдЧрдд 1 рд╕реЗ 10 рд╣рдЬрд╛рд░ рд░реВрдмрд▓ рддрдХ рд╣реЛрддреА рд╣реИред рдЬрдмрдХрд┐ рдпреЗ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рд╣реИрдВ, рдЖрдкрдХреЛ рдЕрд▓рдЧ рд╕реЗ USB рд╣реЛрд╕реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдлрд┐рд░ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдиреЗ рдореЗрд░реА рдЖрдВрдЦ рдХреЛ рдкрдХрдбрд╝ рд▓рд┐рдпрд╛ред
рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдЗрд╕ рдорд╢реАрди рдореЗрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдЪреАрдЬреЗрдВ рд╣реИрдВ - 2 рдпреВрдПрд╕рдмреА рдкреЛрд░реНрдЯ, рд╕рд╛рде рд╣реА рдкреВрд░реНрдг рд▓рд┐рдирдХреНрд╕ред рдирд╣реАрдВ рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рд░реВрд╕реА рд╢рд╣рд░ рдореЗрдВ, рдПрдХ рдкреБрд░рд╛рдиреЗ рдореЙрдбрд▓ (512 рдПрдордмреА рдореЗрдореЛрд░реА рдФрд░ рдИрдерд░рдиреЗрдЯ рдХреЗ рд╕рд╛рде) рдореЗрдВ рдирд┐: рд╢реБрд▓реНрдХ рдирд┐рдЬреА рдмреБрд▓реЗрдЯрдкреНрд░реВрдл рдмреЛрд░реНрдбреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ 1,500 рд░реВрдмрд▓ рдХреА рд▓рд╛рдЧрдд рд╣реИред рд╕рдмрд╕реЗ рд╕рд╕реНрддреА рдирд┐рдпрдВрддреНрд░рдХ рдбрд┐рдмрдЧ рдмреЛрд░реНрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХреАрдордд рдХрдо рд╣реИ, рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЕрдм рдПрдХ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИред рдФрд░ "рдореЗрдб рдЗрди рдж рдпреВрдХреЗ" рднреАред
рдкрдврд╝рд╛рдИ рд╢реБрд░реВ
рдпрджрд┐ рдЖрдк рдмрд╕ USB рдХреЗрдмрд▓ рдХреЛ PSP рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ USB рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рд╣рдореЗрдВ рдмрд╛рд╣рд░реА рдкреНрд░рдмрдВрдзрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдЬреНрдЮрд╛рдУрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╛рдиреА PSP рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреЛрдб рдШреВрдордирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ USB рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ рдФрд░ PSP рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рджрдмрд╛рд╡ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░реЗрдЧрд╛ред рд▓рд╛рдЗрд╕реЗрдВрд╕ рдкреНрд░рд╛рдкреНрдд рдЦреЗрд▓реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдХреЛрдб рдЪрд▓рд╛рдиреЗ рдХреА рдмрд╣реБрдд рдХреНрд╖рдорддрд╛ рдХреЗрд╡рд▓ рдкрд╛рдпрд░реЗрдЯреЗрдб рдлрд░реНрдорд╡реЗрдпрд░ рдкрд░ рд╕рдВрднрд╡ рд╣реИред рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, рдкрд╛рдпрд░реЗрдЯреЗрдб рдлрд░реНрдорд╡реЗрдпрд░ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИ рдЬреЛ рдореЗрдореЛрд░реА рдХрд╛рд░реНрдб рдкрд░ рд╕реНрдерд┐рдд рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЬрд┐рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдкрд░ рд░реИрдо рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд░реНрдорд╡реЗрдпрд░ рдХреЛрдб рдХреЛ рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ PSP рдХрдВрдкреНрдпреВрдЯрд░ рдХрд╛рд░реНрдб рд╕реЗ .iso рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдЧреЗрдо рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдлрд░реНрдорд╡реЗрдпрд░ рдЕрдЧрд▓реЗ PSP рд░рд┐рдмреВрдЯ рддрдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдЪрд▓рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рд╡рд╣ рдпрд╣ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдпрд╣ рддрдереНрдп рдХрд┐ рдпрд╣ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдкреНрд▓рдЧрдЗрдиреНрд╕ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЬреБрдбрд╝реА рд╣реБрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рдЬреЛ рдореБрдЦреНрдп рдореЗрдиреВ, рдкреАрдПрд╕рдкреА рдЧреЗрдо рдпрд╛ рдореВрд▓ Playstation рдХреЗ рдЧреЗрдо рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдзрд╛рд░рд╛рдУрдВ рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВред рдореВрд▓ PSP рдлрд░реНрдорд╡реЗрдпрд░ рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 6.60 рд╣реИред рдлрд░реНрдорд╡реЗрдпрд░ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рддреЗрдЬ рдХрд┐рдП рдЧрдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдирд╡реАрдирддрдо рдлрд░реНрдорд╡реЗрдпрд░ рдХреЗ рддрд╣рдд рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдРрд╕рд╛ рд╣реА рд╣реБрдЖред
рдПрдХ рдкреНрд▓рдЧрдЗрди рдЬреЛ рдПрдХ PSP рд╕реЗ рдПрдХ рд╡рд┐рдВрдбреЛрдЬ-рдЖрдзрд╛рд░рд┐рдд рдкреАрд╕реА рд╡реАрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдПрдХ PSP рд╕реЗ USB рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ PSP рдкрд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ PSP рдореЗрдВ рдПрдХ рдкреАрд╕реА рд╕реЗ рдЬреБрдбрд╝реЗ рдЧреЗрдордкреИрдб рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдпреВрдПрд╕рдмреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЗрд╡рд▓ рдЖрдзрд╛ рдлрд░реНрдорд╡реЗрдпрд░ 6.60 рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдЧреЗрдордкреИрдб рд╕реЗ рдкреАрдПрд╕рдкреА рддрдХ рдбреЗрдЯрд╛ рдкрд╣реБрдВрдЪ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдкреАрдПрд╕рдкреА рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╕рд┐рдореБрд▓реЗрд╢рди рдиреЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдРрд╕реЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреА рддрд▓рд╛рд╢ рд╢реБрд░реВ рдХреА рдЬреЛ рдХрд┐рд╕реА рддрд░рд╣ рдлрд░реНрдорд╡реЗрдпрд░ 6.60 рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВред рдФрд░ рдорд┐рд▓ рдЧрдпрд╛ред PSP рдПрдирд╛рд▓реЙрдЧ рд╕реНрдЯрд┐рдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдПрдХ рдЕрдиреНрдп рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдирд╡реАрдирддрдо рдлрд░реНрдорд╡реЗрдпрд░ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕рднреА PSP рд╕реНрд░реЛрддреЛрдВ рдХреЛ
рдЗрд╕ рд╣реЛрдордмреНрд░реЗ рдПрд╕рдбреАрдХреЗ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
PSP рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рд╕рдВрд╢реЛрдзрдиред Hookyред
рдкреНрд▓рдЧ-рдЗрди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЬрд┐рд╕реЗ рдореИрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реВрдВрдЧрд╛, рдореИрдВрдиреЗ рд╡рд╣ рдЪреБрдирд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА USB рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдХрд╛рд░реНрдп рдХреЛрдб рд╢рд╛рдорд┐рд▓ рдерд╛ред рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рдбрд┐рдмрдЧрд┐рдВрдЧ рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рдЖрд░рд╛рдорджрд╛рдпрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдкреНрд░рд┐рдВрдЯрдл () рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдкреАрдПрд╕рдкреА рдкрд░ред рдпрд╣ рдЪрдпрдирд┐рдд рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдирд╣реАрдВ рдерд╛ред рд▓реЗрдХрд┐рди рдкреНрд▓рдЧрдЗрди рдореЗрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдореИрдВ PSP рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдпрд╣ рдлреНрд░реЗрдо рдлреНрд░реЗрдо рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓реЗ рдлреНрд░реЗрдо рдХреЛ рдбреНрд░рд╛рдЗрдВрдЧ рдХрд░рдиреЗ рдФрд░ рдореБрдЭреЗ рдбрд┐рдмрдЧ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЬреЛ рдХрд┐ рдлреНрд░реЗрдо рдореЗрдВ рдореБрдЭреЗ рдЬрд░реВрд░рдд рдереАред рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рдХреИрдкреНрдЪрд░ рдлрдВрдХреНрд╢рди (рд╣реБрдХ) рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
#define GET_JUMP_TARGET_(x) (0x80000000 | (((x) & 0x03FFFFFF) << 2)) int (*g_setframebuf)(int unk, void* addr, int width, int psm, int sync); int setframebuf_hook_func(int unk, void* addr, int width, int psm, int sync) { if(g_info == 1) { dbgprint( debugmsg, addr, psm ); if (!g_info) DEBUG_RESET() } return g_setframebuf(unk, addr, width, psm, sync); } int hook_function(unsigned int* jump, void* hook, unsigned int* result) { unsigned int target; unsigned int func; int inst; target = GET_JUMP_TARGET_(*jump); while (((inst = _lw(target+4)) & ~0x03FFFFFF) != 0x0C000000) // search next JAL instruction target += 4; if((inst & ~0x03FFFFFF) != 0x0C000000) { printf("invalid!\n"); return 1; } *result = GET_JUMP_TARGET_(inst); func = (unsigned int) hook; func = (func & 0x0FFFFFFF) >> 2; _sw(0x0C000000 | func, target+4); return 0; } int module_start( SceSize args, void *argp ) { //... hook_function( (unsigned int*) sceDisplaySetFrameBuf, setframebuf_hook_func, (unsigned int*)&g_setframebuf ); //... }
рдЕрдкрдиреЗ рдЖрдВрддрд░рд┐рдХ рдХрд░реНрдиреЗрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, PSP рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо, PSP рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, sceDisplaySetFrameBuf () рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ setframebuf_hook_func () рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред рдФрд░ рдореВрд▓ sceDisplaySetFrameBuf () рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдм рдЖрдкрдХреЛ g_setframebuf () рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣реБрдХ рдХреЗ рд╡рд┐рд╖рдп рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЛ
рдпрд╣рд╛рдВ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
PSP рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рд╕рдВрд╢реЛрдзрдиред рдкреНрд░рдмрдВрдзрдиред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдкреНрд░рдмрдВрдзрди рдХрд╛рд░реНрдп sceCtrlReadBufferPositive (), sceCtrlPeekBufferPositive (), sceCtrlReadBufferNegative () рдФрд░ sceCtrlPeekBufferNegative () рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд▓реЗрддреЗ рд╣реБрдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реБрдХ рдореЗрдВ рдХрд╛рдо рдХреЗ рд╣реБрдХ рдЬреЛрдбрд╝реЗред рдореИрдВрдиреЗ рдЕрднреА рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдкреАрд╕реА рдХреЗ рд╣реЛрд╕реНрдЯ рд╕реЗ рдЬреБрдбрд╝реЗ рдЧреЗрдордкреИрдб рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ PSP рдХреЗ рд▓рд┐рдП рднреЗрдЬрд╛ рдЧрдпрд╛ рдЖрдЦрд┐рд░реА рдбреЗрдЯрд╛ рдЙрдирдХреЗ рдЕрдВрджрд░ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдерд╛ред рдпрд╣рд╛рдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ
рд╕рдВрдЧреНрд░рд╣ рд╣реИ ред рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдкреАрд╕реА рднрд╛рдЧ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдпреВрдПрд╕рдмреА рдЪрд╛рд▓рдХ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ PSP рдкрд░ рдкреНрд▓рдЧрдЗрди рдЪрд▓рд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ (рдЖрдк рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ Yandex рдореЗрдВ
googling рджреНрд╡рд╛рд░рд╛ рдкреНрд▓рдЧрдЗрди рдХреИрд╕реЗ рдЪрд▓рд╛рдПрдВ)ред рдлрд┐рд░ PSP рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдкреАрд╕реА рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред рдПрдХ PSP рдкреНрд░рдХрд╛рд░ рдмреА рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдмрд╛рдж,
рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ (рдмрд┐рди \ inf- рд╡рд┐рдЬрд╝рд╛рд░реНрдбред Exe), рд╣рдорд╛рд░реЗ PSP рдкреНрд░рдХрд╛рд░ рдмреА рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реБрдП рдФрд░ рдЖрдкрдХреЛ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдЕрдВрдд рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд░рд╣рд╛ рд╣реИред
рдиреНрдпреВрдирддрдо PSP рд╕рдВрд╕реНрдХрд░рдг рддреИрдпрд╛рд░ рдХрд░рдирд╛
рд╕рдмрдХреБрдЫ рдареАрдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдХреЗрд╡рд▓ 0.19 рд░рд┐рдореЛрдЯрдЬреЙрдпрд▓рд╛рдЗрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рд╣реИрдВред рдФрд░ рдпрд╣ рдХреБрдЫ рдЧреЗрдо рдкрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдХреЗ-рдСрди! рдмреЗрддрд╣рд╛рд╢рд╛ рдзреАрдорд╛ рд╣реИ, рдФрд░ рдЧреНрд░рд╛рдлрд┐рдХ рдЖрд░реНрдЯрд┐рдлрд╝рд┐рдХ
рдбрдВрдЧрдСрди рд╕реАрдЬрд╝рд░ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ)ред рд╕рдВрд╕реНрдХрд░рдг реж.реиреж рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рддрдп рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЧреЗрдордкреИрдб рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЗрд╡рд▓ рдиреНрдпреВрдирддрдо рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╛рде рд╣реА рдкреАрдПрд╕рдкреА рднрд╛рдЧ рдХреЗ рд╕реНрд░реЛрдд рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпреВрдПрд╕рдмреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред PSP рд╕реЗ PC рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЛ PC рд╕реЗ PSP рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдмреНрд░реЗрдХ рдФрд░ рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдВ рдЧреБрдордирд╛рдореА рдореЗрдВ рдЧрд╛рдпрдм рд╣реЛ рдЧрдИрдВ:
#define USBDATA_PATTERN 0x1234ABFE struct { unsigned int Pattern; unsigned int ButtonData; unsigned int AnalogX; unsigned int AnalogY; } PSPUsbData;
рд╕реНрд╡рдпрдВ рдкреАрдПрд╕рдкреА рдореЗрдВ рдЫрдбрд╝реА рд╕реЗ рдПрдирд╛рд▓реЙрдЧ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдЕрдХреНрд╖ (127 рдХреЗрдВрджреНрд░) рдХреЗ рд▓рд┐рдП рдПрдХрд▓-рдмрд╛рдЗрдЯ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд░реВрдк
рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ 4 рдмрд╛рдЗрдЯреНрд╕ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдкреИрдХрд┐рдВрдЧ рдФрд░ рд╕рдВрд░реЗрдЦрдг рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдирд╣реАрдВ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ RemoteJoyLite рдореЗрдВ рд╣реА, рдбреЗрдЯрд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
struct HostFsCmd { uint32_t magic; uint32_t command; uint32_t extralen; } __attribute__((packed));
рдФрд░ рдЗрд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдирд╣реАрдВ (рдЖрдЦрд┐рд░рдХрд╛рд░, рд░рд┐рдореЛрдЯрдЬреЙрдпрд▓рд╛рдЗрдЯ рдЦреБрдж MinGW GCC рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЕрдЧрд▓рд╛ рдХрджрдо Microsoft Visual Studio рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рд╣реИ рдЬреЛ __attribute __ ((рдкреИрдХ)) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛), рдореИрдВрдиреЗ рд╕рднреА рд╕рдВрд░реЗрдЦрдг рдФрд░ рдкреИрдХреЗрдЬрд┐рдВрдЧ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рд╣реИ) рдЙрдиреНрд╣реЗрдВ 32-рдмрд┐рдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рд▓рд╛рдирд╛ред рдирддреАрдЬрддрди,
рдЗрд╕ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдПрдХ рдЫреАрди-рдиреАрдЪреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдФрд░ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рд╣реИрдВ - рджреЛрдиреЛрдВ PSP- рдФрд░ рд╡рд┐рдВрдбреЛрдЬ-рдкрд╛рд░реНрдЯред Windows рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ Microsoft Visual Studio 2010 рдХреЗ рд▓рд┐рдП C ++ рдореЗрдВ mfc рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред Windows рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП, рдпрд╣ рджреЗрдЦрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдХрд┐ рдХрд░реНрд╕рд░ рдирд┐рдпрдВрддреНрд░рдг рдХреАрд╕реНрдЯреНрд░реЛрдХреНрд╕ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (mfc рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдпрд╣ рд╕рдВрдкреВрд░реНрдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд╡рд┐рдВрдбреЛ рд╕рдВрджреЗрд╢ рдлрд╝рд┐рд▓реНрдЯрд░ рдореЗрдВ рд╣реЛ, рдФрд░ рд╕рдВрд╡рд╛рдж рдХреАрд╕реНрдЯреНрд░реЛрдХ рдореЗрдВ рдирд╣реАрдВ), рдФрд░ рдПрдХ рдЕрд▓рдЧ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рднреА рдкреНрд░рд┐рдВрдЯрдлрд╝ () рдлреЙрд░реНрдо рдкрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдгред рдкреАрдПрд╕рдкреА рднрд╛рдЧ рдореЗрдВ, рд╕рдВрд▓рдЧреНрди рд╣рд▓реНрдХреЗ рд╕реНрд░реЛрдд рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдпреВрдПрд╕рдмреА, рдирд┐рдпрдВрддреНрд░рдг рдФрд░ рдкреНрд░рд┐рдВрдЯрдл () рд╢реЗрд╖ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, USB рдбреЗрдЯрд╛ рд░рд┐рд╕реЗрдкреНрд╢рди рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИ рдФрд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред USB рд╣реЛрд╕реНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп, USB рдмрд╕ рдкрд░ рдЖрдВрддрд░рд┐рдХ рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╕рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ (USB
рд╡рд┐рд╡рд░рдг рджреЗрдЦреЗрдВ) рдХреЗ рдмрд╛рдж, рдПрдХ UsbAttach () рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЙрд▓ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдкрдВрдЬреАрдХреГрдд рдбреНрд░рд╛рдЗрд╡рд░ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдерд╛:
#define RJLITE_DRIVERNAME "RJLiteDriver" #define RJLITE_DRIVERPID (0x1C9) struct UsbDriver UsbDriver = { RJLITE_DRIVERNAME, 4, UsbEndpoint, &UsbInterface, &UsbData[0].devdesc[0], &UsbData[0].config, &UsbData[1].devdesc[0], &UsbData[1].config, &StringDescriptor, UsbRequest, UsbUnknown, UsbAttach, UsbDetach, 0, UsbStartFunc, UsbStopFunc, NULL }; int module_start( SceSize args, void *argp ) {
рдЬрд╣рд╛рдВ рдореЙрдбреНрдпреВрд▓_рд╕реНрдЯрд╛рд░реНрдЯ () рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рдкрд╛рдпрд░реЗрдЯреЗрдб рдлрд░реНрдорд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рдкреНрд▓рдЧрдЗрди рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, рдкреАрдПрд╕рдкреА рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдФрд░ рд╕рд╣рд╛рдпрдХ рдзрд╛рд░рд╛ рд▓реЙрдиреНрдЪ рдХреА рдЧрдИ рд╡рд╕реНрддреБ рдХреЗ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдВрддрд░ (рдпрд╛рдиреА 32 рдзреНрд╡рдЬ) рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
static SceUID UsbMainEventFlag = -1; static int UsbStartFunc( int size, void *p ) {
рддреЛ, рдФрд░ UsbAttach рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ () UsbMainEventFlag рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдзреНрд╡рдЬ рдЪрд░ рдореЗрдВ рдлреНрд▓реИрдЧ USB_EVENT_ATTACH рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ:
static int UsbAttach(int speed, void *arg2, void *arg3) { sceKernelSetEventFlag( UsbMainEventFlag, USB_EVENT_ATTACH); return 0; }
рдЙрд╕реА рд╕рдордп, UsbMainThread () рдереНрд░реЗрдб рдореЗрдВ рдкреВрд░реНрд╡ рдореЗрдВ UsbStartFunc () рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдмрдирд╛рдпрд╛ рдЧрдпрд╛, рдпрд╣ рдХрд╣рддрд╛ рд╣реИ:
static int UsbMainThread(SceSize size, void *argp) { int ret; u32 result; while(1) { ret = sceKernelWaitEventFlag(UsbMainEventFlag, USB_EVENT_ATTACH | USB_EVENT_ASYNC, PSP_EVENT_WAITOR | PSP_EVENT_WAITCLEAR, &result, NULL); if(ret < 0) { sceKernelExitDeleteThread(0); } if(result&USB_EVENT_ASYNC) { usb_async_events++;
рдЗрд╕рдХрд╛ рдЕрд░реНрде рдпрд╣ рд╣реИ рдХрд┐ рдЕрдирдВрдд рд▓реВрдк рдореЗрдВ рдереНрд░реЗрдб USB_EVENT_ATTACH рдзреНрд╡рдЬ рдпрд╛ USB_EVENT_ASYNC рдзреНрд╡рдЬ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ UsbMainEventFlag рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдзреНрд╡рдЬ рдЪрд░ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред USB рд╣реЛрд╕реНрдЯ рдХреЗ рд╕рд╛рде рд╕рдлрд▓ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдХрд╛рд░рдг USB_EVENT_ATTACH рдзреНрд╡рдЬ рдХреА рд╕реНрдерд╛рдкрдирд╛ рд╣реБрдИ, рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдпрд╣ рдзрд╛рдЧрд╛ USB рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдкреИрдХреЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ USB_EVENT_ASTNC рдзреНрд╡рдЬ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ:
static int SetUsbAyncReq( void *data, int size ) {
рдЗрд╕ рдЕрдиреБрд░реЛрдз рдореЗрдВ, рдХреЙрд▓рдмреИрдХ UsbAsyncReqDone () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ:
static int UsbAsyncReqDone( struct UsbdDeviceReq *req, int arg2, int arg3 ) { sceKernelSetEventFlag( UsbMainEventFlag, USB_EVENT_ASYNC ); return( 0 ); }
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ, USB рд╣реЛрд╕реНрдЯ рд╕реЗ рдбреЗрдЯрд╛ рдкреИрдХреЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ (PSP USB рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗ рдкреАрдПрд╕рдкреА рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХрд░реНрдиреЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) UsbbainEventFlag рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдзреНрд╡рдЬ рдЪрд░ рдореЗрдВ рдзреНрд╡рдЬ USB_EVENT_ASYNC рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЙрд╕ рдкрд░, рд╣рдорд╛рд░рд╛ рдЕрдВрддрд╣реАрди рд▓реВрдк рдПрдХ рдирдпрд╛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдбреЗрдЯрд╛ рдЕрдиреБрд░реЛрдз рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдШрдЯрдирд╛ рддрдВрддреНрд░ рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдзреНрд╡рдЬ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорддрджрд╛рди рдХрд░рдиреЗ рдкрд░ рд╕реАрдкреАрдпреВ рд╕рдордп рдмрд░реНрдмрд╛рдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдЖрдк sceKernelWaitEventFlag () рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕рдордп рд╕реНрд▓рд╛рдЗрд╕ рдЖрд╡рдВрдЯрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рддрдХ рдЖрд╡рд╢реНрдпрдХ рдШрдЯрдирд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ - рдпрд╣ PSP рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЕрдВрджрд░ рдереНрд░реЗрдб рдЕрдиреБрд╕реВрдЪрдХ рджреНрд╡рд╛рд░рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд┐рд╕реА рднреА рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХреЗ рддрд╣рдд рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдпреВрдПрд╕рдмреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрд╡рд╛ рд▓рд┐рдЦрдирд╛
рддреЛ, PSP рднрд╛рдЧ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЕрдм рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рдпрд╛ рдмрд▓реНрдХрд┐ рдПрдХ рд╕реЗрд╡рд╛ рд╣реИ рдЬреЛ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХреЛ рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рдЪрд╛рд▓реВ рд╣реЛрдиреЗ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧреАред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрдиреБрдХреВрд▓рд┐рдд рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг рд╣реИрдВред рд▓реЗрдХрд┐рди рдореИрдВ рдлреЗрдбреЛрд░рд╛ рдкрд░ рдмрд╕ рдЧрдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рд░реЗрдб рд╣реИрдЯ рд╕реЗ рдЕрдкрдиреА рдЬрдбрд╝реЗрдВ рдЦреАрдВрдЪреАрдВ, рдЬрд┐рдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рддреБрдЪреНрдЫ рдХрд╛рдо рдерд╛ рдФрд░ рдЙрдирдХреЗ рдкреИрдХреЗрдЬ рд╡рд┐рддрд░рдг рдЖрд░рдкреАрдПрдо рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдлреЗрдбреЛрд░рд╛ рд░реАрдорд┐рдХреНрд╕ 18 рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдФрд░, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрддрд╛ рдФрд░ рдЧреЗрдЯрд╡реЗ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣реЛрдо рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдбреАрдПрдЪрд╕реАрдкреА рд╕рд░реНрд╡рд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ), рдЬреЛ рдХрд┐ рд╕рд╣рдЬ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдорд╛рдЙрд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рдКрдкрд░реА рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рди рдЖрдЗрдХрди, SSH рд╕рд░реНрд╡рд░ рдмреЙрдХреНрд╕ рд╕реЗ рд╕реАрдзреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди SMB рд╕рд░реНрд╡рд░ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ (smbpasswd рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ), рдЗрд╕рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛ рдЖрдзреА рд░рд╛рдд рдХреЗ рдХрдорд╛рдВрдбрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ SSH рджреНрд╡рд╛рд░рд╛ рджреВрд░рд╕реНрде рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдФрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рдореИрдВрдиреЗ рд╢реБрд░реВ рдХреА рдереА рд╡рд╣ рдкреАрдПрд╕рдкреА рд╕реЗ рдЬреБрдбрд╝ рд░рд╣реА рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реАрдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдпреВрдПрд╕рдмреА рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░реЗрдВред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдПрдХ рдЫреЛрдЯреА рд╕реА рдЕрдкреНрд░рд┐рдп рдХрд╣рд╛рдиреА рдереА, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг, рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рд▓рд┐рдирдХреНрд╕ рдХрд╛ рдкреВрд░рд╛ рдЖрдХрд░реНрд╖рдг рдореЗрд░реА рдЖрдБрдЦреЛрдВ рдХреЗ рд╕рд╛рдордиреЗ рдЧрд┐рд░ рд░рд╣рд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ рд╣реЗрдбрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ
> yum install libusb1-devel
рдкреИрдХреЗрдЬ рдкреНрд░рдмрдВрдзрдХ рдореЗрдВ рдЭрдЧрдбрд╝рд╛ рд╣реБрдЖ рдФрд░ рдЙрд╕рдиреЗ рдХрд╣рд╛ рдХрд┐ рдпрд╣ рдкреБрд░рд╛рдирд╛ рд╣реИ, рд▓рд┐рдмрд╛рд╕рдмрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдареАрдХ рд╣реИ рдЯреАрдо
> yum install libusbx-devel
рдЖрд╡рд╢реНрдпрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдкрд░ рд▓рд┐рдмрд╕рдмрдХреНрд╕ рд▓рд┐рдмрд╛рд╕ 1 рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реИ, рдЬреЛ рдХрд┐ рд▓рд┐рдмрд╛рд╕рдм рдХреЗ рд╡рд┐рдВрдбреЛрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдореВрд▓ рд░рд┐рдореЛрдЯрдЬреЙрдпрд▓рд╛рдЗрдЯ рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЖрдорддреМрд░ рдкрд░ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдареАрдХ рд╣реИред USB рдХреЗ рд╕рд╛рде, рдЕрдм рд▓рд┐рдирдХреНрд╕ рдХреЗ рдиреАрдЪреЗ рд╕реЗ рдЧреЗрдордкреИрдб рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдореЗрд░реЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рдПрдХ рд╡рд╛рдпрд░реНрдб Xbox 360 рдЧреЗрдордкреИрдб рд╣реИ рдЬреЛ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ рдФрд░, рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ, рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкрд░ рдлреЗрдбреЛрд░рд╛ рд░реАрдорд┐рдХреНрд╕ 18 рдкрд░ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдкреИрд╕рд╛ рдмрдирд╛рдпрд╛, рдбрд┐рд╡рд╛рдЗрд╕
/ рджреЗрд╡ / рдЗрдирдкреБрдЯ / js0 рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ ред рдпрд╣ рдПрдХ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ xpad рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ Xboxdrv рдбреНрд░рд╛рдЗрд╡рд░ рд╣реИ - рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд рдФрд░ рдкреВрд░реНрдгрдХрд╛рд▓рд┐рдХ рд╣реИред
рд╡реИрд╕реЗ, android рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рд╣реИредXpad рдбреНрд░рд╛рдЗрд╡рд░ Android рдХреЗ рд▓рд┐рдП рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓
рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ:
#define DRIVER_DESC "X-Box pad driver"
рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ / рджреЗрд╡ / рдЗрдирдкреБрдЯ / js0 рдЙрд╕реА рддрд░рд╣
рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
MODULE_SUPPORTED_DEVICE("input/js");
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдЗрдирдкреБрдЯ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕реВрдЪреА рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдЕрдиреБрд╢рдВрд╕рд┐рдд
рдПрдкреАрдЖрдИ рд╣рдореЗрдВ getDeviceIds ()
рдХрд╣рддреЗ рд╣реБрдП рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ, рдЬреЛ
рдХрд╣рддрд╛ рд╣реИ :
public static int[] getDeviceIds() { return InputManager.getInstance().getInputDeviceIds(); }
getInputDeviceIds () :
private final IInputManager mIm;
mIm.getInputDeviceIds () :
interface IInputManager {
рдпрд╣ рд╡рд╣
рдЬрдЧрд╣ рд╣реИ
рдЬрд╣рд╛рдБ InputManager рд╕реЗрд╡рд╛ рдЖрддреА рд╣реИ:
import android.view.InputDevice;
getId () рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рд▓рд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд╣рд╛рдБ
рдереЗ (Android рдЕрджреНрднреБрдд рд╣реИ):
public final class InputDevice implements Parcelable { private final int mId;
рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рдореВрд▓ рднрд╛рдЧ рдореЗрдВ, InputDevice () рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг
рдпрд╣рд╛рдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛
рд╣реИ (
рдЯреЛрд╕реНрдЯрд░ рд╕реЗ рд╢реАрдШреНрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж):
jobject android_view_InputDevice_create(JNIEnv* env, const InputDeviceInfo& deviceInfo) {
рдЗрд╕ рд╕рдорд╛рд░реЛрд╣ рдХреЛ
рдпрд╣рд╛рдВ рдХрд╣рд╛ рдЬрд╛рддрд╛
рд╣реИ :
void NativeInputManager::notifyInputDevicesChanged(const Vector<InputDeviceInfo>& inputDevices) { JNIEnv* env = jniEnv();
InformInputDevicesChanged () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдкрд╣рд▓реЗ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд
InputManager рд╕реЗрд╡рд╛ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдХреЙрд▓рдмреИрдХ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
рдХреЙрд▓рдмреИрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рд╕реНрд╡рдпрдВ
рдЗрдирдкреБрдЯрд░реАрдбрд░ рдореЗрдВ рд╢реБрд░реВ рдХреА
рдЬрд╛рддреА рд╣реИ :
void InputReader::loopOnce() {
рдпрд╣рд╛рдВ рд╣рдо рдпрд╣ рднреА
рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЗрдирдкреБрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдИрд╡реЗрдВрдЯреНрд╕ EventHubInterface рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:
sp<EventHubInterface> mEventHub;
рдФрд░, рдЕрдВрдд рдореЗрдВ, рдЗрд╕ рдХреНрд▓рд╛рд╕
EventHub.cpp рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ
, рд╣рдо рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд▓рд┐рдирдХреНрд╕ рдлреЗрдбреЛрд░рд╛ рдХреА рддрд░рд╣ / рджреЗрд╡ / рдЗрдирдкреБрдЯ рд╕реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдЦреЛрд▓ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдХрд╛рдо
рдХрд░ рд░рд╣реЗ рд╣реИрдВ:
static const char *DEVICE_PATH = "/dev/input";
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдЗрд╕ рдкреВрд░реЗ рдЗрдирдкреБрдЯ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдпрд╣ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рд╣реА рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛
рд╣реИ :
class InputManagerInterface : public virtual RefBase {
рддреЛ, рд╕реЗрд╡рд╛ рдХреЗ рдЕрдВрддрд┐рдо рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░реВрдк рд╣реИрдВ:
#include <stdio.h> #include <stdlib.h> #include <termios.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <libusb-1.0/libusb.h> #define SONY_VENDOR_ID 0x054C #define PSP_B_PRODUCT_ID 0x01C9 #define UP 0x00000010 #define DOWN 0x00000040 #define LEFT 0x00000080 #define RIGHT 0x00000020 #define B_X 0x00004000 #define B_O 0x00002000 #define B_KVADRAT 0x00008000 #define B_TREUGOLNIK 0x00001000 #define B_L 0x00000100 #define B_R 0x00000200 #define B_SELECT 0x00000001 #define B_START 0x00000008 #define B_NOTE 0x00800000 struct { unsigned int Pattern; unsigned int Btn; unsigned int X; unsigned int Y; } PS = {0x1234ABFE, 0, 127, 127}; struct js_event { unsigned int time; short value; unsigned char type; unsigned char number; }; int is_usbdevblock(libusb_device *dev) { struct libusb_device_descriptor desc; int r = libusb_get_device_descriptor(dev, &desc); if((desc.idVendor == SONY_VENDOR_ID) && (desc.idProduct == PSP_B_PRODUCT_ID)) { return 1; } return 0; } int main(int argc, char** argv) { unsigned int real_x = 0, real_y = 0; int x, y; int fd = 0; while(1) { libusb_device **list; libusb_device *found = NULL; libusb_context *ctx = NULL; int attached = 0; libusb_init(&ctx); libusb_set_debug(ctx, 3); ssize_t cnt = libusb_get_device_list(ctx, &list); ssize_t i = 0; int err = 0; if(cnt < 0) { return -1; } for(i = 0; i < cnt; i++) { libusb_device *device = list[i]; if(is_usbdevblock(device)) { found = device; break; } } if(found) { libusb_device_handle *handle; err = libusb_open(found, &handle); if (err) { return -1; } if (libusb_kernel_driver_active(handle, 0)) { libusb_detach_kernel_driver(handle, 0); attached = 1; } err = libusb_claim_interface(handle, 0); if (err) { return -1; } if(fd == 0) { fd = open("/dev/input/js0", O_RDONLY); } if(fd < 0) { goto clean; } int nEndpoint = 0x01; int nTimeout = 500; //in milliseconds int BytesWritten = 0; int ret; struct js_event e; int t; while(1) { read(fd, &e, sizeof(struct js_event)); e.type &= ~0x80; t = 0; //transfer = 0; if(e.type == 1) { if(e.value == 1) { if(e.number == 0) {PS.Btn |= B_X; t = 1;} if(e.number == 1) {PS.Btn |= B_O; t = 1;} if(e.number == 2) {PS.Btn |= B_KVADRAT; t = 1;} if(e.number == 3) {PS.Btn |= B_TREUGOLNIK; t = 1;} if(e.number == 4) {PS.Btn |= B_L; t = 1;} if(e.number == 5) {PS.Btn |= B_R; t = 1;} if(e.number == 6) {PS.Btn |= B_SELECT; t = 1;} if(e.number == 7) {PS.Btn |= B_START; t = 1;} if(e.number == 8) {PS.Btn |= B_NOTE; t = 1;}//XBOX_HOME //if(e.number == 9) PS.Btn |= ;//L_STICK_PRESS //if(e.number == 10)PS.Btn |= ;//R_STICK_PRESS } if(e.value == 0) { if(e.number == 0) {PS.Btn &= ~B_X; t = 1;} if(e.number == 1) {PS.Btn &= ~B_O; t = 1;} if(e.number == 2) {PS.Btn &= ~B_KVADRAT; t = 1;} if(e.number == 3) {PS.Btn &= ~B_TREUGOLNIK; t = 1;} if(e.number == 4) {PS.Btn &= ~B_L; t = 1;} if(e.number == 5) {PS.Btn &= ~B_R; t = 1;} if(e.number == 6) {PS.Btn &= ~B_SELECT; t = 1;} if(e.number == 7) {PS.Btn &= ~B_START; t = 1;} if(e.number == 8) {PS.Btn &= ~B_NOTE; t = 1;} } } if(e.type == 2) { if(e.number == 6) { if(e.value == -32767) {PS.Btn |= LEFT; t = 1;} if(e.value == 32767) {PS.Btn |= RIGHT; t = 1;} if(e.value == 0) {PS.Btn &= ~(LEFT | RIGHT); t = 1;} } if(e.number == 7) { if(e.value == -32767) {PS.Btn |= UP; t = 1;} if(e.value == 32767) {PS.Btn |= DOWN; t = 1;} if(e.value == 0) {PS.Btn &= ~(UP | DOWN); t = 1;} } if(e.number == 0) { if(real_x != ((e.value + 32767) / 256)) {real_x = ((e.value + 32767) / 256); t = 1;} } if(e.number == 1) { if(real_y != ((e.value + 32767) / 256)) {real_y = ((e.value + 32767) / 256); t = 1;} } } if(t == 1) { #define KOEF 1.4 //[-128..0..127] x = real_x - 128; y = real_y - 128; x = x * (1. + ((abs(x) * (KOEF-1.))/(127./KOEF))); if(x > 127) x = 127; if(x < -128) x = -128; y = y * (1. + ((abs(y) * (KOEF-1.))/(127./KOEF))); if(y > 127) y = 127; if(y < -128) y = -128; PS.X = 128 + x; PS.Y = 128 + y; ret = libusb_bulk_transfer(handle, nEndpoint, (unsigned char *)&PS, sizeof(PS), &BytesWritten, nTimeout); if(ret < 0) { break; } } } clean: if(fd) { close(fd); fd = 0; } if(attached == 1) { libusb_attach_kernel_driver(handle, 0); } libusb_close(handle); } libusb_free_device_list(list, 1); libusb_exit(ctx); sleep(1); } return 0; }
рдпрд╣рд╛рдБ рд╕реЗрд╡рд╛ рдмрд╛рдЗрдирд░реА рдХреЗ рд▓рд┐рдП рдПрдХ
рд▓рд┐рдВрдХ рд╣реИред рдФрд░ рдпрд╣рд╛рдБ рднреА m.sh рд╕рдВрдХрд▓рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рд╣реИ:
gcc xbox2psp.c -o xbox2psp.o -I/usr/local -L/usr/local -lusb-1.0
рд╕реНрд░реЛрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореИрдВ рджреЛ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, Xbox рдПрдирд╛рд▓реЙрдЧ рд╕реНрдЯрд┐рдХреНрд╕ рдореЗрдВ 16 рдмрд┐рдЯреНрд╕ рдХреА рд╕рдЯреАрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрдмрдХрд┐ PSP рд╕реНрдЯрд┐рдХ рдореЗрдВ 8 рдмрд┐рдЯреНрд╕ рдХреА рд╕рдЯреАрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореИрдВ рдкреИрдХреЗрдЬ рдХреЛ 8 рдмрд┐рдЯреНрд╕ рдкрд░ рдХрдо рдХрд┐рдП рдЧрдП рдЕрдХреНрд╖ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рднреЗрдЬрддрд╛ рд╣реВрдВ, рдФрд░ Xbox рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рджреВрд╕рд░реЗ, PSP рдореЗрдВ рд╡рд┐рдХрд░реНрдгреЛрдВ рдХрд╛ рдорд╛рди рдкреВрд░реНрдг рдкреИрдорд╛рдиреЗ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ (рдпрд╛рдиреА, рдкреИрдорд╛рдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЧреЛрд▓ PSP рдЫрдбрд╝реА рдПрдХ рд╡рд░реНрдЧ рд╣реИ), рдФрд░ Xbox рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдкреИрдорд╛рдиреЗ рдХрд╛ рдЖрдзрд╛:

рдЗрд╕рд▓рд┐рдП, рдПрдХ рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рдмрдврд╝ рд░рд╣реА рд╣реИ (Xbox рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдХреЗрдВрджреНрд░ рдЕрдХреНрд╖ рд╕реЗ рдЕрдзрд┐рдХ рд╡рд┐рдЪрд▓рди, рдмрдбрд╝рд╛) рдЧреБрдгрд╛рдВрдХ рдХреЛ рдЕрдзрд┐рдХрддрдо 1.4 рдХреЗ рд╕рд╛рде рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдмрд╛рдж рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛, рдпрд╣ рдХреЛрдг рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реЛрдЧрд╛, рдФрд░ рдХреЛрдг рдХреЛ рд╡рд┐рдХрд░реНрдг рдХреЗ рдХрд░реАрдм, рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдЧреБрдгрд╛рдВрдХ)ред рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде, Xbox рдЧреЗрдордкреИрдб рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рддрдХрдиреАрдХреА рд╕рдВрд╡реЗрджрдирд╢реАрд▓рддрд╛ рд░реВрдЦреА рдирд┐рдХрд▓реАред рдбреВрдо 0.05 рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдбрдВрдЧрдСрди рдШреЗрд░рд╛рдмрдВрджреА рдореЗрдВ рд╕рднреА рддреАрди рдЖрдВрджреЛрд▓рди рдЧрддрд┐ (рдЫрдбрд╝реА рд╡рд┐рдХреНрд╖реЗрдкрдг рдмрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░) рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ PSP рдкрд░ рд╣реА рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЧреБрдгрд╛рдВрдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (1.5 рдФрд░ 1.4 рджреЛрдиреЛрдВ), рд╡рд┐рдЪрд▓рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд░реИрдЦрд┐рдХ рд╡реГрджреНрдзрд┐ рдХреЗ рдмрд┐рдирд╛, рдФрд░ рдирд╛рдорд┐рдд рдЦреЗрд▓реЛрдВ рдореЗрдВ рддреЗрдЬ рдЕрд╕реБрд╡рд┐рдзрд╛ рдереА - рдпрд╣ рдЦреЗрд▓рдирд╛ рдЕрд╕рдВрднрд╡ рдерд╛ред
рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдХреЗ рд▓рд┐рдП рдлреЗрдбреЛрд░рд╛ рд░реАрдорд┐рдХреНрд╕ 18 рдореЗрдВ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рд╕реЗрд╡рд╛ рдЬреЛрдбрд╝рдирд╛
рд▓рд┐рдирдХреНрд╕ рдкрд░ рдСрдЯреЛрд▓реЙрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рд╕рддрд╣реА рдЧреБрдЧрд▓реА рдореБрдЦреНрдп рд░реВрдк рд╕реЗ init рдЖрд░рд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдкрд░ рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред
1. рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рд╣рдорд╛рд░реА рд╕рд░реНрд╡рд┐рд╕ Xbox2psp.o рдХреЛ / usr / рд▓реЛрдХрд▓ / рдмрд┐рди рдореЗрдВ рдХреЙрдкреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд▓реЙрдиреНрдЪ рд░рд╛рдЗрдЯреНрд╕ (рддреАрдиреЛрдВ рдмрд┐рдЯреНрд╕) рд╕реЗрдЯ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗред
2. рдлрд┐рд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ /lib/systemd/system/xbox2psp.service рдмрдирд╛рдПрдВ:
[Unit] Description=xbox2psp After=syslog.target network.target [Service] Type=simple ExecStart=/usr/local/bin/xbox2psp.o [Install] WantedBy=multi-user.target
3. / etc / systemd / system / folder рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдПрдХ рд▓рд┐рдВрдХ рдмрдирд╛рдПрдВ
> ln -s /lib/systemd/system/xbox2psp.service xbox2psp.service
4. рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдбреЗрдорди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░реЗрдВ:
> systemctl daemon-reload
5. рдПрдХ рдирдИ рд╕реЗрд╡рд╛ рдХреЗ рдСрдЯреЛрд╕реНрдЯрд╛рд░реНрдЯ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВ
> systemctl enable xbox2psp.service
6. рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рддреБрд░рдВрдд рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
> systemctl start xbox2psp.service
рдирддреАрдЬрддрди, рд╣рдореЗрдВ Xbox 360 рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ PSP рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЕрд╡рд╕рд░ рдорд┐рд▓рд╛ред рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреНрд▓реВрдЯреВрде рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреНрдпреВрд▓рд╢реЙрдХ 3ред