Work notes:

* drop terminal "transport"
* drop old-style config handlers
* how to handle machine parameters:
  -O machine.mera400:memory.elwro_modules ?
  -M memory.elwro_modules ?
* drop e4i/emitool sources

* reconsider terminal input buffering
* make uzfx/sp45de async?
* make winchester async
* make MX terminal working
* make MX async?
* fix MX polymorphism?
* make iotester async?
* generalize constructors?
* cchar controllers don't use parameters - generic initialization?
* generic callback registration for cchar controllers?
* ensure consistent device naming

Known issues:


Cleanups:

 * improve constructor goto fail_* usage

Code enhancements (possible):

* make libem400 an actual library?

Features (possible):

* snapshot save/restore
* deeptrace
* conditional logging?

CPU:

* review cpu cycle in context of interrupt handling

I/O:

* what is the purpose of UZDAT modification? (older crooks?)
* timing (disk latencies, serial lines, ...)
* handling no memory for io devices
* cmem
* cchar
* plix
* MULTIX:
  * terminal
  * winchester:
    * one controller for all drives (?)
    * spare sectors area (requires h/w marking sectors as bad and sector addresses)
    * formatting (and handling unformatted drive - requires h/w formatting)
    * spare area formatting (and handling of sector migration - requires h/w work)

To clarify:

* 2-cpu configuration

MERA-400 features that em400 does not emulate:

* power failure interrupts (cpu and channel)
* 2-cpu configuration:
  * interrupts
  * gil/giu instructions
  * HW functionality of bit 11 of SR
  * channel interrupt masks for 2 cpus
  * device allocations per cpu
  * multix 2cpu interrupt queue
* memory parity (itself and interrupts)
* interface:
  * as a communication bus
  * reservation
  * priorities
* MULTIX:
  * SOM protocols
