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


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

gcc frontend to patch kernel automatically:
-----------------------------------------------------------------------------
	A modified gcc could be used to patch the kernel automatically.
	It should modify the definition of __PAGE_OFFSET (or similar)
	and replace all special assembler instructions by simulator calls.


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


Use some better prefix than UMLINUX_SIM
-----------------------------------------------------------------------------
	We should use a much shorter prefix. This would improve
	readability of the original code.


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.

/* ======================================================================= */
	Documentation / Distribution
/* ======================================================================= */

Announcement:
-----------------------------------------------------------------------------
	The rock-stable Systems-release should be announced on Websites like
	sourceforge, kerneltrap, etc.


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

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


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

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

Check protection in cpu_sim:
-----------------------------------------------------------------------------
	cpu_sim simulates every possible instruction regardless wether
	we are in kernel or user mode. But we mustn't allow e.g. a "ltr"
	instruction in user mode.


Full featured cpuid emulation:
-----------------------------------------------------------------------------
	Currently, our cpuid emulations reports an APIC according to the
	system configuration (this is only a quick hack).  This could be
	improved.


Simulate virtual 8086 mode:
-----------------------------------------------------------------------------
	System calls vm86 and vm86old need support for virtual 8086 mode.


Extend and improve APIC:
-----------------------------------------------------------------------------
	Better distribution of interrupts, should be coupled with moving
	simulator componentes to extra processes (extra process for IDE, for
	NE2000, etc.).

	(Support for more than one I/O-APIC; the relevant sections in the
	 source are already marked.
	 Support for more than 8 CPUs would need "clustered" addressing mode
	 for CPUs.)


Predefined Clock Settings
-----------------------------------------------------------------------------
	The time of a FAUmachine machine should be independent from the hosting
	machine and should be defineable.


Kernel memory protection:
-----------------------------------------------------------------------------
	Kernel memory protection not working any more since huge umcore
	update.


Don't use "mode" parameter in umvga struct:
-----------------------------------------------------------------------------
	Use simulated register contents instead.


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


in/out ports should be registered:
-----------------------------------------------------------------------------
	If a hardware component doesn't exist it mustn't decode in/out
	operations. So a hardware simulator should register its in/out
	functions only if the corresponding hardware is present.


Busses should be "connected":
-----------------------------------------------------------------------------
	If any component calls host_bus_phys_read (or similar) call should
	go to any other component on the bus *but* the current bus master.

	PCI slot numbers should be assigned by "wiring" cables.


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


NE2000 controller using pipes:
-----------------------------------------------------------------------------
	Don't send messages to neighbours directly but send them to frontend
	using pipes. Frontend should distribute them.


Write floppy support similar to IDE/ETH support:
-----------------------------------------------------------------------------
	Currently the floppy needs special drivers. This driver should
	go away. Therefore simulation of floppy hardware is required.


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.


Mouse IMPS/2 support
-----------------------------------------------------------------------------
	Protocol IMPS/2 missing for mouse.


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.


Simulate some SVGA card
-----------------------------------------------------------------------------
	Using the VESA driver is slow. Simulate some SVGA card with
	some kind of accelaration (e.g. S3).


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


Improve IDE to get Bochs BIOS running
-----------------------------------------------------------------------------
	The Bochs BIOS has some IDE requirements. Get Bochs bios working.

The whole logic of the IDE *Device* has to move in a seperate process.
-----------------------------------------------------------------------------
	- Communication via SIGNALS + Shared Memory
	- Every non immidiate Command has to be processed in the IO process
	- The __SIMULATOR__ part should only consist of IDE part

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 via __SIMULATOR__ and __FRONTEND__
	  including COW.
	- make it possible to *map* pages
	- umstorage needs its own interface and maybe process to control the
	  state 

Simulate PCI IDE Controller card with busmaster functionallity
-----------------------------------------------------------------------------
	- To use more than 4 DMA based IDE controllers, implement a PCI IDE
	  Controller card with busmaster functionality

Protect LDT with read-only-pages
-----------------------------------------------------------------------------
	Protect LDT to catch LDT modifications not recognized otherwise.


Simulate USB
-----------------------------------------------------------------------------
	Simulate USB controller and attached hardware.


Simulate PCMCIA
-----------------------------------------------------------------------------
	Simulate PCMCIA controller and attached hardware.


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

/* ======================================================================= */
	Expect
/* ======================================================================= */

Add more error checking for expect:
-----------------------------------------------------------------------------
	more name checking in creating visible object for VHDL
	descriptions, so that less errors are reported at runtime


Implement real VHDL type handling
-----------------------------------------------------------------------------
	currently expect does not *much* type checking.
	Enumerators are not implemented. Thus, using identifiers in
	enumeration types does not work.


Improve pattern matching
-----------------------------------------------------------------------------
	We should be able to match "Menu", "Buttons", ... and not
	images.


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.


Use a single configuration file for each machine
-----------------------------------------------------------------------------
	Use a single configuration file for each machine instead of
	several different files for memory, keyboard, ethernet, ...


Keycode problem:
-----------------------------------------------------------------------------
	Keyboard simulation is good for "us" layout of Linux node. It
	doesn't work well for other layouts (e.g. German) and other
	operating systems (like Sun/Solaris)


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
/* ======================================================================= */

BIOS should check and report hardware present:
-----------------------------------------------------------------------------
	Real BIOS check and report hardware present before booting.
	Would be nice for configuration checking.


Support BIOS setup:
-----------------------------------------------------------------------------
	Use BIOS EEPROM to store boot device etc.


RTC should contain BIOS config:
-----------------------------------------------------------------------------
	The RAM of the RTC is used to store information about harddisks, etc.
	The UMBIOS should store the apropriate information there.


BIOS should be able to talk to serial interface
-----------------------------------------------------------------------------
	 It would be _very_ nice to have a BIOS being able to talk to
	 VGA and/or serial interface.

/* ======================================================================= */
	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 ...
	...


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...


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.


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.


Speed control:
-----------------------------------------------------------------------------
	We should be able to restrict simulation speed to get correct
	*relative* speeds of different hosts.
	Use "getrusage" to get instruction cycles used so far.


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.

To be extended...
