Talk:Resource Container (RCO): Difference between revisions

From PS3 Developer wiki
Jump to navigation Jump to search
mNo edit summary
 
(60 intermediate revisions by the same user not shown)
Line 1: Line 1:
=Unknowns=


=RCO versions=
==RCO versions (aka minFirmwareVer in rcomage)==
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|content=<syntaxhighlight lang="c">
{{Boxcode|code=<syntaxhighlight lang="c">
switch(rco->verId) {
switch(rco->verId) {
case 0x70: fputs("1.0", fp); break;
case 0x70: fputs("1.0", fp); break;
Line 23: Line 24:


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|content=<syntaxhighlight lang="xml">
{{Boxcode|code=<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>}}
==unknownByte==
In the xml representation of the .rco structure... every image inside the imagetree uses an unknown attribute named '''unknownByte'''. Is an attribute related with the image format and is equal to 0 in most of the PS3 images (very rarelly used)
*After searching in ALL the images contained inside ALL .rco files from firmware 4.76... there is a total of 72 images using '''unknownByte="1"''' (and 3098 images using '''unknownByte="0"''' for a total of 3170 images inside .rco's)
**7 images inside [[eula_net_plugin]].rco
**34 images inside [[newstore_plugin]].rco
**29 images inside [[regcam_plugin]].rco
**2 images inside [[system_plugin]].rco
from [[system_plugin]].rco
{{Boxcode|code=<syntaxhighlight lang="xml">
<Image name="tex_optionmenu_bg" src=".\RCO 476 ofw\system_plugin\Images\tex_optionmenu_bg.gim" format="gim" compression="zlib" unknownByte="1" />
<Image name="tex_optionmenu_base" src=".\RCO 476 ofw\system_plugin\Images\tex_optionmenu_base.gim" format="gim" compression="zlib" unknownByte="1" />
</syntaxhighlight>}}
*The 2 .gim files found using '''unknownByte="1"''' has some things in common:
**The size of both .gim file is exactlly 452KB (463.232 bytes)
**The resolution of both images in pixels is 512x206
**The first 0x80 bytes of the header in both is exactlly the same (see example below)
unknownByte .gim header example
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000  2E 47 49 4D 31 2E 30 30 00 50 53 50 00 00 00 00  .GIM1.00.PSP....
00000010  00 02 00 00 00 07 11 70 00 00 00 10 00 00 00 10  .......p........
00000020  00 03 00 00 00 07 11 60 00 00 00 10 00 00 00 10  .......`........
00000030  00 04 00 00 00 07 11 50 00 07 11 50 00 00 00 10  .......P...P....
00000040  00 30 00 00 00 03 00 00 02 18 00 D8 00 20 00 10  .0.........Ø. ..
00000050  00 01 00 02 00 00 00 00 00 00 00 30 00 00 00 40  ...........0...@
00000060  00 07 11 40 00 00 00 00 00 01 00 01 00 03 00 01  ...@............
00000070  00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00  ...@............
Is not specific for .GIM image format because other image formats uses it too, here are a couple of examples from newstore_plugin.rco where is used with .JPG and .PNG
{{Boxcode|code=<syntaxhighlight lang="xml">
<Image name="BackGround" src=".\RCO 476 ofw\newstore_plugin\Images\BackGround.jpg" format="jpg" compression="uncompressed" unknownByte="1" />
<Image name="ScrollButtonRich" src=".\RCO 476 ofw mod 5\newstore_plugin\Images\ScrollButtonRich.png" format="png" compression="uncompressed" unknownByte="1" />
</syntaxhighlight>}}
Is specific for PS3 (not used on PSP) as can be seen in the comments of the source code of rcomage [https://github.com/zingaburga/RCOMage/blob/master/src/rcofile.h here] in line number 188
PS3 RCOs seem to have this extra element - probably something to do with planes/frames??
==UMDFlag==
This attribute was named UMDFlag unofficially because it was found used in the .rco files contained inside PSP UMD discs only
The name seems not accurate enought (because PS3 cant read UMD discs) so maybe is something more generic like "disc media", though never has been found a PS3 disc containing .rco's and the '''HYBRID_FLAG''' used in the bluray contents descriptor file [[PS3_DISC.SFB]] for "music bluray" and "photo bluray" are completlly speculative
*Speculation. Maybe is::
**0 = system rco
**1 = external rco (disc media, etc)


=Hashreports=
=Hashreports=
==PS3 all versions==
==PS3 rco's 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 6.61==
==PSP rco's==
*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 40: Line 91:
***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|content=<syntaxhighlight lang="c">
{{Boxcode|width=auto|float=left|title=PSP 6.61 official rco's|code=<syntaxhighlight lang="bash">
; 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 168: Line 219:
</syntaxhighlight>}}
</syntaxhighlight>}}


*PSP 6.60 and 6.61 firmware. RCO hashes after resurssiklunssi rebuild (cross option)
{{Boxcode|width=auto|float=left|title=PSP 6.60 and 6.61 firmware. RCO hashes after resurssiklunssi rebuild (cross option)|code=<syntaxhighlight lang="bash">
{{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 299: Line 349:
4fd833dc230d78d2827ad85f58685aa6 *resource\video_plugin_videotoolbar.rco
4fd833dc230d78d2827ad85f58685aa6 *resource\video_plugin_videotoolbar.rco
5b1e65248b962b983cf0553f662c2050 *resource\visualizer_plugin.rco
5b1e65248b962b983cf0553f662c2050 *resource\visualizer_plugin.rco
</syntaxhighlight>}}
</syntaxhighlight>}}{{clear}}


*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|content=<syntaxhighlight lang="c">
{{Boxcode|width=auto|float=left|title=PSP 1.00 official rco's|code=<syntaxhighlight lang="bash">
; 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 348: Line 398:
ef87b1df11ab6b00986b1ce6395066c4 *resource\video_plugin.rco
ef87b1df11ab6b00986b1ce6395066c4 *resource\video_plugin.rco
87d878f00d9355b873adcac6f79927f6 *resource\video_plugin_videotoolbar.rco
87d878f00d9355b873adcac6f79927f6 *resource\video_plugin_videotoolbar.rco
</syntaxhighlight>}}
</syntaxhighlight>}}{{clear}}


=Examples=
=Examples (rcomage builds)=
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 356: Line 406:


==ImageTree with 1 image==
==ImageTree with 1 image==
This is a basic example of how the files are stored inside the container, similar method is used for all files (images, models, sounds, and fonts ?)
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|content=<syntaxhighlight lang="xml">
{{Boxcode|code=<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 367: Line 419:
</syntaxhighlight>}}
</syntaxhighlight>}}


When compiled
When compiled MD5: E4C203A3D4B0B6854C90CD576E028545
<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 397: Line 449:
! Areas !! Offset !! Length !! Example !! Name !! Notes
! Areas !! Offset !! Length !! Example !! Name !! Notes
|-
|-
| rowspan="47" | Header
| rowspan="46" | Header
|-{{cellcolors|#666666|#ffffff}}
|-{{cellcolors|#666666|#ffffff}}
| 0x00 || 0x04 || FRP || '''magic''' || FRP in big endian
| 0x00 || 0x04 || FRP || '''magic''' || FRP in big endian
Line 409: Line 461:
| colspan="5" |  
| colspan="5" |  
|-
|-
| 0x10 || 0x04 || 00 00 00 A4 || '''info_table_offset''' ||  
| 0x10 || 0x04 || 00 00 00 A4 || '''toc_maintree_absolute_offset''' || MainTree at absolute offset 0xA4
|-
|-
| 0x14 || 0x04 || FF FF FF FF || '''vsmx_table_offset''' ||  
| 0x14 || 0x04 || FF FF FF FF || '''toc_scripttree_absolute_offset''' ||  
|-
|-
| 0x18 || 0x04 || FF FF FF FF || '''text_table_offset''' ||  
| 0x18 || 0x04 || FF FF FF FF || '''toc_languagetree_absolute_offset''' ||  
|-
|-
| 0x1C || 0x04 || FF FF FF FF || '''sound_table_offset''' ||  
| 0x1C || 0x04 || FF FF FF FF || '''toc_soundtree_absolute_offset''' ||  
|-
|-
| 0x20 || 0x04 || FF FF FF FF || '''model_table_offset''' ||  
| 0x20 || 0x04 || FF FF FF FF || '''toc_modeltree_absolute_offset''' ||  
|-
|-
| 0x24 || 0x04 || 00 00 00 CC || '''image_table_offset''' ||  
| 0x24 || 0x04 || 00 00 00 CC || '''toc_imagetree_absolute_offset''' || ImageTree at absolute offset 0xCC
|-
|-
| 0x28 || 0x04 || FF FF FF FF || ''unknown'' ||  
| 0x28 || 0x04 || FF FF FF FF || {{cellcolors|#ff7777}} ''toc_unknowntree_absolute_offset'' ||  
|-
|-
| 0x2C || 0x04 || FF FF FF FF || '''font_table_offset''' ||  
| 0x2C || 0x04 || FF FF FF FF || '''toc_fonttree_absolute_offset''' ||  
|-
|-
| 0x30 || 0x04 || FF FF FF FF || '''object_table_offset''' ||  
| 0x30 || 0x04 || FF FF FF FF || '''toc_objecttree_absolute_offset''' ||  
|-
|-
| 0x34 || 0x04 || FF FF FF FF || '''anim_table_offset''' ||  
| 0x34 || 0x04 || FF FF FF FF || '''toc_animationtree_absolute_offset''' ||  
|-{{cellcolors|lightgrey}}
|-{{cellcolors|lightgrey}}
| colspan="5" |  
| colspan="5" |  
|-
|-
| 0x38 || 0x04 || 00 00 01 34 || '''text_table_offset''' ||  
| 0x38 || 0x04 || 00 00 01 34 || '''strings_texts_absolute_offset''' || strings texts table at absolute offset 0x134
|-
|-
| 0x3C || 0x04 || 00 00 00 00 || '''text_table_length''' ||  
| 0x3C || 0x04 || 00 00 00 00 || '''strings_texts_length''' || strings texts table is empty
|-
|-
| 0x40 || 0x04 || 00 00 01 34 || '''label_table_offset''' ||  
| 0x40 || 0x04 || 00 00 01 34 || '''strings_labels_absolute_offset''' || strings labels table at absolute offset 0x134
|-
|-
| 0x44 || 0x04 || 00 00 00 14 || '''label_table_length''' ||  
| 0x44 || 0x04 || 00 00 00 14 || '''strings_labels_length''' || strings labels size 0x14
|-
|-
| 0x48 || 0x04 || 00 00 01 48 || '''native_table_offset''' ||  
| 0x48 || 0x04 || 00 00 01 48 || '''strings_events_absolute_offset''' || strings events table at absolute offset 0x148
|-
|-
| 0x4C || 0x04 || 00 00 00 00 || '''native_table_length''' ||  
| 0x4C || 0x04 || 00 00 00 00 || '''strings_events_length''' || strings events table is empty
|-{{cellcolors|lightgrey}}
|-{{cellcolors|lightgrey}}
| colspan="5" |  
| colspan="5" |  
Line 488: Line 540:
|-
|-
| 0xA0 || 0x04 || FF FF FF FF || ''unknown'' ||  
| 0xA0 || 0x04 || FF FF FF FF || ''unknown'' ||  
|-{{cellcolors|#000000}}
| colspan="5" |
|-
|-
| rowspan="46" | TOC
| rowspan="46" | TOC
|-
|-
| 0xA4 || 0x01 || 01 || '''hierarchy_depth''' ||  
| 0xA4 || 0x01 || 01 || '''entry_type''' || 0x1=MainTree
|-
|-
| 0xA5 || 0x01 || 01 || '''entry_type''' || 0x1=MainTree
| 0xA5 || 0x01 || 01 || '''hierarchy_depth''' ||  
|-
|-
| 0xA6 || 0x02 || 00 00 || ''unknown'' ||  
| 0xA6 || 0x02 || 00 00 || ''unknown'' ||  
Line 519: Line 569:
| colspan="5" |  
| colspan="5" |  
|-
|-
| 0xCC || 0x01 || 04 || '''hierarchy_depth''' || {{cellcolors|#ff7777}} 0x4=ImageTree
| 0xCC || 0x01 || 04 || '''entry_type''' || 0x4=ImageTree
|-
|-
| 0xCD || 0x01 || 00 || '''entry_type''' ||  
| 0xCD || 0x01 || 00 || '''hierarchy_depth''' ||  
|-
|-
| 0xCE || 0x02 || 00 00 || ''unknown'' ||  
| 0xCE || 0x02 || 00 00 || ''unknown'' ||  
Line 545: Line 595:
| colspan="5" |  
| colspan="5" |  
|-
|-
| 0xF4 || 0x01 || 04 || '''hierarchy_depth''' || {{cellcolors|#ff7777}} 0x4=ImageTree
| 0xF4 || 0x01 || 04 || '''entry_type''' || 0x4=ImageTree
|-
|-
| 0xF5 || 0x01 || 01 || '''entry_type''' ||  
| 0xF5 || 0x01 || 01 || '''hierarchy_depth''' ||  
|-
|-
| 0xF6 || 0x02 || 00 00 || ''unknown'' ||  
| 0xF6 || 0x02 || 00 00 || ''unknown'' ||  
Line 573: Line 623:
| 0x11C || 0x02 || 00 05 || '''file_format''' || 0x5=GIM
| 0x11C || 0x02 || 00 05 || '''file_format''' || 0x5=GIM
|-
|-
| 0x11E || 0x02 || 01 00 || '''file_compression''' || {{cellcolors|#ff7777}} 0x0=NONE<br>0x1=ZLIB<br>0x2=RLZ
| 0x11E || 0x01 || 01 || ''unknown'' ||
|-
| 0x11F || 0x01 || 00 || '''file_compression''' || 0x0=NONE
|-
|-
| 0x120 || 0x04 || 00 00 00 08 || '''file_size''' ||  
| 0x120 || 0x04 || 00 00 00 08 || '''file_size''' ||  
Line 580: Line 632:
|-
|-
| 0x128 || 0x04 || 00 00 00 01 || ''unknown'' ||  
| 0x128 || 0x04 || 00 00 00 01 || ''unknown'' ||  
|-{{cellcolors|#000000}}
| colspan="5" |
|-
|-
| rowspan="4" | pointers
| rowspan="3" | pointers
|-
|-
| 0x12C || 0x04 || 00 00 00 F4 ||  ||  
| 0x12C || 0x04 || 00 00 00 F4 ||  ||  
|-
|-
| 0x130 || 0x04 || 00 00 00 00 ||  ||  
| 0x130 || 0x04 || 00 00 00 00 ||  ||  
|-{{cellcolors|#000000}}
| colspan="5" |
|-
|-
| rowspan="3" | texts
| rowspan="2" | texts
|-
|-
| 0x134 || 0x00 ||  || || text table is empty
| 0x134 || 0x00 ||  || || text table is empty
|-{{cellcolors|#000000}}
| colspan="5" |
|-
|-
| rowspan="6" | label
| rowspan="5" | labels
|-
|-
| 0x134 || 0x05 || 74 65 73 74 00 || || test (null terminated)
| 0x134 || 0x05 || 74 65 73 74 00 || || test (null terminated)
Line 606: Line 652:
|-
|-
| 0x147 || 0x01 || 00 || || padding (aligned to 4 bytes boundary)
| 0x147 || 0x01 || 00 || || padding (aligned to 4 bytes boundary)
|-{{cellcolors|#000000}}
|-
| rowspan="2" | events
|-
| 0x148 || 0x00 ||  ||  || events table is empty
|-
| rowspan="2" | images
|-
| 0x148 || 0x8 || 0x8888888888888888 || || image_test.gim
|}
 
When compiled (with zlib header compression) MD5: E73D8E195D7A344294AB84A03E6662A1
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 01 30 00 00 00 00 00 00 00 <span style="background:#ff0000;">10</span>  FRP....0........
00000010  00 00 00 A4 FF FF FF FF FF FF FF FF FF FF FF FF  ...¤ÿÿÿÿÿÿÿÿÿÿÿÿ
00000020  FF FF FF FF 00 00 00 CC FF FF FF FF FF FF FF FF  ÿÿÿÿ...Ìÿÿÿÿÿÿÿÿ
00000030  FF FF FF FF FF FF FF FF <span style="background:#00ff00;">FF FF FF FF</span> 00 00 00 00  ÿÿÿÿÿÿÿÿÿÿÿÿ....
00000040  00 00 01 34 00 00 00 14 00 00 01 48 00 00 00 00  ...4.......H....
00000050  FF FF FF FF 00 00 00 00 00 00 01 2C 00 00 00 08  ÿÿÿÿ.......,....
00000060  FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00  ÿÿÿÿ....ÿÿÿÿ....
00000070  FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00  ÿÿÿÿ....ÿÿÿÿ....
00000080  <span style="background:#7777ff;">00 00 00 F4</span> 00 00 00 08 FF FF FF FF 00 00 00 00  ...ô....ÿÿÿÿ....
00000090  FF FF FF FF 00 00 00 00 FF FF FF FF FF FF FF FF  ÿÿÿÿ....ÿÿÿÿÿÿÿÿ
000000A0  FF FF FF FF <span style="background:#ffff00;">00 00 00 44</span> <span style="background:#ffff00;">00 00 00 A4</span> <span style="background:#ffff00;">00 00 00 00</span>  ÿÿÿÿ...D...¤....
000000B0  <span style="background:#ff00ff;">78 DA 75 8A C1 0A 00 10 10 44 6D 51 3E C5 5F C9</span>  xÚuŠÁ....DmQ>Å_É
000000C0  <span style="background:#ff00ff;">61 93 83 13 9F EE CE 6E 53 28 79 35 ED CE 6B 88</span>  a“ƒ.ŸîÎnS(y5íÎkˆ
000000D0  <span style="background:#ff00ff;">CC 4D 90 88 79 B1 92 29 7C 76 61 EF 60 3D DC C3</span>  ÌM.ˆy±’)|vaï`=ÜÃ
000000E0  <span style="background:#ff00ff;">71 8E B0 03 5A 86 3E 9D 5B D7 5B 6A CA 1C D1 16</span>  qŽ°.Z†>.[×[jÊ.Ñ.
000000F0  <span style="background:#ff00ff;">84 BD 0B BF</span> 88 88 88 88 88 88 88 88              „½.¿ˆˆˆˆˆˆˆˆ
 
*Changes
**<span style="background:#ff0000;">10</span> the "compression header" setting with zlib (is not actually compressing the header, the term is not accurate)
**<span style="background:#00ff00;">FF FF FF FF</span> weird <!-- this seems to be a mistake of rcomage, because the area is empty originally rcomage detects that is empty and replaces the value by a generic 0xFFFFFFFF but this is not correct, the offset where the table starts must be there even if the table is empty -->
**<span style="background:#7777ff;">00 00 00 F4</span> the offset where the image data starts, because the area before the image data has been compressed his position has been displaced
**<span style="background:#ffff00;">00 00 00 44</span> <span style="background:#ffff00;">00 00 00 A4</span> <span style="background:#ffff00;">00 00 00 00</span> the info about the compressed area that comes next (composed by: lenPacked, lenUnpacked, and lenLongestText)
**<span style="background:#ff00ff;">78 DA ...</span> the compressed area itself, includes the whole TOC, the pointers to the TOC, and all the strings tables (languages, labels, and events)
 
==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
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|code=<syntaxhighlight lang="xml">
<RcoFile UMDFlag="0" rcomageXmlVer="1.1" type="ps3" minFirmwareVer="unknownId0x130">
<MainTree name="test">
<ImageTree>
<Image name="image2_test" src="image2_test.gim" format="gim" compression="uncompressed" unknownByte="1" />
<Image name="image3_test" src="image3_test.gim" format="gim" compression="zlib" unknownByte="0" />
</ImageTree>
</MainTree>
</RcoFile>
</syntaxhighlight>}}
 
When compiled MD5: 4E69E7E88F0872C71D007A21478FA1D1
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 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  ...¤ÿÿÿÿÿÿÿÿÿÿÿÿ
00000020  FF FF FF FF 00 00 00 CC FF FF FF FF FF FF FF FF  ÿÿÿÿ...Ìÿÿÿÿÿÿÿÿ
00000030  FF FF FF FF FF FF FF FF 00 00 01 70 00 00 00 00  ÿÿÿÿÿÿÿÿ...p....
00000040  00 00 01 70 00 00 00 20 00 00 01 90 00 00 00 00  ...p... ........
00000050  FF FF FF FF 00 00 00 00 00 00 01 68 00 00 00 08  ÿÿÿÿ.......h....
00000060  FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00  ÿÿÿÿ....ÿÿÿÿ....
00000070  FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00  ÿÿÿÿ....ÿÿÿÿ....
00000080  00 00 01 90 00 00 00 14 FF FF FF FF 00 00 00 00  ........ÿÿÿÿ....
00000090  FF FF FF FF 00 00 00 00 FF FF FF FF FF FF FF FF  ÿÿÿÿ....ÿÿÿÿÿÿÿÿ
000000A0  FF FF FF FF 01 01 00 00 00 00 00 00 00 00 00 00  ÿÿÿÿ............
000000B0  00 00 00 28 00 00 00 01 00 00 00 00 00 00 00 00  ...(............
000000C0  00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00  ................
000000D0  FF FF FF FF 00 00 00 00 00 00 00 28 00 00 00 02  ÿÿÿÿ.......(....
000000E0  00 00 00 00 00 00 00 00 00 00 00 28 00 00 00 00  ...........(....
000000F0  00 00 00 00 04 01 00 00 00 00 00 08 00 00 00 28  ...............(
00000100  00 00 00 00 00 00 00 00 00 00 00 38 00 00 00 00  ...........8....
00000110  00 00 00 28 00 00 00 00 00 00 00 00 00 05 01 00  ...(............
00000120  00 00 00 02 00 00 00 00 00 00 00 01 04 01 00 00  ................
00000130  00 00 00 14 00 00 00 28 00 00 00 00 00 00 00 00  .......(........
00000140  00 00 00 00 00 00 00 38 00 00 00 60 00 00 00 00  .......8...`....
00000150  00 00 00 00 00 05 00 01 00 00 00 0E 00 00 00 04  ................
00000160  00 00 00 01 00 00 00 03 00 00 00 F4 00 00 01 2C  ...........ô...,
00000170  74 65 73 74 00 00 00 00 69 6D 61 67 65 32 5F 74  test....image2_t
00000180  65 73 74 00 69 6D 61 67 65 33 5F 74 65 73 74 00  est.image3_test.
00000190  22 22 00 00 78 DA 01 03 00 FC FF 33 33 33 01 35  ""..xÚ...üÿ333.5
000001A0  00 9A 00 00                                      .š..
 
{| 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 absolute offset 0xA4
|-
| 0x14 || 0x04 || FF FF FF FF || '''toc_scripttree_absolute_offset''' ||
|-
| 0x18 || 0x04 || FF FF FF FF || '''toc_languagetree_absolute_offset''' ||
|-
| 0x1C || 0x04 || FF FF FF FF || '''toc_soundtree_absolute_offset''' ||
|-
| 0x20 || 0x04 || FF FF FF FF || '''toc_modeltree_absolute_offset''' ||
|-
| 0x24 || 0x04 || 00 00 00 CC || '''toc_imagetree_absolute_offset''' || ImageTree at absolute offset 0xCC
|-
| 0x28 || 0x04 || FF FF FF FF || {{cellcolors|#ff7777}} ''toc_unknowntree_absolute_offset'' ||
|-
| 0x2C || 0x04 || FF FF FF FF || '''toc_fonttree_absolute_offset''' ||
|-
| 0x30 || 0x04 || FF FF FF FF || '''toc_objecttree_absolute_offset''' ||
|-
| 0x34 || 0x04 || FF FF FF FF || '''toc_animationtree_absolute_offset''' ||
|-{{cellcolors|lightgrey}}
| colspan="5" |
|-
| 0x38 || 0x04 || 00 00 01 70 || '''strings_texts_absolute_offset''' || strings texts table at absolute offset 0x170
|-
| 0x3C || 0x04 || 00 00 00 00 || '''strings_texts_length''' || strings texts table is empty
|-
| 0x40 || 0x04 || 00 00 01 70 || '''strings_labels_absolute_offset''' || strings labels table at absolute offset 0x170
|-
| 0x44 || 0x04 || 00 00 00 20 || '''strings_labels_length''' || strings labels size 0x20
|-
| 0x48 || 0x04 || 00 00 01 90 || '''strings_events_absolute_offset''' || strings events table at absolute offset 0x190
|-
| 0x4C || 0x04 || 00 00 00 00 || '''strings_events_length''' || strings events table is empty
|-{{cellcolors|lightgrey}}
| colspan="5" |
|-
| 0x50 || 0x04 || FF FF FF FF || '''text_pointer_table_offset''' ||
|-
| 0x54 || 0x04 || 00 00 00 00 || '''text_pointer_table_length''' ||
|-
| 0x58 || 0x04 || 00 00 01 68 || '''image_pointer_table_offset''' ||
|-
| 0x5C || 0x04 || 00 00 00 08 || '''image_pointer_table_length''' ||
|-
| 0x60 || 0x04 || FF FF FF FF || '''model_pointer_table_offset''' ||
|-
| 0x64 || 0x04 || 00 00 00 00 || '''model_pointer_table_length''' ||
|-
| 0x68 || 0x04 || FF FF FF FF || '''sound_pointer_table_offset''' ||
|-
| 0x6C || 0x04 || 00 00 00 00 || '''sound_pointer_table_length''' ||
|-
| 0x70 || 0x04 || FF FF FF FF || '''object_pointer_table_offset''' ||
|-
| 0x74 || 0x04 || 00 00 00 00 || '''object_pointer_table_length''' ||
|-
| 0x78 || 0x04 || FF FF FF FF || '''anim_pointer_table_offset''' ||
|-
| 0x7C || 0x04 || 00 00 00 00 || '''anim_pointer_table_length''' ||
|-{{cellcolors|lightgrey}}
| colspan="5" |
|-
| 0x80 || 0x04 || 00 00 01 90 || '''image_data_section_offset''' ||
|-
| 0x84 || 0x04 || 00 00 00 14 || '''image_data_section_length''' ||
|-
| 0x88 || 0x04 || FF FF FF FF || '''sound_data_section_offset''' ||
|-
| 0x8C || 0x04 || 00 00 00 00 || '''sound_data_section_length''' ||
|-
| 0x90 || 0x04 || FF FF FF FF || '''model_data_section_offset''' ||
|-
| 0x94 || 0x04 || 00 00 00 00 || '''model_data_section_length''' ||
|-
| 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''' ||
|-
| 0xB0 || 0x04 || 00 00 00 28 || '''entry_size''' ||
|-
| 0xB4 || 0x04 || 00 00 00 01 || '''children_number''' ||
|-
| 0xB8 || 0x04 || 00 00 00 00 || '''next_entry_offset''' ||
|-
| 0xBC || 0x04 || 00 00 00 00 || '''previous_entry_offset''' ||
|-
| 0xC0 || 0x04 || 00 00 00 00 || '''parent_offset''' ||
|-
| 0xC4 || 0x04 || 00 00 00 00 || ''unknown'' ||
|-
| 0xC8 || 0x04 || 00 00 00 00 || ''unknown'' ||
|-{{cellcolors|lightgrey}}
| colspan="5" |
|-
| 0xCC || 0x01 || 04 || '''entry_type''' || 0x4=ImageTree
|-
| 0xCD || 0x01 || 00 || '''hierarchy_depth''' ||
|-
| 0xCE || 0x02 || 00 00 || ''unknown'' ||
|-
| 0xD0 || 0x04 || FF FF FF FF || '''entry_label_offset''' || no label
|-
| 0xD4 || 0x04 || 00 00 00 00 || '''entry_header_size''' ||
|-
| 0xD8 || 0x04 || 00 00 00 28 || '''entry_size''' ||
|-
| 0xDC || 0x04 || 00 00 00 02 || '''children_number''' ||
|-
| 0xE0 || 0x04 || 00 00 00 00 || '''next_entry_offset''' ||
|-
| 0xE4 || 0x04 || 00 00 00 00 || '''previous_entry_offset''' ||
|-
| 0xE8 || 0x04 || 00 00 00 28 || '''parent_offset''' ||
|-
| 0xEC || 0x04 || 00 00 00 00 || ''unknown'' ||
|-
| 0xF0 || 0x04 || 00 00 00 00 || ''unknown'' ||
|-{{cellcolors|lightgrey}}
| colspan="5" |
|-
| 0xF4 || 0x01 || 04 || '''entry_type''' || 0x4=ImageTree
|-
| 0xF5 || 0x01 || 01 || '''hierarchy_depth''' ||
|-
| 0xF6 || 0x02 || 00 00 || ''unknown'' ||
|-
| 0xF8 || 0x04 || 00 00 00 08 || '''entry_label_offset''' || image2_test
|-
| 0xFC || 0x04 || 00 00 00 28 || '''entry_header_size''' ||
|-
| 0x100 || 0x04 || 00 00 00 00 || '''entry_size''' ||
|-
| 0x104 || 0x04 || 00 00 00 00 || '''children_number''' ||
|-
| 0x108 || 0x04 || 00 00 00 38 || '''next_entry_offset''' ||
|-
| 0x10C || 0x04 || 00 00 00 00 || '''previous_entry_offset''' ||
|-
| 0x110 || 0x04 || 00 00 00 28 || '''parent_offset''' ||
|-
| 0x114 || 0x04 || 00 00 00 00 || ''unknown'' ||
|-
| 0x118 || 0x04 || 00 00 00 00 || ''unknown'' ||
|-{{cellcolors|lightgrey}}
| colspan="5" |
|-
| 0x11C || 0x02 || 00 05 || '''file_format''' || 0x5=GIM
|-
| 0x11E || 0x01 || 01 || ''unknown'' ||
|-
| 0x11F || 0x01 || 00 || '''file_compression''' || 0x0=NONE
|-
| 0x120 || 0x04 || 00 00 00 02 || '''file_size''' ||
|-
| 0x124 || 0x04 || 00 00 00 00 || '''file_offset''' ||
|-
| 0x128 || 0x04 || 00 00 00 01 || ''unknown'' ||
|-{{cellcolors|lightgrey}}
| colspan="5" |
|-
| 0x12C || 0x01 || 04 || '''entry_type''' || 0x4=ImageTree
|-
| 0x12D || 0x01 || 01 || '''hierarchy_depth''' ||
|-
| 0x12E || 0x02 || 00 00 || ''unknown'' ||
|-
| 0x130 || 0x04 || 00 00 00 14 || '''entry_label_offset''' || image3_test
|-
| 0x134 || 0x04 || 00 00 00 28 || '''entry_header_size''' ||
|-
| 0x138 || 0x04 || 00 00 00 00 || '''entry_size''' ||
|-
| 0x13C || 0x04 || 00 00 00 00 || '''children_number''' ||
|-
| 0x140 || 0x04 || 00 00 00 00 || '''next_entry_offset''' ||
|-
| 0x144 || 0x04 || 00 00 00 38 || '''previous_entry_offset''' ||
|-
| 0x148 || 0x04 || 00 00 00 60 || '''parent_offset''' ||
|-
| 0x14C || 0x04 || 00 00 00 00 || ''unknown'' ||
|-
| 0x150 || 0x04 || 00 00 00 00 || ''unknown'' ||
|-{{cellcolors|lightgrey}}
| colspan="5" |  
| colspan="5" |  
|-
|-
| rowspan="3" | native
| 0x154 || 0x02 || 00 05 || '''file_format''' || 0x5=GIM
|-
|-
| 0x148 || 0x00 ||  ||  || native table is empty
| 0x156 || 0x01 || 00 || ''unknown'' ||
|-
| 0x157 || 0x01 || 01 || '''file_compression''' || 0x1=ZLIB
|-
| 0x158 || 0x04 || 00 00 00 0E || '''file_size''' ||
|-
| 0x15C || 0x04 || 00 00 00 04 || '''file_offset''' ||
|-
| 0x160 || 0x04 || 00 00 00 01 || ''unknown'' ||
|-
| 0x164 || 0x04 || 00 00 00 03 || '''file_uncompressed_size''' ||
|-
| rowspan="3" | pointers
|-
| 0x168 || 0x04 || 00 00 00 F4 ||  ||
|-
| 0x16C || 0x04 || 00 00 01 2C ||  ||
|-
| rowspan="2" | texts
|-
| 0x170 || 0x00 ||  || || text table is empty
|-
| rowspan="5" | labels
|-
| 0x170 || 0x05 || 74 65 73 74 00 || || test (null terminated)
|-
| 0x175 || 0x03 || 00 00 00 || || padding (aligned to 4 bytes boundary)
|-
| 0x178 || 0x0C || 69 6D 61 67 65 32 5F 74 65 73 74 00 || || image2_test (null terminated)
|-
| 0x184 || 0x0C || 69 6D 61 67 65 33 5F 74 65 73 74 00 || || image3_test (null terminated)
|-
| rowspan="2" | events
|-
| 0x190 || 0x00 ||  ||  || events table is empty
|-
| rowspan="5" | images
|-
| 0x190 || 0x02 || 22 22 || || image2_test.gim
|-
| 0x192 || 0x02 || 00 00 || || padding (aligned to 4 bytes boundary)
|-
| 0x194 || 0x0E || 78 DA 01 03 00 FC FF 33 33 33 01 35 00 9A || || image3_test.gim (zlib compressed)
|-
| 0x1A2 || 0x02 || 00 00 || || padding (aligned to 4 bytes boundary)
|}
 
=Examples (official builds)=
This ones should be considered "perfect" rco structures, even if there is a weird detail (initially a nonsense, a sony bug, or details not managed correctlly by rcomage)... it needs to be considered a "specification" of that rco version. See also [[Talk:Rcomage]]
 
==PS3 1.02 xai_plugin.rco==
 
 
{{Boxcode|code=<syntaxhighlight lang="xml">
<RcoFile UMDFlag="0" rcomageXmlVer="1.1" type="ps3" minFirmwareVer="unknownId0x97">
<MainTree name="sample">
<ObjectTree>
<Page name="root" pageMode="0x1101" pageOnInit="nothing" pageOnCancel="nothing" pageOnContext="nothing" pageOnActivate="nothing">
<Plane name="application" positionX="0" positionY="0" positionZ="0" colorScaleR="1" colorScaleG="1" colorScaleB="1" colorScaleA="1" sizeX="0" sizeY="0" sizeZ="0" sizeScaleX="1" sizeScaleY="1" sizeScaleZ="1" anchorMode="0x0" onInit="nothing" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" sizeOverrideX="0x0" sizeOverrideY="0x0" sizeOverrideZ="0x0" planeImage="nothing" planeResizeMode="0x0"></Plane>
</Page>
</ObjectTree>
</MainTree>
</RcoFile>
</syntaxhighlight>}}
 
MD5: F3835BBD0E2448EB6AD5C3FA02906346
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 00 97 00 00 00 00 00 00 00 00  FRP....—........
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  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
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 1C 00 00 01 F0 00 00 00 04  ...Ô.......ð....
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  ÿÿÿÿ....ÿÿÿÿ....
00000070  00 00 01 CC 00 00 00 08 FF FF FF FF 00 00 00 00  ...Ì....ÿÿÿÿ....
00000080  FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00  ÿÿÿÿ....ÿÿÿÿ....
00000090  FF FF FF FF 00 00 00 00 FF FF FF FF FF FF FF FF  ÿÿÿÿ....ÿÿÿÿÿÿÿÿ
000000A0  FF FF FF FF 01 01 00 00 00 00 00 00 00 00 00 00  ÿÿÿÿ............
000000B0  00 00 00 28 00 00 00 01 00 00 00 00 00 00 00 00  ...(............
000000C0  00 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00  ................
000000D0  FF FF FF FF 00 00 00 00 00 00 00 28 00 00 00 01  ÿÿÿÿ.......(....
000000E0  00 00 00 00 00 00 00 00 00 00 00 28 00 00 00 00  ...........(....
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............
00000110  00 00 00 28 00 00 00 00 00 00 00 00 01 11 00 00  ...(............
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  ÿÿ..ÿÿÿÿÿÿ..ÿÿÿÿ
00000140  08 02 00 00 00 00 00 10 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
00000160  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000170  00 00 00 00 3F 80 00 00 3F 80 00 00 3F 80 00 00  ....?€..?€..?€..
00000180  3F 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ?€..............
00000190  3F 80 00 00 3F 80 00 00 3F 80 00 00 00 00 00 00  ?€..?€..?€......
000001A0  FF FF 00 00 FF FF FF FF 00 00 00 00 00 00 00 00  ÿÿ..ÿÿÿÿ........
000001B0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000001C0  FF FF 00 00 FF FF FF FF 00 00 00 00 00 00 00 F4  ÿÿ..ÿÿÿÿ.......ô
000001D0  00 00 01 40 73 61 6D 70 6C 65 00 00 72 6F 6F 74  [email protected]
000001E0  00 00 00 00 61 70 70 6C 69 63 61 74 69 6F 6E 00  ....application.
000001F0  00 00 00 00                                      ....
 
{| class="wikitable" style="font-size:x-small;"
|-
! colspan="2" | Areas !! Offset !! Length !! Example !! Name !! Notes
|-
| colspan="2" rowspan="42" | HDR
|-{{cellcolors|#000000|#ffffff}}
| 0x00 || 0x04 || 46 52 50 00 || '''prf_signature''' || FRP in big endian
|-{{cellcolors|#000000|#ffffff}}
| 0x04 || 0x04 || 00 00 00 97 || '''prf_version''' || 0x97 = one of the firmwares for PS3
|-{{cellcolors|#000000|#ffffff}}
| 0x08 || 0x04 || 00 00 00 00 || {{cellcolors|#ff7777}} <abbr title="minor_version ?">''prf_unknown''</abbr> ||
|-{{cellcolors|#000000|#ffffff}}
| 0x0C || 0x04 || 00 00 00 00 || <abbr title="compress everything except the header and '''dat''' data tables to store files">'''prf_compression'''</abbr> || 0x00 = uncompressed
|-{{cellcolors|#7777ff}}
| 0x10 || 0x04 || 00 00 00 A4 || '''toc_maintree_absolute_offset''' || MainTree at 0xA4
|-{{cellcolors|#8888ff}}
| 0x14 || 0x04 || FF FF FF FF || '''toc_scripttree_absolute_offset''' || no
|-{{cellcolors|#8888ff}}
| 0x18 || 0x04 || FF FF FF FF || '''toc_languagetree_absolute_offset''' || no
|-{{cellcolors|#8888ff}}
| 0x1C || 0x04 || FF FF FF FF || '''toc_soundtree_absolute_offset''' || no
|-{{cellcolors|#8888ff}}
| 0x20 || 0x04 || FF FF FF FF || '''toc_modeltree_absolute_offset''' || no
|-{{cellcolors|#8888ff}}
| 0x24 || 0x04 || FF FF FF FF || '''toc_imagetree_absolute_offset''' || no
|-{{cellcolors|#8888ff}}
| 0x28 || 0x04 || FF FF FF FF || {{cellcolors|#ff7777}} <abbr title="toc_unknowntree_absolute_offset">''toc_unknown''</abbr> || no
|-{{cellcolors|#8888ff}}
| 0x2C || 0x04 || FF FF FF FF || '''toc_fonttree_absolute_offset''' || no
|-{{cellcolors|#8888ff}}
| 0x30 || 0x04 || 00 00 00 CC || '''toc_objecttree_absolute_offset''' || ObjectTree at 0xCC
|-{{cellcolors|#8888ff}}
| 0x34 || 0x04 || FF FF FF FF || '''toc_animationtree_absolute_offset''' || no
|-{{cellcolors|#66ff66}}
| 0x38 || 0x04 || 00 00 01 D4 || '''str_language_table_absolute_offset''' || languages at 0x1D4
|-{{cellcolors|#66ff66}}
| 0x3C || 0x04 || 00 00 00 00 || '''str_language_table_length''' || empty
|-{{cellcolors|#99ff99}}
| 0x40 || 0x04 || 00 00 01 D4 || '''str_label_table_absolute_offset''' || labels at 0x1D4
|-{{cellcolors|#99ff99}}
| 0x44 || 0x04 || 00 00 00 1C || '''str_label_table_length''' || length 0x1C
|-{{cellcolors|#bbffbb}}
| 0x48 || 0x04 || 00 00 01 F0 || '''str_event_table_absolute_offset''' || events at 0x1F0
|-{{cellcolors|#bbffbb}}
| 0x4C || 0x04 || 00 00 00 04 || '''str_event_table_length''' || length 0x4
|-{{cellcolors|#770077}}
| 0x50 || 0x04 || FF FF FF FF || '''ptr_language_table_absolute_offset''' || no
|-{{cellcolors|#770077}}
| 0x54 || 0x04 || 00 00 00 00 || '''ptr_language_table_length''' || empty
|-{{cellcolors|#880088}}
| 0x58 || 0x04 || FF FF FF FF || '''ptr_image_table_absolute_offset''' || no
|-{{cellcolors|#880088}}
| 0x5C || 0x04 || 00 00 00 00 || '''ptr_image_table_length''' || empty
|-{{cellcolors|#990099}}
| 0x60 || 0x04 || FF FF FF FF || '''ptr_model_table_absolute_offset''' || no
|-{{cellcolors|#990099}}
| 0x64 || 0x04 || 00 00 00 00 || '''ptr_model_table_length''' || empty
|-{{cellcolors|#aa00aa}}
| 0x68 || 0x04 || FF FF FF FF || '''ptr_sound_table_absolute_offset''' || no
|-{{cellcolors|#aa00aa}}
| 0x6C || 0x04 || 00 00 00 00 || '''ptr_sound_table_length''' || empty
|-{{cellcolors|#bb00bb}}
| 0x70 || 0x04 || 00 00 01 CC || '''ptr_object_table_absolute_offset''' || object pointers at 0x1CC
|-{{cellcolors|#bb00bb}}
| 0x74 || 0x04 || 00 00 00 08 || '''ptr_object_table_length''' || size 0x8
|-{{cellcolors|#cc00cc}}
| 0x78 || 0x04 || FF FF FF FF || '''ptr_animation_table_absolute_offset''' || no
|-{{cellcolors|#cc00cc}}
| 0x7C || 0x04 || 00 00 00 00 || '''ptr_animation_table_length''' || empty
|-{{cellcolors|#ccaa88}}
| 0x80 || 0x04 || FF FF FF FF || '''dat_image_table_absolute_offset''' || no
|-{{cellcolors|#ccaa88}}
| 0x84 || 0x04 || 00 00 00 00 || '''dat_image_table_length''' || empty
|-{{cellcolors|#ddbb99}}
| 0x88 || 0x04 || FF FF FF FF || '''dat_sound_table_absolute_offset''' || no
|-{{cellcolors|#ddbb99}}
| 0x8C || 0x04 || 00 00 00 00 || '''dat_sound_table_length''' || empty
|-{{cellcolors|#eeccaa}}
| 0x90 || 0x04 || FF FF FF FF || '''dat_model_table_absolute_offset''' || no
|-{{cellcolors|#eeccaa}}
| 0x94 || 0x04 || 00 00 00 00 || '''dat_model_table_length''' || empty
|-{{cellcolors|#ffddbb}}
| 0x98 || 0x04 || FF FF FF FF || {{cellcolors|#ff7777}} <abbr title="dat_unknown_table_absolute_offset">''dat_unknown_1''</abbr> ||
|-{{cellcolors|#ffddbb}}
| 0x9C || 0x04 || FF FF FF FF || {{cellcolors|#ff7777}} <abbr title="dat_unknown_table_length">''dat_unknown_2''</abbr> ||
|-{{cellcolors|#ffddbb}}
| 0xA0 || 0x04 || FF FF FF FF || {{cellcolors|#ff7777}} <abbr title="dat_unknown_table_absolute_offset">''dat_unknown_3''</abbr> ||
|-{{cellcolors|#000000}}
|-{{cellcolors|#000000}}
| colspan="7" |
|-
| colspan="2" rowspan="72" | TOC
|-{{cellcolors|#7777ff}}
| 0xA4 || 0x04 || 01 01 00 00 || '''entry_type''' || MainTree
|-{{cellcolors|#7777ff}}
| 0xA8 || 0x04 || 00 00 00 00 || '''entry_label_offset''' || sample
|-{{cellcolors|#7777ff}}
| 0xAC || 0x04 || 00 00 00 00 || '''entry_header_size''' ||
|-{{cellcolors|#7777ff}}
| 0xB0 || 0x04 || 00 00 00 28 || '''entry_size''' ||
|-{{cellcolors|#7777ff}}
| 0xB4 || 0x04 || 00 00 00 01 || '''children_number''' ||
|-{{cellcolors|#7777ff}}
| 0xB8 || 0x04 || 00 00 00 00 || '''next_entry_offset''' ||
|-{{cellcolors|#7777ff}}
| 0xBC || 0x04 || 00 00 00 00 || '''previous_entry_offset''' ||
|-{{cellcolors|#7777ff}}
| 0xC0 || 0x04 || 00 00 00 00 || '''parent_offset''' || no parent
|-{{cellcolors|#7777ff}}
| 0xC4 || 0x04 || 00 00 00 00 || {{cellcolors|#ff7777}} ''toc_entry_unknown_1'' ||
|-{{cellcolors|#7777ff}}
| 0xC8 || 0x04 || 00 00 00 00 || {{cellcolors|#ff7777}} ''toc_entry_unknown_2'' ||
|-{{cellcolors|lightgrey}}
| colspan="5" |
|-{{cellcolors|#8888ff}}
| 0xCC || 0x04 || 08 00 00 00 || '''entry_type''' || ObjectTree
|-{{cellcolors|#8888ff}}
| 0xD0 || 0x04 || FF FF FF FF || '''entry_label_offset''' || no label
|-{{cellcolors|#8888ff}}
| 0xD4 || 0x04 || 00 00 00 00 || '''entry_header_size''' ||
|-{{cellcolors|#8888ff}}
| 0xD8 || 0x04 || 00 00 00 28 || '''entry_size''' ||
|-{{cellcolors|#8888ff}}
| 0xDC || 0x04 || 00 00 00 01 || '''children_number''' ||
|-{{cellcolors|#8888ff}}
| 0xE0 || 0x04 || 00 00 00 00 || '''next_entry_offset''' ||
|-{{cellcolors|#8888ff}}
| 0xE4 || 0x04 || 00 00 00 00 || '''previous_entry_offset''' ||
|-{{cellcolors|#8888ff}}
| 0xE8 || 0x04 || 00 00 00 28 || '''parent_offset''' || 0xCC-0x28 = parent is at 0xA4 ('''MainTree''')
|-{{cellcolors|#8888ff}}
| 0xEC || 0x04 || 00 00 00 00 || {{cellcolors|#ff7777}} ''toc_entry_unknown_1'' ||
|-{{cellcolors|#8888ff}}
| 0xF0 || 0x04 || 00 00 00 00 || {{cellcolors|#ff7777}} ''toc_entry_unknown_2'' ||
|-{{cellcolors|lightgrey}}
| colspan="5" |
|-{{cellcolors|#9999ff}}
| 0xF4 || 0x01 || 08 01 00 00 || '''entry_type''' || Page
|-{{cellcolors|#9999ff}}
| 0xF8 || 0x04 || 00 00 00 08 || '''entry_label_offset''' || root
|-{{cellcolors|#9999ff}}
| 0xFC || 0x04 || 00 00 00 28 || '''entry_header_size''' ||
|-{{cellcolors|#9999ff}}
| 0x100 || 0x04 || 00 00 00 4C || '''entry_size''' ||
|-{{cellcolors|#9999ff}}
| 0x104 || 0x04 || 00 00 00 01 || '''children_number''' ||
|-{{cellcolors|#9999ff}}
| 0x108 || 0x04 || 00 00 00 00 || '''next_entry_offset''' ||
|-{{cellcolors|#9999ff}}
| 0x10C || 0x04 || 00 00 00 00 || '''previous_entry_offset''' ||
|-{{cellcolors|#9999ff}}
| 0x110 || 0x04 || 00 00 00 28 || '''parent_offset''' || 0xF4-0x28 = parent is at 0xCC ('''ObjectTree''')
|-{{cellcolors|#9999ff}}
| 0x114 || 0x04 || 00 00 00 00 || {{cellcolors|#ff7777}} ''toc_entry_unknown_1'' ||
|-{{cellcolors|#9999ff}}
| 0x118 || 0x04 || 00 00 00 00 || {{cellcolors|#ff7777}} ''toc_entry_unknown_2'' ||
|-{{cellcolors|#bbbbff}}
| 0x11C || 0x04 || 01 11 00 00 || '''pageMode''' ||
|-{{cellcolors|#bbbbff}}
| 0x120 || 0x08 || FF FF 00 00 FF FF FF FF || '''pageOnInit''' || nothing
|-{{cellcolors|#bbbbff}}
| 0x128 || 0x08 || FF FF 00 00 FF FF FF FF || '''pageOnCancel''' || nothing
|-{{cellcolors|#bbbbff}}
| 0x130 || 0x08 || FF FF 00 00 FF FF FF FF || '''pageOnContext''' || nothing
|-{{cellcolors|#bbbbff}}
| 0x138 || 0x08 || FF FF 00 00 FF FF FF FF || '''pageOnActivate''' || nothing
|-{{cellcolors|lightgrey}}
| colspan="5" |  
| colspan="5" |  
|-{{cellcolors|#9999ff}}
| 0x140 || 0x04 || 08 02 00 00 || '''entry_type''' || Plane
|-{{cellcolors|#9999ff}}
| 0x144 || 0x04 || 00 00 00 10 || '''entry_label_offset''' || application
|-{{cellcolors|#9999ff}}
| 0x148 || 0x04 || 00 00 00 28 || '''entry_header_size''' ||
|-{{cellcolors|#9999ff}}
| 0x14C || 0x04 || 00 00 00 00 || '''entry_size''' ||
|-{{cellcolors|#9999ff}}
| 0x150 || 0x04 || 00 00 00 00 || '''children_number''' ||
|-{{cellcolors|#9999ff}}
| 0x154 || 0x04 || 00 00 00 00 || '''next_entry_offset''' ||
|-{{cellcolors|#9999ff}}
| 0x158 || 0x04 || 00 00 00 00 || '''previous_entry_offset''' ||
|-{{cellcolors|#9999ff}}
| 0x15C || 0x04 || 00 00 00 4C || '''parent_offset''' || 0x140-0x4C = parent is at 0xF4 ('''Page''')
|-{{cellcolors|#9999ff}}
| 0x160 || 0x04 || 00 00 00 00 || {{cellcolors|#ff7777}} ''toc_entry_unknown_1'' ||
|-{{cellcolors|#9999ff}}
| 0x164 || 0x04 || 00 00 00 00 || {{cellcolors|#ff7777}} ''toc_entry_unknown_2'' ||
|-{{cellcolors|#aaaaff}}
| 0x168 || 0x04 || 00 00 00 00 || '''positionX''' || 0
|-{{cellcolors|#aaaaff}}
| 0x16C || 0x04 || 00 00 00 00 || '''positionY''' || 0
|-{{cellcolors|#aaaaff}}
| 0x170 || 0x04 || 00 00 00 00 || '''positionZ''' || 0
|-{{cellcolors|#aaaaff}}
| 0x174 || 0x04 || 3F 80 00 00 || '''colorScaleR''' || 1
|-{{cellcolors|#aaaaff}}
| 0x178 || 0x04 || 3F 80 00 00 || '''colorScaleG''' || 1
|-{{cellcolors|#aaaaff}}
| 0x17C || 0x04 || 3F 80 00 00 || '''colorScaleB''' || 1
|-{{cellcolors|#aaaaff}}
| 0x180 || 0x04 || 3F 80 00 00 || '''colorScaleA''' || 1
|-{{cellcolors|#aaaaff}}
| 0x184 || 0x04 || 00 00 00 00 || '''sizeX''' || 0
|-{{cellcolors|#aaaaff}}
| 0x188 || 0x04 || 00 00 00 00 || '''sizeY''' || 0
|-{{cellcolors|#aaaaff}}
| 0x18C || 0x04 || 00 00 00 00 || '''sizeZ''' || 0
|-{{cellcolors|#aaaaff}}
| 0x190 || 0x04 || 3F 80 00 00 || '''sizeScaleX''' || 1
|-{{cellcolors|#aaaaff}}
| 0x194 || 0x04 || 3F 80 00 00 || '''sizeScaleY''' || 1
|-{{cellcolors|#aaaaff}}
| 0x198 || 0x04 || 3F 80 00 00 || '''sizeScaleZ''' || 1
|-{{cellcolors|#aaaaff}}
| 0x19C || 0x04 || 00 00 00 00 || '''anchorMode''' || 0x0 (center)
|-{{cellcolors|#aaaaff}}
| 0x1A0 || 0x08 || FF FF 00 00 FF FF FF FF || '''onInit''' || nothing
|-{{cellcolors|#aaaaff}}
| 0x1A8 || 0x04 || 00 00 00 00 || '''positionOverrideX''' || no
|-{{cellcolors|#aaaaff}}
| 0x1AC || 0x04 || 00 00 00 00 || '''positionOverrideY''' || no
|-{{cellcolors|#aaaaff}}
| 0x1B0 || 0x04 || 00 00 00 00 || '''positionOverrideZ''' || no
|-{{cellcolors|#aaaaff}}
| 0x1B4 || 0x04 || 00 00 00 00 || '''sizeOverrideX''' || no
|-{{cellcolors|#aaaaff}}
| 0x1B8 || 0x04 || 00 00 00 00 || '''sizeOverrideY''' || no
|-{{cellcolors|#aaaaff}}
| 0x1BC || 0x04 || 00 00 00 00 || '''sizeOverrideZ''' || no
|-{{cellcolors|#bbbbff}}
| 0x1C0 || 0x04 || FF FF 00 00 FF FF FF FF || '''planeImage''' || nothing
|-{{cellcolors|#bbbbff}}
| 0x1C8 || 0x04 || 00 00 00 00 || '''planeResizeMode''' || 0x0
|-{{cellcolors|#000000}}
| colspan="7" |
|-
|-
| files || 0x148 || 0x8 || 0x8888888888888888 || || image_test.gim
| rowspan="3" | PTR
| rowspan="3" | objects
|-{{cellcolors|#bb00bb}}
| 0x1CC || 0x04 || 00 00 00 F4 ||  || First object ('''Page''') at 0xF4
|-{{cellcolors|#bb00bb}}
| 0x1D0 || 0x04 || 00 00 01 40 ||  || Second object ('''Plane''') at 0x140
|-{{cellcolors|#000000}}
| colspan="7" |
|-
| rowspan="10" | STR
| rowspan="2" | languages
|-{{cellcolors|#66ff66}}
| 0x1D4 || 0x00 ||  ||  || empty
|-
| rowspan="6" | labels
|-{{cellcolors|#99ff99}}
| 0x1D4 || 0x07 || 73 61 6D 70 6C 65 00 ||  || '''sample''' (null terminated)
|-{{cellcolors|lightgrey}}
| 0x1DB || 0x01 || 00 ||  || padding (aligned to 4 bytes boundary)
|-{{cellcolors|#99ff99}}
| 0x1DC || 0x05 || 72 6F 6F 74 00 ||  || '''root''' (null terminated)
|-{{cellcolors|lightgrey}}
| 0x1E1 || 0x03 || 00 00 00 ||  || padding (aligned to 4 bytes boundary)
|-{{cellcolors|#99ff99}}
| 0x1E4 || 0x0C || 61 70 70 6C 69 63 61 74 69 6F 6E 00 ||  || '''application''' (null terminated)
|-
| rowspan="2" | events
|-{{cellcolors|#bbffbb}}
| 0x1F0 || 0x04 || 00 00 00 00 ||  || dummy event ?
|}
|}
When compiled with rcomage v1.1.2 using ZLIB compression MD5: 4B6C364DDA94BBF1C0A7AC9864DC4796
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 00 97 00 00 00 00 00 00 00 <span style="background:#ff0000;">10</span>  FRP....—........
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  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
00000030  00 00 00 CC FF FF FF FF <span style="background:#00ff00;">FF FF FF FF</span> 00 00 00 00  ...Ìÿÿÿÿÿÿÿÿ....
00000040  00 00 01 D4 00 00 00 1C 00 00 01 F0 00 00 00 04  ...Ô.......ð....
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  ÿÿÿÿ....ÿÿÿÿ....
00000070  00 00 01 CC 00 00 00 08 FF FF FF FF 00 00 00 00  ...Ì....ÿÿÿÿ....
00000080  FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00  ÿÿÿÿ....ÿÿÿÿ....
00000090  FF FF FF FF 00 00 00 00 FF FF FF FF FF FF FF FF  ÿÿÿÿ....ÿÿÿÿÿÿÿÿ
000000A0  FF FF FF FF <span style="background:#ffff00;">00 00 00 6C</span> <span style="background:#ffff00;">00 00 01 50</span> <span style="background:#ffff00;">00 00 00 00</span>  ÿÿÿÿ...l...P....
000000B0  <span style="background:#ff00ff;">78 DA 75 CD C1 0D 80 20 0C 05 D0 5F 4F 1C 75 0B</span>  xÚuÍÁ.€ ..Ð_O.u.
000000C0  <span style="background:#ff00ff;">B6 D0 01 58 82 18 0F 24 28 44 19 C0 A1 BD 2B 04</span>  ¶Ð.X‚..$(D.À¡½+.
000000D0  <span style="background:#ff00ff;">23 2A F0 92 9F 26 A5 B4 44 78 E3 3E 84 02 E6 73</span>  #*ð’Ÿ&¥´Dxã>„.æs
000000E0  <span style="background:#ff00ff;">7A 95 39 FE CC 51 2C 77 4F D4 E6 A8 0B FB E2 CE</span>  z•9þÌQ,wOÔæ¨.ûâÎ
000000F0  <span style="background:#ff00ff;">5A 65 0D 82 36 FE CB 08 14 F4 FB 37 C9 BF 9F EE</span>  Ze.‚6þË..ôû7É¿Ÿî
00000100  <span style="background:#ff00ff;">23 53 7C 3F 00 1A 36 39 5B 3D 01 AB 31 0E 9E B4</span>  #S|?..69[=.«1.ž´
00000110  <span style="background:#ff00ff;">56 AB 51 3A 65 16 04 17 88 21 38 F3</span>              V«Q:e...ˆ!8ó
*Changes
**<span style="background:#ff0000;">10</span> the compression setting for ZLIB
**<span style="background:#00ff00;">FF FF FF FF</span> weird
**<span style="background:#ffff00;">00 00 00 6C</span> <span style="background:#ffff00;">00 00 01 50</span> <span style="background:#ffff00;">00 00 00 00</span> the info about the compressed area that comes next (composed by: lenPacked, lenUnpacked, and lenLongestText)
**<span style="background:#ff00ff;">78 DA ...</span> the compressed area itself, includes the TOC, the pointer tables (PTR), and string tables (STR)

Latest revision as of 04:55, 30 August 2021

Unknowns[edit source]

RCO versions (aka minFirmwareVer in rcomage)[edit source]

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

		switch(rco->verId) {
			case 0x70: fputs("1.0", fp); break;
			case 0x71: fputs("1.5", fp); break;
			case 0x90: fputs("2.6", fp); break;
			case 0x95: fputs("2.7", fp); break;
			case 0x96: fputs("2.8", fp); break;
			case 0x100: fputs("3.5", fp); break;
			//case 0x107: fputs("ps3", fp); break;
			default: fprintf(fp, "unknownId0x%x", rco->verId);
		}

After extracting the contents of the RCO with RCOmage, the version is stored for rebuilding purposes in the RCOXML descriptor file as an attribute with the name minFirmwareVer

If the version is unknown is stored as unknownId0x%x using unknownId to specify the fact that is unknown + the real hex value 0x%x

Example... sysconf_plugin.rco from PS3 firmware 2.00 with version 0x106

<RcoFile UMDFlag="0" rcomageXmlVer="1.1" type="ps3" minFirmwareVer="unknownId0x106">

unknownByte[edit source]

In the xml representation of the .rco structure... every image inside the imagetree uses an unknown attribute named unknownByte. Is an attribute related with the image format and is equal to 0 in most of the PS3 images (very rarelly used)

  • After searching in ALL the images contained inside ALL .rco files from firmware 4.76... there is a total of 72 images using unknownByte="1" (and 3098 images using unknownByte="0" for a total of 3170 images inside .rco's)

from system_plugin.rco

			<Image name="tex_optionmenu_bg" src=".\RCO 476 ofw\system_plugin\Images\tex_optionmenu_bg.gim" format="gim" compression="zlib" unknownByte="1" />
			<Image name="tex_optionmenu_base" src=".\RCO 476 ofw\system_plugin\Images\tex_optionmenu_base.gim" format="gim" compression="zlib" unknownByte="1" />
  • The 2 .gim files found using unknownByte="1" has some things in common:
    • The size of both .gim file is exactlly 452KB (463.232 bytes)
    • The resolution of both images in pixels is 512x206
    • The first 0x80 bytes of the header in both is exactlly the same (see example below)

unknownByte .gim header example

Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000  2E 47 49 4D 31 2E 30 30 00 50 53 50 00 00 00 00  .GIM1.00.PSP....
00000010  00 02 00 00 00 07 11 70 00 00 00 10 00 00 00 10  .......p........
00000020  00 03 00 00 00 07 11 60 00 00 00 10 00 00 00 10  .......`........
00000030  00 04 00 00 00 07 11 50 00 07 11 50 00 00 00 10  .......P...P....
00000040  00 30 00 00 00 03 00 00 02 18 00 D8 00 20 00 10  .0.........Ø. ..
00000050  00 01 00 02 00 00 00 00 00 00 00 30 00 00 00 40  ...........0...@
00000060  00 07 11 40 00 00 00 00 00 01 00 01 00 03 00 01  ...@............
00000070  00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00  ...@............

Is not specific for .GIM image format because other image formats uses it too, here are a couple of examples from newstore_plugin.rco where is used with .JPG and .PNG

			<Image name="BackGround" src=".\RCO 476 ofw\newstore_plugin\Images\BackGround.jpg" format="jpg" compression="uncompressed" unknownByte="1" />
			<Image name="ScrollButtonRich" src=".\RCO 476 ofw mod 5\newstore_plugin\Images\ScrollButtonRich.png" format="png" compression="uncompressed" unknownByte="1" />

Is specific for PS3 (not used on PSP) as can be seen in the comments of the source code of rcomage here in line number 188

PS3 RCOs seem to have this extra element - probably something to do with planes/frames??

UMDFlag[edit source]

This attribute was named UMDFlag unofficially because it was found used in the .rco files contained inside PSP UMD discs only

The name seems not accurate enought (because PS3 cant read UMD discs) so maybe is something more generic like "disc media", though never has been found a PS3 disc containing .rco's and the HYBRID_FLAG used in the bluray contents descriptor file PS3_DISC.SFB for "music bluray" and "photo bluray" are completlly speculative

  • Speculation. Maybe is::
    • 0 = system rco
    • 1 = external rco (disc media, etc)

Hashreports[edit source]

PS3 rco's all versions[edit source]

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 rco's[edit source]

  • 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)
  • Resurssiklunssi rebuilds the .rco files and allows for two rebuild modes:
    • TRIANGLE or CROSS - only rebuilds
      • The converted files will have minFirmwareVer="1.5" (the original value is lost in the conversion)
    • SQUARE or CIRCLE - rebuilds and recompress in ZLIB
      • The converted files will have minFirmwareVer="2.6" (the original value is lost in the conversion)
PSP 6.61 official rco's
Edit-copy purple.svg.png
; Generated by QuickSFV v2.36 on 2015-12-09 at 04:49:59
; http://www.QuickSFV.org
;
;         3792  10:46.08 2014-08-09 resource\adhoc_transfer.rco
;         1816  10:45.42 2014-08-09 resource\auth_plugin.rco
;       174256  10:46.10 2014-08-09 resource\camera_plugin.rco
;          239  10:46.10 2014-08-09 resource\common_page.rco
;        41248  10:46.12 2014-08-09 resource\content_browser_plugin.rco
;        86516  10:45.42 2014-08-09 resource\dd_helper.rco
;        34552  10:45.44 2014-08-09 resource\dnas_plugin.rco
;         9672  10:45.44 2014-08-09 resource\game_install_plugin.rco
;        58732  10:46.14 2014-08-09 resource\game_plugin.rco
;        41752  10:45.46 2014-08-09 resource\htmlviewer_plugin.rco
;        69540  10:46.16 2014-08-09 resource\impose_plugin.rco
;       106236  10:46.18 2014-08-09 resource\lftv_main_plugin.rco
;        55760  10:46.18 2014-08-09 resource\lftv_rmc_univer3in1.rco
;        55728  10:46.20 2014-08-09 resource\lftv_rmc_univer3in1_jp.rco
;        19672  10:46.20 2014-08-09 resource\lftv_rmc_univerpanel.rco
;        19700  10:46.22 2014-08-09 resource\lftv_rmc_univerpanel_jp.rco
;        36832  10:46.22 2014-08-09 resource\lftv_rmc_univertuner.rco
;        37316  10:46.24 2014-08-09 resource\lftv_rmc_univertuner_jp.rco
;        17880  10:46.24 2014-08-09 resource\lftv_tuner_jp_jp.rco
;        21768  10:46.26 2014-08-09 resource\lftv_tuner_us_en.rco
;        17972  10:45.48 2014-08-09 resource\msgdialog_plugin.rco
;       192396  10:46.26 2014-08-09 resource\msvideo_main_plugin.rco
;        56828  10:46.28 2014-08-09 resource\music_browser_plugin.rco
;        36148  10:46.30 2014-08-09 resource\music_player_plugin.rco
;        77168  10:45.48 2014-08-09 resource\netconf_dialog.rco
;        17032  10:45.50 2014-08-09 resource\netplay_plugin.rco
;        96764  10:46.30 2014-08-09 resource\npadmin_plugin.rco
;        19988  10:45.50 2014-08-09 resource\npinstaller_plugin.rco
;        19740  10:45.52 2014-08-09 resource\npsignin_plugin.rco
;       228760  10:45.52 2014-08-09 resource\npsignup_plugin.rco
;       358668  10:46.32 2014-08-09 resource\oneseg_plugin.rco
;        32076  10:46.34 2014-08-09 resource\opening_plugin.rco
;       138424  10:45.54 2014-08-09 resource\osk_plugin.rco
;        65356  10:46.34 2014-08-09 resource\photo_browser_plugin.rco
;        69704  10:46.36 2014-08-09 resource\photo_player_plugin.rco
;        64636  10:46.36 2014-08-09 resource\premo_plugin.rco
;         4696  10:45.54 2014-08-09 resource\ps3scan_plugin.rco
;         4768  10:45.56 2014-08-09 resource\psn_plugin.rco
;        47156  10:46.38 2014-08-09 resource\radioshack_plugin.rco
;        27888  10:46.38 2014-08-09 resource\recommend_browser.rco
;        63348  10:46.40 2014-08-09 resource\rss_browser_plugin.rco
;        21688  10:46.40 2014-08-09 resource\rss_downloader_plugin.rco
;        12412  10:45.56 2014-08-09 resource\rss_subscriber.rco
;        55036  10:46.42 2014-08-09 resource\savedata_plugin.rco
;        50708  10:45.58 2014-08-09 resource\savedata_utility.rco
;        67364  10:45.58 2014-08-09 resource\screenshot_plugin.rco
;       309232  10:46.44 2014-08-09 resource\skype_main_plugin.rco
;       147908  10:46.00 2014-08-09 resource\store_browser_plugin.rco
;        75052  10:46.02 2014-08-09 resource\store_checkout_plugin.rco
;         9532  10:46.44 2014-08-09 resource\subs_plugin.rco
;       196768  10:46.46 2014-08-09 resource\sysconf_plugin.rco
;       212532  10:46.46 2014-08-09 resource\sysconf_plugin_about.rco
;        89012  10:46.02 2014-08-09 resource\system_plugin.rco
;         8380  10:46.04 2014-08-09 resource\system_plugin_bg.rco
;        34336  10:46.04 2014-08-09 resource\system_plugin_fg.rco
;       227684  10:46.48 2014-08-09 resource\topmenu_icon.rco
;        38716  10:46.50 2014-08-09 resource\topmenu_plugin.rco
;        19560  10:46.50 2014-08-09 resource\update_plugin.rco
;        35148  10:46.52 2014-08-09 resource\video_main_plugin.rco
;        69032  10:46.52 2014-08-09 resource\video_plugin_videotoolbar.rco
;        30260  10:46.54 2014-08-09 resource\visualizer_plugin.rco
12dda8594cf816ba8e08495dc7e6e404 *resource\adhoc_transfer.rco
a4b15cb98d7d336192a4f23fd89becec *resource\auth_plugin.rco
a2b6a283b423bb192bf469194cb0523f *resource\camera_plugin.rco
ac7b03cc83c25c324a092233c202a149 *resource\common_page.rco
567991e0656865c367a2a63c638a3efb *resource\content_browser_plugin.rco
bdd13d91c92cba7489b6d2ff1ab06723 *resource\dd_helper.rco
a25d1fb76427f885d4dff1ebdc6b6964 *resource\dnas_plugin.rco
c251b597a533604dd425c17642085192 *resource\game_install_plugin.rco
a9a54ca6a729b4889eb0c38946c3274e *resource\game_plugin.rco
ce58c869974d764d5e74b8decd938100 *resource\htmlviewer_plugin.rco
a9331bce82ded25ce4b6162544ad23af *resource\impose_plugin.rco
c7300daf23991a0f887ee09e2a931745 *resource\lftv_main_plugin.rco
481bddbc83a3717fd149d9415fbb289a *resource\lftv_rmc_univer3in1.rco
db2f0d509b894b4b2599e9fde33907be *resource\lftv_rmc_univer3in1_jp.rco
5df911bb476f504aee11f2b8b4e8a81a *resource\lftv_rmc_univerpanel.rco
2b8a092864561780f57577c2198a77ac *resource\lftv_rmc_univerpanel_jp.rco
dcff238d056a66534f5b5b3da429566f *resource\lftv_rmc_univertuner.rco
591314409e629b5652a7a86e2abe84c5 *resource\lftv_rmc_univertuner_jp.rco
b7e87e9f0fabd2adbe0b6142c2d8aa00 *resource\lftv_tuner_jp_jp.rco
4a1b10cfc4c524ab067d55e6b0c2b80f *resource\lftv_tuner_us_en.rco
e8fd6b5a97c74ba8ac19f60037b94cda *resource\msgdialog_plugin.rco
0168e69d9d76e800b36b499ad0b6d3f2 *resource\msvideo_main_plugin.rco
554bef5a943a2c72785d7c149ccc1e24 *resource\music_browser_plugin.rco
2cec835c7a19228d3a4a022f368bcdf0 *resource\music_player_plugin.rco
14d364cee4f1368ab81e4958ae4df2d3 *resource\netconf_dialog.rco
7d0c0c8156a467b9f36b183742c32708 *resource\netplay_plugin.rco
d8149083ef20062a9429e227546a1bd9 *resource\npadmin_plugin.rco
b5981ce8cf96d656643a32dd99ff0d9e *resource\npinstaller_plugin.rco
6aa77978311bf79641fc32d1092362ff *resource\npsignin_plugin.rco
116ea60df8acabb587b086f59df4dd92 *resource\npsignup_plugin.rco
1542737627b5e6911b3abc6879ec4af6 *resource\oneseg_plugin.rco
889d8d99c98157799b56ee3f24abb78e *resource\opening_plugin.rco
a3e3bf8d061604511f51b7cf7116cb0e *resource\osk_plugin.rco
e34183accde943e73fa0f7add2b41cb3 *resource\photo_browser_plugin.rco
d094fe9d052993abff9fd062a1d56b4f *resource\photo_player_plugin.rco
008747366893e5f27539435772cb41a9 *resource\premo_plugin.rco
b47346ec59ec9190d80896d13b64d68d *resource\ps3scan_plugin.rco
e40a9edac933169e87f6920d2178613a *resource\psn_plugin.rco
5ee0ee77e0131c724a8da85ef444fe40 *resource\radioshack_plugin.rco
3cf617c6716c5dea97f88c2d4ff23f14 *resource\recommend_browser.rco
256057589ad43c9560afae875544718e *resource\rss_browser_plugin.rco
4bee480a8782dbb1c4462e8073dc3000 *resource\rss_downloader_plugin.rco
869ddf18f6f614fc2b8f084c76129b37 *resource\rss_subscriber.rco
648877f29b74808937d8450d3522ef31 *resource\savedata_plugin.rco
1070d80c07a9f852747c91065990463a *resource\savedata_utility.rco
32b197c83b548fefd7667bd05c002ec1 *resource\screenshot_plugin.rco
bfca32bd7dbfae6bbf5e97d7f92387ca *resource\skype_main_plugin.rco
7c757bcf286de7a95f98e8824f5f4bb1 *resource\store_browser_plugin.rco
7a0df8f7d4a41675ac4ed69c6e718262 *resource\store_checkout_plugin.rco
1ca842d0d11dca81e3d6967d6a32403c *resource\subs_plugin.rco
5d166ea92abd13dace9c2c2f7087ded8 *resource\sysconf_plugin.rco
141f8d5e152867f6c44415402633e49a *resource\sysconf_plugin_about.rco
ea3616f8c30c1500cab7bb8f3ead3cec *resource\system_plugin.rco
ac819b2d9ac4d82a94f21251611fb0cf *resource\system_plugin_bg.rco
197e1b1094e782c9cfee6a46ef911c01 *resource\system_plugin_fg.rco
042c815116182ca04b671d7cd67bb8ea *resource\topmenu_icon.rco
872bdf93cc037784f0e1c6b8074980c1 *resource\topmenu_plugin.rco
cfe05f8cf126014c5fd33d5953bede27 *resource\update_plugin.rco
4354bd14048c4e1b4e452c970dbcb5cf *resource\video_main_plugin.rco
2163c6aa8c8ff38e25a864118cbeaadd *resource\video_plugin_videotoolbar.rco
015c0dc4be2cfe0bdb78508dd6e60835 *resource\visualizer_plugin.rco
PSP 6.60 and 6.61 firmware. RCO hashes after resurssiklunssi rebuild (cross option)
Edit-copy purple.svg.png
; Generated by QuickSFV v2.36 on 2015-12-13 at 03:40:27
; http://www.QuickSFV.org
;
;        13136  09:25.04 2011-08-16 resource\adhoc_transfer.rco
;         3516  09:25.04 2011-08-16 resource\auth_plugin.rco
;       122728  09:25.04 2011-08-16 resource\bluetooth_plugin.rco
;       267876  09:25.06 2011-08-16 resource\camera_plugin.rco
;          356  09:25.06 2011-08-16 resource\common_page.rco
;        59056  09:25.08 2011-08-16 resource\content_browser_plugin.rco
;        86648  09:25.08 2011-08-16 resource\dd_helper.rco
;        34668  09:25.08 2011-08-16 resource\dnas_plugin.rco
;        35228  09:25.08 2011-08-16 resource\game_install_plugin.rco
;       209388  09:25.08 2011-08-16 resource\game_plugin.rco
;        43980  09:25.08 2011-08-16 resource\htmlviewer_plugin.rco
;        85816  09:25.10 2011-08-16 resource\impose_plugin.rco
;       392520  09:25.10 2011-08-16 resource\lftv_main_plugin.rco
;        61064  09:25.12 2011-08-16 resource\lftv_rmc_univer3in1.rco
;        61008  09:25.12 2011-08-16 resource\lftv_rmc_univer3in1_jp.rco
;        21840  09:25.14 2011-08-16 resource\lftv_rmc_univerpanel.rco
;        21868  09:25.14 2011-08-16 resource\lftv_rmc_univerpanel_jp.rco
;        40720  09:25.14 2011-08-16 resource\lftv_rmc_univertuner.rco
;        41176  09:25.14 2011-08-16 resource\lftv_rmc_univertuner_jp.rco
;        19132  09:25.16 2011-08-16 resource\lftv_tuner_jp_jp.rco
;        22916  09:25.16 2011-08-16 resource\lftv_tuner_us_en.rco
;        99440  09:25.16 2011-08-16 resource\msgdialog_plugin.rco
;       415232  09:25.18 2011-08-16 resource\msvideo_main_plugin.rco
;       142052  09:25.20 2011-08-16 resource\music_browser_plugin.rco
;        78772  09:25.20 2011-08-16 resource\music_player_plugin.rco
;       345368  09:25.20 2011-08-16 resource\netconf_dialog.rco
;        57632  09:25.20 2011-08-16 resource\netplay_plugin.rco
;       318228  09:25.22 2011-08-16 resource\npadmin_plugin.rco
;        83124  09:25.22 2011-08-16 resource\npinstaller_plugin.rco
;        69780  09:25.22 2011-08-16 resource\npsignin_plugin.rco
;       631216  09:25.24 2011-08-16 resource\npsignup_plugin.rco
;       399672  09:25.28 2011-08-16 resource\oneseg_plugin.rco
;        84784  09:25.28 2011-08-16 resource\opening_plugin.rco
;       222536  09:25.32 2011-08-16 resource\osk_plugin.rco
;       149028  09:25.32 2011-08-16 resource\photo_browser_plugin.rco
;       152816  09:25.34 2011-08-16 resource\photo_player_plugin.rco
;       156724  09:25.34 2011-08-16 resource\premo_plugin.rco
;        14536  09:25.34 2011-08-16 resource\ps3scan_plugin.rco
;        11868  09:25.34 2011-08-16 resource\psn_plugin.rco
;        74100  09:25.36 2011-08-16 resource\radioshack_plugin.rco
;        60580  09:25.36 2011-08-16 resource\recommend_browser.rco
;       158248  09:25.36 2011-08-16 resource\rss_browser_plugin.rco
;        82412  09:25.36 2011-08-16 resource\rss_downloader_plugin.rco
;        33836  09:25.38 2011-08-16 resource\rss_subscriber.rco
;       144236  09:25.38 2011-08-16 resource\savedata_plugin.rco
;       134600  09:25.38 2011-08-16 resource\savedata_utility.rco
;        73180  09:25.40 2011-08-16 resource\screenshot_plugin.rco
;       630580  09:25.44 2011-08-16 resource\skype_main_plugin.rco
;        10240  09:25.44 2011-08-16 resource\slide_plugin.rco
;       325912  09:25.48 2011-08-16 resource\store_browser_plugin.rco
;       289760  09:25.48 2011-08-16 resource\store_checkout_plugin.rco
;        33348  09:25.48 2011-08-16 resource\subs_plugin.rco
;       620116  09:25.50 2011-08-16 resource\sysconf_plugin.rco
;       228364  09:25.58 2011-08-16 resource\sysconf_plugin_about.rco
;       107104  09:26.00 2011-08-16 resource\system_plugin.rco
;        11128  09:26.00 2011-08-16 resource\system_plugin_bg.rco
;        46536  09:26.00 2011-08-16 resource\system_plugin_fg.rco
;       297364  09:26.04 2011-08-16 resource\topmenu_icon.rco
;       122360  09:26.04 2011-08-16 resource\topmenu_plugin.rco
;        75916  09:26.04 2011-08-16 resource\update_plugin.rco
;       123256  09:26.04 2011-08-16 resource\video_main_plugin.rco
;       104916  09:26.06 2011-08-16 resource\video_plugin_videotoolbar.rco
;        37364  09:25.04 2011-08-16 resource\visualizer_plugin.rco
a1675f066c6ae9281602011c2af891e3 *resource\adhoc_transfer.rco
2e4725bb3f646929310577eccd42bcda *resource\auth_plugin.rco
ba5fc7ba16cd635590065821e1d1a062 *resource\bluetooth_plugin.rco
87a0d9279116b0307dfd5bbf11548cb7 *resource\camera_plugin.rco
5dc413e6007b4ee01c7bfb13702a25c4 *resource\common_page.rco
703a5cc179f68f8e0edd7d462c86af8d *resource\content_browser_plugin.rco
9dd3b961eec1afb4f30de7240deecb9b *resource\dd_helper.rco
da50ab9a01701b909d352c68e869b051 *resource\dnas_plugin.rco
67934570455d3f0038c7ee670d0027b5 *resource\game_install_plugin.rco
16c269d581a45ecdfcfeb1259a5370ac *resource\game_plugin.rco
fd174ab811b870fe084a8dbadc3e6aff *resource\htmlviewer_plugin.rco
b8e34d8877ace0772047662dcbfa9d48 *resource\impose_plugin.rco
2ad01831bf19300b08ba78f35baff791 *resource\lftv_main_plugin.rco
c3e485efdee1917d3a7f8da1b0722fa5 *resource\lftv_rmc_univer3in1.rco
6cecbdeaba972d4dba0fa4df9f43db8a *resource\lftv_rmc_univer3in1_jp.rco
095b83e8a2ef37e64306c4bc8243870e *resource\lftv_rmc_univerpanel.rco
7dea3b80c872ac02e7eed23b7cb4f5ed *resource\lftv_rmc_univerpanel_jp.rco
c5061621a1389449dbc4f1ef865a6525 *resource\lftv_rmc_univertuner.rco
53b56ea2f90979224253c4664c43ca1c *resource\lftv_rmc_univertuner_jp.rco
75e42b4f053fef8a60e16264be99b07a *resource\lftv_tuner_jp_jp.rco
be3d5738d8ca9d687d01a4b6ac7c81d4 *resource\lftv_tuner_us_en.rco
ea58d9e228fc76beb34464753a567c67 *resource\msgdialog_plugin.rco
67ec6d707a1b326a23848a73e6e38414 *resource\msvideo_main_plugin.rco
42fd399e35c4ab774d6aa1ff52a17b8c *resource\music_browser_plugin.rco
2d98313ca7ef755d0390a2537237ce6b *resource\music_player_plugin.rco
755c3d4b00fa4b3158793f852823ff12 *resource\netconf_dialog.rco
6c0e77bd52a1a5de204da5ed4efd4f82 *resource\netplay_plugin.rco
42a5c448463117a30ce7c2ae0354821e *resource\npadmin_plugin.rco
221335417818d5d49cf616108a511e2d *resource\npinstaller_plugin.rco
1f51c4641326e8a1b6b7db11c0f70230 *resource\npsignin_plugin.rco
93239e36a519deeaba08c53640ccd701 *resource\npsignup_plugin.rco
f6a52e7a415799eb9ccac914e7120d2e *resource\oneseg_plugin.rco
578c90574e9a0cc54dee75a1768f93a5 *resource\opening_plugin.rco
00cb25b6b6500328282d1eb82ee3a407 *resource\osk_plugin.rco
fdfdc91a92eac9030c74475f09027ed5 *resource\photo_browser_plugin.rco
9fe85b676045294fddffbbf0f1ff6037 *resource\photo_player_plugin.rco
e8eff25adc1ef625cf831c6f9aef00df *resource\premo_plugin.rco
f840998a7d8ffea49577c0bcdbab740d *resource\ps3scan_plugin.rco
33c720b191c0813071a49f3e4b9d9343 *resource\psn_plugin.rco
dd815ede6a4ef114e2231229bfb3d650 *resource\radioshack_plugin.rco
c45f50ec4748041a4bd95a8d3856ee50 *resource\recommend_browser.rco
ef6b3321f77c1ad0d909b3d8e0682f8b *resource\rss_browser_plugin.rco
d58c9bfd3b957c785af9baa8f04be2ef *resource\rss_downloader_plugin.rco
c68b265b6e73788fbf8084613e5167b2 *resource\rss_subscriber.rco
7899063074fe7719af69a1b0415a2277 *resource\savedata_plugin.rco
9c604489e6353d3d9ef77656ac771bd7 *resource\savedata_utility.rco
855aa13fbf1d4e55bc4a545c0fb7018d *resource\screenshot_plugin.rco
ad03375b3c538c1891e5f94cb457d137 *resource\skype_main_plugin.rco
1199eb0aa7f66c7085c273478896141b *resource\slide_plugin.rco
a6927fcf418ab325e76babfc0f33f4a3 *resource\store_browser_plugin.rco
c22158cbda728794b225fa4bdea5629e *resource\store_checkout_plugin.rco
8d829325604f6d31abf6d538e55f344d *resource\subs_plugin.rco
abb42e5a76b34f040a8b8ccd9b6d20ff *resource\sysconf_plugin.rco
c189987bc1ded8c5abec8c41652092de *resource\sysconf_plugin_about.rco
48cf6b828fd3f0cd038d7864b1ba9b97 *resource\system_plugin.rco
e0ae8c6017249b9431e5af9f1bbe70b3 *resource\system_plugin_bg.rco
001a30efa22c86234c8c2ddaf20a2cd2 *resource\system_plugin_fg.rco
ee617fd8b6f6cc68f55192e6ac9edd4e *resource\topmenu_icon.rco
ef3d3530837c7032f97ed066c4f14aa9 *resource\topmenu_plugin.rco
50313607a775b2615743f6f6c04c5ea5 *resource\update_plugin.rco
3260a7ba5981f7d9f6b8ff2b07fb60f0 *resource\video_main_plugin.rco
4fd833dc230d78d2827ad85f58685aa6 *resource\video_plugin_videotoolbar.rco
5b1e65248b962b983cf0553f662c2050 *resource\visualizer_plugin.rco
  • PSP firmware 1.00 contains only 21 .rco files (all them uses ZLIB, none of them uses RLZ)
PSP 1.00 official rco's
Edit-copy purple.svg.png
; Generated by QuickSFV v2.36 on 2015-12-13 at 03:51:28
; http://www.QuickSFV.org
;
;         4556  15:35.20 2005-05-13 resource\auth_plugin.rco
;        57148  15:35.50 2005-05-13 resource\game_plugin.rco
;        87828  15:36.48 2005-05-13 resource\impose_plugin.rco
;       158124  15:37.24 2005-05-13 resource\msvideo_plugin.rco
;       220976  15:37.54 2005-05-13 resource\music_plugin.rco
;        68552  15:39.42 2005-05-13 resource\netconf_dialog.rco
;        12560  15:40.28 2005-05-13 resource\netplay_plugin.rco
;       254480  15:41.00 2005-05-13 resource\opening_plugin.rco
;       318548  15:41.32 2005-05-13 resource\osk_plugin.rco
;       121384  15:42.00 2005-05-13 resource\osk_utility.rco
;       182604  15:42.30 2005-05-13 resource\photo_plugin.rco
;        68328  15:42.58 2005-05-13 resource\savedata_plugin.rco
;        64428  15:43.36 2005-05-13 resource\savedata_utility.rco
;       151540  15:44.08 2005-05-13 resource\sysconf_plugin.rco
;        98136  15:44.42 2005-05-13 resource\system_plugin.rco
;        10776  15:45.10 2005-05-13 resource\system_plugin_bg.rco
;        45508  15:45.38 2005-05-13 resource\system_plugin_fg.rco
;       216320  15:46.06 2005-05-13 resource\topmenu_plugin.rco
;        14048  15:46.36 2005-05-13 resource\update_plugin.rco
;        26464  15:47.04 2005-05-13 resource\video_plugin.rco
;       115888  15:47.34 2005-05-13 resource\video_plugin_videotoolbar.rco
6eb000c8e1f71209b359204a0bb08310 *resource\auth_plugin.rco
9cad40a094ed76691da423f84f6ac7ef *resource\game_plugin.rco
8dac09480ffcf583b050f829e8eda065 *resource\impose_plugin.rco
16b48389d9b1138a2830be6d95415d4d *resource\msvideo_plugin.rco
4e2639d983ee90b120a8ecfb39805fbf *resource\music_plugin.rco
dae959afaba250140331aaca2a70fcf2 *resource\netconf_dialog.rco
30cb45c1485423e803a9abf695535e25 *resource\netplay_plugin.rco
b9f1af5c8db600f462d2f7599c83aed3 *resource\opening_plugin.rco
0db9b5786b31e909961d7f1cf121263b *resource\osk_plugin.rco
1397970cf810d85f856c829dd892da0a *resource\osk_utility.rco
98781c871cd690636002fc9de8719151 *resource\photo_plugin.rco
936dfb0fd59a96e7a31db4ff75f1ce84 *resource\savedata_plugin.rco
457ff88995e7dae078226a7f27f821a0 *resource\savedata_utility.rco
3aea9db6095921053eccfcc844cc0079 *resource\sysconf_plugin.rco
bb08685643b495fa9f4e4ef3b8731851 *resource\system_plugin.rco
aa575ee97093c7869b4802aae33b87a6 *resource\system_plugin_bg.rco
47382bd7aba1b89863de176a47a0a27a *resource\system_plugin_fg.rco
6279ccf07bf4c3e2fc17109ae6138477 *resource\topmenu_plugin.rco
840248d2a27e0d8c6073816edd220747 *resource\update_plugin.rco
ef87b1df11ab6b00986b1ce6395066c4 *resource\video_plugin.rco
87d878f00d9355b873adcac6f79927f6 *resource\video_plugin_videotoolbar.rco

Examples (rcomage builds)[edit source]

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

Also, i think rcomage has several problems (no offense intended is a great tool everybody loves) in how the areas of the structure are divided, some names that can be improved, some definition of lengths of partially known or unknown values, etc... the examples are going to look pretty similar to the examples i wrote at the bottom of CXML Containers page (the concept of how it works is the same)--Sandungas (talk) 18:48, 10 September 2016 (UTC)

ImageTree with 1 image[edit source]

This is a basic example of how the files are stored inside the container, similar method is used for all files (images, models, sounds, and fonts ?)

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

<RcoFile UMDFlag="0" rcomageXmlVer="1.1" type="ps3" minFirmwareVer="unknownId0x130">
	<MainTree name="test">
		<ImageTree>
			<Image name="image_test" src="image_test.gim" format="gim" compression="uncompressed" unknownByte="1" />
		</ImageTree>
	</MainTree>
</RcoFile>

When compiled MD5: E4C203A3D4B0B6854C90CD576E028545

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 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  ...¤ÿÿÿÿÿÿÿÿÿÿÿÿ
00000020  FF FF FF FF 00 00 00 CC FF FF FF FF FF FF FF FF  ÿÿÿÿ...Ìÿÿÿÿÿÿÿÿ
00000030  FF FF FF FF FF FF FF FF 00 00 01 34 00 00 00 00  ÿÿÿÿÿÿÿÿ...4....
00000040  00 00 01 34 00 00 00 14 00 00 01 48 00 00 00 00  ...4.......H....
00000050  FF FF FF FF 00 00 00 00 00 00 01 2C 00 00 00 08  ÿÿÿÿ.......,....
00000060  FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00  ÿÿÿÿ....ÿÿÿÿ....
00000070  FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00  ÿÿÿÿ....ÿÿÿÿ....
00000080  00 00 01 48 00 00 00 08 FF FF FF FF 00 00 00 00  ...H....ÿÿÿÿ....
00000090  FF FF FF FF 00 00 00 00 FF FF FF FF FF FF FF FF  ÿÿÿÿ....ÿÿÿÿÿÿÿÿ
000000A0  FF FF FF FF 01 01 00 00 00 00 00 00 00 00 00 00  ÿÿÿÿ............
000000B0  00 00 00 28 00 00 00 01 00 00 00 00 00 00 00 00  ...(............
000000C0  00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00  ................
000000D0  FF FF FF FF 00 00 00 00 00 00 00 28 00 00 00 01  ÿÿÿÿ.......(....
000000E0  00 00 00 00 00 00 00 00 00 00 00 28 00 00 00 00  ...........(....
000000F0  00 00 00 00 04 01 00 00 00 00 00 08 00 00 00 28  ...............(
00000100  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000110  00 00 00 28 00 00 00 00 00 00 00 00 00 05 01 00  ...(............
00000120  00 00 00 08 00 00 00 00 00 00 00 01 00 00 00 F4  ...............ô
00000130  00 00 00 00 74 65 73 74 00 00 00 00 69 6D 61 67  ....test....imag
00000140  65 5F 74 65 73 74 00 00 88 88 88 88 88 88 88 88  e_test..ˆˆˆˆˆˆˆˆ
Areas Offset Length Example Name Notes
Header
0x00 0x04 FRP magic FRP in big endian
0x04 0x04 00 00 01 30 version 0x130 = one of the firmwares for PS3
0x08 0x04 00 00 00 00 unknown
0x0C 0x04 00 00 00 00 compress_header 0x00 = uncompressed
0x10 0x04 00 00 00 A4 toc_maintree_absolute_offset MainTree at absolute offset 0xA4
0x14 0x04 FF FF FF FF toc_scripttree_absolute_offset
0x18 0x04 FF FF FF FF toc_languagetree_absolute_offset
0x1C 0x04 FF FF FF FF toc_soundtree_absolute_offset
0x20 0x04 FF FF FF FF toc_modeltree_absolute_offset
0x24 0x04 00 00 00 CC toc_imagetree_absolute_offset ImageTree at absolute offset 0xCC
0x28 0x04 FF FF FF FF toc_unknowntree_absolute_offset
0x2C 0x04 FF FF FF FF toc_fonttree_absolute_offset
0x30 0x04 FF FF FF FF toc_objecttree_absolute_offset
0x34 0x04 FF FF FF FF toc_animationtree_absolute_offset
0x38 0x04 00 00 01 34 strings_texts_absolute_offset strings texts table at absolute offset 0x134
0x3C 0x04 00 00 00 00 strings_texts_length strings texts table is empty
0x40 0x04 00 00 01 34 strings_labels_absolute_offset strings labels table at absolute offset 0x134
0x44 0x04 00 00 00 14 strings_labels_length strings labels size 0x14
0x48 0x04 00 00 01 48 strings_events_absolute_offset strings events table at absolute offset 0x148
0x4C 0x04 00 00 00 00 strings_events_length strings events table is empty
0x50 0x04 FF FF FF FF text_pointer_table_offset
0x54 0x04 00 00 00 00 text_pointer_table_length
0x58 0x04 00 00 01 2C image_pointer_table_offset
0x5C 0x04 00 00 00 00 image_pointer_table_length
0x60 0x04 FF FF FF FF model_pointer_table_offset
0x64 0x04 00 00 00 00 model_pointer_table_length
0x68 0x04 FF FF FF FF sound_pointer_table_offset
0x6C 0x04 00 00 00 00 sound_pointer_table_length
0x70 0x04 FF FF FF FF object_pointer_table_offset
0x74 0x04 00 00 00 00 object_pointer_table_length
0x78 0x04 FF FF FF FF anim_pointer_table_offset
0x7C 0x04 00 00 00 00 anim_pointer_table_length
0x80 0x04 00 00 01 48 image_data_section_offset
0x84 0x04 00 00 00 08 image_data_section_length
0x88 0x04 FF FF FF FF sound_data_section_offset
0x8C 0x04 00 00 00 00 sound_data_section_length
0x90 0x04 FF FF FF FF model_data_section_offset
0x94 0x04 00 00 00 00 model_data_section_length
0x98 0x04 FF FF FF FF unknown
0x9C 0x04 FF FF FF FF unknown
0xA0 0x04 FF FF FF FF unknown
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
0xB0 0x04 00 00 00 28 entry_size
0xB4 0x04 00 00 00 01 children_number
0xB8 0x04 00 00 00 00 next_entry_offset
0xBC 0x04 00 00 00 00 previous_entry_offset
0xC0 0x04 00 00 00 00 parent_offset
0xC4 0x04 00 00 00 00 unknown
0xC8 0x04 00 00 00 00 unknown
0xCC 0x01 04 entry_type 0x4=ImageTree
0xCD 0x01 00 hierarchy_depth
0xCE 0x02 00 00 unknown
0xD0 0x04 FF FF FF FF entry_label_offset no label
0xD4 0x04 00 00 00 00 entry_header_size
0xD8 0x04 00 00 00 28 entry_size
0xDC 0x04 00 00 00 01 children_number
0xE0 0x04 00 00 00 00 next_entry_offset
0xE4 0x04 00 00 00 00 previous_entry_offset
0xE8 0x04 00 00 00 28 parent_offset
0xEC 0x04 00 00 00 00 unknown
0xF0 0x04 00 00 00 00 unknown
0xF4 0x01 04 entry_type 0x4=ImageTree
0xF5 0x01 01 hierarchy_depth
0xF6 0x02 00 00 unknown
0xF8 0x04 00 00 00 08 entry_label_offset image_test
0xFC 0x04 00 00 00 28 entry_header_size
0x100 0x04 00 00 00 00 entry_size
0x104 0x04 00 00 00 00 children_number
0x108 0x04 00 00 00 00 next_entry_offset
0x10C 0x04 00 00 00 00 previous_entry_offset
0x110 0x04 00 00 00 28 parent_offset
0x114 0x04 00 00 00 00 unknown
0x118 0x04 00 00 00 00 unknown
0x11C 0x02 00 05 file_format 0x5=GIM
0x11E 0x01 01 unknown
0x11F 0x01 00 file_compression 0x0=NONE
0x120 0x04 00 00 00 08 file_size
0x124 0x04 00 00 00 00 file_offset
0x128 0x04 00 00 00 01 unknown
pointers
0x12C 0x04 00 00 00 F4
0x130 0x04 00 00 00 00
texts
0x134 0x00 text table is empty
labels
0x134 0x05 74 65 73 74 00 test (null terminated)
0x139 0x03 00 00 00 padding (aligned to 4 bytes boundary)
0x13C 0x0B 69 6D 61 67 65 5F 74 65 73 74 00 image_test (null terminated)
0x147 0x01 00 padding (aligned to 4 bytes boundary)
events
0x148 0x00 events table is empty
images
0x148 0x8 0x8888888888888888 image_test.gim

When compiled (with zlib header compression) MD5: E73D8E195D7A344294AB84A03E6662A1

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 01 30 00 00 00 00 00 00 00 10  FRP....0........
00000010  00 00 00 A4 FF FF FF FF FF FF FF FF FF FF FF FF  ...¤ÿÿÿÿÿÿÿÿÿÿÿÿ
00000020  FF FF FF FF 00 00 00 CC FF FF FF FF FF FF FF FF  ÿÿÿÿ...Ìÿÿÿÿÿÿÿÿ
00000030  FF FF FF FF FF FF FF FF FF FF FF FF 00 00 00 00  ÿÿÿÿÿÿÿÿÿÿÿÿ....
00000040  00 00 01 34 00 00 00 14 00 00 01 48 00 00 00 00  ...4.......H....
00000050  FF FF FF FF 00 00 00 00 00 00 01 2C 00 00 00 08  ÿÿÿÿ.......,....
00000060  FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00  ÿÿÿÿ....ÿÿÿÿ....
00000070  FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00  ÿÿÿÿ....ÿÿÿÿ....
00000080  00 00 00 F4 00 00 00 08 FF FF FF FF 00 00 00 00  ...ô....ÿÿÿÿ....
00000090  FF FF FF FF 00 00 00 00 FF FF FF FF FF FF FF FF  ÿÿÿÿ....ÿÿÿÿÿÿÿÿ
000000A0  FF FF FF FF 00 00 00 44 00 00 00 A4 00 00 00 00  ÿÿÿÿ...D...¤....
000000B0  78 DA 75 8A C1 0A 00 10 10 44 6D 51 3E C5 5F C9  xÚuŠÁ....DmQ>Å_É
000000C0  61 93 83 13 9F EE CE 6E 53 28 79 35 ED CE 6B 88  a“ƒ.ŸîÎnS(y5íÎkˆ
000000D0  CC 4D 90 88 79 B1 92 29 7C 76 61 EF 60 3D DC C3  ÌM.ˆy±’)|vaï`=ÜÃ
000000E0  71 8E B0 03 5A 86 3E 9D 5B D7 5B 6A CA 1C D1 16  qŽ°.Z†>.[×[jÊ.Ñ.
000000F0  84 BD 0B BF 88 88 88 88 88 88 88 88              „½.¿ˆˆˆˆˆˆˆˆ
  • Changes
    • 10 the "compression header" setting with zlib (is not actually compressing the header, the term is not accurate)
    • FF FF FF FF weird
    • 00 00 00 F4 the offset where the image data starts, because the area before the image data has been compressed his position has been displaced
    • 00 00 00 44 00 00 00 A4 00 00 00 00 the info about the compressed area that comes next (composed by: lenPacked, lenUnpacked, and lenLongestText)
    • 78 DA ... the compressed area itself, includes the whole TOC, the pointers to the TOC, and all the strings tables (languages, labels, and events)

ImageTree with 2 images[edit source]

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

<RcoFile UMDFlag="0" rcomageXmlVer="1.1" type="ps3" minFirmwareVer="unknownId0x130">
	<MainTree name="test">
		<ImageTree>
			<Image name="image2_test" src="image2_test.gim" format="gim" compression="uncompressed" unknownByte="1" />
			<Image name="image3_test" src="image3_test.gim" format="gim" compression="zlib" unknownByte="0" />
		</ImageTree>
	</MainTree>
</RcoFile>

When compiled MD5: 4E69E7E88F0872C71D007A21478FA1D1

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 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  ...¤ÿÿÿÿÿÿÿÿÿÿÿÿ
00000020  FF FF FF FF 00 00 00 CC FF FF FF FF FF FF FF FF  ÿÿÿÿ...Ìÿÿÿÿÿÿÿÿ
00000030  FF FF FF FF FF FF FF FF 00 00 01 70 00 00 00 00  ÿÿÿÿÿÿÿÿ...p....
00000040  00 00 01 70 00 00 00 20 00 00 01 90 00 00 00 00  ...p... ........
00000050  FF FF FF FF 00 00 00 00 00 00 01 68 00 00 00 08  ÿÿÿÿ.......h....
00000060  FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00  ÿÿÿÿ....ÿÿÿÿ....
00000070  FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00  ÿÿÿÿ....ÿÿÿÿ....
00000080  00 00 01 90 00 00 00 14 FF FF FF FF 00 00 00 00  ........ÿÿÿÿ....
00000090  FF FF FF FF 00 00 00 00 FF FF FF FF FF FF FF FF  ÿÿÿÿ....ÿÿÿÿÿÿÿÿ
000000A0  FF FF FF FF 01 01 00 00 00 00 00 00 00 00 00 00  ÿÿÿÿ............
000000B0  00 00 00 28 00 00 00 01 00 00 00 00 00 00 00 00  ...(............
000000C0  00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00  ................
000000D0  FF FF FF FF 00 00 00 00 00 00 00 28 00 00 00 02  ÿÿÿÿ.......(....
000000E0  00 00 00 00 00 00 00 00 00 00 00 28 00 00 00 00  ...........(....
000000F0  00 00 00 00 04 01 00 00 00 00 00 08 00 00 00 28  ...............(
00000100  00 00 00 00 00 00 00 00 00 00 00 38 00 00 00 00  ...........8....
00000110  00 00 00 28 00 00 00 00 00 00 00 00 00 05 01 00  ...(............
00000120  00 00 00 02 00 00 00 00 00 00 00 01 04 01 00 00  ................
00000130  00 00 00 14 00 00 00 28 00 00 00 00 00 00 00 00  .......(........
00000140  00 00 00 00 00 00 00 38 00 00 00 60 00 00 00 00  .......8...`....
00000150  00 00 00 00 00 05 00 01 00 00 00 0E 00 00 00 04  ................
00000160  00 00 00 01 00 00 00 03 00 00 00 F4 00 00 01 2C  ...........ô...,
00000170  74 65 73 74 00 00 00 00 69 6D 61 67 65 32 5F 74  test....image2_t
00000180  65 73 74 00 69 6D 61 67 65 33 5F 74 65 73 74 00  est.image3_test.
00000190  22 22 00 00 78 DA 01 03 00 FC FF 33 33 33 01 35  ""..xÚ...üÿ333.5
000001A0  00 9A 00 00                                      .š..
Areas Offset Length Example Name Notes
Header
0x00 0x04 FRP magic FRP in big endian
0x04 0x04 00 00 01 30 version 0x130 = one of the firmwares for PS3
0x08 0x04 00 00 00 00 unknown
0x0C 0x04 00 00 00 00 compress_header 0x00 = uncompressed
0x10 0x04 00 00 00 A4 toc_maintree_absolute_offset MainTree at absolute offset 0xA4
0x14 0x04 FF FF FF FF toc_scripttree_absolute_offset
0x18 0x04 FF FF FF FF toc_languagetree_absolute_offset
0x1C 0x04 FF FF FF FF toc_soundtree_absolute_offset
0x20 0x04 FF FF FF FF toc_modeltree_absolute_offset
0x24 0x04 00 00 00 CC toc_imagetree_absolute_offset ImageTree at absolute offset 0xCC
0x28 0x04 FF FF FF FF toc_unknowntree_absolute_offset
0x2C 0x04 FF FF FF FF toc_fonttree_absolute_offset
0x30 0x04 FF FF FF FF toc_objecttree_absolute_offset
0x34 0x04 FF FF FF FF toc_animationtree_absolute_offset
0x38 0x04 00 00 01 70 strings_texts_absolute_offset strings texts table at absolute offset 0x170
0x3C 0x04 00 00 00 00 strings_texts_length strings texts table is empty
0x40 0x04 00 00 01 70 strings_labels_absolute_offset strings labels table at absolute offset 0x170
0x44 0x04 00 00 00 20 strings_labels_length strings labels size 0x20
0x48 0x04 00 00 01 90 strings_events_absolute_offset strings events table at absolute offset 0x190
0x4C 0x04 00 00 00 00 strings_events_length strings events table is empty
0x50 0x04 FF FF FF FF text_pointer_table_offset
0x54 0x04 00 00 00 00 text_pointer_table_length
0x58 0x04 00 00 01 68 image_pointer_table_offset
0x5C 0x04 00 00 00 08 image_pointer_table_length
0x60 0x04 FF FF FF FF model_pointer_table_offset
0x64 0x04 00 00 00 00 model_pointer_table_length
0x68 0x04 FF FF FF FF sound_pointer_table_offset
0x6C 0x04 00 00 00 00 sound_pointer_table_length
0x70 0x04 FF FF FF FF object_pointer_table_offset
0x74 0x04 00 00 00 00 object_pointer_table_length
0x78 0x04 FF FF FF FF anim_pointer_table_offset
0x7C 0x04 00 00 00 00 anim_pointer_table_length
0x80 0x04 00 00 01 90 image_data_section_offset
0x84 0x04 00 00 00 14 image_data_section_length
0x88 0x04 FF FF FF FF sound_data_section_offset
0x8C 0x04 00 00 00 00 sound_data_section_length
0x90 0x04 FF FF FF FF model_data_section_offset
0x94 0x04 00 00 00 00 model_data_section_length
0x98 0x04 FF FF FF FF unknown
0x9C 0x04 FF FF FF FF unknown
0xA0 0x04 FF FF FF FF unknown
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
0xB0 0x04 00 00 00 28 entry_size
0xB4 0x04 00 00 00 01 children_number
0xB8 0x04 00 00 00 00 next_entry_offset
0xBC 0x04 00 00 00 00 previous_entry_offset
0xC0 0x04 00 00 00 00 parent_offset
0xC4 0x04 00 00 00 00 unknown
0xC8 0x04 00 00 00 00 unknown
0xCC 0x01 04 entry_type 0x4=ImageTree
0xCD 0x01 00 hierarchy_depth
0xCE 0x02 00 00 unknown
0xD0 0x04 FF FF FF FF entry_label_offset no label
0xD4 0x04 00 00 00 00 entry_header_size
0xD8 0x04 00 00 00 28 entry_size
0xDC 0x04 00 00 00 02 children_number
0xE0 0x04 00 00 00 00 next_entry_offset
0xE4 0x04 00 00 00 00 previous_entry_offset
0xE8 0x04 00 00 00 28 parent_offset
0xEC 0x04 00 00 00 00 unknown
0xF0 0x04 00 00 00 00 unknown
0xF4 0x01 04 entry_type 0x4=ImageTree
0xF5 0x01 01 hierarchy_depth
0xF6 0x02 00 00 unknown
0xF8 0x04 00 00 00 08 entry_label_offset image2_test
0xFC 0x04 00 00 00 28 entry_header_size
0x100 0x04 00 00 00 00 entry_size
0x104 0x04 00 00 00 00 children_number
0x108 0x04 00 00 00 38 next_entry_offset
0x10C 0x04 00 00 00 00 previous_entry_offset
0x110 0x04 00 00 00 28 parent_offset
0x114 0x04 00 00 00 00 unknown
0x118 0x04 00 00 00 00 unknown
0x11C 0x02 00 05 file_format 0x5=GIM
0x11E 0x01 01 unknown
0x11F 0x01 00 file_compression 0x0=NONE
0x120 0x04 00 00 00 02 file_size
0x124 0x04 00 00 00 00 file_offset
0x128 0x04 00 00 00 01 unknown
0x12C 0x01 04 entry_type 0x4=ImageTree
0x12D 0x01 01 hierarchy_depth
0x12E 0x02 00 00 unknown
0x130 0x04 00 00 00 14 entry_label_offset image3_test
0x134 0x04 00 00 00 28 entry_header_size
0x138 0x04 00 00 00 00 entry_size
0x13C 0x04 00 00 00 00 children_number
0x140 0x04 00 00 00 00 next_entry_offset
0x144 0x04 00 00 00 38 previous_entry_offset
0x148 0x04 00 00 00 60 parent_offset
0x14C 0x04 00 00 00 00 unknown
0x150 0x04 00 00 00 00 unknown
0x154 0x02 00 05 file_format 0x5=GIM
0x156 0x01 00 unknown
0x157 0x01 01 file_compression 0x1=ZLIB
0x158 0x04 00 00 00 0E file_size
0x15C 0x04 00 00 00 04 file_offset
0x160 0x04 00 00 00 01 unknown
0x164 0x04 00 00 00 03 file_uncompressed_size
pointers
0x168 0x04 00 00 00 F4
0x16C 0x04 00 00 01 2C
texts
0x170 0x00 text table is empty
labels
0x170 0x05 74 65 73 74 00 test (null terminated)
0x175 0x03 00 00 00 padding (aligned to 4 bytes boundary)
0x178 0x0C 69 6D 61 67 65 32 5F 74 65 73 74 00 image2_test (null terminated)
0x184 0x0C 69 6D 61 67 65 33 5F 74 65 73 74 00 image3_test (null terminated)
events
0x190 0x00 events table is empty
images
0x190 0x02 22 22 image2_test.gim
0x192 0x02 00 00 padding (aligned to 4 bytes boundary)
0x194 0x0E 78 DA 01 03 00 FC FF 33 33 33 01 35 00 9A image3_test.gim (zlib compressed)
0x1A2 0x02 00 00 padding (aligned to 4 bytes boundary)

Examples (official builds)[edit source]

This ones should be considered "perfect" rco structures, even if there is a weird detail (initially a nonsense, a sony bug, or details not managed correctlly by rcomage)... it needs to be considered a "specification" of that rco version. See also Talk:Rcomage

PS3 1.02 xai_plugin.rco[edit source]

<RcoFile UMDFlag="0" rcomageXmlVer="1.1" type="ps3" minFirmwareVer="unknownId0x97">
	<MainTree name="sample">
		<ObjectTree>
			<Page name="root" pageMode="0x1101" pageOnInit="nothing" pageOnCancel="nothing" pageOnContext="nothing" pageOnActivate="nothing">
				<Plane name="application" positionX="0" positionY="0" positionZ="0" colorScaleR="1" colorScaleG="1" colorScaleB="1" colorScaleA="1" sizeX="0" sizeY="0" sizeZ="0" sizeScaleX="1" sizeScaleY="1" sizeScaleZ="1" anchorMode="0x0" onInit="nothing" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" sizeOverrideX="0x0" sizeOverrideY="0x0" sizeOverrideZ="0x0" planeImage="nothing" planeResizeMode="0x0"></Plane>
			</Page>
		</ObjectTree>
	</MainTree>
</RcoFile>
MD5: F3835BBD0E2448EB6AD5C3FA02906346


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 00 97 00 00 00 00 00 00 00 00  FRP....—........
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  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
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 1C 00 00 01 F0 00 00 00 04  ...Ô.......ð....
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  ÿÿÿÿ....ÿÿÿÿ....
00000070  00 00 01 CC 00 00 00 08 FF FF FF FF 00 00 00 00  ...Ì....ÿÿÿÿ....
00000080  FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00  ÿÿÿÿ....ÿÿÿÿ....
00000090  FF FF FF FF 00 00 00 00 FF FF FF FF FF FF FF FF  ÿÿÿÿ....ÿÿÿÿÿÿÿÿ
000000A0  FF FF FF FF 01 01 00 00 00 00 00 00 00 00 00 00  ÿÿÿÿ............
000000B0  00 00 00 28 00 00 00 01 00 00 00 00 00 00 00 00  ...(............
000000C0  00 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00  ................
000000D0  FF FF FF FF 00 00 00 00 00 00 00 28 00 00 00 01  ÿÿÿÿ.......(....
000000E0  00 00 00 00 00 00 00 00 00 00 00 28 00 00 00 00  ...........(....
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............
00000110  00 00 00 28 00 00 00 00 00 00 00 00 01 11 00 00  ...(............
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  ÿÿ..ÿÿÿÿÿÿ..ÿÿÿÿ
00000140  08 02 00 00 00 00 00 10 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
00000160  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000170  00 00 00 00 3F 80 00 00 3F 80 00 00 3F 80 00 00  ....?€..?€..?€..
00000180  3F 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ?€..............
00000190  3F 80 00 00 3F 80 00 00 3F 80 00 00 00 00 00 00  ?€..?€..?€......
000001A0  FF FF 00 00 FF FF FF FF 00 00 00 00 00 00 00 00  ÿÿ..ÿÿÿÿ........
000001B0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000001C0  FF FF 00 00 FF FF FF FF 00 00 00 00 00 00 00 F4  ÿÿ..ÿÿÿÿ.......ô
000001D0  00 00 01 40 73 61 6D 70 6C 65 00 00 72 6F 6F 74  [email protected]
000001E0  00 00 00 00 61 70 70 6C 69 63 61 74 69 6F 6E 00  ....application.
000001F0  00 00 00 00                                      ....
Areas Offset Length Example Name Notes
HDR
0x00 0x04 46 52 50 00 prf_signature FRP in big endian
0x04 0x04 00 00 00 97 prf_version 0x97 = one of the firmwares for PS3
0x08 0x04 00 00 00 00 prf_unknown
0x0C 0x04 00 00 00 00 prf_compression 0x00 = uncompressed
0x10 0x04 00 00 00 A4 toc_maintree_absolute_offset MainTree at 0xA4
0x14 0x04 FF FF FF FF toc_scripttree_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
0x20 0x04 FF FF FF FF toc_modeltree_absolute_offset no
0x24 0x04 FF FF FF FF toc_imagetree_absolute_offset no
0x28 0x04 FF FF FF FF toc_unknown 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
0x34 0x04 FF FF FF FF toc_animationtree_absolute_offset no
0x38 0x04 00 00 01 D4 str_language_table_absolute_offset languages at 0x1D4
0x3C 0x04 00 00 00 00 str_language_table_length empty
0x40 0x04 00 00 01 D4 str_label_table_absolute_offset labels at 0x1D4
0x44 0x04 00 00 00 1C str_label_table_length length 0x1C
0x48 0x04 00 00 01 F0 str_event_table_absolute_offset events at 0x1F0
0x4C 0x04 00 00 00 04 str_event_table_length length 0x4
0x50 0x04 FF FF FF FF ptr_language_table_absolute_offset no
0x54 0x04 00 00 00 00 ptr_language_table_length empty
0x58 0x04 FF FF FF FF ptr_image_table_absolute_offset no
0x5C 0x04 00 00 00 00 ptr_image_table_length empty
0x60 0x04 FF FF FF FF ptr_model_table_absolute_offset no
0x64 0x04 00 00 00 00 ptr_model_table_length empty
0x68 0x04 FF FF FF FF ptr_sound_table_absolute_offset no
0x6C 0x04 00 00 00 00 ptr_sound_table_length empty
0x70 0x04 00 00 01 CC ptr_object_table_absolute_offset object pointers at 0x1CC
0x74 0x04 00 00 00 08 ptr_object_table_length size 0x8
0x78 0x04 FF FF FF FF ptr_animation_table_absolute_offset no
0x7C 0x04 00 00 00 00 ptr_animation_table_length empty
0x80 0x04 FF FF FF FF dat_image_table_absolute_offset no
0x84 0x04 00 00 00 00 dat_image_table_length empty
0x88 0x04 FF FF FF FF dat_sound_table_absolute_offset no
0x8C 0x04 00 00 00 00 dat_sound_table_length empty
0x90 0x04 FF FF FF FF dat_model_table_absolute_offset no
0x94 0x04 00 00 00 00 dat_model_table_length empty
0x98 0x04 FF FF FF FF dat_unknown_1
0x9C 0x04 FF FF FF FF dat_unknown_2
0xA0 0x04 FF FF FF FF dat_unknown_3
TOC
0xA4 0x04 01 01 00 00 entry_type MainTree
0xA8 0x04 00 00 00 00 entry_label_offset sample
0xAC 0x04 00 00 00 00 entry_header_size
0xB0 0x04 00 00 00 28 entry_size
0xB4 0x04 00 00 00 01 children_number
0xB8 0x04 00 00 00 00 next_entry_offset
0xBC 0x04 00 00 00 00 previous_entry_offset
0xC0 0x04 00 00 00 00 parent_offset no parent
0xC4 0x04 00 00 00 00 toc_entry_unknown_1
0xC8 0x04 00 00 00 00 toc_entry_unknown_2
0xCC 0x04 08 00 00 00 entry_type ObjectTree
0xD0 0x04 FF FF FF FF entry_label_offset no label
0xD4 0x04 00 00 00 00 entry_header_size
0xD8 0x04 00 00 00 28 entry_size
0xDC 0x04 00 00 00 01 children_number
0xE0 0x04 00 00 00 00 next_entry_offset
0xE4 0x04 00 00 00 00 previous_entry_offset
0xE8 0x04 00 00 00 28 parent_offset 0xCC-0x28 = parent is at 0xA4 (MainTree)
0xEC 0x04 00 00 00 00 toc_entry_unknown_1
0xF0 0x04 00 00 00 00 toc_entry_unknown_2
0xF4 0x01 08 01 00 00 entry_type Page
0xF8 0x04 00 00 00 08 entry_label_offset root
0xFC 0x04 00 00 00 28 entry_header_size
0x100 0x04 00 00 00 4C entry_size
0x104 0x04 00 00 00 01 children_number
0x108 0x04 00 00 00 00 next_entry_offset
0x10C 0x04 00 00 00 00 previous_entry_offset
0x110 0x04 00 00 00 28 parent_offset 0xF4-0x28 = parent is at 0xCC (ObjectTree)
0x114 0x04 00 00 00 00 toc_entry_unknown_1
0x118 0x04 00 00 00 00 toc_entry_unknown_2
0x11C 0x04 01 11 00 00 pageMode
0x120 0x08 FF FF 00 00 FF FF FF FF pageOnInit nothing
0x128 0x08 FF FF 00 00 FF FF FF FF pageOnCancel nothing
0x130 0x08 FF FF 00 00 FF FF FF FF pageOnContext nothing
0x138 0x08 FF FF 00 00 FF FF FF FF pageOnActivate nothing
0x140 0x04 08 02 00 00 entry_type Plane
0x144 0x04 00 00 00 10 entry_label_offset application
0x148 0x04 00 00 00 28 entry_header_size
0x14C 0x04 00 00 00 00 entry_size
0x150 0x04 00 00 00 00 children_number
0x154 0x04 00 00 00 00 next_entry_offset
0x158 0x04 00 00 00 00 previous_entry_offset
0x15C 0x04 00 00 00 4C parent_offset 0x140-0x4C = parent is at 0xF4 (Page)
0x160 0x04 00 00 00 00 toc_entry_unknown_1
0x164 0x04 00 00 00 00 toc_entry_unknown_2
0x168 0x04 00 00 00 00 positionX 0
0x16C 0x04 00 00 00 00 positionY 0
0x170 0x04 00 00 00 00 positionZ 0
0x174 0x04 3F 80 00 00 colorScaleR 1
0x178 0x04 3F 80 00 00 colorScaleG 1
0x17C 0x04 3F 80 00 00 colorScaleB 1
0x180 0x04 3F 80 00 00 colorScaleA 1
0x184 0x04 00 00 00 00 sizeX 0
0x188 0x04 00 00 00 00 sizeY 0
0x18C 0x04 00 00 00 00 sizeZ 0
0x190 0x04 3F 80 00 00 sizeScaleX 1
0x194 0x04 3F 80 00 00 sizeScaleY 1
0x198 0x04 3F 80 00 00 sizeScaleZ 1
0x19C 0x04 00 00 00 00 anchorMode 0x0 (center)
0x1A0 0x08 FF FF 00 00 FF FF FF FF onInit nothing
0x1A8 0x04 00 00 00 00 positionOverrideX no
0x1AC 0x04 00 00 00 00 positionOverrideY no
0x1B0 0x04 00 00 00 00 positionOverrideZ no
0x1B4 0x04 00 00 00 00 sizeOverrideX no
0x1B8 0x04 00 00 00 00 sizeOverrideY no
0x1BC 0x04 00 00 00 00 sizeOverrideZ no
0x1C0 0x04 FF FF 00 00 FF FF FF FF planeImage nothing
0x1C8 0x04 00 00 00 00 planeResizeMode 0x0
PTR objects
0x1CC 0x04 00 00 00 F4 First object (Page) at 0xF4
0x1D0 0x04 00 00 01 40 Second object (Plane) at 0x140
STR languages
0x1D4 0x00 empty
labels
0x1D4 0x07 73 61 6D 70 6C 65 00 sample (null terminated)
0x1DB 0x01 00 padding (aligned to 4 bytes boundary)
0x1DC 0x05 72 6F 6F 74 00 root (null terminated)
0x1E1 0x03 00 00 00 padding (aligned to 4 bytes boundary)
0x1E4 0x0C 61 70 70 6C 69 63 61 74 69 6F 6E 00 application (null terminated)
events
0x1F0 0x04 00 00 00 00 dummy event ?

When compiled with rcomage v1.1.2 using ZLIB compression MD5: 4B6C364DDA94BBF1C0A7AC9864DC4796

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 00 97 00 00 00 00 00 00 00 10  FRP....—........
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  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
00000030  00 00 00 CC FF FF FF FF FF FF FF FF 00 00 00 00  ...Ìÿÿÿÿÿÿÿÿ....
00000040  00 00 01 D4 00 00 00 1C 00 00 01 F0 00 00 00 04  ...Ô.......ð....
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  ÿÿÿÿ....ÿÿÿÿ....
00000070  00 00 01 CC 00 00 00 08 FF FF FF FF 00 00 00 00  ...Ì....ÿÿÿÿ....
00000080  FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00  ÿÿÿÿ....ÿÿÿÿ....
00000090  FF FF FF FF 00 00 00 00 FF FF FF FF FF FF FF FF  ÿÿÿÿ....ÿÿÿÿÿÿÿÿ
000000A0  FF FF FF FF 00 00 00 6C 00 00 01 50 00 00 00 00  ÿÿÿÿ...l...P....
000000B0  78 DA 75 CD C1 0D 80 20 0C 05 D0 5F 4F 1C 75 0B  xÚuÍÁ.€ ..Ð_O.u.
000000C0  B6 D0 01 58 82 18 0F 24 28 44 19 C0 A1 BD 2B 04  ¶Ð.X‚..$(D.À¡½+.
000000D0  23 2A F0 92 9F 26 A5 B4 44 78 E3 3E 84 02 E6 73  #*ð’Ÿ&¥´Dxã>„.æs
000000E0  7A 95 39 FE CC 51 2C 77 4F D4 E6 A8 0B FB E2 CE  z•9þÌQ,wOÔæ¨.ûâÎ
000000F0  5A 65 0D 82 36 FE CB 08 14 F4 FB 37 C9 BF 9F EE  Ze.‚6þË..ôû7É¿Ÿî
00000100  23 53 7C 3F 00 1A 36 39 5B 3D 01 AB 31 0E 9E B4  #S|?..69[=.«1.ž´
00000110  56 AB 51 3A 65 16 04 17 88 21 38 F3              V«Q:e...ˆ!8ó
  • Changes
    • 10 the compression setting for ZLIB
    • FF FF FF FF weird
    • 00 00 00 6C 00 00 01 50 00 00 00 00 the info about the compressed area that comes next (composed by: lenPacked, lenUnpacked, and lenLongestText)
    • 78 DA ... the compressed area itself, includes the TOC, the pointer tables (PTR), and string tables (STR)