/* This document is intended to provide the developer with information
 * how to integrate a new CPU (MACH) into this part of the barebox tree
 */

/** @page dev_x86_mach barebox on x86 at runtime

@section mach_x86_memory_layout barebox's memory layout (BIOS based)

@a barebox uses the following memory layout at runtime when it still depends
on some kind of BIOS function:

@verbatim
     Addresses
------------------------

 seg:off     flat

xxxx:xxxx 0x01xxxxxx    end of  barebox's malloc area
    .        .
xxxx:xxxx 0x01000000    start of barebox's malloc area
    .          .
    .          .        (used while loading a Linux kernel of type 'bzImage')
    .          .
xxxx:xxxx 0x00100000    start of extended memory and  malloc area
    .          .
    .          .	(the big hole)
    .          .
9000:ffff 0x0009ffff    end of expected real mode memory
    .          .
    .          .        (used while loading a Linux kernel of type 'bzImage')
    .          .
9000:0000 0x00090000    end of used lower real mode memory
    .          .
    .          .
    .          .        Flat mode stack (about 32 kiB)
    .          .        bss
    .          .        Data
    .          .        Text
0000:7e00 0x00007e00	Real and flat mode barebox code
0000:7c00 0x00007c00	MBR initial boot loader code
0000:7a00 0x00007a00	location of the indirect sector (while booting only)
			below: real mode stack
@endverbatim

@note The start address of 0x0000:7c000 is a fixed one, defined by the BIOS.
So, for a BIOS based @a barebox this address can't be changed.

While the @a barebox code is runnung in flat mode, all interrupts are disabled.
But in the CPU only. All other interrupt settings are still valid. This is
required to be able to call real mode code from inside @a barebox flat mode
code. Thats why not the PIC is touched nor the IDT.

@todo Add some notes about drive numbers used by the BIOS. They may change
if one change orders in the BIOS setup. Drive orders and numbers may be
different at BIOS runtime and Linux runtime! But these numbers are required
at BIOS runtime for booting and the persistant environment storage.

@attention Currently there is a 4 GiB limit for the disk sizes!

@section mach_x86_image_layout barebox's image layout

@a barebox's binary image layout

@verbatim
  Offset     Content

 0x?????
    .        32 bit barebox code
    .
    .        16 bit bootstrap code, BIOS calling code
 0x00400
 0x003ff
    .        indirect sector
 0x00200
 0x001ff
    .        MBR
 0x00000
@endverbatim

The "indirect sector" is a free area in the image where the sector information
gets stored when this image will be written to a boot media. This information
is required to load all parts of the image from the boot media at runtime.

The image gets installed in two ways onto the boot media, depending on the
need for a persistant storage.

@subsection mach_x86_drive_layout_wops barebox's boot media layout without persistant storage

In this case @a barebox's persistant storage is anywhere:

@verbatim
  Sector     Content
---------------------------
    X        start of first partition
    .
    ?        end of the binary image
    .        32 bit barebox code
    2        16 bit bootstrap code, BIOS calling code
    1        indirect sector
    0        MBR, Partition table, boot code
@endverbatim

@subsection mach_x86_drive_layout_wps barebox's boot media layout with persistant storage

@a barebox's persistant storage is part of the boot media (more
space required in front of the first partition) and interferes with the
boot loader image itself:

@verbatim
  Sector     Content
---------------------------
    X        start of first partition
    .
    n+?      end of the binary image
    .        32 bit barebox code
    n+2      16 bit bootstrap code, BIOS calling code
    n+1      indirect sector
    n        end of persistant environment storage
    .
    1        start of persistant environment storage
    0        MBR, Partition table, boot code
@endverbatim

The information where the persistant storage is located is also stored into
the MBR at specific locations by @p setupmbr. The @a barebox runtime will use
it to load and store all environment relevant data.

*/
