-
Notifications
You must be signed in to change notification settings - Fork 2.2k
Improve Ensoniq VFX-family display #14131
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
5de0022
to
1980286
Compare
IMO commits in esqpanel related to the web interface and the attached javascript file should be limited to life support (eg. fixing a critical bug) or gradually removing things. I hope MAME will eventually have internal artwork (.lay files) for these and the web interface can be removed. Maybe even emu/http.* can be removed too if we have no use for it anymore. Regarding adding digit segment SVGs to MAME: |
I disagree: I find the web interface to be very useful. It allows someone to simulate these keyboards in a way that basically matches how one would use the real thing: with a PC running the emulator, a MIDI keyboard for the, well, keyboard input, and the control control panel available through the web interface on a tablet together with the MID keyboard. Accessing the control panel in the web browser can be done on a phone or tablet that has a multi-touch capable display, even when people don't have a touch-capable main screen, so that makes it that much more accessible to actually use. And the Ensoniq VFX family of keyboards certainly have button press combinations that are fairly far apart: "Preset" + "Compare" is used to show analog values, for example. So as I don't have a touch screen on my PC where I'm developing this, I can bring up the web interface in my phone to access that button combination that I would otherwise be unable to press.
I took photos of the display on my keyboard, converted them to monochrome, and traced them myself. They are also the same segments already used in the web panel. I actually think their specific shape seems to be largely the result of the manufacturing process, rather than a specific design: if you look, the empty space between the segments is pretty constant. It looks like someone effectively looked at a character cell, and drew thick lines separating the segment, leaving the rest as the actual segments to be lit up.
The brightness in the photo is rather exaggerated due to lighting and my phone camera. I actually did some experiments when I first added the web interface, stroking the segments as well as filling them when they were lit (see https://github.com/cbrunschen/mame/blob/master/web/esqpanel/vfx/FrontPanel.js#L243); but it ended up looking wrong when compared to the real display. |
I don’t want to be going down the path of bundling images for specific display models. I’d rather keep the internal stuff generic and allow people to provide more precise representations of specific models in external artwork if they want to. The current internal web server implementation (actually the second iteration) is problematic in many ways. But a big problem with system-specific stuff in it right now is that it’s effectively unmaintained, and hence likely to rot. It’s too far outside what most MAME developers are going to test, so realistically, it won’t be updated for code changes. |
ca02288
to
5b8eb94
Compare
The main aim of the refactoring for the VFX family was to consolidate the panel command processing into the But in order to not remove functionality that I'm currently using, the ability to interact with the emulated keyboard, i.e., to prevent breakage of something that was fundamentally working, FrontPanel.js has to be able to handle some simpler, lower-level instructions from That's all that I'm doing to the web interface. It doesn't change the level of integration. If anything, the lower-level instructions would be easier to implement in something other than a web interface, since they don't require the command processing that has now been consolidated into the |
643b027
to
f23d124
Compare
I've updated this to replace the web interface with a much simpler external panel device, which runs a small Separately I have a small project that talks to this new external panel and presents the web interface, as a working proof of concept as well as for my own actual use. Once these changes land I will of course make that available (and am happy to share privately before that, too). |
…ady" message is shown, by clearing the screen and ignoring things otherwise. This seems to behave much like the real display does.
…ses. Specifically, introduced a new display class that uses the NEC FIP80B5R layout, so that it visually matches the display within the HTTP front panel. Also, move its command parsing code into the corresponding panel class, which already handles command parsing for the keboard processor, lights attached to buttons, thus collecting that processing in a single place. This also makes it eaier to handle commands differently, as they commands differ between keyboards, even those that have the same display. Simiilarly, simplify the FrontPanel.js code so that it, too, no longer parses the command stream from the CPU, but insteadis a much simpler extrnal panel display - effectively making it also match the new VFX-family VFD class.
… nec_fip80b5r layout.
… an led14seg element, a doit element and an underline one. led14segsc would add a redundant and inaccurate "comma tail".
… the Ensoniq keyboards. Instead, add a new external panel class, that runs a simple asio-based TCP socket server, heavily based on cps2comm, that will serve one client at a time. This uses the existing comm_local{host,port} flags to specify where to listen for connections.
…end them to the external panel.
… reproducing the panels quite closely. UI elements are kept in sync between the internal, layout-based panel, and any external panel.
717c3c0
to
d063694
Compare
Some more updates that might please some: Layout-based front panels. Spacing of elements etc based on measuring my real VFX-SD and SD-1/32. These work together with the external panel (which is no longer web based, as before), such that each shows any buttons that are pressed the other, and of course also the Volume and Data Entry sliders. The panels are similar but different enough that I actually write a small program that can generate all three variants. Any comments would be greatly appreciated. |
Wow! These are looking amazing! |
And, to be honest, it was the very first time I was able to try playing music with these drivers and they sound fantastic as well! When they lacked internal layout, they were counter-intuitive to use and the web front-end was too hard to setup (I remember I had tried and failed!). Don't get me wrong! I think the web-based UI has its legitimate uses as you already described, and we should not close that door. But having functional internal layout is more important, so that more people can easily use it. And I see this PR moving in the right direction. Great work being done here! |
I'm glad you like the panels! I do too. I've never had any trouble accessing the web frontend: I build MAME, run one of the VFX-family of keyboards with the simplescreenrecorder-2025-09-16_19.41.17.mp4But be that as it may, this PR now removes that integration so the point is rather moot. I can understand not wanting MAME to include something as unrelated as an entire web server. |
This adds a layout for the NEC FIP80B5R display as used in various Ensoniq keyboards; this layout is based on traced segments from photos of an actual display.
Before:
After:

Photo of real display:

It also refactors the display & panel classes used by the VFX family of keyboards, consolidating display command processing into a single place.
This makes minimal changes to related display & panel classes for other related keyboards, so as to not disturb in particular the recent excellent changes to the ESQ1 (and SQ80) keyboard panel, which inspired me to try to start some improvements for the VFX family as well.