]> git.proxmox.com Git - mirror_edk2.git/commitdiff
DuetPkg BootSector: fix bugs in .S files so that 32-bit and 64-bit DUET can boot...
authorrsun3 <rsun3@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 13 Jan 2012 06:29:44 +0000 (06:29 +0000)
committerrsun3 <rsun3@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 13 Jan 2012 06:29:44 +0000 (06:29 +0000)
There is also a bug in bs32.asm/bs32.S that the space between the code and the 0xAA55 ending signature is not enough to hold the 2 debug strings. It is fixed by shortening the strings.

Signed-off-by: rsun3
Reviewed-by: niruiyu
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12930 6f19259b-4bc3-4df7-8a09-765794883524

DuetPkg/BootSector/Mbr.S
DuetPkg/BootSector/bin/bs32.com
DuetPkg/BootSector/bs32.S
DuetPkg/BootSector/bs32.asm
DuetPkg/BootSector/efi64.S
DuetPkg/BootSector/start32.S

index a1ebe06ca59a995dc49ad136e226a55e5edddc9d..65c97ea973c9f32a9173adf6390d4d8517df5c4f 100644 (file)
@@ -1,6 +1,6 @@
 #------------------------------------------------------------------------------\r
 #*\r
-#*   Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>\r
+#*   Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>\r
 #*   This program and the accompanying materials\r
 #*   are licensed and made available under the terms and conditions of the BSD License\r
 #*   which accompanies this distribution.  The full text of the license may be found at\r
@@ -54,7 +54,7 @@ _start:
         xorw  %ax, %ax                            # AX = 0x0000\r
         movw  $0x7c00, %bx                        # BX = 0x7C00\r
         movw  $0x600, %bp                         # BP = 0x0600\r
-        movw  RelocatedStart, %si                 # SI = Offset(RelocatedStart)\r
+        movw  $RelocatedStart, %si                # SI = Offset(RelocatedStart)\r
         movw  $0x200, %cx                         # CX = 0x0200\r
         subw  %si, %cx                            # CS = 0x0200 - Offset(RelocatedStart)\r
         leaw  (%bp,%si,), %di                     # DI = 0x0600 + Offset(RelocatedStart)\r
index 0255c82e890d4970c7a7ecdbc35fee416b3961ff..9cd368aaa92e5deb299d9ded24d40267cdc259a5 100644 (file)
Binary files a/DuetPkg/BootSector/bin/bs32.com and b/DuetPkg/BootSector/bin/bs32.com differ
index d768518e85c3a144a184f5a0045b224512f7cc65..95424f3d695fd59c9d706b582910150fac483e27 100644 (file)
@@ -1,6 +1,6 @@
 #------------------------------------------------------------------------------\r
 #*\r
-#*   Copyright (c) 2006 - 2007, Intel Corporation. All rights reserved.<BR>\r
+#*   Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>\r
 #*   This program and the accompanying materials                          \r
 #*   are licensed and made available under the terms and conditions of the BSD License         \r
 #*   which accompanies this distribution.  The full text of the license may be found at        \r
@@ -207,7 +207,7 @@ PrintString:
   movw %ax, %es\r
   movw $0x7c0, %ax\r
   movw %ax, %ds\r
-  movw $7, %cx\r
+  movw $6, %cx\r
   movw $160, %di\r
   rep\r
   movsw\r
@@ -288,15 +288,15 @@ Halt:
   jmp   Halt\r
 \r
 StartString: \r
-  .byte 'B', 0x0c, 'S', 0x0c, 't', 0x0c, 'a', 0x0c, 'r', 0x0c, 't', 0x0c, '!', 0x0c\r
+  .byte 'B', 0x0c, 'S', 0x0c, 't', 0x0c, 'a', 0x0c, 'r', 0x0c, 't', 0x0c\r
 ErrorString: \r
-  .byte 'B', 0x0c, 'E', 0x0c, 'r', 0x0c, 'r', 0x0c, 'o', 0x0c, 'r', 0x0c, '!', 0x0c\r
+  .byte 'B', 0x0c, 'E', 0x0c, 'r', 0x0c, 'r', 0x0c, 'o', 0x0c, 'r', 0x0c\r
 \r
 # ****************************************************************************\r
 # LBA Offset for BootSector, need patched by tool for HD boot.\r
 # ****************************************************************************\r
 \r
