Todo: Difference between revisions
m (→GTK) |
m (→Joystick) |
||
Line 1: | Line 1: | ||
This is the list of known problems. also look at [https://sourceforge.net/tracker/?limit=100&func=&group_id=223021&atid=1057617&assignee=&status=4&category=&artgroup=&keyword=&submitter=&artifact_id=&assignee=&status=1&category=&artgroup=&submitter=&keyword=&artifact_id=&submit=Filter&mass_category=&mass_priority=&mass_resolution=&mass_assignee=&mass_artgroup=&mass_status=&mass_cannedresponse= Tracker: open Bugs] | |||
This list always refers to the status of the last major release version, which was '''3.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 [https://sourceforge.net/p/vice-emu/mailman/ vice-emu-mail mailinglist]''' and perhaps join #vice-dev on freenode too (highly recommended). | |||
* Please '''respect the [https://sourceforge.net/p/vice-emu/code/HEAD/tree/trunk/vice/doc/coding-guidelines.txt 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 [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.''' | |||
==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=== | ===Subsystems=== | ||
Line 33: | 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. | ||
: '''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==== | ====Joystick==== | ||
* | WIP [[Joymappings]] | ||
* contact-bounce is not emulated | |||
: '''TODO''': make a proper test program | |||
: https://csdb.dk/release/index.php?id=242527 | |||
====Monitor==== | ====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==== | ||
* history recording currently breaks on a lot of user actions, such as using autostart or attaching a cartridge. | * history recording currently breaks on a lot of user actions, such as using autostart or attaching a cartridge. | ||
'''Workaround''': make sure to start up with a bog standard c64, and then load/run the program in question manually | : '''Workaround''': make sure to start up with a bog standard c64, and then load/run the program in question manually | ||
* recording/playing back histories was broken in 2.2 ( https://sourceforge.net/tracker/?func=detail&aid=2925410&group_id=223021&atid=1057617 ) | * recording/playing back histories was broken in 2.2 ( https://sourceforge.net/tracker/?func=detail&aid=2925410&group_id=223021&atid=1057617 ) | ||
note: since history recording is very error prone and hard to debug, we depend on feedback (on either failure or success) on this topic very much. if you still have problems with the current release, please report them including testcases. | note: since history recording is very error prone and hard to debug, we depend on feedback (on either failure or success) on this topic very much. if you still have problems with the current release, please report them including testcases. | ||
Line 63: | Line 101: | ||
* some things are still shared by videochips although they shouldnt be, resulting in conflicts for eg the color generation (visible in x128 in ports that show two windows at a time, when crt emulation is enabled, eg adjusting brightness affects also the other window) | * some things are still shared by videochips although they shouldnt be, resulting in conflicts for eg the color generation (visible in x128 in ports that show two windows at a time, when crt emulation is enabled, eg adjusting brightness affects also the other window) | ||
* '''TODO''' add a 4:3 fixed aspect ratio scaling mode | |||
* '''TODO''' when a test program has been written, adjust the "normal" border mode accordingly (CAUTION: fix testsuite first) | |||
* '''TODO''' put all border mode parameters into arrays, make a global function to query the parameters and modes (for UIs) and then add "TV" mode (like "normal", but not centered) | |||
=====CRT Emulation===== | =====CRT Emulation===== | ||
Line 68: | Line 109: | ||
* 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") | ||
see http://hitmen.c02.at/temp/palstuff/ for some further info on this topic. | see http://hitmen.c02.at/temp/palstuff/ for some further info on this topic. | ||
Line 74: | Line 114: | ||
====Drive Emulation==== | ====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===== | =====virtual Devices===== | ||
* handling of CBM style sub partitions is incomplete, write operations on sub partitions may give unexpected results. | * handling of CBM style sub partitions is incomplete, write operations on sub partitions may give unexpected results. | ||
* RELative files are only supported when using disk images ( https://sourceforge.net/p/vice-emu/bugs/703/ ) | |||
* support for double sided disk images is very shaky, since no concept of disk sides exists and the tracks on the second side are referenced by an offset into the image, the handling of images with different number of tracks is needlessly hard and complicated (and thus broken). | |||
* the IEEE machines use the "virtual devices" for something slightly different than the IEC machines, for the IEEE machines its more like what "IEC Device" means for the IEC machines. This should be handled with a seperate resource similar to "IEC Device" in the other emulators. | |||
=====True Drive Emulation===== | =====True Drive Emulation===== | ||
* serial timing latency is not implemented. due to their physical properties, it takes about half a cycle for a value to show up at the respective output pin after it has been written to the register. and respectivly, it takes about half a cycle from changing an input pin until the value in the respective register changes. | * serial timing latency is not implemented. due to their physical properties, it takes about half a cycle for a value to show up at the respective output pin after it has been written to the register. and respectivly, it takes about half a cycle from changing an input pin until the value in the respective register changes. | ||
* mechanical delays (such as head stepping and motor spinup) are not emulated yet. | * mechanical delays (such as head stepping and motor spinup) are not emulated yet. | ||
* 2mhz mode of the 1571 is not handled correctly | * 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. | ||
* 1571CR emulation | : 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 | * double sided 1571 images do not work correctly | ||
** regular (70 tracks) vs extended (80 or 84 tracks) d71 images are not handled at all (vdrive problem) | |||
** creating (formatting) G71 does not work correctly, the second BAM block will be wrong (vdrive problem) | |||
** double sided P64 can be used, but can not be created from within VICE (see patch #122, r32586). since these are non existant "in the wild" and probably not needed for anything - not a big problem :) to handle this properly, a seperate image format should get created (at least internally) | |||
=====Extensions===== | =====Extensions===== | ||
* when using dolphin dos 3 emulation, the state of the mc6821 is not saved to/restored from snapshots | * when using dolphin dos 3 emulation, the state of the mc6821 is not saved to/restored from snapshots | ||
Line 99: | Line 151: | ||
* unlike with a real datasette, the emulated counter will stop counting when no tape/image is present | * unlike with a real datasette, the emulated counter will stop counting when no tape/image is present | ||
* when a t64 image is attached, the datasette status will incorrectly say "no image". | * when a t64 image is attached, the datasette status will incorrectly say "no image". | ||
''Note: since t64 is currently only accessable via kernal traps, the datasette emulation actually treats this case as if no image is present. The respective code must be updated so the datasette emulation actually "knows" about when t64 is in use.'' | : ''Note: since t64 is currently only accessable via kernal traps, the datasette emulation actually treats this case as if no image is present. The respective code must be updated so the datasette emulation actually "knows" about when t64 is in use.'' | ||
* motor noise is not emulated | * motor noise is not emulated | ||
Line 105: | Line 157: | ||
* not really a bug: the printer output file is always created in the current working directory. ( https://sourceforge.net/tracker/?func=detail&aid=3305650&group_id=223021&atid=1057617 ) | * not really a bug: the printer output file is always created in the current working directory. ( https://sourceforge.net/tracker/?func=detail&aid=3305650&group_id=223021&atid=1057617 ) | ||
''there perhaps should be a way to explicitly set a directory for printer output files'' [[User:Gpz|Gpz]] 01:24, 4 July 2011 (UTC | : ''there perhaps should be a way to explicitly set a directory for printer output files'' [[User:Gpz|Gpz]] 01:24, 4 July 2011 (UTC) | ||
* printer noise is not emulated | * printer noise is not emulated | ||
---- | ---- | ||
=== | ===Cores=== | ||
{| 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==== | |||
* 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==== | ||
* 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. | ||
* <s>Shift Register IRQ triggers one cycle too early (see [http://sourceforge.net/p/vice-emu/bugs/599/ this] bug)</s> (fixed) | |||
====SID==== | ====SID==== | ||
* 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 | ||
Line 138: | Line 223: | ||
====TED==== | ====TED==== | ||
* 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 ) | ||
====VDC==== | ====VDC==== | ||
* Some basic features of the VDC are missing: | * 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) | |||
* Registers 34/35 (horizontal blanking position) not implemented | ** Differences between 8563 and 8568 are not all emulated, eg. register 38 | ||
* $d600 bit 7 STATUS flag is | * 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. | ||
* Clock calculation for lightpen is incorrect | * Screen position is not always correct, e.g. vdcmodemania FLI parts | ||
* | |||
====VIC==== | ====VIC==== | ||
Line 166: | Line 244: | ||
** 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/) | ||
====VIC-II==== | ====VIC-II==== | ||
Line 175: | Line 251: | ||
* 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] | |||
* 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]) 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. | ||
====t6721a==== | ====t6721a==== | ||
Line 189: | Line 263: | ||
* 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) | ||
====mc6821==== | ====mc6821==== | ||
Line 198: | Line 269: | ||
* implementation of C2 output modes is incomplete | * implementation of C2 output modes is incomplete | ||
====RIOT==== | |||
==== | |||
* I/O "peek" function is broken | |||
---- | ---- | ||
Line 226: | Line 277: | ||
===Machines=== | ===Machines=== | ||
==== | ====x64sc==== | ||
Note: [[x64_Bugs|x64]] is deprecated. | |||
=====general===== | =====general===== | ||
* | * some C64 models are not emulated 100% correctly (for details see [[C64models]]) | ||
* the memory layout for "Max Machine" is not yet correct | ** 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 [[cartsystem|here]].'' | |||
'' | |||
note: | |||
'' | |||
* some carts have no snapshot support yet (still broken: | * some carts have no snapshot support yet (still broken: Magic Voice, MMC Replay, RR-Net MK3, Ethernet.) | ||
** IDE64 & ATA system can only handle "readonly" snapshots now. Somehow the image file must be matched to the snapshot to prevent corruption. | ** IDE64 & ATA system can only handle "readonly" snapshots now. Somehow the image file must be matched to the snapshot to prevent corruption. | ||
* some carts do not work 100% yet (still broken: | ** 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). | ** 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 | ||
* | * 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 | |||
---- | |||
====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. | ||
* 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 ) | : 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==== | ====xvic==== | ||
Line 289: | Line 318: | ||
* 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 ) | ||
---- | |||
====x64dtv==== | ====x64dtv==== | ||
<big>The DTV emulator is very inaccurate and is in need of a partial rewrite. Maintainer wanted!</big> | |||
* Misery 3: (http://noname.c64.org/csdb/release/?id=83196) | * Misery 3: (http://noname.c64.org/csdb/release/?id=83196) | ||
** fails emudetect | ** fails emudetect | ||
** plasma part is missing badlines | ** plasma part is missing badlines | ||
* switching VICII border mode resets x64dtv ( https://sourceforge.net/tracker/?func=detail&aid=3004255&group_id=223021&atid=1057620 ) | * switching VICII border mode resets x64dtv ( https://sourceforge.net/tracker/?func=detail&aid=3004255&group_id=223021&atid=1057620 ) | ||
* CPU history (chist) implementation is incomplete | |||
* the "PS/2 Mouse at Userport" should get refactored to be a regular Userport device in the common Userport system | |||
* "enable Userport Joystick" vs "Hummer Userport Joystick" is strange and confusing, especially since in the DTV emulator we dont even have a "UserportJoyType" selection. the regular "DTV Joystick on Userport" should become a regular Userport device. | |||
---- | |||
====xplus4==== | ====xplus4==== | ||
The plus4 emulator is generally work in progress and not yet "ready". Maintainer wanted! | <big>The plus4 emulator is generally work in progress and not yet "ready". Maintainer wanted!</big> | ||
* support for Snapshots is incomplete/broken (TED, PIA, V364 Speech, ...) ( https://sourceforge.net/tracker/?func=detail&aid=2878220&group_id=223021&atid=1057617 ) | * support for Snapshots is incomplete/broken (TED, PIA, V364 Speech, ...) ( https://sourceforge.net/tracker/?func=detail&aid=2878220&group_id=223021&atid=1057617 ) | ||
* emulation of the V364 speech chip is incomplete (see [[Todo#t6721a]]) | |||
* CPU history (chist) implementation is incomplete | |||
* 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) | ||
* | * "mmu" memory translation table handling is not implemented for cartridges | ||
* 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 | ||
* when running the burn-in diagnostic tests, the CIA is reported as bad ( https://sourceforge.net/tracker/?func=detail&aid=3102493&group_id=223021&atid=1057617 ) | * when running the burn-in diagnostic tests, the CIA is reported as bad ( https://sourceforge.net/tracker/?func=detail&aid=3102493&group_id=223021&atid=1057617 ) | ||
''note: run like this: xcbm2 -model 610 -ntsc -drive8type 8050 +truedrive -8 cbm2-burnin.d80'' | : ''note: run like this: xcbm2 -model 610 -ntsc -drive8type 8050 -virtualdev +truedrive -8 cbm2-burnin.d80'' | ||
* CPU history (chist) implementation is incomplete | |||
* should get rewritten to use the new 6502 "sc" core | |||
===== Cartridge System ===== | |||
* <s>not implemented yet</s> (fixed) | |||
---- | |||
====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. | ||
* 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 | |||
* should get rewritten to use the new 6502 "sc" core | |||
===== Cartridge System ===== | |||
* <s>not implemented yet</s> (fixed) | |||
---- | |||
====xpet==== | ====xpet==== | ||
Line 325: | Line 375: | ||
** when TDE is enabled, the program will hang. when TDE is disabled, the IEEE interface status will be reported as bad | ** when TDE is enabled, the program will hang. when TDE is disabled, the IEEE interface status will be reported as bad | ||
** the userport is reported as bad (perhaps some dongle is needed?) | ** the userport is reported as bad (perhaps some dongle is needed?) | ||
''note: run like this: "xpet -model 8296 -drive8type 8050 -8 8296d-systemdisk.d82 -editor edit-4-80-b-50Hz.901474-04.bin". the "burnin8296" program seems to be an older version of the "8296d diagnostic" program. it runs when TDE is enabled, but the 50Hz irq test fails.'' | : ''note: run like this: "xpet -model 8296 -drive8type 8050 -8 8296d-systemdisk.d82 -editor edit-4-80-b-50Hz.901474-04.bin". the "burnin8296" program seems to be an older version of the "8296d diagnostic" program. it runs when TDE is enabled, but the 50Hz irq test fails.'' | ||
* 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 | |||
* 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) | ** cycle based hooks for complex hardware expansions (SCPU) | ||
** in-line graphics data change emulation (see testprogs/VICII/gfxfetch) | ** in-line graphics data change emulation (see testprogs/VICII/gfxfetch) | ||
Line 456: | Line 396: | ||
*** cycle based fetch/etc (VIC & VICII done, VICII-DTV in progress) | *** cycle based fetch/etc (VIC & VICII done, VICII-DTV in progress) | ||
*** cycle based drawing (VICII done) | *** cycle based drawing (VICII done) | ||
** remove 1 clock write | ** remove 1 clock write offsets (at least CIA/VIA already handled) | ||
** an insane amount of regression testing (preferably with new testprogs where needed) | ** an insane amount of regression testing (preferably with new testprogs where needed) | ||
---- | |||
== Tools == | |||
=== c1541 === | |||
== | * 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/ ) | |||
* | * <s>Remove optional dependency on libreadline once linenoise-ng has been tested properly.</s> | ||
:: See if linenoise-ng can be made to work with the MSYS2 shell, which would help with debugging c1541. | |||
==Ports | ---- | ||
==Ports== | |||
Some of the mess isn't ours! See here for [[Upstream bugs]]. | |||
===archdep=== | |||
=== | * '''TODO:''' allow browsing of archives (zip etc) ( https://sourceforge.net/tracker/index.php?func=detail&aid=2942868&group_id=223021&atid=1057620 ) | ||
====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: <code>grep -n 'FIXME\|TODO\|XXX' `find src/arch/gtk3 -name '*.c'`</code>, and be amazed. | |||
* | * <b>Write documentation on how to use the UI</b> | ||
* '''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 [[Gtk3_Resource_Coverage|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: <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. | ||
:: 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). | |||
===== | ==== 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. [[User:Compyx|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:''' <s>Again as a long term goal, we might want to support transparent support for native charsets</s> (implemented in trunk) | |||
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=== | ||
* <b>Write documentation on how to use the UI</b> | |||
* | * '''BUG:''' FFmpeg media recording behaves unexpected when entering the menu [https://sourceforge.net/p/vice-emu/bugs/898/] | ||
* '''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 (<s>both .txt and</s> .md5 file format) | |||
* '''TODO:''' Add HVSC sid tune information list (STIL) support to VSID | |||
* '''TODO:''' Add HVSC BUGlist support to VSID | |||
[[Category:TODO]] | |||
Latest revision as of 16:58, 6 May 2024
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
- https://csdb.dk/release/index.php?id=242527
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
- recording/playing back histories was broken in 2.2 ( https://sourceforge.net/tracker/?func=detail&aid=2925410&group_id=223021&atid=1057617 )
note: since history recording is very error prone and hard to debug, we depend on feedback (on either failure or success) on this topic very much. if you still have problems with the current release, please report them including testcases.
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
- not really a bug: the printer output file is always created in the current working directory. ( https://sourceforge.net/tracker/?func=detail&aid=3305650&group_id=223021&atid=1057617 )
- there perhaps should be a way to explicitly set a directory for printer output files 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)(fixed)
SID
- POTX/POTY sampling jitter is not emulated
- only one mouse or pair of paddles can be emulated at a time
TED
- FLI does not work ( https://sourceforge.net/tracker/?func=detail&aid=3205787&group_id=223021&atid=1057617 )
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
- Idle fetch (or the lack of it) needs investigation
- "Screen mixup" is not emulated
- COLS=0 can lead to negative width in raster/ causing segfaults if not checked for in archdep video code
- NTSC bugs:
- raster line register values are incorrect near the end of frame (see testprogs/VIC20/split-tests/lightpen)
- 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/)
VIC-II
- the handling of MCBASE at power-on is incorrect (see testprogs/VICII/spritemcbase)
- note: this should only be visible directly after power-cycle on a 6569
- 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 )
- DMA delay does not affect idle byte correctly bug#1855
- 6569R1 sprite oddity at X-position $163 is not emulated correctly bug #1857
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
- 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.
- the relative speed and details like cycle-stealing of the z80 is inaccurate ( https://sourceforge.net/tracker/?func=detail&aid=3476760&group_id=223021&atid=1057617 )
- xmx provided a test program, see testprogs/c128/z80/cycletimer
- CPU history (chist) implementation is incomplete
- should get rewritten to use the new 6510 "sc" core
xvic
- programs that do not work for unknown reason:
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!
- 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
- 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
- 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
- when running the burn-in diagnostic tests, the CIA is reported as bad ( https://sourceforge.net/tracker/?func=detail&aid=3102493&group_id=223021&atid=1057617 )
- note: run like this: xcbm2 -model 610 -ntsc -drive8type 8050 -virtualdev +truedrive -8 cbm2-burnin.d80
- CPU history (chist) implementation is incomplete
- should get rewritten to use the new 6502 "sc" core
Cartridge System
not implemented yet(fixed)
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(fixed)
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)
- rewrite video chip modules to use:
Tools
c1541
- 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) Gpz (talk) 23:57, 13 December 2012 (UTC)
- since virtual drive emulation does not support REL files on the host filesystem, c1541 can not extract them to R00 files ( https://sourceforge.net/p/vice-emu/bugs/702/ )
Remove optional dependency on libreadline once linenoise-ng has been tested properly.
- See if linenoise-ng can be made to work with the MSYS2 shell, which would help with debugging c1541.
Ports
Some of the mess isn't ours! See here for Upstream bugs.
archdep
- TODO: allow browsing of archives (zip etc) ( https://sourceforge.net/tracker/index.php?func=detail&aid=2942868&group_id=223021&atid=1057620 )
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(implemented in trunk)
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