FROM.....Roger Smith
TO.......Jon Saxton 

 JS>Has anyone  implemented the dual boot facility as document in PC 
 JS>Journal a few months ago?  I did and it works BEAUTIFULLY except for 
 JS>one small problem which has me puzzled.  When MSDOS is allowed to boot 
 JS>from the hard disk I cannot read or write to floppy disks!
  
From PC Tech Journal Feb. 1989:

COMPAQ DUAL-BOOT PROBLEMS

As many readers have pointed out, the dual-boot procedure does not work
with Compaq's OS/2 Standard Edition 1.0.  Although the system works fine
when booted into OS/2, the diskette drives become inoperative in
DOS--every access results in general failure messages. 

The reason for this lies in Compaq's OS/2 boot record in a code sequence
near the beginning of the record.  In my copy of Compaq's OS/2, this
sequence begins at offset 56H of the boot record (156H when viewed with
DOS DEBUG or SYMDEB).  This location is not guaranteed, so identify the
code by content, not by address.  The sequence is similar to:

  PUSH DS
  XOR BX,BX
  MOV ES,BX
  MOV DI,7C2B
  LDS SI,ES:[0078]
  MOV CX,000B
  CLD
  REPZ
  MOVSB
  MOV Word Ptr ES:[0078],002B
  MOV ES:[007A],CS
  POP DS

The sequence of instructions copies the diskette parameters into the
boot record and repoints the INT 1EH vector to the new location. 
Subsequently, the boot code modifies certain parameter values to
facilitate diskette access when booting from a diskette. 

  So, what is this code doing in a hard-disk boot record? Instead of
creating an appropriate boot record for the hard disk, Compaq's OS/2
installation modifies a copy of the diskette boot code. 

When booting OS/2, the left-over code that repoints INT 1EH does no harm
because OS/2 ignores whatever it finds in that vector and repoints it to
a newly created diskette parameter table.  DOS, on the other hand,
establishes its parameter table by copying and modifying the original
one pointed to by the INT 1EH vector (the power-on procedure initializes
it to a table in ROM).  When DOS is started by the dual-boot process,
the vector points to a location that now contains the DOS boot code
instead of a parameter table.  As a result, DOS constructs a table of
invalid diskette parameters that causes the apparent drive failures. 

The solution is to disable the code sequence that repoints the INT 1EH
vector.  This must be done in the same boot record that looks for the
ASKSYS program.  At the location of the PUSH DS (most likely offset
156H, if you are using DEBUG), assemble a jump to the location after the
POP DS (offset 176H).  Complete the modification of the boot record by
inserting ASKSYS in place of IBMBIO or OS2LDR. 

Apply this patch with caution.  Do not blindly patch at a fixed
location, but make sure you thoroughly understand the purpose of the
code you are disabling.  In subsequent versions of OS/2, Compaq may move
this code, or, as it should have done in the first place, remove it
entirely. 

 * Origin: RSBBS/Oliver - Ft. Walton Beach, FL - 904-863-8408 (1:366/14)


