Todo: Difference between revisions

From vice-emu
Jump to navigation Jump to search
(Undo revision 3560 by Polluks (talk))
 
(732 intermediate revisions by 9 users not shown)
Line 1: Line 1:
==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.
* 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.
* 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 list below.
<pre>
<@_tlr> Please at least test the issue you were trying to fix before committing.
</pre>
----
==Known Issues==


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 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.0'''. 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.
This list always refers to the status of the last major release version, which was '''3.8'''. 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==


===Documentation===
* '''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).
====MAN Pages====
* Please '''respect the [https://sourceforge.net/p/vice-emu/code/HEAD/tree/trunk/vice/doc/coding-guidelines.txt coding guidelines]'''.
* the man pages are very outdated and should perhaps be generated from the infotext
* '''Document your code''' so other people than you are able to understand and fix it in a decade or two.
** the man pages refer to the path where the html documentation can be found, this should get adjusted to whats actually used
* 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.
* the following man pages are missing: vsid
* 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'''.
* man pages for the individual emulator binaries should get installed as symbolic links to vice.1
* 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.'''


====Manual====
==Testbench==
=====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=====
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...)
* descriptions of several snapshot modules are missing (Plus4, TED...)
* generate target specific documentation
** win32 documentation. (.chm format)
** amiga documentation. (.guide format)
** BeOS documentation.
** MSDOS documentation. (.txt format)
** OS/2 documentation. (.inf format)
** RiscOS documentation.
** SDL documentation.
 
for details look at doc/Documentation-Howto.txt
 
----
 
===Testbench===


* many test programs (mostly for vic20) are not yet integrated into the automatic testing
* 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''': 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 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 ===


----
* x128 does not autostart prg files correctly when also a cartridge is attached (that forces c64 mode)
 
==Emulators==


===Subsystems===
===Subsystems===
====Translation====
* Support for more languages.
* Translation support for BeOS.
* Translation support for MSDOS


====Keyboard====
====Keyboard====
Line 70: Line 37:
* 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 [[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. In any case, using a positional keymap will remove much of this problem.
 
: '''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.