-  #.org 0x01fa\r
+  .org 0x01fa\r
 LBAOffsetForBootSector: \r
   .long     0x0\r
 \r
@@ -304,7 +304,7 @@ LBAOffsetForBootSector:
 # Sector Signature\r
 # ****************************************************************************\r
 \r
-  #.org 0x01fe\r
+  .org 0x01fe\r
 SectorSignature: \r
   .word     0xaa55      # Boot Sector Signature\r
 \r
index f26668982e8aab11e4a9ecd8e10da1c9f0fdc3db..d23ba071b2ddeed33eefcf8801513d83f2bd488f 100644 (file)
@@ -1,6 +1,6 @@
 ;------------------------------------------------------------------------------\r
 ;*\r
-;*   Copyright (c) 2006 - 2007, Intel Corporation. All rights reserved.<BR>\r
+;*   Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>\r
 ;*   This program and the accompanying materials                          \r
 ;*   are licensed and made available under the terms and conditions of the BSD License         \r
 ;*   which accompanies this distribution.  The full text of the license may be found at        \r
@@ -78,7 +78,7 @@ BootSectorEntryPoint:
 ; ****************************************************************************\r
 ; Start Print\r
 ; ****************************************************************************\r
-  lea  si, cs:[StartString]\r
+  mov  si, offset StartString\r
   call PrintString\r
 \r
 ; ****************************************************************************\r
@@ -206,7 +206,7 @@ PrintString:
   mov  es,ax\r
   mov  ax, 07c0h\r
   mov  ds, ax\r
-  mov  cx, 7\r
+  mov  cx, 6\r
   mov  di, 160\r
   rep  movsw\r
   ret\r
@@ -280,15 +280,15 @@ NotFoundAll:
   jne  FoundEFILDR\r
 BadBootSector:\r
 DiskError:\r
-  lea  si, cs:[ErrorString]\r
+  mov  si, offset ErrorString\r
   call PrintString\r
 Halt:\r
   jmp   Halt\r
 \r
 StartString:\r
-  db 'B', 0ch, 'S', 0ch, 't', 0ch, 'a', 0ch, 'r', 0ch, 't', 0ch, '!', 0ch\r
+  db 'B', 0ch, 'S', 0ch, 't', 0ch, 'a', 0ch, 'r', 0ch, 't', 0ch\r
 ErrorString:\r
-  db 'B', 0ch, 'E', 0ch, 'r', 0ch, 'r', 0ch, 'o', 0ch, 'r', 0ch, '!', 0ch\r
+  db 'B', 0ch, 'E', 0ch, 'r', 0ch, 'r', 0ch, 'o', 0ch, 'r', 0ch\r
 \r
 ; ****************************************************************************\r
 ; LBA Offset for BootSector, need patched by tool for HD boot.\r
index ec6ad89761ea4a50e20b983bff45b407f7565fe7..34bd7521b95a6794502bf2b3bc4de2eb94eab320 100644 (file)
@@ -59,15 +59,16 @@ Start:
     call    ClearScreen\r
 \r
     # Populate IDT with meaningful offsets for exception handlers...\r
-    sidt    Idtr \r
+    movl    $Idtr, %eax\r
+    sidt    (%eax)                      # get fword address of IDT\r
     \r
 \r
-    movl    Halt, %eax\r
+    movl    $Halt, %eax\r
     movl    %eax,%ebx                   # use bx to copy 15..0 to descriptors\r
     shrl    $16,%eax                    # use ax to copy 31..16 to descriptors \r
                                         # 63..32 of descriptors is 0\r
     movl    $0x78,%ecx                  # 78h IDT entries to initialize with unique entry points (exceptions)\r
-    movl    (Idtr + 2), %esi\r
+    movl    $(Idtr + 2), %esi\r
     movl    (%esi),%edi\r
 \r
 LOOP_1:                                         # loop through all IDT entries exception handlers and initialize to default handler\r
