3.7.1

From vice-emu
Revision as of 18:34, 30 December 2022 by Gpz (talk | contribs) (→‎Cleanup)
Jump to navigation Jump to search

Things we want to do for the 3.7.1 release:

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

Joystick

The joystick system needs to be modified/extended to properly support custom button mappings.

  • Change the resources "JoyDevice{N}" to use strings with device identifiers instead of an index of the predefined and connected devices. So for example a Logitech F710 controller would be "001:006:046d:c21f" (usb-bus 1, device-no 6, vendor-Id 046d, product-Id c21f). We'll need archdep code to translate the strings into something the underlying arch driver can use, so at least handlers for Windows, MacOS, Linux and the various BSDs.
Relying on the device product/model ID won't be enough: a user can have multiple controllers of the same model.
  • Provide a joymap file per device identifier that can be loaded/edited/deleted, perhaps auto-load when JoyDevice{N} contains such an identifier.
  • Make the joymap files use (UI) action identifiers instead of the "menu paths" SDL does.
  • Make the joymap files human-readable by not doing what SDL does: for example: don't use 0-3 for input type, use ["axis", "button", "hat", "ball"], don't use 0-6 for the 'action' row, use "none" (or leave it out)", "joystick", "keyboard", "ui-action, "pot".
  • Dialogs need to written to handle all of this.

SDL UI

  • 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
  • SDL1/2 joystick mapping improvements
    • Make the 'extra joystick options' menu show what they are already mapped to
    • Add menu joystick actions mapping support to the 'extra joystick options' menu

GTK UI

  • add feature that allows to hide (only) the statusbar (use <CHIP>ShowStatusbar resource)
Added in trunk, with command line options -<CHIP>showstatusbar and +<CHIP>showstatusbar. Needs more work to properly handle the window resizing when toggling the visibility of the status bar.
  • 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.
  • add missing $VICERES comments in the UI files, so ./gtk3-resources.py list-missing keeps working

Misc

  • Fix C128 cartridge system
    • snapshots are not supported yet
    • cartridges that work in C64 _and_ C128 mode are not supported yet
    • comal80 does not work correctly
  • implement CBM2 cartridge system
  • 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 :)
  • DTV should use different flash images for PAL, NTSC, Hummer
  • The list of available palette files (.vpl) should get generated from the available files found in the data directory
  • FFMPEG: many distributions are -- or will be -- providing only the 5.x version of FFMPEG, with no fallback packages for 4.x. This means VICE's ffmpeg code needs to be updated to use 4.x AND 5.x. The current code is based on ffmpeg 3.x with some fixes for 4.x, so it'll involve some work. Alternatively we could decide to finally ditch FFMEPG and use a single lossless audio/video codec.
  • 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)

Buildsystem

  • 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 (example from Linux):
CIA-README.txt
coding-guidelines.txt
Documentation-Howto.txt
Doxygen-Howto.txt
FreeBSD-GTK3-Howto.txt
GTK3-cross-build-setup.md
GTK3-debian-frankenvice.md
GTK3-Fedora-cross-build-setup.md
iec-bus.txt
Linux-GTK3-Howto.txt
macOS-Distribution-Howto.txt
macOS-Howto.txt
macOS-Xcode-Howto.txt
NetBSD-GTK3-Howto.txt
NetBSD-howto.txt
OpenBSD-GTK3-Howto.txt
Readme-SDL2.txt
Readme-SDL.txt
Release-Howto.txt
SDL-Howto.txt
vice.texi
Windows-MinGW-GTK3-Howto.txt

Github Actions

A workflow 'Weekly Check Dist' has been added that creates tarballs configured for headless, sdl2 and gtk3, and then uses those to configure for headless, sdl2 and gtk3 and does a make && make install. This job runs every week at Monday 06:00 UTC and reports any failures on #vice-dev).

  • We need a job to check if building docs from the generated tarball works. (fixed in trunk)

A .deb is generated for headless, 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 'Make Release' workflow uses some deprecated scripts and commands:

  • The actions/checkout script should be using v3, not v2 (removes Node.js version warning) (fixed in in trunk)
  • The actions/create-release@v1 should be replaced with something else, it's marked deprecated. (fixed in trunk)
  • The ::set-output commands should be rewritten to use echo "key=value" >> $GITHUB_OUTPUT commands. (fixed 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

Cleanup

Archdep cleanup

  • there are still various bits of archdep things dangling around in common code (and some newly added *sigh*) - 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
  • 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
  • Remove support for 'classic' BeOS, only support Haiku.
Change the make bindist method for Haiku into make install.

Compiler-dependent ifdefs cleanup

  • use ./src/findhacks.sh ccarchdep to find such code, most things should be removed
    • remaining cases should always come with a comment telling why there has to be compiler specific stuff

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

Resources

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
GTKFilter Rename to CHIPGLFilter
KeepAspectRatio, TrueAspectRatio Rework into one resource: CHIPAspectMode (0: off, 1: custom 2: true) like in SDL
CHIPAspectRatio To be implemented, should be used with "custom" mode, see above
CHIPFlipX To be implemented
CHIPFlipY To be implemented
JoyMapFile, JoyThreshold, JoyFuzz Use these when implementing the joystick mapping stuff
SDL Resources
Resource Action
AspectRatio Rename to CHIPAspectRatio
SDLGLAspectMode Rename to CHIPAspectMode
SDLGLFlipX Rename to CHIPFlipX
SDLGLFlipY Rename to CHIPFlipY
SDLGLFilter Rename to CHIPGLFilter
SDLStatusbar Rename to CHIPShowStatusbar
SDLCustomWidth Rename to CHIPFullscreenCustomWidth
SDLCustomHeight Rename to CHIPFullscreenCustomHeight

Docs

  • split vice.texi into smaller files
    • CAUTION: various scripts use vice.texi as input
  • Write a HOWTO for running Github Actions locally using act.

Data

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