Graphics

- Look into more selective XPutImage(). Obviously, it's not
  smart enough. Try playing Galaxians in scale 2.

- Change the zoom factor dynamically with hot keys.

- Change the zoom factor by resizing the window.

- Implement 60 Hz ?

- Should use some form of dithering on 1 BPP displays.

- Implement pixel quadrupling (-z4).


Keyboard

- Automate the key mapping documentation. Make it configurable.

- Decouple the virtual keyboard from the host keyboard;
  manipulate the virtual keyboard in different ways. For
  instance, switch the debugging mode. From there, switch to
  virtual keyboard display. Change the state of a key, and do
  "cont" in the debugger.

- Implement ASCII keyboard mode.

- Switch auto-repeat off.
  Switch it back on when losing focus.


Debugger

- Debugger displays :
  - disassembly of the PC,
  - 6502: pc=xxxx p=xxxxxxxx s=xx a=xx x=xx y=xx
  - VIA: 16 registers (some as xx, some as xxxx)
  - PSG: 14 registers or so
  - ULA: line, column, sync, hires
  - others: FDC, ACIA registers.

  A 320x240 window contains a 240x224 window with 16 pixels at
  the bottom and 80 pixels on the right. 80x240 pixels is 10x30
  characters (8x8 cells) or 13x30 characters (6x8 cells).

  Have a memory map where reads, writes and execution are shown.
  The map would be a 256x256 pixel bitmap where each pixel
  represents a byte. The colour of the pixel shows the activity
  on that byte. The red component is for writes, the green
  component is for reads, the blue component is for execution.
  The value of each component is proportional to the number of
  times the action was performed on that address during the time
  slice.

  It's also possible to distinguish accesses by the system (the
  PC at the time of the access was between C000h and FFFFh) from
  accesses by the applications (the PC was below C000h).
  Accesses by the ULA could also be shown or hidden.

- Stop. Next press executes one frame.
  Stop. Next press executes one instruction
  Stop. Next press executes one cycle
  Restart
  Execute till next frame change


Sound

- New scheme to get better sound :

  1. Calculate 19968 cycles of CPU and sound

  2. Wait until the last 19968 s of PCM audio are written 

  3. Write the next 19968 s of PCM audio (non blocking)

  4. If XPutImage() is done, render and emit new XPutImage().
     Else just skip a frame.

  5. Go to 1

  The time resolution of the 8912 is 16 s (62.5 kHz).
  That's
    1.41723356009070250000 frames at 44.1 kHz
    1.30208333333333312500 frames at 48 kHz


Misc.

- Maybe regenerate the man pages during ./configure. Hmm...

- Test on OpenBSD, UnixWare, SCO, OpenUnix and Solaris x86.

- Don't add -Wall if cc is not GCC.

- Have a way to drive the emulator by program (make it execute
  Oric and emulator commands). Perhaps by listening on a Unix
  socket ?

- Include stuff from later Linux versions.

- Include stuff from the DOS version, like the debugger.

- Telestrat : JD has mumbled something about rom files to include...

- Telestrat : the behaviour when 6551 emulation is disabled
  might or might not be right. I think that reads should return
  nothing (data set not ready), and writes should go to the bit
  bucket.

- 6651 : The way to disable 6551 emulation is unfortunate
  ("none"). The empty string would be a better choice. Is there
  a way to use the device files instead of the bare metal ? At
  least don't hard-code 3F8h and 2F8h.

- Proper timing (19968 s, not 20000).

- Restore joystick routines.

- Pravetz 8D.

- Config file parsing : sanitise.

- There's room for improvement in the way printer emulation is handled
  (confusing/wrong error messages, gratuitous creation of printer.out).

- Quand tu bootes avec un dsk: tu changes le disk, puis tu refais un DIR
  dans sedoric, c'est toujours le catalogue du premier disque qui
  s'affiche... (JD around 0.17.0)

- La partie jasmin ne marche pas du tout. a ne veut pas booter, et si
  on essaye de changer de disk jasmin, xeuphoric plante. (JD 0.18.0)

- Config: make it possible to cancel with [esc].

- Config: replace the system("ls -al") crap by readdir()/stat() calls.

- "xeuphoric -t -d stratsed.dsk" boote un atmos+microdisk au lieu d'un
  tlstrat. (JD 0.18.0).

- "xeuphoric stratsed.dsk" boote le dsk sans l'option -d, peut-etre que
  c'est voulu ici ? (JD 0.18.0).

- Cutting : use the left mouse button to draw a box as in xterm. Use the
  right button to extend the box. If in text mode, the box is not
  necessarily a rectangle. It's shown by using either inverse video, or
  alternate colours. PRIMARY is a C string, filled with the contents of
  the video RAM, ignoring attributes and replacing the trailing spaces
  by a '\n'. If in hires mode, the box is always a rectangle. Its format
  is to be determined (Pixmap ? Xpm ? P3 ppm ?).

  Whether we're in hires or text is determined in the following
  fashion : if none of the pixels in all the 6x8 blocks touched by the
  box were drawn in hires mode, we're in text mode. In other words, text
  mode is used iff the box is 100% text.

- Pasting : the middle mouse button pastes the contents of PRIMARY.
  Always done as text. We could either (a) plug into the ROM "getc"
  routine, or (b) simulate keyboard input. The shortcoming of (a) is
  that it's dependent on the ROM. The shortcoming of (b) is that you
  have to know the ROM keymap.

  Printable ASCII characters (20h-7Eh) are mapped one-to-one (which
  means that ` will become , _ will become  and ~ will become a
  grey block). Printable ISO-8859-1 characters are either ignored or
  converted to the nearest equivalent ASCII character (E.G.  -> a,  ->
  `,  -> _).

  For convenience, it's probably best to swap 0Ah and 0Dh, E.G. map 0Ah
  to 0Dh/[return] and map 0Dh to 0Ah/[down]. Thus we're able cut and
  paste from an xterm into Xeuphoric, and to control the cursor
  movements by pasting.

  What about 08h/7Fh ? On the Oric, [del] is mapped to 7Fh but is really
  backspace. There's no [backspace] key. [ctrl][h] is indistinguishable
  from [left] and is not destructive but just moves the cursor. Is
  PRIMARY likely to contain 08h or 7Fh ? What are they likely to mean ?

  [ctrl][i] is indistinguishable from [right] and is not destructive,
  just moves the cursor.  There's no [tab] key. There's no concept of
  TAB : printing 09h just moves the cursor. Is PRIMARY likely to contain
  09h ? What is it likely to mean ?

  Other ASCII control characters are mapped to themselves ?

  ISO-8859 control characters (80h-9Fh) are ignored ?