@@ -77,7 +78,7 @@ LOOP_1:                                         # loop through all IDT entries e
     movw    %ax, 6(%edi)                        # write bits 31..16 of offset\r
     movl    $0, 8(%edi)                         # write bits 31..16 of offset  \r
     addl    $16, %edi                           # move up to next descriptor\r
-    addw    DEFAULT_HANDLER_SIZE, %bx           # move to next entry point\r
+    addw    $DEFAULT_HANDLER_SIZE, %bx          # move to next entry point\r
     loopl   LOOP_1                              # loop back through again until all descriptors are initialized\r
 \r
     ## at this point edi contains the offset of the descriptor for INT 20\r
@@ -126,7 +127,7 @@ LOOP_1:                                         # loop through all IDT entries e
     movl    0x30(%ebp),%edi             # edi = [[22000 + [22014] + 3c] + 2c] = ImageBase (63..32 is zero, ignore)\r
     movl    0x28(%ebp),%eax             # eax = [[22000 + [22014] + 3c] + 24] = EntryPoint\r
     addl    %edi,%eax                   # eax = ImageBase + EntryPoint\r
-    movl    %ebx, EfiLdrOffset          \r
+    movl    $EfiLdrOffset, %ebx\r
     movl    %eax, (%ebx)                # Modify far jump instruction for correct entry point\r
 \r
     movw    6(%ebp), %bx                # bx = Number of sections\r
@@ -158,8 +159,8 @@ SectionLoop:
     cmpw    $0,%bx\r
     jne     SectionLoop\r
 \r
-    movl    (Idtr), %eax                  # get size of IDT\r
-    movzx   (%edx), %eax\r
+    movl    $Idtr, %edx                  # get size of IDT\r
+    movzxw  (%edx), %eax\r
     .byte 0xff\r
     .byte 0xc0\r
 #    inc     eax\r
@@ -968,7 +969,7 @@ commonIdtEntry:
 ##      \r
 \r
     call    ClearScreen\r
-    mov     String1, %esi \r
+    movl    $String1, %esi \r
     call    PrintString\r
     .byte 0x48\r
     movl    16*8(%ebp),%eax       ## move Int number into RAX \r
@@ -977,11 +978,11 @@ commonIdtEntry:
     ja      PrintDefaultString\r
 PrintExceptionString: \r
     shll    $3,%eax             ## multiply by 8 to get offset from StringTable to actual string address\r
-    addl    StringTable, %eax\r
+    addl    $StringTable, %eax\r
     movl    (%eax),%esi\r
     jmp     PrintTheString\r
 PrintDefaultString: \r
-    movl    IntUnknownString, %esi\r
+    movl    $IntUnknownString, %esi\r
     # patch Int number\r
     movl    %eax,%edx\r
     call    A2C\r
@@ -992,7 +993,7 @@ PrintDefaultString:
     movb    %al,(%esi)\r
 PrintTheString:        \r
     call    PrintString\r
-    movl    String2, %esi\r
+    movl    $String2, %esi\r
     call    PrintString\r
     .byte 0x48\r
     movl    19*8(%ebp),%eax    # CS\r
@@ -1003,24 +1004,24 @@ PrintTheString:
     .byte 0x48\r
     movl    18*8(%ebp),%eax    # RIP\r
     call    PrintQword\r
-    movl    String3, %esi\r
+    movl    $String3, %esi\r
     call    PrintString\r
 \r
     movl    $0xb8140,%edi\r
 \r
-    movl    StringRax, %esi\r
+    movl    $StringRax, %esi\r
     call    PrintString\r
     .byte 0x48\r
     movl    15*8(%ebp),%eax\r
     call    PrintQword\r
 \r
-    movl    StringRcx, %esi\r
+    movl    $StringRcx, %esi\r
     call    PrintString\r
     .byte 0x48\r
     movl    14*8(%ebp),%eax\r
     call    PrintQword\r
 \r
-    movl    StringRdx, %esi\r
+    movl    $StringRdx, %esi\r
     call    PrintString\r
     .byte 0x48\r
     movl    13*8(%ebp),%eax\r
@@ -1028,19 +1029,19 @@ PrintTheString:
 \r
     movl    $0xb81e0,%edi\r
 \r
