Visions for the future... ;-)
---------------------------


/* ======================================================================= */
	Building and Testing
/* ======================================================================= */

Check much more distributions:
-----------------------------------------------------------------------------
	We should test many more distributions...


Use EDIF file (or similar) to generate bus/chip structures.
-----------------------------------------------------------------------------
	Create all busses and chips according to an EDIF/EAGLE/... file.
	Depending on the simulation details needed this can result in
	*one* big *.c file with only "inline" functions inside.


/* ======================================================================= */
	Bridges
/* ======================================================================= */

Use real hardware under FAUmachine (bridges):
-----------------------------------------------------------------------------
	- network adapter (TAP device?)
	- disks
	- modem
	- USB
	- ...


FAUmachine as sniffer:
-----------------------------------------------------------------------------
	- ethernet
	- parallel port
	- serial port
	- USB
	- ...

/* ======================================================================= */
	Simulator
/* ======================================================================= */

Improved behaviour description for CPU:
-----------------------------------------------------------------------------
	Use some kind of behaviour description for the CPU.
	Use this description for interpreter code, JIT, ...


Simulate enough to get DDC work:
-----------------------------------------------------------------------------
	Most Linux distributions try to figure out what monitor is
	present using DDC. Support it.


Debugger register db0-db7:
-----------------------------------------------------------------------------
	Tracer should use CPU structure to enable debugging using
	registers db0 to db7. Currently only single stepping is supported.


Merge all mapped memory blocks:
-----------------------------------------------------------------------------
	Use "io_malloc" to allocate memory for simulation.
	Use "cpu_malloc" for CPU and APIC simulation.


Simulate DTR/DSR/CD for serial device:
-----------------------------------------------------------------------------
	DTR/DSR/CD/... might be set via inb/outb but they are not used
	during simulation.


Real-time constrains for some devices needed
-----------------------------------------------------------------------------
	E.g. keyboard driver needs some real-time features. Otherwise
	keyboard might be too fast or too slow to be detected properly.


Switch between simulation driven time and dynamic time
-----------------------------------------------------------------------------
	While doing I/O or accessing time we need simulation driven time.
	To be able to use FAUmachine as a real user we need real-time or
	dynamic time. Switch between both as needed.


Improve IDE to get CD-burner running
-----------------------------------------------------------------------------
	Some IDE commands have to be implemented to use a CD-burner.


Cache logic for IDE devices
-----------------------------------------------------------------------------
	- Implement Read/Ahead and Cache logic
	- Implement buffered write
	- Implement Flush Command


Umstorage should be similiar to memory Infrastrucutre
-----------------------------------------------------------------------------
	- make storage components available including COW.
	- make it possible to *map* pages
	- umstorage needs its own interface and maybe process to control the
	  state 


Simulate USB Devices
-----------------------------------------------------------------------------
	Simulate USB Devices like printer, scanner, ...


Use multi-level COW
-----------------------------------------------------------------------------
	Should be possible to use a COW image as basis of the next COW
	image.


Suspend and Resume Functions for Simulator
-----------------------------------------------------------------------------
	Add "suspend" and "resume" functions to simulator.

/* ======================================================================= */
	VHDL simulation / Experiments
/* ======================================================================= */

Improve pattern matching
-----------------------------------------------------------------------------
	* We should be able to match "Menu", "Buttons", ... and not
	  images.
	* Allow matching to more raster image formats, like PNG or TIF.


Speed up pattern matching
-----------------------------------------------------------------------------
	Speed up pattern recognition by generating some kind of
	automata.


Write some improved examples
-----------------------------------------------------------------------------
	Use install procedures, oracle setup etc. as good
	examples/experiments

/* ======================================================================= */
	Frontend
/* ======================================================================= */

Better checking of configuration constraints:
-----------------------------------------------------------------------------
	Currently it is possible to specify "insane" configurations (e. g. 
	15.333 Mb of memory, I/O-APIC without APICs, etc.).  These
	configurations should be caught during startup and the user should get
	a useful error message.  At the moment such configurations cause
	crashes and other strange behaviours.


Support XServer with different byte/bit ordering:
-----------------------------------------------------------------------------
	Currently the frontend is not able to run on XServers with
	byte/bit order other than LSBFirst.


/* ======================================================================= */
	BIOS
/* ======================================================================= */

