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

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

BSS Corruption Problem located (auxdebug on) [2012-02-21]

WARNING!!

All commits upto and including the commit of [2012-05-13] contain
a severe bug!! Building from these sources and then disabling
the 'force LBA' feature while also using the drive-letter feature or
editing the label can DESTROY THE MBR on ALL ATTACHED DISKS!!
DO NOT DISABLE 'FORCE LBA USAGE' WHEN BUILT FROM THE THESE COMMITS!!

Problem

o Function with Xrefs goes out-of-bounds because hideparttable is too small

Has only 30 entries and should be 45.
Lost partition checker initializes out-of-bounds.

Info

o About the hideparttable

For each partition it can be specified which other partitions need to
be hidden when that partition is booted. This is useful for legacy DOS
but also braindead Windows that presents HPFS/JFS partitions as
unformatted and tries to persuade the user to format them.
With v1.07 the numer of partitions that can be handled was expanded from
30 to 45, but the size of the hideparttable was overseen.

o The need to compress the hideparttable

The old size was 30x30=900 bytes while the required size is 45x45=2045 bytes.
This amount of space is not available in the image.
Since 6 bits are enough to identify the partition number to be hidden,
the solution is to devide the table into bitfields. This will result
in a table of (45*45*6)/8=1519 bytes, which can be fitted.

Changes

Revamped the sources quite a bit and moved the history to a separate
file. (AIR-BOOT.HIS)

New

o FIXCODE script for Linux

Just until the C version is ready...

