From vice-emu
Revision as of 15:54, 18 July 2020 by Compyx (talk | contribs) (GTK3 UI)
Jump to: navigation, search

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.4. Items that have been fixed by the time of a major release will be removed, items fixed after that will be marked as fixed and stay until the next major version. New items will be added as noticed.


Prime Directive

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

Code cleanup and streamlining

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

  • remove compiler- and platform- specific hacks (IFDEFS) in common code
$ ./src/ ccarchdep
$ ./src/ archdep
  • remove the third scaling method described in Scaling_cleanup (formerly used by XAW)
  • add proper Icons to both UIs
TODO: update the Icons page with all required info

Build system

  • The build system currently has some code in the Makefile's to conditionally build x64sc, x64dtv and xscpu64, but these are unconditionally set to 'true' in configure. So the build system can be somewhat simplified by removing these conditionals from the's and the bindist scripts.
This has been fixed, but we now have an option to not compile the inaccurate, but faster, x64. This can be enabled with the configure option `--enable-x64`, which is false by default.
  • The Gtk3 Windows port bindist script copies *all* icons of the Adwaita theme, resulting in 6000+ files, while we use about 12 icons currently (all in VSID).
    • I (compyx) am working on a system to have the Gtk3 source files indicate which icons they use and create a list of icons to include in a bindist. But I'm afraid a simple shell script won't do, I may have to use Python or Perl. I think autotools depends on Perl, so there's that.
Fixed: only scalable icons are copied, which saves a lot of bytes.
  • The build system doesn't properly handle --enable-debug on Windows: all binaries are stripped when creating a bindist. This makes creating debug builds for Windows a futile effort.
Fixed: the Windows bindist scripts now correct don't strip the debug binaries and the buildsystem uses -mconsole to get output on the console on Windows.


MAN Pages

  • the man pages are very outdated and should perhaps be generated from the infotext
    • the man pages refer to the path where the html documentation can be found, this should get adjusted to whats actually used
  • the following man pages are missing: vsid
  • man pages for the individual emulator binaries should get installed as symbolic links to vice.1



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


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

  • some info that was previously hidden in target specific articles on the VICE knowledge base should get merged into vice.texi - the remaining articles are here
  • some descriptions of emulator formats are missing (D67, D1M, D2M, D4M...)
  • descriptions of several snapshot modules are missing (Plus4, TED...)
  • Generate only vice.pdf and make available via the UI, spawning the default PDF handler on the OS, or point to the HTML documentation on the website.
  • Unix: Install docs into their proper location, in other words: certainly not in $prefix/lib64/vice/doc.

for details look at doc/Documentation-Howto.txt


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




  • When a key which is shifted on the real machine but unshifted on the PC or Unix keyboard you are using is pressed, the virtual shift is pressed together (i.e. at the same clock cycle) with the main key; this could not work with some keyboard routines.
note: also see this knowledgebase article
Workaround: If you have to use the function keys, press the (real) shift key manually (e.g. F2 = Shift + F1, F4 = Shift + F3 and so on); this also works with other keys.
  • When typing very quickly, some keypresses might get lost. This comes from the fact that the keyboard is (and can not) be scanned in real time (ie every 1mhz cycle). Even if we could remove the per frame scanning from the emulator itself, the operating system and last not least the keyboard itself would still impose a certain limit (something like 10ms for USB HID keyboards, for example). That means if a key is pressed and released within that timespan, the emulator does (and can not) know about it.
Workaround: the only workaround is to type slower, it cant be fixed.
  • 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


TODO: make a proper test program
  • when selecting "swap joysticks" or "swap userport joysticks" this will actually swap the related resources, which may be surprising when saving settings and loading them later. it also means its impossible to display whether they are swapped or not in the UI
TODO: create a "JoysticksAreSwapped" resource, and update the code accordingly

Joystick port devices

  • Paperclip 64 dongle emulation is broken


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


  • When loading a snapshot, the monitor break/watchpoints break.
  • Improve the remote interface

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.


  • 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,
  • 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 (
  • FIXME: PAL delay line currently matches a 1701 (U only), "full" delay line is missing

see for some further info on this topic.

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. fixed in trunk
  • 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 ( )
  • 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).