Modify gcc to generate 16-bit real-mode code for BIOS/VGABIOS.
-----------------------------------------------------------------------------
	32-bit code modified by assembler for real-mode consumes too
	much space in 64 KByte ROM.


BIOS should check and report hardware present:
-----------------------------------------------------------------------------
	Real BIOS check and report hardware present before booting.
	Would be nice for configuration checking.
	Add some POST code, too.


Suspend to disk/Resume from disk:
-----------------------------------------------------------------------------
	Support APM-like suspend/restore.  This could speed up experiments, as
	boot up/shutdown could be skipped and experiments can be repeated from
	a well defined state.

/* ======================================================================= */
	Misc
/* ======================================================================= */

Write a GUI for defining hardware setups:
-----------------------------------------------------------------------------
	The system might be composed using a graphical interface.


Write a GUI for defining expect scripts:
-----------------------------------------------------------------------------
	Would be nice to generate expect scripts in a GUI.

	If next screen looks like ... then type "..."
	If button ... is visible then click at ...
	...


Write a native GUI for MacOS
-----------------------------------------------------------------------------
	Write a native GUI for MacOS (Carbon or Cocoa).


Write GUI to generate screenshots from video records:
-----------------------------------------------------------------------------
	It's easier to install a system by hand while recording a video
	and generate screenshots for "generate" scripts from that video
	than to generate screenshots step by step during installation.


Create some hardware stuff to observe/control some real hardware:
-----------------------------------------------------------------------------
	Use some kind of camera to "look" at monitor.
	Use some kind of "mouse"/"keyboard" to generate clicks/keystrokes
	by different computer.


VHDL simulator connection to in*/out*/interrupt interface:
-----------------------------------------------------------------------------
	Would be nice to simulate a new device using VHDL and to drive it
	using a new driver written in C...


Use VHDL to model chips and compile it into C code.
-----------------------------------------------------------------------------
	Would be nice to have a VHDL frontend for modelling FAUmachine
	components.


Improve performance:
-----------------------------------------------------------------------------
	- improve simulator
	- use Linux extensions


Port FAUmachine to *-Linux:
-----------------------------------------------------------------------------
	Use Alpha-Linux, Sparc-Linux as platform to run FAUmachine.


Port FAUmachine to I386-*:
-----------------------------------------------------------------------------
	Use I386-Windows, I386-*BSD, I386-Solaris as platform to
	run FAUmachine.


Fault injection for special CPU registers:
-----------------------------------------------------------------------------
	Implement fault injector for special registers like:
		db0, db1, ... db7       (Debug registers)
		seg[0] ... seg[9]       (Segment descriptors)
		tlb[0] ... tlb[NTLBS]   (TLB buffer)
		tsc                     (time stamp counter
		...


Design new start tool:
-----------------------------------------------------------------------------
	Currently launcher will not start nodes on different hosts.
	Expect uses (many) ssh connections. Both tools should make use
	of one common tool/library.

/* ======================================================================= */
	Misc
/* ======================================================================= */

FAUmachine for preservation:
-----------------------------------------------------------------------------
	Some people need old hardware for their old software.
	FAUmachine might simulate very old hardware (e.g. 8088-PCs).
	Configurable hardware needed.
	Improved BIOS (less stack consumption) needed.

FAUmachine for debugging:
-----------------------------------------------------------------------------
	Use an extended gdb for debugging. Make it possible to
	stop the whole FAUmachine setup (many PCs, VHDL-processes, ...)
	and to dump/disassemble/... the state of all components
	(CPU, memory, north/south-bridge, ...)

Improving simulation speed using PThreads:
-----------------------------------------------------------------------------
	Simulation speed might be improved to have multiple threads
	(pthread-library) simulating different CPUs, chips, disks, ...

Generate motherboard, chips, ... using VHDL descriptions:
-----------------------------------------------------------------------------
	mb_ga_686dlx.c and others could be generated using VHDL structural
	descriptions.

Generate JIT files using JIT-Compiler-Compiler
-----------------------------------------------------------------------------
	Design a JIT-Compiler-Compiler

Integrate FAUmachine into libvirt/virt-manager
-----------------------------------------------------------------------------
	libvirt can handle Xen/QEMU. It should be able to handle
	FAUmachine's configurations, too.

To be extended...
