Creative Prodikeys DM PS/2 keyboard

Talk about your MIDI interfaces, microphones, keyboards...

Moderators: MattKingUSA, khz

Post Reply
jmph
Established Member
Posts: 11
Joined: Tue Jan 21, 2014 10:50 pm

Creative Prodikeys DM PS/2 keyboard

Post by jmph »

Hey all,
I have a Creative Prodikeys DM on my machine. It looks like this:
Image

It plugs into the PS/2 port (only!) and uses a driver to translate its PS/2 inputs to MIDI messages. I love the form factor and the idea behind it, unfortunately there is no Linux support.

I'm looking to figure out how this hybrid MIDI/QWERTY keyboard works and maybe see about bodging together a MIDI driver for it. There is a module HID-Prodikeys but it's old (not really updated since the 2.6 kernel era) only supports the later USB version of this keyboard.

What works on a standard Linux machine with no additional modules loaded:
- all normal QWERTY keys
- the volume wheel & mute button
- next/previous track, play/pause & stop buttons

All of those functions show up as events when I cat /dev/input/event2 as well.

What doesn't work:
- the piano (MIDI) keys
- pitch bend / sustain / octave shift buttons
- any of the programmable buttons

So that's it for support right now. There don't seem to be any published specifications on how this thing works. I'm hoping to find some expert help on reverse engineering it, maybe using the USB driver as reference, and cobbling something together that makes it show up as a MIDI input device to the system.

If anyone can offer me pointers on how to read what the MIDI keys or extra buttons are sending, so I can see what kind of messages it's delivering to the system, that would be a good place to start.

Any help with this project is appreciated!
aciez
Posts: 2
Joined: Mon Jul 25, 2016 7:00 pm

Re: Creative Prodikeys DM PS/2 keyboard

Post by aciez »

I bought these too and now realized that there are drivers but for the PC-Midi version and not for this one.
Seems to me like pressing the midi keys should be sending keycodes like for normal keyboard presses.

There's a file called /dev/psaux which from what I read corresponds to the PS/2 mouse port. Maybe it's possible to read raw data from there.
aciez
Posts: 2
Joined: Mon Jul 25, 2016 7:00 pm

Re: Creative Prodikeys DM PS/2 keyboard

Post by aciez »

Maybe something has to be written to the PS/2 port so the MIDI keys activate
jmph
Established Member
Posts: 11
Joined: Tue Jan 21, 2014 10:50 pm

Re: Creative Prodikeys DM PS/2 keyboard

Post by jmph »

Hey guys! Sorry I never followed up on this. Anyway, bumping the thread back up as I finally opened mine up to see how it works.
aciez wrote:Maybe something has to be written to the PS/2 port so the MIDI keys activate
I *believe* this is the case... unfortunately, I have no idea *what* to write. I thought of installing the official Windows drivers on a Win95 laptop I have and trying to run a port logger, but haven't tried yet.

It's actually super easy to open up. Just remove the 12(!) screws around the outside and pop the cover off. You don't even need to dig under the label. Also, it's built like a tank.
Image

There are apparently NO photos of the inside of one of these on the web... Until now. Enjoy this exclusive world first:
Image
...yeah, kinda what I was hoping. Pretty simple device.

Image
^^ Not much to the top side of the control circuit board. Lots of dodgy Chinese sellers claim to have the Creative CA0300-DAD chip "in stock" but none of them want to cough up the datasheet. I think it's the ROM.

The two ribbon cables are for the QWERTY keybed and "special" keys (start/stop/play, sustain, octave shift, programmable keys, etc.) topside. On the right, the white connector (CON2) goes to a simple board that holds the pitch bend & volume wheel. The loose soldered wires (CON1) are the PS/2 plug and the big fat ribbon on the bottom is for the piano keys. More on that shortly...

Image
^^ Unfortunately it doesn't seem possible to disconnect these ribbon cables without damaging them. That would have made my life easier.

