--- /dev/null
+;; @file\r
+; Interrupt Redirection Template\r
+;\r
+; Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>\r
+;\r
+; SPDX-License-Identifier: BSD-2-Clause-Patent\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