True Drive Emulation
  • serial timing latency is not implemented. due to their physical properties, it takes about half a cycle for a value to show up at the respective output pin after it has been written to the register. and respectivly, it takes about half a cycle from changing an input pin until the value in the respective register changes.
  • mechanical delays (such as head stepping and motor spinup) are not emulated yet.
  • accessing device #7 on the IEC bus works (only real devices), but it only works if True Drive Emulation is OFF, even though this has nothing to do with drives. This needs to be fixed in TDE somehow.
  • 1541 Emulation still fails a few test programs
  • 2mhz mode of the 1571 is not handled correctly
    • drive CPUs always run at 1Mhz for all drives (hardcoded 1000000 at a few places)
    • 1571 has extra delay on on reading sync inside the drive, ("you cannot use BVC in 2mhz mode!")
  • 1571CR emulation does not work correctly
  • double sided 1571 images do not work correctly
    • regular (70 tracks) vs extended (80 or 84 tracks) d71 images are not handled at all (vdrive problem)
    • creating (formatting) G71 does not work correctly, the second BAM block will be wrong (vdrive problem)
    • double sided P64 can be used, but can not be created from within VICE (see patch #122, r32586). since these are non existant "in the wild" and probably not needed for anything - not a big problem :) to handle this properly, a seperate image format should get created (at least internally)
Dual Drives

Dual Drives are currently implemented as a weird hack, to improve this we must do some significant changes to how drives are handled internally. For details see Improving_dual_disk_drive_handling

This is somewhat implemented in trunk, but still needs work. see patch #228

  • when using dolphin dos 3 emulation, the state of the mc6821 is not saved to/restored from snapshots
  • when using supercard+ emulation, the optional additional index hole sensor (for the IHS nibbler) is not emulated
Drive Noise
  • since the current implementation is a very simple sample player, things like "drive composer" will not work

Datasette Emulation

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

Tape port devices

  • DTL Basic Dongle emulation is broken

Printer Emulation

there perhaps should be a way to explicitly set a directory for printer output files Gpz 01:24, 4 July 2011 (UTC)
  • printer noise is not emulated
  • printers don't work on the PET (or other IEEE-488 computers)
  • piping to an external program does not work on windows due to missing implementation of fork_coproc, see here.

RS232 Emulation

  • piping to an external program does not work on windows

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


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.



  • 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 ; ) (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 only cycle too early (see this bug)
  • I/O "peek" function is broken

used in: C64, C128, 1570/71


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

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


used in: Plus4


  • Some basic features of the VDC are missing:
  • Registers 34/35 (horizontal blanking position) not implemented
  • $d600 bit 7 STATUS flag is only approximately implemented. Fixing requires emulating the internal timing of the VDC.. (partially implemented in r35456, also see testprogs/VDC/vdctiming)
  • Differences between 8563 and 8568 are not all emulated, eg. register 38
  • Snapshot doesn't include VDC
  • Clock calculation for lightpen is incorrect

used in: C128


used in: VIC-20


used in: C64, CBM2


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

used in: C128


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

used in: Magic Voice, Plus4 (V364)


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

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


  • snapshot support is missing

used in: RR-Net/TFE


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

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


  • I/O "dump" function is missing

used in: FD4000/FD2000


  • I/O "dump" function is missing

used in: 1570/1571/1581

ACIA (6551)

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



  • snapshot support is missing

used in: MMC64, MMC Replay


  • snapshot support is missing

used in: MMC Replay


  • snapshot support is missing

used in: C64, VIC-20



x64 / x64sc


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

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

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

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

note: this is also broken in xcbm2

Workaround in all cases: use x64sc :)

x64 specific problems

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

Workaround in all cases: use x64sc :)

Cartridge System

