Editing PS3MFW Builder
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
[[Category:Software]] | |||
== Main description == | == Main description == | ||
== Tasks == | == Tasks == | ||
<div style="float:right">[[File:Mfwbuilder.png|200px|thumb|left|PS3MFW Builder v0.2]]<br />[[File:Mfw-otherosplusplus.png|200px|thumb|left|PS3MFW Builder v0.2 OtherOS++]]<br />[[File:Mfw-rebug.png|200px|thumb|left|PS3MFW Builder v0.2 Rebug OtherOS++]]</div> | |||
=== PS3MFW === | === PS3MFW === | ||
Line 11: | Line 11: | ||
**add_license_msg.tcl (0.1) - Add a custom message to the 'New Features' installation screen. Modifies PUP license.xml --license-auto-add-features : Automatically generate the enabled features of PS3MFW --license-features-message : Prefix message to the generated features list --license-message : New Features message (Appears after the license agreement) | **add_license_msg.tcl (0.1) - Add a custom message to the 'New Features' installation screen. Modifies PUP license.xml --license-auto-add-features : Automatically generate the enabled features of PS3MFW --license-features-message : Prefix message to the generated features list --license-message : New Features message (Appears after the license agreement) | ||
**broken_bluray.tcl (0.2) – Allows you to remove Blu-Ray firmware installation so that the MFW can be installed without a working Blu-Ray drive. This is potentially dangerous if used on a PS3 with a working drive, and should only be used if the drive is broken. | **broken_bluray.tcl (0.2) – Allows you to remove Blu-Ray firmware installation so that the MFW can be installed without a working Blu-Ray drive. This is potentially dangerous if used on a PS3 with a working drive, and should only be used if the drive is broken. | ||
**change_coldboot_files.tcl (0.2) – Advanced users only: Allows changing the sound played and image shown during the boot process. Caution: If improper files are used, this can cause a “brick” | **change_coldboot_files.tcl (0.2) – Advanced users only: Allows changing the sound played and image shown during the boot process. Caution: If improper files are used, this can cause a “brick”. | ||
**change_devflash_files.tcl | **change_devflash_files.tcl | ||
**change_ssl_cer.tcl (0.2) – Allows changing of SSL certificates. | **change_ssl_cer.tcl (0.2) – Allows changing of SSL certificates. | ||
Line 35: | Line 35: | ||
**patch_xmb_plugin.tcl | **patch_xmb_plugin.tcl | ||
**spoof_version.tcl (0.2) – Allows changing the firmware version the PS3 appears to be on, similar to the rebug spoofer. | **spoof_version.tcl (0.2) – Allows changing the firmware version the PS3 appears to be on, similar to the rebug spoofer. | ||
=== Gitbrew OtherOS++ === | === Gitbrew OtherOS++ === | ||
Line 73: | Line 76: | ||
=== | === PSheb project === | ||
* | * PSheb project 0.1 (Hebrew translation of PS3 XMB) | ||
** Task: [https://github.com/DanyL/PS3MFW-Builder/blob/master/tasks/language_pack.tcl language_pack.tcl] | ** Task: [https://github.com/DanyL/PS3MFW-Builder/blob/master/tasks/language_pack.tcl language_pack.tcl] | ||
** | ** Languagepack: [https://github.com/DanyL/PSheb] | ||
** Newsitem including screenshots for reference: http://www.ps3hax.net/2011/08/psheb-project-v0-1-hebrew-language-on-ps3/ | ** Newsitem including screenshots for reference: http://www.ps3hax.net/2011/08/psheb-project-v0-1-hebrew-language-on-ps3/ | ||
==== Guide for adding other translations / building languagepacks ==== | ==== Guide for adding other translations / building languagepacks ==== | ||
Line 129: | Line 129: | ||
=== more Spoof === | === more Spoof === | ||
Copypaste and save as spoof_version.tcl in tasks folder (make sure you use proper ps3mfw_base.tcl from 0.2 or [http://pastie.org/private/1u5p6jfd5mhxeleiibadg unofficial v0.2.1 OtherOS++] and not the glevand or rebug version that reduced/castrated the spoof method): | Copypaste and save as spoof_version.tcl in tasks folder (make sure you use proper ps3mfw_base.tcl from 0.2 or [http://pastie.org/private/1u5p6jfd5mhxeleiibadg unofficial v0.2.1 OtherOS++] and not the glevand or rebug version that reduced/castrated the spoof method): | ||
{{Boxcode| | {{Boxcode|content=<syntaxhighlight lang="tcl"> | ||
#!/usr/bin/tclsh | #!/usr/bin/tclsh | ||
# | # | ||
Line 146: | Line 144: | ||
# Option --spoof: Select firmware version to spoof | # Option --spoof: Select firmware version to spoof | ||
# Type --spoof: combobox { {1.02 1788 001:CEX-ww 20061021} {1.10 2120 001:CEX-ww 20061109} {1.11 2232 001:CEX-ww 20061121} {1.30 2400 001:CEX-ww 20061205} {1.31 2494 001:CEX-ww 20061212} {1.32 2587 001:CEX-ww 20061218} {1.50 3014 001:CEX-ww 20070119} {1.51 3229 001:CEX-ww 20070201} {1.54 3563 001:CEX-ww 20070222} {1.60 3940 001:CEX-ww 20070321} {1.70 4540 001:CEX-ww 20070416} {1.80 5354 001:CEX-ww 20070523} {1.81 5746 001:CEX-ww 20070612} {1.82 5986 001:CEX-ww 20070624} {1.90 6591 001:CEX-ww 20070721} {1.92 7272 001:CEX-ww 20070828} {1.93 7444 001:CEX-ww 20070909} {1.94 7510 001:CEX-ww 20070912} {2.00 8237 001:CEX-ww 20071030} {2.01 8426 001:CEX-ww 20071115} {2.10 9181 001:CEX-ww 20071215} {2.16 10444 001:CEX-ww 20080131} {2.17 11729 001:CEX-ww 20080303} {2.20 12342 001:CEX-ww 20080317} {2.30 13778 001:CEX-ww 20080411} {2.35 15109 001:CEX-ww 20080512} {2.36 16093 001:CEX-ww 20080605} {2.40 17023 001:CEX-ww 20080625} {2.41 17362 001:CEX-ww 20080704} {3.00 34641 001:CEX-ww 20090829} {2.42 18467 001:CEX-ww 20080723} {2.43 19024 001:CEX-ww 20080903} {2.50 23368 001:CEX-ww 20081011} {2.52 24267 001:CEX-ww 20081028} {2.53 25075 001:CEX-ww 20081117} {2.60 28392 001:CEX-ww 20090116} {2.70 30429 001:CEX-ww 20090326} {2.76 31347 001:CEX-ww 20090427} {2.80 32582 001:CEX-ww 20090616} {3.00 34641 001:CEX-ww 20090829} {3.01 35108 001:CEX-ww 20090910} {3.10 37233 001:CEX-ww 20091113} {3.15 38031 001:CEX-ww 20091206} {3.20 39999 001:CEX-ww 20100128} {3.21 41486 001:CEX-ww 20100320} {3.30 42164 001:CEX-ww 20100414} {3.40 44261 001:CEX-ww 20100623} {3.41 45039 001:CEX-ww 20100721} {3.42 45831 001:CEX-ww 20100901} {3.50 46135 001:CEX-ww 20100913} {3.55 47516 001:CEX-ww 20101127} {3.56 48165 001:CEX-ww 20110125} {3.56 48247 001:CEX-ww 20110129} {3.60 48686 001:CEX-ww 20110304} {3.61 49561 001:CEX-ww 20110428} {3.65 49764 001:CEX-ww 20110513} {3.66 50527 001:CEX-ww 20110616} {3.70 51968 001:CEX-ww 20110805} {3.72 52565 001:CEX-ww 20110914} {3.73 52870 001:CEX-ww 20111004} {4.00 53642 001:CEX-ww 20111122} {4.10 54953 001:CEX-ww 20120206} {4.11 55054 001:CEX-ww 20120211} {4.20 57923 001:CEX-ww 20120615} {4.21 58071 001:CEX-ww 20120630 | # Type --spoof: combobox { {1.02 1788 001:CEX-ww 20061021} {1.10 2120 001:CEX-ww 20061109} {1.11 2232 001:CEX-ww 20061121} {1.30 2400 001:CEX-ww 20061205} {1.31 2494 001:CEX-ww 20061212} {1.32 2587 001:CEX-ww 20061218} {1.50 3014 001:CEX-ww 20070119} {1.51 3229 001:CEX-ww 20070201} {1.54 3563 001:CEX-ww 20070222} {1.60 3940 001:CEX-ww 20070321} {1.70 4540 001:CEX-ww 20070416} {1.80 5354 001:CEX-ww 20070523} {1.81 5746 001:CEX-ww 20070612} {1.82 5986 001:CEX-ww 20070624} {1.90 6591 001:CEX-ww 20070721} {1.92 7272 001:CEX-ww 20070828} {1.93 7444 001:CEX-ww 20070909} {1.94 7510 001:CEX-ww 20070912} {2.00 8237 001:CEX-ww 20071030} {2.01 8426 001:CEX-ww 20071115} {2.10 9181 001:CEX-ww 20071215} {2.16 10444 001:CEX-ww 20080131} {2.17 11729 001:CEX-ww 20080303} {2.20 12342 001:CEX-ww 20080317} {2.30 13778 001:CEX-ww 20080411} {2.35 15109 001:CEX-ww 20080512} {2.36 16093 001:CEX-ww 20080605} {2.40 17023 001:CEX-ww 20080625} {2.41 17362 001:CEX-ww 20080704} {3.00 34641 001:CEX-ww 20090829} {2.42 18467 001:CEX-ww 20080723} {2.43 19024 001:CEX-ww 20080903} {2.50 23368 001:CEX-ww 20081011} {2.52 24267 001:CEX-ww 20081028} {2.53 25075 001:CEX-ww 20081117} {2.60 28392 001:CEX-ww 20090116} {2.70 30429 001:CEX-ww 20090326} {2.76 31347 001:CEX-ww 20090427} {2.80 32582 001:CEX-ww 20090616} {3.00 34641 001:CEX-ww 20090829} {3.01 35108 001:CEX-ww 20090910} {3.10 37233 001:CEX-ww 20091113} {3.15 38031 001:CEX-ww 20091206} {3.20 39999 001:CEX-ww 20100128} {3.21 41486 001:CEX-ww 20100320} {3.30 42164 001:CEX-ww 20100414} {3.40 44261 001:CEX-ww 20100623} {3.41 45039 001:CEX-ww 20100721} {3.42 45831 001:CEX-ww 20100901} {3.50 46135 001:CEX-ww 20100913} {3.55 47516 001:CEX-ww 20101127} {3.56 48165 001:CEX-ww 20110125} {3.56 48247 001:CEX-ww 20110129} {3.60 48686 001:CEX-ww 20110304} {3.61 49561 001:CEX-ww 20110428} {3.65 49764 001:CEX-ww 20110513} {3.66 50527 001:CEX-ww 20110616} {3.70 51968 001:CEX-ww 20110805} {3.72 52565 001:CEX-ww 20110914} {3.73 52870 001:CEX-ww 20111004} {4.00 53642 001:CEX-ww 20111122} {4.10 54953 001:CEX-ww 20120206} {4.11 55054 001:CEX-ww 20120211} {4.20 57923 001:CEX-ww 20120615} {4.21 58071 001:CEX-ww 20120630} } | ||
namespace eval ::spoof_version { | namespace eval ::spoof_version { | ||
array set ::spoof_version::options { | array set ::spoof_version::options { | ||
--spoof "4. | --spoof "4.21 58071 001:CEX-ww 20120630" | ||
} | } | ||
Line 338: | Line 336: | ||
=== more GameOS/OtherOS++ sizes === | === more GameOS/OtherOS++ sizes === | ||
Copypaste and save as patch_emer_init.tcl in tasks folder: | Copypaste and save as patch_emer_init.tcl in tasks folder: | ||
{{Boxcode| | {{Boxcode|content=<syntaxhighlight lang="tcl"> | ||
#!/usr/bin/tclsh | #!/usr/bin/tclsh | ||
# | # | ||
Line 349: | Line 347: | ||
# License ("GPL") version 3, as published by the Free Software Foundation. | # License ("GPL") version 3, as published by the Free Software Foundation. | ||
# | # | ||
# Priority: 300 | # Priority: 300 | ||
# Description: Patch emergency init application | # Description: Patch emergency init application | ||
# Option --patch-pup-search-in-game-disc: Disable searching for update packages in GAME disc | # Option --patch-pup-search-in-game-disc: Disable searching for update packages in GAME disc | ||
# Option --patch-gameos-hdd-region-size: Create GameOS HDD region smaller than default | # Option --patch-gameos-hdd-region-size: Create GameOS HDD region smaller than default | ||
# Type --patch-pup-search-in-game-disc: boolean | # Type --patch-pup-search-in-game-disc: boolean | ||
# Type --patch-gameos-hdd-region-size: combobox {{1/eighth of drive} {1/quarter of drive} {1/half of drive} {22GB} {10GB} {20GB} {30GB} {40GB} {50GB} {60GB} {70GB} {80GB} {90GB} {100GB} {110GB} {120GB} {130GB} {140GB} {150GB} {160GB} {170GB} {180GB} {190GB} {200GB} {210GB} {220GB} {230GB} {240GB} {250GB} {260GB} {270GB} {280GB} {290GB} {300GB} {310GB} {320GB} {330GB} {340GB} {350GB} {360GB} {370GB} {380GB} {390GB} {400GB} {410GB} {420GB} {430GB} {440GB} {450GB} {460GB} {470GB} {480GB} {490GB} {500GB} {510GB} {520GB} {530GB} {540GB} {550GB} {560GB} {570GB} {580GB} {590GB} {600GB} {610GB} {620GB} {630GB} {640GB} {650GB} {660GB} {670GB} {680GB} {690GB} {700GB} {710GB} {720GB} {730GB} {740GB} {750GB} {760GB} {770GB} {780GB} {790GB} {800GB} {810GB} {820GB} {830GB} {840GB} {850GB} {860GB} {870GB} {880GB} {890GB} {900GB} {910GB} {920GB} {930GB} {940GB} {950GB} {960GB} {970GB} {980GB} {990GB} {1000GB}} | # Type --patch-gameos-hdd-region-size: combobox {{1/eighth of drive} {1/quarter of drive} {1/half of drive} {22GB} {10GB} {20GB} {30GB} {40GB} {50GB} {60GB} {70GB} {80GB} {90GB} {100GB} {110GB} {120GB} {130GB} {140GB} {150GB} {160GB} {170GB} {180GB} {190GB} {200GB} {210GB} {220GB} {230GB} {240GB} {250GB} {260GB} {270GB} {280GB} {290GB} {300GB} {310GB} {320GB} {330GB} {340GB} {350GB} {360GB} {370GB} {380GB} {390GB} {400GB} {410GB} {420GB} {430GB} {440GB} {450GB} {460GB} {470GB} {480GB} {490GB} {500GB} {510GB} {520GB} {530GB} {540GB} {550GB} {560GB} {570GB} {580GB} {590GB} {600GB} {610GB} {620GB} {630GB} {640GB} {650GB} {660GB} {670GB} {680GB} {690GB} {700GB} {710GB} {720GB} {730GB} {740GB} {750GB} {760GB} {770GB} {780GB} {790GB} {800GB} {810GB} {820GB} {830GB} {840GB} {850GB} {860GB} {870GB} {880GB} {890GB} {900GB} {910GB} {920GB} {930GB} {940GB} {950GB} {960GB} {970GB} {980GB} {990GB} {1000GB}} | ||
namespace eval ::patch_emer_init { | namespace eval ::patch_emer_init { | ||
array set ::patch_emer_init::options { | array set ::patch_emer_init::options { | ||
--patch-pup-search-in-game-disc false | --patch-pup-search-in-game-disc false | ||
--patch-gameos-hdd-region-size "1/quarter" | --patch-gameos-hdd-region-size "1/quarter" | ||
} | } | ||
proc main {} { | proc main {} { | ||
set self "emer_init.self" | set self "emer_init.self" | ||
::modify_coreos_file $self ::patch_emer_init::patch_self | ::modify_coreos_file $self ::patch_emer_init::patch_self | ||
} | } | ||
proc patch_self {self} { | proc patch_self {self} { | ||
::modify_self_file $self ::patch_emer_init::patch_elf | ::modify_self_file $self ::patch_emer_init::patch_elf | ||
} | } | ||
proc patch_elf {elf} { | proc patch_elf {elf} { | ||
variable options | variable options | ||
set size $options(--patch-gameos-hdd-region-size) | set size $options(--patch-gameos-hdd-region-size) | ||
set pup $options(--patch-pup-search-in-game-disc) | set pup $options(--patch-pup-search-in-game-disc) | ||
if {$size != ""} { | if {$size != ""} { | ||
log "Patching [file tail $elf] to create GameOS HDD region of size $size of installed HDD" | log "Patching [file tail $elf] to create GameOS HDD region of size $size of installed HDD" | ||
set search "\xe9\x21\x00\xa0\x79\x4a\x00\x20\xe9\x1b\x00\x00\x38\x00\x00\x00" | set search "\xe9\x21\x00\xa0\x79\x4a\x00\x20\xe9\x1b\x00\x00\x38\x00\x00\x00" | ||
append search "\x7d\x26\x48\x50\x7d\x49\x03\xa6\x39\x40\x00\x00\x38\xe9\xff\xf8" | append search "\x7d\x26\x48\x50\x7d\x49\x03\xa6\x39\x40\x00\x00\x38\xe9\xff\xf8" | ||
set replace "\x79\x27" | |||
if {[string equal ${size} "1/eighth of drive"] == 1} { | if {[string equal ${size} "1/eighth of drive"] == 1} { | ||
append replace "\xe8\xc2" | |||
} elseif {[string equal ${size} "1/quarter of drive"] == 1} { | } elseif {[string equal ${size} "1/quarter of drive"] == 1} { | ||
append replace "\xf0\x82" | |||
} elseif {[string equal ${size} "1/half of drive"] == 1} { | } elseif {[string equal ${size} "1/half of drive"] == 1} { | ||
append replace "\xf8\x42" | |||
} elseif {[string equal ${size} "22GB"] == 1} { | } elseif {[string equal ${size} "22GB"] == 1} { | ||
append replace "\xfd\x40" | |||
} elseif {[string equal ${size} "10GB"] == 1} { | } elseif {[string equal ${size} "10GB"] == 1} { | ||
append replace "\xfe\xc0" | |||
} elseif {[string equal ${size} "20GB"] == 1} { | } elseif {[string equal ${size} "20GB"] == 1} { | ||
append replace "\xfd\x80" | |||
} elseif {[string equal ${size} "30GB"] == 1} { | } elseif {[string equal ${size} "30GB"] == 1} { | ||
append replace "\xfc\x40" | |||
} elseif {[string equal ${size} "40GB"] == 1} { | } elseif {[string equal ${size} "40GB"] == 1} { | ||
append replace "\xfb\x00" | |||
} elseif {[string equal ${size} "50GB"] == 1} { | } elseif {[string equal ${size} "50GB"] == 1} { | ||
append replace "\xf9\xc0" | |||
} elseif {[string equal ${size} "60GB"] == 1} { | } elseif {[string equal ${size} "60GB"] == 1} { | ||
append replace "\xf8\x80" | |||
} elseif {[string equal ${size} "70GB"] == 1} { | } elseif {[string equal ${size} "70GB"] == 1} { | ||
append replace "\xf7\x40" | |||
} elseif {[string equal ${size} "80GB"] == 1} { | } elseif {[string equal ${size} "80GB"] == 1} { | ||
append replace "\xf6\x00" | |||
} elseif {[string equal ${size} "90GB"] == 1} { | } elseif {[string equal ${size} "90GB"] == 1} { | ||
append replace "\xf4\xc0" | |||
} elseif {[string equal ${size} "100GB"] == 1} { | } elseif {[string equal ${size} "100GB"] == 1} { | ||
append replace "\xf3\x80" | |||
} elseif {[string equal ${size} "110GB"] == 1} { | } elseif {[string equal ${size} "110GB"] == 1} { | ||
append replace "\xf2\x40" | |||
} elseif {[string equal ${size} "120GB"] == 1} { | } elseif {[string equal ${size} "120GB"] == 1} { | ||
append replace "\xf1\x00" | |||
} elseif {[string equal ${size} "130GB"] == 1} { | } elseif {[string equal ${size} "130GB"] == 1} { | ||
append replace "\xef\xc0" | |||
} elseif {[string equal ${size} "140GB"] == 1} { | } elseif {[string equal ${size} "140GB"] == 1} { | ||
append replace "\xee\x80" | |||
} elseif {[string equal ${size} "150GB"] == 1} { | } elseif {[string equal ${size} "150GB"] == 1} { | ||
append replace "\xed\x40" | |||
} elseif {[string equal ${size} "160GB"] == 1} { | } elseif {[string equal ${size} "160GB"] == 1} { | ||
append replace "\xec\x00" | |||
} elseif {[string equal ${size} "170GB"] == 1} { | } elseif {[string equal ${size} "170GB"] == 1} { | ||
append replace "\xea\xc0" | |||
} elseif {[string equal ${size} "180GB"] == 1} { | } elseif {[string equal ${size} "180GB"] == 1} { | ||
append replace "\xe9\x80" | |||
} elseif {[string equal ${size} "190GB"] == 1} { | } elseif {[string equal ${size} "190GB"] == 1} { | ||
append replace "\xe8\x40" | |||
} elseif {[string equal ${size} "200GB"] == 1} { | } elseif {[string equal ${size} "200GB"] == 1} { | ||
append replace "\xe7\x00" | |||
} elseif {[string equal ${size} "210GB"] == 1} { | } elseif {[string equal ${size} "210GB"] == 1} { | ||
append replace "\xe5\xc0" | |||
} elseif {[string equal ${size} "220GB"] == 1} { | } elseif {[string equal ${size} "220GB"] == 1} { | ||
append replace "\xe4\x80" | |||
} elseif {[string equal ${size} "230GB"] == 1} { | } elseif {[string equal ${size} "230GB"] == 1} { | ||
append replace "\xe3\x40" | |||
} elseif {[string equal ${size} "240GB"] == 1} { | } elseif {[string equal ${size} "240GB"] == 1} { | ||
append replace "\xe2\x00" | |||
} elseif {[string equal ${size} "250GB"] == 1} { | } elseif {[string equal ${size} "250GB"] == 1} { | ||
append replace "\xe0\xc0" | |||
} elseif {[string equal ${size} "260GB"] == 1} { | } elseif {[string equal ${size} "260GB"] == 1} { | ||
append replace "\xdf\x80" | |||
} elseif {[string equal ${size} "270GB"] == 1} { | } elseif {[string equal ${size} "270GB"] == 1} { | ||
append replace "\xde\x40" | |||
} elseif {[string equal ${size} "280GB"] == 1} { | } elseif {[string equal ${size} "280GB"] == 1} { | ||
append replace "\xdd\x00" | |||
} elseif {[string equal ${size} "290GB"] == 1} { | } elseif {[string equal ${size} "290GB"] == 1} { | ||
append replace "\xdb\xc0" | |||
} elseif {[string equal ${size} "300GB"] == 1} { | } elseif {[string equal ${size} "300GB"] == 1} { | ||
append replace "\xda\x80" | |||
} elseif {[string equal ${size} "310GB"] == 1} { | } elseif {[string equal ${size} "310GB"] == 1} { | ||
append replace "\xd9\x40" | |||
} elseif {[string equal ${size} "320GB"] == 1} { | } elseif {[string equal ${size} "320GB"] == 1} { | ||
append replace "\xd8\x00" | |||
} elseif {[string equal ${size} "330GB"] == 1} { | } elseif {[string equal ${size} "330GB"] == 1} { | ||
append replace "\xd6\xc0" | |||
} elseif {[string equal ${size} "340GB"] == 1} { | } elseif {[string equal ${size} "340GB"] == 1} { | ||
append replace "\xd5\x80" | |||
} elseif {[string equal ${size} "350GB"] == 1} { | } elseif {[string equal ${size} "350GB"] == 1} { | ||
append replace "\xd4\x40" | |||
} elseif {[string equal ${size} "360GB"] == 1} { | } elseif {[string equal ${size} "360GB"] == 1} { | ||
append replace "\xd3\x00" | |||
} elseif {[string equal ${size} "370GB"] == 1} { | } elseif {[string equal ${size} "370GB"] == 1} { | ||
append replace "\xd1\xc0" | |||
} elseif {[string equal ${size} "380GB"] == 1} { | } elseif {[string equal ${size} "380GB"] == 1} { | ||
append replace "\xd0\x80" | |||
} elseif {[string equal ${size} "390GB"] == 1} { | } elseif {[string equal ${size} "390GB"] == 1} { | ||
append replace "\xcf\x40" | |||
} elseif {[string equal ${size} "400GB"] == 1} { | } elseif {[string equal ${size} "400GB"] == 1} { | ||
append replace "\xce\x00" | |||
} elseif {[string equal ${size} "410GB"] == 1} { | } elseif {[string equal ${size} "410GB"] == 1} { | ||
append replace "\xcc\xc0" | |||
} elseif {[string equal ${size} "420GB"] == 1} { | } elseif {[string equal ${size} "420GB"] == 1} { | ||
append replace "\xcb\x80" | |||
} elseif {[string equal ${size} "430GB"] == 1} { | } elseif {[string equal ${size} "430GB"] == 1} { | ||
append replace "\xca\x40" | |||
} elseif {[string equal ${size} "440GB"] == 1} { | } elseif {[string equal ${size} "440GB"] == 1} { | ||
append replace "\xc9\x00" | |||
} elseif {[string equal ${size} "450GB"] == 1} { | } elseif {[string equal ${size} "450GB"] == 1} { | ||
append replace "\xc7\xc0" | |||
} elseif {[string equal ${size} "460GB"] == 1} { | } elseif {[string equal ${size} "460GB"] == 1} { | ||
append replace "\xc6\x80" | |||
} elseif {[string equal ${size} "470GB"] == 1} { | } elseif {[string equal ${size} "470GB"] == 1} { | ||
append replace "\xc5\x40" | |||
} elseif {[string equal ${size} "480GB"] == 1} { | } elseif {[string equal ${size} "480GB"] == 1} { | ||
append replace "\xc4\x00" | |||
} elseif {[string equal ${size} "490GB"] == 1} { | } elseif {[string equal ${size} "490GB"] == 1} { | ||
append replace "\xc2\xc0" | |||
} elseif {[string equal ${size} "500GB"] == 1} { | } elseif {[string equal ${size} "500GB"] == 1} { | ||
append replace "\xc1\x80" | |||
} elseif {[string equal ${size} "510GB"] == 1} { | } elseif {[string equal ${size} "510GB"] == 1} { | ||
append replace "\xc0\x40" | |||
} elseif {[string equal ${size} "520GB"] == 1} { | } elseif {[string equal ${size} "520GB"] == 1} { | ||
append replace "\xbf\x00" | |||
} elseif {[string equal ${size} "530GB"] == 1} { | } elseif {[string equal ${size} "530GB"] == 1} { | ||
append replace "\xbd\xc0" | |||
} elseif {[string equal ${size} "540GB"] == 1} { | } elseif {[string equal ${size} "540GB"] == 1} { | ||
append replace "\xbc\x80" | |||
} elseif {[string equal ${size} "550GB"] == 1} { | } elseif {[string equal ${size} "550GB"] == 1} { | ||
append replace "\xbb\x40" | |||
} elseif {[string equal ${size} "560GB"] == 1} { | } elseif {[string equal ${size} "560GB"] == 1} { | ||
append replace "\xba\x00" | |||
} elseif {[string equal ${size} "570GB"] == 1} { | } elseif {[string equal ${size} "570GB"] == 1} { | ||
append replace "\xb8\xc0" | |||
} elseif {[string equal ${size} "580GB"] == 1} { | } elseif {[string equal ${size} "580GB"] == 1} { | ||
append replace "\xb7\x80" | |||
} elseif {[string equal ${size} "590GB"] == 1} { | } elseif {[string equal ${size} "590GB"] == 1} { | ||
append replace "\xb6\x40" | |||
} elseif {[string equal ${size} "600GB"] == 1} { | } elseif {[string equal ${size} "600GB"] == 1} { | ||
append replace "\xb5\x00" | |||
} elseif {[string equal ${size} "610GB"] == 1} { | } elseif {[string equal ${size} "610GB"] == 1} { | ||
append replace "\xb3\xc0" | |||
} elseif {[string equal ${size} "620GB"] == 1} { | } elseif {[string equal ${size} "620GB"] == 1} { | ||
append replace "\xb2\x80" | |||
} elseif {[string equal ${size} "630GB"] == 1} { | } elseif {[string equal ${size} "630GB"] == 1} { | ||
append replace "\xb1\x40" | |||
} elseif {[string equal ${size} "640GB"] == 1} { | } elseif {[string equal ${size} "640GB"] == 1} { | ||
append replace "\xb0\x00" | |||
} elseif {[string equal ${size} "650GB"] == 1} { | } elseif {[string equal ${size} "650GB"] == 1} { | ||
append replace "\xae\xc0" | |||
} elseif {[string equal ${size} "660GB"] == 1} { | } elseif {[string equal ${size} "660GB"] == 1} { | ||
append replace "\xad\x80" | |||
} elseif {[string equal ${size} "670GB"] == 1} { | } elseif {[string equal ${size} "670GB"] == 1} { | ||
append replace "\xac\x40" | |||
} elseif {[string equal ${size} "680GB"] == 1} { | } elseif {[string equal ${size} "680GB"] == 1} { | ||
append replace "\xab\x00" | |||
} elseif {[string equal ${size} "690GB"] == 1} { | } elseif {[string equal ${size} "690GB"] == 1} { | ||
append replace "\xa9\xc0" | |||
} elseif {[string equal ${size} "700GB"] == 1} { | } elseif {[string equal ${size} "700GB"] == 1} { | ||
append replace "\xa8\x80" | |||
} elseif {[string equal ${size} "710GB"] == 1} { | } elseif {[string equal ${size} "710GB"] == 1} { | ||
append replace "\xa7\x40" | |||
} elseif {[string equal ${size} "720GB"] == 1} { | } elseif {[string equal ${size} "720GB"] == 1} { | ||
append replace "\xa6\x00" | |||
} elseif {[string equal ${size} "730GB"] == 1} { | } elseif {[string equal ${size} "730GB"] == 1} { | ||
append replace "\xa4\xc0" | |||
} elseif {[string equal ${size} "740GB"] == 1} { | } elseif {[string equal ${size} "740GB"] == 1} { | ||
append replace "\xa3\x80" | |||
} elseif {[string equal ${size} "750GB"] == 1} { | } elseif {[string equal ${size} "750GB"] == 1} { | ||
append replace "\xa2\x40" | |||
} elseif {[string equal ${size} "760GB"] == 1} { | } elseif {[string equal ${size} "760GB"] == 1} { | ||
append replace "\xa1\x00" | |||
} elseif {[string equal ${size} "770GB"] == 1} { | } elseif {[string equal ${size} "770GB"] == 1} { | ||
append replace "\x9f\xc0" | |||
} elseif {[string equal ${size} "780GB"] == 1} { | } elseif {[string equal ${size} "780GB"] == 1} { | ||
append replace "\x9e\x80" | |||
} elseif {[string equal ${size} "790GB"] == 1} { | } elseif {[string equal ${size} "790GB"] == 1} { | ||
append replace "\x9d\x40" | |||
} elseif {[string equal ${size} "800GB"] == 1} { | } elseif {[string equal ${size} "800GB"] == 1} { | ||
append replace "\x9c\x00" | |||
} elseif {[string equal ${size} "810GB"] == 1} { | } elseif {[string equal ${size} "810GB"] == 1} { | ||
append replace "\x9a\xc0" | |||
} elseif {[string equal ${size} "820GB"] == 1} { | } elseif {[string equal ${size} "820GB"] == 1} { | ||
append replace "\x99\x80" | |||
} elseif {[string equal ${size} "830GB"] == 1} { | } elseif {[string equal ${size} "830GB"] == 1} { | ||
append replace "\x98\x40" | |||
} elseif {[string equal ${size} "840GB"] == 1} { | } elseif {[string equal ${size} "840GB"] == 1} { | ||
append replace "\x97\x00" | |||
} elseif {[string equal ${size} "850GB"] == 1} { | } elseif {[string equal ${size} "850GB"] == 1} { | ||
append replace "\x95\xc0" | |||
} elseif {[string equal ${size} "860GB"] == 1} { | } elseif {[string equal ${size} "860GB"] == 1} { | ||
append replace "\x94\x80" | |||
} elseif {[string equal ${size} "870GB"] == 1} { | } elseif {[string equal ${size} "870GB"] == 1} { | ||
append replace "\x93\x40" | |||
} elseif {[string equal ${size} "880GB"] == 1} { | } elseif {[string equal ${size} "880GB"] == 1} { | ||
append replace "\x92\x00" | |||
} elseif {[string equal ${size} "890GB"] == 1} { | } elseif {[string equal ${size} "890GB"] == 1} { | ||
append replace "\x90\xc0" | |||
} elseif {[string equal ${size} "900GB"] == 1} { | } elseif {[string equal ${size} "900GB"] == 1} { | ||
append replace "\x8f\x80" | |||
} elseif {[string equal ${size} "910GB"] == 1} { | } elseif {[string equal ${size} "910GB"] == 1} { | ||
append replace "\x8e\x40" | |||
} elseif {[string equal ${size} "920GB"] == 1} { | } elseif {[string equal ${size} "920GB"] == 1} { | ||
append replace "\x8d\x00" | |||
} elseif {[string equal ${size} "930GB"] == 1} { | } elseif {[string equal ${size} "930GB"] == 1} { | ||
append replace "\x8b\xc0" | |||
} elseif {[string equal ${size} "940GB"] == 1} { | } elseif {[string equal ${size} "940GB"] == 1} { | ||
append replace "\x8a\x80" | |||
} elseif {[string equal ${size} "950GB"] == 1} { | } elseif {[string equal ${size} "950GB"] == 1} { | ||
append replace "\x89\x40" | |||
} elseif {[string equal ${size} "960GB"] == 1} { | } elseif {[string equal ${size} "960GB"] == 1} { | ||
append replace "\x88\x00" | |||
} elseif {[string equal ${size} "970GB"] == 1} { | } elseif {[string equal ${size} "970GB"] == 1} { | ||
append replace "\x86\xc0" | |||
} elseif {[string equal ${size} "980GB"] == 1} { | } elseif {[string equal ${size} "980GB"] == 1} { | ||
append replace "\x85\x80" | |||
} elseif {[string equal ${size} "990GB"] == 1} { | } elseif {[string equal ${size} "990GB"] == 1} { | ||
append replace "\x84\x40" | |||
} elseif {[string equal ${size} "1000GB"] == 1} { | } elseif {[string equal ${size} "1000GB"] == 1} { | ||
append replace "\x83\x00" | |||
} | } | ||
catch_die {::patch_elf $elf $search 28 $replace} \ | catch_die {::patch_elf $elf $search 28 $replace} \ | ||
"Unable to patch self [file tail $elf]" | "Unable to patch self [file tail $elf]" | ||
} | } | ||
if {$pup} { | if {$pup} { | ||
log "Patching [file tail $elf] to disable searching for update packages in GAME disc" | log "Patching [file tail $elf] to disable searching for update packages in GAME disc" | ||
set search "\x80\x01\x00\x74\x2f\x80\x00\x00\x40\x9e\x00\x14\x7f\xa3\xeb\x78" | set search "\x80\x01\x00\x74\x2f\x80\x00\x00\x40\x9e\x00\x14\x7f\xa3\xeb\x78" | ||
set replace "\x38\x00\x00\x01" | set replace "\x38\x00\x00\x01" | ||
catch_die {::patch_elf $elf $search 0 $replace} \ | catch_die {::patch_elf $elf $search 0 $replace} \ | ||
"Unable to patch self [file tail $elf]" | "Unable to patch self [file tail $elf]" | ||
Line 619: | Line 618: | ||
Allows you to remove Bluetooth firmware installation so that the MFW can be installed without a working Bluetooth board (circumventing errorcode 0x8002F1F9). This is potentially dangerous if used on a PS3 with a working BT/Wifi board, and should only be used if the BT/Wifi is broken (or abcent, like on Arcade consoles). | Allows you to remove Bluetooth firmware installation so that the MFW can be installed without a working Bluetooth board (circumventing errorcode 0x8002F1F9). This is potentially dangerous if used on a PS3 with a working BT/Wifi board, and should only be used if the BT/Wifi is broken (or abcent, like on Arcade consoles). | ||
{{Boxcode| | {{Boxcode|content=<syntaxhighlight lang="tcl"> | ||
#!/usr/bin/tclsh | #!/usr/bin/tclsh | ||
# | # | ||
Line 667: | Line 666: | ||
=== Patch package installer for older (2.70) version support === | === Patch package installer for older (2.70) version support === | ||
save as patch_nas_plugin.tcl in task folder and only select 1 allow-debug-pkg or allow-debug-pkg-270 subtask at the same time, depending on target firmware. | save as patch_nas_plugin.tcl in task folder and only select 1 allow-debug-pkg or allow-debug-pkg-270 subtask at the same time, depending on target firmware. | ||
{{Boxcode| | {{Boxcode|content=<syntaxhighlight lang="tcl"> | ||
#!/usr/bin/tclsh | #!/usr/bin/tclsh | ||
# | # | ||
Line 749: | Line 748: | ||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
http://pastie.org/3901935 | http://pastie.org/3901935 | ||
== Using console / shellscript == | == Using console / shellscript == | ||
Line 1,519: | Line 753: | ||
By using commandline switches you can preset every task there is, plus the source PUP, destination PUP and debug settings. | By using commandline switches you can preset every task there is, plus the source PUP, destination PUP and debug settings. | ||
Example of PS3MFW Builder 0.2 tasks: | |||
{{Keyboard|content=<syntaxhighlight lang="bash"> | {{Keyboard|content=<syntaxhighlight lang="bash"> | ||
ps3mfw.exe %1 "Y:\PS3-Firmwares" "Z:/PS3MFW-out/test.pup" --change_version --add_license_msg --patch_lv1 --patch_lv2 --patch_nas_plugin --patch_privacy --patch_vsh --patch_category_game --spoof_version --debug true | ps3mfw.exe %1 "Y:\PS3-Firmwares" "Z:/PS3MFW-out/test.pup" --change_version --add_license_msg --patch_lv1 --patch_lv2 --patch_nas_plugin --patch_privacy --patch_vsh --patch_category_game --spoof_version --debug true | ||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
Example of PS3MFW Builder with OtherOS++ tasks (in this case tasks that fail with FW 3.15 are disabled/not selected): | |||
(in this case tasks that fail with FW 3.15 are disabled/not selected) | |||
{{Keyboard|content=<syntaxhighlight lang="bash"> | {{Keyboard|content=<syntaxhighlight lang="bash"> | ||
ps3mfw.exe %1 "Y:\PS3-Firmwares\" "Z:/MFWOtherOS-out/test.pup" --change_version --add_license_msg --patch_lv1 --patch-lv1-dispmgr-access false --patch-lv1-otheros-plus-plus false --patch_lv2 --patch-emer-init --patch_category_game --patch-package-files true --patch-app-home true --patch_nas_plugin --allow-pseudoretail-pkg true --allow-debug-pkg true --patch_vsh --allow-unsigned-app true --patch_privacy --debug true | ps3mfw.exe %1 "Y:\PS3-Firmwares\" "Z:/MFWOtherOS-out/test.pup" --change_version --add_license_msg --patch_lv1 --patch-lv1-dispmgr-access false --patch-lv1-otheros-plus-plus false --patch_lv2 --patch-emer-init --patch_category_game --patch-package-files true --patch-app-home true --patch_nas_plugin --allow-pseudoretail-pkg true --allow-debug-pkg true --patch_vsh --allow-unsigned-app true --patch_privacy --debug true | ||
</syntaxhighlight>}} | </syntaxhighlight>}} | ||
<br /><br /><br /><br /> | |||
</ | |||
== FAQ == | == FAQ == | ||
Line 1,562: | Line 788: | ||
== Downloads / precompiled & source == | == Downloads / precompiled & source == | ||
*Ubuntu precompiled build: | *Ubuntu precompiled build: [http://www.megaupload.com/?d=R2MHUZ2S ps3mfw.gibrew.8-11-11.ubuntu.zip] (by nevik) | ||
*Windows precompiled build of release v0.2 with ps3keys and tools: | *Windows precompiled build of release v0.2 with ps3keys and tools: [http://www.multiupload.com/QSFVE64T72 ps3mfw-w32_portable.rar (4.4 MB)] (pretested Windows 7 / XP) | ||
*Old Windows precompiled build of release v0.1: | *Old Windows precompiled build of release v0.1: [http://www.multiupload.com/RPC4L254H7 PS3MFW_0.1-win.rar (4.34 MB)] | ||
* Apple MAC OSX v0.2: | * Apple MAC OSX v0.2: | ||
** | **[http://www.multiupload.com/9G6FAH46DC PS3mfw.V.02.gitbrew.8-1-11.tasks.zip (4.15 MB)] (Intel) | ||
** | **[http://www.multiupload.com/MMK3TGS0CV PS3mfwV.02.ppc.OsX.gitbrew.8-1-11.tasks.zip (4.14 MB)] (PPC) | ||
* Gitbrew ps3tools (dd aug 18 2011): | * Gitbrew ps3tools (dd aug 18 2011): | ||
** for Linux and MACOSX (Intel&PPC) : | ** for Linux and MACOSX (Intel&PPC) : [http://www.multiupload.com/JWLFSBHVCO Mac-Linux-tools.zip (6.8 MB)] (thanks to nevik :) ) | ||
** for Win7-x64 (needs Cygwin 1.7.x) : | ** for Win7-x64 (needs Cygwin 1.7.x) : [http://www.multiupload.com/SKXTCK85YV Win7-x64-tools.zip (1.05 MB)] (thanks to nevik :) ) | ||
** for Windows x86 and x64 (contains cygwin DLL and other files needed) : | ** for Windows x86 and x64 (contains cygwin DLL and other files needed) : [http://www.multiupload.com/LX5K5TEHZS Windows-x86-x64-ps3tools.rar (2.01 MB)] | ||
*Old MAC OSX precompiled build of release v0.1: | *Old MAC OSX precompiled build of release v0.1: [http://www.multiupload.com/HIX10I5KRL PS3MFW_0.1.dmg (9.04 MB)] | ||
*Quick build scripts: | |||
**For Debian/Ubuntu: http://www.pastie.org/2117364 | |||
**For Debian/Archlinux/RHEL: http://pastie.org/private/6qd9gvzohdm7ivnxuibsg | |||
*Git source : https://github.com/euss/mfw |