]> git.proxmox.com Git - mirror_edk2.git/blobdiff - DuetPkg/BootSector/efi32.asm
DuetPkg: Remove DuetPkg
[mirror_edk2.git] / DuetPkg / BootSector / efi32.asm
diff --git a/DuetPkg/BootSector/efi32.asm b/DuetPkg/BootSector/efi32.asm
deleted file mode 100644 (file)
index 7ccf86f..0000000
+++ /dev/null
@@ -1,582 +0,0 @@
-;------------------------------------------------------------------------------\r
-;*\r
-;*   Copyright (c) 2006 - 2011, 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
-;*   http://opensource.org/licenses/bsd-license.php                                            \r
-;*                                                                                             \r
-;*   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-;*   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
-;*   \r
-;*    efi32.asm\r
-;*  \r
-;*   Abstract:\r
-;*\r
-;------------------------------------------------------------------------------\r
-\r
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r
-; Now in 32-bit protected mode.\r
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r
-\r
-        .486\r
-        .model  flat        \r
-        .stack\r
-        .code\r
-        org 21000h\r
-        \r
-DEFAULT_HANDLER_SIZE EQU INT1 - INT0\r
-\r
-JmpCommonIdtEntry  macro\r
-    ; jmp     commonIdtEntry - this must be hand coded to keep the assembler from\r
-    ;                          using a 8 bit reletive jump when the entries are\r
-    ;                          within 255 bytes of the common entry.  This must\r
-    ;                          be done to maintain the consistency of the size\r
-    ;                          of entry points...\r
-    db      0e9h                        ; jmp 16 bit relative \r
-    dd      commonIdtEntry - $ - 4      ;  offset to jump to\r
-endm    \r
-\r
-        \r
-Start:  \r
-    mov     ax,bx                      ; flat data descriptor in BX\r
-    mov     ds,ax\r
-    mov     es,ax\r
-    mov     fs,ax\r
-    mov     gs,ax\r
-    mov     ss,ax\r
-    mov     esp,0001ffff0h\r
-\r
-    call    ClearScreen\r
-\r
-    ; Populate IDT with meaningful offsets for exception handlers...\r
-    sidt    fword ptr [Idtr]             ; get fword address of IDT\r
-\r
-    mov     eax, offset Halt\r
-    mov     ebx, eax                    ; use bx to copy 15..0 to descriptors\r
-    shr     eax, 16                     ; use ax to copy 31..16 to descriptors \r
-    mov     ecx, 78h                    ; 78h IDT entries to initialize with unique entry points (exceptions)\r
-    mov     esi, [offset Idtr + 2]\r
-    mov     edi, [esi]\r
-    \r
-@@:                                             ; loop through all IDT entries exception handlers and initialize to default handler\r
-    mov     word ptr [edi], bx                  ; write bits 15..0 of offset\r
-    mov     word ptr [edi+2], 20h               ; SYS_CODE_SEL from GDT\r
-    mov     word ptr [edi+4], 0e00h OR 8000h    ; type = 386 interrupt gate, present\r
-    mov     word ptr [edi+6], ax                ; write bits 31..16 of offset\r
-    add     edi, 8                              ; move up to next descriptor\r
-    add     bx, DEFAULT_HANDLER_SIZE            ; move to next entry point\r
-    loop    @b                                  ; 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
-    ;; and bx contains the low 16 bits of the offset of the default handler\r
-    ;; so initialize all the rest of the descriptors with these two values...\r
-;    mov     ecx, 101                            ; there are 100 descriptors left (INT 20 (14h) - INT 119 (77h)\r
-;@@:                                             ; loop through all IDT entries exception handlers and initialize to default handler\r
-;    mov     word ptr [edi], bx                  ; write bits 15..0 of offset\r
-;    mov     word ptr [edi+2], 20h               ; SYS_CODE_SEL from GDT\r
-;    mov     word ptr [edi+4], 0e00h OR 8000h    ; type = 386 interrupt gate, present\r
-;    mov     word ptr [edi+6], ax                ; write bits 31..16 of offset\r
-;    add     edi, 8                              ; move up to next descriptor\r
-;    loop    @b                                  ; loop back through again until all descriptors are initialized\r
-    \r
-    \r
-;;  DUMP    location of IDT and several of the descriptors\r
-;    mov     ecx, 8\r
-;    mov     eax, [offset Idtr + 2]\r
-;    mov     eax, [eax]\r
-;    mov     edi, 0b8000h\r
-;    call    PrintDword\r
-;    mov     esi, eax\r
-;    mov     edi, 0b80a0h\r
-;    jmp     OuterLoop\r
-    \r
-;;    \r
-;; just for fun, let's do a software interrupt to see if we correctly land in the exception handler...\r
-;    mov     eax, 011111111h\r
-;    mov     ebx, 022222222h\r
-;    mov     ecx, 033333333h\r
-;    mov     edx, 044444444h\r
-;    mov     ebp, 055555555h\r
-;    mov     esi, 066666666h\r
-;    mov     edi, 077777777h\r
-;    push    011111111h\r
-;    push    022222222h\r
-;    push    033333333h\r
-;    int     119\r
-\r
-    \r
-    mov     esi,022000h                 ; esi = 22000\r
-    mov     eax,[esi+014h]              ; eax = [22014]\r
-    add     esi,eax                     ; esi = 22000 + [22014] = Base of EFILDR.C\r
-    mov     ebp,[esi+03ch]              ; ebp = [22000 + [22014] + 3c] = NT Image Header for EFILDR.C\r
-    add     ebp,esi\r
-    mov     edi,[ebp+034h]              ; edi = [[22000 + [22014] + 3c] + 30] = ImageBase\r
-    mov     eax,[ebp+028h]              ; eax = [[22000 + [22014] + 3c] + 24] = EntryPoint\r
-    add     eax,edi                     ; eax = ImageBase + EntryPoint\r
-    mov     dword ptr [EfiLdrOffset],eax   ; Modify far jump instruction for correct entry point\r
-\r
-    mov     bx,word ptr[ebp+6]          ; bx = Number of sections\r
-    xor     eax,eax\r
-    mov     ax,word ptr[ebp+014h]       ; ax = Optional Header Size\r
-    add     ebp,eax\r
-    add     ebp,018h                    ; ebp = Start of 1st Section\r
-\r
-SectionLoop:\r
-    push    esi                         ; Save Base of EFILDR.C\r
-    push    edi                         ; Save ImageBase\r
-    add     esi,[ebp+014h]              ; esi = Base of EFILDR.C + PointerToRawData\r
-    add     edi,[ebp+00ch]              ; edi = ImageBase + VirtualAddress\r
-    mov     ecx,[ebp+010h]              ; ecs = SizeOfRawData\r
-\r
-    cld\r
-    shr     ecx,2\r
-    rep     movsd\r
-\r
-    pop     edi                         ; Restore ImageBase\r
-    pop     esi                         ; Restore Base of EFILDR.C\r
-\r
-    add     bp,028h                     ; ebp = ebp + 028h = Pointer to next section record\r
-    dec     bx\r
-    cmp     bx,0\r
-    jne     SectionLoop\r
-\r
-    movzx   eax, word ptr [Idtr]         ; get size of IDT\r
-    inc     eax\r
-    add     eax, dword ptr [Idtr + 2]    ; add to base of IDT to get location of memory map...\r
-    push    eax                         ; push memory map location on stack for call to EFILDR...\r
-\r
-    push    eax                         ; push return address (useless, just for stack balance)\r
-    db      0b8h\r
-EfiLdrOffset:\r
-    dd      000401000h                  ; Offset of EFILDR\r
-; mov eax, 401000h\r
-    push    eax\r
-    ret\r
-\r
-;    db      "**** DEFAULT IDT ENTRY ***",0\r
-    align 02h\r
-Halt:\r
-INT0:\r
-    push    0h      ; push error code place holder on the stack\r
-    push    0h\r
-    JmpCommonIdtEntry\r
-;    db      0e9h                        ; jmp 16 bit reletive \r
-;    dd      commonIdtEntry - $ - 4      ;  offset to jump to\r
-    \r
-INT1:\r
-    push    0h      ; push error code place holder on the stack\r
-    push    1h\r
-    JmpCommonIdtEntry\r
-    \r
-INT2:\r
-    push    0h      ; push error code place holder on the stack\r
-    push    2h\r
-    JmpCommonIdtEntry\r
-    \r
-INT3:\r
-    push    0h      ; push error code place holder on the stack\r
-    push    3h\r
-    JmpCommonIdtEntry\r
-    \r
-INT4:\r
-    push    0h      ; push error code place holder on the stack\r
-    push    4h\r
-    JmpCommonIdtEntry\r
-    \r
-INT5:\r
-    push    0h      ; push error code place holder on the stack\r
-    push    5h\r
-    JmpCommonIdtEntry\r
-    \r
-INT6:\r
-    push    0h      ; push error code place holder on the stack\r
-    push    6h\r
-    JmpCommonIdtEntry\r
-    \r
-INT7:\r
-    push    0h      ; push error code place holder on the stack\r
-    push    7h\r
-    JmpCommonIdtEntry\r
-    \r
-INT8:\r
-;   Double fault causes an error code to be pushed so no phony push necessary\r
-    nop\r
-    nop\r
-    push    8h\r
-    JmpCommonIdtEntry\r
-    \r
-INT9:\r
-    push    0h      ; push error code place holder on the stack\r
-    push    9h\r
-    JmpCommonIdtEntry\r
-    \r
-INT10:\r
-;   Invalid TSS causes an error code to be pushed so no phony push necessary\r
-    nop\r
-    nop\r
-    push    10\r
-    JmpCommonIdtEntry\r
-    \r
-INT11:\r
-;   Segment Not Present causes an error code to be pushed so no phony push necessary\r
-    nop\r
-    nop\r
-    push    11\r
-    JmpCommonIdtEntry\r
-    \r
-INT12:\r
-;   Stack fault causes an error code to be pushed so no phony push necessary\r
-    nop\r
-    nop\r
-    push    12\r
-    JmpCommonIdtEntry\r
-    \r
-INT13:\r
-;   GP fault causes an error code to be pushed so no phony push necessary\r
-    nop\r
-    nop\r
-    push    13\r
-    JmpCommonIdtEntry\r
-    \r
-INT14:\r
-;   Page fault causes an error code to be pushed so no phony push necessary\r
-    nop\r
-    nop\r
-    push    14\r
-    JmpCommonIdtEntry\r
-    \r
-INT15:\r
-    push    0h      ; push error code place holder on the stack\r
-    push    15\r
-    JmpCommonIdtEntry\r
-    \r
-INT16:\r
-    push    0h      ; push error code place holder on the stack\r
-    push    16\r
-    JmpCommonIdtEntry\r
-    \r
-INT17:\r
-;   Alignment check causes an error code to be pushed so no phony push necessary\r
-    nop\r
-    nop\r
-    push    17\r
-    JmpCommonIdtEntry\r
-    \r
-INT18:\r
-    push    0h      ; push error code place holder on the stack\r
-    push    18\r
-    JmpCommonIdtEntry\r
-    \r
-INT19:\r
-    push    0h      ; push error code place holder on the stack\r
-    push    19\r
-    JmpCommonIdtEntry\r
-\r
-INTUnknown:\r
-REPEAT  (78h - 20)\r
-    push    0h      ; push error code place holder on the stack\r
-;    push    xxh     ; push vector number\r
-    db      06ah\r
-    db      ( $ - INTUnknown - 3 ) / 9 + 20 ; vector number\r
-    JmpCommonIdtEntry\r
-ENDM\r
-\r
-commonIdtEntry:\r
-    pushad\r
-    mov     ebp, esp\r
-;;\r
-;;  At this point the stack looks like this:\r
-;;\r
-;;      eflags\r
-;;      Calling CS\r
-;;      Calling EIP\r
-;;      Error code or 0\r
-;;      Int num or 0ffh for unknown int num\r
-;;      eax\r
-;;      ecx\r
-;;      edx\r
-;;      ebx\r
-;;      esp\r
-;;      ebp\r
-;;      esi\r
-;;      edi <------- ESP, EBP\r
-;;      \r
-\r
-    call    ClearScreen\r
-    mov     esi, offset String1\r
-    call    PrintString\r
-    mov     eax, [ebp + 32]     ;; move Int number into EAX \r
-    cmp     eax, 19\r
-    ja      PrintDefaultString\r
-PrintExceptionString:\r
-    shl     eax, 2              ;; multiply by 4 to get offset from StringTable to actual string address\r
-    add     eax, offset StringTable\r
-    mov     esi, [eax]\r
-    jmp     PrintTheString\r
-PrintDefaultString:\r
-    mov     esi, offset IntUnknownString\r
-    ; patch Int number\r
-    mov     edx, eax\r
-    call    A2C\r
-    mov     [esi + 1], al\r
-    mov     eax, edx\r
-    shr     eax, 4\r
-    call    A2C\r
-    mov     [esi], al\r
-PrintTheString:        \r
-    call    PrintString\r
-    mov     esi, offset String2\r
-    call    PrintString\r
-    mov     eax, [ebp+44]          ; CS\r
-    call    PrintDword\r
-    mov     al, ':'\r
-    mov     byte ptr [edi], al\r
-    add     edi, 2\r
-    mov     eax, [ebp+40]          ; EIP\r
-    call    PrintDword\r
-    mov     esi, offset String3\r
-    call    PrintString\r
-    \r
-    mov     edi, 0b8140h\r
-    \r
-    mov     esi, offset StringEax     ; eax\r
-    call    PrintString\r
-    mov     eax, [ebp+28]\r
-    call    PrintDword\r
-    \r
-    mov     esi, offset StringEbx     ; ebx\r
-    call    PrintString\r
-    mov     eax, [ebp+16]\r
-    call    PrintDword\r
-    \r
-    mov     esi, offset StringEcx     ; ecx\r
-    call    PrintString\r
-    mov     eax, [ebp+24]\r
-    call    PrintDword\r
-    \r
-    mov     esi, offset StringEdx     ; edx\r
-    call    PrintString\r
-    mov     eax, [ebp+20]\r
-    call    PrintDword\r
-    \r
-    mov     esi, offset StringEcode   ; error code\r
-    call    PrintString\r
-    mov     eax, [ebp+36]\r
-    call    PrintDword\r
-    \r
-    mov     edi, 0b81e0h\r
-    \r
-    mov     esi, offset StringEsp     ; esp\r
-    call    PrintString\r
-    mov     eax, [ebp+12]\r
-    call    PrintDword\r
-    \r
-    mov     esi, offset StringEbp     ; ebp\r
-    call    PrintString\r
-    mov     eax, [ebp+8]\r
-    call    PrintDword\r
-    \r
-    mov     esi, offset StringEsi     ; esi\r
-    call    PrintString\r
-    mov     eax, [ebp+4]\r
-    call    PrintDword\r
-    \r
-    mov     esi, offset StringEdi    ; edi\r
-    call    PrintString\r
-    mov     eax, [ebp]\r
-    call    PrintDword\r
-    \r
-    mov     esi, offset StringEflags ; eflags\r
-    call    PrintString\r
-    mov     eax, [ebp+48]\r
-    call    PrintDword\r
-    \r
-    mov     edi, 0b8320h\r
-\r
-    mov     esi, ebp\r
-    add     esi, 52\r
-    mov     ecx, 8\r
-\r
-    \r
-OuterLoop:\r
-    push    ecx\r
-    mov     ecx, 8\r
-    mov     edx, edi\r
-\r
-InnerLoop:\r
-    mov     eax, [esi]\r
-    call    PrintDword\r
-    add     esi, 4\r
-    mov     al, ' '\r
-    mov     [edi], al\r
-    add     edi, 2\r
-    loop    InnerLoop\r
-\r
-    pop     ecx\r
-    add     edx, 0a0h\r
-    mov     edi, edx\r
-    loop    OuterLoop\r
-\r
-\r
-    mov     edi, 0b8960h\r
-\r
-    mov     eax, [ebp+40]  ; EIP\r
-    sub     eax, 32 * 4\r
-    mov     esi, eax        ; esi = eip - 32 DWORD linear (total 64 DWORD)\r
-\r
-    mov     ecx, 8\r
-    \r
-OuterLoop1:\r
-    push    ecx\r
-    mov     ecx, 8\r
-    mov     edx, edi\r
-\r
-InnerLoop1:\r
-    mov     eax, [esi]\r
-    call    PrintDword\r
-    add     esi, 4\r
-    mov     al, ' '\r
-    mov     [edi], al\r
-    add     edi, 2\r
-    loop    InnerLoop1\r
-\r
-    pop     ecx\r
-    add     edx, 0a0h\r
-    mov     edi, edx\r
-    loop    OuterLoop1\r
-\r
-\r
-\r
-;    wbinvd ; Ken: this intruction does not support in early than 486 arch\r
-@@:    \r
-    jmp     @b\r
-;\r
-; return\r
-;\r
-    mov     esp, ebp\r
-    popad\r
-    add     esp, 8 ; error code and INT number\r
-    \r
-    iretd\r
-\r
-\r
-PrintString:\r
-    push    eax\r
-@@:\r
-    mov     al, byte ptr [esi]\r
-    cmp     al, 0\r
-    je      @f\r
-    mov     byte ptr [edi], al\r
-    inc     esi\r
-    add     edi, 2\r
-    jmp     @b\r
-@@:\r
-    pop     eax\r
-    ret\r
-        \r
-;; EAX contains dword to print\r
-;; EDI contains memory location (screen location) to print it to\r
-PrintDword:\r
-    push    ecx\r
-    push    ebx\r
-    push    eax\r
-    \r
-    mov     ecx, 8\r
-looptop:\r
-    rol     eax, 4\r
-    mov     bl, al\r
-    and     bl, 0fh\r
-    add     bl, '0'\r
-    cmp     bl, '9'\r
-    jle     @f\r
-    add     bl, 7\r
-@@:\r
-    mov     byte ptr [edi], bl\r
-    add     edi, 2\r
-    loop    looptop\r
-    ;wbinvd\r
-    \r
-    pop     eax\r
-    pop     ebx\r
-    pop     ecx\r
-    ret\r
-\r
-ClearScreen:\r
-    push    eax\r
-    push    ecx\r
-    \r
-    mov     al, ' '\r
-    mov     ah, 0ch\r
-    mov     edi, 0b8000h\r
-    mov     ecx, 80 * 24\r
-@@:\r
-    mov     word ptr [edi], ax\r
-    add     edi, 2\r
-    loop    @b\r
-    mov     edi, 0b8000h\r
-    \r
-    pop     ecx\r
-    pop     eax\r
-\r
-    ret                \r
-        \r
-A2C:\r
-    and     al, 0fh\r
-    add     al, '0'\r
-    cmp     al, '9'\r
-    jle     @f\r
-    add     al, 7\r
-@@:\r
-    ret\r
-        \r
-String1           db  "*** INT ",0\r
-\r
-Int0String        db  "00h Divide by 0 -",0\r
-Int1String        db  "01h Debug exception -",0\r
-Int2String        db  "02h NMI -",0\r
-Int3String        db  "03h Breakpoint -",0\r
-Int4String        db  "04h Overflow -",0\r
-Int5String        db  "05h Bound -",0\r
-Int6String        db  "06h Invalid opcode -",0\r
-Int7String        db  "07h Device not available -",0\r
-Int8String        db  "08h Double fault -",0\r
-Int9String        db  "09h Coprocessor seg overrun (reserved) -",0\r
-Int10String       db  "0Ah Invalid TSS -",0\r
-Int11String       db  "0Bh Segment not present -",0\r
-Int12String       db  "0Ch Stack fault -",0\r
-Int13String       db  "0Dh General protection fault -",0\r
-Int14String       db  "0Eh Page fault -",0\r
-Int15String       db  "0Fh (Intel reserved) -",0\r
-Int16String       db  "10h Floating point error -",0\r
-Int17String       db  "11h Alignment check -",0\r
-Int18String       db  "12h Machine check -",0\r
-Int19String       db  "13h SIMD Floating-Point Exception -",0\r
-IntUnknownString  db  "??h Unknown interrupt -",0\r
-\r
-StringTable       dd  offset Int0String, offset Int1String, offset Int2String, offset Int3String, \r
-                      offset Int4String, offset Int5String, offset Int6String, offset Int7String,\r
-                      offset Int8String, offset Int9String, offset Int10String, offset Int11String,\r
-                      offset Int12String, offset Int13String, offset Int14String, offset Int15String,\r
-                      offset Int16String, offset Int17String, offset Int18String, offset Int19String\r
-\r
-String2           db  " HALT!! *** (",0\r
-String3           db  ")",0\r
-StringEax         db  "EAX=",0\r
-StringEbx         db  " EBX=",0\r
-StringEcx         db  " ECX=",0\r
-StringEdx         db  " EDX=",0\r
-StringEcode       db  " ECODE=",0\r
-StringEsp         db  "ESP=",0\r
-StringEbp         db  " EBP=",0\r
-StringEsi         db  " ESI=",0\r
-StringEdi         db  " EDI=",0\r
-StringEflags      db  " EFLAGS=",0\r
-\r
-Idtr        df  0\r
-\r
-    org 21ffeh\r
-BlockSignature:\r
-    dw      0aa55h\r
-    \r
-    end\r