This is a list of things that need to be done
---------------------------------------------

Keyboard and joysticks:

* map host joysticks to Atari ports in the emulation core in order to make
  the configuration available in UI and config file

* pass the state of all host keys to the emulation core in order to configure
  keysticks in UI and config file

* standardize key mappings in all ports (making host and Atari layouts
  available everywhere)

* emulate POKEY keyboard scanning (with optional debouncing)

Emulation core:

* cycle-exact POKEY interrupts (timers, serial I/O, keyboard)

* precisely emulate serial I/O rates

* emulate POKEY reset

* more accurate frame rates (for example 49.8607456 instead of 50 Hz in PAL)

* deinterlace: display average pixels of two last Atari frames

* copy-protected disk images (VAPI, ATP, PRO, copy-protected ATR)

Sound:

* get rid of VOL_ONLY_SOUND

* correctly emulate serial I/O sound

* merge POKEY sound engines

* POKEY sound should NOT be asynchronous to the rest of the emulation
  (for example, the contents of the generated WAVs should not depend
  on the speed of the emulation)

* include sound settings in the emulation core (command line options,
  config file, UI) and make it possible to change them at runtime

* support WAV files in configurations with no live sound

* an option to auto-enable stereo when an Atari program uses it

* Covox

* quadro POKEY

User Interface:

* if UI fileselector cannot open a folder either user should be alerted
  or the fileselector should open another folder and not sit there quietly
  like if it was ignoring the user completely

* make sure all command-line options are available in UI and config file

* error messages should appear on screen and not in the log

Clean up:

* clean up the "util" directory - remove obsolete files, write one-file
  documentation for all utils

* make documentation consistent across systems, maybe using templates

* further clean up in the directory structure - port specific files should
  be hidden in their subfolders (falcon, amiga, ..)

Speed optimizations:

* use a boolean variable to disable 6502 history tracking and breakpoints
  (even with MONITOR_BREAKPOINTS and MONITOR_TRACE it should be
  faster than currently with just the default MONITOR_BREAK)

* use function pointer table for hardware registers (like PAGED_ATTRIB does)

* optimize the new POKEY sound engine

* emulate 6502 during vertical blank in a single GO() call

* prefer int to UWORD and UBYTE (especially in cpu.c)

* try merging N and Z flags into one variable

* try putting the C flag as the 8th bit of the A variable

* use patches for common routines such as OS interrupt handlers

* make some hardware registers directly available in memory[]

* write versions of draw_antic_* functions for the common case when there are
  no sprites in the current scanline

* update color lookup tables only when color registers change

* put 6502 flags into local variables so they can be put in registers

* automatic framedrop

* boost memory bank switching by using hardware paging on systems
  that support it (for example, use mmap() on Linux)

* implement Dirty Spans (see HOWTO-DIRTYSPAN)

* think about using MMX and SSE (for display and sound probably)

* think about optimizations for the more and more common 64-bit CPUs so we
  can reach 256 times Atari speed sooner ;-)

R: device:

* clean up and comment the code

* improve portability

* documentation

* automatic test (similar to hdevtest.lst for H:)

* identify security problems

* TCP port should be configurable (currently hardwired to 9000). The switch
  between real serial port and TCP port should be put there. Something
  along the following lines:
  R_SERIAL = 1
  R_SERPORT = /dev/ttyS0
  R_NETPORT = 9000
