From vice-emu
(Redirected from 3.7.2)
Jump to navigation Jump to search

Things we wanted to do for the 3.7.2 release, but are now going to be in the 3.8 release:

Rationale: After 3.7.1 we want to merge Fabbo's joystick mapping stuff asap, and then fix the fallout - which perhaps includes what is listed below.

However, generally do not forget about the regular Todo page, which always contains some low hanging fruit :)


The joystick system needs to be modified/extended to properly support custom button mappings. See Joymappings for more information.


Analogous to the joystick mappings, we'll need to implement separate joystick keyset files. Currently the keymap files can (and do, in the case of keyrah), contain definitions for keysets. The issue is that the vkm files are loaded after vicerc, meaning any keyset definitions of the user in vicerc are overridden. This has the unfortunate result of the user configuring a keyset and it working until the user restarts vice.
See bug #1797 for some additional info.


  • the SDL "menu actions" should use fixed numeric IDs for the mapping to keys/joystick instead of "menu pathes" which break when the menu is rearranged (moved to Joymappings)
  • SDL1/2 joystick mapping improvements (moved to Joymappings)
    • Make the 'extra joystick options' menu show what they are already mapped to (moved to Joymappings)
    • Add menu joystick actions mapping support to the 'extra joystick options' menu (moved to Joymappings)
  • TODO: in x128 there is no separate cartridge menu, but x128 has extra cartridges that only exist in x128 (seems to work just fine in trunk)
  • FIX: For RAMLink, the "RAMLink RAM Image" should use the new cartridge_flush_secondary_image() and cartridge_save_secondary_image() (in trunk)
  • FIX: For GMOD2, the "GMOD2 EEPROM Image" should use the new cartridge_flush_secondary_image() and cartridge_save_secondary_image() (in trunk)
  • The position of the SDL window(s) should be saved and restored at startup (only works on SDL2) (in trunk)
  • "CB2Lowpass" setting is missing in xpet (slider in sound mixer settings) (in trunk)
  • TODO: in x64dtv the menu to select between internal color generation and external palette files is missing (Fixed in branch compyx/sdl-uiactions, will be merged back to trunk) (fixed in trunk)
  • Add UI action IDs for cartridge-attach menu items. Unlike the Gtk3 UI, which has a single dialog (ACTION_CART_ATTACH) to attach CRT and RAW images, the SDL UI has many different menu items to attach cartridge images.
    • VIC20: smart-attach: can use ACTION_CART_ATTACH for this
    • VIC20: attach raw at $2000
    • VIC20: attach raw at $4000
    • VIC20: attach raw at $6000
    • VIC20: attach raw at $A000
    • VIC20: attach raw at $B000
    • C64: attach CRT (ACTION_CART_ATTACH)
    • C64: attach raw: ACTION_CART_ATTACH_RAW is available but not yet implemented
    • CBM-II: attach raw at $1000
    • CBM-II: attach raw at $2000
    • CBM-II: attach raw at $4000
    • CBM-II: attach raw at $6000
    • Plus4: attach CRT
    • Plus4: attach raw c264 magic cart
    • Plus4: attach raw 1MB cart
    • Plus4: attach raw Plus4 multi cart
    • Plus4: attach full C1 image
    • Plus4: attach low C1 image
    • Plus4: attach high C1 image
    • Plus4: attach full C2 image
    • Plus4: attach low C2 image
    • Plus4: attach high C2 image
    • PET: attach ROM 9 (not a cart, but in menu_petCART.c)
    • PET: attach ROM B (not a cart, but in menu_petCART.c)
    • PET: attach ROM A (not a cart, but in menu_petCART.c) (fixed in trunk)
  • WiC64 settings missing (to be added to userport devices menu/dialog): reset, user-reset checkbox, default server, timezone (fixed in trunk)


  • TODO: support rotating the output by 90 degrees (CHIPRotate, canvas->videoconfig->rotate)
    • FIXME: the texture should rotate and scale to the window. This is handled in video_canvas_refresh(), but doesn't work correctly :/
  • TODO: in x128 support enabling the statusbar separately for each window (in trunk)
  • In the Video menus when changing border size, the menu does not update as it should - however the option IS updated and the effect shows when leaving the menu (fixed in trunk)


  • make autostarting disk images dragged onto the window optional (see the "Doubleclick for autostart" option for attach dialogs, perhaps extend the option to also cover drag'n'drop.
    • this should be a generic option (for all UIs)
  • add missing $VICERES comments in the UI files, so ./gtk3-resources.py list-missing keeps working
  • Find out why the CRT control widgets take so long to show up.(fixed in trunk: certain signal handlers waited for the main lock while they didn't need to.)
  • Implement CHIPAspectRatio widget as a spin button. (fixed in trunk)
  • Add support for setting the LogFileName resource, including setting it to "-" to redirect to stdout. Perhaps use the "Host" => "Current directory" node and rename to "Environment"? (fixed in trunk)
  • Add support for opening the directory containing vice.log with the default file manager, or perhaps open vice.log with the default editor for .txt files.
Works on Linux and Windows, no idea about MacOS. (added in trunk, I'll assume it works on MacOS, no arch-specific code involved from our side)
  • Add UI action and hotkey to toggle the PET diagnostic pin (allows for non-destructive reset on PET).(fixed in trunk)
  • Rework the "Machine" => "ROMs" dialog: much too unwieldy, there are too many different ROM file resources for the current layout.
Also either delete the "ROM sets" stuff or properly fix it.
A new ROM settings interface is in trunk, hidden behind --enable-debug-gtk3ui: with that configure switch a new settings node "Machine" -> "ROM Manager (WIP!)" will expose the new interface. The new interface actually implements saving and loading ROM set (.vrs) files, and allows users to revert a single ROM or all ROMs to default. The ROM set archive handling isn't implemented since that is a complicated mess and marked for deletion. See src/arch/gtk3/widgets/rommanager.c for details.
  • TODO: Make all cartridge widgets use the defines in src/cartridge.h for the cartridge names. (fixed in trunk, some defines might be missing: CARTRIDGE_PLUS4_NAME_DIGIBLASTER and CARTRIDGE_PLUS4_NAME_SIDCARD (although that one is spelled in at least four different ways))
  • FIX: generally on all cartridge tabs the widgets related to "primary image" should be at the top, then the "secondary": GMOD2, Expert, MMC Replay (fixed in trunk)
  • FIX: In MMC64 Tab, the "MMC64 BIOS" and "MMC64 Cartridge Image" are the same thing. The save/flush Buttons should be located under the same caption as the filename entry (Primary image only: Flash) (fixed in trunk)
  • FIX: In RAMLink Tab, the "RAMLink RAM Image" (Primary image is a regular ROM, secondary image is RAM). UI looks ok, but should use the new cartridge_flush_secondary_image(), cartridge_save_secondary_image(), cartridge_can_flush_secondary_image() and cartridge_can_save_secondary_image() for the RAM (fixed in trunk)
  • FIX: GMOD2 (Primary image: Flash, secondary image: EEPROM). UI looks ok, but should use the new cartridge_flush_secondary_image(), cartridge_save_secondary_image(), cartridge_can_flush_secondary_image() and cartridge_can_save_secondary_image() for the EEPROM (fixed in trunk)
  • FIX: GMOD2C128 (x128 only) (Primary image: Flash, secondary image: EEPROM) UI is missing the Flush/Save buttons for the EEPROM, should use the new cartridge_flush_secondary_image(), cartridge_save_secondary_image(), cartridge_can_flush_secondary_image() and cartridge_can_save_secondary_image() for the EEPROM (fixed in trunk)
  • FIX: MMC Replay (Primary image: Flash, secondary image: EEPROM). UI is missing the Flush/Save buttons for the EEPROM, should use the new cartridge_flush_secondary_image(), cartridge_save_secondary_image(), cartridge_can_flush_secondary_image() and cartridge_can_save_secondary_image() for the EEPROM (fixed in trunk)
  • FIX: REX RAM-Floppy (Primary image is regular ROM, secondary image is RAM). UI looks ok, but should use the new cartridge_flush_secondary_image(), cartridge_save_secondary_image(), cartridge_can_flush_secondary_image() and cartridge_can_save_secondary_image() for the RAM (fixed in trunk)
  • TODO: On the printer tab, some invalid combinations of options should be prevented:
grey out "graphic" if either ASCII or RAW driver is selected (make sure you cant select "graphic" first, then change the driver to ASCII or RAW)
grey out "text" if 1520 driver is selected (make sure you cant select "text" first, then change the driver to "1520") (fixed in trunk)
  • TODO: Fix hotkeys UI: saving the custom hotkeys is unwieldy and it's unclear whether the custom hotkeys file is stored in the HotkeyFile resource, in which case the user still has to save their settings to make the hotkeys available after VICE reboot, or if the hotkeys are saved in the default location with the default name, i.e. ~/.config/vice/gtk3-hotkeys-${MACHINE}.vhk and auto-loaded after a VICE reboot. So this distinction has to be made clear to the user by the UI and the UI should provide a way to make the saved hotkeys default on VICE reboot. Perhaps something like "Save hotkeys and set as default" would work? (fixed in trunk)
    • It also appears that when saving the hotkeys, the "Current hotkeys file" GtkEntry still shows /usr/local/share/vice/C64/gtk3-hotkeys.vhk, so that text will need be to updated on saving as well, but only when to user requests the saved hotkeys to be default ;) (fixed in trunk)
    • The dialog exceeds the limits set on dialog size, so that'll need fixing as well.
  • Implement UI action handlers for:
    • Toggle secondary status bar (ACTION_SHOW_STATUSBAR_SECONDARY_TOGGLE) (x128 only) (fixed in trunk)
    • Set border mode (ACTION_BORDER_MODE_NORMAL, ACTION_BORDER_MODE_FULL, ACTION_BORDER_MODE_DEBUG and ACTION_BORDER_MODE_DEBUG) (all emus except vsid, xcbm2, xpet and x128's VDC window) (fixed in trunk)
  • Remove "Cartridge freeze" from the menu (and from valid UI actions!) in non-c64/c128 emulators. (fixed in trunk)
  • Nice-to-have TODO: WIC64 UI element to show traffic between emulated machine and WiC64 - kernal64 offers to open a window, where basically a hexdump is shown. In Vice, the hexdump of the traffic is currently only put on the console, when DEBUG_WIC64 is set (which it currently is). Rationale: when debugging WiC64 applications one may want to see what's happening between the host machine and WiC64. (rejected, user shall use console output)


  • TODO: support mirroring the output (CHIPFlipX, CHIPFlipY, canvas->videoconfig->flipx/y) (enable in canvasrendermirrorwidget.c:canvas_render_mirror_widget_create())
  • TODO: support rotating the output by 90 degrees (CHIPRotate, canvas->videoconfig->rotate) (enable in canvasrendermirrorwidget.c:canvas_render_mirror_widget_create())
    • the host window should change size/ratio
  • TODO: the macOS renderer must be checked and eventually updated for the new per chip resources. see eg r42892
  • add feature that allows to hide (only) the statusbar (use <CHIP>ShowStatusbar resource, command line options -<CHIP>showstatusbar and +<CHIP>showstatusbar) (in trunk)
TODO: Needs more work to properly handle the window resizing when toggling the visibility of the status bar.


  • The path for vice.log is incorrect: currently we use $XDG_CONFIG_HOME (default: .~/config/vice/vice.log), this should become $XDG_STATE_HOME (default: ~/.local/state/vice/vice.log). (fixed in trunk, on Windows we still stuff everything in %APPDATA%\Roaming\vice)


Using FFMPEG via API breaks all the time, and it is currently disabled in our windows builds.

What we want to achieve is: get rid of the breakage every time FFMPEG bumps its version. There are two things we can do (even in parallel):

  • instead of using FFMPEG via API and linking to the libraries, we use the ffmpeg executable and pipe the data to it (WIP in trunk)
    • a runtime check and UI that warns when the exectable is missing needs to be made
    • needs to be tested and fixed on Windows, macOS
    • FIXME: The port(s) that are used for streaming data to ffmpeg are currently hardcoded - this is a problem, because they might not be free to use
  • instead of the internal FFMPEG, support internal ZMBV codec (which we can pull into the tree) (WIP in trunk)
this can always work, even if FFMPEG executable is not available
if we have this, even if we do not ship with the FFMPEG executable, we have working movie recording
TODO: might even be possible to pipe ZMBV to external programs (such as OBS) directly


  • Implement "MachinePowerFrequency" (and -power50/-power60) for all emulators (code is already prepared for this in ifdefs), update the model-setting code accordingly, add GUI items to set power grid frequency in the model dialogs.
  • WiC64 settings should be changeable through the GUI (fixed in trunk)
Added in the Gtk3 UI, though the MAC address and IP address show different values than what is dumped on the terminal when VICE starts. Selecting a timezone with the combobox also appears to fail since the resource setter is bugged: it doesn't return 0 on success (or rather: it only returns 0 for timezone 0). (fixed in trunk)
  • WiC64 settings should be changeable through command line options: currently only WIC64DefaultServer can be set; command line options for the WIC64MACAddress, WIC64IPAddress, WIC64SecToken and WIC64Timezone resources are missing, or perhaps this is by design? (fixed in trunk)
  • WiC64 missing commandline options: -wic64trace,+wic64trace, -wic64reset (fixed in trunk)
  • WiC64 logging stuff needs to be cleaned up, and all the WiC64 specific stuff removed and made generic
    • in the WiC64 code there shouldnt be any code related to logging, except the log_error, log_warning, log_message etc calls
    • colorizing shouldn't be a WiC64 specific thing, this needs to be handled in the general log system somehow
    • right now color codes end up in the regular log file too, because color codes are fed into the log_ calls. Instead the log_ calls should *produce* the color codes, and omit them when writing to a file.
    • when coloring terminal output, _always_ set both foreground _and_ background colors. Generally coloring terminal output correctly is more complex that it seems on first look :)
    • +wic64colorizetrace is undocumented. this should be a global option too, not wic64 specific (fixed in trunk)
    • "WIC64LogLevel" resource is not documented (fixed in trunk)
  • Fix Userport system
    • The API that is used to register/show only user port devices which work on a certain machine is overcomplicated and broken:
      • Instead of trying to figure out what device works on a machine by using various flags, use a simple bit field that directly gives this info
      • All devices should be registered in a central function, not per emulator as it is now.
    • Currently the user port hooks/functions are not representing the actual user port pins. as a consequence eg user port devices that would not actually work at a real Plus4 would suddenly work on it in the emulation. This should NOT happen - only if the physical device would actually work in a machine, it should work in the emulation.
      • an acceptable exception to the above are the "internal" user ports, ie C64DTV and CBM2. However, the "rewiring" that is used should be fixed, ie using a theoretical adapter that every user port device uses.
    • many functions are called by what they do in the context of the C64 emulator, this can be very confusing. Perhaps some can be renamed to refer to the actual user port pins instead.
    • the IDs should be fixed, and not change when a new device was added (update docs when fixed)
    • after the rework, the PET diag pin can be converted into a regular userport device
  • "CB2 Sound" should get an enable tickbox under "Machine" settings (no, we assume it is always present)
    • not sure if this should also be a userport device
  • archdep_spawn needs to be rewritten to use CreateProcess, like in coproc.c - see [1] (fixed in trunk)
  • Fix C128 cartridge system
    • snapshots are not supported yet
    • cartridges that work in C64 _and_ C128 mode are not supported yet (in trunk)
      • RAMLink (in trunk)
      • LTK (in trunk)
      • MMC Replay
    • comal80 does not work correctly (fixed in trunk)
  • implement CBM2 cartridge system
    • don't forget to update crt.c, crtpreviewwidget.c, uicart.c
    • we might have to create 2 crt types for 5x0 and 6x0 machines
  • Fix C64 cartridge system
    • implement functions for GMod2 EEPROM save-as/flush. (fixed in trunk)
    • a generic API for saving and flushing EEPROM data for carts should be implemented. (fixed in trunk)
    • IDE64 should save its config into a separate file rather than writing a binary string into vice.ini (in trunk)
  • it is not possible to reset hotkeys to default (via UI) (fixed in trunk)
    • -default on cmdline should skip loading system files such as kernal from ~/.local/share/vice/$EMU/.
  • Add some simple checksum algorithm to common code (CRC32 is probably fine) - right now eg the kernal loading uses simple additive checksum, which is really bad :) (in trunk)
  • DTV should use different flash images for PAL, NTSC, Hummer (fixed in trunk)
  • The list of available palette files (.vpl) should get generated from the available files found in the data directory (fixed in trunk)
  • Fix Videochip options (also see below)
    • we need to add a member to video_chip_cap_t that lets us determine whether we need PAL/NTSC options or not, then we can use this to remove -CRTCcrtdelaylinetype and -VDCcrtdelaylinetype (and the respective resources) (fixed in trunk)


  • when configured without --enable-x64, a symlink "x64->x64sc" should be created and installed instead of x64 (fixed in trunk)
  • README is currently updated from the same rule that generates infocontrib.h, this should be done in a different way
  • make bindist is currently broken for USE_HEADLESSUI. (fixed only for Windows/msys2)
  • Too many files are installed in $PREFIX/share/doc/vice when doing make install (fixed in trunk)
  • The configure switch to enable lame mp3 support needs to be renamed to --with-lame, currently it is called --enable-lame, a remnant of when there was an in-tree lame source. (fixed in trunk)
  • some symbols appear in config.h that are not used anywhere (so they can be removed): AC_APPLE_UNIVERSAL_BUILD (?), BSD_JOYSTICK, HAVE_HARDSID_IO, HAVE_FULLSCREEN, HAVE_CATWEASELMKIII_IO
    • EXTERNAL_FFMPEG (win32 and osx bindist greps for this in config.h!)
This is used to copy the ffmpeg DDLs into the bindist. Linking to ffmpeg is on its way out, replaced by using the (user-provided) ffmpeg executable, so I've removed the logic from the Windows scripts. The same should probably happen on MacOS, but I do not have a Mac to test this. --Compyx (talk) 08:49, 22 November 2023 (CET)
    • HAVE_EXTERNAL_LAME (osx bindist greps for this in config.h!)
    • HAVE_READLINE (seems to be used in makefiles all over the place) (fixed in trunk)
  • configure switch --enable-portaudio should be changed to --with-portaudio (fixed in trunk)
  • configure switch --enable-libieee1284 should be changed to --with-libieee1284 (fixed in trunk)
  • configure switch --enable-parsid should be removed and building of ParSID should be enabled when --with-libieee1284 is used.
Update the help message for --with-libieee1284 to mention ParSID building.
  • configure switch --with-libieee1284 should cause an error when used on MacOS.

Github Actions

  • TODO: the windows build should use --enable-catweasel, --enable-parsid, --enable-libieee1284, --with-mpg123 (fixed in trunk, --enable-libieee1284 has changed to --with-libieee1284)
    • libieee1284 must be installed/built from git (./bootstrap && ./configure --without-python && make && make install) (fixed in trunk)
    • also use --enable-portaudio (needed for sampler input) (added in trunk, switch has changed to --with-portaudio)
  • TODO: the linux build should use --enable-catweasel, --enable-parsid, --enable-libieee1284 (fixed in trunk)
    • for capabilities support to work, sys/capability.h must be available on the build system (fixed in trunk)
    • also use --enable-portaudio ? (needed for sampler input) (fixed in trunk, --enable-portaudio has changed to --with-portaudio)
  • we need to make sure both build-main-on-push.yml and make-release.yml do the right thing
Please define "the right thing" --Compyx (talk) 09:47, 21 November 2023 (CET)
use the same config options etc in both, not just update build-main-on-push :) Gpz (talk) 21:20, 3 December 2023 (CET)

