Move stack to below 0x7c00; leaving it at the default location
authorMichael Brown <mcb30@etherboot.org>
Thu, 28 Jun 2007 20:15:47 +0000 (21:15 +0100)
committerMichael Brown <mcb30@etherboot.org>
Thu, 28 Jun 2007 20:15:47 +0000 (21:15 +0100)
(0x7ef4) tends to really screw up anything that loads at 0x7c00...

src/arch/i386/prefix/dskprefix.S

index 9b1ebaa..2df00ae 100644 (file)
 
        jmp     $BOOTSEG, $go           /* reload cs:ip to match relocation addr */
 go: 
+       xorw    %ax,%ax                 /* put stack at 0000:7c00 */
+       movw    %ax,%ss
+       movw    $0x7c00,%sp
+
        movw    $0x2000-12, %di         /* 0x2000 is arbitrary value >= length */
                                        /* of bootsect + room for stack + 12 for */
                                        /* saved disk parm block */
@@ -38,8 +42,6 @@ go:
        movw    $BOOTSEG, %ax
        movw    %ax,%ds
        movw    %ax,%es
-       movw    %ax,%ss                 /* put stack at BOOTSEG:0x4000-12. */
-       movw    %di,%sp
 
 /* Many BIOS's default disk parameter tables will not recognize multi-sector
  * reads beyond the maximum sector number specified in the default diskette
@@ -50,7 +52,7 @@ go:
  * will set the maximum sector count to 36 - the most we will encounter on an
  * ED 2.88.  High doesn't hurt.        Low does.
  *
- * Segments are as follows: ds=es=ss=cs - BOOTSEG
+ * Segments are as follows: ds=es=cs - BOOTSEG
  */
 
        xorw    %cx,%cx