#summary How to build XTIDE Universal BIOS. *Table of Contents* ---- = Introduction = This is a small tutorial on how to build XTIDE Universal BIOS on Windows. = Programs needed = * [http://tortoisesvn.tigris.org/ TortoiseSVN] (or any SVN client) * [http://tdm-gcc.tdragon.net/ MinGW] (only mingw32-make.exe is needed) * [http://www.nasm.us/ NASM] * [http://upx.sourceforge.net/ UPX] (optional) * [http://strawberryperl.com/ Strawperry Perl] (optional) ---- = Install Tortoise SVN = TortoiseSVN is a subversion client that is very easy to use since it integrates nicely to Windows. It is used to download XTIDE Universal BIOS sources. Anyone can download sources from coogle.code repository but you must be a project member to commit changes back to the repository. First [http://tortoisesvn.net/downloads.html download and install TortoiseSVN]. You can use the default settings that the installer suggests. Next you need to create folder where you want to download the sources. We name the folder _XTIDE Universal BIOS sources_ in this example. == Downloading sources == Once the directory is created, open it and click right mouse button. You will find _SVN Checkout..._ from the menu. http://kotisivu.dnainternet.net/ttilli/XTIDE/pictures/TortoiseMenu.png URL for the repository is http://xtideuniversalbios.googlecode.com/svn/trunk/. There is no need to alter other settings so just click OK. You have now downloaded all sources from XTIDE Universal BIOS project. http://kotisivu.dnainternet.net/ttilli/XTIDE/pictures/SvnCheckout.png == Updating sources == If you have already done all above and want to get latest sources, go to the source folder you have created. Click right mouse button and select _SVN Update_. Using TortoiseSVN is really this easy! = Install MinGW = MinGW is a free C/C++ compiler suite for Windows. We only need make utility from it but installing the whole MinGW is easier since it will add path to the environment variables automatically. Download the bundle installer ([http://sourceforge.net/projects/tdm-gcc/files/TDM-GCC%20Installer/tdm-gcc-4.6.1.exe/download tdm-gcc-4.6.1.exe] when writing this) and install it with default settings. It will install the MinGW to C:\MinGW32. Keep this in mind since you'll want to install NASM to C:\MinGW32\bin so there will be no need to change environment path. = Install NASM = NASM is the assembler that is used to compile the sources. NASM v2.10 stable is what we are using when writing this. Download the [http://www.nasm.us/pub/nasm/releasebuilds/2.10/win32/nasm-2.10-win32.zip nasm-2.10-win32.zip] and extract nasm.exe to C:\MinGW32\bin (if you installed MinGW to C:\MinGW32\). = Install UPX (optional) = UPX is used to compress XTIDE Universal BIOS configurator. It is needed only for release build. The only advantage is that it makes the executable size smaller. = Install Strawberry Perl (optional) = Strawberry Perl is required to execute optional scripts when building XTIDE Universal BIOS. Scripts include string compression (not needed unless you modify the sources) and checksum calculation. Just run the Strawberry Perl installer with default settings. ---- = Building XTIDE Universal BIOS = Open command line window and go to the folder where you downloaded the sources with TortoiseSVN. Then go to the _XTIDE_Universal_BIOS_ folder. Write _mingw32-make all_ and everything should be build. You might want to write _mingw32-make checksum_ if you installed Stawberry Perl. It will calculate checksum bytes to the binaries (You can use XTIDECFG.COM for that if you don't want to install Stawberry Perl). You will find the binaries in _build\_ folder. == Including and excluding optional modules == There are few optional modules (most of them are included in official release builds). Reason for modules is simple: it is not possible to get all features to fit in 8k ROM. Official builds are designed so that they include the features most users prefer. It is easy to include and exclude modules but it must be done by editing makefile. Makefile specifies how the binaries are build when you execute _mingw32-make_. Open makefile with Windows Notepad (or [http://notepad-plus-plus.org/ Notepad++]). You will now see all the modules and short description about them. When writing this, the makefile looks like below: {{{ ################################################################################################## # Makefile to build XTIDE Universal BIOS. # # # # Valid makefile targets are: # # all Removes existing files and builds binary files in \Build # # small Builds 8 kiB binaries only (without checksum) # # large Builds 15 kiB binaries only (without checksum) # # clean Removes all files from \Build # # checksum* Builds all and then generates checksum byte to all binary files # # strings* Compress src\Strings.asm to src\StringsCompressed.asm # # # # * at the end of target name means that Perl is required for the job. # # Build directory must be created manually if it does not exist. # # # # # # Following modules can be included or excluded: # # MODULE_ADVANCED_ATA Native support for some VLB IDE controllers # # MODULE_BOOT_MENU Boot Menu for selection of drive to boot from # # MODULE_EBIOS Enhanced functions for accessing drives over 8.4 GB # # MODULE_JRIDE Support for JR-IDE/ISA # # MODULE_SERIAL Virtual hard disks using serial port # # MODULE_SERIAL_FLOPPY Virtual floppy drives using serial port (requires MODULE_SERIAL) # # MODULE_STRINGS_COMPRESSED Use compressed strings to save space # # # # Not modules but these affect the assembly: # # ELIMINATE_CGA_SNOW Prevents CGA snowing at the cost of a few bytes # # USE_186 Use instructions supported by 80188/80186 and V20/V30 and later # # USE_286 Use instructions supported by 286 and later # # USE_386 Use instructions supported by 386 and later # # USE_AT Use features supported on AT and later systems (not available on XT) # # # ################################################################################################## }}} I'm sure there will be more modules in the future so always read up to date makefile for all available modules. Scroll down the makefile to find Assembler preprocessor defines and other variables: {{{ ################################################################# # Assembler preprocessor defines. # ################################################################# DEFINES_COMMON = MODULE_BOOT_MENU MODULE_EBIOS MODULE_STRINGS_COMPRESSED DEFINES_XT = ELIMINATE_CGA_SNOW MODULE_SERIAL MODULE_SERIAL_FLOPPY DEFINES_XTPLUS = ELIMINATE_CGA_SNOW USE_186 MODULE_SERIAL MODULE_SERIAL_FLOPPY DEFINES_AT = USE_286 USE_AT MODULE_SERIAL MODULE_SERIAL_FLOPPY DEFINES_XT_LARGE = $(DEFINES_XT) MODULE_JRIDE MODULE_ADVANCED_ATA DEFINES_XTPLUS_LARGE = $(DEFINES_XTPLUS) MODULE_JRIDE MODULE_ADVANCED_ATA DEFINES_AT_LARGE = $(DEFINES_AT) MODULE_JRIDE MODULE_ADVANCED_ATA DEFINES_JRIDE_8K = ELIMINATE_CGA_SNOW MODULE_JRIDE DEFINES_386_8K = USE_386 USE_AT MODULE_ADVANCED_ATA ################### # Other variables # ################### # Target size of the ROM, used in main.asm for number of 512B blocks and by checksum Perl script below ROMSIZE = 8192 ROMSIZE_LARGE = 15360 }}} These are the only parts in the makefile that you need to edit. The defines tell what modules are included in what builds. DEFINES_COMMON define the modules that are included in all builds. DEFINES_XT, DEFINES_XTPLUS and DEFINES_AT define what modules are included in the 8k XT/XT+ and AT builds in addition to the ones in DEFINES_COMMON. DEFINES_XT_LARGE, DEFINES_XTPLUS_LARGE and DEFINES_AT_LARGE are for large builds (15k by default). Finally there are DEFINES_JRIDE_8K (8k JR-IDE/ISA build) and DEFINES_386_8K (AT build for 386+ with VLB controller support). If you want to make your own 8k AT build, modify DEFINES_COMMON and DEFINES_AT to include the modules you want. Then rebuild with _mingw32-make all_ or _mingw32-make checksum_. One more thing you might want to change is the size of large build. It is 15k by default (15360 bytes). If you want 16k binary, set ROMSIZE_LARGE to 16384. For 32k build set it to 32768. ---- = Building Configurator (XTIDECFG.COM) = You should always use up to date configurator but note that configurator usually lags behind XTIDE Universal BIOS when new features are concerned. Go to _XTIDE_Universal_BIOS_Configurator_v2_ folder and write _mingw32-make all_ to build the XTIDECFG.COM. You should write _mingw32-make release_ if you installed UPX. Again you will find the binaries in _build\_ folder.