Protections changed to hide functions from a public interface.
All the calls in made to use the sync mechanism, or volatile accesses.
(Could do with more volatile accesses).
LynxUserInterfaceModel destructor was missing.
Completely changed ROM loading to keep as much on the MAIN thread as possible.
Simplify passing the end of line sequence around!
Rename to PaintPixelsOnHostBitmapForLynxScreenByte()
Prepare for threaded program.
- Change how screen invalidation is done:  Host will "pull" rather than emulator will "push".
- Move some code into CPP files that should have been.
- InitialiseAllArrayElementsVolatile() seemed to be needed.
- Adjusted keyboard array BACK to a volatile, and remove horrible casts
Commenting and CallMeBackToInvalidateRegions() moved into the interface to be like the other functions!
Comment out NotifyOutputTapeAvailbilityChanged code FOR NOW
Thread creation for emulation thread
Thread model
Thread WIP
Crap sound implementation.
Need to create a sound thread ideally within the library using the new function.
Need wait and signalling with no release latency.
Z80 thread:
- Send sound (initially silence) just in case it blocks.
- On release we know we have another 20ms
- Do emulation burst
- Check for suspend request.
- Loop again.
** PROOF OF CONCEPT - NO Latency re-awaken **
High res timer API used.
OnSound()
Rid of casts.  Unique ptr usage
Save snapshot - checks for tape operation.
Comments
Fix bug in fit to window: The invalidation rectangle wasn't right.