--- /dev/null
+;; @file\r
+; Interrupt Redirection Template\r
+;\r
+; Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>\r
+;\r
+; This program and the accompanying materials\r
+; are licensed and made available under the terms and conditions\r
+; of the BSD License which accompanies this distribution. The\r
+; 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
+;;\r
+\r
+ DEFAULT REL\r
+ SECTION .text\r
+\r
+;----------------------------------------------------------------------------\r
+; Procedure: InterruptRedirectionTemplate: Redirects interrupts 0x68-0x6F\r
+;\r
+; Input: None\r
+;\r
+; Output: None\r
+;\r
+; Prototype: VOID\r
+; InterruptRedirectionTemplate (\r
+; VOID\r
+; );\r
+;\r
+; Saves: None\r
+;\r
+; Modified: None\r
+;\r
+; Description: Contains the code that is copied into low memory (below 640K).\r
+; This code reflects interrupts 0x68-0x6f to interrupts 0x08-0x0f.\r
+; This template must be copied into low memory, and the IDT entries\r
+; 0x68-0x6F must be point to the low memory copy of this code. Each\r
+; entry is 4 bytes long, so IDT entries 0x68-0x6F can be easily\r
+; computed.\r
+;\r
+;----------------------------------------------------------------------------\r
+\r
+global ASM_PFX(InterruptRedirectionTemplate)\r
+ASM_PFX(InterruptRedirectionTemplate):\r
+ int 0x8\r
+ DB 0xcf ; IRET\r
+ nop\r
+ int 0x9\r
+ DB 0xcf ; IRET\r
+ nop\r
+ int 0xa\r
+ DB 0xcf ; IRET\r
+ nop\r
+ int 0xb\r
+ DB 0xcf ; IRET\r
+ nop\r
+ int 0xc\r
+ DB 0xcf ; IRET\r
+ nop\r
+ int 0xd\r
+ DB 0xcf ; IRET\r
+ nop\r
+ int 0xe\r
+ DB 0xcf ; IRET\r
+ nop\r
+ int 0xf\r
+ DB 0xcf ; IRET\r
+ nop\r
+\r