Enhanced Documentation (Stefan Weil)


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1873 c046a42c-6fe2-441c-8c8c-71466251a162
diff --git a/qemu-doc.texi b/qemu-doc.texi
index 7068d2a..9e47350 100644
--- a/qemu-doc.texi
+++ b/qemu-doc.texi
@@ -1,16 +1,46 @@
 \input texinfo @c -*- texinfo -*-
+@c %**start of header
+@setfilename qemu-doc.info
+@settitle QEMU CPU Emulator User Documentation
+@exampleindent 0
+@paragraphindent 0
+@c %**end of header
 
 @iftex
-@settitle QEMU CPU Emulator User Documentation
 @titlepage
 @sp 7
-@center @titlefont{QEMU CPU Emulator User Documentation}
+@center @titlefont{QEMU CPU Emulator}
+@sp 1
+@center @titlefont{User Documentation}
 @sp 3
 @end titlepage
 @end iftex
 
+@ifnottex
+@node Top
+@top
+
+@menu
+* Introduction::
+* Installation::
+* QEMU PC System emulator::
+* QEMU System emulator for non PC targets::
+* QEMU Linux User space emulator::
+* compilation:: Compilation from the sources
+* Index::
+@end menu
+@end ifnottex
+
+@contents
+
+@node Introduction
 @chapter Introduction
 
+@menu
+* intro_features:: Features
+@end menu
+
+@node intro_features
 @section Features
 
 QEMU is a FAST! processor emulator using dynamic translation to
@@ -52,27 +82,53 @@
 
 For user emulation, x86, PowerPC, ARM, MIPS, and Sparc32/64 CPUs are supported.
 
+@node Installation
 @chapter Installation
 
 If you want to compile QEMU yourself, see @ref{compilation}.
 
+@menu
+* install_linux::   Linux
+* install_windows:: Windows
+* install_mac::     Macintosh
+@end menu
+
+@node install_linux
 @section Linux
 
 If a precompiled package is available for your distribution - you just
 have to install it. Otherwise, see @ref{compilation}.
 
+@node install_windows
 @section Windows
 
 Download the experimental binary installer at
