Move assembler entry macros in romlayout.S into new file entryfuncs.S.
authorKevin O'Connor <kevin@koconnor.net>
Thu, 7 May 2009 03:33:32 +0000 (23:33 -0400)
committerKevin O'Connor <kevin@koconnor.net>
Thu, 7 May 2009 03:33:32 +0000 (23:33 -0400)
This allows the entry macros to be used in other assembler code.

src/entryfuncs.S [new file with mode: 0644]
src/romlayout.S

diff --git a/src/entryfuncs.S b/src/entryfuncs.S
new file mode 100644 (file)
index 0000000..ad0c79d
--- /dev/null
@@ -0,0 +1,134 @@
+// Macros for entering C code
+//
+// Copyright (C) 2008,2009  Kevin O'Connor <kevin@koconnor.net>
+//
+// This file may be distributed under the terms of the GNU LGPLv3 license.
+
+
+/****************************************************************
+ * Entry macros
+ ****************************************************************/
+
+        // Call a C function - this does the minimal work necessary to
+        // call into C.  It sets up %ds, backs up %es, and backs up
+        // those registers that are call clobbered by the C compiler.
+        .macro ENTRY cfunc
+        cli         // In case something far-calls instead of using "int"
+        cld
+        pushl %eax              // Save registers clobbered by C code
+        pushl %ecx
+        pushl %edx
+        pushw %es
+        pushw %ds
+        movw %ss, %ax           // Move %ss to %ds
+        movw %ax, %ds
+        pushl %esp              // Backup %esp, then clear high bits
+        movzwl %sp, %esp
+        calll \cfunc
+        popl %esp               // Restore %esp (including high bits)
+        popw %ds                // Restore registers saved above
+        popw %es
+        popl %edx
+        popl %ecx
+        popl %eax
+        .endm
+
+        // Call a C function with current register list as an
+        // argument.  This backs up the registers and sets %eax
+        // to point to the backup.  On return, the registers are
+        // restored from the structure.
+        .macro ENTRY_ARG cfunc
+        cli
+        cld
+        pushl %eax              // Save registers (matches struct bregs)
+        pushl %ecx
+        pushl %edx
+        pushl %ebx
+        pushl %esi
+        pushl %edi
+        pushw %es
+        pushw %ds
+        movw %ss, %ax           // Move %ss to %ds
+        movw %ax, %ds
+        movl %esp, %ebx         // Backup %esp, then zero high bits
+        movzwl %sp, %esp
+        movl %esp, %eax         // First arg is pointer to struct bregs
+        calll \cfunc
+        movl %ebx, %esp         // Restore %esp (including high bits)
+        popw %ds                // Restore registers (from struct bregs)
+        popw %es
+        popl %edi
+        popl %esi
+        popl %ebx
+        popl %edx
+        popl %ecx
+        popl %eax
+        .endm
+
+        // As above, but don't mangle %esp
+        .macro ENTRY_ARG_ESP cfunc
+        cli
+        cld
+        pushl %eax              // Save registers (matches struct bregs)
+        pushl %ecx
+        pushl %edx
+        pushl %ebx
+        pushl %esi
+        pushl %edi
+        pushw %es
+        pushw %ds
+        movw %ss, %ax           // Move %ss to %ds
+        movw %ax, %ds
+        movl %esp, %eax         // First arg is pointer to struct bregs
+        calll \cfunc
+        popw %ds                // Restore registers (from struct bregs)
+        popw %es
+        popl %edi
+        popl %esi
+        popl %ebx
+        popl %edx
+        popl %ecx
+        popl %eax
+        .endm
+
+        // Reset stack, transition to 32bit mode, and call a C function.
+        // Clobbers %ax
+        .macro ENTRY_INTO32 cfunc
+        xorw %ax, %ax
+        movw %ax, %ss
+        movl $ BUILD_STACK_ADDR , %esp
+        pushl $ \cfunc
+        jmp transition32
+        .endm
+
+        // Declare a function
+        .macro DECLFUNC func
+        .section .text.asm.\func
+        .global \func
+        .endm
+
+        // Define an entry point for an interrupt (no args passed).
+        .macro IRQ_ENTRY num
+        .global entry_\num
+        entry_\num :
+        ENTRY handle_\num
+        iretw
+        .endm
+
+        // Define an entry point for an interrupt (can read/modify args).
+        .macro IRQ_ENTRY_ARG num
+        .global entry_\num
+        entry_\num :
+        ENTRY_ARG handle_\num
+        iretw
+        .endm
+
+        // Macros that put each handler into its own section
+        .macro DECL_IRQ_ENTRY num
+        .section .text.asm.entry_\num
+        IRQ_ENTRY \num
+        .endm
+        .macro DECL_IRQ_ENTRY_ARG num
+        .section .text.asm.entry_\num
+        IRQ_ENTRY_ARG \num
+        .endm
index 80b7a4b29a965b2b7cc6a8b41c0d404a6ad4eacc..736dc9b31be8fc4a9e96736200e08e74014ffb71 100644 (file)
@@ -1,16 +1,10 @@
 // Rom layout and bios assembler to C interface.
 //