A .deb is generated for headless, sdl1, sdl2 and gtk3 (both amd64), with non-stripped binaries.

  • Still TODO is adding FFMPEG to the builds (needs support for FFMPEG 5.x in trunk)

The GHA should produce the html documentation and upload it to the website

  • perhaps the entire website can be updated/produced/uploaded (removing another manual step from the release procedure)
  • also the release tarball and binaries can be updated to sf (and zimmers perhaps?) automatically
  • a GHA that builds macOS binaries should be added
  • The SDL1 port should also get checked
  • clang-tidy could be used to do more automatic codestyle checks
  • Consider using a separate workflow for creating the matrices used for configure switches: right now the configure switches used for the various builds are spread over the jobs in two workflows (build-main-on-push and make-release and a shell script (build/github-actions/build-shared.sh). Using a single file for all the configure switches would make adding, editing and validating build options a lot easier.
See https://github.com/ch007m/test-github-action/blob/main/.github/workflows/reusable-config.yml for an example of how we could implement this.


  • get rid of all traces of "Frankenvice" and other failed attempts of using a linux hosted mingw crosscompiler. (Remove related scripts, documentation, etc) (fixed in trunk)

disable non working things in the GUI

Things that don't actually work, and can't be fixed easily, should be disabled in the UI by default.

TODO: make a configure option --enable-experimental-devices which defines HAVE_EXPERIMENTAL_DEVICES (in trunk)

TODO: make a list of all those things (here, and keep it here, since obviously those are open ends and need to be fixed!)

TODO: make sure the UIs use the following symbols to enable/disable the respective UI items: DRIVE_EXPERIMENTAL_DEVICES (drive.h), JOYPORT_EXPERIMENTAL_DEVICES (joyport.h), TAPEPORT_EXPERIMENTAL_DEVICES (tapeport.h), USERPORT_EXPERIMENTAL_DEVICES (userport.h) - use --enable-experimental-devices to enable experimental devices at configure time.


  • Professional DOS emulation doesn't work (https://sourceforge.net/p/vice-emu/bugs/759/) (disabled in trunk, unless DRIVE_EXPERIMENTAL_DEVICES is defined in drive.h)
  • "IEC-Device" does not work in xvic and the IEEE machines (disabled in trunk)
  • IEEE machines have no virtual device ("device traps") (disabled in trunk)
  • vdrive via opencbm ("real device") does not work in xvic (fixed in trunk)

Joystick port:

  • Gun Stick lightpen emulation is not working (and disabled, unless JOYPORT_EXPERIMENTAL_DEVICES is defined in joyport.h)
  • Paperclip 64 dongle emulation is broken (which exactly?) (it actually works)

Tape port:

  • diag 586220 harness emulation is not working (and disabled, unless TAPEPORT_EXPERIMENTAL_DEVICES is defined in tapeport.h)
  • DTL Basic Dongle emulation is broken (and disabled, unless TAPEPORT_EXPERIMENTAL_DEVICES is defined in tapeport.h)

User port:

  • WiC64 emulation is not working well (and disabled, unless USERPORT_EXPERIMENTAL_DEVICES is defined in userport.h) (fixed in trunk)


  • GTK3 UI: Mirror/Flip X/Y and Rotate 90 degrees is not working (disabled in canvasrendermirrorwidget.c:canvas_render_mirror_widget_create())


  • REU does not work (yet) in x64sc, for the time being it should get removed from the UIs, the commandline options, the resources (in x64sc) (fixed in trunk)

Codestyle cleanup

Apparently some files that do not respect the common codestyle sneaked in. Remember we removed the rule that archdep files can ignore codestyle rules long ago!

  • opengl_renderer_unix.c, render_thread.c, render_queue.c, opengl_renderer.c ...
  • use ./src/findhacks.sh encoding to find files with illegal characters in them
Status: should be clean Gpz (talk) 22:47, 4 November 2023 (CET)
  • use make stylecheck to run the general style checks
Status: this must be generally clear (checked by github builder)
  • use ./src/checkstyle.sh all to run some more style checks, in particular those that always produce some false positives
Status: code should be clean of C++ comments - please keep it that way!

obsolete ifdefs/resources cleanup

  • TODO: VICE_USE_LIBNET_1_1 should probably get removed alltogether, unless we need to support some ancient libnet API for whatever reason
  • use ./src/findhacks.sh obsolete to find defines that should no more be used - these should be replaced (eg use WINDOWS_COMPILE instead of _WIN32) or removed. Ideally this finds no files.
Status: seems clean, shows a few false positives Gpz (talk) 22:49, 4 November 2023 (CET)
  • use ./src/findhacks.sh res to find obsolete resources - this should find nothing (except a couple false positives)
Status: clean, shows a few false positives Gpz (talk) 22:49, 4 November 2023 (CET)

Archdep cleanup

There are still various bits of archdep things dangling around in common code

  • use ./src/findhacks.sh archdep to find such code - a lot of this (if not all) should live in arch/shared
    • remaining cases should always come with a comment telling why there is archdep stuff and why it has to be in common code
Status: shows quite a few cases, this still needs some more work/cleanup
  • TODO: review ifdefs that check SDL vs GTK3 UIs - since many resources/features are available for both now, some of these checks can likely be removed
  • TODO: the functions in src/arch/macOS-util.c should be renamed to archdep_... instead of vice_macos..., empty functions created for non macos, header renamed to archdep_... , and then called unconditionally from common code
  • TODO: Remove support for 'classic' BeOS, only support Haiku.
Change the make bindist method for Haiku into make install.

Compiler-dependent ifdefs cleanup

vice.h is the only file where ifdefs are allowed that check for a specific compiler.

  • Use ./src/findhacks.sh ccarchdep to find occurances elsewhere in the code, they should be removed in almost all cases.
    • remaining cases should always come with a comment telling why there has to be compiler specific stuff
the exception to that rule is generated code (mon_parse.c, mon_lex.c) and a few occurences in our "novte" hack
Status: Codebase seems to be clean now Gpz (talk) 16:43, 25 March 2023 (CET)

Debug and log messages cleanup

We have a lot of noise on the terminal, it might be a good idea to clean that up.

  • use ./src/findhacks.sh printf to find printf calls that need to turned into log_debug calls (log_debug adds a newline, keep that in mind to avoid lots of empty lines in the log when changing printf to log_debug!).
Status: still shows quite some work to do :)
  • decide if we really need that message in the log, perhaps it can be surrounded with #ifdef DEBUG / #endif so the messages are only shown when compiling with --enable-debug?
  • also check disabled (commented-out) printf/log_debug calls, will we ever need them again?
  • a lot of devices / modules use LOG_DEFAULT for logging, but they should use their own log_t instead (for easier filtering)

