Yamaha PSS 480 (should work for 580, 680 and 780 too)

Yamaha PSS480 patch for Electra One

A patch to control the Yamaha Portasound/Music Station PSS480, and OPL2 YM3812-based FM synthesiser with two operators by Hardingmål.

This should also work for similar OPU2 YM3420 keyboards in the series such as the PSS580 as it’s supposedly a re-release of the PSS480, as well as the PSS680 and PSS780. That said, I have not tested the patch directly with them. If it works with these, please let me know on the forum, user Hardingmal, and I’ll confirm function here.

MAIN CONTROLS

All main controls are mapped here on a single page and are quite self-explanatory. If in doubt, twist some knobs and get a feel for it!

The second page splits the controls differently, putting both envelopes on a row and both sets of main controls on a row, so it’s up to you which prefer.

It also allows you to set the main target user bank, plus you can also scroll through the standard stock patches here if you like using the PROGRAMME control.

The patch data will always be sent to the targeted user bank.

SNAPSHOTS

Because of the limitations of the PSS480, it’s best to use the SNAPSHOT function in the Electra One to store and manage your patches, this will be a little easier than relying on the 5 banks in the PSS and its battery backup.

GENERAL BEHAVIOUR

The Yamaha PSS480 has a strange implementation of SysEx where the entire patch is sent with every adjustment, followed a programme change, only after this can the change can actually be heard.

As a result changes are only sent when you stop touching the Electra One knob. This is per-knob, so if you’re accidentally in contact with another knob, don’t worry, it won’t prevent the current adjustment from being sent.

This is to stop the MIDI buffer overflowing and causing an “Err” error state on the keyboard, or possibly overloading the Electra One and other devices in the chain with a massive backlog of MIDI data, both of which happened in testing.

TECHNICAL NOTES

Touch Screen - Sending when you release a knob is done by subscribing to POT EVENTS. As there’s currently no touch screen event I can find, touch controls won’t send to the device til you quickly tap a pot.

Patch Dump - Patch dump is manual on the PSS480, as the PSS480 does not have a dump request that I could find. If possible I will implement a manual system, where you the patch request button on the Electra One, then press patch dump on the PSS480 until the screen is flashing, then press YES (the plus button). This will dump the current patch into the Electra One. As it stands the dumped SysEx seems a little odd compared to the sent, so this is not currently hooked up as I was struggling to work it out, but I may revisit it.

Multi-timbrality - In the controlled MIDI mode, the PSS480 can technically be multitimbral, responding to multiple MIDI channels controlling multiple patches, but still with the same 12-voice polyphony. Due to the massively increased complexity of this and the limited use in a modern production context, it is not implemented here.

Key Scales - Key scaling is currently as it is depicted in the manual, where zero is off, and other figures are somewhat arbitrary. I may return to make these figures make more sense throughout the knob turn.

V1.0 - 28th April 2024 - Initial release.

1 Like

As a technical note, I’m using this within the main virtual control function to only send when the pot is released. It works well, but it would be nice to have a similarly neat function for touch screen events too, as I often like to tap switches on the screen. As it is a knob must be touched afterwards to send the patch:

    function events.onPotTouch(potId, controlId, touched)
        if touched == false then
            midi.sendSysex(portNum, sysexArray)

            local control = controls.get (5)  -- USER BANK SELECTION - get a reference or this control
            local valueObject = control:getValue ()
            local message = valueObject:getMessage ()
            userBank = message:getValue () --Store the MIDI value of the user bank, which is 100 to 104
            midi.sendProgramChange(portNum, midiChannel, userBank)
        else 
        end
    end

The preset is, in effect, entirely Lua, using one virtual-control function for all knobs aside from the bank controls.

It is heavily commented in case that helps future developers with other presets.

1 Like

hi @Hardingmal maybe I’m the only one still using this piece gear besides you!

well actually I have the pss580 and today tried to use your preset within the E1 mk2 and sadly isn’t working as expected…some control works weirdly but in general it doesn’t and also the E1 crashed several times…not sure why but I had to unplug all of the other devices connected to the E1 leaving the pss only to avoid crash…

well I have to say I’m new to the lua and sysex world so maybe doing something wrong

in brief I only changed the midi ch to 8 in the preset to avoid any conflict and setup the pss to receive from ch8 in sound source mode…nothing else

it receives the midi notes and some control works like user bank and program selectors but only when the pot is touched, so if turn the pot it changes the voice number until I left the pot then goes back to default voice…

do you have any suggestion maybe regarding the device id to set somewhere in the lua code or something else I can check to make it correctly work?

thanks

vins

Hey!

I’ve not actually updated the E1 Mk ii in almost a year and a half, since I made the patches, I’ve not made new ones for a while.

Which firmware version are you on?

using the 4.0

This was made on 3.6, perhaps the Lua has changed up to version 4? I’ll have to investigate that…

ye it could be

thanks to answer

Please let me know if the issue was caused by the 3.6 → 4.0 upgrade. Both versions should be full compatible. If there was a problem, I would like to review it. Thanks!

2 Likes

Ace, I’ll need to update it first, I should get some time to myself within the week :+1:

2 Likes

any news on this?

Hey! I’ve been on a project so not been able to get to it yet, it’s on the list though :+1:

1 Like

ok ok no rush

thanks

OK I can update it in the next couple of days. How should I do this? I think I need to update the bootloader first, then to 4.0?

  1. update the firmware to v4.x using the USB disk mode in current bootloader: Firmware update with the bootloader
  2. once firmware 4.x is installed and running, update the bootloader to v1.1: Bootloader update
  3. After the bootloader v1.1 is installed, you will be able to run future firmware updates from the browser

Thanks, that’s updated now, and I’ll test the patch again ASAP

1 Like

It’s all updated now, I checked when it was on 3.6 and everything worked.

Now it’s on the latest, 4.1.1, data isn’t being sent any more. The bank changes work (if you look at my Lua you can see it’s a separate section, it’s extensively noted too with my thought process and how the patch works) but the main control section has stopped functioning.

The good news is that they keyboard does flash to say it’s receiving data when the knob is released, and doesn’t flash ERR for error, but none of the controls function now.

I’m not quite sure where to start debugging this, but am happy to do it if you have any pointers of where I’d start?

This was similar behaviour to before I managed to get the checksum working, I wonder if the correct syntax for that has changed in some way?

I would guess that if we can get it working for 480 it should work for the 580 and others, as they are supposed to be internally identical.

1 Like

Hi, thanks for the info. I will take a copy of your preset and will do some review first by myself. There was not any intended change in compatibility between 3.6 and 4.x.

If I understand that correctly, the control on the controller screen work as intended. The keyboard indicates that it receives the data, but the sound parameters (on the keyboard) are not affected. Is that correct?

That’s correct, only the bank and patch control works now (which is a standard MIDI function) they sysex-based patches are now just ignored, though the keyboard flashes to say it’s receiving data.

I’ve plugged into an RME and it’s all sending sysex and patches etc, so makes me think the Lua patch etc is fine, and there’s something changed in the E1 setup that I’ve missed that’s changed?

1 Like

you are doing what I wanted to do :slight_smile: If you pick one parameter and you change it 1) on 3.6. and then 2) on 4.x. Does it send identical sysex messages?

a quick question: is it safe for me to downgrade to 3.6 to test? I still have it and 4.1 stored in disk mode in the E1 Mk ii