grml...
[seabios.git] / README
diff --git a/README b/README
index 1ccf5eddea1e7865bc8cd6cb304b8733653e428a..1f40433de5133b4a2b5b40e16fc8ed61fc8de9c3 100644 (file)
--- a/README
+++ b/README
@@ -4,11 +4,6 @@ compiled using standard gnu tools (eg, gas and gcc).
 To build, one should be able to run "make" in the main directory.  The
 resulting file "out/bios.bin" contains the processed bios image.
 
-The build requires gcc v4.1 or later.  Some buggy versions of gcc have
-issues with the '-combine' compiler option - in particular, recent
-versions of Ubuntu are affected.  One can use "make AVOIDCOMBINE=1" to
-get around this.
-
 
 Testing of images:
 
@@ -29,30 +24,12 @@ directory for rom images.  For example:
 qemu -L mybiosdir/ -fda myfdimage.img
 
 
-The following payloads have been tested:
-
-Freedos - see http://www.freedos.org/ .  Useful tests include: booting
-from installation cdrom, installing to hard drive and floppy, making
-sure hard drive and floppy boots then work.  It is also useful to take
-the bootable floppy and hard-drive images, write them to an el-torito
-bootable cdrom using the Linux mkisofs utility, and then boot those
-cdrom images.
-
-Linux - useful hard drive image available from
-http://fabrice.bellard.free.fr/qemu/linux-0.2.img.bz2 .  It is also
-useful to test standard distribution bootup and live cdroms.
-
-NetBSD - useful hard drive image available from
-http://nopid.free.fr/small.ffs.bz2 .  It is also useful to test
-standard distribution installation cdroms.
-
-
 Overview of files:
 
 The src/ directory contains the bios source code.  Several of the
 files are compiled twice - once for 16bit mode and once for 32bit
-mode.  (The gcc compile option '-fwhole-program' is used to remove
-code that is not needed for a particular mode.)
+mode.  (The build system will remove code that is not needed for a
+particular mode.)
 
 The tools/ directory contains helper utilities for manipulating and
 building the final rom.
@@ -64,22 +41,23 @@ temporary and final files.
 Build overview:
 
 The 16bit code is compiled via gcc to assembler (file out/ccode.16.s).
-The gcc "-fwhole-program" option is used to optimize the process so
-that gcc can efficiently compile and discard unneeded code.  (In the
-code, one can use the macros 'VISIBLE16' and 'VISIBLE32' to instruct a
-symbol to be outputted in 16bit and 32bit mode respectively.)
+The gcc "-fwhole-program" and "-ffunction-sections -fdata-sections"
+options are used to optimize the process so that gcc can efficiently
+compile and discard unneeded code.  (In the code, one can use the
+macros 'VISIBLE16' and 'VISIBLE32FLAT' to instruct a symbol to be
+outputted in 16bit and 32bit mode respectively.)
 
 This resulting assembler code is pulled into romlayout.S.  The gas
 option ".code16gcc" is used prior to including the gcc generated
 assembler - this option enables gcc to generate valid 16 bit code.
 
-The post code (post.c) is entered, via the function _start(), in 32bit
-mode.  The 16bit post vector (in romlayout.S) transitions the cpu into
-32 bit mode before calling the post.c code.
+The post code (post.c) is entered, via the function handle_post(), in
+32bit mode.  The 16bit post vector (in romlayout.S) transitions the
+cpu into 32 bit mode before calling the post.c code.
 
 In the last step of compilation, the 32 bit code is merged into the 16
 bit code so that one binary file contains both.  Currently, both 16bit
-and 32bit code will be located in the 64K block at segment 0xf000.
+and 32bit code will be located in the memory at 0xe0000-0xfffff.
 
 
 GCC 16 bit limitations:
@@ -122,16 +100,17 @@ macros (GET/SET_GLOBAL, GET/SET_BDA, and GET/SET_EBDA) are available
 to simplify these accesses.
 
 Global variables defined in the C code can be read in 16bit mode if
-the variable declaration is marked with VAR16 or VAR16_32.  The
-GET_GLOBAL macro will then allow read access to the variable.  Global
-variables are stored in the 0xf000 segment, and their values are
-persistent across soft resets.  Because the f-segment is marked
-read-only during run-time, the 16bit code is not permitted to change
-the value of 16bit variables (use of the SET_GLOBAL macro from 16bit
-mode will cause a link error).  Code running in 32bit mode can not
-access variables with VAR16, but can access variables marked with
-VAR16_32 or with no marking at all.  The 32bit code can use the
-GET/SET_GLOBAL macros, but they are not required.
+the variable declaration is marked with VAR16, VAR16VISIBLE,
+VAR16EXPORT, or VAR16FIXED.  The GET_GLOBAL macro will then allow read
+access to the variable.  Global variables are stored in the 0xf000
+segment, and their values are persistent across soft resets.  Because
+the f-segment is marked read-only during run-time, the 16bit code is
+not permitted to change the value of 16bit variables (use of the
+SET_GLOBAL macro from 16bit mode will cause a link error).  Code
+running in 32bit mode can not access variables with VAR16, but can
+access variables marked with VAR16VISIBLE, VAR16EXPORT, VAR16FIXED, or
+with no marking at all.  The 32bit code can use the GET/SET_GLOBAL
+macros, but they are not required.
 
 
 GCC 16 bit stack limitations:
@@ -158,8 +137,8 @@ structures can also help.  It is also possible to transition to/from
 an extra stack stored in the EBDA using the stack_hop helper function.
 
 Some useful stats: the overhead for the entry to a bios handler that
-takes a 'struct bregs' is 38 bytes of stack space (6 bytes from
-interrupt insn, 28 bytes to store registers, and 4 bytes for call
+takes a 'struct bregs' is 42 bytes of stack space (6 bytes from
+interrupt insn, 32 bytes to store registers, and 4 bytes for call
 insn).  An entry to an ISR handler without args takes 30 bytes (6 + 20
 + 4).
 
@@ -167,9 +146,10 @@ insn).  An entry to an ISR handler without args takes 30 bytes (6 + 20
 Debugging the bios:
 
 The bios will output information messages to a special debug port.
-Under qemu, one can view these messages by enabling the '#define
-DEBUG_BIOS' definition in 'qemu/hw/pc.c'.  Once this is done (and qemu
-is recompiled), one should see status messages on the console.
+Under qemu, one can view these messages by adding '-chardev
+stdio,id=seabios -device isa-debugcon,iobase=0x402,chardev=seabios' to
+the qemu command line.  Once this is done, one should see status
+messages on the console.
 
 The gdb-server mechanism of qemu is also useful.  One can use gdb with
 qemu to debug system images.  To use this, add '-s -S' to the qemu