summaryrefslogtreecommitdiff
path: root/DuetPkg/BootSector/efi64.S
diff options
context:
space:
mode:
authorShenglei Zhang <shenglei.zhang@intel.com>2018-11-30 10:30:38 +0800
committerRuiyu Ni <ruiyu.ni@intel.com>2018-12-06 14:31:25 +0800
commit9fb5c5c4a33248764b24cb710b56d6c32ce237b4 (patch)
tree4d41c35c69ad7f18e6f0d62228672d2f8931e897 /DuetPkg/BootSector/efi64.S
parent8efc6d84ca41e692cc60702e1f27276f7883b6db (diff)
downloadedk2-9fb5c5c4a33248764b24cb710b56d6c32ce237b4.zip
edk2-9fb5c5c4a33248764b24cb710b56d6c32ce237b4.tar.gz
edk2-9fb5c5c4a33248764b24cb710b56d6c32ce237b4.tar.bz2
DuetPkg: Remove DuetPkg
DuetPkg depends on Legacy BIOS to provide a UEFI environment. It was invented in the era when UEFI environment is hard to find. Since now UEFI is very popular in PC area, we could stop the official support of this package and remove it from the master. https://bugzilla.tianocore.org/show_bug.cgi?id=1322 Cc: Ruiyu Ni <ruiyu.ni@intel.com> Cc: Hao Wu <hao.a.wu@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Shenglei Zhang <shenglei.zhang@intel.com> Reviewed-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
Diffstat (limited to 'DuetPkg/BootSector/efi64.S')
-rw-r--r--DuetPkg/BootSector/efi64.S1385
1 files changed, 0 insertions, 1385 deletions
diff --git a/DuetPkg/BootSector/efi64.S b/DuetPkg/BootSector/efi64.S
deleted file mode 100644
index 34bd752..0000000
--- a/DuetPkg/BootSector/efi64.S
+++ /dev/null
@@ -1,1385 +0,0 @@
-#------------------------------------------------------------------------------
-#*
-#* Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
-#* This program and the accompanying materials
-#* are licensed and made available under the terms and conditions of the BSD License
-#* which accompanies this distribution. The full text of the license may be found at
-#* http://opensource.org/licenses/bsd-license.php
-#*
-#* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#*
-#* efi64.asm
-#*
-#* Abstract:
-#*
-#------------------------------------------------------------------------------
-
-##############################################################################
-# Now in 64-bit long mode.
-##############################################################################
-
- .486:
- .stack:
- .code:
- .org 0x21000
-
-.global _start
-_start:
-
-.equ DEFAULT_HANDLER_SIZE, INT1 - INT0
-
-.macro jmpCommonIdtEntry
- # jmp commonIdtEntry - this must be hand coded to keep the assembler from
- # using a 8 bit reletive jump when the entries are
- # within 255 bytes of the common entry. This must
- # be done to maintain the consistency of the size
- # of entry points...
- .byte 0xe9 # jmp 16 bit relative
- .long commonIdtEntry - . - 4 # offset to jump to
-.endm
-
-
-Start:
-
- movl $0x001fffe8,%esp # make final stack aligned
-
- # set OSFXSR and OSXMMEXCPT because some code will use XMM register
- .byte 0xf
- .byte 0x20
- .byte 0xe0
-# mov rax, cr4
- btsl $9,%eax
- btsl $0xa,%eax
- .byte 0xf
- .byte 0x22
- .byte 0xe0
-# mov cr4, rax
-
- call ClearScreen
-
- # Populate IDT with meaningful offsets for exception handlers...
- movl $Idtr, %eax
- sidt (%eax) # get fword address of IDT
-
-
- movl $Halt, %eax
- movl %eax,%ebx # use bx to copy 15..0 to descriptors
- shrl $16,%eax # use ax to copy 31..16 to descriptors
- # 63..32 of descriptors is 0
- movl $0x78,%ecx # 78h IDT entries to initialize with unique entry points (exceptions)
- movl $(Idtr + 2), %esi
- movl (%esi),%edi
-
-LOOP_1: # loop through all IDT entries exception handlers and initialize to default handler
- movw %bx, (%edi) # write bits 15..0 of offset
- movw $0x38, 2(%edi) # SYS_CODE_SEL64 from GDT
- movw $(0x0e00 | 0x8000), 4(%edi) # type = 386 interrupt gate, present
- movw %ax, 6(%edi) # write bits 31..16 of offset
- movl $0, 8(%edi) # write bits 31..16 of offset
- addl $16, %edi # move up to next descriptor
- addw $DEFAULT_HANDLER_SIZE, %bx # move to next entry point
- loopl LOOP_1 # loop back through again until all descriptors are initialized
-
- ## at this point edi contains the offset of the descriptor for INT 20
- ## and bx contains the low 16 bits of the offset of the default handler
- ## so initialize all the rest of the descriptors with these two values...
-# mov ecx, 101 ; there are 100 descriptors left (INT 20 (14h) - INT 119 (77h)
-#@@: ; loop through all IDT entries exception handlers and initialize to default handler
-# mov word ptr [edi], bx ; write bits 15..0 of offset
-# mov word ptr [edi+2], 38h ; SYS_CODE64_SEL from GDT
-# mov word ptr [edi+4], 0e00h OR 8000h ; type = 386 interrupt gate, present
-# mov word ptr [edi+6], ax ; write bits 31..16 of offset
-# mov dword ptr [edi+8], 0 ; write bits 63..32 of offset
-# add edi, 16 ; move up to next descriptor
-# loop @b ; loop back through again until all descriptors are initialized
-
-
-## DUMP location of IDT and several of the descriptors
-# mov ecx, 8
-# mov eax, [offset Idtr + 2]
-# mov eax, [eax]
-# mov edi, 0b8000h
-# call PrintQword
-# mov esi, eax
-# mov edi, 0b80a0h
-# jmp OuterLoop
-
-##
-## just for fun, let's do a software interrupt to see if we correctly land in the exception handler...
-# mov eax, 011111111h
-# mov ebx, 022222222h
-# mov ecx, 033333333h
-# mov edx, 044444444h
-# mov ebp, 055555555h
-# mov esi, 066666666h
-# mov edi, 077777777h
-# push 011111111h
-# push 022222222h
-# push 033333333h
-# int 119
-
- movl $0x22000,%esi # esi = 22000
- movl 0x14(%esi),%eax # eax = [22014]
- addl %eax,%esi # esi = 22000 + [22014] = Base of EFILDR.C
- movl 0x3c(%esi),%ebp # ebp = [22000 + [22014] + 3c] = NT Image Header for EFILDR.C
- addl %esi,%ebp
- movl 0x30(%ebp),%edi # edi = [[22000 + [22014] + 3c] + 2c] = ImageBase (63..32 is zero, ignore)
- movl 0x28(%ebp),%eax # eax = [[22000 + [22014] + 3c] + 24] = EntryPoint
- addl %edi,%eax # eax = ImageBase + EntryPoint
- movl $EfiLdrOffset, %ebx
- movl %eax, (%ebx) # Modify far jump instruction for correct entry point
-
- movw 6(%ebp), %bx # bx = Number of sections
- xorl %eax,%eax
- movw 0x14(%ebp), %ax # ax = Optional Header Size
- addl %eax,%ebp
- addl $0x18,%ebp # ebp = Start of 1st Section
-
-SectionLoop:
- pushl %esi # Save Base of EFILDR.C
- pushl %edi # Save ImageBase
- addl 0x14(%ebp),%esi # esi = Base of EFILDR.C + PointerToRawData
- addl 0x0c(%ebp),%edi # edi = ImageBase + VirtualAddress
- movl 0x10(%ebp),%ecx # ecs = SizeOfRawData
-
- cld
- shrl $2,%ecx
- rep
- movsl
-
- popl %edi # Restore ImageBase
- popl %esi # Restore Base of EFILDR.C
-
- addw $0x28,%bp # ebp = ebp + 028h = Pointer to next section record
- .byte 0x66
- .byte 0xff
- .byte 0xcb
-# dec bx
- cmpw $0,%bx
- jne SectionLoop
-
- movl $Idtr, %edx # get size of IDT
- movzxw (%edx), %eax
- .byte 0xff
- .byte 0xc0
-# inc eax
- addl 2(%edx), %eax # add to base of IDT to get location of memory map...
- xorl %ecx,%ecx
- movl %eax,%ecx # put argument to RCX
-
- .byte 0x48
- .byte 0xc7
- .byte 0xc0
-EfiLdrOffset:
- .long 0x00401000 # Offset of EFILDR
-# mov rax, 401000h
- .byte 0x50
-# push rax
-
-# ret
- .byte 0xc3
-
-# db "**** DEFAULT IDT ENTRY ***",0
- .p2align 1
-Halt:
-INT0:
- pushl $0x0 # push error code place holder on the stack
- pushl $0x0
- jmpCommonIdtEntry
-# db 0e9h ; jmp 16 bit reletive
-# dd commonIdtEntry - $ - 4 ; offset to jump to
-
-INT1:
- pushl $0x0 # push error code place holder on the stack
- pushl $0x1
- jmpCommonIdtEntry
-
-INT2:
- pushl $0x0 # push error code place holder on the stack
- pushl $0x2
- jmpCommonIdtEntry
-
-INT3:
- pushl $0x0 # push error code place holder on the stack
- pushl $0x3
- jmpCommonIdtEntry
-
-INT4:
- pushl $0x0 # push error code place holder on the stack
- pushl $0x4
- jmpCommonIdtEntry
-
-INT5:
- pushl $0x0 # push error code place holder on the stack
- pushl $0x5
- jmpCommonIdtEntry
-
-INT6:
- pushl $0x0 # push error code place holder on the stack
- pushl $0x6
- jmpCommonIdtEntry
-
-INT7:
- pushl $0x0 # push error code place holder on the stack
- pushl $0x7
- jmpCommonIdtEntry
-
-INT8:
-# Double fault causes an error code to be pushed so no phony push necessary
- nop
- nop
- pushl $0x8
- jmpCommonIdtEntry
-
-INT9:
- pushl $0x0 # push error code place holder on the stack
- pushl $0x9
- jmpCommonIdtEntry
-
-INT10:
-# Invalid TSS causes an error code to be pushed so no phony push necessary
- nop
- nop
- pushl $10
- jmpCommonIdtEntry
-
-INT11:
-# Segment Not Present causes an error code to be pushed so no phony push necessary
- nop
- nop
- pushl $11
- jmpCommonIdtEntry
-
-INT12:
-# Stack fault causes an error code to be pushed so no phony push necessary
- nop
- nop
- pushl $12
- jmpCommonIdtEntry
-
-INT13:
-# GP fault causes an error code to be pushed so no phony push necessary
- nop
- nop
- pushl $13
- jmpCommonIdtEntry
-
-INT14:
-# Page fault causes an error code to be pushed so no phony push necessary
- nop
- nop
- pushl $14
- jmpCommonIdtEntry
-
-INT15:
- pushl $0x0 # push error code place holder on the stack
- pushl $15
- jmpCommonIdtEntry
-
-INT16:
- pushl $0x0 # push error code place holder on the stack
- pushl $16
- jmpCommonIdtEntry
-
-INT17:
-# Alignment check causes an error code to be pushed so no phony push necessary
- nop
- nop
- pushl $17
- jmpCommonIdtEntry
-
-INT18:
- pushl $0x0 # push error code place holder on the stack
- pushl $18
- jmpCommonIdtEntry
-
-INT19:
- pushl $0x0 # push error code place holder on the stack
- pushl $19
- jmpCommonIdtEntry
-
-INTUnknown:
-# The following segment repeats (0x78 - 20) times:
-# No. 1
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 2
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 3
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 4
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 5
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 6
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 7
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 8
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 9
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 10
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 11
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 12
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 13
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 14
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 15
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 16
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 17
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 18
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 19
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 20
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 21
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 22
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 23
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 24
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 25
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 26
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 27
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 28
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 29
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 30
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 31
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 32
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 33
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 34
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 35
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 36
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 37
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 38
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 39
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 40
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 41
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 42
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 43
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 44
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 45
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 46
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 47
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 48
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 49
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 50
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 51
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 52
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 53
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 54
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 55
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 56
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 57
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 58
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 59
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 60
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 61
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 62
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 63
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 64
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 65
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 66
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 67
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 68
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 69
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 70
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 71
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 72
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 73
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 74
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 75
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 76
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 77
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 78
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 79
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 80
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 81
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 82
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 83
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 84
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 85
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 86
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 87
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 88
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 89
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 90
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 91
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 92
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 93
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 94
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 95
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 96
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 97
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 98
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 99
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-# No. 100
- pushl $0x0 # push error code place holder on the stack
-# push xxh ; push vector number
- .byte 0x6a
- .byte ( . - INTUnknown - 3 ) / 9 + 20 # vector number
- jmpCommonIdtEntry
-
-
-commonIdtEntry:
- pushl %eax
- pushl %ecx
- pushl %edx
- pushl %ebx
- pushl %esp
- pushl %ebp
- pushl %esi
- pushl %edi
- .byte 0x41
- .byte 0x50
-# push r8
- .byte 0x41
- .byte 0x51
-# push r9
- .byte 0x41
- .byte 0x52
-# push r10
- .byte 0x41
- .byte 0x53
-# push r11
- .byte 0x41
- .byte 0x54
-# push r12
- .byte 0x41
- .byte 0x55
-# push r13
- .byte 0x41
- .byte 0x56
-# push r14
- .byte 0x41
- .byte 0x57
-# push r15
- .byte 0x48
- movl %esp,%ebp
-# mov rbp, rsp
-
-##
-## At this point the stack looks like this:
-##
-## Calling SS
-## Calling RSP
-## rflags
-## Calling CS
-## Calling RIP
-## Error code or 0
-## Int num or 0ffh for unknown int num
-## rax
-## rcx
-## rdx
-## rbx
-## rsp
-## rbp
-## rsi
-## rdi
-## r8
-## r9
-## r10
-## r11
-## r12
-## r13
-## r14
-## r15 <------- RSP, RBP
-##
-
- call ClearScreen
- movl $String1, %esi
- call PrintString
- .byte 0x48
- movl 16*8(%ebp),%eax ## move Int number into RAX
- .byte 0x48
- cmpl $18,%eax
- ja PrintDefaultString
-PrintExceptionString:
- shll $3,%eax ## multiply by 8 to get offset from StringTable to actual string address
- addl $StringTable, %eax
- movl (%eax),%esi
- jmp PrintTheString
-PrintDefaultString:
- movl $IntUnknownString, %esi
- # patch Int number
- movl %eax,%edx
- call A2C
- movb %al,1(%esi)
- movl %edx,%eax
- shrl $4,%eax
- call A2C
- movb %al,(%esi)
-PrintTheString:
- call PrintString
- movl $String2, %esi
- call PrintString
- .byte 0x48
- movl 19*8(%ebp),%eax # CS
- call PrintQword
- movb $':', %al
- movb %al, (%edi)
- addl $2,%edi
- .byte 0x48
- movl 18*8(%ebp),%eax # RIP
- call PrintQword
- movl $String3, %esi
- call PrintString
-
- movl $0xb8140,%edi
-
- movl $StringRax, %esi
- call PrintString
- .byte 0x48
- movl 15*8(%ebp),%eax
- call PrintQword
-
- movl $StringRcx, %esi
- call PrintString
- .byte 0x48
- movl 14*8(%ebp),%eax
- call PrintQword
-
- movl $StringRdx, %esi
- call PrintString
- .byte 0x48
- movl 13*8(%ebp),%eax
- call PrintQword
-
- movl $0xb81e0,%edi
-
- movl $StringRbx, %esi
- call PrintString
- .byte 0x48
- movl 12*8(%ebp),%eax
- call PrintQword
-
- movl $StringRsp, %esi
- call PrintString
- .byte 0x48
- movl 21*8(%ebp),%eax
- call PrintQword
-
- movl $StringRbp, %esi
- call PrintString
- .byte 0x48
- movl 10*8(%ebp),%eax
- call PrintQword
-
- movl $0xb8280,%edi
-
- movl $StringRsi, %esi
- call PrintString
- .byte 0x48
- movl 9*8(%ebp),%eax
- call PrintQword
-
- movl $StringRdi, %esi
- call PrintString
- .byte 0x48
- movl 8*8(%ebp),%eax
- call PrintQword
-
- movl $StringEcode, %esi
- call PrintString
- .byte 0x48
- movl 17*8(%ebp),%eax
- call PrintQword
-
- movl $0xb8320,%edi
-
- movl $StringR8, %esi
- call PrintString
- .byte 0x48
- movl 7*8(%ebp),%eax
- call PrintQword
-
- movl $StringR9, %esi
- call PrintString
- .byte 0x48
- movl 6*8(%ebp),%eax
- call PrintQword
-
- movl $StringR10, %esi
- call PrintString
- .byte 0x48
- movl 5*8(%ebp),%eax
- call PrintQword
-
- movl $0xb83c0,%edi
-
- movl $StringR11, %esi
- call PrintString
- .byte 0x48
- movl 4*8(%ebp),%eax
- call PrintQword
-
- movl $StringR12, %esi
- call PrintString
- .byte 0x48
- movl 3*8(%ebp),%eax
- call PrintQword
-
- movl $StringR13, %esi
- call PrintString
- .byte 0x48
- movl 2*8(%ebp),%eax
- call PrintQword
-
- movl $0xb8460,%edi
-
- movl $StringR14, %esi
- call PrintString
- .byte 0x48
- movl 1*8(%ebp),%eax
- call PrintQword
-
- movl $StringR15, %esi
- call PrintString
- .byte 0x48
- movl 0*8(%ebp),%eax
- call PrintQword
-
- movl $StringSs, %esi
- call PrintString
- .byte 0x48
- movl 22*8(%ebp),%eax
- call PrintQword
-
- movl $0xb8500,%edi
-
- movl $StringRflags, %esi
- call PrintString
- .byte 0x48
- movl 20*8(%ebp),%eax
- call PrintQword
-
- movl $0xb8640,%edi
-
- movl %ebp,%esi
- addl $23*8,%esi
- movl $4,%ecx
-
-
-OuterLoop:
- pushl %ecx
- movl $4,%ecx
- .byte 0x48
- movl %edi,%edx
-
-InnerLoop:
- .byte 0x48
- movl (%esi),%eax
- call PrintQword
- addl $8,%esi
- movb $0x20, %al # blank character
- movb %al,(%edi)
- addl $2,%edi
- loop InnerLoop
-
- popl %ecx
- addl $0xa0,%edx
- movl %edx,%edi
- loop OuterLoop
-
-
- movl $0xb8960,%edi
-
- .byte 0x48
- movl 18*8(%ebp),%eax # RIP
- subl $8*8,%eax
- .byte 0x48
- movl %eax,%esi # esi = rip - 8 QWORD linear (total 16 QWORD)
-
- movl $4,%ecx
-
-OuterLoop1:
- pushl %ecx
- movl $4,%ecx
- movl %edi,%edx
-
-InnerLoop1:
- .byte 0x48
- movl (%esi),%eax
- call PrintQword
- addl $8,%esi
- movb $0x20, %al # blank character
- movb %al,(%edi)
- addl $2,%edi
- loop InnerLoop1
-
- popl %ecx
- addl $0xa0,%edx
- movl %edx,%edi
- loop OuterLoop1
-
-
-
- #wbinvd
-LN_C1:
- jmp LN_C1
-
-#
-# return
-#
- movl %ebp,%esp
-# mov rsp, rbp
- .byte 0x41
- .byte 0x5f
-# pop r15
- .byte 0x41
- .byte 0x5e
-# pop r14
- .byte 0x41
- .byte 0x5d
-# pop r13
- .byte 0x41
- .byte 0x5c
-# pop r12
- .byte 0x41
- .byte 0x5b
-# pop r11
- .byte 0x41
- .byte 0x5a
-# pop r10
- .byte 0x41
- .byte 0x59
-# pop r9
- .byte 0x41
- .byte 0x58
-# pop r8
- popl %edi
- popl %esi
- popl %ebp
- popl %eax # esp
- popl %ebx
- popl %edx
- popl %ecx
- popl %eax
-
- .byte 0x48
- .byte 0x83
- .byte 0xc4
- .byte 0x10
-# add esp, 16 ; error code and INT number
-
- .byte 0x48
- .byte 0xcf
-# iretq
-
-PrintString:
- pushl %eax
-LN_C2:
- movb (%esi), %al
- cmpb $0,%al
- je LN_C3
- movb %al, (%edi)
- .byte 0xff
- .byte 0xc6
-# inc esi
- addl $2,%edi
- jmp LN_C2
-LN_C3:
- popl %eax
- ret
-
-## RAX contains qword to print
-## RDI contains memory location (screen location) to print it to
-PrintQword:
- pushl %ecx
- pushl %ebx
- pushl %eax
-
- .byte 0x48
- .byte 0xc7
- .byte 0xc1
- .long 16
-# mov rcx, 16
-looptop:
- .byte 0x48
- roll $4,%eax
- movb %al,%bl
- andb $0xf,%bl
- addb $'0', %bl
- cmpb $'9', %bl
- jle LN_C4
- addb $7,%bl
-LN_C4:
- movb %bl, (%edi)
- addl $2,%edi
- loop looptop
- #wbinvd
-
- popl %eax
- popl %ebx
- popl %ecx
- ret
-
-ClearScreen:
- pushl %eax
- pushl %ecx
-
- movb $0x20, %al # blank character
- movb $0xc,%ah
- movl $0xb8000,%edi
- movl $80*24,%ecx
-LN_C5:
- movw %ax, (%edi)
- addl $2,%edi
- loop LN_C5
- movl $0xb8000,%edi
-
- popl %ecx
- popl %eax
-
- ret
-
-A2C:
- andb $0xf,%al
- addb $'0', %al
- cmpb $'9', %al
- jle LN_C6
- addb $7,%al
-LN_C6:
- ret
-
-String1: .asciz "*** INT "
-
-Int0String: .asciz "00h Divide by 0 -"
-Int1String: .asciz "01h Debug exception -"
-Int2String: .asciz "02h NMI -"
-Int3String: .asciz "03h Breakpoint -"
-Int4String: .asciz "04h Overflow -"
-Int5String: .asciz "05h Bound -"
-Int6String: .asciz "06h Invalid opcode -"
-Int7String: .asciz "07h Device not available -"
-Int8String: .asciz "08h Double fault -"
-Int9String: .asciz "09h Coprocessor seg overrun (reserved) -"
-Int10String: .asciz "0Ah Invalid TSS -"
-Int11String: .asciz "0Bh Segment not present -"
-Int12String: .asciz "0Ch Stack fault -"
-Int13String: .asciz "0Dh General protection fault -"
-Int14String: .asciz "0Eh Page fault -"
-Int15String: .asciz "0Fh (Intel reserved) -"
-Int16String: .asciz "10h Floating point error -"
-Int17String: .asciz "11h Alignment check -"
-Int18String: .asciz "12h Machine check -"
-Int19String: .asciz "13h SIMD Floating-Point Exception -"
-IntUnknownString: .asciz "??h Unknown interrupt -"
-
-StringTable: .long Int0String, 0, Int1String, 0, Int2String, 0, Int3String, 0, \
- Int4String, 0, Int5String, 0, Int6String, 0, Int7String, 0, \
- Int8String, 0, Int9String, 0, Int10String, 0, Int11String, 0, \
- Int12String, 0, Int13String, 0, Int14String, 0, Int15String, 0, \
- Int16String, 0, Int17String, 0, Int18String, 0, Int19String, 0
-
-String2: .asciz " HALT!! *** ("
-String3: .asciz ")"
-StringRax: .asciz "RAX="
-StringRcx: .asciz " RCX="
-StringRdx: .asciz " RDX="
-StringRbx: .asciz "RBX="
-StringRsp: .asciz " RSP="
-StringRbp: .asciz " RBP="
-StringRsi: .asciz "RSI="
-StringRdi: .asciz " RDI="
-StringEcode: .asciz " ECODE="
-StringR8: .asciz "R8 ="
-StringR9: .asciz " R9 ="
-StringR10: .asciz " R10="
-StringR11: .asciz "R11="
-StringR12: .asciz " R12="
-StringR13: .asciz " R13="
-StringR14: .asciz "R14="
-StringR15: .asciz " R15="
-StringSs: .asciz " SS ="
-StringRflags: .asciz "RFLAGS="
-
-Idtr: .float 0
- .float 0
-
- .org 0x21ffe
-BlockSignature:
- .word 0xaa55
-