diff options
Diffstat (limited to 'core/com32.inc')
-rw-r--r-- | core/com32.inc | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/core/com32.inc b/core/com32.inc new file mode 100644 index 0000000..5561c72 --- /dev/null +++ b/core/com32.inc @@ -0,0 +1,66 @@ +;; ----------------------------------------------------------------------- +;; +;; Copyright 1994-2009 H. Peter Anvin - All Rights Reserved +;; Copyright 2009-2010 Intel Corporation; author: H. Peter Anvin +;; +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, Inc., 53 Temple Place Ste 330, +;; Boston MA 02111-1307, USA; either version 2 of the License, or +;; (at your option) any later version; incorporated herein by reference. +;; +;; ----------------------------------------------------------------------- + +;; +;; com32.inc +;; +;; Common code for running a COM32 image +;; + + extern pm_api_vector + +; +; Load a COM32 image. A COM32 image is the 32-bit analogue to a DOS +; .com file. A COM32 image is loaded at address 0x101000, with %esp +; set to the high end of usable memory. +; +; A COM32 image should begin with the magic bytes: +; B8 FF 4C CD 21, which is "mov eax,0x21cd4cff" in 32-bit mode and +; "mov ax,0x4cff; int 0x21" in 16-bit mode. This will abort the +; program with an error if run in 16-bit mode. +; + bits 16 + section .data16 + + ; Ersatz com32 invocation structure, to make libcom32 + ; code run the same if linked to the core. This is in + ; the .data16 segment so HighMemSize can live here. + ; + ; Danger, Will Robinson: it's not clear the use of + ; core_xfer_buf is safe here. + global __com32:data hidden + alignz 4 +__entry_esp: + dd 0 ; Dummy to avoid _exit issues +__com32: + dd 9 ; Argument count + dd 0 ; No command line + dd core_intcall ; Intcall entry point + dd 0 ; Bounce buffer address + dd 0 ; 64K bounce buffer + dd core_farcall ; Farcall entry point + dd core_cfarcall ; Cfarcall entry point +HighMemSize dd 0 ; End of memory pointer (bytes) + dd 0 ; No module name + dd pm_api_vector ; Protected mode functions + + section .uibss +Com32Name resb FILENAME_MAX + + section .bss16 +%ifndef HAVE_CURRENTDIRNAME + global CurrentDirName:data hidden +CurrentDirName resb FILENAME_MAX +%endif + + section .text16 |