static buffers cleanup

It should be good practise to allocate and use memory dynamically, instead of using global static buffers - especially if those are considerably large. However, this is still being done all over the place.

  • use eg ./src/findarrays.sh list x64sc to show a list of all static arrays.
    • the largest 10 (or so) are always good candidates to be converted into dynamically allocated buffers.
    • besides the obvious few large ones, there are also many other buffers that could be dynamic (eg drive ROMs, which could be allocated and loaded only when actually used)


  • many things that currently live in the archdep ui.h could be moved to the generic uiapi.h


There are a bunch of resources that have different names in SDL or GTK3 UIs, or which are specific to one of them. We should name those that do the same thing the same, and - as far as possible - get rid of the specific ones (by implementing the same feature in the other UI)

  • the same applies to the related commandline options, of course
  • NOTE: CHIPxyz resources should be registered in video-resources.c and the related variables go into the video_render_config_s struct (unless they fit into the video_resources_s struct)

A bunch of resources have to be handled per video chip:

GTK3 Resources
Resource Action
VSync Rename to CHIPVSync (in trunk)
GTKFilter Rename to CHIPGLFilter (in trunk)
KeepAspectRatio, TrueAspectRatio Rework into one resource: CHIPAspectMode (0: off, 1: custom 2: true) (in trunk)
CHIPAspectRatio should be used with "custom" mode, see above (in trunk)
CHIPFlipX (in trunk) To be implemented in GUI
CHIPFlipY (in trunk) To be implemented in GUI
CHIPRotate (in trunk) To be implemented in GUI
JoyMapFile, JoyThreshold, JoyFuzz Use these when implementing the joystick mapping stuff
SDL Resources
Resource Action
VSync Rename to CHIPVSync (in trunk)
AspectRatio Rename to CHIPAspectRatio (in trunk)
SDLGLAspectMode Rename to CHIPAspectMode (in trunk)
SDLGLFlipX Rename to CHIPFlipX (in trunk)
SDLGLFlipY Rename to CHIPFlipY (in trunk)
SDLGLFilter Rename to CHIPGLFilter (in trunk)
CHIPRotate (in trunk) To be implemented in UI
SDLStatusbar Rename to CHIPShowStatusbar (in trunk)
SDLCustomWidth Rename to CHIPFullscreenCustomWidth (in trunk)
SDLCustomHeight Rename to CHIPFullscreenCustomHeight (in trunk)
  • There should be non port specific cmdline options that set Window0Height, Window0Width etc (in trunk)

