LP20 upgrades & bugfixes

Per the prints, the page counter == zero bit does not reset when the counter increments thru zero.  The condition is latched until the page counter register is written.  Make the simulator match.

Correct <CR> so it sets the column counter to zero.

Implement optical (paper tape) VFU.  Includes ability to read an ASCII VFU file.

Provide a command to format and display the VFU contents (regardless of whether it came from a tape or the host).

Handle VFU loads that use more than one DMA.

Handle aborted VFU loads.

Add buffer flush on idle to make it possible to look at output without detach/attach.

Track printer LPI (can be set by a DAVFU file as well as by a SET LP20 LPI command) so DAVFU min length can be enforced.

Add help and description.

Handle paper motion that crosses more than one TOF.

Use SET_INT and CLR_INT macros for interrupt requests so the device can be used on non -10s.

Make sure the VFU is marked "empty" at initialization so the spooler knows to do an initial load.

Add VFU status to show LP20.

Properly report when a VFU channel is selected that has no stop bit.

Advance the VFU to TOP-OF-FORM on attach.

Added SET TOPOFFORM to enable skipping to the top of an output page, like the switch on real printers.

SET CLEARVFU clears translation ram too.

Implement translation RAM 'parity' so OS detects use of uninitialized RAM.  Implemented as a 'VALID' bit internally as it's faster in the common case, and parity in simulator memory is not necessary.  For uninitialized memory, odd parity on 0 is equivalent.  Reading the ram will produce correct parity for the actual data; this is not a common operation.  Note that examine from the simulator will reflect VALID, not parity semantics.
KS10 timer/timbase fixes.

Fix RDTIME to return <60:69> (Yes, <70:71> RAZ)
Fix WRTIME to clear LSB.

Use WRINT to calculate service intervals, removing most magic constants.

Properly account for interval when WRINT changes it.

Remove unused microcode artifact (tim_ttg)

Document hardware

Document emulator assumptions.

Use static where possible to reduce namespace pollution and enable optimizations.
Revert mstring/pstring changes.

The original changes were the result of confusing documentation, and turn out to be wrong.

KMC will be fixed another way.