; -----------------------------------------------------------------------
;
;   Copyright 1994-2008 H. Peter Anvin - All Rights Reserved
;
;   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,
;   Bostom MA 02111-1307, USA; either version 2 of the License, or
;   (at your option) any later version; incorporated herein by reference.
;
; -----------------------------------------------------------------------

;
; layout.inc
;
; Memory layout of segments
;


; Memory below 0800h is reserved for the BIOS and the MBR.
BSS_START	equ 0800h

; Text starts at the load address of 07C00h.
TEXT_START	equ 7C00h

; The secondary BSS section, above the text; we really wish we could
; just make it follow .bcopy32 or hang off the end,
; but it doesn't seem to work that way.
LATEBSS_START	equ 0B800h

; Reserve memory for the stack.  This causes checkov to abort the
; compile if we violate this space.
STACK_SIZE	equ 4096
STACK_START	equ TEXT_START-STACK_SIZE

%ifdef MAP
		[map all MAP]
%endif

;
; The various sections and their relationship
;
		org TEXT_START

		; Use .earlybss for things that MUST be in low memory.
		section .earlybss	nobits start=BSS_START
		section .bcopy32	align=4 valign=16 follows=.data vfollows=.earlybss
		section .config		align=4 valign=16 follows=.bcopy32 vfollows=.bcopy32
		section .config.end	nobits valign=4 vfollows=.config

		; Use .bss for things that doesn't have to be in low memory;
		; with .bss1 and .bss2 to offload.  .earlybss should be used
		; for things that absolutely have to be below 0x7c00.
		section .bss		nobits valign=16 vfollows=.config.end

		; Warning here: RBFG build 22 randomly overwrites
		; memory location [0x5680,0x576c), possibly more.  It
		; seems that it gets confused and screws up the
		; pointer to its own internal packet buffer and starts
		; writing a received ARP packet into low memory.
%if IS_PXELINUX
		section .rbfg		nobits start=0x5680
RBFG_brainfuck:	resb 2048		; Bigger than an Ethernet packet...
%endif

		; For section following .rbfg
%if IS_PXELINUX
		section .bss2		nobits valign=16 vfollows=.rbfg
%else
		section .bss2		nobits valign=16 vfollows=.bss
%endif

		section .text		start=TEXT_START
		; NASM BUG: .data always follows .text; can't override
		section .data		align=16 ; follows=.text

		; This empty section works around a NASM bug with regards
		; to follows= and nobits sections following a section which
		; has VMA != LMA.
		section .advpad		progbits align=512 follows=.config

		section .adv		nobits align=512 follows=.advpad

		; .uibss contains bss data which is guaranteed to be
		; safe to clobber during the loading of the image.  This
		; is because while loading the primary image we will clobber
		; the spillover from the last fractional sector load.
		section .uibss		nobits align=16 follows=.adv

		; Normal bss...
		section .bss1		nobits align=16 follows=.uibss

		; Reserve space for stack
		section .stack		nobits align=16 start=STACK_START
Stack		resb	STACK_SIZE