Resources without UI support

Some resources exist internally but should not be used by the UI. For the time being, make a list of these here (and keep it here).

Resource Emulators Status
BoardType x64, x64sc, xscpu64, x128 set implicitly by "model" API
DTVFlashRevision x64dtv set implicitly by "model" API
CartridgeFile x64, x64sc, xscpu64, x128, xplus4, xvic, xcbm2, xcbm5x0 set implicitly by cartride API
WIC64IPAddress x64, x64sc, xscpu64, x128, xvic set implicitly by WIC64 emulation
WIC64MACAddress x64, x64sc, xscpu64, x128, xvic set implicitly by WIC64 emulation
WIC64SecToken x64, x64sc, xscpu64, x128, xvic set implicitly by WIC64 emulation
EventEndSnapshot all except VSID Probably command line only?
EventImageInclude all except VSID Probably command line only?
EventStartSnapshot all except VSID Probably command line only?
ExitScreenshotName all except VSID Command line only
ExitScreenshotName1 x128 Command line only



use cd doc && ./checkdoc.mak all ; cd ..

  • list of userport devices must be updated, once userport system was changed so the numbers are fixed
  • split vice.texi into smaller files
    • CAUTION: various scripts use vice.texi as input
  • various things that are right now hidden in "Settings and Resources" -> "Miscellaneous settings" can perhaps be moved elsewhere (in trunk)
  • Some keymap images are still missing: cbm2-symbolic-de, cbm2-symbolic-us, plus4-symbolic-de, plus4-symbolic-us (in trunk)
  • Find out how to include high resolution images in the pdf that are scaled to page width (instead of included at a fixed width) (in trunk)


  • Write a HOWTO for running Github Actions locally using act.



  • Some keymaps need to be checked: cbm2-symbolic-de(gtk/sdl), cbm2-symbolic-us(gtk/sdl), plus4-symbolic-de(gtk/sdl), plus4-symbolic-us(gtk/sdl)
    • make sure to treat KP_Separator exactly the same as KP_Decimal.


  • Ultimately rename all ROM files using a naming scheme as in "kernal-901227-01.bin". Unfortunately some files could not be identified yet:
    • C128 ROMs: kernalfi, kernalfr, kernalit, kernalno
      • when ROMs have been identified, fix the code/checksums in c128rom.h/.c
    • Printer ROMs: mps801.bin, nl10.bin
    • SCPU ROM: scpu64 (wanted is the part number of the actual SCPU ROM / what is written on the sticker)
    • PET ROMs: chargen.de

3.7 Feedback threads

even later

see Roadmap for the long term plan

After a release was made: