source: trunk/BOOTCODE/AIR-BOOT.HIS@ 52

Last change on this file since 52 was 51, checked in by Ben Rietbroek, 12 years ago

AiR-BOOT v1.0.8-rc3 build-20120909 [2012-09-10]

With Git one can easily hop-skip-and-jump between branches.
So I use Git for my local repos and make use of this easy branching.
Because SVN can only handle lineair history, these branches had to be
rebased before committing them to Netlabs. So, this commit contains a
multitude of changes which makes it a bit hairy.

New

o Display LVM drive-letters in the main menu

A populair request was to show drive-letter information in the menu.
Drive-letters however, are OS specific and AiR-BOOT cannot
accurately predict what drive-letter other operating systems would
assign to what partition. eCS LVM drive-letters however are stored
in the LVM-record and can thus be displayed.

o Added 'Show LVM Drive Letters' option in SETUP/BASIC

This will toggle the display of LVM drive-letters in the main menu.
By default this option is enabled.

o Show popup message when BIOS INT13X extensions are not available

The system is halted.

o Show 'DEL to Power Off' in the bottom left corner

This tries to power-off the system, but it may not work for you.

o Simple interactive debugger

Outputs to the serial port with a few one-letter commands to dump
internal tables and state. (Only available in debug builds)

o Enhanced drive-letter feature

Enable multiple eCS installations using the same drive-letter.
This makes it possible to clone a system with the command
'XCOPY /h /o /t /s /e /r /v /e' to another drive and have that boot
from the same drive-letter.
(Or installing to the same drive by hiding the other system)

Changes

o Reduced MBR protection-image from 1024 to 768 bytes

Luckily the MBR Protection Image code does not exceed 768 bytes,
so that gives us another 256 bytes of precious code-space.
Now the non-EN versions are happy again.
Note that the alignment for the image changed from 512 to 256 bytes.
MBR-PROT.ASM, FIXCODE.C, PARTMAIN.ASM and AIR-BOOT.ASM have been
adjusted for this change.
The fight for code-space continues...

o Updating from v1.06 now also copies over drive-letters

When the user has forced drive-letters in v1.06 these will be copied
over to the v1.0.8 configuration when upgrading.
Because the drive-letter feature is broken in v1.07,
the drive-letter table does not get copied over when upgrading
from v1.07.

o Made FX-code optional to compile in

The FX-code supplies the shifting screen-effects when 'Cooper Bars'
is enabled in the setup. With the current enhancements made however,
there is a continuous lack of code-space, especially when debug-code
is included during development. The FX-code occupies some
1200 bytes, a space that can be put to better use. Therefore the
inclusion of the FX-code has been made conditional to make room for
either debugging or future new features.

o Also rewrite PBR on HPFS

Earlier, a fix was made to write a modified PBR back in case JFS was
used. This was done to enable the drive-letter feature on JFS, since
the PBR JFS-bootcode does not use the supplied PBR in memory.
With the enhancements in the drive-letter feature, the HPFS PBR
needs to be updated on disk also, to cope with zero drive-letters in
the HPFS PBR. This potentially fixes a missing drive-letter in the
PBR when the system is restored from an archive. You might need the
drive-letter feature to force the correct drive-letter on the first
boot, after which the feature can be disabled.

o Added extra MBR protection

When AiR-BOOT is active, it is only AiR-BOOT that writes to the MBR.
To protect the MBR from programming errors, like the one below,
any write to the MBR is now checked for validity.
In essence this is protecting your MBR from bad programming done
by me...

Fixes

o Fixed a minor bug with displaying LVM drive-letters

When more partitions that can be displayed were present, scrolling
the menu would not scroll the drive-letter. Fixed.

o Fixed a bug with regard to the drive-letter feature

When partitions were deleted, and some partitions above the deleted
partition(s) had a drive-letter forced, these partitions would lose
this assignment. This bug is also present in v1.06.

Note

The AIRBOOT.HIS file mentions a DOCU directory with the AiR-BOOT
documentation etc. However, this is not present in this commit and
will be provided at a later time.

