|
|
(182 intermediate revisions by 8 users not shown) |
Line 1: |
Line 1: |
| VSH is the internal name used by Sony for the VShell aka VirtualShell. It then loads up the XMB you know.[http://www.ps3devwiki.com/wiki/XMB XrossMediaBar (XMB)]. This, is a user space executable (vsh.self), loaded by lv2_kernel/sys_init_osd. | | VSH is the internal name used by Sony for the VShell aka VirtualShell. It then loads up the XMB you know. [[XMB|XrossMediaBar (XMB)]]. This, is a userspace executable (vsh.self), loaded by lv2_kernel/sys_init_osd. |
|
| |
|
| from here several other functions/syscalls to other modules are made, e.g. lv2 ([http://www.ps3devwiki.com/index.php?title=Talk:SELF_File_Format_and_Decryption SELF decryption]), lv1 ([http://www.ps3devwiki.com/index.php?title=Hypervisor_Reverse_Engineering#0x3000_-_Secure_RTC Secure_RTC], [http://www.ps3devwiki.com/index.php?title=Hypervisor_Reverse_Engineering#0x5000_-_Storage_Manager Storage_Manager], [http://www.ps3devwiki.com/index.php?title=Hypervisor_Reverse_Engineering#Gelic_Device Gelic_Device], [http://www.ps3devwiki.com/index.php?title=Hypervisor_Reverse_Engineering#BD_Drive BD_Drive]) etc. | | from here several other functions/syscalls to other modules are made, e.g. lv2 ([[Talk:SELF_File_Format_and_Decryption|SELF decryption]]), lv1 ([[Hypervisor_Reverse_Engineering#0x3000_-_Secure_RTC|Secure_RTC]], [[Hypervisor_Reverse_Engineering#0x5000_-_Storage_Manager|Storage_Manager]], [[Hypervisor_Reverse_Engineering#Gelic_Device|Gelic_Device]], [[Hypervisor_Reverse_Engineering#BD_Drive|BD_Drive]]) etc. |
|
| |
|
| not much is documented (yet) about this module. Please fill in where possible. | | not much is documented (yet) about this module. Please fill in where possible. |
Line 20: |
Line 20: |
| |} | | |} |
|
| |
|
| === Structures === | | === Exports === |
| <pre>
| |
| namespace cxml
| |
| {
| |
| struct Header { /*header of a cxml document*/
| |
| Header();
| |
|
| |
|
| char magic[4];
| | [[VSH Exports]] |
| int version;
| |
| int tree_offset;
| |
| int tree_size;
| |
| int idtable_offset;
| |
| int idtable_size;
| |
| int stringtable_offset;
| |
| int stringtable_size;
| |
| int intarraytable_offset;
| |
| int intarraytable_size;
| |
| int floatarraytable_offset;
| |
| int floatarraytable_size;
| |
| int filetable_offset;
| |
| int filetable_size;
| |
| };
| |
|
| |
|
| struct ElementBin
| | === Imports === |
| {
| |
| int name;
| |
| int attr_num;
| |
| int parent;
| |
| int prev;
| |
| int next;
| |
| int first_child;
| |
| int last_child;
| |
| };
| |
|
| |
|
| struct AttributeBin
| | [[VSH Imports]] |
| {
| |
| int name;
| |
| int type;
| |
|
| |
|
| struct StringData
| | ===Memory Containers=== |
| {
| |
| int offset;
| |
| int len;
| |
| };
| |
| | |
| struct IntArrayData
| |
| {
| |
| int offset;
| |
| int num;
| |
| };
| |
| | |
| struct FloatArrayData
| |
| {
| |
| int offset;
| |
| int num;
| |
| };
| |
| | |
| struct FileData
| |
| {
| |
| int offset;
| |
| int size;
| |
| };
| |
| | |
| union
| |
| {
| |
| int i;
| |
| float f;
| |
| StringData s;
| |
| IntArrayData ia;
| |
| FloatArrayData fa;
| |
| FileData file;
| |
| int id;
| |
| int idref;
| |
| };
| |
| };
| |
|
| |
|
| struct IDBin
| |
| {
| |
| int entity_offset;
| |
| char id[0];
| |
| };
| |
|
| |
| };
| |
| </pre>
| |
|
| |
| === Exports ===
| |
| {| class="wikitable sortable" | | {| class="wikitable sortable" |
| ! Export Library !! Export NID !! Notes !! Usage | | ! Type/Id !! Name !! Size !! Usage |
| |-
| |
| | sys_io || - || - || -
| |
| |-
| |
| | sys_fs || - || - || -
| |
| |-
| |
| | sys_fs || 0x18DD4604 || cellFsOpen2 || -
| |
| |-
| |
| | sys_fs_ps2disc || 0x8160A811|| switches /dev_ps2disc(1) mount? ||
| |
| |-
| |
| | sysConsoleId || - || - ||
| |
| |-
| |
| | sysConsoleId || 0xF220F751 || Get ConsoleID || sysConsoleId_F220F751(int8_t* buff)
| |
| |-
| |
| | sysPrxForUser || - || - ||
| |
| |-
| |
| | sysPrxForUser || 0x2E20EC1 || Returns the address of the null byte terminator of the given string. || const char* sysPrxForUser_2E20EC1(const char* s)
| |
| |-
| |
| | vsh || - || - ||
| |
| |-
| |
| | vsh || 0xF48562D || cellSsAimIsCEX ||
| |
| |-
| |
| | vsh || 0x145991B4|| cellSsAimIsArcade ||
| |
| |-
| |
| | vsh || 0x172B05CD|| update_mgr_write_eprom syscall ||
| |
| |-
| |
| | vsh || 0x1B890AD2|| update_mgr_get_token_seed syscall ||
| |
| |-
| |
| | vsh || 0x1F80E287|| cellSsAimIsTool ||
| |
| |-
| |
| | vsh || 0x2C563C92|| update_mgr_read_eprom syscall ||
| |
| |-
| |
| | vsh || 0x3231E012|| vtrm_Decrypt_Master syscall ||
| |
| |-
| |
| | vsh || 0x349F1535|| update_mgr_set_token syscall ||
| |
| |-
| |
| | vsh || 0x3B4A1AC4|| AIM GetDeviceId syscall ||
| |
| |-
| |
| | vsh || 0x3F062337|| AIM GetPsCode syscall ||
| |
| |-
| |
| | vsh || 0xE44F29F4|| cellFsUtilMount syscall ||
| |
| |-
| |
| | vsh || 0xE7C34044|| retrieves vsh memory container by "id" 0=game,1=app,2=debug,3=fg, 4=bg || sys_memory_container_t vsh_E7C34044(int id)
| |
| |-
| |
| | vsh || 0xE932A8C0|| reboot and show minimum version <br> char can be "text whatever you like", no check etc. || int vsh_E932A8C0(char * )
| |
| |-
| |
| | vsh || 0xFF4A1633|| cellFsUtilMount syscall ||
| |
| |-
| |
| | vsh || 0x7D73E7CD || inflate_init ||
| |
| |-
| |
| | vsh || 0x4DB8DD87 || inflate_end ||
| |
| |-
| |
| | vsh || 0x20215547 || inflate_buffer ||
| |
| |-
| |
| | vsh || 0x1C68CC75 || inflate ||
| |
| |-
| |
| | sdk || - || - ||
| |
| |-
| |
| | sdk || 0xB5877BBF || cellAvsetGetMonitorInformation ||
| |
| |-
| |
| | sdk || 0x5FAFE92B|| cellCryptoPuSha1Hash ||
| |
| |-
| |
| | sdk || 0xB45387CD|| AesCbcCfb128Decrypt ||
| |
| |-
| |
| | sdk || 0x55ACAB8A || sha1_init ||
| |
| |-
| |
| | sdk || 0x831E89EE || sha1_update ||
| |
| |-
| |
| | sdk || 0x3CABD075 || sha1_final ||
| |
| |-
| |
| | sdk || 0x4484A101 || sha1_hmac_update ||
| |
| |-
| |
| | sdk || 0x547B602C || sha1_hmac_init ||
| |
| |-
| |
| | sdk || 0x300B99F2 || sha1_hmac_final ||
| |
| |-
| |
| | sdk || 0x74A2A1FE || sha1_hmac_buffer ||
| |
| |-
| |
| | sdk || 0x68B630D5 || aes_omac_mode1 ||
| |
| |-
| |
| | sdk || 0x4C751D97 || unmap_port_from_pad || int (int port_no, int pad_no), e.g. (0, 0) unmap first pad
| |
| |-
| |
| | sdk || 0xCF03F47A || map_port_to_pad || int (int port_no, int pad_no), e.g. (2, 0) map first pad to port 3
| |
| |-
| |
| | sdk || 0xA33FC21C || unmap_port_from_keybord || int (int port_no, int kb_no)
| |
| |-
| |
| | sdk || 0x650A537E || map_port_to_keybord || int (int port_no, int kb_no)
| |
| |-
| |
| | sdk || 0x2D3B4E2B || unmap_port_from_mouse || int (int port_no, int mouse_no)
| |
| |-
| |
| | sdk || 0x5C06471E || map_port_to_mouse || int (int port_no, int mouse_no)
| |
| |-
| |
| | paf || - || - ||
| |
| |-
| |
| | paf || 0xBB04609B || GetSparkInfo ||
| |
| |-
| |
| | paf || 0x65BE85B3 || _UnloadView || _paf_65BE85B3(char * plugin_name,0,0)
| |
| |-
| |
| | paf || 0x350B4536 || Job_Start ||
| |
| |-
| |
| | paf || 0xFE0C1F10 || Job_Queue ||
| |
| |-
| |
| | paf || 0xA1DC401 || sets Interface from plugin || uint32_t SetInterface(unknown, uint32_t identifier, void * ptr_structure)
| |
| |-
| |
| | paf || 0x23AFB290 || gets Interface from plugin, should allow calling its exports/funcs || uint32_t plugin->GetInterface(uint32_t return from paf_F21655F3, uint32_t identifier)
| |
| |-
| |
| | paf || 0x3A8454FC || finds/gets Texture resource || Example: out: uint32_t* texture, return from paf_F21655F3, "tex_notification_info"
| |
| |-
| |
| | paf || 0x50CDB465 || finds/gets Sound resource || uint32_t paf_50CDB465(uint32_t plugin /*paf_F21655F3*/, const char* sound)
| |
| |-
| |
| | paf || 0x3CEC3833 || sets up a plugin widget ? (page_...) ||
| |
| |-
| |
| | paf || 0x794CEACB || finds widget in a plugin || Example: plugin->FindWidget(return from paf_F21655F3, "page_autooff_guide")
| |
| |-
| |
| | paf || 0x89B67B9C || gets localized string text from plugin resource (Different strings are returned depending on the system language) || Example: (w)char (paf_F21655F3("system_plugin"), "msg_signed_out")
| |
| |-
| |
| | paf || 0xF21655F3 || finds a loaded plugin || uint32_t paf::View::Find(const char* plugin) Example: uint32_t paf::View::Find("system_plugin")
| |
| |-
| |
| | paf || 0xCF068D31 || load system plugin || void paf_CF068D31(int32_t* /* prx_id ? */, const char* path, int /*ignored*/, int /*0*/, const sys_memory_container_t *mem_container)
| |
| |-
| |
| | paf || 0x546B3D02 || returns "PhWidget" || const char* paf_546B3D02()
| |
| |-
| |
| | paf || 0x41BBFE5E || returns "PhScene" || const char* paf_41BBFE5E()
| |
| |-
| |
| | paf || 0x10DEDCC7 || returns "PhPlane" || const char* paf_10DEDCC7()
| |
| |-
| |
| | paf || 0xE36C18F5 || returns "PhPlaneDiv" || const char* paf_E36C18F5()
| |
| |-
| |
| | paf || 0x24A5BD6B || returns "PhButton" || const char* paf_24A5BD6B()
| |
| |-
| |
| | paf || 0xB7DFCE90 || returns "PhText" || const char* paf_B7DFCE90()
| |
| |-
| |
| | paf || 0x9207F4 || returns "PhScroll" || const char* paf_9207F4()
| |
| |-
| |
| | paf || 0xBA6D149A || returns "PhLabelPrim" || const char* paf_BA6D149A()
| |
| |-
| |
| | paf || 0xC88CA4B2 || returns "PhLevelMeter" || const char* paf_C88CA4B2()
| |
| |-
| |
| | paf || 0xE801C345 || returns "PhProgress" || const char* paf_E801C345()
| |
| |-
| |
| | paf || 0xBF66BF2D || returns "PhCheckBox" || const char* paf_BF66BF2D()
| |
| |-
| |
| | paf || 0x703117AD || returns "PhXmBar" || const char* paf_703117AD()
| |
| |-
| |
| | paf || 0x4FF7B8A9 || returns "PhXmList" || const char* paf_4FF7B8A9()
| |
| |-
| |
| | paf || 0xC84FD77B || returns "PhXmItem" || const char* paf_C84FD77B()
| |
| |-
| |
| | paf || 0x4C36ABBB || returns "PhItemSpin" || const char* paf_4C36ABBB()
| |
| |-
| |
| | paf || 0xCA9160F6 || returns "PhNumSpin" || const char* paf_CA9160F6()
| |
| |-
| |
| | paf || 0x59A11C82 || returns "PhNumSpin" || const char* paf_59A11C82()
| |
| |-
| |
| | paf || 0xD64EDE7C || returns "PhList" || const char* paf_D64EDE7C()
| |
| |-
| |
| | paf || 0xF7630798 || returns "PhInfoList" || const char* paf_F7630798()
| |
| |-
| |
| | paf || 0xA98865F8 || returns "PhMenuList" || const char* paf_A98865F8()
| |
| |-
| |
| | paf || 0x90F4F801 || returns "PhCheckBoxList" || const char* paf_90F4F801()
| |
| |-
| |
| | paf || 0xDDD4ACF6 || returns "PhLabelText" || const char* paf_DDD4ACF6()
| |
| |-
| |
| | paf || 0x545D47A2 || returns "PhClock" || const char* paf_545D47A2()
| |
| |-
| |
| | paf || 0x3806365F || returns "PhIPAddr" || const char* paf_3806365F()
| |
| |-
| |
| | paf || 0xB93AFE7E || Play Resource Sound (located in .rco) || void paf_B93AFE7E(uint32_t plugin, const char* sound, float, int)
| |
| Example: paf_B93AFE7E( paf_F21655F3("system_plugin"), "snd_trophy", 1, 0)
| |
| |-
| |
| | paf || 0x11E195B3 || Finds Resource Object (located in .rco) || void* paf_11E195B3(uint32_t plugin, const char* object)
| |
| Example: paf_B93AFE7E( paf_F21655F3("system_plugin"), "page_notification")
| |
| |-
| |
| | paf || 0xAF58E756 || Gets the base of loaded plugins. The pointer returned is used in paf::View::Find to find plugins. || void* paf_AF58E756()
| |
| |-
| |
| | vshcommon || - || - ||
| |
| |-
| |
| | vshcommon || 0x7F5C551B || [[System_plugin#1_Interface]] func 11 || vshcommon_7F5C551B(int * texture_dialog, int* texture_dialog_shadow, wchar * infotext1, wchar * infotext2, int)
| |
| |-
| |
| | vshcommon || 0x94F43BE7 || [[System_plugin#1_Interface]] func 12 || vshcommon_94F43BE7(uint8 )
| |
| |-
| |
| | vshcommon || 0xF9E43DA2 || returns localized string of "msg_ok" ||
| |
| |-
| |
| | vshcommon || 0xCCD2C319 || returns localized string of "msg_cancel" ||
| |
| |-
| |
| | vshcommon || 0x746C5F88 || returns localized string of "msg_option" ||
| |
| |-
| |
| | vshcommon || 0xF995E53F || returns localized string of "msg_back" ||
| |
| |-
| |
| | vshcommon || 0x26F18EDF || returns localized string of "msg_enter" ||
| |
| |-
| |
| | vshcommon || 0xE9E8DA5 || returns localized string of "msg_no" ||
| |
| |-
| |
| | vshcommon || 0xB8E256D7 || returns localized string of "msg_yes" ||
| |
| |-
| |
| | vshcommon || 0x79A562D5 || [[System_plugin#1_Interface]] func 25 circle_cross ||
| |
| |-
| |
| | vshcommon || 0x75DC9C2D || [[System_plugin#1_Interface]] func 26 cross_circle ||
| |
| |-
| |
| | vshcommon || 0x60DEE5B3 || [[System_plugin#1_Interface]] func 27 triangle ||
| |
| |-
| |
| | vshcommon || 0xF7A67D49 || [[System_plugin#1_Interface]] func 28 rectangle ||
| |
| |-
| |
| | vshcommon || 0x2438F1A4 || [[System_plugin#1_Interface]] func 21 - anim_cross_circle_show_hide ||
| |
| |-
| |
| | vshcommon || 0x9BD8429E || [[System_plugin#1_Interface]] func 22 - anim_cross_circle_show_hide ||
| |
| |-
| |
| | vshcommon || 0xE011E7D0 || [[System_plugin#1_Interface]] func 23 - anim_triangle_show_hide ||
| |
| |-
| |
| | vshcommon || 0x73F85259 || [[System_plugin#1_Interface]] func 24 - anim_rectangle_show_hide || vshcommon_73F85259(uint8 )
| |
| |-
| |
| | vshcommon || 0x16106ACD || returns "impose_plugin" interface 1 || uint vshcommon_16106ACD()
| |
| |-
| |
| | vshcommon || 0x8B2110D5 || reads boot_history.dat ||
| |
| |-
| |
| | vshcommon || 0x9A43140 || adds info to /pushlist/patch.dat ||
| |
| |-
| |
| | vshcommon || 0x9EA67737 || vsh::ws_boot_history::Set() { uint8 type, char TitleId [0x1F] } <br> titleid to boot_history.dat (creates if not present) ||
| |
| |-
| |
| | vshcommon || 0xCC2C67F2 || reads /pushlist/patch.dat || vshcommon_CC2C67F2(int* count,uint8_t buf[0x680])
| |
| |-
| |
| | vshcommon || 0xA20E43DB || Displays a notification in XMB with texture || void(*vshcommon_A20E43DB)(int32_t, const char* eventName, int32_t, int32_t* texture, int32_t*, const char*, const char*, float, const wchar_t* text, int32_t, int32_t, int32_t);
| |
| int dummy = 0; vshcommon_A20E43DB(0, const char* eventName, int32_t, int32_t* texture /*paf_3A8454FC*/, &dummy, "", "", 0f, L"notification", 0, 0, 0)
| |
| |-
| |
| | x3 || - || - ||
| |
| |-
| |
| | x3 || 0x16FA740A || xCore_GetInterface() || uint32_t* interface xCore_GetInterface()
| |
| |-
| |
| | x3 || 0x11409ED3|| xRegistryGetDefaultInstance|| int xRegistryGetDefaultInstance (1, &handle)
| |
| |-
| |
| | x3 || 0x9C246A91 || xBDVDGetInstance ||
| |
| |-
| |
| | x3 || 0xCB1D791D|| Obtains SS Key||
| |
| |-
| |
| | x3 || 0xECACA8AD|| xRegistry SetValue|| Example: int SetValue(handle, "/setting/categoryVersion", 0,0,0)
| |
| |-
| |
| | mms_db || 0x8EC9A2A7 || xCB_Interface::GetInterface ||
| |
| |-
| |
| | vshnet || - || - ||
| |
| |-
| |
| | vshnet || 0x89801F5D || sceNpC7yTusDestroyTransaction ||
| |
| |-
| |
| | vshnet || 0xE806058 || sceNpC7yTusCreateTransaction ||
| |
| |-
| |
| | vshnet || 0xE2201D8B || sceNpC7yTusEnd||
| |
| |-
| |
| | vshnet || 0xF9884100 || sceNpC7yTusInit ||
| |
| |-
| |
| | vshnet || 0x122AF93C || sceNPC7yLookupTssImageResult ||
| |
| |-
| |
| | vshnet || 0x9012A265 || sceNpC7yLookupTssImageRequest? ||
| |
| |-
| |
| | vshnet || 0xEEF8AC4B || sceNpC7yLookupAvatarImageResult? ||
| |
| |-
| |
| | vshnet || 0x11823D97 || sceNpC7yLookupAvatarImageRequest? ||
| |
| |-
| |
| | vshnet || 0xF4F94F46 || sceNpC7yLookupUserProfileResult? ||
| |
| |-
| |
| | vshnet || 0x3F680668 || sceNpC7yLookupUserProfileRequest? ||
| |
| |-
| |
| | vshnet || 0x9EA2D869 || sceNpC7yLookupNpIdResult? ||
| |
| |-
| |
| | vshnet || 0xF7A88701 || sceNpC7yLookupNpIdRequest? ||
| |
| |-
| |
| | vshnet || 0xEC969F67 || sceNpC7yLookupDestroyTransaction? ||
| |
| |-
| |
| | vshnet || 0x8BD9F160 || sceNpCc7yLookupCreateTransaction? ||
| |
| |-
| |
| | vshnet || 0xB45F6C17 || sceNpC7yLookupAbort? || int sceNpC7yLookupAbort( transid)
| |
| |-
| |
| | vshnet || 0x66EA9546 || sceNpC7yLookupInit? ||
| |
| |-
| |
| | vshnet || 0xF02E64BF || sceNpC7yLookupEnd? ||
| |
| |-
| |
| | vshnet || 0xD79D5840 || sceNpC7yScoreGetGameDataResult? ||
| |
| |-
| |
| | vshnet || 0xF5FBFB50 || sceNpC7yScoreGetGameDataRequest? ||
| |
| |-
| |
| | vshnet || 0xF67C877 || sceNpC7yScoreRecordGameDataRequest? ||
| |
| |-
| |
| | vshnet || 0x250E633D || sceNpC7yScoreRecordScoreResult? || int sceNpC7yScoreRecordScoreResult( int transid, int * RankNumber )
| |
| |-
| |
| | vshnet || 0x42332FFA || sceNpC7yScoreGetBoardInfoResult? || int sceNpC7yScoreGetBoardInfoResult (int transid, uint8_t ScoreBoardInfo [ ])
| |
| |-
| |
| | vshnet || 0xFC015E62 || sceNpC7yScoreGetBoardInfoRequest? || int sceNpC7yScoreGetBoardInfoRequest( int transid, uint8_t SelfNpId [ ], uint8_t TitleId [0xC], int ScoreBoardId )
| |
| |-
| |
| | vshnet || 0xCC014646 || sceNpC7yScoreDestroyTransaction? || int sceNpC7yScoreDestroyTransaction (int transid )
| |
| |-
| |
| | vshnet || 0x372E972A || sceNpC7yScoreFreeTransactionResource? || int sceNpC7yScoreFreeTransactionResource ( int transid )
| |
| |-
| |
| | vshnet || 0xDF1FF79F || sceNpC7yScoreCreateTransaction? || int sceNpC7yScoreCreateTransaction(uint8_t psHandle[0x14], uint8_t ScorePassphrase [0x80] )
| |
| |-
| |
| | vshnet || 0x3F59F7B6 || sceNpC7yScoreAbort? || int sceNpC7yScoreAbort ( int transid)
| |
| |-
| |
| | vshnet || 0x71DF362C || sceNpC7yScoreEnd? || int sceNpC7yScoreEnd()
| |
| |-
| |
| | vshnet || 0x56779FBD || sceNpC7yScoreInit? / SceNpRankingVshInit? || int sceNpC7yScoreInit(void * callback, uint8_t np_debug_flag)
| |
| |-
| |
| | vshnet || 0xCF725EB1 || sceNpInstallerRegetSigninTicket || int sceNpInstallerRegetSigninTicket (0)
| |
| |-
| |
| | vshnet || 0x7084A801 || sceNpCommerceSetDataFlagFinish || int sceNpCommerceSetDataFlagFinish ( int req_id )
| |
| |-
| |
| | vshnet || 0x572A4D1D || sceNpSommerceSetDataFlagStart || int sceNpSommerceSetDataFlagStart ( ctx_id, licensee_id, dataflagContainer, dataflag_num, * req_id )
| |
| |-
| |
| | vshnet || 0xFF500259 || sceNpCommerceGetDataFlagFinish || int sceNpCommerceGetDataFlagFinish ( int req_id )
| |
| |-
| |
| | vshnet || 0x15910AE7 || sceNpCommerceGetDataFlagState || int sceNpCommerceGetDataFlagState ( int req_id, dataflagContainer, dataflag_num )
| |
| |-
| |
| | vshnet || 0x13D56523 || sceNpCommerceGetDataFlagAbort || int sceNpCommerceGetDataFlagAbort ( int req_id )
| |
| |-
| |
| | vshnet || 0x854FE623 || sceNpCommerceGetDataFlagStart ||int sceNpCommerceGetDataFlagStart ( ctx_id, licensee_id, dataflag [0x10] , dataflag_num, * req_id )
| |
| |-
| |
| | vshnet || 0xE2A0CB65 || sceNpCommerceGetProductCategoryResult || int sceNpCommerceGetProductCategoryResult ( int req_id, uint8_t result_buf_size [0x10] )
| |
| |-
| |
| | vshnet || 0xE84BBCAF || sceNpCommerceGetProductCategoryFinish || int sceNpCommerceGetProductCategoryFinish ( int req_id )
| |
| |-
| |
| | vshnet || 0xD297EF28 || sceNpCommerceGetProductCategoryAbort || int sceNpCommerceGetProductCategoryAbort ( int req_id )
| |
| |-
| |
| | vshnet || 0x3E20181D || sceNpCommerceGetProductCategoryStart || int sceNpCommerceGetProductCategoryStart ( int ctx_id, int category_id, int lang_code, int * req_id )
| |
| |-
| |
| | vshnet || 0x2A4C99A6 || sceNpCommerceDestroyCtx || int sceNpCommerceDestroyCtx (ctx_id)
| |
| |-
| |
| | vshnet || 0x98340E57 || sceNpCommerceCreateCtx || int sceNpCommerceCreateCtx ( int version, uint8_t npId[0x24], void * callback, int * arg,int * ctx_id, int (1) )
| |
| |-
| |
| | vshnet || 0x594266BE || sceNpBasicGetInitialPresence ||
| |
| |-
| |
| | vshnet || 0xEF85527 || sceNpSignalingAddExtendedHandler || int sceNpSignalingAddExtendedHandler (ctx_id, 1)
| |
| |-
| |
| | vshnet || 0xFC663F7F || sceNpSignalingGetPeerNetInfoResult || int sceNpSignalingGetPeerNetInfoResult ( ctx_id, req_id, uint8_t netinfo[0x1C], 1)
| |
| |-
| |
| | vshnet || 0x2B2E098F || sceNpSignalingGetLocalNetInfo || int sceNpSignalingGetLocalNetInfo ( ctx_id, uint8_t netinfo[0x1C], 1)
| |
| |-
| |
| | vshnet || 0xE5CBDF3D || sceNpSignalingGetConnectionInfo || int sceNpSignalingGetConnectionInfo ( ctx_id, conn_id, code, * rtt/bandwith/addr/port/packet_loss, 1 )
| |
| |-
| |
| | vshnet || 0x995D1D2F || sceNpSignalingGetConnectionStatus || int sceNpSignalingGetConnectionStatus ( ctx_id, conn_id, int * conn_status,int * peer_addr,uint16_t * peer_port, 1 )
| |
| |-
| |
| | vshnet || 0x158032C9 || sceNpSignalingDestroyCtx || int sceNpSignalingDestroyCtx ( ctx_id, 1)
| |
| |-
| |
| | vshnet || 0x8478A915 || sceNpMatchingGetRoomMemberListLocal || int sceNpMatchingGetRoomMemberList ( ctx_id, uint8_t opt[0x1C], int * size, uint8_t roomStatus[ ], int (1) )
| |
| |-
| |
| | vshnet || 0x3139980 || sceNpMatchingGetRoomMemberList || int sceNpMatchingGetRoomMemberList ( ctx_id, uint8_t opt[0x1C], req_id, int (1) )
| |
| |-
| |
| | vshnet || 0x24B26C3F || sceNpMatchingLeaveRoom || int sceNpMatchingLeaveRoom ( ctx_id, uint8_t opt[0x1C], req_id, int (1) )
| |
| |-
| |
| | vshnet || 0x14211FB9 || sceNpMatchingDestroyCtx || int sceNpMatchingDestroyCtx ( ctx_id, 1 )
| |
| |-
| |
| | vshnet || 0x4C9F0992 || sceNpManagerGetPsHandle || int sceNpManagerGetPsHandle ( int (0), uint8_t psHandle[0x14]
| |
| |-
| |
| | vshnet || 0x4E276F38 || sceNpManagerGetSubjectRegion || int sceNpManagerGetSubjectRegion ( int (0), uint8_t subjectRegion[4]
| |
| |-
| |
| | vshnet || 0x58AB86D8 || sceNpManagerGetSubjectStatus || int sceNpManagerGetSubjectStatus ( int (0), uint8_t subjectStatus[4]
| |
| |-
| |
| | vshnet || 0x7A9421D8 || sceNpManagerGetStatusDuration || int sceNpManagerGetStatusDuration ( int (0), uint64_t * statusDuration
| |
| |-
| |
| | vshnet || 0x4216DF9F || sceNpManagerRegisterCallbackExt || int sceNpManagerRegisterCallbackExt ( void * callback, void * arg)
| |
| |-
| |
| | vshnet || 0x572FFDFB || sceNpManagerGetSubHandle || int sceNpManagerGetSubHandle (int (0), uint8_t subHandle[0x34])
| |
| |-
| |
| | vshnet || 0x2C393B42 || sceNpManagerUnregisterCallbackExt || int sceNpManagerUnregisterCallbackExt ()
| |
| |-
| |
| | vshnet || 0x4DD12D0C || sceNpManagerGetUserIconURL || int sceNpManagerGetUserIconURL ( int (0), uint8_t icon[0x80] )
| |
| |-
| |
| | vshnet || 0x99666F31 || sceNpManagerGetEnvnamae || int sceNpManagerGetEnvnamae ( uint8_t envname[0x0F] )
| |
| |-
| |
| | vshnet || 0x319E53BD || sceNpManagerLoadCachedInfo || int sceNpManagerLoadCachedInfo ( int userId, uint8_t cachedInfo[0xF8] )
| |
| |-
| |
| | vshnet || 0x9EF14F7C || sceNpManagerIsPlus || int attr_is_plus sceNpManagerIsPlus ( int (0) )
| |
| |-
| |
| | vshnet || 0xC3417866 || sceNpManagerGetTicketParam ||
| |
| |-
| |
| | vshnet || 0x788759C6 || sceNpManagerGetSigninTicket || sceNpManagerGetSigninTicket ( int (0), uint8_t signinTicketData[], int * signinTicketSize
| |
| |-
| |
| | vshnet || 0x1FA25660 || sceNpManagerSubSignout || int sceNpManagerSubSignout (int (0), uint8_t npId [0x24]
| |
| |-
| |
| | vshnet || 0xB79B2FE0 || sceNpManagerGetNetworkTime || int sceNpManagerGetNetworkTime (int (0), uint8_t casualClock[8])
| |
| |-
| |
| | vshnet || 0xFACC5962 || sceNpManagerGetMyLanguages || int sceNpManagerGetMyLanguages (int (0), uint8_t myLang[0x10]
| |
| |-
| |
| | vshnet || 0xFC7303C5 || sceNpManagerGetNpId || int sceNpManagerGetNpId ( int (0), uint8_t npId[0x24]
| |
| |-
| |
| | vshnet || 0x1D555F5F || sceNpUpdateClockStart||
| |
| |-
| |
| | vshnet || 0x50EE5602 || gets updatelist txt and compares version ||
| |
| |-
| |
| | vshnet || 0x731E546F || prints Firmware version ("%02d.%02d) || int vshnet_731E546F(out: const char*)
| |
| |-
| |
| | vshnet || 0xEBEA23A1 || sceNetHttpXmlConsoleInfoBitOpe || int sceNetHttpXmlConsoleInfoBitOpe(0x190, xml?,1,1)
| |
| |-
| |
| | vshnet || 0xA5E88D4E || checks if hdd has been replaced ||
| |
| |-
| |
| | vshmain || - || - ||
| |
| |-
| |
| | vshmain || 0x624D3AE || returns game process id ||
| |
| |-
| |
| | vshmain || 0xF32CEC81 || loadRegistryNetautoDlFlag || int loadRegistryNetautoDlFlag ( void )
| |
| |-
| |
| | vshmain || 0xB84B751A || saveRegistryNetautoDlFlag || saveRegistryNetautoDlFlag ( uint8 )
| |
| |-
| |
| | vshmain || 0xAE35CF2D || Executes Action based on Input [[Xmb_plugin#Function_23|(More Info: XMB Plugin XMM0 Interface 23)]]
| |
| Example:
| |
| "http://www.psdevwiki.com",0
| |
| "copy:device",1
| |
| "regcam:reg?",1
| |
| || int vshmain_AE35CF2D(char *, int value)
| |
| |-
| |
| | vshmain || 0xD609A2F6 || shows up XMB Login? ||
| |
| |-
| |
| | vshmain || 0x85CB2261 || sys_event_port_send using static sys_event_port_t || int vshmain_85CB2261(uint64_t data1, uint64_t data2, uint64_t data3)
| |
| |-
| |
| | vshmain || 0x71EC82E || sys_event_port_send using static sys_event_port_t || int vshmain_71EC82E(uint64_t data1, uint64_t data2, uint64_t data3)
| |
| |-
| |
| | vshmain || 0xF3F75BE || sysutil::BeginService ||
| |
| |-
| |
| | vshmain || 0x505FA917 || cxmlutil::GetFile || int GetFile( const cxml::Element & elm, const char * attrname, cxml::File * file )
| |
| |-
| |
| | vshmain || 0x7606AF6F || VersionFile::Get ||
| |
| |-
| |
| | vshmain || 0x981D7E9F || Gets ScreenShot Flag || int vshmain_981D7E9F()
| |
| |-
| |
| | vshmain || 0x6D5FC398 || Show Ingame XMB || int vshmain_6D5FC398(0 (int dev_type?), 0 (int port_num?), 0 (int intr_type?))
| |
| |-
| |
| | vshmain || 0x5C3E01A1 || End Ingame XMB || void vshmain_5C3E01A1(void)
| |
| |-
| |
| | vshmain || 0xBC00D5EF || cellSysutilSharedMemoryFree || int vshmain_BC00D5EF(0 /*ignored*/, sys_addr_t start_addr, uint64_t mode /* 0x200 (unmap) or 0x400 (unmap and free) */)
| |
| |-
| |
| | vshmain || 0x51E7CC21 || cellSysutilSharedMemoryAlloc ||
| |
| |-
| |
| | vshmain || 0x23DC28E8 || cellSysutilEventPortSend || int vshmain_23DC28E8(uint64_t data1, uint64_t data2, uint64_t data3, bool)
| |
| |-
| |
| | vshmain || 0xCFAD36DE || Clears a cxml document for VSH Service/Process Communication [[http://www.psdevwiki.com/ps3/File:Vshmain_CFAD36DE.png]].|| cxml::Document::Clear()
| |
| |-
| |
| | vshmain || 0x2CD62587 || Sets the header magic of a cxml Document || int cxml::Document::SetHeaderMagic( const char buf[4] )
| |
| Example: cxml::Document doc; doc.SetHeaderMagic("NPTR");
| |
| |-
| |
| | vshmain || 0x6BA1D72F || Creates an element on a cxml document. || cxml::Document::CreateElement(const char* name, int attr_num, Element * element)
| |
| Example: cxml::Document doc; doc.CreateElement( "basicPresenceOffline", 0, element );
| |
| |-
| |
| | vshmain || 0xE77FAFB5 || cxmlutil::SetInt || int cxmlutil::SetInt( const cxml::Element & elm, const char * attrname, int i )
| |
| |-
| |
| | vshmain || 0x134034CE || Gets the attribute of a cxml document element || int Element::GetAttribute( const char * name, Attribute * attr )
| |
| |-
| |
| | vshmain || 0xB172E9CB || (response)_doc.WriteToBuffer ||
| |
| |-
| |
| | vshmain || 0xA2720DF2 || (write_packet) ||
| |
| |-
| |
| | vshtask || - || - ||
| |
| |-
| |
| | vshtask || 0x668E3C94 || some RTC Alarm Register || int vshtask_668E3C94(char * app_id?, uint8_t [0x4C])
| |
| |- | | |- |
| | vshtask || 0x166551C5 || RTC Alarm Unregister || int vshtask_166551C5(char * app_id) | | | 0 || game || dex: 426.770.432 / cex: 223.346.688 Bytes || |
| |- | | |- |
| | vshtask || 0xA02D46E7 || Displays a notification in XMB || int vshtask_A02D46E7(0 /*ignored*, "your text" ) -> calls vshcommon_A20E43DB with texture "tex_notification_info" | | | 1 || app || 223.346.688 Bytes || |
| | Spurs (Tiff, Png, Jpg) |
| | [[autodownload_plugin]] |
| | [[custom_render_plugin]] |
| | [[dlna_plugin]] |
| | fchk (libfs_utility2) |
| | [[game_ext_plugin]] |
| | [[impose_plugin]] |
| | libfs_utility_init |
| | vshmain_util |
| | mms |
| | libsre libadec |
| | libac3dec |
| | paf_ext |
| | qglbase |
| | vshmain_ext |
| | [[msgdialog_plugin]] |
| | msmw1 |
| | msmw2 |
| | [[podl_plugin]] |
| | [[premo_plugin]] |
| | [[software_update_plugin]] |
| | [[soundvisualizer_plugin]] |
| | [[system_plugin]] |
| | vshmain_util |
| | [[xmb_plugin]] (XMB normal) |
| | [[ycon_manual_plugin]] |
| |- | | |- |
| | cellHttp || - || - || | | | 2 || debug || 203.423.744 Bytes || |
| |- | | |- |
| | cellHttp || 0x8FC281F7 || cellHttpCookieFlush|| | | | 3 || fg (foreground)|| 3.145.728 Bytes || |
| | User Information |
| | [[auth_plugin]] |
| | [[avc2_text_plugin]] |
| | [[comboplay_plugin]] |
| | [[ps3_savedata_plugin]] |
| | [[game_plugin]] |
| | [[deviceconf_plugin]] |
| | fchk (libfs_utility2) |
| | [[friendim_plugin]] |
| | [[friendlm_plugin]] |
| | [[friendtrophy_plugin]] |
| | [[game_plugin]] |
| | [[gameupdate_plugin]] |
| | libfs_utility_init |
| | vshmain_util |
| | mms |
| | [[np_eula_plugin]] |
| | [[np_sns_plugin]] |
| | [[np_multisignin_plugin]] |
| | [[npsignin_plugin]] |
| | [[osk_plugin]] |
| | photoUtil |
| | photoUtil2 |
| | [[photo_network_sharing_plugin]] |
| | [[print_plugin]] |
| | [[profile_plugin]] |
| | [[screenshot_plugin]] |
| | upload_util |
| | [[xmb_ingame]] |
| |- | | |- |
| | cellHttp || 0xDCDF003A || cellHttpAuthCacheFlush || | | | 4 || bg (background)|| 3.145.728 Bytes || |
| | [[avc_plugin]] |
| | [[avc2_game_plugin]] |
| | [[audioplayer_plugin]] |
| | [[audioplayer_plugin_mini]] |
| | music playback/decode |
| | [[rec_plugin]] |
| | imejp (service type=1) |
| | ime_atok_module |
| |- | | |- |
| |} | | |} |
|
| |
|
| To help documenting offsets+exports, you can use [http://www.ps3devwiki.com/index.php?title=Dev_Tools#vsh_dumper this dumper tool for vsh] (actually,no need to dump anymore).
| | ===Loaded Views=== |
| | These Views and prx files are loaded by default and are accessable without further loading, all others need to be loaded. |
| | |
| | ====Regular XMB==== |
|
| |
|
| ===Memory Containers=== | | [[system_plugin]] |
| | [[xmb_plugin]] |
| | [[explore_plugin]] |
| | [[category_setting_plugin]] |
| | [[impose_plugin]] |
| | |
| | ====InGame XMB==== |
| | |
| | [[system_plugin]] |
| | [[xmb_plugin]] |
| | [[explore_plugin]] |
| | [[game_plugin]] |
| | [[impose_plugin]] |
| | |
| | ====InGame==== |
|
| |
|
| id name | | [[game_plugin]] |
| 0 game | | [[impose_plugin]] |
| 1 app
| |
| 2 debug
| |
| 3 fg (foreground, in-game-XMB menu, in-game-osk)
| |
| 4 bg (background - music playback/decode, recording, imejp (service type=1), avc2)
| |
|
| |
|
| ===VSH Service Communication (CXML Header Magic)=== | | ===VSH Service Communication (CXML Header Magic)=== |
|
| |
|
| PARA - System Parameters Utility | | APNT - [[ap_plugin|Access Point Utility]] |
| MSGD - Message Dialog Utility | | ATHD - [[auth_plugin|(Password) Authentication Dialog]] |
| NTCL - netcl Utility | | AVC2 - [[avc2_game_plugin|Audio-Voice/Video Chat Utility 2]] |
| SAVE - Save Data Utility (surf autosave) | | AVCH - [[avc_plugin|Audio-Voice/Video Chat Utility]] |
| USRI - User Information Utility | | BGDL - Background Download Service |
| GAME - Game Utility | | CHAT - [[avc2_game_plugin|System Chat]] |
| GDAT - Game Data Utility | | CMND - |
| GDTL - | | COMB - [[comboplay_plugin|Combo Playing(Cross Controller)]] |
| GDAM - Game Data-Mode Utility
| | DGAM - [[game_plugin|Disc Game-Mode Utility]] |
| GEXE - Game Execution Utility | | DPSN - Decrypt PSN Video Service |
| GPS1 - Game PS1 Rumble | | DTCP - DTCP IP Service |
| OSKD - On Screen Keyboard Utility | | EULA - End User License Agreement |
| NPMG - NP Manager Utility | | GAME - [[game_plugin|Game Utility]] |
| NPMT - NP Matching Utility | | GDAT - [[game_plugin|Game Data Utility]] |
| | GDTL - [[game_plugin|(uses DGAM)]] |
| | GEXE - [[game_plugin|Game Execution Utility]] |
| | GPS1 - [[game_plugin|Game PS1 Rumble]] |
| | GUPD - Game Upate Check |
| | IMEJ - Input Method Engine Japanese |
| | MSGD - [[msgdialog_plugin|Message Dialog Utility]] |
| | MUDE - Music Decode |
| | MUSC - Music Playback |
| NMT2 - NP Matching 2 Utility | | NMT2 - NP Matching 2 Utility |
| NPSN - NP Signaling Utility
| |
| NPBA - NP Basic Utility | | NPBA - NP Basic Utility |
| NPTR - NP Trophy | | NPC2 - NP (Ingame) Commerce 2 Utility |
| | NPCM - NP Commerce Utility |
| | NPCU - NP Custom Menu |
| | NPDR - NP DRM Utility |
| NPFL - NP Friendlist Utility | | NPFL - NP Friendlist Utility |
| NPCU - NP Commerce Registration?
| |
| NPDR - NP DRM Utility
| |
| NPCM - NP Commerce Utility
| |
| NPC2 - NP (Ingame) Commerce 2 Utility
| |
| NPIN - NP Install (Commerce) | | NPIN - NP Install (Commerce) |
| WBRW - [[webbrowser_plugin|WebBrowser Utility]] | | NPLU - NP LookUp |
| SYSC - [[deviceconf_plugin|System (Device/Pad) Configuration]] | | NPMG - NP Manager Utility |
| | NPMT - NP Matching Utility |
| NPRA - NP Score/Ranking Utility | | NPRA - NP Score/Ranking Utility |
| NPLU - NP LookUp | | NPSN - NP Signaling Utility |
| | NPTR - NP Trophy |
| NPUS - NP User Storage | | NPUS - NP User Storage |
| STDT - Data Copy Utility | | NSNS - NP Social Networking Services (Facebook Api) |
| | NTCL - netcl Utility |
| | OSKD - [[osk|On Screen Keyboard Utility]] |
| | PARA - System Parameters Utility |
| | PESM - PKI End to end Secure Module |
| | PHDE - Photo Decode |
| | PHE2 - Photo Export (Utility 2) |
| PHEX - Photo Export | | PHEX - Photo Export |
| PHE2 - Photo Export (Utility 2)
| |
| PHIM - Photo Import | | PHIM - Photo Import |
| PHDE - Photo Decode
| |
| BGDL - Background Download Service
| |
| IMEJ - Input Method Engine Japanese
| |
| MUSC - Music Playback
| |
| MUDE - Music Decode
| |
| VDPL - Video Player
| |
| DTCP - DTCP IP Service
| |
| DPSN - Decrypt PSN Video Service
| |
| SRCH - Search
| |
| PNSU - Photo Network Sharing | | PNSU - Photo Network Sharing |
| PRIN - Printer Utility | | PRIN - Printer Utility |
| AVCH - Audio/Video-Chat | | RECO - [[rec_plugin|Recording Utility]] |
| AVC2 - AVC2 Utility
| | RMTP - [[premo_game_plugin|Remote Play]] |
| RMTP - Remote Playback | | RTCA - [[rtcalarm|RTC Alarm]] |
| SUBD - SubDisplay Utility | | SAVE - Save Data Utility (surf autosave) |
| RECO - Recording Utility | | SRCH - [[cell_search_service|Search]] |
| APNT - (AP Plugin)
| |
| VDUP - Video Upload | |
| GUPD - Game Upate Check
| |
| RTCA - RTC Alarm
| |
| SSHT - ScreenShot | | SSHT - ScreenShot |
| ATHD - Vsh Authentication Dialog | | STDT - Storage Data Copy Utility |
| EULA - | | SUBD - [[premo_game_plugin|SubDisplay Utility]] |
| COMB - [[comboplay_plugin|Combo Playing(Cross Controller)]] | | SYSC - [[deviceconf_plugin|System (Device/Pad) Configuration]] |
| PESM - | | USRI - User Information Utility |
| CHAT - System Chat | | VDPL - Video Player |
| NSNS - Facebook Api | | VDUP - [[upload_util|Video Upload]] |
| | WBRW - [[webbrowser_plugin|WebBrowser Utility]] |
|
| |
|
| ===Notification Window Textures=== | | ===Notification Window Textures=== |
Line 661: |
Line 214: |
| * tex_notification_trophy_silver | | * tex_notification_trophy_silver |
|
| |
|
| The other texture used by notification window is the frame of the notification window itself (called "tex_notification" with a size of 64x64 pixels), this frame is scalated in width automatically by XMB (to make the frame fit the width of the text that is displayed inside the window), and is posible to reskin the frame using a [[Themes_(.p3t)|Theme]] | | The other texture used by notification window is the frame of the notification window itself (called "tex_notification" with a size of 64x64 pixels), this frame is scalated in width automatically by XMB (to make the frame fit the width of the text that is displayed inside the window), and is posible to reskin the frame using a [[PlayStation 3 Theme (P3T)|Theme]] |
|
| |
|
| *Any texture from any plugin can be used actually. i.e.: tex_common_dialog. Would it be possible to create our own textures? | | *Any texture from any plugin can be used actually. i.e.: tex_common_dialog. Would it be possible to create our own textures? |
Line 685: |
Line 238: |
| ===Settings=== | | ===Settings=== |
|
| |
|
| VSH contains an array of structs which describe the settings. It includes index, name, default value and some other values. | | VSH contains an array of structs which describes the [[xRegistry.sys]]. (More Information about its access [[Talk:VSH]] ) |
|
| |
|
| struct Setting_s | | struct Setting_s |
Line 712: |
Line 265: |
| .long 4 # type | | .long 4 # type |
| .long 0x28 # unk2 | | .long 0x28 # unk2 |
| | |
| | ===Events=== |
| | |
| | Global Event Queue Id's: |
| | |
| | Polling Service |
| | 0x8006020000000030 |
| | 0x8006020000000010 |
| | 0x8006020000000002 |
| | 0x8006020000000000 |
| | |
| | CMND Service (Connect) |
| | 0x8006010000000100 |
| | 0x8006010000000101 |
| | 0x8006010000000102 |
| | 0x8006010000000103 |
| | |
| | SceNpTusVsh |
| | 0x0800604000000902 |
| | |
| | ===Title IDs=== |
| | |
| | Clears a Memory Container in relation of this game and a camera (disables video chat etc.?) |
| | BLUS20001 Ridge Racer 7 |
| | BCAS20001 Ridge Racer 7 |
| | BLJS10001 Ridge Racer 7 |
| | BCES00009 Ridge Racer 7 |
| | BCKS10001 Ridge Racer 7 |
| | |
| | Circumvents an AudioOut Setting that made the game freeze/black screen |
| | BLUS30264 Afro Samurai |
| | BLES00516 Afro Samurai |
| | NPUB90215 Afro Samurai (Demo) |
| | |
| | BLJM60130 Street Fighter IV |
| | BLUS30265 Street Fighter IV |
| | BLES00481 Street Fighter IV |
| | |
| | BCJB95006 Torne |
| | NPIA00005 PlayStation Home |
| | NPIA00009 |
| | NPIA00010 PlayStation Home |
| | NPIA00011 |
| | NPEA00013 PlayStation Home |
| | |
| | WebBrowser finalize executed without mutex/lock syncs |
| | NPJB00001 Tekken 5: Dark Resurrection |
| | NPUB30009 Tekken 5: Dark Resurrection |
| | |
| | NPJB00023 Crystal Defenders |
| | NPUB30092 Crystal Defenders |
| | |
| | |
|
| |
|
| {{Development}}<noinclude>[[Category:Main]]</noinclude> | | {{Development}}<noinclude>[[Category:Main]]</noinclude> |