| 1 | ===============================================================================
 | 
|---|
| 2 | Information on AiR-BOOT Development                                [2017-04-13]
 | 
|---|
| 3 | ===============================================================================
 | 
|---|
| 4 | 
 | 
|---|
| 5 | 
 | 
|---|
| 6 | This is the AiR-BOOT Development Build Directory
 | 
|---|
| 7 | ------------------------------------------------
 | 
|---|
| 8 | AiR-BOOT roughly consists of the following components:
 | 
|---|
| 9 | o The BootLoader
 | 
|---|
| 10 | o The Installer Program
 | 
|---|
| 11 | o The SetABoot Program
 | 
|---|
| 12 | 
 | 
|---|
| 13 | Required Tools
 | 
|---|
| 14 | --------------
 | 
|---|
| 15 | o Open Watcom -- v1.9 is the version used by the maintainer
 | 
|---|
| 16 | o JWasm       -- v2.06d (July 9 2011) is the version used by the maintainer
 | 
|---|
| 17 | o GNU Make    -- v3.81 or higher
 | 
|---|
| 18 | 
 | 
|---|
| 19 | A note on supported Assemblers and Build Utilities
 | 
|---|
| 20 | --------------------------------------------------
 | 
|---|
| 21 | The (earlier) support for TASM/MASM and WASM was actually an excercise
 | 
|---|
| 22 | investigating assembler capabilities and code-generation. This has not been
 | 
|---|
| 23 | maintained and the relevant sections and files will be removed. The only
 | 
|---|
| 24 | supported assembler is JWasm, specifically v2.06d for OS/2. Also, the Watcom
 | 
|---|
| 25 | Make utility (wmake) is about to be replaced by GNU Make to enhance the overall
 | 
|---|
| 26 | build-system.
 | 
|---|
| 27 | 
 | 
|---|
| 28 | The BootLoader
 | 
|---|
| 29 | --------------
 | 
|---|
| 30 | The main source file is 'airboot.asm', from which other sources are included
 | 
|---|
| 31 | at the source level. Building the BootLoader results in a 16-bit binary image
 | 
|---|
| 32 | called 'airboot.bin' which is the stuff that gets installed in TRACK0 of the
 | 
|---|
| 33 | boot-disk.
 | 
|---|
| 34 | 
 | 
|---|
| 35 | Post Processing of the BootLoader
 | 
|---|
| 36 | ---------------------------------
 | 
|---|
| 37 | When 'airboot.asm' is assembled, the resulting binary is not ready yet.
 | 
|---|
| 38 | The 'mbr-prot' module is a seperatedly built module that has to be embedded
 | 
|---|
| 39 | to form the final loader-image. This is done by the 'fixcode' utility.
 | 
|---|
| 40 | Even when this embedding is done, the resulting image is not ready yet because
 | 
|---|
| 41 | the CRC that protects the code-section has not been calculated yet, because
 | 
|---|
| 42 | that is done by the installer when the loader-imaged is installed. This means
 | 
|---|
| 43 | that a regular built loader-image cannot be manually merged to TRACK0 of a disk
 | 
|---|
| 44 | and be functional. The moment AiR-BOOT starts it will halt on the invalid
 | 
|---|
| 45 | code-section CRC. See the para below on how to circumvent that.
 | 
|---|
| 46 | 
 | 
|---|
| 47 | The 'CRC_IGNORE' build-option
 | 
|---|
| 48 | -----------------------------
 | 
|---|
| 49 | If you look at 'fc.mnu' you see the use of the 'CRC_IGNORE' build-option.
 | 
|---|
| 50 | This option disables the CRC check for the code-section in the resulting
 | 
|---|
| 51 | loader-image so that it is now possible to manually merge the loader-image to
 | 
|---|
| 52 | TRACK0 of a disk. This is handy when using virtual machines for development.
 | 
|---|
| 53 | Of course you cannot blindly copy the loader-image to TRACK0, because that
 | 
|---|
| 54 | would overwrite the partition-table of the disk.
 | 
|---|
| 55 | 
 | 
|---|
| 56 | The Internal Mini Debugger
 | 
|---|
| 57 | --------------------------
 | 
|---|
| 58 | If AUX_DEBUG (airboot.asm:~97) is enabled, rudimentary COM-port debugging is
 | 
|---|
| 59 | possible. If a terminal is attached to the COM-port, AiR-BOOT will dump
 | 
|---|
| 60 | information there when it is loading and a few 'hotkeys' exist to dump some
 | 
|---|
| 61 | internal stuff when the MAIN MENU is active. Press 'h' to have AiR-BOOT dump
 | 
|---|
| 62 | de hotkeys to the COM-port.
 | 
|---|
| 63 | 
 | 
|---|
| 64 | Adjusting the Mini Debugger to your needs
 | 
