1@if "%_ECHOON%" == "" echo off 2 3:: ############################################################################### 4:: # 5:: # Copyright (C) 2009-2013 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\multi5322 287:ghs_root_set 288:: Now have a selected version. Sanity check it. 289if exist "%GHS_ROOT%\multi.exe" goto multi_ok 290echo. 291echo ************************************* 292echo WARNING: GHS MULTI.EXE not found at %GHS_ROOT%\ 293echo. 294echo YOU MUST ACQUIRE AND INSTALL MULTI TO BUILD 295echo. 296echo ************************************* 297set CAFE_GHS_VERSION="bad" 298goto done_set_toolchain 299:multi_ok 300if exist "%GHS_ROOT%\gversion.exe" goto version_ok 301echo. 302echo ************************************* 303echo WARNING: GHS GVERSION.EXE not found at %GHS_ROOT%\ 304echo. 305echo THERE IS SOMETHING WRONG WITH YOUR GHS INSTALLATION 306echo. 307echo ************************************* 308set CAFE_GHS_VERSION="bad" 309goto done_set_toolchain 310:version_ok 311 312:: assume correct version, check_ghs_version will set version to last 313:: incorrect version seen 314 315set CAFE_GHS_VERSION_EXPECT=v5.3.22 P0 316:: because of windows treating v5.3.1 as greater than v5.3.1 P1 317:: if there is not a patch number add " P0" 318set CAFE_GHS_VERCMP_EXPECT=v5.3.22 P0 319set CAFE_GHS_VERSION=%CAFE_GHS_VERSION_EXPECT% 320set CAFE_GHS_VERCMP=%CAFE_GHS_VERCMP_EXPECT% 321:: check minimum versions supported 322call:check_ghs_version asppc, "v5.3.22", " P0" 323call:check_ghs_version ccppc, "v5.3.22", " P0" 324call:check_ghs_version cxppc, "v5.3.22", " P0" 325call:check_ghs_version ecomppc, "v5.3.22", " P0" 326call:check_ghs_version dblink, "v5.3.22", " P0" 327call:check_ghs_version elxr, "v5.3.22", " P0" 328call:check_ghs_version multi, "v5.3.22", " P0" 329call:check_ghs_version cafeserv, "v5.3.22", " P0" 330 331:: GUI version must check the date 332:: call:check_ghs_version_date cafeserv, "v5.0.6", " P0", 1297317659, "Wed Feb 09 22:00:59 PST 2011" 333 334if "%CAFE_GHS_VERSION%"=="" set CAFE_GHS_VERSION="unknown" 335 336call:convert_dos_to_unix_path "GHS_ROOT","%GHS_ROOT%" 337 338set CAFE_GHS_TLS_AVAILABLE=FALSE 339if "%CAFE_GHS_VERSION%" GEQ "v5.3.20" ( 340 set CAFE_GHS_TLS_AVAILABLE=TRUE 341) 342 343set CAFE_GHS_SUPPORTS_MAKERPL_DBG_SOURCE_ROOT=FALSE 344if "%CAFE_GHS_VERSION%" GEQ "v5.3.21" ( 345 set CAFE_GHS_SUPPORTS_MAKERPL_DBG_SOURCE_ROOT=TRUE 346) 347 348set CAFE_GHS_SUPPORTS_MAKERPL_DBG_SOURCE_ROOT=FALSE 349if "%CAFE_GHS_VERSION%" GEQ "v5.3.21" ( 350 set CAFE_GHS_SUPPORTS_MAKERPL_DBG_SOURCE_ROOT=TRUE 351) 352 353if "%CAFE_GHS_VERCMP%" GEQ "%CAFE_GHS_VERCMP_EXPECT%" goto ghs_version_ok 354 echo. 355 echo ********************************************************** 356 echo Newer version of GHS tools %CAFE_GHS_VERSION_EXPECT% is available please update 357 echo. 358 echo Copy MULTI5322_Nintendo.zip. 359 echo Expand and run MULTI5322_Nintendo/setup_windows.exe. 360 echo Do not install over 5.3.21. Install to 361 echo a new directory, for example: 362 echo C:/ghs/multi5322 363 echo. 364 echo then exit cafe.bat and rerun cafe.bat 365 echo. 366if not "GHS_ROOT_FROM_ENV"=="" ( 367 echo If you have GHS_ROOT set in your environment to point to 368 echo %GHS_ROOT% 369 echo please update the system environment variable "GHS_ROOT" 370 echo (Windows Control Panel - System - Advanced System Settings 371 echo - Environment Variables) 372) 373 echo ********************************************************** 374:ghs_version_ok 375 376:done_set_toolchain 377 378:: ************************************************************ 379:: SDK environment variables 380 381set TOOLCHAIN=ghs 382set USE_GHS=1 383set CAFE_USE_RPZ=0 384set Platform= 385set PLATFORM=cafe 386:: Default output [cattoucan | toucan] 387if "%CAFE_CONSOLE%"=="" set CAFE_CONSOLE=cattoucan 388:: Default hardware board connected to PC for [catdevmp|catdev4] 389if "%CAFE_HARDWARE%"=="" set CAFE_HARDWARE=catdevmp 390 391:: ************************************************************ 392 393:: ************************************************************ 394:: * 395:: * DO NOT MODIFY BELOW HERE 396:: * 397:: ************************************************************ 398 399:: PATH (Cygwin will add Windows PATH environment variable) 400set PATH=%CAFE_ROOT%/system/bin/tool;%CAFE_ROOT%/system/bin/win32;%PATH% 401REM If we're in an MSYS window, not Cygwin, add special MSYS-related tools to the PATH 402if NOT "%USE_CYGWIN%" == "0" if not exist %CYGWIN_PATH%\bin\cygwin1.dll set PATH=%PATH%;%_CYGPATH_DIR% 403 404:: Cygwin setup 405if NOT "%USE_CYGWIN%" == "0" set CYGWIN=nodosfilewarning 406 407:: ************************************************************ 408:: Bridge environment variables 409if "%USE_SINGLE_CGI%" == "" set USE_SINGLE_CGI=1 410if not "%BRIDGE_CURRENT_NAME%"=="" goto :skip_mion 411if not exist "%MION_BRIDGE_TOOLS%\getbridgeconfig.exe" goto skip_mion 412:mion_name 413for /f "usebackq tokens=5" %%i in (`"%MION_BRIDGE_TOOLS%\getbridgeconfig.exe" -default`) do ( 414 set BRIDGE_CURRENT_NAME=%%i 415 goto mion_ip_address 416) 417:mion_ip_address 418for /f "usebackq skip=1 tokens=5" %%i in (`"%MION_BRIDGE_TOOLS%\getbridgeconfig.exe" -default`) do ( 419 set BRIDGE_CURRENT_IP_ADDRESS=%%i 420) 421:skip_mion 422 423:: Match boot mode w/ what is running on the CAT-DEV 424if "%BRIDGE_CURRENT_IP_ADDRESS%"=="" goto nand_mode_set 425 426set MIONPS_PATH=%CAFE_ROOT_DOS%\system\bin\tool\mionps.exe 427if not exist "%MIONPS_PATH%" set MIONPS_PATH=%CAFE_ROOT_DOS%\system\src\tool\mionps\bin\win32\mionps.exe 428 429:: Match SDK Version w/ what is running on the CAT-DEV 430for /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); 431if "%NAND_MODE_BIT%"=="ERROR!" ( 432 echo *** Your CAT-DEV is not accessible. It might be powered off or offline *** 433 goto nand_mode_set 434) 435 436set SDK_MIN_VER=0%SDK_MIN_VER% 437set SDK_MIN_VER=%SDK_MIN_VER:~-2% 438 439set SDK_MIC_VER=0%SDK_MIC_VER% 440set SDK_MIC_VER=%SDK_MIC_VER:~-2% 441 442if not "%SDK_MAJ_VER%.%SDK_MIN_VER%.%SDK_MIC_VER%" == "%SDK_VER%" ( 443 echo. 444 echo !!! Your CAT-DEV is not at the same level as this SDK. !!! 445 echo SDK Version: %SDK_VER% CAT-DEV SDK Version: %SDK_MAJ_VER%.%SDK_MIN_VER%.%SDK_MIC_VER% 446 echo !!! Please run cafeupdate to get them in sync. !!! 447 echo. 448) 449 450:nand_mode_set 451if "%NAND_MODE_BIT%"=="1" ( 452 set CAFE_BOOT_MODE=NAND 453) 454 455:: ************************************************************ 456:: Set the session specific variables and paths 457call:initsession 458 459if "%ERRORLEVEL%"=="5" ( 460 exit /b %ERRORLEVEL% 461) 462 463REM Clean up temporary variables 464set _CYGPATH_DIR= 465 466:: ************************************************************ 467 468:: If the extra arguments exist, skip echos. 469if DEFINED CAFE_SHELL_ARGS goto RUN_BASH 470 471@echo ========================================================== 472@echo Welcome to the Nintendo CAFE! 473@echo ========================================================== 474@echo Environment initialized for this session only. 475@echo SDK_VER = %SDK_VER% 476@echo CAFE_ROOT = %CAFE_ROOT% 477@echo CAFE_HARDWARE = %CAFE_HARDWARE% 478@echo CAFE_BOOT_MODE = %CAFE_BOOT_MODE% 479@if /i "%TOOLCHAIN%"=="ghs" echo GHS_ROOT = %GHS_ROOT% 480@if /i "%TOOLCHAIN%"=="ghs" echo CAFE_GHS_VERSION = "%CAFE_GHS_VERSION%" 481@echo CAFE_CONTENT_DIR = %CAFE_CONTENT_DIR% 482@echo CAFE_SAVE_DIR = %CAFE_SAVE_DIR% 483@echo CAFE_META_DIR = %CAFE_META_DIR% 484@echo CAFE_SLC_DIR = %CAFE_SLC_DIR% 485@echo CAFE_MLC_DIR = %CAFE_MLC_DIR% 486if "%BRIDGE_CURRENT_NAME%"=="" goto DONOTECHOMION 487@echo Current bridge = %BRIDGE_CURRENT_NAME% 488@echo Bridge IP Addr = %BRIDGE_CURRENT_IP_ADDRESS% 489:DONOTECHOMION 490@if "%SESSION_MANAGER%"=="1" ( 491@echo SESSION_NAME = %SESSION_NAME% 492@echo HIO_OUT_PORT = %SESSION_HIO_OUT_PORT% 493@echo CAFE_DATA_DIR = %CAFE_DATA_DIR% 494) 495@echo. 496@echo ---------------------------------------------------------- 497 498:RUN_BASH 499if "%USE_CYGWIN%" == "0" goto :USE_CMD 500 501:: Copy cafe.sh in /etc/profile.d to update the title 502md %CYGWIN_PATH%\etc\profile.d >nul 2>&1 503if "%SESSION_MANAGER%"=="1" copy "%CAFE_ROOT_DOS%\system\bin\tool\cafe_profile.sh" "%CYGWIN_PATH%\etc\profile.d\cafe.sh" > nul 504 505:: The extra arguments are for the buildsystem 506if "%CAFE_USE_MINTTY%" == "" goto USE_ENV 507if not exist "%CYGWIN_PATH%\bin\mintty.exe" goto USE_BASH 508 509echo Running mintty. 510%CYGWIN_PATH%\bin\mintty -e %CYGWIN_PATH%\bin\bash --login -i %* 511goto EXIT 512 513:USE_ENV 514if "%CAFE_TERM_USE%" == "" goto USE_BASH 515if not exist "%CAFE_TERM_USE%" goto USE_BASH 516 517echo Running user supplied terminal or shell. 518call %CAFE_TERM_USE% 519goto EXIT 520 521:USE_BASH 522%CYGWIN_PATH%\bin\bash --login -i %CAFE_SHELL_ARGS% 523goto :EXIT 524 525:USE_CMD 526set _TITLE=Nintendo CAFE 527if NOT "%BRIDGE_CURRENT_NAME%" == "" set _TITLE=%_TITLE% for %BRIDGE_CURRENT_NAME% (%BRIDGE_CURRENT_IP_ADDRESS%) 528 529REM If we're not opening a new window, just change the title and exit. 530if "%_CAFE_SETENV%" == "" goto :USE_CMD_NEWWINDOW 531title %_TITLE% 532set _CAFE_SETENV= 533set _TITLE= 534if DEFINED CAFE_SHELL_ARGS call %CAFE_SHELL_ARGS% 535goto :EXIT 536 537:USE_CMD_NEWWINDOW 538REM We want to update the title bar, but just for this invocation. Since we can't 539REM read the value of the current title bar, we'll just create a little batch file 540REM which sets the title, then when it exits the original title will be reset. 541set _TEMPSCRIPT=%CAFE_TEMP%\tmpcafe_%RANDOM%%BRIDGE_CURRENT_IP_ADDRESS%.bat 542del /f /q %_TEMPSCRIPT% >nul 2>&1 543echo @title %_TITLE% > %_TEMPSCRIPT% 544if DEFINED CAFE_SHELL_ARGS >> %_TEMPSCRIPT% echo @cmd /c %CAFE_SHELL_ARGS% 545 546if DEFINED CAFE_SHELL_ARGS cmd /c %_TEMPSCRIPT% 547if NOT DEFINED CAFE_SHELL_ARGS cmd /k %_TEMPSCRIPT% 548 549set _TEMP_ERRORLEVEL=%ERRORLEVEL% 550del /f /q %_TEMPSCRIPT% >nul 2>&1 551set ERRORLEVEL=%_TEMP_ERRORLEVEL% 552set _TEMP_ERRORLEVEL= 553set _TITLE= 554set _TEMPSCRIPT= 555goto :EXIT 556 557:EXIT 558:: Propagate error code from bash 559exit /b %ERRORLEVEL% 560 561:: ************************************************************ 562:: * 563:: * FUNCTIONS 564:: * 565:: ************************************************************ 566 567:convert_dos_to_unix_path 568if "%USE_CYGWIN%" == "0" for %%i in (%2) do set %~1=%%~fi& goto :eof 569for /F "delims=" %%s in ('%_CYGPATH_DIR%\cygpath "%~2"') do (set %~1=%%s) 570goto :eof 571 572:convert_unix_to_dos_path 573for /F "delims=" %%s in ('%_CYGPATH_DIR%\cygpath.exe -w "%~2"') do (set %~1=%%s) 574goto :eof 575 576:initsession 577:: See if we have a Current Bridge set. If not, disable multi-session 578:: this can happen right after install before setting the default bridge 579if "%BRIDGE_CURRENT_NAME%"=="" ( 580 set SESSION_MANAGER=0 581) 582 583if not "%SESSION_MANAGER%"=="1" goto :no_session_manager 584:: See if SessionManager is available. If not, fail soince we are enabled for multi-session 585if not exist "%MION_BRIDGE_TOOLS%\SessionManager.dll" ( 586 echo. 587 echo ERROR: SessionManager.dll not found and multi-CATDEV is enabled! 588 echo. Please install HostBridge version 3.2.2.3+ or disable the multi-CATDEV feature. 589 set /p x= 590 exit /b 5 591) 592 593:: Call the SessionManager to get the session information 594for /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 ( 595 set SESSION_NAME=%%a 596 set SESSION_DEBUG_OUT_PORT=%%b 597 set SESSION_DEBUG_CONTROL_PORT=%%c 598 set SESSION_HIO_OUT_PORT=%%d 599 set SESSION_LAUNCH_CTRL_PORT=%%e 600 set SESSION_NET_MANAGE_PORT=%%f 601 set SESSION_PCFS_SATA_PORT=%%g 602) 603 604set SESSION_PATH_PREFIX=%SESSION_NAME%_ 605 606call :convert_dos_to_unix_path CAFE_DATA_DIR "%CAFE_ROOT%/%SESSION_PATH_PREFIX%data" 607if "%CAFE_CONTENT_DEFAULT%"=="1" call :convert_dos_to_unix_path CAFE_CONTENT_DIR "%CAFE_DATA_DIR%/disc/content" 608if "%CAFE_META_DEFAULT%"=="1" call :convert_dos_to_unix_path CAFE_META_DIR "%CAFE_DATA_DIR%/disc/meta" 609if "%CAFE_SAVE_DEFAULT%"=="1" call :convert_dos_to_unix_path CAFE_SAVE_DIR "%CAFE_DATA_DIR%/save" 610if "%CAFE_SLC_DEFAULT%"=="1" call :convert_dos_to_unix_path CAFE_SLC_DIR "%CAFE_DATA_DIR%/slc" 611if "%CAFE_MLC_DEFAULT%"=="1" call :convert_dos_to_unix_path CAFE_MLC_DIR "%CAFE_DATA_DIR%/mlc" 612call :convert_dos_to_unix_path CAFE_DATA_TMP "%CAFE_DATA_DIR%/tmp" 613 614if "%DO_SYNC_SESSION%" == "0" set CAFERUN_OPTION_NO_DATA_SYNC=1 615 616goto :eof 617 618:no_session_manager 619:: SessionManager disabled or not present 620set SESSION_NAME= 621set SESSION_DEBUG_OUT_PORT=6001 622set SESSION_DEBUG_CONTROL_PORT=6002 623set SESSION_HIO_OUT_PORT=6003 624set SESSION_LAUNCH_CTRL_PORT=6006 625set SESSION_NET_MANAGE_PORT=6008 626set SESSION_PCFS_SATA_PORT=7500 627 628set SESSION_PATH_PREFIX= 629call :convert_dos_to_unix_path CAFE_DATA_DIR "%CAFE_ROOT%/data" 630goto :eof 631 632:check_ghs_version 633:: Expect something like (without quotes; note trailing space): 634:: "C:\ghs\multi5317\asppc: Green Hills Software, MULTI v5.3.17 Nintendo " 635for /f "usebackq tokens=6,*" %%i in (`"%GHS_ROOT%\gversion" -nomtime -quiet 1 %GHS_ROOT%\%~1`) do ( 636 set verstr=%%i %%j 637 set verbase=%%i 638) 639for /f "tokens=1,2,3 delims=. " %%i in ("%verbase%") do ( 640 set v1=%%i 641 set v2=%%j 642 set v3=%%k 643) 644 645for /f "tokens=1,2,3 delims=. " %%i in ("%~2%") do ( 646 set in_v1=%%i 647 set in_v2=%%j 648 set in_v3=%%k 649) 650set /a delta=%v3% - %in_v3% 651set delta=%delta:-=N% 652set verstr=%verstr: Nintendo = % 653:: remove upto 7 trailing blanks 654set verstr=%verstr%XXXXX 655set verstr=%verstr: XXXXX=XXXXX% 656set verstr=%verstr: XXXXX=XXXXX% 657set verstr=%verstr: XXXXX=XXXXX% 658set verstr=%verstr:XXXXX=% 659if "%verbase%" == "%verstr%" ( 660 set vercmp=%verstr% P0 661) else ( 662 set vercmp=%verstr% 663) 664set fixversion=%verbase:*.% 665if "%~2%~3" == "%vercmp%" goto :ghs_verok 666:: if versions don't match and have not been changed yet change them 667if not "%CAFE_GHS_VERCMP%" == "%CAFE_GHS_VERCMP_EXPECT%" goto :ghs_noverchange 668 set CAFE_GHS_VERCMP=%vercmp% 669 set CAFE_GHS_VERSION=%verstr% 670:ghs_noverchange 671 if "%in_v1% %in_v2%" NEQ "%v1% %v2%" ( 672 echo "%in_v1% %in_v2% vs %v1% %v2%" 673 echo Warning: %~1 %verstr% version is not supported expect %~2 674 goto :ghs_verok 675 ) 676 if "%delta%" GEQ "N" ( 677 echo Warning: %~1 %verstr% version is older than %~2 678:: ) else ( 679:: echo Info: %~1 %verstr% version is newer than %~2 680 ) 681:ghs_verok 682set verstr= 683set vercmp= 684set verbase= 685goto :eof 686 687:check_ghs_version_date 688for /f "usebackq skip=1 tokens=3" %%i in (`"%GHS_ROOT%\gversion" -value 0 %GHS_ROOT%\%~1`) do ( 689 set verdatenum=%%i 690) 691if "%~4" == "%verdatenum%" goto :ghs_verdateok 692 for /f "usebackq tokens=6,*" %%i in (`"%GHS_ROOT%\gversion" -nomtime -quiet 1 %GHS_ROOT%\%~1`) do ( 693 set verstr=%%i %%j 694 set verbase=%%i 695 ) 696 set verstr=%verstr: Nintendo = % 697 set verstr=%verstr%XXXXX 698 set verstr=%verstr: XXXXX=XXXXX% 699 set verstr=%verstr: XXXXX=XXXXX% 700 set verstr=%verstr: XXXXX=XXXXX% 701 set verstr=%verstr:XXXXX=% 702 if "%verbase%" == "%verstr%" ( 703 set vercmp=%verstr% P0 704 ) else ( 705 set vercmp=%verstr% 706 ) 707 for /f "usebackq skip=2 tokens=4,*" %%i in (`"%GHS_ROOT%\gversion" %GHS_ROOT%\%~1`) do ( 708 set verdatestr=%verstr% %%i %%j 709 ) 710 :: remove upto 7 trailing blanks 711 set verdatestr=%verdatestr%XXXXX 712 set verdatestr=%verdatestr: XXXXX=XXXXX% 713 set verdatestr=%verdatestr: XXXXX=XXXXX% 714 set verdatestr=%verdatestr: XXXXX=XXXXX% 715 set verdatestr=%verdatestr:XXXXX=% 716 if "%verdatenum%" LSS "%~4" ( 717 echo Warning: %~1 %verdatestr% version is older then expected %~2 %~5 718 ) else ( 719 echo Info: %~1 %verdatestr% version is newer than %~2 %~5 720 ) 721 :: only change if it is not already changed 722 :: this assumes no mixed installations 723 :: and date compares have confusing version strings 724 :: as in v5.0.6 is newer then v5.3.0 P2 725 if "%CAFE_GHS_VERCMP%" == "%CAFE_GHS_VERCMP_EXPECT%" ( 726 set CAFE_GHS_VERSION=%verdatestr% 727 set CAFE_GHS_VERCMP=%verdatestr% 728 ) 729:ghs_verdateok 730set verstr= 731set verstr2= 732set verdatestr= 733goto :eof 734 735:cygwin_error 736echo Error: Can't find Cygwin. Please set CYGWIN_PATH or use install_cygwin.bat 737pause 738exit /b 1 739goto :eof 740 741:usage 742echo. 743echo ================================================== 744echo NINTENDO CAFE ENVIRONMENT! 745echo ================================================== 746echo. 747echo Usage: %~nx0 [options] [shell command] 748echo. 749echo Options: 750echo -cafex Use CafeX to run applications (default) 751echo -nocafex Do not use CafeX; uses Cygwin shell scripts 752echo -multi Enable multisession CAFE support 753echo -nomulti Do not enable multisession support (default) 754echo -syncsession Copy per-session files (default) 755echo -nosyncsession Do not copy files; data files shared across sessions 756echo -pcfsoversata Enable PCFS over SATA (default) 757echo -nopcfsoversata Disable PCFS over SATA; use PCFS over SDIO 758echo -cygwin Use Cygwin (default) 759echo -nocygwin Do not use Cygwin; for running apps only 760echo -setenv With -nocygwin, modify the current environment 761echo instead of opening a new window for Cafe 762echo. 763echo -bridge ^<name^> ^<ipaddr^> 764echo Temporarily set current bridge for this window 765echo. 766echo -default Save these settings for future use 767echo. 768echo Any shell command is executed automatically in the CAFE environment. 769set _USAGE=1 770goto :eof 771 772:END 773 774ENDLOCAL 775