!************************************************************************** !* !* Network driver interface for netboot bootrom !* !* Module: dospriv.inc !* Purpose: Include file to define DOS and BIOS data structures !* Entries: None !* !************************************************************************** !* !* Copyright (C) 1995-2003 Gero Kuhlmann !* !* 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; either version 2 of the License, or !* any later version. !* !* This program is distributed in the hope that it will be useful, !* but WITHOUT ANY WARRANTY; without even the implied warranty of !* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the !* GNU General Public License for more details. !* !* You should have received a copy of the GNU General Public License !* along with this program; if not, write to the Free Software !* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. !* !* $Id: dospriv.inc,v 1.5 2003/01/25 23:29:41 gkminix Exp $ !* #ifndef _NETDRVR_DOSSIM_DOSPRIV_H #define _NETDRVR_DOSSIM_DOSPRIV_H ! !************************************************************************** ! ! The DOS dispatcher interrupt 21h has to save some registers before ! calling the handler routine. As DOS is able to use two different ! stacks we also have to save those registers into two different ! locations. The area to hold the values looks like this: ! old_bp equ 0 old_ds equ 2 old_stack equ 4 old_reg_size equ 8 ! !************************************************************************** ! ! Definitions for memory management: ! ! A memory control block precedes every memory block in the lower ram ! area (e.g. from the end of the boot rom data area to the beginning ! of the operating system loading area). If the owner address is 0, ! the memory block is free. ! mcb_id equ 0 ! ID of control block (see below) mcb_owner equ 1 ! pointer to PSP of owner process mcb_size equ 3 ! size in paragraphs ! MCB id codes: MCB_MEM_ID equ $4D ! indicates valid memory block MCB_END_ID equ $5A ! indicates last memory block ! !************************************************************************** ! ! Definition of device codes: ! DEV_CON equ 0 ! console DEV_AUX equ 1 ! serial port DEV_PRN equ 2 ! printer port ! !************************************************************************** ! ! Definition of reserved file handles. ! RES_HANDLES equ 5 ! total number of reserved handles RES_STDIN equ 0 ! stdin file handle RES_STDOUT equ 1 ! stdout file handle RES_STDERR equ 2 ! stderr file handle RES_AUX equ 3 ! AUX device file handle RES_PRN equ 4 ! PRN device file handle ! !************************************************************************** ! ! Definition of Program Segment Prefix (PSP): ! o_psp_endmem equ 2 ! first allocatable seg after program o_psp_int22 equ 10 ! saved interrupt 22h vector o_psp_int23 equ 14 ! saved interrupt 23h vector o_psp_int24 equ 18 ! saved interrupt 24h vector o_psp_parent equ 22 ! PSP of parent process o_psp_handles equ 24 ! process file handles o_psp_env equ 44 ! segment of program environment o_psp_oldstack equ 46 ! stack pointer of parent o_psp_numhndl equ 50 ! number of file handles o_psp_ofshndl equ 52 ! offset of file handle table o_psp_seghndl equ 54 ! segment of file handle table o_psp_fcb1 equ 92 ! first part of FCB 1 o_psp_fcb2 equ 108 ! first part of FCB 2 o_psp_cmdlsize equ 128 ! length of command line o_psp_cmdl equ 129 ! command line (the first of 127 bytes) PSP_MAXCMDL equ 125 ! maximum length of command line PSP_SIZE equ 256 ! size of PSP with full command line ! !************************************************************************** ! ! Definitions for program management: ! COM_MAGIC equ $4B47 ! magic cookie for COM program images COM_MIN_FREE equ $0050 ! minimum number of free paragraphs EXE_MAGIC equ $5A4D ! magic cookie for EXE program images EXE_SECTSIZE equ 512 ! size of program sectors in EXE EXE_SIG equ $0000 ! EXE header signature EXE_LASTSECT equ $0002 ! number of bytes in last sector EXE_FSIZE equ $0004 ! number of sectors in program EXE_RELOCNUM equ $0006 ! number of relocation table entries EXE_HEADSIZE equ $0008 ! size of header in paragraphs EXE_MINPARA equ $000A ! min no of paragraphs required EXE_MAXPARA equ $000C ! max no of paragraphs required EXE_SS equ $000E ! stack segment (offset to prog start) EXE_SP equ $0010 ! stack pointer EXE_IP equ $0014 ! start address of program EXE_CS equ $0016 ! start segment (offset to prog start) EXE_RELOCTAB equ $0018 ! offset to relocation table ! !************************************************************************** ! ! DOS error codes ! ERR_NOFN equ 1 ! function does not exist ERR_NOFILE equ 2 ! file not found ERR_NODIR equ 3 ! directory not found ERR_TOOMANY equ 4 ! too many open files ERR_NOACC equ 5 ! access denied ERR_INVHDL equ 6 ! invalid file handle ERR_INVMCB equ 7 ! invalid memory control block ERR_NOMEM equ 8 ! not enough memory ERR_INVMEM equ 9 ! invalid memory block address ERR_INVENV equ 10 ! invalid environment ERR_INVFORM equ 11 ! invalid format ERR_INVACC equ 12 ! invalid access code ERR_INVDATA equ 13 ! invalid data ERR_INVDRV equ 15 ! invalid drive ERR_DELACT equ 16 ! not allowed to delete active dir ERR_NODEV equ 17 ! device not available ERR_NOMORE equ 18 ! no more files ERR_WRTPROT equ 19 ! disk is write protected ERR_NODISK equ 20 ! disk device not available ERR_NOTRDY equ 21 ! drive not ready ERR_INVCMD equ 22 ! invalid disk command ERR_CRCERR equ 23 ! CRC error ERR_TIMOUT equ 24 ! time out of disk operation ERR_SEARCH equ 25 ! error searching disk block ERR_NODOS equ 26 ! no DOS diskette ERR_NOSECT equ 27 ! sector not found ERR_NOPAPER equ 28 ! no paper in printer ERR_WRITE equ 29 ! write error ERR_READ equ 30 ! read error ERR_GENERAL equ 31 ! general error ! !************************************************************************** ! ! ASCII character definitions ! CHR_BS equ $08 ! Backspace character CHR_TAB equ $09 ! Tab character CHR_LF equ $0A ! Line-feed character CHR_FF equ $0C ! Form-feed character CHR_RET equ $0D ! Return character CHR_EOF equ $1A ! End-of-file character CHR_FIRST equ $20 ! first printable character CHR_DELETE equ $7F ! Delete character ! !************************************************************************** ! ! With a 386+ processor, the DOS simulator can internally use the FS ! register instead of ES, which saves a couple of push/pop instructions. ! ! Macro to use FS instead of ES in segment prefixes ! #ifdef IS386 #define segfs seg fs #else #define segfs seg es #endif ! ! Macros to push and pop ES if FS cannot be used ! #ifdef IS386 #define pushfs #else #define pushfs push es #endif #ifdef IS386 #define popfs #else #define popfs pop es #endif ! !************************************************************************** ! #endif