-    movl    StringRbx, %esi\r
+    movl    $StringRbx, %esi\r
     call    PrintString\r
     .byte 0x48\r
     movl    12*8(%ebp),%eax\r
     call    PrintQword\r
 \r
-    movl    StringRsp, %esi\r
+    movl    $StringRsp, %esi\r
     call    PrintString\r
     .byte 0x48\r
     movl    21*8(%ebp),%eax\r
     call    PrintQword\r
 \r
-    movl    StringRbp, %esi\r
+    movl    $StringRbp, %esi\r
     call    PrintString\r
     .byte 0x48\r
     movl    10*8(%ebp),%eax\r
@@ -1048,19 +1049,19 @@ PrintTheString:
 \r
     movl    $0xb8280,%edi\r
 \r
-    movl    StringRsi, %esi\r
+    movl    $StringRsi, %esi\r
     call    PrintString\r
     .byte 0x48\r
     movl    9*8(%ebp),%eax\r
     call    PrintQword\r
 \r
-    movl    StringRdi, %esi\r
+    movl    $StringRdi, %esi\r
     call    PrintString\r
     .byte 0x48\r
     movl    8*8(%ebp),%eax\r
     call    PrintQword\r
 \r
-    movl    StringEcode, %esi\r
+    movl    $StringEcode, %esi\r
     call    PrintString\r
     .byte 0x48\r
     movl    17*8(%ebp),%eax\r
@@ -1068,19 +1069,19 @@ PrintTheString:
 \r
     movl    $0xb8320,%edi\r
 \r
-    movl    StringR8, %esi\r
+    movl    $StringR8, %esi\r
     call    PrintString\r
     .byte 0x48\r
     movl    7*8(%ebp),%eax\r
     call    PrintQword\r
 \r
-    movl    StringR9, %esi\r
+    movl    $StringR9, %esi\r
     call    PrintString\r
     .byte 0x48\r
     movl    6*8(%ebp),%eax\r
     call    PrintQword\r
 \r
-    movl    StringR10, %esi\r
+    movl    $StringR10, %esi\r
     call    PrintString\r
     .byte 0x48\r
     movl    5*8(%ebp),%eax\r
@@ -1088,19 +1089,19 @@ PrintTheString:
 \r
     movl    $0xb83c0,%edi\r
 \r
-    movl    StringR11, %esi\r
+    movl    $StringR11, %esi\r
     call    PrintString\r
     .byte 0x48\r
     movl    4*8(%ebp),%eax\r
     call    PrintQword\r
 \r
-    movl    StringR12, %esi\r
+    movl    $StringR12, %esi\r
     call    PrintString\r
     .byte 0x48\r
     movl    3*8(%ebp),%eax\r
     call    PrintQword\r
 \r
-    movl    StringR13, %esi\r
+    movl    $StringR13, %esi\r
     call    PrintString\r
     .byte 0x48\r
     movl    2*8(%ebp),%eax\r
@@ -1108,19 +1109,19 @@ PrintTheString:
 \r
     movl    $0xb8460,%edi\r
 \r
-    movl    StringR14, %esi\r
+    movl    $StringR14, %esi\r
     call    PrintString\r
     .byte 0x48\r
     movl    1*8(%ebp),%eax\r
     call    PrintQword\r
 \r
-    movl    StringR15, %esi\r
+    movl    $StringR15, %esi\r
     call    PrintString\r
     .byte 0x48\r
     movl    0*8(%ebp),%eax\r
     call    PrintQword\r
 \r
-    movl    StringSs, %esi\r
+    movl    $StringSs, %esi\r
     call    PrintString\r
     .byte 0x48\r
     movl    22*8(%ebp),%eax\r
@@ -1128,7 +1129,7 @@ PrintTheString:
 \r
     movl    $0xb8500,%edi\r
 \r
-    movl    StringRflags, %esi\r
+    movl    $StringRflags, %esi\r
     call    PrintString\r
     .byte 0x48\r
     movl    20*8(%ebp),%eax\r
@@ -1152,7 +1153,7 @@ InnerLoop:
     movl    (%esi),%eax\r
     call    PrintQword\r
     addl    $8,%esi\r
