A flexible BootLoader for PlayStation 2™ and PSX-DESR
This is a fork of PS2BBL by El Isra
It is hosted on github pages but with the additions below:
Edit config file as as needed. Recommended to R3Configurator to edit your config file. Paths are alredy pre-set to align with downloads from PS2 Homebrw Store This means you should only need to edit your Auto choice and best to set args for NHDDL as needed for the device you are loading ISOS from.
Config search is now boot-family aware to avoid loading unnecessary drivers at startup:
CONFIG.INI(CWD: Current Working Directory)- When loaded from device:
- MMCE boot:
mmce?:/PS2BBL/CONFIG.INI - MX4SIO boot:
mx4sio:/PS2BBL/CONFIG.INI - APA HDD boot:
hdd0:__sysconf:pfs:/PS2BBL/CONFIG.INI - BDM boot:
usb:/PS2BBL/CONFIG.INI/mass:/PS2BBL/CONFIG.INI/ata:/PS2BBL/CONFIG.INI
- MMCE boot:
- Memory card fallback:
- PS2 runtime:
mc?:/SYS-CONF/PS2BBL.INI - PSX-DESR runtime:
mc?:/SYS-CONF/PSXBBL.INI
- PS2 runtime:
- PSX runtime final fallback
xfrom:/PS2BBL/CONFIG.INI
- When compiled with `DISC_STOP_AT_BOOT=1
cdrom0:/PS2BBL/CONFIG.INI- Memory card fallback as defined by point 3 above.
PS2BBL supports these launch/config path prefixes:
mc0:/,mc1:/,mc?:/usb:/(preferred), andmass:/(legacy)
mmce0:/,mmce1:/,mmce?:/MMCE buildsmx4sio:/(preferred), andmassX:/(legacy) MX4SIO buildshdd0:partition:pfs:/<path to elf>HDD buildsxfrom:/paths PSX DESR buildsata:/exFAT HDD BDM deviceilink:/(BDM mass-storage roots) not yet implementedDISC_STOP_AT_BOOT=1compile-time profile to always stop optical disc after config bootstrap
Use LOGO_DISPLAY = 3 for hotkey-name display. Names will be defined by NAME_<BUTTON>.
0No Logo/Console info1Console Info2PS2BBLE/PSXBBLE Logo and Console Info3Hotkey Graphic Display withNAME_BUTTON = <TITLE>displayed from config file- Example:
NAME_SQUARE = POPSLOADER
- Example:
If a custom logo file (LOGO.BIN) is found in CWD (current working directory), it replaces the embedded PS2BBLE/PSXBBLE logo.
Convert a PNG to the expected raw file:
-
PNG should be RGBA 8 Bit indexed 255 colors per channel and 256x64 resolution.
-
Release package (script is in release root):
python png_to_logo_rbga.py my_logo.png- Place the created
LOGO.BINnext to PS2BBL Extended. This should bemc?:/BOOT/if using downloads from PS2 Homebrew Store
APP_GAMEID = 1enables visual game ID for apps/homebrew up to 11 characters derived from filename or PS1/2 DiscCDROM_DISABLE_GAMEID = 1disables visual game ID for discs launched viacdrom.
- Global key/value:
DISC_STOP = 0/1 DISC_STOP = 1stops optical disc after config bootstrap when a config file was found.DISC_STOP = 0(or omitted) keeps default behavior.-disc_stopcan be added per launch entry to stop disc after target ELF is found.
VIDEO_MODE = AUTO, NTSC, PAL, 480PWill use PS2 default or force either of the other 3 modes.
- Enter with
TRIANGLE + CROSSduring boot - Selector forces
LOGO_DISPLAY = 3while active so you can see logo/hotkey UI context. - Controls:
LEFT/RIGHTcycle modes:AUTO,NTSC,PAL,480PSELECTsave the currently selected mode to the active config fileSTARTexit selector and continue to hotkey display
For LK_*_E* = cdrom, supported args are:
-nologo-nogameid-ps1fast-ps1smooth-ps1vneg-gsm=<v[:c]>
- Use
cdromas the launch entry path. - Add
-nologoto the entry args to boot PS2 discs directly (skiprom0:PS2LOGO). - Without
-nologo, PS2BBL runs disc via PS2LOGO and patches it to always use disc region and bypass logo checksum checks. - DECKARD IE 75K and later: XPARAM.IRX is applied automatically when needed for no-logo launches.
These apply per cdrom launch entry, not globally.
-ps1fastenables fast PS1 disc speed.-ps1smoothenables texture smoothing.-ps1vnegruns PS1DRV via PS1VModeNegator. Useful on setups where console mode and disc mode differ (for example some MechaPwn/modchip cases).
Use ARG_<BUTTON>_E? = lines to pass args to an ELF (see INI examples).
- Insert launched elf args first then append with desired internal PS2BBL args next (see below) NHDDL is a great candidate to use args, as it speeds up NHDDL boot.
-titleid=SLUS_123.45overrides the app title ID (up to 11 chars).-appidforces app visual game ID even ifAPP_GAMEID = 0.-disc_stopstops disc after target ELF is loaded (useful per entry withoutDISC_STOP_AT_BOOTbuilds).-gsm=<v[:c]>runs the target ELF via embedded eGSM (ignored forrom?:paths). This must be the last arg if used.-disc_stopis ignored forcdromlaunch entries.-dev9=<mode>sets DEV9/HDD policy before launching the target ELF. Supported modes:NICHDDkeeps both DEV9 (network adapter) and HDD powered/on.NICkeeps DEV9/network on, unmountspfs0:, and putshdd0:/hdd1:into immediate idle.- if omitted, PS2BBL does not force a DEV9 policy override.
- note: on non-HDD builds this option has no effect.
-patinfoenables PATINFO handling for:PATINFOentries.- PS2BBL reads
SYSTEM.CNFfrom the partition attribute area (PS2ICON3D) and appliesBOOT2/BOOT/path,arg*,skip_argv0, andHDDUNITPOWER. - if
BOOT2/BOOT/path=PATINFO, PS2BBL loads the embedded ELF from partition attribute area and uses internal-la=E...handoff. - if
IOPRP=PATINFO(or custom path), PS2BBL passes it to stage2 via internal-la=I...handoff. - if
-patinfois present, the first remaining arg overrides the CNFBOOT2/BOOT/pathtarget. This is for HDD builds.
PATINFO example:NAME_R1 = My App via PATINFO LK_R1_E1 = hdd0:+OSDMENU:PATINFO ARG_R1_E1 = pfs:/APPS/MYAPP.ELF ARG_R1_E1 = -patinfo # Tells PS2BBL to use first arg as patinfo boot path.
- PS2BBL reads
Example to launch NHDDL with video mode 480p and look for isos on mmce and exfat hdd without needing nhddl.yaml. The benefit is no wasted time loading drivers, finding and loading nhddl.yaml. This is the quickest way to boot NHDDL and show ISO list.
NAME_R1 = NHDDL
LK_R1_E1 = mmce?:/NEUTRINO/nhddl.elf
ARG_R1_E1 = -video=480p
ARG_R1_E1 = -mode=mmce
ARG_R1_E1 = -mode=ata
- PS2BBL parses and consumes only trailing loader-control args from
ARG_*:-appid,-titleid=,-dev9=,-patinfo,-disc_stop,-gsm=. - Parsing is bottom to top and stops at the first non-control arg (OSDMenu-style trailing behavior).
- For
:PATINFOlaunch paths, PS2BBL parses partition-attributeSYSTEM.CNFand appends CNFarg*entries after user app arguments. - If
-patinfois set and launch path contains:PATINFO, the first remaining user app argument becomes the target ELF path (overrides CNF boot path) and is removed from app argv. If no remaining argument exists, launch is aborted (OSDMenu parity), and CNFBOOT2/BOOT/pathis not used. - Remaining arguments preserve order and are passed to the launched app.
For PS2 discs, eGSM is read from OSDGSM.CNF automatically (no INI path setting required). See here for config file format.
-gsm=<v[:c]>runs the target ELF via embedded eGSM (ignored forrom?:paths).- eGSM is applied to the launched target (ELF/disc), not to PS2BBL itself. eGSM format (OSDMenu-style):
v= video mode:- empty = do not force (default)
fp1= force progressive scan (240p/288p)fp2= force progressive scan (480p/576p)1080ix1= force 1080i, width/height x11080ix2= force 1080i, width/height x21080ix3= force 1080i, width/height x3c= compatibility mode:- empty = none (default)
1= field flipping type 12= field flipping type 23= field flipping type 3
eGSM ARG examples:
-gsm=fp2-gsm=fp2:1-gsm=1080ix2
Usage example:
LK_TRIANGLE_E1 = mc0:/APP_WLE-ISR/WLE-ISR.ELF
ARG_TRIANGLE_E1 = -gsm=1080ix2
PS2BBLE now handles launching elf/kelf internally without user needing to define kelf launch action.RUNKELF
you tell me ;)
-
From saildot4k
- @israpps for PS2BBL
- @pcm720 for
- @sp193 for PS1 Video Negator
- @nathanneurotic for PS2BBLE 10path, ideas and persuasion
- @Berion for logos, background and hotkey graphics
-
From El Isra (PS2BBL Developer):
- @SP193 for the OSD initialization libraries, wich serve as the foundation for this project
- @asmblur, for encouraging me to make this monster on latest sdk
- @uyjulian and @fjtrujy for always helping me