Editing Talk:Resource Container (RCO)
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
=RCO versions= | |||
All RCO files contains a version number, the version increases with bigger firmwares but not for every firmware and is not directly associated with it. The same versioning method is used in PSP and PS3 RCO's | All RCO files contains a version number, the version increases with bigger firmwares but not for every firmware and is not directly associated with it. The same versioning method is used in PSP and PS3 RCO's | ||
It seems all the RCO's of a specific firmware shares the same version (verifyed for firmware 4.76) and seems to be the version of the "rco set", or the version of the "rco tool" used to compile the whole "rco set". RCOmage v1.1.1 (latest stable) identifyes the version with a list of hardcoded values | It seems all the RCO's of a specific firmware shares the same version (verifyed for firmware 4.76) and seems to be the version of the "rco set", or the version of the "rco tool" used to compile the whole "rco set". RCOmage v1.1.1 (latest stable) identifyes the version with a list of hardcoded values | ||
{{Boxcode| | {{Boxcode|content=<syntaxhighlight lang="c"> | ||
switch(rco->verId) { | switch(rco->verId) { | ||
case 0x70: fputs("1.0", fp); break; | case 0x70: fputs("1.0", fp); break; | ||
Line 24: | Line 23: | ||
Example... sysconf_plugin.rco from PS3 firmware 2.00 with version 0x106 | Example... sysconf_plugin.rco from PS3 firmware 2.00 with version 0x106 | ||
{{Boxcode| | {{Boxcode|content=<syntaxhighlight lang="xml"> | ||
<RcoFile UMDFlag="0" rcomageXmlVer="1.1" type="ps3" minFirmwareVer="unknownId0x106"> | <RcoFile UMDFlag="0" rcomageXmlVer="1.1" type="ps3" minFirmwareVer="unknownId0x106"> | ||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
=Hashreports= | =Hashreports= | ||
==PS3 | ==PS3 all versions== | ||
all OFW 1.00-4.75 hashes: https://www.mirrorcreator.com/files/7KCMQKWQ/RCO-hashreport.7z_links <--- please someone convert this in a "human readable wiki table" | all OFW 1.00-4.75 hashes: https://www.mirrorcreator.com/files/7KCMQKWQ/RCO-hashreport.7z_links <--- please someone convert this in a "human readable wiki table" | ||
==PSP | ==PSP 6.61== | ||
*PSP 6.60 and 6.61 firmware contains 63 .rco files (same files for both firmwares). Two of them are specific for PSPgo model (bluetooth_plugin.rco, slide_plugin.rco) | *PSP 6.60 and 6.61 firmware contains 63 .rco files (same files for both firmwares). Two of them are specific for PSPgo model (bluetooth_plugin.rco, slide_plugin.rco) | ||
*Only 10 of them are compresed with ZLIB (dd_helper.rco, dnas_plugin.rco, htmlviewer_plugin.rco, lftv_rmc_univer3in1.rco, lftv_rmc_univer3in1_jp.rco, lftv_rmc_univertuner.rco, lftv_rmc_univertuner_jp.rco, lftv_tuner_jp_jp.rco, lftv_tuner_us_en.rco, oneseg_plugin.rco). All the others are compressed with RLZ (and RLZ decompression is not supported by rcomage, is needed to use Resurssiklunssi v0.3 to rebuild them) | *Only 10 of them are compresed with ZLIB (dd_helper.rco, dnas_plugin.rco, htmlviewer_plugin.rco, lftv_rmc_univer3in1.rco, lftv_rmc_univer3in1_jp.rco, lftv_rmc_univertuner.rco, lftv_rmc_univertuner_jp.rco, lftv_tuner_jp_jp.rco, lftv_tuner_us_en.rco, oneseg_plugin.rco). All the others are compressed with RLZ (and RLZ decompression is not supported by rcomage, is needed to use Resurssiklunssi v0.3 to rebuild them) | ||
Line 91: | Line 40: | ||
***The converted files will have '''minFirmwareVer="2.6"''' (the original value is lost in the conversion) | ***The converted files will have '''minFirmwareVer="2.6"''' (the original value is lost in the conversion) | ||
{{Boxcode| | {{Boxcode|content=<syntaxhighlight lang="c"> | ||
; Generated by QuickSFV v2.36 on 2015-12-09 at 04:49:59 | ; Generated by QuickSFV v2.36 on 2015-12-09 at 04:49:59 | ||
; http://www.QuickSFV.org | ; http://www.QuickSFV.org | ||
Line 219: | Line 168: | ||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
*PSP 6.60 and 6.61 firmware. RCO hashes after resurssiklunssi rebuild (cross option) | |||
{{Boxcode|content=<syntaxhighlight lang="c"> | |||
; Generated by QuickSFV v2.36 on 2015-12-13 at 03:40:27 | ; Generated by QuickSFV v2.36 on 2015-12-13 at 03:40:27 | ||
; http://www.QuickSFV.org | ; http://www.QuickSFV.org | ||
Line 349: | Line 299: | ||
4fd833dc230d78d2827ad85f58685aa6 *resource\video_plugin_videotoolbar.rco | 4fd833dc230d78d2827ad85f58685aa6 *resource\video_plugin_videotoolbar.rco | ||
5b1e65248b962b983cf0553f662c2050 *resource\visualizer_plugin.rco | 5b1e65248b962b983cf0553f662c2050 *resource\visualizer_plugin.rco | ||
</syntaxhighlight> | </syntaxhighlight>}} | ||
*PSP firmware 1.00 contains only 21 .rco files (all them uses ZLIB, none of them uses RLZ) | *PSP firmware 1.00 contains only 21 .rco files (all them uses ZLIB, none of them uses RLZ) | ||
{{Boxcode| | {{Boxcode|content=<syntaxhighlight lang="c"> | ||
; Generated by QuickSFV v2.36 on 2015-12-13 at 03:51:28 | ; Generated by QuickSFV v2.36 on 2015-12-13 at 03:51:28 | ||
; http://www.QuickSFV.org | ; http://www.QuickSFV.org | ||
Line 398: | Line 348: | ||
ef87b1df11ab6b00986b1ce6395066c4 *resource\video_plugin.rco | ef87b1df11ab6b00986b1ce6395066c4 *resource\video_plugin.rco | ||
87d878f00d9355b873adcac6f79927f6 *resource\video_plugin_videotoolbar.rco | 87d878f00d9355b873adcac6f79927f6 *resource\video_plugin_videotoolbar.rco | ||
</syntaxhighlight> | </syntaxhighlight>}} | ||
=Examples | =Examples= | ||
This is a temporal section for tests using rcomage to create frankensteins .rco files smallest as posible that could serve as an explain of his structure. Will contain the source xml file used to create the rco, a big table with ALL the values of the structure, and a sample in hexview of the created rco. Eventually one (or a couple) of this tables will be moved to front page but by now this is a shared notepad and experimentation to see how to make that tables intuitive, pretty, and smallest posible, feel free to add other examples | This is a temporal section for tests using rcomage to create frankensteins .rco files smallest as posible that could serve as an explain of his structure. Will contain the source xml file used to create the rco, a big table with ALL the values of the structure, and a sample in hexview of the created rco. Eventually one (or a couple) of this tables will be moved to front page but by now this is a shared notepad and experimentation to see how to make that tables intuitive, pretty, and smallest posible, feel free to add other examples | ||
Line 409: | Line 359: | ||
The .xml below is the RCOXML source file used to create the .rco. The file '''image_test.gim''' is a dummy of 8 bytes filed with 8888888888888888 | The .xml below is the RCOXML source file used to create the .rco. The file '''image_test.gim''' is a dummy of 8 bytes filed with 8888888888888888 | ||
{{Boxcode| | {{Boxcode|content=<syntaxhighlight lang="xml"> | ||
<RcoFile UMDFlag="0" rcomageXmlVer="1.1" type="ps3" minFirmwareVer="unknownId0x130"> | <RcoFile UMDFlag="0" rcomageXmlVer="1.1" type="ps3" minFirmwareVer="unknownId0x130"> | ||
<MainTree name="test"> | <MainTree name="test"> | ||
Line 419: | Line 369: | ||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
When compiled | When compiled | ||
<div style="height:500px; overflow:auto"> | <div style="height:500px; overflow:auto"> | ||
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | ||
Line 661: | Line 611: | ||
| 0x148 || 0x8 || 0x8888888888888888 || || image_test.gim | | 0x148 || 0x8 || 0x8888888888888888 || || image_test.gim | ||
|} | |} | ||
==ImageTree with 2 images== | ==ImageTree with 2 images== | ||
This example is intended to replace the previous one (but by now i dont want to delete the previous one). It can help to see how the offsets are cummulated and the optional paddings to align to boundary | This example is intended to replace the previous one (but by now i dont want to delete the previous one). It can help to see how the offsets are cummulated and the optional paddings to align to boundary | ||
The .xml below is the RCOXML source file used to create the .rco. The file '''image2_test.gim''' is a dummy of 2 bytes filed with 2222 and the file '''image3_test.gim''' is a dummy of 3 bytes filed with 333333 | The .xml below is the RCOXML source file used to create the .rco. The file '''image2_test.gim''' is a dummy of 2 bytes filed with 2222 and the file '''image3_test.gim''' is a dummy of 3 bytes filed with 333333 | ||
{{Boxcode| | {{Boxcode|content=<syntaxhighlight lang="xml"> | ||
<RcoFile UMDFlag="0" rcomageXmlVer="1.1" type="ps3" minFirmwareVer="unknownId0x130"> | <RcoFile UMDFlag="0" rcomageXmlVer="1.1" type="ps3" minFirmwareVer="unknownId0x130"> | ||
<MainTree name="test"> | <MainTree name="test"> | ||
Line 703: | Line 626: | ||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
When compiled | When compiled | ||
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | ||
Line 999: | Line 922: | ||
|} | |} | ||
= | ==ObjectTree with 1 page and 1 plane== | ||
This | This is a basic example of how objecttree and animationtree (not files) stores his values inside the container. It can help to understand all the values related with the hierarchy relationship between parents/childrens/brothers, etc... | ||
{{Boxcode|content=<syntaxhighlight lang="xml"> | |||
<RcoFile UMDFlag="0" rcomageXmlVer="1.1" type="ps3" minFirmwareVer="unknownId0x130"> | |||
<MainTree name="test"> | |||
{{Boxcode| | |||
<RcoFile UMDFlag="0" rcomageXmlVer="1.1" type="ps3" minFirmwareVer=" | |||
<MainTree name=" | |||
<ObjectTree> | <ObjectTree> | ||
<Page name=" | <Page name="page_test" pageMode="0x111" pageOnInit="nothing" pageOnCancel="nothing" pageOnContext="nothing" pageOnActivate="nothing"> | ||
<Plane name=" | <Plane name="plane_test" positionX="1" positionY="2" positionZ="3" colorScaleR="4" colorScaleG="5" colorScaleB="6" colorScaleA="7" sizeX="8" sizeY="9" sizeZ="10" sizeScaleX="11" sizeScaleY="12" sizeScaleZ="13" anchorMode="0x3" onInit="nothing" positionOverrideX="0x10" positionOverrideY="0x20" positionOverrideZ="0x30" sizeOverrideX="0x40" sizeOverrideY="0x50" sizeOverrideZ="0x60" planeImage="nothing" planeResizeMode="0x6"></Plane> | ||
</Page> | </Page> | ||
</ObjectTree> | </ObjectTree> | ||
Line 1,017: | Line 937: | ||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
When compiled | |||
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | ||
00000000 46 52 50 00 00 00 | 00000000 46 52 50 00 00 00 01 30 00 00 00 00 00 00 00 00 FRP....0........ | ||
00000010 00 00 00 A4 FF FF FF FF FF FF FF FF FF FF FF FF ...¤ÿÿÿÿÿÿÿÿÿÿÿÿ | 00000010 00 00 00 A4 FF FF FF FF FF FF FF FF FF FF FF FF ...¤ÿÿÿÿÿÿÿÿÿÿÿÿ | ||
00000020 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ | 00000020 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ | ||
00000030 00 00 00 CC FF FF FF FF 00 00 01 D4 00 00 00 00 ...Ìÿÿÿÿ...Ô.... | 00000030 00 00 00 CC FF FF FF FF 00 00 01 D4 00 00 00 00 ...Ìÿÿÿÿ...Ô.... | ||
00000040 00 00 01 D4 00 00 00 | 00000040 00 00 01 D4 00 00 00 20 00 00 01 F4 00 00 00 04 ...Ô... ...ô.... | ||
00000050 FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00 ÿÿÿÿ....ÿÿÿÿ.... | 00000050 FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00 ÿÿÿÿ....ÿÿÿÿ.... | ||
00000060 FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00 ÿÿÿÿ....ÿÿÿÿ.... | 00000060 FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00 ÿÿÿÿ....ÿÿÿÿ.... | ||
Line 1,039: | Line 957: | ||
000000F0 00 00 00 00 08 01 00 00 00 00 00 08 00 00 00 28 ...............( | 000000F0 00 00 00 00 08 01 00 00 00 00 00 08 00 00 00 28 ...............( | ||
00000100 00 00 00 4C 00 00 00 01 00 00 00 00 00 00 00 00 ...L............ | 00000100 00 00 00 4C 00 00 00 01 00 00 00 00 00 00 00 00 ...L............ | ||
00000110 00 00 00 28 00 00 00 00 00 00 00 00 01 | 00000110 00 00 00 28 00 00 00 00 00 00 00 00 11 01 00 00 ...(............ | ||
00000120 FF FF 00 00 FF FF FF FF FF FF 00 00 FF FF FF FF ÿÿ..ÿÿÿÿÿÿ..ÿÿÿÿ | 00000120 FF FF 00 00 FF FF FF FF FF FF 00 00 FF FF FF FF ÿÿ..ÿÿÿÿÿÿ..ÿÿÿÿ | ||
00000130 FF FF 00 00 FF FF FF FF FF FF 00 00 FF FF FF FF ÿÿ..ÿÿÿÿÿÿ..ÿÿÿÿ | 00000130 FF FF 00 00 FF FF FF FF FF FF 00 00 FF FF FF FF ÿÿ..ÿÿÿÿÿÿ..ÿÿÿÿ | ||
00000140 08 02 00 00 00 00 00 | 00000140 08 02 00 00 00 00 00 14 00 00 00 28 00 00 00 00 ...........(.... | ||
00000150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4C ...............L | 00000150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4C ...............L | ||
00000160 00 00 00 00 00 00 00 00 00 00 | 00000160 00 00 00 00 00 00 00 00 3F 80 00 00 40 00 00 00 ........?€..@... | ||
00000170 00 00 | 00000170 40 40 00 00 40 80 00 00 40 A0 00 00 40 C0 00 00 @@..@€..@ ..@À.. | ||
00000180 | 00000180 40 E0 00 00 41 00 00 00 41 10 00 00 41 20 00 00 @à..A...A...A .. | ||
00000190 | 00000190 41 30 00 00 41 40 00 00 41 50 00 00 00 00 00 03 A0..A@..AP...... | ||
000001A0 FF FF 00 00 FF FF FF FF 00 00 00 | 000001A0 FF FF 00 00 FF FF FF FF 10 00 00 00 20 00 00 00 ÿÿ..ÿÿÿÿ.... ... | ||
000001B0 00 00 00 00 00 00 00 00 00 | 000001B0 30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00 0...@...P...`... | ||
000001C0 FF FF 00 00 FF FF FF FF 00 00 00 | 000001C0 FF FF 00 00 FF FF FF FF 00 00 00 06 00 00 00 F4 ÿÿ..ÿÿÿÿ.......ô | ||
000001D0 00 00 01 40 73 61 | 000001D0 00 00 01 40 74 65 73 74 00 00 00 00 70 61 67 65 ...@test....page | ||
000001E0 00 00 00 | 000001E0 5F 74 65 73 74 00 00 00 70 6C 61 6E 65 5F 74 65 _test...plane_te | ||
000001F0 00 00 00 00 | 000001F0 73 74 00 00 00 00 00 00 st...... | ||
{| class="wikitable" style="font-size:x-small;" | {| class="wikitable" style="font-size:x-small;" | ||
|- | |- | ||
! | ! Areas !! Offset !! Length !! Example !! Name !! Notes | ||
|- | |||
| rowspan="46" | Header | |||
|-{{cellcolors|#666666|#ffffff}} | |||
| 0x00 || 0x04 || FRP || '''magic''' || FRP in big endian | |||
|-{{cellcolors|#666666|#ffffff}} | |||
| 0x04 || 0x04 || 00 00 01 30 || '''version''' || 0x130 = one of the firmwares for PS3 | |||
|-{{cellcolors|#666666|#ffffff}} | |||
| 0x08 || 0x04 || 00 00 00 00 || ''unknown'' || | |||
|-{{cellcolors|#666666|#ffffff}} | |||
| 0x0C || 0x04 || 00 00 00 00 || '''compress_header''' || 0x00 = uncompressed | |||
|-{{cellcolors|lightgrey}} | |||
| colspan="5" | | |||
|- | |- | ||
| 0x10 || 0x04 || 00 00 00 A4 || '''toc_maintree_absolute_offset''' || MainTree at 0xA4 | | 0x10 || 0x04 || 00 00 00 A4 || '''toc_maintree_absolute_offset''' || MainTree at 0xA4 | ||
|- | |- | ||
| 0x14 || 0x04 || FF FF FF FF || '''toc_scripttree_absolute_offset''' || no | | 0x14 || 0x04 || FF FF FF FF || '''toc_scripttree_absolute_offset''' || no | ||
|- | |- | ||
| 0x18 || 0x04 || FF FF FF FF || '''toc_languagetree_absolute_offset''' || no | | 0x18 || 0x04 || FF FF FF FF || '''toc_languagetree_absolute_offset''' || no | ||
|- | |- | ||
| 0x1C || 0x04 || FF FF FF FF || '''toc_soundtree_absolute_offset''' || no | | 0x1C || 0x04 || FF FF FF FF || '''toc_soundtree_absolute_offset''' || no | ||
|- | |- | ||
| 0x20 || 0x04 || FF FF FF FF || '''toc_modeltree_absolute_offset''' || no | | 0x20 || 0x04 || FF FF FF FF || '''toc_modeltree_absolute_offset''' || no | ||
|- | |- | ||
| 0x24 || 0x04 || FF FF FF FF || '''toc_imagetree_absolute_offset''' || no | | 0x24 || 0x04 || FF FF FF FF || '''toc_imagetree_absolute_offset''' || no | ||
|- | |- | ||
| 0x28 || 0x04 || FF FF FF FF || | | 0x28 || 0x04 || FF FF FF FF || ''toc_unknowntree_absolute_offset'' || no | ||
|- | |- | ||
| 0x2C || 0x04 || FF FF FF FF || '''toc_fonttree_absolute_offset''' || no | | 0x2C || 0x04 || FF FF FF FF || '''toc_fonttree_absolute_offset''' || no | ||
|- | |- | ||
| 0x30 || 0x04 || 00 00 00 CC || '''toc_objecttree_absolute_offset''' || ObjectTree at 0xCC | | 0x30 || 0x04 || 00 00 00 CC || '''toc_objecttree_absolute_offset''' || ObjectTree at 0xCC | ||
|- | |- | ||
| 0x34 || 0x04 || FF FF FF FF || '''toc_animationtree_absolute_offset''' || no | | 0x34 || 0x04 || FF FF FF FF || '''toc_animationtree_absolute_offset''' || no | ||
|-{{cellcolors| | |-{{cellcolors|lightgrey}} | ||
| 0x38 || 0x04 || 00 00 01 D4 || ''' | | colspan="5" | | ||
|- | |- | ||
| 0x3C || 0x04 || 00 00 00 00 || ''' | | 0x38 || 0x04 || 00 00 01 D4 || '''strings_texts_absolute_offset''' || strings texts at 0x1D4 | ||
|- | |- | ||
| 0x40 || 0x04 || 00 00 01 D4 || ''' | | 0x3C || 0x04 || 00 00 00 00 || '''strings_texts_length''' || empty | ||
|- | |- | ||
| 0x44 || 0x04 || 00 00 00 | | 0x40 || 0x04 || 00 00 01 D4 || '''strings_labels_absolute_offset''' || strings labels at 0x1D4 | ||
|- | |- | ||
| 0x48 || 0x04 || 00 00 01 | | 0x44 || 0x04 || 00 00 00 20 || '''strings_labels_length''' || length 0x20 | ||
|- | |- | ||
| 0x4C || 0x04 || 00 00 00 04 || ''' | | 0x48 || 0x04 || 00 00 01 F4 || '''strings_events_absolute_offset''' || strings events at 0x1F4 | ||
|-{{cellcolors| | |- | ||
| 0x50 || 0x04 || FF FF FF FF || ''' | | 0x4C || 0x04 || 00 00 00 04 || '''strings_events_length''' || length 0x4 | ||
|- | |-{{cellcolors|lightgrey}} | ||
| 0x54 || 0x04 || 00 00 00 00 || ''' | | colspan="5" | | ||
|- | |- | ||
| 0x58 || 0x04 || FF FF FF FF || ''' | | 0x50 || 0x04 || FF FF FF FF || '''text_pointer_table_offset''' || no | ||
|- | |- | ||
| 0x5C || 0x04 || 00 00 00 00 || ''' | | 0x54 || 0x04 || 00 00 00 00 || '''text_pointer_table_length''' || empty | ||
|- | |- | ||
| 0x60 || 0x04 || FF FF FF FF || ''' | | 0x58 || 0x04 || FF FF FF FF || '''image_pointer_table_offset''' || no | ||
|- | |- | ||
| 0x64 || 0x04 || 00 00 00 00 || ''' | | 0x5C || 0x04 || 00 00 00 00 || '''image_pointer_table_length''' || empty | ||
|- | |- | ||
| 0x68 || 0x04 || FF FF FF FF || ''' | | 0x60 || 0x04 || FF FF FF FF || '''model_pointer_table_offset''' || no | ||
|- | |- | ||
| 0x6C || 0x04 || 00 00 00 00 || ''' | | 0x64 || 0x04 || 00 00 00 00 || '''model_pointer_table_length''' || empty | ||
|- | |- | ||
| 0x70 || 0x04 || 00 00 01 CC || ''' | | 0x68 || 0x04 || FF FF FF FF || '''sound_pointer_table_offset''' || no | ||
|- | |- | ||
| 0x74 || 0x04 || 00 00 00 08 || ''' | | 0x6C || 0x04 || 00 00 00 00 || '''sound_pointer_table_length''' || empty | ||
|- | |- | ||
| 0x78 || 0x04 || FF FF FF FF || ''' | | 0x70 || 0x04 || 00 00 01 CC || '''object_pointer_table_offset''' || object pointers at 0x1CC | ||
|- | |- | ||
| 0x7C || 0x04 || 00 00 00 00 || ''' | | 0x74 || 0x04 || 00 00 00 08 || '''object_pointer_table_length''' || size 0x8 | ||
|-{{cellcolors| | |- | ||
| 0x80 || 0x04 || FF FF FF FF || ''' | | 0x78 || 0x04 || FF FF FF FF || '''anim_pointer_table_offset''' || no | ||
|- | |- | ||
| 0x84 || 0x04 || 00 00 00 00 || ''' | | 0x7C || 0x04 || 00 00 00 00 || '''anim_pointer_table_length''' || empty | ||
|- | |-{{cellcolors|lightgrey}} | ||
| 0x88 || 0x04 || FF FF FF FF || ''' | | colspan="5" | | ||
|- | |- | ||
| 0x8C || 0x04 || 00 00 00 00 || ''' | | 0x80 || 0x04 || FF FF FF FF || '''image_data_section_offset''' || no | ||
|- | |- | ||
| 0x90 || 0x04 || FF FF FF FF || ''' | | 0x84 || 0x04 || 00 00 00 00 || '''image_data_section_length''' || empty | ||
|- | |- | ||
| 0x94 || 0x04 || 00 00 00 00 || ''' | | 0x88 || 0x04 || FF FF FF FF || '''sound_data_section_offset''' || no | ||
|- | |- | ||
| 0x98 || 0x04 || FF FF FF FF || | | 0x8C || 0x04 || 00 00 00 00 || '''sound_data_section_length''' || empty | ||
|- | |- | ||
| 0x9C || 0x04 || FF FF FF FF || | | 0x90 || 0x04 || FF FF FF FF || '''model_data_section_offset''' || no | ||
|- | |- | ||
| 0xA0 || 0x04 || FF FF FF FF || | | 0x94 || 0x04 || 00 00 00 00 || '''model_data_section_length''' || empty | ||
|- | |- | ||
| | | 0x98 || 0x04 || FF FF FF FF || ''unknown'' || | ||
|- | |||
| 0x9C || 0x04 || FF FF FF FF || ''unknown'' || | |||
|- | |||
| 0xA0 || 0x04 || FF FF FF FF || ''unknown'' || | |||
|- | |||
| rowspan="67" | TOC | |||
|- | |||
| 0xA4 || 0x01 || 01 || '''entry_type''' || 0x1=MainTree | |||
|- | |||
| 0xA5 || 0x01 || 01 || '''hierarchy_depth''' || | |||
|- | |||
| 0xA6 || 0x02 || 00 00 || ''unknown'' || | |||
|- | |||
| 0xA8 || 0x04 || 00 00 00 00 || '''entry_label_offset''' || test | |||
|- | |- | ||
| 0xAC || 0x04 || 00 00 00 00 || '''entry_header_size''' || | | 0xAC || 0x04 || 00 00 00 00 || '''entry_header_size''' || | ||
|- | |- | ||
| 0xB0 || 0x04 || 00 00 00 28 || '''entry_size''' || | | 0xB0 || 0x04 || 00 00 00 28 || '''entry_size''' || | ||
|- | |- | ||
| 0xB4 || 0x04 || 00 00 00 01 || '''children_number''' || | | 0xB4 || 0x04 || 00 00 00 01 || '''children_number''' || | ||
|- | |- | ||
| 0xB8 || 0x04 || 00 00 00 00 || '''next_entry_offset''' || | | 0xB8 || 0x04 || 00 00 00 00 || '''next_entry_offset''' || | ||
|- | |- | ||
| 0xBC || 0x04 || 00 00 00 00 || '''previous_entry_offset''' || | | 0xBC || 0x04 || 00 00 00 00 || '''previous_entry_offset''' || | ||
|- | |- | ||
| 0xC0 || 0x04 || 00 00 00 00 || '''parent_offset''' || | | 0xC0 || 0x04 || 00 00 00 00 || '''parent_offset''' || | ||
|- | |- | ||
| 0xC4 || 0x04 || 00 00 00 00 || | | 0xC4 || 0x04 || 00 00 00 00 || ''unknown'' || | ||
|- | |- | ||
| 0xC8 || 0x04 || 00 00 00 00 || | | 0xC8 || 0x04 || 00 00 00 00 || ''unknown'' || | ||
|-{{cellcolors|lightgrey}} | |-{{cellcolors|lightgrey}} | ||
| colspan="5" | | | colspan="5" | | ||
|- | |- | ||
| 0xCC || | | 0xCC || 0x01 || 08 || '''entry_type''' || 0x8=ObjectTree | ||
|- | |- | ||
| 0xCD || 0x01 || 00 || '''hierarchy_depth''' || | |||
|- | |||
| 0xCE || 0x02 || 00 00 || ''unknown'' || | |||
|- | |||
| 0xD0 || 0x04 || FF FF FF FF || '''entry_label_offset''' || no label | | 0xD0 || 0x04 || FF FF FF FF || '''entry_label_offset''' || no label | ||
|- | |- | ||
| 0xD4 || 0x04 || 00 00 00 00 || '''entry_header_size''' || | | 0xD4 || 0x04 || 00 00 00 00 || '''entry_header_size''' || | ||
|- | |- | ||
| 0xD8 || 0x04 || 00 00 00 28 || '''entry_size''' || | | 0xD8 || 0x04 || 00 00 00 28 || '''entry_size''' || | ||
|- | |- | ||
| 0xDC || 0x04 || 00 00 00 01 || '''children_number''' || | | 0xDC || 0x04 || 00 00 00 01 || '''children_number''' || | ||
|- | |- | ||
| 0xE0 || 0x04 || 00 00 00 00 || '''next_entry_offset''' || | | 0xE0 || 0x04 || 00 00 00 00 || '''next_entry_offset''' || | ||
|- | |- | ||
| 0xE4 || 0x04 || 00 00 00 00 || '''previous_entry_offset''' || | | 0xE4 || 0x04 || 00 00 00 00 || '''previous_entry_offset''' || | ||
|- | |- | ||
| 0xE8 || 0x04 || 00 00 00 28 || '''parent_offset''' || | | 0xE8 || 0x04 || 00 00 00 28 || '''parent_offset''' || | ||
|- | |- | ||
| 0xEC || 0x04 || 00 00 00 00 || | | 0xEC || 0x04 || 00 00 00 00 || ''unknown'' || | ||
|- | |- | ||
| 0xF0 || 0x04 || 00 00 00 00 || | | 0xF0 || 0x04 || 00 00 00 00 || ''unknown'' || | ||
|-{{cellcolors|lightgrey}} | |-{{cellcolors|lightgrey}} | ||
| colspan="5" | | | colspan="5" | | ||
|- | |- | ||
| 0xF4 || 0x01 || 08 01 | | 0xF4 || 0x01 || 08 || '''entry_type''' || 0x8=ObjectTree | ||
|- | |- | ||
| 0xF8 || 0x04 || 00 00 00 08 || '''entry_label_offset''' || | | 0xF5 || 0x01 || 01 || '''hierarchy_depth''' || | ||
|- | |- | ||
| 0xF6 || 0x02 || 00 00 || ''unknown'' || | |||
|- | |||
| 0xF8 || 0x04 || 00 00 00 08 || '''entry_label_offset''' || page_test | |||
|- | |||
| 0xFC || 0x04 || 00 00 00 28 || '''entry_header_size''' || | | 0xFC || 0x04 || 00 00 00 28 || '''entry_header_size''' || | ||
|- | |- | ||
| 0x100 || 0x04 || 00 00 00 4C || '''entry_size''' || | | 0x100 || 0x04 || 00 00 00 4C || '''entry_size''' || | ||
|- | |- | ||
| 0x104 || 0x04 || 00 00 00 01 || '''children_number''' || | | 0x104 || 0x04 || 00 00 00 01 || '''children_number''' || | ||
|- | |- | ||
| 0x108 || 0x04 || 00 00 00 00 || '''next_entry_offset''' || | | 0x108 || 0x04 || 00 00 00 00 || '''next_entry_offset''' || | ||
|- | |- | ||
| 0x10C || 0x04 || 00 00 00 00 || '''previous_entry_offset''' || | | 0x10C || 0x04 || 00 00 00 00 || '''previous_entry_offset''' || | ||
|- | |- | ||
| 0x110 || 0x04 || 00 00 00 28 || '''parent_offset''' || | | 0x110 || 0x04 || 00 00 00 28 || '''parent_offset''' || | ||
|- | |- | ||
| 0x114 || 0x04 || 00 00 00 00 || | | 0x114 || 0x04 || 00 00 00 00 || ''unknown'' || | ||
|- | |- | ||
| 0x118 || 0x04 || 00 00 00 00 || | | 0x118 || 0x04 || 00 00 00 00 || ''unknown'' || | ||
|-{{cellcolors|lightgrey}} | |-{{cellcolors|lightgrey}} | ||
| colspan="5" | | | colspan="5" | | ||
| | |} | ||
==PSP system_plugin.rco firmware 0.6.5== | |||
PSP firmware 0.6.5 uses a primitive version of the rco format, this is an example of the rco header (first 0x94 bytes), most notable change is the header is smaller (so is missing some areas for features that was not implemented yet). I dont plan to look for all the changes but this little example hopefully will show what areas are missing to have an overall idea of the order of how features was implemented in the rco format. This version of the rco format is not compatible with rcomage... but it should by deleting the "unknowns" in the definitions of the source code (lines 51 and 76 of rcofile.h) then compile it (not tested, other errors can happen but this should work) | |||
Original header (remember PSP uses little endian so some bytes are swapped) | |||
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | |||
00000000 00 50 52 46 55 00 00 00 00 00 00 00 00 00 00 00 .PRFU........... | |||
00000010 94 00 00 00 FF FF FF FF 7C 0A 00 00 34 08 00 00 ”...ÿÿÿÿ|...4... | |||
00000020 FF FF FF FF BC 00 00 00 FF FF FF FF 7C 0B 00 00 ÿÿÿÿ¼...ÿÿÿÿ|... | |||
00000030 FF FF FF FF E0 0C 00 00 68 00 00 00 48 0D 00 00 ÿÿÿÿà...h...H... | |||
00000040 9C 04 00 00 E4 11 00 00 04 00 00 00 F0 0B 00 00 œ...ä.......ð... | |||
00000050 28 00 00 00 18 0C 00 00 94 00 00 00 FF FF FF FF (.......”...ÿÿÿÿ | |||
00000060 00 00 00 00 AC 0C 00 00 2C 00 00 00 D8 0C 00 00 ....¬...,...Ø... | |||
00000070 08 00 00 00 FF FF FF FF 00 00 00 00 E8 11 00 00 ....ÿÿÿÿ....è... | |||
00000080 40 DF 01 00 28 F1 01 00 F0 58 02 00 FF FF FF FF @ß..(ñ..ðX..ÿÿÿÿ | |||
00000090 00 00 00 00 .... | |||
{| class="wikitable" style="font-size:x-small;" | |||
|- | |- | ||
! Areas !! Offset !! Length !! Example !! Name !! Notes | |||
|- | |- | ||
| rowspan=" | | rowspan="43" | Header | ||
| | |-{{cellcolors|#666666|#ffffff}} | ||
|-{{cellcolors|# | | 0x00 || 0x04 || PRF || '''magic''' || PRF in little endian | ||
| | |-{{cellcolors|#666666|#ffffff}} | ||
| 0x04 || 0x04 || 55 00 00 00 || '''version''' || 0x55 = one of the firmwares for PSP | |||
|-{{cellcolors|#666666|#ffffff}} | |||
| 0x08 || 0x04 || 00 00 00 00 || ''unknown'' || | |||
|-{{cellcolors|#666666|#ffffff}} | |||
| 0x0C || 0x04 || 00 00 00 00 || '''compress_header''' || 0x00 = uncompressed | |||
|-{{cellcolors|lightgrey}} | |||
| colspan="5" | | |||
|- | |||
| 0x10 || 0x04 || 94 00 00 00 || '''toc_maintree_absolute_offset''' || MainTree at absolute offset 0x94 | |||
|- | |||
| 0x14 || 0x04 || FF FF FF FF || '''toc_scripttree_absolute_offset''' || | |||
|- | |||
| 0x18 || 0x04 || 7C 0A 00 00 || '''toc_languagetree_absolute_offset''' || TextTree at absolute offset 0xA7C | |||
|- | |||
| 0x1C || 0x04 || 34 08 00 00 || '''toc_soundtree_absolute_offset''' || SoundTree at absolute offset 0x834 | |||
|- | |||
| 0x20 || 0x04 || FF FF FF FF || '''toc_modeltree_absolute_offset''' || | |||
|- | |||
| 0x24 || 0x04 || BC 00 00 00 || '''toc_imagetree_absolute_offset''' || ImageTree at absolute offset 0xBC | |||
|- | |||
| 0x28 || 0x04 || FF FF FF FF || {{cellcolors|#ff7777}} ''toc_unknowntree_absolute_offset'' or '''toc_fonttree_absolute_offset'''|| | |||
|- | |||
| 0x2C || 0x04 || 7C 0B 00 00 || '''toc_objecttree_absolute_offset''' || ObjectTree at absolute offset 0xB7C | |||
|- | |- | ||
| | | 0x30 || 0x04 || FF FF FF FF || '''toc_animationtree_absolute_offset''' || | ||
| | |||
| | |||
|-{{cellcolors|lightgrey}} | |-{{cellcolors|lightgrey}} | ||
| | | colspan="5" | | ||
|-{{cellcolors| | |- | ||
| | | 0x34 || 0x04 || E0 0C 00 00 || '''strings_texts_absolute_offset''' || strings texts table at absolute offset 0xCE0 | ||
|- | |||
| 0x38 || 0x04 || 68 00 00 00 || '''strings_texts_length''' || strings texts table size 0x68 | |||
|- | |||
| 0x3C || 0x04 || 48 0D 00 00 || '''strings_labels_absolute_offset''' || strings labels table at absolute offset 0xD48 | |||
|- | |||
| 0x40 || 0x04 || 9C 04 00 00 || '''strings_labels_length''' || strings labels size 0x49C | |||
|- | |||
| 0x44 || 0x04 || E4 11 00 00 || '''strings_events_absolute_offset''' || strings events table at absolute offset 0x11E4 | |||
|- | |||
| 0x48 || 0x04 || 04 00 00 00 || '''strings_events_length''' || strings events size 0x4 | |||
|-{{cellcolors|lightgrey}} | |||
| colspan="5" | | |||
|- | |||
| 0x4C || 0x04 || F0 0B 00 00 || '''text_pointer_table_offset''' || | |||
|- | |||
| 0x50 || 0x04 || 28 00 00 00 || '''text_pointer_table_length''' || | |||
|- | |||
| 0x54 || 0x04 || 18 0C 00 00 || '''image_pointer_table_offset''' || | |||
|- | |||
| 0x58 || 0x04 || 94 00 00 00 || '''image_pointer_table_length''' || | |||
|- | |||
| 0x5C || 0x04 || FF FF FF FF || '''model_pointer_table_offset''' || | |||
|- | |||
| 0x60 || 0x04 || 00 00 00 00 || '''model_pointer_table_length''' || | |||
|- | |||
| 0x64 || 0x04 || AC 0C 00 00 || '''sound_pointer_table_offset''' || | |||
|- | |||
| 0x68 || 0x04 || 2C 00 00 00 || '''sound_pointer_table_length''' || | |||
|- | |||
| 0x6C || 0x04 || D8 0C 00 00 || '''object_pointer_table_offset''' || | |||
|- | |||
| 0x70 || 0x04 || 08 00 00 00 || '''object_pointer_table_length''' || | |||
|- | |||
| 0x74 || 0x04 || FF FF FF FF || '''anim_pointer_table_offset''' || | |||
|- | |||
| 0x78 || 0x04 || 00 00 00 00 || '''anim_pointer_table_length''' || | |||
|-{{cellcolors|lightgrey}} | |-{{cellcolors|lightgrey}} | ||
| | | colspan="5" | | ||
|- | |- | ||
| | | 0x7C || 0x04 || E8 11 00 00 || '''image_data_section_offset''' || | ||
|- | |||
| 0x80 || 0x04 || 40 DF 01 00 || '''image_data_section_length''' || | |||
|- | |||
| 0x84 || 0x04 || 28 F1 01 00 || '''sound_data_section_offset''' || | |||
|- | |||
| 0x88 || 0x04 || F0 58 02 00 || '''sound_data_section_length''' || | |||
|- | |||
| 0x8C || 0x04 || FF FF FF FF || '''model_data_section_offset''' || | |||
|- | |- | ||
| | | 0x90 || 0x04 || 00 00 00 00 || '''model_data_section_length''' || | ||
|-{{cellcolors|# | |-{{cellcolors|#ff7777}} | ||
| | | colspan="5" | 12 bytes of unknowns 0xFF's was added here for newer versions of the rco format | ||
|} | |} | ||