intvsteve / vintage Goto Github PK
View Code? Open in Web Editor NEWVarious Intellivision-related projects, including the LTO Flash! User Interface application.
License: GNU General Public License v2.0
Various Intellivision-related projects, including the LTO Flash! User Interface application.
License: GNU General Public License v2.0
Found this text in an error message during testing device backup:
To avoid this problem, ensure the remains off for the duration of the backup operation. Also, do not unplug your LTO Flash! during the backup.
The word 'console' seems to be missing. (Or... Master Component?)
The Title property does not behave as one may expect regarding a normal property setter. It has odd "rules".
These should either be justified and documented, or made less surprising.
Preventing setting a ROM title to null or empty makes sense - though perhaps throwing rather than ignoring would be better. The other behaviors (see the source) are โฆ odd and sadly unexplained. Perhaps the now-inaccessible TFS database had a clue...
N/A
N/A
Comparing two ProgramDescription objects without corresponding ROMs whose contents are different should result in a 'false' from operator ==.
This also affects Equals(object) overload.
Additionally GetHashCode() overload is weak, as it is only based on the selected CRC of the description.
operator == returns true
Create two ProgramDescription objects with different Information within them, different CrcData, but null
ROM arguments passed to the constructor, and then compare them.
N/A
When adding ROMs, if any of the "system" ROMs for jzintv (or I suppose other emulators) are not already configured, it would be nifty to auto-configure the paths to them if they are discovered during the "scraping" process.
This may necessitate providing some kind of hook to plugins to be informed of the ROM discovery process.
Not sure if there's a bug in the display, or if the data is not defined.
Have not checked on Mac.
Windows 10
Development version (and likely all previous versions)
Device name and usage counts above the menu layout should match what's actually on the newly connected device.
Information is stuck to the very first device that was connected.
Connect LTO Flash! device A, then connect LTO Flash! device B and switch to it.
N/A
All (but initially on Mac)
Any that includes jzintv.
N/A - feature request.
At issue here is that the behavior of jzintv may be unpredictable w.r.t. things like recording screen shots, movies, and sounds. Need to double-check sources to see if jzintv uses current working directory (which VINTage may already be setting), or if these always go relative to the executable.
jzintv runs in place
Run the included jzintv
N/A
The UI does not offer a convenient way to manage save data forks for items on LTO Flash! As a user interface feature, it would be similar to how manuals are managed.
The "file name" is totally arbitrary, though if memory serves, there is code that suggests .jlp as a file extension.
For ROMs that can run in jzintv that support JLP flash storage, this could be pretty handy. You could save and restore those files.
It gets a little trickier when dealing with the cartridge. The UI would need to have a way to clearly indicate a few things:
An additional challenge is present during program development. Specifically, there is no way to know, short of the game developer providing the info, whether saved data will even work from one version of the ROM to the next. If v2 -> v3 of a ROM required a breaking change to the save format, a well-intentioned program could do several things, such as "mutate" the saved data so nothing is lost (ideally), or simply warn the user and offer an option to delete the data or not use the save state, et. al.
Need to support same ROM list sorting features as other platforms.
Need to identify GPLv2-compatible, cross-platform libraries to use for this task.
There is some support for this directly in .NET - especially 4.5 and later. It may mean that the feature will be incompatible with the Windows xp release.
These icons (discovered so far) need some tweaking to look better in GTK (and WPF, too). They should have their edges trimmed to have transparency so they look good when in a menu and the menu item is highlighted, for example. Noticed on the small versions (16x16), but check the large (32x32) as well.
Verified in Windows Vista and Windows 7.
Workaround: Launch as Administrator
Stupid WMI query to check for version of FTDI driver is crashing with Access Denied. sigh
Luckily, the code already has a backup implementation that will work in this scenario (based on one sample point). Just need to handle the exception.
... like ... "Already connected" or some explanation as to why an item in the list is disabled.
Sometimes you can get the dialog and it shows, in Windows, "COM3" and 'COM4' for example, both disabled. ... or eventually disabled.
It may be that COM3 is disabled because the UI is already connected to LTO Flash! on COM3, and that COM4 is a port that is known to be "Not a valid LTO Flash! device".
All
N/A
Don't use ObservableCollection in the Model.
Code uses ObservableCollection in the Model.
It's in the code.
N/A
System.InvalidOperationException: This Visual is not connected to a PresentationSource.
at System.Windows.Media.Visual.PointToScreen(Point point)
at Microsoft.Windows.Controls.Ribbon.RibbonMenuButton.UpdateDropDownPosition(Object arg)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
macOS 10.10.5
1.0.0.2910
Keyboard hack file is used
It is not
Try a custom keyboard hackfile.
Add --kbdhackfile argument manually.
For users who have the different versions of EXEC -- Original, Intellivision II, Sears, and TutorVision, it would be nice to have a quick and simple way to select the console variation to run rather than manually configuring EXEC ROM to use.
Similarly, it would be convenient for GROM - standard vs. TutorVision.
User reports this crash.
Windows 10
n/a (development version)
Menu layout shows device name.
Menu layout shows device owner.
Connect LTO Flash! and observe text after Menu Layout: block.
N/A
Currently there is no way to rearrange items in the GTK menu editor. We kinda need that.
Which formats should we support? Common ones:
Generic info:
https://en.wikipedia.org/wiki/List_of_archive_formats
macOS - all versions
N/A
rom_merge is executable
rom_merge does not have execute permissions
Sync from GitHub
N/A
User 'Utopia' from The Land Down Under has a request for a useful feature:
The ability to see the list of ROMs as used in menu layout in a simple text file.
TBD: Exactly what is contained in the file. Initial idea:
Game Name | ROM Filename | ROM location on disk | Menu location paths
Formatting this could be a challenge.
N/A
N/A
Something better than -1
Get year of -1 for some ROMs
N/A
N/A
For the general command management, the Windows implementation of CommandProviderHelpers needs to add keyboard shortcuts (command.AddInputBinding). Right now, these are all being done via direct code in the main window XAML.
Any
1.0.0.2918
Ms. Pac-Man and Ms. Night Stalker should both play correctly from cartridge.
They don't.
Put files with '.' in the name, like Ms. Pac-Man.bin and Ms. Night Stalker.bin, in to the same directory on disk, then add both to your menu, update cart, and try to play.
N/A
Title describes it. If you change a manual on disk, and then preview changes that would be made, nothing shows up.
Testing filtering device connections based on USB VID and PID. Noticed that when "switching" devices, the prompt appeared while in the background (behind the dialog prompt) the validation progress bar had appeared.
In this case, had plugged in a generic USB<->Serial stick, and the validation code was waiting for the beacon from the hardware (which would never come).
Thing is... when explicitly choosing to switch connections, the prompt to "connect to detected device" should NOT appear.
Minor issue, but it can be annoying. As I'm down to one functional unit for the time being, testing with multiple real devices is not possible.
Ubuntu 16.04.2
N/A
Device needing firmware update prompts when connected, as that's what the user settings dictate.
The upgrade firmware prompt does not occur if the 'Reconcile device menu with local menu setting is on.
Implement support drag/drop into the ROM list.
The severity of the problem can depend greatly on the user's menu layout and computer. But generally, user edits of the menu while the cartridge is attached can be horrifically slow - sometimes a minute or more simply to move an item or change its color!
The root causes of the performance drag are detailed below. The code paths have existed at least since 2015, though, and likely slowly worsened over time with increased paranoid checks for ROM changes. Frustratingly, this never arose during beta, and the times I noticed it during development, I discounted as 'running w/ debugger attached always messes everything up.' sigh
It may be extremely helpful to add support for "standard" ROM file names so scraping tools that operate on file names can be used, e.g. The Games DB.net. Need to see how that would work for Intellivision.
This happens either when choosing the "Remove all" or selecting all and choosing delete form context menu.
Same happens if you choose to Empty the ROM list from the menu.
Unsure if this is OS-specific.
It's intended to eventually support validating all the different supported ProgramFileKinds. At this time, only ROM image file is checked and indirectly the CFG file path for BIN format ROMs.
Unclear how necessary this is to finish out.
In April, 2017 jzIntv was updated to support TEN joystick configurations. The configuration UI supports four (the previous standard). Should the UI be extended to support all 10?
Start the UI.
Connect LTO Flash!
Crash!
Call stack provided by user:
2017-09-29-21-45-10-118: System.NullReferenceException: Object reference not set to an instance of an object
at INTV.Shared.View.ProgressIndicatorController.AwakeFromNib () <0x144a17e8 + 0x001a5> in :0
at (wrapper native-to-managed) System.Object:[INTV.Shared.View.ProgressIndicatorController:Void AwakeFromNib()] (MonoMac.Foundation.NSObject,MonoMac.ObjCRuntime.Selector)
at (wrapper managed-to-native) MonoMac.ObjCRuntime.Messaging:IntPtr_objc_msgSendSuper (intptr,intptr)
at MonoMac.AppKit.NSViewController.get_View () <0xf7b1538 + 0x0007b> in :0
at INTV.Shared.View.ProgressIndicatorController.get_View () <0x144a1428 + 0x00013> in :0
at Locutus.View.MainWindowController.FinishInitialization (MonoMac.Foundation.NSObject data) <0x144a12d8 + 0x0008b> in :0
at (wrapper dynamic-method) System.Object:[Locutus.View.MainWindowController:Void FinishInitialization(MonoMac.Foundation.NSObject)] (MonoMac.Foundation.NSObject,MonoMac.ObjCRuntime.Selector,MonoMac.Foundation.NSObject)
at (wrapper native-to-managed) System.Object:[Locutus.View.MainWindowController:Void FinishInitialization(MonoMac.Foundation.NSObject)] (MonoMac.Foundation.NSObject,MonoMac.ObjCRuntime.Selector,MonoMac.Foundation.NSObject)
at (wrapper managed-to-native) MonoMac.ObjCRuntime.Messaging:bool_objc_msgSendSuper_IntPtr_IntPtr (intptr,intptr,intptr,intptr)
at MonoMac.AppKit.NSResponder.TryToPerformwith (MonoMac.ObjCRuntime.Selector anAction, MonoMac.Foundation.NSObject anObject) <0x144a10e8 + 0x000bf> in :0
at INTV.Shared.ViewModel.ProgressIndicatorViewModel.InitializeProgressIndicatorIfNecessary (Boolean ready) <0x144a1008 + 0x000ce> in :0
at INTV.Shared.ViewModel.ProgressIndicatorViewModel.get_ApplicationProgressIndicator () <0x144a0f48 + 0x00047> in :0
at INTV.Shared.Utility.AsyncTaskWithProgress..ctor (System.String taskName, Boolean allowsCancel, Boolean isIndeterminate, Boolean showsProgress, Double progressDisplayDelay) <0x144a0bc8 + 0x00023> in :0
at INTV.Shared.Utility.AsyncTaskWithProgress..ctor (System.String taskName, Boolean allowsCancel, Boolean isIndeterminate, Double progressDisplayDelay) <0x144a0b58 + 0x00037> in :0
at INTV.LtoFlash.ViewModel.CheckForDevicesTaskData.Start () <0x144a09e0 + 0x00057> in :0
at INTV.LtoFlash.Commands.DeviceCommandGroup.OnSearchForDevices (System.Object parameter) <0x144a7d90 + 0x0016f> in :0
at INTV.Core.ComponentModel.RelayCommandBase.OnExecute (System.Object parameter) <0x144a3730 + 0x00028> in :0
at INTV.Shared.ComponentModel.RelayCommand.Execute (System.Object parameter) <0x144a3708 + 0x00017> in :0
at INTV.Shared.Commands.CommandGroup.HandleCommandActivated (System.Object sender, System.EventArgs e) <0x144a7960 + 0x00076> in :0
at MonoMac.AppKit.ActionDispatcher.OnActivated (MonoMac.Foundation.NSObject sender) <0x144a7928 + 0x00029> in :0
at (wrapper dynamic-method) System.Object:[MonoMac.AppKit.ActionDispatcher:Void OnActivated(MonoMac.Foundation.NSObject)] (MonoMac.Foundation.NSObject,MonoMac.ObjCRuntime.Selector,MonoMac.Foundation.NSObject)
at (wrapper native-to-managed) System.Object:[MonoMac.AppKit.ActionDispatcher:Void OnActivated(MonoMac.Foundation.NSObject)] (MonoMac.Foundation.NSObject,MonoMac.ObjCRuntime.Selector,MonoMac.Foundation.NSObject)
at (wrapper managed-to-native) MonoMac.ObjCRuntime.Messaging:void_objc_msgSendSuper_IntPtr (intptr,intptr,intptr)
at MonoMac.AppKit.NSApplication.SendEvent (MonoMac.AppKit.NSEvent theEvent) <0xf7bb348 + 0x00073> in :0
at INTV.Shared.Utility.SingleInstanceApplication.SendEvent (MonoMac.AppKit.NSEvent theEvent) <0xf7bb218 + 0x0008f> in :0
at (wrapper dynamic-method) System.Object:[INTV.Shared.Utility.SingleInstanceApplication:Void SendEvent(MonoMac.AppKit.NSEvent)] (MonoMac.Foundation.NSObject,MonoMac.ObjCRuntime.Selector,MonoMac.AppKit.NSEvent)
at (wrapper native-to-managed) System.Object:[INTV.Shared.Utility.SingleInstanceApplication:Void SendEvent(MonoMac.AppKit.NSEvent)] (MonoMac.Foundation.NSObject,MonoMac.ObjCRuntime.Selector,MonoMac.AppKit.NSEvent)
at (wrapper managed-to-native) MonoMac.AppKit.NSApplication:NSApplicationMain (int,string[])
at MonoMac.AppKit.NSApplication.Main (System.String[] args) <0x8d27c78 + 0x0007b> in :0
at INTV.Shared.Utility.SingleInstanceApplication.RunApplication[T] (System.String uniqueInstance, System.Configuration.ApplicationSettingsBase settings, System.String[] args, System.String splashScreenImage) <0x23f5508 + 0x00287> in :0
at Locutus.View.MainClass.Main (System.String[] args) <0x23f2b98 + 0x000b7> in :0
Only saw once - tricky to reproduce. Log attached.
macOS 10.8.5
N/A
No leak.
An occasional leak.
Unclear. Noticed it when holding down Cmd+R to refresh ROMs list.
objc[82482]: Object 0xacc76da8 of class __NSCFBoolean autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
It's possible that this is due to code running on a worker thread that has not set up a n autorelease pool.
The current beta build has a difficult-to-reproduce bug (to be logged later) which results in a "file not found" type of error when adding ROMs to the menu layout. The issues that need fixing:
Previously had configured LTO Flash! UI to communicate with Intellicart via a USB<->Serial stick. Later, removed the device. The UI remembers the configuration, but:
System.IO.IOException: No such file or directory
at System.IO.Ports.SerialPortStream.ThrowIOException () [0x00012] in /private/tmp/source-mono-mac-4.0.0-branch/bockbuild-mono-4.0.0-branch/profiles/mono-mac-xamarin/build-root/mono-4.0.0/mcs/class/System/System.IO.Ports/SerialPortStream.cs:317
at System.IO.Ports.SerialPortStream..ctor (System.String portName, Int32 baudRate, Int32 dataBits, Parity parity, StopBits stopBits, Boolean dtrEnable, Boolean rtsEnable, Handshake handshake, Int32 readTimeout, Int32 writeTimeout, Int32 readBufferSize, Int32 writeBufferSize) [0x0001e] in /private/tmp/source-mono-mac-4.0.0-branch/bockbuild-mono-4.0.0-branch/profiles/mono-mac-xamarin/build-root/mono-4.0.0/mcs/class/System/System.IO.Ports/SerialPortStream.cs:35
at (wrapper remoting-invoke-with-check) System.IO.Ports.SerialPortStream:.ctor (string,int,int,System.IO.Ports.Parity,System.IO.Ports.StopBits,bool,bool,System.IO.Ports.Handshake,int,int,int,int)
at System.IO.Ports.SerialPort.Open () [0x00078] in /private/tmp/source-mono-mac-4.0.0-branch/bockbuild-mono-4.0.0-branch/profiles/mono-mac-xamarin/build-root/mono-4.0.0/mcs/class/System/System.IO.Ports/SerialPort.cs:579
at (wrapper remoting-invoke-with-check) System.IO.Ports.SerialPort:Open ()
at INTV.Shared.Model.Device.SerialPortConnection.OpenPort () [0x00008] in /Users/steveno/lui_src/lui_src/INTV.Shared/Model/Device/SerialPortConnection.Mac.cs:79
at INTV.Shared.Model.Device.SerialPortConnection.Open () [0x0000d] in /Users/steveno/lui_src/lui_src/INTV.Shared/Model/Device/SerialPortConnection.cs:307
at INTV.Intellicart.Model.DeviceHelpers.DownloadRom (INTV.Shared.Utility.AsyncTaskData taskData) [0x00121] in /Users/steveno/lui_src/lui_src/INTV.Intellicart/Model/DeviceHelpers.cs:85
at INTV.Shared.Utility.AsyncTaskWithProgress.AsyncTaskDoWork (System.Object sender, System.ComponentModel.DoWorkEventArgs e) [0x00019] in /Users/steveno/lui_src/lui_src/INTV.Shared/Utility/AsyncTaskWithProgress.cs:258
at System.ComponentModel.BackgroundWorker.OnDoWork (System.ComponentModel.DoWorkEventArgs e) [0x0001c] in /private/tmp/source-mono-mac-4.0.0-branch/bockbuild-mono-4.0.0-branch/profiles/mono-mac-xamarin/build-root/mono-4.0.0/external/referencesource/System/compmod/system/componentmodel/BackgroundWorker.cs:105
at System.ComponentModel.BackgroundWorker.WorkerThreadStart (System.Object argument) [0x0000d] in /private/tmp/source-mono-mac-4.0.0-branch/bockbuild-mono-4.0.0-branch/profiles/mono-mac-xamarin/build-root/mono-4.0.0/external/referencesource/System/compmod/system/componentmodel/BackgroundWorker.cs:245
These items should be disabled if the serial port is not available in the system.
Did not check on other platforms.
User 'Utopia' from The Land Down Under has a request for a useful feature:
The ability to see the list of ROMs as a simple text file.
TBD: Exactly what is contained in the file. Initial idea:
Game Name | ROM Filename | ROM Format | ROM location on disk
Formatting this could be a challenge, since there are no meaningful limits on file name and path length, aside from those imposed by the OS. Perhaps using a 'bar' as above would be OK, and padding things for game name, filename, and format out with spaces to match longest name to make it easily readable. A more traditional separator like comma or tab could also be used.
Need to support sorting items in menu layout same as other platforms.
N/A
Golly, that might be useful to have in the error report, eh?
Application version number should be in the error report.
It ain't.
What? This app crashes? Heavens to Betsy, how could that happen?
N/A
NOTE: The full version including modified files should be reported, not just the numeric part of the version.
Have a specific ROM on cart that never seems to sync from cart to PC correctly. Always reports an error.
macOS 10.10.5
1.0.0.2910
It works regardless of file location.
It does not. Must be located next to jzintv binary.
It may be related to path to ECS.bin. Try using a folder named something like "EXEC & GROM files"
Sure would be handy.
It was a nifty experiment, but the GTK version is going to need a full-on dialog similar to the Mac version.
All
Any that includes jzintv support
N/A - feature request
Recordings, et. al. show up somewhere
Use features in jzintv that produce output files.
N/A
Need to more deliberately investigate the behaviors here and see what's already supported in jzintv.
User had a menu layout that referred to a file that does not exist. In the current beta, the result of this was that it became impossible to add new ROMs to the menu! It resulted in errors about being unable to find ... the ROM that was being added. o.O
Need to have context menus in the ROM list and Menu Layout.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.