File size: 10.2 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; Rousseau: Fixes and Enhancements
24; ---------------------------------
25;
26; v1.0.8-rc2-bld20120213
27;-----------------------
28; # Removed requirement for LVM P and V name to be the same to edit #
29; However, when both are the same before the edit, the V name will be
30; synved to the P name to have them both the same again after the edit.
31; If they differ, only the V name is updated.
32;
33; # Trying to edit the label of a type 0x35 partition now shows a popup #
34; The user is informed that type 0x35 labels cannot be edited.
35;
36; # Type 0x35 partitions cannot be added to the AB-menu anymore #
37; They are not bootable anyway. The user is informed by a popup.
38;
39; # De-tasemized the Assembler sources for JWasm compatibility #
40; AiR-BOOT can now be built using JWasm, which is now the preferred
41; assembler.
42;
43; # Completely reworked the build-system #
44; Everything is now done with Makefiles using WMake, Wlink and the
45; C/C++ Compilers from the Open Watcom development tools together with JWasm.
46; This obsoletes tasm, tlink and exe2bin.
47;
48; # Cross-Platform support #
49; AiR-BOOT and it's helpers can now be built on: DOS, Win32, OS/2 and Linux.
50;
51; # Rewrote FIXCODE.ASM in C so the tool-chain is not dependent on a DOS .COM
52; program for embedding the MBR-protection. DOS,Win32,OS/2 and Linux
53; versions of FIXCODE are now used. (EXE[MZ|PE|LX] and ELF)
54;
55; v1.0.8-rc1-bld20120124
56; ----------------------
57; # Changed version format to be more WarpIN compatible #
58; This is a cosmetic change only, the internal format has not changed.
59;
60; # Show LVM VolumeName instead of LVM PartitionName #
61; Previous versions of AiR-BOOT used the LVM PartitionName as the Label
62; if LVM-info was present for the partition.
63; This is inconsistent with MiniLVM which shows the LVM VolumeName.
64; Starting with v1.0.8 the LVM VolumeName is displayed.
65;
66; # LVM Partition and Volume name Synchronization #
67; Changing the Label of a partition with LVM-info now synchronizes
68; the LVM Partition Name with the LVM Volume Name.
69; This is the same behavior as MiniLVM.
70; Note however that the Label can only be changed when both the
71; LVM PartitionName and LVM VolumeName are the same.
72; See protected editing below.
73;
74; # Protected editing of the Label when LVM-info is present #
75; When the LVM VolumeName differs from the LVM PartitionName, the user can
76; edit the label but it will not be saved to the LVM record on disk.
77; This is to protect configurations created with the classic LVM tool.
78; Since MiniLVM assigns the same name to both the Partition and the Volume,
79; the Label can be edited and will be saved for such partitions.
80; To further protect a given configuration, LVM volumes with type 0x35
81; cannot be edited at all. This is to ensure that the LVM PartitionNames
82; remain unique when Spanning Volumes are used.
83;
84; # Editing the Label appended spaces #
85; When editing and changing the Label of a System using SETUP,
86; trailing spaces were stored in the LVM Volume and Partition names.
87; These labels need to be padded with zero's.
88; This has been fixed.
89; This bug is also present in v1.06.
90;
91; # Reworked Primary Partition <-> LVM-info association #
92; The previous way was to use a 1:1 correspondence between the PT-index
93; and the LVM-index. However, when the PT is cross-linked, lower entries
94; pointing to higher locations on the disk, or vice-versa, incorrect
95; LVM-info was associated. Such a cross-linked PT is sometimes generated
96; by the LVM engine when creating or deleting multiple partitions at once.
97; Best is to intermediately save after creating or deleting a partition
98; with (Mini)LVM.
99; The new way is to search the LVM-entries for the partition requested.
100;
101; # Reworked MBR-code to provide two I13X signatures #
102; The normal LVM MBR-code uses a special setup to indicate Int13X capability.
103; It contains the instruction, MOV EAX,'X31I', and some software checks
104; for the presence of the 'I13X' string in the MBR.
105; However, the location of this instruction differs between eCS 1.x and
106; eCS 2.x LVM MBR-code.
107; For compatibility, the v1.0.8 MBR has the 'I13X' string at both locations.
108;
109; # Fixed booting older eCS installations on HPFS #
110; When restoring systems from archive or otherwise generated systems,
111; the HPFS BPB sometimes lacked information that AiR-BOOT did not fill in.
112; The result was that a wrong partition was booted or that booting
113; stalled with the "unable to operate harddisk" message.
114; This has been fixed.
115;
116; # Fixed booting Windows from a logical partition with loader on FAT32 #
117; Depending on the configuration, sometimes the NTLDR could not be found.
118; This has been fixed.
119;
120; # Fixed drive-letter feature which was broken in v1.07 #
121; a) v1.07 did remember the drive-letter feature was active for a partition,
122; but it failed to store the drive-letter because too few configuration
123; sectors were saved. This resulted in arbitrary values to be assigned
124; to the drive-letter for the partition.
125; b) The JFS PBR-code does not use the in-memory BPB but uses the one
126; that is on disk. This prevented AiR-BOOT from passing the user assigned
127; drive-letter. AiR-BOOT now inserts the drive-letter in the BPB on disk,
128; but only if the partition is JFS.
129; AB v1.06 is also unable to use the drive-letter feature on JFS.
130; As a convenience, a drive-letter in the dl-feature pop-up can now be set
131; to "Disabled" by pressing backspace.
132; (As opposed to arrowing up/down to get to the "Disabled" entry)
133;
134; # Fixed stuck phase1 indicator when wrong name entered #
135; When using SET(A)BOOT /4:NAME with the MEMDRIVE env-var set,
136; and NAME being a non-existing partition, the phase1 indicator
137; would stay stuck between reboots.
138; This has been fixed.
139;
140; # Fixed DOS installer (AIRBOOT.COM) #
141; Behavior should now be the same as the eCS and WIN installers.
142; This re-enables the use of a bootable floppy or usb-stick
143; to install AiR-BOOT.
144;
145; # Fixed booting from FloppyDrive #
146; This is actually also broken in v1.06 when Int13X is forced on.
147; Now regular BIOS calls are used when booting from floppydrive.
148; A fresh AiR-BOOT installation now includes the floppydrive menu entry.
149;
150; # Fixed chainloading IBM Boot Manager #
151; AiR-BOOT v1.06 could chainload IBM-BM but only when it resided on
152; the first disk and was located below the 1024 cylinder and forced Int13X
153; extensions were disabled.
154; AiR-BOOT v1.0.8 can now chainload IBM-BM with forced Int13X extensions
155; enabled (the default) and if IBM-BM resides above the 1024 cylinder limit.
156; Also, chainloading IBM-BM from the second disk is supported.
157; Do not use chainloading IBM-BM unless you really have a need to.
158; See the AiR-BOOT Manual for "gotcha's" when using both AiR-BOOT and IBM-BM.
159;
160; # Corrected contact links #
161; Version 1.07 still presented the old contact links to the sourceforge
162; repository and the original author.
163; This caused confusion with regard to issues with v1.07.
164; This has been corrected.
165;
166; NOTE:
167; AB v1.07 had a bug with saving and loading the correct size of the
168; configuration. This broke the drive-letter feature.
169; As a result, the CRC over the config was also calculated wrongly.
170; While AB v1.0.8 fixes this, it has to use the v1.07 way of CRC calculation.
171; Otherwise SET(A)BOOT from the eCS v2.1 would break on AB v1.0.8 because it
172; sees a corrupt AiR-BOOT configuration.
173; This means that the CRC over the AB config is calculated over 5 sectors
174; instead of 7, just like in v1.07.
175;
176; NOTE:
177; Because of space constraints most of the debug code has been commented
178; out in this version.
179; Possibly it will be re-enabled after code cleanup and changing to JWasm.
180;
181;
182; v1.07
183; -----
184; # Huge Drives and LVM #
185; When using disks >512GB under eComStation, the drive geometry changes to
186; 127 or 255 sectors per track. Since LVM-info is written at the last sector
187; of a track, and AiR-BOOT uses the geometry of the MBR, it cannot find the
188; LVM-info and the eCS partition / volume bootsector.
189; This has been fixed.
190; Now, when an eCS-partition is discovered and the drive is >512GB, AiR-BOOT
191; will use the eCS geometry to locate the LVM-info and the bootsector.
192;
193; # Special loader handling #
194; The special handling of partition boot-loaders has been enhanced to
195; enable booting of legacy systems on huge drives with or without OS/2
196; extended geometry.
197;
198; # eComStation boot-through after phase 1 #
199; Special functionality is implemented to directly boot a newly
200; installed eCS system after completing phase 1 of the installation.
201; This works in conjuntion with the OS/2 specific SET(A)BOOT.EXE program,
202; also part of the AiR-BOOT package.
203;
204; # Math, Debug, Conv and Aux modules #
205; These are used for 32-bit arithmatic on 16-bit code,
206; debug the booting process, converting between data-types
207; and outputting log-data to the com-port.
208;
209;
210; v1.06
211; -----
212; This is the last version developed by Martin Kiewitz.
213; It serves as the base for the versions above.
214; Please do not post your feedback on sourceforge or bother Martin with
215; regard to issues with the above versions.
216; Use the eCS bug-tracker or the Trac project-page at netlabs and see the
217; documentation of this newer versions for the relevant contact information.
218
Note: See TracBrowser for help on using the repository browser.