Coder Social home page Coder Social logo

intvsteve / vintage Goto Github PK

View Code? Open in Web Editor NEW
3.0 1.0 1.0 47.37 MB

Various Intellivision-related projects, including the LTO Flash! User Interface application.

License: GNU General Public License v2.0

C# 88.59% Batchfile 0.21% Makefile 0.66% Shell 0.01% HTML 2.06% Rich Text Format 0.20% Inno Setup 8.27%
lto-flash vintage intellivision flash-cartridge multicart multi-cart jzintv flash-cart intellicart

vintage's People

Contributors

intvsteve avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

Forkers

mozgwar

vintage's Issues

Typo in error message

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

UserSpecifiedProgramInformation.set_Title behaves oddly

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...

ProgramDescription.CompareToIProgramDescription does not behave as expected

Operating system version

N/A

Program version (from About box)

N/A

Expected behavior

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.

Actual behavior

operator == returns true

Steps to reproduce

Create two ProgramDescription objects with different Information within them, different CrcData, but null ROM arguments passed to the constructor, and then compare them.

Crash log if available (paste or attach)

N/A

During ROM add provide hook to auto-config jzintv

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.

Switching between LTO Flash! devices does not update menu information

Operating system version

Windows 10

Program version (from About box)

Development version (and likely all previous versions)

Expected behavior

Device name and usage counts above the menu layout should match what's actually on the newly connected device.

Actual behavior

Information is stuck to the very first device that was connected.

Steps to reproduce

Connect LTO Flash! device A, then connect LTO Flash! device B and switch to it.

Crash log if available (paste or attach)

N/A

jzintv: Copy it out to a more public location?

Operating system version

All (but initially on Mac)

Program version (from About box)

Any that includes jzintv.

Expected behavior

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.

Actual behavior

jzintv runs in place

Steps to reproduce

Run the included jzintv

Crash log if available (paste or attach)

N/A

Offer more versatility in managing JLP flash forks

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:

  1. That a save data fork is present on the device
  2. Offer an option to retain even when updating the ROM
  3. Offer an option to clear the save data fork

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.

Sort ROM list

Need to support same ROM list sorting features as other platforms.

Identify compression libraries to use

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.

Fix up some icons

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.

  • Generic LTO Flash! icon
  • Get Menu from LTO Flash! icon
  • Send Menu to LTO Flash! icon
  • Disconnect from LTO Flash! icon
  • Find LTO Flash! Devices icon

LUI crashes when run under Guest account

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.

In the serial port selection dialog, it would be nice to offer some more info...

... 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".

Purge ObservableCollection from Models

Operating system version

All

Program version (from About box)

N/A

Expected behavior

Don't use ObservableCollection in the Model.

Actual behavior

Code uses ObservableCollection in the Model.

Steps to reproduce

It's in the code.

Crash log if available (paste or attach)

N/A

Crash in xp accessing jzIntv Intellivoice, ECS, JLP settings in Ribbon

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)

jzintv Keyboard Hackfile path not working?

Operating system version

macOS 10.10.5

Program version (from About box)

1.0.0.2910

Expected behavior

Keyboard hack file is used

Actual behavior

It is not

Steps to reproduce

Try a custom keyboard hackfile.

Workaround

Add --kbdhackfile argument manually.

Menu Layout shows device owner, not device name

Operating system version

Windows 10

Program version (from About box)

n/a (development version)

Expected behavior

Menu layout shows device name.

Actual behavior

Menu layout shows device owner.

Steps to reproduce

Connect LTO Flash! and observe text after Menu Layout: block.

Crash log if available (paste or attach)

N/A

Need to fix file perms in Mac rom_merge

Operating system version

macOS - all versions

Program version (from About box)

N/A

Expected behavior

rom_merge is executable

Actual behavior

rom_merge does not have execute permissions

Steps to reproduce

Sync from GitHub

Crash log if available (paste or attach)

N/A

Export Menu Layout to simple text file

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.

Some ROMs return year of -1 from intvname

Operating system version

N/A

Program version (from About box)

N/A

Expected behavior

Something better than -1

Actual behavior

Get year of -1 for some ROMs

Steps to reproduce

N/A

Crash log if available (paste or attach)

N/A

ROM files with more than one period in them may not work correctly when added to cartridge.

Operating system version

Any

Program version (from About box)

1.0.0.2918

Expected behavior

Ms. Pac-Man and Ms. Night Stalker should both play correctly from cartridge.

Actual behavior

They don't.

Steps to reproduce

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.

Crash log if available (paste or attach)

N/A

There may be unwanted prompts for >1 LTO Flash! connected

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.

Prompt for firmware upgrade does not happen on device connect

Operating system version

Ubuntu 16.04.2

Program version (from About box)

N/A

Expected behavior

Device needing firmware update prompts when connected, as that's what the user settings dictate.

Actual behavior

The upgrade firmware prompt does not occur if the 'Reconcile device menu with local menu setting is on.

Steps to reproduce

  • Turn on the user preference to compare device and local menu when device connects.
  • Connect a device that needs a firmware upgrade
  • Note lack of dialog prompting for firmware upgrade

Performance when LTO Flash! attached is S-L-O-W!

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

Crash whenever progress bar appears in macOS High Sierra

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

macOS: Strange leak reported in debugger

Operating system version

macOS 10.8.5

Program version (from About box)

N/A

Expected behavior

No leak.

Actual behavior

An occasional leak.

Steps to reproduce

Unclear. Noticed it when holding down Cmd+R to refresh ROMs list.

Crash log if available (paste or attach)

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.

Error report for missing file does not contain valid information.

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:

  1. Error reports only the filename of the entity that cannot be found (fork file path)
  2. Error is not reporting the actual file path that cannot be found, but that of a different variable in the code

On Mac, some Intellicart features enabled when serial port not in system

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:

  • You can still try to play games on Intellicart
  • When you do try to use Intellicart, you get big evil error messages like this one:

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.

Export ROM list to simple text file

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.

Sort menu items

Need to support sorting items in menu layout same as other platforms.

Include application version in error reports

Operating system version

N/A

Program version (from About box)

Golly, that might be useful to have in the error report, eh?

Expected behavior

Application version number should be in the error report.

Actual behavior

It ain't.

Steps to reproduce

What? This app crashes? Heavens to Betsy, how could that happen?

Crash log if available (paste or attach)

N/A

NOTE: The full version including modified files should be reported, not just the numeric part of the version.

ECS ROM path for jzintv not working?

Operating system version

macOS 10.10.5

Program version (from About box)

1.0.0.2910

Expected behavior

It works regardless of file location.

Actual behavior

It does not. Must be located next to jzintv binary.

Steps to reproduce

It may be related to path to ECS.bin. Try using a folder named something like "EXEC & GROM files"

Crash log if available (paste or attach)

jzintv: Integration should support setting location for movies, screen shots, sound recordings

Operating system version

All

Program version (from About box)

Any that includes jzintv support

Expected behavior

N/A - feature request

Actual behavior

Recordings, et. al. show up somewhere

Steps to reproduce

Use features in jzintv that produce output files.

Crash log if available (paste or attach)

N/A

Need to more deliberately investigate the behaviors here and see what's already supported in jzintv.

  • Are any of these already configurable
  • What are the implications if working directory is provided
  • Consider adding features to jzintv directly

Context Menus

Need to have context menus in the ROM list and Menu Layout.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.