| ;; ----------------------------------------------------------------------- |
| ;; |
| ;; 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 |