@echo off rem This code is in the public domain. You may use, modify or distribute it freely. setlocal enabledelayedexpansion set CS+CCPATH=E:\tools\micom\Renesas\CS+\CC set CC-RLVER=1.02.00 set PATH=!CS+CCPATH!\CC-RL\V!CC-RLVER!\Bin;!CS+CCPATH!\Utilities\IOHeaderGenerator;!PATH! set BATPATH=!b2eprogrampathname:~0,-1! if /i "!b2eprogramfilename!"=="ra78k0r.exe" call :RA78K0R %* & exit if /i "!b2eprogramfilename!"=="cc78k0r.exe" call :CC78K0R %* & exit if /i "!b2eprogramfilename!"=="lk78k0r.exe" call :LK78K0R %* & exit if /i "!b2eprogramfilename!"=="oc78k0r.exe" call :OC78K0R %* & exit exit rem ========================================================================== :RA78K0R rem ========================================================================== rem 変数の初期化 set SRCFILE="" set SRCNAME="" set OBJPATH="" set DEVNAME="" set INCLUDE="" rem オプションの解析 :RA78K0R_get_opt set OPTION=%1 if not "!OPTION!"=="" ( if "!OPTION:~0,2!"=="-f" ( set CMDFILE=!OPTION:~2! for /f "usebackq delims=" %%I in (!CMDFILE!) do ( set OPTION=%%I if not "!OPTION!"=="" ( call :RA78K0R_analyze_opt ) ) ) else ( call :RA78K0R_analyze_opt ) shift goto RA78K0R_get_opt ) rem CC-RLの呼び出し rem echo !SRCFILE! rem echo !SRCNAME! rem echo !OBJPATH! rem echo !DEVNAME! rem echo !INCLUDE! if /i "!SRCNAME!"=="opt_byte.asm" ( echo -DEVICE="!CS+CCPATH!\Device\RL78\Devicefile\DR5!DEVNAME!.DVF">rlink_dev.clnk df2iodef -df="!CS+CCPATH!\Device\RL78\Devicefile\DR5!DEVNAME!.DVF" -o=iodefine.h -f ccrl "!BATPATH!\cstart_g10.c" -c -o "cstart_g10.rel" -dev="!CS+CCPATH!\Device\RL78\Devicefile\DR5!DEVNAME!.DVF" -cpu=S1 -goptimize -Osize ccrl "!SRCFILE!" -c -o "!OBJPATH!\!SRCNAME:~0,-4!.rel" -dev="!CS+CCPATH!\Device\RL78\Devicefile\DR5!DEVNAME!.DVF" -I !INCLUDE! -asmopt=-convert_asm -asmopt=-base_number=suffix -cpu=S1 -goptimize ) exit /b rem ---------------- :RA78K0R_analyze_opt rem ---------------- if not "!OPTION:~0,1!"=="-" ( call :RA78K0R_unquote !OPTION! set SRCFILE=!OPTION_UQ_RET! call :RA78K0R_split_filename !OPTION! set SRCNAME=!OPTION_F_RET! ) else if "!OPTION:~0,2!"=="-o" ( call :RA78K0R_unquote !OPTION:~2! set OBJPATH=!OPTION_UQ_RET! ) else if "!OPTION:~0,2!"=="-c" ( set DEVNAME=!OPTION:~2! ) else if "!OPTION:~0,2!"=="-i" ( set OPTION_I=!OPTION:~2! set OPTION_I=!OPTION_I:","=" "! set OPTION_I_RET="" call :RA78K0R_analyze_opt_include !OPTION_I! if not "!INCLUDE!"=="""" ( set INCLUDE=!INCLUDE!,!OPTION_I_RET! ) else ( set INCLUDE=!OPTION_I_RET! ) ) exit /b rem ------------------------ :RA78K0R_analyze_opt_include rem ------------------------ if not "%~1"=="" ( call :RA78K0R_unquote "%~1" if /i not "!OPTION_UQ_RET:~-9!"=="\inc78k0r" ( if not "!OPTION_I_RET!"=="""" ( set OPTION_I_RET=!OPTION_I_RET!,"!OPTION_UQ_RET!" ) else ( set OPTION_I_RET="!OPTION_UQ_RET!" ) ) shift goto RA78K0R_analyze_opt_include ) exit /b rem ------------ :RA78K0R_unquote rem ------------ set OPTION_UQ_RET=%~1 if "!OPTION_UQ_RET:~-1!"=="\" set OPTION_UQ_RET=!OPTION_UQ_RET:~0,-1! exit /b rem ------------------- :RA78K0R_split_filename rem ------------------- set OPTION_P_RET=%~dp1 if "!OPTION_P_RET:~-1!"=="\" set OPTION_P_RET=!OPTION_P_RET:~0,-1! set OPTION_F_RET=%~nx1 exit /b rem ========================================================================== :CC78K0R rem ========================================================================== rem 変数の初期化 set SRCFILE="" set SRCNAME="" set OBJPATH="" set DEVNAME="" set INCLUDE="" rem オプションの解析 :CC78K0R_get_opt set OPTION=%1 if not "!OPTION!"=="" ( if "!OPTION:~0,2!"=="-f" ( set CMDFILE=!OPTION:~2! for /f "usebackq delims=" %%I in (!CMDFILE!) do ( set OPTION=%%I if not "!OPTION!"=="" ( call :CC78K0R_analyze_opt ) ) ) else ( call :CC78K0R_analyze_opt ) shift goto CC78K0R_get_opt ) rem CC-RLの呼び出し rem echo !SRCFILE! rem echo !SRCNAME! rem echo !OBJPATH! rem echo !DEVNAME! rem echo !INCLUDE! if not exist iodefine.h ( !CS+CCPATH!\Utilities\IOHeaderGenerator\df2iodef -df=!CS+CCPATH!\Device\RL78\Devicefile\DR5!DEVNAME!.DVF -o=iodefine.h -f ) ccrl "!SRCFILE!" -c -o "!OBJPATH!\!SRCNAME:~0,-2!.rel" -dev="!CS+CCPATH!\Device\RL78\Devicefile\DR5!DEVNAME!.DVF" -I !INCLUDE! -preinclude=iodefine.h -convert_cc=ca78k0r -signed_char -cpu=S1 -goptimize -Osize exit /b rem ---------------- :CC78K0R_analyze_opt rem ---------------- if not "!OPTION:~0,1!"=="-" ( call :CC78K0R_unquote !OPTION! set SRCFILE=!OPTION_UQ_RET! call :CC78K0R_split_filename !OPTION! set SRCNAME=!OPTION_F_RET! ) else if "!OPTION:~0,2!"=="-o" ( call :CC78K0R_unquote !OPTION:~2! set OBJPATH=!OPTION_UQ_RET! ) else if "!OPTION:~0,2!"=="-c" ( set DEVNAME=!OPTION:~2! ) else if "!OPTION:~0,2!"=="-i" ( set OPTION_I=!OPTION:~2! set OPTION_I=!OPTION_I:","=" "! set OPTION_I_RET="" call :CC78K0R_analyze_opt_include !OPTION_I! if not "!INCLUDE!"=="""" ( set INCLUDE=!INCLUDE!,!OPTION_I_RET! ) else ( set INCLUDE=!OPTION_I_RET! ) ) exit /b rem ------------------------ :CC78K0R_analyze_opt_include rem ------------------------ if not "%~1"=="" ( call :CC78K0R_unquote "%~1" if /i not "!OPTION_UQ_RET:~-9!"=="\inc78k0r" ( if not "!OPTION_I_RET!"=="""" ( set OPTION_I_RET=!OPTION_I_RET!,"!OPTION_UQ_RET!" ) else ( set OPTION_I_RET="!OPTION_UQ_RET!" ) ) shift goto CC78K0R_analyze_opt_include ) exit /b rem ------------ :CC78K0R_unquote rem ------------ set OPTION_UQ_RET=%~1 if "!OPTION_UQ_RET:~-1!"=="\" set OPTION_UQ_RET=!OPTION_UQ_RET:~0,-1! exit /b rem ------------------- :CC78K0R_split_filename rem ------------------- set OPTION_P_RET=%~dp1 if "!OPTION_P_RET:~-1!"=="\" set OPTION_P_RET=!OPTION_P_RET:~0,-1! set OPTION_F_RET=%~nx1 exit /b rem ========================================================================== :LK78K0R rem ========================================================================== rem 変数の初期化 set OBJFILES="" set LMFNAME="" rem オプションの解析 :LK78K0R_get_opt set OPTION=%1 if not "!OPTION!"=="" ( if "!OPTION:~0,2!"=="-f" ( set CMDFILE=!OPTION:~2! for /f "usebackq delims=" %%I in (!CMDFILE!) do ( set OPTION=%%I if not "!OPTION!"=="" ( call :LK78K0R_analyze_opt ) ) ) else ( call :LK78K0R_analyze_opt ) shift goto LK78K0R_get_opt ) rem ファイルの存在チェック if not exist rlink_dev.clnk echo rlink_dev.clnk which is generated when opt_byte.asm is assembled doesn't exist. & exit /b if not exist cstart_g10.rel echo cstart_g10.rel which is generated when opt_byte.asm is assembled doesn't exist. & exit /b rem CC-RLの呼び出し rem echo !OBJFILES! rem echo !LMFNAME! type rlink_dev.clnk>rlink.clnk echo -Input=cstart_g10.rel>>rlink.clnk echo -Input=!OBJFILES!>>rlink.clnk echo -OUtput=!LMFNAME!>>rlink.clnk echo -LIBrary="!CS+CCPATH!\CC-RL\V!CC-RLVER!\lib\rl78nm4s.lib">>rlink.clnk echo -LIBrary="!CS+CCPATH!\CC-RL\V!CC-RLVER!\lib\rl78nm4r.lib">>rlink.clnk echo -ENTry=_start>>rlink.clnk echo -VECTN=0=_start>>rlink.clnk echo -SECURITY_ID=00000000000000000000>>rlink.clnk echo -AUTO_SECTION_LAYOUT>>rlink.clnk echo -ROm=.data=.dataR>>rlink.clnk echo -ROm=.sdata=.sdataR>>rlink.clnk echo -OPtimize>>rlink.clnk echo -LISt="!LMFNAME:~0,-4!.map">>rlink.clnk echo -SHow=ALL>>rlink.clnk echo -NOMessage>>rlink.clnk echo -NOLOgo>>rlink.clnk echo -end>>rlink.clnk echo -Input="!LMFNAME!">>rlink.clnk echo -OUtput="!LMFNAME:~0,-4!.hex">>rlink.clnk echo -FOrm=Stype>>rlink.clnk echo -NOMessage>>rlink.clnk echo -end>>rlink.clnk echo -Input="!LMFNAME!">>rlink.clnk echo -OUtput="!LMFNAME:~0,-4!.bin">>rlink.clnk echo -FOrm=Binary>>rlink.clnk echo -NOMessage>>rlink.clnk echo -exit>>rlink.clnk rlink -subcommand=rlink.clnk rem ファイルサイズの取得とMAPファイルへの埋め込み echo\>>"!LMFNAME:~0,-4!.map" echo *** Total Size of ROM Usage ***>>"!LMFNAME:~0,-4!.map" echo\>>"!LMFNAME:~0,-4!.map" call :LK78K0R_get_filesize_hex "!LMFNAME:~0,-4!.bin" echo !FILE_SIZE_HEX_RET!H byte(s) real data(RAMDATA+ROMDATA+PROGRAM) and section holes>>"!LMFNAME:~0,-4!.map" exit /b rem ---------------- :LK78K0R_analyze_opt rem ---------------- if not "!OPTION:~0,1!"=="-" ( call :LK78K0R_unquote !OPTION! if /i "!OPTION_UQ_RET:\Lib78K0R\=!"=="!OPTION_UQ_RET!" ( if not "!OBJFILES!"=="""" ( set OBJFILES=!OBJFILES!,"!OPTION_UQ_RET!" ) else ( set OBJFILES="!OPTION_UQ_RET!" ) ) ) else if "!OPTION:~0,2!"=="-o" ( call :LK78K0R_unquote !OPTION:~2! set LMFNAME=!OPTION_UQ_RET! ) exit /b rem ------------ :LK78K0R_unquote rem ------------ set OPTION_UQ_RET=%~1 exit /b rem --------------------- :LK78K0R_get_filesize_hex rem --------------------- set FILE_SIZE_DEC=%~z1 set /A DIGIT3=(!FILE_SIZE_DEC! / 16384) / 4096 call :LK78K0R_conv_dec_str_to_hex_char !DIGIT3! set DIGIT3=!HEX_CHAR_RET! set /A DIGIT2=(!FILE_SIZE_DEC! %% 4096) / 256 call :LK78K0R_conv_dec_str_to_hex_char !DIGIT2! set DIGIT2=!HEX_CHAR_RET! set /A DIGIT1=(!FILE_SIZE_DEC! %% 256) / 16 call :LK78K0R_conv_dec_str_to_hex_char !DIGIT1! set DIGIT1=!HEX_CHAR_RET! set /A DIGIT0=(!FILE_SIZE_DEC! %% 16) call :LK78K0R_conv_dec_str_to_hex_char !DIGIT0! set DIGIT0=!HEX_CHAR_RET! set FILE_SIZE_HEX_RET=!DIGIT3!!DIGIT2!!DIGIT1!!DIGIT0! exit /b rem ----------------------------- :LK78K0R_conv_dec_str_to_hex_char rem ----------------------------- if "%1"=="0" set HEX_CHAR_RET=0 if "%1"=="1" set HEX_CHAR_RET=1 if "%1"=="2" set HEX_CHAR_RET=2 if "%1"=="3" set HEX_CHAR_RET=3 if "%1"=="4" set HEX_CHAR_RET=4 if "%1"=="5" set HEX_CHAR_RET=5 if "%1"=="6" set HEX_CHAR_RET=6 if "%1"=="7" set HEX_CHAR_RET=7 if "%1"=="8" set HEX_CHAR_RET=8 if "%1"=="9" set HEX_CHAR_RET=9 if "%1"=="10" set HEX_CHAR_RET=A if "%1"=="11" set HEX_CHAR_RET=B if "%1"=="12" set HEX_CHAR_RET=C if "%1"=="13" set HEX_CHAR_RET=D if "%1"=="14" set HEX_CHAR_RET=E if "%1"=="15" set HEX_CHAR_RET=F exit /b rem ========================================================================== :OC78K0R rem ========================================================================== rem Nothing to do. exit /b