blob: 5561c7207298e16793f647a69de8597c90a833af [file] [log] [blame]
;; -----------------------------------------------------------------------
;; 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.
;; -----------------------------------------------------------------------
;; 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
dd 0 ; Dummy to avoid _exit issues
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
global CurrentDirName:data hidden
CurrentDirName resb FILENAME_MAX
section .text16