mirror of
https://github.com/Pecusx/libretro-atari800.git
synced 2026-05-20 22:33:22 +02:00
303 lines
10 KiB
Plaintext
303 lines
10 KiB
Plaintext
Plans for future versions
|
|
=========================
|
|
|
|
Keyboard and controllers
|
|
------------------------
|
|
|
|
* 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)
|
|
|
|
* enhance support for pointing devices, including touch screens;
|
|
"directmouse" should work in more ports, support light pen/gun
|
|
and correct mirroring of pad/touch/koala
|
|
|
|
* Atari Keyboard Interface (AKI) emulation
|
|
|
|
|
|
Emulation core
|
|
--------------
|
|
|
|
* Java midlet
|
|
|
|
* cycle-exact POKEY interrupts (timers, serial I/O, keyboard)
|
|
|
|
* precisely emulate serial I/O rates
|
|
|
|
* emulate POKEY reset (via SKCTL)
|
|
|
|
* more accurate frame rates (for example 49.8607456 instead of 50 Hz in PAL)
|
|
|
|
* improve VAPI and .PRO support
|
|
|
|
* emulate POKEY SIO shift register
|
|
|
|
* emulate SIO bus lines, and SIO cable data/audio cross-talk "feep" sound
|
|
|
|
* redirection of specific Dn: devices to Hn: (for software that supports
|
|
only the D: device)
|
|
|
|
* log POKEY audio writes, SIO commands (hardware level or DCB level),
|
|
executed Display List commands, all activity to a defined range
|
|
of adressess etc. in a way similar to the 6502 trace
|
|
|
|
* log events that affect software compatibility: undocumented 6502 opcodes,
|
|
unofficial system calls (including the 5200), extended memory access
|
|
|
|
* emulate drives at the hardware level (810, 1050, XF551.) use code from other
|
|
emulators which does this. (drive rotation, FM/MFM raw bits). WDCxxxx
|
|
controller. RIOT chip. 6507. Intel 8048-line chip for the XFD551.
|
|
Use emulated SIO line for bit-banging. Emulate Drive upgrades (Happy etc.)
|
|
Emulate 3rd party drives (Rana, Karin Maxi etc.)
|
|
|
|
* sound effects. Drive retracking noise (BlueMSX has.) Motor whine.
|
|
On/off switch sound. Physical key-press sounds. Cartridge slot sounds.
|
|
Drive door sounds. Floppy rotation flap sound.
|
|
|
|
* Atari vapourware emulation. XEM (see below). 1090.
|
|
1060 CP/M (sweet-pea.)
|
|
|
|
* emulate the 850 interface at the hardware level.
|
|
|
|
* ATR-8000 emulation. ATR-8500.
|
|
Adapt an existing CPM emulator.
|
|
|
|
* 6502 BRK bug
|
|
|
|
* try to understand 6502's "unstable" opcodes (0x93, 0x9b, 0x9f) that seem
|
|
to have unpredictable (at least not easily predictable) results,
|
|
preferrably by studying 6502 schematics
|
|
|
|
* an option to emulate the variant of 6502 used in new XE machines
|
|
(which lacks most of the undocumented opcodes of the classic 6502)
|
|
|
|
* fully emulate executing 6502 code from Hardware, cycle-exact ANTIC_load
|
|
from hardware, cycle-exact PMG flickering bus data
|
|
|
|
* CPU upgrades (65816, etc)
|
|
|
|
* improve emuos so it can boot disks and executables
|
|
|
|
* create emuos for 5200
|
|
|
|
* emulate printer graphics (on screen or bitmap/PDF output): 1029, 1020, etc.
|
|
The Mac OS X port of Atari800 has lots of printer emulation routines.
|
|
|
|
* RAM Carts (cartridges with battery-powered RAM), writes to flash carts
|
|
|
|
* serial "network" interfaces (e.g. 8 Ataris connected, is it GameLink?)
|
|
|
|
* ability to play multi-player games across network
|
|
|
|
* generate hard disk images or write directly to media that the 8-bit Ataris
|
|
can use, like CompactFlash or MyIDE/SmartIDE/BB
|
|
|
|
* "Turbo" cassette upgrades (Turbo 2000 etc.)
|
|
|
|
* cassette emulation of WAV files. Load a WAV file like WAV2CAS does. Save
|
|
to a WAV file or real cassette like CAS2WAV does. Load voice-and-data
|
|
combined programmed audio tape images from WAV files. Support compressed
|
|
(lossless? lossy even?) tape sound images.
|
|
|
|
* disk auto-flip. Examine screen data for text string "Insert Side B
|
|
and press any key/fire/return." Flip disk, print on-screen message and
|
|
optionally press key. More a core feature than UI. Requires a database.
|
|
|
|
* support physical floppy media (hard, port-specific and not very useful)
|
|
|
|
* support physical Atari drives (hard, port-specific and not very useful)
|
|
|
|
* improve the event recording. Avoid cycle-exact RANDOM?
|
|
|
|
|
|
Graphics
|
|
--------
|
|
|
|
* investigate different palettes for different models such as GTIA vs CTIA
|
|
or 400/800, 1200XL, 800XL, XE, 5200, hardware modifications to the colour
|
|
circuts etc.
|
|
|
|
* SECAM palette and video emulation.
|
|
|
|
* "flicker fixer": display average pixel values of last two Atari frames
|
|
|
|
* use YUV output if available. Will it help?
|
|
|
|
* PAL emulation. VICE has it, but it's not as complete as Blargg's emulation
|
|
of NTSC. PAL luma/chroma artifacts are missing (it is like S-Video).
|
|
Blargg's optimization technique won't work so easily for PAL.
|
|
(perry: I have a hack of Blargg's slow version of the NTSC emulator that
|
|
I tried to make work for PAL. But it isn't quite right and is way too slow.
|
|
Ask me if you are interested.)
|
|
|
|
* the NTSC emulator should support other resolutions. It should be supported
|
|
in all possible ports.
|
|
|
|
* fix the remaining bugs in the NTSC emulation. Artificating colours are
|
|
not quite right. odd-even and even-odd combined artifacts (light red
|
|
and light green) do not show unless Gaussian factor is changed a lot,
|
|
which causes even worse artifacts. Fully document the Atari's video
|
|
output signal (might require a scope.) Fully document NTSC decoding
|
|
of late 70's and 80's era TVs.
|
|
|
|
* document CTIA and emulate properly. Emulate the players not aligning
|
|
with playfield bug/feature of CTIA which is said to exist. Need
|
|
at least screenshots of a CTIA Atari showing all possible artifacts.
|
|
|
|
* an option to emulate the buggy GTIA chip found in new XE machines.
|
|
|
|
* fix all remaining collision bugs in the ANTIC and GTIA code (border+scroll,
|
|
player HPOS and GRAF changes, partial_scanline changes.) Use the technique
|
|
of saving data that might generate false collisions, drawing, and then
|
|
restoring the data (pm_scanline).
|
|
|
|
* cycle-exact DMACTL and HSCROL including all glitches
|
|
|
|
* ANTIC glitch:
|
|
POKE 39974,18:POKE 39975,8:POKE 54276,15
|
|
or
|
|
POKE 39974,18:POKE 39975,40:POKE 54276,15:POKE 54277,15
|
|
|
|
* Video Board XE emulation
|
|
|
|
|
|
Sound
|
|
-----
|
|
|
|
* correctly emulate serial I/O sound
|
|
|
|
* one POKEY sound engine
|
|
|
|
* 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 emulation
|
|
|
|
* 2 POKEY mono, 4 POKEY stereo, 4 POKEY quad
|
|
|
|
* MIDI <> serial port interface. In it's simplest form there's only MIDI
|
|
output from the Atari. The more complicated version is enabled by the motor
|
|
control line and includes two MIDI outputs selected by the command control
|
|
line and one MIDI input. There is a MIDI composer program for Atari.
|
|
|
|
* A/D Converter - 4-bit sampler that returns 0xf0-0xff in the 0xd500-0xd5ff
|
|
address space.
|
|
|
|
* XEM AMY-1 Chip. This is a huge project. Schematics (netlist)
|
|
are said to exist. Prototyping software for the PC (connected to parallel
|
|
port) is available online. Datasheet is online. Need netlist for AMY-1,
|
|
schematics for XEM and any software.
|
|
|
|
* SID chip
|
|
|
|
|
|
User Interface
|
|
--------------
|
|
|
|
* make sure all command-line options are available in UI and config file
|
|
|
|
* error messages should appear on screen and not in the log
|
|
|
|
* on screen display, like a TV remote, for the NTSC (or other) screen filter.
|
|
|
|
* support pointing devices (mouse, touch screen) in UI
|
|
|
|
* a database to identify programs and choose appropriate settings.
|
|
OS version. Memory size. Memory expansion type. Peripherals.
|
|
Machine type. Joystick/Trackball/Paddle etc. controller type.
|
|
Artifacting mode. SIO patch compatibility. Even if compatible with
|
|
SIO patch, loading screen graphics are often interesting to watch, so
|
|
give the user an option to view or ignore them if present. If not
|
|
SIO patch compatible, optional warp-speed through the loading.
|
|
Keyboard layout. Advisories as to bad dump/bad image/special considerations
|
|
Provide documentation, box scan, label scan for the program
|
|
PAL/NTSC mode. Database should indicate PAL/NTSC
|
|
compatibility, and which system the program was originally designed for.
|
|
Allow PAL users to prefer PAL for NTSC-designed programs, but NTSC users
|
|
to prefer NTSC. NTSC users get PAL (or fake NTSC-upgraded-to-PAL) for
|
|
all PAL-designed programs (Except perhaps very old ones like English
|
|
Software titles that NTSC users might remember.) PAL users get NTSC
|
|
video only for artifacting programs.
|
|
|
|
|
|
Clean up
|
|
--------
|
|
|
|
* make port-specific features available in other ports - now many features
|
|
work only in SDL, Mac OS X or Win PLus
|
|
|
|
* clean up the "util" directory - remove obsolete files, write one-file
|
|
documentation for all utils
|
|
|
|
* make documentation consistent across systems (HTML?)
|
|
|
|
* 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)
|
|
|
|
* 6502 emulation optimizations: limit number of CPU_GO() calls (call ANTIC/GTIA
|
|
routines from 6502 and not vice-versa), use ints instead of UWORD and UBYTE,
|
|
merge N and Z flags into one variable, put 6502 flags into local variables
|
|
so they can be stored in registers;
|
|
see http://asap.sourceforge.net for a 6502 emulator which includes these
|
|
optimizations
|
|
|
|
* 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
|
|
|
|
* automatic framedrop
|
|
|
|
* fast bank switching (without memcpy)
|
|
|
|
* implement Dirty Spans (see HOWTO-DIRTYSPAN)
|
|
|
|
* an option to detect popular lengthy Atari decompression routines
|
|
and run equivalent C routines instead
|
|
|
|
|
|
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
|