|---|
| 65 | -----------------------------------------
 | 
|---|
| 66 | The debugger hooks into the main keyboard loop to check if the key pressed is
 | 
|---|
| 67 | one of its hotkeys. These hotkeys are defined in 'debug.asm'. More precisely,
 | 
|---|
| 68 | they are part of a dispatch-table where each hotkey maps to a pointer that
 | 
|---|
| 69 | points to the function to be executed. This makes it easy to redefine existing
 | 
|---|
| 70 | hotkeys or add new ones and their corresponding functions to suit your needs.
 | 
|---|
| 71 | 
 | 
|---|
| 72 | The need for the '/forcecode' flag
 | 
|---|
| 73 | ----------------------------------
 | 
|---|
| 74 | When developing, if the regular installer is used to install a new build,
 | 
|---|
| 75 | the '/forcecode' option is required. This is because the installer checks the
 | 
|---|
| 76 | version, which is most probably the same as the previously installed build,
 | 
|---|
| 77 | so the installer assumes the installed version 'up-to-date'. The '/forcecode'
 | 
|---|
| 78 | flag forces the installer to write the new code-section to TRACK0 of the disk.
 | 
|---|
| 79 | 
 | 
|---|
| 80 | CAUTION when developing on a Real System
 | 
|---|
| 81 | ----------------------------------------
 | 
|---|
| 82 | Remember that AiR-BOOT always accesses all disks and modifies the boot-flags
 | 
|---|
| 83 | in the MBRs it finds. A small bug can render disks unusable. This also involves
 | 
|---|
| 84 | attached USB mass storage devices (accidently) left plugged-in. Needless to say
 | 
|---|
| 85 | that a virtual machine environment is the safest and both Qemu and VirtualBox
 | 
|---|
| 86 | are very suitable for that.
 | 
|---|
| 87 | 
 | 
|---|
| 88 | The Installer Program
 | 
|---|
| 89 | ---------------------
 | 
|---|
| 90 | This is a cross-platform program written in C.
 | 
|---|
| 91 | It takes the 'airboot.bin' loader-image and installs it into TRACK0 of the
 | 
|---|
| 92 | boot-disk. Needless to say that the OS/2 version of the installer,
 | 
|---|
| 93 | 'airboot2.exe', is the most tested version. Versions for the other platforms
 | 
|---|
| 94 | are tested occasionally but not intensively.
 | 
|---|
| 95 | 
 | 
|---|
| 96 | The SetABoot Program
 | 
|---|
| 97 | --------------------
 | 
|---|
| 98 | This is the AiR-BOOT replacement for 'setboot.exe'.
 | 
|---|
| 99 | If offers roughly the same functionality, but instead of acting on IBM-BM,
 | 
|---|
| 100 | it of course acts on AiR-BOOT. If AiR-BOOT is not found, it delegates to
 | 
|---|
| 101 | 'setbm.exe' which it assumes is the original 'setboot.exe' renamed.
 | 
|---|
| 102 | 
 | 
|---|
| 103 | The FixCode Utility
 | 
|---|
| 104 | -------------------
 | 
|---|
| 105 | This utility is used to embed the 'mbr-prot' module into the loader-image.
 | 
|---|
| 106 | It is only used when developing and not part of the AiR-BOOT distribution.
 | 
|---|
| 107 | 
 | 
|---|
| 108 | The File Commander Build Menu
 | 
|---|
| 109 | -----------------------------
 | 
|---|
| 110 | The Swiss Army Knife used to provide Build Menus.
 | 
|---|
| 111 | Just press F2 here for the Developer Build Menu.
 | 
|---|
| 112 | 
 | 
|---|
| 113 | Resources:
 | 
|---|
| 114 | ----------
 | 
|---|
| 115 | Netlabs Project Page  : http://trac.netlabs.org/air-boot
 | 
|---|
| 116 | Netlabs Respository   : http://trac.netlabs.org/air-boot/browser/trunk
 | 
|---|
| 117 | Netlabs Revision Log  : http://trac.netlabs.org/air-boot/log
 | 
|---|
| 118 | Bug tracking:         : http://trac.netlabs.org/air-boot/report
 | 
|---|
| 119 | GitHub Project Portal : http://rousseaux.github.io/netlabs.air-boot
 | 
|---|
| 120 | GitHub Repository     : http://github.com/rousseaux/netlabs.air-boot
 | 
|---|
| 121 | Contact e-mail        : rousseau.os2dev@gmx.com
 | 
|---|
| 122 | 
 | 
|---|
| 123 | 
 | 
|---|
| 124 | 
 | 
|---|
| 125 | Ben Rietbroek <rousseau.os2dev@gmx.com>,
 | 
|---|
| 126 | 
 | 
|---|
| 127 |   AiR-BOOT maintainer.
 | 
|---|