@echo off
@REM ## @file
@REM #
@REM #  Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
@REM #
@REM #  This program and the accompanying materials
@REM #  are licensed and made available under the terms and conditions of the BSD License
@REM #  which accompanies this distribution. The full text of the license may be found at
@REM #  http://opensource.org/licenses/bsd-license.php
@REM #  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
@REM #  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
@REM #
@REM #
@REM ##

@REM Set up environment at first.

set BASETOOLS_DIR=%EDK_TOOLS_BIN%
set BOOTSECTOR_BIN_DIR=%WORKSPACE%\DuetPkg\BootSector\bin
set DISK_LABEL=DUET
set PROCESSOR=""
set STEP=1

if "%1"=="" goto Help
if "%2"=="" goto Help
if "%3"=="" goto Help
if "%4"=="" goto Set_BootDisk
if "%4"=="step2" (@set STEP=2) else @set TARGET_ARCH=%4
if "%5"=="step2" @set STEP=2
:Set_BootDisk
set EFI_BOOT_DISK=%2
if "%TARGET_ARCH%"=="IA32" set PROCESSOR=IA32
if "%TARGET_ARCH%"=="X64" set PROCESSOR=X64
if %PROCESSOR%=="" goto WrongArch
call %WORKSPACE%\DuetPkg\SetEnv_%PROCESSOR%.bat
set BUILD_DIR=%WORKSPACE%\Build\DuetPkg%PROCESSOR%\%TARGET%_%TOOL_CHAIN_TAG%

if "%1"=="floppy" goto CreateFloppy
if "%1"=="file" goto CreateFile
if "%1"=="usb" goto CreateUsb
if "%1"=="ide" goto CreateIde

goto Help

:CreateFloppy
if NOT "%3"=="FAT12" goto WrongFATType
echo Start to create floppy boot disk ...
echo Format %EFI_BOOT_DISK% ...
echo.> FormatCommandInput.txt
echo.n>> FormatCommandInput.txt
format /v:%DISK_LABEL% /q %EFI_BOOT_DISK% < FormatCommandInput.txt > NUL
del FormatCommandInput.txt
echo Create boot sector ...
%BASETOOLS_DIR%\Genbootsector.exe -i %EFI_BOOT_DISK% -o FDBs.com
copy %BOOTSECTOR_BIN_DIR%\Bootsect.com FDBs-1.com
%BASETOOLS_DIR%\Bootsectimage.exe -g FDBs.com FDBs-1.com -f
@REM @del FDBS.com
%BASETOOLS_DIR%\Genbootsector.exe -o %EFI_BOOT_DISK% -i FDBs-1.com
del FDBs-1.com
echo Done.
copy %BUILD_DIR%\FV\EfiLdr %EFI_BOOT_DISK%
goto CreateBootFile

:CreateFile
if NOT "%3"=="FAT12" goto WrongFATType
echo Start to create file boot disk ...
echo Create boot sector ...
%BASETOOLS_DIR%\Genbootsector.exe -i %EFI_BOOT_DISK% -o FDBs.com
copy %BOOTSECTOR_BIN_DIR%\Bootsect.com FDBs-1.com
%BASETOOLS_DIR%\Bootsectimage.exe -g FDBs.com FDBs-1.com -f
REM @del FDBS.com
%BASETOOLS_DIR%\Genbootsector.exe -o %EFI_BOOT_DISK% -i FDBs-1.com
del FDBs-1.com
echo Done.
goto end

:CreateUsb
echo Start to create usb boot disk ...
if "%3"=="FAT16" goto CreateUsb_FAT16
if "%3"=="FAT32" goto CreateUsb_FAT32
if "%3"=="FAT12" goto WrongFATType

:CreateUsb_FAT16
if "%STEP%"=="2" goto CreateUsb_FAT16_step2
echo Format %EFI_BOOT_DISK% ...
echo.> FormatCommandInput.txt
format /FS:FAT /v:%DISK_LABEL% /q %EFI_BOOT_DISK% < FormatCommandInput.txt > NUL
del FormatCommandInput.txt
echo Create boot sector ...
%BASETOOLS_DIR%\Genbootsector.exe -i %EFI_BOOT_DISK% -o UsbBs16.com
copy %BOOTSECTOR_BIN_DIR%\Bs16.com Bs16-1.com
%BASETOOLS_DIR%\Bootsectimage.exe -g UsbBs16.com Bs16-1.com -f
%BASETOOLS_DIR%\Genbootsector.exe -o %EFI_BOOT_DISK% -i Bs16-1.com
del Bs16-1.com
%BASETOOLS_DIR%\Genbootsector.exe -m -o %EFI_BOOT_DISK% -i %BOOTSECTOR_BIN_DIR%\Mbr.com
echo Done.
echo PLEASE UNPLUG USB, THEN PLUG IT AGAIN!
goto end

:CreateUsb_FAT16_step2
copy %BUILD_DIR%\FV\EfiLdr16 %EFI_BOOT_DISK%
goto CreateBootFile

:CreateUsb_FAT32
if "%STEP%"=="2" goto CreateUsb_FAT32_step2
echo Format %EFI_BOOT_DISK% ...
echo.> FormatCommandInput.txt
format /FS:FAT32 /v:%DISK_LABEL% /q %EFI_BOOT_DISK% < FormatCommandInput.txt > NUL
del FormatCommandInput.txt
echo Create boot sector ...
%BASETOOLS_DIR%\Genbootsector.exe -i %EFI_BOOT_DISK% -o UsbBs32.com
copy %BOOTSECTOR_BIN_DIR%\Bs32.com Bs32-1.com
%BASETOOLS_DIR%\Bootsectimage.exe -g UsbBs32.com Bs32-1.com -f
del UsbBs32.com
%BASETOOLS_DIR%\Genbootsector.exe -o %EFI_BOOT_DISK% -i Bs32-1.com
del Bs32-1.com
%BASETOOLS_DIR%\Genbootsector.exe -m -o %EFI_BOOT_DISK% -i %BOOTSECTOR_BIN_DIR%\Mbr.com
echo Done.
echo PLEASE UNPLUG USB, THEN PLUG IT AGAIN!
goto end

:CreateUsb_FAT32_step2
copy %BUILD_DIR%\FV\EfiLdr20 %EFI_BOOT_DISK%
goto CreateBootFile

:CreateIde
goto end

:CreateBootFile
mkdir %EFI_BOOT_DISK%\efi\boot
copy %WORKSPACE%\ShellBinPkg\UefiShell\%PROCESSOR%\Shell.efi %EFI_BOOT_DISK%\efi\boot\boot%PROCESSOR%.efi /y
goto end

:WrongFATType
echo Wrong FAT type %3 for %1
goto end

:WrongArch
echo Error! Wrong architecture.
goto Help

:Help
echo "Usage: CreateBootDisk [usb|floppy|ide] DiskNumber [FAT12|FAT16|FAT32] [IA32|X64]"
:end
echo on