* Some ports/emulators/keyboard-types do not have all required keymaps (and a fallback will used) - look at [[Keymaps]] for details
* Some ports/emulators/keyboard-types do not have all required keymaps (and a fallback will used) - look at [[Keymaps]] for details
Line 88: Line 49:
====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 )
WIP [[Joymappings]]
* 2nd button of C64GS joystick (cheetah annilihator) not implemented ( http://sourceforge.net/p/vice-emu/feature-requests/189/ )
 
* contact-bounce is not emulated
* contact-bounce is not emulated
: '''TODO''': make a proper test program
: '''TODO''': make a proper test program


====Joystick port devices====
====Monitor====
 
* TODO: Breakpoints/watchpoints should consider banks, and perhaps PLA/MMU config
* banking should somehow work also with cartridges. for this some generic interface in the cartridge system needs to be created


* Paperclip 64 dongle emulation is broken
===== Profiler =====


====Commandline====
The new profiler feature is still incomplete ( https://sourceforge.net/p/vice-emu/patches/350/ )


* some options where the available parameters depend on the machine type lack proper descriptions (-drivetype)
* support for banking (main CPU) is only implemented in x64(sc) right now
** banking should somehow consider cartridge banks, once we have generic support for it in the monitor
* perhaps additional stats for "stolen cycles" (cycles used by the VICII) can be added
* branch taken / not taken statistics
* support for drive CPUs is missing
* support for other CPUs than 6502 is missing
* binary remote monitor commands need to be implemented (perhaps once more of the above works, so we know how these must look like)


====Monitor====
===== Binary Interface =====
 
The binary interface has a few design issues that should be fixed
 
* 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.'''
 
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:


* When loading a snapshot, the monitor break/watchpoints break.
* 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
* More comments are needed in place of the various checks


====History Recording====
====History Recording====
Line 126: Line 108:
* 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")
* color generation should get a partial rewrite according to new research by pepto (http://colodore.com)


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 132: Line 113:
====Drive Emulation====
====Drive Emulation====


* Dual disk drive 2040/3040 support (DOS1, 670 blocks free) is not working
* when using a dual drive, and no TDE, only the first drive (0:) can be used.
* G64 image support is incomplete, the speedzone definitions are completely ignored
* 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.
: ''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.
Line 143: Line 122:
* RELative files are only supported when using disk images ( https://sourceforge.net/p/vice-emu/bugs/703/ )
* 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).
* 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=====
Line 148: Line 128:
* 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.
* 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.
* 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======
: generally the way device #7 is implemented as a special case that is different to devices 4-6 is questionable and should be made the same
* 1541 Emulation still fails a few test programs
======1571======
======1571======
* 2mhz mode of the 1571 is not handled correctly
* 2mhz mode of the 1571 is not handled correctly
** drive CPUs always run at 1Mhz for all drives (hardcoded 1000000 at a few places)
** 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!")
** 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 (MOS5710) emulation is incomplete
** extra FDC2 registers are not implemented
* 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)
** 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)
** 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)
** 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)
======Dual Drives======
r25459 by Rhialto:
I enabled up to DRIVE_NUM IEEE-488 drives, rather than 2 (in True Drive Emulation mode). In some places where they are enumerated, it is 4. The drives use their full 3 bits of jumpered drive number now, rather than just 1 bit.
I have also generalised  code so as to allow another dual drive. Since dual drives currently use up two device numbers, it will use 10 and 11. I'm currently simplifying the methods for checking the dualness of a drive.
When that is done, I hope to have gained enough understanding of the code to remove the horrible hack of using 2 devices for a dual drive, and remove it. It looks like it will simplify a lot of code (including removing lots of code that I changed for allowing 2 dual drives). That will have some repercussions on the GUIs, since for every drive you may need to be able to attach ''two'' image files. It also would add an extra "drive" parameter (in addition to the current "unit" parameter) to a shedload of functions, although this is a pretty mechanical change. In fact, it is the GUI change that currently holds me back...
'''TODO''': Think of some elegant way to represent settings for 8 floppy images (for 4 dual drives), without requiring all GUIs to be updated at once.
'''TODO''': After that, I can rework the code to make dual drives more regular and hence allow 4 of them.


=====Extensions=====
=====Extensions=====
Line 185: Line 151:
* 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.''
: 2016-10-20: This appears to have been fixed in at least the Gtk and Xaw ports: when hovering the mouse over the datasette status widget the image name is displayed in a 'tooltip'. (Bas Wassink)
* motor noise is not emulated
* motor noise is not emulated
====Tape port devices====
* DTL Basic Dongle emulation is broken


====Printer Emulation====
====Printer Emulation====
Line 197: Line 158:
: ''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)
* printer noise is not emulated
* printer noise is not emulated
* printers don't work on the PET (or other IEEE-488 computers)


----
----


===c1541===
===Cores===
 
* handling of .d81 CBM sub partitions and CMD DIR subdirectories is broken due to the way disk images are handled.
** 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 )
: ''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/ )
{| class="wikitable"
! Core !! used in !!
|-
| VIA || VIC20, PET, various drives ||
|-
| CIA || C64, C128, 1570/71 ||
|-
| SID || C64, C128, CBM2, (VIC20, PLUS4, PET: SID cart) ||
|-
| TED || Plus4 || snapshots are broken
|-
| VDC || C128 || snapshots are broken
|-
| VIC || VIC-20 ||
|-
| VIC-II || C64, CBM2 ||
|-
| VIC-IIe || C128 ||
|-
| t6721a || Magic Voice, Plus4 (V364) || snapshot support is missing
|-
| mc6821 || Formel64, Magic Formel, Dolphin-DOS 3 ||
|-
| CS8900a || RR-Net/TFE || snapshot support is missing
|-
| RIOT || 2040/3040/4040/1001/8050/8250 ||
|-
| PC8477/DP8473 || FD4000/FD2000 ||
|-
| WD1770 || 1570/1571/1581 ||
|-
| ACIA (6551)|| Swiftlink ||
|-
| spi-sdcard || MMC64, MMC Replay || snapshot support is missing
|-
| ser-eeprom || MMC Replay || snapshot support is missing
|-
| midi || C64, VIC-20 || snapshot support is missing
|}


----
====VIA====


===Chips===
* MYVIA_NEED_LATCHING option is possibly broken, but in any case untested
* 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


====CIA====
====CIA====
Line 218: Line 213:
* 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)
* 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 only cycle too early (see [http://sourceforge.net/p/vice-emu/bugs/599/ this] bug)
* Shift Register IRQ triggers one cycle too early (see [http://sourceforge.net/p/vice-emu/bugs/599/ this] bug)
* I/O "peek" function is broken
 
used in: C64, C128, 1570/71


====SID====
====SID====


* the POTX/POTY sampling period is not taken into account (512 cycles)
* 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====


* snapshots are broken
* FLI does not work ( https://sourceforge.net/tracker/?func=detail&aid=3205787&group_id=223021&atid=1057617 )
* FLI does not work ( https://sourceforge.net/tracker/?func=detail&aid=3205787&group_id=223021&atid=1057617 )
used in: Plus4


====VDC====
====VDC====


* Some basic features of the VDC are missing:
* Some basic features of the VDC are missing:
** Interlaced mode ( https://sourceforge.net/tracker/?func=detail&aid=2871065&group_id=223021&atid=1057617 ) - This will require a major rewrite of the output as it is currently basically 640x200(ish) vertically stretched to keep the aspect right, but in interlaced it will have to go to 640x400ish with no vertical stretching. None of the other emulated models change output modes like this and it can break some platforms.
** Registers 34/35 (horizontal blanking position) not implemented
* 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)
* $d600 bit 7 STATUS flag is always set, ie. the VDC is never 'busy'. Fixing requires emulating the internal timing of the VDC..
** Differences between 8563 and 8568 are not all emulated, eg. register 38
* Differences between 8563 and 8568 are not all emulated, eg. register 38
* Clock calculation for lightpen is incorrect (?)
* Snapshot doesn't include VDC
* 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.
* Clock calculation for lightpen is incorrect
* Screen position is not always correct, e.g. vdcmodemania FLI parts
 
used in: C128


====VIC====
====VIC====
Line 260: Line 243:
** lightpen values are off (see testprogs/VIC20/split-tests/lightpen, http://sleepingelephant.com/ipw-web/bulletin/bb/viewtopic.php?t=4870 )
** lightpen values are off (see testprogs/VIC20/split-tests/lightpen, http://sleepingelephant.com/ipw-web/bulletin/bb/viewtopic.php?t=4870 )
** some glitches when XPOS is 0, breaks (at least) Vicual MMIX credits part (http://www.cs.tut.fi/~albert/Pu-239/vicual-mmix/)
** some glitches when XPOS is 0, breaks (at least) Vicual MMIX credits part (http://www.cs.tut.fi/~albert/Pu-239/vicual-mmix/)
used in: VIC-20


====VIC-II====
====VIC-II====
Line 269: Line 250:
* DMA delay artifacts are not emulated correctly ( https://sourceforge.net/tracker/?func=detail&aid=3325466&group_id=223021&atid=1057617 )
* DMA delay artifacts are not emulated correctly ( https://sourceforge.net/tracker/?func=detail&aid=3325466&group_id=223021&atid=1057617 )
* Sprite fetch bugs in sideborder are not emulated correctly ( https://sourceforge.net/tracker/?func=detail&aid=3325426&group_id=223021&atid=1057617 )
* Sprite fetch bugs in sideborder are not emulated correctly ( https://sourceforge.net/tracker/?func=detail&aid=3325426&group_id=223021&atid=1057617 )
 
* DMA delay does not affect idle byte correctly [https://sourceforge.net/p/vice-emu/bugs/1855/ bug#1855]
used in: C64, CBM2
* 6569R1 sprite oddity at X-position $163 is not emulated correctly [https://sourceforge.net/p/vice-emu/bugs/1857/ bug #1857]


====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]) and the $D030 new VIC-IIe color palette hack ([http://www.commodore128.org/index.php?topic=3665.0]) 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


====t6721a====
====t6721a====
Line 283: Line 262:
* synthesizer condition 2 loss-effect-, shape- and repeat- bits have no effect
* 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)
* 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====
====mc6821====
Line 291: Line 267:
* interrupts are not implemented
* interrupts are not implemented
* implementation of C2 output modes is incomplete
* 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====
====RIOT====


* I/O "peek" function is broken
* 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
----
===Cores===
====spi-sdcard====
* snapshot support is missing
used in: MMC64, MMC Replay
====spi-eeprom====
* snapshot support is missing
used in: MMC Replay
====midi====
* snapshot support is missing
used in: C64, VIC-20


----
----
Line 335: Line 276:
===Machines===
===Machines===


====vsid====
====x64sc====


====x64 / x64sc====
Note: [[x64_Bugs|x64]] is deprecated.


=====general=====
=====general=====


* the memory layout for "Max Machine" is not yet correct
* some C64 models are not emulated 100% correctly (for details see [[C64models]])
* when SX-64 is selected, the tick for the CIA TOD clocks should always be 60Hz (regardless of PAL/NTSC)
** the memory layout for "Max Machine" is not yet correct
* for details see [[C64models]]
** The Japanese C64 has "C= lock" instead of "Shift Lock" (the keyboard is physically different)


=====x64 issues addressed by x64sc=====
=====Cartridge System=====


To clarify... these will never (as in can't) be emulated in the regular x64, unless we end up replacing x64 with x64sc.
''note: the detailed todo list/status is [[cartsystem|here]].''
 
* 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:
 
* testprogs/VICII/spritesteal (ntscold)
* testprogs/VICII/spriteenable
* missing open border on top of testprogs/VICII/sprite0move
* testprogs/VICII/split-tests/modesplit
* switching VICII border mode resets x64 ( https://sourceforge.net/tracker/?func=detail&aid=3004255&group_id=223021&atid=1057620 )
 
'''Workaround''' in all cases: use x64sc :)
 
=====Cartridge System=====


* some carts have no snapshot support yet (still broken: MMC64, Magic Voice, MMC Replay, MIDI, RR-Net MK3, Ethernet.)
* 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.
** MMC64 snapshots do not include the SD-card
* some carts do not work 100% yet (still broken: Magic Voice, MMC Replay.)
* 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
** RR-Net MK3: to get the ethernet functionality it must be explicitly enabled too, and will appear as a "clockport" internally (which is wrong)
* the (very strange, and incompatible with most cartridges) passthrough port of the SFX sound expander is not emulated
* 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
* 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
* '''TODO:''' IDE64 saves its config data into vicerc - it should use a bin image like every other cartridge


''note: the detailed todo list/status is [[cartsystem|here]].''
----
 
====x128====
====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 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 )
* 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
: xmx provided a test program, see testprogs/c128/z80/cycletimer
* CPU history (chist) implementation is incomplete
* CPU history (chist) implementation is incomplete
* should get rewritten to use the new 6510 "sc" core
----


====xvic====
====xvic====
Line 395: Line 317:
* 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
 
----


====x64dtv====
====x64dtv====
Line 405: Line 328:
* 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
* 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====
<big>The plus4 emulator is generally work in progress and not yet "ready". Maintainer wanted!</big>
<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
* should get rewritten to use the new 6502 "sc" core
=====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
* CPU history (chist) implementation is incomplete
* snapshot implementations are completely untested
 
----


====xcbm2====
====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.
* 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 )
* 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''
: ''note: run like this: xcbm2 -model 610 -ntsc -drive8type 8050 -virtualdev +truedrive -8 cbm2-burnin.d80''
* CPU history (chist) implementation is incomplete
* CPU history (chist) implementation is incomplete
* should get rewritten to use the new 6502 "sc" core
===== Cartridge System =====
* not implemented yet


----
====xcbm5x0====
====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.
* 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.
* 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. See [[x64_Bugs|here]] for details.
* CPU history (chist) implementation is incomplete
* CPU history (chist) implementation is incomplete
* should get rewritten to use the new 6502 "sc" core
===== Cartridge System =====
* not implemented yet


----
====xpet====
====xpet====
* When running the "8296d diagnostic" test of the 8296 system disk on "xpet -model 8296" some tests fail:
* When running the "8296d diagnostic" test of the 8296 system disk on "xpet -model 8296" some tests fail:
Line 440: Line 373:
** 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.
* 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
* CPU history (chist) implementation is incomplete
* should get rewritten to use the new 6502 "sc" core
----
----
===SC Rewrites===


===Ports / UIs===
As a long term goal, everything should be rewritten to use the new "sc" cpu cores (and the non sc cores removed):


* Make a list of Hotkeys used per port, compare and try to make them the same / alike. ( [[Hotkey cleanup]] )
* Migrate emulators to the cycle based CPU core (6510dtvcore.c, should be renamed), which allows:
* enable/disable menu items in drive settings menu according to [[Drive_options_precedence]]
** cycle based hooks for complex hardware expansions (SCPU)
* Fix all Keymap handling according to [[Keymaps]]
** 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)


* VSID is not fully supported in all ports: dos, OSX
----


* YUV rendering (used by amiga morphos and XAW) implementation is incomplete
== Tools ==
** scale2x not available
=== c1541 ===
** some renderers are missing
** doublesize + y-stretch (2x4) doesnt work correctly


* make datasette interface nicer (hotkeys) ( https://sourceforge.net/tracker/index.php?func=detail&aid=2525175&group_id=223021&atid=1057620 )
* handling of .d81 CBM sub partitions and CMD DIR subdirectories is broken due to the way disk images are handled.
* allow browsing of archives (zip etc) ( https://sourceforge.net/tracker/index.php?func=detail&aid=2942868&group_id=223021&atid=1057620 )
** accessing files does not work ( https://sourceforge.net/tracker/?func=detail&aid=3367519&group_id=223021&atid=1057617 )
* add dual monitor support (for x128) ( https://sourceforge.net/tracker/?func=detail&aid=2780684&group_id=223021&atid=1057620 )
** listing directories does not work ( https://sourceforge.net/tracker/?func=detail&aid=3367517&group_id=223021&atid=1057617 )
* add realtime speed adjustment ui / hotkeys ( https://sourceforge.net/tracker/?func=detail&aid=2904137&group_id=223021&atid=1057620 )
: ''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/ )


* Monitor Improvements: ( also see [[MonitorUI]] )
* <s>Remove optional dependency on libreadline once linenoise-ng has been tested properly.</s>
*:* keep monitor window open ( https://sourceforge.net/tracker/?func=detail&aid=2311669&group_id=223021&atid=1057620 )
:: See if linenoise-ng can be made to work with the MSYS2 shell, which would help with debugging c1541.
*:* enable more actions by mouse/hotkey ( https://sourceforge.net/tracker/?func=detail&aid=3134010&group_id=223021&atid=1057620 )
*:* 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====
----
<big>The windows GUI has a lot of inconsistencies and really needs at least a partial re-write. Maintainers wanted!</big>
==Ports==
* In the win32 port keyboard input can be garbled after issuing a reset on CPU JAM.
* the device buttons in the monitor ui are broken ( https://sourceforge.net/tracker/?func=detail&aid=2478267&group_id=223021&atid=1057617 )
* a slider widget is missing to adjust "DriveSoundEmulationVolume" (integer, 0 - 4000, the volume of the drive noise emulation)
* x64, xscpu64 and x128: proper setup for IEE488 cartridge is missing
** x64, xscpu64 and x128: the name of the IEE488-cartridge ROM can not be selected in the gui ("IEEE488Image", string).
** x64, xscpu64: the IEE488-cartridge ROM can not be enabled ("IEEE488", integer)
* xpet is missing a menu item for userport diagnostics pin
* xpet is missing menu item(s) for HRE hires graphics board
* xpet is missing menu item(s) to configure the (PET!) keyboard type
* xplus4: TED settings are missing model (pal/ntsc) selection (remove pal/ntsc switch in menu when added)
* xvic: VIC settings are missing model (pal/ntsc) selection (remove pal/ntsc switch in menu when added)
* xscpu64: VIC-II is missing menu item(s) to configure the glue logic type (model switching should be like x64sc!)
* add "apply" button in video settings ( https://sourceforge.net/tracker/?func=detail&aid=3354016&group_id=223021&atid=1057620 )
* add cassette control buttons/hotkeys ( https://sourceforge.net/tracker/?func=detail&aid=3203245&group_id=223021&atid=1057620 )
* make it possible to define ALT as a hotkey ( https://sourceforge.net/tracker/index.php?func=detail&aid=2909906&group_id=223021&atid=1057620 )
* add option to run vice executable with high priority ( https://sourceforge.net/tracker/?func=detail&aid=2430983&group_id=223021&atid=1057620 )
* gui to manage rom sets is missing
* monitor-ui should get a scrollback buffer
* popup widgets on tape- and drive-status (like in GTK) in statusbar is missing
* resid passband/filter bias/gain should be sliders and work in realtime
* move all "model" related settings that are now in seperated dialogs ("c64 model", "cia", "sid" etc) into one tabbed dialog
* "help" menubar item should be aligned to the right
* vsid has no status bar (and thus no volume control)


=====Win32 DX9=====
Some of the mess isn't ours! See here for [[Upstream bugs]].
* 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=====
===archdep===
* there seems to be a problem with ParSID ( https://sourceforge.net/tracker/?func=detail&aid=2981666&group_id=223021&atid=1057617 )


=====Windows XP and up=====
* '''TODO:''' allow browsing of archives (zip etc) ( https://sourceforge.net/tracker/index.php?func=detail&aid=2942868&group_id=223021&atid=1057620 )
* Running as an unprivileged user causes a heap of problems. VICE tries to write log files and settings to the directory the VICE binary is located. This will obviously fail when running as an unprivileged user. The proper way to handle this is to add a function `archdep_home_path()` to src/arch/win32/archdep.c and use that to determine where to place log files, settings, etc. Most/all other ports use this.


=====Mingw64=====
====Windows====


====X11 (XAW and GTK)====
* '''TODO:''' the native (console based) monitor does not work in windows


* 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. 
----
*: '''Workaround''': recompile with the `--disable-textfield' option.  If it still does not work, please tell us.
* some text output may show broken characters for "foreign" UTF8 chars due to improver conversion (please report such cases!)
* the initial window and canvas should be created using its final size and not resized later
 
=====Vidmode=====
 
* lightpen coordinates are not accurate when using vidmode for fullscreen
* 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=====
 
* Gnome/GTK+ commandline options must come first (before any non-options)
* 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)
* add Session Management
* improve Tape status widget, (.TAP vs .t64 handling is lousy.)
* implement actual Monitor GUI (like in the windows port)  ( https://sourceforge.net/tracker/?func=detail&aid=3317803&group_id=223021&atid=1057620 )
* create a "open cartridge image" dialog allowing selection of any (bin) cartridge type and preview of .crt file info
 
======GTK3======
* gtkglext is not ready yet for GTK3, so hardware scaling will not work yet
* the window is resizeable even when hardware scaling is not enabled
 
=====XAW=====
 
* Some DEC/Alpha machines crash due to the XAW implementation.
*: '''Workaround''': Compile VICE with GNOME support `--enable-gnomeui' instead.
* warning "Files using this header must be compiled with _SVID_SOURCE or _XOPEN_SOURCE" may show up if none is defined in the environment
*: '''Workaround''': define _XOPEN_SOURCE=600 on the commandline
* Context popup menu for drive attach is broken if more than two drives are active.
* when hardware rendering is enabled, greenish color might appear around the drawing area.
* Aspect ratio/scaling is broken in fullscreen mode when hardware rendering is enabled (canvas is always stretched to fill the entire screen)
* the mouse pointer is incorrectly un-grabbed when switching from/to fullscreen with the mouse- or lightpen emulation enabled.
* mouse- and lightpen emulation/coordinates are broken on the second window (VDC/x128)
* add "commandline options" help window (like in the windows port)
*: Is available in trunk, but lacks scrollbars, so scrolling through the text requires to user to click inside the window and scroll with keys (Compyx 2016-12-20)
* hide hidden files (dot files) in the filebrowser ( https://sourceforge.net/tracker/?func=detail&aid=2878433&group_id=223021&atid=1057620 )
* implement "edit" (copy/paste) menu
* add Drag'n'Drop support
* the status bar area of the created window is larger than it should be
* ffmpeg half frame-rate setting missing in "save media image" dialog (FFMPEGVideoHalveFramerate)
* sound volume can not be changed using the GUI (SoundVolume)
* datasette status widget is not implemented


====MAC OSX====
===GTK3 UI===


<big>'''the OSX port is somewhat outdated and needs fixing badly - Maintainer wanted!'''</big>
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.


* ADD: the VSID GUI is missing and needs to be implemented
* <b>Write documentation on how to use the UI</b>
* FIX: the xcbm5x0 and xcbm2 GUI should separated properly (eg in resource inspector)
* '''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?)
* FIX: the xscpu64 GUI is broken
** copy from c64 UI, except for tape, no freezer cartridges
* FIX: long overdue rework of keyboard map handling is in trunk now. for details on migrating to the new code see [[Keymaps]] (r29610)
* FIX: new joyport system. The new system makes things modular. On one side you have the devices that can be on a joyport, and all the code for those has to do is handle reading/writing of digital lines and reading of the pot-lines. On the other side you have the 'chip' emulations that deal with the hardware emulation. The new system handles the traffic between the two sides, handles conflicts between input resources that devices use and provides a way for the gui's to query what devices are present (name and id). (r29938)
** new resources related to the new joyport system: "JoyPort1Device" (int), "JoyPort2Device" (int), "JoyPort3Device" (int) and "JoyPort4Device" (int)
* FIX: the joystick settings dialog is broken
* FIX: joystick/mouse stuff is broken in resource inspector too
* FIX: Removed "UserportJoyType", "JoyDevice4" and arch joystick device 4 related resources in x64dtv. (r30294)
* ADD: mouse init/shutdown calls to xcbm2 and xpet. (r30161)
* FIX: Check and test UI items for Atari ST mouse, Atari CX-22 trackball, Smart Mouse. testprograms can be found in testprogs/propmouse


* ADD: model selection for xplus4 is missing (r24285)
The list of covered resources is [[Gtk3_Resource_Coverage|here]]
: look at plus4/plus4model.h for models and functions, it works just like the c64 counterpart
* ADD: model selection for x64dtv is missing (r24287)
: look at c64dtv/c64dtvmodel.h for models and functions, it works just like the c64 counterpart
* ADD: model selection for xcbm2/cbm5x0 is missing (r24326)
: look at cbm2/cbm2model.h for models and functions, it works just like the c64 counterpart
* ADD: model selection for x128 is missing (r25052)
: look at c128/c128model.h for models and functions, it works just like the c64 counterpart
* ADD: model selection for xvic is missing (r26968)
: look at vic20model_get/vic20model_set for models and functions, it works just like the c64 counterpart


* ADD: 3rd sid support for x64 and x128 (r24733).
==== Main window(s) ====
** changed Resource: "SidStereo", instead of 0=off, 1=on, it's now: 0=off, 1=1 extra sid, 2=2 extra sids.
** new Resource: "SidTripleAddressStart", the address of the 3rd sid.


* ADD: Printer 6 (Plotter) is now available, a new menu like the existing printer menus should be added which has "1520" and "RAW" in its driver selection (r27914)
* '''TODO:''' make sure both hard- and software rendering match whats described in [[Scaling_cleanup]] - if so, the page can be cleaned out
* ADD: accessing device #7 on the IEC bus works (only real devices), respective selection (0: none 2: real) should get added to the menus (r28014)
:: 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.


* ADD: new function "cartridge_get_info_list()" for querying the list of cartridges for building the "attach binary image" menu(s) in x64/x64sc/xscpu64/x128. see cartridge.h (r28982) convert code to use the list instead of hardcoding it
* '''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.
* ADD: new API to query list of palettes, see palette.h, use this to create the palette menu(s) at runtime. (r30708)
* ADD: added generic function/list for querying the enabled compile time features. (see vicefeatures.h) (r28935), this info should be shown in a dialog near the "about/help" stuff


* FIX: cartridge_attach_image(type,name) and cartridge_detach_image(type) are now available in xcbm2/cbm5x0, look for types in cartridge.h, direct usage of "Cart1Name", "Cart2Name", "Cart3Name", "Cart4Name" resources is deprecated, use the above functions instead. (r24210)
==== Statusbar ====


* FIX: ui_pause_emulation is not implemented (see r29876). when that is done "advance one frame" when in pause mode can be added to GUI.
* '''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
* FIX: check and fix in vicemachinecontroller.m, changed mon_reg_list_t->flags into a bitfield (see mon_register.h) (r28503)


* FIX: updated the datasette emulation to also work as expected when there is no tape image present
==== Dialogs ====
** all UI elements should be always visible and enabled (as with a real datasette :))
* '''TODO''': Polish the keyset dialog: <s>at there very least split the UI into a 3x3 grid for the directions and a 4x2 grid for the fire buttons</s>. Maybe use icons for the direction if they're in the default Gtk icon set.
** the parameter passed to ui_set_tape_status can then be used to somehow indicate whether a tape image is present (eg by using a different color)
:: Only arrow icons for North, West, South and East are available. Gtk3 used to have a [https://docs.gtk.org/gtk3/class.Arrow.html GtkArrow] class, but that has been deprecated since 3.14 and removed from 4.x. So we'll have to write our own (which should also prove useful for joystick mapping widgets).
** ui_set_tape_status, ui_display_tape_motor_status, ui_display_tape_control_status and ui_display_tape_counter in ui code perhaps must be updated to handle being called before the respective gui item has been created (which unfortunately can not be avoided easily with the current architecture)


* FIX: X64->Help->If you click on Contributors, you get whatever was shown last in the help menu. If nothing was shown last, it will come up with a blank screen. If the License was shown last it will show the license, or if the Warranty was shown last, it will show the warranty if you click contributors.
==== Settings ====


* ADD: support for HardSID USB ( https://sourceforge.net/tracker/?func=detail&aid=2714202&group_id=223021&atid=1057620 )
* '''TODO:''' HardSID settings are missing


* ADD: a lot of options are currently only available in the resource inspector and may be added to menus/dialogs
=====ROMsets=====
* FIX: the resource inspector is incomplete/does not provide access to all resources
* FIX: the I/O tree should get updated for other machines than C64


* FIX: options->vicii->settings... opens an empty window
* 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
* FIX: window->monitor window opens an empty window
** then the UI can use said list in a dropdown list for quick selection
* FIX: window->debugger windows-> all dont work


* FIX: Changed MMC64, MMCR and RetroReplay to use the new clockport system (r31947)
* '''TODO:''' ROM-set manager/settings need to be reworked and fixed. ROMset "archives" should be removed completely. see [[#ROMsets]]
** new resource "MMC64ClockPort" (int) to select the MMC64 clockport device
** new resource "MMCRClockPort" (int) to select the MMCR clockport device
** new resource "RRClockPort" (int) to select the RetroReplay clockport device
** there is a list of available devices, you can get this list by including 'clockport.h' and using the 'name' and 'id' members of the 'clockport_supported_devices_t clockport_supported_devices[]' variable, the end of the list is indicated by a 'NULL' for the 'name' member and a '-1' for the id member


* FIX: Added IDE64 clockport emulation (r31967)
===== CBM2 model (xcbm2/xcbm5x0) =====
** new resource "IDE64ClockPort" (int) to select the IDE64 clockport device
** there is a list of available devices, you can get this list by including 'clockport.h' and using the 'name' and 'id' members of the 'clockport_supported_devices_t clockport_supported_devices[]' variable, the end of the list is indicated by a 'NULL' for the 'name' member and a '-1' for the id member


====Linux====
* '''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. [[User:Compyx|Compyx]] 2020-01-08


* ADD: support for rtkit ( https://sourceforge.net/tracker/?func=detail&aid=3088679&group_id=223021&atid=1057619 )
===== Joysticks =====


====MS-DOS====
see [[Joymappings]]


* In the MS-DOS port you have to save the configuration and restart the emulator when changing VDC double size mode.
==== vsid ====
* ADD: real IEC device support via par port or ser port
* ADD: proper lfn detection
* FIX: X64->Video settings->VGA resolution->Mode 5: 640x480 8Bit crashes the emulator.
* FIX: X64->Video settings->VGA resolution->Mode 7: 1024x768 8Bit crashes the emulator.
* FIX: X64->Video settings->VGA resolution->Mode 11: 800x600 16Bit crashes the emulator.
* FIX: X64->Video settings->VGA resolution->Mode 12: 1024x768 16Bit crashes the emulator.
* FIX: X64->Video settings->VGA resolution->Mode 13: 640x480 32Bit crashes the emulator.
* FIX: X64->Video settings->VGA resolution->Mode 16: 800x600 32Bit crashes the emulator.
* FIX: X64->Video settings->Video Standard->Cannot select NTSC.


====AROS====
* '''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.


* VICE 2.2a has no sound on AROS ( https://sourceforge.net/tracker/?func=detail&aid=2954913&group_id=223021&atid=1057617 )
* '''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.
* ADD: PCI support for catweasel and hardsid


====Amiga====
* '''TODO:'''Playlist: allow keyboard navigation. Perhaps also multi-select via Ctrl or Shift to delete multiple entries?


* X64->Settings->REU settings->Enabling REU and changing the REU size crashes the emulator instead of giving any kind of error message.
* 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)
* crash on Amiga OS4 when changing language ( https://sourceforge.net/tracker/?func=detail&aid=3309859&group_id=223021&atid=1057617 )
* crash on Amiga OS4 when changing to doublesize in fullscreen mode ( https://sourceforge.net/tracker/?func=detail&aid=3309865&group_id=223021&atid=1057617 )
* Lightpen/gun support (21132)
    NEW: Lightpen/gun emulation in x64, x128 and xvic
    Resource: Lightpen (toggle)
    Resource: LightpenType (enum, see lightpen.h)
        0=Pen with button Up (TODO: product name Atari CX75)
        1=Pen with button Left (TODO: product name?)
        2=Datel Pen
        3=Magnum Light Phaser
        4=Stack Light Rifle
    NOTE: see SDL or win32 for driver implementation example


====*BSD====
* 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?


* serial device hangs on open() in NetBSD 5.0.2 ( https://sourceforge.net/tracker/?func=detail&aid=3043294&group_id=223021&atid=1057617 )
* Update mixer sliders to use proper units etc like the mixer sliders in the other emus


====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.
* Lightpen/gun support (21132)


    NEW: Lightpen/gun emulation in x64, x128 and xvic
* '''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.
    Resource: Lightpen (toggle)
* '''TODO:''' Again as a long term goal, we might want to support transparent support for native charsets
    Resource: LightpenType (enum, see lightpen.h)
        0=Pen with button Up (TODO: product name Atari CX75)
        1=Pen with button Left (TODO: product name?)
        2=Datel Pen
        3=Magnum Light Phaser
        4=Stack Light Rifle
    TODO: Lightpen driver and UI items for the following ports: amiga, beos
    NOTE: see SDL or win32 for driver implementation example


* Options->DirectWindow cannot be checked in all emulators.
for some info on the monitor ui see: [[MonitorUI]].
** It is checked by default if available, but not if system video driver support is missing and currently never in Haiku. I might add an error message at some point. --[[User:Loggedoubt|Loggedoubt]] 23:53, 22 May 2012 (UTC)


* X64->Options->Expansion carts->magic voice options->Magic voice emulation and magic voice file cannot be checked.
==== macOS ====


* X64->Options->Expansion carts->Easy Flash options->Save .crt file now->Error message might be better if said no .crt file attached.
* '''TODO:''' joystick_ui_get_next_device_name should return the detected joysticks instead of the predefined list (fixed?)


* X64->Expansion carts->MMC64 options->MMC64 emulation cannot be selected.
* '''TODO:''' Make the GTK UI create/use the macOS style "top menubar"


* X64->settings->Drive settings->1551 shouldn't be there. (Plus4 only)
* '''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
** A symptom of a much larger problem: the drive type list isn't machine-specific at all. --[[User:Loggedoubt|Loggedoubt]] 15:58, 25 February 2012 (UTC)


* XPlus4->Settings->V364 Speech options->V364 Speech emulation cannot be selected.
==== 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.


* Compiling with `--enable-ethernet` fails due to absence of rawnetarch.{c,h} missing --[[User:Compyx|Compyx]] 2016-10-26 (tested on Haiku)
==== Stretch goals ====


====SDL====
* 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
* there is no interface for browsing files inside (d64..) images
* make an option to force display size to 1x/2x/3x/4x
* Drive>Fliplist settings>Add current image to fliplist>Item needs status text to show that the action has been done.
* make a GUI based editor for keymaps
* Drive>Fliplist settings>Remove current image from fliplist>Item needs status text to show that the action has been done.
* add statusbar indicators for cartridge LEDs.
* Drive>Fliplist settings>Attach next image in fliplist>Item needs status text to show that the action has been done.
* Drive>Fliplist settings>Attach previous image in fliplist>Item needs status text to show that the action has been done.
* A better way of showing filenames (maybe using contraction) needs to be made
* Cartridge>MMC64>Enable MMC64 can not be used unless a MMC64 ROM has been selected, it should be made inactive if not
* improve the Android port.


----
----


==External Libraries==
===SDL UI===
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/)
* <b>Write documentation on how to use the UI</b>
** should get moved to src/lib/..
* '''BUG:''' FFmpeg media recording behaves unexpected when entering the menu [https://sourceforge.net/p/vice-emu/bugs/898/]
* P64 (src/lib/P64)
* '''TODO''': get rid of fullscreenarch.h and fullscreen.c - its no more required because SDL can do all of the features fine.
* 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.


besides the above, other libraries are used which are currently linked dynamically and must be supplied as dlls for the windows port
====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


* SDL
====Datasette====
* zlib
* hardsid


==Rewrites==
*'''TODO:''' add menu items for "Reset datasette counter" (UI action handlers have been added in the "compyx/sdl-uiactions" branch)


* The "sc" rewrites. Migrate emulators to the cycle based CPU core (6510dtvcore.c, should be renamed), which allows:
====Joysticks====
** 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 [https://sourceforge.net/tracker/?limit=100&func=&group_id=223021&atid=1057620&assignee=&status=1&category=&artgroup=&keyword=&submitter=&artifact_id=&assignee=&status=1&category=&artgroup=&submitter=&keyword=&artifact_id=&submit=Filter&mass_category=&mass_priority=&mass_assignee=&mass_artgroup=&mass_status=&mass_cannedresponse= Tracker: open Feature Requests]
 
===general===
 
* native screenshot support. (in progress)
* 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).
* proper support for paddles (https://sourceforge.net/tracker/?func=detail&aid=2686763&group_id=223021&atid=1057620)
* integrate a rs232->telnet codepath (https://sourceforge.net/tracker/?func=detail&aid=3033061&group_id=223021&atid=1057620)
* option to autostart in already running instance ( https://sourceforge.net/tracker/?func=detail&aid=3201905&group_id=223021&atid=1057620 )
* option to save attached (disk/tape/cart) images at shutdown, restore at next run ( https://sourceforge.net/tracker/?func=detail&aid=3302938&group_id=223021&atid=1057620 )
* use second joystick button as auto fire ( https://sourceforge.net/tracker/index.php?func=detail&aid=2459184&group_id=223021&atid=1057620 )
 
====History Recording====
 
* (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 )
 
====Keyboard====


====Tape====
see [[Joymappings]]
* support for DC2N .dmp files (cassette files) ( https://sourceforge.net/tracker/?func=detail&aid=3203248&group_id=223021&atid=1057620 )


====Monitor====
====Monitor====
* '''TODO:''' implement a scrollback buffer


* (optionally) display all executed commands when in trace mode ( https://sourceforge.net/tracker/?func=detail&aid=3356800&group_id=223021&atid=1057620 )
====File Selector====
* improve handling of memory ranges ( https://sourceforge.net/tracker/?func=detail&aid=3161941&group_id=223021&atid=1057620 )
* '''TODO:''' add filtering in file requester
 
====Sound System====
 
* sound sync needs a rewrite, its too complex and fails a lot
 
====Video System====
 
* implement a generic framerate converter (screen blending) ( https://sourceforge.net/tracker/?func=detail&aid=2792693&group_id=223021&atid=1057620 )
* add option to rotate / flip / mirror the output ( https://sourceforge.net/tracker/?func=detail&aid=3291057&group_id=223021&atid=1057620 )
* add an option in the CRT emulator / Palette generator to simulate b/w,amber,green monitors ( https://sourceforge.net/tracker/index.php?func=detail&aid=3052248&group_id=223021&atid=1057620 )
 
* some kind of generic interface to handle video input is required to handle scanner/digitizer type of carts
 
===Hardware emulation===
 
====SID====
* add support for Catweasel MK4 style playback ( https://sourceforge.net/tracker/?func=detail&aid=2962481&group_id=223021&atid=1057620 )
 
====x64(sc)====
 
* internal (?)
** c64/c128 1.44 MB disk drive support. ([http://www.market.croadria.com/c64/c64diskTR20.shtml])
** c64/c128 SCSI expansion support. ([http://www.zimmers.net/anonftp/pub/cbm/documents/projects/scsi/index.html])
 
* Cartridges
** IDE64 improvements
*** IDE64 eth64 shortbus expansion support. ([http://www.volny.cz/dundera/eth64.html])
*** IDE64 duart shortbus expansion support. ([http://www.volny.cz/dundera/duart.html])
** Clockport improvements
*** Silversurfer (UART) support ([http://rr.c64.org/wiki/Inside_Surfer.txt])
*** 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])
** RAM Floppy (REX 9680) support
** Daisy Sound sampler audio input support. ([http://www.cbmhardware.de/dlmanager/download.php?id=243])
** PS64 speech cartridge support. ([http://oms.wmhost.com/ps64/])
** 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/])
** 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])
** flash-8 cartridge support (8Mhz 65816). ([http://www.spacetaxi.bravehost.com/DRIVERS/FLASH-8.rar])
** 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])
** german BTX cartridge (6809)
** 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/])
** "Disk Mate" (Datel)
** 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])''
*** ''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)''
** ''Net64 cartridge support. ([http://www.harbaum.org/till/c64/index.shtml])''
*** ''this is exactly the same as "the final ethernet" (which is emulated) [[User:Gpz|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. ([http://members.optusnet.com.au/spacetaxi64/DRIVERS/DRIVER-FILES/swift-a.rar])
** CBM1670 (userport) modem1200 support. ([http://members.optusnet.com.au/spacetaxi64/DRIVERS/DRIVER-FILES/swift-a.rar])
** FB-RS232 (userport) support. ([http://members.optusnet.com.au/spacetaxi64/DRIVERS/DRIVER-FILES/swift-a.rar])
** c64 p64 midi interface: ([http://www.firestarter-music.de/prophetcart/p64_fullmidi_V1_1.jpg])
** Scanntronik handyscanner (userport) support. ([http://members.optusnet.com.au/spacetaxi64/DRIVERS/DRIVER-FILES/scanner.rar])
** Video Byte II video digitizer (userport) support. ([http://members.optusnet.com.au/spacetaxi64/DRIVERS/DRIVER-FILES/video-digitize.rar]) ([http://moogle-tech.com/blog/?p=104])
** Computera Eyes video digitizer (userport) support. ([http://www.spacetaxi.bravehost.com/DRIVERS/Computer%20eyes.zip] [http://members.optusnet.com.au/spacetaxi64/DRIVERS/DRIVER-FILES/COMPUTER-EYES-64.zip])
** Userport RocketDrive support. ([http://www.cbmhardware.de/avr/homepage.html])
** CIA-IDE-HD support. ([http://members.optusnet.com.au/vortex69/PC-HARDWARE/CIA-IDE-HD/CIA-IDE-HD.html])
** Aprotek universal rs232 adapter support. ([http://mikenaberezny.com/hardware/peripherals/aprotek-universal-rs-232/])
** Comet64 support. ([http://www.commodoreserver.com/ProductView.asp?PID=365065CF529B4C408F7D01C08BA34803])
** L. Pantarottos adapter support. ([http://www.synnes.org/c64/c64_joy_adapter_schematics.html])
 
* Joystick Port
** 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])
** animation station support. ([http://members.optusnet.com.au/spacetaxi64/DRIVERS/DRIVER-FILES/koala-pad&Animation%20station.rar])
** Power-pad support.
** 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 8player joystick adapter "inception" ([http://www.c64.cz/inception/])
 
* Tape Port
 
* Video output.
** c64 LCD64 screen support. ([http://www.64hdd.com/projects/c64-proj3.html])
 
====x128====
 
* c128 plus60k support.
* c128 plus256k support.
* c128 256K memory expansion hack support.
 
====xvic====
* VIC20 RTC cartridge support. ([http://jledger.proboards.com/index.cgi?board=microhacking&action=display&thread=2381])
* ''vic20 iec2ata support. ([http://www.djupdal.org/cbm/iecata/])''
** ''pointless to emulate, as it is a simple iec device, very similar to what you get when using virtual drive on the filesystem.'' [[User:Gpz|Gpz]] 05:08, 15 August 2010 (UTC)
* vic20 ethernet support. ([http://members.lycos.co.uk/leeedavison/6502/vic20/network/index.html])
* 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 )
* add Cartridge attach heuristic for image pairs
 
====xplus4====
* add support for "speedy" freezer cartridge
 
====xpet====
* PET ROM-socket RTC support. ([http://jledger.proboards.com/index.cgi?board=microhacking&action=display&thread=2381])
* 8296 pet hardware ram lines connected to userport support.
* 8296 RAMdisk 2008 support. ([http://www.cbmhardware.de/cbmrd2008/index.php])
* 8296 pet switchable 4 screens output support.
* 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/])
* MTU K-1002-2 DAC sound system support. ([http://mikenaberezny.com/hardware/peripherals/mtu-k-1002-2-dac/])
 
====xcbm2====
* cbm2 z80 support.
* cbm2 8088 support. ([http://www.cbm-ii.com])
 
====Drives====


* (optionally) automatically enable warp mode when drives are being accessed. ( https://sourceforge.net/tracker/?func=detail&aid=2028999&group_id=223021&atid=1057620 )
====Virtual Keyboard====
* add support for dual disk drives
* '''TODO:''' shift/cbm/ctrl should be "sticky" (right now shifted keys are entered using backspace/cancel - which is odd)
* IEC
* '''TODO:''' the virtual keyboard handling of the SDL port must be updated/fixed to support all PET keyboards
** 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/])
** ''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)
* 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])
** MW1000 HD support. ([http://members.optusnet.com.au/vortex69/HD-HISTORY/SSEL.doc])
** Alpha20 HD support. ([http://members.optusnet.com.au/vortex69/HD-HISTORY/Apstor-20-SBS.doc])
** Alpha10 HD support. ([http://members.optusnet.com.au/vortex69/HD-HISTORY/Alpha-10.doc])
** Borsu20 HD support. ([http://members.optusnet.com.au/vortex69/HD-HISTORY/BORSU-20mb.doc])
** HardBox HD support. ([http://members.optusnet.com.au/vortex69/HD-HISTORY/Hardbox.doc])
** Mator Shark HD support. ([http://mikenaberezny.com/hardware/peripherals/mator-shark-hard-drive/])


====Printers====
==== VSID ====
* (optionally) make printer output pixel perfect ( https://sourceforge.net/tracker/?func=detail&aid=2476279&group_id=223021&atid=1057620 )
* '''TODO:''' Implement a playlist for VSID
* IEC
* '''TODO:''' Add HVSC song length database (SLDB) support to VSID (<s>both .txt and</s> .md5 file format)
** DPS1101 support.
* '''TODO:''' Add HVSC sid tune information list (STIL) support to VSID
** MPS801 support.
* '''TODO:''' Add HVSC BUGlist support to VSID
** MPS802/CBM1526 support.
** MPS1000 support.
** MPS1250 support.
** Fidelity Impact Printer support. ([http://mikenaberezny.com/hardware/peripherals/fidelity-impact-printer/])
* IEEE
** MPS1361 support.
** CBM4022 support.
** CBM8023 support.
** CBM8024 support.


====Misc====


* add/implement C65 emulator ( https://sourceforge.net/tracker/?func=detail&aid=2472096&group_id=223021&atid=1057620 )
[[Category:TODO]]

Latest revision as of 18:40, 31 December 2023

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.8. 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

  • 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.

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

  • 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.
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. In any case, using a positional keymap will remove much of this problem.
  • 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

WIP Joymappings

  • contact-bounce is not emulated
TODO: make a proper test program

Monitor

  • TODO: Breakpoints/watchpoints should consider banks, and perhaps PLA/MMU config
  • banking should somehow work also with cartridges. for this some generic interface in the cartridge system needs to be created
Profiler

The new profiler feature is still incomplete ( https://sourceforge.net/p/vice-emu/patches/350/ )

  • support for banking (main CPU) is only implemented in x64(sc) right now
    • banking should somehow consider cartridge banks, once we have generic support for it in the monitor
  • perhaps additional stats for "stolen cycles" (cycles used by the VICII) can be added
  • branch taken / not taken statistics
  • support for drive CPUs is missing
  • support for other CPUs than 6502 is missing
  • binary remote monitor commands need to be implemented (perhaps once more of the above works, so we know how these must look like)
Binary Interface

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

  • 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.

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
  • More comments are needed in place of the various checks

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")

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.
generally the way device #7 is implemented as a special case that is different to devices 4-6 is questionable and should be made the same
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 (MOS5710) emulation is incomplete
    • extra FDC2 registers are not implemented
  • 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

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

Cores

Core used in
VIA VIC20, PET, various drives
CIA C64, C128, 1570/71
SID C64, C128, CBM2, (VIC20, PLUS4, PET: SID cart)
TED Plus4 snapshots are broken
VDC C128 snapshots are broken
VIC VIC-20
VIC-II C64, CBM2
VIC-IIe C128
t6721a Magic Voice, Plus4 (V364) snapshot support is missing
mc6821 Formel64, Magic Formel, Dolphin-DOS 3
CS8900a RR-Net/TFE snapshot support is missing
RIOT 2040/3040/4040/1001/8050/8250
PC8477/DP8473 FD4000/FD2000
WD1770 1570/1571/1581
ACIA (6551) Swiftlink
spi-sdcard MMC64, MMC Replay snapshot support is missing
ser-eeprom MMC Replay snapshot support is missing
midi C64, VIC-20 snapshot support is missing

VIA

  • MYVIA_NEED_LATCHING option is possibly broken, but in any case untested
  • 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

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)

SID

  • POTX/POTY sampling jitter is not emulated
  • only one mouse or pair of paddles can be emulated at a time

TED

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
  • 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

VIC

VIC-II

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.

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)

mc6821

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

RIOT

  • I/O "peek" function is broken

Machines

x64sc

Note: x64 is deprecated.

general
  • some C64 models are not emulated 100% correctly (for details see C64models)
    • the memory layout for "Max Machine" is not yet correct
    • The Japanese C64 has "C= lock" instead of "Shift Lock" (the keyboard is physically different)
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

x128

xmx provided a test program, see testprogs/c128/z80/cycletimer
  • CPU history (chist) implementation is incomplete
  • should get rewritten to use the new 6510 "sc" core

xvic


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

xcbm2

note: run like this: xcbm2 -model 610 -ntsc -drive8type 8050 -virtualdev +truedrive -8 cbm2-burnin.d80
  • CPU history (chist) implementation is incomplete
  • should get rewritten to use the new 6502 "sc" core
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.
  • 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. See here for details.
  • CPU history (chist) implementation is incomplete
  • should get rewritten to use the new 6502 "sc" core
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.
  • 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
  • should get rewritten to use the new 6502 "sc" core

SC Rewrites

As a long term goal, everything should be rewritten to use the new "sc" cpu cores (and the non sc cores removed):

  • 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)

Tools

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.

Ports

Some of the mess isn't ours! See here for Upstream bugs.

archdep

Windows

  • TODO: the native (console based) monitor does not work in windows

GTK3 UI

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?)

The list of covered resources is here

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.
Only arrow icons for North, West, South and East are available. Gtk3 used to have a GtkArrow class, but that has been deprecated since 3.14 and removed from 4.x. So we'll have to write our own (which should also prove useful for joystick mapping widgets).

Settings

  • TODO: HardSID settings are missing
ROMsets
  • 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
  • TODO: ROM-set manager/settings need to be reworked and fixed. ROMset "archives" should be removed completely. see #ROMsets
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
Joysticks

see Joymappings

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.
  • 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?
  • 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?
  • Update mixer sliders to use proper units etc like the mixer sliders in the other emus

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.

macOS

  • TODO: joystick_ui_get_next_device_name should return the detected joysticks instead of the predefined list (fixed?)
  • 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.

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 cartridge LEDs.

SDL UI

  • Write documentation on how to use the UI
  • BUG: FFmpeg media recording behaves unexpected when entering the menu [3]
  • TODO: get rid of fullscreenarch.h and fullscreen.c - its no more required because SDL can do all of the features fine.

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

Datasette

  • TODO: add menu items for "Reset datasette counter" (UI action handlers have been added in the "compyx/sdl-uiactions" branch)

Joysticks

see Joymappings

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