-@url{http://www.free.oszoo.org/download.html}.
+@url{http://www.free.oszoo.org/@/download.html}.
 
+@node install_mac
 @section Mac OS X
 
 Download the experimental binary installer at
-@url{http://www.free.oszoo.org/download.html}.
+@url{http://www.free.oszoo.org/@/download.html}.
 
+@node QEMU PC System emulator
 @chapter QEMU PC System emulator
 
+@menu
+* pcsys_introduction:: Introduction
+* pcsys_quickstart::   Quick Start
+* sec_invocation::     Invocation
+* pcsys_keys::         Keys
+* pcsys_monitor::      QEMU Monitor
+* disk_images::        Disk Images
+* pcsys_network::      Network emulation
+* direct_linux_boot::  Direct Linux Boot
+* pcsys_usb::          USB emulation
+* gdb_usage::          GDB usage
+* pcsys_os_specific::  Target OS specific information
+@end menu
+
+@node pcsys_introduction
 @section Introduction
 
 @c man begin DESCRIPTION
@@ -118,6 +174,7 @@
 
 @c man end
 
+@node pcsys_quickstart
 @section Quick Start
 
 Download and uncompress the linux image (@file{linux.img}) and type:
@@ -147,14 +204,14 @@
 
 @item -fda file
 @item -fdb file
-Use @var{file} as floppy disk 0/1 image (@xref{disk_images}). You can
+Use @var{file} as floppy disk 0/1 image (@pxref{disk_images}). You can
 use the host floppy by using @file{/dev/fd0} as filename.
 
 @item -hda file
 @item -hdb file
 @item -hdc file
 @item -hdd file
-Use @var{file} as hard disk 0, 1, 2 or 3 image (@xref{disk_images}).
+Use @var{file} as hard disk 0, 1, 2 or 3 image (@pxref{disk_images}).
 
 @item -cdrom file
 Use @var{file} as CD-ROM image (you cannot use @option{-hdc} and and
@@ -168,7 +225,7 @@
 @item -snapshot
 Write to temporary files instead of disk image files. In this case,
 the raw disk image you use is not written back. You can however force
-the write back by pressing @key{C-a s} (@xref{disk_images}). 
+the write back by pressing @key{C-a s} (@pxref{disk_images}). 
 
 @item -m megs
 Set virtual RAM size to @var{megs} megabytes. Default is 128 MB.
@@ -304,9 +361,12 @@
 Example:
 @example
 # launch a first QEMU instance
-qemu linux.img -net nic,macaddr=52:54:00:12:34:56 -net socket,listen=:1234
-# connect the VLAN 0 of this instance to the VLAN 0 of the first instance
-qemu linux.img -net nic,macaddr=52:54:00:12:34:57 -net socket,connect=127.0.0.1:1234
+qemu linux.img -net nic,macaddr=52:54:00:12:34:56 \
+               -net socket,listen=:1234
+# connect the VLAN 0 of this instance to the VLAN 0
+# of the first instance
+qemu linux.img -net nic,macaddr=52:54:00:12:34:57 \
+               -net socket,connect=127.0.0.1:1234
 @end example
 
 @item -net socket[,vlan=n][,fd=h][,mcast=maddr:port]
@@ -328,17 +388,22 @@
 Example:
 @example
 # launch one QEMU instance
-qemu linux.img -net nic,macaddr=52:54:00:12:34:56 -net socket,mcast=230.0.0.1:1234
+qemu linux.img -net nic,macaddr=52:54:00:12:34:56 \
+               -net socket,mcast=230.0.0.1:1234
 # launch another QEMU instance on same "bus"
-qemu linux.img -net nic,macaddr=52:54:00:12:34:57 -net socket,mcast=230.0.0.1:1234
+qemu linux.img -net nic,macaddr=52:54:00:12:34:57 \
+               -net socket,mcast=230.0.0.1:1234
 # launch yet another QEMU instance on same "bus"
-qemu linux.img -net nic,macaddr=52:54:00:12:34:58 -net socket,mcast=230.0.0.1:1234
+qemu linux.img -net nic,macaddr=52:54:00:12:34:58 \
+               -net socket,mcast=230.0.0.1:1234
 @end example
 
 Example (User Mode Linux compat.):
 @example
-# launch QEMU instance (note mcast address selected is UML's default)
-qemu linux.img -net nic,macaddr=52:54:00:12:34:56 -net socket,mcast=239.192.168.1:1102
+# launch QEMU instance (note mcast address selected
+# is UML's default)
+qemu linux.img -net nic,macaddr=52:54:00:12:34:56 \
+               -net socket,mcast=239.192.168.1:1102
 # launch UML
 /path/to/linux ubd0=/path/to/root_fs eth0=mcast
 @end example
@@ -471,7 +536,7 @@
 non graphical mode.
 
 @item -s
-Wait gdb connection to port 1234 (@xref{gdb_usage}). 
+Wait gdb connection to port 1234 (@pxref{gdb_usage}). 
 @item -p port
 Change gdb connection port.
 @item -S
@@ -494,6 +559,7 @@
 
 @c man end
 
+@node pcsys_keys
 @section Keys
 
 @c man begin OPTIONS
@@ -542,9 +608,6 @@
 
 @ignore
 
-@setfilename qemu 
-@settitle QEMU System Emulator
-
 @c man begin SEEALSO
 The HTML documentation of QEMU for more precise information and Linux
 user mode emulator invocation.
@@ -556,8 +619,7 @@
 
 @end ignore
 
-@end ignore
-
+@node pcsys_monitor
 @section QEMU Monitor
 
 The QEMU monitor is used to give complex commands to the QEMU
@@ -683,7 +745,7 @@
 
 @item
 Dump 80 16 bit values at the start of the video memory.
-@example 
+@smallexample 
 (qemu) xp/80hx 0xb8000
 0x000b8000: 0x0b50 0x0b6c 0x0b65 0x0b78 0x0b38 0x0b36 0x0b2f 0x0b42
 0x000b8010: 0x0b6f 0x0b63 0x0b68 0x0b73 0x0b20 0x0b56 0x0b47 0x0b41
@@ -695,7 +757,7 @@
 0x000b8070: 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720
 0x000b8080: 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720
 0x000b8090: 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720 0x0720
-@end example
+@end smallexample
 @end itemize
 
 @item p or print/fmt expr
@@ -746,6 +808,14 @@
 growable disk images (their size increase as non empty sectors are
 written), compressed and encrypted disk images.
 
+@menu
+* disk_images_quickstart::    Quick start for disk image creation
+* disk_images_snapshot_mode:: Snapshot mode
+* qemu_img_invocation::       qemu-img Invocation
+* disk_images_fat_images::    Virtual FAT disk images
+@end menu
+
+@node disk_images_quickstart
 @subsection Quick start for disk image creation
 
 You can create a disk image with the command:
@@ -756,8 +826,9 @@
 size in kilobytes. You can add an @code{M} suffix to give the size in
 megabytes and a @code{G} suffix for gigabytes.
 
-@xref{qemu_img_invocation} for more information.
+See @ref{qemu_img_invocation} for more information.
 
+@node disk_images_snapshot_mode
 @subsection Snapshot mode
 
 If you use the option @option{-snapshot}, all disk images are
@@ -771,6 +842,7 @@
 
 @include qemu-img.texi
 
+@node disk_images_fat_images
 @subsection Virtual FAT disk images
 
 QEMU can automatically create a virtual FAT disk image from a
@@ -805,6 +877,7 @@
 @item write to the FAT directory on the host system while accessing it with the guest system.
 @end itemize
 
+@node pcsys_network
 @section Network emulation
 
 QEMU can simulate several networks cards (NE2000 boards on the PC
@@ -908,10 +981,10 @@
 
 @item Launch @code{qemu.sh}. You should have the following output:
 
-@example
+@smallexample
 > ./qemu.sh 
 Connected to host network interface: tun0
-Linux version 2.4.21 (bellard@@voyager.localdomain) (gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)) #5 Tue Nov 11 18:18:53 CET 2003
+Linux version 2.4.21 (bellard@@voyager.localdomain) (gcc version 3.2.2 20030222 @/(Red Hat @/Linux 3.2.2-5)) #5 Tue Nov 11 18:18:53 CET 2003
 BIOS-provided physical RAM map:
  BIOS-e801: 0000000000000000 - 000000000009f000 (usable)
  BIOS-e801: 0000000000100000 - 0000000002000000 (usable)
@@ -920,7 +993,7 @@
 zone(0): 4096 pages.
 zone(1): 4096 pages.
 zone(2): 0 pages.
-Kernel command line: root=/dev/hda sb=0x220,5,1,5 ide2=noprobe ide3=noprobe ide4=noprobe ide5=noprobe console=ttyS0
+Kernel command line: root=/dev/hda sb=0x220,5,1,5 ide2=noprobe ide3=noprobe ide4=noprobe @/ide5=noprobe console=ttyS0
 ide_setup: ide2=noprobe
 ide_setup: ide3=noprobe
 ide_setup: ide4=noprobe
@@ -929,7 +1002,7 @@
 Detected 2399.621 MHz processor.
 Console: colour EGA 80x25
 Calibrating delay loop... 4744.80 BogoMIPS
-Memory: 28872k/32768k available (1210k kernel code, 3508k reserved, 266k data, 64k init, 0k highmem)
+Memory: 28872k/32768k available (1210k kernel code, 3508k reserved, 266k data, 64k init, @/0k highmem)
 Dentry cache hash table entries: 4096 (order: 3, 32768 bytes)
 Inode cache hash table entries: 2048 (order: 2, 16384 bytes)
 Mount cache hash table entries: 512 (order: 0, 4096 bytes)
@@ -971,14 +1044,14 @@
 VFS: Mounted root (ext2 filesystem).
 Freeing unused kernel memory: 64k freed
  
-Linux version 2.4.21 (bellard@@voyager.localdomain) (gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)) #5 Tue Nov 11 18:18:53 CET 2003
+Linux version 2.4.21 (bellard@@voyager.localdomain) (gcc version 3.2.2 20030222 @/(Red Hat @/Linux 3.2.2-5)) #5 Tue Nov 11 18:18:53 CET 2003
  
 QEMU Linux test distribution (based on Redhat 9)
  
 Type 'exit' to halt the system
  
 sh-2.05b# 
-@end example
+@end smallexample
 
 @item
 Then you can play with the kernel inside the virtual serial console. You
@@ -1028,6 +1101,7 @@
 
 @end enumerate
 
+@node pcsys_usb
 @section USB emulation
 
 QEMU emulates a PCI UHCI USB controller and a 8 port USB hub connected
@@ -1111,7 +1185,8 @@
 In order to use gdb, launch qemu with the '-s' option. It will wait for a
 gdb connection:
 @example
-> qemu -s -kernel arch/i386/boot/bzImage -hda root-2.4.20.img -append "root=/dev/hda"
+> qemu -s -kernel arch/i386/boot/bzImage -hda root-2.4.20.img \
+       -append "root=/dev/hda"
 Connected to host network interface: tun0
 Waiting gdb connection on port 1234
 @end example
@@ -1143,6 +1218,7 @@
 @code{x/10i $cs*16+*eip} to dump the code at the PC position.
 @end enumerate
 
+@node pcsys_os_specific
 @section Target OS specific information
 
 @subsection Linux
@@ -1229,12 +1305,22 @@
 from @url{http://www.vmware.com/software/dosidle210.zip} to solve this
 problem.
 
+@node QEMU System emulator for non PC targets
 @chapter QEMU System emulator for non PC targets
 
 QEMU is a generic emulator and it emulates many non PC
 machines. Most of the options are similar to the PC emulator. The
 differences are mentionned in the following sections.
 
+@menu
+* QEMU PowerPC System emulator::
+* Sparc32 System emulator invocation::
+* Sparc64 System emulator invocation::
+* MIPS System emulator invocation::
+* ARM System emulator invocation::
+@end menu
+
+@node QEMU PowerPC System emulator
 @section QEMU PowerPC System emulator
 
 Use the executable @file{qemu-system-ppc} to simulate a complete PREP
@@ -1299,6 +1385,7 @@
 More information is available at
 @url{http://perso.magic.fr/l_indien/qemu-ppc/}.
 
+@node Sparc32 System emulator invocation
 @section Sparc32 System emulator invocation
 
 Use the executable @file{qemu-system-sparc} to simulate a JavaStation
@@ -1327,7 +1414,7 @@
 The number of peripherals is fixed in the architecture.
 
 QEMU uses the Proll, a PROM replacement available at
-@url{http://people.redhat.com/zaitcev/linux/}. The required
+@url{http://people.redhat.com/@/zaitcev/linux/}. The required
 QEMU-specific patches are included with the sources.
 
 A sample Linux 2.6 series kernel and ram disk image are available on
@@ -1348,6 +1435,7 @@
 
 @c man end 
 
+@node Sparc64 System emulator invocation
 @section Sparc64 System emulator invocation
 
 Use the executable @file{qemu-system-sparc64} to simulate a Sun4u machine.
@@ -1366,6 +1454,7 @@
 PC-compatible serial ports
 @end itemize
 
+@node MIPS System emulator invocation
 @section MIPS System emulator invocation
 
 Use the executable @file{qemu-system-mips} to simulate a MIPS machine.
@@ -1383,6 +1472,7 @@
 
 More information is available in the QEMU mailing-list archive.
 
+@node ARM System emulator invocation
 @section ARM System emulator invocation
 
 Use the executable @file{qemu-system-arm} to simulate a ARM
@@ -1401,8 +1491,16 @@
 A Linux 2.6 test image is available on the QEMU web site. More
 information is available in the QEMU mailing-list archive.
 
+@node QEMU Linux User space emulator 
 @chapter QEMU Linux User space emulator 
 
+@menu
+* Quick Start::
+* Wine launch::
+* Command line options::
+@end menu
+
+@node Quick Start
 @section Quick Start
 
 In order to launch a Linux process, QEMU needs the process executable
@@ -1446,11 +1544,13 @@
 
 @item The x86 version of QEMU is also included. You can try weird things such as:
 @example
-qemu-i386 /usr/local/qemu-i386/bin/qemu-i386 /usr/local/qemu-i386/bin/ls-i386
+qemu-i386 /usr/local/qemu-i386/bin/qemu-i386 \
+          /usr/local/qemu-i386/bin/ls-i386
 @end example
 
 @end itemize
 
+@node Wine launch
 @section Wine launch
 
 @itemize
@@ -1467,17 +1567,19 @@
 (@file{qemu-XXX-i386-wine.tar.gz} on the QEMU web page). 
 
 @item Configure Wine on your account. Look at the provided script
-@file{/usr/local/qemu-i386/bin/wine-conf.sh}. Your previous
+@file{/usr/local/qemu-i386/@/bin/wine-conf.sh}. Your previous
 @code{$@{HOME@}/.wine} directory is saved to @code{$@{HOME@}/.wine.org}.
 
 @item Then you can try the example @file{putty.exe}:
 
 @example
-qemu-i386 /usr/local/qemu-i386/wine/bin/wine /usr/local/qemu-i386/wine/c/Program\ Files/putty.exe
+qemu-i386 /usr/local/qemu-i386/wine/bin/wine \
+          /usr/local/qemu-i386/wine/c/Program\ Files/putty.exe
 @end example
 
 @end itemize
 
+@node Command line options
 @section Command line options
 
 @example
@@ -1505,6 +1607,14 @@
 @node compilation
 @chapter Compilation from the sources
 
+@menu
+* Linux/Unix::
+* Windows::
+* Cross compilation for Windows with Linux::
+* Mac OS X::
+@end menu
+
+@node Linux/Unix
 @section Linux/Unix
 
 @subsection Compilation
@@ -1562,6 +1672,7 @@
 variables. You must use gcc 3.x on PowerPC.
 @end example
 
+@node Windows
 @section Windows
 
 @itemize
@@ -1571,7 +1682,7 @@
 
 @item Download 
 the MinGW development library of SDL 1.2.x
-(@file{SDL-devel-1.2.x-mingw32.tar.gz}) from
+(@file{SDL-devel-1.2.x-@/mingw32.tar.gz}) from
 @url{http://www.libsdl.org}. Unpack it in a temporary place, and
 unpack the archive @file{i386-mingw32msvc.tar.gz} in the MinGW tool
 directory. Edit the @file{sdl-config} script so that it gives the
@@ -1591,6 +1702,7 @@
 
 @end itemize
 
+@node Cross compilation for Windows with Linux
 @section Cross compilation for Windows with Linux
 
 @itemize
@@ -1622,9 +1734,15 @@
 Note: Currently, Wine does not seem able to launch
 QEMU for Win32.
 
+@node Mac OS X
 @section Mac OS X
 
 The Mac OS X patches are not fully merged in QEMU, so you should look
 at the QEMU mailing list archive to have all the necessary
 information.
 
+@node Index
+@chapter Index
+@printindex cp
+
+@bye
diff --git a/qemu-tech.texi b/qemu-tech.texi
index 95d1787..77bda86 100644
--- a/qemu-tech.texi
+++ b/qemu-tech.texi
@@ -1,7 +1,12 @@
 \input texinfo @c -*- texinfo -*-
+@c %**start of header
+@setfilename qemu-tech.info
+@settitle QEMU Internals
+@exampleindent 0
+@paragraphindent 0
+@c %**end of header
 
 @iftex
-@settitle QEMU Internals
 @titlepage
 @sp 7
 @center @titlefont{QEMU Internals}
@@ -9,8 +14,32 @@
 @end titlepage
 @end iftex
 
+@ifnottex
+@node Top
+@top
+
+@menu
+* Introduction::
+* QEMU Internals::
+* Regression Tests::
+* Index::
+@end menu
+@end ifnottex
+
+@contents
+
+@node Introduction
 @chapter Introduction
 
+@menu
+* intro_features::        Features
+* intro_x86_emulation::   x86 emulation
+* intro_arm_emulation::   ARM emulation
+* intro_ppc_emulation::   PowerPC emulation
+* intro_sparc_emulation:: SPARC emulation
+@end menu
+
+@node intro_features
 @section Features
 
 QEMU is a FAST! processor emulator using a portable dynamic
@@ -43,7 +72,7 @@
 
 @item User space only or full system emulation.
 
-@item Using dynamic translation to native code for reasonnable speed.
+@item Using dynamic translation to native code for reasonable speed.
 
 @item Working on x86 and PowerPC hosts. Being tested on ARM, Sparc32, Alpha and S390.
 
@@ -65,13 +94,13 @@
 
 @item Accurate signal handling by remapping host signals to target signals. 
 @end itemize
-@end itemize
 
 QEMU full system emulation features:
 @itemize 
 @item QEMU can either use a full software MMU for maximum portability or use the host system call mmap() to simulate the target MMU.
 @end itemize
 
+@node intro_x86_emulation
 @section x86 emulation
 
 QEMU x86 target features:
@@ -110,6 +139,7 @@
 
 @end itemize
 
+@node intro_arm_emulation
 @section ARM emulation
 
 @itemize
@@ -122,6 +152,7 @@
 
 @end itemize
 
+@node intro_ppc_emulation
 @section PowerPC emulation
 
 @itemize
@@ -133,6 +164,7 @@
 
 @end itemize
 
+@node intro_sparc_emulation
 @section SPARC emulation
 
 @itemize
@@ -166,8 +198,26 @@
 
 @end itemize
 
+@node QEMU Internals
 @chapter QEMU Internals
 
+@menu
+* QEMU compared to other emulators::
+* Portable dynamic translation::
+* Register allocation::
+* Condition code optimisations::
+* CPU state optimisations::
+* Translation cache::
+* Direct block chaining::
+* Self-modifying code and translated code invalidation::
+* Exception support::
+* MMU emulation::
+* Hardware interrupts::
+* User emulation specific details::
+* Bibliography::
+@end menu
+
+@node QEMU compared to other emulators
 @section QEMU compared to other emulators
 
 Like bochs [3], QEMU emulates an x86 CPU. But QEMU is much faster than
@@ -214,6 +264,7 @@
 and potentially unsafe host drivers. Moreover, they are unable to
 provide cycle exact simulation as an emulator can.
 
+@node Portable dynamic translation
 @section Portable dynamic translation
 
 QEMU is a dynamic translator. When it first encounters a piece of code,
@@ -243,6 +294,7 @@
 To go even faster, GCC static register variables are used to keep the
 state of the virtual CPU.
 
+@node Register allocation
 @section Register allocation
 
 Since QEMU uses fixed simple instructions, no efficient register
@@ -250,6 +302,7 @@
 register, most of the virtual CPU state can be put in registers without
 doing complicated register allocation.
 
+@node Condition code optimisations
 @section Condition code optimisations
 
 Good CPU condition codes emulation (@code{EFLAGS} register on x86) is a
@@ -268,6 +321,7 @@
 the condition codes are not needed by the next instructions, no
 condition codes are computed at all.
 
+@node CPU state optimisations
 @section CPU state optimisations
 
 The x86 CPU has many internal states which change the way it evaluates
@@ -279,6 +333,7 @@
 
 [The FPU stack pointer register is not handled that way yet].
 
+@node Translation cache
 @section Translation cache
 
 A 16 MByte cache holds the most recently used translations. For
@@ -287,6 +342,7 @@
 terminated by a jump or by a virtual CPU state change which the
 translator cannot deduce statically).
 
+@node Direct block chaining
 @section Direct block chaining
 
 After each translated basic block is executed, QEMU uses the simulated
@@ -302,6 +358,7 @@
 architectures (such as x86 or PowerPC), the @code{JUMP} opcode is
 directly patched so that the block chaining has no overhead.
 
+@node Self-modifying code and translated code invalidation
 @section Self-modifying code and translated code invalidation
 
 Self-modifying code is a special challenge in x86 emulation because no
@@ -332,6 +389,7 @@
 really needs to be invalidated. It avoids invalidating the code when
 only data is modified in the page.
 
+@node Exception support
 @section Exception support
 
 longjmp() is used when an exception such as division by zero is
@@ -348,6 +406,7 @@
 optimisations. It is not a big concern because the emulated code can
 still be restarted in any cases.
 
+@node MMU emulation
 @section MMU emulation
 
 For system emulation, QEMU uses the mmap() system call to emulate the
@@ -367,6 +426,7 @@
 When MMU mappings change, only the chaining of the basic blocks is
 reset (i.e. a basic block can no longer jump directly to another one).
 
+@node Hardware interrupts
 @section Hardware interrupts
 
 In order to be faster, QEMU does not check at every basic block if an
@@ -377,6 +437,7 @@
 of the CPU emulator. Then the main loop can test if the interrupt is
 pending and handle it.
 
+@node User emulation specific details
 @section User emulation specific details
 
 @subsection Linux system call translation
@@ -434,6 +495,7 @@
 shared object as the ld-linux.so ELF interpreter. That way, it can be
 relocated at load time.
 
+@node Bibliography
 @section Bibliography
 
 @table @asis
@@ -456,7 +518,7 @@
 x86 emulator on Alpha-Linux.
 
 @item [5]
-@url{http://www.usenix.org/publications/library/proceedings/usenix-nt97/full_papers/chernoff/chernoff.pdf},
+@url{http://www.usenix.org/publications/library/proceedings/usenix-nt97/@/full_papers/chernoff/chernoff.pdf},
 DIGITAL FX!32: Running 32-Bit x86 Applications on Alpha NT, by Anton
 Chernoff and Ray Hookway.
 
@@ -486,11 +548,19 @@
 
 @end table
 
+@node Regression Tests
 @chapter Regression Tests
 
 In the directory @file{tests/}, various interesting testing programs
 are available. There are used for regression testing.
 
+@menu
+* test-i386::
+* linux-test::
+* qruncom.c::
+@end menu
+
+@node test-i386
 @section @file{test-i386}
 
 This program executes most of the 16 bit and 32 bit x86 instructions and
@@ -506,12 +576,20 @@
 Various exceptions are raised to test most of the x86 user space
 exception reporting.
 
+@node linux-test
 @section @file{linux-test}
 
 This program tests various Linux system calls. It is used to verify
 that the system call parameters are correctly converted between target
 and host CPUs.
 
+@node qruncom.c
 @section @file{qruncom.c}
 
 Example of usage of @code{libqemu} to emulate a user mode i386 CPU.
+
+@node Index
+@chapter Index
+@printindex cp
+
+@bye