-// Copyright (C) 2008  Kevin O'Connor <kevin@koconnor.net>
+// Copyright (C) 2008,2009  Kevin O'Connor <kevin@koconnor.net>
 // Copyright (C) 2002  MandrakeSoft S.A.
 //
 // This file may be distributed under the terms of the GNU LGPLv3 license.
 
-#include "config.h" // CONFIG_*
-#include "ioport.h" // PORT_A20
-#include "bregs.h" // CR0_*
-#include "cmos.h" // CMOS_RESET_CODE
-#include "../out/asm-offsets.h" // BREGS_*
-
 
 /****************************************************************
  * Include of 16bit C code
         .code16gcc
 .include "out/ccode.16.s"
 
-
-/****************************************************************
- * Entry macros
- ****************************************************************/
-
-        // Call a C function - this does the minimal work necessary to
-        // call into C.  It sets up %ds, backs up %es, and backs up
-        // those registers that are call clobbered by the C compiler.
-        .macro ENTRY cfunc
-        cli         // In case something far-calls instead of using "int"
-        cld
-        pushl %eax              // Save registers clobbered by C code
-        pushl %ecx
-        pushl %edx
-        pushw %es
-        pushw %ds
-        movw %ss, %ax           // Move %ss to %ds
-        movw %ax, %ds
-        pushl %esp              // Backup %esp, then clear high bits
-        movzwl %sp, %esp
-        calll \cfunc
-        popl %esp               // Restore %esp (including high bits)
-        popw %ds                // Restore registers saved above
-        popw %es
-        popl %edx
-        popl %ecx
-        popl %eax
-        .endm
-
-        // Call a C function with current register list as an
-        // argument.  This backs up the registers and sets %eax
-        // to point to the backup.  On return, the registers are
-        // restored from the structure.
-        .macro ENTRY_ARG cfunc
-        cli
-        cld
-        pushl %eax              // Save registers (matches struct bregs)
-        pushl %ecx
-        pushl %edx
-        pushl %ebx
-        pushl %esi
-        pushl %edi
-        pushw %es
-        pushw %ds
-        movw %ss, %ax           // Move %ss to %ds
-        movw %ax, %ds
-        movl %esp, %ebx         // Backup %esp, then zero high bits
-        movzwl %sp, %esp
-        movl %esp, %eax         // First arg is pointer to struct bregs
-        calll \cfunc
-        movl %ebx, %esp         // Restore %esp (including high bits)
-        popw %ds                // Restore registers (from struct bregs)
-        popw %es
-        popl %edi
-        popl %esi
-        popl %ebx
-        popl %edx
-        popl %ecx
-        popl %eax
-        .endm
-
-        // As above, but don't mangle %esp
-        .macro ENTRY_ARG_ESP cfunc
-        cli
-        cld
-        pushl %eax              // Save registers (matches struct bregs)
-        pushl %ecx
-        pushl %edx
-        pushl %ebx
-        pushl %esi
-        pushl %edi
-        pushw %es
-        pushw %ds
-        movw %ss, %ax           // Move %ss to %ds
-        movw %ax, %ds
-        movl %esp, %eax         // First arg is pointer to struct bregs
-        calll \cfunc
-        popw %ds                // Restore registers (from struct bregs)
-        popw %es
-        popl %edi
-        popl %esi
-        popl %ebx
-        popl %edx
-        popl %ecx
-        popl %eax
-        .endm
-
-        // Reset stack, transition to 32bit mode, and call a C function.
-        // Clobbers %ax
-        .macro ENTRY_INTO32 cfunc
-        xorw %ax, %ax
-        movw %ax, %ss
-        movl $ BUILD_STACK_ADDR , %esp
-        pushl $ \cfunc
-        jmp transition32
-        .endm
-
-        // Declare a function
-        .macro DECLFUNC func
-        .section .text.asm.\func
-        .global \func
-        .endm
+#include "config.h" // CONFIG_*
+#include "ioport.h" // PORT_A20
+#include "bregs.h" // CR0_*
+#include "cmos.h" // CMOS_RESET_CODE
+#include "../out/asm-offsets.h" // BREGS_*
+#include "entryfuncs.S" // ENTRY_*
 
 
 /****************************************************************
@@ -449,32 +347,6 @@ post32:
  * Interrupt entry points
  ****************************************************************/
 
-        // Define an entry point for an interrupt (no args passed).
-        .macro IRQ_ENTRY num
-        .global entry_\num
-        entry_\num :
-        ENTRY handle_\num
-        iretw
-        .endm
-
-        // Define an entry point for an interrupt (can read/modify args).
-        .macro IRQ_ENTRY_ARG num
-        .global entry_\num
-        entry_\num :
-        ENTRY_ARG handle_\num
-        iretw
-        .endm
-
-        // Macros that put each handler into its own section
-        .macro DECL_IRQ_ENTRY num
-        .section .text.asm.entry_\num
-        IRQ_ENTRY \num
-        .endm
-        .macro DECL_IRQ_ENTRY_ARG num
-        .section .text.asm.entry_\num
-        IRQ_ENTRY_ARG \num
-        .endm
-
         DECL_IRQ_ENTRY_ARG 13
         DECL_IRQ_ENTRY_ARG 12
         DECL_IRQ_ENTRY_ARG 11