-    mov     $0x00, %al \r
+    movb    $0x20, %al       # blank character\r
     movb    %al,(%edi)\r
     addl    $2,%edi\r
     loop    InnerLoop\r
@@ -1183,7 +1184,7 @@ InnerLoop1:
     movl    (%esi),%eax\r
     call    PrintQword\r
     addl    $8,%esi\r
-    movb    $0x00, %al\r
+    movb    $0x20, %al     # blank character\r
     movb    %al,(%edi)\r
     addl    $2,%edi\r
     loop    InnerLoop1\r
@@ -1299,7 +1300,7 @@ ClearScreen:
     pushl   %eax\r
     pushl   %ecx\r
 \r
-    movb    $0x00, %al\r
+    movb    $0x20, %al       # blank character\r
     movb    $0xc,%ah\r
     movl    $0xb8000,%edi\r
     movl    $80*24,%ecx\r
@@ -1347,11 +1348,11 @@ Int18String:        .asciz      "12h Machine check -"
 Int19String:        .asciz      "13h SIMD Floating-Point Exception -"\r
 IntUnknownString:   .asciz      "??h Unknown interrupt -"\r
 \r
-StringTable:   .long  Int0String, Int1String, Int2String, Int3String,    \\r
-                      Int4String, Int5String, Int6String, Int7String,    \\r
-                      Int8String, Int9String, Int10String, Int11String,  \\r
-                      Int12String, Int13String, Int14String, Int15String,\\r
-                      Int16String, Int17String, Int18String, Int19String\r
+StringTable:   .long  Int0String, 0, Int1String, 0, Int2String, 0, Int3String, 0,  \\r
+                      Int4String, 0, Int5String, 0, Int6String, 0, Int7String, 0,  \\r
+                      Int8String, 0, Int9String, 0, Int10String, 0, Int11String, 0,  \\r
+                      Int12String, 0, Int13String, 0, Int14String, 0, Int15String, 0,  \\r
+                      Int16String, 0, Int17String, 0, Int18String, 0, Int19String, 0\r
 \r
 String2:           .asciz  " HALT!! *** ("\r
 String3:           .asciz  ")"\r
index 5296414f2eacfd3d8266c5d7db78064466fdf7a5..dc683f585b212246cd99a5feabc14e59daa9adf3 100644 (file)
@@ -1,6 +1,6 @@
 #------------------------------------------------------------------------------\r
 #*\r
-#*   Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>\r
+#*   Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>\r
 #*   This program and the accompanying materials                          \r
 #*   are licensed and made available under the terms and conditions of the BSD License         \r
 #*   which accompanies this distribution.  The full text of the license may be found at        \r
@@ -311,11 +311,11 @@ Halt:
 ErrorString: \r
         .byte 'S', 0x0c, 'E', 0x0c, 'r', 0x0c, 'r', 0x0c, 'o', 0x0c, 'r', 0x0c, '!', 0x0c\r
 \r
-        # .org     0x01fa  # Will cause build break\r
+        .org     0x01fa\r
 LBAOffsetForBootSector: \r
         .long   0x0\r
 \r
-        # .org    0x01fe   # Will cause build break\r
+        .org    0x01fe\r
         .word   0xaa55\r
 \r
 #******************************************************************************\r
@@ -328,7 +328,7 @@ LBAOffsetForBootSector:
 .equ                 WRITE_DATA_PORT_CMD, 0x0d1  # 8042 command to write the data port\r
 .equ                 ENABLE_A20_CMD, 0x0df       # 8042 command to enable A20\r
 \r
-# .org     0x200  # Will cause build break\r
+        .org    0x200\r
         jmp start\r
 Em64String: \r
         .byte 'E', 0x0c, 'm', 0x0c, '6', 0x0c, '4', 0x0c, 'T', 0x0c, ' ', 0x0c, 'U', 0x0c, 'n', 0x0c, 's', 0x0c, 'u', 0x0c, 'p', 0x0c, 'p', 0x0c, 'o', 0x0c, 'r', 0x0c, 't', 0x0c, 'e', 0x0c, 'd', 0x0c, '!', 0x0c\r