note: the detailed todo list/status is here.

  • some carts have no snapshot support yet (still broken: Magic Voice, MMC Replay, RR-Net MK3, Ethernet.)
    • IDE64 & ATA system can only handle "readonly" snapshots now. Somehow the image file must be matched to the snapshot to prevent corruption.
    • MMC64 snapshots do not include the SD-card
  • some carts do not work 100% yet (still broken: Magic Voice, MMC Replay.)
    • Magic Voice: emulation of the speech chip is incomplete (see Todo#t6721a), this breaks some words included in the magic voice rom and the "a-bee-c" cartridge. Memory mapping is incomplete/broken (which however affects no known software/testcase).
    • MMC Replay: only the BIOS mode works right now; the monitor may incorrectly access cartridge memory (even) if "bank cart" is explicitly set
  • the (very strange, and incompatible with most cartridges) passthrough port of the SFX sound expander is not emulated
  • various cartridges have no support for verbose i/o dump in the monitor
  • Passthrough port functionality depends on ordering of cartridge attaches, especially visible from the command line. (e.g. MMC64+RR ok, RR+MMC64 not)


  • 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 ( )
xmx provided a test program, see testprogs/c128/z80/cycletimer
  • CPU history (chist) implementation is incomplete



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


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


  • 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 ( )
note: run like this: xcbm2 -model 610 -ntsc -drive8type 8050 -virtualdev +truedrive -8 cbm2-burnin.d80
  • CPU history (chist) implementation is incomplete


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


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


  • Make a list of Hotkeys used per port, compare and try to make them the same / alike. ( Hotkey cleanup )
  • enable/disable menu items in drive settings menu according to Drive_options_precedence
  • Fix all Keymap handling according to Keymaps




  • add support for rtkit [3]
does this still make sense at all? Gpz (talk) 00:14, 4 January 2020 (CET)
No it does not, especially not with our threaded UI code. -- Compyx, 2020-07-14
  • add support for sandboxing such as Flatpak
This involves adding support for XDG paths and using special file chooser dialogs: with Gtk3 this means using GtkFileChooserNative and with SDL we'll have probably have to use Portal. For now I think we should stick to Gtk3, since most desktop users will prefer a 'proper' GUI anyway. --Compyx 2020-03-21
I've added support for sandbox mode in the Linux Gtk3 port, at least to the point where I haven't had complaints from the FlatHub people. -- Compyx, 2020-07-14



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


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

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

The list of covered resources is here

UI code refactoring to support the new threaded UI code

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


This is 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: data/fonts and data/logos should go to data/common
Done, but the VICE logos are still in doc/html/images, that might still require some changes.
  • 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)
  • TODO: Write a "printf" version of vice_gtk3_resource_entry_full(), so the caller doesn't have to generate a resource name via g_snprintf(), let the function handle it.
  • Perhaps the "show menu/statusbar when fullscreen" menu item should be check button?
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.
    • do not forget the VDC and the Monitor windows
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.
  • TODO: Create a context-menu for the emulated display with some display settings. Once that is done, and found to be usable, remove items like 'fullscreen' from the main menu.
  • Speed popup menu: when going 'max speed' and the refresh rate being 'Auto', VICE should switch to 1/10 refresh.
  • the Tape Devices widget needs to check if resources can be set to avoid segfaults
  • BUG: the Volume control widget has some display/placement issues due to the way the drive widgets layout is implemented. See [4]
  • TODO: "File->Netplay" needs some testing and refactoring. perhaps move it into settings?
    • WIP: Work is under way in uinetplay_new.c, which mostly works but needs the client/server mapping of keyboard/joystick etc. And indeed moving into settings would be prefered.
  • TODO: ROM settings are missing (partially supported, needs work)
  • TODO: HardSID settings are missing
C64 model (x64/x64sc)
  • TODO: the model widget must get updated/synced when the "kernal revision" widget changes (fixed in trunk)
  • TODO: the model widget must get updated/synced when the "reset goes to iec" widget changes (fixed in trunk)
  • TODO: the model widget must get updated/synced when the "glue logic" widget changes (fixed in trunk)
C128 model
  • TODO: Update model settings UI to reflect updated model list and properly implement all glue logic.
Mostly done, needs further work on the "BoardType" resource to determine the difference between C128 and C128D models, and perhaps more.
  • Perhaps move C128 "Bank 2 & 3" from I/O extension into the C128 model setting page.
VIC20 model
Plus4 model
  • xplus4: plus4_get_model() depends on loaded kernal, so switching between PAL/NTSC for C16 and Plus4 results in "Unknown" in the model list. No easy way to fix this. I certainly don't want to move the ROMs settings page into the Model settings.
please implement this as if the api worked, ie like in the other emulators. Gpz (talk) 00:59, 4 January 2020 (CET)
This has been implemented using the 'API' as far as I can check. [[User:Compyx|Compyx)] 2020-01-08
    • TODO: fix the api :)
Pet model
  • TODO: xpet seems to be fine, someone with actual PET knowledge should check this, especially the "SuperPET" stuff.
DTV model
  • TODO: Check model settings glue logic. (fixed in trunk)
SCPU model
  • TODO: Check model settings glue logic. (fixed in trunk)
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
  • BUG: the radio button on the right called "output device" is called "text output device" on printer 7 tab. it should always be just "output device" (fixed in trunk)
  • BUG: at the bottom it should be "printer output device" instead of "printer text output devices" (fixed in trunk)
  • BUG: all 3 "output devices" are the same, and behave the same. there is no point in implying they are not (by adding "file dump" or "exec") (fixed in trunk)
  • enable/disable relations should be checked, e.g. selecting "None" as drive type should not grey out IEC device and changing fsdevice settings only makes sense if IEC device is checked
  • presenting vdrive/fsdevice/opencbm as additional radio buttons would make sense from a user's point of view, but is contrary to how the related resources work internally
