1@if "%_ECHOON%" == "" echo off 2 3:: ############################################################################### 4:: # 5:: # Copyright (C) Nintendo. All rights reserved. 6:: # 7:: # These coded instructions, statements, and computer programs contain 8:: # proprietary information of Nintendo of America Inc. and/or Nintendo 9:: # Company Ltd., and are protected by Federal copyright law. They may 10:: # not be disclosed to third parties or copied or duplicated in any form, 11:: # in whole or in part, without the prior written consent of Nintendo.:::: 12:: # 13:: ############################################################################### 14 15:: ************************************************************ 16:: * CAFE - Environment 17:: ************************************************************ 18 19:: From here, variable changes to do not affect environment (unless that's what was asked) 20for %%i in (%*) do if /i "%%~i" == "-setenv" goto :DONT_SETLOCAL 21SETLOCAL 22:DONT_SETLOCAL 23 24if NOT DEFINED USE_EXI_AS_DEBUG_CHANNEL ( 25 set USE_EXI_AS_DEBUG_CHANNEL=1 26) 27 28:: Default location of CAFE_ROOT (location of cafe.bat) 29set CAFE_ROOT_DOS=%~dp0 30if NOT "%CAFE_ROOT_DOS:~-2%" == ":\" set CAFE_ROOT_DOS=%CAFE_ROOT_DOS:~0,-1% 31REM if NOT "%CAFE_ROOT%" == "" for %%i in (%CAFE_ROOT%) do set CAFE_ROOT_DOS=%%~fi 32 33REM *** 34REM Set options 35 36REM Anything pre-set in the environment takes 37REM effect, unless overriden by commandline options. 38 if "%USE_MULTI%" == "1" set SESSION_MANAGER=1&& REM Another name for this option 39 40REM Commandline (per-invocation) options. Takes precedence. 41 if "%~1" == "" goto :getopt_done 42 set _CMDLINE=%* 43 set CAFE_SHELL_ARGS= 44 45 REM make sure we don't misinterpret any metacharacters 46 set _CMDLINE=%_CMDLINE:&=$amper$% 47 set _CMDLINE=%_CMDLINE:|=$pipebar$% 48 set _CMDLINE=%_CMDLINE:>=$gtrthan$% 49 set _CMDLINE=%_CMDLINE:<=$lessthan$% 50 setlocal enabledelayedexpansion && REM hackery for percent signs 51 set _CMDLINE=!_CMDLINE:%%=$percent$! 52 endlocal && set _CMDLINE=%_CMDLINE% 53 set _CMDLINE=%_CMDLINE:"=$quote$% 54 55 call :getopt_loop %_CMDLINE% 56 set _CMDLINE= 57 REM Aborting because of _USAGE? 58 if not "%_USAGE%" == "" set _USAGE=&& goto :END 59 goto :getopt_done 60 61 :getopt_loop 62 if "%~1" == "" goto :eof 63 REM Keep processing arguments progressively 64 for /f "tokens=1,*" %%i in ("%*") do call :getopt %%~i&call :getopt_loop %%~j 65 goto :eof 66 67 :getopt 68 set _ARG=%* 69 if not defined _ARG goto :getopt_done 70 71 for %%i in (-h -help --help) do if "%_ARG:$quote$=%" == "%%i" goto :usage 72 if "%_ARG:$quote$=%" == "-?" goto :usage && REM "-?" doesn't work in "for" loop 8-( 73 74 if /i "%_ARG:$quote$=%" == "-default" set _SETDEFAULTS=1&& goto :getopt_next 75 if /i "%_ARG:$quote$=%" == "-setenv" set _CAFE_SETENV=1&& goto :getopt_next 76 if /i "%_ARG:$quote$=%" == "-cafex" set USE_CAFEX=1&& goto :getopt_next 77 if /i "%_ARG:$quote$=%" == "-nocafex" set USE_CAFEX=0&& goto :getopt_next 78 if /i "%_ARG:$quote$=%" == "-multi" set SESSION_MANAGER=1&& goto :getopt_next 79 if /i "%_ARG:$quote$=%" == "-nomulti" set SESSION_MANAGER=0&& goto :getopt_next 80 if /i "%_ARG:$quote$=%" == "-session" set SESSION_MANAGER=1&& goto :getopt_next 81 if /i "%_ARG:$quote$=%" == "-nosession" set SESSION_MANAGER=0&& goto :getopt_next 82 if /i "%_ARG:$quote$=%" == "-syncsession" set DO_SYNC_SESSION=1&& goto :getopt_next 83 if /i "%_ARG:$quote$=%" == "-nosyncsession" set DO_SYNC_SESSION=0&& goto :getopt_next 84 if /i "%_ARG:$quote$=%" == "-pcfsoversata" set USE_PCFS_OVER_SATA=1&& goto :getopt_next 85 if /i "%_ARG:$quote$=%" == "-nopcfsoversata" set USE_PCFS_OVER_SATA=0&& goto :getopt_next 86 if /i "%_ARG:$quote$=%" == "-cygwin" set USE_CYGWIN=1&& goto :getopt_next 87 if /i "%_ARG:$quote$=%" == "-nocygwin" set USE_CYGWIN=0&& goto :getopt_next 88 89 if /i "%_ARG:$quote$=%" == "-bridge" set _BRIDGE_ARGS=2&& goto :getopt_next 90 91 if "%_BRIDGE_ARGS%" EQU "2" set BRIDGE_CURRENT_NAME=%_ARG:$quote$="% 92 if "%_BRIDGE_ARGS%" EQU "1" set BRIDGE_CURRENT_IP_ADDRESS=%_ARG:$quote$="% 93 if "%_BRIDGE_ARGS%" GTR "0" set /a _BRIDGE_ARGS=_BRIDGE_ARGS - 1 && goto :getopt_next 94 95 REM It's not an argument we recognize; add it to the command to be launched. 96 REM Translate all the metacharacters back. 97 for /f "delims=" %%i in ("%_ARG:$amper$=&%") do set _ARG=%%i 98 for /f "delims=" %%i in ("%_ARG:$pipebar$=|%") do set _ARG=%%i 99 for /f "delims=" %%i in ("%_ARG:$gtrthan$=>%") do set _ARG=%%i 100 for /f "delims=" %%i in ("%_ARG:$lessthan$=<%") do set _ARG=%%i 101 setlocal enabledelayedexpansion 102 for /f "delims=" %%i in ("!_ARG:$percent$=%%!") do set _ARG=%%i 103 endlocal && set CAFE_SHELL_ARGS=%CAFE_SHELL_ARGS% %_ARG:$quote$="% 104 105 :getopt_next 106 set _ARG= 107 goto :eof 108 109 :getopt_done 110 if "%_BRIDGE_ARGS%" GTR "0" echo Not enough arguments for -bridge option!&& set _BRIDGE_ARGS=&& goto :usage 111 set _BRIDGE_ARGS= 112 113REM Read defaults from config file, for anything that's not set yet. 114 set _CONFIG=%APPDATA%\Nintendo\cafe.defaults 115 if NOT EXIST "%_CONFIG%" goto :update_config 116 117 for /f "tokens=1,2 delims==" %%i in (%_CONFIG%) do call :set_config_value %%i %%j 118 if not exist "%APPDATA%\disable_pcfs_over_sata" goto :update_config 119 REM old "pcfs_over_sata" sentinel exists; update to new config file 120 set USE_PCFS_OVER_SATA=0 121 set _SETDEFAULTS=1 122 del /f "%APPDATA%\disable_pcfs_over_sata" 2>nul 123 goto :update_config 124 125 :set_config_value 126 if "%USE_CAFEX%" == "" if /i "%1" == "USE_CAFEX" set USE_CAFEX=%2 127 if "%SESSION_MANAGER%" == "" if /i "%1" == "SESSION_MANAGER" set SESSION_MANAGER=%2 128 if "%SESSION_MANAGER%" == "" if /i "%1" == "USE_MULTI" set SESSION_MANAGER=%2 129 if "%DO_SYNC_SESSION%" == "" if /i "%1" == "DO_SYNC_SESSION" set DO_SYNC_SESSION=%2 130 if "%USE_PCFS_OVER_SATA%" == "" if /i "%1" == "USE_PCFS_OVER_SATA" set USE_PCFS_OVER_SATA=%2 131 if "%USE_CYGWIN%" == "" if /i "%1" == "USE_CYGWIN" set USE_CYGWIN=%2 132 goto :eof 133 134 :update_config 135 REM rewrite config file if requested; NOT "thread-safe"! 136 if "%_SETDEFAULTS%" == "" goto :config_done 137 138 set _CONFIG="%_CONFIG%" 139 for %%i in (%_CONFIG%) do md %%~dpi 2>nul 140 del /f %_CONFIG% 2>nul 141 copy /y NUL %_CONFIG% 1>nul 2>nul 142 if NOT EXIST %_CONFIG% echo WARNING! Could not save options as default! && goto :config_done 143 for %%i in (%_CONFIG%) do if NOT "%%~zi" == "0" echo WARNING! Could not save options as default! && goto :config_done 144 145 if NOT "%USE_CAFEX%" == "" >>%_CONFIG% echo USE_CAFEX=%USE_CAFEX% 146 if NOT "%SESSION_MANAGER%" == "" >>%_CONFIG% echo SESSION_MANAGER=%SESSION_MANAGER% 147 if NOT "%DO_SYNC_SESSION%" == "" >>%_CONFIG% echo DO_SYNC_SESSION=%DO_SYNC_SESSION% 148 if NOT "%USE_PCFS_OVER_SATA%" == "" >>%_CONFIG% echo USE_PCFS_OVER_SATA=%USE_PCFS_OVER_SATA% 149 if NOT "%USE_CYGWIN%" == "" >>%_CONFIG% echo USE_CYGWIN=%USE_CYGWIN% 150 :config_done 151 set _CONFIG= 152 153REM Built in defaults for anything that's not set yet. 154 if "%USE_CAFEX%" == "" set USE_CAFEX=1 155 if "%USE_PCFS_OVER_SATA%" == "" set USE_PCFS_OVER_SATA=1 156 if "%SESSION_MANAGER%"=="" set SESSION_MANAGER=0 157 if "%USE_CYGWIN%" == "" set USE_CYGWIN=1 158 159:: ************************************************************ 160:: Windows paths (DOS) 161 162:: For this script only so Windows can start Cygwin 163:: NOTE: In cafe.bat shell, this is just "/" 164if "%USE_CYGWIN%" == "0" goto :no_cygwin_path 165if "%MSYS_PATH%" == "" if exist C:\MinGW\msys\1.0\msys.bat set MSYS_PATH=C:\MinGW\msys\1.0 166if "%CYGWIN_PATH%" == "" if exist C:\cygwin set CYGWIN_PATH=C:\cygwin 167if "%CYGWIN_PATH%" == "" if not "%MSYS_PATH%" == "" set CYGWIN_PATH=%MSYS_PATH% 168if "%CYGWIN_PATH%" == "" goto cygwin_error 169if not exist %CYGWIN_PATH% echo %CYGWIN_PATH% not found! && goto cygwin_error 170if not "%CAFE_TERM_USE%" == "" if not exist "%CAFE_TERM_USE%" echo %CAFE_TERM_USE% not found! && goto cygwin_error 171if not exist %CYGWIN_PATH%\bin\mintty.exe if not exist %CYGWIN_PATH%\bin\bash.exe echo bash.exe/mintty.exe not found in %CYGWIN_PATH%\bin! && goto cygwin_error 172:no_cygwin_path 173 174if "%USE_CYGWIN%" == "0" goto :no_use_cygwin 175if not exist %CYGWIN_PATH%\bin\cygcheck.exe goto :no_check_cygcheck 176:: ************************************************************ 177:: Cygwin paths (UNIX) 178 179for /F "usebackq delims=" %%s in (`%CYGWIN_PATH%\bin\cygcheck -c cygwin ^| %CYGWIN_PATH%\bin\grep -m 1 "^cygwin .*1.7"`) do (set CYGCHECK=%%s) 180if "%CYGCHECK%" == "" echo WARNING: This version of cygwin is not supported. The expected version is 1.7.x 181for /f %%i in ('%CYGWIN_PATH%\bin\uname -m 2^>nul') do if "%%i" == "x86_64" echo WARNING: 64-bit Cygwin is not supported. You should install the 32-bit version! 182 183:no_check_cygcheck 184 185REM Find Cygwin or MSYS/MinGW version of cygpath.exe 186set _CYGPATH_DIR=%CYGWIN_PATH%\bin 187if not exist %_CYGPATH_DIR%\cygpath.exe set _CYGPATH_DIR=%CAFE_ROOT_DOS%\system\bin\tool\msys 188if not exist %_CYGPATH_DIR%\cygpath.exe set _CYGPATH_DIR=%CAFE_ROOT_DOS%\system\src\tool\bin\msys 189if not exist %_CYGPATH_DIR%\cygpath.exe echo Could not find cygpath.exe in your environment! && goto :END 190 191:no_use_cygwin 192 193:: Convert CAFE_ROOT_DOS to UNIX-style path 194:: NOTE: If CAFE_ROOT_DOS is a directory under CYGWIN_PATH (i.e. home), please 195:: manually set CAFE_ROOT below to use /cygdrive/<path> as starting path that the build system requires. 196:: An alternative is to set your enviroment variable HOME to your home 197:: directory using UNIX-style (e.g., /cygdrive/c/Users/me) 198:: 199call:convert_dos_to_unix_path "CAFE_ROOT","%CAFE_ROOT_DOS%" 200 201:: Default environment for disc emulation directory if not set by Windows 202:: Clear the default flags in case we call cafe.bat from another cafe.bat. 203set CAFE_CONTENT_DEFAULT= 204set CAFE_META_DEFAULT= 205set CAFE_SAVE_DEFAULT= 206set CAFE_SLC_DEFAULT= 207set CAFE_MLC_DEFAULT= 208 209if "%CAFE_CONTENT_DIR%"=="" ( 210 set CAFE_CONTENT_DEFAULT=1 211 set CAFE_CONTENT_DIR=%CAFE_ROOT%/data/disc/content 212) 213call:convert_dos_to_unix_path "CAFE_CONTENT_DIR","%CAFE_CONTENT_DIR%" 214 215:: Default environment for FSA /vol/meta if not set by Windows 216if "%CAFE_META_DIR%"=="" ( 217 set CAFE_META_DEFAULT=1 218 set CAFE_META_DIR=%CAFE_ROOT%/data/disc/meta 219) 220call:convert_dos_to_unix_path "CAFE_META_DIR","%CAFE_META_DIR%" 221 222:: Default environment for FSA /vol/save if not set by Windows 223if "%CAFE_SAVE_DIR%"=="" ( 224 set CAFE_SAVE_DEFAULT=1 225 set CAFE_SAVE_DIR=%CAFE_ROOT%/data/save 226) 227call:convert_dos_to_unix_path "CAFE_SAVE_DIR","%CAFE_SAVE_DIR%" 228 229:: Default environment for SLC emulation directory if not set by Windows 230if "%CAFE_SLC_DIR%"=="" ( 231 set CAFE_SLC_DEFAULT=1 232 set CAFE_SLC_DIR=%CAFE_ROOT%/data/slc 233) 234call:convert_dos_to_unix_path "CAFE_SLC_DIR","%CAFE_SLC_DIR%" 235 236:: Default environment for MLC emulation directory if not set by Windows 237if "%CAFE_MLC_DIR%"=="" ( 238 set CAFE_MLC_DEFAULT=1 239 set CAFE_MLC_DIR=%CAFE_ROOT%/data/mlc 240) 241call:convert_dos_to_unix_path "CAFE_MLC_DIR","%CAFE_MLC_DIR%" 242 243:: Default Mastering Tools directory 244if "%CAFE_MASTERING_TOOLS%"=="" set CAFE_MASTERING_TOOLS=%CAFE_ROOT%/system/bin/tool/mastering 245if "%CAFE_MASTERING_TOOLS%"=="%CAFE_ROOT%/system/bin/tool/mastering" set PATH=%CAFE_MASTERING_TOOLS%;%PATH% 246call:convert_dos_to_unix_path "CAFE_MASTERING_TOOLS","%CAFE_MASTERING_TOOLS%" 247 248:: Default TEMP directory 249if "%CAFE_TEMP%"=="" set CAFE_TEMP=%CAFE_ROOT%/temp/%USERNAME% 250if not exist "%CAFE_ROOT_DOS%/temp/%USERNAME%" mkdir "%CAFE_ROOT_DOS%/temp/%USERNAME%" 251call:convert_dos_to_unix_path "CAFE_TEMP","%CAFE_TEMP%" 252 253:: Default boot mode 254:: Causes a system to boot from PCFS or NAND 255if "%CAFE_BOOT_MODE%" =="" set CAFE_BOOT_MODE=PCFS 256 257:: SDK_VER 258set SDK_VER=0.00.00 259if not exist "%CAFE_ROOT_DOS%/system/include/sdk_ver.h" goto :no_sdk_ver 260for /F "usebackq tokens=1,2,3" %%i in ("%CAFE_ROOT_DOS%/system/include/sdk_ver.h") do if "%%i" == "#define" if "%%j" == "CAFE_OS_SDK_VERSION" set ver=%%k 261if not "%ver%" == "" set SDK_VER=%ver:~0,-4%.%ver:~-4,-2%.%ver:~-2% 262:no_sdk_ver 263 264:: Check if HBM app.xml files are present 265set SHOW_HBM_WARNING=0 266if %USE_CYGWIN% == 1 ( 267 call:convert_unix_to_dos_path "CAFE_MLC_DIR_DOS", %CAFE_MLC_DIR% 268) else set CAFE_MLC_DIR_DOS=%CAFE_MLC_DIR% 269if not exist "%CAFE_MLC_DIR_DOS%\sys\title\00050030\1001000a\code\app.xml" set SHOW_HBM_WARNING=1 270if not exist "%CAFE_MLC_DIR_DOS%\sys\title\00050030\1001010a\code\app.xml" set SHOW_HBM_WARNING=1 271if not exist "%CAFE_MLC_DIR_DOS%\sys\title\00050030\1001020a\code\app.xml" set SHOW_HBM_WARNING=1 272if %SHOW_HBM_WARNING% == 1 ( 273 if %CAFE_BOOT_MODE% == PCFS ( 274 echo Warning: Some system applications on the system might be missing. If the system fails to boot, please reinstall the SDK to restore the missing system applications and run cafeupdate. 275 ) 276) 277 278:: ************************************************************ 279:: Green Hills paths 280 281set GHS_ROOT_FROM_ENV="%GHS_ROOT%" 282if not "%GHS_ROOT%"=="" goto ghs_root_set 283:: No GHS_ROOT specified. 284:: Accept an installed version as new as the one in the first set below, 285:: otherwise search for increasingly older versions until the oldest allowed. 286set GHS_ROOT=C:\ghs\multi5325 287if not exist "%GHS_ROOT%" set GHS_ROOT=C:\ghs\multi5324 288:ghs_root_set 289:: Now have a selected version. Sanity check it. 290if exist "%GHS_ROOT%\multi.exe" goto multi_ok 291echo. 292echo ************************************* 293echo WARNING: GHS MULTI.EXE not found at %GHS_ROOT%\ 294echo. 295echo YOU MUST ACQUIRE AND INSTALL MULTI TO BUILD 296echo. 297echo ************************************* 298set CAFE_GHS_VERSION="bad" 299goto done_set_toolchain 300:multi_ok 301if exist "%GHS_ROOT%\gversion.exe" goto version_ok 302echo. 303echo ************************************* 304echo WARNING: GHS GVERSION.EXE not found at %GHS_ROOT%\ 305echo. 306echo THERE IS SOMETHING WRONG WITH YOUR GHS INSTALLATION 307echo. 308echo ************************************* 309set CAFE_GHS_VERSION="bad" 310goto done_set_toolchain 311:version_ok 312 313:: assume correct version, check_ghs_version will set version to last 314:: incorrect version seen 315 316set CAFE_GHS_VERSION_EXPECT=v5.3.24 P0 317:: because of windows treating v5.3.1 as greater than v5.3.1 P1 318:: if there is not a patch number add " P0" 319set CAFE_GHS_VERCMP_EXPECT=v5.3.24 P0 320set CAFE_GHS_VERSION=%CAFE_GHS_VERSION_EXPECT% 321set CAFE_GHS_VERCMP=%CAFE_GHS_VERCMP_EXPECT% 322:: check minimum versions supported 323call:check_ghs_version asppc, "v5.3.24", " P0" 324call:check_ghs_version ccppc, "v5.3.24", " P0" 325call:check_ghs_version cxppc, "v5.3.24", " P0" 326call:check_ghs_version ecomppc, "v5.3.24", " P0" 327call:check_ghs_version dblink, "v5.3.24", " P0" 328call:check_ghs_version elxr, "v5.3.24", " P0" 329call:check_ghs_version multi, "v5.3.24", " P0" 330call:check_ghs_version cafeserv, "v5.3.24", " P0" 331 332:: GUI version must check the date 333:: call:check_ghs_version_date cafeserv, "v5.0.6", " P0", 1297317659, "Wed Feb 09 22:00:59 PST 2011" 334 335if "%CAFE_GHS_VERSION%"=="" set CAFE_GHS_VERSION="unknown" 336 337call:convert_dos_to_unix_path "GHS_ROOT","%GHS_ROOT%" 338 339set CAFE_GHS_TLS_AVAILABLE=FALSE 340if "%CAFE_GHS_VERSION%" GEQ "v5.3.20" ( 341 set CAFE_GHS_TLS_AVAILABLE=TRUE 342) 343 344set CAFE_GHS_SUPPORTS_MAKERPL_DBG_SOURCE_ROOT=FALSE 345if "%CAFE_GHS_VERSION%" GEQ "v5.3.21" ( 346 set CAFE_GHS_SUPPORTS_MAKERPL_DBG_SOURCE_ROOT=TRUE 347) 348 349set CAFE_GHS_SUPPORTS_MAKERPL_DBG_SOURCE_ROOT=FALSE 350if "%CAFE_GHS_VERSION%" GEQ "v5.3.21" ( 351 set CAFE_GHS_SUPPORTS_MAKERPL_DBG_SOURCE_ROOT=TRUE 352) 353 354if "%CAFE_GHS_VERCMP%" GEQ "%CAFE_GHS_VERCMP_EXPECT%" goto ghs_version_ok 355 echo. 356 echo ********************************************************** 357 echo Newer version of GHS tools %CAFE_GHS_VERSION_EXPECT% is available please update 358 echo. 359 echo Copy MULTI5324_Nintendo.zip. 360 echo Expand and run MULTI5324_Nintendo/setup_windows.exe. 361 echo Do not install over 5.3.23. Install to 362 echo a new directory, for example: 363 echo C:/ghs/multi5324 364 echo. 365 echo then exit cafe.bat and rerun cafe.bat 366 echo. 367if not "GHS_ROOT_FROM_ENV"=="" ( 368 echo If you have GHS_ROOT set in your environment to point to 369 echo %GHS_ROOT% 370 echo please update the system environment variable "GHS_ROOT" 371 echo (Windows Control Panel - System - Advanced System Settings 372 echo - Environment Variables) 373) 374 echo ********************************************************** 375:ghs_version_ok 376 377:done_set_toolchain 378 379:: ************************************************************ 380:: SDK environment variables 381 382set TOOLCHAIN=ghs 383set USE_GHS=1 384set CAFE_USE_RPZ=0 385set Platform= 386set PLATFORM=cafe 387:: Default output [cattoucan | toucan] 388if "%CAFE_CONSOLE%"=="" set CAFE_CONSOLE=cattoucan 389:: Default hardware board connected to PC for [catdevmp|catdev4] 390if "%CAFE_HARDWARE%"=="" set CAFE_HARDWARE=catdevmp 391 392:: ************************************************************ 393 394:: ************************************************************ 395:: * 396:: * DO NOT MODIFY BELOW HERE 397:: * 398:: ************************************************************ 399 400:: PATH (Cygwin will add Windows PATH environment variable) 401set PATH=%CAFE_ROOT%/system/bin/tool;%CAFE_ROOT%/system/bin/win32;%PATH% 402REM If we're in an MSYS window, not Cygwin, add special MSYS-related tools to the PATH 403if NOT "%USE_CYGWIN%" == "0" if not exist %CYGWIN_PATH%\bin\cygwin1.dll set PATH=%PATH%;%_CYGPATH_DIR% 404 405:: Cygwin setup 406if NOT "%USE_CYGWIN%" == "0" set CYGWIN=nodosfilewarning 407 408:: ************************************************************ 409:: Bridge environment variables 410if "%USE_SINGLE_CGI%" == "" set USE_SINGLE_CGI=1 411if not "%BRIDGE_CURRENT_NAME%"=="" goto :skip_mion 412if not exist "%MION_BRIDGE_TOOLS%\getbridgeconfig.exe" goto skip_mion 413:mion_name 414for /f "usebackq tokens=5" %%i in (`"%MION_BRIDGE_TOOLS%\getbridgeconfig.exe" -default`) do ( 415 set BRIDGE_CURRENT_NAME=%%i 416 goto mion_ip_address 417) 418:mion_ip_address 419for /f "usebackq skip=1 tokens=5" %%i in (`"%MION_BRIDGE_TOOLS%\getbridgeconfig.exe" -default`) do ( 420 set BRIDGE_CURRENT_IP_ADDRESS=%%i 421) 422:skip_mion 423 424:: Match boot mode w/ what is running on the CAT-DEV 425if "%BRIDGE_CURRENT_IP_ADDRESS%"=="" goto nand_mode_set 426 427set MIONPS_PATH=%CAFE_ROOT_DOS%\system\bin\tool\mionps.exe 428if not exist "%MIONPS_PATH%" set MIONPS_PATH=%CAFE_ROOT_DOS%\system\src\tool\mionps\bin\win32\mionps.exe 429 430:: Match SDK Version w/ what is running on the CAT-DEV 431for /f "tokens=1,2,3,4 delims= " %%G in ('"%MIONPS_PATH%" %BRIDGE_CURRENT_IP_ADDRESS% 2 3 4 5') do (set NAND_MODE_BIT=%%G&set SDK_MAJ_VER=%%H&set SDK_MIN_VER=%%I&set SDK_MIC_VER=%%J); 432if "%NAND_MODE_BIT%"=="ERROR!" ( 433 echo *** Your CAT-DEV is not accessible. It might be powered off or offline *** 434 goto nand_mode_set 435) 436 437set SDK_MIN_VER=0%SDK_MIN_VER% 438set SDK_MIN_VER=%SDK_MIN_VER:~-2% 439 440set SDK_MIC_VER=0%SDK_MIC_VER% 441set SDK_MIC_VER=%SDK_MIC_VER:~-2% 442 443if not "%SDK_MAJ_VER%.%SDK_MIN_VER%.%SDK_MIC_VER%" == "%SDK_VER%" ( 444 echo. 445 echo !!! Your CAT-DEV is not at the same level as this SDK. !!! 446 echo SDK Version: %SDK_VER% CAT-DEV SDK Version: %SDK_MAJ_VER%.%SDK_MIN_VER%.%SDK_MIC_VER% 447 echo !!! Please run cafeupdate to get them in sync. !!! 448 echo. 449) 450 451:nand_mode_set 452if "%NAND_MODE_BIT%"=="1" ( 453 set CAFE_BOOT_MODE=NAND 454) 455 456:: ************************************************************ 457:: Set the session specific variables and paths 458call:initsession 459 460if "%ERRORLEVEL%"=="5" ( 461 exit /b %ERRORLEVEL% 462) 463 464REM Clean up temporary variables 465set _CYGPATH_DIR= 466 467:: ************************************************************ 468 469:: If the extra arguments exist, skip echos. 470if DEFINED CAFE_SHELL_ARGS goto RUN_BASH 471 472@echo ========================================================== 473@echo Welcome to the Nintendo CAFE! 474@echo ========================================================== 475@echo Environment initialized for this session only. 476@echo SDK_VER = %SDK_VER% 477@echo CAFE_ROOT = %CAFE_ROOT% 478@echo CAFE_HARDWARE = %CAFE_HARDWARE% 479@echo CAFE_BOOT_MODE = %CAFE_BOOT_MODE% 480@if /i "%TOOLCHAIN%"=="ghs" echo GHS_ROOT = %GHS_ROOT% 481@if /i "%TOOLCHAIN%"=="ghs" echo CAFE_GHS_VERSION = "%CAFE_GHS_VERSION%" 482@echo CAFE_CONTENT_DIR = %CAFE_CONTENT_DIR% 483@echo CAFE_SAVE_DIR = %CAFE_SAVE_DIR% 484@echo CAFE_META_DIR = %CAFE_META_DIR% 485@echo CAFE_SLC_DIR = %CAFE_SLC_DIR% 486@echo CAFE_MLC_DIR = %CAFE_MLC_DIR% 487if "%BRIDGE_CURRENT_NAME%"=="" goto DONOTECHOMION 488@echo Current bridge = %BRIDGE_CURRENT_NAME% 489@echo Bridge IP Addr = %BRIDGE_CURRENT_IP_ADDRESS% 490:DONOTECHOMION 491@if "%SESSION_MANAGER%"=="1" ( 492@echo SESSION_NAME = %SESSION_NAME% 493@echo HIO_OUT_PORT = %SESSION_HIO_OUT_PORT% 494@echo CAFE_DATA_DIR = %CAFE_DATA_DIR% 495) 496@echo. 497@echo ---------------------------------------------------------- 498 499:RUN_BASH 500if "%USE_CYGWIN%" == "0" goto :USE_CMD 501 502:: Copy cafe.sh in /etc/profile.d to update the title 503md %CYGWIN_PATH%\etc\profile.d >nul 2>&1 504if "%SESSION_MANAGER%"=="1" copy "%CAFE_ROOT_DOS%\system\bin\tool\cafe_profile.sh" "%CYGWIN_PATH%\etc\profile.d\cafe.sh" > nul 505 506:: The extra arguments are for the buildsystem 507if "%CAFE_USE_MINTTY%" == "" goto USE_ENV 508if not exist "%CYGWIN_PATH%\bin\mintty.exe" goto USE_BASH 509 510echo Running mintty. 511%CYGWIN_PATH%\bin\mintty -e %CYGWIN_PATH%\bin\bash --login -i %* 512goto EXIT 513 514:USE_ENV 515if "%CAFE_TERM_USE%" == "" goto USE_BASH 516if not exist "%CAFE_TERM_USE%" goto USE_BASH 517 518echo Running user supplied terminal or shell. 519call %CAFE_TERM_USE% 520goto EXIT 521 522:USE_BASH 523%CYGWIN_PATH%\bin\bash --login -i %CAFE_SHELL_ARGS% 524goto :EXIT 525 526:USE_CMD 527set _TITLE=Nintendo CAFE 528if NOT "%BRIDGE_CURRENT_NAME%" == "" set _TITLE=%_TITLE% for %BRIDGE_CURRENT_NAME% (%BRIDGE_CURRENT_IP_ADDRESS%) 529 530REM If we're not opening a new window, just change the title and exit. 531if "%_CAFE_SETENV%" == "" goto :USE_CMD_NEWWINDOW 532title %_TITLE% 533set _CAFE_SETENV= 534set _TITLE= 535if DEFINED CAFE_SHELL_ARGS call %CAFE_SHELL_ARGS% 536goto :EXIT 537 538:USE_CMD_NEWWINDOW 539REM We want to update the title bar, but just for this invocation. Since we can't 540REM read the value of the current title bar, we'll just create a little batch file 541REM which sets the title, then when it exits the original title will be reset. 542set _TEMPSCRIPT=%CAFE_TEMP%\tmpcafe_%RANDOM%%BRIDGE_CURRENT_IP_ADDRESS%.bat 543del /f /q %_TEMPSCRIPT% >nul 2>&1 544echo @title %_TITLE% > %_TEMPSCRIPT% 545if DEFINED CAFE_SHELL_ARGS >> %_TEMPSCRIPT% echo @cmd /c %CAFE_SHELL_ARGS% 546 547if DEFINED CAFE_SHELL_ARGS cmd /c %_TEMPSCRIPT% 548if NOT DEFINED CAFE_SHELL_ARGS cmd /k %_TEMPSCRIPT% 549 550set _TEMP_ERRORLEVEL=%ERRORLEVEL% 551del /f /q %_TEMPSCRIPT% >nul 2>&1 552set ERRORLEVEL=%_TEMP_ERRORLEVEL% 553set _TEMP_ERRORLEVEL= 554set _TITLE= 555set _TEMPSCRIPT= 556goto :EXIT 557 558:EXIT 559:: Propagate error code from bash 560exit /b %ERRORLEVEL% 561 562:: ************************************************************ 563:: * 564:: * FUNCTIONS 565:: * 566:: ************************************************************ 567 568:convert_dos_to_unix_path 569if "%USE_CYGWIN%" == "0" for %%i in (%2) do set %~1=%%~fi& goto :eof 570for /F "delims=" %%s in ('%_CYGPATH_DIR%\cygpath "%~2"') do (set %~1=%%s) 571goto :eof 572 573:convert_unix_to_dos_path 574for /F "delims=" %%s in ('%_CYGPATH_DIR%\cygpath.exe -w "%~2"') do (set %~1=%%s) 575goto :eof 576 577:initsession 578:: See if we have a Current Bridge set. If not, disable multi-session 579:: this can happen right after install before setting the default bridge 580if "%BRIDGE_CURRENT_NAME%"=="" ( 581 set SESSION_MANAGER=0 582) 583 584if not "%SESSION_MANAGER%"=="1" goto :no_session_manager 585:: See if SessionManager is available. If not, fail soince we are enabled for multi-session 586if not exist "%MION_BRIDGE_TOOLS%\SessionManager.dll" ( 587 echo. 588 echo ERROR: SessionManager.dll not found and multi-CATDEV is enabled! 589 echo. Please install HostBridge version 3.2.2.3+ or disable the multi-CATDEV feature. 590 set /p x= 591 exit /b 5 592) 593 594:: Call the SessionManager to get the session information 595for /f "usebackq tokens=1,2,3,4,5,6,7" %%a in (`"%MION_BRIDGE_TOOLS%\SessionManagerUtil" -p NAME DEBUG_OUT DEBUG_CONTROL HIO_OUT LAUNCH_CTRL NET_MANAGE PCFS_SATA`) do ( 596 set SESSION_NAME=%%a 597 set SESSION_DEBUG_OUT_PORT=%%b 598 set SESSION_DEBUG_CONTROL_PORT=%%c 599 set SESSION_HIO_OUT_PORT=%%d 600 set SESSION_LAUNCH_CTRL_PORT=%%e 601 set SESSION_NET_MANAGE_PORT=%%f 602 set SESSION_PCFS_SATA_PORT=%%g 603) 604 605set SESSION_PATH_PREFIX=%SESSION_NAME%_ 606 607call :convert_dos_to_unix_path CAFE_DATA_DIR "%CAFE_ROOT%/%SESSION_PATH_PREFIX%data" 608if "%CAFE_CONTENT_DEFAULT%"=="1" call :convert_dos_to_unix_path CAFE_CONTENT_DIR "%CAFE_DATA_DIR%/disc/content" 609if "%CAFE_META_DEFAULT%"=="1" call :convert_dos_to_unix_path CAFE_META_DIR "%CAFE_DATA_DIR%/disc/meta" 610if "%CAFE_SAVE_DEFAULT%"=="1" call :convert_dos_to_unix_path CAFE_SAVE_DIR "%CAFE_DATA_DIR%/save" 611if "%CAFE_SLC_DEFAULT%"=="1" call :convert_dos_to_unix_path CAFE_SLC_DIR "%CAFE_DATA_DIR%/slc" 612if "%CAFE_MLC_DEFAULT%"=="1" call :convert_dos_to_unix_path CAFE_MLC_DIR "%CAFE_DATA_DIR%/mlc" 613call :convert_dos_to_unix_path CAFE_DATA_TMP "%CAFE_DATA_DIR%/tmp" 614 615if "%DO_SYNC_SESSION%" == "0" set CAFERUN_OPTION_NO_DATA_SYNC=1 616 617goto :eof 618 619:no_session_manager 620:: SessionManager disabled or not present 621set SESSION_NAME= 622set SESSION_DEBUG_OUT_PORT=6001 623set SESSION_DEBUG_CONTROL_PORT=6002 624set SESSION_HIO_OUT_PORT=6003 625set SESSION_LAUNCH_CTRL_PORT=6006 626set SESSION_NET_MANAGE_PORT=6008 627set SESSION_PCFS_SATA_PORT=7500 628 629set SESSION_PATH_PREFIX= 630call :convert_dos_to_unix_path CAFE_DATA_DIR "%CAFE_ROOT%/data" 631goto :eof 632 633:check_ghs_version 634:: Expect something like (without quotes; note trailing space): 635:: "C:\ghs\multi5317\asppc: Green Hills Software, MULTI v5.3.17 Nintendo " 636for /f "usebackq tokens=6,*" %%i in (`"%GHS_ROOT%\gversion" -nomtime -quiet 1 %GHS_ROOT%\%~1`) do ( 637 set verstr=%%i %%j 638 set verbase=%%i 639) 640for /f "tokens=1,2,3 delims=. " %%i in ("%verbase%") do ( 641 set v1=%%i 642 set v2=%%j 643 set v3=%%k 644) 645 646for /f "tokens=1,2,3 delims=. " %%i in ("%~2%") do ( 647 set in_v1=%%i 648 set in_v2=%%j 649 set in_v3=%%k 650) 651set /a delta=%v3% - %in_v3% 652set delta=%delta:-=N% 653set verstr=%verstr: Nintendo = % 654:: remove upto 7 trailing blanks 655set verstr=%verstr%XXXXX 656set verstr=%verstr: XXXXX=XXXXX% 657set verstr=%verstr: XXXXX=XXXXX% 658set verstr=%verstr: XXXXX=XXXXX% 659set verstr=%verstr:XXXXX=% 660if "%verbase%" == "%verstr%" ( 661 set vercmp=%verstr% P0 662) else ( 663 set vercmp=%verstr% 664) 665set fixversion=%verbase:*.% 666if "%~2%~3" == "%vercmp%" goto :ghs_verok 667:: if versions don't match and have not been changed yet change them 668if not "%CAFE_GHS_VERCMP%" == "%CAFE_GHS_VERCMP_EXPECT%" goto :ghs_noverchange 669 set CAFE_GHS_VERCMP=%vercmp% 670 set CAFE_GHS_VERSION=%verstr% 671:ghs_noverchange 672 if "%in_v1% %in_v2%" NEQ "%v1% %v2%" ( 673 echo "%in_v1% %in_v2% vs %v1% %v2%" 674 echo Warning: %~1 %verstr% version is not supported expect %~2 675 goto :ghs_verok 676 ) 677 if "%delta%" GEQ "N" ( 678 echo Warning: %~1 %verstr% version is older than %~2 679:: ) else ( 680:: echo Info: %~1 %verstr% version is newer than %~2 681 ) 682:ghs_verok 683set verstr= 684set vercmp= 685set verbase= 686goto :eof 687 688:check_ghs_version_date 689for /f "usebackq skip=1 tokens=3" %%i in (`"%GHS_ROOT%\gversion" -value 0 %GHS_ROOT%\%~1`) do ( 690 set verdatenum=%%i 691) 692if "%~4" == "%verdatenum%" goto :ghs_verdateok 693 for /f "usebackq tokens=6,*" %%i in (`"%GHS_ROOT%\gversion" -nomtime -quiet 1 %GHS_ROOT%\%~1`) do ( 694 set verstr=%%i %%j 695 set verbase=%%i 696 ) 697 set verstr=%verstr: Nintendo = % 698 set verstr=%verstr%XXXXX 699 set verstr=%verstr: XXXXX=XXXXX% 700 set verstr=%verstr: XXXXX=XXXXX% 701 set verstr=%verstr: XXXXX=XXXXX% 702 set verstr=%verstr:XXXXX=% 703 if "%verbase%" == "%verstr%" ( 704 set vercmp=%verstr% P0 705 ) else ( 706 set vercmp=%verstr% 707 ) 708 for /f "usebackq skip=2 tokens=4,*" %%i in (`"%GHS_ROOT%\gversion" %GHS_ROOT%\%~1`) do ( 709 set verdatestr=%verstr% %%i %%j 710 ) 711 :: remove upto 7 trailing blanks 712 set verdatestr=%verdatestr%XXXXX 713 set verdatestr=%verdatestr: XXXXX=XXXXX% 714 set verdatestr=%verdatestr: XXXXX=XXXXX% 715 set verdatestr=%verdatestr: XXXXX=XXXXX% 716 set verdatestr=%verdatestr:XXXXX=% 717 if "%verdatenum%" LSS "%~4" ( 718 echo Warning: %~1 %verdatestr% version is older then expected %~2 %~5 719 ) else ( 720 echo Info: %~1 %verdatestr% version is newer than %~2 %~5 721 ) 722 :: only change if it is not already changed 723 :: this assumes no mixed installations 724 :: and date compares have confusing version strings 725 :: as in v5.0.6 is newer then v5.3.0 P2 726 if "%CAFE_GHS_VERCMP%" == "%CAFE_GHS_VERCMP_EXPECT%" ( 727 set CAFE_GHS_VERSION=%verdatestr% 728 set CAFE_GHS_VERCMP=%verdatestr% 729 ) 730:ghs_verdateok 731set verstr= 732set verstr2= 733set verdatestr= 734goto :eof 735 736:cygwin_error 737echo Error: Can't find Cygwin. Please set CYGWIN_PATH or use install_cygwin.bat 738pause 739exit /b 1 740goto :eof 741 742:usage 743echo. 744echo ================================================== 745echo NINTENDO CAFE ENVIRONMENT! 746echo ================================================== 747echo. 748echo Usage: %~nx0 [options] [shell command] 749echo. 750echo Options: 751echo -cafex Use CafeX to run applications (default) 752echo -nocafex Do not use CafeX; uses Cygwin shell scripts 753echo -multi Enable multisession CAFE support 754echo -nomulti Do not enable multisession support (default) 755echo -syncsession Copy per-session files (default) 756echo -nosyncsession Do not copy files; data files shared across sessions 757echo -pcfsoversata Enable PCFS over SATA (default) 758echo -nopcfsoversata Disable PCFS over SATA; use PCFS over SDIO 759echo -cygwin Use Cygwin (default) 760echo -nocygwin Do not use Cygwin; for running apps only 761echo -setenv With -nocygwin, modify the current environment 762echo instead of opening a new window for Cafe 763echo. 764echo -bridge ^<name^> ^<ipaddr^> 765echo Temporarily set current bridge for this window 766echo. 767echo -default Save these settings for future use 768echo. 769echo Any shell command is executed automatically in the CAFE environment. 770set _USAGE=1 771goto :eof 772 773:END 774 775ENDLOCAL 776