Todo
Prime Directive
- 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 list below.
<@_tlr> Please at least test the issue you were trying to fix before committing.
Code cleanup and streamlining
As of 3.2 we will remove a lot of the old cruft, that was dangling around in the tree for way too long, to make maintenance easier
remove all GUIs except the GTK3 and SDL UIs- remove translation support (SDL and GTK3 do not have any support for this, so this applies mostly to the command line help)
- remove compiler- and platform- specific hacks (IFDEFS) in common code
- merge archdep* files of SDL and Gtk3 into src/archdep/ (so the same code is used for GTK3 and SDL)
- remove the YUV rendering code, its broken and archaic and shouldnt be needed anywhere
- add howto into docs dir for gtk3 building (needs windows/linux/osx specific instructions)
- remove COMMON_KBD (or better things in #ifndef COMMON_KBD - formerly used by OS/2 and BeOS)
- 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
- revisit the old Feature checking pages, and clear it out eventually
- Resource_and_Cmdline_checking - Tracks and documents all Resources and Command line options
- make a configure option to enable building of x64. this should be OFF by default (and desktop binary distributions should not include it)
- update checkconfig script(s) and make sure the manual is up to date and has all resources and options for GTK3/SDL
Known Issues
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.2. 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.
Documentation
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
Manual
Technical
- many nodes are not yet linked correctly, which makes some of the exporters output garbled and/or suboptimal output (windows .hlp, unix .info).
- Workaround: use the .html or .pdf documentation, which is exported correctly.
Content
The documentation is partly outdated and/or incomplete, in particular:
- some info that was previously hidden in target specific articles on the VICE knowledge base should get merged into vice.texi - the remaining articles are here
- some descriptions of emulator formats are missing (D67, D1M, D2M, D4M...)
- descriptions of several snapshot modules are missing (Plus4, TED...)
- generate target specific documentation
- win32 documentation. (.chm format)
- amiga documentation. (.guide format)
BeOS documentation. (.html format)- MSDOS documentation. (.txt format)
- OS/2 documentation. (.inf format)
- RiscOS documentation.
- SDL documentation.
for details look at doc/Documentation-Howto.txt
Testbench
- many test programs (mostly for vic20) are not yet integrated into the automatic testing
- 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
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.
- 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
Joystick
- currently VICE interprets all buttons of a connected joystick as fire button ( https://sourceforge.net/tracker/?func=detail&aid=3292139&group_id=223021&atid=1057620 )
- 2nd button of C64GS joystick (cheetah annilihator) not implemented ( http://sourceforge.net/p/vice-emu/feature-requests/189/ )
- contact-bounce is not emulated
- TODO: make a proper test program
Joystick port devices
- Paperclip 64 dongle emulation is broken
Commandline
- some options where the available parameters depend on the machine type lack proper descriptions (-drivetype)
Monitor
- 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
- 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")
- color generation should get a partial rewrite according to new research by pepto (http://colodore.com)
see http://hitmen.c02.at/temp/palstuff/ for some further info on this topic.
Drive Emulation
- Dual disk drive 2040/3040 support (DOS1, 670 blocks free) is not working
- when using a dual drive, and no TDE, only the first drive (0:) can be used.
- G64 image support is incomplete, the speedzone definitions are completely ignored
- 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).
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
- 1541 Emulation still fails a few test programs
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 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
r25459 by Rhialto:
I enabled up to DRIVE_NUM IEEE-488 drives, rather than 2 (in True Drive Emulation mode). In some places where they are enumerated, it is 4. The drives use their full 3 bits of jumpered drive number now, rather than just 1 bit.
I have also generalised code so as to allow another dual drive. Since dual drives currently use up two device numbers, it will use 10 and 11. I'm currently simplifying the methods for checking the dualness of a drive.
When that is done, I hope to have gained enough understanding of the code to remove the horrible hack of using 2 devices for a dual drive, and remove it. It looks like it will simplify a lot of code (including removing lots of code that I changed for allowing 2 dual drives). That will have some repercussions on the GUIs, since for every drive you may need to be able to attach two image files. It also would add an extra "drive" parameter (in addition to the current "unit" parameter) to a shedload of functions, although this is a pretty mechanical change. In fact, it is the GUI change that currently holds me back...
TODO: Think of some elegant way to represent settings for 8 floppy images (for 4 dual drives), without requiring all GUIs to be updated at once.
TODO: After that, I can rework the code to make dual drives more regular and hence allow 4 of them.
Extensions
- 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
- 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
- printers don't work on the PET (or other IEEE-488 computers)
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/ )
Chips
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 only cycle too early (see this bug)
- I/O "peek" function is broken
used in: C64, C128, 1570/71
SID
- we need different tweak values (filter bias etc) for 6518 and 8580
- 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)
TED
- snapshots are broken
- FLI does not work ( https://sourceforge.net/tracker/?func=detail&aid=3205787&group_id=223021&atid=1057617 )
used in: Plus4
VDC
- Some basic features of the VDC are missing:
- Interlaced mode ( https://sourceforge.net/tracker/?func=detail&aid=2871065&group_id=223021&atid=1057617 ) - This will require a major rewrite of the output as it is currently basically 640x200(ish) vertically stretched to keep the aspect right, but in interlaced it will have to go to 640x400ish with no vertical stretching. None of the other emulated models change output modes like this and it can break some platforms.
- Registers 34/35 (horizontal blanking position) not implemented
- $d600 bit 7 STATUS flag is always set, ie. the VDC is never 'busy'. Fixing requires emulating the internal timing of the VDC..
- Differences between 8563 and 8568 are not all emulated, eg. register 38
- Snapshot doesn't include VDC
- Clock calculation for lightpen is incorrect
used in: C128
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/)
used in: VIC-20
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 )
used in: C64, CBM2
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.
used in: C128
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)
- snapshot support is missing
used in: Magic Voice, Plus4 (V364)
mc6821
- interrupts are not implemented
- implementation of C2 output modes is incomplete
used in: Formel64, Magic Formel, Dolphin-DOS 3
CS8900a
- snapshot support is missing
used in: RR-Net/TFE
RIOT
- I/O "peek" function is broken
- I/O "dump" function is missing
used in: 2040/3040/4040/1001/8050/8250
PC8477/DP8473
- I/O "dump" function is missing
used in: FD4000/FD2000
WD1770
- I/O "dump" function is missing
used in: 1570/1571/1581
Cores
spi-sdcard
- snapshot support is missing
used in: MMC64, MMC Replay
spi-eeprom
- snapshot support is missing
used in: MMC Replay
midi
- snapshot support is missing
used in: C64, VIC-20
Machines
vsid
x64 / x64sc
general
- 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:
- testprogs/VICII/spritesteal (ntscold)
- testprogs/VICII/spriteenable
- missing open border on top of testprogs/VICII/sprite0move
- testprogs/VICII/split-tests/modesplit
- switching VICII border mode resets x64 ( https://sourceforge.net/tracker/?func=detail&aid=3004255&group_id=223021&atid=1057620 )
Workaround in all cases: use x64sc :)
Cartridge System
note: the detailed todo list/status is here.
- some carts have no snapshot support yet (still broken: MMC64, Magic Voice, MMC Replay, MIDI, 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.
- 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
- RR-Net MK3: to get the ethernet functionality it must be explicitly enabled too, and will appear as a "clockport" internally (which is wrong)
- the (very strange, and incompatible with most cartridges) passthrough port of the SFX sound expander is not emulated
- 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)
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 c128 specific expansion port handling/mapping is missing in the c64/c128 cartridge system (MMC Replay, FastLoad128, MACH128, other?)
- the relative speed and details like cycle-stealing of the z80 is inaccurate ( https://sourceforge.net/tracker/?func=detail&aid=3476760&group_id=223021&atid=1057617 ) TODO: cycle accurate test programs
- CPU history (chist) implementation is incomplete
xvic
- programs that do not work for unknown reason:
- the naming of the VIAs in the sourcecode is mixed up, it should be VIA1 for the one at 9110 and VIA2 for the one at 9120
x64dtv
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
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 )
- 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)
- emulation of the V364 speech chip is incomplete (see Todo#t6721a)
- CPU history (chist) implementation is incomplete
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.
- break- and watchpoints in zeropage are broken. this is because of the old cpu core, and can likely not be fixed without migrating to the new one.
- banking in the monitor is broken
- breakpoints are broken
- when a breakpoint is hit, the monitor disassembles from the wrong bank
- breakpoints will only hit in the bank which is active in the monitor (!)
- when running the burn-in diagnostic tests, the CIA is reported as bad ( https://sourceforge.net/tracker/?func=detail&aid=3102493&group_id=223021&atid=1057617 )
- note: run like this: xcbm2 -model 610 -ntsc -drive8type 8050 -virtualdev +truedrive -8 cbm2-burnin.d80
- CPU history (chist) implementation is incomplete
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.
- 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
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.
- 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
- CPU history (chist) implementation is incomplete
Ports
- 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
- make datasette interface nicer (hotkeys) ( https://sourceforge.net/tracker/index.php?func=detail&aid=2525175&group_id=223021&atid=1057620 )
- allow browsing of archives (zip etc) ( https://sourceforge.net/tracker/index.php?func=detail&aid=2942868&group_id=223021&atid=1057620 )
- add dual monitor support (for x128) ( https://sourceforge.net/tracker/?func=detail&aid=2780684&group_id=223021&atid=1057620 )
- add realtime speed adjustment ui / hotkeys ( https://sourceforge.net/tracker/?func=detail&aid=2904137&group_id=223021&atid=1057620 )
- Monitor Improvements: ( also see MonitorUI )
- improve vsync / add option to sync to actual output framerate ( https://sourceforge.net/tracker/?func=detail&aid=3009846&group_id=223021&atid=1057620 )
Windows
- there seems to be a problem with ParSID ( https://sourceforge.net/tracker/?func=detail&aid=2981666&group_id=223021&atid=1057617 )
Linux
- ADD: support for rtkit ( https://sourceforge.net/tracker/?func=detail&aid=3088679&group_id=223021&atid=1057619 )
*BSD
- serial device hangs on open() in NetBSD 5.0.2 ( https://sourceforge.net/tracker/?func=detail&aid=3043294&group_id=223021&atid=1057617 )
BeOS
- Sound problems on slower machines (P100) with a non-official driver for sb16.
- Compiling with `--enable-ethernet` fails due to absence of rawnetarch.{c,h} missing --Compyx 2016-10-26 (tested on Haiku)
Archdep cleanup
- merge GTK3 and SDL archdep code
- remove use of GLib code so the Gtk3 archdep code can be merged with SDL archdep (which doesn't use GLib for obvious reasons)
- make sure VICEDIR, DOCDIR, LIBDIR etc (add here) are NOT used in common code (ONLY archdep)
- create functions to retrieve the respective pathes instead
- make sure common code uses these, ie no magic fiddling with archdep_boot_path() per platform (except in archdep)
- create functions to retrieve the respective pathes instead
- make sure common code ONLY includes archdep.h, not archapi.h
GTK3 UI
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 or OSX 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.
Current development state
- All emulators work, though some UI code still needs to be written or updated to properly support all machines
- Default renderer is OpenGL 3.2 based (GTK 3.16 required) and does full HW scaling. Fallback renderer is Cairo-based, which will scale in software if necessary but slows down noticably when it does.
- All UI code is hand-written, we tried using Glade/GtkBuilder, but the amount of machines and extra hardware VICE supports is way too much what a static UI can handle
- Though many UI elements look okay, some don't. This isn't lazyness but rather to avoid tweaking the layout only to discover later that it still needs to be changed. So any layout/style issues will eventually get fixed. So don't complain about it, unless there are glaring bugs (such as dialogs that are too large to fit on a decent screen)
Unix
./configure --enable-native-gtk3ui
- starts up, video and audio is working
- keyboard is working
- joysticks are working
- mouse is working
Windows
./configure --enable-native-gtk3ui
- starts up, video is working
- keyboard is working
- sound works
- TODO: make joystick input work [3]
- TODO: some stuff is commented out in joy-win32.c and joy-win32-dinput-handle.c
- TODO: make mouse input work
MacOS
- untested
./configure --enable-native-gtk3ui
- TODO: make it compile and start up
- TODO: make video and audio work
- TODO: make keyboard work
- TODO: make joystick input work
- TODO: make mouse input work
BUGS/TODO
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.
- Mouse-grab. The UI items is there, but the actual mouse code isn't implemented yet (2017-11-08)
- Works fine on Linux, tested it with a hacked Amica Paint and an emulated 1351 mouse (compyx, 2018-05-30)
- The Tape Devices widget needs to check if resources can be set to avoid segfaults (2017-11-14)
- make sure both hard- and software rendering match whats described in Scaling_cleanup - if so, the page can be cleaned out
- Forcing display size to 1x/2x/3x/4x
- respect "true aspect ratio" option (currently always off)
- respect "keep aspect ratio" option (currently always on)
- save/restore window(s) size(s) and position(s) from vice.ini
- hotkeys - preferably user configureable (like SDL)
- reasonable defaults are needed, eg to go to monitor :)
- statusbar (see uistatusbar.c for some comments) (Mostly done, needs a bit of love still)
mixer and CRT-emu control
like the existing widget with the sliders in the gtk2 port, put split into two separate widgets of which one only has the audio related (mixer) and the other the video related (CRT) stuff- Both CRT and mixer controls have been added, with checkboxes in the statusbar widget to enable/disable them. Still requires a bit of refactoring to probably manage fullscreen when using the dual-display x128 emulator. (compyx, 2018-05-30)
- finish ROM settings management
- NOTE: The Unix port uses the XDG specification for the vice configuration files, so now `vicerc` is located in `$HOME/.config/vice`, not `$HOME/.vice`. Right now the 'autostart-${emu}.d64' files are also stored there, which is not quite correct.
- the logo in about dialog should be embedded using GResource
Monitor
- implement the monitor window with a text-widget and hook up the console input/output interface to it
for some info on the monitor ui see: MonitorUI.
OpenGL
- The OpenGL renderer should transform itself into a Cairo renderer if the system doesn't support OpenGL. (2017-11-15)
- Do-not-scale option. Important for Cairo renderer, possible for OpenGL. (2017-11-15)
- Stretch goal: the OpenGL renderer should fall back to legacy mode (the SDL renderer) if GTK3 itself has, instead of failing. (2017-11-15)
Settings
The list of covered resources is here
- xpet: "model settings" - more glue logic is needed (2017-11-21)
- On Windows (and perhaps OSX) the MIDI widget should show a combobox with supported drivers (2017-11-14)
- ROM settings are missing (partially supported, needs work (2018-01-31)
- using scroll wheel on tree view should scroll up/down
- Works for me with Debian 9.3 64-bit with Xorg and the MATE desktop (compyx, 2018-05-25)
- Monitor Settings -> "KeepMonitorOpen" resource does not exist (should probably be created in the yet to do monitor UI code)
- "advance frame" should be inactive when emulation is not paused
C64 Cartridge settings
- MMCR - cartridge image and EEPROM image is mixed up. only the filename selection is related to the EEPROM, the other stuff is related to the cartridge image/flash ROM. also "make eeprom read/write" checkbox is missing. (take GMOD2 as an example, its correct)
- check I/O extensions for proper behaviour:
Memory Expansion Hack- GEO-RAM
- RAM Expansion Module
- BUG: can be enabled but not disabled after that
- RamCart
- Double Quick Brown Box
- BUG: can be enabled but not disabled after that
- Expert Cartridge
- ISEPIC
- EasyFlash
- GMod2
- IDE64
- MMC64
- MMC Replay
- Retro Replay
Super Snapshot V5- Ethernet Cartridge
- RR-Net Mk3
IEEE-488 interfaceMagic Voice
Menus
in the HELP menu the "browse documentation" item is non functional. we either need a portable solution, or use archdep code here
Dialogs
- "File->Netplay" needs some testing and refactoring. perhaps move it into settings?
- 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 (compyx, 2018-02-09)
- Many open/save dialogs could be improved by remembering the last used directory. Already done are 'smart-attach', 'cart-attach' and 'disk-attach'. (compyx, 2018-05-12)
Media recording
- Implement audio recording and video recording (2017-12-17) -- Mostly implemented, what is missing is a 'stop recording' button on the status bar (compyx 2017-12-23)
- MacOS: Add QuickTime recording settings widget, like the FFMPEG recording settings widget (I can't do this, someone with MacOS/QuickTime knowledge will have implement that compyx 2017-12-17)
Upstream bugs
- Some combobox contents appear to have 'empty' entries and sometimes the colors of the items change (upstream Gtk3 bug) (2017-11-08)
Feature requests / Stretch goals
- Add some way to show the keycodes of the keys being pressed (perhaps in the status bar?) - that would make it a lot easier to fix/create keymaps
- Add preview of the RAM init pattern (2017-11-08)
- Add 'revert changes' to dialogs/widgets to revert resources to their state when the widget/dialog was activated. (This is different from restoring to factory defaults) (2017-11-16)
- Add a 'smart' cartridge attach dialog: show "preview" of .crt image if selected in the dialog, show only valid cartridge types when selecting a cart image.
- Add a 'detach all drive images' item
VSID
- Implement a playlist for VSID
- Add HVSC song length database (SLDB) support to VSID (
both .txt and.md5 file format) - Add HVSC sid tune information list (STIL) support to VSID
- Add HVSC BUGlist support to VSID
SDL UI
BUGS
ALT-D (toggle fullscreen) sends a D to the emulator- FFmpeg media recording behaves unexpected when entering the menu [4]
x64 uses the japanese kernal font when japanese model is selected- switching to VDC in x128 crashes on some setups [5]
- in x128 hammering runstop/restore would crash the emulator in sdl_canvas_create, the SDL2 version of this code is broken [6]
- add icons to windows/.exe
make whole screen black when entering uiwhen adjusting video/crt params, update the colors in realtime and show some color testpattern
Menus
- 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
- at a lot of places "inactive" (as in "cant be selected") menu items are missing the "N/A" on the right
Cartridge>MMC64>Enable MMC64 can not be used unless a MMC64 ROM has been selected, it should be made inactive if notyou can enable it without an image, and then flash the bios inside the emulation
- "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
add pageup/down home/end keys for menu navigation- A better way of showing filenames (maybe using contraction) needs to be made
File Selector
hide "dot files" in the file selectors (on *nix)[7]- add filtering in file requester
there is no interface for browsing files inside (d64..) images
Virtual Keyboard
- shift/cbm/ctrl should be "sticky" (right now shifted keys are entered using backspace/cancel - which is odd)
VSID
- Implement a playlist for VSID
- Add HVSC song length database (SLDB) support to VSID (
both .txt and.md5 file format) - Add HVSC sid tune information list (STIL) support to VSID
- Add HVSC BUGlist support to VSID
OSX
- Sound starts to distort heavily after few minutes [8]
- Sounds terrible unless sampling is lowered from default 44Khz to 22Khz [9]
- Emulator in default config makes no sound unless the OutputMode is changed to Stereo. [10]
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) (https://sourceforge.net/p/opencbm/)
- 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.
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
Rewrites
- 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)
- rewrite video chip modules to use:
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
general
- native screenshot support. (in progress)
- script language integration. (lua or python perhaps)
- Some more Kernal patches, for instance for changing colors and patching the reset routine to make it faster (maybe configurable).
- proper support for paddles (https://sourceforge.net/tracker/?func=detail&aid=2686763&group_id=223021&atid=1057620)
- integrate a rs232->telnet codepath (https://sourceforge.net/tracker/?func=detail&aid=3033061&group_id=223021&atid=1057620)
- option to autostart in already running instance ( https://sourceforge.net/tracker/?func=detail&aid=3201905&group_id=223021&atid=1057620 )
- option to save attached (disk/tape/cart) images at shutdown, restore at next run ( https://sourceforge.net/tracker/?func=detail&aid=3302938&group_id=223021&atid=1057620 )
- use second joystick button as auto fire ( https://sourceforge.net/tracker/index.php?func=detail&aid=2459184&group_id=223021&atid=1057620 )
History Recording
- (optionally) make quicksave filenames depend on image filename ( https://sourceforge.net/tracker/?func=detail&aid=3295768&group_id=223021&atid=1057620 )
- find a way to not include the actual game binary in a history file ( https://sourceforge.net/tracker/?func=detail&aid=3295768&group_id=223021&atid=1057620 )
Keyboard
Tape
- support for DC2N .dmp files (cassette files) ( https://sourceforge.net/tracker/?func=detail&aid=3203248&group_id=223021&atid=1057620 )
Monitor
- (optionally) display all executed commands when in trace mode ( https://sourceforge.net/tracker/?func=detail&aid=3356800&group_id=223021&atid=1057620 )
- improve handling of memory ranges ( https://sourceforge.net/tracker/?func=detail&aid=3161941&group_id=223021&atid=1057620 )
Sound System
- sound sync needs a rewrite, its too complex and fails a lot
Video System
- implement a generic framerate converter (screen blending) ( https://sourceforge.net/tracker/?func=detail&aid=2792693&group_id=223021&atid=1057620 )
- add option to rotate / flip / mirror the output ( https://sourceforge.net/tracker/?func=detail&aid=3291057&group_id=223021&atid=1057620 )
- add an option in the CRT emulator / Palette generator to simulate b/w,amber,green monitors ( https://sourceforge.net/tracker/index.php?func=detail&aid=3052248&group_id=223021&atid=1057620 )
- some kind of generic interface to handle video input is required to handle scanner/digitizer type of carts
Hardware emulation
SID
- add support for Catweasel MK4 style playback ( https://sourceforge.net/tracker/?func=detail&aid=2962481&group_id=223021&atid=1057620 )
x64(sc)
- Cartridges
- IDE64 improvements
- Clockport improvements
- Community Information Locator Commodore 64/128 addon cartridge ([17])
- RAM Floppy (REX 9680) support
- Daisy Sound sampler audio input support. ([18])
- PS64 speech cartridge support. ([19])
- Voice Messenger speech cartridge support. ([20])
- ramlink support. ([21] [22])
- ramdrive support. ([23])
- turbo master cartridge support (4Mhz 65C02). ([24] [25])
- turbo process cartridge support (4Mhz 658156). ([26] [27])
- flash-8 cartridge support (8Mhz 65816). ([28])
- SCPU cartridge support (20Mhz 65816). (in progress, has lead to a new emulator called xscpu64) ([29] [30]) (https://sourceforge.net/tracker/?func=detail&aid=2030692&group_id=223021&atid=1057620)
- The Final Chesscard (65c02) ([31])
- 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. ([32])
- BI-80 cartridge support. ([33])
- Buscard II IEEE488/printer-port cartridge support. ([34])
- "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 ([35])
- 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. ([36])
- 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)
- SoftPROM cartridge ([35])
- Userport
- CBM1660 (userport) modem300 support. ([37])
- CBM1670 (userport) modem1200 support. ([38])
- FB-RS232 (userport) support. ([39])
- c64 p64 midi interface: ([40])
- Scanntronik handyscanner (userport) support. ([41])
- Video Byte II video digitizer (userport) support. ([42]) ([43])
- Computera Eyes video digitizer (userport) support. ([44] [45])
- Userport RocketDrive support. ([46])
- CIA-IDE-HD support. ([47])
- Aprotek universal rs232 adapter support. ([48])
- Comet64 support. ([49])
- L. Pantarottos adapter support. ([50])
- Joystick Port
- c64/c128 pc-joystick support. ([51])
- datel 3-button mouse support. ([52])
- animation station support. ([53])
- Power-pad support.
- super sketch support. ([54])
- add support for switching the emulated 1351 mouse to joystick mode by doing a hard reset while pressing the right mouse button ( https://sourceforge.net/tracker/?func=detail&aid=2631893&group_id=223021&atid=1057620 )
- add support for 8player joystick adapter "inception" ([55])
- Tape Port
- Video output.
- c64 LCD64 screen support. ([56])
x128
- c128 plus60k support.
- c128 plus256k support.
- c128 256K memory expansion hack support.
xvic
- VIC20 RTC cartridge support. ([57])
- vic20 iec2ata support. ([58])
- pointless to emulate, as it is a simple iec device, very similar to what you get when using virtual drive on the filesystem. Gpz 05:08, 15 August 2010 (UTC)
- vic20 ethernet support. ([59])
- support for modified vic20 ( https://sourceforge.net/tracker/?func=detail&aid=3315683&group_id=223021&atid=1057620 )
- .crt like cartridge format (.vrt), perhaps take it from vice-minus ( http://viceminus.git.sourceforge.net/git/gitweb.cgi?p=viceminus/viceminus;a=commit;h=29c32f2ea2d299cb40228030c355625e800a00ca )
- add Cartridge attach heuristic for image pairs
xplus4
- add support for "speedy" freezer cartridge
xpet
- PET ROM-socket RTC support. ([60])
- 8296 pet hardware ram lines connected to userport support.
- 8296 RAMdisk 2008 support. ([61])
- 8296 pet switchable 4 screens output support.
- pet IEEE488 -> IDE/RS232 support. ([62])
- High-Res
- MTU K-1002-2 DAC sound system support. ([69])
xcbm2
- cbm2 z80, better nec v20, support.
- cbm2 8088 support. ([70])
- B700 HiRes Graphics Board support. ([71])
Drives
- (optionally) automatically enable warp mode when drives are being accessed. ( https://sourceforge.net/tracker/?func=detail&aid=2028999&group_id=223021&atid=1057620 )
- add support for dual disk drives
- IEC
- CMD harddrive support. ([72]) (https://sourceforge.net/tracker/?func=detail&aid=2786810&group_id=223021&atid=1057620)
- IEC2IEEE/RS232C adapter support. ([73])
- sd2iec / uIEC support ( https://sourceforge.net/tracker/?func=detail&aid=3287595&group_id=223021&atid=1057620 )
- somewhat pointless, since this would be very much what you get from using the virtual filesystem drive Gpz 07:02, 11 July 2011 (UTC)
- IEEE
Printers
- (optionally) make printer output pixel perfect ( https://sourceforge.net/tracker/?func=detail&aid=2476279&group_id=223021&atid=1057620 )
- IEC
- DPS1101 support.
- MPS801 support.
- MPS802/CBM1526 support.
- MPS1000 support.
- MPS1250 support.
- Fidelity Impact Printer support. ([82])
- IEEE
- MPS1361 support.
- CBM4022 support.
- CBM8023 support.
- CBM8024 support.
Misc
- add/implement C65 emulator ( https://sourceforge.net/tracker/?func=detail&aid=2472096&group_id=223021&atid=1057620 )