C64 Cartridge
  • TODO: check I/O extensions for proper behaviour (attach/detach, load/save images etc):
    • GEO-RAM
    • RamCart
    • Expert Cartridge
    • ISEPIC
    • EasyFlash
    • GMod2
    • IDE64
    • MMC64
    • MMC Replay
    • Retro Replay
    • RR-Net Mk3
  • BUG: Fix drag-n-drop behaviour, dragging multiple SID files onto the playlist widget works, but on Linux at least, dropping a SID file on the STIL view widget doesn't work (specifically the GtkTextView), this works on Windows oddly enough.
  • TODO: Implement "goto-next-SID" when having SLDB support enabled.
  • TODO:When double-clicking a SID in the playlist, disable "Pause" when set in the controls.
  • 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?
  • TODO: add a "STOP" icon

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.

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.

not really doable in a practical way with the VTE we use
Using the CBM font is now possible, but it makes the monitor window rather wide
  • TODO: in the novte lib, GValueArray should be replaced by GArray
forget about that, really screws with the C++ crap. Until we find a better way, the novte stuff will have to do.
  • TODO: Allow font selection and resizing: VTE has signals for "increase/decrease font size", triggered by Ctrl +/-. And having a default font and size in the resources will also be useful, which needs some widgets in the settings UI to be able to select a font.
not really doable with the the VTE version we use either(?)

for some info on the monitor ui see: MonitorUI.

Unix (Linux)
  • The Unix port uses the XDG specification for the vice configuration files, so now `vicerc` is located in `$HOME/.config/vice`, not `$HOME/.vice`.
FIXME: Right now the 'autostart-${emu}.d64' files are also stored there, which is not quite correct, they should be in $XDG_CACHE_HOME (~/.cache).
  • TODO: the MIDI settings widget should show a combobox with supported drivers
  • GSettings schema files aren't loaded, so things like GtkFileChooser cause an abnormal exit, which means attaching disk images doesn't work.
  • TODO: joystick_ui_get_next_device_name should return the detected joysticks instead of the predefined list
  • TODO: test mouse -emulation and -grab
  • TODO: the MIDI settings widget should show a combobox with supported drivers
  • TODO: Add QuickTime recording settings widget, like the FFMPEG recording settings widget
  • The Unix port uses the XDG specification for the vice configuration files, so now `vicerc` is located in `$HOME/.config/vice`, not `$HOME/.vice`.
FIXME: Right now the 'autostart-${emu}.d64' files are also stored there, which is not quite correct.
  • TODO: The OpenGL renderer should transform itself into a Cairo renderer if the system doesn't support OpenGL.
    • Stretch goal: the OpenGL renderer should fall back to legacy mode (the SDL renderer) if GTK3 itself has, instead of failing.
  • TODO: Do-not-scale option. Important for Cairo renderer, possible for OpenGL.

Feature requests / Stretch goals

  • Implement a playlist for VSID (partly done)
  • Add some sort of tree-based file browser (preferably using the HVSC as the default dir) to allow quick tune selection and help with building a playlist (ie via drag-n-drop)
  • Add HVSC BUGlist support to VSID
Support for this is available in src/hvsc, but there are very few actual entries in the BUGList.txt file. Maybe skip this one?

Upstream bugs

See Upstream bugs



  • Write documentation on how to use the UI
  • BUG: FFmpeg media recording behaves unexpected when entering the menu [5]
  • TODO: use different icons for the various emulators/executables
  • 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
  • BUG: "pause" does not the green "tick" indicator when enabled
    • "advance frame" should be disabled when not in pause mode
    • entering the menu unpauses the emulation, this is required to trigger canvas refresh. unfortunately, due to how the UI is written, this can not be easily changed
      • also re-enabling pause mode when leaving the menu doesnt work with the current code
  • TODO: A better way of showing filenames (maybe using contraction) needs to be made
  • TODO: Disk image attach and detach dialogs/menus are missing support for the second drive of dual drives
  • TODO: Status bar is missing support for the second drive of dual drives in trunk
  • TODO: the virtual keyboard handling of the SDL port must be updated/fixed to support all PET keyboards
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: 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


  • TODO: embed icons into windows .exe files


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

External Libraries

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

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

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

  • SDL
  • zlib
  • hardsid


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

New Features

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

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

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

also look at Tracker: open Feature Requests


History Recording





Sound System

  • sound sync needs a rewrite, its too complex and fails a lot

Video System

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

Hardware emulation



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


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



  • add support for "speedy" freezer cartridge


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


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