Difference between revisions of "Todo"

From vice-emu
Jump to: navigation, search
(Monitor)
m (VIA)
 
(901 intermediate revisions by 11 users not shown)
Line 1: Line 1:
 +
 +
This is the list of known problems. also look at [https://sourceforge.net/tracker/?limit=100&func=&group_id=223021&atid=1057617&assignee=&status=4&category=&artgroup=&keyword=&submitter=&artifact_id=&assignee=&status=1&category=&artgroup=&submitter=&keyword=&artifact_id=&submit=Filter&mass_category=&mass_priority=&mass_resolution=&mass_assignee=&mass_artgroup=&mass_status=&mass_cannedresponse= Tracker: open Bugs]
 +
 +
This list always refers to the status of the last major release version, which was '''3.6'''. Items that have been fixed by the time of a major release will be removed, items fixed after that will be marked as fixed and stay until the next major version. New items will be added as noticed.
 +
 
==Prime Directive==
 
==Prime Directive==
  
* when adding/changing stuff that needs (G)UI items/changes, add a proper entry to the [[Developer_log]] to notify the UI maintainers.
+
* '''All developers shall subscribe to the [https://sourceforge.net/p/vice-emu/mailman/ vice-emu-mail mailinglist]''' and perhaps join #vice-dev on freenode too (highly recommended).
* when changing something that needs an update to text messages (and as such, the translation), add a proper entry to the [[Translator_log]] to notify the Translators.
+
* Please '''respect the [https://sourceforge.net/p/vice-emu/code/HEAD/tree/trunk/vice/doc/coding-guidelines.txt coding guidelines]'''.
* when adding/changing command-line options and/or resources, adding a new feature or change the behavior of an existing feature, '''please update the documentation''' :)
+
* '''Document your code''' so other people than you are able to understand and fix it in a decade or two.
* after fixing a bug or implementing a new feature, update its status on the [https://sourceforge.net/tracker/?limit=50&group_id=223021&atid=1057617&status=1&submit=Filter Bug Tracker] and mark it as fixed in the list below.
+
* When adding/changing stuff that needs (G)UI items/changes, '''all developers should update the SDL and GTK3 UIs themselves''', and immediately following their respective changes.
 +
* When adding/changing command-line options and/or resources, adding a new feature or change the behavior of an existing feature, '''please update the documentation'''.
 +
* After fixing a bug or implementing a new feature, '''update''' its status on '''the [https://sourceforge.net/tracker/?limit=50&group_id=223021&atid=1057617&status=1&submit=Filter Bug Tracker] and''' mark it as fixed in '''the TODO list''' below.
 +
:: Only remove a bug/feature from this list when it was fixed/implemented in the latest stable release.
 +
* And most importantly...
 +
<pre>
 +
<@_tlr> Please at least test the issue you were trying to fix before committing.
 +
</pre>
 +
: That means: '''you break it, you fix it.''' Do not commit deal breaking changes without communicating it with the rest of the team. '''Generally regressions are not acceptable and respective commits are subject to be reverted.'''
 +
 
 +
==Code cleanup and streamlining==
 +
 
 +
As of 3.2 we started removing a lot of the old cruft, that was dangling around in the tree for way too long, to make maintenance easier
  
----
+
* remove compiler- and platform- specific hacks (IFDEFS) in common code
 +
$ ./src/findhacks.sh ccarchdep
 +
$ ./src/findhacks.sh archdep
 +
 
 +
* remove the third scaling method described in [[Scaling_cleanup]] (formerly used by XAW) (fixed?)
 +
* revisit the old [[Feature checking]] pages, and clear it out eventually
 +
** [[Resource_and_Cmdline_checking]] - Tracks and documents all Resources and Command line options
  
==Known Issues==
+
* '''TODO''': get rid of fullscreenarch.h and fullscreen.c - its no more required because both SDL and GTK3 can do all of the features fine. (fixed?)
 +
* replace readline and our fallback implementation with linenoise (https://github.com/antirez/linenoise), or perhaps linenoise-ng (https://github.com/arangodb/linenoise-ng) which appears to support Windows and UTF-8. (fixed?)
  
This is the list of known problems. also look at [https://sourceforge.net/tracker/?limit=100&func=&group_id=223021&atid=1057617&assignee=&status=4&category=&artgroup=&keyword=&submitter=&artifact_id=&assignee=&status=1&category=&artgroup=&submitter=&keyword=&artifact_id=&submit=Filter&mass_category=&mass_priority=&mass_resolution=&mass_assignee=&mass_artgroup=&mass_status=&mass_cannedresponse= Tracker: open Bugs]
+
* '''TODO''': Remove the 'dither' column from the palette files and update the code accordingly.
  
This list always refers to the status of the last major release version, which was '''2.4'''. Items that have been fixed by the time of a major release will be removed, items fixed after that will be marked as fixed and stay until the next major version. New items will be added as noticed.
+
==Build system==
  
----
+
==Documentation==
 +
===Technical===
 +
* many nodes are not yet linked correctly, which makes some of the exporters output garbled and/or suboptimal output (unix .info).
  
===Documentation===
+
: '''Workaround:''' use the .html or .pdf documentation, which is exported correctly.
====Technical====
 
* many nodes are not yet linked correctly, which makes some of the exporters output garbled and/or suboptimal output (windows .hlp, unix .info).
 
  
'''Workaround:''' use the .html or .pdf documentation, which is exported correctly.
+
===Content===
====Content====
 
 
The documentation is partly outdated and/or incomplete, in particular:
 
The documentation is partly outdated and/or incomplete, in particular:
 +
 +
* some info that was previously hidden in target specific articles on the VICE knowledge base should get merged into vice.texi - the remaining articles are [[VICEKB|here]]
 
* some descriptions of emulator formats are missing (D67, D1M, D2M, D4M...)
 
* some descriptions of emulator formats are missing (D67, D1M, D2M, D4M...)
 
* descriptions of several snapshot modules are missing (Plus4, TED...)
 
* descriptions of several snapshot modules are missing (Plus4, TED...)
 +
 
for details look at doc/Documentation-Howto.txt
 
for details look at doc/Documentation-Howto.txt
 +
 +
==Testbench==
 +
 +
* many test programs (mostly for vic20) are not yet integrated into the automatic testing
 +
* '''TODO''': fix the reference screenshots and/or the scripts so they dont rely on the "normal" rendering mode anymore
 +
* '''TODO''': make a test program to determine visible screen dimensions
 +
* '''TODO''': make a test program to determine the type of delay line used for a PAL screen (UV or U only)
 +
=== autostart problems ===
 +
 +
* autostart seems to be broken in xcbm2 and xcbm5x0 at least with the settings the testbench wants to use
 +
* xplus4 gives "sound buffer overrun" on autostart with certain settings (which settings?)
 +
* x128 does not autostart prg files correctly when also a cartridge is attached (that forces c64 mode)
 +
 +
==Emulators==
  
 
===Subsystems===
 
===Subsystems===
Line 33: Line 73:
 
* When a key which is shifted on the real machine but unshifted on the PC or Unix keyboard you are using is pressed, the virtual shift is pressed together (i.e. at the same clock cycle) with the main key; this could not work with some keyboard routines.
 
* When a key which is shifted on the real machine but unshifted on the PC or Unix keyboard you are using is pressed, the virtual shift is pressed together (i.e. at the same clock cycle) with the main key; this could not work with some keyboard routines.
  
note: also see this knowledgebase article: http://vicekb.trikaliotis.net/20-006
+
: note: also see [[VICEKB#20-006|this knowledgebase article]]
  
'''Workaround''': If you have to use the function keys, press the (real) shift key manually (e.g. F2 = Shift + F1, F4 = Shift + F3 and so on); this also works with other keys.
+
: '''Workaround''': If you have to use the function keys, press the (real) shift key manually (e.g. F2 = Shift + F1, F4 = Shift + F3 and so on); this also works with other keys.
  
* Some ports do not have all required keymaps, and the general logic of the keymap resources / commandline options seems inconsistant. (one resource/option per keyboard on the emulated machine, not per keyboard/language combo! -  eg -symdekeymap for c64 and associated resource should get removed) also perhaps related: https://sourceforge.net/tracker/?func=detail&aid=3127784&group_id=223021&atid=1057617
+
* <s>When typing very quickly, some keypresses might get lost. This comes from the fact that the keyboard is (and can not) be scanned in real time (ie every 1mhz cycle). Even if we could remove the per frame scanning from the emulator itself, the operating system and last not least the keyboard itself would still impose a certain limit (something like 10ms for USB HID keyboards, for example). That means if a key is pressed and released within that timespan, the emulator does (and can not) know about it.
** for some ideas of how this could be solved look here: [[Keymaps]]
+
 
 +
: '''Workaround''': the only workaround is to type slower, it cant be fixed.</s> -- dqh: I believe this problem is basically resolved
 +
 
 +
* Some ports/emulators/keyboard-types do not have all required keymaps (and a fallback will used) - look at [[Keymaps]] for details
  
 
* Although "shift lock" can be mapped to a key, not all ports and/or emulators support it due to missing keymaps and/or implementation details.
 
* Although "shift lock" can be mapped to a key, not all ports and/or emulators support it due to missing keymaps and/or implementation details.
 +
: '''TODO''': check ports and fix or at least add a comment in the keymaps
 +
 +
* contact-bounce is not emulated
 +
: '''TODO''': make a proper test program
  
 
====Joystick====
 
====Joystick====
  
* currently VICE interprets all buttons of a connected joystick as fire button ( https://sourceforge.net/tracker/?func=detail&aid=3292139&group_id=223021&atid=1057620 )
+
* in the gtk3 port VICE currently interprets all buttons of a connected joystick as fire button ( https://sourceforge.net/tracker/?func=detail&aid=3292139&group_id=223021&atid=1057620 )
 +
* in the gtk3 port the 2nd button of C64GS joystick currently only works via keyboard, not real (USB) joysticks
 +
* contact-bounce is not emulated
 +
: '''TODO''': make a proper test program
 +
* when selecting "swap joysticks" or "swap userport joysticks" this will actually swap the related resources, which may be surprising when saving settings and loading them later. it also means its impossible to display whether they are swapped or not in the UI.
 +
: '''TODO''': create a "JoysticksAreSwapped" resource, and update the code accordingly. (This is partially solved in the Gtk3 UI by using two internal states, one for controlports and one for userport, and reflecting the state in the menu with checkboxes)
 +
 
 +
====Joystick port devices====
 +
 
 +
* Paperclip 64 dongle emulation is broken
 +
* Gun Stick lightpen emulation is not working (and disabled, unless experimental devices are enabled in joyport.h)
 +
* add a monitor command to control the value of the 'I/O simulation device', something like jpdb <port> <value>
 +
  The monitor command would call:
 +
  joyport_io_sim_set_ddr_lines(0xff, port);  /* Set data direction to output for all joystick lines */
 +
  joyport_io_sim_set_out_lines(value, port);
 +
 
 +
  ports 1&2 for x64/x64sc/xscpu64/x128/x64dtv/xcbm5x0
 +
  port 1 for xvic
 +
  ports 1&2&6 for xplus4
 +
* Add gtk3 ui support for the host joystick mapping system.
 +
  joyport_map_desc_t *mappings = joyport_get_mapping(port);  /* get the mappings for the given port */
 +
  char *port_name = joyport_get_port_name(port);              /* get the name of the emulated port */
 +
  if (joyport_has_mapping(port)) {                            /* only if the given port has a device that has pins to map */
 +
      char *emulated_joystick_device_name = mappings->name;  /* get the name of the emulated device in the given port */
 +
      if (mappings->pinmap != NULL) {                        /* only if the device has pin (digital line) mappings */
 +
          for (int i = 0; mappings->pinmap[i].name; i++) {    /* go through all the pin mappings, if mapping pin name is NULL then we have reached the end */
 +
              char *pin_name = mappings->pinmap[i].name;      /* get the pin name */
 +
              int pin_nr = mappings->pinmap[i].pin;          /* get the pin number */
 +
              ...                                            /* build host joystick direction/button dialog based on the above info */
 +
          }
 +
      }
 +
      if (mappings->potmap != NULL) {                        /* only if the device has pot (analog line) mappings */
 +
          for (int i = 0; mappings->potmap[i].name; i++) {    /* go through all the pot mappings, if mapping pot name is NULL then we have reached the end */
 +
              char *pin_name = mappings->potmap[i].name;      /* get the pot name */
 +
              int pin_nr = mappings->potmap[i].pin;          /* get the pot number */
 +
              ...                                            /* build host joystick analog axis dialog based on the above info */
 +
          }
 +
      }
 +
  }
 +
 
 +
====Userport devices====
 +
 
 +
* diag 586220 harness  emulation is not working (and disabled, unless experimental devices are enabled in userport.h)
 +
 
 +
====Tapeport devices====
 +
 
 +
* diag 586220 harness  emulation is not working (and disabled, unless experimental devices are enabled in tapeport.h)
 +
 
 +
====Commandline====
 +
 
 +
* some options where the available parameters depend on the machine type lack proper descriptions (-drivetype)
 +
 
 +
====Resources====
 +
 
 +
* It's unclear what the "event_relevant" member of resources actually means, and what the difference between RES_EVENT_SAME and RES_EVENT_STRICT is. This needs to documented and then probably a lot of resources fixed to use the correct values.
  
 
====Monitor====
 
====Monitor====
  
* When loading a snapshot, the monitor break/watchpoints break.
+
* Breakpoints/watchpoints should consider banks.
 +
* <s>When loading a snapshot, the monitor break/watchpoints break.</s>
 +
 
 +
===== Binary Interface =====
 +
 
 +
The binary interface has a few design issues that should be fixed
 +
 
 +
* <s>Command 0x72 (feed Keyboard) expects "text" and special chars escaped with backslashes. This is not very binary, it should instead work with plain binary petscii codes.</s>
 +
* Command 0x84 (get display) has several issues:
 +
** The first parameter should probably not be a boolean ("is this VICII?"), but "videochip number", with 0 being VICII and 1 being VDC on C128. Further Videochips could be added then (eg if we ever implement the BTX cartridge). Perhaps for compatibility reasons we start counting at 1, and make "0" a special parameter for "current one" '''I'm not sure what to do with this so I'm leaving it alone for the time being.'''
 +
** <s>The format of the response should be always 8bit indexed colors. No RGB, No Targa (or whatever else) image headers. Perhaps for compatibility reasons we keep this one and require it being 0.</s>
 +
** <s>That also means the response format can be simplified</s>
 +
** <s>An extra command to request the active palette colors should be added, which returns the number of colors in the palette and the RGB values for them.</s>
 +
 
 +
Also, the Documentation has some issues:
 +
 
 +
* At some places it uses &foo and *bar to refer to "length" and a block of data(?). This is really weird and should be removed / replaced by something that is more clear.
 +
 
 +
Last not least the binmontest program needs cleanup, so it can serve as an example program:
 +
 
 +
* Magic values are used for offsets at various places. It should use constants instead. Ideally, a common header file is used for both the test-program and the VICE code itself
 +
* Much more comments are needed in place of the various checks
 +
 
 +
'''I'm very lazy and don't want to spend a lot of time on the test code. I wrote everything very copy/paste to save time on writing them and to keep everything somewhat independent of each other. I also do not see it as an example program.'''
  
 
====History Recording====
 
====History Recording====
  
 
* history recording currently breaks on a lot of user actions, such as using autostart or attaching a cartridge.
 
* history recording currently breaks on a lot of user actions, such as using autostart or attaching a cartridge.
'''Workaround''': make sure to start up with a bog standard c64, and then load/run the program in question manually
+
: '''Workaround''': make sure to start up with a bog standard c64, and then load/run the program in question manually
 
* recording/playing back histories was broken in 2.2 ( https://sourceforge.net/tracker/?func=detail&aid=2925410&group_id=223021&atid=1057617 )
 
* recording/playing back histories was broken in 2.2 ( https://sourceforge.net/tracker/?func=detail&aid=2925410&group_id=223021&atid=1057617 )
 
note: since history recording is very error prone and hard to debug, we depend on feedback (on either failure or success) on this topic very much. if you still have problems with the current release, please report them including testcases.
 
note: since history recording is very error prone and hard to debug, we depend on feedback (on either failure or success) on this topic very much. if you still have problems with the current release, please report them including testcases.
Line 63: Line 187:
  
 
* some things are still shared by videochips although they shouldnt be, resulting in conflicts for eg the color generation (visible in x128 in ports that show two windows at a time, when crt emulation is enabled, eg adjusting brightness affects also the other window)
 
* some things are still shared by videochips although they shouldnt be, resulting in conflicts for eg the color generation (visible in x128 in ports that show two windows at a time, when crt emulation is enabled, eg adjusting brightness affects also the other window)
 +
* '''TODO''' add a 4:3 fixed aspect ratio scaling mode
 +
* '''TODO''' when a test program has been written, adjust the "normal" border mode accordingly (CAUTION: fix testsuite first)
 +
* '''TODO''' put all border mode parameters into arrays, make a global function to query the parameters and modes (for UIs) and then add "TV" mode (like "normal", but not centered)
  
 
=====CRT Emulation=====
 
=====CRT Emulation=====
Line 68: Line 195:
 
* the rf-modulator output characteristics are not emulated, which means the so called "black bleeding" effect does not work (emusux0r, http://www.csdb.dk/release/?id=81780)
 
* the rf-modulator output characteristics are not emulated, which means the so called "black bleeding" effect does not work (emusux0r, http://www.csdb.dk/release/?id=81780)
 
* artefact color and luma/chroma crosstalk are not emulated (eg the "red/green stripes")
 
* artefact color and luma/chroma crosstalk are not emulated (eg the "red/green stripes")
* the alternative "sony matrix" for decoding NTSC is not yet implemented
+
* color generation should get a partial rewrite according to new research by pepto (http://colodore.com)
 +
* '''FIXME:''' PAL delay line currently matches a 1701 (U only), "full" delay line is missing
  
 
see http://hitmen.c02.at/temp/palstuff/ for some further info on this topic.
 
see http://hitmen.c02.at/temp/palstuff/ for some further info on this topic.
Line 74: Line 202:
 
====Drive Emulation====
 
====Drive Emulation====
  
* Dual disk drive 2040/3040 support (DOS1, 670 blocks free) is not working
+
* G64 image support is incomplete, the speedzone definitions are completely ignored
* when using a dual drive, only the first drive (0:) can be used.
+
: ''Note: this is no problem in practise, so far not a single title (game) could be located that would actually require this kind of support to work''. Incase you find a program that needs this kind of support, please let us know.
 +
* RPM and Wobble settings have currently no effect when P64 images are used
  
 
=====virtual Devices=====
 
=====virtual Devices=====
  
* the drive rom can not be read using "m-r" when tde is disabled (instead zeros will be returned).
 
''note: this is actually not a missing feature but a bug - because the code _does_ return the drive rom array, its just not loaded. however, the current situation (returning zeros) should be default for most practical situations - so when this gets fixed, it should be optional.'' --[[User:Gpz|Gpz]] 01:52, 11 January 2011 (UTC)
 
 
* handling of CBM style sub partitions is incomplete, write operations on sub partitions may give unexpected results.
 
* handling of CBM style sub partitions is incomplete, write operations on sub partitions may give unexpected results.
 +
* RELative files are only supported when using disk images ( https://sourceforge.net/p/vice-emu/bugs/703/ )
 +
* support for double sided disk images is very shaky, since no concept of disk sides exists and the tracks on the second side are referenced by an offset into the image, the handling of images with different number of tracks is needlessly hard and complicated (and thus broken).
 +
* the IEEE machines use the "virtual devices" for something slightly different than the IEC machines, for the IEEE machines its more like what "IEC Device" means for the IEC machines. This should be handled with a seperate resource similar to "IEC Device" in the other emulators.
  
 
=====True Drive Emulation=====
 
=====True Drive Emulation=====
 
* serial timing latency is not implemented. due to their physical properties, it takes about half a cycle for a value to show up at the respective output pin after it has been written to the register. and respectivly, it takes about half a cycle from changing an input pin until the value in the respective register changes.
 
* serial timing latency is not implemented. due to their physical properties, it takes about half a cycle for a value to show up at the respective output pin after it has been written to the register. and respectivly, it takes about half a cycle from changing an input pin until the value in the respective register changes.
 
* mechanical delays (such as head stepping and motor spinup) are not emulated yet.
 
* mechanical delays (such as head stepping and motor spinup) are not emulated yet.
* 2mhz mode of the 1571 is not handled correctly, 1571 has extra delay on on reading sync inside the drive, ("you cannot use BVC in 2mhz mode!")
+
* accessing device #7 on the IEC bus works (only real devices), but it only works if True Drive Emulation is OFF, even though this has nothing to do with drives. This needs to be fixed in TDE somehow.
 +
======1541======
 +
* 1541 Emulation still fails a few test programs
 +
======1571======
 +
* 2mhz mode of the 1571 is not handled correctly
 +
** drive CPUs always run at 1Mhz for all drives (hardcoded 1000000 at a few places)
 +
** 1571 has extra delay on on reading sync inside the drive, ("you cannot use BVC in 2mhz mode!")
 
* 1571CR emulation does not work correctly
 
* 1571CR emulation does not work correctly
 
* double sided 1571 images do not work correctly
 
* double sided 1571 images do not work correctly
 +
** regular (70 tracks) vs extended (80 or 84 tracks) d71 images are not handled at all (vdrive problem)
 +
** creating (formatting) G71 does not work correctly, the second BAM block will be wrong (vdrive problem)
 +
** double sided P64 can be used, but can not be created from within VICE (see patch #122, r32586). since these are non existant "in the wild" and probably not needed for anything - not a big problem :) to handle this properly, a seperate image format should get created (at least internally)
 +
 
=====Extensions=====
 
=====Extensions=====
 
* when using dolphin dos 3 emulation, the state of the mc6821 is not saved to/restored from snapshots
 
* when using dolphin dos 3 emulation, the state of the mc6821 is not saved to/restored from snapshots
Line 99: Line 239:
 
* unlike with a real datasette, the emulated counter will stop counting when no tape/image is present
 
* unlike with a real datasette, the emulated counter will stop counting when no tape/image is present
 
* when a t64 image is attached, the datasette status will incorrectly say "no image".
 
* when a t64 image is attached, the datasette status will incorrectly say "no image".
''Note: since t64 is currently only accessable via kernal traps, the datasette emulation actually treats this case as if no image is present. The respective code must be updated so the datasette emulation actually "knows" about when t64 is in use.''
+
: ''Note: since t64 is currently only accessable via kernal traps, the datasette emulation actually treats this case as if no image is present. The respective code must be updated so the datasette emulation actually "knows" about when t64 is in use.''
 
* motor noise is not emulated
 
* motor noise is not emulated
 +
 +
====Tape port devices====
 +
 +
* DTL Basic Dongle emulation is broken
 +
* <s>Tapeport device selection should be reworked so only one device can be selected at a time</s>
  
 
====Printer Emulation====
 
====Printer Emulation====
  
 
* not really a bug: the printer output file is always created in the current working directory. ( https://sourceforge.net/tracker/?func=detail&aid=3305650&group_id=223021&atid=1057617 )
 
* not really a bug: the printer output file is always created in the current working directory. ( https://sourceforge.net/tracker/?func=detail&aid=3305650&group_id=223021&atid=1057617 )
''there perhaps should be a way to explicitly set a directory for printer output files'' [[User:Gpz|Gpz]] 01:24, 4 July 2011 (UTC)
+
: ''there perhaps should be a way to explicitly set a directory for printer output files'' [[User:Gpz|Gpz]] 01:24, 4 July 2011 (UTC)
* printing to a pipe (execute) is not implemented ( https://sourceforge.net/tracker/?func=detail&aid=3570824&group_id=223021&atid=1057617 )
 
 
* printer noise is not emulated
 
* printer noise is not emulated
 +
* printers don't work on the PET (or other IEEE-488 computers)
 +
: -> the reason for that is that they use either device traps or IEC Devices, none of which exists on the IEEE machines
 +
 +
====RS232 Emulation====
 +
 +
* piping to an external program does not work on windows
 +
 +
Detailed info on the state of RS232 emulation can be found [[RS232|here]].
 +
 +
====ROMsets====
 +
 +
* all traces of "ROMset archives" should be removed. Nothing uses this, and no UI ever supported it correctly.
 +
* a generic function should be created which scans the data directory of the emulator and returns a list of all .vrs files for the UI
 +
** then the UI can use said list in a dropdown list for quick selection
  
 
----
 
----
Line 116: Line 274:
 
** accessing files does not work ( https://sourceforge.net/tracker/?func=detail&aid=3367519&group_id=223021&atid=1057617 )
 
** accessing files does not work ( https://sourceforge.net/tracker/?func=detail&aid=3367519&group_id=223021&atid=1057617 )
 
** listing directories does not work ( https://sourceforge.net/tracker/?func=detail&aid=3367517&group_id=223021&atid=1057617 )
 
** listing directories does not work ( https://sourceforge.net/tracker/?func=detail&aid=3367517&group_id=223021&atid=1057617 )
''unfortunately to fix this a lot of c1541 will have to be rewritten (mount image only once, not for each operation)'' [[User:Gpz|Gpz]] ([[User talk:Gpz|talk]]) 23:57, 13 December 2012 (UTC)
+
: ''unfortunately to fix this a lot of c1541 will have to be rewritten (mount image only once, not for each operation)'' [[User:Gpz|Gpz]] ([[User talk:Gpz|talk]]) 23:57, 13 December 2012 (UTC)
 +
* since virtual drive emulation does not support REL files on the host filesystem, c1541 can not extract them to R00 files ( https://sourceforge.net/p/vice-emu/bugs/702/ )
  
----
+
* Remove optional dependency on libreadline once linenoise-ng has been tested properly.
 +
:: See if linenoise-ng can be made to work with the MSYS2 shell, which would help with debugging c1541.
  
 
===Chips===
 
===Chips===
 +
 +
====VIA====
 +
 +
* MYVIA_NEED_LATCHING option is broken
 +
* the code doesn't actually notify anything outside the chip when PB7 toggles
 +
** Same so far for the output from the shift register and its handshaking
 +
 +
used in: VIC20, PET, various drives
  
 
====CIA====
 
====CIA====
  
 
* the case when CIA1 port A and port B are both in output mode, port A outputs low, port B outputs high, both are connected via the keyboard matrix and a value is read from port B is not handled correctly ( testprogs/CIA/ciaports ; http://noname.c64.org/csdb/release/?id=5375 ) (has been improved but is not perfect)
 
* the case when CIA1 port A and port B are both in output mode, port A outputs low, port B outputs high, both are connected via the keyboard matrix and a value is read from port B is not handled correctly ( testprogs/CIA/ciaports ; http://noname.c64.org/csdb/release/?id=5375 ) (has been improved but is not perfect)
* another odd special case is when some bits of a port are programmed as output, others as input. and then they are connected via the keyboard matrix by pressing several keys at once. this is not emulated yet at all. (added in r26551)
 
 
* the various analog side effects that must be considered when pressing two or more keys are not emulated correctly, so this will currently not produce the correct results in some corner cases.
 
* the various analog side effects that must be considered when pressing two or more keys are not emulated correctly, so this will currently not produce the correct results in some corner cases.
 +
* Shift Register IRQ triggers one cycle too early (see [http://sourceforge.net/p/vice-emu/bugs/599/ this] bug)
  
used in: C64, C128
+
used in: C64, C128, 1570/71
  
 
====SID====
 
====SID====
  
* the POTX/POTY sampling period is not taken into account
+
* <s>the POTX/POTY sampling period is not taken into account (512 cycles)</s>
 
* POTX/POTY sampling jitter is not emulated
 
* POTX/POTY sampling jitter is not emulated
 
* only one mouse or pair of paddles can be emulated at a time
 
* only one mouse or pair of paddles can be emulated at a time
 +
* 'dump' support in the monitor is missing
 +
 +
used in: C64, C128, CBM2, (VIC20, PLUS4, PET: SID cart)
  
 
====TED====
 
====TED====
Line 146: Line 317:
  
 
* Some basic features of the VDC are missing:
 
* Some basic features of the VDC are missing:
** 40 columns mode ( https://sourceforge.net/tracker/?func=detail&aid=2947582&group_id=223021&atid=1057617 )
+
* Registers 34/35 (horizontal blanking position) not implemented
** Interlaced mode ( https://sourceforge.net/tracker/?func=detail&aid=2871065&group_id=223021&atid=1057617 )
+
* $d600 bit 7 STATUS flag is only approximately implemented. Fixing requires emulating the internal timing of the VDC..  (partially implemented in r35456, also see testprogs/VDC/vdctiming)
* clock calculation for lightpen is incorrect
+
* Differences between 8563 and 8568 are not all emulated, eg. register 38
* the colors of the internally generated palette are wrong. (fixed in r26653)
+
* Snapshot doesn't include VDC
: '''Workaround:''' use the "default" palette.
+
* Clock calculation for lightpen is incorrect (?)
 +
* Can't resize the screen enough to fit all video modes, e.g. vdcmodemania high resolution modes. Aspect ratio needs to change on the fly too.
 +
* Screen position is not always correct, e.g. vdcmodemania FLI parts
  
 
used in: C128
 
used in: C128
Line 177: Line 350:
 
====VIC-IIe====
 
====VIC-IIe====
  
* The test bit is not emulated, which results in things like 'real interlace' ([http://sites.google.com/site/h2obsession/CBM/C128/Interlace]) not working.
+
* The test bit is not emulated, which results in things like 'real interlace' ([http://sites.google.com/site/h2obsession/CBM/C128/Interlace]) and the $D030 new VIC-IIe color palette hack ([http://www.commodore128.org/index.php?topic=3665.0]) not working.
  
 
used in: C128
 
used in: C128
Line 202: Line 375:
  
 
used in: RR-Net/TFE
 
used in: RR-Net/TFE
 +
 +
====RIOT====
 +
 +
* I/O "peek" function is broken
 +
* I/O "dump" function is missing
 +
 +
used in: 2040/3040/4040/1001/8050/8250
 +
 +
====PC8477/DP8473====
 +
* I/O "dump" function is missing
 +
used in: FD4000/FD2000
 +
 +
====WD1770====
 +
* I/O "dump" function is missing
 +
used in: 1570/1571/1581
 +
 +
====ACIA (6551)====
 +
 +
Detailed info on the state of RS232 emulation can be found [[RS232|here]].
  
 
----
 
----
Line 211: Line 403:
 
used in: MMC64, MMC Replay
 
used in: MMC64, MMC Replay
  
====spi-eeprom====
+
====ser-eeprom====
 
* snapshot support is missing
 
* snapshot support is missing
 
used in: MMC Replay
 
used in: MMC Replay
Line 225: Line 417:
 
====vsid====
 
====vsid====
  
* at startup vsid still loads a keyboard map (not really a problem, but probably shouldnt happen anyway :)) (fixed in r26914)
+
====x64 / x64sc====
 +
 
 +
'''NOTICE:'''
  
====x64 / x64sc====
+
Since revision 36182 (2019-04-08), VICE will no longer build the old x64 binary by default. To make VICE build x64, pass `--enable-x64` to configure.
  
 
=====general=====
 
=====general=====
  
* "Max Machine" and "C64 Game System" models are missing
+
* the memory layout for "Max Machine" is not yet correct
 +
* when SX-64 is selected, the tick for the CIA TOD clocks should always be 60Hz (regardless of PAL/NTSC)
 +
* for details see [[C64models]]
  
 
=====x64 issues addressed by x64sc=====
 
=====x64 issues addressed by x64sc=====
Line 260: Line 456:
 
=====Cartridge System=====
 
=====Cartridge System=====
  
* some carts have no snapshot support yet (still broken: MMC64, Magic Voice, MMC Replay, MIDI, Ethernet.)
+
''note: the detailed todo list/status is [[cartsystem|here]].''
 +
 
 +
* some carts have no snapshot support yet (still broken: Magic Voice, MMC Replay, RR-Net MK3, Ethernet.)
 
** IDE64 & ATA system can only handle "readonly" snapshots now. Somehow the image file must be matched to the snapshot to prevent corruption.
 
** IDE64 & ATA system can only handle "readonly" snapshots now. Somehow the image file must be matched to the snapshot to prevent corruption.
* some carts do not work 100% yet (still broken: KCS, Magic Voice, MMC Replay.)
+
** MMC64 snapshots do not include the SD-card
** KCS: BLOADing a frozen program does not work
+
* some carts do not work 100% yet (still broken: Magic Voice, MMC Replay.)
 
** Magic Voice: emulation of the speech chip is incomplete (see [[Todo#t6721a]]), this breaks some words included in the magic voice rom and the "a-bee-c" cartridge. Memory mapping is incomplete/broken (which however affects no known software/testcase).
 
** Magic Voice: emulation of the speech chip is incomplete (see [[Todo#t6721a]]), this breaks some words included in the magic voice rom and the "a-bee-c" cartridge. Memory mapping is incomplete/broken (which however affects no known software/testcase).
 
** MMC Replay: only the BIOS mode works right now; the monitor may incorrectly access cartridge memory (even) if "bank cart" is explicitly set
 
** MMC Replay: only the BIOS mode works right now; the monitor may incorrectly access cartridge memory (even) if "bank cart" is explicitly set
* IDE64 shortbus expansions not emulated
+
* the (very strange, and incompatible with most cartridges) passthrough port of the SFX sound expander is not emulated
* SFX sound sampler audio input is not emulated
 
 
* various cartridges have no support for verbose i/o dump in the monitor
 
* various cartridges have no support for verbose i/o dump in the monitor
 
* Passthrough port functionality depends on ordering of cartridge attaches, especially visible from the command line. (e.g. MMC64+RR ok, RR+MMC64 not)
 
* Passthrough port functionality depends on ordering of cartridge attaches, especially visible from the command line. (e.g. MMC64+RR ok, RR+MMC64 not)
 
+
* '''TODO:''' IDE64 is missing a "make HD image read only" resource
''note: the detailed todo list/status is [[cartsystem|here]].''
+
* '''TODO:''' IDE64 saves its config data into vicerc - it should use a bin image like every other cartridge
 +
* RAM link has some implementation problems
 +
** it uses the "Main Slot" allthough it has a Passthrough port - it should use "Slot 0" instead
 +
** it uses the "main image" API for save-as and flush - this is technically wrong and can only "work" right now because the "main image" (which is the ROM!) can not be changed
 +
*** TODO: we need to create an API for saving/flushing secondary images (such as additional cartridge RAM or EEPROMs)
  
 
====x128====
 
====x128====
Line 277: Line 478:
 
* Support for fast mode (2MHz) is implemented but incomplete, detailed information about the stealing of cycles by the VICII when switching back from fast mode is missing and therefor the emulation of it is incorrect.
 
* Support for fast mode (2MHz) is implemented but incomplete, detailed information about the stealing of cycles by the VICII when switching back from fast mode is missing and therefor the emulation of it is incorrect.
 
* support for c128 specific expansion port handling/mapping is missing in the c64/c128 cartridge system (MMC Replay, FastLoad128, MACH128, other?)
 
* support for c128 specific expansion port handling/mapping is missing in the c64/c128 cartridge system (MMC Replay, FastLoad128, MACH128, other?)
* the relative speed and details like cycle-stealing of the z80 is inaccurate ( https://sourceforge.net/tracker/?func=detail&aid=3476760&group_id=223021&atid=1057617 ) '''TODO''': cycle accurate test programs
+
* the relative speed and details like cycle-stealing of the z80 is inaccurate ( https://sourceforge.net/tracker/?func=detail&aid=3476760&group_id=223021&atid=1057617 )
 +
: xmx provided a test program, see testprogs/c128/z80/cycletimer
 +
* CPU history (chist) implementation is incomplete
  
 
====xvic====
 
====xvic====
Line 283: Line 486:
 
* programs that do not work for unknown reason:
 
* programs that do not work for unknown reason:
 
** "Grave Cave" ( https://sourceforge.net/tracker/?func=detail&aid=3297561&group_id=223021&atid=1057617 )
 
** "Grave Cave" ( https://sourceforge.net/tracker/?func=detail&aid=3297561&group_id=223021&atid=1057617 )
 +
* the naming of the VIAs in the sourcecode is mixed up, it should be VIA1 for the one at 9110 and VIA2 for the one at 9120
 +
* xvic does not use iecbus/iecbus.c, which is why "IEC Device" stuff does not work with it
 +
 +
===== Cartridge System =====
 +
 +
* cartridge_get_info_list is not implemented
 +
* CRT/BIN saver are missing
 +
** writeback with crt file is not implemented
 +
** GUI elements for "save cartridge" are missing
  
 
====x64dtv====
 
====x64dtv====
 +
<big>The DTV emulator is very inaccurate and is in need of a partial rewrite. Maintainer wanted!</big>
  
* Very inaccurate, needs to be rewritten (in progress)
 
 
* Misery 3: (http://noname.c64.org/csdb/release/?id=83196)
 
* Misery 3: (http://noname.c64.org/csdb/release/?id=83196)
 
** fails emudetect
 
** fails emudetect
 
** plasma part is missing badlines
 
** plasma part is missing badlines
 
* switching VICII border mode resets x64dtv ( https://sourceforge.net/tracker/?func=detail&aid=3004255&group_id=223021&atid=1057620 )
 
* switching VICII border mode resets x64dtv ( https://sourceforge.net/tracker/?func=detail&aid=3004255&group_id=223021&atid=1057620 )
 +
* CPU history (chist) implementation is incomplete
 +
* the "PS/2 Mouse at Userport" should get refactored to be a regular Userport device in the common Userport system
 +
* "enable Userport Joystick" vs "Hummer Userport Joystick" is strange and confusing, especially since in the DTV emulator we dont even have a "UserportJoyType" selection. the regular "DTV Joystick on Userport" should become a regular Userport device.
  
 
====xplus4====
 
====xplus4====
The plus4 emulator is generally work in progress and not yet "ready". Maintainer wanted!
+
<big>The plus4 emulator is generally work in progress and not yet "ready". Maintainer wanted!</big>
 
* support for Snapshots is incomplete/broken (TED, PIA, V364 Speech, ...) ( https://sourceforge.net/tracker/?func=detail&aid=2878220&group_id=223021&atid=1057617 )
 
* support for Snapshots is incomplete/broken (TED, PIA, V364 Speech, ...) ( https://sourceforge.net/tracker/?func=detail&aid=2878220&group_id=223021&atid=1057617 )
 +
* emulation of the V364 speech chip is incomplete (see [[Todo#t6721a]])
 +
* CPU history (chist) implementation is incomplete
 +
=====Cartridge System=====
 
* handling of the c0/c1/c2 roms is weak
 
* handling of the c0/c1/c2 roms is weak
 
** cartridges share the same roms as internal roms
 
** cartridges share the same roms as internal roms
 
** roms are not removed from the memory map if not present (just cleared)
 
** roms are not removed from the memory map if not present (just cleared)
* emulation of the V364 speech chip is incomplete (see [[Todo#t6721a]])
+
* "mmu" memory translation table handling is not implemented for cartridges
 +
* snapshot implementations are completely untested
 +
* .crt support is missing
  
 
====xcbm2====
 
====xcbm2====
Line 305: Line 525:
 
* break- and watchpoints in zeropage are broken. this is because of the old cpu core, and can likely not be fixed without migrating to the new one.
 
* break- and watchpoints in zeropage are broken. this is because of the old cpu core, and can likely not be fixed without migrating to the new one.
 
* banking in the monitor is broken
 
* banking in the monitor is broken
 +
* breakpoints are broken
 +
** when a breakpoint is hit, the monitor disassembles from the wrong bank
 +
** breakpoints will only hit in the bank which is active in the monitor (!)
 
* when running the burn-in diagnostic tests, the CIA is reported as bad ( https://sourceforge.net/tracker/?func=detail&aid=3102493&group_id=223021&atid=1057617 )
 
* when running the burn-in diagnostic tests, the CIA is reported as bad ( https://sourceforge.net/tracker/?func=detail&aid=3102493&group_id=223021&atid=1057617 )
''note: run like this: xcbm2 -model 610 -ntsc -drive8type 8050 +truedrive -8 cbm2-burnin.d80''
+
: ''note: run like this: xcbm2 -model 610 -ntsc -drive8type 8050 -virtualdev +truedrive -8 cbm2-burnin.d80''
 +
* CPU history (chist) implementation is incomplete
 +
===== Cartridge System =====
 +
* not implemented yet
  
 
====xcbm5x0====
 
====xcbm5x0====
Line 314: Line 540:
 
* In the C510 emulation the VIC-II timing is not exact, i.e. the stopping of the CPU during bad lines is wrong.
 
* In the C510 emulation the VIC-II timing is not exact, i.e. the stopping of the CPU during bad lines is wrong.
 
* The C510 emulation uses the old VIC-II core which means no cycle exact sprite collisions, no inline gfx changes, and probably more.
 
* The C510 emulation uses the old VIC-II core which means no cycle exact sprite collisions, no inline gfx changes, and probably more.
 +
* CPU history (chist) implementation is incomplete
 +
===== Cartridge System =====
 +
* not implemented yet
  
 
====xpet====
 
====xpet====
Line 319: Line 548:
 
** when TDE is enabled, the program will hang. when TDE is disabled, the IEEE interface status will be reported as bad
 
** when TDE is enabled, the program will hang. when TDE is disabled, the IEEE interface status will be reported as bad
 
** the userport is reported as bad (perhaps some dongle is needed?)
 
** the userport is reported as bad (perhaps some dongle is needed?)
''note: run like this: "xpet -model 8296 -drive8type 8050 -8 8296d-systemdisk.d82 -editor edit-4-80-b-50Hz.901474-04.bin". the "burnin8296" program seems to be an older version of the "8296d diagnostic" program. it runs when TDE is enabled, but the 50Hz irq test fails.''
+
: ''note: run like this: "xpet -model 8296 -drive8type 8050 -8 8296d-systemdisk.d82 -editor edit-4-80-b-50Hz.901474-04.bin". the "burnin8296" program seems to be an older version of the "8296d diagnostic" program. it runs when TDE is enabled, but the 50Hz irq test fails.''
 
* break- and watchpoints in zeropage are broken. this is because of the old cpu core, and can likely not be fixed without migrating to the new one.
 
* break- and watchpoints in zeropage are broken. this is because of the old cpu core, and can likely not be fixed without migrating to the new one.
 
* some combinations of selected keymap and keyboard model do not work because of missing keymaps
 
* some combinations of selected keymap and keyboard model do not work because of missing keymaps
 +
** also the keymaps must match the "editor" ROM - currently only the UK (Business) ROM in included in VICE
 +
** the keymaps for US (host) keymap need to be checked and fixed
 +
* CPU history (chist) implementation is incomplete
 +
 +
==Ports==
 +
 +
===archdep===
 +
 +
* '''TODO:''' allow browsing of archives (zip etc) ( https://sourceforge.net/tracker/index.php?func=detail&aid=2942868&group_id=223021&atid=1057620 )
 +
 +
====Windows====
 +
 +
* '''BUG:''' there seems to be a problem with ParSID ( https://sourceforge.net/tracker/?func=detail&aid=2981666&group_id=223021&atid=1057617 )
 +
* the native (console based) monitor does not work in windows
 +
 +
====Linux====
 +
 +
====*BSD====
 +
 +
====BeOS====
 +
 +
* '''BUG:''' Sound problems on slower machines (P100) with a non-official driver for sb16.
 +
* '''BUG:''' Compiling with `--enable-ethernet` fails due to absence of rawnetarch.{c,h} missing --[[User:Compyx|Compyx]] 2016-10-26 (tested on Haiku)
  
 
----
 
----
  
===Ports / UIs===
+
===GTK3 UI===
 +
 
 +
The how and why we go Gtk3 for *nix, Windows and OSX should be clear, but I'll reiterate: since we don't have any Windows maintainters left and failed to attract new ones, the decision was made to use Gtk3 as the new UI for 'modern' OSes.
 +
 
 +
Gtk3 is portable and widely supported and has a C interface. So we should be able to write the UI code once and have it run on our major platforms: Linux, Windows and OSX. Using GLib (a dependency of Gtk3) a lot of platform-dependent code in the UI can be avoided and many standard dialogs, such as open/save/select-dir need to written only once, Gtk3/GLib will handle most of the platform-dependent stuff.
 +
 
 +
The list of covered resources is [[Gtk3_Resource_Coverage|here]]
 +
 
 +
==== UI code refactoring to support the new threaded UI code ====
 +
 
 +
This means a lot of work testing, documenting and debugging, so it deserves a separate page: [[Gtk3_Threaded_UI|Gtk3 Threaded UI]]
 +
 
 +
This is fixed in 3.6, though VSID might require some more work.
 +
 
 +
==== BUGS/TODO ====
 +
 
 +
This is a list of things to do and bugs to fix. This is no way an exhaustive list, to get a better understanding of what needs to be fixed/altered, run this command inside VICE's top dir: <code>grep -n 'FIXME\|TODO\|XXX' `find src/arch/gtk3 -name '*.c'`</code>, and be amazed.
  
* In the C128 emulation VIC-II and VDC palette can not coexist currently in some ports. (unconfirmed: beos, osx)
+
* <b>Write documentation on how to use the UI</b>
* The CBM-II emulation is not fully supported in all ports. (unconfirmed: beos, dos, osx)
+
* '''TODO:''' Add support for non-ASCII characters in the various file/path dialogs (snapshot, maybe even the various cartridge image/eeprom paths and the machine/drive ROM paths) (fixed?)
* VSID is not fully supported in all ports: (unconfirmed: beos, dos, osx)
 
  
* YUV rendering (used by amigaos and xaw) implementation is incomplete
+
===== Menus =====
** scale2x not available
 
** some renderers are missing
 
** doublesize + y-stretch (2x4) doesnt work correctly
 
  
====Windows====
+
===== Main window(s) =====
 +
 
 +
* '''TODO:''' make sure both hard- and software rendering match whats described in [[Scaling_cleanup]] - if so, the page can be cleaned out
 +
:: Implemented, but only for a single display, no multi-display support yet. GDK seem to support multi-display setup querying, but we'd actually have to write code and test this to see how GDK handles this, if at all. (fixed?)
 +
** do not forget the VDC and the Monitor windows (fixed?)
 +
:: VDC is handled, the monitor windows isn't, there aren't any resource for the monitor window, nor any event handlers. Another wish seems to be to put the VICII and VDC window next to each other for x128, which will probably mean introducing yet another resource to control this and override the Window1* resources. Probably some enum: USE_WINDOW1* = -1, ABOVE, BELOW, LEFT, RIGHT. And hope the Window Manager actually listens to our requests to move said window.
 +
 
 +
* '''BUG:''' mouse grab (when mouse emulation is enabled) is not perfect. eg when the emulator is started with mouse enabled, the pointer is not initially moved into the emulator window.
  
* In the win32 port keyboard input can be garbled after issuing a reset on CPU JAM.
+
===== Statusbar =====
* the device buttons in the monitor ui are broken ( https://sourceforge.net/tracker/?func=detail&aid=2478267&group_id=223021&atid=1057617 )
 
* when the monitor is active, popup (right click) menus open at seemingly random positions ( https://sourceforge.net/tracker/?func=detail&aid=3200977&group_id=223021&atid=1057617 )
 
* the monitor might crash if another (settings-) window is open ( https://sourceforge.net/tracker/?func=detail&aid=3196476&group_id=223021&atid=1057617 )
 
* remote monitor might hang after "x" until the mouse pointer passes the emulator window ( https://sourceforge.net/tracker/?func=detail&aid=3196471&group_id=223021&atid=1057617 )
 
* keymap selection in xpet seems to be broken ( https://sourceforge.net/tracker/?func=detail&aid=3127784&group_id=223021&atid=1057617 )
 
  
=====Win32 DX9=====
+
* '''BUG:''' On MacOS and Windows, the slider popup widget is hidden behind the rendered canvas, on Linux this works as it should. So currently the volume widget is disabled on MacOS and Windows
* There is a bug when moving the window partly outside the left edge of the screen. The rendered contents seem to "lock" to the left border. This seems to depend on the driver of the gfx adapter as is only shows on some machines.
 
  
=====Windows 7=====
+
===== Dialogs =====
* there seems to be a problem with ParSID ( https://sourceforge.net/tracker/?func=detail&aid=2981666&group_id=223021&atid=1057617 )
+
* '''TODO''': Polish the keyset dialog: at there very least split the UI into a 3x3 grid for the directions and a 4x2 grid for the fire buttons. Maybe use icons for the direction if they're in the default Gtk icon set.
  
====X11 (XAW and GTK)====
+
===== Settings =====
  
* The custom TextField widget is buggy and can cause crashes on DEC/Alpha machines, and possibly on other systems too. If you get weird X protocol errors or the file selector makes the emulator die when you close it, this might be the cause.
+
* '''TODO:''' ROM-set manager/settings need to be reworked and fixed. ROMset "archives" should be removed completely. see [[#ROMsets]]
*: '''Workaround''': recompile with the `--disable-textfield' option.  If it still does not work, please tell us.
+
* '''TODO:''' HardSID settings are missing
* some text output may show broken characters for "foreign" UTF8 chars due to improver conversion (please report such cases!)
 
  
=====Vidmode=====
+
====== Pet model ======
  
* lightpen coordinates are not accurate when using vidmode for fullscreen
+
* '''TODO:''' xpet seems to be fine, someone with actual PET knowledge should check this, especially the "SuperPET" stuff. (fixed?)
* mouse warping when using vidmode for fullscreen is buggy
 
* the mouse pointer is incorrectly un-grabbed when switching from/to fullscreen with the mouse- or lightpen emulation enabled.
 
*: '''Workaround''': use XRandR for fullscreen
 
  
=====GTK=====
+
====== CBM2 model (xcbm2/xcbm5x0) ======
  
* Gnome/GTK+ commandline is ignored.
+
* '''TODO:''' Check model settings glue logic.
* the event handling is buggy, which results in some more or less broken behaviour eg when holding down ALT-D or ALT-B (the later in fullscreen mode)
+
:: Mostly works, the 50/60Hz switch is a problem. I'll need someone with some actual CBM-II knowledge to help me out here. [[User:Compyx|Compyx]] 2020-01-08
* lightpen (x) coordinate is broken
 
''TODO:'' write proper test program
 
  
=====XAW=====
+
====== Drive ======
  
* Some DEC/Alpha machines crash due to the XAW implementation.
+
====== C64 Cartridge ======
*: '''Workaround''': Compile VICE with GNOME support `--enable-gnomeui' instead.
+
* '''TODO:''' check I/O extensions for proper behaviour (attach/detach, load/save images etc):
* warning "Files using this header must be compiled with _SVID_SOURCE or _XOPEN_SOURCE" may show up if none is defined in the environment
+
** GEO-RAM
*: '''Workaround''': define _XOPEN_SOURCE=600 on the commandline
+
** RamCart
* Context popup menu for drive attach is broken if more than two drives are active.
+
** Expert Cartridge
* when hardware rendering is enabled, greenish color might appear around the drawing area.
+
** ISEPIC
* Aspect ratio/scaling is broken in fullscreen mode when hardware rendering is enabled (canvas is always stretched to fill the entire screen)
+
** EasyFlash
* the mouse pointer is incorrectly un-grabbed when switching from/to fullscreen with the mouse- or lightpen emulation enabled.
+
** GMod2
* mouse- and lightpen emulation/coordinates are broken on the second window (VDC/x128)
+
** IDE64
 +
** MMC64
 +
** MMC Replay
 +
** Retro Replay
 +
** RR-Net Mk3
  
====MS-DOS====
+
====== Game Controller / Joysticks ======
  
* In the MS-DOS port you have to save the configuration and restart the emulator when changing VDC double size mode.
+
* '''TODO:''' we need an interface to map controller buttons and axis to joystick emulation, keyboard input and GUI actions
 +
** at this point, make sure the mapping can be different for each connected joystick
 +
** also make sure support for 2nd and 3rd button is handled correctly
  
====AROS====
+
* '''TODO:''' joy-osx.c contains a lot of resources and commandline options that should not be there, but live in common code instead. this needs some refactoring to make game controllers work the same in all ports
 +
** similar for at least joy-unix.c, but commented out
  
* VICE 2.2a has no sound on AROS ( https://sourceforge.net/tracker/?func=detail&aid=2954913&group_id=223021&atid=1057617 )
+
===== vsid =====
  
====Amiga====
+
* '''BUG:''' Fix drag-n-drop behaviour, dragging multiple SID files onto the playlist widget works, but on Linux at least, dropping a SID file on the STIL view widget doesn't work (specifically the GtkTextView), this works on Windows oddly enough.
  
* crash on Amiga OS4 when changing language ( https://sourceforge.net/tracker/?func=detail&aid=3309859&group_id=223021&atid=1057617 )
+
* '''TODO:''' Implement "goto-next-SID" when having SLDB support enabled.
* crash on Amiga OS4 when changing to doublesize in fullscreen mode ( https://sourceforge.net/tracker/?func=detail&aid=3309865&group_id=223021&atid=1057617 )
 
  
====*BSD====
+
* '''BUG:''' STIL view: some tunes (for example Last Ninja 2) print empty "tune #x" entries, so you'll get "Tune #1" in blue and a few empty lines, in the case of LN2 this goes on until tune #6. Most likely a bug in the use of hvsclib, not the lib itself.
  
* Vice 2.2 seg faults on startup on freebsd 8 stable ( https://sourceforge.net/tracker/?func=detail&aid=2991578&group_id=223021&atid=1057617 )
+
* '''TODO:'''Playlist: allow keyboard navigation. Perhaps also multi-select via Ctrl or Shift to delete multiple entries?
* serial device hangs on open() in NetBSD 5.0.2 ( https://sourceforge.net/tracker/?func=detail&aid=3043294&group_id=223021&atid=1057617 )
 
  
====BeOS====
+
===== Monitor =====
  
* Sometimes the application loses the keyboard focus; no keystrokes are accepted inside the emu, so the emulator has to be restarted.
+
The GUI based monitor currently uses a mercylessly hacked VTE library. When we looked for a way to put the monitor into a console window that works with GTK3, this seemed to be the only way to do it. The ugly hacks were required to make VTE compile and work on windows. This is also why we cant use a more modern version of the VTE library.
* Sound problems on slower machines (P100) with a non-official driver for sb16.
 
* The monitor only works if you start the emulator from a terminal; if you start the emu from tracker and enter the monitor, you are "lost"
 
* Fullscreen mode is not implemented.
 
  
====SDL====
+
* '''TODO:''' On the long run, we will have to write a custom renderer for a monitor window, which supports all the things we need to implement a classic "fullscreen editor" like ml monitor.
 +
* '''TODO:''' Again as a long term goal, we might want to support transparent support for native charsets
  
* free scaling is broken ( https://sourceforge.net/tracker/?func=detail&aid=3570771&group_id=223021&atid=1057617 )
+
for some info on the monitor ui see: [[MonitorUI]].
  
=====GP2X=====
+
===== Unix (Linux) =====
  
* The GP2X port segfaults at start.
+
===== Windows =====
note: this port is unmaintained and because of that subject for removal.
 
  
=====Dingux=====
+
===== macOS =====
  
* uses preset sdl-vicerc files which are unmaintained and thus could fail. At least sdl-vicerc-cbm5x0 is obsolete and broken due to the config split.
+
* <s>GSettings schema files aren't loaded, so things like GtkFileChooser cause an abnormal exit, which means attaching disk images doesn't work. (fixed?)</s> fixed in trunk, a long time ago.
note: this port is unmaintained and because of that subject for removal.
 
  
----
+
* '''TODO:''' joystick_ui_get_next_device_name should return the detected joysticks instead of the predefined list (fixed?)
  
==External Libraries==
+
* '''TODO:''' test mouse -emulation and -grab. (this works properly now, iirc?)
VICE uses a few external libraries of which either header files or complete sources are included in the tree:
 
  
* opencbm (src/opencbm.h) (https://sourceforge.net/p/opencbm/)
+
* '''TODO:''' the MIDI settings widget should show a combobox with supported drivers
** should get moved to src/lib/..
 
* P64 (src/lib/P64)
 
* ffmpeg (src/lib/libffmpeg)
 
** since ffmpeg has a long history of API breaking it might be a good idea to include the entire library in the tree and link it statically
 
  
besides the above, other libraries are used which are currently linked dynamically and must be supplied as dlls for the windows port
+
* <s>'''TODO:''' Add QuickTime recording settings widget, like the FFMPEG recording settings widget</s> QuickTime will not be needed
  
* SDL
+
* '''TODO:''' Make the GTK UI create/use the macOS style "top menubar"
* zlib
 
* hardsid
 
  
==Rewrites==
+
* '''TODO:''' joy-osx.c contains a lot of resources and commandline options that should not be there, but live in common code instead. this needs some refactoring to make game controllers work the same in all ports
  
* The "sc" rewrites. Migrate emulators to the cycle based CPU core (6510dtvcore.c, should be renamed), which allows:
+
===== OpenGL =====
** cycle based hooks for complex hardware expansions (SCPU)
+
* '''TODO:''' The OpenGL renderer should transform itself into a Cairo renderer if the system doesn't support OpenGL. (fixed?)
** in-line graphics data change emulation (see testprogs/VICII/gfxfetch)
+
** Stretch goal: the OpenGL renderer should fall back to legacy mode (the SDL renderer) if GTK3 itself has, instead of failing.
** cycle exact Blitter/DMA vblank start and proper LinearA/B counter handling on x64dtv
+
* '''TODO:''' Do-not-scale option. Important for Cairo renderer, possible for OpenGL.
** cycle based drawing
 
* ...and requires (at least):
 
** rewrite video chip modules to use:
 
*** cycle based fetch/etc (VIC & VICII done, VICII-DTV in progress)
 
*** cycle based drawing (VICII done)
 
** remove 1 clock write offset in CIA etc (at least CIA/VIA already handled in trunk)
 
** an insane amount of regression testing (preferably with new testprogs where needed)
 
  
==Documentation==
+
==== Feature requests / Stretch goals ====
  
* Update the *nix documentation
+
* Make 'smart cartridge attach' dialog smarter when attaching .bin images, show only valid cartridge types when selecting a cart image.
** perhaps find a way to conditionally include arch specific stuff in vice.texi ?
+
** '''TODO''': this needs a new API call that returns the valid sizes for a given type
* proper and specific win32 documentation. (.chm format)
+
* make an option to force display size to 1x/2x/3x/4x
* proper and specific amiga documentation. (.guide format)
+
* make a GUI based editor for keymaps
* proper and specific BeOS documentation.
+
* add statusbar indicators for stateful keys like Caps Lock and 40/80 Cols.
* proper and specific MSDOS documentation. (.txt format)
+
* add statusbar indicators for cartridge LEDs.
* proper and specific OS/2 documentation. (.inf format)
 
* proper and specific RiscOS documentation.
 
* proper and specific SDL documentation.
 
  
==Translations==
+
===== VSID =====
  
* Support for more languages.
+
* Implement a playlist for VSID (partly done)
* Translation support for BeOS.
 
* Translation support for MSDOS
 
* Translation support for OS/2
 
  
==Ports / GUI improvements==
+
* Add some sort of tree-based file browser (preferably using the HVSC as the default dir) to allow quick tune selection and help with building a playlist (ie via drag-n-drop)
  
* Make a list of GUI elements/features per port, compare and implement any missing features for the ports. ( [[Gui cleanup]] )
+
* Add HVSC BUGlist support to VSID
* Make a list of Hotkeys used per port, compare and try to make them the same / alike. ( [[Hotkey cleanup]] )
+
:: Support for this is available in src/hvsc, but there are very few actual entries in the BUGList.txt file. Maybe skip this one?
  
* Debug/fix the XBOX SDL port.
+
==== Upstream bugs ====
* Debug/fix the Windows-CE SDL ports.
 
* Completely update the GP2X GUI.
 
  
===General===
+
See [[Upstream bugs]]
  
* make datasette interface nicer (hotkeys) ( https://sourceforge.net/tracker/index.php?func=detail&aid=2525175&group_id=223021&atid=1057620 )
+
===SDL UI===
* allow browsing of archives (zip etc) ( https://sourceforge.net/tracker/index.php?func=detail&aid=2942868&group_id=223021&atid=1057620 )
 
* add dual monitor support (for x128) ( https://sourceforge.net/tracker/?func=detail&aid=2780684&group_id=223021&atid=1057620 )
 
* add realtime speed adjustment ui / hotkeys ( https://sourceforge.net/tracker/?func=detail&aid=2904137&group_id=223021&atid=1057620 )
 
  
* Monitor Improvements: ( also see [[MonitorUI]] )
+
====BUGS/TODO====
*:* keep monitor window open ( https://sourceforge.net/tracker/?func=detail&aid=2311669&group_id=223021&atid=1057620 )
+
* <b>Write documentation on how to use the UI</b>
*:* enable more actions by mouse/hotkey ( https://sourceforge.net/tracker/?func=detail&aid=3134010&group_id=223021&atid=1057620 )
+
* '''BUG:''' FFmpeg media recording behaves unexpected when entering the menu [https://sourceforge.net/p/vice-emu/bugs/898/]
*:* use cbm font ( https://sourceforge.net/tracker/?func=detail&aid=3134010&group_id=223021&atid=1057620 )
 
* improve vsync / add option to sync to actual output framerate ( https://sourceforge.net/tracker/?func=detail&aid=3009846&group_id=223021&atid=1057620 )
 
  
===Windows===
+
=====Menus=====
 +
* '''TODO:''' some menu items need status text to show that the action has been done.
 +
** Drive>Fliplist settings>Add current image to fliplist
 +
** Drive>Fliplist settings>Remove current image from fliplist
 +
** Drive>Fliplist settings>Attach next image in fliplist
 +
** Drive>Fliplist settings>Attach previous image in fliplist
 +
* '''BUG:''' at a lot of places "inactive" (as in "cant be selected") menu items are missing the "N/A" on the right
 +
* '''TODO:''' A better way of showing filenames (maybe using contraction) needs to be made
  
* add "apply" button in video settings ( https://sourceforge.net/tracker/?func=detail&aid=3354016&group_id=223021&atid=1057620 )
+
=====Joysticks=====
* add cassette control buttons/hotkeys ( https://sourceforge.net/tracker/?func=detail&aid=3203245&group_id=223021&atid=1057620 )
+
* '''TODO:''' <s>selecting the joystick device (when more than one is connected) is not possible, it will always use the first it finds
* make it possible to define ALT as a hotkey ( https://sourceforge.net/tracker/index.php?func=detail&aid=2909906&group_id=223021&atid=1057620 )
+
** also the joystick mapping is the same for all devices, the code must be reworked so each joystick can be different (eg one ps3 pad, one classic joystick)</s>
* add option to run vice executable with high priority ( https://sourceforge.net/tracker/?func=detail&aid=2430983&group_id=223021&atid=1057620 )
 
  
===OSX===
+
=====Monitor=====
 +
* '''TODO:''' implement a scrollback buffer
  
* add support for HardSID USB ( https://sourceforge.net/tracker/?func=detail&aid=2714202&group_id=223021&atid=1057620 )
+
=====File Selector=====
 +
* '''TODO:''' add filtering in file requester
  
===Linux===
+
=====Virtual Keyboard=====
 +
* '''TODO:''' shift/cbm/ctrl should be "sticky" (right now shifted keys are entered using backspace/cancel - which is odd)
 +
* '''TODO:''' the virtual keyboard handling of the SDL port must be updated/fixed to support all PET keyboards
  
* add support for rtkit ( https://sourceforge.net/tracker/?func=detail&aid=3088679&group_id=223021&atid=1057619 )
+
===== VSID =====
 +
* '''TODO:''' Implement a playlist for VSID
 +
* '''TODO:''' Add HVSC song length database (SLDB) support to VSID (<s>both .txt and</s> .md5 file format)
 +
* '''TODO:''' Add HVSC sid tune information list (STIL) support to VSID
 +
* '''TODO:''' Add HVSC BUGlist support to VSID
  
===X11===
+
====Windows====
  
* amount of random auto start delay can not be changed using the GUI (AutostartDelay) (added in r26682)
+
* '''TODO:''' embed icons into windows .exe files (fixed?)
* the initial window and canvas should be created using its final size and not resized later
 
  
====GTK====
+
====OSX====
  
* add Session Management
+
* '''BUG:''' Sound starts to distort heavily after few minutes [https://sourceforge.net/p/vice-emu/bugs/986/] (fixed?)
* improve Tape status widget, (.TAP vs .t64 handling is lousy.)
+
* '''BUG:''' Sounds terrible unless sampling is lowered from default 44Khz to 22Khz [https://sourceforge.net/p/vice-emu/bugs/984/] (fixed?)
* implement actual Monitor GUI (like in the windows port)  ( https://sourceforge.net/tracker/?func=detail&aid=3317803&group_id=223021&atid=1057620 )
+
* '''BUG:''' Emulator in default config makes no sound unless the OutputMode is changed to Stereo. [https://sourceforge.net/p/vice-emu/bugs/983/] (fixed?)
* start c1541 inside a VTE terminal window and not use an xterm
 
* improve/fix widget layout in "save media image" dialog
 
* improve/fix widget layout in "netplay" dialog
 
* doodle output driver options are missing in "save media image" dialog (DoodleCRTCTextColor, DoodleTEDLumHandling, DoodleMultiColorHandling, DoodleOversizeHandling) (added in r26901)
 
* in the crt setting dialog, options that are not available in the current config should be made inactive. (added in r26708)
 
  
====XAW====
+
==External Libraries==
 +
VICE uses a few external libraries of which either header files or complete sources are included in the tree:
  
* add "commandline options" help window (like in the windows port)
+
* opencbm (src/opencbm.h) (https://sourceforge.net/p/opencbm/)
* hide hidden files (dot files) in the filebrowser ( https://sourceforge.net/tracker/?func=detail&aid=2878433&group_id=223021&atid=1057620 )
+
** should get moved to src/lib/..
* implement "edit" (copy/paste) menu
+
* P64 (src/lib/p64)
* add Drag'n'Drop support
+
* ffmpeg (src/lib/libffmpeg)
* the status bar area of the created window is larger than it should be
+
** building with `--enable-shared-ffmpeg` will fail when not root. VICE's configure triggers a build and install of liblame which tries to install into /usr/local/lib.
* ffmpeg half frame-rate setting missing in "save media image" dialog (FFMPEGVideoHalveFramerate)
+
** building out-of-tree currently fails with:
* sound volume can not be changed using the GUI (SoundVolume)
+
<pre>In file included from ../../../vice/src/lib/libffmpeg/libavutil/avutil.h:289:0,
* datasette status widget is not implemented
+
                from ../../../vice/src/lib/libffmpeg/libavutil/samplefmt.h:24,
 +
                from ../../../vice/src/lib/libffmpeg/libavcodec/avcodec.h:31,
 +
                from ../../../vice/src/lib/libffmpeg/libavformat/avformat.h:255,
 +
                from ../../../vice/src/gfxoutputdrv/ffmpeglib.h:36,
 +
                from ../../../vice/src/gfxoutputdrv/ffmpegdrv.c:37:
 +
../../../vice/src/lib/libffmpeg/libavutil/common.h:50:10: fatal error: libavutil/avconfig.h: No such file or directory
 +
#include "libavutil/avconfig.h"
 +
          ^~~~~~~~~~~~~~~~~~~~~~
 +
compilation terminated.
 +
Makefile:507: recipe for target 'ffmpegdrv.o' failed</pre>
  
===AROS===
+
: '''TODO''': rip out ffmpeg from the tree, disable "internal" ffmpeg support
  
* add PCI support for catweasel and hardsid
+
besides the above, other libraries are used which are currently linked dynamically and must be supplied as dlls for the windows port
  
===MSDOS===
+
* SDL
 +
* zlib
 +
* hardsid
  
* add real IEC device support via par port or ser port
+
==Rewrites==
* add proper lfn detection
 
  
----
+
* The "sc" rewrites. Migrate emulators to the cycle based CPU core (6510dtvcore.c, should be renamed), which allows:
 +
** cycle based hooks for complex hardware expansions (SCPU)
 +
** in-line graphics data change emulation (see testprogs/VICII/gfxfetch)
 +
** cycle exact Blitter/DMA vblank start and proper LinearA/B counter handling on x64dtv
 +
** cycle based drawing
 +
* ...and requires (at least):
 +
** rewrite video chip modules to use:
 +
*** cycle based fetch/etc (VIC & VICII done, VICII-DTV in progress)
 +
*** cycle based drawing (VICII done)
 +
** remove 1 clock write offsets (at least CIA/VIA already handled)
 +
** an insane amount of regression testing (preferably with new testprogs where needed)
  
 
==New Features==
 
==New Features==
Line 559: Line 821:
 
===general===
 
===general===
  
* native screenshot support. (in progress)  
+
* <s>native screenshot support. (in progress)</s>
 +
: <s>add Minigrafik/Minipaint format (VIC20 native)</s> (in trunk)
 
* script language integration. (lua or python perhaps)
 
* script language integration. (lua or python perhaps)
 
* Some more Kernal patches, for instance for changing colors and patching the reset routine to make it faster (maybe configurable).
 
* Some more Kernal patches, for instance for changing colors and patching the reset routine to make it faster (maybe configurable).
Line 572: Line 835:
 
* (optionally) make quicksave filenames depend on image filename ( https://sourceforge.net/tracker/?func=detail&aid=3295768&group_id=223021&atid=1057620 )
 
* (optionally) make quicksave filenames depend on image filename ( https://sourceforge.net/tracker/?func=detail&aid=3295768&group_id=223021&atid=1057620 )
 
* find a way to not include the actual game binary in a history file ( https://sourceforge.net/tracker/?func=detail&aid=3295768&group_id=223021&atid=1057620 )
 
* find a way to not include the actual game binary in a history file ( https://sourceforge.net/tracker/?func=detail&aid=3295768&group_id=223021&atid=1057620 )
 +
 +
====Snapshots====
 +
 +
* also save d81 and other image types which aren't (fully) handled by TDE in snapshot files ( https://sourceforge.net/p/vice-emu/bugs/1082/ )
  
 
====Keyboard====
 
====Keyboard====
 
* on first startup, if no keymap is set, try to pick one depending on locale ( https://sourceforge.net/tracker/?func=detail&aid=3002553&group_id=223021&atid=1057620 )
 
  
 
====Tape====
 
====Tape====
 
* Allow tape loading without the virtually pressed "Play" button, which can break some programs that do not like it to be pressed (e.g. Turbo Assembler). (fixed in r26680, it is now possible to press STOP after autostarting from t64)
 
 
* support for DC2N .dmp files (cassette files) ( https://sourceforge.net/tracker/?func=detail&aid=3203248&group_id=223021&atid=1057620 )
 
* support for DC2N .dmp files (cassette files) ( https://sourceforge.net/tracker/?func=detail&aid=3203248&group_id=223021&atid=1057620 )
 +
* support for .tap index files (requested by SLC)
  
 
====Monitor====
 
====Monitor====
Line 586: Line 850:
 
* (optionally) display all executed commands when in trace mode ( https://sourceforge.net/tracker/?func=detail&aid=3356800&group_id=223021&atid=1057620 )
 
* (optionally) display all executed commands when in trace mode ( https://sourceforge.net/tracker/?func=detail&aid=3356800&group_id=223021&atid=1057620 )
 
* improve handling of memory ranges ( https://sourceforge.net/tracker/?func=detail&aid=3161941&group_id=223021&atid=1057620 )
 
* improve handling of memory ranges ( https://sourceforge.net/tracker/?func=detail&aid=3161941&group_id=223021&atid=1057620 )
* Show the VDC registers ($d600-$d601) with IO command (was fixed with revision 20839 but lost since??)
 
* Show the internal VDC registers (0-36) with IO command
 
  
 
====Sound System====
 
====Sound System====
 
* some kind of generic interface to handle audio input is required to handle sampler carts
 
  
 
====Video System====
 
====Video System====
Line 616: Line 876:
 
*** IDE64 eth64 shortbus expansion support. ([http://www.volny.cz/dundera/eth64.html])
 
*** IDE64 eth64 shortbus expansion support. ([http://www.volny.cz/dundera/eth64.html])
 
*** IDE64 duart shortbus expansion support. ([http://www.volny.cz/dundera/duart.html])
 
*** IDE64 duart shortbus expansion support. ([http://www.volny.cz/dundera/duart.html])
** SFX sound sampler improvements
 
*** SFX sound sampler audio input support. ([http://www.floodgap.com/retrobits/ckb/secret/sfx.html])
 
 
** Clockport improvements
 
** Clockport improvements
 
*** Silversurfer (UART) support ([http://rr.c64.org/wiki/Inside_Surfer.txt])
 
*** Silversurfer (UART) support ([http://rr.c64.org/wiki/Inside_Surfer.txt])
*** mp3@c64 support
 
 
*** IDE64 based eth64-II support ([http://www.ide64.org/eth64v2.html])
 
*** IDE64 based eth64-II support ([http://www.ide64.org/eth64v2.html])
 
** Community Information Locator Commodore 64/128 addon cartridge ([http://starbase.globalpc.net/~jbevren/kiosk/writeup.txt])
 
** Community Information Locator Commodore 64/128 addon cartridge ([http://starbase.globalpc.net/~jbevren/kiosk/writeup.txt])
** RAM Floppy (REX 9680) support
 
 
** Daisy Sound sampler audio input support. ([http://www.cbmhardware.de/dlmanager/download.php?id=243])
 
** Daisy Sound sampler audio input support. ([http://www.cbmhardware.de/dlmanager/download.php?id=243])
 
** PS64 speech cartridge support. ([http://oms.wmhost.com/ps64/])  
 
** PS64 speech cartridge support. ([http://oms.wmhost.com/ps64/])  
 
** Voice Messenger speech cartridge support. ([http://www.c64-wiki.de/index.php/Voice_Messenger])
 
** Voice Messenger speech cartridge support. ([http://www.c64-wiki.de/index.php/Voice_Messenger])
** ramlink support. ([http://unusedino.de/ec64/technical/aay/c64/rlmain.htm] [http://members.optusnet.com.au/spacetaxi64/DRIVERS/DRIVER-FILES/ramlink.rar])
 
 
** ramdrive support. ([http://mikenaberezny.com/hardware/c64-128/cmd-ppi-ramdrive/])
 
** ramdrive support. ([http://mikenaberezny.com/hardware/c64-128/cmd-ppi-ramdrive/])
** z80 (cpm) cartridge support. (4Mhz z80)
 
 
** turbo master cartridge support (4Mhz 65C02). ([http://headgap.com/Library/64/4%20MHZ%2064.txt] [http://members.optusnet.com.au/vortex69/DRIVERS/CPU-TURBOMASTER.jpg])
 
** turbo master cartridge support (4Mhz 65C02). ([http://headgap.com/Library/64/4%20MHZ%2064.txt] [http://members.optusnet.com.au/vortex69/DRIVERS/CPU-TURBOMASTER.jpg])
 
** turbo process cartridge support (4Mhz 658156). ([http://retroisle.com/commodore/c64128/Utilities/rmtp.zip6] [http://www.zimmers.net/anonftp/pub/cbm/documents/projects/accelerators/turboprocess/index.html])
 
** turbo process cartridge support (4Mhz 658156). ([http://retroisle.com/commodore/c64128/Utilities/rmtp.zip6] [http://www.zimmers.net/anonftp/pub/cbm/documents/projects/accelerators/turboprocess/index.html])
 
** flash-8 cartridge support (8Mhz 65816). ([http://www.spacetaxi.bravehost.com/DRIVERS/FLASH-8.rar])
 
** flash-8 cartridge support (8Mhz 65816). ([http://www.spacetaxi.bravehost.com/DRIVERS/FLASH-8.rar])
** SCPU cartridge support (20Mhz 65816). ([http://unusedino.de/ec64/technical/aay/c64/scpumain.htm] [http://members.optusnet.com.au/spacetaxi64/DRIVERS/DRIVER-FILES/SuperCPU.zip]) (https://sourceforge.net/tracker/?func=detail&aid=2030692&group_id=223021&atid=1057620)
+
** SCPU cartridge support (20Mhz 65816). (in progress, has lead to a new emulator called xscpu64) ([http://unusedino.de/ec64/technical/aay/c64/scpumain.htm] [http://members.optusnet.com.au/spacetaxi64/DRIVERS/DRIVER-FILES/SuperCPU.zip]) (https://sourceforge.net/tracker/?func=detail&aid=2030692&group_id=223021&atid=1057620)
 
** The Final Chesscard (65c02) ([http://www.cbmhardware.de/misc/c64parts.php])
 
** The Final Chesscard (65c02) ([http://www.cbmhardware.de/misc/c64parts.php])
** german BTX cartridge (6809)
+
** German Btx cartridge (6803)
 +
** MasC=uerade Cartridge Converter support, this cart is originally intended to use c64 carts on the vic20, but in theory could also be used the other way around. ([http://www.go4retro.com/projects/converter/])
 +
** BI-80 cartridge support. ([http://mikenaberezny.com/hardware/peripherals/bi-80-display-adapter/])
 +
** Buscard II IEEE488/printer-port cartridge support. ([http://mikenaberezny.com/hardware/peripherals/buscard-ii-ieee-488-interface/])
 +
** MAYA Software Eprom Cart
 +
** PCC-4/PCC-8 Eprom Cart (Jason Ranheim)
 +
** "Alien Flash"
 +
*** VICEminus had this
 +
** [https://csdb.dk/release/index.php?id=150339 Software of Sweden Megacart]
 +
** [https://datadoor.bandcamp.com/album/dubcrt DUBCRT]
 +
** "MegaOne" - Easyflash compatible Flash cartridge, see [http://www.commodore.gen.tr/forum/index.php?topic=11933.210;wap2 here]
 +
 
 +
* Cartridges that wont be emulated:
 
** ''SoftPROM cartridge ([http://www.c64-wiki.de/index.php/SOFT-PROM])''
 
** ''SoftPROM cartridge ([http://www.c64-wiki.de/index.php/SOFT-PROM])''
 
*** ''pointless, unless software specifically designed for this cart can be found. other than that its just an ordinary 8k game cart (with battery backed up ram instead of rom). [[User:Gpz|Gpz]] 23:01, 30 October 2010 (UTC)''
 
*** ''pointless, unless software specifically designed for this cart can be found. other than that its just an ordinary 8k game cart (with battery backed up ram instead of rom). [[User:Gpz|Gpz]] 23:01, 30 October 2010 (UTC)''
Line 642: Line 908:
 
** ''64NIC''
 
** ''64NIC''
 
*** ''again, same as TFE. also has an optional eprom, which is equivalent to using cart8''
 
*** ''again, same as TFE. also has an optional eprom, which is equivalent to using cart8''
** MasC=uerade Cartridge Converter support, this cart is originally intended to use c64 carts on the vic20, but in theory could also be used the other way around. ([http://www.go4retro.com/projects/converter/])
 
** BI-80 cartridge support. ([http://mikenaberezny.com/hardware/peripherals/bi-80-display-adapter/])
 
** Buscard II IEEE488/printer-port cartridge support. ([http://mikenaberezny.com/hardware/peripherals/buscard-ii-ieee-488-interface/])
 
 
** ''"GeoAction"''
 
** ''"GeoAction"''
 
*** ''pointless, equivalent to Action Replay + GeoRAM/RamCart''
 
*** ''pointless, equivalent to Action Replay + GeoRAM/RamCart''
 
** ''"Flash Gordon"''
 
** ''"Flash Gordon"''
 
*** ''pointless, external kernal with flash, prototype (not released)''
 
*** ''pointless, external kernal with flash, prototype (not released)''
** "Disk Mate" (Datel)
 
** MAYA Software Eprom Cart
 
** PCC-4/PCC-8 Eprom Cart (Jason Ranheim)
 
** "Alien Flash"
 
  
 
* Userport
 
* Userport
Line 667: Line 926:
 
** Comet64 support. ([http://www.commodoreserver.com/ProductView.asp?PID=365065CF529B4C408F7D01C08BA34803])
 
** Comet64 support. ([http://www.commodoreserver.com/ProductView.asp?PID=365065CF529B4C408F7D01C08BA34803])
 
** L. Pantarottos adapter support. ([http://www.synnes.org/c64/c64_joy_adapter_schematics.html])
 
** L. Pantarottos adapter support. ([http://www.synnes.org/c64/c64_joy_adapter_schematics.html])
** Amiga mouse emulation on 4-player adapters. (http://noname.c64.org/csdb/release/?id=70238)
+
** WiC64 support ([https://www.wic64.de])
  
 
* Joystick Port
 
* Joystick Port
** BB-RTC (joystick port 2) support. ([http://members.optusnet.com.au/spacetaxi64/DRIVERS/DRIVER-FILES/bb-rtc.rar])
 
** c64/c128 numeric keypad support. ([http://www.64hdd.com/projects/c64-proj3.html])
 
 
** c64/c128 pc-joystick support. ([http://members.elysium.pl/ytm/html/projects.html])
 
** c64/c128 pc-joystick support. ([http://members.elysium.pl/ytm/html/projects.html])
 
** datel 3-button mouse support. ([http://members.optusnet.com.au/spacetaxi64/DRIVERS/DRIVER-FILES/1351a.rar])
 
** datel 3-button mouse support. ([http://members.optusnet.com.au/spacetaxi64/DRIVERS/DRIVER-FILES/1351a.rar])
** Koala-pad support. ([http://members.optusnet.com.au/spacetaxi64/DRIVERS/DRIVER-FILES/koala-pad&Animation%20station.rar])
 
** Covox Sound Master audio input (joystick port) support. ([http://members.optusnet.com.au/spacetaxi64/DRIVERS/DRIVER-FILES/voicemaster.rar])
 
 
** animation station support. ([http://members.optusnet.com.au/spacetaxi64/DRIVERS/DRIVER-FILES/koala-pad&Animation%20station.rar])
 
** animation station support. ([http://members.optusnet.com.au/spacetaxi64/DRIVERS/DRIVER-FILES/koala-pad&Animation%20station.rar])
 
** Power-pad support.
 
** Power-pad support.
 
** super sketch support. ([http://members.optusnet.com.au/spacetaxi64/DRIVERS/DRIVER-FILES/super-sketch.rar])
 
** super sketch support. ([http://members.optusnet.com.au/spacetaxi64/DRIVERS/DRIVER-FILES/super-sketch.rar])
 
** add support for switching the emulated 1351 mouse to joystick mode by doing a hard reset while pressing the right mouse button ( https://sourceforge.net/tracker/?func=detail&aid=2631893&group_id=223021&atid=1057620 )
 
** add support for switching the emulated 1351 mouse to joystick mode by doing a hard reset while pressing the right mouse button ( https://sourceforge.net/tracker/?func=detail&aid=2631893&group_id=223021&atid=1057620 )
 +
** <s>add support for 8player joystick adapter "inception" ([http://www.c64.cz/inception/])</s>
 +
** add support for the C-Net dongle ([https://1200baud.wordpress.com/2018/10/31/c-net-dongle-cracked/])
  
 
* Tape Port
 
* Tape Port
** RTC64 support. ([http://members.optusnet.com.au/spacetaxi64/DRIVERS/DRIVER-FILES/RTC64.rar])
 
** Access dongle (Leaderboard/10th Frame) (https://sourceforge.net/tracker/?func=detail&aid=3030703&group_id=223021&atid=1057620)
 
  
 
* Video output.
 
* Video output.
Line 701: Line 956:
 
* support for modified vic20 ( https://sourceforge.net/tracker/?func=detail&aid=3315683&group_id=223021&atid=1057620 )
 
* support for modified vic20 ( https://sourceforge.net/tracker/?func=detail&aid=3315683&group_id=223021&atid=1057620 )
 
* .crt like cartridge format (.vrt), perhaps take it from vice-minus ( http://viceminus.git.sourceforge.net/git/gitweb.cgi?p=viceminus/viceminus;a=commit;h=29c32f2ea2d299cb40228030c355625e800a00ca )
 
* .crt like cartridge format (.vrt), perhaps take it from vice-minus ( http://viceminus.git.sourceforge.net/git/gitweb.cgi?p=viceminus/viceminus;a=commit;h=29c32f2ea2d299cb40228030c355625e800a00ca )
 +
: .vrt is too complex, we should build a simple generic version that works mostly like .crt does so we can reuse a lot of code
 
* add Cartridge attach heuristic for image pairs
 
* add Cartridge attach heuristic for image pairs
  
 
====xplus4====
 
====xplus4====
* plus4 digiblaster audio input support. ([http://www.solder-synergy.net/plus4/hardware/makers/ioarea.txt])
 
 
* add support for "speedy" freezer cartridge
 
* add support for "speedy" freezer cartridge
  
Line 713: Line 968:
 
* 8296 pet switchable 4 screens output support.
 
* 8296 pet switchable 4 screens output support.
 
* pet IEEE488 -> IDE/RS232 support. ([http://petcbmide.blogspot.com/])
 
* pet IEEE488 -> IDE/RS232 support. ([http://petcbmide.blogspot.com/])
* High-Res Technologies Graphics Board support. ([http://mikenaberezny.com/hardware/projects/high-res-technologies-graphics-board/])
+
* High-Res
 +
** High-Res Technologies Graphics Board support. ([http://mikenaberezny.com/hardware/projects/high-res-technologies-graphics-board/], [http://www.6502.org/users/sjgray/computer/hsg/index.html])
 +
** Data Becker CBM-8000 hi-res graphics support. ([http://lc64.blogspot.de/2017/09/first-test-with-data-becker-hi-res.html])
 +
** SuperSoft High Resolution Graphics Board support. ([https://github.com/sjgray/SuperSoft-HR])
 +
** Eltec petGRAFIK support. ([http://www.cbmhardware.de/dlmanager/index.php?id=322])
 +
** Delph Electronics 8000C support. ([https://github.com/sjgray/Delph8000C])
 
* MTU K-1002-2 DAC sound system support. ([http://mikenaberezny.com/hardware/peripherals/mtu-k-1002-2-dac/])
 
* MTU K-1002-2 DAC sound system support. ([http://mikenaberezny.com/hardware/peripherals/mtu-k-1002-2-dac/])
  
 
====xcbm2====
 
====xcbm2====
* cbm2 z80 support.
+
* cbm2 z80, better nec v20, support.
* cbm2 8088 support. ([http://www.cbm-ii.com])
+
* cbm2 8088 support. ([https://github.com/MichalPleban/cbm2-8088-card])
 +
* B700 HiRes Graphics Board support. ([https://github.com/sjgray/B700-Hires-Card])
  
 
====Drives====
 
====Drives====
  
 
* (optionally) automatically enable warp mode when drives are being accessed. ( https://sourceforge.net/tracker/?func=detail&aid=2028999&group_id=223021&atid=1057620 )
 
* (optionally) automatically enable warp mode when drives are being accessed. ( https://sourceforge.net/tracker/?func=detail&aid=2028999&group_id=223021&atid=1057620 )
* add support for dual disk drives
 
 
* IEC
 
* IEC
** CMD harddrive support. ([http://members.optusnet.com.au/spacetaxi64/DRIVERS/DRIVER-FILES/cmd-hard.rar])  (https://sourceforge.net/tracker/?func=detail&aid=2786810&group_id=223021&atid=1057620)
 
 
** IEC2IEEE/RS232C adapter support. ([http://mikenaberezny.com/hardware/projects/interpod-ieee-488-interface/])
 
** IEC2IEEE/RS232C adapter support. ([http://mikenaberezny.com/hardware/projects/interpod-ieee-488-interface/])
 
** ''sd2iec / uIEC support ( https://sourceforge.net/tracker/?func=detail&aid=3287595&group_id=223021&atid=1057620 )''
 
** ''sd2iec / uIEC support ( https://sourceforge.net/tracker/?func=detail&aid=3287595&group_id=223021&atid=1057620 )''
 
**: ''somewhat pointless, since this would be very much what you get from using the virtual filesystem drive'' [[User:Gpz|Gpz]] 07:02, 11 July 2011 (UTC)
 
**: ''somewhat pointless, since this would be very much what you get from using the virtual filesystem drive'' [[User:Gpz|Gpz]] 07:02, 11 July 2011 (UTC)
 
* IEEE
 
* IEEE
** D9060/D9090 CBM harddrive support. ([http://members.optusnet.com.au/spacetaxi64/DRIVERS/DRIVER-FILES/D9090-D9060.rar])
 
 
** MiniChief type harddrives support. ([http://www.zimmers.net/anonftp/pub/cbm/manuals/drives/MiniChief.zip])
 
** MiniChief type harddrives support. ([http://www.zimmers.net/anonftp/pub/cbm/manuals/drives/MiniChief.zip])
 
** MW1000 HD support. ([http://members.optusnet.com.au/vortex69/HD-HISTORY/SSEL.doc])
 
** MW1000 HD support. ([http://members.optusnet.com.au/vortex69/HD-HISTORY/SSEL.doc])
Line 744: Line 1,002:
 
** DPS1101 support.
 
** DPS1101 support.
 
** MPS801 support.
 
** MPS801 support.
** MPS802 support.
+
** MPS802/CBM1526 support.
 
** MPS1000 support.
 
** MPS1000 support.
 
** MPS1250 support.
 
** MPS1250 support.
Line 750: Line 1,008:
 
* IEEE
 
* IEEE
 
** MPS1361 support.
 
** MPS1361 support.
** CBM1520 support.
 
** CBM1526 support.
 
 
** CBM4022 support.
 
** CBM4022 support.
 
** CBM8023 support.
 
** CBM8023 support.
Line 759: Line 1,015:
  
 
* add/implement C65 emulator ( https://sourceforge.net/tracker/?func=detail&aid=2472096&group_id=223021&atid=1057620 )
 
* add/implement C65 emulator ( https://sourceforge.net/tracker/?func=detail&aid=2472096&group_id=223021&atid=1057620 )
 
==new Ports==
 
 
* windows-ce X11 support.
 
* amiga X11 support.
 
* RiscOS X11 support.
 
* Port to Plan9
 
* Port to win16
 
* Port to win32s (maybe by using windib)
 
* Port to mips windows nt
 
* Port to alpha windows nt
 
* Port to ppc windows nt
 
* Port to windows-ce
 
* Port to macos classic (8.x/9.x).
 
* Port to VersaDOS
 
* Make OS/2 SDL port.
 
* Make atari mint SDL port.
 
* Make macos classic SDL port.
 
* Make dreamcast SDL port.
 
* Make GP32 SDL port.
 
* Make PSP SDL port.
 
* Make WII SDL port.
 
* Make PALMOS SDL port.
 
* Make GBA SDL port.
 
* Make NDS SDL port.
 
* Make PS2 SDL port.
 
* Make GameCube SDL port.
 
* Make VAX OpenVMS SDL port.
 
* Make ALPHA OpenVMS SDL port.
 
* Make HPPA OpenVMS SDL port.
 
* Make Symbian OS SDL port.
 
* Make XBOX360 SDL port.
 
* Make Ipod/Iphone SDL port.
 
* Make android SDL port.
 
* Make pandora SDL port.
 
* Make caanoo SDL port.
 
* Make wiz SDL port.
 
* Make GP2X SDL port with proper joystick/pad handling.
 
* Make zodiac SDL port.
 
* Make webOS SDL port.
 

Latest revision as of 00:02, 22 March 2022

This is the list of known problems. also look at Tracker: open Bugs

This list always refers to the status of the last major release version, which was 3.6. Items that have been fixed by the time of a major release will be removed, items fixed after that will be marked as fixed and stay until the next major version. New items will be added as noticed.

Contents

Prime Directive

  • All developers shall subscribe to the vice-emu-mail mailinglist and perhaps join #vice-dev on freenode too (highly recommended).
  • Please respect the coding guidelines.
  • Document your code so other people than you are able to understand and fix it in a decade or two.
  • When adding/changing stuff that needs (G)UI items/changes, all developers should update the SDL and GTK3 UIs themselves, and immediately following their respective changes.
  • When adding/changing command-line options and/or resources, adding a new feature or change the behavior of an existing feature, please update the documentation.
  • After fixing a bug or implementing a new feature, update its status on the Bug Tracker and mark it as fixed in the TODO list below.
Only remove a bug/feature from this list when it was fixed/implemented in the latest stable release.
  • And most importantly...
 <@_tlr> Please at least test the issue you were trying to fix before committing.
That means: you break it, you fix it. Do not commit deal breaking changes without communicating it with the rest of the team. Generally regressions are not acceptable and respective commits are subject to be reverted.

Code cleanup and streamlining

As of 3.2 we started removing a lot of the old cruft, that was dangling around in the tree for way too long, to make maintenance easier

  • remove compiler- and platform- specific hacks (IFDEFS) in common code
$ ./src/findhacks.sh ccarchdep
$ ./src/findhacks.sh archdep
  • TODO: Remove the 'dither' column from the palette files and update the code accordingly.

Build system

Documentation

Technical

  • many nodes are not yet linked correctly, which makes some of the exporters output garbled and/or suboptimal output (unix .info).
Workaround: use the .html or .pdf documentation, which is exported correctly.

Content

The documentation is partly outdated and/or incomplete, in particular:

  • some info that was previously hidden in target specific articles on the VICE knowledge base should get merged into vice.texi - the remaining articles are here
  • some descriptions of emulator formats are missing (D67, D1M, D2M, D4M...)
  • descriptions of several snapshot modules are missing (Plus4, TED...)

for details look at doc/Documentation-Howto.txt

Testbench

  • many test programs (mostly for vic20) are not yet integrated into the automatic testing
  • TODO: fix the reference screenshots and/or the scripts so they dont rely on the "normal" rendering mode anymore
  • TODO: make a test program to determine visible screen dimensions
  • TODO: make a test program to determine the type of delay line used for a PAL screen (UV or U only)

autostart problems

  • autostart seems to be broken in xcbm2 and xcbm5x0 at least with the settings the testbench wants to use
  • xplus4 gives "sound buffer overrun" on autostart with certain settings (which settings?)
  • x128 does not autostart prg files correctly when also a cartridge is attached (that forces c64 mode)

Emulators

Subsystems

Keyboard

  • When a key which is shifted on the real machine but unshifted on the PC or Unix keyboard you are using is pressed, the virtual shift is pressed together (i.e. at the same clock cycle) with the main key; this could not work with some keyboard routines.
note: also see this knowledgebase article
Workaround: If you have to use the function keys, press the (real) shift key manually (e.g. F2 = Shift + F1, F4 = Shift + F3 and so on); this also works with other keys.
  • When typing very quickly, some keypresses might get lost. This comes from the fact that the keyboard is (and can not) be scanned in real time (ie every 1mhz cycle). Even if we could remove the per frame scanning from the emulator itself, the operating system and last not least the keyboard itself would still impose a certain limit (something like 10ms for USB HID keyboards, for example). That means if a key is pressed and released within that timespan, the emulator does (and can not) know about it.
Workaround: the only workaround is to type slower, it cant be fixed. -- dqh: I believe this problem is basically resolved
  • Some ports/emulators/keyboard-types do not have all required keymaps (and a fallback will used) - look at Keymaps for details
  • Although "shift lock" can be mapped to a key, not all ports and/or emulators support it due to missing keymaps and/or implementation details.
TODO: check ports and fix or at least add a comment in the keymaps
  • contact-bounce is not emulated
TODO: make a proper test program

Joystick

TODO: make a proper test program
  • when selecting "swap joysticks" or "swap userport joysticks" this will actually swap the related resources, which may be surprising when saving settings and loading them later. it also means its impossible to display whether they are swapped or not in the UI.
TODO: create a "JoysticksAreSwapped" resource, and update the code accordingly. (This is partially solved in the Gtk3 UI by using two internal states, one for controlports and one for userport, and reflecting the state in the menu with checkboxes)

Joystick port devices

  • Paperclip 64 dongle emulation is broken
  • Gun Stick lightpen emulation is not working (and disabled, unless experimental devices are enabled in joyport.h)
  • add a monitor command to control the value of the 'I/O simulation device', something like jpdb <port> <value>
 The monitor command would call:
 joyport_io_sim_set_ddr_lines(0xff, port);   /* Set data direction to output for all joystick lines */
 joyport_io_sim_set_out_lines(value, port);
 ports 1&2 for x64/x64sc/xscpu64/x128/x64dtv/xcbm5x0
 port 1 for xvic
 ports 1&2&6 for xplus4
  • Add gtk3 ui support for the host joystick mapping system.
 joyport_map_desc_t *mappings = joyport_get_mapping(port);   /* get the mappings for the given port */
 char *port_name = joyport_get_port_name(port);              /* get the name of the emulated port */
 if (joyport_has_mapping(port)) {                            /* only if the given port has a device that has pins to map */
     char *emulated_joystick_device_name = mappings->name;   /* get the name of the emulated device in the given port */
     if (mappings->pinmap != NULL) {                         /* only if the device has pin (digital line) mappings */
         for (int i = 0; mappings->pinmap[i].name; i++) {    /* go through all the pin mappings, if mapping pin name is NULL then we have reached the end */ 
             char *pin_name = mappings->pinmap[i].name;      /* get the pin name */
             int pin_nr = mappings->pinmap[i].pin;           /* get the pin number */
             ...                                             /* build host joystick direction/button dialog based on the above info */
         }
     }
     if (mappings->potmap != NULL) {                         /* only if the device has pot (analog line) mappings */
         for (int i = 0; mappings->potmap[i].name; i++) {    /* go through all the pot mappings, if mapping pot name is NULL then we have reached the end */ 
             char *pin_name = mappings->potmap[i].name;      /* get the pot name */
             int pin_nr = mappings->potmap[i].pin;           /* get the pot number */
             ...                                             /* build host joystick analog axis dialog based on the above info */
         }
     }
 }

Userport devices

  • diag 586220 harness emulation is not working (and disabled, unless experimental devices are enabled in userport.h)

Tapeport devices

  • diag 586220 harness emulation is not working (and disabled, unless experimental devices are enabled in tapeport.h)

Commandline

  • some options where the available parameters depend on the machine type lack proper descriptions (-drivetype)

Resources

  • It's unclear what the "event_relevant" member of resources actually means, and what the difference between RES_EVENT_SAME and RES_EVENT_STRICT is. This needs to documented and then probably a lot of resources fixed to use the correct values.

Monitor

  • Breakpoints/watchpoints should consider banks.
  • When loading a snapshot, the monitor break/watchpoints break.
Binary Interface

The binary interface has a few design issues that should be fixed

  • Command 0x72 (feed Keyboard) expects "text" and special chars escaped with backslashes. This is not very binary, it should instead work with plain binary petscii codes.
  • Command 0x84 (get display) has several issues:
    • The first parameter should probably not be a boolean ("is this VICII?"), but "videochip number", with 0 being VICII and 1 being VDC on C128. Further Videochips could be added then (eg if we ever implement the BTX cartridge). Perhaps for compatibility reasons we start counting at 1, and make "0" a special parameter for "current one" I'm not sure what to do with this so I'm leaving it alone for the time being.
    • The format of the response should be always 8bit indexed colors. No RGB, No Targa (or whatever else) image headers. Perhaps for compatibility reasons we keep this one and require it being 0.
    • That also means the response format can be simplified
    • An extra command to request the active palette colors should be added, which returns the number of colors in the palette and the RGB values for them.

Also, the Documentation has some issues:

  • At some places it uses &foo and *bar to refer to "length" and a block of data(?). This is really weird and should be removed / replaced by something that is more clear.

Last not least the binmontest program needs cleanup, so it can serve as an example program:

  • Magic values are used for offsets at various places. It should use constants instead. Ideally, a common header file is used for both the test-program and the VICE code itself
  • Much more comments are needed in place of the various checks

I'm very lazy and don't want to spend a lot of time on the test code. I wrote everything very copy/paste to save time on writing them and to keep everything somewhat independent of each other. I also do not see it as an example program.

History Recording

  • history recording currently breaks on a lot of user actions, such as using autostart or attaching a cartridge.
Workaround: make sure to start up with a bog standard c64, and then load/run the program in question manually

note: since history recording is very error prone and hard to debug, we depend on feedback (on either failure or success) on this topic very much. if you still have problems with the current release, please report them including testcases.

Screenshots / Media Recording

  • Screenshots with activated video filter (CRT emulation / Scale2x) do not deliver the expected (filtered) result.

Rendering

  • some things are still shared by videochips although they shouldnt be, resulting in conflicts for eg the color generation (visible in x128 in ports that show two windows at a time, when crt emulation is enabled, eg adjusting brightness affects also the other window)
  • TODO add a 4:3 fixed aspect ratio scaling mode
  • TODO when a test program has been written, adjust the "normal" border mode accordingly (CAUTION: fix testsuite first)
  • TODO put all border mode parameters into arrays, make a global function to query the parameters and modes (for UIs) and then add "TV" mode (like "normal", but not centered)
CRT Emulation
  • the rf-modulator output characteristics are not emulated, which means the so called "black bleeding" effect does not work (emusux0r, http://www.csdb.dk/release/?id=81780)
  • artefact color and luma/chroma crosstalk are not emulated (eg the "red/green stripes")
  • color generation should get a partial rewrite according to new research by pepto (http://colodore.com)
  • FIXME: PAL delay line currently matches a 1701 (U only), "full" delay line is missing

see http://hitmen.c02.at/temp/palstuff/ for some further info on this topic.

Drive Emulation

  • G64 image support is incomplete, the speedzone definitions are completely ignored
Note: this is no problem in practise, so far not a single title (game) could be located that would actually require this kind of support to work. Incase you find a program that needs this kind of support, please let us know.
  • RPM and Wobble settings have currently no effect when P64 images are used
virtual Devices
  • handling of CBM style sub partitions is incomplete, write operations on sub partitions may give unexpected results.
  • RELative files are only supported when using disk images ( https://sourceforge.net/p/vice-emu/bugs/703/ )
  • support for double sided disk images is very shaky, since no concept of disk sides exists and the tracks on the second side are referenced by an offset into the image, the handling of images with different number of tracks is needlessly hard and complicated (and thus broken).
  • the IEEE machines use the "virtual devices" for something slightly different than the IEC machines, for the IEEE machines its more like what "IEC Device" means for the IEC machines. This should be handled with a seperate resource similar to "IEC Device" in the other emulators.
True Drive Emulation
  • serial timing latency is not implemented. due to their physical properties, it takes about half a cycle for a value to show up at the respective output pin after it has been written to the register. and respectivly, it takes about half a cycle from changing an input pin until the value in the respective register changes.
  • mechanical delays (such as head stepping and motor spinup) are not emulated yet.
  • accessing device #7 on the IEC bus works (only real devices), but it only works if True Drive Emulation is OFF, even though this has nothing to do with drives. This needs to be fixed in TDE somehow.
1541
  • 1541 Emulation still fails a few test programs
1571
  • 2mhz mode of the 1571 is not handled correctly
    • drive CPUs always run at 1Mhz for all drives (hardcoded 1000000 at a few places)
    • 1571 has extra delay on on reading sync inside the drive, ("you cannot use BVC in 2mhz mode!")
  • 1571CR emulation does not work correctly
  • double sided 1571 images do not work correctly
    • regular (70 tracks) vs extended (80 or 84 tracks) d71 images are not handled at all (vdrive problem)
    • creating (formatting) G71 does not work correctly, the second BAM block will be wrong (vdrive problem)
    • double sided P64 can be used, but can not be created from within VICE (see patch #122, r32586). since these are non existant "in the wild" and probably not needed for anything - not a big problem :) to handle this properly, a seperate image format should get created (at least internally)
Extensions
  • when using dolphin dos 3 emulation, the state of the mc6821 is not saved to/restored from snapshots
  • when using supercard+ emulation, the optional additional index hole sensor (for the IHS nibbler) is not emulated
Drive Noise
  • since the current implementation is a very simple sample player, things like "drive composer" will not work

Datasette Emulation

  • unlike with a real datasette, the emulated counter will stop counting when no tape/image is present
  • when a t64 image is attached, the datasette status will incorrectly say "no image".
Note: since t64 is currently only accessable via kernal traps, the datasette emulation actually treats this case as if no image is present. The respective code must be updated so the datasette emulation actually "knows" about when t64 is in use.
  • motor noise is not emulated

Tape port devices

  • DTL Basic Dongle emulation is broken
  • Tapeport device selection should be reworked so only one device can be selected at a time

Printer Emulation

there perhaps should be a way to explicitly set a directory for printer output files Gpz 01:24, 4 July 2011 (UTC)
  • printer noise is not emulated
  • printers don't work on the PET (or other IEEE-488 computers)
-> the reason for that is that they use either device traps or IEC Devices, none of which exists on the IEEE machines

RS232 Emulation

  • piping to an external program does not work on windows

Detailed info on the state of RS232 emulation can be found here.

ROMsets

  • all traces of "ROMset archives" should be removed. Nothing uses this, and no UI ever supported it correctly.
  • a generic function should be created which scans the data directory of the emulator and returns a list of all .vrs files for the UI
    • then the UI can use said list in a dropdown list for quick selection

c1541

unfortunately to fix this a lot of c1541 will have to be rewritten (mount image only once, not for each operation) Gpz (talk) 23:57, 13 December 2012 (UTC)
  • Remove optional dependency on libreadline once linenoise-ng has been tested properly.
See if linenoise-ng can be made to work with the MSYS2 shell, which would help with debugging c1541.

Chips

VIA

  • MYVIA_NEED_LATCHING option is broken
  • the code doesn't actually notify anything outside the chip when PB7 toggles
    • Same so far for the output from the shift register and its handshaking

used in: VIC20, PET, various drives

CIA

  • the case when CIA1 port A and port B are both in output mode, port A outputs low, port B outputs high, both are connected via the keyboard matrix and a value is read from port B is not handled correctly ( testprogs/CIA/ciaports ; http://noname.c64.org/csdb/release/?id=5375 ) (has been improved but is not perfect)
  • the various analog side effects that must be considered when pressing two or more keys are not emulated correctly, so this will currently not produce the correct results in some corner cases.
  • Shift Register IRQ triggers one cycle too early (see this bug)

used in: C64, C128, 1570/71

SID

  • the POTX/POTY sampling period is not taken into account (512 cycles)
  • POTX/POTY sampling jitter is not emulated
  • only one mouse or pair of paddles can be emulated at a time
  • 'dump' support in the monitor is missing

used in: C64, C128, CBM2, (VIC20, PLUS4, PET: SID cart)

TED

used in: Plus4

VDC

  • Some basic features of the VDC are missing:
  • Registers 34/35 (horizontal blanking position) not implemented
  • $d600 bit 7 STATUS flag is only approximately implemented. Fixing requires emulating the internal timing of the VDC.. (partially implemented in r35456, also see testprogs/VDC/vdctiming)
  • Differences between 8563 and 8568 are not all emulated, eg. register 38
  • Snapshot doesn't include VDC
  • Clock calculation for lightpen is incorrect (?)
  • Can't resize the screen enough to fit all video modes, e.g. vdcmodemania high resolution modes. Aspect ratio needs to change on the fly too.
  • Screen position is not always correct, e.g. vdcmodemania FLI parts

used in: C128

VIC

used in: VIC-20

VIC-II

used in: C64, CBM2

VIC-IIe

  • The test bit is not emulated, which results in things like 'real interlace' ([1]) and the $D030 new VIC-IIe color palette hack ([2]) not working.

used in: C128

t6721a

  • 48bit frames support is incorrect/broken
  • synthesizer condition 2 loss-effect-, shape- and repeat- bits have no effect
  • reading from the speach rom is not emulated (which is not really an issue since neither magic voice nor v364 have one)
  • snapshot support is missing

used in: Magic Voice, Plus4 (V364)

mc6821

  • interrupts are not implemented
  • implementation of C2 output modes is incomplete

used in: Formel64, Magic Formel, Dolphin-DOS 3

CS8900a

  • snapshot support is missing

used in: RR-Net/TFE

RIOT

  • I/O "peek" function is broken
  • I/O "dump" function is missing

used in: 2040/3040/4040/1001/8050/8250

PC8477/DP8473

  • I/O "dump" function is missing

used in: FD4000/FD2000

WD1770

  • I/O "dump" function is missing

used in: 1570/1571/1581

ACIA (6551)

Detailed info on the state of RS232 emulation can be found here.


Cores

spi-sdcard

  • snapshot support is missing

used in: MMC64, MMC Replay

ser-eeprom

  • snapshot support is missing

used in: MMC Replay

midi

  • snapshot support is missing

used in: C64, VIC-20


Machines

vsid

x64 / x64sc

NOTICE:

Since revision 36182 (2019-04-08), VICE will no longer build the old x64 binary by default. To make VICE build x64, pass `--enable-x64` to configure.

general
  • the memory layout for "Max Machine" is not yet correct
  • when SX-64 is selected, the tick for the CIA TOD clocks should always be 60Hz (regardless of PAL/NTSC)
  • for details see C64models
x64 issues addressed by x64sc

To clarify... these will never (as in can't) be emulated in the regular x64, unless we end up replacing x64 with x64sc.

  • some VIC-II bugs present in the old VIC-II core
    • inline gfx data changes are not emulated (see testprogs/VICII/gfxfetch/)
    • The VIC-II implementation lacks cycle exact sprite collision support
    • VIC-II shows wrong colors when switching from hires background to idle with borders open (see testprogs/VICII/border/*, Krestology)
    • VIC-II fetches from cartridge in ultimax mode can not be emulated properly for all carts

note: this is also broken in xcbm2

Workaround in all cases: use x64sc :)

x64 specific problems

note: While most of the x64sc improvements/fixes are impossible to shoehorn into x64 (hence the split), a few things could still be improved:

Workaround in all cases: use x64sc :)

Cartridge System

note: the detailed todo list/status is here.

  • some carts have no snapshot support yet (still broken: Magic Voice, MMC Replay, RR-Net MK3, Ethernet.)
    • IDE64 & ATA system can only handle "readonly" snapshots now. Somehow the image file must be matched to the snapshot to prevent corruption.
    • MMC64 snapshots do not include the SD-card
  • some carts do not work 100% yet (still broken: Magic Voice, MMC Replay.)
    • Magic Voice: emulation of the speech chip is incomplete (see Todo#t6721a), this breaks some words included in the magic voice rom and the "a-bee-c" cartridge. Memory mapping is incomplete/broken (which however affects no known software/testcase).
    • MMC Replay: only the BIOS mode works right now; the monitor may incorrectly access cartridge memory (even) if "bank cart" is explicitly set
  • the (very strange, and incompatible with most cartridges) passthrough port of the SFX sound expander is not emulated
  • various cartridges have no support for verbose i/o dump in the monitor
  • Passthrough port functionality depends on ordering of cartridge attaches, especially visible from the command line. (e.g. MMC64+RR ok, RR+MMC64 not)
  • TODO: IDE64 is missing a "make HD image read only" resource
  • TODO: IDE64 saves its config data into vicerc - it should use a bin image like every other cartridge
  • RAM link has some implementation problems
    • it uses the "Main Slot" allthough it has a Passthrough port - it should use "Slot 0" instead
    • it uses the "main image" API for save-as and flush - this is technically wrong and can only "work" right now because the "main image" (which is the ROM!) can not be changed
      • TODO: we need to create an API for saving/flushing secondary images (such as additional cartridge RAM or EEPROMs)

x128

  • Support for fast mode (2MHz) is implemented but incomplete, detailed information about the stealing of cycles by the VICII when switching back from fast mode is missing and therefor the emulation of it is incorrect.
  • support for c128 specific expansion port handling/mapping is missing in the c64/c128 cartridge system (MMC Replay, FastLoad128, MACH128, other?)
  • the relative speed and details like cycle-stealing of the z80 is inaccurate ( https://sourceforge.net/tracker/?func=detail&aid=3476760&group_id=223021&atid=1057617 )
xmx provided a test program, see testprogs/c128/z80/cycletimer
  • CPU history (chist) implementation is incomplete

xvic

Cartridge System
  • cartridge_get_info_list is not implemented
  • CRT/BIN saver are missing
    • writeback with crt file is not implemented
    • GUI elements for "save cartridge" are missing

x64dtv

The DTV emulator is very inaccurate and is in need of a partial rewrite. Maintainer wanted!

  • Misery 3: (http://noname.c64.org/csdb/release/?id=83196)
    • fails emudetect
    • plasma part is missing badlines
  • switching VICII border mode resets x64dtv ( https://sourceforge.net/tracker/?func=detail&aid=3004255&group_id=223021&atid=1057620 )
  • CPU history (chist) implementation is incomplete
  • the "PS/2 Mouse at Userport" should get refactored to be a regular Userport device in the common Userport system
  • "enable Userport Joystick" vs "Hummer Userport Joystick" is strange and confusing, especially since in the DTV emulator we dont even have a "UserportJoyType" selection. the regular "DTV Joystick on Userport" should become a regular Userport device.

xplus4

The plus4 emulator is generally work in progress and not yet "ready". Maintainer wanted!

Cartridge System
  • handling of the c0/c1/c2 roms is weak
    • cartridges share the same roms as internal roms
    • roms are not removed from the memory map if not present (just cleared)
  • "mmu" memory translation table handling is not implemented for cartridges
  • snapshot implementations are completely untested
  • .crt support is missing

xcbm2

  • The CBM-II emulator, when the execution bank is set to an open memory bank, sets the zeropage and stack access to unmapped, but actually existing memory. This is a bug but cannot be avoided with the current CPU code architecture.
  • break- and watchpoints in zeropage are broken. this is because of the old cpu core, and can likely not be fixed without migrating to the new one.
  • banking in the monitor is broken
  • breakpoints are broken
    • when a breakpoint is hit, the monitor disassembles from the wrong bank
    • breakpoints will only hit in the bank which is active in the monitor (!)
  • when running the burn-in diagnostic tests, the CIA is reported as bad ( https://sourceforge.net/tracker/?func=detail&aid=3102493&group_id=223021&atid=1057617 )
note: run like this: xcbm2 -model 610 -ntsc -drive8type 8050 -virtualdev +truedrive -8 cbm2-burnin.d80
  • CPU history (chist) implementation is incomplete
Cartridge System
  • not implemented yet

xcbm5x0

  • The emulator, when the execution bank is set to an open memory bank, sets the zeropage and stack access to unmapped, but actually existing memory. This is a bug but cannot be avoided with the current CPU code architecture.
  • break- and watchpoints in zeropage are broken. this is because of the old cpu core, and can likely not be fixed without migrating to the new one.
  • banking in the monitor is broken
  • In the C510 emulation the VIC-II timing is not exact, i.e. the stopping of the CPU during bad lines is wrong.
  • The C510 emulation uses the old VIC-II core which means no cycle exact sprite collisions, no inline gfx changes, and probably more.
  • CPU history (chist) implementation is incomplete
Cartridge System
  • not implemented yet

xpet

  • When running the "8296d diagnostic" test of the 8296 system disk on "xpet -model 8296" some tests fail:
    • when TDE is enabled, the program will hang. when TDE is disabled, the IEEE interface status will be reported as bad
    • the userport is reported as bad (perhaps some dongle is needed?)
note: run like this: "xpet -model 8296 -drive8type 8050 -8 8296d-systemdisk.d82 -editor edit-4-80-b-50Hz.901474-04.bin". the "burnin8296" program seems to be an older version of the "8296d diagnostic" program. it runs when TDE is enabled, but the 50Hz irq test fails.
  • break- and watchpoints in zeropage are broken. this is because of the old cpu core, and can likely not be fixed without migrating to the new one.
  • some combinations of selected keymap and keyboard model do not work because of missing keymaps
    • also the keymaps must match the "editor" ROM - currently only the UK (Business) ROM in included in VICE
    • the keymaps for US (host) keymap need to be checked and fixed
  • CPU history (chist) implementation is incomplete

Ports

archdep

Windows

Linux

*BSD

BeOS

  • BUG: Sound problems on slower machines (P100) with a non-official driver for sb16.
  • BUG: Compiling with `--enable-ethernet` fails due to absence of rawnetarch.{c,h} missing --Compyx 2016-10-26 (tested on Haiku)

GTK3 UI

The how and why we go Gtk3 for *nix, Windows and OSX should be clear, but I'll reiterate: since we don't have any Windows maintainters left and failed to attract new ones, the decision was made to use Gtk3 as the new UI for 'modern' OSes.

Gtk3 is portable and widely supported and has a C interface. So we should be able to write the UI code once and have it run on our major platforms: Linux, Windows and OSX. Using GLib (a dependency of Gtk3) a lot of platform-dependent code in the UI can be avoided and many standard dialogs, such as open/save/select-dir need to written only once, Gtk3/GLib will handle most of the platform-dependent stuff.

The list of covered resources is here

UI code refactoring to support the new threaded UI code

This means a lot of work testing, documenting and debugging, so it deserves a separate page: Gtk3 Threaded UI

This is fixed in 3.6, though VSID might require some more work.

BUGS/TODO

This is a list of things to do and bugs to fix. This is no way an exhaustive list, to get a better understanding of what needs to be fixed/altered, run this command inside VICE's top dir: grep -n 'FIXME\|TODO\|XXX' `find src/arch/gtk3 -name '*.c'`, and be amazed.

  • Write documentation on how to use the UI
  • TODO: Add support for non-ASCII characters in the various file/path dialogs (snapshot, maybe even the various cartridge image/eeprom paths and the machine/drive ROM paths) (fixed?)
Menus
Main window(s)
  • TODO: make sure both hard- and software rendering match whats described in Scaling_cleanup - if so, the page can be cleaned out
Implemented, but only for a single display, no multi-display support yet. GDK seem to support multi-display setup querying, but we'd actually have to write code and test this to see how GDK handles this, if at all. (fixed?)
    • do not forget the VDC and the Monitor windows (fixed?)
VDC is handled, the monitor windows isn't, there aren't any resource for the monitor window, nor any event handlers. Another wish seems to be to put the VICII and VDC window next to each other for x128, which will probably mean introducing yet another resource to control this and override the Window1* resources. Probably some enum: USE_WINDOW1* = -1, ABOVE, BELOW, LEFT, RIGHT. And hope the Window Manager actually listens to our requests to move said window.
  • BUG: mouse grab (when mouse emulation is enabled) is not perfect. eg when the emulator is started with mouse enabled, the pointer is not initially moved into the emulator window.
Statusbar
  • BUG: On MacOS and Windows, the slider popup widget is hidden behind the rendered canvas, on Linux this works as it should. So currently the volume widget is disabled on MacOS and Windows
Dialogs
  • TODO: Polish the keyset dialog: at there very least split the UI into a 3x3 grid for the directions and a 4x2 grid for the fire buttons. Maybe use icons for the direction if they're in the default Gtk icon set.
Settings
  • TODO: ROM-set manager/settings need to be reworked and fixed. ROMset "archives" should be removed completely. see #ROMsets
  • TODO: HardSID settings are missing
Pet model
  • TODO: xpet seems to be fine, someone with actual PET knowledge should check this, especially the "SuperPET" stuff. (fixed?)
CBM2 model (xcbm2/xcbm5x0)
  • TODO: Check model settings glue logic.
Mostly works, the 50/60Hz switch is a problem. I'll need someone with some actual CBM-II knowledge to help me out here. Compyx 2020-01-08
Drive
C64 Cartridge
  • TODO: check I/O extensions for proper behaviour (attach/detach, load/save images etc):
    • GEO-RAM
    • RamCart
    • Expert Cartridge
    • ISEPIC
    • EasyFlash
    • GMod2
    • IDE64
    • MMC64
    • MMC Replay
    • Retro Replay
    • RR-Net Mk3
Game Controller / Joysticks
  • TODO: we need an interface to map controller buttons and axis to joystick emulation, keyboard input and GUI actions
    • at this point, make sure the mapping can be different for each connected joystick
    • also make sure support for 2nd and 3rd button is handled correctly
  • TODO: joy-osx.c contains a lot of resources and commandline options that should not be there, but live in common code instead. this needs some refactoring to make game controllers work the same in all ports
    • similar for at least joy-unix.c, but commented out
vsid
  • BUG: Fix drag-n-drop behaviour, dragging multiple SID files onto the playlist widget works, but on Linux at least, dropping a SID file on the STIL view widget doesn't work (specifically the GtkTextView), this works on Windows oddly enough.
  • TODO: Implement "goto-next-SID" when having SLDB support enabled.
  • BUG: STIL view: some tunes (for example Last Ninja 2) print empty "tune #x" entries, so you'll get "Tune #1" in blue and a few empty lines, in the case of LN2 this goes on until tune #6. Most likely a bug in the use of hvsclib, not the lib itself.
  • TODO:Playlist: allow keyboard navigation. Perhaps also multi-select via Ctrl or Shift to delete multiple entries?
Monitor

The GUI based monitor currently uses a mercylessly hacked VTE library. When we looked for a way to put the monitor into a console window that works with GTK3, this seemed to be the only way to do it. The ugly hacks were required to make VTE compile and work on windows. This is also why we cant use a more modern version of the VTE library.

  • TODO: On the long run, we will have to write a custom renderer for a monitor window, which supports all the things we need to implement a classic "fullscreen editor" like ml monitor.
  • TODO: Again as a long term goal, we might want to support transparent support for native charsets

for some info on the monitor ui see: MonitorUI.

Unix (Linux)
Windows
macOS
  • GSettings schema files aren't loaded, so things like GtkFileChooser cause an abnormal exit, which means attaching disk images doesn't work. (fixed?) fixed in trunk, a long time ago.
  • TODO: joystick_ui_get_next_device_name should return the detected joysticks instead of the predefined list (fixed?)
  • TODO: test mouse -emulation and -grab. (this works properly now, iirc?)
  • TODO: the MIDI settings widget should show a combobox with supported drivers
  • TODO: Add QuickTime recording settings widget, like the FFMPEG recording settings widget QuickTime will not be needed
  • TODO: Make the GTK UI create/use the macOS style "top menubar"
  • TODO: joy-osx.c contains a lot of resources and commandline options that should not be there, but live in common code instead. this needs some refactoring to make game controllers work the same in all ports
OpenGL
  • TODO: The OpenGL renderer should transform itself into a Cairo renderer if the system doesn't support OpenGL. (fixed?)
    • Stretch goal: the OpenGL renderer should fall back to legacy mode (the SDL renderer) if GTK3 itself has, instead of failing.
  • TODO: Do-not-scale option. Important for Cairo renderer, possible for OpenGL.

Feature requests / Stretch goals

  • Make 'smart cartridge attach' dialog smarter when attaching .bin images, show only valid cartridge types when selecting a cart image.
    • TODO: this needs a new API call that returns the valid sizes for a given type
  • make an option to force display size to 1x/2x/3x/4x
  • make a GUI based editor for keymaps
  • add statusbar indicators for stateful keys like Caps Lock and 40/80 Cols.
  • add statusbar indicators for cartridge LEDs.
VSID
  • Implement a playlist for VSID (partly done)
  • Add some sort of tree-based file browser (preferably using the HVSC as the default dir) to allow quick tune selection and help with building a playlist (ie via drag-n-drop)
  • Add HVSC BUGlist support to VSID
Support for this is available in src/hvsc, but there are very few actual entries in the BUGList.txt file. Maybe skip this one?

Upstream bugs

See Upstream bugs

SDL UI

BUGS/TODO

  • Write documentation on how to use the UI
  • BUG: FFmpeg media recording behaves unexpected when entering the menu [3]
Menus
  • TODO: some menu items need status text to show that the action has been done.
    • Drive>Fliplist settings>Add current image to fliplist
    • Drive>Fliplist settings>Remove current image from fliplist
    • Drive>Fliplist settings>Attach next image in fliplist
    • Drive>Fliplist settings>Attach previous image in fliplist
  • BUG: at a lot of places "inactive" (as in "cant be selected") menu items are missing the "N/A" on the right
  • TODO: A better way of showing filenames (maybe using contraction) needs to be made
Joysticks
  • TODO: selecting the joystick device (when more than one is connected) is not possible, it will always use the first it finds
    • also the joystick mapping is the same for all devices, the code must be reworked so each joystick can be different (eg one ps3 pad, one classic joystick)
Monitor
  • TODO: implement a scrollback buffer
File Selector
  • TODO: add filtering in file requester
Virtual Keyboard
  • TODO: shift/cbm/ctrl should be "sticky" (right now shifted keys are entered using backspace/cancel - which is odd)
  • TODO: the virtual keyboard handling of the SDL port must be updated/fixed to support all PET keyboards
VSID
  • TODO: Implement a playlist for VSID
  • TODO: Add HVSC song length database (SLDB) support to VSID (both .txt and .md5 file format)
  • TODO: Add HVSC sid tune information list (STIL) support to VSID
  • TODO: Add HVSC BUGlist support to VSID

Windows

  • TODO: embed icons into windows .exe files (fixed?)

OSX

  • BUG: Sound starts to distort heavily after few minutes [4] (fixed?)
  • BUG: Sounds terrible unless sampling is lowered from default 44Khz to 22Khz [5] (fixed?)
  • BUG: Emulator in default config makes no sound unless the OutputMode is changed to Stereo. [6] (fixed?)

External Libraries

VICE uses a few external libraries of which either header files or complete sources are included in the tree:

  • opencbm (src/opencbm.h) (https://sourceforge.net/p/opencbm/)
    • should get moved to src/lib/..
  • P64 (src/lib/p64)
  • ffmpeg (src/lib/libffmpeg)
    • building with `--enable-shared-ffmpeg` will fail when not root. VICE's configure triggers a build and install of liblame which tries to install into /usr/local/lib.
    • building out-of-tree currently fails with:
In file included from ../../../vice/src/lib/libffmpeg/libavutil/avutil.h:289:0,
                 from ../../../vice/src/lib/libffmpeg/libavutil/samplefmt.h:24,
                 from ../../../vice/src/lib/libffmpeg/libavcodec/avcodec.h:31,
                 from ../../../vice/src/lib/libffmpeg/libavformat/avformat.h:255,
                 from ../../../vice/src/gfxoutputdrv/ffmpeglib.h:36,
                 from ../../../vice/src/gfxoutputdrv/ffmpegdrv.c:37:
../../../vice/src/lib/libffmpeg/libavutil/common.h:50:10: fatal error: libavutil/avconfig.h: No such file or directory
 #include "libavutil/avconfig.h"
          ^~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
Makefile:507: recipe for target 'ffmpegdrv.o' failed
TODO: rip out ffmpeg from the tree, disable "internal" ffmpeg support

besides the above, other libraries are used which are currently linked dynamically and must be supplied as dlls for the windows port

  • SDL
  • zlib
  • hardsid

Rewrites

  • The "sc" rewrites. Migrate emulators to the cycle based CPU core (6510dtvcore.c, should be renamed), which allows:
    • cycle based hooks for complex hardware expansions (SCPU)
    • in-line graphics data change emulation (see testprogs/VICII/gfxfetch)
    • cycle exact Blitter/DMA vblank start and proper LinearA/B counter handling on x64dtv
    • cycle based drawing
  • ...and requires (at least):
    • rewrite video chip modules to use:
      • cycle based fetch/etc (VIC & VICII done, VICII-DTV in progress)
      • cycle based drawing (VICII done)
    • remove 1 clock write offsets (at least CIA/VIA already handled)
    • an insane amount of regression testing (preferably with new testprogs where needed)

New Features

This is the place for the VICE developers to put down ideas about the future development of VICE.

Some of these ideas might never be realized, and might look completely absurd, but they could be the inspiration for other ideas.

By putting these ideas down they will be known to any other developers that would like to pick up one of the ideas and implement it.

also look at Tracker: open Feature Requests

general

  • native screenshot support. (in progress)
add Minigrafik/Minipaint format (VIC20 native) (in trunk)

History Recording

Snapshots

Keyboard

Tape

Monitor

Sound System

Video System

  • some kind of generic interface to handle video input is required to handle scanner/digitizer type of carts

Hardware emulation

SID

x64(sc)

  • internal (?)
    • c64/c128 1.44 MB disk drive support. ([7])
    • c64/c128 SCSI expansion support. ([8])
  • Cartridges
    • IDE64 improvements
      • IDE64 eth64 shortbus expansion support. ([9])
      • IDE64 duart shortbus expansion support. ([10])
    • Clockport improvements
      • Silversurfer (UART) support ([11])
      • IDE64 based eth64-II support ([12])
    • Community Information Locator Commodore 64/128 addon cartridge ([13])
    • Daisy Sound sampler audio input support. ([14])
    • PS64 speech cartridge support. ([15])
    • Voice Messenger speech cartridge support. ([16])
    • ramdrive support. ([17])
    • turbo master cartridge support (4Mhz 65C02). ([18] [19])
    • turbo process cartridge support (4Mhz 658156). ([20] [21])
    • flash-8 cartridge support (8Mhz 65816). ([22])
    • SCPU cartridge support (20Mhz 65816). (in progress, has lead to a new emulator called xscpu64) ([23] [24]) (https://sourceforge.net/tracker/?func=detail&aid=2030692&group_id=223021&atid=1057620)
    • The Final Chesscard (65c02) ([25])
    • German Btx cartridge (6803)
    • MasC=uerade Cartridge Converter support, this cart is originally intended to use c64 carts on the vic20, but in theory could also be used the other way around. ([26])
    • BI-80 cartridge support. ([27])
    • Buscard II IEEE488/printer-port cartridge support. ([28])
    • MAYA Software Eprom Cart
    • PCC-4/PCC-8 Eprom Cart (Jason Ranheim)
    • "Alien Flash"
      • VICEminus had this
    • Software of Sweden Megacart
    • DUBCRT
    • "MegaOne" - Easyflash compatible Flash cartridge, see here
  • Cartridges that wont be emulated:
    • SoftPROM cartridge ([29])
      • pointless, unless software specifically designed for this cart can be found. other than that its just an ordinary 8k game cart (with battery backed up ram instead of rom). Gpz 23:01, 30 October 2010 (UTC)
    • Net64 cartridge support. ([30])
      • this is exactly the same as "the final ethernet" (which is emulated) Gpz 23:27, 30 October 2010 (UTC)
    • 64NIC
      • again, same as TFE. also has an optional eprom, which is equivalent to using cart8
    • "GeoAction"
      • pointless, equivalent to Action Replay + GeoRAM/RamCart
    • "Flash Gordon"
      • pointless, external kernal with flash, prototype (not released)
  • Userport
    • CBM1660 (userport) modem300 support. ([31])
    • CBM1670 (userport) modem1200 support. ([32])
    • FB-RS232 (userport) support. ([33])
    • c64 p64 midi interface: ([34])
    • Scanntronik handyscanner (userport) support. ([35])
    • Video Byte II video digitizer (userport) support. ([36]) ([37])
    • Computera Eyes video digitizer (userport) support. ([38] [39])
    • Userport RocketDrive support. ([40])
    • CIA-IDE-HD support. ([41])
    • Aprotek universal rs232 adapter support. ([42])
    • Comet64 support. ([43])
    • L. Pantarottos adapter support. ([44])
    • WiC64 support ([45])
  • Tape Port
  • Video output.
    • c64 LCD64 screen support. ([52])

x128

  • c128 plus60k support.
  • c128 plus256k support.
  • c128 256K memory expansion hack support.

xvic

.vrt is too complex, we should build a simple generic version that works mostly like .crt does so we can reuse a lot of code
  • add Cartridge attach heuristic for image pairs

xplus4

  • add support for "speedy" freezer cartridge

xpet

  • PET ROM-socket RTC support. ([56])
  • 8296 pet hardware ram lines connected to userport support.
  • 8296 RAMdisk 2008 support. ([57])
  • 8296 pet switchable 4 screens output support.
  • pet IEEE488 -> IDE/RS232 support. ([58])
  • High-Res
    • High-Res Technologies Graphics Board support. ([59], [60])
    • Data Becker CBM-8000 hi-res graphics support. ([61])
    • SuperSoft High Resolution Graphics Board support. ([62])
    • Eltec petGRAFIK support. ([63])
    • Delph Electronics 8000C support. ([64])
  • MTU K-1002-2 DAC sound system support. ([65])

xcbm2

  • cbm2 z80, better nec v20, support.
  • cbm2 8088 support. ([66])
  • B700 HiRes Graphics Board support. ([67])

Drives

Printers

Misc