source: trunk/docs/generic/developr.txt@ 57

Last change on this file since 57 was 57, checked in by Ben Rietbroek, 10 years ago

All source-files lowercased [v1.1.1-testing]

Some standard files like 'COPYING', 'LICENSE', etc. have not been
converted to lower case because they are usually distributed uppercased.

File size: 22.1 KB
Line 
1!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
2!! THIS INFORMATION IS OUTDATED WITH REGARD TO THE ECOMSTATION ADAPTED !!
3!! VERSIONS OF AIR-BOOT ! (Versions v1.07 and higher) !!
4!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5
6
7
8 ÖÄ[ Developer Information for AiR-BOOT v1.05+ ]ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ·
9 ÖÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄ ú ú ÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ·
10 º º
11 º This documentation is meant for developers that wish to support AiR-BOOT. º
12 º It explains detection, verification and reading/changing configuration of º
13 º AiR-BOOT. º
14 º º
15 ÓÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄ ú ú ÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄœ
16 ÓÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄœ
17
18 1.1 - Foreword
19 2.1 - Detection
20 2.2 - Code-Image
21 2.3 - Config-Data
22 3.1 - Configuration
23 3.2 - Internal Partition Table
24 3.3 - Hide-Configuration
25
26-------------------------------------------------------------------------------
27
28 ===================
29 | 1.1 - FOREWORD |
30 ===================
31
32 This document defines several aspects of AiR-BOOT v0.26b+ and is
33 currently on the level of AiR-BOOT v1.05+.
34
35 AiR-BOOT is an advanced multi-boot-loader that resides completly in
36 MBR/track-0. It has built-in colored menu-driven setup,
37 Virus-Detection and much more.
38
39 Please keep in mind that you are responsible for doing those changes
40 the documented, correct manner. AiR-BOOT is able to fix some
41 configuration values like Default-Partition, because the user could
42 have killed that partition as well, but AiR-BOOT is not completely
43 error-tolerant. Work as defined in this documentation and everything
44 will work as expected.
45
46 All offsets are zero-based, which means offset 1 is the 2nd byte.
47 Everything is meant to be in Intel-Order.
48
49 AiR-BOOT and its source is available via
50 http://air-boot.sourceforge.net
51
52 You may contact the author via
53 m_kiewitz [AT] users [DOT] sourceforge [DOT] net
54
55
56 ====================
57 | 2.1 - DETECTION |
58 ====================
59
60 AiR-BOOT consists of several parts.
61 - AiR-BOOT MBR Code (sector 1)
62 - AiR-BOOT Code (starting at sector 2)
63 - AiR-BOOT configuration (sector 55-59)
64 - AiR-BOOT MBR backup (sector 60)
65
66 A detailed view:
67
68 Sec. Name
69 ---------------------------
70 | 1 | Master Boot Record | -> Code
71 | 2 | System-Table | -> Code
72 | 3 | Code | -> Code
73 | .. | ... | -> Code
74 | 55 | Configuration | -> Config
75 | 56 | Partitiontable 1 | -> Config
76 | 57 | Partitiontable 2 | -> Config
77 | 58 | Hide-Configuration | -> Config
78 | 59 | Hide-Configuration | -> Config
79 | 60 | Backup of our MBR | -> Config
80 ---------------------------
81
82 Internally those parts are combined into Code and Configuration Data.
83 Both can get individually checked for corruption, so if the code is
84 damaged, but the configuration is intact, we don't have to rewrite
85 everything and force the user to reconfigure.
86
87 Now a basic-routine used for making a checksum out of ONE 512-byte
88 sector. Further use is explained in the following sections.
89
90 ; In: BX - Base Check
91 ; DS:SI - Pointer to 512-byte-area to be included
92 ; Out: BX - Base Check Result
93 ; Destroyed: SI will get updated (+512)
94 MBR_GetCheckOfSector Proc Near Uses ax cx
95 mov cx, 256
96 GetCheckOfSector_Loop:
97 lodsw
98 xor ax, 0BABEh
99 xor bx, ax
100 loop GetCheckOfSector_Loop
101 or bx, bx
102 jnz GetCheckOfSector_NoFixUp
103 mov bx, 1 ; No 0, because 0 means "empty"
104 GetCheckOfSector_NoFixUp:
105 ret
106 MBR_GetCheckOfSector EndP
107
108
109 =====================
110 | 2.2 - CODE-IMAGE |
111 =====================
112
113 Detecting presence of AiR-BOOT code is easy.
114 Look in the MBR at offset 2 for the signature 'AiRBOOT'.
115
116 If it's found, then the following structure is legal:
117
118 -----------------------------------------------------------------------
119 Contents: Standard AiR-BOOT basic information structure
120 =======================================================================
121 Identifier : STRING * 7 - 'AiRBOOT'
122 DayOfRelease : BYTE - in BCD
123 MonthOfRelease : BYTE - in BCD
124 YearOfRelease : WORD - in BCD (non-intel byte order)
125 MajorVersion : BYTE - in BCD
126 MinorVersion : BYTE - in BCD
127 ReleaseLanguage : BYTE - 'D' for dutch
128 'F' for french
129 'G' for german
130 'I' for italian
131 'R' for russian
132 'E' for english (v1.01+)
133 'S' for swedish
134 'U' for USA (removed in v1.01+)
135 TotalCodeSectors : BYTE - counting from sector 2
136 CheckSumOfCode : WORD - explained later
137 -----------------------------------------------------------------------
138
139 Now how to verify, if the Code-Image is completely intact.
140
141 Please note: There is no verification of the MBR-code. Anyway, if the
142 MBR-code is bad, then the signature should not be in place and it
143 would not load anyway.
144
145 Code used for verification in x86 assembly:
146
147 ; DS:SI - point to Sector 2 (the sector following MBR)
148 xor bx, bx
149 mov cx, TotalCodeSectors
150 CheckCodeLoop:
151 call MBR_GetCheckOfSector
152 loop CheckCodeLoop
153 -> BX holds CheckSum
154
155 Now if BX and CheckSumOfCode match, we got a intact code-image.
156
157
158 ======================
159 | 2.3 - CONFIG-DATA |
160 ======================
161
162 Detecting AiR-BOOT configuration is similar to code detection.
163 Look in sector 55 at offset 0 for the signature 'AiRCFG-TABLE­'.
164
165 If it's found, then the following structure is legal:
166
167 -----------------------------------------------------------------------
168 Contents: Standard AiR-BOOT config identification structure
169 =======================================================================
170 Identifier : STRING * 13 - 'AiRCFG-TABLE­'
171 MajorVersion : BYTE - in BCD
172 MinorVersion : BYTE - in BCD
173 ReleaseLanguage : BYTE - see above
174 EditCounter : DWORD - Will be increased on every save
175 CheckSumOfConfig : WORD - explained later
176 -----------------------------------------------------------------------
177
178 Please note: MajorVersion/MinorVersion/ReleaseLanguage may NOT have to
179 match the Version in the basic information structure.
180 This is the version of AiR-BOOT that installed the Config
181 area. It may be as well the current data structure level.
182 Anyway, you need to get the code version to find out what
183 data structure is used.
184
185 Code used for verification in x86 assembly:
186
187 ; DS:SI - point to Sector 55
188 xor bx, bx
189 mov cx, 5 ; total of 5 configuration sectors
190 CheckCodeLoop:
191 call MBR_GetCheckOfSector
192 loop CheckCodeLoop
193 -> BX holds CheckSum
194
195 Now if BX and CheckSumOfConfig match, we got an intact code-image.
196
197 Please note: The MBR-BackUp sector is *NOT* included.
198
199
200 ========================
201 | 3.1 - CONFIGURATION |
202 ========================
203
204 Please note: You have to check that the configuration data is INTACT,
205 before even thinking about writing to the configuration
206 area. If it's not intact, consider it as unknown data.
207
208 After changing anything in configuration area, do the following:
209 - Increase the EditCounter in sector 55 by one
210 - Set the CheckSumConfig to 0
211 - Calculate a new CheckSum by using the algo specified earlier
212 - Set CheckSumConfig to the checksum you calculated
213
214 In this section, I will specify the basic configuration structure used
215 in sector 55.
216
217 -----------------------------------------------------------------------
218 Contents: AiR-BOOT basic configuration structure
219 =======================================================================
220 Identifier : STRING * 13 - 'AiRCFG-TABLE­'
221 MajorVersion : BYTE - in BCD
222 MinorVersion : BYTE - in BCD
223 ReleaseLanguage : BYTE - normally 'E' for English
224 EditCounter : DWORD - Will be increased on every save
225 CheckSumOfConfig : WORD - explained in [2.3]
226 Partitions : BYTE - Partitions count in IPT
227 BootPartitions : BYTE - Removed since v0.28b
228 DefaultSelection : BYTE - Default-selection no (zero based)
229 FFh - nothing bootable
230 [additions/changes v1.02+]
231 FFh - Floppy Boot
232 FEh - BIOS continue (CD-ROM,etc.)
233 80h - nothing bootable
234 LastPartition : BYTE - Last-booted-partition (zero based)
235 Even under v1.02+, this never
236 contains floppy or Resume-BIOS
237 TimedBoot : BYTE - 0 - Timed Boot disabled
238 1 - Timed Boot enabled
239 TimedSeconds : BYTE - How many seconds till Timed Boot
240 TimedDelay : WORD - Internal Do not change
241 TimedBootLast : BYTE - 0 - Boot default, if Timed Boot
242 1 - Boot last, if Timed Boot
243 RememberBoot : BYTE - 0 - No action
244 1 - User-Boot->set LastPartition
245 RememberTimed : BYTE - 0 - No action
246 1 - Timed-Boot->set LastPartition
247 IncludeFloppy : BYTE - 0 - No floppy drive in bootmenu
248 1 - Floppy drive in bootmenu
249 BootMenuActive : BYTE - 0 - Don't display bootmenu
250 1 - Display bootmenu
251 2 - Detailed bootmenu (v0.91+)
252 PartitionsDetect : BYTE - 0 - No action
253 1 - Add new partitions as bootable
254 PasswordedSetup : BYTE - 0 - No action
255 1 - Ask Password on enter setup
256 PasswordedSystem : BYTE - 0 - No action
257 1 - Ask Password everytime
258 PasswordedChngBoot : BYTE - 0 - No action
259 1 - Ask Password, if user boots
260 by himself
261 ProtectMBRTSR : BYTE - 0 - No action
262 1 - Install MBR-Protect TSR
263 ProtectMBRignore : BYTE - 0 - System halt on MBR write
264 1 - Ignoring MBR writes
265 FloppyGetName : BYTE - 0 - No action
266 1 - Get floppy name on startup
267 DetectVirus : BYTE - 0 - No action
268 1 - Detect normal MBR virii
269 DetectStealth : BYTE - 0 - No action
270 1 - Detect stealth MBR virii
271 DetectVIBR : BYTE - 0 - No action
272 1 - Detect Virii-In-Boot-Record
273 AutoEnterSetup : BYTE - 0 - No action
274 1 - enter setup automatically
275 (reset by setup)
276 MasterPassword : QWORD - Not documented
277 BootPassword : QWORD - Not documented
278 RudeProtection : BYTE - Removed since v0.28b
279 LinuxPartition : BYTE - Linux Root partition no (0-based)
280 [not used anymore since 1.02+]
281 TimedKeyHandling : BYTE - 0 - Do nothing
282 1 - Reset time
283 2 - Stop time
284 MakeSound : BYTE - 0 - No action
285 1 - Make startup/boot sounds
286 FloppyGetTimer : BYTE - 0 - No action
287 1 - Get floppy name every 2 secs
288 ResumeBIOSbootSeq : BYTE - 0 - Disabled
289 1 - CD-ROM
290 2 - Network
291 3 - ZIP/LS120
292 CooperBars : BYTE - 0 - Disabled
293 1 - Enabled
294 [following contents are not used anymore - since 1.02]
295 LinuxCommandLine : STRING * 75 - Linux Command Line (0-terminated)
296 LinuxKrnlPartition : BYTE - 0FFh - Disabled
297 Otherwise no of partition
298 (has to be FAT-16) (0 based)
299 LinuxDefaultKernel : STRING * 11 - Default Kernel Name
300 will override Default Partition,
301 if found. Filled up with spaces.
302 LinuxKernelNameEnd : BYTE - Fixed ZERO
303 LinuxLastKernel : STRING * 11 - Last-Booted Kernel Name
304 if Partition got booted, this
305 field will get filled with spaces
306 LinuxKernelNameEnd2: BYTE - Fixed ZERO
307 [End of contents that are not used anymore]
308 ExtPartitionMShack : BYTE - 0 - Disabled
309 1 - MS Work-Around Enabled
310 AutomaticBoot : BYTE - Automatic Booting (0.94+)
311 0 - Disabled
312 1 - Enabled (only for one time)
313 AutomaticPartition : BYTE - Automatic Booting (0.94+)
314 Partition no (zero based)
315 FFh - Floppy booting
316 FEh - BIOS continue (CD-ROM,ZIP)
317 ForceLBAUsage : BYTE - Forces BIOS LBA API Usage (1.00+)
318 0 - Disabled
319 1 - Enabled
320 IgnoreLVM : BYTE - Ignores LVM information (1.02+)
321 0 - Disabled (do not ignore)
322 1 - Enabled
323 Reserved : STRING * 253 - RESERVED
324 AutoDriveLetter : STRING * 5 - RESERVED CONTENT (0.94+)
325 (used by Installer/2)
326 BIOScontIPTentry : STRING * 34 - RESERVED CONTENT
327 VirusDetectionHelp : STRING * 12 - RESERVED CONTENT
328 FloppyIPTentry : STRING * 34 - RESERVED CONTENT
329 -----------------------------------------------------------------------
330
331 Please note:
332 = Any area marked as Reserved MUST not get touched in any way =
333
334
335 ===================================
336 | 3.2 - INTERNAL PARTITION TABLE |
337 ===================================
338
339 The internal partition table (IPT) is in sectors 56-57.
340
341 The basic rule: Don't delete/add/move any of those entries.
342 AiR-BOOT will detect changes on the partition tables
343 by itself and will adjust pointers from basic
344 configuration and hide-configuration automatically.
345
346 Each IPT-entry is 34-bytes long. Those entries begin at offset 0.
347 You have to look in basic configuration to know how many IPT-entries
348 are in there.
349
350 If you change any partitions-bootable flag, you have to adjust the
351 BootPartitions-variable from basic configuration accordingly.
352
353 -----------------------------------------------------------------------
354 Contents: AiR-BOOT internal partition table entry (IPT)
355 =======================================================================
356 SerialNumber : DWORD - Serial number of partition /
357 Partition ID from LVM
358 (if available)
359 PartitionName : STRING * 11 - Name of the partition (in sync
360 with LVM and/or boot-record)
361 Drive : BYTE - Drive of partition (INT 13h-like)
362 PartitionID : BYTE - unhidden ID of partition
363 (08h == NTFS, thanx M$)
364 (FCh == JFS - v1.05+)
365 Flags : BYTE - Bit 0 - BootAble
366 Bit 1 - VIBR Detection
367 Bit 2 - Hide Feature used
368 Bit 3 - Logical Drive Letter set
369 Bit 4 - M$ Partition Hack Req.
370 All others: RESERVED
371 CheckSum : WORD - CheckSum of boot-record
372 LocationBegin : STRING * 3 - Cyl/Head/Sec of Boot-Record
373 LocationPartTab : STRING * 3 - Cyl/Head/Sec of Partition Table
374 containing this partition
375 AbsoluteBegin : DWORD - LBA sector of Boot-Record
376 AbsolutePartTab : DWORD - LBA sector of Partition Table
377 -----------------------------------------------------------------------
378
379 You may change:
380 SerialNumber/PartitionName - If you sync your changes with the
381 bootrecord of the partition
382 Flags - Do not (re)set any reserved bits
383
384 All other entries should NOT be changed by anyone but AiR-BOOT.
385
386
387 =============================
388 | 3.3 - HIDE CONFIGURATION |
389 =============================
390
391 First of all, if you define a Hide-Configuration, set the "Hide-Feature
392 used" flag. If you delete a Hide-Configuration completely, reset the
393 flag.
394
395 Hiding is defined per partition using a 30-byte string. This string is
396 built up of Partition-pointers that consist of a single byte.
397
398 Each partition-pointer is actually the number of the partition in the
399 IPT, which means they are zero-based.
400
401 The entry FFh is a terminator and actually defines "no-partition".
402 An empty Hide-Configuration entry consists of 30x FFh bytes.
403
404 The partitions listed in each hide-configuration string should be in-
405 order, which means if you want to hide partition 0, 2 and 3 the string
406 should look like this: 00h 02h 03h FFh (and 26 more FFhs)
407
408 The boot-drive-letters string is 30-bytes long. One byte per partition.
409 It's used for OS/2 / eCS use ONLY and it's only definable for HPFS and
410 FAT16 partitions. If you enable/disable the driveletter, then YOU are
411 required to change the corresponding partition's Drive-Letter flag
412 accordingly.
413
414 Since 1.02, AiR-BOOT supports LVM driveletter adjustment and will
415 change the driveletter of the partition that is to be booted.
416
417 -----------------------------------------------------------------------
418 Contents: AiR-BOOT hide configuration
419 =======================================================================
420 HideConfiguration : STRING * 30 - for one partition each
421 * 30 -> 900 Bytes (due maximum of 30 partitions in IPT)
422 DriveLetters : STRING * 30 - Boot driveletters of partitions
423 [since v0.92+]
424 00h - disabled
425 80h - "C"
426 81h - "D"...
427 Reserved : STRING * 84 - RESERVED
428 Identifier : STRING * 10 - 'AiRBOOTHID'
429 -----------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.