File size: 20.3 KB
Line 
1;
2; AiR-BOOT (c) Copyright 1998-2008 M. Kiewitz
3;
4; This file is part of AiR-BOOT
5;
6; AiR-BOOT is free software: you can redistribute it and/or modify it under
7; the terms of the GNU General Public License as published by the Free
8; Software Foundation, either version 3 of the License, or (at your option)
9; any later version.
10;
11; AiR-BOOT is distributed in the hope that it will be useful, but WITHOUT ANY
12; WARRANTY: without even the implied warranty of MERCHANTABILITY or FITNESS
13; FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
14; details.
15;
16; You should have received a copy of the GNU General Public License along with
17; AiR-BOOT. If not, see <http://www.gnu.org/licenses/>.
18;
19
20
21
22
23; ------------------------------------------------
24; Rousseau: Fixes, Enhancements and fresh bugs :-)
25; ------------------------------------------------
26;
27; v1.0.8-rc3-bld20120909
28; ----------------------
29; # Added Show LVM Drive Letters in SETUP/BASIC #
30; This will toggle the display of LVM drive-letters in the main menu.
31; By default this option is enabled.
32;
33; # Reduced MBR Protection Image from 1024 bytes to 768 bytes #
34; The fight for code-space continues...
35; Luckily the MBR Protection Image code does not exceed 768 bytes,
36; so that gives us another 256 bytes of precious code-space.
37; Now the non-EN versions are happy again.
38; Note that the alignment for the image changed from 512 to 256 bytes.
39; MBR-PROT.ASM, FIXCODE.C, PARTMAIN.ASM and AIR-BOOT.ASM have been
40; adjusted for this change.
41;
42; # Updating from v1.06 now also copies over drive-letters #
43; When the user has forced drive-letters in v1.06 these will be copied over
44; to the v1.0.8 configuration when upgrading.
45; Because the drive-letter feature is broken in v1.07, the drive-letter
46; table does not get copied over when upgrading from v1.07.
47;
48; # Fixed a minor bug with displaying LVM drive-letters #
49; When more partitions that can be displayed were present, scrolling the
50; menu would not scroll the drive-letter. Fixed.
51;
52; # Added DOCU directory for documentation #
53; This contains the AiR-BOOT User Manual in Open Office .odt-format.
54; To also have OS/2 INF format, a transformation script and sheet have been
55; created to convert the .odt document to an ipf-source that can be compiled
56; with Watcoms wipfc ipf compiler. (IBM ipfc does not work correctly)
57; This makes it possible to write documentation in OOo Writer and export that
58; to PDF and INF format.
59;
60; # Fixed a bug with regard to the drive-letter feature #
61; When partitions were deleted, and some partitions above the deleted
62; partition(s) had a drive-letter forced, these partitions would lose this
63; assignment. This bug is also present in v1.06.
64;
65; # Implemented a very simple interactive debugger #
66; Making use of the main menu-loop, pressing a digit or a letter activates
67; some debugging routine. Mostly such a routine dumps a part of the internal
68; state to the com-port. Other purposes are the interrogation of certain
69; BIOS functions, as these can differ substantially between machines.
70;
71; # Made FX-code optional to compile in #
72; The FX-code supplies the shifting screen-effects when 'Cooper Bars' is
73; enabled in the setup. With the current enhancements made however,
74; there is a continuous lack of code-space, especially when debug-code is
75; included during development. The FX-code occupies some 1200 bytes, a space
76; that can be put to better use. Therefore inclusion the FX-code has been
77; made conditional to make room for either debugging or future new features.
78;
79; # Also write PBR to HPFS #
80; Earlier, a fix was made to write a modified PBR back in case JFS was used.
81; This was done to enable the drive-letter feature on JFS, since the PBR
82; JFS-bootcode does not use the supplied PBR in memory.
83; With the enhancements in the drive-letter feature, the HPFS PBR needs to
84; be updated on disk also, to cope with zero drive-letters in the HPFS PBR.
85;
86; # Added drive-letters in display for LVM volumes #
87; A populair request was to show drive-letter information in the menu.
88; Drive-letters however, are OS specific and AiR-BOOT cannot accurately
89; predict what drive-letter DOS would assign to what partition.
90; eCS LVM drive-letters however are stored in the LVM-record and can thus
91; be displayed. This has been implemented.
92;
93; # Enhanced drive-letter feature #
94; Enable multiple eComStation installations using the same drive-letter
95; This makes it possible to clone a system with XCOPY /h /e /s /t /r /v
96; to another drive and have that boot from the same drive-letter.
97; (Or installing to the same drive by hiding the other system)
98;
99; # Removed Force LBA Usage from Setup #
100; When AiR-BOOT is installed on an USB-stick, there is a possibility that
101; the CHS-geometry varies between different machines where the stick is
102; booted. This would invalidate the CHS-values in the partition table
103; and also the values that were stored in the AiR-BOOT's internal partition
104; table, the IPT.
105; To prevent more nasty things like below from happening, LBA-addressing
106; is now always used and the setting has been removed from the setup-menu.
107; While this may prevent AiR-BOOT from running on very old systems,
108; the focus of AiR-BOOT development is geared towards the future.
109; Such old systems can use v1.06.
110;
111; # Added extra MBR protection #
112; When AiR-BOOT is active, it is only AiR-BOOT that writes to the MBR.
113; To protect the MBR from programming errors, like the one below,
114; any write to the MBR is now checked for validity.
115; In essence this is protecting your MBR from bad programming done by me...
116;
117;!## Fixed a very very nasty bug that can destroy the MBR on multiple disks ##!
118; When Force BIOS-LBA usage is disabled (the default is enabled), and the
119; the driveletter feature is being set, and valid LVM information is present,
120; then the MBR of the disk containing the partition of which the driveletter
121; is changed will be overwritten with the LVM sector !
122; In addition, if the driveletter was already in use by another partition
123; on another disk, the MBR of that disk will be overwritten too !!
124;
125; # Fixed a nasty bug when eCS phase1 is active #
126; When creating a partition in a free space between partitions for
127; eCS installation, the phase1 boot-through code would calculate the
128; wrong index for the new partition. As a result the next partition
129; would be auto-booted instead of the newly installed system.
130; This has been fixed.
131; This bug is also present in v1.07 and does not apply to previous versions.
132;
133; v1.0.8-rc2-bld20120423
134; ----------------------
135; # Fixed some minor Installer bugs with SPT < 63 #
136; Some extra var StatusCode was used instead of Status_Code.
137; This caused too few tracks not to be reported.
138; No installation was done however.
139; This bug is also present in the v1.06 code.
140;
141; # Fixed Installer to handle packed hideparttable #
142; Implemented upgrading from v1.06 directly to v1.0.8.
143; Fixed minor stuff when upgrading from v1.06 to v1.07.
144; Hide partition configuration is now preserved when upgrading.
145; Fixed minor display bug when SPT < 63.
146;
147; # Implemented DOS code in C cross-platform installer
148; There is now one C source for 4 platforms:
149; DOS,WIN32,OS2 and LINUX (Linux portion not ready yet)
150; This obsoletes AIRBOOT.ASM/AIRBOOT.COM.
151; DOS Installer is now AIRBOOTD.EXE.
152;
153; # Merged 16-bit Assembler bitfield code to the Installer #
154; The installer needs to handle the v1.0.8 configuration.
155; This requires access to the 6-bit packed 'hideparttable'.
156; To 'not-reinvent-the-wheel', by coding this in C, the Assembler
157; bitfield functions are integrated using Open Watcom's '_asm' capability.
158; It may not be pretty and the functions themselves are limited,
159; but this method prevents maintaining seperate Asm and C implementations.
160; Will be improved later.
161;
162; # Implemented BLDLEVEL support #
163; AIRBOOT.BIN, the Installers and SET(A)BOOT now support OS/2 BLDLEVEL
164; information. This enhances identification and problem tracking/solving.
165; While BLDLEVEL is an OS/2 command, the BLDLEVEL information itself can
166; be embedded in any binary. Invoking BLDLEVEL from within OS/2 on, let's
167; say, the AIRBOOTL.ELF Linux executable, will also show the BLDLEVEL info.
168; A slight deficiency of BLDLEVEL is that is forces a format on the version.
169; So, AiR-BOOT v1.0.8 will be shown as v1.00.8.
170;
171; # Added support for Masm6 and Wasm v1.9 -- Experimental use only #
172; Trying to assemble with Masm6 or Wasm v1.9 reveiled some interesting
173; behavior aspects in general. While this version can now be assembled with
174; Masm6 and Wasm too, this was only done to get a 'cross-feeling' for this
175; project. Future versions will drop support for Tasm, Masm6 and Wasm since
176; much conditional assembly is needed to support all of them. This was an
177; experimental excercise only. JWasm is the assembler of choise for this
178; project and any future versions.
179;
180; # Implemented stop scanning when max. partitions limit exceeded #
181; Previous versions halted the system when the maximum number of partitions
182; that can be handled (45) was exceeded.
183; This required the user to boot from alternate media to correct the problem.
184; Now, when the partition limit is exceeded, AiR-BOOT displays a pop-up
185; and waits for a key-press. When the user presses a key, AiR-BOOT continues
186; and the boot-menu is shown, enabling the user to boot a system to correct
187; the problem. To indicate this situation, the color of the selection-bar
188; is displayed in red.
189;
190; # Fixed hiding partitions above old max 30-partitions limit #
191; Hiding partitions is a per partition setting and it is kept in a table
192; in the AiR-BOOT image on disk. In previous versions, including v1.0.8-rc1,
193; this table still held the old number of maximum partitions (30).
194; So configuring a hide-setting for partitions >30 or hiding more than
195; 30 partitions per partition would not work properly.
196; Unfortunately, there was no room to expand this table, since it resides
197; just below the MBR backup, at the end of the AiR-BOOT image.
198; To work around this, the table now uses a 6-bits packed format and the
199; drive-letter array, which followed this table has been moved elsewhere.
200; This is a change in the configuration layout since the previous version,
201; so the config-version has been bumped to v1.0.8.
202; TODO: Add upgrade-code to the installer to cope with this.
203;
204; # Removed requirement for LVM P and V name to be the same to edit #
205; However, when both are the same before the edit, the V name will be
206; synved to the P name to have them both the same again after the edit.
207; If they differ, only the V name is updated.
208;
209; # Trying to edit the label of a type 0x35 partition now shows a popup #
210; The user is informed that type 0x35 labels cannot be edited.
211;
212; # Type 0x35 partitions cannot be added to the AB-menu anymore #
213; They are not bootable anyway. The user is informed by a popup.
214;
215; # De-tasemized the Assembler sources for JWasm compatibility #
216; AiR-BOOT can now be built using JWasm, which is the preferred
217; assembler as of this release. Tasm support will be dropped in the future.
218;
219; # Completely reworked the build-system #
220; Everything is now done with Makefiles using WMake, Wlink and the
221; C/C++ Compilers from the Open Watcom development tools together with JWasm.
222; This obsoletes tasm, tlink and exe2bin.
223;
224; # Cross-Platform support #
225; AiR-BOOT and it's helpers can now be built on: DOS, Win32, OS/2 and Linux.
226;
227; # Rewrote FIXCODE.ASM in C so the tool-chain is not dependent on a DOS .COM #
228; Now FIXCODE is built platform-specific and takes care of the embedding
229; of MPR-protection image.
230;
231; # Created FIXCODE bash-script to accomplish embedding of MBR-protection #
232; Building on Linux requires that no DOS-tools are used in the tool-chain.
233; This script essentially performs the same functionality but does not check
234; certain conditions, like image-too-big, etc.
235; It is a 'quick-hack' until the Linux version of FIXCODE is operational.
236;
237; v1.0.8-rc1-bld20120124
238; ----------------------
239; # Changed version format to be more WarpIN compatible #
240; This is a cosmetic change only, the internal format has not changed.
241;
242; # Show LVM VolumeName instead of LVM PartitionName #
243; Previous versions of AiR-BOOT used the LVM PartitionName as the Label
244; if LVM-info was present for the partition.
245; This is inconsistent with MiniLVM which shows the LVM VolumeName.
246; Starting with v1.0.8 the LVM VolumeName is displayed.
247;
248; # LVM Partition and Volume name Synchronization #
249; Changing the Label of a partition with LVM-info now synchronizes
250; the LVM Partition Name with the LVM Volume Name.
251; This is the same behavior as MiniLVM.
252; Note however that the Label can only be changed when both the
253; LVM PartitionName and LVM VolumeName are the same.
254; See protected editing below.
255;
256; # Protected editing of the Label when LVM-info is present #
257; When the LVM VolumeName differs from the LVM PartitionName, the user can
258; edit the label but it will not be saved to the LVM record on disk.
259; This is to protect configurations created with the classic LVM tool.
260; Since MiniLVM assigns the same name to both the Partition and the Volume,
261; the Label can be edited and will be saved for such partitions.
262; To further protect a given configuration, LVM volumes with type 0x35
263; cannot be edited at all. This is to ensure that the LVM PartitionNames
264; remain unique when Spanning Volumes are used.
265;
266; # Editing the Label appended spaces #
267; When editing and changing the Label of a System using SETUP,
268; trailing spaces were stored in the LVM Volume and Partition names.
269; These labels need to be padded with zero's.
270; This has been fixed.
271; This bug is also present in v1.06.
272;
273; # Reworked Primary Partition <-> LVM-info association #
274; The previous way was to use a 1:1 correspondence between the PT-index
275; and the LVM-index. However, when the PT is cross-linked, lower entries
276; pointing to higher locations on the disk, or vice-versa, incorrect
277; LVM-info was associated. Such a cross-linked PT is sometimes generated
278; by the LVM engine when creating or deleting multiple partitions at once.
279; Best is to intermediately save after creating or deleting a partition
280; with (Mini)LVM.
281; The new way is to search the LVM-entries for the partition requested.
282;
283; # Reworked MBR-code to provide two I13X signatures #
284; The normal LVM MBR-code uses a special setup to indicate Int13X capability.
285; It contains the instruction, MOV EAX,'X31I', and some software checks
286; for the presence of the 'I13X' string in the MBR.
287; However, the location of this instruction differs between eCS 1.x and
288; eCS 2.x LVM MBR-code.
289; For compatibility, the v1.0.8 MBR has the 'I13X' string at both locations.
290;
291; # Fixed booting older eCS installations on HPFS #
292; When restoring systems from archive or otherwise generated systems,
293; the HPFS BPB sometimes lacked information that AiR-BOOT did not fill in.
294; The result was that a wrong partition was booted or that booting
295; stalled with the "unable to operate harddisk" message.
296; This has been fixed.
297;
298; # Fixed booting Windows from a logical partition with loader on FAT32 #
299; Depending on the configuration, sometimes the NTLDR could not be found.
300; This has been fixed.
301;
302; # Fixed drive-letter feature which was broken in v1.07 #
303; a) v1.07 did remember the drive-letter feature was active for a partition,
304; but it failed to store the drive-letter because too few configuration
305; sectors were saved. This resulted in arbitrary values to be assigned
306; to the drive-letter for the partition.
307; b) The JFS PBR-code does not use the in-memory BPB but uses the one
308; that is on disk. This prevented AiR-BOOT from passing the user assigned
309; drive-letter. AiR-BOOT now inserts the drive-letter in the BPB on disk,
310; but only if the partition is JFS.
311; AB v1.06 is also unable to use the drive-letter feature on JFS.
312; As a convenience, a drive-letter in the dl-feature pop-up can now be set
313; to "Disabled" by pressing backspace.
314; (As opposed to arrowing up/down to get to the "Disabled" entry)
315;
316; # Fixed stuck phase1 indicator when wrong name entered #
317; When using SET(A)BOOT /4:NAME with the MEMDRIVE env-var set,
318; and NAME being a non-existing partition, the phase1 indicator
319; would stay stuck between reboots.
320; This has been fixed.
321;
322; # Fixed DOS installer (AIRBOOT.COM) #
323; Behavior should now be the same as the eCS and WIN installers.
324; This re-enables the use of a bootable floppy or usb-stick
325; to install AiR-BOOT.
326;
327; # Fixed booting from FloppyDrive #
328; This is actually also broken in v1.06 when Int13X is forced on.
329; Now regular BIOS calls are used when booting from floppydrive.
330; A fresh AiR-BOOT installation now includes the floppydrive menu entry.
331;
332; # Fixed chainloading IBM Boot Manager #
333; AiR-BOOT v1.06 could chainload IBM-BM but only when it resided on
334; the first disk and was located below the 1024 cylinder and forced Int13X
335; extensions were disabled.
336; AiR-BOOT v1.0.8 can now chainload IBM-BM with forced Int13X extensions
337; enabled (the default) and if IBM-BM resides above the 1024 cylinder limit.
338; Also, chainloading IBM-BM from the second disk is supported.
339; Do not use chainloading IBM-BM unless you really have a need to.
340; See the AiR-BOOT Manual for "gotcha's" when using both AiR-BOOT and IBM-BM.
341;
342; # Corrected contact links #
343; Version 1.07 still presented the old contact links to the sourceforge
344; repository and the original author.
345; This caused confusion with regard to issues with v1.07.
346; This has been corrected.
347;
348; NOTE:
349; AB v1.07 had a bug with saving and loading the correct size of the
350; configuration. This broke the drive-letter feature.
351; As a result, the CRC over the config was also calculated wrongly.
352; While AB v1.0.8 fixes this, it has to use the v1.07 way of CRC calculation.
353; Otherwise SET(A)BOOT from the eCS v2.1 would break on AB v1.0.8 because it
354; sees a corrupt AiR-BOOT configuration.
355; This means that the CRC over the AB config is calculated over 5 sectors
356; instead of 7, just like in v1.07.
357;
358; NOTE:
359; Because of space constraints most of the debug code has been commented
360; out in this version.
361; Possibly it will be re-enabled after code cleanup and changing to JWasm.
362;
363;
364; v1.07
365; -----
366; # Huge Drives and LVM #
367; When using disks >512GB under eComStation, the drive geometry changes to
368; 127 or 255 sectors per track. Since LVM-info is written at the last sector
369; of a track, and AiR-BOOT uses the geometry of the MBR, it cannot find the
370; LVM-info and the eCS partition / volume bootsector.
371; This has been fixed.
372; Now, when an eCS-partition is discovered and the drive is >512GB, AiR-BOOT
373; will use the eCS geometry to locate the LVM-info and the bootsector.
374;
375; # Special loader handling #
376; The special handling of partition boot-loaders has been enhanced to
377; enable booting of legacy systems on huge drives with or without OS/2
378; extended geometry.
379;
380; # eComStation boot-through after phase 1 #
381; Special functionality is implemented to directly boot a newly
382; installed eCS system after completing phase 1 of the installation.
383; This works in conjuntion with the OS/2 specific SET(A)BOOT.EXE program,
384; also part of the AiR-BOOT package.
385;
386; # Math, Debug, Conv and Aux modules #
387; These are used for 32-bit arithmatic on 16-bit code,
388; debug the boot process, converting between data-types
389; and outputting log-data to the com-port.
390;
391;
392; v1.06
393; -----
394; This is the last version developed by Martin Kiewitz.
395; It serves as the base for the versions above.
396; Please do not post your feedback on sourceforge or bother Martin with
397; regard to issues with the above versions.
398; Use the eCS bug-tracker or the Trac project-page at netlabs and see the
399; documentation of this newer versions for the relevant contact information.
400
Note: See TracBrowser for help on using the repository browser.