7bf4b77233
Because ia16-elf-gcc and the GNU linker do not understand OMF we need to use ELF everywhere. This also means we cannot use "wrt", "seg" and "call/jmp far". Most wrt's are superfluous, and seg and call/jmp far can be replaced by explicit ?GROUP references (to be defined in the linker script).
124 lines
3.7 KiB
PHP
124 lines
3.7 KiB
PHP
; File:
|
|
; segs.inc
|
|
; Description:
|
|
; Segment definitions for the kernel
|
|
;
|
|
; Copyright (c) 1998
|
|
; Pasquale J. Villani
|
|
; All Rights Reserved
|
|
;
|
|
; This file is part of DOS-C.
|
|
;
|
|
; DOS-C 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, or (at your option) any later version.
|
|
;
|
|
; DOS-C 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 DOS-C; see the file COPYING. If not,
|
|
; write to the Free Software Foundation, 675 Mass Ave,
|
|
; Cambridge, MA 02139, USA.
|
|
;
|
|
; $Header$
|
|
;
|
|
|
|
; CPU specification -- putting it here because all .asm files include this
|
|
; file __NASM_VER__ was introduced in NASM after CPU -- ver 0.98 doesn't
|
|
; understand it
|
|
%ifdef __NASM_VER__
|
|
%if XCPU == 86
|
|
CPU 8086
|
|
%else
|
|
CPU XCPU
|
|
%endif
|
|
%endif
|
|
|
|
; for OW on Linux:
|
|
%ifdef owlinux
|
|
%define WATCOM
|
|
%endif
|
|
|
|
%ifidn __OUTPUT_FORMAT__, obj
|
|
group PGROUP PSP
|
|
group LGROUP _IRQTEXT _LOWTEXT _IO_TEXT _IO_FIXED_DATA _TEXT
|
|
group DGROUP _FIXED_DATA _BSS _DATA _DATAEND CONST CONST2 DCONST DYN_DATA
|
|
%ifdef WATCOM
|
|
group TGROUP HMA_TEXT_START HMA_TEXT HMA_TEXT_END INIT_TEXT_START INIT_TEXT INIT_TEXT_END
|
|
%define IGROUP TGROUP
|
|
group I_GROUP ID_B I_DATA ICONST ICONST2 ID_E IB_B I_BSS IB_E
|
|
%else
|
|
group TGROUP HMA_TEXT_START HMA_TEXT HMA_TEXT_END
|
|
group IGROUP INIT_TEXT_START INIT_TEXT INIT_TEXT_END
|
|
group I_GROUP ID_B ID ID_E IC IDATA IB_B IB IB_E
|
|
%endif
|
|
%define class(x) class=x
|
|
%define nobits
|
|
%define exec
|
|
%define INITSIZE init_end wrt INIT_TEXT
|
|
%define INITTEXTSIZE __INIT_DATA_START wrt INIT_TEXT
|
|
|
|
%else ; using ELF
|
|
|
|
BITS 16
|
|
; groups are defined in the linker script kernel.ld
|
|
extern PGROUP
|
|
extern DGROUP
|
|
extern LGROUP
|
|
extern TGROUP
|
|
extern IGROUP
|
|
extern I_GROUP
|
|
%define class(x)
|
|
%define stack
|
|
extern INITSIZE
|
|
%define INITTEXTSIZE __InitTextEnd
|
|
|
|
%endif
|
|
|
|
segment PSP class(PSP)
|
|
segment _IRQTEXT class(LCODE) exec
|
|
segment _LOWTEXT class(LCODE) exec
|
|
segment _IO_TEXT class(LCODE) exec
|
|
segment _IO_FIXED_DATA class(LCODE) align=2
|
|
segment _TEXT class(LCODE) exec
|
|
segment _FIXED_DATA class(FDATA) align=16
|
|
segment _BSS class(BSS) align=2
|
|
segment _DATA class(DATA) align=2
|
|
segment _DATAEND class(DATA) align=1
|
|
;for WATCOM
|
|
segment CONST class(DATA) align=2
|
|
segment CONST2 class(DATA) align=2
|
|
;for MSC
|
|
segment DCONST class(DCONST) align=2
|
|
segment DYN_DATA class(DYN_DATA)
|
|
segment HMA_TEXT_START class(CODE) align=16
|
|
segment HMA_TEXT class(CODE) exec
|
|
segment HMA_TEXT_END class(CODE) align=16
|
|
segment INIT_TEXT_START class(CODE) align=16
|
|
segment INIT_TEXT class(CODE) exec
|
|
segment INIT_TEXT_END class(CODE) align=16
|
|
|
|
%ifdef WATCOM
|
|
segment ID_B class(FAR_DATA) align=16
|
|
segment I_DATA class(FAR_DATA) align=2
|
|
segment ICONST class(FAR_DATA) align=2
|
|
segment ICONST2 class(FAR_DATA) align=2
|
|
segment ID_E class(FAR_DATA) align=2
|
|
segment IB_B class(FAR_DATA) align=2
|
|
segment I_BSS class(FAR_DATA) align=2
|
|
segment IB_E class(FAR_DATA) align=2
|
|
%else
|
|
segment ID_B class(ID) align=16
|
|
segment ID class(ID) align=2
|
|
segment IDATA class(ID) align=2
|
|
segment ID_E class(ID) align=2
|
|
segment IC class(IC) align=2
|
|
segment IB_B class(IB) align=2 nobits
|
|
segment IB class(IB) align=2 nobits
|
|
segment IB_E class(IB) align=2 nobits
|
|
%endif
|