Image
Image
The piano keybed is a DEAD SIMPLE diode matrix type with a rubber membrane. It isn't velocity sensitive or anything. It would be virtually trivial to bodge an external DIN5 MIDI port onto this using a Highly Liquid UMR2 or even an Arduino. (Why the hell did I sell my UMR2 last year??) However, that would lose the functionality of the pitch bend wheel & fast octave shift keys, and the ability to plug this into the PS/2 port of anything regardless of whether it even had a MIDI interface. But at least that option's there.

Image
Finally, here's the topside of the circuit board. I was a little surprised to find *three* identical Philips microcontrollers (P87C52X2BA.) The little TI chip is a 7407 logic gate and the SEC chip is a KA558D2 quad timer. And that's it!

SO... for starters, any pointers how I would go about dumping that ROM?
hotkey
Posts: 2
Joined: Sun Jun 16, 2019 5:12 pm

Re: Creative Prodikeys DM PS/2 keyboard

Post by hotkey »

In case anyone is interested in some technical details: I have just hooked up an Arduino to the PS/2 lines and analyzed the data which is sent between an old WinXP machine and the Prodikeys DM.

After a normal power-up the Prodikeys DM act as a regular keyboard and do not send any data when pressing the piano keys, the shortcut keys or using the pitch-bend. These MIDI functions have to be activated using some "keyboard protocol magic". That's what the "ProdLoad.exe" does on system start up. It sends some commands similar to the ones used by the operating system to toggle the NumLock/CapsLock/ScrollLock-LEDs on or off. However, they are not passed on to the keyboard when it is connected using a PS2-to-USB-converter (I do not even know if the USB-HID-API allows for sending any custom data to the keyboard) :(

However, I have reverse-engineered the protocol and the PS/2 hardware is pretty easy to work with, so it should be easily possible to build a Prodikeys-to-MIDI/USB converter based on an Arduino UNO! :P

Here is the most important part: Activating the MIDI functions

Code: Select all

Host    Keyboard
====    ========

0xE8
        0x23

0xE8
        0x23

0xE4
        0xFA (ACK)
0x15*
        0xFA (ACK)
* = Functions are 0x04=start, 0x05=wake, 0x15=resume, 0x16=shutdown

Ask me if you need more information. I will update this post once I have some code on my Github.
Cheers!
Attachments
Prodikeys_PoC_Arduino.zip
(8.47 KiB) Downloaded 162 times
hotkey
Posts: 2
Joined: Sun Jun 16, 2019 5:12 pm

Re: Creative Prodikeys DM PS/2 keyboard

Post by hotkey »

Good news!

I have created a proof-of-concept ProdikeysDM-to-USB adaptor out of a regular Arduino UNO R3 (with its on-board secondary ATMEGA32u2 co-processor) and requires no additional parts 8)

How it works:
The main controller (ATMEGA328P) is connected to the PS/2 lines of the ProdikeysDM (CLK to PIN3, DATA to PIN4) and emulates a PS/2 host for the keyboard. It also sends the "magic" initialization bytes which activate the MIDI functions. All key presses and MIDI events are read by the Arduino and passed through to the UART RX/TX lines to the USB controller.

Using the LUFA framework I have created an USB firmware which can be flashed to the USB controller (ATMEGA32U2) of the Arduino so it no longer shows up as an Arduino, but reports as a combined USB HID Keyboard and USB MIDI device! :D

You can find the project at https://github.com/hotkeymuc/ProdikeysDM_Adaptor
At the moment the MIDI works great, but the regular keyboard functions are not yet working (pressing random keys).

Cheers!
nervesagent
Posts: 1
Joined: Tue Nov 05, 2019 9:29 am

Re: Creative Prodikeys DM PS/2 keyboard

Post by nervesagent »

Is anyone still toying with this? I have the Prodikeys DM PS/2 keyboard and looking to use the piano keys in my DAW on Windows 10 64bit.
I've tried using a sendkeys script to "activate" the piano keys, but I think I may be doing it wrong. Also, if the device is sending "midi", don't I need a midi (dummy) device driver to interface with the daw?

From what I understand this should be possible just using the ps/2 port on my Win10 machine without converting to USB and using an Arduino right?
Post Reply